<?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>47761</bug_id>
          
          <creation_ts>2010-10-15 18:22:58 -0700</creation_ts>
          <short_desc>Rebaseline server tool</short_desc>
          <delta_ts>2010-12-06 15:14:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>48892</dependson>
    
    <dependson>49626</dependson>
    
    <dependson>49640</dependson>
    
    <dependson>49692</dependson>
    
    <dependson>49763</dependson>
    
    <dependson>49841</dependson>
    
    <dependson>49991</dependson>
    
    <dependson>50207</dependson>
    
    <dependson>50305</dependson>
    
    <dependson>50421</dependson>
    
    <dependson>50473</dependson>
    
    <dependson>50484</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihai Parparita">mihaip</reporter>
          <assigned_to name="Mihai Parparita">mihaip</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>jamesr</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>tonyg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>295080</commentid>
    <comment_count>0</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-10-15 18:22:58 -0700</bug_when>
    <thetext>For mass rebaselines (Leopard -&gt; Snow Leopard, SVG changes, Skia changes), etc. it would be nice to be able to update baselines locally en-masse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295081</commentid>
    <comment_count>1</comment_count>
      <attachid>70938</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-10-15 18:23:35 -0700</bug_when>
    <thetext>Created attachment 70938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295098</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-15 19:08:29 -0700</bug_when>
    <thetext>nice! I&apos;ve often thought about writing a script that did exactly this ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295534</commentid>
    <comment_count>3</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-18 09:03:35 -0700</bug_when>
    <thetext>I like the use of a local httpd to handle the file copies.  I&apos;m happy to review this once you&apos;re happy with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298007</commentid>
    <comment_count>4</comment_count>
      <attachid>71568</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-10-22 09:23:32 -0700</bug_when>
    <thetext>Created attachment 71568
Patch

Progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298308</commentid>
    <comment_count>5</comment_count>
      <attachid>71619</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-10-22 21:54:57 -0700</bug_when>
    <thetext>Created attachment 71619
Patch

More progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298310</commentid>
    <comment_count>6</comment_count>
      <attachid>71621</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-10-22 22:47:26 -0700</bug_when>
    <thetext>Created attachment 71621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298311</commentid>
    <comment_count>7</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-10-22 22:48:09 -0700</bug_when>
    <thetext>(notes for anyone interested in trying this)

Current usage:
1. Make a change that requires lots of (pixel) rebaselines
2. Run new-run-webkit-tests --tolerance 0 --pixel-tests [path/to/tests]
3. Run webkit-patch local-rebaseline /path/to/tests/results (usually WebKitBuild/{Debug|Release}/layout-test-results
4. Go to http://localhost:8127/

In the future, it probably also makes sense to allow a results zip file to be pulled from a bot, so that you can do mass rebaselines for other platforms too.

In the web UI (which requires a 30 inch display), you can use the menus at the top to select tests by failure type and directory. Once you have a set of tests selected, you can navigate between them with the « and » buttons, or by using the left and right arrow keys.

For a particular test, the current and expected outputs will be displayed, along with a diff. For image diffs, you can click anywhere in the images to get a &quot;loupe&quot; that lets you see pixel values up close.

You can use the two drop-downs at the bottom of the screen to choose what you want done with the baselines. The baseline target is where the test outputs should be copied to. If moving between platforms, you may wish to move current baselines to another directory (e.g. if updating current Mac baselines for Snow Leopard, you would set the target to &quot;mac&quot; and move current baselines to &quot;mac-leopard&quot;).

Once you&apos;ve determined that baselines should be updated, you can use the &quot;Add to rebaseline queue&quot; button (or the q key) to add it to the list. Once you&apos;ve added enough tests to the queue (commits probably shouldn&apos;t get any bigger than ~250 baselines), you show the queue with the &quot;Queue&quot; link and use the &quot;Rebaseline tests&quot; button (or the r key). You can watch the progress in the log area (toggled by the link in the upper right).

The tool uses scm.py to move baselines around and mark them for addition/move, but I&apos;ve only tried it in git checkouts so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298313</commentid>
    <comment_count>8</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-10-22 22:49:28 -0700</bug_when>
    <thetext>+Ojan since he&apos;s interested in making rebaselining less painful too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298323</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-22 23:47:01 -0700</bug_when>
    <thetext>Hum...  I&apos;m having trouble using the tool because I don&apos;t have a results.json.  It doesn&apos;t seem to be included in the zip from the bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299118</commentid>
    <comment_count>10</comment_count>
      <attachid>71799</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-10-25 14:52:36 -0700</bug_when>
    <thetext>Created attachment 71799
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299120</commentid>
    <comment_count>11</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-10-25 14:57:08 -0700</bug_when>
    <thetext>For anyone wanting to use this to help with rebaselining of pixel tests for Snow Leopard:
1. webkit-patch apply-attachment 71799
2. Claim a directory from https://spreadsheets.google.com/ccc?key=0AkV6W8Td7jGwdFpFdzJLNzZXNFZkVmhXYmlNVS1PZVE&amp;hl=en&amp;authkey=COyB-LwN
3. new-run-webkit-tests --tolerance=0.0 --pixel-tests directory/you/picked
4. webkit-patch local-rebaseline WebKitBuild/Debug/layout-test-results
5. Go to http://localhost:8127
6. Set the baseline target as &quot;mac&quot; and move current baselines to &quot;mac-leopard&quot;

For now,  rebaseline only tests that have text anti-aliasing differences or HTML color name differences. Have no more than 100 tests per patch. See comment 7 for details on how to use the tool UI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300779</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-27 18:32:46 -0700</bug_when>
    <thetext>Yay!  I got it to work.  Pretty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301544</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-10-28 19:57:47 -0700</bug_when>
    <thetext>I updated the fast/table Snow Leopard expectations with this: http://trac.webkit.org/changeset/70835.  Worked beautifully!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302016</commentid>
    <comment_count>14</comment_count>
      <attachid>72384</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-10-29 13:47:00 -0700</bug_when>
    <thetext>Created attachment 72384
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303140</commentid>
    <comment_count>15</comment_count>
      <attachid>72614</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-01 18:15:40 -0700</bug_when>
    <thetext>Created attachment 72614
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303822</commentid>
    <comment_count>16</comment_count>
      <attachid>72778</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-02 17:52:15 -0700</bug_when>
    <thetext>Created attachment 72778
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304954</commentid>
    <comment_count>17</comment_count>
      <attachid>72996</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-04 15:58:06 -0700</bug_when>
    <thetext>Created attachment 72996
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304955</commentid>
    <comment_count>18</comment_count>
      <attachid>72996</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-04 15:59:11 -0700</bug_when>
    <thetext>Comment on attachment 72996
Patch

Oops, this ended up on the wrong bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317867</commentid>
    <comment_count>19</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-12-06 15:14:50 -0800</bug_when>
    <thetext>The tool is now checked in (thanks to Tony doing lots of reviews). I&apos;ve also written up https://trac.webkit.org/wiki/RebaselineServer with instructions on how to use it. Feel free to file bugs and cc me on them if you notice any bugs or limitations.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70938</attachid>
            <date>2010-10-15 18:23:35 -0700</date>
            <delta_ts>2010-10-22 09:23:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47761-20101015182334.patch</filename>
            <type>text/plain</type>
            <size>32692</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA2YTRjM2EzZjNlOGFmZWVmMTMwZmU5NmQ2MDk0Mjk3MjE4ZTFkYWQ1Li5hNDk2ZWVk
M2M5NzY3MTVhZTQxMzBjMjE4MTEyZDI5NWYyY2NkNjFkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAK
KzIwMTAtMTAtMTUgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTG9jYWwgcmViYXNl
bGluaW5nIHRvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ3NzYxCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19p
bml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEv
bG9jYWxyZWJhc2VsaW5lL2luZGV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9tYWluLmpzOiBBZGRlZC4K
KyAgICAgICAgKCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKGRpc3BsYXlSZXN1bHRzLmZv
cik6CisgICAgICAgIChkaXNwbGF5UmVzdWx0cyk6CisgICAgICAgIChzZWxlY3RGYWlsdXJlVHlw
ZSk6CisgICAgICAgIChzZWxlY3REaXJlY3RvcnkpOgorICAgICAgICAoZ2V0U2VsZWN0ZWRUZXN0
KToKKyAgICAgICAgKHNlbGVjdFRlc3QpOgorICAgICAgICAodXBkYXRlU3RhdGUpOgorICAgICAg
ICAoZGlzcGxheUltYWdlUmVzdWx0cyk6CisgICAgICAgIChkaXNwbGF5VGV4dFJlc3VsdHMubG9h
ZFRleHRSZXN1bHQpOgorICAgICAgICAoZGlzcGxheVRleHRSZXN1bHRzKToKKyAgICAgICAgKG5l
eHRUZXN0KToKKyAgICAgICAgKHByZXZpb3VzVGVzdCk6CisgICAgICAgIChzaG93TG91cGUpOgor
ICAgICAgICAoZmlsbExvdXBlLnJlYWRQaXhlbENvbXBvbmVudCk6CisgICAgICAgIChmaWxsTG91
cGUpOgorICAgICAgICAoaGlkZUxvdXBlKToKKyAgICAgICAgKGxvZyk6CisgICAgICAgICh0b2dn
bGVMb2cpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9sb2NhbHJl
YmFzZWxpbmUucHk6IEFkZGVkLgorCiAyMDEwLTEwLTE1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgYnVpbGQ7IG5lZWQgdG8gYWRkIG5l
dyBzbG90IHRvIFBhZ2VVSUNsaWVudCBjYWxsYmFja3MuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18ucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18ucHkKaW5kZXggOWJkZWM4
ZjU5N2UxNzYzNjM0NGE4MTgzYjEwM2ExNTBiZjhjOWRlMy4uMDMzNDQ5NDZlZWNkYzU4ZTdmNTA4
ODY2M2EzZGJlZTIwMTVlMjQ5NyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9fX2luaXRfXy5weQpAQCAtMSw1ICsxLDYgQEAKICMgUmVx
dWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxl
cwogCiBmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMucHJldHR5ZGlmZiBpbXBvcnQgUHJldHR5
RGlmZgorZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmxvY2FscmViYXNlbGluZSBpbXBvcnQg
TG9jYWxSZWJhc2VsaW5lCiBmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMucmViYXNlbGluZSBp
bXBvcnQgUmViYXNlbGluZQogIyBGSVhNRTogQWRkIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kcyBo
ZXJlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1h
bmRzL2RhdGEvbG9jYWxyZWJhc2VsaW5lL2luZGV4Lmh0bWwgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvaW5kZXguaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40NjdlMDMyM2Y4M2EyN2ZlNmNjZDMyNTVkNmM2ZGM4MzgwZTgyNzRmCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L2RhdGEvbG9jYWxyZWJhc2VsaW5lL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwzMTEgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKwk8dGl0bGU+TGF5b3V0IFRlc3QgUmViYXNlbGlu
ZXI8L3RpdGxlPgorCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisJICBib2R5IHsKKwkgICAgZm9u
dC1zaXplOiAxMnB4OworCSAgICBmb250LWZhbWlseTogSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1z
ZXJpZjsKKwkgICAgcGFkZGluZzogMDsKKwkgICAgbWFyZ2luOiAwOworCSAgfQorCSAgCisJICBk
aXYgeworCSAgICBtYXJnaW46IDA7CisJICB9CisJICAKKwkgIGEsIC5saW5rIHsKKyAgICAgIGNv
bG9yOiAjYWFmOworICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgICAgICBjdXJz
b3I6IHBvaW50ZXI7CSAgICAKKwkgIH0KKwkgIAorCSAgI2xvZyB7CisJICAgIHBhZGRpbmc6IC4y
NWVtIDAgMCAuMjVlbTsKKwkgICAgcG9zaXRpb246IGFic29sdXRlOworCSAgICBib3R0b206IDNl
bTsKKwkgICAgcmlnaHQ6IDA7CisJICAgIHdpZHRoOiA1MDBweDsKKwkgICAgaGVpZ2h0OiAzMDBw
eDsKKwkgICAgb3ZlcmZsb3c6IGF1dG87CisJICAgIGJhY2tncm91bmQ6ICNmZmY7CisJICAgIC13
ZWJraXQtYm94LXNoYWRvdzogMXB4IDFweCA1cHggcmdiYSgwLCAwLCAwLCAuNSk7CisJICB9CisJ
ICAKKwkgICNoZWFkZXIsCisJICAjZm9vdGVyIHsKKyAgICAgIHBhZGRpbmc6IC41ZW0gMWVtOwkg
IAorICAgICAgYmFja2dyb3VuZDogIzMzMzsKKyAgICAgIGNvbG9yOiAjZmZmOworICAgICAgLXdl
YmtpdC1ib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLCAwLCAwLCAwLjUpOworCSAgfQorCSAg
CisgICAgI2hlYWRlciB7CisgICAgICBtYXJnaW4tYm90dG9tOiAxZW07CisgICAgfQorICAgIAor
ICAgICNoZWFkZXIgbGFiZWwsCisgICAgI2Zvb3RlciBsYWJlbCB7CisgICAgICBwYWRkaW5nLXJp
Z2h0OiAxZW07CisgICAgICBjb2xvcjogI2NjYzsKKyAgICB9CisgICAgCisgICAgI2hlYWRlciBs
YWJlbCBzcGFuLAorICAgICNmb290ZXIgbGFiZWwgc3BhbiB7CisgICAgICBjb2xvcjogI2ZmZjsK
KyAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIH0KKyAgICAKKyAgICAjbmF2LWJ1dHRvbnMg
YnV0dG9uIHsKKyAgICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAgICBib3JkZXI6IDA7CisgICAg
ICBib3JkZXItcmFkaXVzOiAxMHB4OworICAgIH0KKyAgICAKKyAgICAjbmF2LWJ1dHRvbnMgYnV0
dG9uOmFjdGl2ZSB7CisgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA1cHggIzMzZiBpbnNl
dDsKKyAgICAgIGJhY2tncm91bmQ6ICNhYWE7CisgICAgfQorCisgICAgI25hdi1idXR0b25zIGJ1
dHRvbltkaXNhYmxlZF0geworICAgICAgb3BhY2l0eTogLjU7CisgICAgfQorCisJICAjY29udHJv
bHMgeworCSAgICBmbG9hdDogcmlnaHQ7CisJICB9CisJICAKKwkgICN0ZXN0LW91dHB1dCB7CisJ
ICAgIGJvcmRlci1zcGFjaW5nOiAwOworCSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwor
CSAgICBtYXJnaW46IDAgYXV0bzsKKwkgIH0KKwkgIAorCSAgI3Rlc3Qtb3V0cHV0IHRkLAorCSAg
I3Rlc3Qtb3V0cHV0IHRoIHsKKwkgICAgcGFkZGluZzogMDsKKwkgICAgdmVydGljYWwtYWxpZ246
IHRvcDsKKwkgIH0KKwkgIAorCSAgI2ltYWdlLW91dHB1dHMgaW1nIHsKKwkgICAgd2lkdGg6IDgw
MHB4OworCSAgICBoZWlnaHQ6IDYwMHB4OworCSAgICBib3JkZXI6IHNvbGlkIDFweCAjZGRkOwor
CSAgfQorCSAgCisJICAjaW1hZ2Utb3V0cHV0cyAjYWN0dWFsLWltYWdlIHsKKwkgICAgbWFyZ2lu
OiAwIDFlbTsKKwkgIH0KKwkgIAorCSAgI3Rlc3Qtb3V0cHV0ICNsYWJlbHMgdGggeworCSAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7CisJICAgIGNvbG9yOiAjNjY2OworCSAgfQorCSAgCisJICAjdGV4
dC1vdXRwdXRzIHByZSB7CisJICAgIGhlaWdodDogNjAwcHg7CisJICAgIHdpZHRoOiA4MDBweDsK
KwkgICAgb3ZlcmZsb3c6IGF1dG87CisJICB9CisJICAKKwkgICN0ZXN0LW91dHB1dCBoMiB7CisJ
ICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjY2NjOworCSAgICBmb250LXdlaWdodDogYm9s
ZDsKKwkgICAgbWFyZ2luOiAwOworCSAgICBiYWNrZ3JvdW5kOiAjZWVlOworCSAgfQorCSAgCisJ
ICAjZm9vdGVyIHsKKwkgICAgcG9zaXRpb246IGFic29sdXRlOworCSAgICBib3R0b206IDA7CisJ
ICAgIGxlZnQ6IDA7CisJICAgIHJpZ2h0OiAwOworCSAgICBtYXJnaW4tdG9wOiAxZW07CisJICB9
CisJICAKKwkgICNhY3Rpb24tYnV0dG9ucyB7CisJICAgIGZsb2F0OiByaWdodDsKKwkgIH0KKwkg
IAorCSAgI2Zvb3RlciBidXR0b24geworCSAgICBwYWRkaW5nOiAxZW07CisJICAgIHdpZHRoOiAx
MGVtOworCSAgfQorCSAgCisJICAjbG91cGUgeworCSAgICAtd2Via2l0LWJveC1zaGFkb3c6IDJw
eCAycHggNXB4IHJnYmEoMCwgMCwgMCwgLjUpOworCSAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisJ
ICAgIHdpZHRoOiA2MzRweDsKKwkgICAgdG9wOiA1MCU7CisJICAgIGxlZnQ6IDUwJTsKKwkgICAg
bWFyZ2luLWxlZnQ6IC0xNTFweDsKKwkgICAgbWFyZ2luLXRvcDogLTUwcHg7CisJICAgIGJhY2tn
cm91bmQ6ICNmZmY7CisJICAgIGJvcmRlci1zcGFjaW5nOiAwOworCSAgICBib3JkZXItY29sbGFw
c2U6IGNvbGxhcHNlOworCSAgfQorCSAgCisJICAjbG91cGUgdGQgeworCSAgICBwYWRkaW5nOiAw
OworICAgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsJICAgIAorCSAgfQorCSAgCisgICAgI2xv
dXBlIGxhYmVsIHsKKyAgICAgIGNvbG9yOiAjOTk5OworICAgICAgcGFkZGluZy1yaWdodDogMWVt
OworICAgIH0KKyAgICAKKyAgICAjbG91cGUgc3BhbiB7CisgICAgICBjb2xvcjogIzAwMDsKKyAg
ICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIH0KKyAgICAKKyAgICAjbG91cGUgI2xvdXBlLWNs
b3NlIHsKKyAgICAgIGZsb2F0OiByaWdodDsKKyAgICB9CisgICAgCisgICAgI2xvdXBlICNsb3Vw
ZS1pbmZvIHsKKyAgICAgIGJhY2tncm91bmQ6ICNlZWU7CisgICAgICBwYWRkaW5nOiAuM2VtIC41
ZW07CisgICAgfQorICAgIAorICAgICNsb3VwZSAjbG91cGUtY29sb3JzIHRkIHsKKyAgICAgIHRl
eHQtYWxpZ246IGNlbnRlcjsKKyAgICB9CisgICAgCisgICAgI2xvdXBlIC5sb3VwZS1jb250YWlu
ZXIgeworICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgd2lkdGg6IDIxMHB4OworICAg
ICAgaGVpZ2h0OiAyMTBweDsKKyAgICB9CisgICAgCisgICAgI2xvdXBlIC5jZW50ZXItaGlnaGxp
Z2h0IHsKKyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgIHdpZHRoOiAxMHB4OworICAg
ICAgaGVpZ2h0OiAxMHB4OworICAgICAgdG9wOiA1MCU7CisgICAgICBsZWZ0OiA1MCU7CisgICAg
ICBtYXJnaW4tbGVmdDogLTVweDsKKyAgICAgIG1hcmdpbi10b3A6IC01cHg7CisgICAgICBvdXRs
aW5lOiBzb2xpZCAxcHggIzk5OTsKKyAgICB9CisJPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5Pgor
Cis8cHJlIGlkPSJsb2ciIHN0eWxlPSJkaXNwbGF5OiBub25lIj48L3ByZT4KKworPGRpdiBpZD0i
aGVhZGVyIj4KKyAgPGRpdiBpZD0iY29udHJvbHMiPgorICAgIDwhLS0gQWRkIGEgZHVtbXkgPHNl
bGVjdD4gbm9kZSBzbyB0aGF0IHRoaXMgbGluZXMgdXAgd2l0aCB0aGUgdGV4dCBvbiB0aGUgbGVm
dCAtLT4KKyAgICA8c2VsZWN0IHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iPjwvc2VsZWN0Pgor
ICAgIDxhIGhyZWY9Ii9xdWl0cXVpdHF1aXQiPkV4aXQ8L2E+CisgIDwvZGl2PgorCisgIDxzcGFu
IGlkPSJzZWxlY3RvcnMiPgorICAgIDxsYWJlbD4KKyAgICAgIEZhaWx1cmUgdHlwZToKKyAgICAg
IDxzZWxlY3QgaWQ9ImZhaWx1cmUtdHlwZS1zZWxlY3RvciI+PC9zZWxlY3Q+CisgICAgPC9sYWJl
bD4KKyAgCisgICAgPGxhYmVsPgorICAgICAgRGlyZWN0b3J5OgorICAgICAgPHNlbGVjdCBpZD0i
ZGlyZWN0b3J5LXNlbGVjdG9yIj48L3NlbGVjdD4KKyAgICA8L2xhYmVsPgorICAKKyAgICA8bGFi
ZWw+CisgICAgICBUZXN0OgorICAgICAgPHNlbGVjdCBpZD0idGVzdC1zZWxlY3RvciI+PC9zZWxl
Y3Q+CisgICAgPC9sYWJlbD4KKyAgPC9zcGFuPgorICAKKyAgPHNwYW4gaWQ9Im5hdi1idXR0b25z
Ij4KKyAgICA8YnV0dG9uIGlkPSJwcmV2aW91cy10ZXN0Ij4mbGFxdW87PC9idXR0b24+CisgICAg
PHNwYW4gaWQ9InRlc3QtaW5kZXgiPjwvc3Bhbj4gb2YgPHNwYW4gaWQ9InRlc3QtY291bnQiPjwv
c3Bhbj4KKyAgICA8YnV0dG9uIGlkPSJuZXh0LXRlc3QiPiZyYXF1bzs8L2J1dHRvbj4KKyAgPC9z
cGFuPiAgCis8L2Rpdj4KKworPHRhYmxlIGlkPSJ0ZXN0LW91dHB1dCI+CisgIDx0aGVhZCBpZD0i
bGFiZWxzIj4KKyAgICA8dGg+RXhwZWN0ZWQ8L3RoPgorICAgIDx0aD5BY3R1YWw8L3RoPgorICAg
IDx0aD5EaWZmPC90aD4KKyAgPC90aGVhZD4KKyAgPHRib2R5IGlkPSJpbWFnZS1vdXRwdXRzIiBz
dHlsZT0iZGlzcGxheTogbm9uZSI+CisgICAgPHRyPgorICAgICAgPHRkIGNvbHNwYW49IjMiPjxo
Mj5JbWFnZTwvaDI+PC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZD48aW1nIGlk
PSJleHBlY3RlZC1pbWFnZSI+PC90ZD4KKyAgICAgIDx0ZD48aW1nIGlkPSJhY3R1YWwtaW1hZ2Ui
PjwvdGQ+CisgICAgICA8dGQ+PGltZyBpZD0iZGlmZi1pbWFnZSI+PC90ZD4KKyAgICA8L3RyPgor
ICA8L3Rib2R5PgorICA8dGJvZHkgaWQ9InRleHQtb3V0cHV0cyIgc3R5bGU9ImRpc3BsYXk6IG5v
bmUiPgorICAgIDx0cj4KKyAgICAgIDx0ZCBjb2xzcGFuPSIzIj48aDI+VGV4dDwvaDI+PC90ZD4K
KyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZD48cHJlIGlkPSJleHBlY3RlZC10ZXh0Ij48
L3ByZT48L3RkPgorICAgICAgPHRkPjxwcmUgaWQ9ImFjdHVhbC10ZXh0Ij48L3ByZT48L3RkPgor
ICAgICAgPHRkPjxwcmUgaWQ9ImRpZmYtdGV4dCI+PHByZT48L3RkPgorICAgIDwvdHI+CisgIDwv
dGJvZHk+CisKKzwvdGFibGU+CisKKzxkaXYgaWQ9ImZvb3RlciI+CisgIDxsYWJlbD5FeGlzdGlu
ZyBiYXNlbGluZXM6IDxzcGFuIGlkPSJjdXJyZW50LWJhc2VsaW5lcyI+PC9zcGFuPjwvbGFiZWw+
CisgIDxsYWJlbD4KKyAgICBCYXNlbGluZSBjcmVhdGlvbiBtb2RlOgorICAgIDxzZWxlY3QgaWQ9
ImJhc2VsaW5lLXNlbGVjdG9yIj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLXNub3ct
bGVvcGFyZCI+Q2hyb21pdW0gU25vdyBMZW9wYXJkPC9vcHRpb24+CisgICAgPC9zZWxlY3Q+Cisg
IDwvbGFiZWw+CisgIDwhLS0gQWRkIGEgZHVtbXkgPGJ1dHRvbj4gbm9kZSBzbyB0aGF0IHRoaXMg
bGluZXMgdXAgd2l0aCB0aGUgdGV4dCBvbiB0aGUgbGVmdCAtLT4KKyAgPGJ1dHRvbiBzdHlsZT0i
dmlzaWJpbGl0eTogaGlkZGVuIj48L2J1dHRvbj4KKyAgCisgIDxkaXYgaWQ9ImFjdGlvbi1idXR0
b25zIj4KKyAgICA8c3BhbiBpZD0idG9nZ2xlLWxvZyIgY2xhc3M9ImxpbmsiPkxvZzwvc3Bhbj4K
KyAgICA8YnV0dG9uIGlkPSJyZWJhc2VsaW5lIj5SZWJhc2VsaW5lPC9idXR0b24+CisgIDwvZGl2
PgorPC9kaXY+CisKKzx0YWJsZSBpZD0ibG91cGUiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAg
PHRyPgorICAgIDx0ZCBjb2xzcGFuPSIzIiBpZD0ibG91cGUtaW5mbyI+CisgICAgICA8c3BhbiBp
ZD0ibG91cGUtY2xvc2UiIGNsYXNzPSJsaW5rIj5DbG9zZTwvc3Bhbj4KKyAgICAgIDxsYWJlbD5D
b29yZGluYXRlOiA8c3BhbiBpZD0ibG91cGUtY29vcmRpbmF0ZSI+PC9zcGFuPjwvbGFiZWw+Cisg
ICAgPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZD4KKyAgICAgIDxkaXYgY2xhc3M9Imxv
dXBlLWNvbnRhaW5lciI+CisgICAgICAgIDxjYW52YXMgaWQ9ImV4cGVjdGVkLWxvdXBlIiB3aWR0
aD0iMjEwIiBoZWlnaHQ9IjIxMCI+PC9jYW52YXM+CisgICAgICAgIDxkaXYgY2xhc3M9ImNlbnRl
ci1oaWdobGlnaHQiPjwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC90ZD4KKyAgICA8dGQ+Cisg
ICAgICA8ZGl2IGNsYXNzPSJsb3VwZS1jb250YWluZXIiPgorICAgICAgICA8Y2FudmFzIGlkPSJh
Y3R1YWwtbG91cGUiIHdpZHRoPSIyMTAiIGhlaWdodD0iMjEwIj48L2NhbnZhcz4KKyAgICAgICAg
PGRpdiBjbGFzcz0iY2VudGVyLWhpZ2hsaWdodCI+PC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8
L3RkPgorICAgIDx0ZD4KKyAgICAgIDxkaXYgY2xhc3M9ImxvdXBlLWNvbnRhaW5lciI+CisgICAg
ICAgIDxjYW52YXMgaWQ9ImRpZmYtbG91cGUiIHdpZHRoPSIyMTAiIGhlaWdodD0iMjEwIj48L2Nh
bnZhcz4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2VudGVyLWhpZ2hsaWdodCI+PC9kaXY+CisgICAg
ICA8L2Rpdj4KKyAgICA8L3RkPgorICA8L3RyPgorICA8dHIgaWQ9ImxvdXBlLWNvbG9ycyI+Cisg
ICAgPHRkPjxsYWJlbD5FeHAuIGNvbG9yOiA8c3BhbiBpZD0iZXhwZWN0ZWQtbG91cGUtY29sb3Ii
Pjwvc3Bhbj48L2xhYmVsPjwvdGQ+CisgICAgPHRkPjxsYWJlbD5BY3R1YWwgY29sb3I6IDxzcGFu
IGlkPSJhY3R1YWwtbG91cGUtY29sb3IiPjwvc3Bhbj48L2xhYmVsPjwvdGQ+CisgICAgPHRkPjxs
YWJlbD5EaWZmIGNvbG9yOiA8c3BhbiBpZD0iZGlmZi1sb3VwZS1jb2xvciI+PC9zcGFuPjwvbGFi
ZWw+PC90ZD4KKyAgPC90cj4KKzwvdGFibGU+CisKKzxzY3JpcHQgc3JjPSIvbWFpbi5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvbWFpbi5qcyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNl
bGluZS9tYWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0Zjc3MTFlMWEwZDRjYTMxZmU3Yzg3M2ZiMzgxZGRl
OWQ4ZjA5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvbWFpbi5qcwpAQCAtMCwwICsxLDMy
NSBAQAordmFyIHJlc3VsdHM7Cit2YXIgdGVzdHNCeUZhaWx1cmVUeXBlID0ge307Cit2YXIgdGVz
dHNCeURpcmVjdG9yeSA9IHt9OwordmFyIHNlbGVjdGVkVGVzdHMgPSBbXTsKKworZnVuY3Rpb24g
JChpZCkgeworICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworfQorCitmdW5j
dGlvbiBtYWluKCkgeworICAkKCdmYWlsdXJlLXR5cGUtc2VsZWN0b3InKS5hZGRFdmVudExpc3Rl
bmVyKCdjaGFuZ2UnLCBzZWxlY3RGYWlsdXJlVHlwZSk7CisgICQoJ2RpcmVjdG9yeS1zZWxlY3Rv
cicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHNlbGVjdERpcmVjdG9yeSk7CisgICQoJ3Rl
c3Qtc2VsZWN0b3InKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBzZWxlY3RUZXN0KTsKKyAg
JCgnbmV4dC10ZXN0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBuZXh0VGVzdCk7CisgICQo
J3ByZXZpb3VzLXRlc3QnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHByZXZpb3VzVGVzdCk7
CisgICQoJ3JlYmFzZWxpbmUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlYmFzZWxpbmUp
OworICAkKCdleHBlY3RlZC1pbWFnZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd0xv
dXBlKTsKKyAgJCgnYWN0dWFsLWltYWdlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzaG93
TG91cGUpOworICAkKCdkaWZmLWltYWdlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzaG93
TG91cGUpOworICAkKCdsb3VwZS1jbG9zZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGlk
ZUxvdXBlKTsKKyAgJCgndG9nZ2xlLWxvZycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9n
Z2xlTG9nKTsKKworICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZl
bnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBzd2l0Y2ggKGV2ZW50LmtleUlkZW50aWZpZXIpIHsKKyAgICAgIGNhc2UgJ0xlZnQnOiBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOyBwcmV2aW91c1Rlc3QoKTsgYnJlYWs7CisgICAgICBjYXNlICdS
aWdodCc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IG5leHRUZXN0KCk7IGJyZWFrOworICAgICAg
Y2FzZSAnVSswMDUyJzogcmViYXNlbGluZSgpOyBicmVhazsKKyAgICB9CisgIH0pOworICAKKyAg
dmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICB4aHIub3BlbignR0VUJywgJy9yZXN1
bHRzLmpzb24nKTsKKyAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsK
KyAgICByZXN1bHRzID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTsKKyAgICBkaXNwbGF5
UmVzdWx0cygpOyAgCisgIH0pOworICB4aHIuc2VuZCgpOworfQorCitmdW5jdGlvbiBkaXNwbGF5
UmVzdWx0cygpIHsKKyAgdmFyIGZhaWx1cmVUeXBlU2VsZWN0b3IgPSAkKCdmYWlsdXJlLXR5cGUt
c2VsZWN0b3InKTsKKyAgdmFyIGZhaWx1cmVUeXBlcyA9IFtdOworICAKKyAgZm9yICh2YXIgdGVz
dE5hbWUgaW4gcmVzdWx0cy50ZXN0cykgeworICAgIHZhciB0ZXN0ID0gcmVzdWx0cy50ZXN0c1t0
ZXN0TmFtZV07CisgICAgaWYgKHRlc3QuYWN0dWFsID09ICdQQVNTJykgeworICAgICAgY29udGlu
dWU7CisgICAgfQorICAgIHZhciBmYWlsdXJlVHlwZSA9IHRlc3QuYWN0dWFsICsgJyAoZXhwZWN0
ZWQgJyArIHRlc3QuZXhwZWN0ZWQgKyAnKSc7CisgICAgaWYgKCEoZmFpbHVyZVR5cGUgaW4gdGVz
dHNCeUZhaWx1cmVUeXBlKSkgeworICAgICAgdGVzdHNCeUZhaWx1cmVUeXBlW2ZhaWx1cmVUeXBl
XSA9IFtdOworICAgICAgZmFpbHVyZVR5cGVzLnB1c2goZmFpbHVyZVR5cGUpOworICAgIH0KKyAg
ICB0ZXN0c0J5RmFpbHVyZVR5cGVbZmFpbHVyZVR5cGVdLnB1c2godGVzdE5hbWUpOworICB9Cisg
IAorICBmYWlsdXJlVHlwZXMuc29ydChmdW5jdGlvbihhLCBiKSB7CisgICAgcmV0dXJuIHRlc3Rz
QnlGYWlsdXJlVHlwZVtiXS5sZW5ndGggLSB0ZXN0c0J5RmFpbHVyZVR5cGVbYV0ubGVuZ3RoOwor
ICB9KTsKKyAgCisgIGZvciAodmFyIGkgPSAwLCBmYWlsdXJlVHlwZTsgZmFpbHVyZVR5cGUgPSBm
YWlsdXJlVHlwZXNbaV07IGkrKykgeworICAgIHZhciBmYWlsdXJlVHlwZU9wdGlvbiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOworICAgIGZhaWx1cmVUeXBlT3B0aW9uLnZhbHVl
ID0gZmFpbHVyZVR5cGU7CisgICAgZmFpbHVyZVR5cGVPcHRpb24udGV4dENvbnRlbnQgPSBmYWls
dXJlVHlwZSArICcgLSAnICsgdGVzdHNCeUZhaWx1cmVUeXBlW2ZhaWx1cmVUeXBlXS5sZW5ndGgg
KyAnIHRlc3RzJzsKKyAgICBmYWlsdXJlVHlwZVNlbGVjdG9yLmFwcGVuZENoaWxkKGZhaWx1cmVU
eXBlT3B0aW9uKTsKKyAgfQorICAKKyAgc2VsZWN0RmFpbHVyZVR5cGUoKTsKK30KKworZnVuY3Rp
b24gc2VsZWN0RmFpbHVyZVR5cGUoKSB7CisgIHZhciBmYWlsdXJlVHlwZVNlbGVjdG9yID0gJCgn
ZmFpbHVyZS10eXBlLXNlbGVjdG9yJyk7CisgIHZhciBzZWxlY3RlZEZhaWx1cmVUeXBlID0KKyAg
ICAgIGZhaWx1cmVUeXBlU2VsZWN0b3IuY2hpbGROb2Rlc1tmYWlsdXJlVHlwZVNlbGVjdG9yLnNl
bGVjdGVkSW5kZXhdLnZhbHVlOworICB2YXIgdGVzdHMgPSB0ZXN0c0J5RmFpbHVyZVR5cGVbc2Vs
ZWN0ZWRGYWlsdXJlVHlwZV07CisgIAorICAvLyBJbmNsdWRlIGEgYXBlY2lhbCBvcHRpb24gZm9y
IGFsbCB0ZXN0cworICB0ZXN0c0J5RGlyZWN0b3J5ID0geydbYWxsXSc6IHRlc3RzfTsKKyAgdmFy
IGRpc3BsYXlEaXJlY3RvcnlOYW1lc0J5RGlyZWN0b3J5ID0geydbYWxsXSc6ICdhbGwnfTsKKyAg
CisgIGZvciAodmFyIGkgPSAwLCB0ZXN0OyB0ZXN0ID0gdGVzdHNbaV07IGkrKykgeworICAgIHZh
ciBwYXRoUGllY2VzID0gdGVzdC5zcGxpdCgnLycpOworICAgIHZhciBkaXJlY3RvcnkgPSAnJzsK
KyAgICAKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhdGhQaWVjZXMubGVuZ3RoIC0gMTsgaisr
KSB7CisgICAgICBkaXJlY3RvcnkgKz0gcGF0aFBpZWNlc1tqXSArICcvJzsKKyAgICAgIGlmICgh
KGRpcmVjdG9yeSBpbiB0ZXN0c0J5RGlyZWN0b3J5KSkgeworICAgICAgICB0ZXN0c0J5RGlyZWN0
b3J5W2RpcmVjdG9yeV0gPSBbXTsKKyAgICAgICAgdmFyIGRpc3BsYXlEaXJlY3RvcnlOYW1lID0g
bmV3IEFycmF5KGogKiA2KS5qb2luKCcmbmJzcDsnKSArIHBhdGhQaWVjZXNbal07CisgICAgICAg
IGRpc3BsYXlEaXJlY3RvcnlOYW1lc0J5RGlyZWN0b3J5W2RpcmVjdG9yeV0gPSBkaXNwbGF5RGly
ZWN0b3J5TmFtZTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdGVzdHNCeURpcmVjdG9yeVtkaXJl
Y3RvcnldLnB1c2godGVzdCk7CisgICAgfQorICB9CisKKyAgdmFyIGRpcmVjdG9yeVNlbGVjdG9y
ID0gJCgnZGlyZWN0b3J5LXNlbGVjdG9yJyk7ICAKKyAgZGlyZWN0b3J5U2VsZWN0b3IuaW5uZXJI
VE1MID0gJyc7CisgIAorICBmb3IgKHZhciBkaXJlY3RvcnkgaW4gdGVzdHNCeURpcmVjdG9yeSkg
eworICAgIHZhciBkaXJlY3RvcnlPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRp
b24nKTsKKyAgICBkaXJlY3RvcnlPcHRpb24udmFsdWUgPSBkaXJlY3Rvcnk7CisgICAgZGlyZWN0
b3J5T3B0aW9uLmlubmVySFRNTCA9CisgICAgICAgIGRpc3BsYXlEaXJlY3RvcnlOYW1lc0J5RGly
ZWN0b3J5W2RpcmVjdG9yeV0gKyAnIC0gJyArCisgICAgICAgIHRlc3RzQnlEaXJlY3RvcnlbZGly
ZWN0b3J5XS5sZW5ndGggKyAnIHRlc3RzJzsKKyAgICBkaXJlY3RvcnlTZWxlY3Rvci5hcHBlbmRD
aGlsZChkaXJlY3RvcnlPcHRpb24pOyAgICAKKyAgfQorICAKKyAgc2VsZWN0RGlyZWN0b3J5KCk7
Cit9CisKK2Z1bmN0aW9uIHNlbGVjdERpcmVjdG9yeSgpIHsKKyAgdmFyIGRpcmVjdG9yeVNlbGVj
dG9yID0gJCgnZGlyZWN0b3J5LXNlbGVjdG9yJyk7CisgIHZhciBzZWxlY3RlZERpcmVjdG9yeSA9
CisgICAgICBkaXJlY3RvcnlTZWxlY3Rvci5jaGlsZE5vZGVzW2RpcmVjdG9yeVNlbGVjdG9yLnNl
bGVjdGVkSW5kZXhdLnZhbHVlOworICBzZWxlY3RlZFRlc3RzID0gdGVzdHNCeURpcmVjdG9yeVtz
ZWxlY3RlZERpcmVjdG9yeV07CisKKyAgdmFyIHRlc3RTZWxlY3RvciA9ICQoJ3Rlc3Qtc2VsZWN0
b3InKTsKKyAgdGVzdFNlbGVjdG9yLmlubmVySFRNTCA9ICcnOworICBmb3IgKHZhciBpID0gMCwg
dGVzdDsgdGVzdCA9IHNlbGVjdGVkVGVzdHNbaV07IGkrKykgeworICAgIHZhciB0ZXN0T3B0aW9u
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CisgICAgdGVzdE9wdGlvbi52YWx1
ZSA9IHRlc3Q7CisgICAgdGVzdE9wdGlvbi50ZXh0Q29udGVudCA9IHRlc3Q7CisgICAgdGVzdFNl
bGVjdG9yLmFwcGVuZENoaWxkKHRlc3RPcHRpb24pOyAgICAKKyAgfQorICAKKyAgc2VsZWN0VGVz
dCgpOworfQorCitmdW5jdGlvbiBnZXRTZWxlY3RlZFRlc3QoKSB7CisgIHZhciB0ZXN0U2VsZWN0
b3IgPSAkKCd0ZXN0LXNlbGVjdG9yJyk7CisgIHJldHVybiB0ZXN0U2VsZWN0b3IuY2hpbGROb2Rl
c1t0ZXN0U2VsZWN0b3Iuc2VsZWN0ZWRJbmRleF0udmFsdWU7fQorCitmdW5jdGlvbiBzZWxlY3RU
ZXN0KCkgeworICB2YXIgc2VsZWN0ZWRUZXN0ID0gZ2V0U2VsZWN0ZWRUZXN0KCk7CisgIAorICBp
ZiAocmVzdWx0cy50ZXN0c1tzZWxlY3RlZFRlc3RdLmFjdHVhbC5pbmRleE9mKCJJTUFHRSIpICE9
IC0xKSB7CisgICAgJCgnaW1hZ2Utb3V0cHV0cycpLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICBk
aXNwbGF5SW1hZ2VSZXN1bHRzKHNlbGVjdGVkVGVzdCk7CisgIH0gZWxzZSB7CisgICAgJCgnaW1h
Z2Utb3V0cHV0cycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7ICAKKyAgfQorCisgIGlmIChyZXN1
bHRzLnRlc3RzW3NlbGVjdGVkVGVzdF0uYWN0dWFsLmluZGV4T2YoIlRFWFQiKSAhPSAtMSkgewor
ICAgICQoJ3RleHQtb3V0cHV0cycpLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICBkaXNwbGF5VGV4
dFJlc3VsdHMoc2VsZWN0ZWRUZXN0KTsKKyAgfSBlbHNlIHsKKyAgICAkKCd0ZXh0LW91dHB1dHMn
KS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAgCisgIH0KKyAgCisgIHZhciB4aHIgPSBuZXcgWE1M
SHR0cFJlcXVlc3QoKTsKKyAgeGhyLm9wZW4oJ0dFVCcsICcvY3VycmVudF9iYXNlbGluZXM/dGVz
dD0nICsgc2VsZWN0ZWRUZXN0KTsKKyAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5j
dGlvbigpIHsKKyAgICAvLyBDdXJyZW50IHRlc3QgbWlnaHQgaGF2ZSBjaGFuZ2VkIGJ5IHRoZSB0
aW1lIHdlIGxvYWQgdGhlIGJhc2VsaW5lcworICAgIGlmIChzZWxlY3RlZFRlc3QgIT0gZ2V0U2Vs
ZWN0ZWRUZXN0KCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgJCgnY3VycmVudC1iYXNl
bGluZXMnKS50ZXh0Q29udGVudCA9IHhoci5yZXNwb25zZVRleHQ7CisgIH0pOworICB4aHIuc2Vu
ZCgpOworICAKKyAgdXBkYXRlU3RhdGUoJCgndGVzdC1zZWxlY3RvcicpLnNlbGVjdGVkSW5kZXgp
OworICBoaWRlTG91cGUoKTsKK30KKworZnVuY3Rpb24gdXBkYXRlU3RhdGUodGVzdEluZGV4KSB7
CisgIHZhciB0ZXN0Q291bnQgPSBzZWxlY3RlZFRlc3RzLmxlbmd0aAorICAkKCd0ZXN0LWluZGV4
JykuaW5uZXJIVE1MID0gdGVzdEluZGV4ICsgMTsKKyAgJCgndGVzdC1jb3VudCcpLmlubmVySFRN
TCA9IHRlc3RDb3VudDsKKyAgCisgICQoJ25leHQtdGVzdCcpLmRpc2FibGVkID0gdGVzdEluZGV4
ID09IHRlc3RDb3VudCAtIDE7CisgICQoJ3ByZXZpb3VzLXRlc3QnKS5kaXNhYmxlZCA9IHRlc3RJ
bmRleCA9PSAwOworfQorCitmdW5jdGlvbiBkaXNwbGF5SW1hZ2VSZXN1bHRzKHRlc3ROYW1lKSB7
CisgICQoJ2V4cGVjdGVkLWltYWdlJykuc3JjID0gJy90ZXN0X3Jlc3VsdD90ZXN0PScgKyB0ZXN0
TmFtZSArICcmbW9kZT1leHBlY3RlZC1pbWFnZSc7CisgICQoJ2FjdHVhbC1pbWFnZScpLnNyYyA9
ICcvdGVzdF9yZXN1bHQ/dGVzdD0nICsgdGVzdE5hbWUgKyAnJm1vZGU9YWN0dWFsLWltYWdlJzsK
KyAgJCgnZGlmZi1pbWFnZScpLnNyYyA9ICcvdGVzdF9yZXN1bHQ/dGVzdD0nICsgdGVzdE5hbWUg
KyAnJm1vZGU9ZGlmZi1pbWFnZSc7Cit9CisKK2Z1bmN0aW9uIGRpc3BsYXlUZXh0UmVzdWx0cyh0
ZXN0TmFtZSkgeworICBmdW5jdGlvbiBsb2FkVGV4dFJlc3VsdCh0eXBlKSB7CisgICAgdmFyIHho
ciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCdHRVQnLCAnL3Rlc3RfcmVz
dWx0P3Rlc3Q9JyArIHRlc3ROYW1lICsgJyZtb2RlPScgKyB0eXBlKTsKKyAgICB4aHIuYWRkRXZl
bnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgeworICAgICAgJCh0eXBlKS50ZXh0Q29udGVu
dCA9IHhoci5yZXNwb25zZVRleHQ7CisgICAgfSk7CisgICAgeGhyLnNlbmQoKTsgICAgCisgIH0K
KyAgCisgIGxvYWRUZXh0UmVzdWx0KCdleHBlY3RlZC10ZXh0Jyk7CisgIGxvYWRUZXh0UmVzdWx0
KCdhY3R1YWwtdGV4dCcpOworICBsb2FkVGV4dFJlc3VsdCgnZGlmZi10ZXh0Jyk7Cit9CisKK2Z1
bmN0aW9uIG5leHRUZXN0KCkgeworICBpZiAoJCgndGVzdC1zZWxlY3RvcicpLnNlbGVjdGVkSW5k
ZXggPT0gc2VsZWN0ZWRUZXN0cy5sZW5ndGggLSAxKSB7CisgICAgcmV0dXJuOworICB9CisgICQo
J3Rlc3Qtc2VsZWN0b3InKS5zZWxlY3RlZEluZGV4Kys7CisgIHNlbGVjdFRlc3QoKTsKK30KKwor
ZnVuY3Rpb24gcHJldmlvdXNUZXN0KCkgeworICBpZiAoJCgndGVzdC1zZWxlY3RvcicpLnNlbGVj
dGVkSW5kZXggPT0gMCkgeworICAgIHJldHVybjsKKyAgfQorICAkKCd0ZXN0LXNlbGVjdG9yJyku
c2VsZWN0ZWRJbmRleC0tOworICBzZWxlY3RUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHNob3dMb3Vw
ZShldmVudCkgeworICB2YXIgaW1hZ2VSZWN0ID0gZXZlbnQudGFyZ2V0LmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpOworICB2YXIgeCA9IGV2ZW50LmNsaWVudFggLSBpbWFnZVJlY3QubGVmdDsKKyAg
dmFyIHkgPSBldmVudC5jbGllbnRZIC0gaW1hZ2VSZWN0LnRvcDsKKyAgCisgIGZpbGxMb3VwZSh4
LCB5LCAnZXhwZWN0ZWQnKTsKKyAgZmlsbExvdXBlKHgsIHksICdhY3R1YWwnKTsKKyAgZmlsbExv
dXBlKHgsIHksICdkaWZmJyk7CisgIAorICAkKCdsb3VwZScpLnN0eWxlLmRpc3BsYXkgPSAnJzsK
K30KKwordmFyIExPVVBFX01BR05JRklDQVRJT05fRkFDVE9SID0gMTA7CisKK2Z1bmN0aW9uIGZp
bGxMb3VwZSh4LCB5LCB0eXBlKSB7CisgIHZhciBzb3VyY2VJbWFnZSA9ICQodHlwZSArICctaW1h
Z2UnKTsgIAorCisgIHZhciB0YXJnZXRDYW52YXMgPSAkKHR5cGUgKyAnLWxvdXBlJyk7CisgIHZh
ciB0YXJnZXRDb250ZXh0ID0gdGFyZ2V0Q2FudmFzLmdldENvbnRleHQoJzJkJyk7CisgIHRhcmdl
dENvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMSknOworICB0YXJnZXRD
b250ZXh0LmZpbGxSZWN0KDAsIDAsIHRhcmdldENhbnZhcy53aWR0aCwgdGFyZ2V0Q2FudmFzLmhl
aWdodCk7CisKKyAgdmFyIHNvdXJjZVhPZmZzZXQgPSAodGFyZ2V0Q2FudmFzLndpZHRoL0xPVVBF
X01BR05JRklDQVRJT05fRkFDVE9SIC0gMSkvMjsKKyAgdmFyIHNvdXJjZVlPZmZzZXQgPSAodGFy
Z2V0Q2FudmFzLmhlaWdodC9MT1VQRV9NQUdOSUZJQ0FUSU9OX0ZBQ1RPUiAtIDEpLzI7CisgIAor
ICB2YXIgdGVtcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOworICB0
ZW1wQ2FudmFzLndpZHRoID0gc291cmNlSW1hZ2Uud2lkdGg7CisgIHRlbXBDYW52YXMuaGVpZ2h0
ID0gc291cmNlSW1hZ2UuaGVpZ2h0OworICB2YXIgdGVtcENvbnRleHQgPSB0ZW1wQ2FudmFzLmdl
dENvbnRleHQoJzJkJyk7CisgIAorICB0ZW1wQ29udGV4dC5kcmF3SW1hZ2Uoc291cmNlSW1hZ2Us
IDAsIDApOworICB2YXIgc291cmNlSW1hZ2VEYXRhID0gdGVtcENvbnRleHQuZ2V0SW1hZ2VEYXRh
KAorICAgICAgMCwgMCwgdGVtcENhbnZhcy53aWR0aCwgdGVtcENhbnZhcy5oZWlnaHQpOworCisg
IGZ1bmN0aW9uIHJlYWRQaXhlbENvbXBvbmVudCh4LCB5LCBjb21wb25lbnQpIHsKKyAgICByZXR1
cm4gc291cmNlSW1hZ2VEYXRhLmRhdGFbKHkgKiBzb3VyY2VJbWFnZURhdGEud2lkdGggKyB4KSAq
IDQgKyBjb21wb25lbnRdOworICB9CisgIAorICBmb3IgKHZhciBpID0gLXNvdXJjZVhPZmZzZXQ7
IGkgPD0gc291cmNlWE9mZnNldDsgaSsrKSB7CisgICAgZm9yICh2YXIgaiA9IC1zb3VyY2VZT2Zm
c2V0OyBqIDw9IHNvdXJjZVlPZmZzZXQ7IGorKykgeworICAgICAgdmFyIHNvdXJjZVggPSB4ICsg
aTsKKyAgICAgIHZhciBzb3VyY2VZID0geSArIGo7CisgICAgICAKKyAgICAgIHZhciBzb3VyY2VS
ID0gcmVhZFBpeGVsQ29tcG9uZW50KHNvdXJjZVgsIHNvdXJjZVksIDApOyAKKyAgICAgIHZhciBz
b3VyY2VHID0gcmVhZFBpeGVsQ29tcG9uZW50KHNvdXJjZVgsIHNvdXJjZVksIDEpOworICAgICAg
dmFyIHNvdXJjZUIgPSByZWFkUGl4ZWxDb21wb25lbnQoc291cmNlWCwgc291cmNlWSwgMik7Cisg
ICAgICB2YXIgc291cmNlQSA9IHJlYWRQaXhlbENvbXBvbmVudChzb3VyY2VYLCBzb3VyY2VZLCAz
KS8yNTU7CisgICAgICBzb3VyY2VBID0gTWF0aC5yb3VuZChzb3VyY2VBICogMTApLzEwOworCisg
ICAgICB2YXIgdGFyZ2V0WCA9IChpICsgc291cmNlWE9mZnNldCkgKiBMT1VQRV9NQUdOSUZJQ0FU
SU9OX0ZBQ1RPUjsKKyAgICAgIHZhciB0YXJnZXRZID0gKGogKyBzb3VyY2VZT2Zmc2V0KSAqIExP
VVBFX01BR05JRklDQVRJT05fRkFDVE9SOworICAgICAgdmFyIGNvbG9yU3RyaW5nID0KKyAgICAg
ICAgICBzb3VyY2VSICsgJywgJyArIHNvdXJjZUcgKyAnLCAnICsgc291cmNlQiArICcsICcgKyBz
b3VyY2VBOworICAgICAgdGFyZ2V0Q29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgnICsgY29sb3JT
dHJpbmcgKyAnKSc7CisgICAgICB0YXJnZXRDb250ZXh0LmZpbGxSZWN0KAorICAgICAgICAgIHRh
cmdldFgsIHRhcmdldFksCisgICAgICAgICAgTE9VUEVfTUFHTklGSUNBVElPTl9GQUNUT1IsIExP
VVBFX01BR05JRklDQVRJT05fRkFDVE9SKTsKKyAgICAKKyAgICAgIGlmIChpID09IDAgJiYgaiA9
PSAwKSB7CisgICAgICAgICQoJ2xvdXBlLWNvb3JkaW5hdGUnKS50ZXh0Q29udGVudCA9IHNvdXJj
ZVggKyAnLCAnICsgc291cmNlWTsKKworICAgICAgICAkKHR5cGUgKyAnLWxvdXBlLWNvbG9yJyku
dGV4dENvbnRlbnQgPSBjb2xvclN0cmluZzsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworZnVu
Y3Rpb24gaGlkZUxvdXBlKCkgeworICAkKCdsb3VwZScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7
ICAKK30KKworZnVuY3Rpb24gcmViYXNlbGluZSgpIHsKKyAgaWYgKCQoJ3JlYmFzZWxpbmUnKS5k
aXNhYmxlZCkgcmV0dXJuOworICAKKyAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwor
ICB4aHIub3BlbignUE9TVCcsICcvcmViYXNlbGluZT90ZXN0PScgKyBnZXRTZWxlY3RlZFRlc3Qo
KSk7CisgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7CisgICAgdmFy
IHN1Y2Nlc3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgc3VjY2Vzcy50
ZXh0Q29udGVudCA9ICdTdWNjZXNzOiAnOworICAgIHN1Y2Nlc3Muc3R5bGUuY29sb3IgPSAnZ3Jl
ZW4nOworICAgICQoJ2xvZycpLmFwcGVuZENoaWxkKHN1Y2Nlc3MpOworICAgIGxvZyh4aHIucmVz
cG9uc2VUZXh0KTsKKyAgICAkKCdyZWJhc2VsaW5lJykuZGlzYWJsZWQgPSBmYWxzZTsKKyAgICAk
KCdyZWJhc2VsaW5lJykudGV4dENvbnRlbnQgPSAnUmViYXNlbGluZSc7ICAgIAorICB9KTsKKyAg
eGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZnVuY3Rpb24oKSB7CisgICAgdmFyIGZhaWx1
cmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgZmFpbHVyZS50ZXh0Q29u
dGVudCA9ICdGYWlsdXJlOiAnOworICAgIGZhaWx1cmUuc3R5bGUuY29sb3IgPSAncmVkJzsKKyAg
ICAkKCdsb2cnKS5hcHBlbmRDaGlsZChmYWlsdXJlKTsKKyAgICBsb2coeGhyLnJlc3BvbnNlVGV4
dCk7CisgICAgJCgncmViYXNlbGluZScpLmRpc2FibGVkID0gZmFsc2U7CisgICAgJCgncmViYXNl
bGluZScpLnRleHRDb250ZW50ID0gJ1JlYmFzZWxpbmUnOyAgICAKKyAgfSk7CisKKyAgJCgncmVi
YXNlbGluZScpLnRleHRDb250ZW50ID0gJ1JlYmFzZWxpbmluZy4uLic7CisgICQoJ3JlYmFzZWxp
bmUnKS5kaXNhYmxlZCA9IHRydWU7CisgIHhoci5zZW5kKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyh0
ZXh0KSB7CisgICQoJ2xvZycpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRl
eHQgKyAnXG4nKSk7CisgICQoJ2xvZycpLnNjcm9sbFRvcCA9ICQoJ2xvZycpLnNjcm9sbEhlaWdo
dDsKK30KKworZnVuY3Rpb24gdG9nZ2xlTG9nKCkgeworICB2YXIgbG9nID0gJCgnbG9nJyk7Cisg
IGxvZy5zdHlsZS5kaXNwbGF5ID0gbG9nLnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnID8gJycgOiAn
bm9uZSc7Cit9CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywg
bWFpbik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2xvY2FscmViYXNlbGluZS5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9sb2NhbHJlYmFzZWxpbmUu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODI3MWMyMzY1ZGEwMDVkNjgyNmY0NzUxOTk1NTUyMzJjZGIzMjcxYwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9sb2NhbHJlYmFzZWxpbmUucHkKQEAgLTAsMCArMSwyODcgQEAKKyMgQ29weXJpZ2h0IChj
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJl
CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdXJsbGliCitpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKK2lt
cG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB1cmxwYXJzZQorCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5uZXQuYnVpbGRib3QgaW1wb3J0IEJ1aWxkQm90LCBMYXlvdXRUZXN0UmVz
dWx0cworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnVzZXIgaW1wb3J0IFVzZXIKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGZhY3RvcnkKK2Zyb20gd2Via2l0cHku
dG9vbC5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKK2Zyb20gd2Via2l0cHkudG9vbC5tdWx0aWNv
bW1hbmR0b29sIGltcG9ydCBBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZAorCisjIFRPRE8KKyMg
LSBsZXQgcG9ydCBiZSBzcGVjaWZpZWQKKyMgLSBjaGVjayBmb3IgY3VycmVudCBiYXNlbGluZXMK
KyMgLSBhZGQgImxvdXBlIiB0aGF0IHNob3dzIHBhcnQgb2YgdGVzdCByZXN1bHRzIHVwIGNsb3Nl
CisjIC0ga2V5Ym9hcmQgc2hvcnRjdXRzCisjIC0gYWRkIGNoZWNrc3VtIG91dHB1dAorIyAtIGhh
bmRsZXIgdG8gY29weSBmaWxlCisKK2NsYXNzIFJlYmFzZWxpbmVIVFRTZXJ2ZXIoQmFzZUhUVFBT
ZXJ2ZXIuSFRUUFNlcnZlcik6CisgIGRlZiBfX2luaXRfXyhzZWxmLCBodHRwZF9wb3J0LCByZXN1
bHRzX2RpcmVjdG9yeSwgYmFzZWxpbmVzX2J5X3Rlc3QsIHBvcnQsIHNjbSk6CisgICAgQmFzZUhU
VFBTZXJ2ZXIuSFRUUFNlcnZlci5fX2luaXRfXyhzZWxmLCAoJycsIGh0dHBkX3BvcnQpLCBSZWJh
c2VsaW5lSFRUUFJlcXVlc3RIYW5kbGVyKQorICAgIHNlbGYucmVzdWx0c19kaXJlY3RvcnkgPSBy
ZXN1bHRzX2RpcmVjdG9yeQorICAgIHNlbGYuYmFzZWxpbmVzX2J5X3Rlc3QgPSBiYXNlbGluZXNf
YnlfdGVzdAorICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICBzZWxmLnNjbSA9IHNjbQorCitjbGFz
cyBSZWJhc2VsaW5lSFRUUFJlcXVlc3RIYW5kbGVyKEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVx
dWVzdEhhbmRsZXIpOgorICAgIGZpbGVfbmFtZXMgPSBbCisgICAgICAnaW5kZXguaHRtbCcsCisg
ICAgICAnbWFpbi5qcycKKyAgICBdCisKKyAgICBkZWYgZG9fR0VUKHNlbGYpOgorICAgICAgc2Vs
Zi5faGFuZGxlX3JlcXVlc3QoKQorICAgICAgCisgICAgZGVmIGRvX1BPU1Qoc2VsZik6CisgICAg
ICBzZWxmLl9oYW5kbGVfcmVxdWVzdCgpCisgICAgCisgICAgZGVmIF9oYW5kbGVfcmVxdWVzdChz
ZWxmKToKKyAgICAgIGlmICc/JyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgKHBhdGgsIHF1ZXJ5
X3N0cmluZykgPSBzZWxmLnBhdGguc3BsaXQoJz8nLCAxKQorICAgICAgICAgIHNlbGYucXVlcnkg
PSB1cmxwYXJzZS5wYXJzZV9xcyhxdWVyeV9zdHJpbmcpCisgICAgICBlbHNlOgorICAgICAgICAg
IHBhdGggPSBzZWxmLnBhdGgKKyAgICAgICAgICBzZWxmLnF1ZXJ5ID0ge30KKyAgICAgIGZ1bmNf
b3JfZmlsZV9uYW1lID0gcGF0aFsxOl0gb3IgJ2luZGV4Lmh0bWwnCisgICAgICAKKyAgICAgIGlm
IGZ1bmNfb3JfZmlsZV9uYW1lIGluIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIuZmlsZV9u
YW1lczoKKyAgICAgICAgICBzZWxmLnNlcnZlX3N0YXRpY19maWxlKGZ1bmNfb3JfZmlsZV9uYW1l
KQorICAgICAgICAgIHJldHVybgorICAgICAgCisgICAgICBmdW5jX25hbWUgPSBmdW5jX29yX2Zp
bGVfbmFtZS5yZXBsYWNlKCcuJywgJ18nKQorICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgZnVu
Y19uYW1lKToKKyAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIlVua25vd24gZnVuY3Rpb24g
JXMiICUgZnVuY19uYW1lKQorICAgICAgICByZXR1cm4KKyAgICAgIGZ1bmMgPSBnZXRhdHRyKHNl
bGYsIGZ1bmNfbmFtZSkKKyAgICAgIGZ1bmMoKQorICAgIAorICAgIGRlZiBzZXJ2ZV9zdGF0aWNf
ZmlsZShzZWxmLCBzdGF0aWNfcGF0aCk6CisgICAgICBzZWxmLl9zZXJ2ZV9maWxlKG9zLnBhdGgu
am9pbigKKyAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZGF0YScsICdsb2Nh
bHJlYmFzZWxpbmUnLCBzdGF0aWNfcGF0aCkpCisgICAgCisgICAgZGVmIGN1cnJlbnRfYmFzZWxp
bmVzKHNlbGYpOgorICAgICAgIyBUT0RPOiBjaGVjayBmb3IgcHJlZml4LCBhbHNvLCB0aGVyZSBz
aG91bGQgYmUgc2hhcmVkIGNvZGUgZm9yIHRoaXMKKyAgICAgICh0ZXN0X25hbWUsIHRlc3RfZXh0
ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQoc2VsZi5xdWVyeVsndGVzdCddWzBdKQorICAgICAg
YmFzZWxpbmVzID0gbGlzdChzZWxmLnNlcnZlci5iYXNlbGluZXNfYnlfdGVzdC5nZXQodGVzdF9u
YW1lLCBbXSkpCisgICAgICBiYXNlbGluZXMuc29ydCgpCisKKyAgICAgIHNlbGYuc2VuZF9yZXNw
b25zZSgyMDApCisgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCAidGV4dC9w
bGFpbiIpCisgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgIHNlbGYud2ZpbGUud3JpdGUo
IiwgIi5qb2luKGJhc2VsaW5lcykgKyAiXG4iKQorCisgICAgZGVmIHJlYmFzZWxpbmUoc2VsZik6
CisgICAgICBsb2cgPSBbXQorICAgICAgc3VjY2VzcyA9IHNlbGYuX3J1bl9yZWJhc2VsaW5lKHNl
bGYucXVlcnlbJ3Rlc3QnXVswXSwgbG9nPWxhbWJkYSBsOmxvZy5hcHBlbmQobCkpCisgICAgICBz
ZWxmLnNlbmRfcmVzcG9uc2Uoc3VjY2VzcyBhbmQgMjAwIG9yIDUwMCkKKyAgICAgIHNlbGYuc2Vu
ZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJ0ZXh0L3BsYWluIikKKyAgICAgIHNlbGYuZW5kX2hl
YWRlcnMoKQorICAgICAgc2VsZi53ZmlsZS53cml0ZSgiXG4iLmpvaW4obG9nKSkKKyAgICAgIAor
ICAgIGRlZiBfcnVuX3JlYmFzZWxpbmUoc2VsZiwgdGVzdCwgbG9nKToKKyAgICAgICh0ZXN0X25h
bWUsIHRlc3RfZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQodGVzdCkKKyAgICAgIHRlc3Rf
ZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKHRlc3RfbmFtZSkKKyAgICAgIGxheW91dF90ZXN0
c19kaXJlY3RvcnkgPSBzZWxmLnNlcnZlci5wb3J0LmxheW91dF90ZXN0c19kaXIoKQorICAgICAg
bWFjX2V4cGVjdGF0aW9uc19kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oCisgICAgICAgICAgbGF5
b3V0X3Rlc3RzX2RpcmVjdG9yeSwgJ3BsYXRmb3JtJywgJ21hYycsIHRlc3RfZGlyZWN0b3J5KQor
ICAgICAgCisgICAgICBsb2coIlJlYmFzZWxpbmluZyAlcy4uLiIgJSB0ZXN0X25hbWUpCisgICAg
ICAKKyAgICAgIGN1cnJlbnRfYmFzZWxpbmVzID0gbGlzdChzZWxmLnNlcnZlci5iYXNlbGluZXNf
YnlfdGVzdC5nZXQodGVzdF9uYW1lLCBbXSkpCisgICAgICAKKyAgICAgIGxvZygiICBDdXJyZW50
IGJhc2VsaW5lczogJXMiICUiLCAiLmpvaW4oY3VycmVudF9iYXNlbGluZXMpKQorICAgICAgCisg
ICAgICBpZiAiY2hyb21pdW0tbWFjIiBpbiBjdXJyZW50X2Jhc2VsaW5lczoKKyAgICAgICAgICBs
b2coIiAgQ2FuJ3QgaGFuZGxlIHRlc3RzIHdpdGggY2hyb21pdW0tbWFjIGJhc2VsaW5lcyB5ZXQu
IikKKyAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgIAorICAgICAgdGVzdF9yZXN1bHRzX2Rp
cmVjdG9yeSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICBzZWxmLnNlcnZlci5yZXN1bHRzX2Rp
cmVjdG9yeSwgdGVzdF9kaXJlY3RvcnkpCisgICAgICBhY3R1YWxfcGF0dGVybiA9IG9zLnBhdGgu
YmFzZW5hbWUodGVzdF9uYW1lKSArICctYWN0dWFsLionCisgICAgICBhY3R1YWxfZmlsZXMgPSBb
XQorICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsodGVzdF9yZXN1bHRzX2Rp
cmVjdG9yeSk6CisgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZubWF0Y2guZmlsdGVyKGZpbGVz
LCBhY3R1YWxfcGF0dGVybik6CisgICAgICAgICAgICAgIGFjdHVhbF9maWxlcy5hcHBlbmQoZmls
ZW5hbWUucmVwbGFjZSgnLWFjdHVhbCcsICctZXhwZWN0ZWQnKSkKKyAgICAgIAorICAgICAgaWYg
KCJtYWMiIGluIGN1cnJlbnRfYmFzZWxpbmVzKToKKyAgICAgICAgaWYgIm1hYy1sZW9wYXJkIiBp
biBjdXJyZW50X2Jhc2VsaW5lczoKKyAgICAgICAgICAgIGxvZygiICBBbHJlYWR5IGhhZCBtYWMt
bGVvcGFyZCBiYXNlbGluZXMsIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIGN1cnJlbnQgbWFj
IGJhc2VsaW5lcyIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgbG9nKCIgIE1v
dmluZyBjdXJyZW50IG1hYyBiYXNlbGluZXMgdG8gbWFjLWxlb3BhcmQiKQorICAgICAgICBtYWNf
bGVvcGFyZF9leHBlY3RhdGlvbnNfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKAorICAgICAgICAg
ICAgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSwgJ3BsYXRmb3JtJywgJ21hYy1sZW9wYXJkJywgdGVz
dF9kaXJlY3RvcnkpCisKKyAgICAgICAgZXhwZWN0YXRpb25fcGF0dGVybiA9IG9zLnBhdGguYmFz
ZW5hbWUodGVzdF9uYW1lKSArICctZXhwZWN0ZWQuKicKKyAgICAgICAgY3VycmVudF9leHBlY3Rh
dGlvbnNfZmlsZXMgPSBbXQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fs
ayhtYWNfZXhwZWN0YXRpb25zX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBmb3IgZmlsZW5hbWUg
aW4gZm5tYXRjaC5maWx0ZXIoZmlsZXMsIGV4cGVjdGF0aW9uX3BhdHRlcm4pOgorICAgICAgICAg
ICAgICAgIGN1cnJlbnRfZXhwZWN0YXRpb25zX2ZpbGVzLmFwcGVuZChmaWxlbmFtZSkKKyAgICAg
ICAgY3VycmVudF9leHBlY3RhdGlvbnNfZmlsZXMgPSBbZiBmb3IgZiBpbiBjdXJyZW50X2V4cGVj
dGF0aW9uc19maWxlcyBpZiBmIGluIGFjdHVhbF9maWxlc10KKyAgICAgICAgCisgICAgICAgIGlm
IGN1cnJlbnRfZXhwZWN0YXRpb25zX2ZpbGVzOgorICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4
aXN0cyhtYWNfbGVvcGFyZF9leHBlY3RhdGlvbnNfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAg
bG9nKCIgIENyZWF0aW5nIG1hYy1sZW9wYXJkICVzIGRpcmVjdG9yeSIgJSB0ZXN0X2RpcmVjdG9y
eSkKKyAgICAgICAgICAgICAgb3MubWFrZWRpcnMobWFjX2xlb3BhcmRfZXhwZWN0YXRpb25zX2Rp
cmVjdG9yeSkKKyAgICAgICAgICBmb3IgZmlsZSBpbiBjdXJyZW50X2V4cGVjdGF0aW9uc19maWxl
czoKKyAgICAgICAgICAgICAgc291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4obWFjX2V4cGVjdGF0
aW9uc19kaXJlY3RvcnksIGZpbGUpCisgICAgICAgICAgICAgIGRlc3RpbmF0aW9uX3BhdGggPSBv
cy5wYXRoLmpvaW4obWFjX2xlb3BhcmRfZXhwZWN0YXRpb25zX2RpcmVjdG9yeSwgZmlsZSkKKyAg
ICAgICAgICAgICAgc2h1dGlsLm1vdmUoc291cmNlX3BhdGgsIGRlc3RpbmF0aW9uX3BhdGgpCisg
ICAgICAgICAgICAgIGV4aXRfY29kZSA9IHNlbGYuc2VydmVyLnNjbS5hZGQoZGVzdGluYXRpb25f
cGF0aCwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorICAgICAgICAgICAgICBsb2coIiAgICBNb3Zl
ZCAlcywgZXhpdCBjb2RlICVkIiAlIChmaWxlLCBleGl0X2NvZGUpKQorICAgICAgICAgICAgICBp
ZiBleGl0X2NvZGU6CisgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgbG9n
KCIgIEFkZGluZyBuZXcgYmFzZWxpbmVzIHRvIG1hYyIpCisgICAgICBmb3IgZmlsZSBpbiBhY3R1
YWxfZmlsZXM6CisgICAgICAgICAgc291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4odGVzdF9yZXN1
bHRzX2RpcmVjdG9yeSwgZmlsZS5yZXBsYWNlKCctZXhwZWN0ZWQnLCAnLWFjdHVhbCcpKQorICAg
ICAgICAgIGRlc3RpbmF0aW9uX3BhdGggPSBvcy5wYXRoLmpvaW4obWFjX2V4cGVjdGF0aW9uc19k
aXJlY3RvcnksIGZpbGUpCisgICAgICAgICAgc2h1dGlsLmNvcHkoc291cmNlX3BhdGgsIGRlc3Rp
bmF0aW9uX3BhdGgpCisgICAgICAgICAgZXhpdF9jb2RlID0gc2VsZi5zZXJ2ZXIuc2NtLmFkZChk
ZXN0aW5hdGlvbl9wYXRoLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpICAgICAgICAgIAorICAgICAg
ICAgIGxvZygiICAgIEFkZGVkICVzLCBleGl0IGNvZGUgJWQiICUgKGZpbGUsIGV4aXRfY29kZSkp
CisgICAgICAgICAgaWYgZXhpdF9jb2RlOgorICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAg
ICAgIAorICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB0ZXN0X3Jlc3VsdChzZWxmKToKKyAg
ICAgICh0ZXN0X25hbWUsIHRlc3RfZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQoc2VsZi5x
dWVyeVsndGVzdCddWzBdKQorICAgICAgbW9kZSA9IHNlbGYucXVlcnlbJ21vZGUnXVswXQorICAg
ICAgaWYgbW9kZSA9PSAnZXhwZWN0ZWQtaW1hZ2UnOgorICAgICAgICAgIGZpbGVfbmFtZSA9IHRl
c3RfbmFtZSArICctZXhwZWN0ZWQucG5nJworICAgICAgZWxpZiBtb2RlID09ICdhY3R1YWwtaW1h
Z2UnOgorICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctYWN0dWFsLnBuZycKKyAg
ICAgIGVsaWYgbW9kZSA9PSAnZGlmZi1pbWFnZSc6CisgICAgICAgICAgZmlsZV9uYW1lID0gdGVz
dF9uYW1lICsgJy1kaWZmLnBuZycKKyAgICAgIGlmIG1vZGUgPT0gJ2V4cGVjdGVkLXRleHQnOgor
ICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZXhwZWN0ZWQudHh0JworICAgICAg
ZWxpZiBtb2RlID09ICdhY3R1YWwtdGV4dCc6CisgICAgICAgICAgZmlsZV9uYW1lID0gdGVzdF9u
YW1lICsgJy1hY3R1YWwudHh0JworICAgICAgZWxpZiBtb2RlID09ICdkaWZmLXRleHQnOgorICAg
ICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZGlmZi50eHQnCisKKyAgICAgIGZpbGVf
cGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnNlcnZlci5yZXN1bHRzX2RpcmVjdG9yeSwgZmlsZV9u
YW1lKQorICAgICAgCisgICAgICBzZWxmLl9zZXJ2ZV9maWxlKGZpbGVfcGF0aCkKKyAgICAKKyAg
ICBkZWYgcmVzdWx0c19qc29uKHNlbGYpOgorICAgICAgc2VsZi5fc2VydmVfZmlsZShvcy5wYXRo
LmpvaW4oCisgICAgICAgICAgc2VsZi5zZXJ2ZXIucmVzdWx0c19kaXJlY3RvcnksICd1bmV4cGVj
dGVkX3Jlc3VsdHMuanNvbicpKQorICAgIAorICAgIGRlZiBxdWl0cXVpdHF1aXQoc2VsZik6Cisg
ICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29u
dGVudC10eXBlIiwgInRleHQvcGxhaW4iKQorICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAg
ICBzZWxmLndmaWxlLndyaXRlKCJRdWl0LlxuIikKKyAgICAgIAorICAgICAgIyBTaHV0ZG93biBo
YXMgdG8gaGFwcGVuIG9uIGFub3RoZXIgdGhyZWFkIGZyb20gdGhlIHNlcnZlcidzIHRocmVhZCwK
KyAgICAgICMgb3RoZXJ3aXNlIHRoZXJlJ3MgYSBkZWFkbG9jaworICAgICAgdGhyZWFkaW5nLlRo
cmVhZCh0YXJnZXQ9bGFtYmRhOiBzZWxmLnNlcnZlci5zaHV0ZG93bigpKS5zdGFydCgpCisKKyAg
ICBkZWYgX3NlcnZlX2ZpbGUoc2VsZiwgZmlsZV9wYXRoKToKKyAgICAgIGlmIG5vdCBvcy5wYXRo
LmV4aXN0cyhmaWxlX3BhdGgpOgorICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0LCAiRmlsZSBu
b3QgZm91bmQiKQorICAgICAgICByZXR1cm4KKyAgICAgIHN0YXRpY19maWxlID0gZmlsZShmaWxl
X3BhdGgsICdyYicpCisgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgIyBUT0RP
OiBnZW5lcmFsaXplIE1JTUUgdHlwZSBoYW5kbGluZworICAgICAgIyBUT0RPOiBhZGQgY29udGVu
dC1sZW5ndGgKKyAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJ0ZXh0L2h0
bWwiKQorICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICBzaHV0aWwuY29weWZpbGVvYmoo
c3RhdGljX2ZpbGUsIHNlbGYud2ZpbGUpCisgICAgICBzdGF0aWNfZmlsZS5jbG9zZSgpCisKK2Ns
YXNzIExvY2FsUmViYXNlbGluZShBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6CisgICAgbmFt
ZSA9ICJsb2NhbC1yZWJhc2VsaW5lIgorICAgIGhlbHBfdGV4dCA9ICJUT0RPKG1paGFpcCkiCisg
ICAgYXJndW1lbnRfbmFtZXMgPSAiWy9wYXRoL3RvL3Jlc3VsdHMvZGlyZWN0b3J5L10iCisKKyAg
ICBkZWYgX3JlcGxhY2VfZXhwZWN0YXRpb25fd2l0aF9yZW1vdGVfcmVzdWx0KHNlbGYsIGxvY2Fs
X2ZpbGUsIHJlbW90ZV9maWxlKToKKyAgICAgICAgKGRvd25sb2FkZWRfZmlsZSwgaGVhZGVycykg
PSB1cmxsaWIudXJscmV0cmlldmUocmVtb3RlX2ZpbGUpCisgICAgICAgIHNodXRpbC5tb3ZlKGRv
d25sb2FkZWRfZmlsZSwgbG9jYWxfZmlsZSkKKworICAgIGRlZiBfdGVzdHNfdG9fdXBkYXRlKHNl
bGYsIGJ1aWxkKToKKyAgICAgICAgcGFyc2VkX3Jlc3VsdHMgPSBidWlsZC5sYXlvdXRfdGVzdF9y
ZXN1bHRzKCkucGFyc2VkX3Jlc3VsdHMoKQorICAgICAgICAjIEZJWE1FOiBUaGlzIHByb2JhYmx5
IGJlbG9uZ3MgYXMgQVBJIG9uIExheW91dFRlc3RSZXN1bHRzCisgICAgICAgICMgYnV0IC5mYWls
aW5nX3Rlc3RzKCkgYWxyZWFkeSBtZWFucyBzb21ldGhpbmcgZWxzZS4KKyAgICAgICAgZmFpbGlu
Z190ZXN0cyA9IHBhcnNlZF9yZXN1bHRzW0xheW91dFRlc3RSZXN1bHRzLmZhaWxfa2V5XQorICAg
ICAgICByZXR1cm4gc2VsZi5fdG9vbC51c2VyLnByb21wdF93aXRoX2xpc3QoIldoaWNoIHRlc3Qo
cykgdG8gcmViYXNlbGluZToiLCBmYWlsaW5nX3Rlc3RzLCBjYW5fY2hvb3NlX211bHRpcGxlPVRy
dWUpCisKKyAgICBkZWYgX3Jlc3VsdHNfdXJsX2Zvcl90ZXN0KHNlbGYsIGJ1aWxkLCB0ZXN0KToK
KyAgICAgICAgdGVzdF9iYXNlID0gb3MucGF0aC5zcGxpdGV4dCh0ZXN0KVswXQorICAgICAgICBh
Y3R1YWxfcGF0aCA9IHRlc3RfYmFzZSArICItYWN0dWFsLnR4dCIKKyAgICAgICAgcmV0dXJuIGJ1
aWxkLnJlc3VsdHNfdXJsKCkgKyAiLyIgKyBhY3R1YWxfcGF0aAorCisgICAgZGVmIGV4ZWN1dGUo
c2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CisgICAgICAgIGlmIGxlbihhcmdzKSAhPSAxOgor
ICAgICAgICAgIHByaW50ICJQYXRoIHRvIHJlc3VsdHMgZGlyZWN0b3J5IGlzIHJlcXVpcmVkLiIK
KyAgICAgICAgICByZXR1cm4gMQorICAgICAgICByZXN1bHRzX2RpcmVjdG9yeSA9IGFyZ3NbMF0g
ICAgICAgIAorICAgICAgICAKKyAgICAgICAgcHJpbnQgIkdhdGhlcmluZyBjdXJyZW50IGJhc2Vs
aW5lcy4uLiIKKyAgICAgICAgCisgICAgICAgIHBvcnQgPSBmYWN0b3J5LmdldCgpCisgICAgICAg
IGxheW91dF90ZXN0c19kaXJlY3RvcnkgPSBwb3J0LmxheW91dF90ZXN0c19kaXIoKQorICAgICAg
ICBiYXNlbGluZXNfYnlfdGVzdCA9IHt9CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBp
biBvcy53YWxrKGxheW91dF90ZXN0c19kaXJlY3RvcnkpOgorICAgICAgICAgICAgZm9yIGZpbGVu
YW1lIGluIGZubWF0Y2guZmlsdGVyKGZpbGVzLCAnKi1leHBlY3RlZC4qJyk6CisgICAgICAgICAg
ICAgICAgcmVsYXRpdmVfcGF0aCA9IG9zLnBhdGgucmVscGF0aChyb290LCBsYXlvdXRfdGVzdHNf
ZGlyZWN0b3J5KQorICAgICAgICAgICAgICAgIHBhdGhfcGllY2VzID0gcmVsYXRpdmVfcGF0aC5z
cGxpdChvcy5zZXApCisgICAgICAgICAgICAgICAgaWYgbGVuKHBhdGhfcGllY2VzKSA+PSAyIGFu
ZCBwYXRoX3BpZWNlc1swXSA9PSAncGxhdGZvcm0nOgorICAgICAgICAgICAgICAgICAgICBwbGF0
Zm9ybSA9IHBhdGhfcGllY2VzWzFdCisgICAgICAgICAgICAgICAgICAgIHRlc3RfZGlyX3BhdGgg
PSBvcy5zZXAuam9pbihwYXRoX3BpZWNlc1syOl0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICAgICAgcGxhdGZvcm0gPSAnYmFzZScKKyAgICAgICAgICAgICAgICAgICAg
dGVzdF9kaXJfcGF0aCA9IHJlbGF0aXZlX3BhdGgKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAodGVzdF9uYW1lLCB0ZXh0X2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KGZp
bGVuYW1lKQorICAgICAgICAgICAgICAgIHRlc3RfbmFtZSA9IHRlc3RfbmFtZVswOi1sZW4oJy1l
eHBlY3RlZCcpXQorICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IG9zLnBhdGguam9pbih0ZXN0
X2Rpcl9wYXRoLCB0ZXN0X25hbWUpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9wYXRoIG5vdCBp
biBiYXNlbGluZXNfYnlfdGVzdDoKKyAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVzX2J5X3Rl
c3RbdGVzdF9wYXRoXSA9IHNldCgpCisgICAgICAgICAgICAgICAgYmFzZWxpbmVzX2J5X3Rlc3Rb
dGVzdF9wYXRoXS5hZGQocGxhdGZvcm0pCisgICAgICAgIAorICAgICAgICBwcmludCAiU3RhcnRp
bmcgc2VydmVyIGF0IGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC8iCisgICAgICAgIAorICAgICAgICBo
dHRwZCA9IFJlYmFzZWxpbmVIVFRTZXJ2ZXIoCisgICAgICAgICAgICBodHRwZF9wb3J0PTgwMDAs
CisgICAgICAgICAgICByZXN1bHRzX2RpcmVjdG9yeT1yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAg
ICAgICAgIGJhc2VsaW5lc19ieV90ZXN0PWJhc2VsaW5lc19ieV90ZXN0LAorICAgICAgICAgICAg
cG9ydD1wb3J0LAorICAgICAgICAgICAgc2NtPXNlbGYuX3Rvb2wuc2NtKCkpCisgICAgICAgIGh0
dHBkLnNlcnZlX2ZvcmV2ZXIoKSAgICAgICAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71568</attachid>
            <date>2010-10-22 09:23:32 -0700</date>
            <delta_ts>2010-10-22 21:54:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47761-20101022092331.patch</filename>
            <type>text/plain</type>
            <size>34696</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9k
YXRhL2xvY2FscmViYXNlbGluZS9pbmRleC5odG1sIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL2RhdGEvbG9jYWxyZWJhc2VsaW5lL2luZGV4Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGQyNWZiNTIxMjJlYzVhZDMyM2FjN2U5OWQzNGZhYzU3MTc2OTAyZAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRh
L2xvY2FscmViYXNlbGluZS9pbmRleC5odG1sCkBAIC0wLDAgKzEsMzE4IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisJPHRpdGxlPkxheW91dCBUZXN0IFJlYmFzZWxpbmVyPC90
aXRsZT4KKwk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorCSAgYm9keSB7CisJICAgIGZvbnQtc2l6
ZTogMTJweDsKKwkgICAgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7
CisJICAgIHBhZGRpbmc6IDA7CisJICAgIG1hcmdpbjogMDsKKwkgIH0KKwkgIAorCSAgZGl2IHsK
KwkgICAgbWFyZ2luOiAwOworCSAgfQorCSAgCisJICBhLCAubGluayB7CisgICAgICBjb2xvcjog
I2FhZjsKKyAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAgICAgY3Vyc29yOiBw
b2ludGVyOwkgICAgCisJICB9CisJICAKKwkgICNsb2cgeworCSAgICBwYWRkaW5nOiAuMjVlbSAw
IDAgLjI1ZW07CisJICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKwkgICAgYm90dG9tOiAzZW07CisJ
ICAgIHJpZ2h0OiAwOworCSAgICB3aWR0aDogNTAwcHg7CisJICAgIGhlaWdodDogMzAwcHg7CisJ
ICAgIG92ZXJmbG93OiBhdXRvOworCSAgICBiYWNrZ3JvdW5kOiAjZmZmOworCSAgICAtd2Via2l0
LWJveC1zaGFkb3c6IDFweCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgLjUpOworCSAgfQorCSAgCisJ
ICAjaGVhZGVyLAorCSAgI2Zvb3RlciB7CisgICAgICBwYWRkaW5nOiAuNWVtIDFlbTsJICAKKyAg
ICAgIGJhY2tncm91bmQ6ICMzMzM7CisgICAgICBjb2xvcjogI2ZmZjsKKyAgICAgIC13ZWJraXQt
Ym94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC41KTsKKwkgIH0KKwkgIAorICAg
ICNoZWFkZXIgeworICAgICAgbWFyZ2luLWJvdHRvbTogMWVtOworICAgIH0KKyAgICAKKyAgICAj
aGVhZGVyIGxhYmVsLAorICAgICNmb290ZXIgbGFiZWwgeworICAgICAgcGFkZGluZy1yaWdodDog
MWVtOworICAgICAgY29sb3I6ICNjY2M7CisgICAgfQorICAgIAorICAgICNoZWFkZXIgbGFiZWwg
c3BhbiwKKyAgICAjZm9vdGVyIGxhYmVsIHNwYW4geworICAgICAgY29sb3I6ICNmZmY7CisgICAg
ICBmb250LXdlaWdodDogYm9sZDsKKyAgICB9CisgICAgCisgICAgI25hdi1idXR0b25zIGJ1dHRv
biB7CisgICAgICBiYWNrZ3JvdW5kOiAjZmZmOworICAgICAgYm9yZGVyOiAwOworICAgICAgYm9y
ZGVyLXJhZGl1czogMTBweDsKKyAgICB9CisgICAgCisgICAgI25hdi1idXR0b25zIGJ1dHRvbjph
Y3RpdmUgeworICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNXB4ICMzM2YgaW5zZXQ7Cisg
ICAgICBiYWNrZ3JvdW5kOiAjYWFhOworICAgIH0KKworICAgICNuYXYtYnV0dG9ucyBidXR0b25b
ZGlzYWJsZWRdIHsKKyAgICAgIG9wYWNpdHk6IC41OworICAgIH0KKworCSAgI2NvbnRyb2xzIHsK
KwkgICAgZmxvYXQ6IHJpZ2h0OworCSAgfQorCSAgCisJICAjdGVzdC1vdXRwdXQgeworCSAgICBi
b3JkZXItc3BhY2luZzogMDsKKwkgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKwkgICAg
bWFyZ2luOiAwIGF1dG87CisJICB9CisJICAKKwkgICN0ZXN0LW91dHB1dCB0ZCwKKwkgICN0ZXN0
LW91dHB1dCB0aCB7CisJICAgIHBhZGRpbmc6IDA7CisJICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7
CisJICB9CisJICAKKwkgICNpbWFnZS1vdXRwdXRzIGltZywKKwkgICNpbWFnZS1vdXRwdXRzIGNh
bnZhcyB7CisJICAgIHdpZHRoOiA4MDBweDsKKwkgICAgaGVpZ2h0OiA2MDBweDsKKwkgICAgYm9y
ZGVyOiBzb2xpZCAxcHggI2RkZDsKKwkgIH0KKwkgIAorCSAgI2ltYWdlLW91dHB1dHMgaW1nLmxv
YWRpbmcsCisJICAjaW1hZ2Utb3V0cHV0cyBjYW52YXMubG9hZGluZyB7CisJICAgIG9wYWNpdHk6
IC41OworCSAgfQorCSAgCisJICAjaW1hZ2Utb3V0cHV0cyAjYWN0dWFsLWltYWdlIHsKKwkgICAg
bWFyZ2luOiAwIDFlbTsKKwkgIH0KKwkgIAorCSAgI3Rlc3Qtb3V0cHV0ICNsYWJlbHMgdGggewor
CSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisJICAgIGNvbG9yOiAjNjY2OworCSAgfQorCSAgCisJ
ICAjdGV4dC1vdXRwdXRzIHByZSB7CisJICAgIGhlaWdodDogNjAwcHg7CisJICAgIHdpZHRoOiA4
MDBweDsKKwkgICAgb3ZlcmZsb3c6IGF1dG87CisJICB9CisJICAKKwkgICN0ZXN0LW91dHB1dCBo
MiB7CisJICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjY2NjOworCSAgICBmb250LXdlaWdo
dDogYm9sZDsKKwkgICAgbWFyZ2luOiAwOworCSAgICBiYWNrZ3JvdW5kOiAjZWVlOworCSAgfQor
CSAgCisJICAjZm9vdGVyIHsKKwkgICAgcG9zaXRpb246IGFic29sdXRlOworCSAgICBib3R0b206
IDA7CisJICAgIGxlZnQ6IDA7CisJICAgIHJpZ2h0OiAwOworCSAgICBtYXJnaW4tdG9wOiAxZW07
CisJICB9CisJICAKKwkgICNhY3Rpb24tYnV0dG9ucyB7CisJICAgIGZsb2F0OiByaWdodDsKKwkg
IH0KKwkgIAorCSAgI2Zvb3RlciBidXR0b24geworCSAgICBwYWRkaW5nOiAxZW07CisJICAgIHdp
ZHRoOiAxMGVtOworCSAgfQorCSAgCisJICAjbG91cGUgeworCSAgICAtd2Via2l0LWJveC1zaGFk
b3c6IDJweCAycHggNXB4IHJnYmEoMCwgMCwgMCwgLjUpOworCSAgICBwb3NpdGlvbjogYWJzb2x1
dGU7CisJICAgIHdpZHRoOiA2MzRweDsKKwkgICAgdG9wOiA1MCU7CisJICAgIGxlZnQ6IDUwJTsK
KwkgICAgbWFyZ2luLWxlZnQ6IC0xNTFweDsKKwkgICAgbWFyZ2luLXRvcDogLTUwcHg7CisJICAg
IGJhY2tncm91bmQ6ICNmZmY7CisJICAgIGJvcmRlci1zcGFjaW5nOiAwOworCSAgICBib3JkZXIt
Y29sbGFwc2U6IGNvbGxhcHNlOworCSAgfQorCSAgCisJICAjbG91cGUgdGQgeworCSAgICBwYWRk
aW5nOiAwOworICAgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsJICAgIAorCSAgfQorCSAgCisg
ICAgI2xvdXBlIGxhYmVsIHsKKyAgICAgIGNvbG9yOiAjOTk5OworICAgICAgcGFkZGluZy1yaWdo
dDogMWVtOworICAgIH0KKyAgICAKKyAgICAjbG91cGUgc3BhbiB7CisgICAgICBjb2xvcjogIzAw
MDsKKyAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIH0KKyAgICAKKyAgICAjbG91cGUgI2xv
dXBlLWNsb3NlIHsKKyAgICAgIGZsb2F0OiByaWdodDsKKyAgICB9CisgICAgCisgICAgI2xvdXBl
ICNsb3VwZS1pbmZvIHsKKyAgICAgIGJhY2tncm91bmQ6ICNlZWU7CisgICAgICBwYWRkaW5nOiAu
M2VtIC41ZW07CisgICAgfQorICAgIAorICAgICNsb3VwZSAjbG91cGUtY29sb3JzIHRkIHsKKyAg
ICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICB9CisgICAgCisgICAgI2xvdXBlIC5sb3VwZS1j
b250YWluZXIgeworICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgd2lkdGg6IDIxMHB4
OworICAgICAgaGVpZ2h0OiAyMTBweDsKKyAgICB9CisgICAgCisgICAgI2xvdXBlIC5jZW50ZXIt
aGlnaGxpZ2h0IHsKKyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgIHdpZHRoOiAxMHB4
OworICAgICAgaGVpZ2h0OiAxMHB4OworICAgICAgdG9wOiA1MCU7CisgICAgICBsZWZ0OiA1MCU7
CisgICAgICBtYXJnaW4tbGVmdDogLTVweDsKKyAgICAgIG1hcmdpbi10b3A6IC01cHg7CisgICAg
ICBvdXRsaW5lOiBzb2xpZCAxcHggIzk5OTsKKyAgICB9CisJPC9zdHlsZT4KKzwvaGVhZD4KKzxi
b2R5PgorCis8cHJlIGlkPSJsb2ciIHN0eWxlPSJkaXNwbGF5OiBub25lIj48L3ByZT4KKworPGRp
diBpZD0iaGVhZGVyIj4KKyAgPGRpdiBpZD0iY29udHJvbHMiPgorICAgIDwhLS0gQWRkIGEgZHVt
bXkgPHNlbGVjdD4gbm9kZSBzbyB0aGF0IHRoaXMgbGluZXMgdXAgd2l0aCB0aGUgdGV4dCBvbiB0
aGUgbGVmdCAtLT4KKyAgICA8c2VsZWN0IHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iPjwvc2Vs
ZWN0PgorICAgIDxhIGhyZWY9Ii9xdWl0cXVpdHF1aXQiPkV4aXQ8L2E+CisgIDwvZGl2PgorCisg
IDxzcGFuIGlkPSJzZWxlY3RvcnMiPgorICAgIDxsYWJlbD4KKyAgICAgIEZhaWx1cmUgdHlwZToK
KyAgICAgIDxzZWxlY3QgaWQ9ImZhaWx1cmUtdHlwZS1zZWxlY3RvciI+PC9zZWxlY3Q+CisgICAg
PC9sYWJlbD4KKyAgCisgICAgPGxhYmVsPgorICAgICAgRGlyZWN0b3J5OgorICAgICAgPHNlbGVj
dCBpZD0iZGlyZWN0b3J5LXNlbGVjdG9yIj48L3NlbGVjdD4KKyAgICA8L2xhYmVsPgorICAKKyAg
ICA8bGFiZWw+CisgICAgICBUZXN0OgorICAgICAgPHNlbGVjdCBpZD0idGVzdC1zZWxlY3RvciI+
PC9zZWxlY3Q+CisgICAgPC9sYWJlbD4KKyAgPC9zcGFuPgorICAKKyAgPHNwYW4gaWQ9Im5hdi1i
dXR0b25zIj4KKyAgICA8YnV0dG9uIGlkPSJwcmV2aW91cy10ZXN0Ij4mbGFxdW87PC9idXR0b24+
CisgICAgPHNwYW4gaWQ9InRlc3QtaW5kZXgiPjwvc3Bhbj4gb2YgPHNwYW4gaWQ9InRlc3QtY291
bnQiPjwvc3Bhbj4KKyAgICA8YnV0dG9uIGlkPSJuZXh0LXRlc3QiPiZyYXF1bzs8L2J1dHRvbj4K
KyAgPC9zcGFuPiAgCis8L2Rpdj4KKworPHRhYmxlIGlkPSJ0ZXN0LW91dHB1dCI+CisgIDx0aGVh
ZCBpZD0ibGFiZWxzIj4KKyAgICA8dGg+RXhwZWN0ZWQ8L3RoPgorICAgIDx0aD5BY3R1YWw8L3Ro
PgorICAgIDx0aD5EaWZmPC90aD4KKyAgPC90aGVhZD4KKyAgPHRib2R5IGlkPSJpbWFnZS1vdXRw
dXRzIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+CisgICAgPHRyPgorICAgICAgPHRkIGNvbHNwYW49
IjMiPjxoMj5JbWFnZTwvaDI+PC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZD48
aW1nIGlkPSJleHBlY3RlZC1pbWFnZSI+PC90ZD4KKyAgICAgIDx0ZD48aW1nIGlkPSJhY3R1YWwt
aW1hZ2UiPjwvdGQ+CisgICAgICA8dGQ+PGNhbnZhcyBpZD0iZGlmZi1jYW52YXMiIHdpZHRoPSI4
MDAiIGhlaWdodD0iNjAwIj48L2NhbnZhcz48L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cisg
IDx0Ym9keSBpZD0idGV4dC1vdXRwdXRzIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+CisgICAgPHRy
PgorICAgICAgPHRkIGNvbHNwYW49IjMiPjxoMj5UZXh0PC9oMj48L3RkPgorICAgIDwvdHI+Cisg
ICAgPHRyPgorICAgICAgPHRkPjxwcmUgaWQ9ImV4cGVjdGVkLXRleHQiPjwvcHJlPjwvdGQ+Cisg
ICAgICA8dGQ+PHByZSBpZD0iYWN0dWFsLXRleHQiPjwvcHJlPjwvdGQ+CisgICAgICA8dGQ+PHBy
ZSBpZD0iZGlmZi10ZXh0Ij48cHJlPjwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKworPC90
YWJsZT4KKworPGRpdiBpZD0iZm9vdGVyIj4KKyAgPGxhYmVsPkV4aXN0aW5nIGJhc2VsaW5lczog
PHNwYW4gaWQ9ImN1cnJlbnQtYmFzZWxpbmVzIj48L3NwYW4+PC9sYWJlbD4KKyAgPGxhYmVsPgor
ICAgIEJhc2VsaW5lIGNyZWF0aW9uIG1vZGU6CisgICAgPHNlbGVjdCBpZD0iYmFzZWxpbmUtc2Vs
ZWN0b3IiPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjLXNub3ctbGVvcGFyZCI+TWFjIFNub3cg
TGVvcGFyZDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0tc25vdy1sZW9w
YXJkIj5DaHJvbWl1bSBTbm93IExlb3BhcmQ8L29wdGlvbj4KKyAgICA8L3NlbGVjdD4KKyAgPC9s
YWJlbD4KKyAgPCEtLSBBZGQgYSBkdW1teSA8YnV0dG9uPiBub2RlIHNvIHRoYXQgdGhpcyBsaW5l
cyB1cCB3aXRoIHRoZSB0ZXh0IG9uIHRoZSBsZWZ0IC0tPgorICA8YnV0dG9uIHN0eWxlPSJ2aXNp
YmlsaXR5OiBoaWRkZW4iPjwvYnV0dG9uPgorICAKKyAgPGRpdiBpZD0iYWN0aW9uLWJ1dHRvbnMi
PgorICAgIDxzcGFuIGlkPSJ0b2dnbGUtbG9nIiBjbGFzcz0ibGluayI+TG9nPC9zcGFuPgorICAg
IDxidXR0b24gaWQ9InJlYmFzZWxpbmUiPlJlYmFzZWxpbmU8L2J1dHRvbj4KKyAgPC9kaXY+Cis8
L2Rpdj4KKworPHRhYmxlIGlkPSJsb3VwZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgorICA8dHI+
CisgICAgPHRkIGNvbHNwYW49IjMiIGlkPSJsb3VwZS1pbmZvIj4KKyAgICAgIDxzcGFuIGlkPSJs
b3VwZS1jbG9zZSIgY2xhc3M9ImxpbmsiPkNsb3NlPC9zcGFuPgorICAgICAgPGxhYmVsPkNvb3Jk
aW5hdGU6IDxzcGFuIGlkPSJsb3VwZS1jb29yZGluYXRlIj48L3NwYW4+PC9sYWJlbD4KKyAgICA8
L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkPgorICAgICAgPGRpdiBjbGFzcz0ibG91cGUt
Y29udGFpbmVyIj4KKyAgICAgICAgPGNhbnZhcyBpZD0iZXhwZWN0ZWQtbG91cGUiIHdpZHRoPSIy
MTAiIGhlaWdodD0iMjEwIj48L2NhbnZhcz4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2VudGVyLWhp
Z2hsaWdodCI+PC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L3RkPgorICAgIDx0ZD4KKyAgICAg
IDxkaXYgY2xhc3M9ImxvdXBlLWNvbnRhaW5lciI+CisgICAgICAgIDxjYW52YXMgaWQ9ImFjdHVh
bC1sb3VwZSIgd2lkdGg9IjIxMCIgaGVpZ2h0PSIyMTAiPjwvY2FudmFzPgorICAgICAgICA8ZGl2
IGNsYXNzPSJjZW50ZXItaGlnaGxpZ2h0Ij48L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvdGQ+
CisgICAgPHRkPgorICAgICAgPGRpdiBjbGFzcz0ibG91cGUtY29udGFpbmVyIj4KKyAgICAgICAg
PGNhbnZhcyBpZD0iZGlmZi1sb3VwZSIgd2lkdGg9IjIxMCIgaGVpZ2h0PSIyMTAiPjwvY2FudmFz
PgorICAgICAgICA8ZGl2IGNsYXNzPSJjZW50ZXItaGlnaGxpZ2h0Ij48L2Rpdj4KKyAgICAgIDwv
ZGl2PgorICAgIDwvdGQ+CisgIDwvdHI+CisgIDx0ciBpZD0ibG91cGUtY29sb3JzIj4KKyAgICA8
dGQ+PGxhYmVsPkV4cC4gY29sb3I6IDxzcGFuIGlkPSJleHBlY3RlZC1sb3VwZS1jb2xvciI+PC9z
cGFuPjwvbGFiZWw+PC90ZD4KKyAgICA8dGQ+PGxhYmVsPkFjdHVhbCBjb2xvcjogPHNwYW4gaWQ9
ImFjdHVhbC1sb3VwZS1jb2xvciI+PC9zcGFuPjwvbGFiZWw+PC90ZD4KKyAgICA8dGQ+PGxhYmVs
PkRpZmYgY29sb3I6IDxzcGFuIGlkPSJkaWZmLWxvdXBlLWNvbG9yIj48L3NwYW4+PC9sYWJlbD48
L3RkPgorICA8L3RyPgorPC90YWJsZT4KKworPHNjcmlwdCBzcmM9Ii9tYWluLmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9tYWluLmpzIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvbG9jYWxyZWJhc2VsaW5l
L21haW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjAwNTQwNmJiYTkxZjc1OTM0YTFiMjZmNWUzOGYxODJhMGJj
ZWJhMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9tYWluLmpzCkBAIC0wLDAgKzEsNDM1IEBA
Cit2YXIgcmVzdWx0czsKK3ZhciB0ZXN0c0J5RmFpbHVyZVR5cGUgPSB7fTsKK3ZhciB0ZXN0c0J5
RGlyZWN0b3J5ID0ge307Cit2YXIgc2VsZWN0ZWRUZXN0cyA9IFtdOworCitmdW5jdGlvbiAkKGlk
KSB7CisgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Cit9CisKK2Z1bmN0aW9u
IG1haW4oKSB7CisgICQoJ2ZhaWx1cmUtdHlwZS1zZWxlY3RvcicpLmFkZEV2ZW50TGlzdGVuZXIo
J2NoYW5nZScsIHNlbGVjdEZhaWx1cmVUeXBlKTsKKyAgJCgnZGlyZWN0b3J5LXNlbGVjdG9yJyku
YWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgc2VsZWN0RGlyZWN0b3J5KTsKKyAgJCgndGVzdC1z
ZWxlY3RvcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHNlbGVjdFRlc3QpOworICAkKCdu
ZXh0LXRlc3QnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG5leHRUZXN0KTsKKyAgJCgncHJl
dmlvdXMtdGVzdCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcHJldmlvdXNUZXN0KTsKKyAg
JCgncmViYXNlbGluZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmViYXNlbGluZSk7Cisg
ICQoJ2V4cGVjdGVkLWltYWdlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzaG93TG91cGUp
OworICAkKCdhY3R1YWwtaW1hZ2UnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHNob3dMb3Vw
ZSk7CisgICQoJ2RpZmYtY2FudmFzJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzaG93TG91
cGUpOworICAkKCdsb3VwZS1jbG9zZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGlkZUxv
dXBlKTsKKyAgJCgndG9nZ2xlLWxvZycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9nZ2xl
TG9nKTsKKworICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQu
bWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBz
d2l0Y2ggKGV2ZW50LmtleUlkZW50aWZpZXIpIHsKKyAgICAgIGNhc2UgJ0xlZnQnOiBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOyBwcmV2aW91c1Rlc3QoKTsgYnJlYWs7CisgICAgICBjYXNlICdSaWdo
dCc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IG5leHRUZXN0KCk7IGJyZWFrOworICAgICAgY2Fz
ZSAnVSswMDUyJzogcmViYXNlbGluZSgpOyBicmVhazsKKyAgICB9CisgIH0pOworICAKKyAgdmFy
IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICB4aHIub3BlbignR0VUJywgJy9yZXN1bHRz
Lmpzb24nKTsKKyAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKKyAg
ICByZXN1bHRzID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTsKKyAgICBkaXNwbGF5UmVz
dWx0cygpOyAgCisgIH0pOworICB4aHIuc2VuZCgpOworfQorCitmdW5jdGlvbiBkaXNwbGF5UmVz
dWx0cygpIHsKKyAgdmFyIGZhaWx1cmVUeXBlU2VsZWN0b3IgPSAkKCdmYWlsdXJlLXR5cGUtc2Vs
ZWN0b3InKTsKKyAgdmFyIGZhaWx1cmVUeXBlcyA9IFtdOworICAKKyAgZm9yICh2YXIgdGVzdE5h
bWUgaW4gcmVzdWx0cy50ZXN0cykgeworICAgIHZhciB0ZXN0ID0gcmVzdWx0cy50ZXN0c1t0ZXN0
TmFtZV07CisgICAgaWYgKHRlc3QuYWN0dWFsID09ICdQQVNTJykgeworICAgICAgY29udGludWU7
CisgICAgfQorICAgIHZhciBmYWlsdXJlVHlwZSA9IHRlc3QuYWN0dWFsICsgJyAoZXhwZWN0ZWQg
JyArIHRlc3QuZXhwZWN0ZWQgKyAnKSc7CisgICAgaWYgKCEoZmFpbHVyZVR5cGUgaW4gdGVzdHNC
eUZhaWx1cmVUeXBlKSkgeworICAgICAgdGVzdHNCeUZhaWx1cmVUeXBlW2ZhaWx1cmVUeXBlXSA9
IFtdOworICAgICAgZmFpbHVyZVR5cGVzLnB1c2goZmFpbHVyZVR5cGUpOworICAgIH0KKyAgICB0
ZXN0c0J5RmFpbHVyZVR5cGVbZmFpbHVyZVR5cGVdLnB1c2godGVzdE5hbWUpOworICB9CisgIAor
ICBmYWlsdXJlVHlwZXMuc29ydChmdW5jdGlvbihhLCBiKSB7CisgICAgcmV0dXJuIHRlc3RzQnlG
YWlsdXJlVHlwZVtiXS5sZW5ndGggLSB0ZXN0c0J5RmFpbHVyZVR5cGVbYV0ubGVuZ3RoOworICB9
KTsKKyAgCisgIGZvciAodmFyIGkgPSAwLCBmYWlsdXJlVHlwZTsgZmFpbHVyZVR5cGUgPSBmYWls
dXJlVHlwZXNbaV07IGkrKykgeworICAgIHZhciBmYWlsdXJlVHlwZU9wdGlvbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOworICAgIGZhaWx1cmVUeXBlT3B0aW9uLnZhbHVlID0g
ZmFpbHVyZVR5cGU7CisgICAgZmFpbHVyZVR5cGVPcHRpb24udGV4dENvbnRlbnQgPSBmYWlsdXJl
VHlwZSArICcgLSAnICsgdGVzdHNCeUZhaWx1cmVUeXBlW2ZhaWx1cmVUeXBlXS5sZW5ndGggKyAn
IHRlc3RzJzsKKyAgICBmYWlsdXJlVHlwZVNlbGVjdG9yLmFwcGVuZENoaWxkKGZhaWx1cmVUeXBl
T3B0aW9uKTsKKyAgfQorICAKKyAgc2VsZWN0RmFpbHVyZVR5cGUoKTsKK30KKworZnVuY3Rpb24g
c2VsZWN0RmFpbHVyZVR5cGUoKSB7CisgIHZhciBmYWlsdXJlVHlwZVNlbGVjdG9yID0gJCgnZmFp
bHVyZS10eXBlLXNlbGVjdG9yJyk7CisgIHZhciBzZWxlY3RlZEZhaWx1cmVUeXBlID0KKyAgICAg
IGZhaWx1cmVUeXBlU2VsZWN0b3IuY2hpbGROb2Rlc1tmYWlsdXJlVHlwZVNlbGVjdG9yLnNlbGVj
dGVkSW5kZXhdLnZhbHVlOworICB2YXIgdGVzdHMgPSB0ZXN0c0J5RmFpbHVyZVR5cGVbc2VsZWN0
ZWRGYWlsdXJlVHlwZV07CisgIAorICAvLyBJbmNsdWRlIGEgYXBlY2lhbCBvcHRpb24gZm9yIGFs
bCB0ZXN0cworICB0ZXN0c0J5RGlyZWN0b3J5ID0geydbYWxsXSc6IHRlc3RzfTsKKyAgdmFyIGRp
c3BsYXlEaXJlY3RvcnlOYW1lc0J5RGlyZWN0b3J5ID0geydbYWxsXSc6ICdhbGwnfTsKKyAgCisg
IGZvciAodmFyIGkgPSAwLCB0ZXN0OyB0ZXN0ID0gdGVzdHNbaV07IGkrKykgeworICAgIHZhciBw
YXRoUGllY2VzID0gdGVzdC5zcGxpdCgnLycpOworICAgIHZhciBkaXJlY3RvcnkgPSAnJzsKKyAg
ICAKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhdGhQaWVjZXMubGVuZ3RoIC0gMTsgaisrKSB7
CisgICAgICBkaXJlY3RvcnkgKz0gcGF0aFBpZWNlc1tqXSArICcvJzsKKyAgICAgIGlmICghKGRp
cmVjdG9yeSBpbiB0ZXN0c0J5RGlyZWN0b3J5KSkgeworICAgICAgICB0ZXN0c0J5RGlyZWN0b3J5
W2RpcmVjdG9yeV0gPSBbXTsKKyAgICAgICAgdmFyIGRpc3BsYXlEaXJlY3RvcnlOYW1lID0gbmV3
IEFycmF5KGogKiA2KS5qb2luKCcmbmJzcDsnKSArIHBhdGhQaWVjZXNbal07CisgICAgICAgIGRp
c3BsYXlEaXJlY3RvcnlOYW1lc0J5RGlyZWN0b3J5W2RpcmVjdG9yeV0gPSBkaXNwbGF5RGlyZWN0
b3J5TmFtZTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdGVzdHNCeURpcmVjdG9yeVtkaXJlY3Rv
cnldLnB1c2godGVzdCk7CisgICAgfQorICB9CisKKyAgdmFyIGRpcmVjdG9yeVNlbGVjdG9yID0g
JCgnZGlyZWN0b3J5LXNlbGVjdG9yJyk7ICAKKyAgZGlyZWN0b3J5U2VsZWN0b3IuaW5uZXJIVE1M
ID0gJyc7CisgIAorICBmb3IgKHZhciBkaXJlY3RvcnkgaW4gdGVzdHNCeURpcmVjdG9yeSkgewor
ICAgIHZhciBkaXJlY3RvcnlPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24n
KTsKKyAgICBkaXJlY3RvcnlPcHRpb24udmFsdWUgPSBkaXJlY3Rvcnk7CisgICAgZGlyZWN0b3J5
T3B0aW9uLmlubmVySFRNTCA9CisgICAgICAgIGRpc3BsYXlEaXJlY3RvcnlOYW1lc0J5RGlyZWN0
b3J5W2RpcmVjdG9yeV0gKyAnIC0gJyArCisgICAgICAgIHRlc3RzQnlEaXJlY3RvcnlbZGlyZWN0
b3J5XS5sZW5ndGggKyAnIHRlc3RzJzsKKyAgICBkaXJlY3RvcnlTZWxlY3Rvci5hcHBlbmRDaGls
ZChkaXJlY3RvcnlPcHRpb24pOyAgICAKKyAgfQorICAKKyAgc2VsZWN0RGlyZWN0b3J5KCk7Cit9
CisKK2Z1bmN0aW9uIHNlbGVjdERpcmVjdG9yeSgpIHsKKyAgdmFyIGRpcmVjdG9yeVNlbGVjdG9y
ID0gJCgnZGlyZWN0b3J5LXNlbGVjdG9yJyk7CisgIHZhciBzZWxlY3RlZERpcmVjdG9yeSA9Cisg
ICAgICBkaXJlY3RvcnlTZWxlY3Rvci5jaGlsZE5vZGVzW2RpcmVjdG9yeVNlbGVjdG9yLnNlbGVj
dGVkSW5kZXhdLnZhbHVlOworICBzZWxlY3RlZFRlc3RzID0gdGVzdHNCeURpcmVjdG9yeVtzZWxl
Y3RlZERpcmVjdG9yeV07CisKKyAgdmFyIHRlc3RTZWxlY3RvciA9ICQoJ3Rlc3Qtc2VsZWN0b3In
KTsKKyAgdGVzdFNlbGVjdG9yLmlubmVySFRNTCA9ICcnOworICBmb3IgKHZhciBpID0gMCwgdGVz
dDsgdGVzdCA9IHNlbGVjdGVkVGVzdHNbaV07IGkrKykgeworICAgIHZhciB0ZXN0T3B0aW9uID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CisgICAgdGVzdE9wdGlvbi52YWx1ZSA9
IHRlc3Q7CisgICAgdGVzdE9wdGlvbi50ZXh0Q29udGVudCA9IHRlc3Q7CisgICAgdGVzdFNlbGVj
dG9yLmFwcGVuZENoaWxkKHRlc3RPcHRpb24pOyAgICAKKyAgfQorICAKKyAgc2VsZWN0VGVzdCgp
OworfQorCitmdW5jdGlvbiBnZXRTZWxlY3RlZFRlc3QoKSB7CisgIHZhciB0ZXN0U2VsZWN0b3Ig
PSAkKCd0ZXN0LXNlbGVjdG9yJyk7CisgIHJldHVybiB0ZXN0U2VsZWN0b3IuY2hpbGROb2Rlc1t0
ZXN0U2VsZWN0b3Iuc2VsZWN0ZWRJbmRleF0udmFsdWU7fQorCitmdW5jdGlvbiBzZWxlY3RUZXN0
KCkgeworICB2YXIgc2VsZWN0ZWRUZXN0ID0gZ2V0U2VsZWN0ZWRUZXN0KCk7CisgIAorICBpZiAo
cmVzdWx0cy50ZXN0c1tzZWxlY3RlZFRlc3RdLmFjdHVhbC5pbmRleE9mKCJJTUFHRSIpICE9IC0x
KSB7CisgICAgJCgnaW1hZ2Utb3V0cHV0cycpLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICBkaXNw
bGF5SW1hZ2VSZXN1bHRzKHNlbGVjdGVkVGVzdCk7CisgIH0gZWxzZSB7CisgICAgJCgnaW1hZ2Ut
b3V0cHV0cycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7ICAKKyAgfQorCisgIGlmIChyZXN1bHRz
LnRlc3RzW3NlbGVjdGVkVGVzdF0uYWN0dWFsLmluZGV4T2YoIlRFWFQiKSAhPSAtMSkgeworICAg
ICQoJ3RleHQtb3V0cHV0cycpLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICBkaXNwbGF5VGV4dFJl
c3VsdHMoc2VsZWN0ZWRUZXN0KTsKKyAgfSBlbHNlIHsKKyAgICAkKCd0ZXh0LW91dHB1dHMnKS5z
dHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAgCisgIH0KKyAgCisgIHZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKKyAgeGhyLm9wZW4oJ0dFVCcsICcvY3VycmVudF9iYXNlbGluZXM/dGVzdD0n
ICsgc2VsZWN0ZWRUZXN0KTsKKyAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlv
bigpIHsKKyAgICAvLyBDdXJyZW50IHRlc3QgbWlnaHQgaGF2ZSBjaGFuZ2VkIGJ5IHRoZSB0aW1l
IHdlIGxvYWQgdGhlIGJhc2VsaW5lcworICAgIGlmIChzZWxlY3RlZFRlc3QgIT0gZ2V0U2VsZWN0
ZWRUZXN0KCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgJCgnY3VycmVudC1iYXNlbGlu
ZXMnKS50ZXh0Q29udGVudCA9IHhoci5yZXNwb25zZVRleHQ7CisgIH0pOworICB4aHIuc2VuZCgp
OworICAKKyAgdXBkYXRlU3RhdGUoJCgndGVzdC1zZWxlY3RvcicpLnNlbGVjdGVkSW5kZXgpOwor
ICBoaWRlTG91cGUoKTsKK30KKworZnVuY3Rpb24gdXBkYXRlU3RhdGUodGVzdEluZGV4KSB7Cisg
IHZhciB0ZXN0Q291bnQgPSBzZWxlY3RlZFRlc3RzLmxlbmd0aAorICAkKCd0ZXN0LWluZGV4Jyku
aW5uZXJIVE1MID0gdGVzdEluZGV4ICsgMTsKKyAgJCgndGVzdC1jb3VudCcpLmlubmVySFRNTCA9
IHRlc3RDb3VudDsKKyAgCisgICQoJ25leHQtdGVzdCcpLmRpc2FibGVkID0gdGVzdEluZGV4ID09
IHRlc3RDb3VudCAtIDE7CisgICQoJ3ByZXZpb3VzLXRlc3QnKS5kaXNhYmxlZCA9IHRlc3RJbmRl
eCA9PSAwOworfQorCit2YXIgY3VycmVudEV4cGVjdGVkSW1hZ2VUZXN0OwordmFyIGN1cnJlbnRB
Y3R1YWxJbWFnZVRlc3Q7CisKK2Z1bmN0aW9uIGRpc3BsYXlJbWFnZVJlc3VsdHModGVzdE5hbWUp
IHsKKyAgJCgnZXhwZWN0ZWQtaW1hZ2UnKS5jbGFzc0xpc3QuYWRkKCdsb2FkaW5nJyk7CisgICQo
J2V4cGVjdGVkLWltYWdlJykuc3JjID0gJy90ZXN0X3Jlc3VsdD90ZXN0PScgKyB0ZXN0TmFtZSAr
ICcmbW9kZT1leHBlY3RlZC1pbWFnZSc7CisgICQoJ2V4cGVjdGVkLWltYWdlJykub25sb2FkID0g
ZnVuY3Rpb24oKSB7CisgICAgJCgnZXhwZWN0ZWQtaW1hZ2UnKS5jbGFzc0xpc3QucmVtb3ZlKCds
b2FkaW5nJyk7CisgICAgY3VycmVudEV4cGVjdGVkSW1hZ2VUZXN0ID0gdGVzdE5hbWU7CisgICAg
dXBkYXRlRGlmZigpOworICB9OworICAkKCdhY3R1YWwtaW1hZ2UnKS5jbGFzc0xpc3QuYWRkKCds
b2FkaW5nJyk7CisgICQoJ2FjdHVhbC1pbWFnZScpLnNyYyA9ICcvdGVzdF9yZXN1bHQ/dGVzdD0n
ICsgdGVzdE5hbWUgKyAnJm1vZGU9YWN0dWFsLWltYWdlJzsKKyAgJCgnYWN0dWFsLWltYWdlJyku
b25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgJCgnYWN0dWFsLWltYWdlJykuY2xhc3NMaXN0LnJl
bW92ZSgnbG9hZGluZycpOworICAgIGN1cnJlbnRBY3R1YWxJbWFnZVRlc3QgPSB0ZXN0TmFtZTsK
KyAgICB1cGRhdGVEaWZmKCk7CisgIH07CisgIAorICAkKCdkaWZmLWNhbnZhcycpLmNsYXNzTGlz
dC5hZGQoJ2xvYWRpbmcnKTsKK30KKwordmFyIGV4cGVjdGVkQ2FudmFzOwordmFyIGV4cGVjdGVk
Q2FudmFzQ29udGV4dDsKK3ZhciBhY3R1YWxDYW52YXM7Cit2YXIgYWN0dWFsQ2FudmFzQ29udGV4
dDsKKworZnVuY3Rpb24gdXBkYXRlRGlmZigpIHsKKyAgaWYgKGN1cnJlbnRFeHBlY3RlZEltYWdl
VGVzdCAhPSBjdXJyZW50QWN0dWFsSW1hZ2VUZXN0KSByZXR1cm47CisKKyAgdmFyIGV4cGVjdGVk
SW1hZ2UgPSAkKCdleHBlY3RlZC1pbWFnZScpOworICB2YXIgYWN0dWFsSW1hZ2UgPSAkKCdhY3R1
YWwtaW1hZ2UnKTsKKyAKKyAgaWYgKCFleHBlY3RlZENhbnZhcykgeworICAgIGV4cGVjdGVkQ2Fu
dmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CisgICAgZXhwZWN0ZWRDYW52
YXMud2lkdGggPSBleHBlY3RlZEltYWdlLndpZHRoOworICAgIGV4cGVjdGVkQ2FudmFzLmhlaWdo
dCA9IGV4cGVjdGVkSW1hZ2UuaGVpZ2h0OworICAgIGV4cGVjdGVkQ2FudmFzQ29udGV4dCA9IGV4
cGVjdGVkQ2FudmFzLmdldENvbnRleHQoJzJkJyk7CisgICAgCisgICAgYWN0dWFsQ2FudmFzID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CisgICAgYWN0dWFsQ2FudmFzLndpZHRo
ID0gYWN0dWFsSW1hZ2Uud2lkdGg7CisgICAgYWN0dWFsQ2FudmFzLmhlaWdodCA9IGFjdHVhbElt
YWdlLmhlaWdodDsKKyAgICBhY3R1YWxDYW52YXNDb250ZXh0ID0gYWN0dWFsQ2FudmFzLmdldENv
bnRleHQoJzJkJyk7CisgIH0KKyAgCisgIGV4cGVjdGVkQ2FudmFzQ29udGV4dC5maWxsU3R5bGUg
PSAncmdiYSgyNTUsIDI1NSwgMjU1LCAxKSc7CisgIGV4cGVjdGVkQ2FudmFzQ29udGV4dC5maWxs
UmVjdCgKKyAgICAgIDAsIDAsIGV4cGVjdGVkSW1hZ2Uud2lkdGgsIGV4cGVjdGVkSW1hZ2UuaGVp
Z2h0KTsKKworICBhY3R1YWxDYW52YXNDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwgMjU1
LCAyNTUsIDEpJzsKKyAgYWN0dWFsQ2FudmFzQ29udGV4dC5maWxsUmVjdCgwLCAwLCBhY3R1YWxJ
bWFnZS53aWR0aCwgYWN0dWFsSW1hZ2UuaGVpZ2h0KTsKKyAgCisgIGV4cGVjdGVkQ2FudmFzQ29u
dGV4dC5kcmF3SW1hZ2UoZXhwZWN0ZWRJbWFnZSwgMCwgMCk7CisgIHZhciBleHBlY3RlZEltYWdl
RGF0YSA9IGV4cGVjdGVkQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoCisgICAgICAwLCAwLCBl
eHBlY3RlZEltYWdlLndpZHRoLCBleHBlY3RlZEltYWdlLmhlaWdodCk7CisKKyAgYWN0dWFsQ2Fu
dmFzQ29udGV4dC5kcmF3SW1hZ2UoYWN0dWFsSW1hZ2UsIDAsIDApOworICB2YXIgYWN0dWFsSW1h
Z2VEYXRhID0gYWN0dWFsQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoCisgICAgICAwLCAwLCBh
Y3R1YWxJbWFnZS53aWR0aCwgYWN0dWFsSW1hZ2UuaGVpZ2h0KTsKKyAgICAgIAorICBmdW5jdGlv
biByZWFkUGl4ZWwoaW1hZ2VEYXRhLCB4LCB5KSB7CisgICAgZnVuY3Rpb24gcmVhZENvbXBvbmVu
dChjb21wb25lbnQpIHsKKyAgICAgIHJldHVybiBpbWFnZURhdGEuZGF0YVsoeSAqIGltYWdlRGF0
YS53aWR0aCArIHgpICogNCArIGNvbXBvbmVudF07ICAgIAorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gWworICAgICAgICByZWFkQ29tcG9uZW50KDApLAorICAgICAgICByZWFkQ29tcG9uZW50KDEp
LAorICAgICAgICByZWFkQ29tcG9uZW50KDIpLAorICAgICAgICByZWFkQ29tcG9uZW50KDMpCisg
ICAgXTsKKyAgfQorICAKKyAgZnVuY3Rpb24gc2V0UGl4ZWwoaW1hZ2VEYXRhLCB4LCB5LCBwaXhl
bCkgeworICAgIGZ1bmN0aW9uIHNldENvbXBvbmVudChjb21wb25lbnQsIHZhbHVlKSB7CisgICAg
ICBpbWFnZURhdGEuZGF0YVsoeSAqIGltYWdlRGF0YS53aWR0aCArIHgpICogNCArIGNvbXBvbmVu
dF0gPSB2YWx1ZTsgCisgICAgfQorICAgIAorICAgIHNldENvbXBvbmVudCgwLCBwaXhlbFswXSk7
CisgICAgc2V0Q29tcG9uZW50KDEsIHBpeGVsWzFdKTsKKyAgICBzZXRDb21wb25lbnQoMiwgcGl4
ZWxbMl0pOworICAgIHNldENvbXBvbmVudCgzLCBwaXhlbFszXSk7CisgIH0KKyAgCisgIHZhciBk
aWZmQ2FudmFzID0gJCgnZGlmZi1jYW52YXMnKTsKKyAgdmFyIGRpZmZDYW52YXNDb250ZXh0ID0g
ZGlmZkNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOworICB2YXIgZGlmZkltYWdlRGF0YSA9IGRpZmZD
YW52YXNDb250ZXh0LmdldEltYWdlRGF0YSgKKyAgICAgIDAsIDAsIGRpZmZDYW52YXMud2lkdGgs
IGRpZmZDYW52YXMuaGVpZ2h0KTsKKyAgCisgIGZvciAodmFyIHggPSAwOyB4IDwgZXhwZWN0ZWRJ
bWFnZS53aWR0aDsgeCsrKSB7CisgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBleHBlY3RlZEltYWdl
LmhlaWdodDsgeSsrKSB7CisgICAgICB2YXIgZXhwZWN0ZWRQaXhlbCA9IHJlYWRQaXhlbChleHBl
Y3RlZEltYWdlRGF0YSwgeCwgeSk7CisgICAgICB2YXIgYWN0dWFsUGl4ZWwgPSByZWFkUGl4ZWwo
YWN0dWFsSW1hZ2VEYXRhLCB4LCB5KTsKKyAgICAgIAorICAgICAgaWYgKGV4cGVjdGVkUGl4ZWwu
am9pbignLScpICE9IGFjdHVhbFBpeGVsLmpvaW4oJy0nKSkgeworICAgICAgICBzZXRQaXhlbChk
aWZmSW1hZ2VEYXRhLCB4LCB5LCBbMjU1LCAwLCAwLCAyNTVdKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHNldFBpeGVsKGRpZmZJbWFnZURhdGEsIHgsIHksIAorICAgICAgICAgICAgW2V4cGVj
dGVkUGl4ZWxbMF0sIGV4cGVjdGVkUGl4ZWxbMV0sIGV4cGVjdGVkUGl4ZWxbMl0sIDEyN10pOwor
ICAgICAgfQorICAgIH0KKyAgfQorICAKKyAgZGlmZkNhbnZhc0NvbnRleHQucHV0SW1hZ2VEYXRh
KAorICAgICAgZGlmZkltYWdlRGF0YSwKKyAgICAgIDAsIDAsCisgICAgICAwLCAwLAorICAgICAg
ZGlmZkltYWdlRGF0YS53aWR0aCwgZGlmZkltYWdlRGF0YS5oZWlnaHQpOworICBkaWZmQ2FudmFz
LmNsYXNzTGlzdC5yZW1vdmUoJ2xvYWRpbmcnKTsKK30KKworZnVuY3Rpb24gZGlzcGxheVRleHRS
ZXN1bHRzKHRlc3ROYW1lKSB7CisgIGZ1bmN0aW9uIGxvYWRUZXh0UmVzdWx0KHR5cGUpIHsKKyAg
ICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oJ0dFVCcsICcv
dGVzdF9yZXN1bHQ/dGVzdD0nICsgdGVzdE5hbWUgKyAnJm1vZGU9JyArIHR5cGUpOworICAgIHho
ci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7CisgICAgICAkKHR5cGUpLnRl
eHRDb250ZW50ID0geGhyLnJlc3BvbnNlVGV4dDsKKyAgICB9KTsKKyAgICB4aHIuc2VuZCgpOyAg
ICAKKyAgfQorICAKKyAgbG9hZFRleHRSZXN1bHQoJ2V4cGVjdGVkLXRleHQnKTsKKyAgbG9hZFRl
eHRSZXN1bHQoJ2FjdHVhbC10ZXh0Jyk7CisgIGxvYWRUZXh0UmVzdWx0KCdkaWZmLXRleHQnKTsK
K30KKworZnVuY3Rpb24gbmV4dFRlc3QoKSB7CisgIGlmICgkKCd0ZXN0LXNlbGVjdG9yJykuc2Vs
ZWN0ZWRJbmRleCA9PSBzZWxlY3RlZFRlc3RzLmxlbmd0aCAtIDEpIHsKKyAgICByZXR1cm47Cisg
IH0KKyAgJCgndGVzdC1zZWxlY3RvcicpLnNlbGVjdGVkSW5kZXgrKzsKKyAgc2VsZWN0VGVzdCgp
OworfQorCitmdW5jdGlvbiBwcmV2aW91c1Rlc3QoKSB7CisgIGlmICgkKCd0ZXN0LXNlbGVjdG9y
Jykuc2VsZWN0ZWRJbmRleCA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisgICQoJ3Rlc3Qtc2Vs
ZWN0b3InKS5zZWxlY3RlZEluZGV4LS07CisgIHNlbGVjdFRlc3QoKTsKK30KKworZnVuY3Rpb24g
c2hvd0xvdXBlKGV2ZW50KSB7CisgIHZhciBpbWFnZVJlY3QgPSBldmVudC50YXJnZXQuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCk7CisgIHZhciB4ID0gZXZlbnQuY2xpZW50WCAtIGltYWdlUmVjdC5s
ZWZ0OworICB2YXIgeSA9IGV2ZW50LmNsaWVudFkgLSBpbWFnZVJlY3QudG9wOworICAKKyAgZmls
bExvdXBlRnJvbUltYWdlKHgsIHksICdleHBlY3RlZCcsICQoJ2V4cGVjdGVkLWltYWdlJykpOwor
ICBmaWxsTG91cGVGcm9tSW1hZ2UoeCwgeSwgJ2FjdHVhbCcsICQoJ2FjdHVhbC1pbWFnZScpKTsK
KyAgZmlsbExvdXBlRnJvbUNhbnZhcyh4LCB5LCAnZGlmZicsICQoJ2RpZmYtY2FudmFzJykpOwor
ICAKKyAgJCgnbG91cGUnKS5zdHlsZS5kaXNwbGF5ID0gJyc7Cit9CisKK3ZhciBMT1VQRV9NQUdO
SUZJQ0FUSU9OX0ZBQ1RPUiA9IDEwOworCitmdW5jdGlvbiBmaWxsTG91cGVGcm9tSW1hZ2UoeCwg
eSwgdHlwZSkgeworICB2YXIgc291cmNlSW1hZ2UgPSAkKHR5cGUgKyAnLWltYWdlJyk7ICAKKwor
ICB2YXIgdGVtcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOworICB0
ZW1wQ2FudmFzLndpZHRoID0gc291cmNlSW1hZ2Uud2lkdGg7CisgIHRlbXBDYW52YXMuaGVpZ2h0
ID0gc291cmNlSW1hZ2UuaGVpZ2h0OworICB2YXIgdGVtcENvbnRleHQgPSB0ZW1wQ2FudmFzLmdl
dENvbnRleHQoJzJkJyk7CisgIAorICB0ZW1wQ29udGV4dC5kcmF3SW1hZ2Uoc291cmNlSW1hZ2Us
IDAsIDApOworICAKKyAgZmlsbExvdXBlRnJvbUNhbnZhcyh4LCB5LCB0eXBlLCB0ZW1wQ2FudmFz
KTsKK30KKworZnVuY3Rpb24gZmlsbExvdXBlRnJvbUNhbnZhcyh4LCB5LCB0eXBlLCBjYW52YXMp
IHsKKyAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgdmFyIHNvdXJj
ZUltYWdlRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNhbnZhcy53aWR0aCwgY2Fu
dmFzLmhlaWdodCk7CisKKyAgdmFyIHRhcmdldENhbnZhcyA9ICQodHlwZSArICctbG91cGUnKTsK
KyAgdmFyIHRhcmdldENvbnRleHQgPSB0YXJnZXRDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAg
dGFyZ2V0Q29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgyNTUsIDI1NSwgMjU1LCAxKSc7CisgIHRh
cmdldENvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGFyZ2V0Q2FudmFzLndpZHRoLCB0YXJnZXRDYW52
YXMuaGVpZ2h0KTsgIAorICAKKyAgdmFyIHNvdXJjZVhPZmZzZXQgPSAodGFyZ2V0Q2FudmFzLndp
ZHRoL0xPVVBFX01BR05JRklDQVRJT05fRkFDVE9SIC0gMSkvMjsKKyAgdmFyIHNvdXJjZVlPZmZz
ZXQgPSAodGFyZ2V0Q2FudmFzLmhlaWdodC9MT1VQRV9NQUdOSUZJQ0FUSU9OX0ZBQ1RPUiAtIDEp
LzI7CisKKyAgZnVuY3Rpb24gcmVhZFBpeGVsQ29tcG9uZW50KHgsIHksIGNvbXBvbmVudCkgewor
ICAgIHJldHVybiBzb3VyY2VJbWFnZURhdGEuZGF0YVsoeSAqIHNvdXJjZUltYWdlRGF0YS53aWR0
aCArIHgpICogNCArIGNvbXBvbmVudF07CisgIH0KKyAgCisgIGZvciAodmFyIGkgPSAtc291cmNl
WE9mZnNldDsgaSA8PSBzb3VyY2VYT2Zmc2V0OyBpKyspIHsKKyAgICBmb3IgKHZhciBqID0gLXNv
dXJjZVlPZmZzZXQ7IGogPD0gc291cmNlWU9mZnNldDsgaisrKSB7CisgICAgICB2YXIgc291cmNl
WCA9IHggKyBpOworICAgICAgdmFyIHNvdXJjZVkgPSB5ICsgajsKKyAgICAgIAorICAgICAgdmFy
IHNvdXJjZVIgPSByZWFkUGl4ZWxDb21wb25lbnQoc291cmNlWCwgc291cmNlWSwgMCk7IAorICAg
ICAgdmFyIHNvdXJjZUcgPSByZWFkUGl4ZWxDb21wb25lbnQoc291cmNlWCwgc291cmNlWSwgMSk7
CisgICAgICB2YXIgc291cmNlQiA9IHJlYWRQaXhlbENvbXBvbmVudChzb3VyY2VYLCBzb3VyY2VZ
LCAyKTsKKyAgICAgIHZhciBzb3VyY2VBID0gcmVhZFBpeGVsQ29tcG9uZW50KHNvdXJjZVgsIHNv
dXJjZVksIDMpLzI1NTsKKyAgICAgIHNvdXJjZUEgPSBNYXRoLnJvdW5kKHNvdXJjZUEgKiAxMCkv
MTA7CisKKyAgICAgIHZhciB0YXJnZXRYID0gKGkgKyBzb3VyY2VYT2Zmc2V0KSAqIExPVVBFX01B
R05JRklDQVRJT05fRkFDVE9SOworICAgICAgdmFyIHRhcmdldFkgPSAoaiArIHNvdXJjZVlPZmZz
ZXQpICogTE9VUEVfTUFHTklGSUNBVElPTl9GQUNUT1I7CisgICAgICB2YXIgY29sb3JTdHJpbmcg
PQorICAgICAgICAgIHNvdXJjZVIgKyAnLCAnICsgc291cmNlRyArICcsICcgKyBzb3VyY2VCICsg
JywgJyArIHNvdXJjZUE7CisgICAgICB0YXJnZXRDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcg
KyBjb2xvclN0cmluZyArICcpJzsKKyAgICAgIHRhcmdldENvbnRleHQuZmlsbFJlY3QoCisgICAg
ICAgICAgdGFyZ2V0WCwgdGFyZ2V0WSwKKyAgICAgICAgICBMT1VQRV9NQUdOSUZJQ0FUSU9OX0ZB
Q1RPUiwgTE9VUEVfTUFHTklGSUNBVElPTl9GQUNUT1IpOworICAgIAorICAgICAgaWYgKGkgPT0g
MCAmJiBqID09IDApIHsKKyAgICAgICAgJCgnbG91cGUtY29vcmRpbmF0ZScpLnRleHRDb250ZW50
ID0gc291cmNlWCArICcsICcgKyBzb3VyY2VZOworCisgICAgICAgICQodHlwZSArICctbG91cGUt
Y29sb3InKS50ZXh0Q29udGVudCA9IGNvbG9yU3RyaW5nOworICAgICAgfQorICAgIH0KKyAgfQor
fQorCitmdW5jdGlvbiBoaWRlTG91cGUoKSB7CisgICQoJ2xvdXBlJykuc3R5bGUuZGlzcGxheSA9
ICdub25lJzsgIAorfQorCitmdW5jdGlvbiByZWJhc2VsaW5lKCkgeworICBpZiAoJCgncmViYXNl
bGluZScpLmRpc2FibGVkKSByZXR1cm47CisgIAorICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1
ZXN0KCk7CisgIHhoci5vcGVuKCdQT1NUJywgJy9yZWJhc2VsaW5lP3Rlc3Q9JyArIGdldFNlbGVj
dGVkVGVzdCgpKTsKKyAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsK
KyAgICB2YXIgc3VjY2VzcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICBz
dWNjZXNzLnRleHRDb250ZW50ID0gJ1N1Y2Nlc3M6ICc7CisgICAgc3VjY2Vzcy5zdHlsZS5jb2xv
ciA9ICdncmVlbic7CisgICAgJCgnbG9nJykuYXBwZW5kQ2hpbGQoc3VjY2Vzcyk7CisgICAgbG9n
KHhoci5yZXNwb25zZVRleHQpOworICAgICQoJ3JlYmFzZWxpbmUnKS5kaXNhYmxlZCA9IGZhbHNl
OworICAgICQoJ3JlYmFzZWxpbmUnKS50ZXh0Q29udGVudCA9ICdSZWJhc2VsaW5lJzsgICAgCisg
IH0pOworICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbigpIHsKKyAgICB2
YXIgZmFpbHVyZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICBmYWlsdXJl
LnRleHRDb250ZW50ID0gJ0ZhaWx1cmU6ICc7CisgICAgZmFpbHVyZS5zdHlsZS5jb2xvciA9ICdy
ZWQnOworICAgICQoJ2xvZycpLmFwcGVuZENoaWxkKGZhaWx1cmUpOworICAgIGxvZyh4aHIucmVz
cG9uc2VUZXh0KTsKKyAgICAkKCdyZWJhc2VsaW5lJykuZGlzYWJsZWQgPSBmYWxzZTsKKyAgICAk
KCdyZWJhc2VsaW5lJykudGV4dENvbnRlbnQgPSAnUmViYXNlbGluZSc7ICAgIAorICB9KTsKKwor
ICAkKCdyZWJhc2VsaW5lJykudGV4dENvbnRlbnQgPSAnUmViYXNlbGluaW5nLi4uJzsKKyAgJCgn
cmViYXNlbGluZScpLmRpc2FibGVkID0gdHJ1ZTsKKyAgeGhyLnNlbmQoKTsKK30KKworZnVuY3Rp
b24gbG9nKHRleHQpIHsKKyAgJCgnbG9nJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUodGV4dCArICdcbicpKTsKKyAgJCgnbG9nJykuc2Nyb2xsVG9wID0gJCgnbG9nJykuc2Ny
b2xsSGVpZ2h0OworfQorCitmdW5jdGlvbiB0b2dnbGVMb2coKSB7CisgIHZhciBsb2cgPSAkKCds
b2cnKTsKKyAgbG9nLnN0eWxlLmRpc3BsYXkgPSBsb2cuc3R5bGUuZGlzcGxheSA9PSAnbm9uZScg
PyAnJyA6ICdub25lJzsKK30KKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRM
b2FkZWQnLCBtYWluKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvbG9jYWxyZWJhc2VsaW5l
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2xvY2FscmVi
YXNlbGluZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YmI2YjI5MGE1YjkyYTVkNGFjNDZhZDk1YjE4MmQ4ODhj
NjQzOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL2NvbW1hbmRzL2xvY2FscmViYXNlbGluZS5weQpAQCAtMCwwICsxLDI5MCBAQAorIyBDb3B5
cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitp
bXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCBCYXNlSFRUUFNl
cnZlcgoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHNodXRpbAoraW1wb3J0IHVybHBhcnNlCisK
K2Zyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWlsZGJvdCBpbXBvcnQgQnVpbGRCb3QsIExheW91
dFRlc3RSZXN1bHRzCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0udXNlciBpbXBvcnQgVXNl
cgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQorZnJvbSB3
ZWJraXRweS50b29sLmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQorZnJvbSB3ZWJraXRweS50b29s
Lm11bHRpY29tbWFuZHRvb2wgaW1wb3J0IEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kCisKKyMg
VE9ETworIyAtIGxldCBwb3J0IGJlIHNwZWNpZmllZAorIyAtIGFkZCBjaGVja3N1bSBvdXRwdXQ/
CisjIC0gaW5jbHVkZSBjdXJyZW50IGJhc2VsaW5lcyBpbiBpbml0aWFsIEpTT04gb3V0cHV0LCBp
bnN0ZWFkIG9mIGRvaW5nIGEgCisjICAgc2VwYXJhdGUgcmVxdWVzdAorIyAtIGFkZCBwcmVmZXRj
aGluZyBvZiBpbWFnZXMKKyMgLSB3aGVuIHJlYmFzZWxpbmluZywgdXBkYXRlIHN0YXRlIGluIHRo
ZSBVSSAocGVyc2lzdGVudCwgZXZlbiB3aGVuIGNvbWluZyAKKyMgICBiYWNrIHRvIGl0KQorIyAt
IG1hcCBmYWlsdXJlIEhUVFAgZXJyb3IgY29kZXMgdG8gZmFpbHVyZSBpbiB0aGUgbG9nIHRvbwor
IyAtIHNob3cgdGhlIGxvZyBvbiBmYWlsdXJlCisKK2NsYXNzIFJlYmFzZWxpbmVIVFRTZXJ2ZXIo
QmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6CisgIGRlZiBfX2luaXRfXyhzZWxmLCBodHRwZF9w
b3J0LCByZXN1bHRzX2RpcmVjdG9yeSwgYmFzZWxpbmVzX2J5X3Rlc3QsIHBvcnQsIHNjbSk6Cisg
ICAgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlci5fX2luaXRfXyhzZWxmLCAoJycsIGh0dHBkX3Bv
cnQpLCBSZWJhc2VsaW5lSFRUUFJlcXVlc3RIYW5kbGVyKQorICAgIHNlbGYucmVzdWx0c19kaXJl
Y3RvcnkgPSByZXN1bHRzX2RpcmVjdG9yeQorICAgIHNlbGYuYmFzZWxpbmVzX2J5X3Rlc3QgPSBi
YXNlbGluZXNfYnlfdGVzdAorICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICBzZWxmLnNjbSA9IHNj
bQorCitjbGFzcyBSZWJhc2VsaW5lSFRUUFJlcXVlc3RIYW5kbGVyKEJhc2VIVFRQU2VydmVyLkJh
c2VIVFRQUmVxdWVzdEhhbmRsZXIpOgorICAgIGZpbGVfbmFtZXMgPSBbCisgICAgICAnaW5kZXgu
aHRtbCcsCisgICAgICAnbWFpbi5qcycKKyAgICBdCisKKyAgICBkZWYgZG9fR0VUKHNlbGYpOgor
ICAgICAgc2VsZi5faGFuZGxlX3JlcXVlc3QoKQorICAgICAgCisgICAgZGVmIGRvX1BPU1Qoc2Vs
Zik6CisgICAgICBzZWxmLl9oYW5kbGVfcmVxdWVzdCgpCisgICAgCisgICAgZGVmIF9oYW5kbGVf
cmVxdWVzdChzZWxmKToKKyAgICAgIGlmICc/JyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgKHBh
dGgsIHF1ZXJ5X3N0cmluZykgPSBzZWxmLnBhdGguc3BsaXQoJz8nLCAxKQorICAgICAgICAgIHNl
bGYucXVlcnkgPSB1cmxwYXJzZS5wYXJzZV9xcyhxdWVyeV9zdHJpbmcpCisgICAgICBlbHNlOgor
ICAgICAgICAgIHBhdGggPSBzZWxmLnBhdGgKKyAgICAgICAgICBzZWxmLnF1ZXJ5ID0ge30KKyAg
ICAgIGZ1bmNfb3JfZmlsZV9uYW1lID0gcGF0aFsxOl0gb3IgJ2luZGV4Lmh0bWwnCisgICAgICAK
KyAgICAgIGlmIGZ1bmNfb3JfZmlsZV9uYW1lIGluIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRs
ZXIuZmlsZV9uYW1lczoKKyAgICAgICAgICBzZWxmLnNlcnZlX3N0YXRpY19maWxlKGZ1bmNfb3Jf
ZmlsZV9uYW1lKQorICAgICAgICAgIHJldHVybgorICAgICAgCisgICAgICBmdW5jX25hbWUgPSBm
dW5jX29yX2ZpbGVfbmFtZS5yZXBsYWNlKCcuJywgJ18nKQorICAgICAgaWYgbm90IGhhc2F0dHIo
c2VsZiwgZnVuY19uYW1lKToKKyAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIlVua25vd24g
ZnVuY3Rpb24gJXMiICUgZnVuY19uYW1lKQorICAgICAgICByZXR1cm4KKyAgICAgIGZ1bmMgPSBn
ZXRhdHRyKHNlbGYsIGZ1bmNfbmFtZSkKKyAgICAgIGZ1bmMoKQorICAgIAorICAgIGRlZiBzZXJ2
ZV9zdGF0aWNfZmlsZShzZWxmLCBzdGF0aWNfcGF0aCk6CisgICAgICBzZWxmLl9zZXJ2ZV9maWxl
KG9zLnBhdGguam9pbigKKyAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZGF0
YScsICdsb2NhbHJlYmFzZWxpbmUnLCBzdGF0aWNfcGF0aCkpCisgICAgCisgICAgZGVmIGN1cnJl
bnRfYmFzZWxpbmVzKHNlbGYpOgorICAgICAgIyBUT0RPOiBjaGVjayBmb3IgcHJlZml4LCBhbHNv
LCB0aGVyZSBzaG91bGQgYmUgc2hhcmVkIGNvZGUgZm9yIHRoaXMKKyAgICAgICh0ZXN0X25hbWUs
IHRlc3RfZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQoc2VsZi5xdWVyeVsndGVzdCddWzBd
KQorICAgICAgYmFzZWxpbmVzID0gbGlzdChzZWxmLnNlcnZlci5iYXNlbGluZXNfYnlfdGVzdC5n
ZXQodGVzdF9uYW1lLCBbXSkpCisgICAgICBiYXNlbGluZXMuc29ydCgpCisKKyAgICAgIHNlbGYu
c2VuZF9yZXNwb25zZSgyMDApCisgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUi
LCAidGV4dC9wbGFpbiIpCisgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgIHNlbGYud2Zp
bGUud3JpdGUoIiwgIi5qb2luKGJhc2VsaW5lcykgKyAiXG4iKQorCisgICAgZGVmIHJlYmFzZWxp
bmUoc2VsZik6CisgICAgICBsb2cgPSBbXQorICAgICAgc3VjY2VzcyA9IHNlbGYuX3J1bl9yZWJh
c2VsaW5lKHNlbGYucXVlcnlbJ3Rlc3QnXVswXSwgbG9nPWxhbWJkYSBsOmxvZy5hcHBlbmQobCkp
CisgICAgICBzZWxmLnNlbmRfcmVzcG9uc2Uoc3VjY2VzcyBhbmQgMjAwIG9yIDUwMCkKKyAgICAg
IHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJ0ZXh0L3BsYWluIikKKyAgICAgIHNl
bGYuZW5kX2hlYWRlcnMoKQorICAgICAgc2VsZi53ZmlsZS53cml0ZSgiXG4iLmpvaW4obG9nKSkK
KyAgICAgIAorICAgIGRlZiBfcnVuX3JlYmFzZWxpbmUoc2VsZiwgdGVzdCwgbG9nKToKKyAgICAg
ICh0ZXN0X25hbWUsIHRlc3RfZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQodGVzdCkKKyAg
ICAgIHRlc3RfZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKHRlc3RfbmFtZSkKKyAgICAgIGxh
eW91dF90ZXN0c19kaXJlY3RvcnkgPSBzZWxmLnNlcnZlci5wb3J0LmxheW91dF90ZXN0c19kaXIo
KQorICAgICAgbWFjX2V4cGVjdGF0aW9uc19kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oCisgICAg
ICAgICAgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSwgJ3BsYXRmb3JtJywgJ21hYycsIHRlc3RfZGly
ZWN0b3J5KQorICAgICAgCisgICAgICBsb2coIlJlYmFzZWxpbmluZyAlcy4uLiIgJSB0ZXN0X25h
bWUpCisgICAgICAKKyAgICAgIGN1cnJlbnRfYmFzZWxpbmVzID0gbGlzdChzZWxmLnNlcnZlci5i
YXNlbGluZXNfYnlfdGVzdC5nZXQodGVzdF9uYW1lLCBbXSkpCisgICAgICAKKyAgICAgIGxvZygi
ICBDdXJyZW50IGJhc2VsaW5lczogJXMiICUiLCAiLmpvaW4oY3VycmVudF9iYXNlbGluZXMpKQor
ICAgICAgCisgICAgICBpZiAiY2hyb21pdW0tbWFjIiBpbiBjdXJyZW50X2Jhc2VsaW5lczoKKyAg
ICAgICAgICBsb2coIiAgQ2FuJ3QgaGFuZGxlIHRlc3RzIHdpdGggY2hyb21pdW0tbWFjIGJhc2Vs
aW5lcyB5ZXQuIikKKyAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgIAorICAgICAgdGVzdF9y
ZXN1bHRzX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICBzZWxmLnNlcnZlci5y
ZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9kaXJlY3RvcnkpCisgICAgICBhY3R1YWxfcGF0dGVybiA9
IG9zLnBhdGguYmFzZW5hbWUodGVzdF9uYW1lKSArICctYWN0dWFsLionCisgICAgICBhY3R1YWxf
ZmlsZXMgPSBbXQorICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsodGVzdF9y
ZXN1bHRzX2RpcmVjdG9yeSk6CisgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZubWF0Y2guZmls
dGVyKGZpbGVzLCBhY3R1YWxfcGF0dGVybik6CisgICAgICAgICAgICAgIGFjdHVhbF9maWxlcy5h
cHBlbmQoZmlsZW5hbWUucmVwbGFjZSgnLWFjdHVhbCcsICctZXhwZWN0ZWQnKSkKKyAgICAgIAor
ICAgICAgaWYgKCJtYWMiIGluIGN1cnJlbnRfYmFzZWxpbmVzKToKKyAgICAgICAgaWYgIm1hYy1s
ZW9wYXJkIiBpbiBjdXJyZW50X2Jhc2VsaW5lczoKKyAgICAgICAgICAgIGxvZygiICBBbHJlYWR5
IGhhZCBtYWMtbGVvcGFyZCBiYXNlbGluZXMsIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIGN1
cnJlbnQgbWFjIGJhc2VsaW5lcyIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAg
bG9nKCIgIE1vdmluZyBjdXJyZW50IG1hYyBiYXNlbGluZXMgdG8gbWFjLWxlb3BhcmQiKQorICAg
ICAgICBtYWNfbGVvcGFyZF9leHBlY3RhdGlvbnNfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKAor
ICAgICAgICAgICAgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSwgJ3BsYXRmb3JtJywgJ21hYy1sZW9w
YXJkJywgdGVzdF9kaXJlY3RvcnkpCisKKyAgICAgICAgZXhwZWN0YXRpb25fcGF0dGVybiA9IG9z
LnBhdGguYmFzZW5hbWUodGVzdF9uYW1lKSArICctZXhwZWN0ZWQuKicKKyAgICAgICAgY3VycmVu
dF9leHBlY3RhdGlvbnNfZmlsZXMgPSBbXQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMg
aW4gb3Mud2FsayhtYWNfZXhwZWN0YXRpb25zX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBmb3Ig
ZmlsZW5hbWUgaW4gZm5tYXRjaC5maWx0ZXIoZmlsZXMsIGV4cGVjdGF0aW9uX3BhdHRlcm4pOgor
ICAgICAgICAgICAgICAgIGN1cnJlbnRfZXhwZWN0YXRpb25zX2ZpbGVzLmFwcGVuZChmaWxlbmFt
ZSkKKyAgICAgICAgY3VycmVudF9leHBlY3RhdGlvbnNfZmlsZXMgPSBbZiBmb3IgZiBpbiBjdXJy
ZW50X2V4cGVjdGF0aW9uc19maWxlcyBpZiBmIGluIGFjdHVhbF9maWxlc10KKyAgICAgICAgCisg
ICAgICAgIGlmIGN1cnJlbnRfZXhwZWN0YXRpb25zX2ZpbGVzOgorICAgICAgICAgIGlmIG5vdCBv
cy5wYXRoLmV4aXN0cyhtYWNfbGVvcGFyZF9leHBlY3RhdGlvbnNfZGlyZWN0b3J5KToKKyAgICAg
ICAgICAgICAgbG9nKCIgIENyZWF0aW5nIG1hYy1sZW9wYXJkICVzIGRpcmVjdG9yeSIgJSB0ZXN0
X2RpcmVjdG9yeSkKKyAgICAgICAgICAgICAgb3MubWFrZWRpcnMobWFjX2xlb3BhcmRfZXhwZWN0
YXRpb25zX2RpcmVjdG9yeSkKKyAgICAgICAgICBmb3IgZmlsZSBpbiBjdXJyZW50X2V4cGVjdGF0
aW9uc19maWxlczoKKyAgICAgICAgICAgICAgc291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4obWFj
X2V4cGVjdGF0aW9uc19kaXJlY3RvcnksIGZpbGUpCisgICAgICAgICAgICAgIGRlc3RpbmF0aW9u
X3BhdGggPSBvcy5wYXRoLmpvaW4obWFjX2xlb3BhcmRfZXhwZWN0YXRpb25zX2RpcmVjdG9yeSwg
ZmlsZSkKKyAgICAgICAgICAgICAgc2h1dGlsLm1vdmUoc291cmNlX3BhdGgsIGRlc3RpbmF0aW9u
X3BhdGgpCisgICAgICAgICAgICAgIGV4aXRfY29kZSA9IHNlbGYuc2VydmVyLnNjbS5hZGQoZGVz
dGluYXRpb25fcGF0aCwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorICAgICAgICAgICAgICBsb2co
IiAgICBNb3ZlZCAlcywgZXhpdCBjb2RlICVkIiAlIChmaWxlLCBleGl0X2NvZGUpKQorICAgICAg
ICAgICAgICBpZiBleGl0X2NvZGU6CisgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgICAgbG9nKCIgIEFkZGluZyBuZXcgYmFzZWxpbmVzIHRvIG1hYyIpCisgICAgICBmb3IgZmls
ZSBpbiBhY3R1YWxfZmlsZXM6CisgICAgICAgICAgc291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4o
dGVzdF9yZXN1bHRzX2RpcmVjdG9yeSwgZmlsZS5yZXBsYWNlKCctZXhwZWN0ZWQnLCAnLWFjdHVh
bCcpKQorICAgICAgICAgIGRlc3RpbmF0aW9uX3BhdGggPSBvcy5wYXRoLmpvaW4obWFjX2V4cGVj
dGF0aW9uc19kaXJlY3RvcnksIGZpbGUpCisgICAgICAgICAgc2h1dGlsLmNvcHkoc291cmNlX3Bh
dGgsIGRlc3RpbmF0aW9uX3BhdGgpCisgICAgICAgICAgZXhpdF9jb2RlID0gc2VsZi5zZXJ2ZXIu
c2NtLmFkZChkZXN0aW5hdGlvbl9wYXRoLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpICAgICAgICAg
IAorICAgICAgICAgIGxvZygiICAgIEFkZGVkICVzLCBleGl0IGNvZGUgJWQiICUgKGZpbGUsIGV4
aXRfY29kZSkpCisgICAgICAgICAgaWYgZXhpdF9jb2RlOgorICAgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgIAorICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB0ZXN0X3Jlc3VsdChz
ZWxmKToKKyAgICAgICh0ZXN0X25hbWUsIHRlc3RfZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRl
eHQoc2VsZi5xdWVyeVsndGVzdCddWzBdKQorICAgICAgbW9kZSA9IHNlbGYucXVlcnlbJ21vZGUn
XVswXQorICAgICAgaWYgbW9kZSA9PSAnZXhwZWN0ZWQtaW1hZ2UnOgorICAgICAgICAgIGZpbGVf
bmFtZSA9IHRlc3RfbmFtZSArICctZXhwZWN0ZWQucG5nJworICAgICAgZWxpZiBtb2RlID09ICdh
Y3R1YWwtaW1hZ2UnOgorICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctYWN0dWFs
LnBuZycKKyAgICAgIGVsaWYgbW9kZSA9PSAnZGlmZi1pbWFnZSc6CisgICAgICAgICAgZmlsZV9u
YW1lID0gdGVzdF9uYW1lICsgJy1kaWZmLnBuZycKKyAgICAgIGlmIG1vZGUgPT0gJ2V4cGVjdGVk
LXRleHQnOgorICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZXhwZWN0ZWQudHh0
JworICAgICAgZWxpZiBtb2RlID09ICdhY3R1YWwtdGV4dCc6CisgICAgICAgICAgZmlsZV9uYW1l
ID0gdGVzdF9uYW1lICsgJy1hY3R1YWwudHh0JworICAgICAgZWxpZiBtb2RlID09ICdkaWZmLXRl
eHQnOgorICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZGlmZi50eHQnCisKKyAg
ICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnNlcnZlci5yZXN1bHRzX2RpcmVjdG9y
eSwgZmlsZV9uYW1lKQorICAgICAgCisgICAgICBzZWxmLl9zZXJ2ZV9maWxlKGZpbGVfcGF0aCkK
KyAgICAKKyAgICBkZWYgcmVzdWx0c19qc29uKHNlbGYpOgorICAgICAgc2VsZi5fc2VydmVfZmls
ZShvcy5wYXRoLmpvaW4oCisgICAgICAgICAgc2VsZi5zZXJ2ZXIucmVzdWx0c19kaXJlY3Rvcnks
ICd1bmV4cGVjdGVkX3Jlc3VsdHMuanNvbicpKQorICAgIAorICAgIGRlZiBxdWl0cXVpdHF1aXQo
c2VsZik6CisgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgc2VsZi5zZW5kX2hl
YWRlcigiQ29udGVudC10eXBlIiwgInRleHQvcGxhaW4iKQorICAgICAgc2VsZi5lbmRfaGVhZGVy
cygpCisgICAgICBzZWxmLndmaWxlLndyaXRlKCJRdWl0LlxuIikKKyAgICAgIAorICAgICAgIyBT
aHV0ZG93biBoYXMgdG8gaGFwcGVuIG9uIGFub3RoZXIgdGhyZWFkIGZyb20gdGhlIHNlcnZlcidz
IHRocmVhZCwKKyAgICAgICMgb3RoZXJ3aXNlIHRoZXJlJ3MgYSBkZWFkbG9jaworICAgICAgdGhy
ZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhOiBzZWxmLnNlcnZlci5zaHV0ZG93bigpKS5zdGFy
dCgpCisKKyAgICBkZWYgX3NlcnZlX2ZpbGUoc2VsZiwgZmlsZV9wYXRoKToKKyAgICAgIGlmIG5v
dCBvcy5wYXRoLmV4aXN0cyhmaWxlX3BhdGgpOgorICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0
LCAiRmlsZSBub3QgZm91bmQiKQorICAgICAgICByZXR1cm4KKyAgICAgIHN0YXRpY19maWxlID0g
ZmlsZShmaWxlX3BhdGgsICdyYicpCisgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAg
ICAgIyBUT0RPOiBnZW5lcmFsaXplIE1JTUUgdHlwZSBoYW5kbGluZworICAgICAgIyBUT0RPOiBh
ZGQgY29udGVudC1sZW5ndGgKKyAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIs
ICJ0ZXh0L2h0bWwiKQorICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICBzaHV0aWwuY29w
eWZpbGVvYmooc3RhdGljX2ZpbGUsIHNlbGYud2ZpbGUpCisgICAgICBzdGF0aWNfZmlsZS5jbG9z
ZSgpCisKK2NsYXNzIExvY2FsUmViYXNlbGluZShBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6
CisgICAgbmFtZSA9ICJsb2NhbC1yZWJhc2VsaW5lIgorICAgIGhlbHBfdGV4dCA9ICJUT0RPKG1p
aGFpcCkiCisgICAgYXJndW1lbnRfbmFtZXMgPSAiWy9wYXRoL3RvL3Jlc3VsdHMvZGlyZWN0b3J5
L10iCisKKyAgICBkZWYgX3JlcGxhY2VfZXhwZWN0YXRpb25fd2l0aF9yZW1vdGVfcmVzdWx0KHNl
bGYsIGxvY2FsX2ZpbGUsIHJlbW90ZV9maWxlKToKKyAgICAgICAgKGRvd25sb2FkZWRfZmlsZSwg
aGVhZGVycykgPSB1cmxsaWIudXJscmV0cmlldmUocmVtb3RlX2ZpbGUpCisgICAgICAgIHNodXRp
bC5tb3ZlKGRvd25sb2FkZWRfZmlsZSwgbG9jYWxfZmlsZSkKKworICAgIGRlZiBfdGVzdHNfdG9f
dXBkYXRlKHNlbGYsIGJ1aWxkKToKKyAgICAgICAgcGFyc2VkX3Jlc3VsdHMgPSBidWlsZC5sYXlv
dXRfdGVzdF9yZXN1bHRzKCkucGFyc2VkX3Jlc3VsdHMoKQorICAgICAgICAjIEZJWE1FOiBUaGlz
IHByb2JhYmx5IGJlbG9uZ3MgYXMgQVBJIG9uIExheW91dFRlc3RSZXN1bHRzCisgICAgICAgICMg
YnV0IC5mYWlsaW5nX3Rlc3RzKCkgYWxyZWFkeSBtZWFucyBzb21ldGhpbmcgZWxzZS4KKyAgICAg
ICAgZmFpbGluZ190ZXN0cyA9IHBhcnNlZF9yZXN1bHRzW0xheW91dFRlc3RSZXN1bHRzLmZhaWxf
a2V5XQorICAgICAgICByZXR1cm4gc2VsZi5fdG9vbC51c2VyLnByb21wdF93aXRoX2xpc3QoIldo
aWNoIHRlc3QocykgdG8gcmViYXNlbGluZToiLCBmYWlsaW5nX3Rlc3RzLCBjYW5fY2hvb3NlX211
bHRpcGxlPVRydWUpCisKKyAgICBkZWYgX3Jlc3VsdHNfdXJsX2Zvcl90ZXN0KHNlbGYsIGJ1aWxk
LCB0ZXN0KToKKyAgICAgICAgdGVzdF9iYXNlID0gb3MucGF0aC5zcGxpdGV4dCh0ZXN0KVswXQor
ICAgICAgICBhY3R1YWxfcGF0aCA9IHRlc3RfYmFzZSArICItYWN0dWFsLnR4dCIKKyAgICAgICAg
cmV0dXJuIGJ1aWxkLnJlc3VsdHNfdXJsKCkgKyAiLyIgKyBhY3R1YWxfcGF0aAorCisgICAgZGVm
IGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CisgICAgICAgIGlmIGxlbihhcmdz
KSAhPSAxOgorICAgICAgICAgIHByaW50ICJQYXRoIHRvIHJlc3VsdHMgZGlyZWN0b3J5IGlzIHJl
cXVpcmVkLiIKKyAgICAgICAgICByZXR1cm4gMQorICAgICAgICByZXN1bHRzX2RpcmVjdG9yeSA9
IGFyZ3NbMF0gICAgICAgIAorICAgICAgICAKKyAgICAgICAgcHJpbnQgIkdhdGhlcmluZyBjdXJy
ZW50IGJhc2VsaW5lcy4uLiIKKyAgICAgICAgCisgICAgICAgIHBvcnQgPSBmYWN0b3J5LmdldCgp
CisgICAgICAgIGxheW91dF90ZXN0c19kaXJlY3RvcnkgPSBwb3J0LmxheW91dF90ZXN0c19kaXIo
KQorICAgICAgICBiYXNlbGluZXNfYnlfdGVzdCA9IHt9CisgICAgICAgIGZvciByb290LCBkaXJz
LCBmaWxlcyBpbiBvcy53YWxrKGxheW91dF90ZXN0c19kaXJlY3RvcnkpOgorICAgICAgICAgICAg
Zm9yIGZpbGVuYW1lIGluIGZubWF0Y2guZmlsdGVyKGZpbGVzLCAnKi1leHBlY3RlZC4qJyk6Cisg
ICAgICAgICAgICAgICAgcmVsYXRpdmVfcGF0aCA9IG9zLnBhdGgucmVscGF0aChyb290LCBsYXlv
dXRfdGVzdHNfZGlyZWN0b3J5KQorICAgICAgICAgICAgICAgIHBhdGhfcGllY2VzID0gcmVsYXRp
dmVfcGF0aC5zcGxpdChvcy5zZXApCisgICAgICAgICAgICAgICAgaWYgbGVuKHBhdGhfcGllY2Vz
KSA+PSAyIGFuZCBwYXRoX3BpZWNlc1swXSA9PSAncGxhdGZvcm0nOgorICAgICAgICAgICAgICAg
ICAgICBwbGF0Zm9ybSA9IHBhdGhfcGllY2VzWzFdCisgICAgICAgICAgICAgICAgICAgIHRlc3Rf
ZGlyX3BhdGggPSBvcy5zZXAuam9pbihwYXRoX3BpZWNlc1syOl0pCisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0gPSAnYmFzZScKKyAgICAgICAgICAg
ICAgICAgICAgdGVzdF9kaXJfcGF0aCA9IHJlbGF0aXZlX3BhdGgKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAodGVzdF9uYW1lLCB0ZXh0X2V4dGVuc2lvbikgPSBvcy5wYXRoLnNw
bGl0ZXh0KGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIHRlc3RfbmFtZSA9IHRlc3RfbmFtZVsw
Oi1sZW4oJy1leHBlY3RlZCcpXQorICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IG9zLnBhdGgu
am9pbih0ZXN0X2Rpcl9wYXRoLCB0ZXN0X25hbWUpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9w
YXRoIG5vdCBpbiBiYXNlbGluZXNfYnlfdGVzdDoKKyAgICAgICAgICAgICAgICAgICAgYmFzZWxp
bmVzX2J5X3Rlc3RbdGVzdF9wYXRoXSA9IHNldCgpCisgICAgICAgICAgICAgICAgYmFzZWxpbmVz
X2J5X3Rlc3RbdGVzdF9wYXRoXS5hZGQocGxhdGZvcm0pCisgICAgICAgIAorICAgICAgICBwcmlu
dCAiU3RhcnRpbmcgc2VydmVyIGF0IGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC8iCisgICAgICAgIAor
ICAgICAgICBodHRwZCA9IFJlYmFzZWxpbmVIVFRTZXJ2ZXIoCisgICAgICAgICAgICBodHRwZF9w
b3J0PTgwMDAsCisgICAgICAgICAgICByZXN1bHRzX2RpcmVjdG9yeT1yZXN1bHRzX2RpcmVjdG9y
eSwKKyAgICAgICAgICAgIGJhc2VsaW5lc19ieV90ZXN0PWJhc2VsaW5lc19ieV90ZXN0LAorICAg
ICAgICAgICAgcG9ydD1wb3J0LAorICAgICAgICAgICAgc2NtPXNlbGYuX3Rvb2wuc2NtKCkpCisg
ICAgICAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKSAgICAgICAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71619</attachid>
            <date>2010-10-22 21:54:57 -0700</date>
            <delta_ts>2010-10-22 22:47:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47761-20101022215456.patch</filename>
            <type>text/plain</type>
            <size>43928</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA2YmY3MmQ5MjdhZDhmMWVmZjFjOGVlNmNkNzkzNzRjYjkyMDMwMGRkLi5hN2ZhMDBl
ZjhiOGY2YWZiZTdhMGNkMWZjNTU5NjEwNzRjZjc1MmNiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAK
KzIwMTAtMTAtMjIgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTG9jYWwgcmViYXNl
bGluaW5nIHRvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ3NzYxCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19p
bml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEv
bG9jYWxyZWJhc2VsaW5lL2luZGV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9tYWluLmpzOiBBZGRlZC4K
KyAgICAgICAgKG1haW4uYWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChtYWluLmRvY3VtZW50
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAoZGlzcGxheVJlc3VsdHMuZm9yKToKKyAgICAg
ICAgKGRpc3BsYXlSZXN1bHRzKToKKyAgICAgICAgKHNlbGVjdEZhaWx1cmVUeXBlKToKKyAgICAg
ICAgKHNlbGVjdERpcmVjdG9yeSk6CisgICAgICAgIChnZXRTZWxlY3RlZFRlc3QpOgorICAgICAg
ICAocHJlZmV0Y2gpOgorICAgICAgICAoc2VsZWN0VGVzdCk6CisgICAgICAgICh1cGRhdGVTdGF0
ZSk6CisgICAgICAgIChkaXNwbGF5SW1hZ2VSZXN1bHRzLm9ubG9hZCk6CisgICAgICAgIChkaXNw
bGF5SW1hZ2VSZXN1bHRzKToKKyAgICAgICAgKHVwZGF0ZURpZmYpOgorICAgICAgICAoZGlzcGxh
eVRleHRSZXN1bHRzLmxvYWRUZXh0UmVzdWx0KToKKyAgICAgICAgKCk6CisgICAgICAgIChuZXh0
VGVzdCk6CisgICAgICAgIChwcmV2aW91c1Rlc3QpOgorICAgICAgICAoc2hvd0xvdXBlKToKKyAg
ICAgICAgKGZpbGxMb3VwZUZyb21JbWFnZSk6CisgICAgICAgIChmaWxsTG91cGVGcm9tQ2FudmFz
LnJlYWRQaXhlbENvbXBvbmVudCk6CisgICAgICAgIChmaWxsTG91cGVGcm9tQ2FudmFzKToKKyAg
ICAgICAgKGhpZGVMb3VwZSk6CisgICAgICAgIChyZW1vdmVTZWxlY3Rpb25Gcm9tUmViYXNlbGlu
ZVF1ZXVlKToKKyAgICAgICAgKHJlbW92ZUZyb21SZWJhc2VsaW5lUXVldWUpOgorICAgICAgICAo
cmViYXNlbGluZVF1ZXVlKToKKyAgICAgICAgKHJlYmFzZWxpbmUuaGFuZGxlU3VjY2Vzcyk6Cisg
ICAgICAgIChyZWJhc2VsaW5lLmhhbmRsZUZhaWx1cmUpOgorICAgICAgICAobG9nKToKKyAgICAg
ICAgKHRvZ2dsZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2xv
Y2FscmViYXNlbGluZS5weTogQWRkZWQuCisKIDIwMTAtMTAtMjIgIEVyaWMgU2VpZGVsICA8ZXJp
Y0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18u
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18u
cHkKaW5kZXggOWJkZWM4ZjU5N2UxNzYzNjM0NGE4MTgzYjEwM2ExNTBiZjhjOWRlMy4uMzhiMWU3
OWVmNDgxNjE3NDc0NmM3MjY2NzExNWE3YzJkZDY3MjY2OSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9fX2luaXRfXy5weQpAQCAtMiw0
ICsyLDUgQEAKIAogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnByZXR0eWRpZmYgaW1wb3J0
IFByZXR0eURpZmYKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5yZWJhc2VsaW5lIGltcG9y
dCBSZWJhc2VsaW5lCitmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMubG9jYWxyZWJhc2VsaW5l
IGltcG9ydCBMb2NhbFJlYmFzZWxpbmUKICMgRklYTUU6IEFkZCB0aGUgcmVzdCBvZiB0aGUgY29t
bWFuZHMgaGVyZS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9pbmRleC5odG1sIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvbG9jYWxyZWJhc2VsaW5lL2luZGV4
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2E0ZWVjODdmYjE2ZjUxNmE2YzYxOGQ5OTkyZGFkMDlhNGU5YTFj
MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9pbmRleC5odG1sCkBAIC0wLDAgKzEsMzY5IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisJPHRpdGxlPkxheW91dCBUZXN0IFJl
YmFzZWxpbmVyPC90aXRsZT4KKwk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorCSAgYm9keSB7CisJ
ICAgIGZvbnQtc2l6ZTogMTJweDsKKwkgICAgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWws
IHNhbnMtc2VyaWY7CisJICAgIHBhZGRpbmc6IDA7CisJICAgIG1hcmdpbjogMDsKKwkgIH0KKwkg
IAorCSAgZGl2IHsKKwkgICAgbWFyZ2luOiAwOworCSAgfQorCSAgCisJICBhLCAubGluayB7Cisg
ICAgICBjb2xvcjogI2FhZjsKKyAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAg
ICAgY3Vyc29yOiBwb2ludGVyOwkgICAgCisJICB9CisJICAKKwkgIC5saW5rLnNlbGVjdGVkIHsK
KwkgICAgY29sb3I6ICNmZmY7CisJICAgIGZvbnQtd2VpZ2h0OiBib2xkOworCSAgICB0ZXh0LWRl
Y29yYXRpb246IG5vbmU7CisJICB9CisJICAKKwkgICNsb2csCisJICAjcXVldWUgeworCSAgICBw
YWRkaW5nOiAuMjVlbSAwIDAgLjI1ZW07CisJICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKwkgICAg
cmlnaHQ6IDA7CisJICAgIGhlaWdodDogMjAwcHg7CisJICAgIG92ZXJmbG93OiBhdXRvOworCSAg
ICBiYWNrZ3JvdW5kOiAjZmZmOworCSAgICAtd2Via2l0LWJveC1zaGFkb3c6IDFweCAxcHggNXB4
IHJnYmEoMCwgMCwgMCwgLjUpOworCSAgfQorCSAgCisJICAjbG9nIHsKKwkgICAgdG9wOiAyZW07
CisJICAgIHdpZHRoOiA1MDBweDsKKwkgIH0KKwkgIAorCSAgI3F1ZXVlIHsKKwkgICAgYm90dG9t
OiAzZW07CisJICAgIHdpZHRoOiA0MDBweDsKKwkgIH0KKwkgIAorCSAgI3F1ZXVlLXNlbGVjdCB7
CisJICAgIGRpc3BsYXk6IGJsb2NrOworCSAgICB3aWR0aDogMzkwcHg7CisJICB9CisJICAKKwkg
ICNoZWFkZXIsCisJICAjZm9vdGVyIHsKKyAgICAgIHBhZGRpbmc6IC41ZW0gMWVtOwkgIAorICAg
ICAgYmFja2dyb3VuZDogIzMzMzsKKyAgICAgIGNvbG9yOiAjZmZmOworICAgICAgLXdlYmtpdC1i
b3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLCAwLCAwLCAwLjUpOworCSAgfQorCSAgCisJICAj
aGVhZGVyIC5kaXZpZGVyLAorCSAgI2Zvb3RlciAuZGl2aWRlciB7CisJICAgIG9wYWNpdHk6IC4z
OworCSAgICBwYWRkaW5nOiAwIC41ZW07CisJICB9CisJICAKKyAgICAjaGVhZGVyIHsKKyAgICAg
IG1hcmdpbi1ib3R0b206IDFlbTsKKyAgICB9CisgICAgCisgICAgI2hlYWRlciBsYWJlbCwKKyAg
ICAjZm9vdGVyIGxhYmVsIHsKKyAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgICAgIGNvbG9y
OiAjY2NjOworICAgIH0KKyAgICAKKyAgICAjaGVhZGVyIGxhYmVsIHNwYW4sCisgICAgI2Zvb3Rl
ciBsYWJlbCBzcGFuIHsKKyAgICAgIGNvbG9yOiAjZmZmOworICAgICAgZm9udC13ZWlnaHQ6IGJv
bGQ7CisgICAgfQorICAgIAorICAgICNuYXYtYnV0dG9ucyBidXR0b24geworICAgICAgYmFja2dy
b3VuZDogI2ZmZjsKKyAgICAgIGJvcmRlcjogMDsKKyAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7
CisgICAgfQorICAgIAorICAgICNuYXYtYnV0dG9ucyBidXR0b246YWN0aXZlIHsKKyAgICAgIC13
ZWJraXQtYm94LXNoYWRvdzogMCAwIDVweCAjMzNmIGluc2V0OworICAgICAgYmFja2dyb3VuZDog
I2FhYTsKKyAgICB9CisKKyAgICAjbmF2LWJ1dHRvbnMgYnV0dG9uW2Rpc2FibGVkXSB7CisgICAg
ICBvcGFjaXR5OiAuNTsKKyAgICB9CisKKwkgICNjb250cm9scyB7CisJICAgIGZsb2F0OiByaWdo
dDsKKwkgIH0KKwkgIAorCSAgI3Rlc3Qtb3V0cHV0IHsKKwkgICAgYm9yZGVyLXNwYWNpbmc6IDA7
CisJICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CisJICAgIG1hcmdpbjogMCBhdXRvOwor
CSAgfQorCSAgCisJICAjdGVzdC1vdXRwdXQgdGQsCisJICAjdGVzdC1vdXRwdXQgdGggeworCSAg
ICBwYWRkaW5nOiAwOworCSAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworCSAgfQorCSAgCisJICAj
aW1hZ2Utb3V0cHV0cyBpbWcsCisJICAjaW1hZ2Utb3V0cHV0cyBjYW52YXMgeworCSAgICB3aWR0
aDogODAwcHg7CisJICAgIGhlaWdodDogNjAwcHg7CisJICAgIGJvcmRlcjogc29saWQgMXB4ICNk
ZGQ7CisJICB9CisJICAKKwkgICNpbWFnZS1vdXRwdXRzIGltZy5sb2FkaW5nLAorCSAgI2ltYWdl
LW91dHB1dHMgY2FudmFzLmxvYWRpbmcgeworCSAgICBvcGFjaXR5OiAuNTsKKwkgIH0KKwkgIAor
CSAgI2ltYWdlLW91dHB1dHMgI2FjdHVhbC1pbWFnZSB7CisJICAgIG1hcmdpbjogMCAxZW07CisJ
ICB9CisJICAKKwkgICN0ZXN0LW91dHB1dCAjbGFiZWxzIHRoIHsKKwkgICAgdGV4dC1hbGlnbjog
Y2VudGVyOworCSAgICBjb2xvcjogIzY2NjsKKwkgIH0KKwkgIAorCSAgI3RleHQtb3V0cHV0cyBw
cmUgeworCSAgICBoZWlnaHQ6IDYwMHB4OworCSAgICB3aWR0aDogODAwcHg7CisJICAgIG92ZXJm
bG93OiBhdXRvOworCSAgfQorCSAgCisJICAjdGVzdC1vdXRwdXQgaDIgeworCSAgICBib3JkZXIt
Ym90dG9tOiBzb2xpZCAxcHggI2NjYzsKKwkgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisJICAgIG1h
cmdpbjogMDsKKwkgICAgYmFja2dyb3VuZDogI2VlZTsKKwkgIH0KKwkgIAorCSAgI2Zvb3RlciB7
CisJICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKwkgICAgYm90dG9tOiAwOworCSAgICBsZWZ0OiAw
OworCSAgICByaWdodDogMDsKKwkgICAgbWFyZ2luLXRvcDogMWVtOworCSAgfQorCSAgCisJICAj
c3RhdGUubmVlZHNfcmViYXNlbGluZSB7CisJICAgIGNvbG9yOiB5ZWxsb3c7CisJICB9CisJICAj
c3RhdGUucmViYXNlbGluZV9mYWlsZWQgeworCSAgICBjb2xvcjogcmVkOworCSAgfQorCSAgI3N0
YXRlLnJlYmFzZWxpbmVfc3VjY2VlZGVkIHsKKwkgICAgY29sb3I6IGdyZWVuOworCSAgfQorCSAg
I3N0YXRlLmluX3F1ZXVlIHsKKwkgICAgY29sb3I6IGdyYXk7CisJICB9CisJICAKKwkgICNhY3Rp
b24tYnV0dG9ucyB7CisJICAgIGZsb2F0OiByaWdodDsKKwkgIH0KKwkgIAorCSAgI2FjdGlvbi1i
dXR0b25zIC5saW5rIHsKKwkgICAgbWFyZ2luLXJpZ2h0OiAxZW07CisJICB9CisJICAKKwkgICNm
b290ZXIgYnV0dG9uIHsKKwkgICAgcGFkZGluZzogMWVtOworCSAgfQorCSAgCisJICAjbG91cGUg
eworCSAgICAtd2Via2l0LWJveC1zaGFkb3c6IDJweCAycHggNXB4IHJnYmEoMCwgMCwgMCwgLjUp
OworCSAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisJICAgIHdpZHRoOiA2MzRweDsKKwkgICAgdG9w
OiA1MCU7CisJICAgIGxlZnQ6IDUwJTsKKwkgICAgbWFyZ2luLWxlZnQ6IC0xNTFweDsKKwkgICAg
bWFyZ2luLXRvcDogLTUwcHg7CisJICAgIGJhY2tncm91bmQ6ICNmZmY7CisJICAgIGJvcmRlci1z
cGFjaW5nOiAwOworCSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworCSAgfQorCSAgCisJ
ICAjbG91cGUgdGQgeworCSAgICBwYWRkaW5nOiAwOworICAgICAgYm9yZGVyOiBzb2xpZCAxcHgg
I2NjYzsJICAgIAorCSAgfQorCSAgCisgICAgI2xvdXBlIGxhYmVsIHsKKyAgICAgIGNvbG9yOiAj
OTk5OworICAgICAgcGFkZGluZy1yaWdodDogMWVtOworICAgIH0KKyAgICAKKyAgICAjbG91cGUg
c3BhbiB7CisgICAgICBjb2xvcjogIzAwMDsKKyAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAg
IH0KKyAgICAKKyAgICAjbG91cGUgI2xvdXBlLWNsb3NlIHsKKyAgICAgIGZsb2F0OiByaWdodDsK
KyAgICB9CisgICAgCisgICAgI2xvdXBlICNsb3VwZS1pbmZvIHsKKyAgICAgIGJhY2tncm91bmQ6
ICNlZWU7CisgICAgICBwYWRkaW5nOiAuM2VtIC41ZW07CisgICAgfQorICAgIAorICAgICNsb3Vw
ZSAjbG91cGUtY29sb3JzIHRkIHsKKyAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICB9Cisg
ICAgCisgICAgI2xvdXBlIC5sb3VwZS1jb250YWluZXIgeworICAgICAgcG9zaXRpb246IHJlbGF0
aXZlOworICAgICAgd2lkdGg6IDIxMHB4OworICAgICAgaGVpZ2h0OiAyMTBweDsKKyAgICB9Cisg
ICAgCisgICAgI2xvdXBlIC5jZW50ZXItaGlnaGxpZ2h0IHsKKyAgICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICAgIHdpZHRoOiAxMHB4OworICAgICAgaGVpZ2h0OiAxMHB4OworICAgICAgdG9w
OiA1MCU7CisgICAgICBsZWZ0OiA1MCU7CisgICAgICBtYXJnaW4tbGVmdDogLTVweDsKKyAgICAg
IG1hcmdpbi10b3A6IC01cHg7CisgICAgICBvdXRsaW5lOiBzb2xpZCAxcHggIzk5OTsKKyAgICB9
CisJPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8cHJlIGlkPSJsb2ciIHN0eWxlPSJkaXNw
bGF5OiBub25lIj48L3ByZT4KKzxkaXYgaWQ9InF1ZXVlIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+
CisgIFF1ZXVlOgorICA8c2VsZWN0IGlkPSJxdWV1ZS1zZWxlY3QiIHNpemU9IjEwIj48L3NlbGVj
dD4KKyAgPGJ1dHRvbiBpZD0icmVtb3ZlLXF1ZXVlLXNlbGVjdGlvbiI+UmVtb3ZlIHNlbGVjdGlv
bjwvYnV0dG9uPgorICA8YnV0dG9uIGlkPSJyZWJhc2VsaW5lLXF1ZXVlIj5SZWJhc2VsaW5lIHF1
ZXVlPC9idXR0b24+Cis8L2Rpdj4KKworPGRpdiBpZD0iaGVhZGVyIj4KKyAgPGRpdiBpZD0iY29u
dHJvbHMiPgorICAgIDwhLS0gQWRkIGEgZHVtbXkgPHNlbGVjdD4gbm9kZSBzbyB0aGF0IHRoaXMg
bGluZXMgdXAgd2l0aCB0aGUgdGV4dCBvbiB0aGUgbGVmdCAtLT4KKyAgICA8c2VsZWN0IHN0eWxl
PSJ2aXNpYmlsaXR5OiBoaWRkZW4iPjwvc2VsZWN0PgorICAgIDxzcGFuIGlkPSJ0b2dnbGUtbG9n
IiBjbGFzcz0ibGluayI+TG9nPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJkaXZpZGVyIj58PC9z
cGFuPgorICAgIDxhIGhyZWY9Ii9xdWl0cXVpdHF1aXQiPkV4aXQ8L2E+CisgIDwvZGl2PgorCisg
IDxzcGFuIGlkPSJzZWxlY3RvcnMiPgorICAgIDxsYWJlbD4KKyAgICAgIEZhaWx1cmUgdHlwZToK
KyAgICAgIDxzZWxlY3QgaWQ9ImZhaWx1cmUtdHlwZS1zZWxlY3RvciI+PC9zZWxlY3Q+CisgICAg
PC9sYWJlbD4KKyAgCisgICAgPGxhYmVsPgorICAgICAgRGlyZWN0b3J5OgorICAgICAgPHNlbGVj
dCBpZD0iZGlyZWN0b3J5LXNlbGVjdG9yIj48L3NlbGVjdD4KKyAgICA8L2xhYmVsPgorICAKKyAg
ICA8bGFiZWw+CisgICAgICBUZXN0OgorICAgICAgPHNlbGVjdCBpZD0idGVzdC1zZWxlY3RvciI+
PC9zZWxlY3Q+CisgICAgPC9sYWJlbD4KKyAgPC9zcGFuPgorICAKKyAgPHNwYW4gaWQ9Im5hdi1i
dXR0b25zIj4KKyAgICA8YnV0dG9uIGlkPSJwcmV2aW91cy10ZXN0Ij4mbGFxdW87PC9idXR0b24+
CisgICAgPHNwYW4gaWQ9InRlc3QtaW5kZXgiPjwvc3Bhbj4gb2YgPHNwYW4gaWQ9InRlc3QtY291
bnQiPjwvc3Bhbj4KKyAgICA8YnV0dG9uIGlkPSJuZXh0LXRlc3QiPiZyYXF1bzs8L2J1dHRvbj4K
KyAgPC9zcGFuPiAgCis8L2Rpdj4KKworPHRhYmxlIGlkPSJ0ZXN0LW91dHB1dCI+CisgIDx0aGVh
ZCBpZD0ibGFiZWxzIj4KKyAgICA8dGg+RXhwZWN0ZWQ8L3RoPgorICAgIDx0aD5BY3R1YWw8L3Ro
PgorICAgIDx0aD5EaWZmPC90aD4KKyAgPC90aGVhZD4KKyAgPHRib2R5IGlkPSJpbWFnZS1vdXRw
dXRzIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+CisgICAgPHRyPgorICAgICAgPHRkIGNvbHNwYW49
IjMiPjxoMj5JbWFnZTwvaDI+PC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZD48
aW1nIGlkPSJleHBlY3RlZC1pbWFnZSI+PC90ZD4KKyAgICAgIDx0ZD48aW1nIGlkPSJhY3R1YWwt
aW1hZ2UiPjwvdGQ+CisgICAgICA8dGQ+PGNhbnZhcyBpZD0iZGlmZi1jYW52YXMiIHdpZHRoPSI4
MDAiIGhlaWdodD0iNjAwIj48L2NhbnZhcz48L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+Cisg
IDx0Ym9keSBpZD0idGV4dC1vdXRwdXRzIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+CisgICAgPHRy
PgorICAgICAgPHRkIGNvbHNwYW49IjMiPjxoMj5UZXh0PC9oMj48L3RkPgorICAgIDwvdHI+Cisg
ICAgPHRyPgorICAgICAgPHRkPjxwcmUgaWQ9ImV4cGVjdGVkLXRleHQiPjwvcHJlPjwvdGQ+Cisg
ICAgICA8dGQ+PHByZSBpZD0iYWN0dWFsLXRleHQiPjwvcHJlPjwvdGQ+CisgICAgICA8dGQ+PHBy
ZSBpZD0iZGlmZi10ZXh0Ij48cHJlPjwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKworPC90
YWJsZT4KKworPGRpdiBpZD0iZm9vdGVyIj4KKyAgPGxhYmVsPlN0YXRlOiA8c3BhbiBpZD0ic3Rh
dGUiPjwvc3Bhbj48L2xhYmVsPgorICA8bGFiZWw+RXhpc3RpbmcgYmFzZWxpbmVzOiA8c3BhbiBp
ZD0iY3VycmVudC1iYXNlbGluZXMiPjwvc3Bhbj48L2xhYmVsPgorICA8bGFiZWw+CisgICAgQmFz
ZWxpbmUgY3JlYXRpb24gbW9kZToKKyAgICA8c2VsZWN0IGlkPSJiYXNlbGluZS1zZWxlY3RvciI+
CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMtc25vdy1sZW9wYXJkIj5NYWMgU25vdyBMZW9wYXJk
PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1zbm93LWxlb3BhcmQiPkNo
cm9taXVtIFNub3cgTGVvcGFyZDwvb3B0aW9uPgorICAgIDwvc2VsZWN0PgorICA8L2xhYmVsPgor
ICA8IS0tIEFkZCBhIGR1bW15IDxidXR0b24+IG5vZGUgc28gdGhhdCB0aGlzIGxpbmVzIHVwIHdp
dGggdGhlIHRleHQgb24gdGhlIGxlZnQgLS0+CisgIDxidXR0b24gc3R5bGU9InZpc2liaWxpdHk6
IGhpZGRlbiI+PC9idXR0b24+CisgIAorICA8ZGl2IGlkPSJhY3Rpb24tYnV0dG9ucyI+CisgICAg
PHNwYW4gaWQ9InRvZ2dsZS1xdWV1ZSIgY2xhc3M9ImxpbmsiPlF1ZXVlPC9zcGFuPgorICAgIDxi
dXR0b24gaWQ9ImFkZC10by1yZWJhc2VsaW5lLXF1ZXVlIj5BZGQgdG8gcmViYXNlbGluZSBxdWV1
ZTwvYnV0dG9uPgorICA8L2Rpdj4KKzwvZGl2PgorCis8dGFibGUgaWQ9ImxvdXBlIiBzdHlsZT0i
ZGlzcGxheTogbm9uZSI+CisgIDx0cj4KKyAgICA8dGQgY29sc3Bhbj0iMyIgaWQ9ImxvdXBlLWlu
Zm8iPgorICAgICAgPHNwYW4gaWQ9ImxvdXBlLWNsb3NlIiBjbGFzcz0ibGluayI+Q2xvc2U8L3Nw
YW4+CisgICAgICA8bGFiZWw+Q29vcmRpbmF0ZTogPHNwYW4gaWQ9ImxvdXBlLWNvb3JkaW5hdGUi
Pjwvc3Bhbj48L2xhYmVsPgorICAgIDwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+Cisg
ICAgICA8ZGl2IGNsYXNzPSJsb3VwZS1jb250YWluZXIiPgorICAgICAgICA8Y2FudmFzIGlkPSJl
eHBlY3RlZC1sb3VwZSIgd2lkdGg9IjIxMCIgaGVpZ2h0PSIyMTAiPjwvY2FudmFzPgorICAgICAg
ICA8ZGl2IGNsYXNzPSJjZW50ZXItaGlnaGxpZ2h0Ij48L2Rpdj4KKyAgICAgIDwvZGl2PgorICAg
IDwvdGQ+CisgICAgPHRkPgorICAgICAgPGRpdiBjbGFzcz0ibG91cGUtY29udGFpbmVyIj4KKyAg
ICAgICAgPGNhbnZhcyBpZD0iYWN0dWFsLWxvdXBlIiB3aWR0aD0iMjEwIiBoZWlnaHQ9IjIxMCI+
PC9jYW52YXM+CisgICAgICAgIDxkaXYgY2xhc3M9ImNlbnRlci1oaWdobGlnaHQiPjwvZGl2Pgor
ICAgICAgPC9kaXY+CisgICAgPC90ZD4KKyAgICA8dGQ+CisgICAgICA8ZGl2IGNsYXNzPSJsb3Vw
ZS1jb250YWluZXIiPgorICAgICAgICA8Y2FudmFzIGlkPSJkaWZmLWxvdXBlIiB3aWR0aD0iMjEw
IiBoZWlnaHQ9IjIxMCI+PC9jYW52YXM+CisgICAgICAgIDxkaXYgY2xhc3M9ImNlbnRlci1oaWdo
bGlnaHQiPjwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC90ZD4KKyAgPC90cj4KKyAgPHRyIGlk
PSJsb3VwZS1jb2xvcnMiPgorICAgIDx0ZD48bGFiZWw+RXhwLiBjb2xvcjogPHNwYW4gaWQ9ImV4
cGVjdGVkLWxvdXBlLWNvbG9yIj48L3NwYW4+PC9sYWJlbD48L3RkPgorICAgIDx0ZD48bGFiZWw+
QWN0dWFsIGNvbG9yOiA8c3BhbiBpZD0iYWN0dWFsLWxvdXBlLWNvbG9yIj48L3NwYW4+PC9sYWJl
bD48L3RkPgorICAgIDx0ZD48bGFiZWw+RGlmZiBjb2xvcjogPHNwYW4gaWQ9ImRpZmYtbG91cGUt
Y29sb3IiPjwvc3Bhbj48L2xhYmVsPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8c2NyaXB0
IHNyYz0iL21haW4uanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvbG9jYWxyZWJh
c2VsaW5lL21haW4uanMgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvbWFpbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjNiZDQ0Yjc3MTFk
NzI0YzczNWIyNDQ5ODc1YWJlMWExNzhhNWY2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvbG9jYWxyZWJhc2VsaW5lL21h
aW4uanMKQEAgLTAsMCArMSw1NTggQEAKK3ZhciBTVEFURV9ORUVEU19SRUJBU0VMSU5FID0gJ25l
ZWRzX3JlYmFzZWxpbmUnOwordmFyIFNUQVRFX1JFQkFTRUxJTkVfRkFJTEVEID0gJ3JlYmFzZWxp
bmVfZmFpbGVkJzsKK3ZhciBTVEFURV9SRUJBU0VMSU5FX1NVQ0NFRURFRCA9ICdyZWJhc2VsaW5l
X3N1Y2NlZWRlZCc7Cit2YXIgU1RBVEVfSU5fUVVFVUUgPSAnaW5fcXVldWUnOwordmFyIFNUQVRF
X1RPX0RJU1BMQVlfU1RBVEUgPSB7fTsKK1NUQVRFX1RPX0RJU1BMQVlfU1RBVEVbU1RBVEVfTkVF
RFNfUkVCQVNFTElORV0gPSAnTmVlZHMgcmViYXNlbGluZSc7CitTVEFURV9UT19ESVNQTEFZX1NU
QVRFW1NUQVRFX1JFQkFTRUxJTkVfRkFJTEVEXSA9ICdSZWJhc2VsaW5lIGZhaWxlZCc7CitTVEFU
RV9UT19ESVNQTEFZX1NUQVRFW1NUQVRFX1JFQkFTRUxJTkVfU1VDQ0VFREVEXSA9ICdSZWJhc2Vs
aW5lIHN1Y2NlZWRlZCc7CitTVEFURV9UT19ESVNQTEFZX1NUQVRFW1NUQVRFX0lOX1FVRVVFXSA9
ICdJbiBxdWV1ZSc7CisKK3ZhciByZXN1bHRzOwordmFyIHRlc3RzQnlGYWlsdXJlVHlwZSA9IHt9
OwordmFyIHRlc3RzQnlEaXJlY3RvcnkgPSB7fTsKK3ZhciBzZWxlY3RlZFRlc3RzID0gW107Cit2
YXIgaW5Qcm9ncmVzc1JlYmFzZWxpbmVDb3VudCA9IDA7CisKK2Z1bmN0aW9uICQoaWQpIHsKKyAg
cmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKK30KKworZnVuY3Rpb24gbWFpbigp
IHsKKyAgJCgnZmFpbHVyZS10eXBlLXNlbGVjdG9yJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdl
Jywgc2VsZWN0RmFpbHVyZVR5cGUpOworICAkKCdkaXJlY3Rvcnktc2VsZWN0b3InKS5hZGRFdmVu
dExpc3RlbmVyKCdjaGFuZ2UnLCBzZWxlY3REaXJlY3RvcnkpOworICAkKCd0ZXN0LXNlbGVjdG9y
JykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgc2VsZWN0VGVzdCk7CisgICQoJ25leHQtdGVz
dCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbmV4dFRlc3QpOworICAkKCdwcmV2aW91cy10
ZXN0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBwcmV2aW91c1Rlc3QpOworCisgICQoJ2Fk
ZC10by1yZWJhc2VsaW5lLXF1ZXVlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhZGRUb1Jl
YmFzZWxpbmVRdWV1ZSk7CisgICQoJ3F1ZXVlLXNlbGVjdCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2No
YW5nZScsIHVwZGF0ZVN0YXRlKTsKKyAgJCgncmVtb3ZlLXF1ZXVlLXNlbGVjdGlvbicpLmFkZEV2
ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlU2VsZWN0aW9uRnJvbVJlYmFzZWxpbmVRdWV1ZSk7
CisgICQoJ3JlYmFzZWxpbmUtcXVldWUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlYmFz
ZWxpbmVRdWV1ZSk7CisKKyAgJCgnZXhwZWN0ZWQtaW1hZ2UnKS5hZGRFdmVudExpc3RlbmVyKCdj
bGljaycsIHNob3dMb3VwZSk7CisgICQoJ2FjdHVhbC1pbWFnZScpLmFkZEV2ZW50TGlzdGVuZXIo
J2NsaWNrJywgc2hvd0xvdXBlKTsKKyAgJCgnZGlmZi1jYW52YXMnKS5hZGRFdmVudExpc3RlbmVy
KCdjbGljaycsIHNob3dMb3VwZSk7CisgICQoJ2xvdXBlLWNsb3NlJykuYWRkRXZlbnRMaXN0ZW5l
cignY2xpY2snLCBoaWRlTG91cGUpOworICAkKCd0b2dnbGUtbG9nJykuYWRkRXZlbnRMaXN0ZW5l
cignY2xpY2snLCBmdW5jdGlvbigpIHt0b2dnbGUoJ2xvZycpfSk7CisgICQoJ3RvZ2dsZS1xdWV1
ZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7dG9nZ2xlKCdxdWV1ZScp
fSk7CisKKyAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1l
dGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgc3dpdGNoIChldmVudC5rZXlJZGVudGlmaWVyKSB7CisgICAgICBjYXNlICdMZWZ0JzogZXZl
bnQucHJldmVudERlZmF1bHQoKTsgcHJldmlvdXNUZXN0KCk7IGJyZWFrOworICAgICAgY2FzZSAn
UmlnaHQnOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBuZXh0VGVzdCgpOyBicmVhazsKKyAgICAg
IGNhc2UgJ1UrMDA1MSc6IGFkZFRvUmViYXNlbGluZVF1ZXVlKCk7IGJyZWFrOworICAgICAgY2Fz
ZSAnVSswMDUyJzogcmViYXNlbGluZVF1ZXVlKCk7IGJyZWFrOworICAgIH0KKyAgfSk7CisgIAor
ICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgIHhoci5vcGVuKCdHRVQnLCAnL3Jl
c3VsdHMuanNvbicpOworICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkg
eworICAgIHJlc3VsdHMgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpOworICAgIGRpc3Bs
YXlSZXN1bHRzKCk7ICAKKyAgfSk7CisgIHhoci5zZW5kKCk7Cit9CisKK2Z1bmN0aW9uIGRpc3Bs
YXlSZXN1bHRzKCkgeworICB2YXIgZmFpbHVyZVR5cGVTZWxlY3RvciA9ICQoJ2ZhaWx1cmUtdHlw
ZS1zZWxlY3RvcicpOworICB2YXIgZmFpbHVyZVR5cGVzID0gW107CisgIAorICBmb3IgKHZhciB0
ZXN0TmFtZSBpbiByZXN1bHRzLnRlc3RzKSB7CisgICAgdmFyIHRlc3QgPSByZXN1bHRzLnRlc3Rz
W3Rlc3ROYW1lXTsKKyAgICBpZiAodGVzdC5hY3R1YWwgPT0gJ1BBU1MnKSB7CisgICAgICBjb250
aW51ZTsKKyAgICB9CisgICAgdmFyIGZhaWx1cmVUeXBlID0gdGVzdC5hY3R1YWwgKyAnIChleHBl
Y3RlZCAnICsgdGVzdC5leHBlY3RlZCArICcpJzsKKyAgICBpZiAoIShmYWlsdXJlVHlwZSBpbiB0
ZXN0c0J5RmFpbHVyZVR5cGUpKSB7CisgICAgICB0ZXN0c0J5RmFpbHVyZVR5cGVbZmFpbHVyZVR5
cGVdID0gW107CisgICAgICBmYWlsdXJlVHlwZXMucHVzaChmYWlsdXJlVHlwZSk7CisgICAgfQor
ICAgIHRlc3RzQnlGYWlsdXJlVHlwZVtmYWlsdXJlVHlwZV0ucHVzaCh0ZXN0TmFtZSk7CisgIH0K
KyAgCisgIGZhaWx1cmVUeXBlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICByZXR1cm4gdGVz
dHNCeUZhaWx1cmVUeXBlW2JdLmxlbmd0aCAtIHRlc3RzQnlGYWlsdXJlVHlwZVthXS5sZW5ndGg7
CisgIH0pOworICAKKyAgZm9yICh2YXIgaSA9IDAsIGZhaWx1cmVUeXBlOyBmYWlsdXJlVHlwZSA9
IGZhaWx1cmVUeXBlc1tpXTsgaSsrKSB7CisgICAgdmFyIGZhaWx1cmVUeXBlT3B0aW9uID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CisgICAgZmFpbHVyZVR5cGVPcHRpb24udmFs
dWUgPSBmYWlsdXJlVHlwZTsKKyAgICBmYWlsdXJlVHlwZU9wdGlvbi50ZXh0Q29udGVudCA9IGZh
aWx1cmVUeXBlICsgJyAtICcgKyB0ZXN0c0J5RmFpbHVyZVR5cGVbZmFpbHVyZVR5cGVdLmxlbmd0
aCArICcgdGVzdHMnOworICAgIGZhaWx1cmVUeXBlU2VsZWN0b3IuYXBwZW5kQ2hpbGQoZmFpbHVy
ZVR5cGVPcHRpb24pOworICB9CisgIAorICBzZWxlY3RGYWlsdXJlVHlwZSgpOworfQorCitmdW5j
dGlvbiBzZWxlY3RGYWlsdXJlVHlwZSgpIHsKKyAgdmFyIGZhaWx1cmVUeXBlU2VsZWN0b3IgPSAk
KCdmYWlsdXJlLXR5cGUtc2VsZWN0b3InKTsKKyAgdmFyIHNlbGVjdGVkRmFpbHVyZVR5cGUgPQor
ICAgICAgZmFpbHVyZVR5cGVTZWxlY3Rvci5jaGlsZE5vZGVzW2ZhaWx1cmVUeXBlU2VsZWN0b3Iu
c2VsZWN0ZWRJbmRleF0udmFsdWU7CisgIHZhciB0ZXN0cyA9IHRlc3RzQnlGYWlsdXJlVHlwZVtz
ZWxlY3RlZEZhaWx1cmVUeXBlXTsKKyAgCisgIC8vIEluY2x1ZGUgYSBhcGVjaWFsIG9wdGlvbiBm
b3IgYWxsIHRlc3RzCisgIHRlc3RzQnlEaXJlY3RvcnkgPSB7J1thbGxdJzogdGVzdHN9OworICB2
YXIgZGlzcGxheURpcmVjdG9yeU5hbWVzQnlEaXJlY3RvcnkgPSB7J1thbGxdJzogJ2FsbCd9Owor
ICB2YXIgZGlyZWN0b3JpZXMgPSBbJ1thbGxdJ107CisgIAorICBmb3IgKHZhciBpID0gMCwgdGVz
dDsgdGVzdCA9IHRlc3RzW2ldOyBpKyspIHsKKyAgICB2YXIgcGF0aFBpZWNlcyA9IHRlc3Quc3Bs
aXQoJy8nKTsKKyAgICB2YXIgZGlyZWN0b3J5ID0gJyc7CisgICAgCisgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBwYXRoUGllY2VzLmxlbmd0aCAtIDE7IGorKykgeworICAgICAgZGlyZWN0b3J5ICs9
IHBhdGhQaWVjZXNbal0gKyAnLyc7CisgICAgICBpZiAoIShkaXJlY3RvcnkgaW4gdGVzdHNCeURp
cmVjdG9yeSkpIHsKKyAgICAgICAgdGVzdHNCeURpcmVjdG9yeVtkaXJlY3RvcnldID0gW107Cisg
ICAgICAgIHZhciBkaXNwbGF5RGlyZWN0b3J5TmFtZSA9IG5ldyBBcnJheShqICogNikuam9pbign
Jm5ic3A7JykgKyBwYXRoUGllY2VzW2pdOworICAgICAgICBkaXNwbGF5RGlyZWN0b3J5TmFtZXNC
eURpcmVjdG9yeVtkaXJlY3RvcnldID0gZGlzcGxheURpcmVjdG9yeU5hbWU7CisgICAgICAgIGRp
cmVjdG9yaWVzLnB1c2goZGlyZWN0b3J5KTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdGVzdHNC
eURpcmVjdG9yeVtkaXJlY3RvcnldLnB1c2godGVzdCk7CisgICAgfQorICB9CisgIAorICBkaXJl
Y3Rvcmllcy5zb3J0KCk7CisKKyAgdmFyIGRpcmVjdG9yeVNlbGVjdG9yID0gJCgnZGlyZWN0b3J5
LXNlbGVjdG9yJyk7ICAKKyAgZGlyZWN0b3J5U2VsZWN0b3IuaW5uZXJIVE1MID0gJyc7CisgIAor
ICBmb3IgKHZhciBpID0gMCwgZGlyZWN0b3J5OyBkaXJlY3RvcnkgPSBkaXJlY3Rvcmllc1tpXTsg
aSsrKSB7CisgICAgdmFyIGRpcmVjdG9yeU9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J29wdGlvbicpOworICAgIGRpcmVjdG9yeU9wdGlvbi52YWx1ZSA9IGRpcmVjdG9yeTsKKyAgICBk
aXJlY3RvcnlPcHRpb24uaW5uZXJIVE1MID0KKyAgICAgICAgZGlzcGxheURpcmVjdG9yeU5hbWVz
QnlEaXJlY3RvcnlbZGlyZWN0b3J5XSArICcgLSAnICsKKyAgICAgICAgdGVzdHNCeURpcmVjdG9y
eVtkaXJlY3RvcnldLmxlbmd0aCArICcgdGVzdHMnOworICAgIGRpcmVjdG9yeVNlbGVjdG9yLmFw
cGVuZENoaWxkKGRpcmVjdG9yeU9wdGlvbik7ICAgIAorICB9CisgIAorICBzZWxlY3REaXJlY3Rv
cnkoKTsKK30KKworZnVuY3Rpb24gc2VsZWN0RGlyZWN0b3J5KCkgeworICB2YXIgZGlyZWN0b3J5
U2VsZWN0b3IgPSAkKCdkaXJlY3Rvcnktc2VsZWN0b3InKTsKKyAgdmFyIHNlbGVjdGVkRGlyZWN0
b3J5ID0KKyAgICAgIGRpcmVjdG9yeVNlbGVjdG9yLmNoaWxkTm9kZXNbZGlyZWN0b3J5U2VsZWN0
b3Iuc2VsZWN0ZWRJbmRleF0udmFsdWU7CisgIHNlbGVjdGVkVGVzdHMgPSB0ZXN0c0J5RGlyZWN0
b3J5W3NlbGVjdGVkRGlyZWN0b3J5XTsKKworICBzZWxlY3RlZFRlc3RzLnNvcnQoKTsKKworICB2
YXIgdGVzdFNlbGVjdG9yID0gJCgndGVzdC1zZWxlY3RvcicpOworICB0ZXN0U2VsZWN0b3IuaW5u
ZXJIVE1MID0gJyc7CisgIGZvciAodmFyIGkgPSAwLCB0ZXN0OyB0ZXN0ID0gc2VsZWN0ZWRUZXN0
c1tpXTsgaSsrKSB7CisgICAgdmFyIHRlc3RPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdvcHRpb24nKTsKKyAgICB0ZXN0T3B0aW9uLnZhbHVlID0gdGVzdDsKKyAgICB0ZXN0T3B0aW9u
LnRleHRDb250ZW50ID0gdGVzdDsKKyAgICB0ZXN0U2VsZWN0b3IuYXBwZW5kQ2hpbGQodGVzdE9w
dGlvbik7ICAgIAorICB9CisgIAorICBzZWxlY3RUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGdldFNl
bGVjdGVkVGVzdCgpIHsKKyAgdmFyIHRlc3RTZWxlY3RvciA9ICQoJ3Rlc3Qtc2VsZWN0b3InKTsK
KyAgcmV0dXJuIHRlc3RTZWxlY3Rvci5jaGlsZE5vZGVzW3Rlc3RTZWxlY3Rvci5zZWxlY3RlZElu
ZGV4XS52YWx1ZTsKK30KKworZnVuY3Rpb24gcHJlZmV0Y2goKSB7CisgIHZhciB0ZXN0U2VsZWN0
b3IgPSAkKCd0ZXN0LXNlbGVjdG9yJyk7CisgIGlmICh0ZXN0U2VsZWN0b3Iuc2VsZWN0ZWRJbmRl
eCA9PSB0ZXN0U2VsZWN0b3IuY2hpbGROb2Rlcy5sZW5ndGggLSAxKSB7CisgICAgcmV0dXJuOwor
ICB9CisgIHZhciBuZXh0VGVzdCA9IHRlc3RTZWxlY3Rvci5jaGlsZE5vZGVzW3Rlc3RTZWxlY3Rv
ci5zZWxlY3RlZEluZGV4ICsgMV0udmFsdWU7CisgIGlmIChyZXN1bHRzLnRlc3RzW25leHRUZXN0
XS5hY3R1YWwuaW5kZXhPZignSU1BR0UnKSAhPSAtMSkgeworICAgIG5ldyBJbWFnZSgpLnNyYyA9
ICcvdGVzdF9yZXN1bHQ/dGVzdD0nICsgbmV4dFRlc3QgKyAnJm1vZGU9ZXhwZWN0ZWQtaW1hZ2Un
OworICAgIG5ldyBJbWFnZSgpLnNyYyA9ICcvdGVzdF9yZXN1bHQ/dGVzdD0nICsgbmV4dFRlc3Qg
KyAnJm1vZGU9YWN0dWFsLWltYWdlJzsgICAgCisgIH0KK30KKworZnVuY3Rpb24gc2VsZWN0VGVz
dCgpIHsKKyAgdmFyIHNlbGVjdGVkVGVzdCA9IGdldFNlbGVjdGVkVGVzdCgpOworICAKKyAgaWYg
KHJlc3VsdHMudGVzdHNbc2VsZWN0ZWRUZXN0XS5hY3R1YWwuaW5kZXhPZignSU1BR0UnKSAhPSAt
MSkgeworICAgICQoJ2ltYWdlLW91dHB1dHMnKS5zdHlsZS5kaXNwbGF5ID0gJyc7CisgICAgZGlz
cGxheUltYWdlUmVzdWx0cyhzZWxlY3RlZFRlc3QpOworICB9IGVsc2UgeworICAgICQoJ2ltYWdl
LW91dHB1dHMnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAgCisgIH0KKworICBpZiAocmVzdWx0
cy50ZXN0c1tzZWxlY3RlZFRlc3RdLmFjdHVhbC5pbmRleE9mKCdURVhUJykgIT0gLTEpIHsKKyAg
ICAkKCd0ZXh0LW91dHB1dHMnKS5zdHlsZS5kaXNwbGF5ID0gJyc7CisgICAgZGlzcGxheVRleHRS
ZXN1bHRzKHNlbGVjdGVkVGVzdCk7CisgIH0gZWxzZSB7CisgICAgJCgndGV4dC1vdXRwdXRzJyku
c3R5bGUuZGlzcGxheSA9ICdub25lJzsgIAorICB9CisgIAorICB2YXIgY3VycmVudEJhc2VsaW5l
cyA9IHJlc3VsdHMudGVzdHNbc2VsZWN0ZWRUZXN0XS5iYXNlbGluZXM7CisgICQoJ2N1cnJlbnQt
YmFzZWxpbmVzJykudGV4dENvbnRlbnQgPSBjdXJyZW50QmFzZWxpbmVzID8gY3VycmVudEJhc2Vs
aW5lcy5qb2luKCcsICcpIDogJyc7CisgIAorICB1cGRhdGVTdGF0ZSgpOworICBoaWRlTG91cGUo
KTsKKyAgCisgIHByZWZldGNoKCk7Cit9CisKK2Z1bmN0aW9uIHVwZGF0ZVN0YXRlKCkgeworICB2
YXIgdGVzdEluZGV4ID0gJCgndGVzdC1zZWxlY3RvcicpLnNlbGVjdGVkSW5kZXg7CisgIHZhciB0
ZXN0TmFtZSA9IGdldFNlbGVjdGVkVGVzdCgpOworICB2YXIgdGVzdENvdW50ID0gc2VsZWN0ZWRU
ZXN0cy5sZW5ndGgKKyAgJCgndGVzdC1pbmRleCcpLnRleHRDb250ZW50ID0gdGVzdEluZGV4ICsg
MTsKKyAgJCgndGVzdC1jb3VudCcpLnRleHRDb250ZW50ID0gdGVzdENvdW50OworICAKKyAgJCgn
bmV4dC10ZXN0JykuZGlzYWJsZWQgPSB0ZXN0SW5kZXggPT0gdGVzdENvdW50IC0gMTsKKyAgJCgn
cHJldmlvdXMtdGVzdCcpLmRpc2FibGVkID0gdGVzdEluZGV4ID09IDA7CisgIAorICB2YXIgc3Rh
dGUgPSByZXN1bHRzLnRlc3RzW3Rlc3ROYW1lXS5zdGF0ZTsKKyAgJCgnYWRkLXRvLXJlYmFzZWxp
bmUtcXVldWUnKS5kaXNhYmxlZCA9IHN0YXRlICE9IFNUQVRFX05FRURTX1JFQkFTRUxJTkU7Cisg
IAorICAkKCdzdGF0ZScpLmNsYXNzTmFtZSA9IHN0YXRlOworICAkKCdzdGF0ZScpLmlubmVySFRN
TCA9IFNUQVRFX1RPX0RJU1BMQVlfU1RBVEVbc3RhdGVdOworICAKKyAgdmFyIHF1ZXVlU2VsZWN0
ID0gJCgncXVldWUtc2VsZWN0Jyk7CisgIHZhciBxdWV1ZUxlbmd0aCA9IHF1ZXVlU2VsZWN0LmNo
aWxkTm9kZXMubGVuZ3RoOworICB2YXIgcmViYXNlbGluZVF1ZXVlID0gJCgncmViYXNlbGluZS1x
dWV1ZScpCisgIGlmIChpblByb2dyZXNzUmViYXNlbGluZUNvdW50ID4gMCkgeworICAgIHJlYmFz
ZWxpbmVRdWV1ZS5kaXNhYmxlZCA9IHRydWU7CisgICAgcmViYXNlbGluZVF1ZXVlLnRleHRDb250
ZW50ID0gJ1JlYmFzZWxpbmUgaW4gcHJvZ3Jlc3MgKCcgKyBpblByb2dyZXNzUmViYXNlbGluZUNv
dW50ICsgJyB0ZXN0cyBsZWZ0KSc7CisgIH0gZWxzZSBpZiAocXVldWVMZW5ndGggPT0gMCkgewor
ICAgIHJlYmFzZWxpbmVRdWV1ZS5kaXNhYmxlZCA9IHRydWU7CisgICAgcmViYXNlbGluZVF1ZXVl
LnRleHRDb250ZW50ID0gJ1JlYmFzZWxpbmUgcXVldWUnOworICB9IGVsc2UgeworICAgIHJlYmFz
ZWxpbmVRdWV1ZS5kaXNhYmxlZCA9IGZhbHNlOworICAgIHJlYmFzZWxpbmVRdWV1ZS50ZXh0Q29u
dGVudCA9ICdSZWJhc2VsaW5lIHF1ZXVlICgnICsgcXVldWVMZW5ndGggKyAnIHRlc3RzKSc7Cisg
IH0KKyAgJCgncmVtb3ZlLXF1ZXVlLXNlbGVjdGlvbicpLmRpc2FibGVkID0gcXVldWVTZWxlY3Qu
c2VsZWN0ZWRJbmRleCA9PSAtMTsKK30KKwordmFyIGN1cnJlbnRFeHBlY3RlZEltYWdlVGVzdDsK
K3ZhciBjdXJyZW50QWN0dWFsSW1hZ2VUZXN0OworCitmdW5jdGlvbiBkaXNwbGF5SW1hZ2VSZXN1
bHRzKHRlc3ROYW1lKSB7CisgICQoJ2V4cGVjdGVkLWltYWdlJykuY2xhc3NOYW1lID0gJ2xvYWRp
bmcnOworICAkKCdleHBlY3RlZC1pbWFnZScpLnNyYyA9ICcvdGVzdF9yZXN1bHQ/dGVzdD0nICsg
dGVzdE5hbWUgKyAnJm1vZGU9ZXhwZWN0ZWQtaW1hZ2UnOworICAkKCdleHBlY3RlZC1pbWFnZScp
Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICQoJ2V4cGVjdGVkLWltYWdlJykuY2xhc3NOYW1l
ID0gJyc7CisgICAgY3VycmVudEV4cGVjdGVkSW1hZ2VUZXN0ID0gdGVzdE5hbWU7CisgICAgdXBk
YXRlRGlmZigpOworICB9OworICAkKCdhY3R1YWwtaW1hZ2UnKS5jbGFzc05hbWUgPSAnbG9hZGlu
Zyc7CisgICQoJ2FjdHVhbC1pbWFnZScpLnNyYyA9ICcvdGVzdF9yZXN1bHQ/dGVzdD0nICsgdGVz
dE5hbWUgKyAnJm1vZGU9YWN0dWFsLWltYWdlJzsKKyAgJCgnYWN0dWFsLWltYWdlJykub25sb2Fk
ID0gZnVuY3Rpb24oKSB7CisgICAgJCgnYWN0dWFsLWltYWdlJykuY2xhc3NOYW1lID0gJyc7Cisg
ICAgY3VycmVudEFjdHVhbEltYWdlVGVzdCA9IHRlc3ROYW1lOworICAgIHVwZGF0ZURpZmYoKTsK
KyAgfTsKKyAgCisgICQoJ2RpZmYtY2FudmFzJykuY2xhc3NOYW1lID0gJ2xvYWRpbmcnOworfQor
Cit2YXIgZXhwZWN0ZWRDYW52YXM7Cit2YXIgZXhwZWN0ZWRDYW52YXNDb250ZXh0OwordmFyIGFj
dHVhbENhbnZhczsKK3ZhciBhY3R1YWxDYW52YXNDb250ZXh0OworCitmdW5jdGlvbiB1cGRhdGVE
aWZmKCkgeworICBpZiAoY3VycmVudEV4cGVjdGVkSW1hZ2VUZXN0ICE9IGN1cnJlbnRBY3R1YWxJ
bWFnZVRlc3QpIHJldHVybjsKKworICB2YXIgZXhwZWN0ZWRJbWFnZSA9ICQoJ2V4cGVjdGVkLWlt
YWdlJyk7CisgIHZhciBhY3R1YWxJbWFnZSA9ICQoJ2FjdHVhbC1pbWFnZScpOworIAorICBpZiAo
IWV4cGVjdGVkQ2FudmFzKSB7CisgICAgZXhwZWN0ZWRDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdjYW52YXMnKTsKKyAgICBleHBlY3RlZENhbnZhcy53aWR0aCA9IGV4cGVjdGVkSW1h
Z2Uud2lkdGg7CisgICAgZXhwZWN0ZWRDYW52YXMuaGVpZ2h0ID0gZXhwZWN0ZWRJbWFnZS5oZWln
aHQ7CisgICAgZXhwZWN0ZWRDYW52YXNDb250ZXh0ID0gZXhwZWN0ZWRDYW52YXMuZ2V0Q29udGV4
dCgnMmQnKTsKKyAgICAKKyAgICBhY3R1YWxDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdjYW52YXMnKTsKKyAgICBhY3R1YWxDYW52YXMud2lkdGggPSBhY3R1YWxJbWFnZS53aWR0aDsK
KyAgICBhY3R1YWxDYW52YXMuaGVpZ2h0ID0gYWN0dWFsSW1hZ2UuaGVpZ2h0OworICAgIGFjdHVh
bENhbnZhc0NvbnRleHQgPSBhY3R1YWxDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgfQorICAK
KyAgZXhwZWN0ZWRDYW52YXNDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwgMjU1LCAyNTUs
IDEpJzsKKyAgZXhwZWN0ZWRDYW52YXNDb250ZXh0LmZpbGxSZWN0KAorICAgICAgMCwgMCwgZXhw
ZWN0ZWRJbWFnZS53aWR0aCwgZXhwZWN0ZWRJbWFnZS5oZWlnaHQpOworCisgIGFjdHVhbENhbnZh
c0NvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMSknOworICBhY3R1YWxD
YW52YXNDb250ZXh0LmZpbGxSZWN0KDAsIDAsIGFjdHVhbEltYWdlLndpZHRoLCBhY3R1YWxJbWFn
ZS5oZWlnaHQpOworICAKKyAgZXhwZWN0ZWRDYW52YXNDb250ZXh0LmRyYXdJbWFnZShleHBlY3Rl
ZEltYWdlLCAwLCAwKTsKKyAgdmFyIGV4cGVjdGVkSW1hZ2VEYXRhID0gZXhwZWN0ZWRDYW52YXND
b250ZXh0LmdldEltYWdlRGF0YSgKKyAgICAgIDAsIDAsIGV4cGVjdGVkSW1hZ2Uud2lkdGgsIGV4
cGVjdGVkSW1hZ2UuaGVpZ2h0KTsKKworICBhY3R1YWxDYW52YXNDb250ZXh0LmRyYXdJbWFnZShh
Y3R1YWxJbWFnZSwgMCwgMCk7CisgIHZhciBhY3R1YWxJbWFnZURhdGEgPSBhY3R1YWxDYW52YXND
b250ZXh0LmdldEltYWdlRGF0YSgKKyAgICAgIDAsIDAsIGFjdHVhbEltYWdlLndpZHRoLCBhY3R1
YWxJbWFnZS5oZWlnaHQpOworICAgICAgCisgIHZhciBkaWZmQ2FudmFzID0gJCgnZGlmZi1jYW52
YXMnKTsKKyAgdmFyIGRpZmZDYW52YXNDb250ZXh0ID0gZGlmZkNhbnZhcy5nZXRDb250ZXh0KCcy
ZCcpOworICB2YXIgZGlmZkltYWdlRGF0YSA9CisgICAgICBkaWZmQ2FudmFzQ29udGV4dC5jcmVh
dGVJbWFnZURhdGEoZGlmZkNhbnZhcy53aWR0aCwgZGlmZkNhbnZhcy5oZWlnaHQpOworCisgIHZh
ciBleHBlY3RlZFdpZHRoID0gZXhwZWN0ZWRJbWFnZS53aWR0aDsKKyAgdmFyIGV4cGVjdGVkSGVp
Z2h0ID0gZXhwZWN0ZWRJbWFnZS5oZWlnaHQ7CisgIHZhciBleHBlY3RlZFBpeGVscyA9IGV4cGVj
dGVkSW1hZ2VEYXRhLmRhdGE7CisgIAorICB2YXIgYWN0dWFsV2lkdGggPSBhY3R1YWxJbWFnZS53
aWR0aDsKKyAgdmFyIGFjdHVhbEhlaWdodCA9IGFjdHVhbEltYWdlLmhlaWdodDsKKyAgdmFyIGFj
dHVhbFBpeGVscyA9IGFjdHVhbEltYWdlRGF0YS5kYXRhOworCisgIHZhciBkaWZmV2lkdGggPSBk
aWZmSW1hZ2VEYXRhLndpZHRoOworICB2YXIgZGlmZkhlaWdodCA9IGRpZmZJbWFnZURhdGEuaGVp
Z2h0OworICB2YXIgZGlmZlBpeGVscyA9IGRpZmZJbWFnZURhdGEuZGF0YTsKKyAgCisgIGZvciAo
dmFyIHggPSAwOyB4IDwgZXhwZWN0ZWRXaWR0aDsgeCsrKSB7CisgICAgZm9yICh2YXIgeSA9IDA7
IHkgPCBleHBlY3RlZEhlaWdodDsgeSsrKSB7CisgICAgICB2YXIgaXNEaWZmZXJlbnQgPSBmYWxz
ZTsKKyAgICAgIHZhciBleHBlY3RlZE9mZnNldCA9ICh5ICogZXhwZWN0ZWRXaWR0aCArIHgpICog
NDsKKyAgICAgIHZhciBhY3R1YWxPZmZzZXQgPSAoeSAqIGFjdHVhbFdpZHRoICsgeCkgKiA0Owor
ICAgICAgdmFyIGRpZmZPZmZzZXQgPSAoeSAqIGRpZmZXaWR0aCArIHgpICogNDsKKyAgICAgIGlm
IChleHBlY3RlZFBpeGVsc1tleHBlY3RlZE9mZnNldF0gIT0gYWN0dWFsUGl4ZWxzW2FjdHVhbE9m
ZnNldF0gfHwKKyAgICAgICAgICBleHBlY3RlZFBpeGVsc1tleHBlY3RlZE9mZnNldCArIDFdICE9
IGFjdHVhbFBpeGVsc1thY3R1YWxPZmZzZXQgKyAxXSB8fAorICAgICAgICAgIGV4cGVjdGVkUGl4
ZWxzW2V4cGVjdGVkT2Zmc2V0ICsgMl0gIT0gYWN0dWFsUGl4ZWxzW2FjdHVhbE9mZnNldCArIDJd
IHx8CisgICAgICAgICAgZXhwZWN0ZWRQaXhlbHNbZXhwZWN0ZWRPZmZzZXQgKyAzXSAhPSBhY3R1
YWxQaXhlbHNbYWN0dWFsT2Zmc2V0ICsgM10pIHsKKyAgICAgICAgZGlmZlBpeGVsc1tkaWZmT2Zm
c2V0XSA9IDI1NTsKKyAgICAgICAgZGlmZlBpeGVsc1tkaWZmT2Zmc2V0ICsgMV0gPSAwOworICAg
ICAgICBkaWZmUGl4ZWxzW2RpZmZPZmZzZXQgKyAyXSA9IDA7CisgICAgICAgIGRpZmZQaXhlbHNb
ZGlmZk9mZnNldCArIDNdID0gMjU1OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGlmZlBpeGVs
c1tkaWZmT2Zmc2V0XSA9IGV4cGVjdGVkUGl4ZWxzW2V4cGVjdGVkT2Zmc2V0XTsKKyAgICAgICAg
ZGlmZlBpeGVsc1tkaWZmT2Zmc2V0ICsgMV0gPSBleHBlY3RlZFBpeGVsc1tleHBlY3RlZE9mZnNl
dCArIDFdOworICAgICAgICBkaWZmUGl4ZWxzW2RpZmZPZmZzZXQgKyAyXSA9IGV4cGVjdGVkUGl4
ZWxzW2V4cGVjdGVkT2Zmc2V0ICsgMl07CisgICAgICAgIGRpZmZQaXhlbHNbZGlmZk9mZnNldCAr
IDNdID0gMzI7CisgICAgICB9CisgICAgfQorICB9CisgIAorICBkaWZmQ2FudmFzQ29udGV4dC5w
dXRJbWFnZURhdGEoCisgICAgICBkaWZmSW1hZ2VEYXRhLAorICAgICAgMCwgMCwKKyAgICAgIDAs
IDAsCisgICAgICBkaWZmSW1hZ2VEYXRhLndpZHRoLCBkaWZmSW1hZ2VEYXRhLmhlaWdodCk7Cisg
IGRpZmZDYW52YXMuY2xhc3NOYW1lID0gJyc7Cit9CisKK2Z1bmN0aW9uIGRpc3BsYXlUZXh0UmVz
dWx0cyh0ZXN0TmFtZSkgeworICBmdW5jdGlvbiBsb2FkVGV4dFJlc3VsdCh0eXBlKSB7CisgICAg
dmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCdHRVQnLCAnL3Rl
c3RfcmVzdWx0P3Rlc3Q9JyArIHRlc3ROYW1lICsgJyZtb2RlPScgKyB0eXBlKTsKKyAgICB4aHIu
YWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgeworICAgICAgJCh0eXBlKS50ZXh0
Q29udGVudCA9IHhoci5yZXNwb25zZVRleHQ7CisgICAgfSk7CisgICAgeGhyLnNlbmQoKTsgICAg
CisgIH0KKyAgCisgIGxvYWRUZXh0UmVzdWx0KCdleHBlY3RlZC10ZXh0Jyk7CisgIGxvYWRUZXh0
UmVzdWx0KCdhY3R1YWwtdGV4dCcpOworICBsb2FkVGV4dFJlc3VsdCgnZGlmZi10ZXh0Jyk7Cit9
CisKK2Z1bmN0aW9uIG5leHRUZXN0KCkgeworICBpZiAoJCgndGVzdC1zZWxlY3RvcicpLnNlbGVj
dGVkSW5kZXggPT0gc2VsZWN0ZWRUZXN0cy5sZW5ndGggLSAxKSB7CisgICAgcmV0dXJuOworICB9
CisgICQoJ3Rlc3Qtc2VsZWN0b3InKS5zZWxlY3RlZEluZGV4Kys7CisgIHNlbGVjdFRlc3QoKTsK
K30KKworZnVuY3Rpb24gcHJldmlvdXNUZXN0KCkgeworICBpZiAoJCgndGVzdC1zZWxlY3Rvcicp
LnNlbGVjdGVkSW5kZXggPT0gMCkgeworICAgIHJldHVybjsKKyAgfQorICAkKCd0ZXN0LXNlbGVj
dG9yJykuc2VsZWN0ZWRJbmRleC0tOworICBzZWxlY3RUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHNo
b3dMb3VwZShldmVudCkgeworICB2YXIgaW1hZ2VSZWN0ID0gZXZlbnQudGFyZ2V0LmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpOworICB2YXIgeCA9IGV2ZW50LmNsaWVudFggLSBpbWFnZVJlY3QubGVm
dDsKKyAgdmFyIHkgPSBldmVudC5jbGllbnRZIC0gaW1hZ2VSZWN0LnRvcDsKKyAgCisgIGZpbGxM
b3VwZUZyb21JbWFnZSh4LCB5LCAnZXhwZWN0ZWQnLCAkKCdleHBlY3RlZC1pbWFnZScpKTsKKyAg
ZmlsbExvdXBlRnJvbUltYWdlKHgsIHksICdhY3R1YWwnLCAkKCdhY3R1YWwtaW1hZ2UnKSk7Cisg
IGZpbGxMb3VwZUZyb21DYW52YXMoeCwgeSwgJ2RpZmYnLCAkKCdkaWZmLWNhbnZhcycpKTsKKyAg
CisgICQoJ2xvdXBlJykuc3R5bGUuZGlzcGxheSA9ICcnOworfQorCit2YXIgTE9VUEVfTUFHTklG
SUNBVElPTl9GQUNUT1IgPSAxMDsKKworZnVuY3Rpb24gZmlsbExvdXBlRnJvbUltYWdlKHgsIHks
IHR5cGUpIHsKKyAgdmFyIHNvdXJjZUltYWdlID0gJCh0eXBlICsgJy1pbWFnZScpOyAgCisKKyAg
dmFyIHRlbXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKKyAgdGVt
cENhbnZhcy53aWR0aCA9IHNvdXJjZUltYWdlLndpZHRoOworICB0ZW1wQ2FudmFzLmhlaWdodCA9
IHNvdXJjZUltYWdlLmhlaWdodDsKKyAgdmFyIHRlbXBDb250ZXh0ID0gdGVtcENhbnZhcy5nZXRD
b250ZXh0KCcyZCcpOworICAKKyAgdGVtcENvbnRleHQuZHJhd0ltYWdlKHNvdXJjZUltYWdlLCAw
LCAwKTsKKyAgCisgIGZpbGxMb3VwZUZyb21DYW52YXMoeCwgeSwgdHlwZSwgdGVtcENhbnZhcyk7
Cit9CisKK2Z1bmN0aW9uIGZpbGxMb3VwZUZyb21DYW52YXMoeCwgeSwgdHlwZSwgY2FudmFzKSB7
CisgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CisgIHZhciBzb3VyY2VJ
bWFnZURhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZh
cy5oZWlnaHQpOworCisgIHZhciB0YXJnZXRDYW52YXMgPSAkKHR5cGUgKyAnLWxvdXBlJyk7Cisg
IHZhciB0YXJnZXRDb250ZXh0ID0gdGFyZ2V0Q2FudmFzLmdldENvbnRleHQoJzJkJyk7CisgIHRh
cmdldENvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMSknOworICB0YXJn
ZXRDb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRhcmdldENhbnZhcy53aWR0aCwgdGFyZ2V0Q2FudmFz
LmhlaWdodCk7ICAKKyAgCisgIHZhciBzb3VyY2VYT2Zmc2V0ID0gKHRhcmdldENhbnZhcy53aWR0
aC9MT1VQRV9NQUdOSUZJQ0FUSU9OX0ZBQ1RPUiAtIDEpLzI7CisgIHZhciBzb3VyY2VZT2Zmc2V0
ID0gKHRhcmdldENhbnZhcy5oZWlnaHQvTE9VUEVfTUFHTklGSUNBVElPTl9GQUNUT1IgLSAxKS8y
OworCisgIGZ1bmN0aW9uIHJlYWRQaXhlbENvbXBvbmVudCh4LCB5LCBjb21wb25lbnQpIHsKKyAg
ICByZXR1cm4gc291cmNlSW1hZ2VEYXRhLmRhdGFbKHkgKiBzb3VyY2VJbWFnZURhdGEud2lkdGgg
KyB4KSAqIDQgKyBjb21wb25lbnRdOworICB9CisgIAorICBmb3IgKHZhciBpID0gLXNvdXJjZVhP
ZmZzZXQ7IGkgPD0gc291cmNlWE9mZnNldDsgaSsrKSB7CisgICAgZm9yICh2YXIgaiA9IC1zb3Vy
Y2VZT2Zmc2V0OyBqIDw9IHNvdXJjZVlPZmZzZXQ7IGorKykgeworICAgICAgdmFyIHNvdXJjZVgg
PSB4ICsgaTsKKyAgICAgIHZhciBzb3VyY2VZID0geSArIGo7CisgICAgICAKKyAgICAgIHZhciBz
b3VyY2VSID0gcmVhZFBpeGVsQ29tcG9uZW50KHNvdXJjZVgsIHNvdXJjZVksIDApOyAKKyAgICAg
IHZhciBzb3VyY2VHID0gcmVhZFBpeGVsQ29tcG9uZW50KHNvdXJjZVgsIHNvdXJjZVksIDEpOwor
ICAgICAgdmFyIHNvdXJjZUIgPSByZWFkUGl4ZWxDb21wb25lbnQoc291cmNlWCwgc291cmNlWSwg
Mik7CisgICAgICB2YXIgc291cmNlQSA9IHJlYWRQaXhlbENvbXBvbmVudChzb3VyY2VYLCBzb3Vy
Y2VZLCAzKS8yNTU7CisgICAgICBzb3VyY2VBID0gTWF0aC5yb3VuZChzb3VyY2VBICogMTApLzEw
OworCisgICAgICB2YXIgdGFyZ2V0WCA9IChpICsgc291cmNlWE9mZnNldCkgKiBMT1VQRV9NQUdO
SUZJQ0FUSU9OX0ZBQ1RPUjsKKyAgICAgIHZhciB0YXJnZXRZID0gKGogKyBzb3VyY2VZT2Zmc2V0
KSAqIExPVVBFX01BR05JRklDQVRJT05fRkFDVE9SOworICAgICAgdmFyIGNvbG9yU3RyaW5nID0K
KyAgICAgICAgICBzb3VyY2VSICsgJywgJyArIHNvdXJjZUcgKyAnLCAnICsgc291cmNlQiArICcs
ICcgKyBzb3VyY2VBOworICAgICAgdGFyZ2V0Q29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgnICsg
Y29sb3JTdHJpbmcgKyAnKSc7CisgICAgICB0YXJnZXRDb250ZXh0LmZpbGxSZWN0KAorICAgICAg
ICAgIHRhcmdldFgsIHRhcmdldFksCisgICAgICAgICAgTE9VUEVfTUFHTklGSUNBVElPTl9GQUNU
T1IsIExPVVBFX01BR05JRklDQVRJT05fRkFDVE9SKTsKKyAgICAKKyAgICAgIGlmIChpID09IDAg
JiYgaiA9PSAwKSB7CisgICAgICAgICQoJ2xvdXBlLWNvb3JkaW5hdGUnKS50ZXh0Q29udGVudCA9
IHNvdXJjZVggKyAnLCAnICsgc291cmNlWTsKKworICAgICAgICAkKHR5cGUgKyAnLWxvdXBlLWNv
bG9yJykudGV4dENvbnRlbnQgPSBjb2xvclN0cmluZzsKKyAgICAgIH0KKyAgICB9CisgIH0KK30K
KworZnVuY3Rpb24gaGlkZUxvdXBlKCkgeworICAkKCdsb3VwZScpLnN0eWxlLmRpc3BsYXkgPSAn
bm9uZSc7ICAKK30KKworZnVuY3Rpb24gYWRkVG9SZWJhc2VsaW5lUXVldWUoKSB7CisgIHZhciB0
ZXN0TmFtZSA9IGdldFNlbGVjdGVkVGVzdCgpOworICB2YXIgdGVzdCA9IHJlc3VsdHMudGVzdHNb
dGVzdE5hbWVdOworICAKKyAgaWYgKHRlc3Quc3RhdGUgIT0gU1RBVEVfTkVFRFNfUkVCQVNFTElO
RSkgeworICAgIGxvZygnQ2Fubm90IGFkZCB0ZXN0IHdpdGggc3RhdGUgJyArIHRlc3Quc3RhdGUg
KyAnIHRvIHF1ZXVlJyk7CisgICAgcmV0dXJuOworICB9CisgIAorICB2YXIgcXVldWVPcHRpb24g
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKKyAgcXVldWVPcHRpb24udmFsdWUg
PSB0ZXN0TmFtZTsKKyAgcXVldWVPcHRpb24udGV4dENvbnRlbnQgPSB0ZXN0TmFtZTsKKyAgJCgn
cXVldWUtc2VsZWN0JykuYXBwZW5kQ2hpbGQocXVldWVPcHRpb24pOworICB0ZXN0LnN0YXRlID0g
U1RBVEVfSU5fUVVFVUU7CisgIHVwZGF0ZVN0YXRlKCk7Cit9CisKK2Z1bmN0aW9uIHJlbW92ZVNl
bGVjdGlvbkZyb21SZWJhc2VsaW5lUXVldWUoKSB7CisgIHZhciBxdWV1ZVNlbGVjdCA9ICQoJ3F1
ZXVlLXNlbGVjdCcpOworICBpZiAocXVldWVTZWxlY3Quc2VsZWN0ZWRJbmRleCA9PSAtMSkgewor
ICAgIHJldHVybjsKKyAgfQorCisgIHZhciBxdWV1ZU9wdGlvbiA9IHF1ZXVlU2VsZWN0LmNoaWxk
Tm9kZXNbcXVldWVTZWxlY3Quc2VsZWN0ZWRJbmRleF07ICAKKyAgcmVtb3ZlRnJvbVJlYmFzZWxp
bmVRdWV1ZShxdWV1ZU9wdGlvbi52YWx1ZSk7Cit9CisKK2Z1bmN0aW9uIHJlbW92ZUZyb21SZWJh
c2VsaW5lUXVldWUodGVzdE5hbWUpIHsKKyAgdmFyIHF1ZXVlU2VsZWN0ID0gJCgncXVldWUtc2Vs
ZWN0Jyk7CisgIGZvciAodmFyIHF1ZXVlT3B0aW9uID0gcXVldWVTZWxlY3QuZmlyc3RDaGlsZDsK
KyAgICAgcXVldWVPcHRpb24gJiYgcXVldWVPcHRpb24udmFsdWUgIT0gdGVzdE5hbWU7CisgICAg
IHF1ZXVlT3B0aW9uID0gcXVldWVPcHRpb24ubmV4dFNpYmxpbmcpIHs7fQorCisgIGlmICghcXVl
dWVPcHRpb24pIHJldHVybjsKKyAgCisgIHF1ZXVlU2VsZWN0LnJlbW92ZUNoaWxkKHF1ZXVlT3B0
aW9uKTsKKyAgdmFyIHRlc3QgPSByZXN1bHRzLnRlc3RzW3Rlc3ROYW1lXTsKKyAgdGVzdC5zdGF0
ZSA9IFNUQVRFX05FRURTX1JFQkFTRUxJTkU7CisgIHVwZGF0ZVN0YXRlKCk7Cit9CisKK2Z1bmN0
aW9uIHJlYmFzZWxpbmVRdWV1ZSgpIHsKKyAgdmFyIHRlc3ROYW1lcyA9IFtdOworICBmb3IgKHZh
ciBxdWV1ZU9wdGlvbiA9ICQoJ3F1ZXVlLXNlbGVjdCcpLmZpcnN0Q2hpbGQ7CisgICAgIHF1ZXVl
T3B0aW9uOworICAgICBxdWV1ZU9wdGlvbiA9IHF1ZXVlT3B0aW9uLm5leHRTaWJsaW5nKSB7Cisg
ICAgdGVzdE5hbWVzLnB1c2gocXVldWVPcHRpb24udmFsdWUpOworICB9CisgIAorICBpblByb2dy
ZXNzUmViYXNlbGluZUNvdW50ID0gdGVzdE5hbWVzLmxlbmd0aDsKKyAgdXBkYXRlU3RhdGUoKTsK
KyAgdGVzdE5hbWVzLmZvckVhY2gocmViYXNlbGluZSk7Cit9CisKK2Z1bmN0aW9uIHJlYmFzZWxp
bmUodGVzdE5hbWUpIHsKKyAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICB4aHIu
b3BlbignUE9TVCcsICcvcmViYXNlbGluZT90ZXN0PScgKyB0ZXN0TmFtZSk7CisgIHZhciB0ZXN0
ID0gcmVzdWx0cy50ZXN0c1t0ZXN0TmFtZV07CisgIGZ1bmN0aW9uIGhhbmRsZVN1Y2Nlc3MoKSB7
CisgICAgdmFyIHN1Y2Nlc3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAg
c3VjY2Vzcy50ZXh0Q29udGVudCA9ICdTdWNjZXNzOiAnOworICAgIHN1Y2Nlc3Muc3R5bGUuY29s
b3IgPSAnZ3JlZW4nOworICAgICQoJ2xvZycpLmFwcGVuZENoaWxkKHN1Y2Nlc3MpOworICAgIGxv
Zyh4aHIucmVzcG9uc2VUZXh0KTsKKyAgICByZW1vdmVGcm9tUmViYXNlbGluZVF1ZXVlKHRlc3RO
YW1lKTsKKyAgICBpblByb2dyZXNzUmViYXNlbGluZUNvdW50LS07CisgICAgdGVzdC5zdGF0ZSA9
IFNUQVRFX1JFQkFTRUxJTkVfU1VDQ0VFREVEOworICAgIHVwZGF0ZVN0YXRlKCk7CisgIH0KKyAg
ZnVuY3Rpb24gaGFuZGxlRmFpbHVyZSgpIHsKKyAgICB2YXIgZmFpbHVyZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICBmYWlsdXJlLnRleHRDb250ZW50ID0gJ0ZhaWx1cmU6
ICc7CisgICAgZmFpbHVyZS5zdHlsZS5jb2xvciA9ICdyZWQnOworICAgICQoJ2xvZycpLmFwcGVu
ZENoaWxkKGZhaWx1cmUpOworICAgIGxvZyh4aHIucmVzcG9uc2VUZXh0KTsKKyAgICByZW1vdmVG
cm9tUmViYXNlbGluZVF1ZXVlKHRlc3ROYW1lKTsKKyAgICBpblByb2dyZXNzUmViYXNlbGluZUNv
dW50LS07CisgICAgdGVzdC5zdGF0ZSA9IFNUQVRFX1JFQkFTRUxJTkVfRkFJTEVEOworICAgIHVw
ZGF0ZVN0YXRlKCk7CisgIH0KKyAgCisgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVu
Y3Rpb24oKSB7CisgICAgaWYgKHhoci5zdGF0dXMgPCA0MDApIHsKKyAgICAgIGhhbmRsZVN1Y2Nl
c3MoKTsKKyAgICB9IGVsc2UgeworICAgICAgaGFuZGxlRmFpbHVyZSgpOworICAgIH0KKyAgfSk7
CisgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZUZhaWx1cmUpOworCisgIHho
ci5zZW5kKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyh0ZXh0KSB7CisgICQoJ2xvZycpLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQgKyAnXG4nKSk7CisgICQoJ2xvZycpLnNj
cm9sbFRvcCA9ICQoJ2xvZycpLnNjcm9sbEhlaWdodDsKK30KKworZnVuY3Rpb24gdG9nZ2xlKGlk
KSB7CisgIHZhciBlbGVtZW50ID0gJChpZCk7CisgIHZhciB0b2dnbGVyID0gJCgndG9nZ2xlLScg
KyBpZCk7CisgIGlmIChlbGVtZW50LnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnKSB7CisgICAgZWxl
bWVudC5zdHlsZS5kaXNwbGF5ID0gJyc7CisgICAgdG9nZ2xlci5jbGFzc05hbWUgPSAnbGluayBz
ZWxlY3RlZCc7CisgIH0gZWxzZSB7CisgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUn
OworICAgIHRvZ2dsZXIuY2xhc3NOYW1lID0gJ2xpbmsnOworICB9Cit9CisKK3dpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgbWFpbik7ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL2xvY2FscmViYXNlbGluZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9sb2NhbHJlYmFzZWxpbmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE2YmVkOWUy
MzE2MTk2NTM4ODFiZjhiYjM5OTAxZWIyNTU5ZGQ1NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9sb2NhbHJlYmFzZWxpbmUucHkK
QEAgLTAsMCArMSwzMjYgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgZGF0ZXRpbWUKK2lt
cG9ydCBmbm1hdGNoCitpbXBvcnQgbWltZXR5cGVzCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRo
CitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCBCYXNlSFRU
UFNlcnZlcgoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRpbWUKK2lt
cG9ydCB1cmxwYXJzZQorZnJvbSB3c2dpcmVmLmhhbmRsZXJzIGltcG9ydCBmb3JtYXRfZGF0ZV90
aW1lCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLm5ldC5idWlsZGJvdCBpbXBvcnQgQnVpbGRCb3Qs
IExheW91dFRlc3RSZXN1bHRzCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0udXNlciBpbXBv
cnQgVXNlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQor
ZnJvbSB3ZWJraXRweS50b29sLmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQorZnJvbSB3ZWJraXRw
eS50b29sLm11bHRpY29tbWFuZHRvb2wgaW1wb3J0IEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5k
CitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5zaW1wbGVqc29uIGFzIHNpbXBsZWpzb24KKwor
IyBUT0RPCisjIC0gbGV0IHBvcnQgYmUgc3BlY2lmaWVkCisjIC0gYWRkIGNoZWNrc3VtIG91dHB1
dD8KKyMgLSBoYW5kbGUgY2hlY2tzdW0tb25seSBkaWZmZXJlbmNlcworIyAtIGFkZCBsaW5rIHRv
IHZpZXcgdGVzdAorIyAtIHF1ZXVlaW5nCisjIC0gZmlsdGVyIGRyb3AtZG93biBieSB0ZXN0IHN0
YXRlCisKK1NUQVRFX05FRURTX1JFQkFTRUxJTkUgPSAnbmVlZHNfcmViYXNlbGluZScKK1NUQVRF
X1JFQkFTRUxJTkVfRkFJTEVEID0gJ3JlYmFzZWxpbmVfZmFpbGVkJworU1RBVEVfUkVCQVNFTElO
RV9TVUNDRUVERUQgPSAncmViYXNlbGluZV9zdWNjZWVkZWQnCisKK2NsYXNzIFJlYmFzZWxpbmVI
VFRTZXJ2ZXIoQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6CisgIGRlZiBfX2luaXRfXyhzZWxm
LCBodHRwZF9wb3J0LCByZXN1bHRzX2RpcmVjdG9yeSwgcmVzdWx0c19qc29uLCBwb3J0LCBzY20p
OgorICAgIEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIuX19pbml0X18oc2VsZiwgKCcnLCBodHRw
ZF9wb3J0KSwgUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlcikKKyAgICBzZWxmLnJlc3VsdHNf
ZGlyZWN0b3J5ID0gcmVzdWx0c19kaXJlY3RvcnkKKyAgICBzZWxmLnJlc3VsdHNfanNvbiA9IHJl
c3VsdHNfanNvbgorICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICBzZWxmLnNjbSA9IHNjbQorCitj
bGFzcyBSZWJhc2VsaW5lSFRUUFJlcXVlc3RIYW5kbGVyKEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQ
UmVxdWVzdEhhbmRsZXIpOgorICAgIGZpbGVfbmFtZXMgPSBbCisgICAgICAnaW5kZXguaHRtbCcs
CisgICAgICAnbWFpbi5qcycKKyAgICBdCisKKyAgICBkZWYgZG9fR0VUKHNlbGYpOgorICAgICAg
c2VsZi5faGFuZGxlX3JlcXVlc3QoKQorICAgICAgCisgICAgZGVmIGRvX1BPU1Qoc2VsZik6Cisg
ICAgICBzZWxmLl9oYW5kbGVfcmVxdWVzdCgpCisgICAgCisgICAgZGVmIF9oYW5kbGVfcmVxdWVz
dChzZWxmKToKKyAgICAgIGlmICc/JyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgKHBhdGgsIHF1
ZXJ5X3N0cmluZykgPSBzZWxmLnBhdGguc3BsaXQoJz8nLCAxKQorICAgICAgICAgIHNlbGYucXVl
cnkgPSB1cmxwYXJzZS5wYXJzZV9xcyhxdWVyeV9zdHJpbmcpCisgICAgICBlbHNlOgorICAgICAg
ICAgIHBhdGggPSBzZWxmLnBhdGgKKyAgICAgICAgICBzZWxmLnF1ZXJ5ID0ge30KKyAgICAgIGZ1
bmNfb3JfZmlsZV9uYW1lID0gcGF0aFsxOl0gb3IgJ2luZGV4Lmh0bWwnCisgICAgICAKKyAgICAg
IGlmIGZ1bmNfb3JfZmlsZV9uYW1lIGluIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIuZmls
ZV9uYW1lczoKKyAgICAgICAgICBzZWxmLnNlcnZlX3N0YXRpY19maWxlKGZ1bmNfb3JfZmlsZV9u
YW1lKQorICAgICAgICAgIHJldHVybgorICAgICAgCisgICAgICBmdW5jX25hbWUgPSBmdW5jX29y
X2ZpbGVfbmFtZS5yZXBsYWNlKCcuJywgJ18nKQorICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwg
ZnVuY19uYW1lKToKKyAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIlVua25vd24gZnVuY3Rp
b24gJXMiICUgZnVuY19uYW1lKQorICAgICAgICByZXR1cm4KKyAgICAgIGZ1bmMgPSBnZXRhdHRy
KHNlbGYsIGZ1bmNfbmFtZSkKKyAgICAgIGZ1bmMoKQorICAgIAorICAgIGRlZiBzZXJ2ZV9zdGF0
aWNfZmlsZShzZWxmLCBzdGF0aWNfcGF0aCk6CisgICAgICBzZWxmLl9zZXJ2ZV9maWxlKG9zLnBh
dGguam9pbigKKyAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZGF0YScsICds
b2NhbHJlYmFzZWxpbmUnLCBzdGF0aWNfcGF0aCkpCisgICAgCisgICAgZGVmIHJlYmFzZWxpbmUo
c2VsZik6CisgICAgICBsb2cgPSBbXQorICAgICAgc3VjY2VzcyA9IHNlbGYuX3J1bl9yZWJhc2Vs
aW5lKHNlbGYucXVlcnlbJ3Rlc3QnXVswXSwgbG9nPWxhbWJkYSBsOmxvZy5hcHBlbmQobCkpCisg
ICAgICBzZWxmLnNlbmRfcmVzcG9uc2Uoc3VjY2VzcyBhbmQgMjAwIG9yIDUwMCkKKyAgICAgIHNl
bGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJ0ZXh0L3BsYWluIikKKyAgICAgIHNlbGYu
ZW5kX2hlYWRlcnMoKQorICAgICAgc2VsZi53ZmlsZS53cml0ZSgiXG4iLmpvaW4obG9nKSkKKyAg
ICAgIAorICAgIGRlZiBfcnVuX3JlYmFzZWxpbmUoc2VsZiwgdGVzdCwgbG9nKToKKyAgICAgICh0
ZXN0X25hbWUsIHRlc3RfZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQodGVzdCkKKyAgICAg
IHRlc3RfZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKHRlc3RfbmFtZSkKKyAgICAgIGxheW91
dF90ZXN0c19kaXJlY3RvcnkgPSBzZWxmLnNlcnZlci5wb3J0LmxheW91dF90ZXN0c19kaXIoKQor
ICAgICAgbWFjX2V4cGVjdGF0aW9uc19kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oCisgICAgICAg
ICAgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSwgJ3BsYXRmb3JtJywgJ21hYycsIHRlc3RfZGlyZWN0
b3J5KQorICAgICAgCisgICAgICBsb2coIlJlYmFzZWxpbmluZyAlcy4uLiIgJSB0ZXN0X25hbWUp
CisgICAgICB0ZXN0X2pzb24gPSBzZWxmLnNlcnZlci5yZXN1bHRzX2pzb25bJ3Rlc3RzJ11bdGVz
dF0KKyAgICAgIAorICAgICAgaWYgdGVzdF9qc29uWydzdGF0ZSddICE9IFNUQVRFX05FRURTX1JF
QkFTRUxJTkU6CisgICAgICAgICAgbG9nKCIgIFRlc3QgaXMgaW4gdW5leHBlY3RlZCBzdGF0ZTog
JXMiICUgdGVzdF9qc29uWydzdGF0ZSddKQorICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAg
CisgICAgICBjdXJyZW50X2Jhc2VsaW5lcyA9IGxpc3QodGVzdF9qc29uLmdldCgnYmFzZWxpbmVz
JywgW10pKQorICAgICAgCisgICAgICBsb2coIiAgQ3VycmVudCBiYXNlbGluZXM6ICVzIiAlIiwg
Ii5qb2luKGN1cnJlbnRfYmFzZWxpbmVzKSkKKyAgICAgIAorICAgICAgaWYgImNocm9taXVtLW1h
YyIgaW4gY3VycmVudF9iYXNlbGluZXM6CisgICAgICAgICAgbG9nKCIgIENhbid0IGhhbmRsZSB0
ZXN0cyB3aXRoIGNocm9taXVtLW1hYyBiYXNlbGluZXMgeWV0LiIpCisgICAgICAgICAgdGVzdF9q
c29uWydzdGF0ZSddID0gU1RBVEVfUkVCQVNFTElORV9GQUlMRUQKKyAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgIAorICAgICAgdGVzdF9yZXN1bHRzX2RpcmVjdG9yeSA9IG9zLnBhdGguam9p
bigKKyAgICAgICAgICBzZWxmLnNlcnZlci5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9kaXJlY3Rv
cnkpCisgICAgICBhY3R1YWxfcGF0dGVybiA9IG9zLnBhdGguYmFzZW5hbWUodGVzdF9uYW1lKSAr
ICctYWN0dWFsLionCisgICAgICBhY3R1YWxfZmlsZXMgPSBbXQorICAgICAgZm9yIHJvb3QsIGRp
cnMsIGZpbGVzIGluIG9zLndhbGsodGVzdF9yZXN1bHRzX2RpcmVjdG9yeSk6CisgICAgICAgICAg
Zm9yIGZpbGVuYW1lIGluIGZubWF0Y2guZmlsdGVyKGZpbGVzLCBhY3R1YWxfcGF0dGVybik6Cisg
ICAgICAgICAgICAgIGFjdHVhbF9maWxlcy5hcHBlbmQoZmlsZW5hbWUucmVwbGFjZSgnLWFjdHVh
bCcsICctZXhwZWN0ZWQnKSkKKyAgICAgIAorICAgICAgaWYgKCJtYWMiIGluIGN1cnJlbnRfYmFz
ZWxpbmVzKToKKyAgICAgICAgaWYgIm1hYy1sZW9wYXJkIiBpbiBjdXJyZW50X2Jhc2VsaW5lczoK
KyAgICAgICAgICAgIGxvZygiICBBbHJlYWR5IGhhZCBtYWMtbGVvcGFyZCBiYXNlbGluZXMsIGRv
bid0IGtub3cgd2hhdCB0byBkbyB3aXRoIGN1cnJlbnQgbWFjIGJhc2VsaW5lcyIpCisgICAgICAg
ICAgICB0ZXN0X2pzb25bJ3N0YXRlJ10gPSBTVEFURV9SRUJBU0VMSU5FX0ZBSUxFRAorICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGxvZygiICBNb3ZpbmcgY3VycmVudCBtYWMgYmFz
ZWxpbmVzIHRvIG1hYy1sZW9wYXJkIikKKyAgICAgICAgbWFjX2xlb3BhcmRfZXhwZWN0YXRpb25z
X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgIGxheW91dF90ZXN0c19kaXJl
Y3RvcnksICdwbGF0Zm9ybScsICdtYWMtbGVvcGFyZCcsIHRlc3RfZGlyZWN0b3J5KQorCisgICAg
ICAgIGV4cGVjdGF0aW9uX3BhdHRlcm4gPSBvcy5wYXRoLmJhc2VuYW1lKHRlc3RfbmFtZSkgKyAn
LWV4cGVjdGVkLionCisgICAgICAgIGN1cnJlbnRfZXhwZWN0YXRpb25zX2ZpbGVzID0gW10KKyAg
ICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsobWFjX2V4cGVjdGF0aW9uc19k
aXJlY3RvcnkpOgorICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZubWF0Y2guZmlsdGVyKGZp
bGVzLCBleHBlY3RhdGlvbl9wYXR0ZXJuKToKKyAgICAgICAgICAgICAgICBjdXJyZW50X2V4cGVj
dGF0aW9uc19maWxlcy5hcHBlbmQoZmlsZW5hbWUpCisgICAgICAgIGN1cnJlbnRfZXhwZWN0YXRp
b25zX2ZpbGVzID0gW2YgZm9yIGYgaW4gY3VycmVudF9leHBlY3RhdGlvbnNfZmlsZXMgaWYgZiBp
biBhY3R1YWxfZmlsZXNdCisgICAgICAgIAorICAgICAgICBpZiBjdXJyZW50X2V4cGVjdGF0aW9u
c19maWxlczoKKyAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobWFjX2xlb3BhcmRfZXhw
ZWN0YXRpb25zX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgIGxvZygiICBDcmVhdGluZyBtYWMt
bGVvcGFyZCAlcyBkaXJlY3RvcnkiICUgdGVzdF9kaXJlY3RvcnkpCisgICAgICAgICAgICAgIG9z
Lm1ha2VkaXJzKG1hY19sZW9wYXJkX2V4cGVjdGF0aW9uc19kaXJlY3RvcnkpCisgICAgICAgICAg
Zm9yIGZpbGUgaW4gY3VycmVudF9leHBlY3RhdGlvbnNfZmlsZXM6CisgICAgICAgICAgICAgIHNv
dXJjZV9wYXRoID0gb3MucGF0aC5qb2luKG1hY19leHBlY3RhdGlvbnNfZGlyZWN0b3J5LCBmaWxl
KQorICAgICAgICAgICAgICBkZXN0aW5hdGlvbl9wYXRoID0gb3MucGF0aC5qb2luKG1hY19sZW9w
YXJkX2V4cGVjdGF0aW9uc19kaXJlY3RvcnksIGZpbGUpCisgICAgICAgICAgICAgIHNodXRpbC5t
b3ZlKHNvdXJjZV9wYXRoLCBkZXN0aW5hdGlvbl9wYXRoKQorICAgICAgICAgICAgICBleGl0X2Nv
ZGUgPSBzZWxmLnNlcnZlci5zY20uYWRkKGRlc3RpbmF0aW9uX3BhdGgsIHJldHVybl9leGl0X2Nv
ZGU9VHJ1ZSkKKyAgICAgICAgICAgICAgbG9nKCIgICAgTW92ZWQgJXMsIGV4aXQgY29kZSAlZCIg
JSAoZmlsZSwgZXhpdF9jb2RlKSkKKyAgICAgICAgICAgICAgaWYgZXhpdF9jb2RlOgorICAgICAg
ICAgICAgICAgICAgdGVzdF9qc29uWydzdGF0ZSddID0gU1RBVEVfUkVCQVNFTElORV9GQUlMRUQK
KyAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICBsb2coIiAgQWRkaW5nIG5l
dyBiYXNlbGluZXMgdG8gbWFjIikKKyAgICAgIGZvciBmaWxlIGluIGFjdHVhbF9maWxlczoKKyAg
ICAgICAgICBzb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbih0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5
LCBmaWxlLnJlcGxhY2UoJy1leHBlY3RlZCcsICctYWN0dWFsJykpCisgICAgICAgICAgZGVzdGlu
YXRpb25fcGF0aCA9IG9zLnBhdGguam9pbihtYWNfZXhwZWN0YXRpb25zX2RpcmVjdG9yeSwgZmls
ZSkKKyAgICAgICAgICBzaHV0aWwuY29weShzb3VyY2VfcGF0aCwgZGVzdGluYXRpb25fcGF0aCkK
KyAgICAgICAgICBleGl0X2NvZGUgPSBzZWxmLnNlcnZlci5zY20uYWRkKGRlc3RpbmF0aW9uX3Bh
dGgsIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkgICAgICAgICAgCisgICAgICAgICAgbG9nKCIgICAg
QWRkZWQgJXMsIGV4aXQgY29kZSAlZCIgJSAoZmlsZSwgZXhpdF9jb2RlKSkKKyAgICAgICAgICBp
ZiBleGl0X2NvZGU6CisgICAgICAgICAgICAgIHRlc3RfanNvblsnc3RhdGUnXSA9IFNUQVRFX1JF
QkFTRUxJTkVfRkFJTEVECisgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgCisgICAg
ICB0ZXN0X2pzb25bJ3N0YXRlJ10gPSBTVEFURV9SRUJBU0VMSU5FX1NVQ0NFRURFRAorICAgICAg
cmV0dXJuIFRydWUKKworICAgIGRlZiB0ZXN0X3Jlc3VsdChzZWxmKToKKyAgICAgICh0ZXN0X25h
bWUsIHRlc3RfZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQoc2VsZi5xdWVyeVsndGVzdCdd
WzBdKQorICAgICAgbW9kZSA9IHNlbGYucXVlcnlbJ21vZGUnXVswXQorICAgICAgaWYgbW9kZSA9
PSAnZXhwZWN0ZWQtaW1hZ2UnOgorICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICct
ZXhwZWN0ZWQucG5nJworICAgICAgZWxpZiBtb2RlID09ICdhY3R1YWwtaW1hZ2UnOgorICAgICAg
ICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctYWN0dWFsLnBuZycKKyAgICAgIGVsaWYgbW9k
ZSA9PSAnZGlmZi1pbWFnZSc6CisgICAgICAgICAgZmlsZV9uYW1lID0gdGVzdF9uYW1lICsgJy1k
aWZmLnBuZycKKyAgICAgIGlmIG1vZGUgPT0gJ2V4cGVjdGVkLXRleHQnOgorICAgICAgICAgIGZp
bGVfbmFtZSA9IHRlc3RfbmFtZSArICctZXhwZWN0ZWQudHh0JworICAgICAgZWxpZiBtb2RlID09
ICdhY3R1YWwtdGV4dCc6CisgICAgICAgICAgZmlsZV9uYW1lID0gdGVzdF9uYW1lICsgJy1hY3R1
YWwudHh0JworICAgICAgZWxpZiBtb2RlID09ICdkaWZmLXRleHQnOgorICAgICAgICAgIGZpbGVf
bmFtZSA9IHRlc3RfbmFtZSArICctZGlmZi50eHQnCisKKyAgICAgIGZpbGVfcGF0aCA9IG9zLnBh
dGguam9pbihzZWxmLnNlcnZlci5yZXN1bHRzX2RpcmVjdG9yeSwgZmlsZV9uYW1lKQorICAgICAg
CisgICAgICAjIExldCByZXN1bHRzIGJlIGNhY2hlZCBmb3IgNjAgc2Vjb25kcywgc28gdGhhdCB0
aGV5IGNhbiBiZSBwcmUtZmV0Y2hlZAorICAgICAgIyBieSB0aGUgVUkKKyAgICAgIHNlbGYuX3Nl
cnZlX2ZpbGUoZmlsZV9wYXRoLCBjYWNoZV9zZWNvbmRzPTYwKQorICAgIAorICAgIGRlZiByZXN1
bHRzX2pzb24oc2VsZik6CisgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgc2Vs
Zi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKQorICAgICAg
c2VsZi5lbmRfaGVhZGVycygpICAgIAorICAgICAgc2ltcGxlanNvbi5kdW1wKHNlbGYuc2VydmVy
LnJlc3VsdHNfanNvbiwgc2VsZi53ZmlsZSkKKyAgICAKKyAgICBkZWYgcXVpdHF1aXRxdWl0KHNl
bGYpOgorICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgIHNlbGYuc2VuZF9oZWFk
ZXIoIkNvbnRlbnQtdHlwZSIsICJ0ZXh0L3BsYWluIikKKyAgICAgIHNlbGYuZW5kX2hlYWRlcnMo
KQorICAgICAgc2VsZi53ZmlsZS53cml0ZSgiUXVpdC5cbiIpCisgICAgICAKKyAgICAgICMgU2h1
dGRvd24gaGFzIHRvIGhhcHBlbiBvbiBhbm90aGVyIHRocmVhZCBmcm9tIHRoZSBzZXJ2ZXIncyB0
aHJlYWQsCisgICAgICAjIG90aGVyd2lzZSB0aGVyZSdzIGEgZGVhZGxvY2sKKyAgICAgIHRocmVh
ZGluZy5UaHJlYWQodGFyZ2V0PWxhbWJkYTogc2VsZi5zZXJ2ZXIuc2h1dGRvd24oKSkuc3RhcnQo
KQorCisgICAgZGVmIF9zZXJ2ZV9maWxlKHNlbGYsIGZpbGVfcGF0aCwgY2FjaGVfc2Vjb25kcz0w
KToKKyAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlX3BhdGgpOgorICAgICAgICBzZWxm
LnNlbmRfZXJyb3IoNDA0LCAiRmlsZSBub3QgZm91bmQiKQorICAgICAgICByZXR1cm4KKyAgICAg
IHN0YXRpY19maWxlID0gZmlsZShmaWxlX3BhdGgsICdyYicpCisgICAgICAKKyAgICAgIHNlbGYu
c2VuZF9yZXNwb25zZSgyMDApCisgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LUxlbmd0
aCcsIG9zLnBhdGguZ2V0c2l6ZShmaWxlX3BhdGgpKQorICAgICAgKG1pbWVfdHlwZSwgZW5jb2Rp
bmcpID0gbWltZXR5cGVzLmd1ZXNzX3R5cGUoZmlsZV9wYXRoKQorICAgICAgaWYgbWltZV90eXBl
OiAgICAgIAorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCBtaW1lX3R5
cGUpCisgICAgICAKKyAgICAgIGlmIGNhY2hlX3NlY29uZHM6CisgICAgICAgIGV4cGlyZXNfdGlt
ZSA9IFwKKyAgICAgICAgICAgIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpICsgZGF0ZXRpbWUudGlt
ZWRlbHRhKDAsIGNhY2hlX3NlY29uZHMpCisgICAgICAgIGV4cGlyZXNfZm9ybWF0dGVkID0gXAor
ICAgICAgICAgICAgZm9ybWF0X2RhdGVfdGltZSh0aW1lLm1rdGltZShleHBpcmVzX3RpbWUudGlt
ZXR1cGxlKCkpKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJFeHBpcmVzIiwgZXhwaXJlc19m
b3JtYXR0ZWQpCisgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgIAorICAgICAgc2h1dGls
LmNvcHlmaWxlb2JqKHN0YXRpY19maWxlLCBzZWxmLndmaWxlKQorICAgICAgc3RhdGljX2ZpbGUu
Y2xvc2UoKQorCitjbGFzcyBMb2NhbFJlYmFzZWxpbmUoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1h
bmQpOgorICAgIG5hbWUgPSAibG9jYWwtcmViYXNlbGluZSIKKyAgICBoZWxwX3RleHQgPSAiVE9E
TyhtaWhhaXApIgorICAgIGFyZ3VtZW50X25hbWVzID0gIlsvcGF0aC90by9yZXN1bHRzL2RpcmVj
dG9yeS9dIgorCisgICAgZGVmIF9yZXBsYWNlX2V4cGVjdGF0aW9uX3dpdGhfcmVtb3RlX3Jlc3Vs
dChzZWxmLCBsb2NhbF9maWxlLCByZW1vdGVfZmlsZSk6CisgICAgICAgIChkb3dubG9hZGVkX2Zp
bGUsIGhlYWRlcnMpID0gdXJsbGliLnVybHJldHJpZXZlKHJlbW90ZV9maWxlKQorICAgICAgICBz
aHV0aWwubW92ZShkb3dubG9hZGVkX2ZpbGUsIGxvY2FsX2ZpbGUpCisKKyAgICBkZWYgX3Rlc3Rz
X3RvX3VwZGF0ZShzZWxmLCBidWlsZCk6CisgICAgICAgIHBhcnNlZF9yZXN1bHRzID0gYnVpbGQu
bGF5b3V0X3Rlc3RfcmVzdWx0cygpLnBhcnNlZF9yZXN1bHRzKCkKKyAgICAgICAgIyBGSVhNRTog
VGhpcyBwcm9iYWJseSBiZWxvbmdzIGFzIEFQSSBvbiBMYXlvdXRUZXN0UmVzdWx0cworICAgICAg
ICAjIGJ1dCAuZmFpbGluZ190ZXN0cygpIGFscmVhZHkgbWVhbnMgc29tZXRoaW5nIGVsc2UuCisg
ICAgICAgIGZhaWxpbmdfdGVzdHMgPSBwYXJzZWRfcmVzdWx0c1tMYXlvdXRUZXN0UmVzdWx0cy5m
YWlsX2tleV0KKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rvb2wudXNlci5wcm9tcHRfd2l0aF9saXN0
KCJXaGljaCB0ZXN0KHMpIHRvIHJlYmFzZWxpbmU6IiwgZmFpbGluZ190ZXN0cywgY2FuX2Nob29z
ZV9tdWx0aXBsZT1UcnVlKQorCisgICAgZGVmIF9yZXN1bHRzX3VybF9mb3JfdGVzdChzZWxmLCBi
dWlsZCwgdGVzdCk6CisgICAgICAgIHRlc3RfYmFzZSA9IG9zLnBhdGguc3BsaXRleHQodGVzdClb
MF0KKyAgICAgICAgYWN0dWFsX3BhdGggPSB0ZXN0X2Jhc2UgKyAiLWFjdHVhbC50eHQiCisgICAg
ICAgIHJldHVybiBidWlsZC5yZXN1bHRzX3VybCgpICsgIi8iICsgYWN0dWFsX3BhdGgKKworICAg
IGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAgICAgICBpZiBsZW4o
YXJncykgIT0gMToKKyAgICAgICAgICBwcmludCAiUGF0aCB0byByZXN1bHRzIGRpcmVjdG9yeSBp
cyByZXF1aXJlZC4iCisgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmVzdWx0c19kaXJlY3Rv
cnkgPSBhcmdzWzBdCisgICAgICAgIAorICAgICAgICBwcmludCAiUGFyc2luZyB1bmV4cGVjdGVk
X3Jlc3VsdHMuanNvbi4uLiIKKyAgICAgICAgcmVzdWx0c19qc29uX3BhdGggPSBvcy5wYXRoLmpv
aW4oCisgICAgICAgICAgICByZXN1bHRzX2RpcmVjdG9yeSwgJ3VuZXhwZWN0ZWRfcmVzdWx0cy5q
c29uJykKKyAgICAgICAgcmVzdWx0c19qc29uX2ZpbGUgPSBmaWxlKHJlc3VsdHNfanNvbl9wYXRo
KQorICAgICAgICByZXN1bHRzX2pzb24gPSBzaW1wbGVqc29uLmxvYWQocmVzdWx0c19qc29uX2Zp
bGUpCisgICAgICAgIHJlc3VsdHNfanNvbl9maWxlLmNsb3NlKCkKKyAgICAgICAgCisgICAgICAg
IHRlc3RfbmFtZV90b190ZXN0X2ZpbGUgPSB7fQorICAgICAgICBmb3IgdGVzdF9maWxlLCB0ZXN0
X2pzb24gaW4gcmVzdWx0c19qc29uWyd0ZXN0cyddLml0ZW1zKCk6CisgICAgICAgICAgICAodGVz
dF9uYW1lLCB0ZXh0X2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KHRlc3RfZmlsZSkKKyAg
ICAgICAgICAgIHRlc3RfbmFtZV90b190ZXN0X2ZpbGVbdGVzdF9uYW1lXSA9IHRlc3RfZmlsZQor
ICAgICAgICAgICAgCisgICAgICAgICAgICB0ZXN0X2pzb25bJ3N0YXRlJ10gPSBTVEFURV9ORUVE
U19SRUJBU0VMSU5FCisgICAgICAgIAorICAgICAgICBwcmludCAiR2F0aGVyaW5nIGN1cnJlbnQg
YmFzZWxpbmVzLi4uIgorICAgICAgICAKKyAgICAgICAgcG9ydCA9IGZhY3RvcnkuZ2V0KCkKKyAg
ICAgICAgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSA9IHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpCisg
ICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGxheW91dF90ZXN0c19kaXJl
Y3RvcnkpOgorICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZubWF0Y2guZmlsdGVyKGZpbGVz
LCAnKi1leHBlY3RlZC4qJyk6CisgICAgICAgICAgICAgICAgcmVsYXRpdmVfcGF0aCA9IG9zLnBh
dGgucmVscGF0aChyb290LCBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5KQorICAgICAgICAgICAgICAg
IHBhdGhfcGllY2VzID0gcmVsYXRpdmVfcGF0aC5zcGxpdChvcy5zZXApCisgICAgICAgICAgICAg
ICAgaWYgbGVuKHBhdGhfcGllY2VzKSA+PSAyIGFuZCBwYXRoX3BpZWNlc1swXSA9PSAncGxhdGZv
cm0nOgorICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSA9IHBhdGhfcGllY2VzWzFdCisgICAg
ICAgICAgICAgICAgICAgIHRlc3RfZGlyX3BhdGggPSBvcy5zZXAuam9pbihwYXRoX3BpZWNlc1sy
Ol0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0g
PSAnYmFzZScKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9kaXJfcGF0aCA9IHJlbGF0aXZlX3Bh
dGgKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAodGVzdF9uYW1lLCB0ZXh0X2V4
dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIHRl
c3RfbmFtZSA9IG9zLnBhdGguam9pbih0ZXN0X2Rpcl9wYXRoLCB0ZXN0X25hbWVbMDotbGVuKCct
ZXhwZWN0ZWQnKV0pCisgICAgICAgICAgICAgICAgaWYgdGVzdF9uYW1lIG5vdCBpbiB0ZXN0X25h
bWVfdG9fdGVzdF9maWxlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAg
ICAgICAgIHRlc3RfZmlsZSA9IHRlc3RfbmFtZV90b190ZXN0X2ZpbGVbdGVzdF9uYW1lXQorICAg
ICAgICAgICAgICAgIHRlc3RfanNvbiA9IHJlc3VsdHNfanNvblsndGVzdHMnXVt0ZXN0X2ZpbGVd
CisgICAgICAgICAgICAgICAgaWYgJ2Jhc2VsaW5lcycgbm90IGluIHRlc3RfanNvbjoKKyAgICAg
ICAgICAgICAgICAgICAgdGVzdF9qc29uWydiYXNlbGluZXMnXSA9IFtdCisgICAgICAgICAgICAg
ICAgaWYgcGxhdGZvcm0gbm90IGluIHRlc3RfanNvblsnYmFzZWxpbmVzJ106CisgICAgICAgICAg
ICAgICAgICAgIHRlc3RfanNvblsnYmFzZWxpbmVzJ10uYXBwZW5kKHBsYXRmb3JtKQorCisgICAg
ICAgIHByaW50ICJTdGFydGluZyBzZXJ2ZXIgYXQgaHR0cDovL2xvY2FsaG9zdDo4MDAwLyIKKyAg
ICAgICAgCisgICAgICAgIGh0dHBkID0gUmViYXNlbGluZUhUVFNlcnZlcigKKyAgICAgICAgICAg
IGh0dHBkX3BvcnQ9ODAwMCwKKyAgICAgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5PXJlc3VsdHNf
ZGlyZWN0b3J5LAorICAgICAgICAgICAgcmVzdWx0c19qc29uPXJlc3VsdHNfanNvbiwKKyAgICAg
ICAgICAgIHBvcnQ9cG9ydCwKKyAgICAgICAgICAgIHNjbT1zZWxmLl90b29sLnNjbSgpKQorICAg
ICAgICBodHRwZC5zZXJ2ZV9mb3JldmVyKCkgICAgICAgICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71621</attachid>
            <date>2010-10-22 22:47:26 -0700</date>
            <delta_ts>2010-10-25 14:52:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47761-20101022224724.patch</filename>
            <type>text/plain</type>
            <size>47676</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA0ODA2ZjEzNGM0MmQ5ZWJkNDUzMmRiNGJhZDVkMzY0NmFiOGY1YjViLi5kYmI2MTgw
MGM2NzllZGMxOWY1MDFkNDA1NzAzNGNiOWRlOTdjZjkwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAK
KzIwMTAtMTAtMjIgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTG9jYWwgcmViYXNl
bGluaW5nIHRvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ3NzYxCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19p
bml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEv
bG9jYWxyZWJhc2VsaW5lL2luZGV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9tYWluLmpzOiBBZGRlZC4K
KyAgICAgICAgKG1haW4uYWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChtYWluLmRvY3VtZW50
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAoZGlzcGxheVJlc3VsdHMuZm9yKToKKyAgICAg
ICAgKGRpc3BsYXlSZXN1bHRzKToKKyAgICAgICAgKHNlbGVjdEZhaWx1cmVUeXBlKToKKyAgICAg
ICAgKHNlbGVjdERpcmVjdG9yeSk6CisgICAgICAgIChnZXRTZWxlY3RlZFRlc3QpOgorICAgICAg
ICAocHJlZmV0Y2gpOgorICAgICAgICAoc2VsZWN0VGVzdCk6CisgICAgICAgICh1cGRhdGVTdGF0
ZSk6CisgICAgICAgIChkaXNwbGF5SW1hZ2VSZXN1bHRzLm9ubG9hZCk6CisgICAgICAgIChkaXNw
bGF5SW1hZ2VSZXN1bHRzKToKKyAgICAgICAgKHVwZGF0ZURpZmYpOgorICAgICAgICAoZGlzcGxh
eVRleHRSZXN1bHRzLmxvYWRUZXh0UmVzdWx0KToKKyAgICAgICAgKCk6CisgICAgICAgIChuZXh0
VGVzdCk6CisgICAgICAgIChwcmV2aW91c1Rlc3QpOgorICAgICAgICAoc2hvd0xvdXBlKToKKyAg
ICAgICAgKGZpbGxMb3VwZUZyb21JbWFnZSk6CisgICAgICAgIChmaWxsTG91cGVGcm9tQ2FudmFz
LnJlYWRQaXhlbENvbXBvbmVudCk6CisgICAgICAgIChmaWxsTG91cGVGcm9tQ2FudmFzKToKKyAg
ICAgICAgKGhpZGVMb3VwZSk6CisgICAgICAgIChyZW1vdmVTZWxlY3Rpb25Gcm9tUmViYXNlbGlu
ZVF1ZXVlKToKKyAgICAgICAgKHJlbW92ZUZyb21SZWJhc2VsaW5lUXVldWUpOgorICAgICAgICAo
cmViYXNlbGluZVF1ZXVlKToKKyAgICAgICAgKHJlYmFzZWxpbmUuaGFuZGxlU3VjY2Vzcyk6Cisg
ICAgICAgIChyZWJhc2VsaW5lLmhhbmRsZUZhaWx1cmUpOgorICAgICAgICAobG9nKToKKyAgICAg
ICAgKHRvZ2dsZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2xv
Y2FscmViYXNlbGluZS5weTogQWRkZWQuCisKIDIwMTAtMTAtMjIgIEVyaWMgU2VpZGVsICA8ZXJp
Y0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18ucHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18ucHkKaW5kZXggOWJk
ZWM4ZjU5N2UxNzYzNjM0NGE4MTgzYjEwM2ExNTBiZjhjOWRlMy4uMzhiMWU3OWVmNDgxNjE3NDc0
NmM3MjY2NzExNWE3YzJkZDY3MjY2OSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5CisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9fX2luaXRfXy5weQpAQCAtMiw0ICsyLDUgQEAKIAog
ZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnByZXR0eWRpZmYgaW1wb3J0IFByZXR0eURpZmYK
IGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5yZWJhc2VsaW5lIGltcG9ydCBSZWJhc2VsaW5l
Citmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMubG9jYWxyZWJhc2VsaW5lIGltcG9ydCBMb2Nh
bFJlYmFzZWxpbmUKICMgRklYTUU6IEFkZCB0aGUgcmVzdCBvZiB0aGUgY29tbWFuZHMgaGVyZS4K
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9k
YXRhL2xvY2FscmViYXNlbGluZS9pbmRleC5odG1sIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL2RhdGEvbG9jYWxyZWJhc2VsaW5lL2luZGV4Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDgwODcyODcyNDY4NzJmMDc5YjI1NzIxMDMwMGQ4MDdiN2E1Y2VjZQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRh
L2xvY2FscmViYXNlbGluZS9pbmRleC5odG1sCkBAIC0wLDAgKzEsNDMyIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5MYXlvdXQgVGVzdCBSZWJhc2VsaW5lcjwv
dGl0bGU+CisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgYm9keSB7CisgICAgICBmb250
LXNpemU6IDEycHg7CisgICAgICBmb250LWZhbWlseTogSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1z
ZXJpZjsKKyAgICAgIHBhZGRpbmc6IDA7CisgICAgICBtYXJnaW46IDA7CisgICAgfQorICAgIAor
ICAgIGRpdiB7CisgICAgICBtYXJnaW46IDA7CisgICAgfQorICAgIAorICAgIGEsIC5saW5rIHsK
KyAgICAgIGNvbG9yOiAjYWFmOworICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cisg
ICAgICBjdXJzb3I6IHBvaW50ZXI7ICAgICAgCisgICAgfQorICAgIAorICAgIC5saW5rLnNlbGVj
dGVkIHsKKyAgICAgIGNvbG9yOiAjZmZmOworICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAg
ICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgfQorICAgIAorICAgICNsb2csCisgICAgI3F1
ZXVlIHsKKyAgICAgIHBhZGRpbmc6IC4yNWVtIDAgMCAuMjVlbTsKKyAgICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICAgIHJpZ2h0OiAwOworICAgICAgaGVpZ2h0OiAyMDBweDsKKyAgICAgIG92
ZXJmbG93OiBhdXRvOworICAgICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICAgIC13ZWJraXQtYm94
LXNoYWRvdzogMXB4IDFweCA1cHggcmdiYSgwLCAwLCAwLCAuNSk7CisgICAgfQorICAgIAorICAg
ICNsb2cgeworICAgICAgdG9wOiAyZW07CisgICAgICB3aWR0aDogNTAwcHg7CisgICAgfQorICAg
IAorICAgICNxdWV1ZSB7CisgICAgICBib3R0b206IDNlbTsKKyAgICAgIHdpZHRoOiA0MDBweDsK
KyAgICB9CisgICAgCisgICAgI3F1ZXVlLXNlbGVjdCB7CisgICAgICBkaXNwbGF5OiBibG9jazsK
KyAgICAgIHdpZHRoOiAzOTBweDsKKyAgICB9CisgICAgCisgICAgI2hlYWRlciwKKyAgICAjZm9v
dGVyIHsKKyAgICAgIHBhZGRpbmc6IC41ZW0gMWVtOyAgICAKKyAgICAgIGJhY2tncm91bmQ6ICMz
MzM7CisgICAgICBjb2xvcjogI2ZmZjsKKyAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHgg
NXB4IHJnYmEoMCwgMCwgMCwgMC41KTsKKyAgICB9CisgICAgCisgICAgI2hlYWRlciAuZGl2aWRl
ciwKKyAgICAjZm9vdGVyIC5kaXZpZGVyIHsKKyAgICAgIG9wYWNpdHk6IC4zOworICAgICAgcGFk
ZGluZzogMCAuNWVtOworICAgIH0KKyAgICAKKyAgICAjaGVhZGVyIHsKKyAgICAgIG1hcmdpbi1i
b3R0b206IDFlbTsKKyAgICB9CisgICAgCisgICAgI2hlYWRlciBsYWJlbCwKKyAgICAjZm9vdGVy
IGxhYmVsIHsKKyAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgICAgIGNvbG9yOiAjY2NjOwor
ICAgIH0KKyAgICAKKyAgICAjaGVhZGVyIGxhYmVsIHNwYW4sCisgICAgI2Zvb3RlciBsYWJlbCBz
cGFuIHsKKyAgICAgIGNvbG9yOiAjZmZmOworICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAg
fQorICAgIAorICAgICNuYXYtYnV0dG9ucyBidXR0b24geworICAgICAgYmFja2dyb3VuZDogI2Zm
ZjsKKyAgICAgIGJvcmRlcjogMDsKKyAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CisgICAgfQor
ICAgIAorICAgICNuYXYtYnV0dG9ucyBidXR0b246YWN0aXZlIHsKKyAgICAgIC13ZWJraXQtYm94
LXNoYWRvdzogMCAwIDVweCAjMzNmIGluc2V0OworICAgICAgYmFja2dyb3VuZDogI2FhYTsKKyAg
ICB9CisKKyAgICAjbmF2LWJ1dHRvbnMgYnV0dG9uW2Rpc2FibGVkXSB7CisgICAgICBvcGFjaXR5
OiAuNTsKKyAgICB9CisKKyAgICAjY29udHJvbHMgeworICAgICAgZmxvYXQ6IHJpZ2h0OworICAg
IH0KKyAgICAKKyAgICAjdGVzdC1vdXRwdXQgeworICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7Cisg
ICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICAgICAgbWFyZ2luOiAwIGF1dG87Cisg
ICAgfQorICAgIAorICAgICN0ZXN0LW91dHB1dCB0ZCwKKyAgICAjdGVzdC1vdXRwdXQgdGggewor
ICAgICAgcGFkZGluZzogMDsKKyAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisgICAgfQorICAg
IAorICAgICNpbWFnZS1vdXRwdXRzIGltZywKKyAgICAjaW1hZ2Utb3V0cHV0cyBjYW52YXMgewor
ICAgICAgd2lkdGg6IDgwMHB4OworICAgICAgaGVpZ2h0OiA2MDBweDsKKyAgICAgIGJvcmRlcjog
c29saWQgMXB4ICNkZGQ7CisgICAgfQorICAgIAorICAgICNpbWFnZS1vdXRwdXRzIGltZy5sb2Fk
aW5nLAorICAgICNpbWFnZS1vdXRwdXRzIGNhbnZhcy5sb2FkaW5nIHsKKyAgICAgIG9wYWNpdHk6
IC41OworICAgIH0KKyAgICAKKyAgICAjaW1hZ2Utb3V0cHV0cyAjYWN0dWFsLWltYWdlIHsKKyAg
ICAgIG1hcmdpbjogMCAxZW07CisgICAgfQorICAgIAorICAgICN0ZXN0LW91dHB1dCAjbGFiZWxz
IHRoIHsKKyAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgIGNvbG9yOiAjNjY2OworICAg
IH0KKyAgICAKKyAgICAjdGV4dC1vdXRwdXRzIHByZSB7CisgICAgICBoZWlnaHQ6IDYwMHB4Owor
ICAgICAgd2lkdGg6IDgwMHB4OworICAgICAgb3ZlcmZsb3c6IGF1dG87CisgICAgfQorICAgIAor
ICAgICN0ZXN0LW91dHB1dCBoMiB7CisgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2Nj
YzsKKyAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgbWFyZ2luOiAwOworICAgICAgYmFj
a2dyb3VuZDogI2VlZTsKKyAgICB9CisgICAgCisgICAgI2Zvb3RlciB7CisgICAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgICBib3R0b206IDA7CisgICAgICBsZWZ0OiAwOworICAgICAgcmln
aHQ6IDA7CisgICAgICBtYXJnaW4tdG9wOiAxZW07CisgICAgfQorICAgIAorICAgICNzdGF0ZS5u
ZWVkc19yZWJhc2VsaW5lIHsKKyAgICAgIGNvbG9yOiB5ZWxsb3c7CisgICAgfQorICAgICNzdGF0
ZS5yZWJhc2VsaW5lX2ZhaWxlZCB7CisgICAgICBjb2xvcjogcmVkOworICAgIH0KKyAgICAjc3Rh
dGUucmViYXNlbGluZV9zdWNjZWVkZWQgeworICAgICAgY29sb3I6IGdyZWVuOworICAgIH0KKyAg
ICAjc3RhdGUuaW5fcXVldWUgeworICAgICAgY29sb3I6IGdyYXk7CisgICAgfQorICAgIAorICAg
ICNhY3Rpb24tYnV0dG9ucyB7CisgICAgICBmbG9hdDogcmlnaHQ7CisgICAgfQorICAgIAorICAg
ICNhY3Rpb24tYnV0dG9ucyAubGluayB7CisgICAgICBtYXJnaW4tcmlnaHQ6IDFlbTsKKyAgICB9
CisgICAgCisgICAgI2Zvb3RlciBidXR0b24geworICAgICAgcGFkZGluZzogMWVtOworICAgIH0K
KyAgICAKKyAgICAjbG91cGUgeworICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAycHggMnB4IDVw
eCByZ2JhKDAsIDAsIDAsIC41KTsKKyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgIHdp
ZHRoOiA2MzRweDsKKyAgICAgIHRvcDogNTAlOworICAgICAgbGVmdDogNTAlOworICAgICAgbWFy
Z2luLWxlZnQ6IC0xNTFweDsKKyAgICAgIG1hcmdpbi10b3A6IC01MHB4OworICAgICAgYmFja2dy
b3VuZDogI2ZmZjsKKyAgICAgIGJvcmRlci1zcGFjaW5nOiAwOworICAgICAgYm9yZGVyLWNvbGxh
cHNlOiBjb2xsYXBzZTsKKyAgICB9CisgICAgCisgICAgI2xvdXBlIHRkIHsKKyAgICAgIHBhZGRp
bmc6IDA7CisgICAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOyAgICAgCisgICAgfQorICAgIAor
ICAgICNsb3VwZSBsYWJlbCB7CisgICAgICBjb2xvcjogIzk5OTsKKyAgICAgIHBhZGRpbmctcmln
aHQ6IDFlbTsKKyAgICB9CisgICAgCisgICAgI2xvdXBlIHNwYW4geworICAgICAgY29sb3I6ICMw
MDA7CisgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICB9CisgICAgCisgICAgI2xvdXBlICNs
b3VwZS1jbG9zZSB7CisgICAgICBmbG9hdDogcmlnaHQ7CisgICAgfQorICAgIAorICAgICNsb3Vw
ZSAjbG91cGUtaW5mbyB7CisgICAgICBiYWNrZ3JvdW5kOiAjZWVlOworICAgICAgcGFkZGluZzog
LjNlbSAuNWVtOworICAgIH0KKyAgICAKKyAgICAjbG91cGUgI2xvdXBlLWNvbG9ycyB0ZCB7Cisg
ICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgfQorICAgIAorICAgICNsb3VwZSAubG91cGUt
Y29udGFpbmVyIHsKKyAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgIHdpZHRoOiAyMTBw
eDsKKyAgICAgIGhlaWdodDogMjEwcHg7CisgICAgfQorICAgIAorICAgICNsb3VwZSAuY2VudGVy
LWhpZ2hsaWdodCB7CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICB3aWR0aDogMTBw
eDsKKyAgICAgIGhlaWdodDogMTBweDsKKyAgICAgIHRvcDogNTAlOworICAgICAgbGVmdDogNTAl
OworICAgICAgbWFyZ2luLWxlZnQ6IC01cHg7CisgICAgICBtYXJnaW4tdG9wOiAtNXB4OworICAg
ICAgb3V0bGluZTogc29saWQgMXB4ICM5OTk7CisgICAgfQorICA8L3N0eWxlPgorPC9oZWFkPgor
PGJvZHk+CisKKzxwcmUgaWQ9ImxvZyIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjwvcHJlPgorPGRp
diBpZD0icXVldWUiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAgUXVldWU6CisgIDxzZWxlY3Qg
aWQ9InF1ZXVlLXNlbGVjdCIgc2l6ZT0iMTAiPjwvc2VsZWN0PgorICA8YnV0dG9uIGlkPSJyZW1v
dmUtcXVldWUtc2VsZWN0aW9uIj5SZW1vdmUgc2VsZWN0aW9uPC9idXR0b24+CisgIDxidXR0b24g
aWQ9InJlYmFzZWxpbmUtcXVldWUiPlJlYmFzZWxpbmUgcXVldWU8L2J1dHRvbj4KKzwvZGl2Pgor
Cis8ZGl2IGlkPSJoZWFkZXIiPgorICA8ZGl2IGlkPSJjb250cm9scyI+CisgICAgPCEtLSBBZGQg
YSBkdW1teSA8c2VsZWN0PiBub2RlIHNvIHRoYXQgdGhpcyBsaW5lcyB1cCB3aXRoIHRoZSB0ZXh0
IG9uIHRoZSBsZWZ0IC0tPgorICAgIDxzZWxlY3Qgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbiI+
PC9zZWxlY3Q+CisgICAgPHNwYW4gaWQ9InRvZ2dsZS1sb2ciIGNsYXNzPSJsaW5rIj5Mb2c8L3Nw
YW4+CisgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXIiPnw8L3NwYW4+CisgICAgPGEgaHJlZj0iL3F1
aXRxdWl0cXVpdCI+RXhpdDwvYT4KKyAgPC9kaXY+CisKKyAgPHNwYW4gaWQ9InNlbGVjdG9ycyI+
CisgICAgPGxhYmVsPgorICAgICAgRmFpbHVyZSB0eXBlOgorICAgICAgPHNlbGVjdCBpZD0iZmFp
bHVyZS10eXBlLXNlbGVjdG9yIj48L3NlbGVjdD4KKyAgICA8L2xhYmVsPgorICAKKyAgICA8bGFi
ZWw+CisgICAgICBEaXJlY3Rvcnk6CisgICAgICA8c2VsZWN0IGlkPSJkaXJlY3Rvcnktc2VsZWN0
b3IiPjwvc2VsZWN0PgorICAgIDwvbGFiZWw+CisgIAorICAgIDxsYWJlbD4KKyAgICAgIFRlc3Q6
CisgICAgICA8c2VsZWN0IGlkPSJ0ZXN0LXNlbGVjdG9yIj48L3NlbGVjdD4KKyAgICA8L2xhYmVs
PgorICA8L3NwYW4+CisgIAorICA8c3BhbiBpZD0ibmF2LWJ1dHRvbnMiPgorICAgIDxidXR0b24g
aWQ9InByZXZpb3VzLXRlc3QiPiZsYXF1bzs8L2J1dHRvbj4KKyAgICA8c3BhbiBpZD0idGVzdC1p
bmRleCI+PC9zcGFuPiBvZiA8c3BhbiBpZD0idGVzdC1jb3VudCI+PC9zcGFuPgorICAgIDxidXR0
b24gaWQ9Im5leHQtdGVzdCI+JnJhcXVvOzwvYnV0dG9uPgorICA8L3NwYW4+ICAKKzwvZGl2Pgor
Cis8dGFibGUgaWQ9InRlc3Qtb3V0cHV0Ij4KKyAgPHRoZWFkIGlkPSJsYWJlbHMiPgorICAgIDx0
cj4KKyAgICAgIDx0aD5FeHBlY3RlZDwvdGg+CisgICAgICA8dGg+QWN0dWFsPC90aD4KKyAgICAg
IDx0aD5EaWZmPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHkgaWQ9ImltYWdl
LW91dHB1dHMiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAgICA8dHI+CisgICAgICA8dGQgY29s
c3Bhbj0iMyI+PGgyPkltYWdlPC9oMj48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAg
PHRkPjxpbWcgaWQ9ImV4cGVjdGVkLWltYWdlIj48L3RkPgorICAgICAgPHRkPjxpbWcgaWQ9ImFj
dHVhbC1pbWFnZSI+PC90ZD4KKyAgICAgIDx0ZD48Y2FudmFzIGlkPSJkaWZmLWNhbnZhcyIgd2lk
dGg9IjgwMCIgaGVpZ2h0PSI2MDAiPjwvY2FudmFzPjwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9k
eT4KKyAgPHRib2R5IGlkPSJ0ZXh0LW91dHB1dHMiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAg
ICA8dHI+CisgICAgICA8dGQgY29sc3Bhbj0iMyI+PGgyPlRleHQ8L2gyPjwvdGQ+CisgICAgPC90
cj4KKyAgICA8dHI+CisgICAgICA8dGQ+PHByZSBpZD0iZXhwZWN0ZWQtdGV4dCI+PC9wcmU+PC90
ZD4KKyAgICAgIDx0ZD48cHJlIGlkPSJhY3R1YWwtdGV4dCI+PC9wcmU+PC90ZD4KKyAgICAgIDx0
ZD48cHJlIGlkPSJkaWZmLXRleHQiPjxwcmU+PC90ZD4KKyAgICA8L3RyPgorICA8L3Rib2R5Pgor
Cis8L3RhYmxlPgorCis8ZGl2IGlkPSJmb290ZXIiPgorICA8bGFiZWw+U3RhdGU6IDxzcGFuIGlk
PSJzdGF0ZSI+PC9zcGFuPjwvbGFiZWw+CisgIDxsYWJlbD5FeGlzdGluZyBiYXNlbGluZXM6IDxz
cGFuIGlkPSJjdXJyZW50LWJhc2VsaW5lcyI+PC9zcGFuPjwvbGFiZWw+CisgIDxsYWJlbD4KKyAg
ICBCYXNlbGluZSB0YXJnZXQ6CisgICAgPHNlbGVjdCBpZD0iYmFzZWxpbmUtdGFyZ2V0Ij4KKyAg
ICAgIDxvcHRpb24gdmFsdWU9ImFuZHJvaWQiPmFuZHJvaWQ8L29wdGlvbj4KKyAgICAgIDxvcHRp
b24gdmFsdWU9ImFuZHJvaWQtdjgiPmFuZHJvaWQtdjg8L29wdGlvbj4KKyAgICAgIDxvcHRpb24g
dmFsdWU9ImNocm9taXVtIj5jaHJvbWl1bTwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0i
Y2hyb21pdW0tZ3B1Ij5jaHJvbWl1bS1ncHU8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9
ImNocm9taXVtLWdwdS1saW51eCI+Y2hyb21pdW0tZ3B1LWxpbnV4PC9vcHRpb24+CisgICAgICA8
b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1ncHUtbWFjIj5jaHJvbWl1bS1ncHUtbWFjPC9vcHRpb24+
CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1ncHUtd2luIj5jaHJvbWl1bS1ncHUtd2lu
PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1saW51eCI+Y2hyb21pdW0t
bGludXg8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLW1hYyI+Y2hyb21p
dW0tbWFjPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS13aW4iPmNocm9t
aXVtLXdpbjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0td2luLXZpc3Rh
Ij5jaHJvbWl1bS13aW4tdmlzdGE8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9t
aXVtLXdpbi14cCI+Y2hyb21pdW0td2luLXhwPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVl
PSJnb29nbGUtY2hyb21lLWxpbnV4MzIiPmdvb2dsZS1jaHJvbWUtbGludXgzMjwvb3B0aW9uPgor
ICAgICAgPG9wdGlvbiB2YWx1ZT0iZ29vZ2xlLWNocm9tZS1saW51eDY0Ij5nb29nbGUtY2hyb21l
LWxpbnV4NjQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Imd0ayI+Z3RrPC9vcHRpb24+
CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMiIHNlbGVjdGVkPm1hYzwvb3B0aW9uPgorICAgICAg
PG9wdGlvbiB2YWx1ZT0ibWFjLWxlb3BhcmQiPm1hYy1sZW9wYXJkPC9vcHRpb24+CisgICAgICA8
b3B0aW9uIHZhbHVlPSJtYWMtc25vd2xlb3BhcmQiPm1hYy1zbm93bGVvcGFyZDwvb3B0aW9uPgor
ICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjLXRpZ2VyIj5tYWMtdGlnZXI8L29wdGlvbj4KKyAgICAg
IDxvcHRpb24gdmFsdWU9Im1hYy13azIiPm1hYy13azI8L29wdGlvbj4KKyAgICAgIDxvcHRpb24g
dmFsdWU9InF0Ij5xdDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0icXQtbGludXgiPnF0
LWxpbnV4PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJxdC1tYWMiPnF0LW1hYzwvb3B0
aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0icXQtd2luIj5xdC13aW48L29wdGlvbj4KKyAgICAg
IDxvcHRpb24gdmFsdWU9InF0LXdrMiI+cXQtd2syPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZh
bHVlPSJ3aW4iPndpbjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0id2luLXdrMiI+d2lu
LXdrMjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0id2luLXhwIj53aW4teHA8L29wdGlv
bj4KKyAgICA8L3NlbGVjdD4KKyAgPC9sYWJlbD4KKyAgPGxhYmVsPgorICAgIE1vdmUgY3VycmVu
dCBiYXNlbGluZXMgdG86CisgICAgPHNlbGVjdCBpZD0iYmFzZWxpbmUtbW92ZS10byI+CisgICAg
ICA8b3B0aW9uIHZhbHVlPSJub25lIj5Ob3doZXJlIChyZXBsYWNlKTwvb3B0aW9uPgorICAgICAg
PG9wdGlvbiB2YWx1ZT0iYW5kcm9pZCI+YW5kcm9pZDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2
YWx1ZT0iYW5kcm9pZC12OCI+YW5kcm9pZC12ODwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1
ZT0iY2hyb21pdW0iPmNocm9taXVtPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJv
bWl1bS1ncHUiPmNocm9taXVtLWdwdTwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hy
b21pdW0tZ3B1LWxpbnV4Ij5jaHJvbWl1bS1ncHUtbGludXg8L29wdGlvbj4KKyAgICAgIDxvcHRp
b24gdmFsdWU9ImNocm9taXVtLWdwdS1tYWMiPmNocm9taXVtLWdwdS1tYWM8L29wdGlvbj4KKyAg
ICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLWdwdS13aW4iPmNocm9taXVtLWdwdS13aW48L29w
dGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLWxpbnV4Ij5jaHJvbWl1bS1saW51
eDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0tbWFjIj5jaHJvbWl1bS1t
YWM8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLXdpbiI+Y2hyb21pdW0t
d2luPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS13aW4tdmlzdGEiPmNo
cm9taXVtLXdpbi12aXN0YTwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0t
d2luLXhwIj5jaHJvbWl1bS13aW4teHA8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Imdv
b2dsZS1jaHJvbWUtbGludXgzMiI+Z29vZ2xlLWNocm9tZS1saW51eDMyPC9vcHRpb24+CisgICAg
ICA8b3B0aW9uIHZhbHVlPSJnb29nbGUtY2hyb21lLWxpbnV4NjQiPmdvb2dsZS1jaHJvbWUtbGlu
dXg2NDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iZ3RrIj5ndGs8L29wdGlvbj4KKyAg
ICAgIDxvcHRpb24gdmFsdWU9Im1hYyI+bWFjPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVl
PSJtYWMtbGVvcGFyZCI+bWFjLWxlb3BhcmQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9
Im1hYy1zbm93bGVvcGFyZCI+bWFjLXNub3dsZW9wYXJkPC9vcHRpb24+CisgICAgICA8b3B0aW9u
IHZhbHVlPSJtYWMtdGlnZXIiPm1hYy10aWdlcjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1
ZT0ibWFjLXdrMiI+bWFjLXdrMjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0icXQiPnF0
PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJxdC1saW51eCI+cXQtbGludXg8L29wdGlv
bj4KKyAgICAgIDxvcHRpb24gdmFsdWU9InF0LW1hYyI+cXQtbWFjPC9vcHRpb24+CisgICAgICA8
b3B0aW9uIHZhbHVlPSJxdC13aW4iPnF0LXdpbjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1
ZT0icXQtd2syIj5xdC13azI8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9IndpbiI+d2lu
PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJ3aW4td2syIj53aW4td2syPC9vcHRpb24+
CisgICAgICA8b3B0aW9uIHZhbHVlPSJ3aW4teHAiPndpbi14cDwvb3B0aW9uPiAgICAgIAorICAg
IDwvc2VsZWN0PgorICA8L2xhYmVsPgorCisgIDwhLS0gQWRkIGEgZHVtbXkgPGJ1dHRvbj4gbm9k
ZSBzbyB0aGF0IHRoaXMgbGluZXMgdXAgd2l0aCB0aGUgdGV4dCBvbiB0aGUgbGVmdCAtLT4KKyAg
PGJ1dHRvbiBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuIj48L2J1dHRvbj4KKyAgCisgIDxkaXYg
aWQ9ImFjdGlvbi1idXR0b25zIj4KKyAgICA8c3BhbiBpZD0idG9nZ2xlLXF1ZXVlIiBjbGFzcz0i
bGluayI+UXVldWU8L3NwYW4+CisgICAgPGJ1dHRvbiBpZD0iYWRkLXRvLXJlYmFzZWxpbmUtcXVl
dWUiPkFkZCB0byByZWJhc2VsaW5lIHF1ZXVlPC9idXR0b24+CisgIDwvZGl2PgorPC9kaXY+CisK
Kzx0YWJsZSBpZD0ibG91cGUiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAgPHRyPgorICAgIDx0
ZCBjb2xzcGFuPSIzIiBpZD0ibG91cGUtaW5mbyI+CisgICAgICA8c3BhbiBpZD0ibG91cGUtY2xv
c2UiIGNsYXNzPSJsaW5rIj5DbG9zZTwvc3Bhbj4KKyAgICAgIDxsYWJlbD5Db29yZGluYXRlOiA8
c3BhbiBpZD0ibG91cGUtY29vcmRpbmF0ZSI+PC9zcGFuPjwvbGFiZWw+CisgICAgPC90ZD4KKyAg
PC90cj4KKyAgPHRyPgorICAgIDx0ZD4KKyAgICAgIDxkaXYgY2xhc3M9ImxvdXBlLWNvbnRhaW5l
ciI+CisgICAgICAgIDxjYW52YXMgaWQ9ImV4cGVjdGVkLWxvdXBlIiB3aWR0aD0iMjEwIiBoZWln
aHQ9IjIxMCI+PC9jYW52YXM+CisgICAgICAgIDxkaXYgY2xhc3M9ImNlbnRlci1oaWdobGlnaHQi
PjwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC90ZD4KKyAgICA8dGQ+CisgICAgICA8ZGl2IGNs
YXNzPSJsb3VwZS1jb250YWluZXIiPgorICAgICAgICA8Y2FudmFzIGlkPSJhY3R1YWwtbG91cGUi
IHdpZHRoPSIyMTAiIGhlaWdodD0iMjEwIj48L2NhbnZhcz4KKyAgICAgICAgPGRpdiBjbGFzcz0i
Y2VudGVyLWhpZ2hsaWdodCI+PC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L3RkPgorICAgIDx0
ZD4KKyAgICAgIDxkaXYgY2xhc3M9ImxvdXBlLWNvbnRhaW5lciI+CisgICAgICAgIDxjYW52YXMg
aWQ9ImRpZmYtbG91cGUiIHdpZHRoPSIyMTAiIGhlaWdodD0iMjEwIj48L2NhbnZhcz4KKyAgICAg
ICAgPGRpdiBjbGFzcz0iY2VudGVyLWhpZ2hsaWdodCI+PC9kaXY+CisgICAgICA8L2Rpdj4KKyAg
ICA8L3RkPgorICA8L3RyPgorICA8dHIgaWQ9ImxvdXBlLWNvbG9ycyI+CisgICAgPHRkPjxsYWJl
bD5FeHAuIGNvbG9yOiA8c3BhbiBpZD0iZXhwZWN0ZWQtbG91cGUtY29sb3IiPjwvc3Bhbj48L2xh
YmVsPjwvdGQ+CisgICAgPHRkPjxsYWJlbD5BY3R1YWwgY29sb3I6IDxzcGFuIGlkPSJhY3R1YWwt
bG91cGUtY29sb3IiPjwvc3Bhbj48L2xhYmVsPjwvdGQ+CisgICAgPHRkPjxsYWJlbD5EaWZmIGNv
bG9yOiA8c3BhbiBpZD0iZGlmZi1sb3VwZS1jb2xvciI+PC9zcGFuPjwvbGFiZWw+PC90ZD4KKyAg
PC90cj4KKzwvdGFibGU+CisKKzxzY3JpcHQgc3JjPSIvbWFpbi5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvbWFpbi5qcyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9tYWluLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFhMzA4YzkyMGJjY2YwMTRiNzgyMjNiNjY0MDg5M2JlZjNlZjIwNTgKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvbWFpbi5qcwpAQCAtMCwwICsxLDU3MCBAQAordmFyIFNU
QVRFX05FRURTX1JFQkFTRUxJTkUgPSAnbmVlZHNfcmViYXNlbGluZSc7Cit2YXIgU1RBVEVfUkVC
QVNFTElORV9GQUlMRUQgPSAncmViYXNlbGluZV9mYWlsZWQnOwordmFyIFNUQVRFX1JFQkFTRUxJ
TkVfU1VDQ0VFREVEID0gJ3JlYmFzZWxpbmVfc3VjY2VlZGVkJzsKK3ZhciBTVEFURV9JTl9RVUVV
RSA9ICdpbl9xdWV1ZSc7Cit2YXIgU1RBVEVfVE9fRElTUExBWV9TVEFURSA9IHt9OworU1RBVEVf
VE9fRElTUExBWV9TVEFURVtTVEFURV9ORUVEU19SRUJBU0VMSU5FXSA9ICdOZWVkcyByZWJhc2Vs
aW5lJzsKK1NUQVRFX1RPX0RJU1BMQVlfU1RBVEVbU1RBVEVfUkVCQVNFTElORV9GQUlMRURdID0g
J1JlYmFzZWxpbmUgZmFpbGVkJzsKK1NUQVRFX1RPX0RJU1BMQVlfU1RBVEVbU1RBVEVfUkVCQVNF
TElORV9TVUNDRUVERURdID0gJ1JlYmFzZWxpbmUgc3VjY2VlZGVkJzsKK1NUQVRFX1RPX0RJU1BM
QVlfU1RBVEVbU1RBVEVfSU5fUVVFVUVdID0gJ0luIHF1ZXVlJzsKKwordmFyIHJlc3VsdHM7Cit2
YXIgdGVzdHNCeUZhaWx1cmVUeXBlID0ge307Cit2YXIgdGVzdHNCeURpcmVjdG9yeSA9IHt9Owor
dmFyIHNlbGVjdGVkVGVzdHMgPSBbXTsKK3ZhciBpblByb2dyZXNzUmViYXNlbGluZUNvdW50ID0g
MDsKKworZnVuY3Rpb24gJChpZCkgeworICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
aWQpOworfQorCitmdW5jdGlvbiBtYWluKCkgeworICAkKCdmYWlsdXJlLXR5cGUtc2VsZWN0b3In
KS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBzZWxlY3RGYWlsdXJlVHlwZSk7CisgICQoJ2Rp
cmVjdG9yeS1zZWxlY3RvcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHNlbGVjdERpcmVj
dG9yeSk7CisgICQoJ3Rlc3Qtc2VsZWN0b3InKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBz
ZWxlY3RUZXN0KTsKKyAgJCgnbmV4dC10ZXN0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBu
ZXh0VGVzdCk7CisgICQoJ3ByZXZpb3VzLXRlc3QnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycs
IHByZXZpb3VzVGVzdCk7CisKKyAgJCgnYWRkLXRvLXJlYmFzZWxpbmUtcXVldWUnKS5hZGRFdmVu
dExpc3RlbmVyKCdjbGljaycsIGFkZFRvUmViYXNlbGluZVF1ZXVlKTsKKyAgJCgncXVldWUtc2Vs
ZWN0JykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlU3RhdGUpOworICAkKCdyZW1v
dmUtcXVldWUtc2VsZWN0aW9uJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVTZWxl
Y3Rpb25Gcm9tUmViYXNlbGluZVF1ZXVlKTsKKyAgJCgncmViYXNlbGluZS1xdWV1ZScpLmFkZEV2
ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmViYXNlbGluZVF1ZXVlKTsKKworICAkKCdleHBlY3RlZC1p
bWFnZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd0xvdXBlKTsKKyAgJCgnYWN0dWFs
LWltYWdlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzaG93TG91cGUpOworICAkKCdkaWZm
LWNhbnZhcycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd0xvdXBlKTsKKyAgJCgnbG91
cGUtY2xvc2UnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhpZGVMb3VwZSk7CisgICQoJ3Rv
Z2dsZS1sb2cnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge3RvZ2dsZSgn
bG9nJyl9KTsKKyAgJCgndG9nZ2xlLXF1ZXVlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBm
dW5jdGlvbigpIHt0b2dnbGUoJ3F1ZXVlJyl9KTsKKworICBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAoZXZlbnQuYWx0S2V5IHx8
IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkgeworICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGV2ZW50LmtleUlkZW50aWZpZXIp
IHsKKyAgICAgIGNhc2UgJ0xlZnQnOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBwcmV2aW91c1Rl
c3QoKTsgYnJlYWs7CisgICAgICBjYXNlICdSaWdodCc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7
IG5leHRUZXN0KCk7IGJyZWFrOworICAgICAgY2FzZSAnVSswMDUxJzogYWRkVG9SZWJhc2VsaW5l
UXVldWUoKTsgYnJlYWs7CisgICAgICBjYXNlICdVKzAwNTInOiByZWJhc2VsaW5lUXVldWUoKTsg
YnJlYWs7CisgICAgfQorICB9KTsKKyAgCisgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKKyAgeGhyLm9wZW4oJ0dFVCcsICcvcmVzdWx0cy5qc29uJyk7CisgIHhoci5hZGRFdmVudExp
c3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7CisgICAgcmVzdWx0cyA9IEpTT04ucGFyc2UoeGhy
LnJlc3BvbnNlVGV4dCk7CisgICAgZGlzcGxheVJlc3VsdHMoKTsgIAorICB9KTsKKyAgeGhyLnNl
bmQoKTsKK30KKworZnVuY3Rpb24gZGlzcGxheVJlc3VsdHMoKSB7CisgIHZhciBmYWlsdXJlVHlw
ZVNlbGVjdG9yID0gJCgnZmFpbHVyZS10eXBlLXNlbGVjdG9yJyk7CisgIHZhciBmYWlsdXJlVHlw
ZXMgPSBbXTsKKyAgCisgIGZvciAodmFyIHRlc3ROYW1lIGluIHJlc3VsdHMudGVzdHMpIHsKKyAg
ICB2YXIgdGVzdCA9IHJlc3VsdHMudGVzdHNbdGVzdE5hbWVdOworICAgIGlmICh0ZXN0LmFjdHVh
bCA9PSAnUEFTUycpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICB2YXIgZmFpbHVyZVR5
cGUgPSB0ZXN0LmFjdHVhbCArICcgKGV4cGVjdGVkICcgKyB0ZXN0LmV4cGVjdGVkICsgJyknOwor
ICAgIGlmICghKGZhaWx1cmVUeXBlIGluIHRlc3RzQnlGYWlsdXJlVHlwZSkpIHsKKyAgICAgIHRl
c3RzQnlGYWlsdXJlVHlwZVtmYWlsdXJlVHlwZV0gPSBbXTsKKyAgICAgIGZhaWx1cmVUeXBlcy5w
dXNoKGZhaWx1cmVUeXBlKTsKKyAgICB9CisgICAgdGVzdHNCeUZhaWx1cmVUeXBlW2ZhaWx1cmVU
eXBlXS5wdXNoKHRlc3ROYW1lKTsKKyAgfQorICAKKyAgZmFpbHVyZVR5cGVzLnNvcnQoZnVuY3Rp
b24oYSwgYikgeworICAgIHJldHVybiB0ZXN0c0J5RmFpbHVyZVR5cGVbYl0ubGVuZ3RoIC0gdGVz
dHNCeUZhaWx1cmVUeXBlW2FdLmxlbmd0aDsKKyAgfSk7CisgIAorICBmb3IgKHZhciBpID0gMCwg
ZmFpbHVyZVR5cGU7IGZhaWx1cmVUeXBlID0gZmFpbHVyZVR5cGVzW2ldOyBpKyspIHsKKyAgICB2
YXIgZmFpbHVyZVR5cGVPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsK
KyAgICBmYWlsdXJlVHlwZU9wdGlvbi52YWx1ZSA9IGZhaWx1cmVUeXBlOworICAgIGZhaWx1cmVU
eXBlT3B0aW9uLnRleHRDb250ZW50ID0gZmFpbHVyZVR5cGUgKyAnIC0gJyArIHRlc3RzQnlGYWls
dXJlVHlwZVtmYWlsdXJlVHlwZV0ubGVuZ3RoICsgJyB0ZXN0cyc7CisgICAgZmFpbHVyZVR5cGVT
ZWxlY3Rvci5hcHBlbmRDaGlsZChmYWlsdXJlVHlwZU9wdGlvbik7CisgIH0KKyAgCisgIHNlbGVj
dEZhaWx1cmVUeXBlKCk7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdEZhaWx1cmVUeXBlKCkgeworICB2
YXIgc2VsZWN0ZWRGYWlsdXJlVHlwZSA9IGdldFNlbGVjdFZhbHVlKCdmYWlsdXJlLXR5cGUtc2Vs
ZWN0b3InKTsKKyAgdmFyIHRlc3RzID0gdGVzdHNCeUZhaWx1cmVUeXBlW3NlbGVjdGVkRmFpbHVy
ZVR5cGVdOworICAKKyAgLy8gSW5jbHVkZSBhIGFwZWNpYWwgb3B0aW9uIGZvciBhbGwgdGVzdHMK
KyAgdGVzdHNCeURpcmVjdG9yeSA9IHsnW2FsbF0nOiB0ZXN0c307CisgIHZhciBkaXNwbGF5RGly
ZWN0b3J5TmFtZXNCeURpcmVjdG9yeSA9IHsnW2FsbF0nOiAnYWxsJ307CisgIHZhciBkaXJlY3Rv
cmllcyA9IFsnW2FsbF0nXTsKKyAgCisgIGZvciAodmFyIGkgPSAwLCB0ZXN0OyB0ZXN0ID0gdGVz
dHNbaV07IGkrKykgeworICAgIHZhciBwYXRoUGllY2VzID0gdGVzdC5zcGxpdCgnLycpOworICAg
IHZhciBkaXJlY3RvcnkgPSAnJzsKKyAgICAKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhdGhQ
aWVjZXMubGVuZ3RoIC0gMTsgaisrKSB7CisgICAgICBkaXJlY3RvcnkgKz0gcGF0aFBpZWNlc1tq
XSArICcvJzsKKyAgICAgIGlmICghKGRpcmVjdG9yeSBpbiB0ZXN0c0J5RGlyZWN0b3J5KSkgewor
ICAgICAgICB0ZXN0c0J5RGlyZWN0b3J5W2RpcmVjdG9yeV0gPSBbXTsKKyAgICAgICAgdmFyIGRp
c3BsYXlEaXJlY3RvcnlOYW1lID0gbmV3IEFycmF5KGogKiA2KS5qb2luKCcmbmJzcDsnKSArIHBh
dGhQaWVjZXNbal07CisgICAgICAgIGRpc3BsYXlEaXJlY3RvcnlOYW1lc0J5RGlyZWN0b3J5W2Rp
cmVjdG9yeV0gPSBkaXNwbGF5RGlyZWN0b3J5TmFtZTsKKyAgICAgICAgZGlyZWN0b3JpZXMucHVz
aChkaXJlY3RvcnkpOworICAgICAgfQorICAgICAgCisgICAgICB0ZXN0c0J5RGlyZWN0b3J5W2Rp
cmVjdG9yeV0ucHVzaCh0ZXN0KTsKKyAgICB9CisgIH0KKyAgCisgIGRpcmVjdG9yaWVzLnNvcnQo
KTsKKworICB2YXIgZGlyZWN0b3J5U2VsZWN0b3IgPSAkKCdkaXJlY3Rvcnktc2VsZWN0b3InKTsg
IAorICBkaXJlY3RvcnlTZWxlY3Rvci5pbm5lckhUTUwgPSAnJzsKKyAgCisgIGZvciAodmFyIGkg
PSAwLCBkaXJlY3Rvcnk7IGRpcmVjdG9yeSA9IGRpcmVjdG9yaWVzW2ldOyBpKyspIHsKKyAgICB2
YXIgZGlyZWN0b3J5T3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7Cisg
ICAgZGlyZWN0b3J5T3B0aW9uLnZhbHVlID0gZGlyZWN0b3J5OworICAgIGRpcmVjdG9yeU9wdGlv
bi5pbm5lckhUTUwgPQorICAgICAgICBkaXNwbGF5RGlyZWN0b3J5TmFtZXNCeURpcmVjdG9yeVtk
aXJlY3RvcnldICsgJyAtICcgKworICAgICAgICB0ZXN0c0J5RGlyZWN0b3J5W2RpcmVjdG9yeV0u
bGVuZ3RoICsgJyB0ZXN0cyc7CisgICAgZGlyZWN0b3J5U2VsZWN0b3IuYXBwZW5kQ2hpbGQoZGly
ZWN0b3J5T3B0aW9uKTsgICAgCisgIH0KKyAgCisgIHNlbGVjdERpcmVjdG9yeSgpOworfQorCitm
dW5jdGlvbiBzZWxlY3REaXJlY3RvcnkoKSB7CisgIHZhciBzZWxlY3RlZERpcmVjdG9yeSA9IGdl
dFNlbGVjdFZhbHVlKCdkaXJlY3Rvcnktc2VsZWN0b3InKTsKKyAgc2VsZWN0ZWRUZXN0cyA9IHRl
c3RzQnlEaXJlY3Rvcnlbc2VsZWN0ZWREaXJlY3RvcnldOworCisgIHNlbGVjdGVkVGVzdHMuc29y
dCgpOworCisgIHZhciB0ZXN0U2VsZWN0b3IgPSAkKCd0ZXN0LXNlbGVjdG9yJyk7CisgIHRlc3RT
ZWxlY3Rvci5pbm5lckhUTUwgPSAnJzsKKyAgZm9yICh2YXIgaSA9IDAsIHRlc3Q7IHRlc3QgPSBz
ZWxlY3RlZFRlc3RzW2ldOyBpKyspIHsKKyAgICB2YXIgdGVzdE9wdGlvbiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ29wdGlvbicpOworICAgIHRlc3RPcHRpb24udmFsdWUgPSB0ZXN0OworICAg
IHRlc3RPcHRpb24udGV4dENvbnRlbnQgPSB0ZXN0OworICAgIHRlc3RTZWxlY3Rvci5hcHBlbmRD
aGlsZCh0ZXN0T3B0aW9uKTsgICAgCisgIH0KKyAgCisgIHNlbGVjdFRlc3QoKTsKK30KKworZnVu
Y3Rpb24gZ2V0U2VsZWN0VmFsdWUoaWQpIHsKKyAgdmFyIHNlbGVjdCA9ICQoaWQpOworICByZXR1
cm4gc2VsZWN0Lm9wdGlvbnNbc2VsZWN0LnNlbGVjdGVkSW5kZXhdLnZhbHVlOworfQorCitmdW5j
dGlvbiBnZXRTZWxlY3RlZFRlc3QoKSB7CisgIHJldHVybiBnZXRTZWxlY3RWYWx1ZSgndGVzdC1z
ZWxlY3RvcicpOworfQorCitmdW5jdGlvbiBwcmVmZXRjaCgpIHsKKyAgdmFyIHRlc3RTZWxlY3Rv
ciA9ICQoJ3Rlc3Qtc2VsZWN0b3InKTsKKyAgaWYgKHRlc3RTZWxlY3Rvci5zZWxlY3RlZEluZGV4
ID09IHRlc3RTZWxlY3Rvci5vcHRpb25zLmxlbmd0aCAtIDEpIHsKKyAgICByZXR1cm47CisgIH0K
KyAgdmFyIG5leHRUZXN0ID0gdGVzdFNlbGVjdG9yLm9wdGlvbnNbdGVzdFNlbGVjdG9yLnNlbGVj
dGVkSW5kZXggKyAxXS52YWx1ZTsKKyAgaWYgKHJlc3VsdHMudGVzdHNbbmV4dFRlc3RdLmFjdHVh
bC5pbmRleE9mKCdJTUFHRScpICE9IC0xKSB7CisgICAgbmV3IEltYWdlKCkuc3JjID0gJy90ZXN0
X3Jlc3VsdD90ZXN0PScgKyBuZXh0VGVzdCArICcmbW9kZT1leHBlY3RlZC1pbWFnZSc7CisgICAg
bmV3IEltYWdlKCkuc3JjID0gJy90ZXN0X3Jlc3VsdD90ZXN0PScgKyBuZXh0VGVzdCArICcmbW9k
ZT1hY3R1YWwtaW1hZ2UnOyAgICAKKyAgfQorfQorCitmdW5jdGlvbiBzZWxlY3RUZXN0KCkgewor
ICB2YXIgc2VsZWN0ZWRUZXN0ID0gZ2V0U2VsZWN0ZWRUZXN0KCk7CisgIAorICBpZiAocmVzdWx0
cy50ZXN0c1tzZWxlY3RlZFRlc3RdLmFjdHVhbC5pbmRleE9mKCdJTUFHRScpICE9IC0xKSB7Cisg
ICAgJCgnaW1hZ2Utb3V0cHV0cycpLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICBkaXNwbGF5SW1h
Z2VSZXN1bHRzKHNlbGVjdGVkVGVzdCk7CisgIH0gZWxzZSB7CisgICAgJCgnaW1hZ2Utb3V0cHV0
cycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7ICAKKyAgfQorCisgIGlmIChyZXN1bHRzLnRlc3Rz
W3NlbGVjdGVkVGVzdF0uYWN0dWFsLmluZGV4T2YoJ1RFWFQnKSAhPSAtMSkgeworICAgICQoJ3Rl
eHQtb3V0cHV0cycpLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICBkaXNwbGF5VGV4dFJlc3VsdHMo
c2VsZWN0ZWRUZXN0KTsKKyAgfSBlbHNlIHsKKyAgICAkKCd0ZXh0LW91dHB1dHMnKS5zdHlsZS5k
aXNwbGF5ID0gJ25vbmUnOyAgCisgIH0KKyAgCisgIHZhciBjdXJyZW50QmFzZWxpbmVzID0gcmVz
dWx0cy50ZXN0c1tzZWxlY3RlZFRlc3RdLmJhc2VsaW5lczsKKyAgJCgnY3VycmVudC1iYXNlbGlu
ZXMnKS50ZXh0Q29udGVudCA9IGN1cnJlbnRCYXNlbGluZXMgPyBjdXJyZW50QmFzZWxpbmVzLmpv
aW4oJywgJykgOiAnJzsKKyAgCisgIHVwZGF0ZVN0YXRlKCk7CisgIGhpZGVMb3VwZSgpOworICAK
KyAgcHJlZmV0Y2goKTsKK30KKworZnVuY3Rpb24gdXBkYXRlU3RhdGUoKSB7CisgIHZhciB0ZXN0
SW5kZXggPSAkKCd0ZXN0LXNlbGVjdG9yJykuc2VsZWN0ZWRJbmRleDsKKyAgdmFyIHRlc3ROYW1l
ID0gZ2V0U2VsZWN0ZWRUZXN0KCk7CisgIHZhciB0ZXN0Q291bnQgPSBzZWxlY3RlZFRlc3RzLmxl
bmd0aAorICAkKCd0ZXN0LWluZGV4JykudGV4dENvbnRlbnQgPSB0ZXN0SW5kZXggKyAxOworICAk
KCd0ZXN0LWNvdW50JykudGV4dENvbnRlbnQgPSB0ZXN0Q291bnQ7CisgIAorICAkKCduZXh0LXRl
c3QnKS5kaXNhYmxlZCA9IHRlc3RJbmRleCA9PSB0ZXN0Q291bnQgLSAxOworICAkKCdwcmV2aW91
cy10ZXN0JykuZGlzYWJsZWQgPSB0ZXN0SW5kZXggPT0gMDsKKyAgCisgIHZhciBzdGF0ZSA9IHJl
c3VsdHMudGVzdHNbdGVzdE5hbWVdLnN0YXRlOworICAkKCdhZGQtdG8tcmViYXNlbGluZS1xdWV1
ZScpLmRpc2FibGVkID0gc3RhdGUgIT0gU1RBVEVfTkVFRFNfUkVCQVNFTElORTsKKyAgCisgICQo
J3N0YXRlJykuY2xhc3NOYW1lID0gc3RhdGU7CisgICQoJ3N0YXRlJykuaW5uZXJIVE1MID0gU1RB
VEVfVE9fRElTUExBWV9TVEFURVtzdGF0ZV07CisgIAorICB2YXIgcXVldWVTZWxlY3QgPSAkKCdx
dWV1ZS1zZWxlY3QnKTsKKyAgdmFyIHF1ZXVlTGVuZ3RoID0gcXVldWVTZWxlY3Qub3B0aW9ucy5s
ZW5ndGg7CisgIHZhciByZWJhc2VsaW5lUXVldWUgPSAkKCdyZWJhc2VsaW5lLXF1ZXVlJyk7Cisg
IHZhciBxdWV1ZVRvZ2dsZSA9ICQoJ3RvZ2dsZS1xdWV1ZScpOworICBpZiAoaW5Qcm9ncmVzc1Jl
YmFzZWxpbmVDb3VudCA+IDApIHsKKyAgICByZWJhc2VsaW5lUXVldWUuZGlzYWJsZWQgPSB0cnVl
OworICAgIHJlYmFzZWxpbmVRdWV1ZS50ZXh0Q29udGVudCA9ICdSZWJhc2VsaW5lIGluIHByb2dy
ZXNzICgnICsgaW5Qcm9ncmVzc1JlYmFzZWxpbmVDb3VudCArICcgdGVzdHMgbGVmdCknOworICB9
IGVsc2UgaWYgKHF1ZXVlTGVuZ3RoID09IDApIHsKKyAgICByZWJhc2VsaW5lUXVldWUuZGlzYWJs
ZWQgPSB0cnVlOworICAgIHJlYmFzZWxpbmVRdWV1ZS50ZXh0Q29udGVudCA9ICdSZWJhc2VsaW5l
IHF1ZXVlJzsKKyAgICBxdWV1ZVRvZ2dsZS50ZXh0Q29udGVudCA9ICdRdWV1ZSc7CisgIH0gZWxz
ZSB7CisgICAgcmViYXNlbGluZVF1ZXVlLmRpc2FibGVkID0gZmFsc2U7CisgICAgcmViYXNlbGlu
ZVF1ZXVlLnRleHRDb250ZW50ID0gJ1JlYmFzZWxpbmUgcXVldWUgKCcgKyBxdWV1ZUxlbmd0aCAr
ICcgdGVzdHMpJzsKKyAgICBxdWV1ZVRvZ2dsZS50ZXh0Q29udGVudCA9ICdRdWV1ZSAoJyArIHF1
ZXVlTGVuZ3RoICsgJyB0ZXN0cyknOworICB9CisgICQoJ3JlbW92ZS1xdWV1ZS1zZWxlY3Rpb24n
KS5kaXNhYmxlZCA9IHF1ZXVlU2VsZWN0LnNlbGVjdGVkSW5kZXggPT0gLTE7Cit9CisKK3ZhciBj
dXJyZW50RXhwZWN0ZWRJbWFnZVRlc3Q7Cit2YXIgY3VycmVudEFjdHVhbEltYWdlVGVzdDsKKwor
ZnVuY3Rpb24gZGlzcGxheUltYWdlUmVzdWx0cyh0ZXN0TmFtZSkgeworICAkKCdleHBlY3RlZC1p
bWFnZScpLmNsYXNzTmFtZSA9ICdsb2FkaW5nJzsKKyAgJCgnZXhwZWN0ZWQtaW1hZ2UnKS5zcmMg
PSAnL3Rlc3RfcmVzdWx0P3Rlc3Q9JyArIHRlc3ROYW1lICsgJyZtb2RlPWV4cGVjdGVkLWltYWdl
JzsKKyAgJCgnZXhwZWN0ZWQtaW1hZ2UnKS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAkKCdl
eHBlY3RlZC1pbWFnZScpLmNsYXNzTmFtZSA9ICcnOworICAgIGN1cnJlbnRFeHBlY3RlZEltYWdl
VGVzdCA9IHRlc3ROYW1lOworICAgIHVwZGF0ZURpZmYoKTsKKyAgfTsKKyAgJCgnYWN0dWFsLWlt
YWdlJykuY2xhc3NOYW1lID0gJ2xvYWRpbmcnOworICAkKCdhY3R1YWwtaW1hZ2UnKS5zcmMgPSAn
L3Rlc3RfcmVzdWx0P3Rlc3Q9JyArIHRlc3ROYW1lICsgJyZtb2RlPWFjdHVhbC1pbWFnZSc7Cisg
ICQoJ2FjdHVhbC1pbWFnZScpLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICQoJ2FjdHVhbC1p
bWFnZScpLmNsYXNzTmFtZSA9ICcnOworICAgIGN1cnJlbnRBY3R1YWxJbWFnZVRlc3QgPSB0ZXN0
TmFtZTsKKyAgICB1cGRhdGVEaWZmKCk7CisgIH07CisgIAorICAkKCdkaWZmLWNhbnZhcycpLmNs
YXNzTmFtZSA9ICdsb2FkaW5nJzsKK30KKwordmFyIGV4cGVjdGVkQ2FudmFzOwordmFyIGV4cGVj
dGVkQ2FudmFzQ29udGV4dDsKK3ZhciBhY3R1YWxDYW52YXM7Cit2YXIgYWN0dWFsQ2FudmFzQ29u
dGV4dDsKKworZnVuY3Rpb24gdXBkYXRlRGlmZigpIHsKKyAgaWYgKGN1cnJlbnRFeHBlY3RlZElt
YWdlVGVzdCAhPSBjdXJyZW50QWN0dWFsSW1hZ2VUZXN0KSByZXR1cm47CisKKyAgdmFyIGV4cGVj
dGVkSW1hZ2UgPSAkKCdleHBlY3RlZC1pbWFnZScpOworICB2YXIgYWN0dWFsSW1hZ2UgPSAkKCdh
Y3R1YWwtaW1hZ2UnKTsKKyAKKyAgaWYgKCFleHBlY3RlZENhbnZhcykgeworICAgIGV4cGVjdGVk
Q2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CisgICAgZXhwZWN0ZWRD
YW52YXMud2lkdGggPSBleHBlY3RlZEltYWdlLndpZHRoOworICAgIGV4cGVjdGVkQ2FudmFzLmhl
aWdodCA9IGV4cGVjdGVkSW1hZ2UuaGVpZ2h0OworICAgIGV4cGVjdGVkQ2FudmFzQ29udGV4dCA9
IGV4cGVjdGVkQ2FudmFzLmdldENvbnRleHQoJzJkJyk7CisgICAgCisgICAgYWN0dWFsQ2FudmFz
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CisgICAgYWN0dWFsQ2FudmFzLndp
ZHRoID0gYWN0dWFsSW1hZ2Uud2lkdGg7CisgICAgYWN0dWFsQ2FudmFzLmhlaWdodCA9IGFjdHVh
bEltYWdlLmhlaWdodDsKKyAgICBhY3R1YWxDYW52YXNDb250ZXh0ID0gYWN0dWFsQ2FudmFzLmdl
dENvbnRleHQoJzJkJyk7CisgIH0KKyAgCisgIGV4cGVjdGVkQ2FudmFzQ29udGV4dC5maWxsU3R5
bGUgPSAncmdiYSgyNTUsIDI1NSwgMjU1LCAxKSc7CisgIGV4cGVjdGVkQ2FudmFzQ29udGV4dC5m
aWxsUmVjdCgKKyAgICAgIDAsIDAsIGV4cGVjdGVkSW1hZ2Uud2lkdGgsIGV4cGVjdGVkSW1hZ2Uu
aGVpZ2h0KTsKKworICBhY3R1YWxDYW52YXNDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwg
MjU1LCAyNTUsIDEpJzsKKyAgYWN0dWFsQ2FudmFzQ29udGV4dC5maWxsUmVjdCgwLCAwLCBhY3R1
YWxJbWFnZS53aWR0aCwgYWN0dWFsSW1hZ2UuaGVpZ2h0KTsKKyAgCisgIGV4cGVjdGVkQ2FudmFz
Q29udGV4dC5kcmF3SW1hZ2UoZXhwZWN0ZWRJbWFnZSwgMCwgMCk7CisgIHZhciBleHBlY3RlZElt
YWdlRGF0YSA9IGV4cGVjdGVkQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoCisgICAgICAwLCAw
LCBleHBlY3RlZEltYWdlLndpZHRoLCBleHBlY3RlZEltYWdlLmhlaWdodCk7CisKKyAgYWN0dWFs
Q2FudmFzQ29udGV4dC5kcmF3SW1hZ2UoYWN0dWFsSW1hZ2UsIDAsIDApOworICB2YXIgYWN0dWFs
SW1hZ2VEYXRhID0gYWN0dWFsQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoCisgICAgICAwLCAw
LCBhY3R1YWxJbWFnZS53aWR0aCwgYWN0dWFsSW1hZ2UuaGVpZ2h0KTsKKyAgICAgIAorICB2YXIg
ZGlmZkNhbnZhcyA9ICQoJ2RpZmYtY2FudmFzJyk7CisgIHZhciBkaWZmQ2FudmFzQ29udGV4dCA9
IGRpZmZDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgdmFyIGRpZmZJbWFnZURhdGEgPQorICAg
ICAgZGlmZkNhbnZhc0NvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKGRpZmZDYW52YXMud2lkdGgsIGRp
ZmZDYW52YXMuaGVpZ2h0KTsKKworICB2YXIgZXhwZWN0ZWRXaWR0aCA9IGV4cGVjdGVkSW1hZ2Uu
d2lkdGg7CisgIHZhciBleHBlY3RlZEhlaWdodCA9IGV4cGVjdGVkSW1hZ2UuaGVpZ2h0OworICB2
YXIgZXhwZWN0ZWRQaXhlbHMgPSBleHBlY3RlZEltYWdlRGF0YS5kYXRhOworICAKKyAgdmFyIGFj
dHVhbFdpZHRoID0gYWN0dWFsSW1hZ2Uud2lkdGg7CisgIHZhciBhY3R1YWxIZWlnaHQgPSBhY3R1
YWxJbWFnZS5oZWlnaHQ7CisgIHZhciBhY3R1YWxQaXhlbHMgPSBhY3R1YWxJbWFnZURhdGEuZGF0
YTsKKworICB2YXIgZGlmZldpZHRoID0gZGlmZkltYWdlRGF0YS53aWR0aDsKKyAgdmFyIGRpZmZI
ZWlnaHQgPSBkaWZmSW1hZ2VEYXRhLmhlaWdodDsKKyAgdmFyIGRpZmZQaXhlbHMgPSBkaWZmSW1h
Z2VEYXRhLmRhdGE7CisgIAorICBmb3IgKHZhciB4ID0gMDsgeCA8IGV4cGVjdGVkV2lkdGg7IHgr
KykgeworICAgIGZvciAodmFyIHkgPSAwOyB5IDwgZXhwZWN0ZWRIZWlnaHQ7IHkrKykgeworICAg
ICAgdmFyIGlzRGlmZmVyZW50ID0gZmFsc2U7CisgICAgICB2YXIgZXhwZWN0ZWRPZmZzZXQgPSAo
eSAqIGV4cGVjdGVkV2lkdGggKyB4KSAqIDQ7CisgICAgICB2YXIgYWN0dWFsT2Zmc2V0ID0gKHkg
KiBhY3R1YWxXaWR0aCArIHgpICogNDsKKyAgICAgIHZhciBkaWZmT2Zmc2V0ID0gKHkgKiBkaWZm
V2lkdGggKyB4KSAqIDQ7CisgICAgICBpZiAoZXhwZWN0ZWRQaXhlbHNbZXhwZWN0ZWRPZmZzZXRd
ICE9IGFjdHVhbFBpeGVsc1thY3R1YWxPZmZzZXRdIHx8CisgICAgICAgICAgZXhwZWN0ZWRQaXhl
bHNbZXhwZWN0ZWRPZmZzZXQgKyAxXSAhPSBhY3R1YWxQaXhlbHNbYWN0dWFsT2Zmc2V0ICsgMV0g
fHwKKyAgICAgICAgICBleHBlY3RlZFBpeGVsc1tleHBlY3RlZE9mZnNldCArIDJdICE9IGFjdHVh
bFBpeGVsc1thY3R1YWxPZmZzZXQgKyAyXSB8fAorICAgICAgICAgIGV4cGVjdGVkUGl4ZWxzW2V4
cGVjdGVkT2Zmc2V0ICsgM10gIT0gYWN0dWFsUGl4ZWxzW2FjdHVhbE9mZnNldCArIDNdKSB7Cisg
ICAgICAgIGRpZmZQaXhlbHNbZGlmZk9mZnNldF0gPSAyNTU7CisgICAgICAgIGRpZmZQaXhlbHNb
ZGlmZk9mZnNldCArIDFdID0gMDsKKyAgICAgICAgZGlmZlBpeGVsc1tkaWZmT2Zmc2V0ICsgMl0g
PSAwOworICAgICAgICBkaWZmUGl4ZWxzW2RpZmZPZmZzZXQgKyAzXSA9IDI1NTsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIGRpZmZQaXhlbHNbZGlmZk9mZnNldF0gPSBleHBlY3RlZFBpeGVsc1tl
eHBlY3RlZE9mZnNldF07CisgICAgICAgIGRpZmZQaXhlbHNbZGlmZk9mZnNldCArIDFdID0gZXhw
ZWN0ZWRQaXhlbHNbZXhwZWN0ZWRPZmZzZXQgKyAxXTsKKyAgICAgICAgZGlmZlBpeGVsc1tkaWZm
T2Zmc2V0ICsgMl0gPSBleHBlY3RlZFBpeGVsc1tleHBlY3RlZE9mZnNldCArIDJdOworICAgICAg
ICBkaWZmUGl4ZWxzW2RpZmZPZmZzZXQgKyAzXSA9IDMyOworICAgICAgfQorICAgIH0KKyAgfQor
ICAKKyAgZGlmZkNhbnZhc0NvbnRleHQucHV0SW1hZ2VEYXRhKAorICAgICAgZGlmZkltYWdlRGF0
YSwKKyAgICAgIDAsIDAsCisgICAgICAwLCAwLAorICAgICAgZGlmZkltYWdlRGF0YS53aWR0aCwg
ZGlmZkltYWdlRGF0YS5oZWlnaHQpOworICBkaWZmQ2FudmFzLmNsYXNzTmFtZSA9ICcnOworfQor
CitmdW5jdGlvbiBkaXNwbGF5VGV4dFJlc3VsdHModGVzdE5hbWUpIHsKKyAgZnVuY3Rpb24gbG9h
ZFRleHRSZXN1bHQodHlwZSkgeworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
KyAgICB4aHIub3BlbignR0VUJywgJy90ZXN0X3Jlc3VsdD90ZXN0PScgKyB0ZXN0TmFtZSArICcm
bW9kZT0nICsgdHlwZSk7CisgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlv
bigpIHsKKyAgICAgICQodHlwZSkudGV4dENvbnRlbnQgPSB4aHIucmVzcG9uc2VUZXh0OworICAg
IH0pOworICAgIHhoci5zZW5kKCk7ICAgIAorICB9CisgIAorICBsb2FkVGV4dFJlc3VsdCgnZXhw
ZWN0ZWQtdGV4dCcpOworICBsb2FkVGV4dFJlc3VsdCgnYWN0dWFsLXRleHQnKTsKKyAgbG9hZFRl
eHRSZXN1bHQoJ2RpZmYtdGV4dCcpOworfQorCitmdW5jdGlvbiBuZXh0VGVzdCgpIHsKKyAgaWYg
KCQoJ3Rlc3Qtc2VsZWN0b3InKS5zZWxlY3RlZEluZGV4ID09IHNlbGVjdGVkVGVzdHMubGVuZ3Ro
IC0gMSkgeworICAgIHJldHVybjsKKyAgfQorICAkKCd0ZXN0LXNlbGVjdG9yJykuc2VsZWN0ZWRJ
bmRleCsrOworICBzZWxlY3RUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHByZXZpb3VzVGVzdCgpIHsK
KyAgaWYgKCQoJ3Rlc3Qtc2VsZWN0b3InKS5zZWxlY3RlZEluZGV4ID09IDApIHsKKyAgICByZXR1
cm47CisgIH0KKyAgJCgndGVzdC1zZWxlY3RvcicpLnNlbGVjdGVkSW5kZXgtLTsKKyAgc2VsZWN0
VGVzdCgpOworfQorCitmdW5jdGlvbiBzaG93TG91cGUoZXZlbnQpIHsKKyAgdmFyIGltYWdlUmVj
dCA9IGV2ZW50LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgdmFyIHggPSBldmVu
dC5jbGllbnRYIC0gaW1hZ2VSZWN0LmxlZnQ7CisgIHZhciB5ID0gZXZlbnQuY2xpZW50WSAtIGlt
YWdlUmVjdC50b3A7CisgIAorICBmaWxsTG91cGVGcm9tSW1hZ2UoeCwgeSwgJ2V4cGVjdGVkJywg
JCgnZXhwZWN0ZWQtaW1hZ2UnKSk7CisgIGZpbGxMb3VwZUZyb21JbWFnZSh4LCB5LCAnYWN0dWFs
JywgJCgnYWN0dWFsLWltYWdlJykpOworICBmaWxsTG91cGVGcm9tQ2FudmFzKHgsIHksICdkaWZm
JywgJCgnZGlmZi1jYW52YXMnKSk7CisgIAorICAkKCdsb3VwZScpLnN0eWxlLmRpc3BsYXkgPSAn
JzsKK30KKwordmFyIExPVVBFX01BR05JRklDQVRJT05fRkFDVE9SID0gMTA7CisKK2Z1bmN0aW9u
IGZpbGxMb3VwZUZyb21JbWFnZSh4LCB5LCB0eXBlKSB7CisgIHZhciBzb3VyY2VJbWFnZSA9ICQo
dHlwZSArICctaW1hZ2UnKTsgIAorCisgIHZhciB0ZW1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnY2FudmFzJyk7CisgIHRlbXBDYW52YXMud2lkdGggPSBzb3VyY2VJbWFnZS53aWR0
aDsKKyAgdGVtcENhbnZhcy5oZWlnaHQgPSBzb3VyY2VJbWFnZS5oZWlnaHQ7CisgIHZhciB0ZW1w
Q29udGV4dCA9IHRlbXBDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgCisgIHRlbXBDb250ZXh0
LmRyYXdJbWFnZShzb3VyY2VJbWFnZSwgMCwgMCk7CisgIAorICBmaWxsTG91cGVGcm9tQ2FudmFz
KHgsIHksIHR5cGUsIHRlbXBDYW52YXMpOworfQorCitmdW5jdGlvbiBmaWxsTG91cGVGcm9tQ2Fu
dmFzKHgsIHksIHR5cGUsIGNhbnZhcykgeworICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250
ZXh0KCcyZCcpOworICB2YXIgc291cmNlSW1hZ2VEYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEo
MCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKKworICB2YXIgdGFyZ2V0Q2FudmFz
ID0gJCh0eXBlICsgJy1sb3VwZScpOworICB2YXIgdGFyZ2V0Q29udGV4dCA9IHRhcmdldENhbnZh
cy5nZXRDb250ZXh0KCcyZCcpOworICB0YXJnZXRDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1
NSwgMjU1LCAyNTUsIDEpJzsKKyAgdGFyZ2V0Q29udGV4dC5maWxsUmVjdCgwLCAwLCB0YXJnZXRD
YW52YXMud2lkdGgsIHRhcmdldENhbnZhcy5oZWlnaHQpOyAgCisgIAorICB2YXIgc291cmNlWE9m
ZnNldCA9ICh0YXJnZXRDYW52YXMud2lkdGgvTE9VUEVfTUFHTklGSUNBVElPTl9GQUNUT1IgLSAx
KS8yOworICB2YXIgc291cmNlWU9mZnNldCA9ICh0YXJnZXRDYW52YXMuaGVpZ2h0L0xPVVBFX01B
R05JRklDQVRJT05fRkFDVE9SIC0gMSkvMjsKKworICBmdW5jdGlvbiByZWFkUGl4ZWxDb21wb25l
bnQoeCwgeSwgY29tcG9uZW50KSB7CisgICAgcmV0dXJuIHNvdXJjZUltYWdlRGF0YS5kYXRhWyh5
ICogc291cmNlSW1hZ2VEYXRhLndpZHRoICsgeCkgKiA0ICsgY29tcG9uZW50XTsKKyAgfQorICAK
KyAgZm9yICh2YXIgaSA9IC1zb3VyY2VYT2Zmc2V0OyBpIDw9IHNvdXJjZVhPZmZzZXQ7IGkrKykg
eworICAgIGZvciAodmFyIGogPSAtc291cmNlWU9mZnNldDsgaiA8PSBzb3VyY2VZT2Zmc2V0OyBq
KyspIHsKKyAgICAgIHZhciBzb3VyY2VYID0geCArIGk7CisgICAgICB2YXIgc291cmNlWSA9IHkg
KyBqOworICAgICAgCisgICAgICB2YXIgc291cmNlUiA9IHJlYWRQaXhlbENvbXBvbmVudChzb3Vy
Y2VYLCBzb3VyY2VZLCAwKTsgCisgICAgICB2YXIgc291cmNlRyA9IHJlYWRQaXhlbENvbXBvbmVu
dChzb3VyY2VYLCBzb3VyY2VZLCAxKTsKKyAgICAgIHZhciBzb3VyY2VCID0gcmVhZFBpeGVsQ29t
cG9uZW50KHNvdXJjZVgsIHNvdXJjZVksIDIpOworICAgICAgdmFyIHNvdXJjZUEgPSByZWFkUGl4
ZWxDb21wb25lbnQoc291cmNlWCwgc291cmNlWSwgMykvMjU1OworICAgICAgc291cmNlQSA9IE1h
dGgucm91bmQoc291cmNlQSAqIDEwKS8xMDsKKworICAgICAgdmFyIHRhcmdldFggPSAoaSArIHNv
dXJjZVhPZmZzZXQpICogTE9VUEVfTUFHTklGSUNBVElPTl9GQUNUT1I7CisgICAgICB2YXIgdGFy
Z2V0WSA9IChqICsgc291cmNlWU9mZnNldCkgKiBMT1VQRV9NQUdOSUZJQ0FUSU9OX0ZBQ1RPUjsK
KyAgICAgIHZhciBjb2xvclN0cmluZyA9CisgICAgICAgICAgc291cmNlUiArICcsICcgKyBzb3Vy
Y2VHICsgJywgJyArIHNvdXJjZUIgKyAnLCAnICsgc291cmNlQTsKKyAgICAgIHRhcmdldENvbnRl
eHQuZmlsbFN0eWxlID0gJ3JnYmEoJyArIGNvbG9yU3RyaW5nICsgJyknOworICAgICAgdGFyZ2V0
Q29udGV4dC5maWxsUmVjdCgKKyAgICAgICAgICB0YXJnZXRYLCB0YXJnZXRZLAorICAgICAgICAg
IExPVVBFX01BR05JRklDQVRJT05fRkFDVE9SLCBMT1VQRV9NQUdOSUZJQ0FUSU9OX0ZBQ1RPUik7
CisgICAgCisgICAgICBpZiAoaSA9PSAwICYmIGogPT0gMCkgeworICAgICAgICAkKCdsb3VwZS1j
b29yZGluYXRlJykudGV4dENvbnRlbnQgPSBzb3VyY2VYICsgJywgJyArIHNvdXJjZVk7CisKKyAg
ICAgICAgJCh0eXBlICsgJy1sb3VwZS1jb2xvcicpLnRleHRDb250ZW50ID0gY29sb3JTdHJpbmc7
CisgICAgICB9CisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIGhpZGVMb3VwZSgpIHsKKyAgJCgn
bG91cGUnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAgCit9CisKK2Z1bmN0aW9uIGFkZFRvUmVi
YXNlbGluZVF1ZXVlKCkgeworICB2YXIgdGVzdE5hbWUgPSBnZXRTZWxlY3RlZFRlc3QoKTsKKyAg
dmFyIHRlc3QgPSByZXN1bHRzLnRlc3RzW3Rlc3ROYW1lXTsKKyAgCisgIGlmICh0ZXN0LnN0YXRl
ICE9IFNUQVRFX05FRURTX1JFQkFTRUxJTkUpIHsKKyAgICBsb2coJ0Nhbm5vdCBhZGQgdGVzdCB3
aXRoIHN0YXRlICcgKyB0ZXN0LnN0YXRlICsgJyB0byBxdWV1ZScpOworICAgIHJldHVybjsKKyAg
fQorICAKKyAgdmFyIHF1ZXVlT3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9u
Jyk7CisgIHF1ZXVlT3B0aW9uLnZhbHVlID0gdGVzdE5hbWU7CisgIHF1ZXVlT3B0aW9uLnRleHRD
b250ZW50ID0gdGVzdE5hbWU7CisgICQoJ3F1ZXVlLXNlbGVjdCcpLmFwcGVuZENoaWxkKHF1ZXVl
T3B0aW9uKTsKKyAgdGVzdC5zdGF0ZSA9IFNUQVRFX0lOX1FVRVVFOworICB1cGRhdGVTdGF0ZSgp
OworfQorCitmdW5jdGlvbiByZW1vdmVTZWxlY3Rpb25Gcm9tUmViYXNlbGluZVF1ZXVlKCkgewor
ICB2YXIgcXVldWVTZWxlY3QgPSAkKCdxdWV1ZS1zZWxlY3QnKTsKKyAgaWYgKHF1ZXVlU2VsZWN0
LnNlbGVjdGVkSW5kZXggPT0gLTEpIHsKKyAgICByZXR1cm47CisgIH0KKworICB2YXIgcXVldWVP
cHRpb24gPSBxdWV1ZVNlbGVjdC5vcHRpb25zW3F1ZXVlU2VsZWN0LnNlbGVjdGVkSW5kZXhdOyAg
CisgIHJlbW92ZUZyb21SZWJhc2VsaW5lUXVldWUocXVldWVPcHRpb24udmFsdWUpOworfQorCitm
dW5jdGlvbiByZW1vdmVGcm9tUmViYXNlbGluZVF1ZXVlKHRlc3ROYW1lKSB7CisgIHZhciBxdWV1
ZVNlbGVjdCA9ICQoJ3F1ZXVlLXNlbGVjdCcpOworICBmb3IgKHZhciBxdWV1ZU9wdGlvbiA9IHF1
ZXVlU2VsZWN0LmZpcnN0Q2hpbGQ7CisgICAgIHF1ZXVlT3B0aW9uICYmIHF1ZXVlT3B0aW9uLnZh
bHVlICE9IHRlc3ROYW1lOworICAgICBxdWV1ZU9wdGlvbiA9IHF1ZXVlT3B0aW9uLm5leHRTaWJs
aW5nKSB7O30KKworICBpZiAoIXF1ZXVlT3B0aW9uKSByZXR1cm47CisgIAorICBxdWV1ZVNlbGVj
dC5yZW1vdmVDaGlsZChxdWV1ZU9wdGlvbik7CisgIHZhciB0ZXN0ID0gcmVzdWx0cy50ZXN0c1t0
ZXN0TmFtZV07CisgIHRlc3Quc3RhdGUgPSBTVEFURV9ORUVEU19SRUJBU0VMSU5FOworICB1cGRh
dGVTdGF0ZSgpOworfQorCitmdW5jdGlvbiByZWJhc2VsaW5lUXVldWUoKSB7CisgIHZhciB0ZXN0
TmFtZXMgPSBbXTsKKyAgZm9yICh2YXIgcXVldWVPcHRpb24gPSAkKCdxdWV1ZS1zZWxlY3QnKS5m
aXJzdENoaWxkOworICAgICBxdWV1ZU9wdGlvbjsKKyAgICAgcXVldWVPcHRpb24gPSBxdWV1ZU9w
dGlvbi5uZXh0U2libGluZykgeworICAgIHRlc3ROYW1lcy5wdXNoKHF1ZXVlT3B0aW9uLnZhbHVl
KTsKKyAgfQorICAKKyAgaW5Qcm9ncmVzc1JlYmFzZWxpbmVDb3VudCA9IHRlc3ROYW1lcy5sZW5n
dGg7CisgIHVwZGF0ZVN0YXRlKCk7CisKKyAgdmFyIGJhc2VsaW5lVGFyZ2V0ID0gZ2V0U2VsZWN0
VmFsdWUoJ2Jhc2VsaW5lLXRhcmdldCcpOworICB2YXIgYmFzZWxpbmVNb3ZlVG8gPSBnZXRTZWxl
Y3RWYWx1ZSgnYmFzZWxpbmUtbW92ZS10bycpOworCisgIHRlc3ROYW1lcy5mb3JFYWNoKGZ1bmN0
aW9uKHRlc3ROYW1lKSB7CisgICAgcmViYXNlbGluZSh0ZXN0TmFtZSwgYmFzZWxpbmVUYXJnZXQs
IGJhc2VsaW5lTW92ZVRvKTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9uIHJlYmFzZWxpbmUodGVzdE5h
bWUsIGJhc2VsaW5lVGFyZ2V0LCBiYXNlbGluZU1vdmVUbykgeworICB2YXIgeGhyID0gbmV3IFhN
TEh0dHBSZXF1ZXN0KCk7CisgIHhoci5vcGVuKCdQT1NUJywKKyAgICAgICcvcmViYXNlbGluZT90
ZXN0PScgKyBlbmNvZGVVUklDb21wb25lbnQodGVzdE5hbWUpICsgCisgICAgICAnJmJhc2VsaW5l
LXRhcmdldD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJhc2VsaW5lVGFyZ2V0KSArCisgICAgICAn
JmJhc2VsaW5lLW1vdmUtdG89JyArIGVuY29kZVVSSUNvbXBvbmVudChiYXNlbGluZU1vdmVUbykp
OworICB2YXIgdGVzdCA9IHJlc3VsdHMudGVzdHNbdGVzdE5hbWVdOworICBmdW5jdGlvbiBoYW5k
bGVTdWNjZXNzKCkgeworICAgIHZhciBzdWNjZXNzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
c3BhbicpOworICAgIHN1Y2Nlc3MudGV4dENvbnRlbnQgPSAnU3VjY2VzczogJzsKKyAgICBzdWNj
ZXNzLnN0eWxlLmNvbG9yID0gJ2dyZWVuJzsKKyAgICAkKCdsb2cnKS5hcHBlbmRDaGlsZChzdWNj
ZXNzKTsKKyAgICBsb2coeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgcmVtb3ZlRnJvbVJlYmFzZWxp
bmVRdWV1ZSh0ZXN0TmFtZSk7CisgICAgaW5Qcm9ncmVzc1JlYmFzZWxpbmVDb3VudC0tOworICAg
IHRlc3Quc3RhdGUgPSBTVEFURV9SRUJBU0VMSU5FX1NVQ0NFRURFRDsKKyAgICB1cGRhdGVTdGF0
ZSgpOworICB9CisgIGZ1bmN0aW9uIGhhbmRsZUZhaWx1cmUoKSB7CisgICAgdmFyIGZhaWx1cmUg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgZmFpbHVyZS50ZXh0Q29udGVu
dCA9ICdGYWlsdXJlOiAnOworICAgIGZhaWx1cmUuc3R5bGUuY29sb3IgPSAncmVkJzsKKyAgICAk
KCdsb2cnKS5hcHBlbmRDaGlsZChmYWlsdXJlKTsKKyAgICBsb2coeGhyLnJlc3BvbnNlVGV4dCk7
CisgICAgcmVtb3ZlRnJvbVJlYmFzZWxpbmVRdWV1ZSh0ZXN0TmFtZSk7CisgICAgaW5Qcm9ncmVz
c1JlYmFzZWxpbmVDb3VudC0tOworICAgIHRlc3Quc3RhdGUgPSBTVEFURV9SRUJBU0VMSU5FX0ZB
SUxFRDsKKyAgICB1cGRhdGVTdGF0ZSgpOworICB9CisgIAorICB4aHIuYWRkRXZlbnRMaXN0ZW5l
cignbG9hZCcsIGZ1bmN0aW9uKCkgeworICAgIGlmICh4aHIuc3RhdHVzIDwgNDAwKSB7CisgICAg
ICBoYW5kbGVTdWNjZXNzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGhhbmRsZUZhaWx1cmUoKTsK
KyAgICB9CisgIH0pOworICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVGYWls
dXJlKTsKKworICB4aHIuc2VuZCgpOworfQorCitmdW5jdGlvbiBsb2codGV4dCkgeworICAkKCds
b2cnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0ICsgJ1xuJykpOwor
ICAkKCdsb2cnKS5zY3JvbGxUb3AgPSAkKCdsb2cnKS5zY3JvbGxIZWlnaHQ7Cit9CisKK2Z1bmN0
aW9uIHRvZ2dsZShpZCkgeworICB2YXIgZWxlbWVudCA9ICQoaWQpOworICB2YXIgdG9nZ2xlciA9
ICQoJ3RvZ2dsZS0nICsgaWQpOworICBpZiAoZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09ICdub25l
JykgeworICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICcnOworICAgIHRvZ2dsZXIuY2xhc3NO
YW1lID0gJ2xpbmsgc2VsZWN0ZWQnOworICB9IGVsc2UgeworICAgIGVsZW1lbnQuc3R5bGUuZGlz
cGxheSA9ICdub25lJzsKKyAgICB0b2dnbGVyLmNsYXNzTmFtZSA9ICdsaW5rJzsKKyAgfQorfQor
Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIG1haW4pOwpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9sb2NhbHJlYmFzZWxpbmUucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvbG9jYWxyZWJhc2VsaW5lLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmY5ZGI3MjNhNTA2ODc3NDczNGM3MjI3YjQ4M2M1NzUyM2NkMTE1NjgKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvbG9jYWxy
ZWJhc2VsaW5lLnB5CkBAIC0wLDAgKzEsMzI1IEBACisjIENvcHlyaWdodCAoYykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IGRhdGV0aW1lCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IG1pbWV0eXBlcworaW1wb3J0IG9zCitp
bXBvcnQgb3MucGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdXJsbGliCitp
bXBvcnQgQmFzZUhUVFBTZXJ2ZXIKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBzaHV0aWwKK2lt
cG9ydCB0aW1lCitpbXBvcnQgdXJscGFyc2UKK2Zyb20gd3NnaXJlZi5oYW5kbGVycyBpbXBvcnQg
Zm9ybWF0X2RhdGVfdGltZQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVpbGRib3QgaW1w
b3J0IEJ1aWxkQm90LCBMYXlvdXRUZXN0UmVzdWx0cworZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLnVzZXIgaW1wb3J0IFVzZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1w
b3J0IGZhY3RvcnkKK2Zyb20gd2Via2l0cHkudG9vbC5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUK
K2Zyb20gd2Via2l0cHkudG9vbC5tdWx0aWNvbW1hbmR0b29sIGltcG9ydCBBYnN0cmFjdERlY2xh
cmF0aXZlQ29tbWFuZAoraW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuc2ltcGxlanNvbiBhcyBz
aW1wbGVqc29uCisKKyMgVE9ETworIyAtIGxldCBwb3J0IGJlIHNwZWNpZmllZAorIyAtIGFkZCBj
aGVja3N1bSBvdXRwdXQ/CisjIC0gaGFuZGxlIGNoZWNrc3VtLW9ubHkgZGlmZmVyZW5jZXMKKyMg
LSBhZGQgbGluayB0byB2aWV3IHRlc3QKKyMgLSBxdWV1ZWluZworIyAtIGZpbHRlciBkcm9wLWRv
d24gYnkgdGVzdCBzdGF0ZQorCitTVEFURV9ORUVEU19SRUJBU0VMSU5FID0gJ25lZWRzX3JlYmFz
ZWxpbmUnCitTVEFURV9SRUJBU0VMSU5FX0ZBSUxFRCA9ICdyZWJhc2VsaW5lX2ZhaWxlZCcKK1NU
QVRFX1JFQkFTRUxJTkVfU1VDQ0VFREVEID0gJ3JlYmFzZWxpbmVfc3VjY2VlZGVkJworCitjbGFz
cyBSZWJhc2VsaW5lSFRUU2VydmVyKEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorICBkZWYg
X19pbml0X18oc2VsZiwgaHR0cGRfcG9ydCwgcmVzdWx0c19kaXJlY3RvcnksIHJlc3VsdHNfanNv
biwgcG9ydCwgc2NtKToKKyAgICBCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyLl9faW5pdF9fKHNl
bGYsICgnJywgaHR0cGRfcG9ydCksIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIpCisgICAg
c2VsZi5yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdHNfZGlyZWN0b3J5CisgICAgc2VsZi5yZXN1
bHRzX2pzb24gPSByZXN1bHRzX2pzb24KKyAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgc2VsZi5z
Y20gPSBzY20KKworY2xhc3MgUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlcihCYXNlSFRUUFNl
cnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKKyAgICBmaWxlX25hbWVzID0gWworICAgICAg
J2luZGV4Lmh0bWwnLAorICAgICAgJ21haW4uanMnCisgICAgXQorCisgICAgZGVmIGRvX0dFVChz
ZWxmKToKKyAgICAgIHNlbGYuX2hhbmRsZV9yZXF1ZXN0KCkKKyAgICAgIAorICAgIGRlZiBkb19Q
T1NUKHNlbGYpOgorICAgICAgc2VsZi5faGFuZGxlX3JlcXVlc3QoKQorICAgIAorICAgIGRlZiBf
aGFuZGxlX3JlcXVlc3Qoc2VsZik6CisgICAgICBpZiAnPycgaW4gc2VsZi5wYXRoOgorICAgICAg
ICAgIChwYXRoLCBxdWVyeV9zdHJpbmcpID0gc2VsZi5wYXRoLnNwbGl0KCc/JywgMSkKKyAgICAg
ICAgICBzZWxmLnF1ZXJ5ID0gdXJscGFyc2UucGFyc2VfcXMocXVlcnlfc3RyaW5nKQorICAgICAg
ZWxzZToKKyAgICAgICAgICBwYXRoID0gc2VsZi5wYXRoCisgICAgICAgICAgc2VsZi5xdWVyeSA9
IHt9CisgICAgICBmdW5jX29yX2ZpbGVfbmFtZSA9IHBhdGhbMTpdIG9yICdpbmRleC5odG1sJwor
ICAgICAgCisgICAgICBpZiBmdW5jX29yX2ZpbGVfbmFtZSBpbiBSZWJhc2VsaW5lSFRUUFJlcXVl
c3RIYW5kbGVyLmZpbGVfbmFtZXM6CisgICAgICAgICAgc2VsZi5zZXJ2ZV9zdGF0aWNfZmlsZShm
dW5jX29yX2ZpbGVfbmFtZSkKKyAgICAgICAgICByZXR1cm4KKyAgICAgIAorICAgICAgZnVuY19u
YW1lID0gZnVuY19vcl9maWxlX25hbWUucmVwbGFjZSgnLicsICdfJykKKyAgICAgIGlmIG5vdCBo
YXNhdHRyKHNlbGYsIGZ1bmNfbmFtZSk6CisgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICJV
bmtub3duIGZ1bmN0aW9uICVzIiAlIGZ1bmNfbmFtZSkKKyAgICAgICAgcmV0dXJuCisgICAgICBm
dW5jID0gZ2V0YXR0cihzZWxmLCBmdW5jX25hbWUpCisgICAgICBmdW5jKCkKKyAgICAKKyAgICBk
ZWYgc2VydmVfc3RhdGljX2ZpbGUoc2VsZiwgc3RhdGljX3BhdGgpOgorICAgICAgc2VsZi5fc2Vy
dmVfZmlsZShvcy5wYXRoLmpvaW4oCisgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9f
KSwgJ2RhdGEnLCAnbG9jYWxyZWJhc2VsaW5lJywgc3RhdGljX3BhdGgpKQorICAgIAorICAgIGRl
ZiByZWJhc2VsaW5lKHNlbGYpOgorICAgICAgbG9nID0gW10KKyAgICAgIHN1Y2Nlc3MgPSBzZWxm
Ll9ydW5fcmViYXNlbGluZSgKKyAgICAgICAgICBzZWxmLnF1ZXJ5Wyd0ZXN0J11bMF0sCisgICAg
ICAgICAgc2VsZi5xdWVyeVsnYmFzZWxpbmUtdGFyZ2V0J11bMF0sCisgICAgICAgICAgc2VsZi5x
dWVyeVsnYmFzZWxpbmUtbW92ZS10byddWzBdLCAgICAgICAgICAKKyAgICAgICAgICBsb2c9bGFt
YmRhIGw6bG9nLmFwcGVuZChsKSkKKyAgICAgIHNlbGYuc2VuZF9yZXNwb25zZShzdWNjZXNzIGFu
ZCAyMDAgb3IgNTAwKQorICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgInRl
eHQvcGxhaW4iKQorICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICBzZWxmLndmaWxlLndy
aXRlKCJcbiIuam9pbihsb2cpKQorICAgICAgCisgICAgZGVmIF9ydW5fcmViYXNlbGluZShzZWxm
LCB0ZXN0LCBiYXNlbGluZV90YXJnZXQsIGJhc2VsaW5lX21vdmVfdG8sIGxvZyk6CisgICAgICAo
dGVzdF9uYW1lLCB0ZXN0X2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KHRlc3QpCisgICAg
ICB0ZXN0X2RpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZSh0ZXN0X25hbWUpCisgICAgICBsYXlv
dXRfdGVzdHNfZGlyZWN0b3J5ID0gc2VsZi5zZXJ2ZXIucG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkK
KyAgICAgIHRhcmdldF9leHBlY3RhdGlvbnNfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKAorICAg
ICAgICAgIGxheW91dF90ZXN0c19kaXJlY3RvcnksICdwbGF0Zm9ybScsIGJhc2VsaW5lX3Rhcmdl
dCwgdGVzdF9kaXJlY3RvcnkpCisgICAgICAKKyAgICAgIGxvZygiUmViYXNlbGluaW5nICVzLi4u
IiAlIHRlc3RfbmFtZSkKKyAgICAgIHRlc3RfanNvbiA9IHNlbGYuc2VydmVyLnJlc3VsdHNfanNv
blsndGVzdHMnXVt0ZXN0XQorICAgICAgCisgICAgICBpZiB0ZXN0X2pzb25bJ3N0YXRlJ10gIT0g
U1RBVEVfTkVFRFNfUkVCQVNFTElORToKKyAgICAgICAgICBsb2coIiAgVGVzdCBpcyBpbiB1bmV4
cGVjdGVkIHN0YXRlOiAlcyIgJSB0ZXN0X2pzb25bJ3N0YXRlJ10pCisgICAgICAgICAgcmV0dXJu
IEZhbHNlCisgICAgICAKKyAgICAgIGN1cnJlbnRfYmFzZWxpbmVzID0gbGlzdCh0ZXN0X2pzb24u
Z2V0KCdiYXNlbGluZXMnLCBbXSkpCisgICAgICAKKyAgICAgIGxvZygiICBDdXJyZW50IGJhc2Vs
aW5lczogJXMiICUiLCAiLmpvaW4oY3VycmVudF9iYXNlbGluZXMpKQorICAgICAgCisgICAgICB0
ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKAorICAgICAgICAgIHNlbGYuc2Vy
dmVyLnJlc3VsdHNfZGlyZWN0b3J5LCB0ZXN0X2RpcmVjdG9yeSkKKyAgICAgIGFjdHVhbF9wYXR0
ZXJuID0gb3MucGF0aC5iYXNlbmFtZSh0ZXN0X25hbWUpICsgJy1hY3R1YWwuKicKKyAgICAgIGFj
dHVhbF9maWxlcyA9IFtdCisgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh0
ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5KToKKyAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZm5tYXRj
aC5maWx0ZXIoZmlsZXMsIGFjdHVhbF9wYXR0ZXJuKToKKyAgICAgICAgICAgICAgYWN0dWFsX2Zp
bGVzLmFwcGVuZChmaWxlbmFtZS5yZXBsYWNlKCctYWN0dWFsJywgJy1leHBlY3RlZCcpKQorICAg
ICAgCisgICAgICBpZiBiYXNlbGluZV90YXJnZXQgaW4gY3VycmVudF9iYXNlbGluZXMgYW5kIGJh
c2VsaW5lX21vdmVfdG8gIT0gIm5vbmUiOgorICAgICAgICBpZiBiYXNlbGluZV9tb3ZlX3RvIGlu
IGN1cnJlbnRfYmFzZWxpbmVzOgorICAgICAgICAgICAgbG9nKCIgIEFscmVhZHkgaGFkICVzIGJh
c2VsaW5lcywgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggY3VycmVudCAlcyBiYXNlbGluZXMi
ICUgKGJhc2VsaW5lX21vdmVfdG8sIGJhc2VsaW5lX3RhcmdldCkpCisgICAgICAgICAgICB0ZXN0
X2pzb25bJ3N0YXRlJ10gPSBTVEFURV9SRUJBU0VMSU5FX0ZBSUxFRAorICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgICAgIGxvZygiICBNb3ZpbmcgY3VycmVudCAlcyBiYXNlbGluZXMgdG8g
JXMiICUgKGJhc2VsaW5lX3RhcmdldCwgYmFzZWxpbmVfbW92ZV90bykpCisgICAgICAgIG1vdmVf
dG9fZXhwZWN0YXRpb25zX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgIGxh
eW91dF90ZXN0c19kaXJlY3RvcnksICdwbGF0Zm9ybScsIGJhc2VsaW5lX21vdmVfdG8sIHRlc3Rf
ZGlyZWN0b3J5KQorCisgICAgICAgIGV4cGVjdGF0aW9uX3BhdHRlcm4gPSBvcy5wYXRoLmJhc2Vu
YW1lKHRlc3RfbmFtZSkgKyAnLWV4cGVjdGVkLionCisgICAgICAgIGN1cnJlbnRfZXhwZWN0YXRp
b25zX2ZpbGVzID0gW10KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGso
dGFyZ2V0X2V4cGVjdGF0aW9uc19kaXJlY3RvcnkpOgorICAgICAgICAgICAgZm9yIGZpbGVuYW1l
IGluIGZubWF0Y2guZmlsdGVyKGZpbGVzLCBleHBlY3RhdGlvbl9wYXR0ZXJuKToKKyAgICAgICAg
ICAgICAgICBjdXJyZW50X2V4cGVjdGF0aW9uc19maWxlcy5hcHBlbmQoZmlsZW5hbWUpCisgICAg
ICAgIGN1cnJlbnRfZXhwZWN0YXRpb25zX2ZpbGVzID0gW2YgZm9yIGYgaW4gY3VycmVudF9leHBl
Y3RhdGlvbnNfZmlsZXMgaWYgZiBpbiBhY3R1YWxfZmlsZXNdCisgICAgICAgIAorICAgICAgICBp
ZiBjdXJyZW50X2V4cGVjdGF0aW9uc19maWxlczoKKyAgICAgICAgICBpZiBub3Qgb3MucGF0aC5l
eGlzdHMobW92ZV90b19leHBlY3RhdGlvbnNfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgbG9n
KCIgIENyZWF0aW5nICVzICVzIGRpcmVjdG9yeSIgJSAoYmFzZWxpbmVfbW92ZV90bywgdGVzdF9k
aXJlY3RvcnkpKQorICAgICAgICAgICAgICBvcy5tYWtlZGlycyhtb3ZlX3RvX2V4cGVjdGF0aW9u
c19kaXJlY3RvcnkpCisgICAgICAgICAgZm9yIGZpbGUgaW4gY3VycmVudF9leHBlY3RhdGlvbnNf
ZmlsZXM6CisgICAgICAgICAgICAgIHNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHRhcmdldF9l
eHBlY3RhdGlvbnNfZGlyZWN0b3J5LCBmaWxlKQorICAgICAgICAgICAgICBkZXN0aW5hdGlvbl9w
YXRoID0gb3MucGF0aC5qb2luKG1vdmVfdG9fZXhwZWN0YXRpb25zX2RpcmVjdG9yeSwgZmlsZSkK
KyAgICAgICAgICAgICAgc2h1dGlsLm1vdmUoc291cmNlX3BhdGgsIGRlc3RpbmF0aW9uX3BhdGgp
CisgICAgICAgICAgICAgIGV4aXRfY29kZSA9IHNlbGYuc2VydmVyLnNjbS5hZGQoZGVzdGluYXRp
b25fcGF0aCwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorICAgICAgICAgICAgICBsb2coIiAgICBN
b3ZlZCAlcywgZXhpdCBjb2RlICVkIiAlIChmaWxlLCBleGl0X2NvZGUpKQorICAgICAgICAgICAg
ICBpZiBleGl0X2NvZGU6CisgICAgICAgICAgICAgICAgICB0ZXN0X2pzb25bJ3N0YXRlJ10gPSBT
VEFURV9SRUJBU0VMSU5FX0ZBSUxFRAorICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisK
KyAgICAgIGxvZygiICBBZGRpbmcgbmV3IGJhc2VsaW5lcyB0byAlcyIgJSBiYXNlbGluZV90YXJn
ZXQpCisgICAgICBmb3IgZmlsZSBpbiBhY3R1YWxfZmlsZXM6CisgICAgICAgICAgc291cmNlX3Bh
dGggPSBvcy5wYXRoLmpvaW4odGVzdF9yZXN1bHRzX2RpcmVjdG9yeSwgZmlsZS5yZXBsYWNlKCct
ZXhwZWN0ZWQnLCAnLWFjdHVhbCcpKQorICAgICAgICAgIGRlc3RpbmF0aW9uX3BhdGggPSBvcy5w
YXRoLmpvaW4odGFyZ2V0X2V4cGVjdGF0aW9uc19kaXJlY3RvcnksIGZpbGUpCisgICAgICAgICAg
c2h1dGlsLmNvcHkoc291cmNlX3BhdGgsIGRlc3RpbmF0aW9uX3BhdGgpCisgICAgICAgICAgZXhp
dF9jb2RlID0gc2VsZi5zZXJ2ZXIuc2NtLmFkZChkZXN0aW5hdGlvbl9wYXRoLCByZXR1cm5fZXhp
dF9jb2RlPVRydWUpICAgICAgICAgIAorICAgICAgICAgIGxvZygiICAgIEFkZGVkICVzLCBleGl0
IGNvZGUgJWQiICUgKGZpbGUsIGV4aXRfY29kZSkpCisgICAgICAgICAgaWYgZXhpdF9jb2RlOgor
ICAgICAgICAgICAgICB0ZXN0X2pzb25bJ3N0YXRlJ10gPSBTVEFURV9SRUJBU0VMSU5FX0ZBSUxF
RAorICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgIAorICAgICAgdGVzdF9qc29uWydz
dGF0ZSddID0gU1RBVEVfUkVCQVNFTElORV9TVUNDRUVERUQKKyAgICAgIHJldHVybiBUcnVlCisK
KyAgICBkZWYgdGVzdF9yZXN1bHQoc2VsZik6CisgICAgICAodGVzdF9uYW1lLCB0ZXN0X2V4dGVu
c2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KHNlbGYucXVlcnlbJ3Rlc3QnXVswXSkKKyAgICAgIG1v
ZGUgPSBzZWxmLnF1ZXJ5Wydtb2RlJ11bMF0KKyAgICAgIGlmIG1vZGUgPT0gJ2V4cGVjdGVkLWlt
YWdlJzoKKyAgICAgICAgICBmaWxlX25hbWUgPSB0ZXN0X25hbWUgKyAnLWV4cGVjdGVkLnBuZycK
KyAgICAgIGVsaWYgbW9kZSA9PSAnYWN0dWFsLWltYWdlJzoKKyAgICAgICAgICBmaWxlX25hbWUg
PSB0ZXN0X25hbWUgKyAnLWFjdHVhbC5wbmcnCisgICAgICBlbGlmIG1vZGUgPT0gJ2RpZmYtaW1h
Z2UnOgorICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZGlmZi5wbmcnCisgICAg
ICBpZiBtb2RlID09ICdleHBlY3RlZC10ZXh0JzoKKyAgICAgICAgICBmaWxlX25hbWUgPSB0ZXN0
X25hbWUgKyAnLWV4cGVjdGVkLnR4dCcKKyAgICAgIGVsaWYgbW9kZSA9PSAnYWN0dWFsLXRleHQn
OgorICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctYWN0dWFsLnR4dCcKKyAgICAg
IGVsaWYgbW9kZSA9PSAnZGlmZi10ZXh0JzoKKyAgICAgICAgICBmaWxlX25hbWUgPSB0ZXN0X25h
bWUgKyAnLWRpZmYudHh0JworCisgICAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5z
ZXJ2ZXIucmVzdWx0c19kaXJlY3RvcnksIGZpbGVfbmFtZSkKKyAgICAgIAorICAgICAgIyBMZXQg
cmVzdWx0cyBiZSBjYWNoZWQgZm9yIDYwIHNlY29uZHMsIHNvIHRoYXQgdGhleSBjYW4gYmUgcHJl
LWZldGNoZWQKKyAgICAgICMgYnkgdGhlIFVJCisgICAgICBzZWxmLl9zZXJ2ZV9maWxlKGZpbGVf
cGF0aCwgY2FjaGVfc2Vjb25kcz02MCkKKyAgICAKKyAgICBkZWYgcmVzdWx0c19qc29uKHNlbGYp
OgorICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgIHNlbGYuc2VuZF9oZWFkZXIo
IkNvbnRlbnQtdHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIikKKyAgICAgIHNlbGYuZW5kX2hlYWRl
cnMoKSAgICAKKyAgICAgIHNpbXBsZWpzb24uZHVtcChzZWxmLnNlcnZlci5yZXN1bHRzX2pzb24s
IHNlbGYud2ZpbGUpCisgICAgCisgICAgZGVmIHF1aXRxdWl0cXVpdChzZWxmKToKKyAgICAgIHNl
bGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5
cGUiLCAidGV4dC9wbGFpbiIpCisgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgIHNlbGYu
d2ZpbGUud3JpdGUoIlF1aXQuXG4iKQorICAgICAgCisgICAgICAjIFNodXRkb3duIGhhcyB0byBo
YXBwZW4gb24gYW5vdGhlciB0aHJlYWQgZnJvbSB0aGUgc2VydmVyJ3MgdGhyZWFkLAorICAgICAg
IyBvdGhlcndpc2UgdGhlcmUncyBhIGRlYWRsb2NrCisgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRh
cmdldD1sYW1iZGE6IHNlbGYuc2VydmVyLnNodXRkb3duKCkpLnN0YXJ0KCkKKworICAgIGRlZiBf
c2VydmVfZmlsZShzZWxmLCBmaWxlX3BhdGgsIGNhY2hlX3NlY29uZHM9MCk6CisgICAgICBpZiBu
b3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKKyAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQw
NCwgIkZpbGUgbm90IGZvdW5kIikKKyAgICAgICAgcmV0dXJuCisgICAgICBzdGF0aWNfZmlsZSA9
IGZpbGUoZmlsZV9wYXRoLCAncmInKQorICAgICAgCisgICAgICBzZWxmLnNlbmRfcmVzcG9uc2Uo
MjAwKQorICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1MZW5ndGgnLCBvcy5wYXRoLmdl
dHNpemUoZmlsZV9wYXRoKSkKKyAgICAgIChtaW1lX3R5cGUsIGVuY29kaW5nKSA9IG1pbWV0eXBl
cy5ndWVzc190eXBlKGZpbGVfcGF0aCkKKyAgICAgIGlmIG1pbWVfdHlwZTogICAgICAKKyAgICAg
ICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgbWltZV90eXBlKQorICAgICAgCisg
ICAgICBpZiBjYWNoZV9zZWNvbmRzOgorICAgICAgICBleHBpcmVzX3RpbWUgPSBcCisgICAgICAg
ICAgICBkYXRldGltZS5kYXRldGltZS5ub3coKSArIGRhdGV0aW1lLnRpbWVkZWx0YSgwLCBjYWNo
ZV9zZWNvbmRzKQorICAgICAgICBleHBpcmVzX2Zvcm1hdHRlZCA9IFwKKyAgICAgICAgICAgIGZv
cm1hdF9kYXRlX3RpbWUodGltZS5ta3RpbWUoZXhwaXJlc190aW1lLnRpbWV0dXBsZSgpKSkKKyAg
ICAgICAgc2VsZi5zZW5kX2hlYWRlcigiRXhwaXJlcyIsIGV4cGlyZXNfZm9ybWF0dGVkKQorICAg
ICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAKKyAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaihz
dGF0aWNfZmlsZSwgc2VsZi53ZmlsZSkKKyAgICAgIHN0YXRpY19maWxlLmNsb3NlKCkKKworY2xh
c3MgTG9jYWxSZWJhc2VsaW5lKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKKyAgICBuYW1l
ID0gImxvY2FsLXJlYmFzZWxpbmUiCisgICAgaGVscF90ZXh0ID0gIlRPRE8obWloYWlwKSIKKyAg
ICBhcmd1bWVudF9uYW1lcyA9ICJbL3BhdGgvdG8vcmVzdWx0cy9kaXJlY3RvcnkvXSIKKworICAg
IGRlZiBfcmVwbGFjZV9leHBlY3RhdGlvbl93aXRoX3JlbW90ZV9yZXN1bHQoc2VsZiwgbG9jYWxf
ZmlsZSwgcmVtb3RlX2ZpbGUpOgorICAgICAgICAoZG93bmxvYWRlZF9maWxlLCBoZWFkZXJzKSA9
IHVybGxpYi51cmxyZXRyaWV2ZShyZW1vdGVfZmlsZSkKKyAgICAgICAgc2h1dGlsLm1vdmUoZG93
bmxvYWRlZF9maWxlLCBsb2NhbF9maWxlKQorCisgICAgZGVmIF90ZXN0c190b191cGRhdGUoc2Vs
ZiwgYnVpbGQpOgorICAgICAgICBwYXJzZWRfcmVzdWx0cyA9IGJ1aWxkLmxheW91dF90ZXN0X3Jl
c3VsdHMoKS5wYXJzZWRfcmVzdWx0cygpCisgICAgICAgICMgRklYTUU6IFRoaXMgcHJvYmFibHkg
YmVsb25ncyBhcyBBUEkgb24gTGF5b3V0VGVzdFJlc3VsdHMKKyAgICAgICAgIyBidXQgLmZhaWxp
bmdfdGVzdHMoKSBhbHJlYWR5IG1lYW5zIHNvbWV0aGluZyBlbHNlLgorICAgICAgICBmYWlsaW5n
X3Rlc3RzID0gcGFyc2VkX3Jlc3VsdHNbTGF5b3V0VGVzdFJlc3VsdHMuZmFpbF9rZXldCisgICAg
ICAgIHJldHVybiBzZWxmLl90b29sLnVzZXIucHJvbXB0X3dpdGhfbGlzdCgiV2hpY2ggdGVzdChz
KSB0byByZWJhc2VsaW5lOiIsIGZhaWxpbmdfdGVzdHMsIGNhbl9jaG9vc2VfbXVsdGlwbGU9VHJ1
ZSkKKworICAgIGRlZiBfcmVzdWx0c191cmxfZm9yX3Rlc3Qoc2VsZiwgYnVpbGQsIHRlc3QpOgor
ICAgICAgICB0ZXN0X2Jhc2UgPSBvcy5wYXRoLnNwbGl0ZXh0KHRlc3QpWzBdCisgICAgICAgIGFj
dHVhbF9wYXRoID0gdGVzdF9iYXNlICsgIi1hY3R1YWwudHh0IgorICAgICAgICByZXR1cm4gYnVp
bGQucmVzdWx0c191cmwoKSArICIvIiArIGFjdHVhbF9wYXRoCisKKyAgICBkZWYgZXhlY3V0ZShz
ZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgaWYgbGVuKGFyZ3MpICE9IDE6Cisg
ICAgICAgICAgcHJpbnQgIlBhdGggdG8gcmVzdWx0cyBkaXJlY3RvcnkgaXMgcmVxdWlyZWQuIgor
ICAgICAgICAgIHJldHVybiAxCisgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5ID0gYXJnc1swXQor
ICAgICAgICAKKyAgICAgICAgcHJpbnQgIlBhcnNpbmcgdW5leHBlY3RlZF9yZXN1bHRzLmpzb24u
Li4iCisgICAgICAgIHJlc3VsdHNfanNvbl9wYXRoID0gb3MucGF0aC5qb2luKAorICAgICAgICAg
ICAgcmVzdWx0c19kaXJlY3RvcnksICd1bmV4cGVjdGVkX3Jlc3VsdHMuanNvbicpCisgICAgICAg
IHJlc3VsdHNfanNvbl9maWxlID0gZmlsZShyZXN1bHRzX2pzb25fcGF0aCkKKyAgICAgICAgcmVz
dWx0c19qc29uID0gc2ltcGxlanNvbi5sb2FkKHJlc3VsdHNfanNvbl9maWxlKQorICAgICAgICBy
ZXN1bHRzX2pzb25fZmlsZS5jbG9zZSgpCisgICAgICAgIAorICAgICAgICB0ZXN0X25hbWVfdG9f
dGVzdF9maWxlID0ge30KKyAgICAgICAgZm9yIHRlc3RfZmlsZSwgdGVzdF9qc29uIGluIHJlc3Vs
dHNfanNvblsndGVzdHMnXS5pdGVtcygpOgorICAgICAgICAgICAgKHRlc3RfbmFtZSwgdGV4dF9l
eHRlbnNpb24pID0gb3MucGF0aC5zcGxpdGV4dCh0ZXN0X2ZpbGUpCisgICAgICAgICAgICB0ZXN0
X25hbWVfdG9fdGVzdF9maWxlW3Rlc3RfbmFtZV0gPSB0ZXN0X2ZpbGUKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgdGVzdF9qc29uWydzdGF0ZSddID0gU1RBVEVfTkVFRFNfUkVCQVNFTElORQor
ICAgICAgICAKKyAgICAgICAgcHJpbnQgIkdhdGhlcmluZyBjdXJyZW50IGJhc2VsaW5lcy4uLiIK
KyAgICAgICAgCisgICAgICAgIHBvcnQgPSBmYWN0b3J5LmdldCgpCisgICAgICAgIGxheW91dF90
ZXN0c19kaXJlY3RvcnkgPSBwb3J0LmxheW91dF90ZXN0c19kaXIoKQorICAgICAgICBmb3Igcm9v
dCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhsYXlvdXRfdGVzdHNfZGlyZWN0b3J5KToKKyAgICAg
ICAgICAgIGZvciBmaWxlbmFtZSBpbiBmbm1hdGNoLmZpbHRlcihmaWxlcywgJyotZXhwZWN0ZWQu
KicpOgorICAgICAgICAgICAgICAgIHJlbGF0aXZlX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgocm9v
dCwgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICBwYXRoX3BpZWNlcyA9
IHJlbGF0aXZlX3BhdGguc3BsaXQob3Muc2VwKQorICAgICAgICAgICAgICAgIGlmIGxlbihwYXRo
X3BpZWNlcykgPj0gMiBhbmQgcGF0aF9waWVjZXNbMF0gPT0gJ3BsYXRmb3JtJzoKKyAgICAgICAg
ICAgICAgICAgICAgcGxhdGZvcm0gPSBwYXRoX3BpZWNlc1sxXQorICAgICAgICAgICAgICAgICAg
ICB0ZXN0X2Rpcl9wYXRoID0gb3Muc2VwLmpvaW4ocGF0aF9waWVjZXNbMjpdKQorICAgICAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtID0gJ2Jhc2UnCisgICAg
ICAgICAgICAgICAgICAgIHRlc3RfZGlyX3BhdGggPSByZWxhdGl2ZV9wYXRoCisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgKHRlc3RfbmFtZSwgdGV4dF9leHRlbnNpb24pID0gb3Mu
cGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICB0ZXN0X25hbWUgPSBvcy5w
YXRoLmpvaW4odGVzdF9kaXJfcGF0aCwgdGVzdF9uYW1lWzA6LWxlbignLWV4cGVjdGVkJyldKQor
ICAgICAgICAgICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVzdF9uYW1lX3RvX3Rlc3RfZmls
ZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB0ZXN0X2Zp
bGUgPSB0ZXN0X25hbWVfdG9fdGVzdF9maWxlW3Rlc3RfbmFtZV0KKyAgICAgICAgICAgICAgICB0
ZXN0X2pzb24gPSByZXN1bHRzX2pzb25bJ3Rlc3RzJ11bdGVzdF9maWxlXQorICAgICAgICAgICAg
ICAgIGlmICdiYXNlbGluZXMnIG5vdCBpbiB0ZXN0X2pzb246CisgICAgICAgICAgICAgICAgICAg
IHRlc3RfanNvblsnYmFzZWxpbmVzJ10gPSBbXQorICAgICAgICAgICAgICAgIGlmIHBsYXRmb3Jt
IG5vdCBpbiB0ZXN0X2pzb25bJ2Jhc2VsaW5lcyddOgorICAgICAgICAgICAgICAgICAgICB0ZXN0
X2pzb25bJ2Jhc2VsaW5lcyddLmFwcGVuZChwbGF0Zm9ybSkKKworICAgICAgICBwcmludCAiU3Rh
cnRpbmcgc2VydmVyIGF0IGh0dHA6Ly9sb2NhbGhvc3Q6ODEyNy8iCisgICAgICAgIAorICAgICAg
ICBodHRwZCA9IFJlYmFzZWxpbmVIVFRTZXJ2ZXIoCisgICAgICAgICAgICBodHRwZF9wb3J0PTgx
MjcsCisgICAgICAgICAgICByZXN1bHRzX2RpcmVjdG9yeT1yZXN1bHRzX2RpcmVjdG9yeSwKKyAg
ICAgICAgICAgIHJlc3VsdHNfanNvbj1yZXN1bHRzX2pzb24sCisgICAgICAgICAgICBwb3J0PXBv
cnQsCisgICAgICAgICAgICBzY209c2VsZi5fdG9vbC5zY20oKSkKKyAgICAgICAgaHR0cGQuc2Vy
dmVfZm9yZXZlcigpICAgICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71799</attachid>
            <date>2010-10-25 14:52:36 -0700</date>
            <delta_ts>2010-10-29 13:46:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47761-20101025145235.patch</filename>
            <type>text/plain</type>
            <size>49531</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwMzQyZmEzM2I2MGNiMTY2ODcwMTA4NWFjM2ZkODg3NzE5MTI5YWMxLi4xOTIxMTg4
NGQ2NWZhNDc1OTNmYjU5ZGE2ODczNDQ0MTY0ZDBkNGM1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAK
KzIwMTAtMTAtMjUgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTG9jYWwgcmViYXNl
bGluaW5nIHRvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ3NzYxCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19p
bml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEv
bG9jYWxyZWJhc2VsaW5lL2luZGV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9tYWluLmpzOiBBZGRlZC4K
KyAgICAgICAgKG1haW4uYWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChtYWluLmRvY3VtZW50
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAoZGlzcGxheVJlc3VsdHMuZm9yKToKKyAgICAg
ICAgKGRpc3BsYXlSZXN1bHRzKToKKyAgICAgICAgKHNlbGVjdEZhaWx1cmVUeXBlKToKKyAgICAg
ICAgKHNlbGVjdERpcmVjdG9yeSk6CisgICAgICAgIChnZXRTZWxlY3RlZFRlc3QpOgorICAgICAg
ICAocHJlZmV0Y2gpOgorICAgICAgICAoc2VsZWN0VGVzdCk6CisgICAgICAgICh1cGRhdGVTdGF0
ZSk6CisgICAgICAgIChkaXNwbGF5SW1hZ2VSZXN1bHRzLm9ubG9hZCk6CisgICAgICAgIChkaXNw
bGF5SW1hZ2VSZXN1bHRzKToKKyAgICAgICAgKHVwZGF0ZURpZmYpOgorICAgICAgICAoZGlzcGxh
eVRleHRSZXN1bHRzLmxvYWRUZXh0UmVzdWx0KToKKyAgICAgICAgKCk6CisgICAgICAgIChuZXh0
VGVzdCk6CisgICAgICAgIChwcmV2aW91c1Rlc3QpOgorICAgICAgICAoc2hvd0xvdXBlKToKKyAg
ICAgICAgKGZpbGxMb3VwZUZyb21JbWFnZSk6CisgICAgICAgIChmaWxsTG91cGVGcm9tQ2FudmFz
LnJlYWRQaXhlbENvbXBvbmVudCk6CisgICAgICAgIChmaWxsTG91cGVGcm9tQ2FudmFzKToKKyAg
ICAgICAgKGhpZGVMb3VwZSk6CisgICAgICAgIChyZW1vdmVTZWxlY3Rpb25Gcm9tUmViYXNlbGlu
ZVF1ZXVlKToKKyAgICAgICAgKHJlbW92ZUZyb21SZWJhc2VsaW5lUXVldWUpOgorICAgICAgICAo
cmViYXNlbGluZVF1ZXVlKToKKyAgICAgICAgKHJlYmFzZWxpbmUuaGFuZGxlU3VjY2Vzcyk6Cisg
ICAgICAgIChyZWJhc2VsaW5lLmhhbmRsZUZhaWx1cmUpOgorICAgICAgICAobG9nKToKKyAgICAg
ICAgKHRvZ2dsZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2xv
Y2FscmViYXNlbGluZS5weTogQWRkZWQuCisKIDIwMTAtMTAtMjUgIEpvaG5ueSBEaW5nICA8am5k
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5pdF9f
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5pdF9f
LnB5CmluZGV4IDliZGVjOGY1OTdlMTc2MzYzNDRhODE4M2IxMDNhMTUwYmY4YzlkZTMuLjM4YjFl
NzllZjQ4MTYxNzQ3NDZjNzI2NjcxMTVhN2MyZGQ2NzI2NjkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9fX2luaXRfXy5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18ucHkKQEAgLTIs
NCArMiw1IEBACiAKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5wcmV0dHlkaWZmIGltcG9y
dCBQcmV0dHlEaWZmCiBmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMucmViYXNlbGluZSBpbXBv
cnQgUmViYXNlbGluZQorZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmxvY2FscmViYXNlbGlu
ZSBpbXBvcnQgTG9jYWxSZWJhc2VsaW5lCiAjIEZJWE1FOiBBZGQgdGhlIHJlc3Qgb2YgdGhlIGNv
bW1hbmRzIGhlcmUuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvaW5kZXguaHRtbCBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9pbmRl
eC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI4MmMwYzA2ODVhMmZjNWFhMGE1OGE3NTYxZTE1ZThjMjMxZmJl
NDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvaW5kZXguaHRtbApAQCAtMCwwICsxLDIwNiBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+TGF5b3V0IFRlc3Qg
UmViYXNlbGluZXI8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9tYWlu
LmNzcyIgdHlwZT0idGV4dC9jc3MiPgorICA8c2NyaXB0IHNyYz0iL21haW4uanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+CisKKzxwcmUgaWQ9ImxvZyIgc3R5bGU9ImRpc3BsYXk6IG5vbmUi
PjwvcHJlPgorPGRpdiBpZD0icXVldWUiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAgUXVldWU6
CisgIDxzZWxlY3QgaWQ9InF1ZXVlLXNlbGVjdCIgc2l6ZT0iMTAiPjwvc2VsZWN0PgorICA8YnV0
dG9uIGlkPSJyZW1vdmUtcXVldWUtc2VsZWN0aW9uIj5SZW1vdmUgc2VsZWN0aW9uPC9idXR0b24+
CisgIDxidXR0b24gaWQ9InJlYmFzZWxpbmUtcXVldWUiPlJlYmFzZWxpbmUgcXVldWU8L2J1dHRv
bj4KKzwvZGl2PgorCis8ZGl2IGlkPSJoZWFkZXIiPgorICA8ZGl2IGlkPSJjb250cm9scyI+Cisg
ICAgPCEtLSBBZGQgYSBkdW1teSA8c2VsZWN0PiBub2RlIHNvIHRoYXQgdGhpcyBsaW5lcyB1cCB3
aXRoIHRoZSB0ZXh0IG9uIHRoZSBsZWZ0IC0tPgorICAgIDxzZWxlY3Qgc3R5bGU9InZpc2liaWxp
dHk6IGhpZGRlbiI+PC9zZWxlY3Q+CisgICAgPHNwYW4gaWQ9InRvZ2dsZS1sb2ciIGNsYXNzPSJs
aW5rIj5Mb2c8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXIiPnw8L3NwYW4+CisgICAg
PGEgaHJlZj0iL3F1aXRxdWl0cXVpdCI+RXhpdDwvYT4KKyAgPC9kaXY+CisKKyAgPHNwYW4gaWQ9
InNlbGVjdG9ycyI+CisgICAgPGxhYmVsPgorICAgICAgRmFpbHVyZSB0eXBlOgorICAgICAgPHNl
bGVjdCBpZD0iZmFpbHVyZS10eXBlLXNlbGVjdG9yIj48L3NlbGVjdD4KKyAgICA8L2xhYmVsPgor
ICAKKyAgICA8bGFiZWw+CisgICAgICBEaXJlY3Rvcnk6CisgICAgICA8c2VsZWN0IGlkPSJkaXJl
Y3Rvcnktc2VsZWN0b3IiPjwvc2VsZWN0PgorICAgIDwvbGFiZWw+CisgIAorICAgIDxsYWJlbD4K
KyAgICAgIFRlc3Q6CisgICAgICA8c2VsZWN0IGlkPSJ0ZXN0LXNlbGVjdG9yIj48L3NlbGVjdD4K
KyAgICA8L2xhYmVsPgorICA8L3NwYW4+CisgIAorICA8YSBpZD0idGVzdC1saW5rIj5WaWV3IHRl
c3Q8L2E+CisgIAorICA8c3BhbiBpZD0ibmF2LWJ1dHRvbnMiPgorICAgIDxidXR0b24gaWQ9InBy
ZXZpb3VzLXRlc3QiPiZsYXF1bzs8L2J1dHRvbj4KKyAgICA8c3BhbiBpZD0idGVzdC1pbmRleCI+
PC9zcGFuPiBvZiA8c3BhbiBpZD0idGVzdC1jb3VudCI+PC9zcGFuPgorICAgIDxidXR0b24gaWQ9
Im5leHQtdGVzdCI+JnJhcXVvOzwvYnV0dG9uPgorICA8L3NwYW4+ICAKKzwvZGl2PgorCis8dGFi
bGUgaWQ9InRlc3Qtb3V0cHV0Ij4KKyAgPHRoZWFkIGlkPSJsYWJlbHMiPgorICAgIDx0cj4KKyAg
ICAgIDx0aD5FeHBlY3RlZDwvdGg+CisgICAgICA8dGg+QWN0dWFsPC90aD4KKyAgICAgIDx0aD5E
aWZmPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHkgaWQ9ImltYWdlLW91dHB1
dHMiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAgICA8dHI+CisgICAgICA8dGQgY29sc3Bhbj0i
MyI+PGgyPkltYWdlPC9oMj48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkPjxp
bWcgaWQ9ImV4cGVjdGVkLWltYWdlIj48L3RkPgorICAgICAgPHRkPjxpbWcgaWQ9ImFjdHVhbC1p
bWFnZSI+PC90ZD4KKyAgICAgIDx0ZD4KKyAgICAgICAgPGNhbnZhcyBpZD0iZGlmZi1jYW52YXMi
IHdpZHRoPSI4MDAiIGhlaWdodD0iNjAwIj48L2NhbnZhcz4KKyAgICAgICAgPGRpdiBpZD0iZGlm
Zi1jaGVja3N1bSIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgorICAgICAgICAgIDxoMz5DaGVja3N1
bSBtaXNtYXRjaDwvaDM+CisgICAgICAgICAgRXhwZWN0ZWQ6IDxzcGFuIGlkPSJleHBlY3RlZC1j
aGVja3N1bSI+PC9zcGFuPjxicj4KKyAgICAgICAgICBBY3R1YWw6IDxzcGFuIGlkPSJhY3R1YWwt
Y2hlY2tzdW0iPjwvc3Bhbj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L3RkPgorICAgIDwvdHI+
CisgIDwvdGJvZHk+CisgIDx0Ym9keSBpZD0idGV4dC1vdXRwdXRzIiBzdHlsZT0iZGlzcGxheTog
bm9uZSI+CisgICAgPHRyPgorICAgICAgPHRkIGNvbHNwYW49IjMiPjxoMj5UZXh0PC9oMj48L3Rk
PgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkPjxwcmUgaWQ9ImV4cGVjdGVkLXRleHQi
PjwvcHJlPjwvdGQ+CisgICAgICA8dGQ+PHByZSBpZD0iYWN0dWFsLXRleHQiPjwvcHJlPjwvdGQ+
CisgICAgICA8dGQ+PHByZSBpZD0iZGlmZi10ZXh0Ij48cHJlPjwvdGQ+CisgICAgPC90cj4KKyAg
PC90Ym9keT4KKworPC90YWJsZT4KKworPGRpdiBpZD0iZm9vdGVyIj4KKyAgPGxhYmVsPlN0YXRl
OiA8c3BhbiBpZD0ic3RhdGUiPjwvc3Bhbj48L2xhYmVsPgorICA8bGFiZWw+RXhpc3RpbmcgYmFz
ZWxpbmVzOiA8c3BhbiBpZD0iY3VycmVudC1iYXNlbGluZXMiPjwvc3Bhbj48L2xhYmVsPgorICA8
bGFiZWw+CisgICAgQmFzZWxpbmUgdGFyZ2V0OgorICAgIDxzZWxlY3QgaWQ9ImJhc2VsaW5lLXRh
cmdldCI+CisgICAgICA8b3B0aW9uIHZhbHVlPSJhbmRyb2lkIj5hbmRyb2lkPC9vcHRpb24+Cisg
ICAgICA8b3B0aW9uIHZhbHVlPSJhbmRyb2lkLXY4Ij5hbmRyb2lkLXY4PC9vcHRpb24+CisgICAg
ICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bSI+Y2hyb21pdW08L29wdGlvbj4KKyAgICAgIDxvcHRp
b24gdmFsdWU9ImNocm9taXVtLWdwdSI+Y2hyb21pdW0tZ3B1PC9vcHRpb24+CisgICAgICA8b3B0
aW9uIHZhbHVlPSJjaHJvbWl1bS1ncHUtbGludXgiPmNocm9taXVtLWdwdS1saW51eDwvb3B0aW9u
PgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0tZ3B1LW1hYyI+Y2hyb21pdW0tZ3B1LW1h
Yzwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0tZ3B1LXdpbiI+Y2hyb21p
dW0tZ3B1LXdpbjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0tbGludXgi
PmNocm9taXVtLWxpbnV4PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1t
YWMiPmNocm9taXVtLW1hYzwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0t
d2luIj5jaHJvbWl1bS13aW48L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVt
LXdpbi12aXN0YSI+Y2hyb21pdW0td2luLXZpc3RhPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZh
bHVlPSJjaHJvbWl1bS13aW4teHAiPmNocm9taXVtLXdpbi14cDwvb3B0aW9uPgorICAgICAgPG9w
dGlvbiB2YWx1ZT0iZ29vZ2xlLWNocm9tZS1saW51eDMyIj5nb29nbGUtY2hyb21lLWxpbnV4MzI8
L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Imdvb2dsZS1jaHJvbWUtbGludXg2NCI+Z29v
Z2xlLWNocm9tZS1saW51eDY0PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJndGsiPmd0
azwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjIiBzZWxlY3RlZD5tYWM8L29wdGlv
bj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Im1hYy1sZW9wYXJkIj5tYWMtbGVvcGFyZDwvb3B0aW9u
PgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjLXNub3dsZW9wYXJkIj5tYWMtc25vd2xlb3BhcmQ8
L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Im1hYy10aWdlciI+bWFjLXRpZ2VyPC9vcHRp
b24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMtd2syIj5tYWMtd2syPC9vcHRpb24+CisgICAg
ICA8b3B0aW9uIHZhbHVlPSJxdCI+cXQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9InF0
LWxpbnV4Ij5xdC1saW51eDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0icXQtbWFjIj5x
dC1tYWM8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9InF0LXdpbiI+cXQtd2luPC9vcHRp
b24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJxdC13azIiPnF0LXdrMjwvb3B0aW9uPgorICAgICAg
PG9wdGlvbiB2YWx1ZT0id2luIj53aW48L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Indp
bi13azIiPndpbi13azI8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Indpbi14cCI+d2lu
LXhwPC9vcHRpb24+CisgICAgPC9zZWxlY3Q+CisgIDwvbGFiZWw+CisgIDxsYWJlbD4KKyAgICBN
b3ZlIGN1cnJlbnQgYmFzZWxpbmVzIHRvOgorICAgIDxzZWxlY3QgaWQ9ImJhc2VsaW5lLW1vdmUt
dG8iPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibm9uZSI+Tm93aGVyZSAocmVwbGFjZSk8L29wdGlv
bj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImFuZHJvaWQiPmFuZHJvaWQ8L29wdGlvbj4KKyAgICAg
IDxvcHRpb24gdmFsdWU9ImFuZHJvaWQtdjgiPmFuZHJvaWQtdjg8L29wdGlvbj4KKyAgICAgIDxv
cHRpb24gdmFsdWU9ImNocm9taXVtIj5jaHJvbWl1bTwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2
YWx1ZT0iY2hyb21pdW0tZ3B1Ij5jaHJvbWl1bS1ncHU8L29wdGlvbj4KKyAgICAgIDxvcHRpb24g
dmFsdWU9ImNocm9taXVtLWdwdS1saW51eCI+Y2hyb21pdW0tZ3B1LWxpbnV4PC9vcHRpb24+Cisg
ICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1ncHUtbWFjIj5jaHJvbWl1bS1ncHUtbWFjPC9v
cHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1ncHUtd2luIj5jaHJvbWl1bS1n
cHUtd2luPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1saW51eCI+Y2hy
b21pdW0tbGludXg8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLW1hYyI+
Y2hyb21pdW0tbWFjPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS13aW4i
PmNocm9taXVtLXdpbjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0td2lu
LXZpc3RhIj5jaHJvbWl1bS13aW4tdmlzdGE8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9
ImNocm9taXVtLXdpbi14cCI+Y2hyb21pdW0td2luLXhwPC9vcHRpb24+CisgICAgICA8b3B0aW9u
IHZhbHVlPSJnb29nbGUtY2hyb21lLWxpbnV4MzIiPmdvb2dsZS1jaHJvbWUtbGludXgzMjwvb3B0
aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iZ29vZ2xlLWNocm9tZS1saW51eDY0Ij5nb29nbGUt
Y2hyb21lLWxpbnV4NjQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Imd0ayI+Z3RrPC9v
cHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMiPm1hYzwvb3B0aW9uPgorICAgICAgPG9w
dGlvbiB2YWx1ZT0ibWFjLWxlb3BhcmQiPm1hYy1sZW9wYXJkPC9vcHRpb24+CisgICAgICA8b3B0
aW9uIHZhbHVlPSJtYWMtc25vd2xlb3BhcmQiPm1hYy1zbm93bGVvcGFyZDwvb3B0aW9uPgorICAg
ICAgPG9wdGlvbiB2YWx1ZT0ibWFjLXRpZ2VyIj5tYWMtdGlnZXI8L29wdGlvbj4KKyAgICAgIDxv
cHRpb24gdmFsdWU9Im1hYy13azIiPm1hYy13azI8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFs
dWU9InF0Ij5xdDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0icXQtbGludXgiPnF0LWxp
bnV4PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJxdC1tYWMiPnF0LW1hYzwvb3B0aW9u
PgorICAgICAgPG9wdGlvbiB2YWx1ZT0icXQtd2luIj5xdC13aW48L29wdGlvbj4KKyAgICAgIDxv
cHRpb24gdmFsdWU9InF0LXdrMiI+cXQtd2syPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVl
PSJ3aW4iPndpbjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0id2luLXdrMiI+d2luLXdr
Mjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0id2luLXhwIj53aW4teHA8L29wdGlvbj4g
ICAgICAKKyAgICA8L3NlbGVjdD4KKyAgPC9sYWJlbD4KKworICA8IS0tIEFkZCBhIGR1bW15IDxi
dXR0b24+IG5vZGUgc28gdGhhdCB0aGlzIGxpbmVzIHVwIHdpdGggdGhlIHRleHQgb24gdGhlIGxl
ZnQgLS0+CisgIDxidXR0b24gc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbiI+PC9idXR0b24+Cisg
IAorICA8ZGl2IGlkPSJhY3Rpb24tYnV0dG9ucyI+CisgICAgPHNwYW4gaWQ9InRvZ2dsZS1xdWV1
ZSIgY2xhc3M9ImxpbmsiPlF1ZXVlPC9zcGFuPgorICAgIDxidXR0b24gaWQ9ImFkZC10by1yZWJh
c2VsaW5lLXF1ZXVlIj5BZGQgdG8gcmViYXNlbGluZSBxdWV1ZTwvYnV0dG9uPgorICA8L2Rpdj4K
KzwvZGl2PgorCis8dGFibGUgaWQ9ImxvdXBlIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+CisgIDx0
cj4KKyAgICA8dGQgY29sc3Bhbj0iMyIgaWQ9ImxvdXBlLWluZm8iPgorICAgICAgPHNwYW4gaWQ9
ImxvdXBlLWNsb3NlIiBjbGFzcz0ibGluayI+Q2xvc2U8L3NwYW4+CisgICAgICA8bGFiZWw+Q29v
cmRpbmF0ZTogPHNwYW4gaWQ9ImxvdXBlLWNvb3JkaW5hdGUiPjwvc3Bhbj48L2xhYmVsPgorICAg
IDwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+CisgICAgICA8ZGl2IGNsYXNzPSJsb3Vw
ZS1jb250YWluZXIiPgorICAgICAgICA8Y2FudmFzIGlkPSJleHBlY3RlZC1sb3VwZSIgd2lkdGg9
IjIxMCIgaGVpZ2h0PSIyMTAiPjwvY2FudmFzPgorICAgICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIt
aGlnaGxpZ2h0Ij48L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvdGQ+CisgICAgPHRkPgorICAg
ICAgPGRpdiBjbGFzcz0ibG91cGUtY29udGFpbmVyIj4KKyAgICAgICAgPGNhbnZhcyBpZD0iYWN0
dWFsLWxvdXBlIiB3aWR0aD0iMjEwIiBoZWlnaHQ9IjIxMCI+PC9jYW52YXM+CisgICAgICAgIDxk
aXYgY2xhc3M9ImNlbnRlci1oaWdobGlnaHQiPjwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC90
ZD4KKyAgICA8dGQ+CisgICAgICA8ZGl2IGNsYXNzPSJsb3VwZS1jb250YWluZXIiPgorICAgICAg
ICA8Y2FudmFzIGlkPSJkaWZmLWxvdXBlIiB3aWR0aD0iMjEwIiBoZWlnaHQ9IjIxMCI+PC9jYW52
YXM+CisgICAgICAgIDxkaXYgY2xhc3M9ImNlbnRlci1oaWdobGlnaHQiPjwvZGl2PgorICAgICAg
PC9kaXY+CisgICAgPC90ZD4KKyAgPC90cj4KKyAgPHRyIGlkPSJsb3VwZS1jb2xvcnMiPgorICAg
IDx0ZD48bGFiZWw+RXhwLiBjb2xvcjogPHNwYW4gaWQ9ImV4cGVjdGVkLWxvdXBlLWNvbG9yIj48
L3NwYW4+PC9sYWJlbD48L3RkPgorICAgIDx0ZD48bGFiZWw+QWN0dWFsIGNvbG9yOiA8c3BhbiBp
ZD0iYWN0dWFsLWxvdXBlLWNvbG9yIj48L3NwYW4+PC9sYWJlbD48L3RkPgorICAgIDx0ZD48bGFi
ZWw+RGlmZiBjb2xvcjogPHNwYW4gaWQ9ImRpZmYtbG91cGUtY29sb3IiPjwvc3Bhbj48L2xhYmVs
PjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9sb2NhbHJl
YmFzZWxpbmUvbWFpbi5jc3MgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvbWFpbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWNlZDM1MjQz
MjQ2N2JmZTNlZWQ5OGQ4MmI5OGNiNmRkY2ZiYzdiZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGlu
ZS9tYWluLmNzcwpAQCAtMCwwICsxLDIzOSBAQAorYm9keSB7CisgIGZvbnQtc2l6ZTogMTJweDsK
KyAgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgIHBhZGRpbmc6
IDA7CisgIG1hcmdpbjogMDsKK30KKworZGl2IHsKKyAgbWFyZ2luOiAwOworfQorCithLCAubGlu
ayB7CisgIGNvbG9yOiAjYWFmOworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY3Vy
c29yOiBwb2ludGVyOyAgICAgIAorfQorCisubGluay5zZWxlY3RlZCB7CisgIGNvbG9yOiAjZmZm
OworICBmb250LXdlaWdodDogYm9sZDsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisj
bG9nLAorI3F1ZXVlIHsKKyAgcGFkZGluZzogLjI1ZW0gMCAwIC4yNWVtOworICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgIHJpZ2h0OiAwOworICBoZWlnaHQ6IDIwMHB4OworICBvdmVyZmxvdzogYXV0
bzsKKyAgYmFja2dyb3VuZDogI2ZmZjsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAxcHggMXB4IDVw
eCByZ2JhKDAsIDAsIDAsIC41KTsKK30KKworI2xvZyB7CisgIHRvcDogMmVtOworICB3aWR0aDog
NTAwcHg7Cit9CisKKyNxdWV1ZSB7CisgIGJvdHRvbTogM2VtOworICB3aWR0aDogNDAwcHg7Cit9
CisKKyNxdWV1ZS1zZWxlY3QgeworICBkaXNwbGF5OiBibG9jazsKKyAgd2lkdGg6IDM5MHB4Owor
fQorCisjaGVhZGVyLAorI2Zvb3RlciB7CisgIHBhZGRpbmc6IC41ZW0gMWVtOyAgICAKKyAgYmFj
a2dyb3VuZDogIzMzMzsKKyAgY29sb3I6ICNmZmY7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAx
cHggNXB4IHJnYmEoMCwgMCwgMCwgMC41KTsKK30KKworI2hlYWRlciAuZGl2aWRlciwKKyNmb290
ZXIgLmRpdmlkZXIgeworICBvcGFjaXR5OiAuMzsKKyAgcGFkZGluZzogMCAuNWVtOworfQorCisj
aGVhZGVyIHsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisjaGVhZGVyIGxhYmVsLAorI2Zv
b3RlciBsYWJlbCB7CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgY29sb3I6ICNjY2M7Cit9CisK
KyN0ZXN0LWxpbmsgeworICBtYXJnaW4tcmlnaHQ6IDFlbTsKK30KKworI2hlYWRlciBsYWJlbCBz
cGFuLAorI2Zvb3RlciBsYWJlbCBzcGFuIHsKKyAgY29sb3I6ICNmZmY7CisgIGZvbnQtd2VpZ2h0
OiBib2xkOworfQorCisjbmF2LWJ1dHRvbnMgYnV0dG9uIHsKKyAgYmFja2dyb3VuZDogI2ZmZjsK
KyAgYm9yZGVyOiAwOworICBib3JkZXItcmFkaXVzOiAxMHB4OworfQorCisjbmF2LWJ1dHRvbnMg
YnV0dG9uOmFjdGl2ZSB7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDVweCAjMzNmIGluc2V0
OworICBiYWNrZ3JvdW5kOiAjYWFhOworfQorCisjbmF2LWJ1dHRvbnMgYnV0dG9uW2Rpc2FibGVk
XSB7CisgIG9wYWNpdHk6IC41OworfQorCisjY29udHJvbHMgeworICBmbG9hdDogcmlnaHQ7Cit9
CisKKyN0ZXN0LW91dHB1dCB7CisgIGJvcmRlci1zcGFjaW5nOiAwOworICBib3JkZXItY29sbGFw
c2U6IGNvbGxhcHNlOworICBtYXJnaW46IDAgYXV0bzsKK30KKworI3Rlc3Qtb3V0cHV0IHRkLAor
I3Rlc3Qtb3V0cHV0IHRoIHsKKyAgcGFkZGluZzogMDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsK
K30KKworI2ltYWdlLW91dHB1dHMgaW1nLAorI2ltYWdlLW91dHB1dHMgY2FudmFzLAorI2ltYWdl
LW91dHB1dHMgI2RpZmYtY2hlY2tzdW0geworICB3aWR0aDogODAwcHg7CisgIGhlaWdodDogNjAw
cHg7CisgIGJvcmRlcjogc29saWQgMXB4ICNkZGQ7Cit9CisKKyNpbWFnZS1vdXRwdXRzIGltZy5s
b2FkaW5nLAorI2ltYWdlLW91dHB1dHMgY2FudmFzLmxvYWRpbmcgeworICBvcGFjaXR5OiAuNTsK
K30KKworI2ltYWdlLW91dHB1dHMgI2FjdHVhbC1pbWFnZSB7CisgIG1hcmdpbjogMCAxZW07Cit9
CisKKyN0ZXN0LW91dHB1dCAjbGFiZWxzIHRoIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBj
b2xvcjogIzY2NjsKK30KKworI3RleHQtb3V0cHV0cyBwcmUgeworICBoZWlnaHQ6IDYwMHB4Owor
ICB3aWR0aDogODAwcHg7CisgIG92ZXJmbG93OiBhdXRvOworfQorCisjdGVzdC1vdXRwdXQgaDIg
eworICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2NjYzsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7
CisgIG1hcmdpbjogMDsKKyAgYmFja2dyb3VuZDogI2VlZTsKK30KKworI2Zvb3RlciB7CisgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwOworICBsZWZ0OiAwOworICByaWdodDogMDsK
KyAgbWFyZ2luLXRvcDogMWVtOworfQorCisjc3RhdGUubmVlZHNfcmViYXNlbGluZSB7CisgIGNv
bG9yOiB5ZWxsb3c7Cit9Cisjc3RhdGUucmViYXNlbGluZV9mYWlsZWQgeworICBjb2xvcjogcmVk
OworfQorI3N0YXRlLnJlYmFzZWxpbmVfc3VjY2VlZGVkIHsKKyAgY29sb3I6IGdyZWVuOworfQor
I3N0YXRlLmluX3F1ZXVlIHsKKyAgY29sb3I6IGdyYXk7Cit9CisKKyNhY3Rpb24tYnV0dG9ucyB7
CisgIGZsb2F0OiByaWdodDsKK30KKworI2FjdGlvbi1idXR0b25zIC5saW5rIHsKKyAgbWFyZ2lu
LXJpZ2h0OiAxZW07Cit9CisKKyNmb290ZXIgYnV0dG9uIHsKKyAgcGFkZGluZzogMWVtOworfQor
CisjbG91cGUgeworICAtd2Via2l0LWJveC1zaGFkb3c6IDJweCAycHggNXB4IHJnYmEoMCwgMCwg
MCwgLjUpOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHdpZHRoOiA2MzRweDsKKyAgdG9wOiA1
MCU7CisgIGxlZnQ6IDUwJTsKKyAgbWFyZ2luLWxlZnQ6IC0xNTFweDsKKyAgbWFyZ2luLXRvcDog
LTUwcHg7CisgIGJhY2tncm91bmQ6ICNmZmY7CisgIGJvcmRlci1zcGFjaW5nOiAwOworICBib3Jk
ZXItY29sbGFwc2U6IGNvbGxhcHNlOworfQorCisjbG91cGUgdGQgeworICBwYWRkaW5nOiAwOwor
ICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOyAgICAgCit9CisKKyNsb3VwZSBsYWJlbCB7CisgIGNv
bG9yOiAjOTk5OworICBwYWRkaW5nLXJpZ2h0OiAxZW07Cit9CisKKyNsb3VwZSBzcGFuIHsKKyAg
Y29sb3I6ICMwMDA7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisjbG91cGUgI2xvdXBlLWNs
b3NlIHsKKyAgZmxvYXQ6IHJpZ2h0OworfQorCisjbG91cGUgI2xvdXBlLWluZm8geworICBiYWNr
Z3JvdW5kOiAjZWVlOworICBwYWRkaW5nOiAuM2VtIC41ZW07Cit9CisKKyNsb3VwZSAjbG91cGUt
Y29sb3JzIHRkIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisjbG91cGUgLmxvdXBlLWNv
bnRhaW5lciB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgd2lkdGg6IDIxMHB4OworICBoZWln
aHQ6IDIxMHB4OworfQorCisjbG91cGUgLmNlbnRlci1oaWdobGlnaHQgeworICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgIHdpZHRoOiAxMHB4OworICBoZWlnaHQ6IDEwcHg7CisgIHRvcDogNTAlOwor
ICBsZWZ0OiA1MCU7CisgIG1hcmdpbi1sZWZ0OiAtNXB4OworICBtYXJnaW4tdG9wOiAtNXB4Owor
ICBvdXRsaW5lOiBzb2xpZCAxcHggIzk5OTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
ZGF0YS9sb2NhbHJlYmFzZWxpbmUvbWFpbi5qcyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9tYWluLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY3ZmQ0NDA0ZDU5YzM4MWIzMzExMWFhYTJkOTgwNDVlMTdhMmNlYTEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9sb2Nh
bHJlYmFzZWxpbmUvbWFpbi5qcwpAQCAtMCwwICsxLDYxNyBAQAordmFyIFNUQVRFX05FRURTX1JF
QkFTRUxJTkUgPSAnbmVlZHNfcmViYXNlbGluZSc7Cit2YXIgU1RBVEVfUkVCQVNFTElORV9GQUlM
RUQgPSAncmViYXNlbGluZV9mYWlsZWQnOwordmFyIFNUQVRFX1JFQkFTRUxJTkVfU1VDQ0VFREVE
ID0gJ3JlYmFzZWxpbmVfc3VjY2VlZGVkJzsKK3ZhciBTVEFURV9JTl9RVUVVRSA9ICdpbl9xdWV1
ZSc7Cit2YXIgU1RBVEVfVE9fRElTUExBWV9TVEFURSA9IHt9OworU1RBVEVfVE9fRElTUExBWV9T
VEFURVtTVEFURV9ORUVEU19SRUJBU0VMSU5FXSA9ICdOZWVkcyByZWJhc2VsaW5lJzsKK1NUQVRF
X1RPX0RJU1BMQVlfU1RBVEVbU1RBVEVfUkVCQVNFTElORV9GQUlMRURdID0gJ1JlYmFzZWxpbmUg
ZmFpbGVkJzsKK1NUQVRFX1RPX0RJU1BMQVlfU1RBVEVbU1RBVEVfUkVCQVNFTElORV9TVUNDRUVE
RURdID0gJ1JlYmFzZWxpbmUgc3VjY2VlZGVkJzsKK1NUQVRFX1RPX0RJU1BMQVlfU1RBVEVbU1RB
VEVfSU5fUVVFVUVdID0gJ0luIHF1ZXVlJzsKKwordmFyIHJlc3VsdHM7Cit2YXIgdGVzdHNCeUZh
aWx1cmVUeXBlID0ge307Cit2YXIgdGVzdHNCeURpcmVjdG9yeSA9IHt9OwordmFyIHNlbGVjdGVk
VGVzdHMgPSBbXTsKK3ZhciBpblByb2dyZXNzUmViYXNlbGluZUNvdW50ID0gMDsKKworZnVuY3Rp
b24gJChpZCkgeworICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworfQorCitm
dW5jdGlvbiBtYWluKCkgeworICAkKCdmYWlsdXJlLXR5cGUtc2VsZWN0b3InKS5hZGRFdmVudExp
c3RlbmVyKCdjaGFuZ2UnLCBzZWxlY3RGYWlsdXJlVHlwZSk7CisgICQoJ2RpcmVjdG9yeS1zZWxl
Y3RvcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHNlbGVjdERpcmVjdG9yeSk7CisgICQo
J3Rlc3Qtc2VsZWN0b3InKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBzZWxlY3RUZXN0KTsK
KyAgJCgnbmV4dC10ZXN0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBuZXh0VGVzdCk7Cisg
ICQoJ3ByZXZpb3VzLXRlc3QnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHByZXZpb3VzVGVz
dCk7CisKKyAgJCgnYWRkLXRvLXJlYmFzZWxpbmUtcXVldWUnKS5hZGRFdmVudExpc3RlbmVyKCdj
bGljaycsIGFkZFRvUmViYXNlbGluZVF1ZXVlKTsKKyAgJCgncXVldWUtc2VsZWN0JykuYWRkRXZl
bnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlU3RhdGUpOworICAkKCdyZW1vdmUtcXVldWUtc2Vs
ZWN0aW9uJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVTZWxlY3Rpb25Gcm9tUmVi
YXNlbGluZVF1ZXVlKTsKKyAgJCgncmViYXNlbGluZS1xdWV1ZScpLmFkZEV2ZW50TGlzdGVuZXIo
J2NsaWNrJywgcmViYXNlbGluZVF1ZXVlKTsKKworICAkKCdleHBlY3RlZC1pbWFnZScpLmFkZEV2
ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd0xvdXBlKTsKKyAgJCgnYWN0dWFsLWltYWdlJykuYWRk
RXZlbnRMaXN0ZW5lcignY2xpY2snLCBzaG93TG91cGUpOworICAkKCdkaWZmLWNhbnZhcycpLmFk
ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd0xvdXBlKTsKKyAgJCgnbG91cGUtY2xvc2UnKS5h
ZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhpZGVMb3VwZSk7CisgICQoJ3RvZ2dsZS1sb2cnKS5h
ZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge3RvZ2dsZSgnbG9nJyl9KTsKKyAg
JCgndG9nZ2xlLXF1ZXVlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHt0
b2dnbGUoJ3F1ZXVlJyl9KTsKKworICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3du
JywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxL
ZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkgeworICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGV2ZW50LmtleUlkZW50aWZpZXIpIHsKKyAgICAgIGNh
c2UgJ0xlZnQnOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBwcmV2aW91c1Rlc3QoKTsgYnJlYWs7
CisgICAgICBjYXNlICdSaWdodCc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IG5leHRUZXN0KCk7
IGJyZWFrOworICAgICAgY2FzZSAnVSswMDUxJzogYWRkVG9SZWJhc2VsaW5lUXVldWUoKTsgYnJl
YWs7CisgICAgICBjYXNlICdVKzAwNTInOiByZWJhc2VsaW5lUXVldWUoKTsgYnJlYWs7CisgICAg
fQorICB9KTsKKyAgCisgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgeGhyLm9w
ZW4oJ0dFVCcsICcvcmVzdWx0cy5qc29uJyk7CisgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2Fk
JywgZnVuY3Rpb24oKSB7CisgICAgcmVzdWx0cyA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4
dCk7CisgICAgZGlzcGxheVJlc3VsdHMoKTsgIAorICB9KTsKKyAgeGhyLnNlbmQoKTsKK30KKwor
ZnVuY3Rpb24gZGlzcGxheVJlc3VsdHMoKSB7CisgIHZhciBmYWlsdXJlVHlwZVNlbGVjdG9yID0g
JCgnZmFpbHVyZS10eXBlLXNlbGVjdG9yJyk7CisgIHZhciBmYWlsdXJlVHlwZXMgPSBbXTsKKyAg
CisgIGZvciAodmFyIHRlc3ROYW1lIGluIHJlc3VsdHMudGVzdHMpIHsKKyAgICB2YXIgdGVzdCA9
IHJlc3VsdHMudGVzdHNbdGVzdE5hbWVdOworICAgIGlmICh0ZXN0LmFjdHVhbCA9PSAnUEFTUycp
IHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICB2YXIgZmFpbHVyZVR5cGUgPSB0ZXN0LmFj
dHVhbCArICcgKGV4cGVjdGVkICcgKyB0ZXN0LmV4cGVjdGVkICsgJyknOworICAgIGlmICghKGZh
aWx1cmVUeXBlIGluIHRlc3RzQnlGYWlsdXJlVHlwZSkpIHsKKyAgICAgIHRlc3RzQnlGYWlsdXJl
VHlwZVtmYWlsdXJlVHlwZV0gPSBbXTsKKyAgICAgIGZhaWx1cmVUeXBlcy5wdXNoKGZhaWx1cmVU
eXBlKTsKKyAgICB9CisgICAgdGVzdHNCeUZhaWx1cmVUeXBlW2ZhaWx1cmVUeXBlXS5wdXNoKHRl
c3ROYW1lKTsKKyAgfQorICAKKyAgZmFpbHVyZVR5cGVzLnNvcnQoZnVuY3Rpb24oYSwgYikgewor
ICAgIHJldHVybiB0ZXN0c0J5RmFpbHVyZVR5cGVbYl0ubGVuZ3RoIC0gdGVzdHNCeUZhaWx1cmVU
eXBlW2FdLmxlbmd0aDsKKyAgfSk7CisgIAorICBmb3IgKHZhciBpID0gMCwgZmFpbHVyZVR5cGU7
IGZhaWx1cmVUeXBlID0gZmFpbHVyZVR5cGVzW2ldOyBpKyspIHsKKyAgICB2YXIgZmFpbHVyZVR5
cGVPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKKyAgICBmYWlsdXJl
VHlwZU9wdGlvbi52YWx1ZSA9IGZhaWx1cmVUeXBlOworICAgIGZhaWx1cmVUeXBlT3B0aW9uLnRl
eHRDb250ZW50ID0gZmFpbHVyZVR5cGUgKyAnIC0gJyArIHRlc3RzQnlGYWlsdXJlVHlwZVtmYWls
dXJlVHlwZV0ubGVuZ3RoICsgJyB0ZXN0cyc7CisgICAgZmFpbHVyZVR5cGVTZWxlY3Rvci5hcHBl
bmRDaGlsZChmYWlsdXJlVHlwZU9wdGlvbik7CisgIH0KKyAgCisgIHNlbGVjdEZhaWx1cmVUeXBl
KCk7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdEZhaWx1cmVUeXBlKCkgeworICB2YXIgc2VsZWN0ZWRG
YWlsdXJlVHlwZSA9IGdldFNlbGVjdFZhbHVlKCdmYWlsdXJlLXR5cGUtc2VsZWN0b3InKTsKKyAg
dmFyIHRlc3RzID0gdGVzdHNCeUZhaWx1cmVUeXBlW3NlbGVjdGVkRmFpbHVyZVR5cGVdOworICAK
KyAgLy8gSW5jbHVkZSBhIGFwZWNpYWwgb3B0aW9uIGZvciBhbGwgdGVzdHMKKyAgdGVzdHNCeURp
cmVjdG9yeSA9IHsnW2FsbF0nOiB0ZXN0c307CisgIHZhciBkaXNwbGF5RGlyZWN0b3J5TmFtZXNC
eURpcmVjdG9yeSA9IHsnW2FsbF0nOiAnYWxsJ307CisgIHZhciBkaXJlY3RvcmllcyA9IFsnW2Fs
bF0nXTsKKyAgCisgIGZvciAodmFyIGkgPSAwLCB0ZXN0OyB0ZXN0ID0gdGVzdHNbaV07IGkrKykg
eworICAgIHZhciBwYXRoUGllY2VzID0gdGVzdC5zcGxpdCgnLycpOworICAgIHZhciBkaXJlY3Rv
cnkgPSAnJzsKKyAgICAKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhdGhQaWVjZXMubGVuZ3Ro
IC0gMTsgaisrKSB7CisgICAgICBkaXJlY3RvcnkgKz0gcGF0aFBpZWNlc1tqXSArICcvJzsKKyAg
ICAgIGlmICghKGRpcmVjdG9yeSBpbiB0ZXN0c0J5RGlyZWN0b3J5KSkgeworICAgICAgICB0ZXN0
c0J5RGlyZWN0b3J5W2RpcmVjdG9yeV0gPSBbXTsKKyAgICAgICAgdmFyIGRpc3BsYXlEaXJlY3Rv
cnlOYW1lID0gbmV3IEFycmF5KGogKiA2KS5qb2luKCcmbmJzcDsnKSArIHBhdGhQaWVjZXNbal07
CisgICAgICAgIGRpc3BsYXlEaXJlY3RvcnlOYW1lc0J5RGlyZWN0b3J5W2RpcmVjdG9yeV0gPSBk
aXNwbGF5RGlyZWN0b3J5TmFtZTsKKyAgICAgICAgZGlyZWN0b3JpZXMucHVzaChkaXJlY3Rvcnkp
OworICAgICAgfQorICAgICAgCisgICAgICB0ZXN0c0J5RGlyZWN0b3J5W2RpcmVjdG9yeV0ucHVz
aCh0ZXN0KTsKKyAgICB9CisgIH0KKyAgCisgIGRpcmVjdG9yaWVzLnNvcnQoKTsKKworICB2YXIg
ZGlyZWN0b3J5U2VsZWN0b3IgPSAkKCdkaXJlY3Rvcnktc2VsZWN0b3InKTsgIAorICBkaXJlY3Rv
cnlTZWxlY3Rvci5pbm5lckhUTUwgPSAnJzsKKyAgCisgIGZvciAodmFyIGkgPSAwLCBkaXJlY3Rv
cnk7IGRpcmVjdG9yeSA9IGRpcmVjdG9yaWVzW2ldOyBpKyspIHsKKyAgICB2YXIgZGlyZWN0b3J5
T3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CisgICAgZGlyZWN0b3J5
T3B0aW9uLnZhbHVlID0gZGlyZWN0b3J5OworICAgIGRpcmVjdG9yeU9wdGlvbi5pbm5lckhUTUwg
PQorICAgICAgICBkaXNwbGF5RGlyZWN0b3J5TmFtZXNCeURpcmVjdG9yeVtkaXJlY3RvcnldICsg
JyAtICcgKworICAgICAgICB0ZXN0c0J5RGlyZWN0b3J5W2RpcmVjdG9yeV0ubGVuZ3RoICsgJyB0
ZXN0cyc7CisgICAgZGlyZWN0b3J5U2VsZWN0b3IuYXBwZW5kQ2hpbGQoZGlyZWN0b3J5T3B0aW9u
KTsgICAgCisgIH0KKyAgCisgIHNlbGVjdERpcmVjdG9yeSgpOworfQorCitmdW5jdGlvbiBzZWxl
Y3REaXJlY3RvcnkoKSB7CisgIHZhciBzZWxlY3RlZERpcmVjdG9yeSA9IGdldFNlbGVjdFZhbHVl
KCdkaXJlY3Rvcnktc2VsZWN0b3InKTsKKyAgc2VsZWN0ZWRUZXN0cyA9IHRlc3RzQnlEaXJlY3Rv
cnlbc2VsZWN0ZWREaXJlY3RvcnldOworCisgIHNlbGVjdGVkVGVzdHMuc29ydCgpOworCisgIHZh
ciB0ZXN0U2VsZWN0b3IgPSAkKCd0ZXN0LXNlbGVjdG9yJyk7CisgIHRlc3RTZWxlY3Rvci5pbm5l
ckhUTUwgPSAnJzsKKyAgZm9yICh2YXIgaSA9IDAsIHRlc3Q7IHRlc3QgPSBzZWxlY3RlZFRlc3Rz
W2ldOyBpKyspIHsKKyAgICB2YXIgdGVzdE9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J29wdGlvbicpOworICAgIHRlc3RPcHRpb24udmFsdWUgPSB0ZXN0OworICAgIHRlc3RPcHRpb24u
dGV4dENvbnRlbnQgPSB0ZXN0OworICAgIHRlc3RTZWxlY3Rvci5hcHBlbmRDaGlsZCh0ZXN0T3B0
aW9uKTsgICAgCisgIH0KKyAgCisgIHNlbGVjdFRlc3QoKTsKK30KKworZnVuY3Rpb24gZ2V0U2Vs
ZWN0VmFsdWUoaWQpIHsKKyAgdmFyIHNlbGVjdCA9ICQoaWQpOworICByZXR1cm4gc2VsZWN0Lm9w
dGlvbnNbc2VsZWN0LnNlbGVjdGVkSW5kZXhdLnZhbHVlOworfQorCitmdW5jdGlvbiBnZXRTZWxl
Y3RlZFRlc3QoKSB7CisgIHJldHVybiBnZXRTZWxlY3RWYWx1ZSgndGVzdC1zZWxlY3RvcicpOwor
fQorCitmdW5jdGlvbiBwcmVmZXRjaCgpIHsKKyAgdmFyIHRlc3RTZWxlY3RvciA9ICQoJ3Rlc3Qt
c2VsZWN0b3InKTsKKyAgaWYgKHRlc3RTZWxlY3Rvci5zZWxlY3RlZEluZGV4ID09IHRlc3RTZWxl
Y3Rvci5vcHRpb25zLmxlbmd0aCAtIDEpIHsKKyAgICByZXR1cm47CisgIH0KKyAgdmFyIG5leHRU
ZXN0ID0gdGVzdFNlbGVjdG9yLm9wdGlvbnNbdGVzdFNlbGVjdG9yLnNlbGVjdGVkSW5kZXggKyAx
XS52YWx1ZTsKKyAgaWYgKHJlc3VsdHMudGVzdHNbbmV4dFRlc3RdLmFjdHVhbC5pbmRleE9mKCdJ
TUFHRScpICE9IC0xKSB7CisgICAgbmV3IEltYWdlKCkuc3JjID0gJy90ZXN0X3Jlc3VsdD90ZXN0
PScgKyBuZXh0VGVzdCArICcmbW9kZT1leHBlY3RlZC1pbWFnZSc7CisgICAgbmV3IEltYWdlKCku
c3JjID0gJy90ZXN0X3Jlc3VsdD90ZXN0PScgKyBuZXh0VGVzdCArICcmbW9kZT1hY3R1YWwtaW1h
Z2UnOyAgICAKKyAgfQorfQorCitmdW5jdGlvbiBzZWxlY3RUZXN0KCkgeworICB2YXIgc2VsZWN0
ZWRUZXN0ID0gZ2V0U2VsZWN0ZWRUZXN0KCk7CisgIAorICBpZiAocmVzdWx0cy50ZXN0c1tzZWxl
Y3RlZFRlc3RdLmFjdHVhbC5pbmRleE9mKCdJTUFHRScpICE9IC0xKSB7CisgICAgJCgnaW1hZ2Ut
b3V0cHV0cycpLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICBkaXNwbGF5SW1hZ2VSZXN1bHRzKHNl
bGVjdGVkVGVzdCk7CisgIH0gZWxzZSB7CisgICAgJCgnaW1hZ2Utb3V0cHV0cycpLnN0eWxlLmRp
c3BsYXkgPSAnbm9uZSc7ICAKKyAgfQorCisgIGlmIChyZXN1bHRzLnRlc3RzW3NlbGVjdGVkVGVz
dF0uYWN0dWFsLmluZGV4T2YoJ1RFWFQnKSAhPSAtMSkgeworICAgICQoJ3RleHQtb3V0cHV0cycp
LnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICBkaXNwbGF5VGV4dFJlc3VsdHMoc2VsZWN0ZWRUZXN0
KTsKKyAgfSBlbHNlIHsKKyAgICAkKCd0ZXh0LW91dHB1dHMnKS5zdHlsZS5kaXNwbGF5ID0gJ25v
bmUnOyAgCisgIH0KKyAgCisgIHZhciBjdXJyZW50QmFzZWxpbmVzID0gJCgnY3VycmVudC1iYXNl
bGluZXMnKTsKKyAgY3VycmVudEJhc2VsaW5lcy50ZXh0Q29udGVudCA9ICcnOworICB2YXIgYmFz
ZWxpbmVzID0gcmVzdWx0cy50ZXN0c1tzZWxlY3RlZFRlc3RdLmJhc2VsaW5lczsKKyAgdmFyIHRl
c3ROYW1lID0gc2VsZWN0ZWRUZXN0LnNwbGl0KCcuJykuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKTsK
KyAgZm9yICh2YXIgcGxhdGZvcm0gaW4gYmFzZWxpbmVzKSB7CisgICAgaWYgKGN1cnJlbnRCYXNl
bGluZXMuZmlyc3RDaGlsZCkgeworICAgICAgY3VycmVudEJhc2VsaW5lcy5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnOyAnKSk7CisgICAgfQorICAgIGN1cnJlbnRCYXNlbGlu
ZXMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGxhdGZvcm0gKyAnICgnKSk7
CisgICAgZm9yICh2YXIgaSA9IDAsIGV4dGVuc2lvbjsgZXh0ZW5zaW9uID0gYmFzZWxpbmVzW3Bs
YXRmb3JtXVtpXTsgaSsrKSB7CisgICAgICBpZiAoaSAhPSAwKSB7CisgICAgICAgIGN1cnJlbnRC
YXNlbGluZXMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJywgJykpOworICAg
ICAgfQorICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CisgICAg
ICB2YXIgYmFzZWxpbmVUcmFjVXJsID0gJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvbG9nL3RydW5r
L0xheW91dFRlc3RzLyc7CisgICAgICBpZiAocGxhdGZvcm0gIT0gJ2Jhc2UnKSB7CisgICAgICAg
IGJhc2VsaW5lVHJhY1VybCArPSAncGxhdGZvcm0vJyArIHBsYXRmb3JtICsgJy8nOworICAgICAg
fQorICAgICAgYmFzZWxpbmVUcmFjVXJsICs9IHRlc3ROYW1lICsgJy1leHBlY3RlZCcgKyBleHRl
bnNpb247CisgICAgICBsaW5rLmhyZWYgPSBiYXNlbGluZVRyYWNVcmw7CisgICAgICBpZiAoZXh0
ZW5zaW9uID09ICcuY2hlY2tzdW0nKSB7CisgICAgICAgIGxpbmsudGV4dENvbnRlbnQgPSAnY2hr
JzsgICAgICAKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxpbmsudGV4dENvbnRlbnQgPSBleHRl
bnNpb24uc3Vic3RyaW5nKDEpOworICAgICAgfQorICAgICAgY3VycmVudEJhc2VsaW5lcy5hcHBl
bmRDaGlsZChsaW5rKTsKKyAgICB9CisgICAgY3VycmVudEJhc2VsaW5lcy5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnKScpKTsKKyAgfQorICAKKyAgdXBkYXRlU3RhdGUoKTsK
KyAgaGlkZUxvdXBlKCk7CisgIAorICBwcmVmZXRjaCgpOworfQorCitmdW5jdGlvbiB1cGRhdGVT
dGF0ZSgpIHsKKyAgdmFyIHRlc3RJbmRleCA9ICQoJ3Rlc3Qtc2VsZWN0b3InKS5zZWxlY3RlZElu
ZGV4OworICB2YXIgdGVzdE5hbWUgPSBnZXRTZWxlY3RlZFRlc3QoKTsKKyAgdmFyIHRlc3RDb3Vu
dCA9IHNlbGVjdGVkVGVzdHMubGVuZ3RoCisgICQoJ3Rlc3QtaW5kZXgnKS50ZXh0Q29udGVudCA9
IHRlc3RJbmRleCArIDE7CisgICQoJ3Rlc3QtY291bnQnKS50ZXh0Q29udGVudCA9IHRlc3RDb3Vu
dDsKKyAgCisgICQoJ25leHQtdGVzdCcpLmRpc2FibGVkID0gdGVzdEluZGV4ID09IHRlc3RDb3Vu
dCAtIDE7CisgICQoJ3ByZXZpb3VzLXRlc3QnKS5kaXNhYmxlZCA9IHRlc3RJbmRleCA9PSAwOwor
ICAKKyAgdmFyIHN0YXRlID0gcmVzdWx0cy50ZXN0c1t0ZXN0TmFtZV0uc3RhdGU7CisgICQoJ2Fk
ZC10by1yZWJhc2VsaW5lLXF1ZXVlJykuZGlzYWJsZWQgPSBzdGF0ZSAhPSBTVEFURV9ORUVEU19S
RUJBU0VMSU5FOworICAKKyAgJCgndGVzdC1saW5rJykuaHJlZiA9CisgICAgICAnaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL0xheW91dFRlc3RzLycgKyB0ZXN0TmFtZTsKKyAg
CisgICQoJ3N0YXRlJykuY2xhc3NOYW1lID0gc3RhdGU7CisgICQoJ3N0YXRlJykuaW5uZXJIVE1M
ID0gU1RBVEVfVE9fRElTUExBWV9TVEFURVtzdGF0ZV07CisgIAorICB2YXIgcXVldWVTZWxlY3Qg
PSAkKCdxdWV1ZS1zZWxlY3QnKTsKKyAgdmFyIHF1ZXVlTGVuZ3RoID0gcXVldWVTZWxlY3Qub3B0
aW9ucy5sZW5ndGg7CisgIHZhciByZWJhc2VsaW5lUXVldWUgPSAkKCdyZWJhc2VsaW5lLXF1ZXVl
Jyk7CisgIHZhciBxdWV1ZVRvZ2dsZSA9ICQoJ3RvZ2dsZS1xdWV1ZScpOworICBpZiAoaW5Qcm9n
cmVzc1JlYmFzZWxpbmVDb3VudCA+IDApIHsKKyAgICByZWJhc2VsaW5lUXVldWUuZGlzYWJsZWQg
PSB0cnVlOworICAgIHJlYmFzZWxpbmVRdWV1ZS50ZXh0Q29udGVudCA9ICdSZWJhc2VsaW5lIGlu
IHByb2dyZXNzICgnICsgaW5Qcm9ncmVzc1JlYmFzZWxpbmVDb3VudCArICcgdGVzdHMgbGVmdCkn
OworICB9IGVsc2UgaWYgKHF1ZXVlTGVuZ3RoID09IDApIHsKKyAgICByZWJhc2VsaW5lUXVldWUu
ZGlzYWJsZWQgPSB0cnVlOworICAgIHJlYmFzZWxpbmVRdWV1ZS50ZXh0Q29udGVudCA9ICdSZWJh
c2VsaW5lIHF1ZXVlJzsKKyAgICBxdWV1ZVRvZ2dsZS50ZXh0Q29udGVudCA9ICdRdWV1ZSc7Cisg
IH0gZWxzZSB7CisgICAgcmViYXNlbGluZVF1ZXVlLmRpc2FibGVkID0gZmFsc2U7CisgICAgcmVi
YXNlbGluZVF1ZXVlLnRleHRDb250ZW50ID0gJ1JlYmFzZWxpbmUgcXVldWUgKCcgKyBxdWV1ZUxl
bmd0aCArICcgdGVzdHMpJzsKKyAgICBxdWV1ZVRvZ2dsZS50ZXh0Q29udGVudCA9ICdRdWV1ZSAo
JyArIHF1ZXVlTGVuZ3RoICsgJyB0ZXN0cyknOworICB9CisgICQoJ3JlbW92ZS1xdWV1ZS1zZWxl
Y3Rpb24nKS5kaXNhYmxlZCA9IHF1ZXVlU2VsZWN0LnNlbGVjdGVkSW5kZXggPT0gLTE7Cit9CisK
K3ZhciBjdXJyZW50RXhwZWN0ZWRJbWFnZVRlc3Q7Cit2YXIgY3VycmVudEFjdHVhbEltYWdlVGVz
dDsKKworZnVuY3Rpb24gZGlzcGxheUltYWdlUmVzdWx0cyh0ZXN0TmFtZSkgeworICAkKCdleHBl
Y3RlZC1pbWFnZScpLmNsYXNzTmFtZSA9ICdsb2FkaW5nJzsKKyAgJCgnZXhwZWN0ZWQtaW1hZ2Un
KS5zcmMgPSAnL3Rlc3RfcmVzdWx0P3Rlc3Q9JyArIHRlc3ROYW1lICsgJyZtb2RlPWV4cGVjdGVk
LWltYWdlJzsKKyAgJCgnZXhwZWN0ZWQtaW1hZ2UnKS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAg
ICAkKCdleHBlY3RlZC1pbWFnZScpLmNsYXNzTmFtZSA9ICcnOworICAgIGN1cnJlbnRFeHBlY3Rl
ZEltYWdlVGVzdCA9IHRlc3ROYW1lOworICAgIHVwZGF0ZURpZmYoKTsKKyAgfTsKKyAgJCgnYWN0
dWFsLWltYWdlJykuY2xhc3NOYW1lID0gJ2xvYWRpbmcnOworICAkKCdhY3R1YWwtaW1hZ2UnKS5z
cmMgPSAnL3Rlc3RfcmVzdWx0P3Rlc3Q9JyArIHRlc3ROYW1lICsgJyZtb2RlPWFjdHVhbC1pbWFn
ZSc7CisgICQoJ2FjdHVhbC1pbWFnZScpLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICQoJ2Fj
dHVhbC1pbWFnZScpLmNsYXNzTmFtZSA9ICcnOworICAgIGN1cnJlbnRBY3R1YWxJbWFnZVRlc3Qg
PSB0ZXN0TmFtZTsKKyAgICB1cGRhdGVEaWZmKCk7CisgIH07CisgIAorICAkKCdkaWZmLWNhbnZh
cycpLmNsYXNzTmFtZSA9ICdsb2FkaW5nJzsKKyAgJCgnZGlmZi1jYW52YXMnKS5zdHlsZS5kaXNw
bGF5ID0gJyc7CisgICQoJ2RpZmYtY2hlY2tzdW0nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwor
fQorCit2YXIgZXhwZWN0ZWRDYW52YXM7Cit2YXIgZXhwZWN0ZWRDYW52YXNDb250ZXh0OwordmFy
IGFjdHVhbENhbnZhczsKK3ZhciBhY3R1YWxDYW52YXNDb250ZXh0OworCitmdW5jdGlvbiB1cGRh
dGVEaWZmKCkgeworICBpZiAoY3VycmVudEV4cGVjdGVkSW1hZ2VUZXN0ICE9IGN1cnJlbnRBY3R1
YWxJbWFnZVRlc3QpIHJldHVybjsKKworICB2YXIgZXhwZWN0ZWRJbWFnZSA9ICQoJ2V4cGVjdGVk
LWltYWdlJyk7CisgIHZhciBhY3R1YWxJbWFnZSA9ICQoJ2FjdHVhbC1pbWFnZScpOworIAorICBp
ZiAoIWV4cGVjdGVkQ2FudmFzKSB7CisgICAgZXhwZWN0ZWRDYW52YXMgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdjYW52YXMnKTsKKyAgICBleHBlY3RlZENhbnZhcy53aWR0aCA9IGV4cGVjdGVk
SW1hZ2Uud2lkdGg7CisgICAgZXhwZWN0ZWRDYW52YXMuaGVpZ2h0ID0gZXhwZWN0ZWRJbWFnZS5o
ZWlnaHQ7CisgICAgZXhwZWN0ZWRDYW52YXNDb250ZXh0ID0gZXhwZWN0ZWRDYW52YXMuZ2V0Q29u
dGV4dCgnMmQnKTsKKyAgICAKKyAgICBhY3R1YWxDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdjYW52YXMnKTsKKyAgICBhY3R1YWxDYW52YXMud2lkdGggPSBhY3R1YWxJbWFnZS53aWR0
aDsKKyAgICBhY3R1YWxDYW52YXMuaGVpZ2h0ID0gYWN0dWFsSW1hZ2UuaGVpZ2h0OworICAgIGFj
dHVhbENhbnZhc0NvbnRleHQgPSBhY3R1YWxDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgfQor
ICAKKyAgZXhwZWN0ZWRDYW52YXNDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwgMjU1LCAy
NTUsIDEpJzsKKyAgZXhwZWN0ZWRDYW52YXNDb250ZXh0LmZpbGxSZWN0KAorICAgICAgMCwgMCwg
ZXhwZWN0ZWRJbWFnZS53aWR0aCwgZXhwZWN0ZWRJbWFnZS5oZWlnaHQpOworCisgIGFjdHVhbENh
bnZhc0NvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMSknOworICBhY3R1
YWxDYW52YXNDb250ZXh0LmZpbGxSZWN0KDAsIDAsIGFjdHVhbEltYWdlLndpZHRoLCBhY3R1YWxJ
bWFnZS5oZWlnaHQpOworICAKKyAgZXhwZWN0ZWRDYW52YXNDb250ZXh0LmRyYXdJbWFnZShleHBl
Y3RlZEltYWdlLCAwLCAwKTsKKyAgdmFyIGV4cGVjdGVkSW1hZ2VEYXRhID0gZXhwZWN0ZWRDYW52
YXNDb250ZXh0LmdldEltYWdlRGF0YSgKKyAgICAgIDAsIDAsIGV4cGVjdGVkSW1hZ2Uud2lkdGgs
IGV4cGVjdGVkSW1hZ2UuaGVpZ2h0KTsKKworICBhY3R1YWxDYW52YXNDb250ZXh0LmRyYXdJbWFn
ZShhY3R1YWxJbWFnZSwgMCwgMCk7CisgIHZhciBhY3R1YWxJbWFnZURhdGEgPSBhY3R1YWxDYW52
YXNDb250ZXh0LmdldEltYWdlRGF0YSgKKyAgICAgIDAsIDAsIGFjdHVhbEltYWdlLndpZHRoLCBh
Y3R1YWxJbWFnZS5oZWlnaHQpOworICAgICAgCisgIHZhciBkaWZmQ2FudmFzID0gJCgnZGlmZi1j
YW52YXMnKTsKKyAgdmFyIGRpZmZDYW52YXNDb250ZXh0ID0gZGlmZkNhbnZhcy5nZXRDb250ZXh0
KCcyZCcpOworICB2YXIgZGlmZkltYWdlRGF0YSA9CisgICAgICBkaWZmQ2FudmFzQ29udGV4dC5j
cmVhdGVJbWFnZURhdGEoZGlmZkNhbnZhcy53aWR0aCwgZGlmZkNhbnZhcy5oZWlnaHQpOworCisg
IHZhciBleHBlY3RlZFdpZHRoID0gZXhwZWN0ZWRJbWFnZS53aWR0aDsKKyAgdmFyIGV4cGVjdGVk
SGVpZ2h0ID0gZXhwZWN0ZWRJbWFnZS5oZWlnaHQ7CisgIHZhciBleHBlY3RlZFBpeGVscyA9IGV4
cGVjdGVkSW1hZ2VEYXRhLmRhdGE7CisgIAorICB2YXIgYWN0dWFsV2lkdGggPSBhY3R1YWxJbWFn
ZS53aWR0aDsKKyAgdmFyIGFjdHVhbEhlaWdodCA9IGFjdHVhbEltYWdlLmhlaWdodDsKKyAgdmFy
IGFjdHVhbFBpeGVscyA9IGFjdHVhbEltYWdlRGF0YS5kYXRhOworCisgIHZhciBkaWZmV2lkdGgg
PSBkaWZmSW1hZ2VEYXRhLndpZHRoOworICB2YXIgZGlmZkhlaWdodCA9IGRpZmZJbWFnZURhdGEu
aGVpZ2h0OworICB2YXIgZGlmZlBpeGVscyA9IGRpZmZJbWFnZURhdGEuZGF0YTsKKyAgCisgIHZh
ciBoYWREaWZmID0gZmFsc2U7CisgIGZvciAodmFyIHggPSAwOyB4IDwgZXhwZWN0ZWRXaWR0aDsg
eCsrKSB7CisgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBleHBlY3RlZEhlaWdodDsgeSsrKSB7Cisg
ICAgICB2YXIgaXNEaWZmZXJlbnQgPSBmYWxzZTsKKyAgICAgIHZhciBleHBlY3RlZE9mZnNldCA9
ICh5ICogZXhwZWN0ZWRXaWR0aCArIHgpICogNDsKKyAgICAgIHZhciBhY3R1YWxPZmZzZXQgPSAo
eSAqIGFjdHVhbFdpZHRoICsgeCkgKiA0OworICAgICAgdmFyIGRpZmZPZmZzZXQgPSAoeSAqIGRp
ZmZXaWR0aCArIHgpICogNDsKKyAgICAgIGlmIChleHBlY3RlZFBpeGVsc1tleHBlY3RlZE9mZnNl
dF0gIT0gYWN0dWFsUGl4ZWxzW2FjdHVhbE9mZnNldF0gfHwKKyAgICAgICAgICBleHBlY3RlZFBp
eGVsc1tleHBlY3RlZE9mZnNldCArIDFdICE9IGFjdHVhbFBpeGVsc1thY3R1YWxPZmZzZXQgKyAx
XSB8fAorICAgICAgICAgIGV4cGVjdGVkUGl4ZWxzW2V4cGVjdGVkT2Zmc2V0ICsgMl0gIT0gYWN0
dWFsUGl4ZWxzW2FjdHVhbE9mZnNldCArIDJdIHx8CisgICAgICAgICAgZXhwZWN0ZWRQaXhlbHNb
ZXhwZWN0ZWRPZmZzZXQgKyAzXSAhPSBhY3R1YWxQaXhlbHNbYWN0dWFsT2Zmc2V0ICsgM10pIHsK
KyAgICAgICAgaGFkRGlmZiA9IHRydWU7CisgICAgICAgIGRpZmZQaXhlbHNbZGlmZk9mZnNldF0g
PSAyNTU7CisgICAgICAgIGRpZmZQaXhlbHNbZGlmZk9mZnNldCArIDFdID0gMDsKKyAgICAgICAg
ZGlmZlBpeGVsc1tkaWZmT2Zmc2V0ICsgMl0gPSAwOworICAgICAgICBkaWZmUGl4ZWxzW2RpZmZP
ZmZzZXQgKyAzXSA9IDI1NTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGRpZmZQaXhlbHNbZGlm
Zk9mZnNldF0gPSBleHBlY3RlZFBpeGVsc1tleHBlY3RlZE9mZnNldF07CisgICAgICAgIGRpZmZQ
aXhlbHNbZGlmZk9mZnNldCArIDFdID0gZXhwZWN0ZWRQaXhlbHNbZXhwZWN0ZWRPZmZzZXQgKyAx
XTsKKyAgICAgICAgZGlmZlBpeGVsc1tkaWZmT2Zmc2V0ICsgMl0gPSBleHBlY3RlZFBpeGVsc1tl
eHBlY3RlZE9mZnNldCArIDJdOworICAgICAgICBkaWZmUGl4ZWxzW2RpZmZPZmZzZXQgKyAzXSA9
IDMyOworICAgICAgfQorICAgIH0KKyAgfQorICAKKyAgZGlmZkNhbnZhc0NvbnRleHQucHV0SW1h
Z2VEYXRhKAorICAgICAgZGlmZkltYWdlRGF0YSwKKyAgICAgIDAsIDAsCisgICAgICAwLCAwLAor
ICAgICAgZGlmZkltYWdlRGF0YS53aWR0aCwgZGlmZkltYWdlRGF0YS5oZWlnaHQpOworICBkaWZm
Q2FudmFzLmNsYXNzTmFtZSA9ICcnOworICAKKyAgaWYgKCFoYWREaWZmKSB7CisgICAgZGlmZkNh
bnZhcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICQoJ2RpZmYtY2hlY2tzdW0nKS5zdHls
ZS5kaXNwbGF5ID0gJyc7ICAgIAorICAgIGxvYWRUZXh0VGVzdFJlc3VsdCgKKyAgICAgIGN1cnJl
bnRFeHBlY3RlZEltYWdlVGVzdCwgJ2V4cGVjdGVkLWNoZWNrc3VtJywgJCgnZXhwZWN0ZWQtY2hl
Y2tzdW0nKSk7CisgICAgbG9hZFRleHRUZXN0UmVzdWx0KAorICAgICAgICBjdXJyZW50RXhwZWN0
ZWRJbWFnZVRlc3QsICdhY3R1YWwtY2hlY2tzdW0nLCAkKCdhY3R1YWwtY2hlY2tzdW0nKSk7Cisg
IH0KK30KKworZnVuY3Rpb24gbG9hZFRleHRUZXN0UmVzdWx0KHRlc3ROYW1lLCBtb2RlLCBkZXN0
aW5hdGlvbikgeworICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgIHhoci5vcGVu
KCdHRVQnLCAnL3Rlc3RfcmVzdWx0P3Rlc3Q9JyArIHRlc3ROYW1lICsgJyZtb2RlPScgKyBtb2Rl
KTsKKyAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKKyAgICBkZXN0
aW5hdGlvbi50ZXh0Q29udGVudCA9IHhoci5yZXNwb25zZVRleHQ7CisgIH0pOworICB4aHIuc2Vu
ZCgpOyAKK30KKworZnVuY3Rpb24gZGlzcGxheVRleHRSZXN1bHRzKHRlc3ROYW1lKSB7CisgIGZ1
bmN0aW9uIGxvYWRUZXh0UmVzdWx0KHR5cGUpIHsKKyAgICBsb2FkVGV4dFRlc3RSZXN1bHQodGVz
dE5hbWUsIHR5cGUsICQodHlwZSkpOworICB9CisgIAorICBsb2FkVGV4dFJlc3VsdCgnZXhwZWN0
ZWQtdGV4dCcpOworICBsb2FkVGV4dFJlc3VsdCgnYWN0dWFsLXRleHQnKTsKKyAgbG9hZFRleHRS
ZXN1bHQoJ2RpZmYtdGV4dCcpOworfQorCitmdW5jdGlvbiBuZXh0VGVzdCgpIHsKKyAgaWYgKCQo
J3Rlc3Qtc2VsZWN0b3InKS5zZWxlY3RlZEluZGV4ID09IHNlbGVjdGVkVGVzdHMubGVuZ3RoIC0g
MSkgeworICAgIHJldHVybjsKKyAgfQorICAkKCd0ZXN0LXNlbGVjdG9yJykuc2VsZWN0ZWRJbmRl
eCsrOworICBzZWxlY3RUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHByZXZpb3VzVGVzdCgpIHsKKyAg
aWYgKCQoJ3Rlc3Qtc2VsZWN0b3InKS5zZWxlY3RlZEluZGV4ID09IDApIHsKKyAgICByZXR1cm47
CisgIH0KKyAgJCgndGVzdC1zZWxlY3RvcicpLnNlbGVjdGVkSW5kZXgtLTsKKyAgc2VsZWN0VGVz
dCgpOworfQorCitmdW5jdGlvbiBzaG93TG91cGUoZXZlbnQpIHsKKyAgdmFyIGltYWdlUmVjdCA9
IGV2ZW50LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgdmFyIHggPSBldmVudC5j
bGllbnRYIC0gaW1hZ2VSZWN0LmxlZnQ7CisgIHZhciB5ID0gZXZlbnQuY2xpZW50WSAtIGltYWdl
UmVjdC50b3A7CisgIAorICBmaWxsTG91cGVGcm9tSW1hZ2UoeCwgeSwgJ2V4cGVjdGVkJywgJCgn
ZXhwZWN0ZWQtaW1hZ2UnKSk7CisgIGZpbGxMb3VwZUZyb21JbWFnZSh4LCB5LCAnYWN0dWFsJywg
JCgnYWN0dWFsLWltYWdlJykpOworICBmaWxsTG91cGVGcm9tQ2FudmFzKHgsIHksICdkaWZmJywg
JCgnZGlmZi1jYW52YXMnKSk7CisgIAorICAkKCdsb3VwZScpLnN0eWxlLmRpc3BsYXkgPSAnJzsK
K30KKwordmFyIExPVVBFX01BR05JRklDQVRJT05fRkFDVE9SID0gMTA7CisKK2Z1bmN0aW9uIGZp
bGxMb3VwZUZyb21JbWFnZSh4LCB5LCB0eXBlKSB7CisgIHZhciBzb3VyY2VJbWFnZSA9ICQodHlw
ZSArICctaW1hZ2UnKTsgIAorCisgIHZhciB0ZW1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnY2FudmFzJyk7CisgIHRlbXBDYW52YXMud2lkdGggPSBzb3VyY2VJbWFnZS53aWR0aDsK
KyAgdGVtcENhbnZhcy5oZWlnaHQgPSBzb3VyY2VJbWFnZS5oZWlnaHQ7CisgIHZhciB0ZW1wQ29u
dGV4dCA9IHRlbXBDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgCisgIHRlbXBDb250ZXh0LmRy
YXdJbWFnZShzb3VyY2VJbWFnZSwgMCwgMCk7CisgIAorICBmaWxsTG91cGVGcm9tQ2FudmFzKHgs
IHksIHR5cGUsIHRlbXBDYW52YXMpOworfQorCitmdW5jdGlvbiBmaWxsTG91cGVGcm9tQ2FudmFz
KHgsIHksIHR5cGUsIGNhbnZhcykgeworICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0
KCcyZCcpOworICB2YXIgc291cmNlSW1hZ2VEYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwg
MCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKKworICB2YXIgdGFyZ2V0Q2FudmFzID0g
JCh0eXBlICsgJy1sb3VwZScpOworICB2YXIgdGFyZ2V0Q29udGV4dCA9IHRhcmdldENhbnZhcy5n
ZXRDb250ZXh0KCcyZCcpOworICB0YXJnZXRDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwg
MjU1LCAyNTUsIDEpJzsKKyAgdGFyZ2V0Q29udGV4dC5maWxsUmVjdCgwLCAwLCB0YXJnZXRDYW52
YXMud2lkdGgsIHRhcmdldENhbnZhcy5oZWlnaHQpOyAgCisgIAorICB2YXIgc291cmNlWE9mZnNl
dCA9ICh0YXJnZXRDYW52YXMud2lkdGgvTE9VUEVfTUFHTklGSUNBVElPTl9GQUNUT1IgLSAxKS8y
OworICB2YXIgc291cmNlWU9mZnNldCA9ICh0YXJnZXRDYW52YXMuaGVpZ2h0L0xPVVBFX01BR05J
RklDQVRJT05fRkFDVE9SIC0gMSkvMjsKKworICBmdW5jdGlvbiByZWFkUGl4ZWxDb21wb25lbnQo
eCwgeSwgY29tcG9uZW50KSB7CisgICAgcmV0dXJuIHNvdXJjZUltYWdlRGF0YS5kYXRhWyh5ICog
c291cmNlSW1hZ2VEYXRhLndpZHRoICsgeCkgKiA0ICsgY29tcG9uZW50XTsKKyAgfQorICAKKyAg
Zm9yICh2YXIgaSA9IC1zb3VyY2VYT2Zmc2V0OyBpIDw9IHNvdXJjZVhPZmZzZXQ7IGkrKykgewor
ICAgIGZvciAodmFyIGogPSAtc291cmNlWU9mZnNldDsgaiA8PSBzb3VyY2VZT2Zmc2V0OyBqKysp
IHsKKyAgICAgIHZhciBzb3VyY2VYID0geCArIGk7CisgICAgICB2YXIgc291cmNlWSA9IHkgKyBq
OworICAgICAgCisgICAgICB2YXIgc291cmNlUiA9IHJlYWRQaXhlbENvbXBvbmVudChzb3VyY2VY
LCBzb3VyY2VZLCAwKTsgCisgICAgICB2YXIgc291cmNlRyA9IHJlYWRQaXhlbENvbXBvbmVudChz
b3VyY2VYLCBzb3VyY2VZLCAxKTsKKyAgICAgIHZhciBzb3VyY2VCID0gcmVhZFBpeGVsQ29tcG9u
ZW50KHNvdXJjZVgsIHNvdXJjZVksIDIpOworICAgICAgdmFyIHNvdXJjZUEgPSByZWFkUGl4ZWxD
b21wb25lbnQoc291cmNlWCwgc291cmNlWSwgMykvMjU1OworICAgICAgc291cmNlQSA9IE1hdGgu
cm91bmQoc291cmNlQSAqIDEwKS8xMDsKKworICAgICAgdmFyIHRhcmdldFggPSAoaSArIHNvdXJj
ZVhPZmZzZXQpICogTE9VUEVfTUFHTklGSUNBVElPTl9GQUNUT1I7CisgICAgICB2YXIgdGFyZ2V0
WSA9IChqICsgc291cmNlWU9mZnNldCkgKiBMT1VQRV9NQUdOSUZJQ0FUSU9OX0ZBQ1RPUjsKKyAg
ICAgIHZhciBjb2xvclN0cmluZyA9CisgICAgICAgICAgc291cmNlUiArICcsICcgKyBzb3VyY2VH
ICsgJywgJyArIHNvdXJjZUIgKyAnLCAnICsgc291cmNlQTsKKyAgICAgIHRhcmdldENvbnRleHQu
ZmlsbFN0eWxlID0gJ3JnYmEoJyArIGNvbG9yU3RyaW5nICsgJyknOworICAgICAgdGFyZ2V0Q29u
dGV4dC5maWxsUmVjdCgKKyAgICAgICAgICB0YXJnZXRYLCB0YXJnZXRZLAorICAgICAgICAgIExP
VVBFX01BR05JRklDQVRJT05fRkFDVE9SLCBMT1VQRV9NQUdOSUZJQ0FUSU9OX0ZBQ1RPUik7Cisg
ICAgCisgICAgICBpZiAoaSA9PSAwICYmIGogPT0gMCkgeworICAgICAgICAkKCdsb3VwZS1jb29y
ZGluYXRlJykudGV4dENvbnRlbnQgPSBzb3VyY2VYICsgJywgJyArIHNvdXJjZVk7CisKKyAgICAg
ICAgJCh0eXBlICsgJy1sb3VwZS1jb2xvcicpLnRleHRDb250ZW50ID0gY29sb3JTdHJpbmc7Cisg
ICAgICB9CisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIGhpZGVMb3VwZSgpIHsKKyAgJCgnbG91
cGUnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAgCit9CisKK2Z1bmN0aW9uIGFkZFRvUmViYXNl
bGluZVF1ZXVlKCkgeworICB2YXIgdGVzdE5hbWUgPSBnZXRTZWxlY3RlZFRlc3QoKTsKKyAgdmFy
IHRlc3QgPSByZXN1bHRzLnRlc3RzW3Rlc3ROYW1lXTsKKyAgCisgIGlmICh0ZXN0LnN0YXRlICE9
IFNUQVRFX05FRURTX1JFQkFTRUxJTkUpIHsKKyAgICBsb2coJ0Nhbm5vdCBhZGQgdGVzdCB3aXRo
IHN0YXRlICcgKyB0ZXN0LnN0YXRlICsgJyB0byBxdWV1ZScpOworICAgIHJldHVybjsKKyAgfQor
ICAKKyAgdmFyIHF1ZXVlT3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7
CisgIHF1ZXVlT3B0aW9uLnZhbHVlID0gdGVzdE5hbWU7CisgIHF1ZXVlT3B0aW9uLnRleHRDb250
ZW50ID0gdGVzdE5hbWU7CisgICQoJ3F1ZXVlLXNlbGVjdCcpLmFwcGVuZENoaWxkKHF1ZXVlT3B0
aW9uKTsKKyAgdGVzdC5zdGF0ZSA9IFNUQVRFX0lOX1FVRVVFOworICB1cGRhdGVTdGF0ZSgpOwor
fQorCitmdW5jdGlvbiByZW1vdmVTZWxlY3Rpb25Gcm9tUmViYXNlbGluZVF1ZXVlKCkgeworICB2
YXIgcXVldWVTZWxlY3QgPSAkKCdxdWV1ZS1zZWxlY3QnKTsKKyAgaWYgKHF1ZXVlU2VsZWN0LnNl
bGVjdGVkSW5kZXggPT0gLTEpIHsKKyAgICByZXR1cm47CisgIH0KKworICB2YXIgcXVldWVPcHRp
b24gPSBxdWV1ZVNlbGVjdC5vcHRpb25zW3F1ZXVlU2VsZWN0LnNlbGVjdGVkSW5kZXhdOyAgCisg
IHJlbW92ZUZyb21SZWJhc2VsaW5lUXVldWUocXVldWVPcHRpb24udmFsdWUpOworfQorCitmdW5j
dGlvbiByZW1vdmVGcm9tUmViYXNlbGluZVF1ZXVlKHRlc3ROYW1lKSB7CisgIHZhciBxdWV1ZVNl
bGVjdCA9ICQoJ3F1ZXVlLXNlbGVjdCcpOworICBmb3IgKHZhciBxdWV1ZU9wdGlvbiA9IHF1ZXVl
U2VsZWN0LmZpcnN0Q2hpbGQ7CisgICAgIHF1ZXVlT3B0aW9uICYmIHF1ZXVlT3B0aW9uLnZhbHVl
ICE9IHRlc3ROYW1lOworICAgICBxdWV1ZU9wdGlvbiA9IHF1ZXVlT3B0aW9uLm5leHRTaWJsaW5n
KSB7O30KKworICBpZiAoIXF1ZXVlT3B0aW9uKSByZXR1cm47CisgIAorICBxdWV1ZVNlbGVjdC5y
ZW1vdmVDaGlsZChxdWV1ZU9wdGlvbik7CisgIHZhciB0ZXN0ID0gcmVzdWx0cy50ZXN0c1t0ZXN0
TmFtZV07CisgIHRlc3Quc3RhdGUgPSBTVEFURV9ORUVEU19SRUJBU0VMSU5FOworICB1cGRhdGVT
dGF0ZSgpOworfQorCitmdW5jdGlvbiByZWJhc2VsaW5lUXVldWUoKSB7CisgIHZhciB0ZXN0TmFt
ZXMgPSBbXTsKKyAgZm9yICh2YXIgcXVldWVPcHRpb24gPSAkKCdxdWV1ZS1zZWxlY3QnKS5maXJz
dENoaWxkOworICAgICBxdWV1ZU9wdGlvbjsKKyAgICAgcXVldWVPcHRpb24gPSBxdWV1ZU9wdGlv
bi5uZXh0U2libGluZykgeworICAgIHRlc3ROYW1lcy5wdXNoKHF1ZXVlT3B0aW9uLnZhbHVlKTsK
KyAgfQorICAKKyAgaW5Qcm9ncmVzc1JlYmFzZWxpbmVDb3VudCA9IHRlc3ROYW1lcy5sZW5ndGg7
CisgIHVwZGF0ZVN0YXRlKCk7CisKKyAgdmFyIGJhc2VsaW5lVGFyZ2V0ID0gZ2V0U2VsZWN0VmFs
dWUoJ2Jhc2VsaW5lLXRhcmdldCcpOworICB2YXIgYmFzZWxpbmVNb3ZlVG8gPSBnZXRTZWxlY3RW
YWx1ZSgnYmFzZWxpbmUtbW92ZS10bycpOworCisgIHRlc3ROYW1lcy5mb3JFYWNoKGZ1bmN0aW9u
KHRlc3ROYW1lKSB7CisgICAgcmViYXNlbGluZSh0ZXN0TmFtZSwgYmFzZWxpbmVUYXJnZXQsIGJh
c2VsaW5lTW92ZVRvKTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9uIHJlYmFzZWxpbmUodGVzdE5hbWUs
IGJhc2VsaW5lVGFyZ2V0LCBiYXNlbGluZU1vdmVUbykgeworICB2YXIgeGhyID0gbmV3IFhNTEh0
dHBSZXF1ZXN0KCk7CisgIHhoci5vcGVuKCdQT1NUJywKKyAgICAgICcvcmViYXNlbGluZT90ZXN0
PScgKyBlbmNvZGVVUklDb21wb25lbnQodGVzdE5hbWUpICsgCisgICAgICAnJmJhc2VsaW5lLXRh
cmdldD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJhc2VsaW5lVGFyZ2V0KSArCisgICAgICAnJmJh
c2VsaW5lLW1vdmUtdG89JyArIGVuY29kZVVSSUNvbXBvbmVudChiYXNlbGluZU1vdmVUbykpOwor
ICB2YXIgdGVzdCA9IHJlc3VsdHMudGVzdHNbdGVzdE5hbWVdOworICBmdW5jdGlvbiBoYW5kbGVT
dWNjZXNzKCkgeworICAgIHZhciBzdWNjZXNzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3Bh
bicpOworICAgIHN1Y2Nlc3MudGV4dENvbnRlbnQgPSAnU3VjY2VzczogJzsKKyAgICBzdWNjZXNz
LnN0eWxlLmNvbG9yID0gJ2dyZWVuJzsKKyAgICAkKCdsb2cnKS5hcHBlbmRDaGlsZChzdWNjZXNz
KTsKKyAgICBsb2coeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgcmVtb3ZlRnJvbVJlYmFzZWxpbmVR
dWV1ZSh0ZXN0TmFtZSk7CisgICAgaW5Qcm9ncmVzc1JlYmFzZWxpbmVDb3VudC0tOworICAgIHRl
c3Quc3RhdGUgPSBTVEFURV9SRUJBU0VMSU5FX1NVQ0NFRURFRDsKKyAgICB1cGRhdGVTdGF0ZSgp
OworICB9CisgIGZ1bmN0aW9uIGhhbmRsZUZhaWx1cmUoKSB7CisgICAgdmFyIGZhaWx1cmUgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgZmFpbHVyZS50ZXh0Q29udGVudCA9
ICdGYWlsdXJlOiAnOworICAgIGZhaWx1cmUuc3R5bGUuY29sb3IgPSAncmVkJzsKKyAgICAkKCds
b2cnKS5hcHBlbmRDaGlsZChmYWlsdXJlKTsKKyAgICBsb2coeGhyLnJlc3BvbnNlVGV4dCk7Cisg
ICAgcmVtb3ZlRnJvbVJlYmFzZWxpbmVRdWV1ZSh0ZXN0TmFtZSk7CisgICAgaW5Qcm9ncmVzc1Jl
YmFzZWxpbmVDb3VudC0tOworICAgIHRlc3Quc3RhdGUgPSBTVEFURV9SRUJBU0VMSU5FX0ZBSUxF
RDsKKyAgICB1cGRhdGVTdGF0ZSgpOworICB9CisgIAorICB4aHIuYWRkRXZlbnRMaXN0ZW5lcign
bG9hZCcsIGZ1bmN0aW9uKCkgeworICAgIGlmICh4aHIuc3RhdHVzIDwgNDAwKSB7CisgICAgICBo
YW5kbGVTdWNjZXNzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGhhbmRsZUZhaWx1cmUoKTsKKyAg
ICB9CisgIH0pOworICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVGYWlsdXJl
KTsKKworICB4aHIuc2VuZCgpOworfQorCitmdW5jdGlvbiBsb2codGV4dCkgeworICAkKCdsb2cn
KS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0ICsgJ1xuJykpOworICAk
KCdsb2cnKS5zY3JvbGxUb3AgPSAkKCdsb2cnKS5zY3JvbGxIZWlnaHQ7Cit9CisKK2Z1bmN0aW9u
IHRvZ2dsZShpZCkgeworICB2YXIgZWxlbWVudCA9ICQoaWQpOworICB2YXIgdG9nZ2xlciA9ICQo
J3RvZ2dsZS0nICsgaWQpOworICBpZiAoZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09ICdub25lJykg
eworICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICcnOworICAgIHRvZ2dsZXIuY2xhc3NOYW1l
ID0gJ2xpbmsgc2VsZWN0ZWQnOworICB9IGVsc2UgeworICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxh
eSA9ICdub25lJzsKKyAgICB0b2dnbGVyLmNsYXNzTmFtZSA9ICdsaW5rJzsKKyAgfQorfQorCit3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIG1haW4pOwpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9sb2NhbHJlYmFzZWxpbmUucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvbG9jYWxyZWJhc2VsaW5lLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjdlNTNjZTU4MjU4NTkyNzVjNDFmZWU4YzYzMWQzYTNiZmZhYmNjZTAKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvbG9jYWxyZWJh
c2VsaW5lLnB5CkBAIC0wLDAgKzEsMzI4IEBACisjIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGRh
dGV0aW1lCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IG1pbWV0eXBlcworaW1wb3J0IG9zCitpbXBv
cnQgb3MucGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdXJsbGliCitpbXBv
cnQgQmFzZUhUVFBTZXJ2ZXIKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBzaHV0aWwKK2ltcG9y
dCB0aW1lCitpbXBvcnQgdXJscGFyc2UKK2Zyb20gd3NnaXJlZi5oYW5kbGVycyBpbXBvcnQgZm9y
bWF0X2RhdGVfdGltZQorCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBm
YWN0b3J5Citmcm9tIHdlYmtpdHB5LnRvb2wubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQWJzdHJh
Y3REZWNsYXJhdGl2ZUNvbW1hbmQKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LnNpbXBsZWpz
b24gYXMgc2ltcGxlanNvbgorCisjIFRPRE8KKyMgLSBsZXQgaHR0cGQgcG9ydCBiZSBzcGVjaWZp
ZWQKKyMgLSBmaWx0ZXIgZHJvcC1kb3duIGJ5IHRlc3Qgc3RhdGUKKworU1RBVEVfTkVFRFNfUkVC
QVNFTElORSA9ICduZWVkc19yZWJhc2VsaW5lJworU1RBVEVfUkVCQVNFTElORV9GQUlMRUQgPSAn
cmViYXNlbGluZV9mYWlsZWQnCitTVEFURV9SRUJBU0VMSU5FX1NVQ0NFRURFRCA9ICdyZWJhc2Vs
aW5lX3N1Y2NlZWRlZCcKKworY2xhc3MgUmViYXNlbGluZUhUVFNlcnZlcihCYXNlSFRUUFNlcnZl
ci5IVFRQU2VydmVyKToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIGh0dHBkX3BvcnQsIHJlc3VsdHNf
ZGlyZWN0b3J5LCByZXN1bHRzX2pzb24sIHBvcnQsIHNjbSk6CisgICAgQmFzZUhUVFBTZXJ2ZXIu
SFRUUFNlcnZlci5fX2luaXRfXyhzZWxmLCAoJycsIGh0dHBkX3BvcnQpLCBSZWJhc2VsaW5lSFRU
UFJlcXVlc3RIYW5kbGVyKQorICAgIHNlbGYucmVzdWx0c19kaXJlY3RvcnkgPSByZXN1bHRzX2Rp
cmVjdG9yeQorICAgIHNlbGYucmVzdWx0c19qc29uID0gcmVzdWx0c19qc29uCisgICAgc2VsZi5w
b3J0ID0gcG9ydAorICAgIHNlbGYuc2NtID0gc2NtCisKK2NsYXNzIFJlYmFzZWxpbmVIVFRQUmVx
dWVzdEhhbmRsZXIoQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAg
ZmlsZV9uYW1lcyA9IFsKKyAgICAgICdpbmRleC5odG1sJywKKyAgICAgICdtYWluLmpzJywKKyAg
ICAgICdtYWluLmNzcycsCisgICAgXQorCisgICAgZGVmIGRvX0dFVChzZWxmKToKKyAgICAgIHNl
bGYuX2hhbmRsZV9yZXF1ZXN0KCkKKyAgICAgIAorICAgIGRlZiBkb19QT1NUKHNlbGYpOgorICAg
ICAgc2VsZi5faGFuZGxlX3JlcXVlc3QoKQorICAgIAorICAgIGRlZiBfaGFuZGxlX3JlcXVlc3Qo
c2VsZik6CisgICAgICBpZiAnPycgaW4gc2VsZi5wYXRoOgorICAgICAgICAgIChwYXRoLCBxdWVy
eV9zdHJpbmcpID0gc2VsZi5wYXRoLnNwbGl0KCc/JywgMSkKKyAgICAgICAgICBzZWxmLnF1ZXJ5
ID0gdXJscGFyc2UucGFyc2VfcXMocXVlcnlfc3RyaW5nKQorICAgICAgZWxzZToKKyAgICAgICAg
ICBwYXRoID0gc2VsZi5wYXRoCisgICAgICAgICAgc2VsZi5xdWVyeSA9IHt9CisgICAgICBmdW5j
X29yX2ZpbGVfbmFtZSA9IHBhdGhbMTpdIG9yICdpbmRleC5odG1sJworICAgICAgCisgICAgICBp
ZiBmdW5jX29yX2ZpbGVfbmFtZSBpbiBSZWJhc2VsaW5lSFRUUFJlcXVlc3RIYW5kbGVyLmZpbGVf
bmFtZXM6CisgICAgICAgICAgc2VsZi5zZXJ2ZV9zdGF0aWNfZmlsZShmdW5jX29yX2ZpbGVfbmFt
ZSkKKyAgICAgICAgICByZXR1cm4KKyAgICAgIAorICAgICAgZnVuY19uYW1lID0gZnVuY19vcl9m
aWxlX25hbWUucmVwbGFjZSgnLicsICdfJykKKyAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsIGZ1
bmNfbmFtZSk6CisgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICJVbmtub3duIGZ1bmN0aW9u
ICVzIiAlIGZ1bmNfbmFtZSkKKyAgICAgICAgcmV0dXJuCisgICAgICBmdW5jID0gZ2V0YXR0cihz
ZWxmLCBmdW5jX25hbWUpCisgICAgICBmdW5jKCkKKyAgICAKKyAgICBkZWYgc2VydmVfc3RhdGlj
X2ZpbGUoc2VsZiwgc3RhdGljX3BhdGgpOgorICAgICAgc2VsZi5fc2VydmVfZmlsZShvcy5wYXRo
LmpvaW4oCisgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2RhdGEnLCAnbG9j
YWxyZWJhc2VsaW5lJywgc3RhdGljX3BhdGgpKQorICAgIAorICAgIGRlZiByZWJhc2VsaW5lKHNl
bGYpOgorICAgICAgbG9nID0gW10KKyAgICAgIHN1Y2Nlc3MgPSBzZWxmLl9ydW5fcmViYXNlbGlu
ZSgKKyAgICAgICAgICBzZWxmLnF1ZXJ5Wyd0ZXN0J11bMF0sCisgICAgICAgICAgc2VsZi5xdWVy
eVsnYmFzZWxpbmUtdGFyZ2V0J11bMF0sCisgICAgICAgICAgc2VsZi5xdWVyeVsnYmFzZWxpbmUt
bW92ZS10byddWzBdLCAgICAgICAgICAKKyAgICAgICAgICBsb2c9bGFtYmRhIGw6bG9nLmFwcGVu
ZChsKSkKKyAgICAgIHNlbGYuc2VuZF9yZXNwb25zZShzdWNjZXNzIGFuZCAyMDAgb3IgNTAwKQor
ICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgInRleHQvcGxhaW4iKQorICAg
ICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICBzZWxmLndmaWxlLndyaXRlKCJcbiIuam9pbihs
b2cpKQorICAgICAgCisgICAgZGVmIF9ydW5fcmViYXNlbGluZShzZWxmLCB0ZXN0LCBiYXNlbGlu
ZV90YXJnZXQsIGJhc2VsaW5lX21vdmVfdG8sIGxvZyk6CisgICAgICAodGVzdF9uYW1lLCB0ZXN0
X2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KHRlc3QpCisgICAgICB0ZXN0X2RpcmVjdG9y
eSA9IG9zLnBhdGguZGlybmFtZSh0ZXN0X25hbWUpCisgICAgICBwYXRoX3BpZWNlcyA9IHRlc3Rf
ZGlyZWN0b3J5LnNwbGl0KG9zLnNlcCkKKyAgICAgIGlmIGxlbihwYXRoX3BpZWNlcykgPj0gMiBh
bmQgcGF0aF9waWVjZXNbMF0gPT0gJ3BsYXRmb3JtJzoKKyAgICAgICAgICBiYXNlX3Rlc3RfZGly
ZWN0b3J5ID0gb3Muc2VwLmpvaW4ocGF0aF9waWVjZXNbMjpdKQorICAgICAgZWxzZToKKyAgICAg
ICAgICBiYXNlX3Rlc3RfZGlyZWN0b3J5ID0gdGVzdF9kaXJlY3RvcnkKKyAgICAgIAorICAgICAg
bGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSA9IHNlbGYuc2VydmVyLnBvcnQubGF5b3V0X3Rlc3RzX2Rp
cigpCisgICAgICB0YXJnZXRfZXhwZWN0YXRpb25zX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbigK
KyAgICAgICAgICBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5LCAncGxhdGZvcm0nLCBiYXNlbGluZV90
YXJnZXQsIGJhc2VfdGVzdF9kaXJlY3RvcnkpCisgICAgICAKKyAgICAgIGxvZygiUmViYXNlbGlu
aW5nICVzLi4uIiAlIHRlc3RfbmFtZSkKKyAgICAgIHRlc3RfanNvbiA9IHNlbGYuc2VydmVyLnJl
c3VsdHNfanNvblsndGVzdHMnXVt0ZXN0XQorICAgICAgCisgICAgICBpZiB0ZXN0X2pzb25bJ3N0
YXRlJ10gIT0gU1RBVEVfTkVFRFNfUkVCQVNFTElORToKKyAgICAgICAgICBsb2coIiAgVGVzdCBp
cyBpbiB1bmV4cGVjdGVkIHN0YXRlOiAlcyIgJSB0ZXN0X2pzb25bJ3N0YXRlJ10pCisgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisgICAgICAKKyAgICAgIGN1cnJlbnRfYmFzZWxpbmVzID0gdGVzdF9q
c29uLmdldCgnYmFzZWxpbmVzJywge30pLmtleXMoKQorICAgICAgCisgICAgICB0ZXN0X3Jlc3Vs
dHNfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKAorICAgICAgICAgIHNlbGYuc2VydmVyLnJlc3Vs
dHNfZGlyZWN0b3J5LCB0ZXN0X2RpcmVjdG9yeSkKKyAgICAgIGFjdHVhbF9wYXR0ZXJuID0gb3Mu
cGF0aC5iYXNlbmFtZSh0ZXN0X25hbWUpICsgJy1hY3R1YWwuKicKKyAgICAgIGFjdHVhbF9maWxl
cyA9IFtdCisgICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcih0ZXN0X3Jlc3VsdHNfZGly
ZWN0b3J5KToKKyAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZmlsZW5hbWUsIGFjdHVhbF9w
YXR0ZXJuKToKKyAgICAgICAgICAgICAgYWN0dWFsX2ZpbGVzLmFwcGVuZChmaWxlbmFtZS5yZXBs
YWNlKCctYWN0dWFsJywgJy1leHBlY3RlZCcpKQorICAgICAgCisgICAgICAjIElmIHJlcXVlc3Rl
ZCwgbW92ZSBjdXJyZW50IGJhc2VsaW5lcyBvdXQKKyAgICAgIGlmIGJhc2VsaW5lX3RhcmdldCBp
biBjdXJyZW50X2Jhc2VsaW5lcyBhbmQgYmFzZWxpbmVfbW92ZV90byAhPSAibm9uZSI6CisgICAg
ICAgIGxvZygiICBNb3ZpbmcgY3VycmVudCAlcyBiYXNlbGluZXMgdG8gJXMiICUgKGJhc2VsaW5l
X3RhcmdldCwgYmFzZWxpbmVfbW92ZV90bykpCisgICAgICAgIG1vdmVfdG9fZXhwZWN0YXRpb25z
X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgIGxheW91dF90ZXN0c19kaXJl
Y3RvcnksICdwbGF0Zm9ybScsIGJhc2VsaW5lX21vdmVfdG8sIGJhc2VfdGVzdF9kaXJlY3Rvcnkp
CisgICAgICAgIGV4cGVjdGF0aW9uX3BhdHRlcm4gPSBvcy5wYXRoLmJhc2VuYW1lKHRlc3RfbmFt
ZSkgKyAnLWV4cGVjdGVkLionCisKKyAgICAgICAgIyBTZWUgd2hpY2ggZmlsZXMgbmVlZCB0byBt
b3ZlICAgICAgICAKKyAgICAgICAgY3VycmVudF9leHBlY3RhdGlvbnNfZmlsZXMgPSBbXQorICAg
ICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcih0YXJnZXRfZXhwZWN0YXRpb25zX2RpcmVj
dG9yeSk6CisgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZmlsZW5hbWUsIGV4cGVjdGF0
aW9uX3BhdHRlcm4pOgorICAgICAgICAgICAgICAgIGN1cnJlbnRfZXhwZWN0YXRpb25zX2ZpbGVz
LmFwcGVuZChmaWxlbmFtZSkKKyAgICAgICAgY3VycmVudF9leHBlY3RhdGlvbnNfZmlsZXMgPSBb
ZiBmb3IgZiBpbiBjdXJyZW50X2V4cGVjdGF0aW9uc19maWxlcyBpZiBmIGluIGFjdHVhbF9maWxl
c10KKyAgCisgICAgICAgIGlmIGN1cnJlbnRfZXhwZWN0YXRpb25zX2ZpbGVzOgorICAgICAgICAg
ICMgTWFrZSBzdXJlIHdlJ3JlIG5vdCBjbG9iYmVyaW5nIGV4aXN0aW5nIGZpbGVzCisgICAgICAg
ICAgaWYgb3MucGF0aC5leGlzdHMobW92ZV90b19leHBlY3RhdGlvbnNfZGlyZWN0b3J5KToKKyAg
ICAgICAgICAgIG1vdmVfdG9fZXhwZWN0YXRpb25zX2ZpbGVzID0gW10KKyAgICAgICAgICAgIGZv
ciBmaWxlbmFtZSBpbiBvcy5saXN0ZGlyKG1vdmVfdG9fZXhwZWN0YXRpb25zX2RpcmVjdG9yeSk6
CisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGZpbGVuYW1lLCBleHBlY3RhdGlv
bl9wYXR0ZXJuKToKKyAgICAgICAgICAgICAgICAgICAgbW92ZV90b19leHBlY3RhdGlvbnNfZmls
ZXMuYXBwZW5kKGZpbGVuYW1lKSAgICAgICAgICAgIAorICAgICAgICAgICAgZXhpc3RpbmdfbW92
ZV90b19maWxlcyA9IFtmIGZvciBmIGluIG1vdmVfdG9fZXhwZWN0YXRpb25zX2ZpbGVzIGlmIGYg
aW4gY3VycmVudF9leHBlY3RhdGlvbnNfZmlsZXNdCisgICAgICAgICAgICBpZiBleGlzdGluZ19t
b3ZlX3RvX2ZpbGVzOgorICAgICAgICAgICAgICBsb2coIiAgQWxyZWFkeSBoYWQgJXMgYmFzZWxp
bmVzICglcyksIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIGN1cnJlbnQgJXMgYmFzZWxpbmVz
IiAlIChiYXNlbGluZV9tb3ZlX3RvLCAiLCAiLmpvaW4oZXhpc3RpbmdfbW92ZV90b19maWxlcyks
IGJhc2VsaW5lX3RhcmdldCkpCisgICAgICAgICAgICAgIHRlc3RfanNvblsnc3RhdGUnXSA9IFNU
QVRFX1JFQkFTRUxJTkVfRkFJTEVECisgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAg
ICAgIAorICAgICAgICAgICMgTW92ZSB0aGVtCisgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhp
c3RzKG1vdmVfdG9fZXhwZWN0YXRpb25zX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgIGxvZygi
ICBDcmVhdGluZyAlcyAlcyBkaXJlY3RvcnkiICUgKGJhc2VsaW5lX21vdmVfdG8sIGJhc2VfdGVz
dF9kaXJlY3RvcnkpKQorICAgICAgICAgICAgICBvcy5tYWtlZGlycyhtb3ZlX3RvX2V4cGVjdGF0
aW9uc19kaXJlY3RvcnkpCisgICAgICAgICAgZm9yIGZpbGUgaW4gY3VycmVudF9leHBlY3RhdGlv
bnNfZmlsZXM6CisgICAgICAgICAgICAgIHNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHRhcmdl
dF9leHBlY3RhdGlvbnNfZGlyZWN0b3J5LCBmaWxlKQorICAgICAgICAgICAgICBkZXN0aW5hdGlv
bl9wYXRoID0gb3MucGF0aC5qb2luKG1vdmVfdG9fZXhwZWN0YXRpb25zX2RpcmVjdG9yeSwgZmls
ZSkKKyAgICAgICAgICAgICAgc2h1dGlsLm1vdmUoc291cmNlX3BhdGgsIGRlc3RpbmF0aW9uX3Bh
dGgpCisgICAgICAgICAgICAgIGV4aXRfY29kZSA9IHNlbGYuc2VydmVyLnNjbS5hZGQoZGVzdGlu
YXRpb25fcGF0aCwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorICAgICAgICAgICAgICBsb2coIiAg
ICBNb3ZlZCAlcywgZXhpdCBjb2RlICVkIiAlIChmaWxlLCBleGl0X2NvZGUpKQorICAgICAgICAg
ICAgICBpZiBleGl0X2NvZGU6CisgICAgICAgICAgICAgICAgICB0ZXN0X2pzb25bJ3N0YXRlJ10g
PSBTVEFURV9SRUJBU0VMSU5FX0ZBSUxFRAorICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNl
CisKKyAgICAgIGxvZygiICBBZGRpbmcgbmV3IGJhc2VsaW5lcyB0byAlcyIgJSBiYXNlbGluZV90
YXJnZXQpCisgICAgICBmb3IgZmlsZSBpbiBhY3R1YWxfZmlsZXM6CisgICAgICAgICAgc291cmNl
X3BhdGggPSBvcy5wYXRoLmpvaW4odGVzdF9yZXN1bHRzX2RpcmVjdG9yeSwgZmlsZS5yZXBsYWNl
KCctZXhwZWN0ZWQnLCAnLWFjdHVhbCcpKQorICAgICAgICAgIGRlc3RpbmF0aW9uX3BhdGggPSBv
cy5wYXRoLmpvaW4odGFyZ2V0X2V4cGVjdGF0aW9uc19kaXJlY3RvcnksIGZpbGUpCisgICAgICAg
ICAgc2h1dGlsLmNvcHkoc291cmNlX3BhdGgsIGRlc3RpbmF0aW9uX3BhdGgpCisgICAgICAgICAg
ZXhpdF9jb2RlID0gc2VsZi5zZXJ2ZXIuc2NtLmFkZChkZXN0aW5hdGlvbl9wYXRoLCByZXR1cm5f
ZXhpdF9jb2RlPVRydWUpICAgICAgICAgIAorICAgICAgICAgIGxvZygiICAgIEFkZGVkICVzLCBl
eGl0IGNvZGUgJWQiICUgKGZpbGUsIGV4aXRfY29kZSkpCisgICAgICAgICAgaWYgZXhpdF9jb2Rl
OgorICAgICAgICAgICAgICB0ZXN0X2pzb25bJ3N0YXRlJ10gPSBTVEFURV9SRUJBU0VMSU5FX0ZB
SUxFRAorICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgIAorICAgICAgdGVzdF9qc29u
WydzdGF0ZSddID0gU1RBVEVfUkVCQVNFTElORV9TVUNDRUVERUQKKyAgICAgIHJldHVybiBUcnVl
CisKKyAgICBkZWYgdGVzdF9yZXN1bHQoc2VsZik6CisgICAgICAodGVzdF9uYW1lLCB0ZXN0X2V4
dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KHNlbGYucXVlcnlbJ3Rlc3QnXVswXSkKKyAgICAg
IG1vZGUgPSBzZWxmLnF1ZXJ5Wydtb2RlJ11bMF0KKyAgICAgIGlmIG1vZGUgPT0gJ2V4cGVjdGVk
LWltYWdlJzoKKyAgICAgICAgICBmaWxlX25hbWUgPSB0ZXN0X25hbWUgKyAnLWV4cGVjdGVkLnBu
ZycKKyAgICAgIGVsaWYgbW9kZSA9PSAnYWN0dWFsLWltYWdlJzoKKyAgICAgICAgICBmaWxlX25h
bWUgPSB0ZXN0X25hbWUgKyAnLWFjdHVhbC5wbmcnCisgICAgICBpZiBtb2RlID09ICdleHBlY3Rl
ZC1jaGVja3N1bSc6CisgICAgICAgICAgZmlsZV9uYW1lID0gdGVzdF9uYW1lICsgJy1leHBlY3Rl
ZC5jaGVja3N1bScKKyAgICAgIGVsaWYgbW9kZSA9PSAnYWN0dWFsLWNoZWNrc3VtJzoKKyAgICAg
ICAgICBmaWxlX25hbWUgPSB0ZXN0X25hbWUgKyAnLWFjdHVhbC5jaGVja3N1bScKKyAgICAgIGVs
aWYgbW9kZSA9PSAnZGlmZi1pbWFnZSc6CisgICAgICAgICAgZmlsZV9uYW1lID0gdGVzdF9uYW1l
ICsgJy1kaWZmLnBuZycKKyAgICAgIGlmIG1vZGUgPT0gJ2V4cGVjdGVkLXRleHQnOgorICAgICAg
ICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZXhwZWN0ZWQudHh0JworICAgICAgZWxpZiBt
b2RlID09ICdhY3R1YWwtdGV4dCc6CisgICAgICAgICAgZmlsZV9uYW1lID0gdGVzdF9uYW1lICsg
Jy1hY3R1YWwudHh0JworICAgICAgZWxpZiBtb2RlID09ICdkaWZmLXRleHQnOgorICAgICAgICAg
IGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZGlmZi50eHQnCisKKyAgICAgIGZpbGVfcGF0aCA9
IG9zLnBhdGguam9pbihzZWxmLnNlcnZlci5yZXN1bHRzX2RpcmVjdG9yeSwgZmlsZV9uYW1lKQor
ICAgICAgCisgICAgICAjIExldCByZXN1bHRzIGJlIGNhY2hlZCBmb3IgNjAgc2Vjb25kcywgc28g
dGhhdCB0aGV5IGNhbiBiZSBwcmUtZmV0Y2hlZAorICAgICAgIyBieSB0aGUgVUkKKyAgICAgIHNl
bGYuX3NlcnZlX2ZpbGUoZmlsZV9wYXRoLCBjYWNoZV9zZWNvbmRzPTYwKQorICAgIAorICAgIGRl
ZiByZXN1bHRzX2pzb24oc2VsZik6CisgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAg
ICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKQor
ICAgICAgc2VsZi5lbmRfaGVhZGVycygpICAgIAorICAgICAgc2ltcGxlanNvbi5kdW1wKHNlbGYu
c2VydmVyLnJlc3VsdHNfanNvbiwgc2VsZi53ZmlsZSkKKyAgICAKKyAgICBkZWYgcXVpdHF1aXRx
dWl0KHNlbGYpOgorICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgIHNlbGYuc2Vu
ZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJ0ZXh0L3BsYWluIikKKyAgICAgIHNlbGYuZW5kX2hl
YWRlcnMoKQorICAgICAgc2VsZi53ZmlsZS53cml0ZSgiUXVpdC5cbiIpCisgICAgICAKKyAgICAg
ICMgU2h1dGRvd24gaGFzIHRvIGhhcHBlbiBvbiBhbm90aGVyIHRocmVhZCBmcm9tIHRoZSBzZXJ2
ZXIncyB0aHJlYWQsCisgICAgICAjIG90aGVyd2lzZSB0aGVyZSdzIGEgZGVhZGxvY2sKKyAgICAg
IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxhbWJkYTogc2VsZi5zZXJ2ZXIuc2h1dGRvd24oKSku
c3RhcnQoKQorCisgICAgZGVmIF9zZXJ2ZV9maWxlKHNlbGYsIGZpbGVfcGF0aCwgY2FjaGVfc2Vj
b25kcz0wKToKKyAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlX3BhdGgpOgorICAgICAg
ICBzZWxmLnNlbmRfZXJyb3IoNDA0LCAiRmlsZSBub3QgZm91bmQiKQorICAgICAgICByZXR1cm4K
KyAgICAgIHN0YXRpY19maWxlID0gZmlsZShmaWxlX3BhdGgsICdyYicpCisgICAgICAKKyAgICAg
IHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50
LUxlbmd0aCcsIG9zLnBhdGguZ2V0c2l6ZShmaWxlX3BhdGgpKQorICAgICAgKG1pbWVfdHlwZSwg
ZW5jb2RpbmcpID0gbWltZXR5cGVzLmd1ZXNzX3R5cGUoZmlsZV9wYXRoKQorICAgICAgaWYgbWlt
ZV90eXBlOiAgICAgIAorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCBt
aW1lX3R5cGUpCisgICAgICAKKyAgICAgIGlmIGNhY2hlX3NlY29uZHM6CisgICAgICAgIGV4cGly
ZXNfdGltZSA9IFwKKyAgICAgICAgICAgIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpICsgZGF0ZXRp
bWUudGltZWRlbHRhKDAsIGNhY2hlX3NlY29uZHMpCisgICAgICAgIGV4cGlyZXNfZm9ybWF0dGVk
ID0gXAorICAgICAgICAgICAgZm9ybWF0X2RhdGVfdGltZSh0aW1lLm1rdGltZShleHBpcmVzX3Rp
bWUudGltZXR1cGxlKCkpKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJFeHBpcmVzIiwgZXhw
aXJlc19mb3JtYXR0ZWQpCisgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgIAorICAgICAg
c2h1dGlsLmNvcHlmaWxlb2JqKHN0YXRpY19maWxlLCBzZWxmLndmaWxlKQorICAgICAgc3RhdGlj
X2ZpbGUuY2xvc2UoKQorCitjbGFzcyBMb2NhbFJlYmFzZWxpbmUoQWJzdHJhY3REZWNsYXJhdGl2
ZUNvbW1hbmQpOgorICAgIG5hbWUgPSAibG9jYWwtcmViYXNlbGluZSIKKyAgICBoZWxwX3RleHQg
PSAiVE9ETyhtaWhhaXApIgorICAgIGFyZ3VtZW50X25hbWVzID0gIlsvcGF0aC90by9yZXN1bHRz
L2RpcmVjdG9yeS9dIgorCisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9v
bCk6CisgICAgICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICAgIHByaW50ICJQYXRoIHRv
IHJlc3VsdHMgZGlyZWN0b3J5IGlzIHJlcXVpcmVkLiIKKyAgICAgICAgICByZXR1cm4gMQorICAg
ICAgICByZXN1bHRzX2RpcmVjdG9yeSA9IGFyZ3NbMF0KKyAgICAgICAgCisgICAgICAgIHByaW50
ICJQYXJzaW5nIHVuZXhwZWN0ZWRfcmVzdWx0cy5qc29uLi4uIgorICAgICAgICByZXN1bHRzX2pz
b25fcGF0aCA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5LCAn
dW5leHBlY3RlZF9yZXN1bHRzLmpzb24nKQorICAgICAgICByZXN1bHRzX2pzb25fZmlsZSA9IGZp
bGUocmVzdWx0c19qc29uX3BhdGgpCisgICAgICAgIHJlc3VsdHNfanNvbiA9IHNpbXBsZWpzb24u
bG9hZChyZXN1bHRzX2pzb25fZmlsZSkKKyAgICAgICAgcmVzdWx0c19qc29uX2ZpbGUuY2xvc2Uo
KQorCisgICAgICAgIHRlc3RfbmFtZV90b190ZXN0X2ZpbGUgPSB7fQorICAgICAgICBmb3IgdGVz
dF9maWxlLCB0ZXN0X2pzb24gaW4gcmVzdWx0c19qc29uWyd0ZXN0cyddLml0ZW1zKCk6CisgICAg
ICAgICAgICAodGVzdF9uYW1lLCB0ZXh0X2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KHRl
c3RfZmlsZSkKKyAgICAgICAgICAgIHRlc3RfbmFtZV90b190ZXN0X2ZpbGVbdGVzdF9uYW1lXSA9
IHRlc3RfZmlsZQorCisgICAgICAgICAgICAjIEFsc28gaW5kZXggcGVyLXBsYXRmb3JtIHRlc3Rz
IGJ5IHRoZWlyIG5vbi1wbGF0Zm9ybSBuYW1lcworICAgICAgICAgICAgcGF0aF9waWVjZXMgPSB0
ZXN0X25hbWUuc3BsaXQob3Muc2VwKQorICAgICAgICAgICAgaWYgbGVuKHBhdGhfcGllY2VzKSA+
PSAyIGFuZCBwYXRoX3BpZWNlc1swXSA9PSAncGxhdGZvcm0nOgorICAgICAgICAgICAgICAgIHRl
c3RfbmFtZV90b190ZXN0X2ZpbGVbb3Muc2VwLmpvaW4ocGF0aF9waWVjZXNbMjpdKV0gPSB0ZXN0
X2ZpbGUKKworICAgICAgICAgICAgdGVzdF9qc29uWydzdGF0ZSddID0gU1RBVEVfTkVFRFNfUkVC
QVNFTElORQorICAgICAgICAKKyAgICAgICAgcHJpbnQgIkdhdGhlcmluZyBjdXJyZW50IGJhc2Vs
aW5lcy4uLiIKKyAgICAgICAgCisgICAgICAgIHBvcnQgPSBmYWN0b3J5LmdldCgpCisgICAgICAg
IGxheW91dF90ZXN0c19kaXJlY3RvcnkgPSBwb3J0LmxheW91dF90ZXN0c19kaXIoKQorICAgICAg
ICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhsYXlvdXRfdGVzdHNfZGlyZWN0b3J5
KToKKyAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmbm1hdGNoLmZpbHRlcihmaWxlcywgJyot
ZXhwZWN0ZWQuKicpOgorICAgICAgICAgICAgICAgIHJlbGF0aXZlX3BhdGggPSBvcy5wYXRoLnJl
bHBhdGgocm9vdCwgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICBwYXRo
X3BpZWNlcyA9IHJlbGF0aXZlX3BhdGguc3BsaXQob3Muc2VwKQorICAgICAgICAgICAgICAgIGlm
IGxlbihwYXRoX3BpZWNlcykgPj0gMiBhbmQgcGF0aF9waWVjZXNbMF0gPT0gJ3BsYXRmb3JtJzoK
KyAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0gPSBwYXRoX3BpZWNlc1sxXQorICAgICAgICAg
ICAgICAgICAgICB0ZXN0X2Rpcl9wYXRoID0gb3Muc2VwLmpvaW4ocGF0aF9waWVjZXNbMjpdKQor
ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtID0gJ2Jh
c2UnCisgICAgICAgICAgICAgICAgICAgIHRlc3RfZGlyX3BhdGggPSByZWxhdGl2ZV9wYXRoCisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgKHRlc3RfbmFtZSwgYmFzZWxpbmVfZXh0
ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgdGVz
dF9uYW1lID0gb3MucGF0aC5qb2luKHRlc3RfZGlyX3BhdGgsIHRlc3RfbmFtZVswOi1sZW4oJy1l
eHBlY3RlZCcpXSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHRlc3RfbmFt
ZV90b190ZXN0X2ZpbGU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICAgICAgdGVzdF9maWxlID0gdGVzdF9uYW1lX3RvX3Rlc3RfZmlsZVt0ZXN0X25hbWVdCisgICAg
ICAgICAgICAgICAgdGVzdF9qc29uID0gcmVzdWx0c19qc29uWyd0ZXN0cyddW3Rlc3RfZmlsZV0K
KyAgICAgICAgICAgICAgICBpZiAnYmFzZWxpbmVzJyBub3QgaW4gdGVzdF9qc29uOgorICAgICAg
ICAgICAgICAgICAgICB0ZXN0X2pzb25bJ2Jhc2VsaW5lcyddID0ge30KKyAgICAgICAgICAgICAg
ICBpZiBwbGF0Zm9ybSBub3QgaW4gdGVzdF9qc29uWydiYXNlbGluZXMnXToKKyAgICAgICAgICAg
ICAgICAgICAgdGVzdF9qc29uWydiYXNlbGluZXMnXVtwbGF0Zm9ybV0gPSBbXQorICAgICAgICAg
ICAgICAgIHRlc3RfanNvblsnYmFzZWxpbmVzJ11bcGxhdGZvcm1dLmFwcGVuZChiYXNlbGluZV9l
eHRlbnNpb24pCisKKyAgICAgICAgcHJpbnQgIlN0YXJ0aW5nIHNlcnZlciBhdCBodHRwOi8vbG9j
YWxob3N0OjgxMjcvIgorICAgICAgICAKKyAgICAgICAgaHR0cGQgPSBSZWJhc2VsaW5lSFRUU2Vy
dmVyKAorICAgICAgICAgICAgaHR0cGRfcG9ydD04MTI3LAorICAgICAgICAgICAgcmVzdWx0c19k
aXJlY3Rvcnk9cmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICByZXN1bHRzX2pzb249cmVz
dWx0c19qc29uLAorICAgICAgICAgICAgcG9ydD1wb3J0LAorICAgICAgICAgICAgc2NtPXNlbGYu
X3Rvb2wuc2NtKCkpCisgICAgICAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKSAgICAgICAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72384</attachid>
            <date>2010-10-29 13:47:00 -0700</date>
            <delta_ts>2010-11-01 18:15:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47761-20101029134659.patch</filename>
            <type>text/plain</type>
            <size>50147</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA0OWRkMDVjNDgyNWM3MzIzZjhjMTFmYWRlODgzNTcxNzMzNjUwYTMyLi5kOTRkNDhj
YjJmNjg2MzdhN2ExNGJkYTU4ZDUyNzMxN2JiNzAxOWYwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAK
KzIwMTAtMTAtMjUgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTG9jYWwgcmViYXNl
bGluaW5nIHRvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ3NzYxCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19p
bml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEv
bG9jYWxyZWJhc2VsaW5lL2luZGV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9tYWluLmpzOiBBZGRlZC4K
KyAgICAgICAgKG1haW4uYWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChtYWluLmRvY3VtZW50
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAoZGlzcGxheVJlc3VsdHMuZm9yKToKKyAgICAg
ICAgKGRpc3BsYXlSZXN1bHRzKToKKyAgICAgICAgKHNlbGVjdEZhaWx1cmVUeXBlKToKKyAgICAg
ICAgKHNlbGVjdERpcmVjdG9yeSk6CisgICAgICAgIChnZXRTZWxlY3RlZFRlc3QpOgorICAgICAg
ICAocHJlZmV0Y2gpOgorICAgICAgICAoc2VsZWN0VGVzdCk6CisgICAgICAgICh1cGRhdGVTdGF0
ZSk6CisgICAgICAgIChkaXNwbGF5SW1hZ2VSZXN1bHRzLm9ubG9hZCk6CisgICAgICAgIChkaXNw
bGF5SW1hZ2VSZXN1bHRzKToKKyAgICAgICAgKHVwZGF0ZURpZmYpOgorICAgICAgICAoZGlzcGxh
eVRleHRSZXN1bHRzLmxvYWRUZXh0UmVzdWx0KToKKyAgICAgICAgKCk6CisgICAgICAgIChuZXh0
VGVzdCk6CisgICAgICAgIChwcmV2aW91c1Rlc3QpOgorICAgICAgICAoc2hvd0xvdXBlKToKKyAg
ICAgICAgKGZpbGxMb3VwZUZyb21JbWFnZSk6CisgICAgICAgIChmaWxsTG91cGVGcm9tQ2FudmFz
LnJlYWRQaXhlbENvbXBvbmVudCk6CisgICAgICAgIChmaWxsTG91cGVGcm9tQ2FudmFzKToKKyAg
ICAgICAgKGhpZGVMb3VwZSk6CisgICAgICAgIChyZW1vdmVTZWxlY3Rpb25Gcm9tUmViYXNlbGlu
ZVF1ZXVlKToKKyAgICAgICAgKHJlbW92ZUZyb21SZWJhc2VsaW5lUXVldWUpOgorICAgICAgICAo
cmViYXNlbGluZVF1ZXVlKToKKyAgICAgICAgKHJlYmFzZWxpbmUuaGFuZGxlU3VjY2Vzcyk6Cisg
ICAgICAgIChyZWJhc2VsaW5lLmhhbmRsZUZhaWx1cmUpOgorICAgICAgICAobG9nKToKKyAgICAg
ICAgKHRvZ2dsZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2xv
Y2FscmViYXNlbGluZS5weTogQWRkZWQuCisKIDIwMTAtMTAtMjkgIERpbWl0cmkgR2xhemtvdiAg
PGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFp
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L19faW5pdF9fLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L19faW5pdF9fLnB5CmluZGV4IDliZGVjOGY1OTdlMTc2MzYzNDRhODE4M2IxMDNhMTUwYmY4Yzlk
ZTMuLjM4YjFlNzllZjQ4MTYxNzQ3NDZjNzI2NjcxMTVhN2MyZGQ2NzI2NjkgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9fX2luaXRfXy5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18u
cHkKQEAgLTIsNCArMiw1IEBACiAKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5wcmV0dHlk
aWZmIGltcG9ydCBQcmV0dHlEaWZmCiBmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMucmViYXNl
bGluZSBpbXBvcnQgUmViYXNlbGluZQorZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmxvY2Fs
cmViYXNlbGluZSBpbXBvcnQgTG9jYWxSZWJhc2VsaW5lCiAjIEZJWE1FOiBBZGQgdGhlIHJlc3Qg
b2YgdGhlIGNvbW1hbmRzIGhlcmUuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvaW5kZXguaHRtbCBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNl
bGluZS9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4MmMwYzA2ODVhMmZjNWFhMGE1OGE3NTYxZTE1
ZThjMjMxZmJlNDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvaW5kZXguaHRtbApAQCAtMCww
ICsxLDIwNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+TGF5
b3V0IFRlc3QgUmViYXNlbGluZXI8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii9tYWluLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorICA8c2NyaXB0IHNyYz0iL21haW4uanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxwcmUgaWQ9ImxvZyIgc3R5bGU9ImRpc3Bs
YXk6IG5vbmUiPjwvcHJlPgorPGRpdiBpZD0icXVldWUiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4K
KyAgUXVldWU6CisgIDxzZWxlY3QgaWQ9InF1ZXVlLXNlbGVjdCIgc2l6ZT0iMTAiPjwvc2VsZWN0
PgorICA8YnV0dG9uIGlkPSJyZW1vdmUtcXVldWUtc2VsZWN0aW9uIj5SZW1vdmUgc2VsZWN0aW9u
PC9idXR0b24+CisgIDxidXR0b24gaWQ9InJlYmFzZWxpbmUtcXVldWUiPlJlYmFzZWxpbmUgcXVl
dWU8L2J1dHRvbj4KKzwvZGl2PgorCis8ZGl2IGlkPSJoZWFkZXIiPgorICA8ZGl2IGlkPSJjb250
cm9scyI+CisgICAgPCEtLSBBZGQgYSBkdW1teSA8c2VsZWN0PiBub2RlIHNvIHRoYXQgdGhpcyBs
aW5lcyB1cCB3aXRoIHRoZSB0ZXh0IG9uIHRoZSBsZWZ0IC0tPgorICAgIDxzZWxlY3Qgc3R5bGU9
InZpc2liaWxpdHk6IGhpZGRlbiI+PC9zZWxlY3Q+CisgICAgPHNwYW4gaWQ9InRvZ2dsZS1sb2ci
IGNsYXNzPSJsaW5rIj5Mb2c8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXIiPnw8L3Nw
YW4+CisgICAgPGEgaHJlZj0iL3F1aXRxdWl0cXVpdCI+RXhpdDwvYT4KKyAgPC9kaXY+CisKKyAg
PHNwYW4gaWQ9InNlbGVjdG9ycyI+CisgICAgPGxhYmVsPgorICAgICAgRmFpbHVyZSB0eXBlOgor
ICAgICAgPHNlbGVjdCBpZD0iZmFpbHVyZS10eXBlLXNlbGVjdG9yIj48L3NlbGVjdD4KKyAgICA8
L2xhYmVsPgorICAKKyAgICA8bGFiZWw+CisgICAgICBEaXJlY3Rvcnk6CisgICAgICA8c2VsZWN0
IGlkPSJkaXJlY3Rvcnktc2VsZWN0b3IiPjwvc2VsZWN0PgorICAgIDwvbGFiZWw+CisgIAorICAg
IDxsYWJlbD4KKyAgICAgIFRlc3Q6CisgICAgICA8c2VsZWN0IGlkPSJ0ZXN0LXNlbGVjdG9yIj48
L3NlbGVjdD4KKyAgICA8L2xhYmVsPgorICA8L3NwYW4+CisgIAorICA8YSBpZD0idGVzdC1saW5r
Ij5WaWV3IHRlc3Q8L2E+CisgIAorICA8c3BhbiBpZD0ibmF2LWJ1dHRvbnMiPgorICAgIDxidXR0
b24gaWQ9InByZXZpb3VzLXRlc3QiPiZsYXF1bzs8L2J1dHRvbj4KKyAgICA8c3BhbiBpZD0idGVz
dC1pbmRleCI+PC9zcGFuPiBvZiA8c3BhbiBpZD0idGVzdC1jb3VudCI+PC9zcGFuPgorICAgIDxi
dXR0b24gaWQ9Im5leHQtdGVzdCI+JnJhcXVvOzwvYnV0dG9uPgorICA8L3NwYW4+ICAKKzwvZGl2
PgorCis8dGFibGUgaWQ9InRlc3Qtb3V0cHV0Ij4KKyAgPHRoZWFkIGlkPSJsYWJlbHMiPgorICAg
IDx0cj4KKyAgICAgIDx0aD5FeHBlY3RlZDwvdGg+CisgICAgICA8dGg+QWN0dWFsPC90aD4KKyAg
ICAgIDx0aD5EaWZmPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8dGJvZHkgaWQ9Imlt
YWdlLW91dHB1dHMiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAgICA8dHI+CisgICAgICA8dGQg
Y29sc3Bhbj0iMyI+PGgyPkltYWdlPC9oMj48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAg
ICAgPHRkPjxpbWcgaWQ9ImV4cGVjdGVkLWltYWdlIj48L3RkPgorICAgICAgPHRkPjxpbWcgaWQ9
ImFjdHVhbC1pbWFnZSI+PC90ZD4KKyAgICAgIDx0ZD4KKyAgICAgICAgPGNhbnZhcyBpZD0iZGlm
Zi1jYW52YXMiIHdpZHRoPSI4MDAiIGhlaWdodD0iNjAwIj48L2NhbnZhcz4KKyAgICAgICAgPGRp
diBpZD0iZGlmZi1jaGVja3N1bSIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgorICAgICAgICAgIDxo
Mz5DaGVja3N1bSBtaXNtYXRjaDwvaDM+CisgICAgICAgICAgRXhwZWN0ZWQ6IDxzcGFuIGlkPSJl
eHBlY3RlZC1jaGVja3N1bSI+PC9zcGFuPjxicj4KKyAgICAgICAgICBBY3R1YWw6IDxzcGFuIGlk
PSJhY3R1YWwtY2hlY2tzdW0iPjwvc3Bhbj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L3RkPgor
ICAgIDwvdHI+CisgIDwvdGJvZHk+CisgIDx0Ym9keSBpZD0idGV4dC1vdXRwdXRzIiBzdHlsZT0i
ZGlzcGxheTogbm9uZSI+CisgICAgPHRyPgorICAgICAgPHRkIGNvbHNwYW49IjMiPjxoMj5UZXh0
PC9oMj48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkPjxwcmUgaWQ9ImV4cGVj
dGVkLXRleHQiPjwvcHJlPjwvdGQ+CisgICAgICA8dGQ+PHByZSBpZD0iYWN0dWFsLXRleHQiPjwv
cHJlPjwvdGQ+CisgICAgICA8dGQ+PHByZSBpZD0iZGlmZi10ZXh0Ij48cHJlPjwvdGQ+CisgICAg
PC90cj4KKyAgPC90Ym9keT4KKworPC90YWJsZT4KKworPGRpdiBpZD0iZm9vdGVyIj4KKyAgPGxh
YmVsPlN0YXRlOiA8c3BhbiBpZD0ic3RhdGUiPjwvc3Bhbj48L2xhYmVsPgorICA8bGFiZWw+RXhp
c3RpbmcgYmFzZWxpbmVzOiA8c3BhbiBpZD0iY3VycmVudC1iYXNlbGluZXMiPjwvc3Bhbj48L2xh
YmVsPgorICA8bGFiZWw+CisgICAgQmFzZWxpbmUgdGFyZ2V0OgorICAgIDxzZWxlY3QgaWQ9ImJh
c2VsaW5lLXRhcmdldCI+CisgICAgICA8b3B0aW9uIHZhbHVlPSJhbmRyb2lkIj5hbmRyb2lkPC9v
cHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJhbmRyb2lkLXY4Ij5hbmRyb2lkLXY4PC9vcHRp
b24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bSI+Y2hyb21pdW08L29wdGlvbj4KKyAg
ICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLWdwdSI+Y2hyb21pdW0tZ3B1PC9vcHRpb24+Cisg
ICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1ncHUtbGludXgiPmNocm9taXVtLWdwdS1saW51
eDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0tZ3B1LW1hYyI+Y2hyb21p
dW0tZ3B1LW1hYzwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0tZ3B1LXdp
biI+Y2hyb21pdW0tZ3B1LXdpbjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21p
dW0tbGludXgiPmNocm9taXVtLWxpbnV4PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJj
aHJvbWl1bS1tYWMiPmNocm9taXVtLW1hYzwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0i
Y2hyb21pdW0td2luIj5jaHJvbWl1bS13aW48L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9
ImNocm9taXVtLXdpbi12aXN0YSI+Y2hyb21pdW0td2luLXZpc3RhPC9vcHRpb24+CisgICAgICA8
b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS13aW4teHAiPmNocm9taXVtLXdpbi14cDwvb3B0aW9uPgor
ICAgICAgPG9wdGlvbiB2YWx1ZT0iZ29vZ2xlLWNocm9tZS1saW51eDMyIj5nb29nbGUtY2hyb21l
LWxpbnV4MzI8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Imdvb2dsZS1jaHJvbWUtbGlu
dXg2NCI+Z29vZ2xlLWNocm9tZS1saW51eDY0PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVl
PSJndGsiPmd0azwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjIiBzZWxlY3RlZD5t
YWM8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Im1hYy1sZW9wYXJkIj5tYWMtbGVvcGFy
ZDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjLXNub3dsZW9wYXJkIj5tYWMtc25v
d2xlb3BhcmQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Im1hYy10aWdlciI+bWFjLXRp
Z2VyPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMtd2syIj5tYWMtd2syPC9vcHRp
b24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJxdCI+cXQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24g
dmFsdWU9InF0LWxpbnV4Ij5xdC1saW51eDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0i
cXQtbWFjIj5xdC1tYWM8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9InF0LXdpbiI+cXQt
d2luPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJxdC13azIiPnF0LXdrMjwvb3B0aW9u
PgorICAgICAgPG9wdGlvbiB2YWx1ZT0id2luIj53aW48L29wdGlvbj4KKyAgICAgIDxvcHRpb24g
dmFsdWU9Indpbi13azIiPndpbi13azI8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Indp
bi14cCI+d2luLXhwPC9vcHRpb24+CisgICAgPC9zZWxlY3Q+CisgIDwvbGFiZWw+CisgIDxsYWJl
bD4KKyAgICBNb3ZlIGN1cnJlbnQgYmFzZWxpbmVzIHRvOgorICAgIDxzZWxlY3QgaWQ9ImJhc2Vs
aW5lLW1vdmUtdG8iPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibm9uZSI+Tm93aGVyZSAocmVwbGFj
ZSk8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImFuZHJvaWQiPmFuZHJvaWQ8L29wdGlv
bj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImFuZHJvaWQtdjgiPmFuZHJvaWQtdjg8L29wdGlvbj4K
KyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtIj5jaHJvbWl1bTwvb3B0aW9uPgorICAgICAg
PG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0tZ3B1Ij5jaHJvbWl1bS1ncHU8L29wdGlvbj4KKyAgICAg
IDxvcHRpb24gdmFsdWU9ImNocm9taXVtLWdwdS1saW51eCI+Y2hyb21pdW0tZ3B1LWxpbnV4PC9v
cHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1ncHUtbWFjIj5jaHJvbWl1bS1n
cHUtbWFjPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1ncHUtd2luIj5j
aHJvbWl1bS1ncHUtd2luPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1s
aW51eCI+Y2hyb21pdW0tbGludXg8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9t
aXVtLW1hYyI+Y2hyb21pdW0tbWFjPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJv
bWl1bS13aW4iPmNocm9taXVtLXdpbjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hy
b21pdW0td2luLXZpc3RhIj5jaHJvbWl1bS13aW4tdmlzdGE8L29wdGlvbj4KKyAgICAgIDxvcHRp
b24gdmFsdWU9ImNocm9taXVtLXdpbi14cCI+Y2hyb21pdW0td2luLXhwPC9vcHRpb24+CisgICAg
ICA8b3B0aW9uIHZhbHVlPSJnb29nbGUtY2hyb21lLWxpbnV4MzIiPmdvb2dsZS1jaHJvbWUtbGlu
dXgzMjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iZ29vZ2xlLWNocm9tZS1saW51eDY0
Ij5nb29nbGUtY2hyb21lLWxpbnV4NjQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Imd0
ayI+Z3RrPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMiPm1hYzwvb3B0aW9uPgor
ICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjLWxlb3BhcmQiPm1hYy1sZW9wYXJkPC9vcHRpb24+Cisg
ICAgICA8b3B0aW9uIHZhbHVlPSJtYWMtc25vd2xlb3BhcmQiPm1hYy1zbm93bGVvcGFyZDwvb3B0
aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjLXRpZ2VyIj5tYWMtdGlnZXI8L29wdGlvbj4K
KyAgICAgIDxvcHRpb24gdmFsdWU9Im1hYy13azIiPm1hYy13azI8L29wdGlvbj4KKyAgICAgIDxv
cHRpb24gdmFsdWU9InF0Ij5xdDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0icXQtbGlu
dXgiPnF0LWxpbnV4PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJxdC1tYWMiPnF0LW1h
Yzwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0icXQtd2luIj5xdC13aW48L29wdGlvbj4K
KyAgICAgIDxvcHRpb24gdmFsdWU9InF0LXdrMiI+cXQtd2syPC9vcHRpb24+CisgICAgICA8b3B0
aW9uIHZhbHVlPSJ3aW4iPndpbjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0id2luLXdr
MiI+d2luLXdrMjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0id2luLXhwIj53aW4teHA8
L29wdGlvbj4gICAgICAKKyAgICA8L3NlbGVjdD4KKyAgPC9sYWJlbD4KKworICA8IS0tIEFkZCBh
IGR1bW15IDxidXR0b24+IG5vZGUgc28gdGhhdCB0aGlzIGxpbmVzIHVwIHdpdGggdGhlIHRleHQg
b24gdGhlIGxlZnQgLS0+CisgIDxidXR0b24gc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbiI+PC9i
dXR0b24+CisgIAorICA8ZGl2IGlkPSJhY3Rpb24tYnV0dG9ucyI+CisgICAgPHNwYW4gaWQ9InRv
Z2dsZS1xdWV1ZSIgY2xhc3M9ImxpbmsiPlF1ZXVlPC9zcGFuPgorICAgIDxidXR0b24gaWQ9ImFk
ZC10by1yZWJhc2VsaW5lLXF1ZXVlIj5BZGQgdG8gcmViYXNlbGluZSBxdWV1ZTwvYnV0dG9uPgor
ICA8L2Rpdj4KKzwvZGl2PgorCis8dGFibGUgaWQ9ImxvdXBlIiBzdHlsZT0iZGlzcGxheTogbm9u
ZSI+CisgIDx0cj4KKyAgICA8dGQgY29sc3Bhbj0iMyIgaWQ9ImxvdXBlLWluZm8iPgorICAgICAg
PHNwYW4gaWQ9ImxvdXBlLWNsb3NlIiBjbGFzcz0ibGluayI+Q2xvc2U8L3NwYW4+CisgICAgICA8
bGFiZWw+Q29vcmRpbmF0ZTogPHNwYW4gaWQ9ImxvdXBlLWNvb3JkaW5hdGUiPjwvc3Bhbj48L2xh
YmVsPgorICAgIDwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+CisgICAgICA8ZGl2IGNs
YXNzPSJsb3VwZS1jb250YWluZXIiPgorICAgICAgICA8Y2FudmFzIGlkPSJleHBlY3RlZC1sb3Vw
ZSIgd2lkdGg9IjIxMCIgaGVpZ2h0PSIyMTAiPjwvY2FudmFzPgorICAgICAgICA8ZGl2IGNsYXNz
PSJjZW50ZXItaGlnaGxpZ2h0Ij48L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvdGQ+CisgICAg
PHRkPgorICAgICAgPGRpdiBjbGFzcz0ibG91cGUtY29udGFpbmVyIj4KKyAgICAgICAgPGNhbnZh
cyBpZD0iYWN0dWFsLWxvdXBlIiB3aWR0aD0iMjEwIiBoZWlnaHQ9IjIxMCI+PC9jYW52YXM+Cisg
ICAgICAgIDxkaXYgY2xhc3M9ImNlbnRlci1oaWdobGlnaHQiPjwvZGl2PgorICAgICAgPC9kaXY+
CisgICAgPC90ZD4KKyAgICA8dGQ+CisgICAgICA8ZGl2IGNsYXNzPSJsb3VwZS1jb250YWluZXIi
PgorICAgICAgICA8Y2FudmFzIGlkPSJkaWZmLWxvdXBlIiB3aWR0aD0iMjEwIiBoZWlnaHQ9IjIx
MCI+PC9jYW52YXM+CisgICAgICAgIDxkaXYgY2xhc3M9ImNlbnRlci1oaWdobGlnaHQiPjwvZGl2
PgorICAgICAgPC9kaXY+CisgICAgPC90ZD4KKyAgPC90cj4KKyAgPHRyIGlkPSJsb3VwZS1jb2xv
cnMiPgorICAgIDx0ZD48bGFiZWw+RXhwLiBjb2xvcjogPHNwYW4gaWQ9ImV4cGVjdGVkLWxvdXBl
LWNvbG9yIj48L3NwYW4+PC9sYWJlbD48L3RkPgorICAgIDx0ZD48bGFiZWw+QWN0dWFsIGNvbG9y
OiA8c3BhbiBpZD0iYWN0dWFsLWxvdXBlLWNvbG9yIj48L3NwYW4+PC9sYWJlbD48L3RkPgorICAg
IDx0ZD48bGFiZWw+RGlmZiBjb2xvcjogPHNwYW4gaWQ9ImRpZmYtbG91cGUtY29sb3IiPjwvc3Bh
bj48L2xhYmVsPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0
YS9sb2NhbHJlYmFzZWxpbmUvbWFpbi5jc3MgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvbWFpbi5jc3MKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWRjZTAzMjg0MThkMjQ1OGMxMjkyY2U4YjI1YWIzY2RhYWY3MTJiZgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2Fs
cmViYXNlbGluZS9tYWluLmNzcwpAQCAtMCwwICsxLDI0NCBAQAorYm9keSB7CisgIGZvbnQtc2l6
ZTogMTJweDsKKyAgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7Cisg
IHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKK30KKworZGl2IHsKKyAgbWFyZ2luOiAwOworfQor
CithLCAubGluayB7CisgIGNvbG9yOiAjYWFmOworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGlu
ZTsKKyAgY3Vyc29yOiBwb2ludGVyOyAgICAgIAorfQorCisubGluay5zZWxlY3RlZCB7CisgIGNv
bG9yOiAjZmZmOworICBmb250LXdlaWdodDogYm9sZDsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25l
OworfQorCisjbG9nLAorI3F1ZXVlIHsKKyAgcGFkZGluZzogLjI1ZW0gMCAwIC4yNWVtOworICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgIHJpZ2h0OiAwOworICBoZWlnaHQ6IDIwMHB4OworICBvdmVy
ZmxvdzogYXV0bzsKKyAgYmFja2dyb3VuZDogI2ZmZjsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAx
cHggMXB4IDVweCByZ2JhKDAsIDAsIDAsIC41KTsKK30KKworI2xvZyB7CisgIHRvcDogMmVtOwor
ICB3aWR0aDogNTAwcHg7Cit9CisKKyNxdWV1ZSB7CisgIGJvdHRvbTogM2VtOworICB3aWR0aDog
NDAwcHg7Cit9CisKKyNxdWV1ZS1zZWxlY3QgeworICBkaXNwbGF5OiBibG9jazsKKyAgd2lkdGg6
IDM5MHB4OworfQorCisjaGVhZGVyLAorI2Zvb3RlciB7CisgIHBhZGRpbmc6IC41ZW0gMWVtOyAg
ICAKKyAgYmFja2dyb3VuZDogIzMzMzsKKyAgY29sb3I6ICNmZmY7CisgIC13ZWJraXQtYm94LXNo
YWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC41KTsKK30KKworI2hlYWRlciAuZGl2aWRl
ciwKKyNmb290ZXIgLmRpdmlkZXIgeworICBvcGFjaXR5OiAuMzsKKyAgcGFkZGluZzogMCAuNWVt
OworfQorCisjaGVhZGVyIHsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisjaGVhZGVyIGxh
YmVsLAorI2Zvb3RlciBsYWJlbCB7CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgY29sb3I6ICNj
Y2M7Cit9CisKKyN0ZXN0LWxpbmsgeworICBtYXJnaW4tcmlnaHQ6IDFlbTsKK30KKworI2hlYWRl
ciBsYWJlbCBzcGFuLAorI2Zvb3RlciBsYWJlbCBzcGFuIHsKKyAgY29sb3I6ICNmZmY7CisgIGZv
bnQtd2VpZ2h0OiBib2xkOworfQorCisjbmF2LWJ1dHRvbnMgYnV0dG9uIHsKKyAgYmFja2dyb3Vu
ZDogI2ZmZjsKKyAgYm9yZGVyOiAwOworICBib3JkZXItcmFkaXVzOiAxMHB4OworfQorCisjbmF2
LWJ1dHRvbnMgYnV0dG9uOmFjdGl2ZSB7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDVweCAj
MzNmIGluc2V0OworICBiYWNrZ3JvdW5kOiAjYWFhOworfQorCisjbmF2LWJ1dHRvbnMgYnV0dG9u
W2Rpc2FibGVkXSB7CisgIG9wYWNpdHk6IC41OworfQorCisjY29udHJvbHMgeworICBmbG9hdDog
cmlnaHQ7Cit9CisKKyN0ZXN0LW91dHB1dCB7CisgIGJvcmRlci1zcGFjaW5nOiAwOworICBib3Jk
ZXItY29sbGFwc2U6IGNvbGxhcHNlOworICBtYXJnaW46IDAgYXV0bzsKK30KKworI3Rlc3Qtb3V0
cHV0IHRkLAorI3Rlc3Qtb3V0cHV0IHRoIHsKKyAgcGFkZGluZzogMDsKKyAgdmVydGljYWwtYWxp
Z246IHRvcDsKK30KKworI2ltYWdlLW91dHB1dHMgaW1nLAorI2ltYWdlLW91dHB1dHMgY2FudmFz
LAorI2ltYWdlLW91dHB1dHMgI2RpZmYtY2hlY2tzdW0geworICB3aWR0aDogODAwcHg7CisgIGhl
aWdodDogNjAwcHg7CisgIGJvcmRlcjogc29saWQgMXB4ICNkZGQ7Cit9CisKKyNpbWFnZS1vdXRw
dXRzIGltZywKKyNpbWFnZS1vdXRwdXRzIGNhbnZhcyB7CisgIGN1cnNvcjogY3Jvc3NoYWlyOwor
fQorCisjaW1hZ2Utb3V0cHV0cyBpbWcubG9hZGluZywKKyNpbWFnZS1vdXRwdXRzIGNhbnZhcy5s
b2FkaW5nIHsKKyAgb3BhY2l0eTogLjU7Cit9CisKKyNpbWFnZS1vdXRwdXRzICNhY3R1YWwtaW1h
Z2UgeworICBtYXJnaW46IDAgMWVtOworfQorCisjdGVzdC1vdXRwdXQgI2xhYmVscyB0aCB7Cisg
IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgY29sb3I6ICM2NjY7Cit9CisKKyN0ZXh0LW91dHB1dHMg
cHJlIHsKKyAgaGVpZ2h0OiA2MDBweDsKKyAgd2lkdGg6IDgwMHB4OworICBvdmVyZmxvdzogYXV0
bzsKK30KKworI3Rlc3Qtb3V0cHV0IGgyIHsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNj
Y2M7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBtYXJnaW46IDA7CisgIGJhY2tncm91bmQ6ICNl
ZWU7Cit9CisKKyNmb290ZXIgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMDsK
KyAgbGVmdDogMDsKKyAgcmlnaHQ6IDA7CisgIG1hcmdpbi10b3A6IDFlbTsKK30KKworI3N0YXRl
Lm5lZWRzX3JlYmFzZWxpbmUgeworICBjb2xvcjogeWVsbG93OworfQorI3N0YXRlLnJlYmFzZWxp
bmVfZmFpbGVkIHsKKyAgY29sb3I6IHJlZDsKK30KKyNzdGF0ZS5yZWJhc2VsaW5lX3N1Y2NlZWRl
ZCB7CisgIGNvbG9yOiBncmVlbjsKK30KKyNzdGF0ZS5pbl9xdWV1ZSB7CisgIGNvbG9yOiBncmF5
OworfQorCisjYWN0aW9uLWJ1dHRvbnMgeworICBmbG9hdDogcmlnaHQ7Cit9CisKKyNhY3Rpb24t
YnV0dG9ucyAubGluayB7CisgIG1hcmdpbi1yaWdodDogMWVtOworfQorCisjZm9vdGVyIGJ1dHRv
biB7CisgIHBhZGRpbmc6IDFlbTsKK30KKworI2xvdXBlIHsKKyAgLXdlYmtpdC1ib3gtc2hhZG93
OiAycHggMnB4IDVweCByZ2JhKDAsIDAsIDAsIC41KTsKKyAgcG9zaXRpb246IGFic29sdXRlOwor
ICB3aWR0aDogNjM0cHg7CisgIHRvcDogNTAlOworICBsZWZ0OiA1MCU7CisgIG1hcmdpbi1sZWZ0
OiAtMTUxcHg7CisgIG1hcmdpbi10b3A6IC01MHB4OworICBiYWNrZ3JvdW5kOiAjZmZmOworICBi
b3JkZXItc3BhY2luZzogMDsKKyAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKK30KKworI2xv
dXBlIHRkIHsKKyAgcGFkZGluZzogMDsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsgICAgIAor
fQorCisjbG91cGUgbGFiZWwgeworICBjb2xvcjogIzk5OTsKKyAgcGFkZGluZy1yaWdodDogMWVt
OworfQorCisjbG91cGUgc3BhbiB7CisgIGNvbG9yOiAjMDAwOworICBmb250LXdlaWdodDogYm9s
ZDsKK30KKworI2xvdXBlICNsb3VwZS1jbG9zZSB7CisgIGZsb2F0OiByaWdodDsKK30KKworI2xv
dXBlICNsb3VwZS1pbmZvIHsKKyAgYmFja2dyb3VuZDogI2VlZTsKKyAgcGFkZGluZzogLjNlbSAu
NWVtOworfQorCisjbG91cGUgI2xvdXBlLWNvbG9ycyB0ZCB7CisgIHRleHQtYWxpZ246IGNlbnRl
cjsKK30KKworI2xvdXBlIC5sb3VwZS1jb250YWluZXIgeworICBwb3NpdGlvbjogcmVsYXRpdmU7
CisgIHdpZHRoOiAyMTBweDsKKyAgaGVpZ2h0OiAyMTBweDsKK30KKworI2xvdXBlIC5jZW50ZXIt
aGlnaGxpZ2h0IHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB3aWR0aDogMTBweDsKKyAgaGVp
Z2h0OiAxMHB4OworICB0b3A6IDUwJTsKKyAgbGVmdDogNTAlOworICBtYXJnaW4tbGVmdDogLTVw
eDsKKyAgbWFyZ2luLXRvcDogLTVweDsKKyAgb3V0bGluZTogc29saWQgMXB4ICM5OTk7Cit9Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvbG9jYWxyZWJhc2VsaW5lL21haW4uanMgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9sb2NhbHJlYmFz
ZWxpbmUvbWFpbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42N2ZkNDQwNGQ1OWMzODFiMzMxMTFhYWEyZDk4MDQ1
ZTE3YTJjZWExCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL2RhdGEvbG9jYWxyZWJhc2VsaW5lL21haW4uanMKQEAgLTAsMCArMSw2
MTcgQEAKK3ZhciBTVEFURV9ORUVEU19SRUJBU0VMSU5FID0gJ25lZWRzX3JlYmFzZWxpbmUnOwor
dmFyIFNUQVRFX1JFQkFTRUxJTkVfRkFJTEVEID0gJ3JlYmFzZWxpbmVfZmFpbGVkJzsKK3ZhciBT
VEFURV9SRUJBU0VMSU5FX1NVQ0NFRURFRCA9ICdyZWJhc2VsaW5lX3N1Y2NlZWRlZCc7Cit2YXIg
U1RBVEVfSU5fUVVFVUUgPSAnaW5fcXVldWUnOwordmFyIFNUQVRFX1RPX0RJU1BMQVlfU1RBVEUg
PSB7fTsKK1NUQVRFX1RPX0RJU1BMQVlfU1RBVEVbU1RBVEVfTkVFRFNfUkVCQVNFTElORV0gPSAn
TmVlZHMgcmViYXNlbGluZSc7CitTVEFURV9UT19ESVNQTEFZX1NUQVRFW1NUQVRFX1JFQkFTRUxJ
TkVfRkFJTEVEXSA9ICdSZWJhc2VsaW5lIGZhaWxlZCc7CitTVEFURV9UT19ESVNQTEFZX1NUQVRF
W1NUQVRFX1JFQkFTRUxJTkVfU1VDQ0VFREVEXSA9ICdSZWJhc2VsaW5lIHN1Y2NlZWRlZCc7CitT
VEFURV9UT19ESVNQTEFZX1NUQVRFW1NUQVRFX0lOX1FVRVVFXSA9ICdJbiBxdWV1ZSc7CisKK3Zh
ciByZXN1bHRzOwordmFyIHRlc3RzQnlGYWlsdXJlVHlwZSA9IHt9OwordmFyIHRlc3RzQnlEaXJl
Y3RvcnkgPSB7fTsKK3ZhciBzZWxlY3RlZFRlc3RzID0gW107Cit2YXIgaW5Qcm9ncmVzc1JlYmFz
ZWxpbmVDb3VudCA9IDA7CisKK2Z1bmN0aW9uICQoaWQpIHsKKyAgcmV0dXJuIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKGlkKTsKK30KKworZnVuY3Rpb24gbWFpbigpIHsKKyAgJCgnZmFpbHVyZS10
eXBlLXNlbGVjdG9yJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgc2VsZWN0RmFpbHVyZVR5
cGUpOworICAkKCdkaXJlY3Rvcnktc2VsZWN0b3InKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2Un
LCBzZWxlY3REaXJlY3RvcnkpOworICAkKCd0ZXN0LXNlbGVjdG9yJykuYWRkRXZlbnRMaXN0ZW5l
cignY2hhbmdlJywgc2VsZWN0VGVzdCk7CisgICQoJ25leHQtdGVzdCcpLmFkZEV2ZW50TGlzdGVu
ZXIoJ2NsaWNrJywgbmV4dFRlc3QpOworICAkKCdwcmV2aW91cy10ZXN0JykuYWRkRXZlbnRMaXN0
ZW5lcignY2xpY2snLCBwcmV2aW91c1Rlc3QpOworCisgICQoJ2FkZC10by1yZWJhc2VsaW5lLXF1
ZXVlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhZGRUb1JlYmFzZWxpbmVRdWV1ZSk7Cisg
ICQoJ3F1ZXVlLXNlbGVjdCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHVwZGF0ZVN0YXRl
KTsKKyAgJCgncmVtb3ZlLXF1ZXVlLXNlbGVjdGlvbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNr
JywgcmVtb3ZlU2VsZWN0aW9uRnJvbVJlYmFzZWxpbmVRdWV1ZSk7CisgICQoJ3JlYmFzZWxpbmUt
cXVldWUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlYmFzZWxpbmVRdWV1ZSk7CisKKyAg
JCgnZXhwZWN0ZWQtaW1hZ2UnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHNob3dMb3VwZSk7
CisgICQoJ2FjdHVhbC1pbWFnZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd0xvdXBl
KTsKKyAgJCgnZGlmZi1jYW52YXMnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHNob3dMb3Vw
ZSk7CisgICQoJ2xvdXBlLWNsb3NlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoaWRlTG91
cGUpOworICAkKCd0b2dnbGUtbG9nJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlv
bigpIHt0b2dnbGUoJ2xvZycpfSk7CisgICQoJ3RvZ2dsZS1xdWV1ZScpLmFkZEV2ZW50TGlzdGVu
ZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7dG9nZ2xlKCdxdWV1ZScpfSk7CisKKyAgZG9jdW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKGV2
ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hp
ZnRLZXkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChldmVudC5r
ZXlJZGVudGlmaWVyKSB7CisgICAgICBjYXNlICdMZWZ0JzogZXZlbnQucHJldmVudERlZmF1bHQo
KTsgcHJldmlvdXNUZXN0KCk7IGJyZWFrOworICAgICAgY2FzZSAnUmlnaHQnOiBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOyBuZXh0VGVzdCgpOyBicmVhazsKKyAgICAgIGNhc2UgJ1UrMDA1MSc6IGFk
ZFRvUmViYXNlbGluZVF1ZXVlKCk7IGJyZWFrOworICAgICAgY2FzZSAnVSswMDUyJzogcmViYXNl
bGluZVF1ZXVlKCk7IGJyZWFrOworICAgIH0KKyAgfSk7CisgIAorICB2YXIgeGhyID0gbmV3IFhN
TEh0dHBSZXF1ZXN0KCk7CisgIHhoci5vcGVuKCdHRVQnLCAnL3Jlc3VsdHMuanNvbicpOworICB4
aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgeworICAgIHJlc3VsdHMgPSBK
U09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpOworICAgIGRpc3BsYXlSZXN1bHRzKCk7ICAKKyAg
fSk7CisgIHhoci5zZW5kKCk7Cit9CisKK2Z1bmN0aW9uIGRpc3BsYXlSZXN1bHRzKCkgeworICB2
YXIgZmFpbHVyZVR5cGVTZWxlY3RvciA9ICQoJ2ZhaWx1cmUtdHlwZS1zZWxlY3RvcicpOworICB2
YXIgZmFpbHVyZVR5cGVzID0gW107CisgIAorICBmb3IgKHZhciB0ZXN0TmFtZSBpbiByZXN1bHRz
LnRlc3RzKSB7CisgICAgdmFyIHRlc3QgPSByZXN1bHRzLnRlc3RzW3Rlc3ROYW1lXTsKKyAgICBp
ZiAodGVzdC5hY3R1YWwgPT0gJ1BBU1MnKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAg
dmFyIGZhaWx1cmVUeXBlID0gdGVzdC5hY3R1YWwgKyAnIChleHBlY3RlZCAnICsgdGVzdC5leHBl
Y3RlZCArICcpJzsKKyAgICBpZiAoIShmYWlsdXJlVHlwZSBpbiB0ZXN0c0J5RmFpbHVyZVR5cGUp
KSB7CisgICAgICB0ZXN0c0J5RmFpbHVyZVR5cGVbZmFpbHVyZVR5cGVdID0gW107CisgICAgICBm
YWlsdXJlVHlwZXMucHVzaChmYWlsdXJlVHlwZSk7CisgICAgfQorICAgIHRlc3RzQnlGYWlsdXJl
VHlwZVtmYWlsdXJlVHlwZV0ucHVzaCh0ZXN0TmFtZSk7CisgIH0KKyAgCisgIGZhaWx1cmVUeXBl
cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICByZXR1cm4gdGVzdHNCeUZhaWx1cmVUeXBlW2Jd
Lmxlbmd0aCAtIHRlc3RzQnlGYWlsdXJlVHlwZVthXS5sZW5ndGg7CisgIH0pOworICAKKyAgZm9y
ICh2YXIgaSA9IDAsIGZhaWx1cmVUeXBlOyBmYWlsdXJlVHlwZSA9IGZhaWx1cmVUeXBlc1tpXTsg
aSsrKSB7CisgICAgdmFyIGZhaWx1cmVUeXBlT3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnb3B0aW9uJyk7CisgICAgZmFpbHVyZVR5cGVPcHRpb24udmFsdWUgPSBmYWlsdXJlVHlwZTsK
KyAgICBmYWlsdXJlVHlwZU9wdGlvbi50ZXh0Q29udGVudCA9IGZhaWx1cmVUeXBlICsgJyAtICcg
KyB0ZXN0c0J5RmFpbHVyZVR5cGVbZmFpbHVyZVR5cGVdLmxlbmd0aCArICcgdGVzdHMnOworICAg
IGZhaWx1cmVUeXBlU2VsZWN0b3IuYXBwZW5kQ2hpbGQoZmFpbHVyZVR5cGVPcHRpb24pOworICB9
CisgIAorICBzZWxlY3RGYWlsdXJlVHlwZSgpOworfQorCitmdW5jdGlvbiBzZWxlY3RGYWlsdXJl
VHlwZSgpIHsKKyAgdmFyIHNlbGVjdGVkRmFpbHVyZVR5cGUgPSBnZXRTZWxlY3RWYWx1ZSgnZmFp
bHVyZS10eXBlLXNlbGVjdG9yJyk7CisgIHZhciB0ZXN0cyA9IHRlc3RzQnlGYWlsdXJlVHlwZVtz
ZWxlY3RlZEZhaWx1cmVUeXBlXTsKKyAgCisgIC8vIEluY2x1ZGUgYSBhcGVjaWFsIG9wdGlvbiBm
b3IgYWxsIHRlc3RzCisgIHRlc3RzQnlEaXJlY3RvcnkgPSB7J1thbGxdJzogdGVzdHN9OworICB2
YXIgZGlzcGxheURpcmVjdG9yeU5hbWVzQnlEaXJlY3RvcnkgPSB7J1thbGxdJzogJ2FsbCd9Owor
ICB2YXIgZGlyZWN0b3JpZXMgPSBbJ1thbGxdJ107CisgIAorICBmb3IgKHZhciBpID0gMCwgdGVz
dDsgdGVzdCA9IHRlc3RzW2ldOyBpKyspIHsKKyAgICB2YXIgcGF0aFBpZWNlcyA9IHRlc3Quc3Bs
aXQoJy8nKTsKKyAgICB2YXIgZGlyZWN0b3J5ID0gJyc7CisgICAgCisgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBwYXRoUGllY2VzLmxlbmd0aCAtIDE7IGorKykgeworICAgICAgZGlyZWN0b3J5ICs9
IHBhdGhQaWVjZXNbal0gKyAnLyc7CisgICAgICBpZiAoIShkaXJlY3RvcnkgaW4gdGVzdHNCeURp
cmVjdG9yeSkpIHsKKyAgICAgICAgdGVzdHNCeURpcmVjdG9yeVtkaXJlY3RvcnldID0gW107Cisg
ICAgICAgIHZhciBkaXNwbGF5RGlyZWN0b3J5TmFtZSA9IG5ldyBBcnJheShqICogNikuam9pbign
Jm5ic3A7JykgKyBwYXRoUGllY2VzW2pdOworICAgICAgICBkaXNwbGF5RGlyZWN0b3J5TmFtZXNC
eURpcmVjdG9yeVtkaXJlY3RvcnldID0gZGlzcGxheURpcmVjdG9yeU5hbWU7CisgICAgICAgIGRp
cmVjdG9yaWVzLnB1c2goZGlyZWN0b3J5KTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdGVzdHNC
eURpcmVjdG9yeVtkaXJlY3RvcnldLnB1c2godGVzdCk7CisgICAgfQorICB9CisgIAorICBkaXJl
Y3Rvcmllcy5zb3J0KCk7CisKKyAgdmFyIGRpcmVjdG9yeVNlbGVjdG9yID0gJCgnZGlyZWN0b3J5
LXNlbGVjdG9yJyk7ICAKKyAgZGlyZWN0b3J5U2VsZWN0b3IuaW5uZXJIVE1MID0gJyc7CisgIAor
ICBmb3IgKHZhciBpID0gMCwgZGlyZWN0b3J5OyBkaXJlY3RvcnkgPSBkaXJlY3Rvcmllc1tpXTsg
aSsrKSB7CisgICAgdmFyIGRpcmVjdG9yeU9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J29wdGlvbicpOworICAgIGRpcmVjdG9yeU9wdGlvbi52YWx1ZSA9IGRpcmVjdG9yeTsKKyAgICBk
aXJlY3RvcnlPcHRpb24uaW5uZXJIVE1MID0KKyAgICAgICAgZGlzcGxheURpcmVjdG9yeU5hbWVz
QnlEaXJlY3RvcnlbZGlyZWN0b3J5XSArICcgLSAnICsKKyAgICAgICAgdGVzdHNCeURpcmVjdG9y
eVtkaXJlY3RvcnldLmxlbmd0aCArICcgdGVzdHMnOworICAgIGRpcmVjdG9yeVNlbGVjdG9yLmFw
cGVuZENoaWxkKGRpcmVjdG9yeU9wdGlvbik7ICAgIAorICB9CisgIAorICBzZWxlY3REaXJlY3Rv
cnkoKTsKK30KKworZnVuY3Rpb24gc2VsZWN0RGlyZWN0b3J5KCkgeworICB2YXIgc2VsZWN0ZWRE
aXJlY3RvcnkgPSBnZXRTZWxlY3RWYWx1ZSgnZGlyZWN0b3J5LXNlbGVjdG9yJyk7CisgIHNlbGVj
dGVkVGVzdHMgPSB0ZXN0c0J5RGlyZWN0b3J5W3NlbGVjdGVkRGlyZWN0b3J5XTsKKworICBzZWxl
Y3RlZFRlc3RzLnNvcnQoKTsKKworICB2YXIgdGVzdFNlbGVjdG9yID0gJCgndGVzdC1zZWxlY3Rv
cicpOworICB0ZXN0U2VsZWN0b3IuaW5uZXJIVE1MID0gJyc7CisgIGZvciAodmFyIGkgPSAwLCB0
ZXN0OyB0ZXN0ID0gc2VsZWN0ZWRUZXN0c1tpXTsgaSsrKSB7CisgICAgdmFyIHRlc3RPcHRpb24g
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKKyAgICB0ZXN0T3B0aW9uLnZhbHVl
ID0gdGVzdDsKKyAgICB0ZXN0T3B0aW9uLnRleHRDb250ZW50ID0gdGVzdDsKKyAgICB0ZXN0U2Vs
ZWN0b3IuYXBwZW5kQ2hpbGQodGVzdE9wdGlvbik7ICAgIAorICB9CisgIAorICBzZWxlY3RUZXN0
KCk7Cit9CisKK2Z1bmN0aW9uIGdldFNlbGVjdFZhbHVlKGlkKSB7CisgIHZhciBzZWxlY3QgPSAk
KGlkKTsKKyAgcmV0dXJuIHNlbGVjdC5vcHRpb25zW3NlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1
ZTsKK30KKworZnVuY3Rpb24gZ2V0U2VsZWN0ZWRUZXN0KCkgeworICByZXR1cm4gZ2V0U2VsZWN0
VmFsdWUoJ3Rlc3Qtc2VsZWN0b3InKTsKK30KKworZnVuY3Rpb24gcHJlZmV0Y2goKSB7CisgIHZh
ciB0ZXN0U2VsZWN0b3IgPSAkKCd0ZXN0LXNlbGVjdG9yJyk7CisgIGlmICh0ZXN0U2VsZWN0b3Iu
c2VsZWN0ZWRJbmRleCA9PSB0ZXN0U2VsZWN0b3Iub3B0aW9ucy5sZW5ndGggLSAxKSB7CisgICAg
cmV0dXJuOworICB9CisgIHZhciBuZXh0VGVzdCA9IHRlc3RTZWxlY3Rvci5vcHRpb25zW3Rlc3RT
ZWxlY3Rvci5zZWxlY3RlZEluZGV4ICsgMV0udmFsdWU7CisgIGlmIChyZXN1bHRzLnRlc3RzW25l
eHRUZXN0XS5hY3R1YWwuaW5kZXhPZignSU1BR0UnKSAhPSAtMSkgeworICAgIG5ldyBJbWFnZSgp
LnNyYyA9ICcvdGVzdF9yZXN1bHQ/dGVzdD0nICsgbmV4dFRlc3QgKyAnJm1vZGU9ZXhwZWN0ZWQt
aW1hZ2UnOworICAgIG5ldyBJbWFnZSgpLnNyYyA9ICcvdGVzdF9yZXN1bHQ/dGVzdD0nICsgbmV4
dFRlc3QgKyAnJm1vZGU9YWN0dWFsLWltYWdlJzsgICAgCisgIH0KK30KKworZnVuY3Rpb24gc2Vs
ZWN0VGVzdCgpIHsKKyAgdmFyIHNlbGVjdGVkVGVzdCA9IGdldFNlbGVjdGVkVGVzdCgpOworICAK
KyAgaWYgKHJlc3VsdHMudGVzdHNbc2VsZWN0ZWRUZXN0XS5hY3R1YWwuaW5kZXhPZignSU1BR0Un
KSAhPSAtMSkgeworICAgICQoJ2ltYWdlLW91dHB1dHMnKS5zdHlsZS5kaXNwbGF5ID0gJyc7Cisg
ICAgZGlzcGxheUltYWdlUmVzdWx0cyhzZWxlY3RlZFRlc3QpOworICB9IGVsc2UgeworICAgICQo
J2ltYWdlLW91dHB1dHMnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAgCisgIH0KKworICBpZiAo
cmVzdWx0cy50ZXN0c1tzZWxlY3RlZFRlc3RdLmFjdHVhbC5pbmRleE9mKCdURVhUJykgIT0gLTEp
IHsKKyAgICAkKCd0ZXh0LW91dHB1dHMnKS5zdHlsZS5kaXNwbGF5ID0gJyc7CisgICAgZGlzcGxh
eVRleHRSZXN1bHRzKHNlbGVjdGVkVGVzdCk7CisgIH0gZWxzZSB7CisgICAgJCgndGV4dC1vdXRw
dXRzJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgIAorICB9CisgIAorICB2YXIgY3VycmVudEJh
c2VsaW5lcyA9ICQoJ2N1cnJlbnQtYmFzZWxpbmVzJyk7CisgIGN1cnJlbnRCYXNlbGluZXMudGV4
dENvbnRlbnQgPSAnJzsKKyAgdmFyIGJhc2VsaW5lcyA9IHJlc3VsdHMudGVzdHNbc2VsZWN0ZWRU
ZXN0XS5iYXNlbGluZXM7CisgIHZhciB0ZXN0TmFtZSA9IHNlbGVjdGVkVGVzdC5zcGxpdCgnLicp
LnNsaWNlKDAsIC0xKS5qb2luKCcuJyk7CisgIGZvciAodmFyIHBsYXRmb3JtIGluIGJhc2VsaW5l
cykgeworICAgIGlmIChjdXJyZW50QmFzZWxpbmVzLmZpcnN0Q2hpbGQpIHsKKyAgICAgIGN1cnJl
bnRCYXNlbGluZXMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJzsgJykpOwor
ICAgIH0KKyAgICBjdXJyZW50QmFzZWxpbmVzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKHBsYXRmb3JtICsgJyAoJykpOworICAgIGZvciAodmFyIGkgPSAwLCBleHRlbnNpb247
IGV4dGVuc2lvbiA9IGJhc2VsaW5lc1twbGF0Zm9ybV1baV07IGkrKykgeworICAgICAgaWYgKGkg
IT0gMCkgeworICAgICAgICBjdXJyZW50QmFzZWxpbmVzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCcsICcpKTsKKyAgICAgIH0KKyAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnYScpOworICAgICAgdmFyIGJhc2VsaW5lVHJhY1VybCA9ICdodHRwOi8v
dHJhYy53ZWJraXQub3JnL2xvZy90cnVuay9MYXlvdXRUZXN0cy8nOworICAgICAgaWYgKHBsYXRm
b3JtICE9ICdiYXNlJykgeworICAgICAgICBiYXNlbGluZVRyYWNVcmwgKz0gJ3BsYXRmb3JtLycg
KyBwbGF0Zm9ybSArICcvJzsKKyAgICAgIH0KKyAgICAgIGJhc2VsaW5lVHJhY1VybCArPSB0ZXN0
TmFtZSArICctZXhwZWN0ZWQnICsgZXh0ZW5zaW9uOworICAgICAgbGluay5ocmVmID0gYmFzZWxp
bmVUcmFjVXJsOworICAgICAgaWYgKGV4dGVuc2lvbiA9PSAnLmNoZWNrc3VtJykgeworICAgICAg
ICBsaW5rLnRleHRDb250ZW50ID0gJ2Noayc7ICAgICAgCisgICAgICB9IGVsc2UgeworICAgICAg
ICBsaW5rLnRleHRDb250ZW50ID0gZXh0ZW5zaW9uLnN1YnN0cmluZygxKTsKKyAgICAgIH0KKyAg
ICAgIGN1cnJlbnRCYXNlbGluZXMuYXBwZW5kQ2hpbGQobGluayk7CisgICAgfQorICAgIGN1cnJl
bnRCYXNlbGluZXMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyknKSk7Cisg
IH0KKyAgCisgIHVwZGF0ZVN0YXRlKCk7CisgIGhpZGVMb3VwZSgpOworICAKKyAgcHJlZmV0Y2go
KTsKK30KKworZnVuY3Rpb24gdXBkYXRlU3RhdGUoKSB7CisgIHZhciB0ZXN0SW5kZXggPSAkKCd0
ZXN0LXNlbGVjdG9yJykuc2VsZWN0ZWRJbmRleDsKKyAgdmFyIHRlc3ROYW1lID0gZ2V0U2VsZWN0
ZWRUZXN0KCk7CisgIHZhciB0ZXN0Q291bnQgPSBzZWxlY3RlZFRlc3RzLmxlbmd0aAorICAkKCd0
ZXN0LWluZGV4JykudGV4dENvbnRlbnQgPSB0ZXN0SW5kZXggKyAxOworICAkKCd0ZXN0LWNvdW50
JykudGV4dENvbnRlbnQgPSB0ZXN0Q291bnQ7CisgIAorICAkKCduZXh0LXRlc3QnKS5kaXNhYmxl
ZCA9IHRlc3RJbmRleCA9PSB0ZXN0Q291bnQgLSAxOworICAkKCdwcmV2aW91cy10ZXN0JykuZGlz
YWJsZWQgPSB0ZXN0SW5kZXggPT0gMDsKKyAgCisgIHZhciBzdGF0ZSA9IHJlc3VsdHMudGVzdHNb
dGVzdE5hbWVdLnN0YXRlOworICAkKCdhZGQtdG8tcmViYXNlbGluZS1xdWV1ZScpLmRpc2FibGVk
ID0gc3RhdGUgIT0gU1RBVEVfTkVFRFNfUkVCQVNFTElORTsKKyAgCisgICQoJ3Rlc3QtbGluaycp
LmhyZWYgPQorICAgICAgJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9MYXlv
dXRUZXN0cy8nICsgdGVzdE5hbWU7CisgIAorICAkKCdzdGF0ZScpLmNsYXNzTmFtZSA9IHN0YXRl
OworICAkKCdzdGF0ZScpLmlubmVySFRNTCA9IFNUQVRFX1RPX0RJU1BMQVlfU1RBVEVbc3RhdGVd
OworICAKKyAgdmFyIHF1ZXVlU2VsZWN0ID0gJCgncXVldWUtc2VsZWN0Jyk7CisgIHZhciBxdWV1
ZUxlbmd0aCA9IHF1ZXVlU2VsZWN0Lm9wdGlvbnMubGVuZ3RoOworICB2YXIgcmViYXNlbGluZVF1
ZXVlID0gJCgncmViYXNlbGluZS1xdWV1ZScpOworICB2YXIgcXVldWVUb2dnbGUgPSAkKCd0b2dn
bGUtcXVldWUnKTsKKyAgaWYgKGluUHJvZ3Jlc3NSZWJhc2VsaW5lQ291bnQgPiAwKSB7CisgICAg
cmViYXNlbGluZVF1ZXVlLmRpc2FibGVkID0gdHJ1ZTsKKyAgICByZWJhc2VsaW5lUXVldWUudGV4
dENvbnRlbnQgPSAnUmViYXNlbGluZSBpbiBwcm9ncmVzcyAoJyArIGluUHJvZ3Jlc3NSZWJhc2Vs
aW5lQ291bnQgKyAnIHRlc3RzIGxlZnQpJzsKKyAgfSBlbHNlIGlmIChxdWV1ZUxlbmd0aCA9PSAw
KSB7CisgICAgcmViYXNlbGluZVF1ZXVlLmRpc2FibGVkID0gdHJ1ZTsKKyAgICByZWJhc2VsaW5l
UXVldWUudGV4dENvbnRlbnQgPSAnUmViYXNlbGluZSBxdWV1ZSc7CisgICAgcXVldWVUb2dnbGUu
dGV4dENvbnRlbnQgPSAnUXVldWUnOworICB9IGVsc2UgeworICAgIHJlYmFzZWxpbmVRdWV1ZS5k
aXNhYmxlZCA9IGZhbHNlOworICAgIHJlYmFzZWxpbmVRdWV1ZS50ZXh0Q29udGVudCA9ICdSZWJh
c2VsaW5lIHF1ZXVlICgnICsgcXVldWVMZW5ndGggKyAnIHRlc3RzKSc7CisgICAgcXVldWVUb2dn
bGUudGV4dENvbnRlbnQgPSAnUXVldWUgKCcgKyBxdWV1ZUxlbmd0aCArICcgdGVzdHMpJzsKKyAg
fQorICAkKCdyZW1vdmUtcXVldWUtc2VsZWN0aW9uJykuZGlzYWJsZWQgPSBxdWV1ZVNlbGVjdC5z
ZWxlY3RlZEluZGV4ID09IC0xOworfQorCit2YXIgY3VycmVudEV4cGVjdGVkSW1hZ2VUZXN0Owor
dmFyIGN1cnJlbnRBY3R1YWxJbWFnZVRlc3Q7CisKK2Z1bmN0aW9uIGRpc3BsYXlJbWFnZVJlc3Vs
dHModGVzdE5hbWUpIHsKKyAgJCgnZXhwZWN0ZWQtaW1hZ2UnKS5jbGFzc05hbWUgPSAnbG9hZGlu
Zyc7CisgICQoJ2V4cGVjdGVkLWltYWdlJykuc3JjID0gJy90ZXN0X3Jlc3VsdD90ZXN0PScgKyB0
ZXN0TmFtZSArICcmbW9kZT1leHBlY3RlZC1pbWFnZSc7CisgICQoJ2V4cGVjdGVkLWltYWdlJyku
b25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgJCgnZXhwZWN0ZWQtaW1hZ2UnKS5jbGFzc05hbWUg
PSAnJzsKKyAgICBjdXJyZW50RXhwZWN0ZWRJbWFnZVRlc3QgPSB0ZXN0TmFtZTsKKyAgICB1cGRh
dGVEaWZmKCk7CisgIH07CisgICQoJ2FjdHVhbC1pbWFnZScpLmNsYXNzTmFtZSA9ICdsb2FkaW5n
JzsKKyAgJCgnYWN0dWFsLWltYWdlJykuc3JjID0gJy90ZXN0X3Jlc3VsdD90ZXN0PScgKyB0ZXN0
TmFtZSArICcmbW9kZT1hY3R1YWwtaW1hZ2UnOworICAkKCdhY3R1YWwtaW1hZ2UnKS5vbmxvYWQg
PSBmdW5jdGlvbigpIHsKKyAgICAkKCdhY3R1YWwtaW1hZ2UnKS5jbGFzc05hbWUgPSAnJzsKKyAg
ICBjdXJyZW50QWN0dWFsSW1hZ2VUZXN0ID0gdGVzdE5hbWU7CisgICAgdXBkYXRlRGlmZigpOwor
ICB9OworICAKKyAgJCgnZGlmZi1jYW52YXMnKS5jbGFzc05hbWUgPSAnbG9hZGluZyc7CisgICQo
J2RpZmYtY2FudmFzJykuc3R5bGUuZGlzcGxheSA9ICcnOworICAkKCdkaWZmLWNoZWNrc3VtJyku
c3R5bGUuZGlzcGxheSA9ICdub25lJzsKK30KKwordmFyIGV4cGVjdGVkQ2FudmFzOwordmFyIGV4
cGVjdGVkQ2FudmFzQ29udGV4dDsKK3ZhciBhY3R1YWxDYW52YXM7Cit2YXIgYWN0dWFsQ2FudmFz
Q29udGV4dDsKKworZnVuY3Rpb24gdXBkYXRlRGlmZigpIHsKKyAgaWYgKGN1cnJlbnRFeHBlY3Rl
ZEltYWdlVGVzdCAhPSBjdXJyZW50QWN0dWFsSW1hZ2VUZXN0KSByZXR1cm47CisKKyAgdmFyIGV4
cGVjdGVkSW1hZ2UgPSAkKCdleHBlY3RlZC1pbWFnZScpOworICB2YXIgYWN0dWFsSW1hZ2UgPSAk
KCdhY3R1YWwtaW1hZ2UnKTsKKyAKKyAgaWYgKCFleHBlY3RlZENhbnZhcykgeworICAgIGV4cGVj
dGVkQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CisgICAgZXhwZWN0
ZWRDYW52YXMud2lkdGggPSBleHBlY3RlZEltYWdlLndpZHRoOworICAgIGV4cGVjdGVkQ2FudmFz
LmhlaWdodCA9IGV4cGVjdGVkSW1hZ2UuaGVpZ2h0OworICAgIGV4cGVjdGVkQ2FudmFzQ29udGV4
dCA9IGV4cGVjdGVkQ2FudmFzLmdldENvbnRleHQoJzJkJyk7CisgICAgCisgICAgYWN0dWFsQ2Fu
dmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CisgICAgYWN0dWFsQ2FudmFz
LndpZHRoID0gYWN0dWFsSW1hZ2Uud2lkdGg7CisgICAgYWN0dWFsQ2FudmFzLmhlaWdodCA9IGFj
dHVhbEltYWdlLmhlaWdodDsKKyAgICBhY3R1YWxDYW52YXNDb250ZXh0ID0gYWN0dWFsQ2FudmFz
LmdldENvbnRleHQoJzJkJyk7CisgIH0KKyAgCisgIGV4cGVjdGVkQ2FudmFzQ29udGV4dC5maWxs
U3R5bGUgPSAncmdiYSgyNTUsIDI1NSwgMjU1LCAxKSc7CisgIGV4cGVjdGVkQ2FudmFzQ29udGV4
dC5maWxsUmVjdCgKKyAgICAgIDAsIDAsIGV4cGVjdGVkSW1hZ2Uud2lkdGgsIGV4cGVjdGVkSW1h
Z2UuaGVpZ2h0KTsKKworICBhY3R1YWxDYW52YXNDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1
NSwgMjU1LCAyNTUsIDEpJzsKKyAgYWN0dWFsQ2FudmFzQ29udGV4dC5maWxsUmVjdCgwLCAwLCBh
Y3R1YWxJbWFnZS53aWR0aCwgYWN0dWFsSW1hZ2UuaGVpZ2h0KTsKKyAgCisgIGV4cGVjdGVkQ2Fu
dmFzQ29udGV4dC5kcmF3SW1hZ2UoZXhwZWN0ZWRJbWFnZSwgMCwgMCk7CisgIHZhciBleHBlY3Rl
ZEltYWdlRGF0YSA9IGV4cGVjdGVkQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoCisgICAgICAw
LCAwLCBleHBlY3RlZEltYWdlLndpZHRoLCBleHBlY3RlZEltYWdlLmhlaWdodCk7CisKKyAgYWN0
dWFsQ2FudmFzQ29udGV4dC5kcmF3SW1hZ2UoYWN0dWFsSW1hZ2UsIDAsIDApOworICB2YXIgYWN0
dWFsSW1hZ2VEYXRhID0gYWN0dWFsQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoCisgICAgICAw
LCAwLCBhY3R1YWxJbWFnZS53aWR0aCwgYWN0dWFsSW1hZ2UuaGVpZ2h0KTsKKyAgICAgIAorICB2
YXIgZGlmZkNhbnZhcyA9ICQoJ2RpZmYtY2FudmFzJyk7CisgIHZhciBkaWZmQ2FudmFzQ29udGV4
dCA9IGRpZmZDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgdmFyIGRpZmZJbWFnZURhdGEgPQor
ICAgICAgZGlmZkNhbnZhc0NvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKGRpZmZDYW52YXMud2lkdGgs
IGRpZmZDYW52YXMuaGVpZ2h0KTsKKworICB2YXIgZXhwZWN0ZWRXaWR0aCA9IGV4cGVjdGVkSW1h
Z2Uud2lkdGg7CisgIHZhciBleHBlY3RlZEhlaWdodCA9IGV4cGVjdGVkSW1hZ2UuaGVpZ2h0Owor
ICB2YXIgZXhwZWN0ZWRQaXhlbHMgPSBleHBlY3RlZEltYWdlRGF0YS5kYXRhOworICAKKyAgdmFy
IGFjdHVhbFdpZHRoID0gYWN0dWFsSW1hZ2Uud2lkdGg7CisgIHZhciBhY3R1YWxIZWlnaHQgPSBh
Y3R1YWxJbWFnZS5oZWlnaHQ7CisgIHZhciBhY3R1YWxQaXhlbHMgPSBhY3R1YWxJbWFnZURhdGEu
ZGF0YTsKKworICB2YXIgZGlmZldpZHRoID0gZGlmZkltYWdlRGF0YS53aWR0aDsKKyAgdmFyIGRp
ZmZIZWlnaHQgPSBkaWZmSW1hZ2VEYXRhLmhlaWdodDsKKyAgdmFyIGRpZmZQaXhlbHMgPSBkaWZm
SW1hZ2VEYXRhLmRhdGE7CisgIAorICB2YXIgaGFkRGlmZiA9IGZhbHNlOworICBmb3IgKHZhciB4
ID0gMDsgeCA8IGV4cGVjdGVkV2lkdGg7IHgrKykgeworICAgIGZvciAodmFyIHkgPSAwOyB5IDwg
ZXhwZWN0ZWRIZWlnaHQ7IHkrKykgeworICAgICAgdmFyIGlzRGlmZmVyZW50ID0gZmFsc2U7Cisg
ICAgICB2YXIgZXhwZWN0ZWRPZmZzZXQgPSAoeSAqIGV4cGVjdGVkV2lkdGggKyB4KSAqIDQ7Cisg
ICAgICB2YXIgYWN0dWFsT2Zmc2V0ID0gKHkgKiBhY3R1YWxXaWR0aCArIHgpICogNDsKKyAgICAg
IHZhciBkaWZmT2Zmc2V0ID0gKHkgKiBkaWZmV2lkdGggKyB4KSAqIDQ7CisgICAgICBpZiAoZXhw
ZWN0ZWRQaXhlbHNbZXhwZWN0ZWRPZmZzZXRdICE9IGFjdHVhbFBpeGVsc1thY3R1YWxPZmZzZXRd
IHx8CisgICAgICAgICAgZXhwZWN0ZWRQaXhlbHNbZXhwZWN0ZWRPZmZzZXQgKyAxXSAhPSBhY3R1
YWxQaXhlbHNbYWN0dWFsT2Zmc2V0ICsgMV0gfHwKKyAgICAgICAgICBleHBlY3RlZFBpeGVsc1tl
eHBlY3RlZE9mZnNldCArIDJdICE9IGFjdHVhbFBpeGVsc1thY3R1YWxPZmZzZXQgKyAyXSB8fAor
ICAgICAgICAgIGV4cGVjdGVkUGl4ZWxzW2V4cGVjdGVkT2Zmc2V0ICsgM10gIT0gYWN0dWFsUGl4
ZWxzW2FjdHVhbE9mZnNldCArIDNdKSB7CisgICAgICAgIGhhZERpZmYgPSB0cnVlOworICAgICAg
ICBkaWZmUGl4ZWxzW2RpZmZPZmZzZXRdID0gMjU1OworICAgICAgICBkaWZmUGl4ZWxzW2RpZmZP
ZmZzZXQgKyAxXSA9IDA7CisgICAgICAgIGRpZmZQaXhlbHNbZGlmZk9mZnNldCArIDJdID0gMDsK
KyAgICAgICAgZGlmZlBpeGVsc1tkaWZmT2Zmc2V0ICsgM10gPSAyNTU7CisgICAgICB9IGVsc2Ug
eworICAgICAgICBkaWZmUGl4ZWxzW2RpZmZPZmZzZXRdID0gZXhwZWN0ZWRQaXhlbHNbZXhwZWN0
ZWRPZmZzZXRdOworICAgICAgICBkaWZmUGl4ZWxzW2RpZmZPZmZzZXQgKyAxXSA9IGV4cGVjdGVk
UGl4ZWxzW2V4cGVjdGVkT2Zmc2V0ICsgMV07CisgICAgICAgIGRpZmZQaXhlbHNbZGlmZk9mZnNl
dCArIDJdID0gZXhwZWN0ZWRQaXhlbHNbZXhwZWN0ZWRPZmZzZXQgKyAyXTsKKyAgICAgICAgZGlm
ZlBpeGVsc1tkaWZmT2Zmc2V0ICsgM10gPSAzMjsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgCisg
IGRpZmZDYW52YXNDb250ZXh0LnB1dEltYWdlRGF0YSgKKyAgICAgIGRpZmZJbWFnZURhdGEsCisg
ICAgICAwLCAwLAorICAgICAgMCwgMCwKKyAgICAgIGRpZmZJbWFnZURhdGEud2lkdGgsIGRpZmZJ
bWFnZURhdGEuaGVpZ2h0KTsKKyAgZGlmZkNhbnZhcy5jbGFzc05hbWUgPSAnJzsKKyAgCisgIGlm
ICghaGFkRGlmZikgeworICAgIGRpZmZDYW52YXMuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAg
ICAkKCdkaWZmLWNoZWNrc3VtJykuc3R5bGUuZGlzcGxheSA9ICcnOyAgICAKKyAgICBsb2FkVGV4
dFRlc3RSZXN1bHQoCisgICAgICBjdXJyZW50RXhwZWN0ZWRJbWFnZVRlc3QsICdleHBlY3RlZC1j
aGVja3N1bScsICQoJ2V4cGVjdGVkLWNoZWNrc3VtJykpOworICAgIGxvYWRUZXh0VGVzdFJlc3Vs
dCgKKyAgICAgICAgY3VycmVudEV4cGVjdGVkSW1hZ2VUZXN0LCAnYWN0dWFsLWNoZWNrc3VtJywg
JCgnYWN0dWFsLWNoZWNrc3VtJykpOworICB9Cit9CisKK2Z1bmN0aW9uIGxvYWRUZXh0VGVzdFJl
c3VsdCh0ZXN0TmFtZSwgbW9kZSwgZGVzdGluYXRpb24pIHsKKyAgdmFyIHhociA9IG5ldyBYTUxI
dHRwUmVxdWVzdCgpOworICB4aHIub3BlbignR0VUJywgJy90ZXN0X3Jlc3VsdD90ZXN0PScgKyB0
ZXN0TmFtZSArICcmbW9kZT0nICsgbW9kZSk7CisgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2Fk
JywgZnVuY3Rpb24oKSB7CisgICAgZGVzdGluYXRpb24udGV4dENvbnRlbnQgPSB4aHIucmVzcG9u
c2VUZXh0OworICB9KTsKKyAgeGhyLnNlbmQoKTsgCit9CisKK2Z1bmN0aW9uIGRpc3BsYXlUZXh0
UmVzdWx0cyh0ZXN0TmFtZSkgeworICBmdW5jdGlvbiBsb2FkVGV4dFJlc3VsdCh0eXBlKSB7Cisg
ICAgbG9hZFRleHRUZXN0UmVzdWx0KHRlc3ROYW1lLCB0eXBlLCAkKHR5cGUpKTsKKyAgfQorICAK
KyAgbG9hZFRleHRSZXN1bHQoJ2V4cGVjdGVkLXRleHQnKTsKKyAgbG9hZFRleHRSZXN1bHQoJ2Fj
dHVhbC10ZXh0Jyk7CisgIGxvYWRUZXh0UmVzdWx0KCdkaWZmLXRleHQnKTsKK30KKworZnVuY3Rp
b24gbmV4dFRlc3QoKSB7CisgIGlmICgkKCd0ZXN0LXNlbGVjdG9yJykuc2VsZWN0ZWRJbmRleCA9
PSBzZWxlY3RlZFRlc3RzLmxlbmd0aCAtIDEpIHsKKyAgICByZXR1cm47CisgIH0KKyAgJCgndGVz
dC1zZWxlY3RvcicpLnNlbGVjdGVkSW5kZXgrKzsKKyAgc2VsZWN0VGVzdCgpOworfQorCitmdW5j
dGlvbiBwcmV2aW91c1Rlc3QoKSB7CisgIGlmICgkKCd0ZXN0LXNlbGVjdG9yJykuc2VsZWN0ZWRJ
bmRleCA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisgICQoJ3Rlc3Qtc2VsZWN0b3InKS5zZWxl
Y3RlZEluZGV4LS07CisgIHNlbGVjdFRlc3QoKTsKK30KKworZnVuY3Rpb24gc2hvd0xvdXBlKGV2
ZW50KSB7CisgIHZhciBpbWFnZVJlY3QgPSBldmVudC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCk7CisgIHZhciB4ID0gZXZlbnQuY2xpZW50WCAtIGltYWdlUmVjdC5sZWZ0OworICB2YXIg
eSA9IGV2ZW50LmNsaWVudFkgLSBpbWFnZVJlY3QudG9wOworICAKKyAgZmlsbExvdXBlRnJvbUlt
YWdlKHgsIHksICdleHBlY3RlZCcsICQoJ2V4cGVjdGVkLWltYWdlJykpOworICBmaWxsTG91cGVG
cm9tSW1hZ2UoeCwgeSwgJ2FjdHVhbCcsICQoJ2FjdHVhbC1pbWFnZScpKTsKKyAgZmlsbExvdXBl
RnJvbUNhbnZhcyh4LCB5LCAnZGlmZicsICQoJ2RpZmYtY2FudmFzJykpOworICAKKyAgJCgnbG91
cGUnKS5zdHlsZS5kaXNwbGF5ID0gJyc7Cit9CisKK3ZhciBMT1VQRV9NQUdOSUZJQ0FUSU9OX0ZB
Q1RPUiA9IDEwOworCitmdW5jdGlvbiBmaWxsTG91cGVGcm9tSW1hZ2UoeCwgeSwgdHlwZSkgewor
ICB2YXIgc291cmNlSW1hZ2UgPSAkKHR5cGUgKyAnLWltYWdlJyk7ICAKKworICB2YXIgdGVtcENh
bnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOworICB0ZW1wQ2FudmFzLndp
ZHRoID0gc291cmNlSW1hZ2Uud2lkdGg7CisgIHRlbXBDYW52YXMuaGVpZ2h0ID0gc291cmNlSW1h
Z2UuaGVpZ2h0OworICB2YXIgdGVtcENvbnRleHQgPSB0ZW1wQ2FudmFzLmdldENvbnRleHQoJzJk
Jyk7CisgIAorICB0ZW1wQ29udGV4dC5kcmF3SW1hZ2Uoc291cmNlSW1hZ2UsIDAsIDApOworICAK
KyAgZmlsbExvdXBlRnJvbUNhbnZhcyh4LCB5LCB0eXBlLCB0ZW1wQ2FudmFzKTsKK30KKworZnVu
Y3Rpb24gZmlsbExvdXBlRnJvbUNhbnZhcyh4LCB5LCB0eXBlLCBjYW52YXMpIHsKKyAgdmFyIGNv
bnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgdmFyIHNvdXJjZUltYWdlRGF0YSA9
IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7
CisKKyAgdmFyIHRhcmdldENhbnZhcyA9ICQodHlwZSArICctbG91cGUnKTsKKyAgdmFyIHRhcmdl
dENvbnRleHQgPSB0YXJnZXRDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgdGFyZ2V0Q29udGV4
dC5maWxsU3R5bGUgPSAncmdiYSgyNTUsIDI1NSwgMjU1LCAxKSc7CisgIHRhcmdldENvbnRleHQu
ZmlsbFJlY3QoMCwgMCwgdGFyZ2V0Q2FudmFzLndpZHRoLCB0YXJnZXRDYW52YXMuaGVpZ2h0KTsg
IAorICAKKyAgdmFyIHNvdXJjZVhPZmZzZXQgPSAodGFyZ2V0Q2FudmFzLndpZHRoL0xPVVBFX01B
R05JRklDQVRJT05fRkFDVE9SIC0gMSkvMjsKKyAgdmFyIHNvdXJjZVlPZmZzZXQgPSAodGFyZ2V0
Q2FudmFzLmhlaWdodC9MT1VQRV9NQUdOSUZJQ0FUSU9OX0ZBQ1RPUiAtIDEpLzI7CisKKyAgZnVu
Y3Rpb24gcmVhZFBpeGVsQ29tcG9uZW50KHgsIHksIGNvbXBvbmVudCkgeworICAgIHJldHVybiBz
b3VyY2VJbWFnZURhdGEuZGF0YVsoeSAqIHNvdXJjZUltYWdlRGF0YS53aWR0aCArIHgpICogNCAr
IGNvbXBvbmVudF07CisgIH0KKyAgCisgIGZvciAodmFyIGkgPSAtc291cmNlWE9mZnNldDsgaSA8
PSBzb3VyY2VYT2Zmc2V0OyBpKyspIHsKKyAgICBmb3IgKHZhciBqID0gLXNvdXJjZVlPZmZzZXQ7
IGogPD0gc291cmNlWU9mZnNldDsgaisrKSB7CisgICAgICB2YXIgc291cmNlWCA9IHggKyBpOwor
ICAgICAgdmFyIHNvdXJjZVkgPSB5ICsgajsKKyAgICAgIAorICAgICAgdmFyIHNvdXJjZVIgPSBy
ZWFkUGl4ZWxDb21wb25lbnQoc291cmNlWCwgc291cmNlWSwgMCk7IAorICAgICAgdmFyIHNvdXJj
ZUcgPSByZWFkUGl4ZWxDb21wb25lbnQoc291cmNlWCwgc291cmNlWSwgMSk7CisgICAgICB2YXIg
c291cmNlQiA9IHJlYWRQaXhlbENvbXBvbmVudChzb3VyY2VYLCBzb3VyY2VZLCAyKTsKKyAgICAg
IHZhciBzb3VyY2VBID0gcmVhZFBpeGVsQ29tcG9uZW50KHNvdXJjZVgsIHNvdXJjZVksIDMpLzI1
NTsKKyAgICAgIHNvdXJjZUEgPSBNYXRoLnJvdW5kKHNvdXJjZUEgKiAxMCkvMTA7CisKKyAgICAg
IHZhciB0YXJnZXRYID0gKGkgKyBzb3VyY2VYT2Zmc2V0KSAqIExPVVBFX01BR05JRklDQVRJT05f
RkFDVE9SOworICAgICAgdmFyIHRhcmdldFkgPSAoaiArIHNvdXJjZVlPZmZzZXQpICogTE9VUEVf
TUFHTklGSUNBVElPTl9GQUNUT1I7CisgICAgICB2YXIgY29sb3JTdHJpbmcgPQorICAgICAgICAg
IHNvdXJjZVIgKyAnLCAnICsgc291cmNlRyArICcsICcgKyBzb3VyY2VCICsgJywgJyArIHNvdXJj
ZUE7CisgICAgICB0YXJnZXRDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyBjb2xvclN0cmlu
ZyArICcpJzsKKyAgICAgIHRhcmdldENvbnRleHQuZmlsbFJlY3QoCisgICAgICAgICAgdGFyZ2V0
WCwgdGFyZ2V0WSwKKyAgICAgICAgICBMT1VQRV9NQUdOSUZJQ0FUSU9OX0ZBQ1RPUiwgTE9VUEVf
TUFHTklGSUNBVElPTl9GQUNUT1IpOworICAgIAorICAgICAgaWYgKGkgPT0gMCAmJiBqID09IDAp
IHsKKyAgICAgICAgJCgnbG91cGUtY29vcmRpbmF0ZScpLnRleHRDb250ZW50ID0gc291cmNlWCAr
ICcsICcgKyBzb3VyY2VZOworCisgICAgICAgICQodHlwZSArICctbG91cGUtY29sb3InKS50ZXh0
Q29udGVudCA9IGNvbG9yU3RyaW5nOworICAgICAgfQorICAgIH0KKyAgfQorfQorCitmdW5jdGlv
biBoaWRlTG91cGUoKSB7CisgICQoJ2xvdXBlJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgIAor
fQorCitmdW5jdGlvbiBhZGRUb1JlYmFzZWxpbmVRdWV1ZSgpIHsKKyAgdmFyIHRlc3ROYW1lID0g
Z2V0U2VsZWN0ZWRUZXN0KCk7CisgIHZhciB0ZXN0ID0gcmVzdWx0cy50ZXN0c1t0ZXN0TmFtZV07
CisgIAorICBpZiAodGVzdC5zdGF0ZSAhPSBTVEFURV9ORUVEU19SRUJBU0VMSU5FKSB7CisgICAg
bG9nKCdDYW5ub3QgYWRkIHRlc3Qgd2l0aCBzdGF0ZSAnICsgdGVzdC5zdGF0ZSArICcgdG8gcXVl
dWUnKTsKKyAgICByZXR1cm47CisgIH0KKyAgCisgIHZhciBxdWV1ZU9wdGlvbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOworICBxdWV1ZU9wdGlvbi52YWx1ZSA9IHRlc3ROYW1l
OworICBxdWV1ZU9wdGlvbi50ZXh0Q29udGVudCA9IHRlc3ROYW1lOworICAkKCdxdWV1ZS1zZWxl
Y3QnKS5hcHBlbmRDaGlsZChxdWV1ZU9wdGlvbik7CisgIHRlc3Quc3RhdGUgPSBTVEFURV9JTl9R
VUVVRTsKKyAgdXBkYXRlU3RhdGUoKTsKK30KKworZnVuY3Rpb24gcmVtb3ZlU2VsZWN0aW9uRnJv
bVJlYmFzZWxpbmVRdWV1ZSgpIHsKKyAgdmFyIHF1ZXVlU2VsZWN0ID0gJCgncXVldWUtc2VsZWN0
Jyk7CisgIGlmIChxdWV1ZVNlbGVjdC5zZWxlY3RlZEluZGV4ID09IC0xKSB7CisgICAgcmV0dXJu
OworICB9CisKKyAgdmFyIHF1ZXVlT3B0aW9uID0gcXVldWVTZWxlY3Qub3B0aW9uc1txdWV1ZVNl
bGVjdC5zZWxlY3RlZEluZGV4XTsgIAorICByZW1vdmVGcm9tUmViYXNlbGluZVF1ZXVlKHF1ZXVl
T3B0aW9uLnZhbHVlKTsKK30KKworZnVuY3Rpb24gcmVtb3ZlRnJvbVJlYmFzZWxpbmVRdWV1ZSh0
ZXN0TmFtZSkgeworICB2YXIgcXVldWVTZWxlY3QgPSAkKCdxdWV1ZS1zZWxlY3QnKTsKKyAgZm9y
ICh2YXIgcXVldWVPcHRpb24gPSBxdWV1ZVNlbGVjdC5maXJzdENoaWxkOworICAgICBxdWV1ZU9w
dGlvbiAmJiBxdWV1ZU9wdGlvbi52YWx1ZSAhPSB0ZXN0TmFtZTsKKyAgICAgcXVldWVPcHRpb24g
PSBxdWV1ZU9wdGlvbi5uZXh0U2libGluZykgezt9CisKKyAgaWYgKCFxdWV1ZU9wdGlvbikgcmV0
dXJuOworICAKKyAgcXVldWVTZWxlY3QucmVtb3ZlQ2hpbGQocXVldWVPcHRpb24pOworICB2YXIg
dGVzdCA9IHJlc3VsdHMudGVzdHNbdGVzdE5hbWVdOworICB0ZXN0LnN0YXRlID0gU1RBVEVfTkVF
RFNfUkVCQVNFTElORTsKKyAgdXBkYXRlU3RhdGUoKTsKK30KKworZnVuY3Rpb24gcmViYXNlbGlu
ZVF1ZXVlKCkgeworICB2YXIgdGVzdE5hbWVzID0gW107CisgIGZvciAodmFyIHF1ZXVlT3B0aW9u
ID0gJCgncXVldWUtc2VsZWN0JykuZmlyc3RDaGlsZDsKKyAgICAgcXVldWVPcHRpb247CisgICAg
IHF1ZXVlT3B0aW9uID0gcXVldWVPcHRpb24ubmV4dFNpYmxpbmcpIHsKKyAgICB0ZXN0TmFtZXMu
cHVzaChxdWV1ZU9wdGlvbi52YWx1ZSk7CisgIH0KKyAgCisgIGluUHJvZ3Jlc3NSZWJhc2VsaW5l
Q291bnQgPSB0ZXN0TmFtZXMubGVuZ3RoOworICB1cGRhdGVTdGF0ZSgpOworCisgIHZhciBiYXNl
bGluZVRhcmdldCA9IGdldFNlbGVjdFZhbHVlKCdiYXNlbGluZS10YXJnZXQnKTsKKyAgdmFyIGJh
c2VsaW5lTW92ZVRvID0gZ2V0U2VsZWN0VmFsdWUoJ2Jhc2VsaW5lLW1vdmUtdG8nKTsKKworICB0
ZXN0TmFtZXMuZm9yRWFjaChmdW5jdGlvbih0ZXN0TmFtZSkgeworICAgIHJlYmFzZWxpbmUodGVz
dE5hbWUsIGJhc2VsaW5lVGFyZ2V0LCBiYXNlbGluZU1vdmVUbyk7CisgIH0pOworfQorCitmdW5j
dGlvbiByZWJhc2VsaW5lKHRlc3ROYW1lLCBiYXNlbGluZVRhcmdldCwgYmFzZWxpbmVNb3ZlVG8p
IHsKKyAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICB4aHIub3BlbignUE9TVCcs
CisgICAgICAnL3JlYmFzZWxpbmU/dGVzdD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHRlc3ROYW1l
KSArIAorICAgICAgJyZiYXNlbGluZS10YXJnZXQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChiYXNl
bGluZVRhcmdldCkgKworICAgICAgJyZiYXNlbGluZS1tb3ZlLXRvPScgKyBlbmNvZGVVUklDb21w
b25lbnQoYmFzZWxpbmVNb3ZlVG8pKTsKKyAgdmFyIHRlc3QgPSByZXN1bHRzLnRlc3RzW3Rlc3RO
YW1lXTsKKyAgZnVuY3Rpb24gaGFuZGxlU3VjY2VzcygpIHsKKyAgICB2YXIgc3VjY2VzcyA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICBzdWNjZXNzLnRleHRDb250ZW50ID0g
J1N1Y2Nlc3M6ICc7CisgICAgc3VjY2Vzcy5zdHlsZS5jb2xvciA9ICdncmVlbic7CisgICAgJCgn
bG9nJykuYXBwZW5kQ2hpbGQoc3VjY2Vzcyk7CisgICAgbG9nKHhoci5yZXNwb25zZVRleHQpOwor
ICAgIHJlbW92ZUZyb21SZWJhc2VsaW5lUXVldWUodGVzdE5hbWUpOworICAgIGluUHJvZ3Jlc3NS
ZWJhc2VsaW5lQ291bnQtLTsKKyAgICB0ZXN0LnN0YXRlID0gU1RBVEVfUkVCQVNFTElORV9TVUND
RUVERUQ7CisgICAgdXBkYXRlU3RhdGUoKTsKKyAgfQorICBmdW5jdGlvbiBoYW5kbGVGYWlsdXJl
KCkgeworICAgIHZhciBmYWlsdXJlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwor
ICAgIGZhaWx1cmUudGV4dENvbnRlbnQgPSAnRmFpbHVyZTogJzsKKyAgICBmYWlsdXJlLnN0eWxl
LmNvbG9yID0gJ3JlZCc7CisgICAgJCgnbG9nJykuYXBwZW5kQ2hpbGQoZmFpbHVyZSk7CisgICAg
bG9nKHhoci5yZXNwb25zZVRleHQpOworICAgIHJlbW92ZUZyb21SZWJhc2VsaW5lUXVldWUodGVz
dE5hbWUpOworICAgIGluUHJvZ3Jlc3NSZWJhc2VsaW5lQ291bnQtLTsKKyAgICB0ZXN0LnN0YXRl
ID0gU1RBVEVfUkVCQVNFTElORV9GQUlMRUQ7CisgICAgdXBkYXRlU3RhdGUoKTsKKyAgfQorICAK
KyAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKKyAgICBpZiAoeGhy
LnN0YXR1cyA8IDQwMCkgeworICAgICAgaGFuZGxlU3VjY2VzcygpOworICAgIH0gZWxzZSB7Cisg
ICAgICBoYW5kbGVGYWlsdXJlKCk7CisgICAgfQorICB9KTsKKyAgeGhyLmFkZEV2ZW50TGlzdGVu
ZXIoJ2Vycm9yJywgaGFuZGxlRmFpbHVyZSk7CisKKyAgeGhyLnNlbmQoKTsKK30KKworZnVuY3Rp
b24gbG9nKHRleHQpIHsKKyAgJCgnbG9nJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUodGV4dCArICdcbicpKTsKKyAgJCgnbG9nJykuc2Nyb2xsVG9wID0gJCgnbG9nJykuc2Ny
b2xsSGVpZ2h0OworfQorCitmdW5jdGlvbiB0b2dnbGUoaWQpIHsKKyAgdmFyIGVsZW1lbnQgPSAk
KGlkKTsKKyAgdmFyIHRvZ2dsZXIgPSAkKCd0b2dnbGUtJyArIGlkKTsKKyAgaWYgKGVsZW1lbnQu
c3R5bGUuZGlzcGxheSA9PSAnbm9uZScpIHsKKyAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAn
JzsKKyAgICB0b2dnbGVyLmNsYXNzTmFtZSA9ICdsaW5rIHNlbGVjdGVkJzsKKyAgfSBlbHNlIHsK
KyAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgdG9nZ2xlci5jbGFzc05h
bWUgPSAnbGluayc7CisgIH0KK30KKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRl
bnRMb2FkZWQnLCBtYWluKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvbG9jYWxyZWJhc2Vs
aW5lLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2xvY2Fs
cmViYXNlbGluZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDQxZGQ3OGNiNTVmMjkyOTBmZDg5MmQ0OTVmMzhm
MGZmNjY2NmQwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL2xvY2FscmViYXNlbGluZS5weQpAQCAtMCwwICsxLDMyOSBAQAorIyBD
b3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMg
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBt
aW1ldHlwZXMKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHNo
dXRpbAoraW1wb3J0IHVybGxpYgoraW1wb3J0IEJhc2VIVFRQU2VydmVyCitpbXBvcnQgdGhyZWFk
aW5nCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGltZQoraW1wb3J0IHVybHBhcnNlCitmcm9tIHdz
Z2lyZWYuaGFuZGxlcnMgaW1wb3J0IGZvcm1hdF9kYXRlX3RpbWUKKworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQorZnJvbSB3ZWJraXRweS50b29sLm11bHRp
Y29tbWFuZHRvb2wgaW1wb3J0IEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kCitpbXBvcnQgd2Vi
a2l0cHkudGhpcmRwYXJ0eS5zaW1wbGVqc29uIGFzIHNpbXBsZWpzb24KKworIyBUT0RPCisjIC0g
bGV0IGh0dHBkIHBvcnQgYmUgc3BlY2lmaWVkCisjIC0gZmlsdGVyIGRyb3AtZG93biBieSB0ZXN0
IHN0YXRlCisjIC0gY3Jvc3NoYWlyIGN1cnNvciBmb3IgaW1hZ2UvY2FudmFzPworCitTVEFURV9O
RUVEU19SRUJBU0VMSU5FID0gJ25lZWRzX3JlYmFzZWxpbmUnCitTVEFURV9SRUJBU0VMSU5FX0ZB
SUxFRCA9ICdyZWJhc2VsaW5lX2ZhaWxlZCcKK1NUQVRFX1JFQkFTRUxJTkVfU1VDQ0VFREVEID0g
J3JlYmFzZWxpbmVfc3VjY2VlZGVkJworCitjbGFzcyBSZWJhc2VsaW5lSFRUU2VydmVyKEJhc2VI
VFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBodHRwZF9wb3J0
LCByZXN1bHRzX2RpcmVjdG9yeSwgcmVzdWx0c19qc29uLCBwb3J0LCBzY20pOgorICAgICAgICBC
YXNlSFRUUFNlcnZlci5IVFRQU2VydmVyLl9faW5pdF9fKHNlbGYsICgnJywgaHR0cGRfcG9ydCks
IFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIpCisgICAgICAgIHNlbGYucmVzdWx0c19kaXJl
Y3RvcnkgPSByZXN1bHRzX2RpcmVjdG9yeQorICAgICAgICBzZWxmLnJlc3VsdHNfanNvbiA9IHJl
c3VsdHNfanNvbgorICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuc2NtID0g
c2NtCisKK2NsYXNzIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIoQmFzZUhUVFBTZXJ2ZXIu
QmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgZmlsZV9uYW1lcyA9IFsKKyAgICAgICdpbmRl
eC5odG1sJywKKyAgICAgICdtYWluLmpzJywKKyAgICAgICdtYWluLmNzcycsCisgICAgXQorCisg
ICAgZGVmIGRvX0dFVChzZWxmKToKKyAgICAgICAgc2VsZi5faGFuZGxlX3JlcXVlc3QoKQorICAg
ICAgCisgICAgZGVmIGRvX1BPU1Qoc2VsZik6CisgICAgICAgIHNlbGYuX2hhbmRsZV9yZXF1ZXN0
KCkKKyAgICAKKyAgICBkZWYgX2hhbmRsZV9yZXF1ZXN0KHNlbGYpOgorICAgICAgICBpZiAnPycg
aW4gc2VsZi5wYXRoOgorICAgICAgICAgICAgKHBhdGgsIHF1ZXJ5X3N0cmluZykgPSBzZWxmLnBh
dGguc3BsaXQoJz8nLCAxKQorICAgICAgICAgICAgc2VsZi5xdWVyeSA9IHVybHBhcnNlLnBhcnNl
X3FzKHF1ZXJ5X3N0cmluZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGggPSBzZWxm
LnBhdGgKKyAgICAgICAgICAgIHNlbGYucXVlcnkgPSB7fQorICAgICAgICBmdW5jX29yX2ZpbGVf
bmFtZSA9IHBhdGhbMTpdIG9yICdpbmRleC5odG1sJworICAgICAgICAKKyAgICAgICAgaWYgZnVu
Y19vcl9maWxlX25hbWUgaW4gUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlci5maWxlX25hbWVz
OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZV9zdGF0aWNfZmlsZShmdW5jX29yX2ZpbGVfbmFtZSkK
KyAgICAgICAgICAgIHJldHVybgorICAgICAgICAKKyAgICAgICAgZnVuY19uYW1lID0gZnVuY19v
cl9maWxlX25hbWUucmVwbGFjZSgnLicsICdfJykKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2Vs
ZiwgZnVuY19uYW1lKToKKyAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0LCAiVW5rbm93biBm
dW5jdGlvbiAlcyIgJSBmdW5jX25hbWUpCisgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZ1bmMg
PSBnZXRhdHRyKHNlbGYsIGZ1bmNfbmFtZSkKKyAgICAgICAgZnVuYygpCisgICAgCisgICAgZGVm
IHNlcnZlX3N0YXRpY19maWxlKHNlbGYsIHN0YXRpY19wYXRoKToKKyAgICAgICAgc2VsZi5fc2Vy
dmVfZmlsZShvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxl
X18pLCAnZGF0YScsICdsb2NhbHJlYmFzZWxpbmUnLCBzdGF0aWNfcGF0aCkpCisgICAgCisgICAg
ZGVmIHJlYmFzZWxpbmUoc2VsZik6CisgICAgICAgIGxvZyA9IFtdCisgICAgICAgIHN1Y2Nlc3Mg
PSBzZWxmLl9ydW5fcmViYXNlbGluZSgKKyAgICAgICAgICAgIHNlbGYucXVlcnlbJ3Rlc3QnXVsw
XSwKKyAgICAgICAgICAgIHNlbGYucXVlcnlbJ2Jhc2VsaW5lLXRhcmdldCddWzBdLAorICAgICAg
ICAgICAgc2VsZi5xdWVyeVsnYmFzZWxpbmUtbW92ZS10byddWzBdLCAgICAgICAgICAKKyAgICAg
ICAgICAgIGxvZz1sYW1iZGEgbDpsb2cuYXBwZW5kKGwpKQorICAgICAgICBzZWxmLnNlbmRfcmVz
cG9uc2Uoc3VjY2VzcyBhbmQgMjAwIG9yIDUwMCkKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigi
Q29udGVudC10eXBlIiwgInRleHQvcGxhaW4iKQorICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkK
KyAgICAgICAgc2VsZi53ZmlsZS53cml0ZSgiXG4iLmpvaW4obG9nKSkKKyAgICAgIAorICAgIGRl
ZiBfcnVuX3JlYmFzZWxpbmUoc2VsZiwgdGVzdCwgYmFzZWxpbmVfdGFyZ2V0LCBiYXNlbGluZV9t
b3ZlX3RvLCBsb2cpOgorICAgICAgICAodGVzdF9uYW1lLCB0ZXN0X2V4dGVuc2lvbikgPSBvcy5w
YXRoLnNwbGl0ZXh0KHRlc3QpCisgICAgICAgIHRlc3RfZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJu
YW1lKHRlc3RfbmFtZSkKKyAgICAgICAgcGF0aF9waWVjZXMgPSB0ZXN0X2RpcmVjdG9yeS5zcGxp
dChvcy5zZXApCisgICAgICAgIGlmIGxlbihwYXRoX3BpZWNlcykgPj0gMiBhbmQgcGF0aF9waWVj
ZXNbMF0gPT0gJ3BsYXRmb3JtJzoKKyAgICAgICAgICAgIGJhc2VfdGVzdF9kaXJlY3RvcnkgPSBv
cy5zZXAuam9pbihwYXRoX3BpZWNlc1syOl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBi
YXNlX3Rlc3RfZGlyZWN0b3J5ID0gdGVzdF9kaXJlY3RvcnkKKyAgICAgICAgCisgICAgICAgIGxh
eW91dF90ZXN0c19kaXJlY3RvcnkgPSBzZWxmLnNlcnZlci5wb3J0LmxheW91dF90ZXN0c19kaXIo
KQorICAgICAgICB0YXJnZXRfZXhwZWN0YXRpb25zX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbigK
KyAgICAgICAgICAgIGxheW91dF90ZXN0c19kaXJlY3RvcnksICdwbGF0Zm9ybScsIGJhc2VsaW5l
X3RhcmdldCwgYmFzZV90ZXN0X2RpcmVjdG9yeSkKKyAgICAgICAgCisgICAgICAgIGxvZygiUmVi
YXNlbGluaW5nICVzLi4uIiAlIHRlc3RfbmFtZSkKKyAgICAgICAgdGVzdF9qc29uID0gc2VsZi5z
ZXJ2ZXIucmVzdWx0c19qc29uWyd0ZXN0cyddW3Rlc3RdCisgICAgICAgIAorICAgICAgICBpZiB0
ZXN0X2pzb25bJ3N0YXRlJ10gIT0gU1RBVEVfTkVFRFNfUkVCQVNFTElORToKKyAgICAgICAgICAg
IGxvZygiICBUZXN0IGlzIGluIHVuZXhwZWN0ZWQgc3RhdGU6ICVzIiAlIHRlc3RfanNvblsnc3Rh
dGUnXSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAKKyAgICAgICAgY3VycmVu
dF9iYXNlbGluZXMgPSB0ZXN0X2pzb24uZ2V0KCdiYXNlbGluZXMnLCB7fSkua2V5cygpCisgICAg
ICAgIAorICAgICAgICB0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKAorICAg
ICAgICAgICAgc2VsZi5zZXJ2ZXIucmVzdWx0c19kaXJlY3RvcnksIHRlc3RfZGlyZWN0b3J5KQor
ICAgICAgICBhY3R1YWxfcGF0dGVybiA9IG9zLnBhdGguYmFzZW5hbWUodGVzdF9uYW1lKSArICct
YWN0dWFsLionCisgICAgICAgIGFjdHVhbF9maWxlcyA9IFtdCisgICAgICAgIGZvciBmaWxlbmFt
ZSBpbiBvcy5saXN0ZGlyKHRlc3RfcmVzdWx0c19kaXJlY3RvcnkpOgorICAgICAgICAgICAgaWYg
Zm5tYXRjaC5mbm1hdGNoKGZpbGVuYW1lLCBhY3R1YWxfcGF0dGVybik6CisgICAgICAgICAgICAg
ICAgYWN0dWFsX2ZpbGVzLmFwcGVuZChmaWxlbmFtZS5yZXBsYWNlKCctYWN0dWFsJywgJy1leHBl
Y3RlZCcpKQorICAgICAgICAKKyAgICAgICAgIyBJZiByZXF1ZXN0ZWQsIG1vdmUgY3VycmVudCBi
YXNlbGluZXMgb3V0CisgICAgICAgIGlmIGJhc2VsaW5lX3RhcmdldCBpbiBjdXJyZW50X2Jhc2Vs
aW5lcyBhbmQgYmFzZWxpbmVfbW92ZV90byAhPSAibm9uZSI6CisgICAgICAgICAgICBsb2coIiAg
TW92aW5nIGN1cnJlbnQgJXMgYmFzZWxpbmVzIHRvICVzIiAlIChiYXNlbGluZV90YXJnZXQsIGJh
c2VsaW5lX21vdmVfdG8pKQorICAgICAgICAgICAgbW92ZV90b19leHBlY3RhdGlvbnNfZGlyZWN0
b3J5ID0gb3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgIGxheW91dF90ZXN0c19kaXJlY3Rv
cnksICdwbGF0Zm9ybScsIGJhc2VsaW5lX21vdmVfdG8sIGJhc2VfdGVzdF9kaXJlY3RvcnkpCisg
ICAgICAgICAgICBleHBlY3RhdGlvbl9wYXR0ZXJuID0gb3MucGF0aC5iYXNlbmFtZSh0ZXN0X25h
bWUpICsgJy1leHBlY3RlZC4qJworICAgIAorICAgICAgICAgICAgIyBTZWUgd2hpY2ggZmlsZXMg
bmVlZCB0byBtb3ZlICAgICAgICAKKyAgICAgICAgICAgIGN1cnJlbnRfZXhwZWN0YXRpb25zX2Zp
bGVzID0gW10KKyAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBvcy5saXN0ZGlyKHRhcmdldF9l
eHBlY3RhdGlvbnNfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0
Y2goZmlsZW5hbWUsIGV4cGVjdGF0aW9uX3BhdHRlcm4pOgorICAgICAgICAgICAgICAgICAgICBj
dXJyZW50X2V4cGVjdGF0aW9uc19maWxlcy5hcHBlbmQoZmlsZW5hbWUpCisgICAgICAgICAgICBj
dXJyZW50X2V4cGVjdGF0aW9uc19maWxlcyA9IFtmIGZvciBmIGluIGN1cnJlbnRfZXhwZWN0YXRp
b25zX2ZpbGVzIGlmIGYgaW4gYWN0dWFsX2ZpbGVzXQorICAgICAgCisgICAgICAgICAgICBpZiBj
dXJyZW50X2V4cGVjdGF0aW9uc19maWxlczoKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB3
ZSdyZSBub3QgY2xvYmJlcmluZyBleGlzdGluZyBmaWxlcworICAgICAgICAgICAgICAgIGlmIG9z
LnBhdGguZXhpc3RzKG1vdmVfdG9fZXhwZWN0YXRpb25zX2RpcmVjdG9yeSk6CisgICAgICAgICAg
ICAgICAgICBtb3ZlX3RvX2V4cGVjdGF0aW9uc19maWxlcyA9IFtdCisgICAgICAgICAgICAgICAg
ICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihtb3ZlX3RvX2V4cGVjdGF0aW9uc19kaXJlY3Rv
cnkpOgorICAgICAgICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmaWxlbmFtZSwg
ZXhwZWN0YXRpb25fcGF0dGVybik6CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVfdG9f
ZXhwZWN0YXRpb25zX2ZpbGVzLmFwcGVuZChmaWxlbmFtZSkgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgIGV4aXN0aW5nX21vdmVfdG9fZmlsZXMgPSBbZiBmb3IgZiBpbiBtb3ZlX3RvX2V4
cGVjdGF0aW9uc19maWxlcyBpZiBmIGluIGN1cnJlbnRfZXhwZWN0YXRpb25zX2ZpbGVzXQorICAg
ICAgICAgICAgICAgICAgaWYgZXhpc3RpbmdfbW92ZV90b19maWxlczoKKyAgICAgICAgICAgICAg
ICAgICAgbG9nKCIgIEFscmVhZHkgaGFkICVzIGJhc2VsaW5lcyAoJXMpLCBkb24ndCBrbm93IHdo
YXQgdG8gZG8gd2l0aCBjdXJyZW50ICVzIGJhc2VsaW5lcyIgJSAoYmFzZWxpbmVfbW92ZV90bywg
IiwgIi5qb2luKGV4aXN0aW5nX21vdmVfdG9fZmlsZXMpLCBiYXNlbGluZV90YXJnZXQpKQorICAg
ICAgICAgICAgICAgICAgICB0ZXN0X2pzb25bJ3N0YXRlJ10gPSBTVEFURV9SRUJBU0VMSU5FX0ZB
SUxFRAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgIyBNb3ZlIHRoZW0KKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0
aC5leGlzdHMobW92ZV90b19leHBlY3RhdGlvbnNfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAg
ICAgICAgbG9nKCIgIENyZWF0aW5nICVzICVzIGRpcmVjdG9yeSIgJSAoYmFzZWxpbmVfbW92ZV90
bywgYmFzZV90ZXN0X2RpcmVjdG9yeSkpCisgICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJz
KG1vdmVfdG9fZXhwZWN0YXRpb25zX2RpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICBmb3IgZmls
ZSBpbiBjdXJyZW50X2V4cGVjdGF0aW9uc19maWxlczoKKyAgICAgICAgICAgICAgICAgICAgc291
cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2V4cGVjdGF0aW9uc19kaXJlY3RvcnksIGZp
bGUpCisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uX3BhdGggPSBvcy5wYXRoLmpvaW4o
bW92ZV90b19leHBlY3RhdGlvbnNfZGlyZWN0b3J5LCBmaWxlKQorICAgICAgICAgICAgICAgICAg
ICBzaHV0aWwubW92ZShzb3VyY2VfcGF0aCwgZGVzdGluYXRpb25fcGF0aCkKKyAgICAgICAgICAg
ICAgICAgICAgZXhpdF9jb2RlID0gc2VsZi5zZXJ2ZXIuc2NtLmFkZChkZXN0aW5hdGlvbl9wYXRo
LCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCisgICAgICAgICAgICAgICAgICAgIGxvZygiICAgIE1v
dmVkICVzLCBleGl0IGNvZGUgJWQiICUgKGZpbGUsIGV4aXRfY29kZSkpCisgICAgICAgICAgICAg
ICAgICAgIGlmIGV4aXRfY29kZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfanNvblsn
c3RhdGUnXSA9IFNUQVRFX1JFQkFTRUxJTkVfRkFJTEVECisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKKyAgCisgICAgICAgIGxvZygiICBBZGRpbmcgbmV3IGJhc2VsaW5lcyB0
byAlcyIgJSBiYXNlbGluZV90YXJnZXQpCisgICAgICAgIGZvciBmaWxlIGluIGFjdHVhbF9maWxl
czoKKyAgICAgICAgICAgIHNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RfcmVzdWx0c19k
aXJlY3RvcnksIGZpbGUucmVwbGFjZSgnLWV4cGVjdGVkJywgJy1hY3R1YWwnKSkKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uX3BhdGggPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2V4cGVjdGF0aW9uc19k
aXJlY3RvcnksIGZpbGUpCisgICAgICAgICAgICBzaHV0aWwuY29weShzb3VyY2VfcGF0aCwgZGVz
dGluYXRpb25fcGF0aCkKKyAgICAgICAgICAgIGV4aXRfY29kZSA9IHNlbGYuc2VydmVyLnNjbS5h
ZGQoZGVzdGluYXRpb25fcGF0aCwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSAgICAgICAgICAKKyAg
ICAgICAgICAgIGxvZygiICAgIEFkZGVkICVzLCBleGl0IGNvZGUgJWQiICUgKGZpbGUsIGV4aXRf
Y29kZSkpCisgICAgICAgICAgICBpZiBleGl0X2NvZGU6CisgICAgICAgICAgICAgICAgdGVzdF9q
c29uWydzdGF0ZSddID0gU1RBVEVfUkVCQVNFTElORV9GQUlMRUQKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgCisgICAgICAgIHRlc3RfanNvblsnc3RhdGUnXSA9IFNUQVRF
X1JFQkFTRUxJTkVfU1VDQ0VFREVECisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgdGVz
dF9yZXN1bHQoc2VsZik6CisgICAgICAgICh0ZXN0X25hbWUsIHRlc3RfZXh0ZW5zaW9uKSA9IG9z
LnBhdGguc3BsaXRleHQoc2VsZi5xdWVyeVsndGVzdCddWzBdKQorICAgICAgICBtb2RlID0gc2Vs
Zi5xdWVyeVsnbW9kZSddWzBdCisgICAgICAgIGlmIG1vZGUgPT0gJ2V4cGVjdGVkLWltYWdlJzoK
KyAgICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZXhwZWN0ZWQucG5nJworICAg
ICAgICBlbGlmIG1vZGUgPT0gJ2FjdHVhbC1pbWFnZSc6CisgICAgICAgICAgICBmaWxlX25hbWUg
PSB0ZXN0X25hbWUgKyAnLWFjdHVhbC5wbmcnCisgICAgICAgIGlmIG1vZGUgPT0gJ2V4cGVjdGVk
LWNoZWNrc3VtJzoKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZXhwZWN0
ZWQuY2hlY2tzdW0nCisgICAgICAgIGVsaWYgbW9kZSA9PSAnYWN0dWFsLWNoZWNrc3VtJzoKKyAg
ICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctYWN0dWFsLmNoZWNrc3VtJworICAg
ICAgICBlbGlmIG1vZGUgPT0gJ2RpZmYtaW1hZ2UnOgorICAgICAgICAgICAgZmlsZV9uYW1lID0g
dGVzdF9uYW1lICsgJy1kaWZmLnBuZycKKyAgICAgICAgaWYgbW9kZSA9PSAnZXhwZWN0ZWQtdGV4
dCc6CisgICAgICAgICAgICBmaWxlX25hbWUgPSB0ZXN0X25hbWUgKyAnLWV4cGVjdGVkLnR4dCcK
KyAgICAgICAgZWxpZiBtb2RlID09ICdhY3R1YWwtdGV4dCc6CisgICAgICAgICAgICBmaWxlX25h
bWUgPSB0ZXN0X25hbWUgKyAnLWFjdHVhbC50eHQnCisgICAgICAgIGVsaWYgbW9kZSA9PSAnZGlm
Zi10ZXh0JzoKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZGlmZi50eHQn
CisgIAorICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucmVzdWx0
c19kaXJlY3RvcnksIGZpbGVfbmFtZSkKKyAgICAgICAgCisgICAgICAgICMgTGV0IHJlc3VsdHMg
YmUgY2FjaGVkIGZvciA2MCBzZWNvbmRzLCBzbyB0aGF0IHRoZXkgY2FuIGJlIHByZS1mZXRjaGVk
CisgICAgICAgICMgYnkgdGhlIFVJCisgICAgICAgIHNlbGYuX3NlcnZlX2ZpbGUoZmlsZV9wYXRo
LCBjYWNoZV9zZWNvbmRzPTYwKQorICAgIAorICAgIGRlZiByZXN1bHRzX2pzb24oc2VsZik6Cisg
ICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIo
IkNvbnRlbnQtdHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIikKKyAgICAgICAgc2VsZi5lbmRfaGVh
ZGVycygpICAgIAorICAgICAgICBzaW1wbGVqc29uLmR1bXAoc2VsZi5zZXJ2ZXIucmVzdWx0c19q
c29uLCBzZWxmLndmaWxlKQorICAgIAorICAgIGRlZiBxdWl0cXVpdHF1aXQoc2VsZik6CisgICAg
ICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNv
bnRlbnQtdHlwZSIsICJ0ZXh0L3BsYWluIikKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisg
ICAgICAgIHNlbGYud2ZpbGUud3JpdGUoIlF1aXQuXG4iKQorICAgICAgICAKKyAgICAgICAgIyBT
aHV0ZG93biBoYXMgdG8gaGFwcGVuIG9uIGFub3RoZXIgdGhyZWFkIGZyb20gdGhlIHNlcnZlcidz
IHRocmVhZCwKKyAgICAgICAgIyBvdGhlcndpc2UgdGhlcmUncyBhIGRlYWRsb2NrCisgICAgICAg
IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxhbWJkYTogc2VsZi5zZXJ2ZXIuc2h1dGRvd24oKSku
c3RhcnQoKQorCisgICAgZGVmIF9zZXJ2ZV9maWxlKHNlbGYsIGZpbGVfcGF0aCwgY2FjaGVfc2Vj
b25kcz0wKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVfcGF0aCk6CisgICAg
ICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIkZpbGUgbm90IGZvdW5kIikKKyAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgc3RhdGljX2ZpbGUgPSBmaWxlKGZpbGVfcGF0aCwgJ3JiJykKKyAgICAg
ICAgCisgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9o
ZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgb3MucGF0aC5nZXRzaXplKGZpbGVfcGF0aCkpCisgICAg
ICAgIChtaW1lX3R5cGUsIGVuY29kaW5nKSA9IG1pbWV0eXBlcy5ndWVzc190eXBlKGZpbGVfcGF0
aCkKKyAgICAgICAgaWYgbWltZV90eXBlOiAgICAgIAorICAgICAgICAgIHNlbGYuc2VuZF9oZWFk
ZXIoIkNvbnRlbnQtdHlwZSIsIG1pbWVfdHlwZSkKKyAgICAgICAgCisgICAgICAgIGlmIGNhY2hl
X3NlY29uZHM6CisgICAgICAgICAgZXhwaXJlc190aW1lID0gXAorICAgICAgICAgICAgICBkYXRl
dGltZS5kYXRldGltZS5ub3coKSArIGRhdGV0aW1lLnRpbWVkZWx0YSgwLCBjYWNoZV9zZWNvbmRz
KQorICAgICAgICAgIGV4cGlyZXNfZm9ybWF0dGVkID0gXAorICAgICAgICAgICAgICBmb3JtYXRf
ZGF0ZV90aW1lKHRpbWUubWt0aW1lKGV4cGlyZXNfdGltZS50aW1ldHVwbGUoKSkpCisgICAgICAg
ICAgc2VsZi5zZW5kX2hlYWRlcigiRXhwaXJlcyIsIGV4cGlyZXNfZm9ybWF0dGVkKQorICAgICAg
ICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZW9i
aihzdGF0aWNfZmlsZSwgc2VsZi53ZmlsZSkKKyAgICAgICAgc3RhdGljX2ZpbGUuY2xvc2UoKQor
CitjbGFzcyBMb2NhbFJlYmFzZWxpbmUoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgorICAg
IG5hbWUgPSAibG9jYWwtcmViYXNlbGluZSIKKyAgICBoZWxwX3RleHQgPSAiVE9ETyhtaWhhaXAp
IgorICAgIGFyZ3VtZW50X25hbWVzID0gIlsvcGF0aC90by9yZXN1bHRzL2RpcmVjdG9yeS9dIgor
CisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CisgICAgICAgIGlm
IGxlbihhcmdzKSAhPSAxOgorICAgICAgICAgICAgcHJpbnQgIlBhdGggdG8gcmVzdWx0cyBkaXJl
Y3RvcnkgaXMgcmVxdWlyZWQuIgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmVzdWx0
c19kaXJlY3RvcnkgPSBhcmdzWzBdCisgICAgICAgIAorICAgICAgICBwcmludCAiUGFyc2luZyB1
bmV4cGVjdGVkX3Jlc3VsdHMuanNvbi4uLiIKKyAgICAgICAgcmVzdWx0c19qc29uX3BhdGggPSBv
cy5wYXRoLmpvaW4oCisgICAgICAgICAgICByZXN1bHRzX2RpcmVjdG9yeSwgJ3VuZXhwZWN0ZWRf
cmVzdWx0cy5qc29uJykKKyAgICAgICAgcmVzdWx0c19qc29uX2ZpbGUgPSBmaWxlKHJlc3VsdHNf
anNvbl9wYXRoKQorICAgICAgICByZXN1bHRzX2pzb24gPSBzaW1wbGVqc29uLmxvYWQocmVzdWx0
c19qc29uX2ZpbGUpCisgICAgICAgIHJlc3VsdHNfanNvbl9maWxlLmNsb3NlKCkKKworICAgICAg
ICB0ZXN0X25hbWVfdG9fdGVzdF9maWxlID0ge30KKyAgICAgICAgZm9yIHRlc3RfZmlsZSwgdGVz
dF9qc29uIGluIHJlc3VsdHNfanNvblsndGVzdHMnXS5pdGVtcygpOgorICAgICAgICAgICAgKHRl
c3RfbmFtZSwgdGV4dF9leHRlbnNpb24pID0gb3MucGF0aC5zcGxpdGV4dCh0ZXN0X2ZpbGUpCisg
ICAgICAgICAgICB0ZXN0X25hbWVfdG9fdGVzdF9maWxlW3Rlc3RfbmFtZV0gPSB0ZXN0X2ZpbGUK
KworICAgICAgICAgICAgIyBBbHNvIGluZGV4IHBlci1wbGF0Zm9ybSB0ZXN0cyBieSB0aGVpciBu
b24tcGxhdGZvcm0gbmFtZXMKKyAgICAgICAgICAgIHBhdGhfcGllY2VzID0gdGVzdF9uYW1lLnNw
bGl0KG9zLnNlcCkKKyAgICAgICAgICAgIGlmIGxlbihwYXRoX3BpZWNlcykgPj0gMiBhbmQgcGF0
aF9waWVjZXNbMF0gPT0gJ3BsYXRmb3JtJzoKKyAgICAgICAgICAgICAgICB0ZXN0X25hbWVfdG9f
dGVzdF9maWxlW29zLnNlcC5qb2luKHBhdGhfcGllY2VzWzI6XSldID0gdGVzdF9maWxlCisKKyAg
ICAgICAgICAgIHRlc3RfanNvblsnc3RhdGUnXSA9IFNUQVRFX05FRURTX1JFQkFTRUxJTkUKKyAg
ICAgICAgCisgICAgICAgIHByaW50ICJHYXRoZXJpbmcgY3VycmVudCBiYXNlbGluZXMuLi4iCisg
ICAgICAgIAorICAgICAgICBwb3J0ID0gZmFjdG9yeS5nZXQoKQorICAgICAgICBsYXlvdXRfdGVz
dHNfZGlyZWN0b3J5ID0gcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKKyAgICAgICAgZm9yIHJvb3Qs
IGRpcnMsIGZpbGVzIGluIG9zLndhbGsobGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSk6CisgICAgICAg
ICAgICBmb3IgZmlsZW5hbWUgaW4gZm5tYXRjaC5maWx0ZXIoZmlsZXMsICcqLWV4cGVjdGVkLion
KToKKyAgICAgICAgICAgICAgICByZWxhdGl2ZV9wYXRoID0gb3MucGF0aC5yZWxwYXRoKHJvb3Qs
IGxheW91dF90ZXN0c19kaXJlY3RvcnkpCisgICAgICAgICAgICAgICAgcGF0aF9waWVjZXMgPSBy
ZWxhdGl2ZV9wYXRoLnNwbGl0KG9zLnNlcCkKKyAgICAgICAgICAgICAgICBpZiBsZW4ocGF0aF9w
aWVjZXMpID49IDIgYW5kIHBhdGhfcGllY2VzWzBdID09ICdwbGF0Zm9ybSc6CisgICAgICAgICAg
ICAgICAgICAgIHBsYXRmb3JtID0gcGF0aF9waWVjZXNbMV0KKyAgICAgICAgICAgICAgICAgICAg
dGVzdF9kaXJfcGF0aCA9IG9zLnNlcC5qb2luKHBhdGhfcGllY2VzWzI6XSkKKyAgICAgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSA9ICdiYXNlJworICAgICAg
ICAgICAgICAgICAgICB0ZXN0X2Rpcl9wYXRoID0gcmVsYXRpdmVfcGF0aAorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICh0ZXN0X25hbWUsIGJhc2VsaW5lX2V4dGVuc2lvbikgPSBv
cy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIHRlc3RfbmFtZSA9IG9z
LnBhdGguam9pbih0ZXN0X2Rpcl9wYXRoLCB0ZXN0X25hbWVbMDotbGVuKCctZXhwZWN0ZWQnKV0p
CisgICAgICAgICAgICAgICAgaWYgdGVzdF9uYW1lIG5vdCBpbiB0ZXN0X25hbWVfdG9fdGVzdF9m
aWxlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHRlc3Rf
ZmlsZSA9IHRlc3RfbmFtZV90b190ZXN0X2ZpbGVbdGVzdF9uYW1lXQorICAgICAgICAgICAgICAg
IHRlc3RfanNvbiA9IHJlc3VsdHNfanNvblsndGVzdHMnXVt0ZXN0X2ZpbGVdCisgICAgICAgICAg
ICAgICAgaWYgJ2Jhc2VsaW5lcycgbm90IGluIHRlc3RfanNvbjoKKyAgICAgICAgICAgICAgICAg
ICAgdGVzdF9qc29uWydiYXNlbGluZXMnXSA9IHt9CisgICAgICAgICAgICAgICAgaWYgcGxhdGZv
cm0gbm90IGluIHRlc3RfanNvblsnYmFzZWxpbmVzJ106CisgICAgICAgICAgICAgICAgICAgIHRl
c3RfanNvblsnYmFzZWxpbmVzJ11bcGxhdGZvcm1dID0gW10KKyAgICAgICAgICAgICAgICB0ZXN0
X2pzb25bJ2Jhc2VsaW5lcyddW3BsYXRmb3JtXS5hcHBlbmQoYmFzZWxpbmVfZXh0ZW5zaW9uKQor
CisgICAgICAgIHByaW50ICJTdGFydGluZyBzZXJ2ZXIgYXQgaHR0cDovL2xvY2FsaG9zdDo4MTI3
LyIKKyAgICAgICAgCisgICAgICAgIGh0dHBkID0gUmViYXNlbGluZUhUVFNlcnZlcigKKyAgICAg
ICAgICAgIGh0dHBkX3BvcnQ9ODEyNywKKyAgICAgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5PXJl
c3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgcmVzdWx0c19qc29uPXJlc3VsdHNfanNvbiwK
KyAgICAgICAgICAgIHBvcnQ9cG9ydCwKKyAgICAgICAgICAgIHNjbT1zZWxmLl90b29sLnNjbSgp
KQorICAgICAgICBodHRwZC5zZXJ2ZV9mb3JldmVyKCkgICAgICAgICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72614</attachid>
            <date>2010-11-01 18:15:40 -0700</date>
            <delta_ts>2010-11-02 17:52:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47761-20101101181539.patch</filename>
            <type>text/plain</type>
            <size>52416</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBjOGI1MWY1ODBlYzhmODlmMjU2NjllMGU5MGNiOTkwMzZkZmNlY2RmLi43NWY4NTJh
YzJkOTM0NGFkNjYzYWY3ZGI1M2YwNjgyYWY2ZjAyYTNkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAK
KzIwMTAtMTAtMjUgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTG9jYWwgcmViYXNl
bGluaW5nIHRvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ3NzYxCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19p
bml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEv
bG9jYWxyZWJhc2VsaW5lL2luZGV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9tYWluLmpzOiBBZGRlZC4K
KyAgICAgICAgKG1haW4uYWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChtYWluLmRvY3VtZW50
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAoZGlzcGxheVJlc3VsdHMuZm9yKToKKyAgICAg
ICAgKGRpc3BsYXlSZXN1bHRzKToKKyAgICAgICAgKHNlbGVjdEZhaWx1cmVUeXBlKToKKyAgICAg
ICAgKHNlbGVjdERpcmVjdG9yeSk6CisgICAgICAgIChnZXRTZWxlY3RlZFRlc3QpOgorICAgICAg
ICAocHJlZmV0Y2gpOgorICAgICAgICAoc2VsZWN0VGVzdCk6CisgICAgICAgICh1cGRhdGVTdGF0
ZSk6CisgICAgICAgIChkaXNwbGF5SW1hZ2VSZXN1bHRzLm9ubG9hZCk6CisgICAgICAgIChkaXNw
bGF5SW1hZ2VSZXN1bHRzKToKKyAgICAgICAgKHVwZGF0ZURpZmYpOgorICAgICAgICAoZGlzcGxh
eVRleHRSZXN1bHRzLmxvYWRUZXh0UmVzdWx0KToKKyAgICAgICAgKCk6CisgICAgICAgIChuZXh0
VGVzdCk6CisgICAgICAgIChwcmV2aW91c1Rlc3QpOgorICAgICAgICAoc2hvd0xvdXBlKToKKyAg
ICAgICAgKGZpbGxMb3VwZUZyb21JbWFnZSk6CisgICAgICAgIChmaWxsTG91cGVGcm9tQ2FudmFz
LnJlYWRQaXhlbENvbXBvbmVudCk6CisgICAgICAgIChmaWxsTG91cGVGcm9tQ2FudmFzKToKKyAg
ICAgICAgKGhpZGVMb3VwZSk6CisgICAgICAgIChyZW1vdmVTZWxlY3Rpb25Gcm9tUmViYXNlbGlu
ZVF1ZXVlKToKKyAgICAgICAgKHJlbW92ZUZyb21SZWJhc2VsaW5lUXVldWUpOgorICAgICAgICAo
cmViYXNlbGluZVF1ZXVlKToKKyAgICAgICAgKHJlYmFzZWxpbmUuaGFuZGxlU3VjY2Vzcyk6Cisg
ICAgICAgIChyZWJhc2VsaW5lLmhhbmRsZUZhaWx1cmUpOgorICAgICAgICAobG9nKToKKyAgICAg
ICAgKHRvZ2dsZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2xv
Y2FscmViYXNlbGluZS5weTogQWRkZWQuCisKIDIwMTAtMTEtMDEgIE9qYW4gVmFmYWkgIDxvamFu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19p
bml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19p
bml0X18ucHkKaW5kZXggOWJkZWM4ZjU5N2UxNzYzNjM0NGE4MTgzYjEwM2ExNTBiZjhjOWRlMy4u
MzhiMWU3OWVmNDgxNjE3NDc0NmM3MjY2NzExNWE3YzJkZDY3MjY2OSAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9fX2luaXRfXy5weQpA
QCAtMiw0ICsyLDUgQEAKIAogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnByZXR0eWRpZmYg
aW1wb3J0IFByZXR0eURpZmYKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5yZWJhc2VsaW5l
IGltcG9ydCBSZWJhc2VsaW5lCitmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMubG9jYWxyZWJh
c2VsaW5lIGltcG9ydCBMb2NhbFJlYmFzZWxpbmUKICMgRklYTUU6IEFkZCB0aGUgcmVzdCBvZiB0
aGUgY29tbWFuZHMgaGVyZS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9pbmRleC5odG1sIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvbG9jYWxyZWJhc2VsaW5l
L2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjI2N2IwOWI0YmQ4NDNhMWZlMDRjNTA2NDUwODk3MTUy
OTk5ODk4NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9pbmRleC5odG1sCkBAIC0wLDAgKzEs
MjA2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5MYXlvdXQg
VGVzdCBSZWJhc2VsaW5lcjwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
L21haW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CisgIDxzY3JpcHQgc3JjPSIvbWFpbi5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBjbGFzcz0ibG9hZGluZyI+CisKKzxwcmUgaWQ9ImxvZyIg
c3R5bGU9ImRpc3BsYXk6IG5vbmUiPjwvcHJlPgorPGRpdiBpZD0icXVldWUiIHN0eWxlPSJkaXNw
bGF5OiBub25lIj4KKyAgUXVldWU6CisgIDxzZWxlY3QgaWQ9InF1ZXVlLXNlbGVjdCIgc2l6ZT0i
MTAiPjwvc2VsZWN0PgorICA8YnV0dG9uIGlkPSJyZW1vdmUtcXVldWUtc2VsZWN0aW9uIj5SZW1v
dmUgc2VsZWN0aW9uPC9idXR0b24+CisgIDxidXR0b24gaWQ9InJlYmFzZWxpbmUtcXVldWUiPlJl
YmFzZWxpbmUgcXVldWU8L2J1dHRvbj4KKzwvZGl2PgorCis8ZGl2IGlkPSJoZWFkZXIiPgorICA8
ZGl2IGlkPSJjb250cm9scyI+CisgICAgPCEtLSBBZGQgYSBkdW1teSA8c2VsZWN0PiBub2RlIHNv
IHRoYXQgdGhpcyBsaW5lcyB1cCB3aXRoIHRoZSB0ZXh0IG9uIHRoZSBsZWZ0IC0tPgorICAgIDxz
ZWxlY3Qgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbiI+PC9zZWxlY3Q+CisgICAgPHNwYW4gaWQ9
InRvZ2dsZS1sb2ciIGNsYXNzPSJsaW5rIj5Mb2c8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImRp
dmlkZXIiPnw8L3NwYW4+CisgICAgPGEgaHJlZj0iL3F1aXRxdWl0cXVpdCI+RXhpdDwvYT4KKyAg
PC9kaXY+CisKKyAgPHNwYW4gaWQ9InNlbGVjdG9ycyI+CisgICAgPGxhYmVsPgorICAgICAgRmFp
bHVyZSB0eXBlOgorICAgICAgPHNlbGVjdCBpZD0iZmFpbHVyZS10eXBlLXNlbGVjdG9yIj48L3Nl
bGVjdD4KKyAgICA8L2xhYmVsPgorICAKKyAgICA8bGFiZWw+CisgICAgICBEaXJlY3Rvcnk6Cisg
ICAgICA8c2VsZWN0IGlkPSJkaXJlY3Rvcnktc2VsZWN0b3IiPjwvc2VsZWN0PgorICAgIDwvbGFi
ZWw+CisgIAorICAgIDxsYWJlbD4KKyAgICAgIFRlc3Q6CisgICAgICA8c2VsZWN0IGlkPSJ0ZXN0
LXNlbGVjdG9yIj48L3NlbGVjdD4KKyAgICA8L2xhYmVsPgorICA8L3NwYW4+CisgIAorICA8YSBp
ZD0idGVzdC1saW5rIj5WaWV3IHRlc3Q8L2E+CisgIAorICA8c3BhbiBpZD0ibmF2LWJ1dHRvbnMi
PgorICAgIDxidXR0b24gaWQ9InByZXZpb3VzLXRlc3QiPiZsYXF1bzs8L2J1dHRvbj4KKyAgICA8
c3BhbiBpZD0idGVzdC1pbmRleCI+PC9zcGFuPiBvZiA8c3BhbiBpZD0idGVzdC1jb3VudCI+PC9z
cGFuPgorICAgIDxidXR0b24gaWQ9Im5leHQtdGVzdCI+JnJhcXVvOzwvYnV0dG9uPgorICA8L3Nw
YW4+ICAKKzwvZGl2PgorCis8dGFibGUgaWQ9InRlc3Qtb3V0cHV0Ij4KKyAgPHRoZWFkIGlkPSJs
YWJlbHMiPgorICAgIDx0cj4KKyAgICAgIDx0aD5FeHBlY3RlZDwvdGg+CisgICAgICA8dGg+QWN0
dWFsPC90aD4KKyAgICAgIDx0aD5EaWZmPC90aD4KKyAgICA8L3RyPgorICA8L3RoZWFkPgorICA8
dGJvZHkgaWQ9ImltYWdlLW91dHB1dHMiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAgICA8dHI+
CisgICAgICA8dGQgY29sc3Bhbj0iMyI+PGgyPkltYWdlPC9oMj48L3RkPgorICAgIDwvdHI+Cisg
ICAgPHRyPgorICAgICAgPHRkPjxpbWcgaWQ9ImV4cGVjdGVkLWltYWdlIj48L3RkPgorICAgICAg
PHRkPjxpbWcgaWQ9ImFjdHVhbC1pbWFnZSI+PC90ZD4KKyAgICAgIDx0ZD4KKyAgICAgICAgPGNh
bnZhcyBpZD0iZGlmZi1jYW52YXMiIHdpZHRoPSI4MDAiIGhlaWdodD0iNjAwIj48L2NhbnZhcz4K
KyAgICAgICAgPGRpdiBpZD0iZGlmZi1jaGVja3N1bSIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgor
ICAgICAgICAgIDxoMz5DaGVja3N1bSBtaXNtYXRjaDwvaDM+CisgICAgICAgICAgRXhwZWN0ZWQ6
IDxzcGFuIGlkPSJleHBlY3RlZC1jaGVja3N1bSI+PC9zcGFuPjxicj4KKyAgICAgICAgICBBY3R1
YWw6IDxzcGFuIGlkPSJhY3R1YWwtY2hlY2tzdW0iPjwvc3Bhbj4KKyAgICAgICAgPC9kaXY+Cisg
ICAgICA8L3RkPgorICAgIDwvdHI+CisgIDwvdGJvZHk+CisgIDx0Ym9keSBpZD0idGV4dC1vdXRw
dXRzIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+CisgICAgPHRyPgorICAgICAgPHRkIGNvbHNwYW49
IjMiPjxoMj5UZXh0PC9oMj48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkPjxw
cmUgaWQ9ImV4cGVjdGVkLXRleHQiPjwvcHJlPjwvdGQ+CisgICAgICA8dGQ+PHByZSBpZD0iYWN0
dWFsLXRleHQiPjwvcHJlPjwvdGQ+CisgICAgICA8dGQ+PHByZSBpZD0iZGlmZi10ZXh0Ij48cHJl
PjwvdGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKworPC90YWJsZT4KKworPGRpdiBpZD0iZm9v
dGVyIj4KKyAgPGxhYmVsPlN0YXRlOiA8c3BhbiBpZD0ic3RhdGUiPjwvc3Bhbj48L2xhYmVsPgor
ICA8bGFiZWw+RXhpc3RpbmcgYmFzZWxpbmVzOiA8c3BhbiBpZD0iY3VycmVudC1iYXNlbGluZXMi
Pjwvc3Bhbj48L2xhYmVsPgorICA8bGFiZWw+CisgICAgQmFzZWxpbmUgdGFyZ2V0OgorICAgIDxz
ZWxlY3QgaWQ9ImJhc2VsaW5lLXRhcmdldCI+CisgICAgICA8b3B0aW9uIHZhbHVlPSJhbmRyb2lk
Ij5hbmRyb2lkPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJhbmRyb2lkLXY4Ij5hbmRy
b2lkLXY4PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bSI+Y2hyb21pdW08
L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLWdwdSI+Y2hyb21pdW0tZ3B1
PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1ncHUtbGludXgiPmNocm9t
aXVtLWdwdS1saW51eDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0tZ3B1
LW1hYyI+Y2hyb21pdW0tZ3B1LW1hYzwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hy
b21pdW0tZ3B1LXdpbiI+Y2hyb21pdW0tZ3B1LXdpbjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2
YWx1ZT0iY2hyb21pdW0tbGludXgiPmNocm9taXVtLWxpbnV4PC9vcHRpb24+CisgICAgICA8b3B0
aW9uIHZhbHVlPSJjaHJvbWl1bS1tYWMiPmNocm9taXVtLW1hYzwvb3B0aW9uPgorICAgICAgPG9w
dGlvbiB2YWx1ZT0iY2hyb21pdW0td2luIj5jaHJvbWl1bS13aW48L29wdGlvbj4KKyAgICAgIDxv
cHRpb24gdmFsdWU9ImNocm9taXVtLXdpbi12aXN0YSI+Y2hyb21pdW0td2luLXZpc3RhPC9vcHRp
b24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS13aW4teHAiPmNocm9taXVtLXdpbi14
cDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iZ29vZ2xlLWNocm9tZS1saW51eDMyIj5n
b29nbGUtY2hyb21lLWxpbnV4MzI8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Imdvb2ds
ZS1jaHJvbWUtbGludXg2NCI+Z29vZ2xlLWNocm9tZS1saW51eDY0PC9vcHRpb24+CisgICAgICA8
b3B0aW9uIHZhbHVlPSJndGsiPmd0azwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFj
IiBzZWxlY3RlZD5tYWM8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Im1hYy1sZW9wYXJk
Ij5tYWMtbGVvcGFyZDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjLXNub3dsZW9w
YXJkIj5tYWMtc25vd2xlb3BhcmQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Im1hYy10
aWdlciI+bWFjLXRpZ2VyPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMtd2syIj5t
YWMtd2syPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJxdCI+cXQ8L29wdGlvbj4KKyAg
ICAgIDxvcHRpb24gdmFsdWU9InF0LWxpbnV4Ij5xdC1saW51eDwvb3B0aW9uPgorICAgICAgPG9w
dGlvbiB2YWx1ZT0icXQtbWFjIj5xdC1tYWM8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9
InF0LXdpbiI+cXQtd2luPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJxdC13azIiPnF0
LXdrMjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0id2luIj53aW48L29wdGlvbj4KKyAg
ICAgIDxvcHRpb24gdmFsdWU9Indpbi13azIiPndpbi13azI8L29wdGlvbj4KKyAgICAgIDxvcHRp
b24gdmFsdWU9Indpbi14cCI+d2luLXhwPC9vcHRpb24+CisgICAgPC9zZWxlY3Q+CisgIDwvbGFi
ZWw+CisgIDxsYWJlbD4KKyAgICBNb3ZlIGN1cnJlbnQgYmFzZWxpbmVzIHRvOgorICAgIDxzZWxl
Y3QgaWQ9ImJhc2VsaW5lLW1vdmUtdG8iPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibm9uZSI+Tm93
aGVyZSAocmVwbGFjZSk8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImFuZHJvaWQiPmFu
ZHJvaWQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImFuZHJvaWQtdjgiPmFuZHJvaWQt
djg8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtIj5jaHJvbWl1bTwvb3B0
aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0tZ3B1Ij5jaHJvbWl1bS1ncHU8L29w
dGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLWdwdS1saW51eCI+Y2hyb21pdW0t
Z3B1LWxpbnV4PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1ncHUtbWFj
Ij5jaHJvbWl1bS1ncHUtbWFjPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1
bS1ncHUtd2luIj5jaHJvbWl1bS1ncHUtd2luPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVl
PSJjaHJvbWl1bS1saW51eCI+Y2hyb21pdW0tbGludXg8L29wdGlvbj4KKyAgICAgIDxvcHRpb24g
dmFsdWU9ImNocm9taXVtLW1hYyI+Y2hyb21pdW0tbWFjPC9vcHRpb24+CisgICAgICA8b3B0aW9u
IHZhbHVlPSJjaHJvbWl1bS13aW4iPmNocm9taXVtLXdpbjwvb3B0aW9uPgorICAgICAgPG9wdGlv
biB2YWx1ZT0iY2hyb21pdW0td2luLXZpc3RhIj5jaHJvbWl1bS13aW4tdmlzdGE8L29wdGlvbj4K
KyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLXdpbi14cCI+Y2hyb21pdW0td2luLXhwPC9v
cHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJnb29nbGUtY2hyb21lLWxpbnV4MzIiPmdvb2ds
ZS1jaHJvbWUtbGludXgzMjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iZ29vZ2xlLWNo
cm9tZS1saW51eDY0Ij5nb29nbGUtY2hyb21lLWxpbnV4NjQ8L29wdGlvbj4KKyAgICAgIDxvcHRp
b24gdmFsdWU9Imd0ayI+Z3RrPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMiPm1h
Yzwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjLWxlb3BhcmQiPm1hYy1sZW9wYXJk
PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMtc25vd2xlb3BhcmQiPm1hYy1zbm93
bGVvcGFyZDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjLXRpZ2VyIj5tYWMtdGln
ZXI8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Im1hYy13azIiPm1hYy13azI8L29wdGlv
bj4KKyAgICAgIDxvcHRpb24gdmFsdWU9InF0Ij5xdDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2
YWx1ZT0icXQtbGludXgiPnF0LWxpbnV4PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJx
dC1tYWMiPnF0LW1hYzwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0icXQtd2luIj5xdC13
aW48L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9InF0LXdrMiI+cXQtd2syPC9vcHRpb24+
CisgICAgICA8b3B0aW9uIHZhbHVlPSJ3aW4iPndpbjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2
YWx1ZT0id2luLXdrMiI+d2luLXdrMjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0id2lu
LXhwIj53aW4teHA8L29wdGlvbj4gICAgICAKKyAgICA8L3NlbGVjdD4KKyAgPC9sYWJlbD4KKwor
ICA8IS0tIEFkZCBhIGR1bW15IDxidXR0b24+IG5vZGUgc28gdGhhdCB0aGlzIGxpbmVzIHVwIHdp
dGggdGhlIHRleHQgb24gdGhlIGxlZnQgLS0+CisgIDxidXR0b24gc3R5bGU9InZpc2liaWxpdHk6
IGhpZGRlbiI+PC9idXR0b24+CisgIAorICA8ZGl2IGlkPSJhY3Rpb24tYnV0dG9ucyI+CisgICAg
PHNwYW4gaWQ9InRvZ2dsZS1xdWV1ZSIgY2xhc3M9ImxpbmsiPlF1ZXVlPC9zcGFuPgorICAgIDxi
dXR0b24gaWQ9ImFkZC10by1yZWJhc2VsaW5lLXF1ZXVlIj5BZGQgdG8gcmViYXNlbGluZSBxdWV1
ZTwvYnV0dG9uPgorICA8L2Rpdj4KKzwvZGl2PgorCis8dGFibGUgaWQ9ImxvdXBlIiBzdHlsZT0i
ZGlzcGxheTogbm9uZSI+CisgIDx0cj4KKyAgICA8dGQgY29sc3Bhbj0iMyIgaWQ9ImxvdXBlLWlu
Zm8iPgorICAgICAgPHNwYW4gaWQ9ImxvdXBlLWNsb3NlIiBjbGFzcz0ibGluayI+Q2xvc2U8L3Nw
YW4+CisgICAgICA8bGFiZWw+Q29vcmRpbmF0ZTogPHNwYW4gaWQ9ImxvdXBlLWNvb3JkaW5hdGUi
Pjwvc3Bhbj48L2xhYmVsPgorICAgIDwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQ+Cisg
ICAgICA8ZGl2IGNsYXNzPSJsb3VwZS1jb250YWluZXIiPgorICAgICAgICA8Y2FudmFzIGlkPSJl
eHBlY3RlZC1sb3VwZSIgd2lkdGg9IjIxMCIgaGVpZ2h0PSIyMTAiPjwvY2FudmFzPgorICAgICAg
ICA8ZGl2IGNsYXNzPSJjZW50ZXItaGlnaGxpZ2h0Ij48L2Rpdj4KKyAgICAgIDwvZGl2PgorICAg
IDwvdGQ+CisgICAgPHRkPgorICAgICAgPGRpdiBjbGFzcz0ibG91cGUtY29udGFpbmVyIj4KKyAg
ICAgICAgPGNhbnZhcyBpZD0iYWN0dWFsLWxvdXBlIiB3aWR0aD0iMjEwIiBoZWlnaHQ9IjIxMCI+
PC9jYW52YXM+CisgICAgICAgIDxkaXYgY2xhc3M9ImNlbnRlci1oaWdobGlnaHQiPjwvZGl2Pgor
ICAgICAgPC9kaXY+CisgICAgPC90ZD4KKyAgICA8dGQ+CisgICAgICA8ZGl2IGNsYXNzPSJsb3Vw
ZS1jb250YWluZXIiPgorICAgICAgICA8Y2FudmFzIGlkPSJkaWZmLWxvdXBlIiB3aWR0aD0iMjEw
IiBoZWlnaHQ9IjIxMCI+PC9jYW52YXM+CisgICAgICAgIDxkaXYgY2xhc3M9ImNlbnRlci1oaWdo
bGlnaHQiPjwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC90ZD4KKyAgPC90cj4KKyAgPHRyIGlk
PSJsb3VwZS1jb2xvcnMiPgorICAgIDx0ZD48bGFiZWw+RXhwLiBjb2xvcjogPHNwYW4gaWQ9ImV4
cGVjdGVkLWxvdXBlLWNvbG9yIj48L3NwYW4+PC9sYWJlbD48L3RkPgorICAgIDx0ZD48bGFiZWw+
QWN0dWFsIGNvbG9yOiA8c3BhbiBpZD0iYWN0dWFsLWxvdXBlLWNvbG9yIj48L3NwYW4+PC9sYWJl
bD48L3RkPgorICAgIDx0ZD48bGFiZWw+RGlmZiBjb2xvcjogPHNwYW4gaWQ9ImRpZmYtbG91cGUt
Y29sb3IiPjwvc3Bhbj48L2xhYmVsPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvbWFpbi5jc3MgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUvbWFpbi5jc3MK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOThhNmRmNjczNDFmNzg4YmY4OTliNTQxM2E3MDIxMzkxMDUyZjU3ZgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9kYXRhL2xvY2FscmViYXNlbGluZS9tYWluLmNzcwpAQCAtMCwwICsxLDI1NSBAQAorYm9keSB7
CisgIGZvbnQtc2l6ZTogMTJweDsKKyAgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNh
bnMtc2VyaWY7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKK30KKworLmxvYWRpbmcgewor
ICBvcGFjaXR5OiAwLjU7Cit9CisKK2RpdiB7CisgIG1hcmdpbjogMDsKK30KKworYSwgLmxpbmsg
eworICBjb2xvcjogI2FhZjsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGN1cnNv
cjogcG9pbnRlcjsgICAgICAKK30KKworLmxpbmsuc2VsZWN0ZWQgeworICBjb2xvcjogI2ZmZjsK
KyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworI2xv
ZywKKyNxdWV1ZSB7CisgIHBhZGRpbmc6IC4yNWVtIDAgMCAuMjVlbTsKKyAgcG9zaXRpb246IGFi
c29sdXRlOworICByaWdodDogMDsKKyAgaGVpZ2h0OiAyMDBweDsKKyAgb3ZlcmZsb3c6IGF1dG87
CisgIGJhY2tncm91bmQ6ICNmZmY7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMXB4IDFweCA1cHgg
cmdiYSgwLCAwLCAwLCAuNSk7Cit9CisKKyNsb2cgeworICB0b3A6IDJlbTsKKyAgd2lkdGg6IDUw
MHB4OworfQorCisjcXVldWUgeworICBib3R0b206IDNlbTsKKyAgd2lkdGg6IDQwMHB4OworfQor
CisjcXVldWUtc2VsZWN0IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHdpZHRoOiAzOTBweDsKK30K
KworI2hlYWRlciwKKyNmb290ZXIgeworICBwYWRkaW5nOiAuNWVtIDFlbTsgICAgCisgIGJhY2tn
cm91bmQ6ICMzMzM7CisgIGNvbG9yOiAjZmZmOworICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4
IDVweCByZ2JhKDAsIDAsIDAsIDAuNSk7Cit9CisKKyNoZWFkZXIgLmRpdmlkZXIsCisjZm9vdGVy
IC5kaXZpZGVyIHsKKyAgb3BhY2l0eTogLjM7CisgIHBhZGRpbmc6IDAgLjVlbTsKK30KKworI2hl
YWRlciB7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworI2hlYWRlciBsYWJlbCwKKyNmb290
ZXIgbGFiZWwgeworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIGNvbG9yOiAjY2NjOworfQorCisj
dGVzdC1saW5rIHsKKyAgbWFyZ2luLXJpZ2h0OiAxZW07Cit9CisKKyNoZWFkZXIgbGFiZWwgc3Bh
biwKKyNmb290ZXIgbGFiZWwgc3BhbiB7CisgIGNvbG9yOiAjZmZmOworICBmb250LXdlaWdodDog
Ym9sZDsKK30KKworI25hdi1idXR0b25zIHsKKyAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKK30KKwor
I25hdi1idXR0b25zIGJ1dHRvbiB7CisgIGJhY2tncm91bmQ6ICNmZmY7CisgIGJvcmRlcjogMDsK
KyAgYm9yZGVyLXJhZGl1czogMTBweDsKK30KKworI25hdi1idXR0b25zIGJ1dHRvbjphY3RpdmUg
eworICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA1cHggIzMzZiBpbnNldDsKKyAgYmFja2dyb3Vu
ZDogI2FhYTsKK30KKworI25hdi1idXR0b25zIGJ1dHRvbltkaXNhYmxlZF0geworICBvcGFjaXR5
OiAuNTsKK30KKworI2NvbnRyb2xzIHsKKyAgZmxvYXQ6IHJpZ2h0OworfQorCisjdGVzdC1vdXRw
dXQgeworICBib3JkZXItc3BhY2luZzogMDsKKyAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsK
KyAgbWFyZ2luOiAwIGF1dG87CisgIHdpZHRoOiAxMDAlOworfQorCisjdGVzdC1vdXRwdXQgdGQs
CisjdGVzdC1vdXRwdXQgdGggeworICBwYWRkaW5nOiAwOworICB2ZXJ0aWNhbC1hbGlnbjogdG9w
OworfQorCisjaW1hZ2Utb3V0cHV0cyBpbWcsCisjaW1hZ2Utb3V0cHV0cyBjYW52YXMsCisjaW1h
Z2Utb3V0cHV0cyAjZGlmZi1jaGVja3N1bSB7CisgIHdpZHRoOiA4MDBweDsKKyAgaGVpZ2h0OiA2
MDBweDsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2RkZDsKKyAgLXdlYmtpdC11c2VyLXNlbGVjdDog
bm9uZTsKKyAgLXdlYmtpdC11c2VyLWRyYWc6IG5vbmU7Cit9CisKKyNpbWFnZS1vdXRwdXRzIGlt
ZywKKyNpbWFnZS1vdXRwdXRzIGNhbnZhcyB7CisgIGN1cnNvcjogY3Jvc3NoYWlyOworfQorCisj
aW1hZ2Utb3V0cHV0cyBpbWcubG9hZGluZywKKyNpbWFnZS1vdXRwdXRzIGNhbnZhcy5sb2FkaW5n
IHsKKyAgb3BhY2l0eTogLjU7Cit9CisKKyNpbWFnZS1vdXRwdXRzICNhY3R1YWwtaW1hZ2Ugewor
ICBtYXJnaW46IDAgMWVtOworfQorCisjdGVzdC1vdXRwdXQgI2xhYmVscyB0aCB7CisgIHRleHQt
YWxpZ246IGNlbnRlcjsKKyAgY29sb3I6ICM2NjY7Cit9CisKKyN0ZXh0LW91dHB1dHMgcHJlIHsK
KyAgaGVpZ2h0OiA2MDBweDsKKyAgd2lkdGg6IDgwMHB4OworICBvdmVyZmxvdzogYXV0bzsKK30K
KworI3Rlc3Qtb3V0cHV0IGgyIHsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNjY2M7Cisg
IGZvbnQtd2VpZ2h0OiBib2xkOworICBtYXJnaW46IDA7CisgIGJhY2tncm91bmQ6ICNlZWU7Cit9
CisKKyNmb290ZXIgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMDsKKyAgbGVm
dDogMDsKKyAgcmlnaHQ6IDA7CisgIG1hcmdpbi10b3A6IDFlbTsKK30KKworI3N0YXRlLm5lZWRz
X3JlYmFzZWxpbmUgeworICBjb2xvcjogeWVsbG93OworfQorI3N0YXRlLnJlYmFzZWxpbmVfZmFp
bGVkIHsKKyAgY29sb3I6IHJlZDsKK30KKyNzdGF0ZS5yZWJhc2VsaW5lX3N1Y2NlZWRlZCB7Cisg
IGNvbG9yOiBncmVlbjsKK30KKyNzdGF0ZS5pbl9xdWV1ZSB7CisgIGNvbG9yOiBncmF5OworfQor
CisjYWN0aW9uLWJ1dHRvbnMgeworICBmbG9hdDogcmlnaHQ7Cit9CisKKyNhY3Rpb24tYnV0dG9u
cyAubGluayB7CisgIG1hcmdpbi1yaWdodDogMWVtOworfQorCisjZm9vdGVyIGJ1dHRvbiB7Cisg
IHBhZGRpbmc6IDFlbTsKK30KKworI2xvdXBlIHsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAycHgg
MnB4IDVweCByZ2JhKDAsIDAsIDAsIC41KTsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB3aWR0
aDogNjM0cHg7CisgIHRvcDogNTAlOworICBsZWZ0OiA1MCU7CisgIG1hcmdpbi1sZWZ0OiAtMTUx
cHg7CisgIG1hcmdpbi10b3A6IC01MHB4OworICBiYWNrZ3JvdW5kOiAjZmZmOworICBib3JkZXIt
c3BhY2luZzogMDsKKyAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKK30KKworI2xvdXBlIHRk
IHsKKyAgcGFkZGluZzogMDsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsgICAgIAorfQorCisj
bG91cGUgbGFiZWwgeworICBjb2xvcjogIzk5OTsKKyAgcGFkZGluZy1yaWdodDogMWVtOworfQor
CisjbG91cGUgc3BhbiB7CisgIGNvbG9yOiAjMDAwOworICBmb250LXdlaWdodDogYm9sZDsKK30K
KworI2xvdXBlICNsb3VwZS1jbG9zZSB7CisgIGZsb2F0OiByaWdodDsKK30KKworI2xvdXBlICNs
b3VwZS1pbmZvIHsKKyAgYmFja2dyb3VuZDogI2VlZTsKKyAgcGFkZGluZzogLjNlbSAuNWVtOwor
fQorCisjbG91cGUgI2xvdXBlLWNvbG9ycyB0ZCB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30K
KworI2xvdXBlIC5sb3VwZS1jb250YWluZXIgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHdp
ZHRoOiAyMTBweDsKKyAgaGVpZ2h0OiAyMTBweDsKK30KKworI2xvdXBlIC5jZW50ZXItaGlnaGxp
Z2h0IHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB3aWR0aDogMTBweDsKKyAgaGVpZ2h0OiAx
MHB4OworICB0b3A6IDUwJTsKKyAgbGVmdDogNTAlOworICBtYXJnaW4tbGVmdDogLTVweDsKKyAg
bWFyZ2luLXRvcDogLTVweDsKKyAgb3V0bGluZTogc29saWQgMXB4ICM5OTk7Cit9ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL2RhdGEvbG9jYWxyZWJhc2VsaW5lL21haW4uanMgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9sb2NhbHJlYmFzZWxpbmUv
bWFpbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lYTc0ODJmMjgxNDgzN2QyNjMyNGYyZDliN2E1OTYxNmNkYjk4
NTk4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL2RhdGEvbG9jYWxyZWJhc2VsaW5lL21haW4uanMKQEAgLTAsMCArMSw2ODggQEAK
K3ZhciBTVEFURV9ORUVEU19SRUJBU0VMSU5FID0gJ25lZWRzX3JlYmFzZWxpbmUnOwordmFyIFNU
QVRFX1JFQkFTRUxJTkVfRkFJTEVEID0gJ3JlYmFzZWxpbmVfZmFpbGVkJzsKK3ZhciBTVEFURV9S
RUJBU0VMSU5FX1NVQ0NFRURFRCA9ICdyZWJhc2VsaW5lX3N1Y2NlZWRlZCc7Cit2YXIgU1RBVEVf
SU5fUVVFVUUgPSAnaW5fcXVldWUnOwordmFyIFNUQVRFX1RPX0RJU1BMQVlfU1RBVEUgPSB7fTsK
K1NUQVRFX1RPX0RJU1BMQVlfU1RBVEVbU1RBVEVfTkVFRFNfUkVCQVNFTElORV0gPSAnTmVlZHMg
cmViYXNlbGluZSc7CitTVEFURV9UT19ESVNQTEFZX1NUQVRFW1NUQVRFX1JFQkFTRUxJTkVfRkFJ
TEVEXSA9ICdSZWJhc2VsaW5lIGZhaWxlZCc7CitTVEFURV9UT19ESVNQTEFZX1NUQVRFW1NUQVRF
X1JFQkFTRUxJTkVfU1VDQ0VFREVEXSA9ICdSZWJhc2VsaW5lIHN1Y2NlZWRlZCc7CitTVEFURV9U
T19ESVNQTEFZX1NUQVRFW1NUQVRFX0lOX1FVRVVFXSA9ICdJbiBxdWV1ZSc7CisKK3ZhciByZXN1
bHRzOwordmFyIHRlc3RzQnlGYWlsdXJlVHlwZSA9IHt9OwordmFyIHRlc3RzQnlEaXJlY3Rvcnkg
PSB7fTsKK3ZhciBzZWxlY3RlZFRlc3RzID0gW107Cit2YXIgaW5Qcm9ncmVzc1JlYmFzZWxpbmVD
b3VudCA9IDA7CisKK2Z1bmN0aW9uICQoaWQpIHsKKyAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKTsKK30KKworZnVuY3Rpb24gbWFpbigpIHsKKyAgJCgnZmFpbHVyZS10eXBlLXNl
bGVjdG9yJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgc2VsZWN0RmFpbHVyZVR5cGUpOwor
ICAkKCdkaXJlY3Rvcnktc2VsZWN0b3InKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBzZWxl
Y3REaXJlY3RvcnkpOworICAkKCd0ZXN0LXNlbGVjdG9yJykuYWRkRXZlbnRMaXN0ZW5lcignY2hh
bmdlJywgc2VsZWN0VGVzdCk7CisgICQoJ25leHQtdGVzdCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns
aWNrJywgbmV4dFRlc3QpOworICAkKCdwcmV2aW91cy10ZXN0JykuYWRkRXZlbnRMaXN0ZW5lcign
Y2xpY2snLCBwcmV2aW91c1Rlc3QpOworCisgICQoJ2FkZC10by1yZWJhc2VsaW5lLXF1ZXVlJyku
YWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhZGRUb1JlYmFzZWxpbmVRdWV1ZSk7CisgICQoJ3F1
ZXVlLXNlbGVjdCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHVwZGF0ZVN0YXRlKTsKKyAg
JCgncmVtb3ZlLXF1ZXVlLXNlbGVjdGlvbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVt
b3ZlU2VsZWN0aW9uRnJvbVJlYmFzZWxpbmVRdWV1ZSk7CisgICQoJ3JlYmFzZWxpbmUtcXVldWUn
KS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlYmFzZWxpbmVRdWV1ZSk7CisKKyAgJCgnZXhw
ZWN0ZWQtaW1hZ2UnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHNob3dMb3VwZSk7CisgICQo
J2FjdHVhbC1pbWFnZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd0xvdXBlKTsKKyAg
JCgnZGlmZi1jYW52YXMnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHNob3dMb3VwZSk7Cisg
ICQoJ2xvdXBlLWNsb3NlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoaWRlTG91cGUpOwor
ICAkKCd0b2dnbGUtbG9nJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHt0
b2dnbGUoJ2xvZycpfSk7CisgICQoJ3RvZ2dsZS1xdWV1ZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns
aWNrJywgZnVuY3Rpb24oKSB7dG9nZ2xlKCdxdWV1ZScpfSk7CisKKyAgZG9jdW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKGV2ZW50LmFs
dEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkp
IHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChldmVudC5rZXlJZGVu
dGlmaWVyKSB7CisgICAgICBjYXNlICdMZWZ0JzogZXZlbnQucHJldmVudERlZmF1bHQoKTsgcHJl
dmlvdXNUZXN0KCk7IGJyZWFrOworICAgICAgY2FzZSAnUmlnaHQnOiBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOyBuZXh0VGVzdCgpOyBicmVhazsKKyAgICAgIGNhc2UgJ1UrMDA1MSc6IGFkZFRvUmVi
YXNlbGluZVF1ZXVlKCk7IGJyZWFrOworICAgICAgY2FzZSAnVSswMDUyJzogcmViYXNlbGluZVF1
ZXVlKCk7IGJyZWFrOworICAgIH0KKyAgfSk7CisgIAorICB2YXIgeGhyID0gbmV3IFhNTEh0dHBS
ZXF1ZXN0KCk7CisgIHhoci5vcGVuKCdHRVQnLCAnL3Jlc3VsdHMuanNvbicpOworICB4aHIuYWRk
RXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgeworICAgIHJlc3VsdHMgPSBKU09OLnBh
cnNlKHhoci5yZXNwb25zZVRleHQpOworICAgIGRpc3BsYXlSZXN1bHRzKCk7ICAKKyAgfSk7Cisg
IHhoci5zZW5kKCk7Cit9CisKK2Z1bmN0aW9uIGRpc3BsYXlSZXN1bHRzKCkgeworICB2YXIgZmFp
bHVyZVR5cGVTZWxlY3RvciA9ICQoJ2ZhaWx1cmUtdHlwZS1zZWxlY3RvcicpOworICB2YXIgZmFp
bHVyZVR5cGVzID0gW107CisgIAorICBmb3IgKHZhciB0ZXN0TmFtZSBpbiByZXN1bHRzLnRlc3Rz
KSB7CisgICAgdmFyIHRlc3QgPSByZXN1bHRzLnRlc3RzW3Rlc3ROYW1lXTsKKyAgICBpZiAodGVz
dC5hY3R1YWwgPT0gJ1BBU1MnKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgdmFyIGZh
aWx1cmVUeXBlID0gdGVzdC5hY3R1YWwgKyAnIChleHBlY3RlZCAnICsgdGVzdC5leHBlY3RlZCAr
ICcpJzsKKyAgICBpZiAoIShmYWlsdXJlVHlwZSBpbiB0ZXN0c0J5RmFpbHVyZVR5cGUpKSB7Cisg
ICAgICB0ZXN0c0J5RmFpbHVyZVR5cGVbZmFpbHVyZVR5cGVdID0gW107CisgICAgICBmYWlsdXJl
VHlwZXMucHVzaChmYWlsdXJlVHlwZSk7CisgICAgfQorICAgIHRlc3RzQnlGYWlsdXJlVHlwZVtm
YWlsdXJlVHlwZV0ucHVzaCh0ZXN0TmFtZSk7CisgIH0KKyAgCisgIGZhaWx1cmVUeXBlcy5zb3J0
KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICByZXR1cm4gdGVzdHNCeUZhaWx1cmVUeXBlW2JdLmxlbmd0
aCAtIHRlc3RzQnlGYWlsdXJlVHlwZVthXS5sZW5ndGg7CisgIH0pOworICAKKyAgZm9yICh2YXIg
aSA9IDAsIGZhaWx1cmVUeXBlOyBmYWlsdXJlVHlwZSA9IGZhaWx1cmVUeXBlc1tpXTsgaSsrKSB7
CisgICAgdmFyIGZhaWx1cmVUeXBlT3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0
aW9uJyk7CisgICAgZmFpbHVyZVR5cGVPcHRpb24udmFsdWUgPSBmYWlsdXJlVHlwZTsKKyAgICBm
YWlsdXJlVHlwZU9wdGlvbi50ZXh0Q29udGVudCA9IGZhaWx1cmVUeXBlICsgJyAtICcgKyB0ZXN0
c0J5RmFpbHVyZVR5cGVbZmFpbHVyZVR5cGVdLmxlbmd0aCArICcgdGVzdHMnOworICAgIGZhaWx1
cmVUeXBlU2VsZWN0b3IuYXBwZW5kQ2hpbGQoZmFpbHVyZVR5cGVPcHRpb24pOworICB9CisgIAor
ICBzZWxlY3RGYWlsdXJlVHlwZSgpOworICAKKyAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVt
b3ZlKCdsb2FkaW5nJyk7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdEZhaWx1cmVUeXBlKCkgeworICB2
YXIgc2VsZWN0ZWRGYWlsdXJlVHlwZSA9IGdldFNlbGVjdFZhbHVlKCdmYWlsdXJlLXR5cGUtc2Vs
ZWN0b3InKTsKKyAgdmFyIHRlc3RzID0gdGVzdHNCeUZhaWx1cmVUeXBlW3NlbGVjdGVkRmFpbHVy
ZVR5cGVdOworICAKKyAgLy8gSW5jbHVkZSBhIGFwZWNpYWwgb3B0aW9uIGZvciBhbGwgdGVzdHMK
KyAgdGVzdHNCeURpcmVjdG9yeSA9IHsnW2FsbF0nOiB0ZXN0c307CisgIHZhciBkaXNwbGF5RGly
ZWN0b3J5TmFtZXNCeURpcmVjdG9yeSA9IHsnW2FsbF0nOiAnYWxsJ307CisgIHZhciBkaXJlY3Rv
cmllcyA9IFsnW2FsbF0nXTsKKyAgCisgIGZvciAodmFyIGkgPSAwLCB0ZXN0OyB0ZXN0ID0gdGVz
dHNbaV07IGkrKykgeworICAgIHZhciBwYXRoUGllY2VzID0gdGVzdC5zcGxpdCgnLycpOworICAg
IHZhciBkaXJlY3RvcnkgPSAnJzsKKyAgICAKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhdGhQ
aWVjZXMubGVuZ3RoIC0gMTsgaisrKSB7CisgICAgICBkaXJlY3RvcnkgKz0gcGF0aFBpZWNlc1tq
XSArICcvJzsKKyAgICAgIGlmICghKGRpcmVjdG9yeSBpbiB0ZXN0c0J5RGlyZWN0b3J5KSkgewor
ICAgICAgICB0ZXN0c0J5RGlyZWN0b3J5W2RpcmVjdG9yeV0gPSBbXTsKKyAgICAgICAgdmFyIGRp
c3BsYXlEaXJlY3RvcnlOYW1lID0gbmV3IEFycmF5KGogKiA2KS5qb2luKCcmbmJzcDsnKSArIHBh
dGhQaWVjZXNbal07CisgICAgICAgIGRpc3BsYXlEaXJlY3RvcnlOYW1lc0J5RGlyZWN0b3J5W2Rp
cmVjdG9yeV0gPSBkaXNwbGF5RGlyZWN0b3J5TmFtZTsKKyAgICAgICAgZGlyZWN0b3JpZXMucHVz
aChkaXJlY3RvcnkpOworICAgICAgfQorICAgICAgCisgICAgICB0ZXN0c0J5RGlyZWN0b3J5W2Rp
cmVjdG9yeV0ucHVzaCh0ZXN0KTsKKyAgICB9CisgIH0KKyAgCisgIGRpcmVjdG9yaWVzLnNvcnQo
KTsKKworICB2YXIgZGlyZWN0b3J5U2VsZWN0b3IgPSAkKCdkaXJlY3Rvcnktc2VsZWN0b3InKTsg
IAorICBkaXJlY3RvcnlTZWxlY3Rvci5pbm5lckhUTUwgPSAnJzsKKyAgCisgIGZvciAodmFyIGkg
PSAwLCBkaXJlY3Rvcnk7IGRpcmVjdG9yeSA9IGRpcmVjdG9yaWVzW2ldOyBpKyspIHsKKyAgICB2
YXIgZGlyZWN0b3J5T3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7Cisg
ICAgZGlyZWN0b3J5T3B0aW9uLnZhbHVlID0gZGlyZWN0b3J5OworICAgIGRpcmVjdG9yeU9wdGlv
bi5pbm5lckhUTUwgPQorICAgICAgICBkaXNwbGF5RGlyZWN0b3J5TmFtZXNCeURpcmVjdG9yeVtk
aXJlY3RvcnldICsgJyAtICcgKworICAgICAgICB0ZXN0c0J5RGlyZWN0b3J5W2RpcmVjdG9yeV0u
bGVuZ3RoICsgJyB0ZXN0cyc7CisgICAgZGlyZWN0b3J5U2VsZWN0b3IuYXBwZW5kQ2hpbGQoZGly
ZWN0b3J5T3B0aW9uKTsgICAgCisgIH0KKyAgCisgIHNlbGVjdERpcmVjdG9yeSgpOworfQorCitm
dW5jdGlvbiBzZWxlY3REaXJlY3RvcnkoKSB7CisgIHZhciBwcmV2aW91c2x5U2VsZWN0ZWRUZXN0
ID0gZ2V0U2VsZWN0ZWRUZXN0KCk7CisgIAorICB2YXIgc2VsZWN0ZWREaXJlY3RvcnkgPSBnZXRT
ZWxlY3RWYWx1ZSgnZGlyZWN0b3J5LXNlbGVjdG9yJyk7CisgIHNlbGVjdGVkVGVzdHMgPSB0ZXN0
c0J5RGlyZWN0b3J5W3NlbGVjdGVkRGlyZWN0b3J5XTsKKworICBzZWxlY3RlZFRlc3RzLnNvcnQo
KTsKKworICB2YXIgdGVzdFNlbGVjdG9yID0gJCgndGVzdC1zZWxlY3RvcicpOworICB0ZXN0U2Vs
ZWN0b3IuaW5uZXJIVE1MID0gJyc7CisgIHZhciB0ZXN0c0J5U3RhdGUgPSB7fTsKKyAgCisgIHNl
bGVjdGVkVGVzdHMuZm9yRWFjaChmdW5jdGlvbih0ZXN0TmFtZSkgeworICAgIHZhciBzdGF0ZSA9
IHJlc3VsdHMudGVzdHNbdGVzdE5hbWVdLnN0YXRlOworICAgIGlmIChzdGF0ZSA9PSBTVEFURV9J
Tl9RVUVVRSkgeworICAgICAgc3RhdGUgPSBTVEFURV9ORUVEU19SRUJBU0VMSU5FOworICAgIH0K
KyAgICBpZiAoIShzdGF0ZSBpbiB0ZXN0c0J5U3RhdGUpKSB7CisgICAgICB0ZXN0c0J5U3RhdGVb
c3RhdGVdID0gW107CisgICAgfQorICAgIHRlc3RzQnlTdGF0ZVtzdGF0ZV0ucHVzaCh0ZXN0TmFt
ZSk7CisgIH0pOworICAKKyAgdmFyIG9wdGlvbkluZGV4QnlUZXN0ID0ge307CisgIAorICBmb3Ig
KHZhciBzdGF0ZSBpbiB0ZXN0c0J5U3RhdGUpIHsKKyAgICB2YXIgc3RhdGVPcHRpb24gPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKKyAgICBzdGF0ZU9wdGlvbi50ZXh0Q29udGVu
dCA9IFNUQVRFX1RPX0RJU1BMQVlfU1RBVEVbc3RhdGVdOworICAgIHN0YXRlT3B0aW9uLmRpc2Fi
bGVkID0gdHJ1ZTsKKyAgICB0ZXN0U2VsZWN0b3IuYXBwZW5kQ2hpbGQoc3RhdGVPcHRpb24pOyAg
ICAKKyAgICAKKyAgICB0ZXN0c0J5U3RhdGVbc3RhdGVdLmZvckVhY2goZnVuY3Rpb24odGVzdE5h
bWUpIHsKKyAgICAgIHZhciB0ZXN0T3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0
aW9uJyk7CisgICAgICB0ZXN0T3B0aW9uLnZhbHVlID0gdGVzdE5hbWU7CisgICAgICB2YXIgdGVz
dERpc3BsYXlOYW1lID0gdGVzdE5hbWU7CisgICAgICBpZiAodGVzdE5hbWUubGFzdEluZGV4T2Yo
c2VsZWN0ZWREaXJlY3RvcnkpID09IDApIHsKKyAgICAgICAgdGVzdERpc3BsYXlOYW1lID0gdGVz
dE5hbWUuc3Vic3RyaW5nKHNlbGVjdGVkRGlyZWN0b3J5Lmxlbmd0aCk7CisgICAgICB9CisgICAg
ICB0ZXN0T3B0aW9uLmlubmVySFRNTCA9ICcmbmJzcDsmbmJzcDsnICsgdGVzdERpc3BsYXlOYW1l
OworICAgICAgb3B0aW9uSW5kZXhCeVRlc3RbdGVzdE5hbWVdID0gdGVzdFNlbGVjdG9yLm9wdGlv
bnMubGVuZ3RoOworICAgICAgdGVzdFNlbGVjdG9yLmFwcGVuZENoaWxkKHRlc3RPcHRpb24pOyAg
ICAgIAorICAgIH0pOworICB9CisgIAorICBpZiAocHJldmlvdXNseVNlbGVjdGVkVGVzdCBpbiBv
cHRpb25JbmRleEJ5VGVzdCkgeworICAgIHRlc3RTZWxlY3Rvci5zZWxlY3RlZEluZGV4ID0gb3B0
aW9uSW5kZXhCeVRlc3RbcHJldmlvdXNseVNlbGVjdGVkVGVzdF07CisgIH0gZWxzZSBpZiAoU1RB
VEVfTkVFRFNfUkVCQVNFTElORSBpbiB0ZXN0c0J5U3RhdGUpIHsKKyAgICB0ZXN0U2VsZWN0b3Iu
c2VsZWN0ZWRJbmRleCA9IG9wdGlvbkluZGV4QnlUZXN0W3Rlc3RzQnlTdGF0ZVtTVEFURV9ORUVE
U19SRUJBU0VMSU5FXVswXV07CisgICAgc2VsZWN0VGVzdCgpOyAgICAKKyAgfSBlbHNlIHsKKyAg
ICB0ZXN0U2VsZWN0b3Iuc2VsZWN0ZWRJbmRleCA9IDE7CisgICAgc2VsZWN0VGVzdCgpOyAgICAK
KyAgfQorfQorCitmdW5jdGlvbiBnZXRTZWxlY3RWYWx1ZShpZCkgeworICB2YXIgc2VsZWN0ID0g
JChpZCk7CisgIGlmIChzZWxlY3Quc2VsZWN0ZWRJbmRleCA9PSAtMSkgeworICAgIHJldHVybiBu
dWxsOworICB9IGVsc2UgeworICAgIHJldHVybiBzZWxlY3Qub3B0aW9uc1tzZWxlY3Quc2VsZWN0
ZWRJbmRleF0udmFsdWU7CisgfQorfQorCitmdW5jdGlvbiBnZXRTZWxlY3RlZFRlc3QoKSB7Cisg
IHJldHVybiBnZXRTZWxlY3RWYWx1ZSgndGVzdC1zZWxlY3RvcicpOworfQorCitmdW5jdGlvbiBw
cmVmZXRjaCgpIHsKKyAgdmFyIHRlc3RTZWxlY3RvciA9ICQoJ3Rlc3Qtc2VsZWN0b3InKTsKKyAg
aWYgKHRlc3RTZWxlY3Rvci5zZWxlY3RlZEluZGV4ID09IHRlc3RTZWxlY3Rvci5vcHRpb25zLmxl
bmd0aCAtIDEpIHsKKyAgICByZXR1cm47CisgIH0KKyAgdmFyIG5leHRUZXN0ID0gdGVzdFNlbGVj
dG9yLm9wdGlvbnNbdGVzdFNlbGVjdG9yLnNlbGVjdGVkSW5kZXggKyAxXS52YWx1ZTsKKyAgaWYg
KHJlc3VsdHMudGVzdHNbbmV4dFRlc3RdLmFjdHVhbC5pbmRleE9mKCdJTUFHRScpICE9IC0xKSB7
CisgICAgbmV3IEltYWdlKCkuc3JjID0gJy90ZXN0X3Jlc3VsdD90ZXN0PScgKyBuZXh0VGVzdCAr
ICcmbW9kZT1leHBlY3RlZC1pbWFnZSc7CisgICAgbmV3IEltYWdlKCkuc3JjID0gJy90ZXN0X3Jl
c3VsdD90ZXN0PScgKyBuZXh0VGVzdCArICcmbW9kZT1hY3R1YWwtaW1hZ2UnOyAgICAKKyAgfQor
fQorCitmdW5jdGlvbiBzZWxlY3RUZXN0KCkgeworICB2YXIgc2VsZWN0ZWRUZXN0ID0gZ2V0U2Vs
ZWN0ZWRUZXN0KCk7CisgIAorICBpZiAocmVzdWx0cy50ZXN0c1tzZWxlY3RlZFRlc3RdLmFjdHVh
bC5pbmRleE9mKCdJTUFHRScpICE9IC0xKSB7CisgICAgJCgnaW1hZ2Utb3V0cHV0cycpLnN0eWxl
LmRpc3BsYXkgPSAnJzsKKyAgICBkaXNwbGF5SW1hZ2VSZXN1bHRzKHNlbGVjdGVkVGVzdCk7Cisg
IH0gZWxzZSB7CisgICAgJCgnaW1hZ2Utb3V0cHV0cycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7
ICAKKyAgfQorCisgIGlmIChyZXN1bHRzLnRlc3RzW3NlbGVjdGVkVGVzdF0uYWN0dWFsLmluZGV4
T2YoJ1RFWFQnKSAhPSAtMSkgeworICAgICQoJ3RleHQtb3V0cHV0cycpLnN0eWxlLmRpc3BsYXkg
PSAnJzsKKyAgICBkaXNwbGF5VGV4dFJlc3VsdHMoc2VsZWN0ZWRUZXN0KTsKKyAgfSBlbHNlIHsK
KyAgICAkKCd0ZXh0LW91dHB1dHMnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAgCisgIH0KKyAg
CisgIHZhciBjdXJyZW50QmFzZWxpbmVzID0gJCgnY3VycmVudC1iYXNlbGluZXMnKTsKKyAgY3Vy
cmVudEJhc2VsaW5lcy50ZXh0Q29udGVudCA9ICcnOworICB2YXIgYmFzZWxpbmVzID0gcmVzdWx0
cy50ZXN0c1tzZWxlY3RlZFRlc3RdLmJhc2VsaW5lczsKKyAgdmFyIHRlc3ROYW1lID0gc2VsZWN0
ZWRUZXN0LnNwbGl0KCcuJykuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKTsKKyAgZm9yICh2YXIgcGxh
dGZvcm0gaW4gYmFzZWxpbmVzKSB7CisgICAgaWYgKGN1cnJlbnRCYXNlbGluZXMuZmlyc3RDaGls
ZCkgeworICAgICAgY3VycmVudEJhc2VsaW5lcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgnOyAnKSk7CisgICAgfQorICAgIGN1cnJlbnRCYXNlbGluZXMuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGxhdGZvcm0gKyAnICgnKSk7CisgICAgZm9yICh2YXIg
aSA9IDAsIGV4dGVuc2lvbjsgZXh0ZW5zaW9uID0gYmFzZWxpbmVzW3BsYXRmb3JtXVtpXTsgaSsr
KSB7CisgICAgICBpZiAoaSAhPSAwKSB7CisgICAgICAgIGN1cnJlbnRCYXNlbGluZXMuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJywgJykpOworICAgICAgfQorICAgICAgdmFy
IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CisgICAgICB2YXIgYmFzZWxpbmVU
cmFjVXJsID0gJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvbG9nL3RydW5rL0xheW91dFRlc3RzLyc7
CisgICAgICBpZiAocGxhdGZvcm0gIT0gJ2Jhc2UnKSB7CisgICAgICAgIGJhc2VsaW5lVHJhY1Vy
bCArPSAncGxhdGZvcm0vJyArIHBsYXRmb3JtICsgJy8nOworICAgICAgfQorICAgICAgYmFzZWxp
bmVUcmFjVXJsICs9IHRlc3ROYW1lICsgJy1leHBlY3RlZCcgKyBleHRlbnNpb247CisgICAgICBs
aW5rLmhyZWYgPSBiYXNlbGluZVRyYWNVcmw7CisgICAgICBpZiAoZXh0ZW5zaW9uID09ICcuY2hl
Y2tzdW0nKSB7CisgICAgICAgIGxpbmsudGV4dENvbnRlbnQgPSAnY2hrJzsgICAgICAKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIGxpbmsudGV4dENvbnRlbnQgPSBleHRlbnNpb24uc3Vic3RyaW5n
KDEpOworICAgICAgfQorICAgICAgY3VycmVudEJhc2VsaW5lcy5hcHBlbmRDaGlsZChsaW5rKTsK
KyAgICB9CisgICAgY3VycmVudEJhc2VsaW5lcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgnKScpKTsKKyAgfQorICAKKyAgdXBkYXRlU3RhdGUoKTsKKyAgaGlkZUxvdXBlKCk7
CisgIAorICBwcmVmZXRjaCgpOworfQorCitmdW5jdGlvbiB1cGRhdGVTdGF0ZSgpIHsKKyAgdmFy
IHRlc3ROYW1lID0gZ2V0U2VsZWN0ZWRUZXN0KCk7CisgIHZhciB0ZXN0SW5kZXggPSBzZWxlY3Rl
ZFRlc3RzLmluZGV4T2YodGVzdE5hbWUpOworICB2YXIgdGVzdENvdW50ID0gc2VsZWN0ZWRUZXN0
cy5sZW5ndGgKKyAgJCgndGVzdC1pbmRleCcpLnRleHRDb250ZW50ID0gdGVzdEluZGV4ICsgMTsK
KyAgJCgndGVzdC1jb3VudCcpLnRleHRDb250ZW50ID0gdGVzdENvdW50OworICAKKyAgJCgnbmV4
dC10ZXN0JykuZGlzYWJsZWQgPSB0ZXN0SW5kZXggPT0gdGVzdENvdW50IC0gMTsKKyAgJCgncHJl
dmlvdXMtdGVzdCcpLmRpc2FibGVkID0gdGVzdEluZGV4ID09IDA7CisgIAorICB2YXIgc3RhdGUg
PSByZXN1bHRzLnRlc3RzW3Rlc3ROYW1lXS5zdGF0ZTsKKyAgJCgnYWRkLXRvLXJlYmFzZWxpbmUt
cXVldWUnKS5kaXNhYmxlZCA9IHN0YXRlICE9IFNUQVRFX05FRURTX1JFQkFTRUxJTkU7CisgIAor
ICAkKCd0ZXN0LWxpbmsnKS5ocmVmID0KKyAgICAgICdodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jy
b3dzZXIvdHJ1bmsvTGF5b3V0VGVzdHMvJyArIHRlc3ROYW1lOworICAKKyAgJCgnc3RhdGUnKS5j
bGFzc05hbWUgPSBzdGF0ZTsKKyAgJCgnc3RhdGUnKS5pbm5lckhUTUwgPSBTVEFURV9UT19ESVNQ
TEFZX1NUQVRFW3N0YXRlXTsKKyAgCisgIHZhciBxdWV1ZVNlbGVjdCA9ICQoJ3F1ZXVlLXNlbGVj
dCcpOworICB2YXIgcXVldWVMZW5ndGggPSBxdWV1ZVNlbGVjdC5vcHRpb25zLmxlbmd0aDsKKyAg
dmFyIHJlYmFzZWxpbmVRdWV1ZSA9ICQoJ3JlYmFzZWxpbmUtcXVldWUnKTsKKyAgdmFyIHF1ZXVl
VG9nZ2xlID0gJCgndG9nZ2xlLXF1ZXVlJyk7CisgIGlmIChpblByb2dyZXNzUmViYXNlbGluZUNv
dW50ID4gMCkgeworICAgIHJlYmFzZWxpbmVRdWV1ZS5kaXNhYmxlZCA9IHRydWU7CisgICAgcmVi
YXNlbGluZVF1ZXVlLnRleHRDb250ZW50ID0gJ1JlYmFzZWxpbmUgaW4gcHJvZ3Jlc3MgKCcgKyBp
blByb2dyZXNzUmViYXNlbGluZUNvdW50ICsgJyB0ZXN0cyBsZWZ0KSc7CisgIH0gZWxzZSBpZiAo
cXVldWVMZW5ndGggPT0gMCkgeworICAgIHJlYmFzZWxpbmVRdWV1ZS5kaXNhYmxlZCA9IHRydWU7
CisgICAgcmViYXNlbGluZVF1ZXVlLnRleHRDb250ZW50ID0gJ1JlYmFzZWxpbmUgcXVldWUnOwor
ICAgIHF1ZXVlVG9nZ2xlLnRleHRDb250ZW50ID0gJ1F1ZXVlJzsKKyAgfSBlbHNlIHsKKyAgICBy
ZWJhc2VsaW5lUXVldWUuZGlzYWJsZWQgPSBmYWxzZTsKKyAgICByZWJhc2VsaW5lUXVldWUudGV4
dENvbnRlbnQgPSAnUmViYXNlbGluZSBxdWV1ZSAoJyArIHF1ZXVlTGVuZ3RoICsgJyB0ZXN0cykn
OworICAgIHF1ZXVlVG9nZ2xlLnRleHRDb250ZW50ID0gJ1F1ZXVlICgnICsgcXVldWVMZW5ndGgg
KyAnIHRlc3RzKSc7CisgIH0KKyAgJCgncmVtb3ZlLXF1ZXVlLXNlbGVjdGlvbicpLmRpc2FibGVk
ID0gcXVldWVTZWxlY3Quc2VsZWN0ZWRJbmRleCA9PSAtMTsKKyAgCisgIHNlbGVjdERpcmVjdG9y
eSgpOworfQorCit2YXIgY3VycmVudEV4cGVjdGVkSW1hZ2VUZXN0OwordmFyIGN1cnJlbnRBY3R1
YWxJbWFnZVRlc3Q7CisKK2Z1bmN0aW9uIGRpc3BsYXlJbWFnZVJlc3VsdHModGVzdE5hbWUpIHsK
KyAgaWYgKGN1cnJlbnRFeHBlY3RlZEltYWdlVGVzdCA9PSBjdXJyZW50QWN0dWFsSW1hZ2VUZXN0
ICYmCisgICAgICBjdXJyZW50RXhwZWN0ZWRJbWFnZVRlc3QgPT0gdGVzdE5hbWUpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgdmFyIGV4cGVjdGVkSW1hZ2UgPSAkKCdleHBlY3RlZC1pbWFnZScpOwor
ICB2YXIgYWN0dWFsSW1hZ2UgPSAkKCdhY3R1YWwtaW1hZ2UnKTsKKworICBleHBlY3RlZEltYWdl
LmNsYXNzTmFtZSA9ICdsb2FkaW5nJzsKKyAgZXhwZWN0ZWRJbWFnZS5zcmMgPSAnL3Rlc3RfcmVz
dWx0P3Rlc3Q9JyArIHRlc3ROYW1lICsgJyZtb2RlPWV4cGVjdGVkLWltYWdlJzsKKyAgZXhwZWN0
ZWRJbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICBleHBlY3RlZEltYWdlLmNsYXNzTmFt
ZSA9ICcnOworICAgIGN1cnJlbnRFeHBlY3RlZEltYWdlVGVzdCA9IHRlc3ROYW1lOworICAgIHVw
ZGF0ZURpZmYoKTsKKyAgfTsKKyAgCisgIGFjdHVhbEltYWdlLmNsYXNzTmFtZSA9ICdsb2FkaW5n
JzsKKyAgYWN0dWFsSW1hZ2Uuc3JjID0gJy90ZXN0X3Jlc3VsdD90ZXN0PScgKyB0ZXN0TmFtZSAr
ICcmbW9kZT1hY3R1YWwtaW1hZ2UnOworICBhY3R1YWxJbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigp
IHsKKyAgICBhY3R1YWxJbWFnZS5jbGFzc05hbWUgPSAnJzsKKyAgICBjdXJyZW50QWN0dWFsSW1h
Z2VUZXN0ID0gdGVzdE5hbWU7CisgICAgdXBkYXRlRGlmZigpOworICB9OworICAKKyAgJCgnZGlm
Zi1jYW52YXMnKS5jbGFzc05hbWUgPSAnbG9hZGluZyc7CisgICQoJ2RpZmYtY2FudmFzJykuc3R5
bGUuZGlzcGxheSA9ICcnOworICAkKCdkaWZmLWNoZWNrc3VtJykuc3R5bGUuZGlzcGxheSA9ICdu
b25lJzsKK30KKwordmFyIGV4cGVjdGVkQ2FudmFzOwordmFyIGV4cGVjdGVkQ2FudmFzQ29udGV4
dDsKK3ZhciBhY3R1YWxDYW52YXM7Cit2YXIgYWN0dWFsQ2FudmFzQ29udGV4dDsKKworZnVuY3Rp
b24gdXBkYXRlRGlmZigpIHsKKyAgaWYgKGN1cnJlbnRFeHBlY3RlZEltYWdlVGVzdCAhPSBjdXJy
ZW50QWN0dWFsSW1hZ2VUZXN0KSByZXR1cm47CisKKyAgdmFyIGV4cGVjdGVkSW1hZ2UgPSAkKCdl
eHBlY3RlZC1pbWFnZScpOworICB2YXIgYWN0dWFsSW1hZ2UgPSAkKCdhY3R1YWwtaW1hZ2UnKTsK
KyAKKyAgaWYgKCFleHBlY3RlZENhbnZhcykgeworICAgIGV4cGVjdGVkQ2FudmFzID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CisgICAgZXhwZWN0ZWRDYW52YXMud2lkdGggPSBl
eHBlY3RlZEltYWdlLndpZHRoOworICAgIGV4cGVjdGVkQ2FudmFzLmhlaWdodCA9IGV4cGVjdGVk
SW1hZ2UuaGVpZ2h0OworICAgIGV4cGVjdGVkQ2FudmFzQ29udGV4dCA9IGV4cGVjdGVkQ2FudmFz
LmdldENvbnRleHQoJzJkJyk7CisgICAgCisgICAgYWN0dWFsQ2FudmFzID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnY2FudmFzJyk7CisgICAgYWN0dWFsQ2FudmFzLndpZHRoID0gYWN0dWFsSW1h
Z2Uud2lkdGg7CisgICAgYWN0dWFsQ2FudmFzLmhlaWdodCA9IGFjdHVhbEltYWdlLmhlaWdodDsK
KyAgICBhY3R1YWxDYW52YXNDb250ZXh0ID0gYWN0dWFsQ2FudmFzLmdldENvbnRleHQoJzJkJyk7
CisgIH0KKyAgCisgIGV4cGVjdGVkQ2FudmFzQ29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgyNTUs
IDI1NSwgMjU1LCAxKSc7CisgIGV4cGVjdGVkQ2FudmFzQ29udGV4dC5maWxsUmVjdCgKKyAgICAg
IDAsIDAsIGV4cGVjdGVkSW1hZ2Uud2lkdGgsIGV4cGVjdGVkSW1hZ2UuaGVpZ2h0KTsKKworICBh
Y3R1YWxDYW52YXNDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDEpJzsK
KyAgYWN0dWFsQ2FudmFzQ29udGV4dC5maWxsUmVjdCgwLCAwLCBhY3R1YWxJbWFnZS53aWR0aCwg
YWN0dWFsSW1hZ2UuaGVpZ2h0KTsKKyAgCisgIGV4cGVjdGVkQ2FudmFzQ29udGV4dC5kcmF3SW1h
Z2UoZXhwZWN0ZWRJbWFnZSwgMCwgMCk7CisgIHZhciBleHBlY3RlZEltYWdlRGF0YSA9IGV4cGVj
dGVkQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoCisgICAgICAwLCAwLCBleHBlY3RlZEltYWdl
LndpZHRoLCBleHBlY3RlZEltYWdlLmhlaWdodCk7CisKKyAgYWN0dWFsQ2FudmFzQ29udGV4dC5k
cmF3SW1hZ2UoYWN0dWFsSW1hZ2UsIDAsIDApOworICB2YXIgYWN0dWFsSW1hZ2VEYXRhID0gYWN0
dWFsQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoCisgICAgICAwLCAwLCBhY3R1YWxJbWFnZS53
aWR0aCwgYWN0dWFsSW1hZ2UuaGVpZ2h0KTsKKyAgICAgIAorICB2YXIgZGlmZkNhbnZhcyA9ICQo
J2RpZmYtY2FudmFzJyk7CisgIHZhciBkaWZmQ2FudmFzQ29udGV4dCA9IGRpZmZDYW52YXMuZ2V0
Q29udGV4dCgnMmQnKTsKKyAgdmFyIGRpZmZJbWFnZURhdGEgPQorICAgICAgZGlmZkNhbnZhc0Nv
bnRleHQuY3JlYXRlSW1hZ2VEYXRhKGRpZmZDYW52YXMud2lkdGgsIGRpZmZDYW52YXMuaGVpZ2h0
KTsKKworICB2YXIgZXhwZWN0ZWRXaWR0aCA9IGV4cGVjdGVkSW1hZ2Uud2lkdGg7CisgIHZhciBl
eHBlY3RlZEhlaWdodCA9IGV4cGVjdGVkSW1hZ2UuaGVpZ2h0OworICB2YXIgZXhwZWN0ZWRQaXhl
bHMgPSBleHBlY3RlZEltYWdlRGF0YS5kYXRhOworICAKKyAgdmFyIGFjdHVhbFdpZHRoID0gYWN0
dWFsSW1hZ2Uud2lkdGg7CisgIHZhciBhY3R1YWxIZWlnaHQgPSBhY3R1YWxJbWFnZS5oZWlnaHQ7
CisgIHZhciBhY3R1YWxQaXhlbHMgPSBhY3R1YWxJbWFnZURhdGEuZGF0YTsKKworICB2YXIgZGlm
ZldpZHRoID0gZGlmZkltYWdlRGF0YS53aWR0aDsKKyAgdmFyIGRpZmZIZWlnaHQgPSBkaWZmSW1h
Z2VEYXRhLmhlaWdodDsKKyAgdmFyIGRpZmZQaXhlbHMgPSBkaWZmSW1hZ2VEYXRhLmRhdGE7Cisg
IAorICB2YXIgaGFkRGlmZiA9IGZhbHNlOworICBmb3IgKHZhciB4ID0gMDsgeCA8IGV4cGVjdGVk
V2lkdGg7IHgrKykgeworICAgIGZvciAodmFyIHkgPSAwOyB5IDwgZXhwZWN0ZWRIZWlnaHQ7IHkr
KykgeworICAgICAgdmFyIGlzRGlmZmVyZW50ID0gZmFsc2U7CisgICAgICB2YXIgZXhwZWN0ZWRP
ZmZzZXQgPSAoeSAqIGV4cGVjdGVkV2lkdGggKyB4KSAqIDQ7CisgICAgICB2YXIgYWN0dWFsT2Zm
c2V0ID0gKHkgKiBhY3R1YWxXaWR0aCArIHgpICogNDsKKyAgICAgIHZhciBkaWZmT2Zmc2V0ID0g
KHkgKiBkaWZmV2lkdGggKyB4KSAqIDQ7CisgICAgICBpZiAoZXhwZWN0ZWRQaXhlbHNbZXhwZWN0
ZWRPZmZzZXRdICE9IGFjdHVhbFBpeGVsc1thY3R1YWxPZmZzZXRdIHx8CisgICAgICAgICAgZXhw
ZWN0ZWRQaXhlbHNbZXhwZWN0ZWRPZmZzZXQgKyAxXSAhPSBhY3R1YWxQaXhlbHNbYWN0dWFsT2Zm
c2V0ICsgMV0gfHwKKyAgICAgICAgICBleHBlY3RlZFBpeGVsc1tleHBlY3RlZE9mZnNldCArIDJd
ICE9IGFjdHVhbFBpeGVsc1thY3R1YWxPZmZzZXQgKyAyXSB8fAorICAgICAgICAgIGV4cGVjdGVk
UGl4ZWxzW2V4cGVjdGVkT2Zmc2V0ICsgM10gIT0gYWN0dWFsUGl4ZWxzW2FjdHVhbE9mZnNldCAr
IDNdKSB7CisgICAgICAgIGhhZERpZmYgPSB0cnVlOworICAgICAgICBkaWZmUGl4ZWxzW2RpZmZP
ZmZzZXRdID0gMjU1OworICAgICAgICBkaWZmUGl4ZWxzW2RpZmZPZmZzZXQgKyAxXSA9IDA7Cisg
ICAgICAgIGRpZmZQaXhlbHNbZGlmZk9mZnNldCArIDJdID0gMDsKKyAgICAgICAgZGlmZlBpeGVs
c1tkaWZmT2Zmc2V0ICsgM10gPSAyNTU7CisgICAgICB9IGVsc2UgeworICAgICAgICBkaWZmUGl4
ZWxzW2RpZmZPZmZzZXRdID0gZXhwZWN0ZWRQaXhlbHNbZXhwZWN0ZWRPZmZzZXRdOworICAgICAg
ICBkaWZmUGl4ZWxzW2RpZmZPZmZzZXQgKyAxXSA9IGV4cGVjdGVkUGl4ZWxzW2V4cGVjdGVkT2Zm
c2V0ICsgMV07CisgICAgICAgIGRpZmZQaXhlbHNbZGlmZk9mZnNldCArIDJdID0gZXhwZWN0ZWRQ
aXhlbHNbZXhwZWN0ZWRPZmZzZXQgKyAyXTsKKyAgICAgICAgZGlmZlBpeGVsc1tkaWZmT2Zmc2V0
ICsgM10gPSAzMjsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgCisgIGRpZmZDYW52YXNDb250ZXh0
LnB1dEltYWdlRGF0YSgKKyAgICAgIGRpZmZJbWFnZURhdGEsCisgICAgICAwLCAwLAorICAgICAg
MCwgMCwKKyAgICAgIGRpZmZJbWFnZURhdGEud2lkdGgsIGRpZmZJbWFnZURhdGEuaGVpZ2h0KTsK
KyAgZGlmZkNhbnZhcy5jbGFzc05hbWUgPSAnJzsKKyAgCisgIGlmICghaGFkRGlmZikgeworICAg
IGRpZmZDYW52YXMuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAkKCdkaWZmLWNoZWNrc3Vt
Jykuc3R5bGUuZGlzcGxheSA9ICcnOyAgICAKKyAgICBsb2FkVGV4dFRlc3RSZXN1bHQoCisgICAg
ICBjdXJyZW50RXhwZWN0ZWRJbWFnZVRlc3QsICdleHBlY3RlZC1jaGVja3N1bScsICQoJ2V4cGVj
dGVkLWNoZWNrc3VtJykpOworICAgIGxvYWRUZXh0VGVzdFJlc3VsdCgKKyAgICAgICAgY3VycmVu
dEV4cGVjdGVkSW1hZ2VUZXN0LCAnYWN0dWFsLWNoZWNrc3VtJywgJCgnYWN0dWFsLWNoZWNrc3Vt
JykpOworICB9Cit9CisKK2Z1bmN0aW9uIGxvYWRUZXh0VGVzdFJlc3VsdCh0ZXN0TmFtZSwgbW9k
ZSwgZGVzdGluYXRpb24pIHsKKyAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICB4
aHIub3BlbignR0VUJywgJy90ZXN0X3Jlc3VsdD90ZXN0PScgKyB0ZXN0TmFtZSArICcmbW9kZT0n
ICsgbW9kZSk7CisgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7Cisg
ICAgZGVzdGluYXRpb24udGV4dENvbnRlbnQgPSB4aHIucmVzcG9uc2VUZXh0OworICB9KTsKKyAg
eGhyLnNlbmQoKTsgCit9CisKK2Z1bmN0aW9uIGRpc3BsYXlUZXh0UmVzdWx0cyh0ZXN0TmFtZSkg
eworICBmdW5jdGlvbiBsb2FkVGV4dFJlc3VsdCh0eXBlKSB7CisgICAgbG9hZFRleHRUZXN0UmVz
dWx0KHRlc3ROYW1lLCB0eXBlLCAkKHR5cGUpKTsKKyAgfQorICAKKyAgbG9hZFRleHRSZXN1bHQo
J2V4cGVjdGVkLXRleHQnKTsKKyAgbG9hZFRleHRSZXN1bHQoJ2FjdHVhbC10ZXh0Jyk7CisgIGxv
YWRUZXh0UmVzdWx0KCdkaWZmLXRleHQnKTsKK30KKworZnVuY3Rpb24gbmV4dFRlc3QoKSB7Cisg
IHZhciB0ZXN0U2VsZWN0b3IgPSAkKCd0ZXN0LXNlbGVjdG9yJyk7CisgIHZhciBuZXh0VGVzdElu
ZGV4ID0gdGVzdFNlbGVjdG9yLnNlbGVjdGVkSW5kZXggKyAxOworICB3aGlsZSAodHJ1ZSkgewor
ICAgIGlmIChuZXh0VGVzdEluZGV4ID09IHRlc3RTZWxlY3Rvci5vcHRpb25zLmxlbmd0aCkgewor
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodGVzdFNlbGVjdG9yLm9wdGlvbnNbbmV4dFRl
c3RJbmRleF0uZGlzYWJsZWQpIHsKKyAgICAgIG5leHRUZXN0SW5kZXgrKzsKKyAgICB9IGVsc2Ug
eworICAgICAgdGVzdFNlbGVjdG9yLnNlbGVjdGVkSW5kZXggPSBuZXh0VGVzdEluZGV4OworICAg
ICAgc2VsZWN0VGVzdCgpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorfQorCitmdW5jdGlv
biBwcmV2aW91c1Rlc3QoKSB7CisgIHZhciB0ZXN0U2VsZWN0b3IgPSAkKCd0ZXN0LXNlbGVjdG9y
Jyk7CisgIHZhciBwcmV2aW91c1Rlc3RJbmRleCA9IHRlc3RTZWxlY3Rvci5zZWxlY3RlZEluZGV4
IC0gMTsKKyAgd2hpbGUgKHRydWUpIHsKKyAgICBpZiAocHJldmlvdXNUZXN0SW5kZXggPT0gLTEp
IHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRlc3RTZWxlY3Rvci5vcHRpb25zW3By
ZXZpb3VzVGVzdEluZGV4XS5kaXNhYmxlZCkgeworICAgICAgcHJldmlvdXNUZXN0SW5kZXgtLTsK
KyAgICB9IGVsc2UgeworICAgICAgdGVzdFNlbGVjdG9yLnNlbGVjdGVkSW5kZXggPSBwcmV2aW91
c1Rlc3RJbmRleDsKKyAgICAgIHNlbGVjdFRlc3QoKTsKKyAgICAgIHJldHVybgorICAgIH0KKyAg
fQorfQorCitmdW5jdGlvbiBzaG93TG91cGUoZXZlbnQpIHsKKyAgLy8gVGhlIC0xIGNvbXBlbnNh
dGVzIGZvciB0aGUgYm9yZGVyIGFyb3VuZCB0aGUgaW1hZ2UvY2FudmFzLgorICB2YXIgeCA9IGV2
ZW50Lm9mZnNldFggLSAxOworICB2YXIgeSA9IGV2ZW50Lm9mZnNldFkgLSAxOworICAKKyAgZmls
bExvdXBlRnJvbUltYWdlKHgsIHksICdleHBlY3RlZCcsICQoJ2V4cGVjdGVkLWltYWdlJykpOwor
ICBmaWxsTG91cGVGcm9tSW1hZ2UoeCwgeSwgJ2FjdHVhbCcsICQoJ2FjdHVhbC1pbWFnZScpKTsK
KyAgZmlsbExvdXBlRnJvbUNhbnZhcyh4LCB5LCAnZGlmZicsICQoJ2RpZmYtY2FudmFzJykpOwor
ICAKKyAgJCgnbG91cGUnKS5zdHlsZS5kaXNwbGF5ID0gJyc7Cit9CisKK3ZhciBMT1VQRV9NQUdO
SUZJQ0FUSU9OX0ZBQ1RPUiA9IDEwOworCitmdW5jdGlvbiBmaWxsTG91cGVGcm9tSW1hZ2UoeCwg
eSwgdHlwZSkgeworICB2YXIgc291cmNlSW1hZ2UgPSAkKHR5cGUgKyAnLWltYWdlJyk7ICAKKwor
ICB2YXIgdGVtcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOworICB0
ZW1wQ2FudmFzLndpZHRoID0gc291cmNlSW1hZ2Uud2lkdGg7CisgIHRlbXBDYW52YXMuaGVpZ2h0
ID0gc291cmNlSW1hZ2UuaGVpZ2h0OworICB2YXIgdGVtcENvbnRleHQgPSB0ZW1wQ2FudmFzLmdl
dENvbnRleHQoJzJkJyk7CisgIAorICB0ZW1wQ29udGV4dC5kcmF3SW1hZ2Uoc291cmNlSW1hZ2Us
IDAsIDApOworICAKKyAgZmlsbExvdXBlRnJvbUNhbnZhcyh4LCB5LCB0eXBlLCB0ZW1wQ2FudmFz
KTsKK30KKworZnVuY3Rpb24gZmlsbExvdXBlRnJvbUNhbnZhcyh4LCB5LCB0eXBlLCBjYW52YXMp
IHsKKyAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAgdmFyIHNvdXJj
ZUltYWdlRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNhbnZhcy53aWR0aCwgY2Fu
dmFzLmhlaWdodCk7CisKKyAgdmFyIHRhcmdldENhbnZhcyA9ICQodHlwZSArICctbG91cGUnKTsK
KyAgdmFyIHRhcmdldENvbnRleHQgPSB0YXJnZXRDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKyAg
dGFyZ2V0Q29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgyNTUsIDI1NSwgMjU1LCAxKSc7CisgIHRh
cmdldENvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGFyZ2V0Q2FudmFzLndpZHRoLCB0YXJnZXRDYW52
YXMuaGVpZ2h0KTsgIAorICAKKyAgdmFyIHNvdXJjZVhPZmZzZXQgPSAodGFyZ2V0Q2FudmFzLndp
ZHRoL0xPVVBFX01BR05JRklDQVRJT05fRkFDVE9SIC0gMSkvMjsKKyAgdmFyIHNvdXJjZVlPZmZz
ZXQgPSAodGFyZ2V0Q2FudmFzLmhlaWdodC9MT1VQRV9NQUdOSUZJQ0FUSU9OX0ZBQ1RPUiAtIDEp
LzI7CisKKyAgZnVuY3Rpb24gcmVhZFBpeGVsQ29tcG9uZW50KHgsIHksIGNvbXBvbmVudCkgewor
ICAgIHJldHVybiBzb3VyY2VJbWFnZURhdGEuZGF0YVsoeSAqIHNvdXJjZUltYWdlRGF0YS53aWR0
aCArIHgpICogNCArIGNvbXBvbmVudF07CisgIH0KKyAgCisgIGZvciAodmFyIGkgPSAtc291cmNl
WE9mZnNldDsgaSA8PSBzb3VyY2VYT2Zmc2V0OyBpKyspIHsKKyAgICBmb3IgKHZhciBqID0gLXNv
dXJjZVlPZmZzZXQ7IGogPD0gc291cmNlWU9mZnNldDsgaisrKSB7CisgICAgICB2YXIgc291cmNl
WCA9IHggKyBpOworICAgICAgdmFyIHNvdXJjZVkgPSB5ICsgajsKKyAgICAgIAorICAgICAgdmFy
IHNvdXJjZVIgPSByZWFkUGl4ZWxDb21wb25lbnQoc291cmNlWCwgc291cmNlWSwgMCk7IAorICAg
ICAgdmFyIHNvdXJjZUcgPSByZWFkUGl4ZWxDb21wb25lbnQoc291cmNlWCwgc291cmNlWSwgMSk7
CisgICAgICB2YXIgc291cmNlQiA9IHJlYWRQaXhlbENvbXBvbmVudChzb3VyY2VYLCBzb3VyY2VZ
LCAyKTsKKyAgICAgIHZhciBzb3VyY2VBID0gcmVhZFBpeGVsQ29tcG9uZW50KHNvdXJjZVgsIHNv
dXJjZVksIDMpLzI1NTsKKyAgICAgIHNvdXJjZUEgPSBNYXRoLnJvdW5kKHNvdXJjZUEgKiAxMCkv
MTA7CisKKyAgICAgIHZhciB0YXJnZXRYID0gKGkgKyBzb3VyY2VYT2Zmc2V0KSAqIExPVVBFX01B
R05JRklDQVRJT05fRkFDVE9SOworICAgICAgdmFyIHRhcmdldFkgPSAoaiArIHNvdXJjZVlPZmZz
ZXQpICogTE9VUEVfTUFHTklGSUNBVElPTl9GQUNUT1I7CisgICAgICB2YXIgY29sb3JTdHJpbmcg
PQorICAgICAgICAgIHNvdXJjZVIgKyAnLCAnICsgc291cmNlRyArICcsICcgKyBzb3VyY2VCICsg
JywgJyArIHNvdXJjZUE7CisgICAgICB0YXJnZXRDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcg
KyBjb2xvclN0cmluZyArICcpJzsKKyAgICAgIHRhcmdldENvbnRleHQuZmlsbFJlY3QoCisgICAg
ICAgICAgdGFyZ2V0WCwgdGFyZ2V0WSwKKyAgICAgICAgICBMT1VQRV9NQUdOSUZJQ0FUSU9OX0ZB
Q1RPUiwgTE9VUEVfTUFHTklGSUNBVElPTl9GQUNUT1IpOworICAgIAorICAgICAgaWYgKGkgPT0g
MCAmJiBqID09IDApIHsKKyAgICAgICAgJCgnbG91cGUtY29vcmRpbmF0ZScpLnRleHRDb250ZW50
ID0gc291cmNlWCArICcsICcgKyBzb3VyY2VZOworCisgICAgICAgICQodHlwZSArICctbG91cGUt
Y29sb3InKS50ZXh0Q29udGVudCA9IGNvbG9yU3RyaW5nOworICAgICAgfQorICAgIH0KKyAgfQor
fQorCitmdW5jdGlvbiBoaWRlTG91cGUoKSB7CisgICQoJ2xvdXBlJykuc3R5bGUuZGlzcGxheSA9
ICdub25lJzsgIAorfQorCitmdW5jdGlvbiBhZGRUb1JlYmFzZWxpbmVRdWV1ZSgpIHsKKyAgdmFy
IHRlc3ROYW1lID0gZ2V0U2VsZWN0ZWRUZXN0KCk7CisgIHZhciB0ZXN0ID0gcmVzdWx0cy50ZXN0
c1t0ZXN0TmFtZV07CisgIAorICBpZiAodGVzdC5zdGF0ZSAhPSBTVEFURV9ORUVEU19SRUJBU0VM
SU5FKSB7CisgICAgbG9nKCdDYW5ub3QgYWRkIHRlc3Qgd2l0aCBzdGF0ZSAnICsgdGVzdC5zdGF0
ZSArICcgdG8gcXVldWUnKTsKKyAgICByZXR1cm47CisgIH0KKyAgCisgIHZhciBxdWV1ZU9wdGlv
biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOworICBxdWV1ZU9wdGlvbi52YWx1
ZSA9IHRlc3ROYW1lOworICBxdWV1ZU9wdGlvbi50ZXh0Q29udGVudCA9IHRlc3ROYW1lOworICAk
KCdxdWV1ZS1zZWxlY3QnKS5hcHBlbmRDaGlsZChxdWV1ZU9wdGlvbik7CisgIHRlc3Quc3RhdGUg
PSBTVEFURV9JTl9RVUVVRTsKKyAgdXBkYXRlU3RhdGUoKTsKK30KKworZnVuY3Rpb24gcmVtb3Zl
U2VsZWN0aW9uRnJvbVJlYmFzZWxpbmVRdWV1ZSgpIHsKKyAgdmFyIHF1ZXVlU2VsZWN0ID0gJCgn
cXVldWUtc2VsZWN0Jyk7CisgIGlmIChxdWV1ZVNlbGVjdC5zZWxlY3RlZEluZGV4ID09IC0xKSB7
CisgICAgcmV0dXJuOworICB9CisKKyAgdmFyIHF1ZXVlT3B0aW9uID0gcXVldWVTZWxlY3Qub3B0
aW9uc1txdWV1ZVNlbGVjdC5zZWxlY3RlZEluZGV4XTsgIAorICByZW1vdmVGcm9tUmViYXNlbGlu
ZVF1ZXVlKHF1ZXVlT3B0aW9uLnZhbHVlKTsKK30KKworZnVuY3Rpb24gcmVtb3ZlRnJvbVJlYmFz
ZWxpbmVRdWV1ZSh0ZXN0TmFtZSkgeworICB2YXIgcXVldWVTZWxlY3QgPSAkKCdxdWV1ZS1zZWxl
Y3QnKTsKKyAgZm9yICh2YXIgcXVldWVPcHRpb24gPSBxdWV1ZVNlbGVjdC5maXJzdENoaWxkOwor
ICAgICBxdWV1ZU9wdGlvbiAmJiBxdWV1ZU9wdGlvbi52YWx1ZSAhPSB0ZXN0TmFtZTsKKyAgICAg
cXVldWVPcHRpb24gPSBxdWV1ZU9wdGlvbi5uZXh0U2libGluZykgezt9CisKKyAgaWYgKCFxdWV1
ZU9wdGlvbikgcmV0dXJuOworICAKKyAgcXVldWVTZWxlY3QucmVtb3ZlQ2hpbGQocXVldWVPcHRp
b24pOworICB2YXIgdGVzdCA9IHJlc3VsdHMudGVzdHNbdGVzdE5hbWVdOworICB0ZXN0LnN0YXRl
ID0gU1RBVEVfTkVFRFNfUkVCQVNFTElORTsKKyAgdXBkYXRlU3RhdGUoKTsKK30KKworZnVuY3Rp
b24gcmViYXNlbGluZVF1ZXVlKCkgeworICB2YXIgdGVzdE5hbWVzID0gW107CisgIGZvciAodmFy
IHF1ZXVlT3B0aW9uID0gJCgncXVldWUtc2VsZWN0JykuZmlyc3RDaGlsZDsKKyAgICAgcXVldWVP
cHRpb247CisgICAgIHF1ZXVlT3B0aW9uID0gcXVldWVPcHRpb24ubmV4dFNpYmxpbmcpIHsKKyAg
ICB0ZXN0TmFtZXMucHVzaChxdWV1ZU9wdGlvbi52YWx1ZSk7CisgIH0KKyAgCisgIGluUHJvZ3Jl
c3NSZWJhc2VsaW5lQ291bnQgPSB0ZXN0TmFtZXMubGVuZ3RoOworICB1cGRhdGVTdGF0ZSgpOwor
CisgIHZhciBiYXNlbGluZVRhcmdldCA9IGdldFNlbGVjdFZhbHVlKCdiYXNlbGluZS10YXJnZXQn
KTsKKyAgdmFyIGJhc2VsaW5lTW92ZVRvID0gZ2V0U2VsZWN0VmFsdWUoJ2Jhc2VsaW5lLW1vdmUt
dG8nKTsKKworICB0ZXN0TmFtZXMuZm9yRWFjaChmdW5jdGlvbih0ZXN0TmFtZSkgeworICAgIHJl
YmFzZWxpbmUodGVzdE5hbWUsIGJhc2VsaW5lVGFyZ2V0LCBiYXNlbGluZU1vdmVUbyk7CisgIH0p
OworfQorCitmdW5jdGlvbiByZWJhc2VsaW5lKHRlc3ROYW1lLCBiYXNlbGluZVRhcmdldCwgYmFz
ZWxpbmVNb3ZlVG8pIHsKKyAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICB4aHIu
b3BlbignUE9TVCcsCisgICAgICAnL3JlYmFzZWxpbmU/dGVzdD0nICsgZW5jb2RlVVJJQ29tcG9u
ZW50KHRlc3ROYW1lKSArIAorICAgICAgJyZiYXNlbGluZS10YXJnZXQ9JyArIGVuY29kZVVSSUNv
bXBvbmVudChiYXNlbGluZVRhcmdldCkgKworICAgICAgJyZiYXNlbGluZS1tb3ZlLXRvPScgKyBl
bmNvZGVVUklDb21wb25lbnQoYmFzZWxpbmVNb3ZlVG8pKTsKKyAgdmFyIHRlc3QgPSByZXN1bHRz
LnRlc3RzW3Rlc3ROYW1lXTsKKyAgZnVuY3Rpb24gaGFuZGxlU3VjY2VzcygpIHsKKyAgICB2YXIg
c3VjY2VzcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKKyAgICBzdWNjZXNzLnRl
eHRDb250ZW50ID0gJ1N1Y2Nlc3M6ICc7CisgICAgc3VjY2Vzcy5zdHlsZS5jb2xvciA9ICdncmVl
bic7CisgICAgJCgnbG9nJykuYXBwZW5kQ2hpbGQoc3VjY2Vzcyk7CisgICAgbG9nKHhoci5yZXNw
b25zZVRleHQpOworICAgIHJlbW92ZUZyb21SZWJhc2VsaW5lUXVldWUodGVzdE5hbWUpOworICAg
IGluUHJvZ3Jlc3NSZWJhc2VsaW5lQ291bnQtLTsKKyAgICB0ZXN0LnN0YXRlID0gU1RBVEVfUkVC
QVNFTElORV9TVUNDRUVERUQ7CisgICAgdXBkYXRlU3RhdGUoKTsKKyAgfQorICBmdW5jdGlvbiBo
YW5kbGVGYWlsdXJlKCkgeworICAgIHZhciBmYWlsdXJlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnc3BhbicpOworICAgIGZhaWx1cmUudGV4dENvbnRlbnQgPSAnRmFpbHVyZTogJzsKKyAgICBm
YWlsdXJlLnN0eWxlLmNvbG9yID0gJ3JlZCc7CisgICAgJCgnbG9nJykuYXBwZW5kQ2hpbGQoZmFp
bHVyZSk7CisgICAgbG9nKHhoci5yZXNwb25zZVRleHQpOworICAgIHJlbW92ZUZyb21SZWJhc2Vs
aW5lUXVldWUodGVzdE5hbWUpOworICAgIGluUHJvZ3Jlc3NSZWJhc2VsaW5lQ291bnQtLTsKKyAg
ICB0ZXN0LnN0YXRlID0gU1RBVEVfUkVCQVNFTElORV9GQUlMRUQ7CisgICAgdXBkYXRlU3RhdGUo
KTsKKyAgfQorICAKKyAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsK
KyAgICBpZiAoeGhyLnN0YXR1cyA8IDQwMCkgeworICAgICAgaGFuZGxlU3VjY2VzcygpOworICAg
IH0gZWxzZSB7CisgICAgICBoYW5kbGVGYWlsdXJlKCk7CisgICAgfQorICB9KTsKKyAgeGhyLmFk
ZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlRmFpbHVyZSk7CisKKyAgeGhyLnNlbmQoKTsK
K30KKworZnVuY3Rpb24gbG9nKHRleHQpIHsKKyAgJCgnbG9nJykuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUodGV4dCArICdcbicpKTsKKyAgJCgnbG9nJykuc2Nyb2xsVG9wID0g
JCgnbG9nJykuc2Nyb2xsSGVpZ2h0OworfQorCitmdW5jdGlvbiB0b2dnbGUoaWQpIHsKKyAgdmFy
IGVsZW1lbnQgPSAkKGlkKTsKKyAgdmFyIHRvZ2dsZXIgPSAkKCd0b2dnbGUtJyArIGlkKTsKKyAg
aWYgKGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PSAnbm9uZScpIHsKKyAgICBlbGVtZW50LnN0eWxl
LmRpc3BsYXkgPSAnJzsKKyAgICB0b2dnbGVyLmNsYXNzTmFtZSA9ICdsaW5rIHNlbGVjdGVkJzsK
KyAgfSBlbHNlIHsKKyAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgdG9n
Z2xlci5jbGFzc05hbWUgPSAnbGluayc7CisgIH0KK30KKword2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBtYWluKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
bG9jYWxyZWJhc2VsaW5lLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL2xvY2FscmViYXNlbGluZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZWNjMDcxNzJlYmVmNzAxMTJm
NWVlODYzNjFhYzVhY2Q1YmI1ZTIzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2xvY2FscmViYXNlbGluZS5weQpAQCAtMCwwICsx
LDMyOCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IGZubWF0
Y2gKK2ltcG9ydCBtaW1ldHlwZXMKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBy
ZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHVybGxpYgoraW1wb3J0IEJhc2VIVFRQU2VydmVyCitp
bXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGltZQoraW1wb3J0IHVybHBh
cnNlCitmcm9tIHdzZ2lyZWYuaGFuZGxlcnMgaW1wb3J0IGZvcm1hdF9kYXRlX3RpbWUKKworZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQorZnJvbSB3ZWJraXRw
eS50b29sLm11bHRpY29tbWFuZHRvb2wgaW1wb3J0IEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5k
CitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5zaW1wbGVqc29uIGFzIHNpbXBsZWpzb24KKwor
IyBUT0RPCisjIC0gbGV0IGh0dHBkIHBvcnQgYmUgc3BlY2lmaWVkCisjIC0gc2hvdyB3aGljaCBi
YXNlbGluZXMgd2VyZSB1c2VkIGZvciB0aGUgdGVzdCBydW4KKworU1RBVEVfTkVFRFNfUkVCQVNF
TElORSA9ICduZWVkc19yZWJhc2VsaW5lJworU1RBVEVfUkVCQVNFTElORV9GQUlMRUQgPSAncmVi
YXNlbGluZV9mYWlsZWQnCitTVEFURV9SRUJBU0VMSU5FX1NVQ0NFRURFRCA9ICdyZWJhc2VsaW5l
X3N1Y2NlZWRlZCcKKworY2xhc3MgUmViYXNlbGluZUhUVFNlcnZlcihCYXNlSFRUUFNlcnZlci5I
VFRQU2VydmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaHR0cGRfcG9ydCwgcmVzdWx0c19k
aXJlY3RvcnksIHJlc3VsdHNfanNvbiwgcG9ydCwgc2NtKToKKyAgICAgICAgQmFzZUhUVFBTZXJ2
ZXIuSFRUUFNlcnZlci5fX2luaXRfXyhzZWxmLCAoJycsIGh0dHBkX3BvcnQpLCBSZWJhc2VsaW5l
SFRUUFJlcXVlc3RIYW5kbGVyKQorICAgICAgICBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5ID0gcmVz
dWx0c19kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5yZXN1bHRzX2pzb24gPSByZXN1bHRzX2pzb24K
KyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLnNjbSA9IHNjbQorCitjbGFz
cyBSZWJhc2VsaW5lSFRUUFJlcXVlc3RIYW5kbGVyKEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVx
dWVzdEhhbmRsZXIpOgorICAgIGZpbGVfbmFtZXMgPSBbCisgICAgICAnaW5kZXguaHRtbCcsCisg
ICAgICAnbWFpbi5qcycsCisgICAgICAnbWFpbi5jc3MnLAorICAgIF0KKworICAgIGRlZiBkb19H
RVQoc2VsZik6CisgICAgICAgIHNlbGYuX2hhbmRsZV9yZXF1ZXN0KCkKKyAgICAgIAorICAgIGRl
ZiBkb19QT1NUKHNlbGYpOgorICAgICAgICBzZWxmLl9oYW5kbGVfcmVxdWVzdCgpCisgICAgCisg
ICAgZGVmIF9oYW5kbGVfcmVxdWVzdChzZWxmKToKKyAgICAgICAgaWYgJz8nIGluIHNlbGYucGF0
aDoKKyAgICAgICAgICAgIChwYXRoLCBxdWVyeV9zdHJpbmcpID0gc2VsZi5wYXRoLnNwbGl0KCc/
JywgMSkKKyAgICAgICAgICAgIHNlbGYucXVlcnkgPSB1cmxwYXJzZS5wYXJzZV9xcyhxdWVyeV9z
dHJpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXRoID0gc2VsZi5wYXRoCisgICAg
ICAgICAgICBzZWxmLnF1ZXJ5ID0ge30KKyAgICAgICAgZnVuY19vcl9maWxlX25hbWUgPSBwYXRo
WzE6XSBvciAnaW5kZXguaHRtbCcKKyAgICAgICAgCisgICAgICAgIGlmIGZ1bmNfb3JfZmlsZV9u
YW1lIGluIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIuZmlsZV9uYW1lczoKKyAgICAgICAg
ICAgIHNlbGYuc2VydmVfc3RhdGljX2ZpbGUoZnVuY19vcl9maWxlX25hbWUpCisgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgCisgICAgICAgIGZ1bmNfbmFtZSA9IGZ1bmNfb3JfZmlsZV9uYW1l
LnJlcGxhY2UoJy4nLCAnXycpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsIGZ1bmNfbmFt
ZSk6CisgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIlVua25vd24gZnVuY3Rpb24gJXMi
ICUgZnVuY19uYW1lKQorICAgICAgICAgIHJldHVybgorICAgICAgICBmdW5jID0gZ2V0YXR0cihz
ZWxmLCBmdW5jX25hbWUpCisgICAgICAgIGZ1bmMoKQorICAgIAorICAgIGRlZiBzZXJ2ZV9zdGF0
aWNfZmlsZShzZWxmLCBzdGF0aWNfcGF0aCk6CisgICAgICAgIHNlbGYuX3NlcnZlX2ZpbGUob3Mu
cGF0aC5qb2luKAorICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2RhdGEn
LCAnbG9jYWxyZWJhc2VsaW5lJywgc3RhdGljX3BhdGgpKQorICAgIAorICAgIGRlZiByZWJhc2Vs
aW5lKHNlbGYpOgorICAgICAgICBsb2cgPSBbXQorICAgICAgICBzdWNjZXNzID0gc2VsZi5fcnVu
X3JlYmFzZWxpbmUoCisgICAgICAgICAgICBzZWxmLnF1ZXJ5Wyd0ZXN0J11bMF0sCisgICAgICAg
ICAgICBzZWxmLnF1ZXJ5WydiYXNlbGluZS10YXJnZXQnXVswXSwKKyAgICAgICAgICAgIHNlbGYu
cXVlcnlbJ2Jhc2VsaW5lLW1vdmUtdG8nXVswXSwgICAgICAgICAgCisgICAgICAgICAgICBsb2c9
bGFtYmRhIGw6bG9nLmFwcGVuZChsKSkKKyAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKHN1Y2Nl
c3MgYW5kIDIwMCBvciA1MDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlw
ZSIsICJ0ZXh0L3BsYWluIikKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgIHNl
bGYud2ZpbGUud3JpdGUoIlxuIi5qb2luKGxvZykpCisgICAgICAKKyAgICBkZWYgX3J1bl9yZWJh
c2VsaW5lKHNlbGYsIHRlc3QsIGJhc2VsaW5lX3RhcmdldCwgYmFzZWxpbmVfbW92ZV90bywgbG9n
KToKKyAgICAgICAgKHRlc3RfbmFtZSwgdGVzdF9leHRlbnNpb24pID0gb3MucGF0aC5zcGxpdGV4
dCh0ZXN0KQorICAgICAgICB0ZXN0X2RpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZSh0ZXN0X25h
bWUpCisgICAgICAgIHBhdGhfcGllY2VzID0gdGVzdF9kaXJlY3Rvcnkuc3BsaXQob3Muc2VwKQor
ICAgICAgICBpZiBsZW4ocGF0aF9waWVjZXMpID49IDIgYW5kIHBhdGhfcGllY2VzWzBdID09ICdw
bGF0Zm9ybSc6CisgICAgICAgICAgICBiYXNlX3Rlc3RfZGlyZWN0b3J5ID0gb3Muc2VwLmpvaW4o
cGF0aF9waWVjZXNbMjpdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmFzZV90ZXN0X2Rp
cmVjdG9yeSA9IHRlc3RfZGlyZWN0b3J5CisgICAgICAgIAorICAgICAgICBsYXlvdXRfdGVzdHNf
ZGlyZWN0b3J5ID0gc2VsZi5zZXJ2ZXIucG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkKKyAgICAgICAg
dGFyZ2V0X2V4cGVjdGF0aW9uc19kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oCisgICAgICAgICAg
ICBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5LCAncGxhdGZvcm0nLCBiYXNlbGluZV90YXJnZXQsIGJh
c2VfdGVzdF9kaXJlY3RvcnkpCisgICAgICAgIAorICAgICAgICBsb2coIlJlYmFzZWxpbmluZyAl
cy4uLiIgJSB0ZXN0X25hbWUpCisgICAgICAgIHRlc3RfanNvbiA9IHNlbGYuc2VydmVyLnJlc3Vs
dHNfanNvblsndGVzdHMnXVt0ZXN0XQorICAgICAgICAKKyAgICAgICAgaWYgdGVzdF9qc29uWydz
dGF0ZSddICE9IFNUQVRFX05FRURTX1JFQkFTRUxJTkU6CisgICAgICAgICAgICBsb2coIiAgVGVz
dCBpcyBpbiB1bmV4cGVjdGVkIHN0YXRlOiAlcyIgJSB0ZXN0X2pzb25bJ3N0YXRlJ10pCisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgCisgICAgICAgIGN1cnJlbnRfYmFzZWxpbmVz
ID0gdGVzdF9qc29uLmdldCgnYmFzZWxpbmVzJywge30pLmtleXMoKQorICAgICAgICAKKyAgICAg
ICAgdGVzdF9yZXN1bHRzX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgIHNl
bGYuc2VydmVyLnJlc3VsdHNfZGlyZWN0b3J5LCB0ZXN0X2RpcmVjdG9yeSkKKyAgICAgICAgYWN0
dWFsX3BhdHRlcm4gPSBvcy5wYXRoLmJhc2VuYW1lKHRlc3RfbmFtZSkgKyAnLWFjdHVhbC4qJwor
ICAgICAgICBhY3R1YWxfZmlsZXMgPSBbXQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlz
dGRpcih0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIGlmIGZubWF0Y2guZm5t
YXRjaChmaWxlbmFtZSwgYWN0dWFsX3BhdHRlcm4pOgorICAgICAgICAgICAgICAgIGFjdHVhbF9m
aWxlcy5hcHBlbmQoZmlsZW5hbWUucmVwbGFjZSgnLWFjdHVhbCcsICctZXhwZWN0ZWQnKSkKKyAg
ICAgICAgCisgICAgICAgICMgSWYgcmVxdWVzdGVkLCBtb3ZlIGN1cnJlbnQgYmFzZWxpbmVzIG91
dAorICAgICAgICBpZiBiYXNlbGluZV90YXJnZXQgaW4gY3VycmVudF9iYXNlbGluZXMgYW5kIGJh
c2VsaW5lX21vdmVfdG8gIT0gIm5vbmUiOgorICAgICAgICAgICAgbG9nKCIgIE1vdmluZyBjdXJy
ZW50ICVzIGJhc2VsaW5lcyB0byAlcyIgJSAoYmFzZWxpbmVfdGFyZ2V0LCBiYXNlbGluZV9tb3Zl
X3RvKSkKKyAgICAgICAgICAgIG1vdmVfdG9fZXhwZWN0YXRpb25zX2RpcmVjdG9yeSA9IG9zLnBh
dGguam9pbigKKyAgICAgICAgICAgICAgICBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5LCAncGxhdGZv
cm0nLCBiYXNlbGluZV9tb3ZlX3RvLCBiYXNlX3Rlc3RfZGlyZWN0b3J5KQorICAgICAgICAgICAg
ZXhwZWN0YXRpb25fcGF0dGVybiA9IG9zLnBhdGguYmFzZW5hbWUodGVzdF9uYW1lKSArICctZXhw
ZWN0ZWQuKicKKyAgICAKKyAgICAgICAgICAgICMgU2VlIHdoaWNoIGZpbGVzIG5lZWQgdG8gbW92
ZSAgICAgICAgCisgICAgICAgICAgICBjdXJyZW50X2V4cGVjdGF0aW9uc19maWxlcyA9IFtdCisg
ICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcih0YXJnZXRfZXhwZWN0YXRpb25z
X2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGZpbGVuYW1l
LCBleHBlY3RhdGlvbl9wYXR0ZXJuKToKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF9leHBl
Y3RhdGlvbnNfZmlsZXMuYXBwZW5kKGZpbGVuYW1lKQorICAgICAgICAgICAgY3VycmVudF9leHBl
Y3RhdGlvbnNfZmlsZXMgPSBbZiBmb3IgZiBpbiBjdXJyZW50X2V4cGVjdGF0aW9uc19maWxlcyBp
ZiBmIGluIGFjdHVhbF9maWxlc10KKyAgICAgIAorICAgICAgICAgICAgaWYgY3VycmVudF9leHBl
Y3RhdGlvbnNfZmlsZXM6CisgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UncmUgbm90IGNs
b2JiZXJpbmcgZXhpc3RpbmcgZmlsZXMKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0
cyhtb3ZlX3RvX2V4cGVjdGF0aW9uc19kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgICAgbW92
ZV90b19leHBlY3RhdGlvbnNfZmlsZXMgPSBbXQorICAgICAgICAgICAgICAgICAgZm9yIGZpbGVu
YW1lIGluIG9zLmxpc3RkaXIobW92ZV90b19leHBlY3RhdGlvbnNfZGlyZWN0b3J5KToKKyAgICAg
ICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZmlsZW5hbWUsIGV4cGVjdGF0aW9u
X3BhdHRlcm4pOgorICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlX3RvX2V4cGVjdGF0aW9u
c19maWxlcy5hcHBlbmQoZmlsZW5hbWUpICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICBl
eGlzdGluZ19tb3ZlX3RvX2ZpbGVzID0gW2YgZm9yIGYgaW4gbW92ZV90b19leHBlY3RhdGlvbnNf
ZmlsZXMgaWYgZiBpbiBjdXJyZW50X2V4cGVjdGF0aW9uc19maWxlc10KKyAgICAgICAgICAgICAg
ICAgIGlmIGV4aXN0aW5nX21vdmVfdG9fZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGxvZygi
ICBBbHJlYWR5IGhhZCAlcyBiYXNlbGluZXMgKCVzKSwgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdp
dGggY3VycmVudCAlcyBiYXNlbGluZXMiICUgKGJhc2VsaW5lX21vdmVfdG8sICIsICIuam9pbihl
eGlzdGluZ19tb3ZlX3RvX2ZpbGVzKSwgYmFzZWxpbmVfdGFyZ2V0KSkKKyAgICAgICAgICAgICAg
ICAgICAgdGVzdF9qc29uWydzdGF0ZSddID0gU1RBVEVfUkVCQVNFTElORV9GQUlMRUQKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICMgTW92ZSB0aGVtCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG1v
dmVfdG9fZXhwZWN0YXRpb25zX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgICAgIGxvZygi
ICBDcmVhdGluZyAlcyAlcyBkaXJlY3RvcnkiICUgKGJhc2VsaW5lX21vdmVfdG8sIGJhc2VfdGVz
dF9kaXJlY3RvcnkpKQorICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhtb3ZlX3RvX2V4
cGVjdGF0aW9uc19kaXJlY3RvcnkpCisgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gY3VycmVu
dF9leHBlY3RhdGlvbnNfZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9wYXRoID0g
b3MucGF0aC5qb2luKHRhcmdldF9leHBlY3RhdGlvbnNfZGlyZWN0b3J5LCBmaWxlKQorICAgICAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbl9wYXRoID0gb3MucGF0aC5qb2luKG1vdmVfdG9fZXhw
ZWN0YXRpb25zX2RpcmVjdG9yeSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLm1v
dmUoc291cmNlX3BhdGgsIGRlc3RpbmF0aW9uX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIGV4
aXRfY29kZSA9IHNlbGYuc2VydmVyLnNjbS5hZGQoZGVzdGluYXRpb25fcGF0aCwgcmV0dXJuX2V4
aXRfY29kZT1UcnVlKQorICAgICAgICAgICAgICAgICAgICBsb2coIiAgICBNb3ZlZCAlcywgZXhp
dCBjb2RlICVkIiAlIChmaWxlLCBleGl0X2NvZGUpKQorICAgICAgICAgICAgICAgICAgICBpZiBl
eGl0X2NvZGU6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2pzb25bJ3N0YXRlJ10gPSBT
VEFURV9SRUJBU0VMSU5FX0ZBSUxFRAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCisgIAorICAgICAgICBsb2coIiAgQWRkaW5nIG5ldyBiYXNlbGluZXMgdG8gJXMiICUgYmFz
ZWxpbmVfdGFyZ2V0KQorICAgICAgICBmb3IgZmlsZSBpbiBhY3R1YWxfZmlsZXM6CisgICAgICAg
ICAgICBzb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbih0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5LCBm
aWxlLnJlcGxhY2UoJy1leHBlY3RlZCcsICctYWN0dWFsJykpCisgICAgICAgICAgICBkZXN0aW5h
dGlvbl9wYXRoID0gb3MucGF0aC5qb2luKHRhcmdldF9leHBlY3RhdGlvbnNfZGlyZWN0b3J5LCBm
aWxlKQorICAgICAgICAgICAgc2h1dGlsLmNvcHkoc291cmNlX3BhdGgsIGRlc3RpbmF0aW9uX3Bh
dGgpCisgICAgICAgICAgICBleGl0X2NvZGUgPSBzZWxmLnNlcnZlci5zY20uYWRkKGRlc3RpbmF0
aW9uX3BhdGgsIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkgICAgICAgICAgCisgICAgICAgICAgICBs
b2coIiAgICBBZGRlZCAlcywgZXhpdCBjb2RlICVkIiAlIChmaWxlLCBleGl0X2NvZGUpKQorICAg
ICAgICAgICAgaWYgZXhpdF9jb2RlOgorICAgICAgICAgICAgICAgIHRlc3RfanNvblsnc3RhdGUn
XSA9IFNUQVRFX1JFQkFTRUxJTkVfRkFJTEVECisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNl
CisgICAgICAgIAorICAgICAgICB0ZXN0X2pzb25bJ3N0YXRlJ10gPSBTVEFURV9SRUJBU0VMSU5F
X1NVQ0NFRURFRAorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHRlc3RfcmVzdWx0KHNl
bGYpOgorICAgICAgICAodGVzdF9uYW1lLCB0ZXN0X2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0
ZXh0KHNlbGYucXVlcnlbJ3Rlc3QnXVswXSkKKyAgICAgICAgbW9kZSA9IHNlbGYucXVlcnlbJ21v
ZGUnXVswXQorICAgICAgICBpZiBtb2RlID09ICdleHBlY3RlZC1pbWFnZSc6CisgICAgICAgICAg
ICBmaWxlX25hbWUgPSB0ZXN0X25hbWUgKyAnLWV4cGVjdGVkLnBuZycKKyAgICAgICAgZWxpZiBt
b2RlID09ICdhY3R1YWwtaW1hZ2UnOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gdGVzdF9uYW1l
ICsgJy1hY3R1YWwucG5nJworICAgICAgICBpZiBtb2RlID09ICdleHBlY3RlZC1jaGVja3N1bSc6
CisgICAgICAgICAgICBmaWxlX25hbWUgPSB0ZXN0X25hbWUgKyAnLWV4cGVjdGVkLmNoZWNrc3Vt
JworICAgICAgICBlbGlmIG1vZGUgPT0gJ2FjdHVhbC1jaGVja3N1bSc6CisgICAgICAgICAgICBm
aWxlX25hbWUgPSB0ZXN0X25hbWUgKyAnLWFjdHVhbC5jaGVja3N1bScKKyAgICAgICAgZWxpZiBt
b2RlID09ICdkaWZmLWltYWdlJzoKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSAr
ICctZGlmZi5wbmcnCisgICAgICAgIGlmIG1vZGUgPT0gJ2V4cGVjdGVkLXRleHQnOgorICAgICAg
ICAgICAgZmlsZV9uYW1lID0gdGVzdF9uYW1lICsgJy1leHBlY3RlZC50eHQnCisgICAgICAgIGVs
aWYgbW9kZSA9PSAnYWN0dWFsLXRleHQnOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gdGVzdF9u
YW1lICsgJy1hY3R1YWwudHh0JworICAgICAgICBlbGlmIG1vZGUgPT0gJ2RpZmYtdGV4dCc6Cisg
ICAgICAgICAgICBmaWxlX25hbWUgPSB0ZXN0X25hbWUgKyAnLWRpZmYudHh0JworICAKKyAgICAg
ICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuc2VydmVyLnJlc3VsdHNfZGlyZWN0b3J5
LCBmaWxlX25hbWUpCisgICAgICAgIAorICAgICAgICAjIExldCByZXN1bHRzIGJlIGNhY2hlZCBm
b3IgNjAgc2Vjb25kcywgc28gdGhhdCB0aGV5IGNhbiBiZSBwcmUtZmV0Y2hlZAorICAgICAgICAj
IGJ5IHRoZSBVSQorICAgICAgICBzZWxmLl9zZXJ2ZV9maWxlKGZpbGVfcGF0aCwgY2FjaGVfc2Vj
b25kcz02MCkKKyAgICAKKyAgICBkZWYgcmVzdWx0c19qc29uKHNlbGYpOgorICAgICAgICBzZWxm
LnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5
cGUiLCAiYXBwbGljYXRpb24vanNvbiIpCisgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKSAgICAK
KyAgICAgICAgc2ltcGxlanNvbi5kdW1wKHNlbGYuc2VydmVyLnJlc3VsdHNfanNvbiwgc2VsZi53
ZmlsZSkKKyAgICAKKyAgICBkZWYgcXVpdHF1aXRxdWl0KHNlbGYpOgorICAgICAgICBzZWxmLnNl
bmRfcmVzcG9uc2UoMjAwKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUi
LCAidGV4dC9wbGFpbiIpCisgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorICAgICAgICBzZWxm
LndmaWxlLndyaXRlKCJRdWl0LlxuIikKKyAgICAgICAgCisgICAgICAgICMgU2h1dGRvd24gaGFz
IHRvIGhhcHBlbiBvbiBhbm90aGVyIHRocmVhZCBmcm9tIHRoZSBzZXJ2ZXIncyB0aHJlYWQsCisg
ICAgICAgICMgb3RoZXJ3aXNlIHRoZXJlJ3MgYSBkZWFkbG9jaworICAgICAgICB0aHJlYWRpbmcu
VGhyZWFkKHRhcmdldD1sYW1iZGE6IHNlbGYuc2VydmVyLnNodXRkb3duKCkpLnN0YXJ0KCkKKwor
ICAgIGRlZiBfc2VydmVfZmlsZShzZWxmLCBmaWxlX3BhdGgsIGNhY2hlX3NlY29uZHM9MCk6Cisg
ICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlX3BhdGgpOgorICAgICAgICAgIHNlbGYu
c2VuZF9lcnJvcig0MDQsICJGaWxlIG5vdCBmb3VuZCIpCisgICAgICAgICAgcmV0dXJuCisgICAg
ICAgIHN0YXRpY19maWxlID0gZmlsZShmaWxlX3BhdGgsICdyYicpCisgICAgICAgIAorICAgICAg
ICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250
ZW50LUxlbmd0aCcsIG9zLnBhdGguZ2V0c2l6ZShmaWxlX3BhdGgpKQorICAgICAgICAobWltZV90
eXBlLCBlbmNvZGluZykgPSBtaW1ldHlwZXMuZ3Vlc3NfdHlwZShmaWxlX3BhdGgpCisgICAgICAg
IGlmIG1pbWVfdHlwZTogICAgICAKKyAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50
LXR5cGUiLCBtaW1lX3R5cGUpCisgICAgICAgIAorICAgICAgICBpZiBjYWNoZV9zZWNvbmRzOgor
ICAgICAgICAgIGV4cGlyZXNfdGltZSA9IFwKKyAgICAgICAgICAgICAgZGF0ZXRpbWUuZGF0ZXRp
bWUubm93KCkgKyBkYXRldGltZS50aW1lZGVsdGEoMCwgY2FjaGVfc2Vjb25kcykKKyAgICAgICAg
ICBleHBpcmVzX2Zvcm1hdHRlZCA9IFwKKyAgICAgICAgICAgICAgZm9ybWF0X2RhdGVfdGltZSh0
aW1lLm1rdGltZShleHBpcmVzX3RpbWUudGltZXR1cGxlKCkpKQorICAgICAgICAgIHNlbGYuc2Vu
ZF9oZWFkZXIoIkV4cGlyZXMiLCBleHBpcmVzX2Zvcm1hdHRlZCkKKyAgICAgICAgc2VsZi5lbmRf
aGVhZGVycygpCisgICAgICAgIAorICAgICAgICBzaHV0aWwuY29weWZpbGVvYmooc3RhdGljX2Zp
bGUsIHNlbGYud2ZpbGUpCisgICAgICAgIHN0YXRpY19maWxlLmNsb3NlKCkKKworY2xhc3MgTG9j
YWxSZWJhc2VsaW5lKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKKyAgICBuYW1lID0gImxv
Y2FsLXJlYmFzZWxpbmUiCisgICAgaGVscF90ZXh0ID0gIlRPRE8obWloYWlwKSIKKyAgICBhcmd1
bWVudF9uYW1lcyA9ICJbL3BhdGgvdG8vcmVzdWx0cy9kaXJlY3RvcnkvXSIKKworICAgIGRlZiBl
eGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAgICAgICBpZiBsZW4oYXJncykg
IT0gMToKKyAgICAgICAgICAgIHByaW50ICJQYXRoIHRvIHJlc3VsdHMgZGlyZWN0b3J5IGlzIHJl
cXVpcmVkLiIKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5
ID0gYXJnc1swXQorICAgICAgICAKKyAgICAgICAgcHJpbnQgIlBhcnNpbmcgdW5leHBlY3RlZF9y
ZXN1bHRzLmpzb24uLi4iCisgICAgICAgIHJlc3VsdHNfanNvbl9wYXRoID0gb3MucGF0aC5qb2lu
KAorICAgICAgICAgICAgcmVzdWx0c19kaXJlY3RvcnksICd1bmV4cGVjdGVkX3Jlc3VsdHMuanNv
bicpCisgICAgICAgIHJlc3VsdHNfanNvbl9maWxlID0gZmlsZShyZXN1bHRzX2pzb25fcGF0aCkK
KyAgICAgICAgcmVzdWx0c19qc29uID0gc2ltcGxlanNvbi5sb2FkKHJlc3VsdHNfanNvbl9maWxl
KQorICAgICAgICByZXN1bHRzX2pzb25fZmlsZS5jbG9zZSgpCisKKyAgICAgICAgdGVzdF9uYW1l
X3RvX3Rlc3RfZmlsZSA9IHt9CisgICAgICAgIGZvciB0ZXN0X2ZpbGUsIHRlc3RfanNvbiBpbiBy
ZXN1bHRzX2pzb25bJ3Rlc3RzJ10uaXRlbXMoKToKKyAgICAgICAgICAgICh0ZXN0X25hbWUsIHRl
eHRfZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQodGVzdF9maWxlKQorICAgICAgICAgICAg
dGVzdF9uYW1lX3RvX3Rlc3RfZmlsZVt0ZXN0X25hbWVdID0gdGVzdF9maWxlCisKKyAgICAgICAg
ICAgICMgQWxzbyBpbmRleCBwZXItcGxhdGZvcm0gdGVzdHMgYnkgdGhlaXIgbm9uLXBsYXRmb3Jt
IG5hbWVzCisgICAgICAgICAgICBwYXRoX3BpZWNlcyA9IHRlc3RfbmFtZS5zcGxpdChvcy5zZXAp
CisgICAgICAgICAgICBpZiBsZW4ocGF0aF9waWVjZXMpID49IDIgYW5kIHBhdGhfcGllY2VzWzBd
ID09ICdwbGF0Zm9ybSc6CisgICAgICAgICAgICAgICAgdGVzdF9uYW1lX3RvX3Rlc3RfZmlsZVtv
cy5zZXAuam9pbihwYXRoX3BpZWNlc1syOl0pXSA9IHRlc3RfZmlsZQorCisgICAgICAgICAgICB0
ZXN0X2pzb25bJ3N0YXRlJ10gPSBTVEFURV9ORUVEU19SRUJBU0VMSU5FCisgICAgICAgIAorICAg
ICAgICBwcmludCAiR2F0aGVyaW5nIGN1cnJlbnQgYmFzZWxpbmVzLi4uIgorICAgICAgICAKKyAg
ICAgICAgcG9ydCA9IGZhY3RvcnkuZ2V0KCkKKyAgICAgICAgbGF5b3V0X3Rlc3RzX2RpcmVjdG9y
eSA9IHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxl
cyBpbiBvcy53YWxrKGxheW91dF90ZXN0c19kaXJlY3RvcnkpOgorICAgICAgICAgICAgZm9yIGZp
bGVuYW1lIGluIGZubWF0Y2guZmlsdGVyKGZpbGVzLCAnKi1leHBlY3RlZC4qJyk6CisgICAgICAg
ICAgICAgICAgcmVsYXRpdmVfcGF0aCA9IG9zLnBhdGgucmVscGF0aChyb290LCBsYXlvdXRfdGVz
dHNfZGlyZWN0b3J5KQorICAgICAgICAgICAgICAgIHBhdGhfcGllY2VzID0gcmVsYXRpdmVfcGF0
aC5zcGxpdChvcy5zZXApCisgICAgICAgICAgICAgICAgaWYgbGVuKHBhdGhfcGllY2VzKSA+PSAy
IGFuZCBwYXRoX3BpZWNlc1swXSA9PSAncGxhdGZvcm0nOgorICAgICAgICAgICAgICAgICAgICBw
bGF0Zm9ybSA9IHBhdGhfcGllY2VzWzFdCisgICAgICAgICAgICAgICAgICAgIHRlc3RfZGlyX3Bh
dGggPSBvcy5zZXAuam9pbihwYXRoX3BpZWNlc1syOl0pCisgICAgICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0gPSAnYmFzZScKKyAgICAgICAgICAgICAgICAg
ICAgdGVzdF9kaXJfcGF0aCA9IHJlbGF0aXZlX3BhdGgKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAodGVzdF9uYW1lLCBiYXNlbGluZV9leHRlbnNpb24pID0gb3MucGF0aC5zcGxp
dGV4dChmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICB0ZXN0X25hbWUgPSBvcy5wYXRoLmpvaW4o
dGVzdF9kaXJfcGF0aCwgdGVzdF9uYW1lWzA6LWxlbignLWV4cGVjdGVkJyldKQorICAgICAgICAg
ICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVzdF9uYW1lX3RvX3Rlc3RfZmlsZToKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB0ZXN0X2ZpbGUgPSB0ZXN0
X25hbWVfdG9fdGVzdF9maWxlW3Rlc3RfbmFtZV0KKyAgICAgICAgICAgICAgICB0ZXN0X2pzb24g
PSByZXN1bHRzX2pzb25bJ3Rlc3RzJ11bdGVzdF9maWxlXQorICAgICAgICAgICAgICAgIGlmICdi
YXNlbGluZXMnIG5vdCBpbiB0ZXN0X2pzb246CisgICAgICAgICAgICAgICAgICAgIHRlc3RfanNv
blsnYmFzZWxpbmVzJ10gPSB7fQorICAgICAgICAgICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiB0
ZXN0X2pzb25bJ2Jhc2VsaW5lcyddOgorICAgICAgICAgICAgICAgICAgICB0ZXN0X2pzb25bJ2Jh
c2VsaW5lcyddW3BsYXRmb3JtXSA9IFtdCisgICAgICAgICAgICAgICAgdGVzdF9qc29uWydiYXNl
bGluZXMnXVtwbGF0Zm9ybV0uYXBwZW5kKGJhc2VsaW5lX2V4dGVuc2lvbikKKworICAgICAgICBw
cmludCAiU3RhcnRpbmcgc2VydmVyIGF0IGh0dHA6Ly9sb2NhbGhvc3Q6ODEyNy8iCisgICAgICAg
IAorICAgICAgICBodHRwZCA9IFJlYmFzZWxpbmVIVFRTZXJ2ZXIoCisgICAgICAgICAgICBodHRw
ZF9wb3J0PTgxMjcsCisgICAgICAgICAgICByZXN1bHRzX2RpcmVjdG9yeT1yZXN1bHRzX2RpcmVj
dG9yeSwKKyAgICAgICAgICAgIHJlc3VsdHNfanNvbj1yZXN1bHRzX2pzb24sCisgICAgICAgICAg
ICBwb3J0PXBvcnQsCisgICAgICAgICAgICBzY209c2VsZi5fdG9vbC5zY20oKSkKKyAgICAgICAg
aHR0cGQuc2VydmVfZm9yZXZlcigpICAgICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72778</attachid>
            <date>2010-11-02 17:52:15 -0700</date>
            <delta_ts>2010-11-04 15:59:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47761-20101102175214.patch</filename>
            <type>text/plain</type>
            <size>52706</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwNDk1MmQwNjUzYWI1Y2NmYTQzNmYxMGQ1ZTgyZmQ1MmE0MzdlZDgwLi4zMTQ5YjI5
YjI4OTRmYTAzN2U5M2FmMTA3ZDU5NDAzNzI1NTJkOGEwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAK
KzIwMTAtMTAtMjUgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTG9jYWwgcmViYXNl
bGluaW5nIHRvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ3NzYxCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19p
bml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEv
bG9jYWxyZWJhc2VsaW5lL2luZGV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL2xvY2FscmViYXNlbGluZS9tYWluLmpzOiBBZGRlZC4K
KyAgICAgICAgKG1haW4uYWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChtYWluLmRvY3VtZW50
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAoZGlzcGxheVJlc3VsdHMuZm9yKToKKyAgICAg
ICAgKGRpc3BsYXlSZXN1bHRzKToKKyAgICAgICAgKHNlbGVjdEZhaWx1cmVUeXBlKToKKyAgICAg
ICAgKHNlbGVjdERpcmVjdG9yeSk6CisgICAgICAgIChnZXRTZWxlY3RlZFRlc3QpOgorICAgICAg
ICAocHJlZmV0Y2gpOgorICAgICAgICAoc2VsZWN0VGVzdCk6CisgICAgICAgICh1cGRhdGVTdGF0
ZSk6CisgICAgICAgIChkaXNwbGF5SW1hZ2VSZXN1bHRzLm9ubG9hZCk6CisgICAgICAgIChkaXNw
bGF5SW1hZ2VSZXN1bHRzKToKKyAgICAgICAgKHVwZGF0ZURpZmYpOgorICAgICAgICAoZGlzcGxh
eVRleHRSZXN1bHRzLmxvYWRUZXh0UmVzdWx0KToKKyAgICAgICAgKCk6CisgICAgICAgIChuZXh0
VGVzdCk6CisgICAgICAgIChwcmV2aW91c1Rlc3QpOgorICAgICAgICAoc2hvd0xvdXBlKToKKyAg
ICAgICAgKGZpbGxMb3VwZUZyb21JbWFnZSk6CisgICAgICAgIChmaWxsTG91cGVGcm9tQ2FudmFz
LnJlYWRQaXhlbENvbXBvbmVudCk6CisgICAgICAgIChmaWxsTG91cGVGcm9tQ2FudmFzKToKKyAg
ICAgICAgKGhpZGVMb3VwZSk6CisgICAgICAgIChyZW1vdmVTZWxlY3Rpb25Gcm9tUmViYXNlbGlu
ZVF1ZXVlKToKKyAgICAgICAgKHJlbW92ZUZyb21SZWJhc2VsaW5lUXVldWUpOgorICAgICAgICAo
cmViYXNlbGluZVF1ZXVlKToKKyAgICAgICAgKHJlYmFzZWxpbmUuaGFuZGxlU3VjY2Vzcyk6Cisg
ICAgICAgIChyZWJhc2VsaW5lLmhhbmRsZUZhaWx1cmUpOgorICAgICAgICAobG9nKToKKyAgICAg
ICAgKHRvZ2dsZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2xv
Y2FscmViYXNlbGluZS5weTogQWRkZWQuCisKIDIwMTAtMTEtMDIgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYnVpbGQuCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18ucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvX19pbml0X18ucHkKaW5k
ZXggOWJkZWM4ZjU5N2UxNzYzNjM0NGE4MTgzYjEwM2ExNTBiZjhjOWRlMy4uYTA3MDMyNGZjY2Ew
YWVhYjdhNmYyYTg4YTJlOWNhYzM3ZDA5YmNjMCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5CisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9fX2luaXRfXy5weQpAQCAtMiw0ICsyLDUg
QEAKIAogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnByZXR0eWRpZmYgaW1wb3J0IFByZXR0
eURpZmYKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5yZWJhc2VsaW5lIGltcG9ydCBSZWJh
c2VsaW5lCitmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMucmViYXNlbGluZXNlcnZlciBpbXBv
cnQgUmViYXNlbGluZVNlcnZlcgogIyBGSVhNRTogQWRkIHRoZSByZXN0IG9mIHRoZSBjb21tYW5k
cyBoZXJlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9pbmRleC5odG1sIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9pbmRleC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjIyNjdiMDliNGJkODQzYTFmZTA0YzUwNjQ1MDg5NzE1Mjk5OTg5ODUK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwyMDYgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkxheW91dCBUZXN0IFJl
YmFzZWxpbmVyPC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvbWFpbi5j
c3MiIHR5cGU9InRleHQvY3NzIj4KKyAgPHNjcmlwdCBzcmM9Ii9tYWluLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IGNsYXNzPSJsb2FkaW5nIj4KKworPHByZSBpZD0ibG9nIiBzdHlsZT0i
ZGlzcGxheTogbm9uZSI+PC9wcmU+Cis8ZGl2IGlkPSJxdWV1ZSIgc3R5bGU9ImRpc3BsYXk6IG5v
bmUiPgorICBRdWV1ZToKKyAgPHNlbGVjdCBpZD0icXVldWUtc2VsZWN0IiBzaXplPSIxMCI+PC9z
ZWxlY3Q+CisgIDxidXR0b24gaWQ9InJlbW92ZS1xdWV1ZS1zZWxlY3Rpb24iPlJlbW92ZSBzZWxl
Y3Rpb248L2J1dHRvbj4KKyAgPGJ1dHRvbiBpZD0icmViYXNlbGluZS1xdWV1ZSI+UmViYXNlbGlu
ZSBxdWV1ZTwvYnV0dG9uPgorPC9kaXY+CisKKzxkaXYgaWQ9ImhlYWRlciI+CisgIDxkaXYgaWQ9
ImNvbnRyb2xzIj4KKyAgICA8IS0tIEFkZCBhIGR1bW15IDxzZWxlY3Q+IG5vZGUgc28gdGhhdCB0
aGlzIGxpbmVzIHVwIHdpdGggdGhlIHRleHQgb24gdGhlIGxlZnQgLS0+CisgICAgPHNlbGVjdCBz
dHlsZT0idmlzaWJpbGl0eTogaGlkZGVuIj48L3NlbGVjdD4KKyAgICA8c3BhbiBpZD0idG9nZ2xl
LWxvZyIgY2xhc3M9ImxpbmsiPkxvZzwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iZGl2aWRlciI+
fDwvc3Bhbj4KKyAgICA8YSBocmVmPSIvcXVpdHF1aXRxdWl0Ij5FeGl0PC9hPgorICA8L2Rpdj4K
KworICA8c3BhbiBpZD0ic2VsZWN0b3JzIj4KKyAgICA8bGFiZWw+CisgICAgICBGYWlsdXJlIHR5
cGU6CisgICAgICA8c2VsZWN0IGlkPSJmYWlsdXJlLXR5cGUtc2VsZWN0b3IiPjwvc2VsZWN0Pgor
ICAgIDwvbGFiZWw+CisgIAorICAgIDxsYWJlbD4KKyAgICAgIERpcmVjdG9yeToKKyAgICAgIDxz
ZWxlY3QgaWQ9ImRpcmVjdG9yeS1zZWxlY3RvciI+PC9zZWxlY3Q+CisgICAgPC9sYWJlbD4KKyAg
CisgICAgPGxhYmVsPgorICAgICAgVGVzdDoKKyAgICAgIDxzZWxlY3QgaWQ9InRlc3Qtc2VsZWN0
b3IiPjwvc2VsZWN0PgorICAgIDwvbGFiZWw+CisgIDwvc3Bhbj4KKyAgCisgIDxhIGlkPSJ0ZXN0
LWxpbmsiPlZpZXcgdGVzdDwvYT4KKyAgCisgIDxzcGFuIGlkPSJuYXYtYnV0dG9ucyI+CisgICAg
PGJ1dHRvbiBpZD0icHJldmlvdXMtdGVzdCI+JmxhcXVvOzwvYnV0dG9uPgorICAgIDxzcGFuIGlk
PSJ0ZXN0LWluZGV4Ij48L3NwYW4+IG9mIDxzcGFuIGlkPSJ0ZXN0LWNvdW50Ij48L3NwYW4+Cisg
ICAgPGJ1dHRvbiBpZD0ibmV4dC10ZXN0Ij4mcmFxdW87PC9idXR0b24+CisgIDwvc3Bhbj4gIAor
PC9kaXY+CisKKzx0YWJsZSBpZD0idGVzdC1vdXRwdXQiPgorICA8dGhlYWQgaWQ9ImxhYmVscyI+
CisgICAgPHRyPgorICAgICAgPHRoPkV4cGVjdGVkPC90aD4KKyAgICAgIDx0aD5BY3R1YWw8L3Ro
PgorICAgICAgPHRoPkRpZmY8L3RoPgorICAgIDwvdHI+CisgIDwvdGhlYWQ+CisgIDx0Ym9keSBp
ZD0iaW1hZ2Utb3V0cHV0cyIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgorICAgIDx0cj4KKyAgICAg
IDx0ZCBjb2xzcGFuPSIzIj48aDI+SW1hZ2U8L2gyPjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+
CisgICAgICA8dGQ+PGltZyBpZD0iZXhwZWN0ZWQtaW1hZ2UiPjwvdGQ+CisgICAgICA8dGQ+PGlt
ZyBpZD0iYWN0dWFsLWltYWdlIj48L3RkPgorICAgICAgPHRkPgorICAgICAgICA8Y2FudmFzIGlk
PSJkaWZmLWNhbnZhcyIgd2lkdGg9IjgwMCIgaGVpZ2h0PSI2MDAiPjwvY2FudmFzPgorICAgICAg
ICA8ZGl2IGlkPSJkaWZmLWNoZWNrc3VtIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+CisgICAgICAg
ICAgPGgzPkNoZWNrc3VtIG1pc21hdGNoPC9oMz4KKyAgICAgICAgICBFeHBlY3RlZDogPHNwYW4g
aWQ9ImV4cGVjdGVkLWNoZWNrc3VtIj48L3NwYW4+PGJyPgorICAgICAgICAgIEFjdHVhbDogPHNw
YW4gaWQ9ImFjdHVhbC1jaGVja3N1bSI+PC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwv
dGQ+CisgICAgPC90cj4KKyAgPC90Ym9keT4KKyAgPHRib2R5IGlkPSJ0ZXh0LW91dHB1dHMiIHN0
eWxlPSJkaXNwbGF5OiBub25lIj4KKyAgICA8dHI+CisgICAgICA8dGQgY29sc3Bhbj0iMyI+PGgy
PlRleHQ8L2gyPjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQ+PHByZSBpZD0i
ZXhwZWN0ZWQtdGV4dCI+PC9wcmU+PC90ZD4KKyAgICAgIDx0ZD48cHJlIGlkPSJhY3R1YWwtdGV4
dCI+PC9wcmU+PC90ZD4KKyAgICAgIDx0ZD48cHJlIGlkPSJkaWZmLXRleHQiPjxwcmU+PC90ZD4K
KyAgICA8L3RyPgorICA8L3Rib2R5PgorCis8L3RhYmxlPgorCis8ZGl2IGlkPSJmb290ZXIiPgor
ICA8bGFiZWw+U3RhdGU6IDxzcGFuIGlkPSJzdGF0ZSI+PC9zcGFuPjwvbGFiZWw+CisgIDxsYWJl
bD5FeGlzdGluZyBiYXNlbGluZXM6IDxzcGFuIGlkPSJjdXJyZW50LWJhc2VsaW5lcyI+PC9zcGFu
PjwvbGFiZWw+CisgIDxsYWJlbD4KKyAgICBCYXNlbGluZSB0YXJnZXQ6CisgICAgPHNlbGVjdCBp
ZD0iYmFzZWxpbmUtdGFyZ2V0Ij4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImFuZHJvaWQiPmFuZHJv
aWQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImFuZHJvaWQtdjgiPmFuZHJvaWQtdjg8
L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtIj5jaHJvbWl1bTwvb3B0aW9u
PgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0tZ3B1Ij5jaHJvbWl1bS1ncHU8L29wdGlv
bj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLWdwdS1saW51eCI+Y2hyb21pdW0tZ3B1
LWxpbnV4PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1ncHUtbWFjIj5j
aHJvbWl1bS1ncHUtbWFjPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1n
cHUtd2luIj5jaHJvbWl1bS1ncHUtd2luPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJj
aHJvbWl1bS1saW51eCI+Y2hyb21pdW0tbGludXg8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFs
dWU9ImNocm9taXVtLW1hYyI+Y2hyb21pdW0tbWFjPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZh
bHVlPSJjaHJvbWl1bS13aW4iPmNocm9taXVtLXdpbjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2
YWx1ZT0iY2hyb21pdW0td2luLXZpc3RhIj5jaHJvbWl1bS13aW4tdmlzdGE8L29wdGlvbj4KKyAg
ICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLXdpbi14cCI+Y2hyb21pdW0td2luLXhwPC9vcHRp
b24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJnb29nbGUtY2hyb21lLWxpbnV4MzIiPmdvb2dsZS1j
aHJvbWUtbGludXgzMjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iZ29vZ2xlLWNocm9t
ZS1saW51eDY0Ij5nb29nbGUtY2hyb21lLWxpbnV4NjQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24g
dmFsdWU9Imd0ayI+Z3RrPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMiIHNlbGVj
dGVkPm1hYzwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjLWxlb3BhcmQiPm1hYy1s
ZW9wYXJkPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMtc25vd2xlb3BhcmQiPm1h
Yy1zbm93bGVvcGFyZDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjLXRpZ2VyIj5t
YWMtdGlnZXI8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Im1hYy13azIiPm1hYy13azI8
L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9InF0Ij5xdDwvb3B0aW9uPgorICAgICAgPG9w
dGlvbiB2YWx1ZT0icXQtbGludXgiPnF0LWxpbnV4PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZh
bHVlPSJxdC1tYWMiPnF0LW1hYzwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0icXQtd2lu
Ij5xdC13aW48L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9InF0LXdrMiI+cXQtd2syPC9v
cHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJ3aW4iPndpbjwvb3B0aW9uPgorICAgICAgPG9w
dGlvbiB2YWx1ZT0id2luLXdrMiI+d2luLXdrMjwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1
ZT0id2luLXhwIj53aW4teHA8L29wdGlvbj4KKyAgICA8L3NlbGVjdD4KKyAgPC9sYWJlbD4KKyAg
PGxhYmVsPgorICAgIE1vdmUgY3VycmVudCBiYXNlbGluZXMgdG86CisgICAgPHNlbGVjdCBpZD0i
YmFzZWxpbmUtbW92ZS10byI+CisgICAgICA8b3B0aW9uIHZhbHVlPSJub25lIj5Ob3doZXJlIChy
ZXBsYWNlKTwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iYW5kcm9pZCI+YW5kcm9pZDwv
b3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iYW5kcm9pZC12OCI+YW5kcm9pZC12ODwvb3B0
aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0iPmNocm9taXVtPC9vcHRpb24+Cisg
ICAgICA8b3B0aW9uIHZhbHVlPSJjaHJvbWl1bS1ncHUiPmNocm9taXVtLWdwdTwvb3B0aW9uPgor
ICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0tZ3B1LWxpbnV4Ij5jaHJvbWl1bS1ncHUtbGlu
dXg8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLWdwdS1tYWMiPmNocm9t
aXVtLWdwdS1tYWM8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9taXVtLWdwdS13
aW4iPmNocm9taXVtLWdwdS13aW48L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9ImNocm9t
aXVtLWxpbnV4Ij5jaHJvbWl1bS1saW51eDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0i
Y2hyb21pdW0tbWFjIj5jaHJvbWl1bS1tYWM8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9
ImNocm9taXVtLXdpbiI+Y2hyb21pdW0td2luPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVl
PSJjaHJvbWl1bS13aW4tdmlzdGEiPmNocm9taXVtLXdpbi12aXN0YTwvb3B0aW9uPgorICAgICAg
PG9wdGlvbiB2YWx1ZT0iY2hyb21pdW0td2luLXhwIj5jaHJvbWl1bS13aW4teHA8L29wdGlvbj4K
KyAgICAgIDxvcHRpb24gdmFsdWU9Imdvb2dsZS1jaHJvbWUtbGludXgzMiI+Z29vZ2xlLWNocm9t
ZS1saW51eDMyPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJnb29nbGUtY2hyb21lLWxp
bnV4NjQiPmdvb2dsZS1jaHJvbWUtbGludXg2NDwvb3B0aW9uPgorICAgICAgPG9wdGlvbiB2YWx1
ZT0iZ3RrIj5ndGs8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Im1hYyI+bWFjPC9vcHRp
b24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMtbGVvcGFyZCI+bWFjLWxlb3BhcmQ8L29wdGlv
bj4KKyAgICAgIDxvcHRpb24gdmFsdWU9Im1hYy1zbm93bGVvcGFyZCI+bWFjLXNub3dsZW9wYXJk
PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJtYWMtdGlnZXIiPm1hYy10aWdlcjwvb3B0
aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0ibWFjLXdrMiI+bWFjLXdrMjwvb3B0aW9uPgorICAg
ICAgPG9wdGlvbiB2YWx1ZT0icXQiPnF0PC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJx
dC1saW51eCI+cXQtbGludXg8L29wdGlvbj4KKyAgICAgIDxvcHRpb24gdmFsdWU9InF0LW1hYyI+
cXQtbWFjPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJxdC13aW4iPnF0LXdpbjwvb3B0
aW9uPgorICAgICAgPG9wdGlvbiB2YWx1ZT0icXQtd2syIj5xdC13azI8L29wdGlvbj4KKyAgICAg
IDxvcHRpb24gdmFsdWU9IndpbiI+d2luPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJ3
aW4td2syIj53aW4td2syPC9vcHRpb24+CisgICAgICA8b3B0aW9uIHZhbHVlPSJ3aW4teHAiPndp
bi14cDwvb3B0aW9uPiAgICAgIAorICAgIDwvc2VsZWN0PgorICA8L2xhYmVsPgorCisgIDwhLS0g
QWRkIGEgZHVtbXkgPGJ1dHRvbj4gbm9kZSBzbyB0aGF0IHRoaXMgbGluZXMgdXAgd2l0aCB0aGUg
dGV4dCBvbiB0aGUgbGVmdCAtLT4KKyAgPGJ1dHRvbiBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVu
Ij48L2J1dHRvbj4KKyAgCisgIDxkaXYgaWQ9ImFjdGlvbi1idXR0b25zIj4KKyAgICA8c3BhbiBp
ZD0idG9nZ2xlLXF1ZXVlIiBjbGFzcz0ibGluayI+UXVldWU8L3NwYW4+CisgICAgPGJ1dHRvbiBp
ZD0iYWRkLXRvLXJlYmFzZWxpbmUtcXVldWUiPkFkZCB0byByZWJhc2VsaW5lIHF1ZXVlPC9idXR0
b24+CisgIDwvZGl2PgorPC9kaXY+CisKKzx0YWJsZSBpZD0ibG91cGUiIHN0eWxlPSJkaXNwbGF5
OiBub25lIj4KKyAgPHRyPgorICAgIDx0ZCBjb2xzcGFuPSIzIiBpZD0ibG91cGUtaW5mbyI+Cisg
ICAgICA8c3BhbiBpZD0ibG91cGUtY2xvc2UiIGNsYXNzPSJsaW5rIj5DbG9zZTwvc3Bhbj4KKyAg
ICAgIDxsYWJlbD5Db29yZGluYXRlOiA8c3BhbiBpZD0ibG91cGUtY29vcmRpbmF0ZSI+PC9zcGFu
PjwvbGFiZWw+CisgICAgPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZD4KKyAgICAgIDxk
aXYgY2xhc3M9ImxvdXBlLWNvbnRhaW5lciI+CisgICAgICAgIDxjYW52YXMgaWQ9ImV4cGVjdGVk
LWxvdXBlIiB3aWR0aD0iMjEwIiBoZWlnaHQ9IjIxMCI+PC9jYW52YXM+CisgICAgICAgIDxkaXYg
Y2xhc3M9ImNlbnRlci1oaWdobGlnaHQiPjwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC90ZD4K
KyAgICA8dGQ+CisgICAgICA8ZGl2IGNsYXNzPSJsb3VwZS1jb250YWluZXIiPgorICAgICAgICA8
Y2FudmFzIGlkPSJhY3R1YWwtbG91cGUiIHdpZHRoPSIyMTAiIGhlaWdodD0iMjEwIj48L2NhbnZh
cz4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2VudGVyLWhpZ2hsaWdodCI+PC9kaXY+CisgICAgICA8
L2Rpdj4KKyAgICA8L3RkPgorICAgIDx0ZD4KKyAgICAgIDxkaXYgY2xhc3M9ImxvdXBlLWNvbnRh
aW5lciI+CisgICAgICAgIDxjYW52YXMgaWQ9ImRpZmYtbG91cGUiIHdpZHRoPSIyMTAiIGhlaWdo
dD0iMjEwIj48L2NhbnZhcz4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2VudGVyLWhpZ2hsaWdodCI+
PC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L3RkPgorICA8L3RyPgorICA8dHIgaWQ9ImxvdXBl
LWNvbG9ycyI+CisgICAgPHRkPjxsYWJlbD5FeHAuIGNvbG9yOiA8c3BhbiBpZD0iZXhwZWN0ZWQt
bG91cGUtY29sb3IiPjwvc3Bhbj48L2xhYmVsPjwvdGQ+CisgICAgPHRkPjxsYWJlbD5BY3R1YWwg
Y29sb3I6IDxzcGFuIGlkPSJhY3R1YWwtbG91cGUtY29sb3IiPjwvc3Bhbj48L2xhYmVsPjwvdGQ+
CisgICAgPHRkPjxsYWJlbD5EaWZmIGNvbG9yOiA8c3BhbiBpZD0iZGlmZi1sb3VwZS1jb2xvciI+
PC9zcGFuPjwvbGFiZWw+PC90ZD4KKyAgPC90cj4KKzwvdGFibGU+CisKKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5jc3MgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL21haW4uY3NzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjk4YTZkZjY3MzQxZjc4OGJmODk5YjU0MTNhNzAyMTM5MTA1MmY1N2YKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0
YS9yZWJhc2VsaW5lc2VydmVyL21haW4uY3NzCkBAIC0wLDAgKzEsMjU1IEBACitib2R5IHsKKyAg
Zm9udC1zaXplOiAxMnB4OworICBmb250LWZhbWlseTogSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1z
ZXJpZjsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworfQorCisubG9hZGluZyB7CisgIG9w
YWNpdHk6IDAuNTsKK30KKworZGl2IHsKKyAgbWFyZ2luOiAwOworfQorCithLCAubGluayB7Cisg
IGNvbG9yOiAjYWFmOworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY3Vyc29yOiBw
b2ludGVyOyAgICAgIAorfQorCisubGluay5zZWxlY3RlZCB7CisgIGNvbG9yOiAjZmZmOworICBm
b250LXdlaWdodDogYm9sZDsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisjbG9nLAor
I3F1ZXVlIHsKKyAgcGFkZGluZzogLjI1ZW0gMCAwIC4yNWVtOworICBwb3NpdGlvbjogYWJzb2x1
dGU7CisgIHJpZ2h0OiAwOworICBoZWlnaHQ6IDIwMHB4OworICBvdmVyZmxvdzogYXV0bzsKKyAg
YmFja2dyb3VuZDogI2ZmZjsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAxcHggMXB4IDVweCByZ2Jh
KDAsIDAsIDAsIC41KTsKK30KKworI2xvZyB7CisgIHRvcDogMmVtOworICB3aWR0aDogNTAwcHg7
Cit9CisKKyNxdWV1ZSB7CisgIGJvdHRvbTogM2VtOworICB3aWR0aDogNDAwcHg7Cit9CisKKyNx
dWV1ZS1zZWxlY3QgeworICBkaXNwbGF5OiBibG9jazsKKyAgd2lkdGg6IDM5MHB4OworfQorCisj
aGVhZGVyLAorI2Zvb3RlciB7CisgIHBhZGRpbmc6IC41ZW0gMWVtOyAgICAKKyAgYmFja2dyb3Vu
ZDogIzMzMzsKKyAgY29sb3I6ICNmZmY7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggNXB4
IHJnYmEoMCwgMCwgMCwgMC41KTsKK30KKworI2hlYWRlciAuZGl2aWRlciwKKyNmb290ZXIgLmRp
dmlkZXIgeworICBvcGFjaXR5OiAuMzsKKyAgcGFkZGluZzogMCAuNWVtOworfQorCisjaGVhZGVy
IHsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisjaGVhZGVyIGxhYmVsLAorI2Zvb3RlciBs
YWJlbCB7CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgY29sb3I6ICNjY2M7Cit9CisKKyN0ZXN0
LWxpbmsgeworICBtYXJnaW4tcmlnaHQ6IDFlbTsKK30KKworI2hlYWRlciBsYWJlbCBzcGFuLAor
I2Zvb3RlciBsYWJlbCBzcGFuIHsKKyAgY29sb3I6ICNmZmY7CisgIGZvbnQtd2VpZ2h0OiBib2xk
OworfQorCisjbmF2LWJ1dHRvbnMgeworICB3aGl0ZS1zcGFjZTogbm93cmFwOworfQorCisjbmF2
LWJ1dHRvbnMgYnV0dG9uIHsKKyAgYmFja2dyb3VuZDogI2ZmZjsKKyAgYm9yZGVyOiAwOworICBi
b3JkZXItcmFkaXVzOiAxMHB4OworfQorCisjbmF2LWJ1dHRvbnMgYnV0dG9uOmFjdGl2ZSB7Cisg
IC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDVweCAjMzNmIGluc2V0OworICBiYWNrZ3JvdW5kOiAj
YWFhOworfQorCisjbmF2LWJ1dHRvbnMgYnV0dG9uW2Rpc2FibGVkXSB7CisgIG9wYWNpdHk6IC41
OworfQorCisjY29udHJvbHMgeworICBmbG9hdDogcmlnaHQ7Cit9CisKKyN0ZXN0LW91dHB1dCB7
CisgIGJvcmRlci1zcGFjaW5nOiAwOworICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICBt
YXJnaW46IDAgYXV0bzsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKyN0ZXN0LW91dHB1dCB0ZCwKKyN0
ZXN0LW91dHB1dCB0aCB7CisgIHBhZGRpbmc6IDA7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9
CisKKyNpbWFnZS1vdXRwdXRzIGltZywKKyNpbWFnZS1vdXRwdXRzIGNhbnZhcywKKyNpbWFnZS1v
dXRwdXRzICNkaWZmLWNoZWNrc3VtIHsKKyAgd2lkdGg6IDgwMHB4OworICBoZWlnaHQ6IDYwMHB4
OworICBib3JkZXI6IHNvbGlkIDFweCAjZGRkOworICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25l
OworICAtd2Via2l0LXVzZXItZHJhZzogbm9uZTsKK30KKworI2ltYWdlLW91dHB1dHMgaW1nLAor
I2ltYWdlLW91dHB1dHMgY2FudmFzIHsKKyAgY3Vyc29yOiBjcm9zc2hhaXI7Cit9CisKKyNpbWFn
ZS1vdXRwdXRzIGltZy5sb2FkaW5nLAorI2ltYWdlLW91dHB1dHMgY2FudmFzLmxvYWRpbmcgewor
ICBvcGFjaXR5OiAuNTsKK30KKworI2ltYWdlLW91dHB1dHMgI2FjdHVhbC1pbWFnZSB7CisgIG1h
cmdpbjogMCAxZW07Cit9CisKKyN0ZXN0LW91dHB1dCAjbGFiZWxzIHRoIHsKKyAgdGV4dC1hbGln
bjogY2VudGVyOworICBjb2xvcjogIzY2NjsKK30KKworI3RleHQtb3V0cHV0cyBwcmUgeworICBo
ZWlnaHQ6IDYwMHB4OworICB3aWR0aDogODAwcHg7CisgIG92ZXJmbG93OiBhdXRvOworfQorCisj
dGVzdC1vdXRwdXQgaDIgeworICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2NjYzsKKyAgZm9u
dC13ZWlnaHQ6IGJvbGQ7CisgIG1hcmdpbjogMDsKKyAgYmFja2dyb3VuZDogI2VlZTsKK30KKwor
I2Zvb3RlciB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwOworICBsZWZ0OiAw
OworICByaWdodDogMDsKKyAgbWFyZ2luLXRvcDogMWVtOworfQorCisjc3RhdGUubmVlZHNfcmVi
YXNlbGluZSB7CisgIGNvbG9yOiB5ZWxsb3c7Cit9Cisjc3RhdGUucmViYXNlbGluZV9mYWlsZWQg
eworICBjb2xvcjogcmVkOworfQorI3N0YXRlLnJlYmFzZWxpbmVfc3VjY2VlZGVkIHsKKyAgY29s
b3I6IGdyZWVuOworfQorI3N0YXRlLmluX3F1ZXVlIHsKKyAgY29sb3I6IGdyYXk7Cit9CisKKyNh
Y3Rpb24tYnV0dG9ucyB7CisgIGZsb2F0OiByaWdodDsKK30KKworI2FjdGlvbi1idXR0b25zIC5s
aW5rIHsKKyAgbWFyZ2luLXJpZ2h0OiAxZW07Cit9CisKKyNmb290ZXIgYnV0dG9uIHsKKyAgcGFk
ZGluZzogMWVtOworfQorCisjbG91cGUgeworICAtd2Via2l0LWJveC1zaGFkb3c6IDJweCAycHgg
NXB4IHJnYmEoMCwgMCwgMCwgLjUpOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHdpZHRoOiA2
MzRweDsKKyAgdG9wOiA1MCU7CisgIGxlZnQ6IDUwJTsKKyAgbWFyZ2luLWxlZnQ6IC0xNTFweDsK
KyAgbWFyZ2luLXRvcDogLTUwcHg7CisgIGJhY2tncm91bmQ6ICNmZmY7CisgIGJvcmRlci1zcGFj
aW5nOiAwOworICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworfQorCisjbG91cGUgdGQgewor
ICBwYWRkaW5nOiAwOworICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOyAgICAgCit9CisKKyNsb3Vw
ZSBsYWJlbCB7CisgIGNvbG9yOiAjOTk5OworICBwYWRkaW5nLXJpZ2h0OiAxZW07Cit9CisKKyNs
b3VwZSBzcGFuIHsKKyAgY29sb3I6ICMwMDA7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisj
bG91cGUgI2xvdXBlLWNsb3NlIHsKKyAgZmxvYXQ6IHJpZ2h0OworfQorCisjbG91cGUgI2xvdXBl
LWluZm8geworICBiYWNrZ3JvdW5kOiAjZWVlOworICBwYWRkaW5nOiAuM2VtIC41ZW07Cit9CisK
KyNsb3VwZSAjbG91cGUtY29sb3JzIHRkIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisj
bG91cGUgLmxvdXBlLWNvbnRhaW5lciB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgd2lkdGg6
IDIxMHB4OworICBoZWlnaHQ6IDIxMHB4OworfQorCisjbG91cGUgLmNlbnRlci1oaWdobGlnaHQg
eworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHdpZHRoOiAxMHB4OworICBoZWlnaHQ6IDEwcHg7
CisgIHRvcDogNTAlOworICBsZWZ0OiA1MCU7CisgIG1hcmdpbi1sZWZ0OiAtNXB4OworICBtYXJn
aW4tdG9wOiAtNXB4OworICBvdXRsaW5lOiBzb2xpZCAxcHggIzk5OTsKK30KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL21haW4uanMgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL21h
aW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZWE3NDgyZjI4MTQ4MzdkMjYzMjRmMmQ5YjdhNTk2MTZjZGI5ODU5
OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5qcwpAQCAtMCwwICsxLDY4OCBAQAor
dmFyIFNUQVRFX05FRURTX1JFQkFTRUxJTkUgPSAnbmVlZHNfcmViYXNlbGluZSc7Cit2YXIgU1RB
VEVfUkVCQVNFTElORV9GQUlMRUQgPSAncmViYXNlbGluZV9mYWlsZWQnOwordmFyIFNUQVRFX1JF
QkFTRUxJTkVfU1VDQ0VFREVEID0gJ3JlYmFzZWxpbmVfc3VjY2VlZGVkJzsKK3ZhciBTVEFURV9J
Tl9RVUVVRSA9ICdpbl9xdWV1ZSc7Cit2YXIgU1RBVEVfVE9fRElTUExBWV9TVEFURSA9IHt9Owor
U1RBVEVfVE9fRElTUExBWV9TVEFURVtTVEFURV9ORUVEU19SRUJBU0VMSU5FXSA9ICdOZWVkcyBy
ZWJhc2VsaW5lJzsKK1NUQVRFX1RPX0RJU1BMQVlfU1RBVEVbU1RBVEVfUkVCQVNFTElORV9GQUlM
RURdID0gJ1JlYmFzZWxpbmUgZmFpbGVkJzsKK1NUQVRFX1RPX0RJU1BMQVlfU1RBVEVbU1RBVEVf
UkVCQVNFTElORV9TVUNDRUVERURdID0gJ1JlYmFzZWxpbmUgc3VjY2VlZGVkJzsKK1NUQVRFX1RP
X0RJU1BMQVlfU1RBVEVbU1RBVEVfSU5fUVVFVUVdID0gJ0luIHF1ZXVlJzsKKwordmFyIHJlc3Vs
dHM7Cit2YXIgdGVzdHNCeUZhaWx1cmVUeXBlID0ge307Cit2YXIgdGVzdHNCeURpcmVjdG9yeSA9
IHt9OwordmFyIHNlbGVjdGVkVGVzdHMgPSBbXTsKK3ZhciBpblByb2dyZXNzUmViYXNlbGluZUNv
dW50ID0gMDsKKworZnVuY3Rpb24gJChpZCkgeworICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoaWQpOworfQorCitmdW5jdGlvbiBtYWluKCkgeworICAkKCdmYWlsdXJlLXR5cGUtc2Vs
ZWN0b3InKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBzZWxlY3RGYWlsdXJlVHlwZSk7Cisg
ICQoJ2RpcmVjdG9yeS1zZWxlY3RvcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHNlbGVj
dERpcmVjdG9yeSk7CisgICQoJ3Rlc3Qtc2VsZWN0b3InKS5hZGRFdmVudExpc3RlbmVyKCdjaGFu
Z2UnLCBzZWxlY3RUZXN0KTsKKyAgJCgnbmV4dC10ZXN0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xp
Y2snLCBuZXh0VGVzdCk7CisgICQoJ3ByZXZpb3VzLXRlc3QnKS5hZGRFdmVudExpc3RlbmVyKCdj
bGljaycsIHByZXZpb3VzVGVzdCk7CisKKyAgJCgnYWRkLXRvLXJlYmFzZWxpbmUtcXVldWUnKS5h
ZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFkZFRvUmViYXNlbGluZVF1ZXVlKTsKKyAgJCgncXVl
dWUtc2VsZWN0JykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlU3RhdGUpOworICAk
KCdyZW1vdmUtcXVldWUtc2VsZWN0aW9uJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1v
dmVTZWxlY3Rpb25Gcm9tUmViYXNlbGluZVF1ZXVlKTsKKyAgJCgncmViYXNlbGluZS1xdWV1ZScp
LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmViYXNlbGluZVF1ZXVlKTsKKworICAkKCdleHBl
Y3RlZC1pbWFnZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd0xvdXBlKTsKKyAgJCgn
YWN0dWFsLWltYWdlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzaG93TG91cGUpOworICAk
KCdkaWZmLWNhbnZhcycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd0xvdXBlKTsKKyAg
JCgnbG91cGUtY2xvc2UnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhpZGVMb3VwZSk7Cisg
ICQoJ3RvZ2dsZS1sb2cnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge3Rv
Z2dsZSgnbG9nJyl9KTsKKyAgJCgndG9nZ2xlLXF1ZXVlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xp
Y2snLCBmdW5jdGlvbigpIHt0b2dnbGUoJ3F1ZXVlJyl9KTsKKworICBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAoZXZlbnQuYWx0
S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkg
eworICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGV2ZW50LmtleUlkZW50
aWZpZXIpIHsKKyAgICAgIGNhc2UgJ0xlZnQnOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBwcmV2
aW91c1Rlc3QoKTsgYnJlYWs7CisgICAgICBjYXNlICdSaWdodCc6IGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7IG5leHRUZXN0KCk7IGJyZWFrOworICAgICAgY2FzZSAnVSswMDUxJzogYWRkVG9SZWJh
c2VsaW5lUXVldWUoKTsgYnJlYWs7CisgICAgICBjYXNlICdVKzAwNTInOiByZWJhc2VsaW5lUXVl
dWUoKTsgYnJlYWs7CisgICAgfQorICB9KTsKKyAgCisgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJl
cXVlc3QoKTsKKyAgeGhyLm9wZW4oJ0dFVCcsICcvcmVzdWx0cy5qc29uJyk7CisgIHhoci5hZGRF
dmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7CisgICAgcmVzdWx0cyA9IEpTT04ucGFy
c2UoeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgZGlzcGxheVJlc3VsdHMoKTsgIAorICB9KTsKKyAg
eGhyLnNlbmQoKTsKK30KKworZnVuY3Rpb24gZGlzcGxheVJlc3VsdHMoKSB7CisgIHZhciBmYWls
dXJlVHlwZVNlbGVjdG9yID0gJCgnZmFpbHVyZS10eXBlLXNlbGVjdG9yJyk7CisgIHZhciBmYWls
dXJlVHlwZXMgPSBbXTsKKyAgCisgIGZvciAodmFyIHRlc3ROYW1lIGluIHJlc3VsdHMudGVzdHMp
IHsKKyAgICB2YXIgdGVzdCA9IHJlc3VsdHMudGVzdHNbdGVzdE5hbWVdOworICAgIGlmICh0ZXN0
LmFjdHVhbCA9PSAnUEFTUycpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICB2YXIgZmFp
bHVyZVR5cGUgPSB0ZXN0LmFjdHVhbCArICcgKGV4cGVjdGVkICcgKyB0ZXN0LmV4cGVjdGVkICsg
JyknOworICAgIGlmICghKGZhaWx1cmVUeXBlIGluIHRlc3RzQnlGYWlsdXJlVHlwZSkpIHsKKyAg
ICAgIHRlc3RzQnlGYWlsdXJlVHlwZVtmYWlsdXJlVHlwZV0gPSBbXTsKKyAgICAgIGZhaWx1cmVU
eXBlcy5wdXNoKGZhaWx1cmVUeXBlKTsKKyAgICB9CisgICAgdGVzdHNCeUZhaWx1cmVUeXBlW2Zh
aWx1cmVUeXBlXS5wdXNoKHRlc3ROYW1lKTsKKyAgfQorICAKKyAgZmFpbHVyZVR5cGVzLnNvcnQo
ZnVuY3Rpb24oYSwgYikgeworICAgIHJldHVybiB0ZXN0c0J5RmFpbHVyZVR5cGVbYl0ubGVuZ3Ro
IC0gdGVzdHNCeUZhaWx1cmVUeXBlW2FdLmxlbmd0aDsKKyAgfSk7CisgIAorICBmb3IgKHZhciBp
ID0gMCwgZmFpbHVyZVR5cGU7IGZhaWx1cmVUeXBlID0gZmFpbHVyZVR5cGVzW2ldOyBpKyspIHsK
KyAgICB2YXIgZmFpbHVyZVR5cGVPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRp
b24nKTsKKyAgICBmYWlsdXJlVHlwZU9wdGlvbi52YWx1ZSA9IGZhaWx1cmVUeXBlOworICAgIGZh
aWx1cmVUeXBlT3B0aW9uLnRleHRDb250ZW50ID0gZmFpbHVyZVR5cGUgKyAnIC0gJyArIHRlc3Rz
QnlGYWlsdXJlVHlwZVtmYWlsdXJlVHlwZV0ubGVuZ3RoICsgJyB0ZXN0cyc7CisgICAgZmFpbHVy
ZVR5cGVTZWxlY3Rvci5hcHBlbmRDaGlsZChmYWlsdXJlVHlwZU9wdGlvbik7CisgIH0KKyAgCisg
IHNlbGVjdEZhaWx1cmVUeXBlKCk7CisgIAorICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1v
dmUoJ2xvYWRpbmcnKTsKK30KKworZnVuY3Rpb24gc2VsZWN0RmFpbHVyZVR5cGUoKSB7CisgIHZh
ciBzZWxlY3RlZEZhaWx1cmVUeXBlID0gZ2V0U2VsZWN0VmFsdWUoJ2ZhaWx1cmUtdHlwZS1zZWxl
Y3RvcicpOworICB2YXIgdGVzdHMgPSB0ZXN0c0J5RmFpbHVyZVR5cGVbc2VsZWN0ZWRGYWlsdXJl
VHlwZV07CisgIAorICAvLyBJbmNsdWRlIGEgYXBlY2lhbCBvcHRpb24gZm9yIGFsbCB0ZXN0cwor
ICB0ZXN0c0J5RGlyZWN0b3J5ID0geydbYWxsXSc6IHRlc3RzfTsKKyAgdmFyIGRpc3BsYXlEaXJl
Y3RvcnlOYW1lc0J5RGlyZWN0b3J5ID0geydbYWxsXSc6ICdhbGwnfTsKKyAgdmFyIGRpcmVjdG9y
aWVzID0gWydbYWxsXSddOworICAKKyAgZm9yICh2YXIgaSA9IDAsIHRlc3Q7IHRlc3QgPSB0ZXN0
c1tpXTsgaSsrKSB7CisgICAgdmFyIHBhdGhQaWVjZXMgPSB0ZXN0LnNwbGl0KCcvJyk7CisgICAg
dmFyIGRpcmVjdG9yeSA9ICcnOworICAgIAorICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGF0aFBp
ZWNlcy5sZW5ndGggLSAxOyBqKyspIHsKKyAgICAgIGRpcmVjdG9yeSArPSBwYXRoUGllY2VzW2pd
ICsgJy8nOworICAgICAgaWYgKCEoZGlyZWN0b3J5IGluIHRlc3RzQnlEaXJlY3RvcnkpKSB7Cisg
ICAgICAgIHRlc3RzQnlEaXJlY3RvcnlbZGlyZWN0b3J5XSA9IFtdOworICAgICAgICB2YXIgZGlz
cGxheURpcmVjdG9yeU5hbWUgPSBuZXcgQXJyYXkoaiAqIDYpLmpvaW4oJyZuYnNwOycpICsgcGF0
aFBpZWNlc1tqXTsKKyAgICAgICAgZGlzcGxheURpcmVjdG9yeU5hbWVzQnlEaXJlY3RvcnlbZGly
ZWN0b3J5XSA9IGRpc3BsYXlEaXJlY3RvcnlOYW1lOworICAgICAgICBkaXJlY3Rvcmllcy5wdXNo
KGRpcmVjdG9yeSk7CisgICAgICB9CisgICAgICAKKyAgICAgIHRlc3RzQnlEaXJlY3RvcnlbZGly
ZWN0b3J5XS5wdXNoKHRlc3QpOworICAgIH0KKyAgfQorICAKKyAgZGlyZWN0b3JpZXMuc29ydCgp
OworCisgIHZhciBkaXJlY3RvcnlTZWxlY3RvciA9ICQoJ2RpcmVjdG9yeS1zZWxlY3RvcicpOyAg
CisgIGRpcmVjdG9yeVNlbGVjdG9yLmlubmVySFRNTCA9ICcnOworICAKKyAgZm9yICh2YXIgaSA9
IDAsIGRpcmVjdG9yeTsgZGlyZWN0b3J5ID0gZGlyZWN0b3JpZXNbaV07IGkrKykgeworICAgIHZh
ciBkaXJlY3RvcnlPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKKyAg
ICBkaXJlY3RvcnlPcHRpb24udmFsdWUgPSBkaXJlY3Rvcnk7CisgICAgZGlyZWN0b3J5T3B0aW9u
LmlubmVySFRNTCA9CisgICAgICAgIGRpc3BsYXlEaXJlY3RvcnlOYW1lc0J5RGlyZWN0b3J5W2Rp
cmVjdG9yeV0gKyAnIC0gJyArCisgICAgICAgIHRlc3RzQnlEaXJlY3RvcnlbZGlyZWN0b3J5XS5s
ZW5ndGggKyAnIHRlc3RzJzsKKyAgICBkaXJlY3RvcnlTZWxlY3Rvci5hcHBlbmRDaGlsZChkaXJl
Y3RvcnlPcHRpb24pOyAgICAKKyAgfQorICAKKyAgc2VsZWN0RGlyZWN0b3J5KCk7Cit9CisKK2Z1
bmN0aW9uIHNlbGVjdERpcmVjdG9yeSgpIHsKKyAgdmFyIHByZXZpb3VzbHlTZWxlY3RlZFRlc3Qg
PSBnZXRTZWxlY3RlZFRlc3QoKTsKKyAgCisgIHZhciBzZWxlY3RlZERpcmVjdG9yeSA9IGdldFNl
bGVjdFZhbHVlKCdkaXJlY3Rvcnktc2VsZWN0b3InKTsKKyAgc2VsZWN0ZWRUZXN0cyA9IHRlc3Rz
QnlEaXJlY3Rvcnlbc2VsZWN0ZWREaXJlY3RvcnldOworCisgIHNlbGVjdGVkVGVzdHMuc29ydCgp
OworCisgIHZhciB0ZXN0U2VsZWN0b3IgPSAkKCd0ZXN0LXNlbGVjdG9yJyk7CisgIHRlc3RTZWxl
Y3Rvci5pbm5lckhUTUwgPSAnJzsKKyAgdmFyIHRlc3RzQnlTdGF0ZSA9IHt9OworICAKKyAgc2Vs
ZWN0ZWRUZXN0cy5mb3JFYWNoKGZ1bmN0aW9uKHRlc3ROYW1lKSB7CisgICAgdmFyIHN0YXRlID0g
cmVzdWx0cy50ZXN0c1t0ZXN0TmFtZV0uc3RhdGU7CisgICAgaWYgKHN0YXRlID09IFNUQVRFX0lO
X1FVRVVFKSB7CisgICAgICBzdGF0ZSA9IFNUQVRFX05FRURTX1JFQkFTRUxJTkU7CisgICAgfQor
ICAgIGlmICghKHN0YXRlIGluIHRlc3RzQnlTdGF0ZSkpIHsKKyAgICAgIHRlc3RzQnlTdGF0ZVtz
dGF0ZV0gPSBbXTsKKyAgICB9CisgICAgdGVzdHNCeVN0YXRlW3N0YXRlXS5wdXNoKHRlc3ROYW1l
KTsKKyAgfSk7CisgIAorICB2YXIgb3B0aW9uSW5kZXhCeVRlc3QgPSB7fTsKKyAgCisgIGZvciAo
dmFyIHN0YXRlIGluIHRlc3RzQnlTdGF0ZSkgeworICAgIHZhciBzdGF0ZU9wdGlvbiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOworICAgIHN0YXRlT3B0aW9uLnRleHRDb250ZW50
ID0gU1RBVEVfVE9fRElTUExBWV9TVEFURVtzdGF0ZV07CisgICAgc3RhdGVPcHRpb24uZGlzYWJs
ZWQgPSB0cnVlOworICAgIHRlc3RTZWxlY3Rvci5hcHBlbmRDaGlsZChzdGF0ZU9wdGlvbik7ICAg
IAorICAgIAorICAgIHRlc3RzQnlTdGF0ZVtzdGF0ZV0uZm9yRWFjaChmdW5jdGlvbih0ZXN0TmFt
ZSkgeworICAgICAgdmFyIHRlc3RPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRp
b24nKTsKKyAgICAgIHRlc3RPcHRpb24udmFsdWUgPSB0ZXN0TmFtZTsKKyAgICAgIHZhciB0ZXN0
RGlzcGxheU5hbWUgPSB0ZXN0TmFtZTsKKyAgICAgIGlmICh0ZXN0TmFtZS5sYXN0SW5kZXhPZihz
ZWxlY3RlZERpcmVjdG9yeSkgPT0gMCkgeworICAgICAgICB0ZXN0RGlzcGxheU5hbWUgPSB0ZXN0
TmFtZS5zdWJzdHJpbmcoc2VsZWN0ZWREaXJlY3RvcnkubGVuZ3RoKTsKKyAgICAgIH0KKyAgICAg
IHRlc3RPcHRpb24uaW5uZXJIVE1MID0gJyZuYnNwOyZuYnNwOycgKyB0ZXN0RGlzcGxheU5hbWU7
CisgICAgICBvcHRpb25JbmRleEJ5VGVzdFt0ZXN0TmFtZV0gPSB0ZXN0U2VsZWN0b3Iub3B0aW9u
cy5sZW5ndGg7CisgICAgICB0ZXN0U2VsZWN0b3IuYXBwZW5kQ2hpbGQodGVzdE9wdGlvbik7ICAg
ICAgCisgICAgfSk7CisgIH0KKyAgCisgIGlmIChwcmV2aW91c2x5U2VsZWN0ZWRUZXN0IGluIG9w
dGlvbkluZGV4QnlUZXN0KSB7CisgICAgdGVzdFNlbGVjdG9yLnNlbGVjdGVkSW5kZXggPSBvcHRp
b25JbmRleEJ5VGVzdFtwcmV2aW91c2x5U2VsZWN0ZWRUZXN0XTsKKyAgfSBlbHNlIGlmIChTVEFU
RV9ORUVEU19SRUJBU0VMSU5FIGluIHRlc3RzQnlTdGF0ZSkgeworICAgIHRlc3RTZWxlY3Rvci5z
ZWxlY3RlZEluZGV4ID0gb3B0aW9uSW5kZXhCeVRlc3RbdGVzdHNCeVN0YXRlW1NUQVRFX05FRURT
X1JFQkFTRUxJTkVdWzBdXTsKKyAgICBzZWxlY3RUZXN0KCk7ICAgIAorICB9IGVsc2UgeworICAg
IHRlc3RTZWxlY3Rvci5zZWxlY3RlZEluZGV4ID0gMTsKKyAgICBzZWxlY3RUZXN0KCk7ICAgIAor
ICB9Cit9CisKK2Z1bmN0aW9uIGdldFNlbGVjdFZhbHVlKGlkKSB7CisgIHZhciBzZWxlY3QgPSAk
KGlkKTsKKyAgaWYgKHNlbGVjdC5zZWxlY3RlZEluZGV4ID09IC0xKSB7CisgICAgcmV0dXJuIG51
bGw7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHNlbGVjdC5vcHRpb25zW3NlbGVjdC5zZWxlY3Rl
ZEluZGV4XS52YWx1ZTsKKyB9Cit9CisKK2Z1bmN0aW9uIGdldFNlbGVjdGVkVGVzdCgpIHsKKyAg
cmV0dXJuIGdldFNlbGVjdFZhbHVlKCd0ZXN0LXNlbGVjdG9yJyk7Cit9CisKK2Z1bmN0aW9uIHBy
ZWZldGNoKCkgeworICB2YXIgdGVzdFNlbGVjdG9yID0gJCgndGVzdC1zZWxlY3RvcicpOworICBp
ZiAodGVzdFNlbGVjdG9yLnNlbGVjdGVkSW5kZXggPT0gdGVzdFNlbGVjdG9yLm9wdGlvbnMubGVu
Z3RoIC0gMSkgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbmV4dFRlc3QgPSB0ZXN0U2VsZWN0
b3Iub3B0aW9uc1t0ZXN0U2VsZWN0b3Iuc2VsZWN0ZWRJbmRleCArIDFdLnZhbHVlOworICBpZiAo
cmVzdWx0cy50ZXN0c1tuZXh0VGVzdF0uYWN0dWFsLmluZGV4T2YoJ0lNQUdFJykgIT0gLTEpIHsK
KyAgICBuZXcgSW1hZ2UoKS5zcmMgPSAnL3Rlc3RfcmVzdWx0P3Rlc3Q9JyArIG5leHRUZXN0ICsg
JyZtb2RlPWV4cGVjdGVkLWltYWdlJzsKKyAgICBuZXcgSW1hZ2UoKS5zcmMgPSAnL3Rlc3RfcmVz
dWx0P3Rlc3Q9JyArIG5leHRUZXN0ICsgJyZtb2RlPWFjdHVhbC1pbWFnZSc7ICAgIAorICB9Cit9
CisKK2Z1bmN0aW9uIHNlbGVjdFRlc3QoKSB7CisgIHZhciBzZWxlY3RlZFRlc3QgPSBnZXRTZWxl
Y3RlZFRlc3QoKTsKKyAgCisgIGlmIChyZXN1bHRzLnRlc3RzW3NlbGVjdGVkVGVzdF0uYWN0dWFs
LmluZGV4T2YoJ0lNQUdFJykgIT0gLTEpIHsKKyAgICAkKCdpbWFnZS1vdXRwdXRzJykuc3R5bGUu
ZGlzcGxheSA9ICcnOworICAgIGRpc3BsYXlJbWFnZVJlc3VsdHMoc2VsZWN0ZWRUZXN0KTsKKyAg
fSBlbHNlIHsKKyAgICAkKCdpbWFnZS1vdXRwdXRzJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsg
IAorICB9CisKKyAgaWYgKHJlc3VsdHMudGVzdHNbc2VsZWN0ZWRUZXN0XS5hY3R1YWwuaW5kZXhP
ZignVEVYVCcpICE9IC0xKSB7CisgICAgJCgndGV4dC1vdXRwdXRzJykuc3R5bGUuZGlzcGxheSA9
ICcnOworICAgIGRpc3BsYXlUZXh0UmVzdWx0cyhzZWxlY3RlZFRlc3QpOworICB9IGVsc2Ugewor
ICAgICQoJ3RleHQtb3V0cHV0cycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7ICAKKyAgfQorICAK
KyAgdmFyIGN1cnJlbnRCYXNlbGluZXMgPSAkKCdjdXJyZW50LWJhc2VsaW5lcycpOworICBjdXJy
ZW50QmFzZWxpbmVzLnRleHRDb250ZW50ID0gJyc7CisgIHZhciBiYXNlbGluZXMgPSByZXN1bHRz
LnRlc3RzW3NlbGVjdGVkVGVzdF0uYmFzZWxpbmVzOworICB2YXIgdGVzdE5hbWUgPSBzZWxlY3Rl
ZFRlc3Quc3BsaXQoJy4nKS5zbGljZSgwLCAtMSkuam9pbignLicpOworICBmb3IgKHZhciBwbGF0
Zm9ybSBpbiBiYXNlbGluZXMpIHsKKyAgICBpZiAoY3VycmVudEJhc2VsaW5lcy5maXJzdENoaWxk
KSB7CisgICAgICBjdXJyZW50QmFzZWxpbmVzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCc7ICcpKTsKKyAgICB9CisgICAgY3VycmVudEJhc2VsaW5lcy5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwbGF0Zm9ybSArICcgKCcpKTsKKyAgICBmb3IgKHZhciBp
ID0gMCwgZXh0ZW5zaW9uOyBleHRlbnNpb24gPSBiYXNlbGluZXNbcGxhdGZvcm1dW2ldOyBpKysp
IHsKKyAgICAgIGlmIChpICE9IDApIHsKKyAgICAgICAgY3VycmVudEJhc2VsaW5lcy5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnLCAnKSk7CisgICAgICB9CisgICAgICB2YXIg
bGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKKyAgICAgIHZhciBiYXNlbGluZVRy
YWNVcmwgPSAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9sb2cvdHJ1bmsvTGF5b3V0VGVzdHMvJzsK
KyAgICAgIGlmIChwbGF0Zm9ybSAhPSAnYmFzZScpIHsKKyAgICAgICAgYmFzZWxpbmVUcmFjVXJs
ICs9ICdwbGF0Zm9ybS8nICsgcGxhdGZvcm0gKyAnLyc7CisgICAgICB9CisgICAgICBiYXNlbGlu
ZVRyYWNVcmwgKz0gdGVzdE5hbWUgKyAnLWV4cGVjdGVkJyArIGV4dGVuc2lvbjsKKyAgICAgIGxp
bmsuaHJlZiA9IGJhc2VsaW5lVHJhY1VybDsKKyAgICAgIGlmIChleHRlbnNpb24gPT0gJy5jaGVj
a3N1bScpIHsKKyAgICAgICAgbGluay50ZXh0Q29udGVudCA9ICdjaGsnOyAgICAgIAorICAgICAg
fSBlbHNlIHsKKyAgICAgICAgbGluay50ZXh0Q29udGVudCA9IGV4dGVuc2lvbi5zdWJzdHJpbmco
MSk7CisgICAgICB9CisgICAgICBjdXJyZW50QmFzZWxpbmVzLmFwcGVuZENoaWxkKGxpbmspOwor
ICAgIH0KKyAgICBjdXJyZW50QmFzZWxpbmVzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCcpJykpOworICB9CisgIAorICB1cGRhdGVTdGF0ZSgpOworICBoaWRlTG91cGUoKTsK
KyAgCisgIHByZWZldGNoKCk7Cit9CisKK2Z1bmN0aW9uIHVwZGF0ZVN0YXRlKCkgeworICB2YXIg
dGVzdE5hbWUgPSBnZXRTZWxlY3RlZFRlc3QoKTsKKyAgdmFyIHRlc3RJbmRleCA9IHNlbGVjdGVk
VGVzdHMuaW5kZXhPZih0ZXN0TmFtZSk7CisgIHZhciB0ZXN0Q291bnQgPSBzZWxlY3RlZFRlc3Rz
Lmxlbmd0aAorICAkKCd0ZXN0LWluZGV4JykudGV4dENvbnRlbnQgPSB0ZXN0SW5kZXggKyAxOwor
ICAkKCd0ZXN0LWNvdW50JykudGV4dENvbnRlbnQgPSB0ZXN0Q291bnQ7CisgIAorICAkKCduZXh0
LXRlc3QnKS5kaXNhYmxlZCA9IHRlc3RJbmRleCA9PSB0ZXN0Q291bnQgLSAxOworICAkKCdwcmV2
aW91cy10ZXN0JykuZGlzYWJsZWQgPSB0ZXN0SW5kZXggPT0gMDsKKyAgCisgIHZhciBzdGF0ZSA9
IHJlc3VsdHMudGVzdHNbdGVzdE5hbWVdLnN0YXRlOworICAkKCdhZGQtdG8tcmViYXNlbGluZS1x
dWV1ZScpLmRpc2FibGVkID0gc3RhdGUgIT0gU1RBVEVfTkVFRFNfUkVCQVNFTElORTsKKyAgCisg
ICQoJ3Rlc3QtbGluaycpLmhyZWYgPQorICAgICAgJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJv
d3Nlci90cnVuay9MYXlvdXRUZXN0cy8nICsgdGVzdE5hbWU7CisgIAorICAkKCdzdGF0ZScpLmNs
YXNzTmFtZSA9IHN0YXRlOworICAkKCdzdGF0ZScpLmlubmVySFRNTCA9IFNUQVRFX1RPX0RJU1BM
QVlfU1RBVEVbc3RhdGVdOworICAKKyAgdmFyIHF1ZXVlU2VsZWN0ID0gJCgncXVldWUtc2VsZWN0
Jyk7CisgIHZhciBxdWV1ZUxlbmd0aCA9IHF1ZXVlU2VsZWN0Lm9wdGlvbnMubGVuZ3RoOworICB2
YXIgcmViYXNlbGluZVF1ZXVlID0gJCgncmViYXNlbGluZS1xdWV1ZScpOworICB2YXIgcXVldWVU
b2dnbGUgPSAkKCd0b2dnbGUtcXVldWUnKTsKKyAgaWYgKGluUHJvZ3Jlc3NSZWJhc2VsaW5lQ291
bnQgPiAwKSB7CisgICAgcmViYXNlbGluZVF1ZXVlLmRpc2FibGVkID0gdHJ1ZTsKKyAgICByZWJh
c2VsaW5lUXVldWUudGV4dENvbnRlbnQgPSAnUmViYXNlbGluZSBpbiBwcm9ncmVzcyAoJyArIGlu
UHJvZ3Jlc3NSZWJhc2VsaW5lQ291bnQgKyAnIHRlc3RzIGxlZnQpJzsKKyAgfSBlbHNlIGlmIChx
dWV1ZUxlbmd0aCA9PSAwKSB7CisgICAgcmViYXNlbGluZVF1ZXVlLmRpc2FibGVkID0gdHJ1ZTsK
KyAgICByZWJhc2VsaW5lUXVldWUudGV4dENvbnRlbnQgPSAnUmViYXNlbGluZSBxdWV1ZSc7Cisg
ICAgcXVldWVUb2dnbGUudGV4dENvbnRlbnQgPSAnUXVldWUnOworICB9IGVsc2UgeworICAgIHJl
YmFzZWxpbmVRdWV1ZS5kaXNhYmxlZCA9IGZhbHNlOworICAgIHJlYmFzZWxpbmVRdWV1ZS50ZXh0
Q29udGVudCA9ICdSZWJhc2VsaW5lIHF1ZXVlICgnICsgcXVldWVMZW5ndGggKyAnIHRlc3RzKSc7
CisgICAgcXVldWVUb2dnbGUudGV4dENvbnRlbnQgPSAnUXVldWUgKCcgKyBxdWV1ZUxlbmd0aCAr
ICcgdGVzdHMpJzsKKyAgfQorICAkKCdyZW1vdmUtcXVldWUtc2VsZWN0aW9uJykuZGlzYWJsZWQg
PSBxdWV1ZVNlbGVjdC5zZWxlY3RlZEluZGV4ID09IC0xOworICAKKyAgc2VsZWN0RGlyZWN0b3J5
KCk7Cit9CisKK3ZhciBjdXJyZW50RXhwZWN0ZWRJbWFnZVRlc3Q7Cit2YXIgY3VycmVudEFjdHVh
bEltYWdlVGVzdDsKKworZnVuY3Rpb24gZGlzcGxheUltYWdlUmVzdWx0cyh0ZXN0TmFtZSkgewor
ICBpZiAoY3VycmVudEV4cGVjdGVkSW1hZ2VUZXN0ID09IGN1cnJlbnRBY3R1YWxJbWFnZVRlc3Qg
JiYKKyAgICAgIGN1cnJlbnRFeHBlY3RlZEltYWdlVGVzdCA9PSB0ZXN0TmFtZSkgeworICAgIHJl
dHVybjsKKyAgfQorICB2YXIgZXhwZWN0ZWRJbWFnZSA9ICQoJ2V4cGVjdGVkLWltYWdlJyk7Cisg
IHZhciBhY3R1YWxJbWFnZSA9ICQoJ2FjdHVhbC1pbWFnZScpOworCisgIGV4cGVjdGVkSW1hZ2Uu
Y2xhc3NOYW1lID0gJ2xvYWRpbmcnOworICBleHBlY3RlZEltYWdlLnNyYyA9ICcvdGVzdF9yZXN1
bHQ/dGVzdD0nICsgdGVzdE5hbWUgKyAnJm1vZGU9ZXhwZWN0ZWQtaW1hZ2UnOworICBleHBlY3Rl
ZEltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgIGV4cGVjdGVkSW1hZ2UuY2xhc3NOYW1l
ID0gJyc7CisgICAgY3VycmVudEV4cGVjdGVkSW1hZ2VUZXN0ID0gdGVzdE5hbWU7CisgICAgdXBk
YXRlRGlmZigpOworICB9OworICAKKyAgYWN0dWFsSW1hZ2UuY2xhc3NOYW1lID0gJ2xvYWRpbmcn
OworICBhY3R1YWxJbWFnZS5zcmMgPSAnL3Rlc3RfcmVzdWx0P3Rlc3Q9JyArIHRlc3ROYW1lICsg
JyZtb2RlPWFjdHVhbC1pbWFnZSc7CisgIGFjdHVhbEltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkg
eworICAgIGFjdHVhbEltYWdlLmNsYXNzTmFtZSA9ICcnOworICAgIGN1cnJlbnRBY3R1YWxJbWFn
ZVRlc3QgPSB0ZXN0TmFtZTsKKyAgICB1cGRhdGVEaWZmKCk7CisgIH07CisgIAorICAkKCdkaWZm
LWNhbnZhcycpLmNsYXNzTmFtZSA9ICdsb2FkaW5nJzsKKyAgJCgnZGlmZi1jYW52YXMnKS5zdHls
ZS5kaXNwbGF5ID0gJyc7CisgICQoJ2RpZmYtY2hlY2tzdW0nKS5zdHlsZS5kaXNwbGF5ID0gJ25v
bmUnOworfQorCit2YXIgZXhwZWN0ZWRDYW52YXM7Cit2YXIgZXhwZWN0ZWRDYW52YXNDb250ZXh0
OwordmFyIGFjdHVhbENhbnZhczsKK3ZhciBhY3R1YWxDYW52YXNDb250ZXh0OworCitmdW5jdGlv
biB1cGRhdGVEaWZmKCkgeworICBpZiAoY3VycmVudEV4cGVjdGVkSW1hZ2VUZXN0ICE9IGN1cnJl
bnRBY3R1YWxJbWFnZVRlc3QpIHJldHVybjsKKworICB2YXIgZXhwZWN0ZWRJbWFnZSA9ICQoJ2V4
cGVjdGVkLWltYWdlJyk7CisgIHZhciBhY3R1YWxJbWFnZSA9ICQoJ2FjdHVhbC1pbWFnZScpOwor
IAorICBpZiAoIWV4cGVjdGVkQ2FudmFzKSB7CisgICAgZXhwZWN0ZWRDYW52YXMgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKKyAgICBleHBlY3RlZENhbnZhcy53aWR0aCA9IGV4
cGVjdGVkSW1hZ2Uud2lkdGg7CisgICAgZXhwZWN0ZWRDYW52YXMuaGVpZ2h0ID0gZXhwZWN0ZWRJ
bWFnZS5oZWlnaHQ7CisgICAgZXhwZWN0ZWRDYW52YXNDb250ZXh0ID0gZXhwZWN0ZWRDYW52YXMu
Z2V0Q29udGV4dCgnMmQnKTsKKyAgICAKKyAgICBhY3R1YWxDYW52YXMgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdjYW52YXMnKTsKKyAgICBhY3R1YWxDYW52YXMud2lkdGggPSBhY3R1YWxJbWFn
ZS53aWR0aDsKKyAgICBhY3R1YWxDYW52YXMuaGVpZ2h0ID0gYWN0dWFsSW1hZ2UuaGVpZ2h0Owor
ICAgIGFjdHVhbENhbnZhc0NvbnRleHQgPSBhY3R1YWxDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsK
KyAgfQorICAKKyAgZXhwZWN0ZWRDYW52YXNDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwg
MjU1LCAyNTUsIDEpJzsKKyAgZXhwZWN0ZWRDYW52YXNDb250ZXh0LmZpbGxSZWN0KAorICAgICAg
MCwgMCwgZXhwZWN0ZWRJbWFnZS53aWR0aCwgZXhwZWN0ZWRJbWFnZS5oZWlnaHQpOworCisgIGFj
dHVhbENhbnZhc0NvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMSknOwor
ICBhY3R1YWxDYW52YXNDb250ZXh0LmZpbGxSZWN0KDAsIDAsIGFjdHVhbEltYWdlLndpZHRoLCBh
Y3R1YWxJbWFnZS5oZWlnaHQpOworICAKKyAgZXhwZWN0ZWRDYW52YXNDb250ZXh0LmRyYXdJbWFn
ZShleHBlY3RlZEltYWdlLCAwLCAwKTsKKyAgdmFyIGV4cGVjdGVkSW1hZ2VEYXRhID0gZXhwZWN0
ZWRDYW52YXNDb250ZXh0LmdldEltYWdlRGF0YSgKKyAgICAgIDAsIDAsIGV4cGVjdGVkSW1hZ2Uu
d2lkdGgsIGV4cGVjdGVkSW1hZ2UuaGVpZ2h0KTsKKworICBhY3R1YWxDYW52YXNDb250ZXh0LmRy
YXdJbWFnZShhY3R1YWxJbWFnZSwgMCwgMCk7CisgIHZhciBhY3R1YWxJbWFnZURhdGEgPSBhY3R1
YWxDYW52YXNDb250ZXh0LmdldEltYWdlRGF0YSgKKyAgICAgIDAsIDAsIGFjdHVhbEltYWdlLndp
ZHRoLCBhY3R1YWxJbWFnZS5oZWlnaHQpOworICAgICAgCisgIHZhciBkaWZmQ2FudmFzID0gJCgn
ZGlmZi1jYW52YXMnKTsKKyAgdmFyIGRpZmZDYW52YXNDb250ZXh0ID0gZGlmZkNhbnZhcy5nZXRD
b250ZXh0KCcyZCcpOworICB2YXIgZGlmZkltYWdlRGF0YSA9CisgICAgICBkaWZmQ2FudmFzQ29u
dGV4dC5jcmVhdGVJbWFnZURhdGEoZGlmZkNhbnZhcy53aWR0aCwgZGlmZkNhbnZhcy5oZWlnaHQp
OworCisgIHZhciBleHBlY3RlZFdpZHRoID0gZXhwZWN0ZWRJbWFnZS53aWR0aDsKKyAgdmFyIGV4
cGVjdGVkSGVpZ2h0ID0gZXhwZWN0ZWRJbWFnZS5oZWlnaHQ7CisgIHZhciBleHBlY3RlZFBpeGVs
cyA9IGV4cGVjdGVkSW1hZ2VEYXRhLmRhdGE7CisgIAorICB2YXIgYWN0dWFsV2lkdGggPSBhY3R1
YWxJbWFnZS53aWR0aDsKKyAgdmFyIGFjdHVhbEhlaWdodCA9IGFjdHVhbEltYWdlLmhlaWdodDsK
KyAgdmFyIGFjdHVhbFBpeGVscyA9IGFjdHVhbEltYWdlRGF0YS5kYXRhOworCisgIHZhciBkaWZm
V2lkdGggPSBkaWZmSW1hZ2VEYXRhLndpZHRoOworICB2YXIgZGlmZkhlaWdodCA9IGRpZmZJbWFn
ZURhdGEuaGVpZ2h0OworICB2YXIgZGlmZlBpeGVscyA9IGRpZmZJbWFnZURhdGEuZGF0YTsKKyAg
CisgIHZhciBoYWREaWZmID0gZmFsc2U7CisgIGZvciAodmFyIHggPSAwOyB4IDwgZXhwZWN0ZWRX
aWR0aDsgeCsrKSB7CisgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBleHBlY3RlZEhlaWdodDsgeSsr
KSB7CisgICAgICB2YXIgaXNEaWZmZXJlbnQgPSBmYWxzZTsKKyAgICAgIHZhciBleHBlY3RlZE9m
ZnNldCA9ICh5ICogZXhwZWN0ZWRXaWR0aCArIHgpICogNDsKKyAgICAgIHZhciBhY3R1YWxPZmZz
ZXQgPSAoeSAqIGFjdHVhbFdpZHRoICsgeCkgKiA0OworICAgICAgdmFyIGRpZmZPZmZzZXQgPSAo
eSAqIGRpZmZXaWR0aCArIHgpICogNDsKKyAgICAgIGlmIChleHBlY3RlZFBpeGVsc1tleHBlY3Rl
ZE9mZnNldF0gIT0gYWN0dWFsUGl4ZWxzW2FjdHVhbE9mZnNldF0gfHwKKyAgICAgICAgICBleHBl
Y3RlZFBpeGVsc1tleHBlY3RlZE9mZnNldCArIDFdICE9IGFjdHVhbFBpeGVsc1thY3R1YWxPZmZz
ZXQgKyAxXSB8fAorICAgICAgICAgIGV4cGVjdGVkUGl4ZWxzW2V4cGVjdGVkT2Zmc2V0ICsgMl0g
IT0gYWN0dWFsUGl4ZWxzW2FjdHVhbE9mZnNldCArIDJdIHx8CisgICAgICAgICAgZXhwZWN0ZWRQ
aXhlbHNbZXhwZWN0ZWRPZmZzZXQgKyAzXSAhPSBhY3R1YWxQaXhlbHNbYWN0dWFsT2Zmc2V0ICsg
M10pIHsKKyAgICAgICAgaGFkRGlmZiA9IHRydWU7CisgICAgICAgIGRpZmZQaXhlbHNbZGlmZk9m
ZnNldF0gPSAyNTU7CisgICAgICAgIGRpZmZQaXhlbHNbZGlmZk9mZnNldCArIDFdID0gMDsKKyAg
ICAgICAgZGlmZlBpeGVsc1tkaWZmT2Zmc2V0ICsgMl0gPSAwOworICAgICAgICBkaWZmUGl4ZWxz
W2RpZmZPZmZzZXQgKyAzXSA9IDI1NTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGRpZmZQaXhl
bHNbZGlmZk9mZnNldF0gPSBleHBlY3RlZFBpeGVsc1tleHBlY3RlZE9mZnNldF07CisgICAgICAg
IGRpZmZQaXhlbHNbZGlmZk9mZnNldCArIDFdID0gZXhwZWN0ZWRQaXhlbHNbZXhwZWN0ZWRPZmZz
ZXQgKyAxXTsKKyAgICAgICAgZGlmZlBpeGVsc1tkaWZmT2Zmc2V0ICsgMl0gPSBleHBlY3RlZFBp
eGVsc1tleHBlY3RlZE9mZnNldCArIDJdOworICAgICAgICBkaWZmUGl4ZWxzW2RpZmZPZmZzZXQg
KyAzXSA9IDMyOworICAgICAgfQorICAgIH0KKyAgfQorICAKKyAgZGlmZkNhbnZhc0NvbnRleHQu
cHV0SW1hZ2VEYXRhKAorICAgICAgZGlmZkltYWdlRGF0YSwKKyAgICAgIDAsIDAsCisgICAgICAw
LCAwLAorICAgICAgZGlmZkltYWdlRGF0YS53aWR0aCwgZGlmZkltYWdlRGF0YS5oZWlnaHQpOwor
ICBkaWZmQ2FudmFzLmNsYXNzTmFtZSA9ICcnOworICAKKyAgaWYgKCFoYWREaWZmKSB7CisgICAg
ZGlmZkNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICQoJ2RpZmYtY2hlY2tzdW0n
KS5zdHlsZS5kaXNwbGF5ID0gJyc7ICAgIAorICAgIGxvYWRUZXh0VGVzdFJlc3VsdCgKKyAgICAg
IGN1cnJlbnRFeHBlY3RlZEltYWdlVGVzdCwgJ2V4cGVjdGVkLWNoZWNrc3VtJywgJCgnZXhwZWN0
ZWQtY2hlY2tzdW0nKSk7CisgICAgbG9hZFRleHRUZXN0UmVzdWx0KAorICAgICAgICBjdXJyZW50
RXhwZWN0ZWRJbWFnZVRlc3QsICdhY3R1YWwtY2hlY2tzdW0nLCAkKCdhY3R1YWwtY2hlY2tzdW0n
KSk7CisgIH0KK30KKworZnVuY3Rpb24gbG9hZFRleHRUZXN0UmVzdWx0KHRlc3ROYW1lLCBtb2Rl
LCBkZXN0aW5hdGlvbikgeworICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgIHho
ci5vcGVuKCdHRVQnLCAnL3Rlc3RfcmVzdWx0P3Rlc3Q9JyArIHRlc3ROYW1lICsgJyZtb2RlPScg
KyBtb2RlKTsKKyAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKKyAg
ICBkZXN0aW5hdGlvbi50ZXh0Q29udGVudCA9IHhoci5yZXNwb25zZVRleHQ7CisgIH0pOworICB4
aHIuc2VuZCgpOyAKK30KKworZnVuY3Rpb24gZGlzcGxheVRleHRSZXN1bHRzKHRlc3ROYW1lKSB7
CisgIGZ1bmN0aW9uIGxvYWRUZXh0UmVzdWx0KHR5cGUpIHsKKyAgICBsb2FkVGV4dFRlc3RSZXN1
bHQodGVzdE5hbWUsIHR5cGUsICQodHlwZSkpOworICB9CisgIAorICBsb2FkVGV4dFJlc3VsdCgn
ZXhwZWN0ZWQtdGV4dCcpOworICBsb2FkVGV4dFJlc3VsdCgnYWN0dWFsLXRleHQnKTsKKyAgbG9h
ZFRleHRSZXN1bHQoJ2RpZmYtdGV4dCcpOworfQorCitmdW5jdGlvbiBuZXh0VGVzdCgpIHsKKyAg
dmFyIHRlc3RTZWxlY3RvciA9ICQoJ3Rlc3Qtc2VsZWN0b3InKTsKKyAgdmFyIG5leHRUZXN0SW5k
ZXggPSB0ZXN0U2VsZWN0b3Iuc2VsZWN0ZWRJbmRleCArIDE7CisgIHdoaWxlICh0cnVlKSB7Cisg
ICAgaWYgKG5leHRUZXN0SW5kZXggPT0gdGVzdFNlbGVjdG9yLm9wdGlvbnMubGVuZ3RoKSB7Cisg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0ZXN0U2VsZWN0b3Iub3B0aW9uc1tuZXh0VGVz
dEluZGV4XS5kaXNhYmxlZCkgeworICAgICAgbmV4dFRlc3RJbmRleCsrOworICAgIH0gZWxzZSB7
CisgICAgICB0ZXN0U2VsZWN0b3Iuc2VsZWN0ZWRJbmRleCA9IG5leHRUZXN0SW5kZXg7CisgICAg
ICBzZWxlY3RUZXN0KCk7CisgICAgICByZXR1cm47CisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9u
IHByZXZpb3VzVGVzdCgpIHsKKyAgdmFyIHRlc3RTZWxlY3RvciA9ICQoJ3Rlc3Qtc2VsZWN0b3In
KTsKKyAgdmFyIHByZXZpb3VzVGVzdEluZGV4ID0gdGVzdFNlbGVjdG9yLnNlbGVjdGVkSW5kZXgg
LSAxOworICB3aGlsZSAodHJ1ZSkgeworICAgIGlmIChwcmV2aW91c1Rlc3RJbmRleCA9PSAtMSkg
eworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodGVzdFNlbGVjdG9yLm9wdGlvbnNbcHJl
dmlvdXNUZXN0SW5kZXhdLmRpc2FibGVkKSB7CisgICAgICBwcmV2aW91c1Rlc3RJbmRleC0tOwor
ICAgIH0gZWxzZSB7CisgICAgICB0ZXN0U2VsZWN0b3Iuc2VsZWN0ZWRJbmRleCA9IHByZXZpb3Vz
VGVzdEluZGV4OworICAgICAgc2VsZWN0VGVzdCgpOworICAgICAgcmV0dXJuCisgICAgfQorICB9
Cit9CisKK2Z1bmN0aW9uIHNob3dMb3VwZShldmVudCkgeworICAvLyBUaGUgLTEgY29tcGVuc2F0
ZXMgZm9yIHRoZSBib3JkZXIgYXJvdW5kIHRoZSBpbWFnZS9jYW52YXMuCisgIHZhciB4ID0gZXZl
bnQub2Zmc2V0WCAtIDE7CisgIHZhciB5ID0gZXZlbnQub2Zmc2V0WSAtIDE7CisgIAorICBmaWxs
TG91cGVGcm9tSW1hZ2UoeCwgeSwgJ2V4cGVjdGVkJywgJCgnZXhwZWN0ZWQtaW1hZ2UnKSk7Cisg
IGZpbGxMb3VwZUZyb21JbWFnZSh4LCB5LCAnYWN0dWFsJywgJCgnYWN0dWFsLWltYWdlJykpOwor
ICBmaWxsTG91cGVGcm9tQ2FudmFzKHgsIHksICdkaWZmJywgJCgnZGlmZi1jYW52YXMnKSk7Cisg
IAorICAkKCdsb3VwZScpLnN0eWxlLmRpc3BsYXkgPSAnJzsKK30KKwordmFyIExPVVBFX01BR05J
RklDQVRJT05fRkFDVE9SID0gMTA7CisKK2Z1bmN0aW9uIGZpbGxMb3VwZUZyb21JbWFnZSh4LCB5
LCB0eXBlKSB7CisgIHZhciBzb3VyY2VJbWFnZSA9ICQodHlwZSArICctaW1hZ2UnKTsgIAorCisg
IHZhciB0ZW1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CisgIHRl
bXBDYW52YXMud2lkdGggPSBzb3VyY2VJbWFnZS53aWR0aDsKKyAgdGVtcENhbnZhcy5oZWlnaHQg
PSBzb3VyY2VJbWFnZS5oZWlnaHQ7CisgIHZhciB0ZW1wQ29udGV4dCA9IHRlbXBDYW52YXMuZ2V0
Q29udGV4dCgnMmQnKTsKKyAgCisgIHRlbXBDb250ZXh0LmRyYXdJbWFnZShzb3VyY2VJbWFnZSwg
MCwgMCk7CisgIAorICBmaWxsTG91cGVGcm9tQ2FudmFzKHgsIHksIHR5cGUsIHRlbXBDYW52YXMp
OworfQorCitmdW5jdGlvbiBmaWxsTG91cGVGcm9tQ2FudmFzKHgsIHksIHR5cGUsIGNhbnZhcykg
eworICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOworICB2YXIgc291cmNl
SW1hZ2VEYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52
YXMuaGVpZ2h0KTsKKworICB2YXIgdGFyZ2V0Q2FudmFzID0gJCh0eXBlICsgJy1sb3VwZScpOwor
ICB2YXIgdGFyZ2V0Q29udGV4dCA9IHRhcmdldENhbnZhcy5nZXRDb250ZXh0KCcyZCcpOworICB0
YXJnZXRDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDEpJzsKKyAgdGFy
Z2V0Q29udGV4dC5maWxsUmVjdCgwLCAwLCB0YXJnZXRDYW52YXMud2lkdGgsIHRhcmdldENhbnZh
cy5oZWlnaHQpOyAgCisgIAorICB2YXIgc291cmNlWE9mZnNldCA9ICh0YXJnZXRDYW52YXMud2lk
dGgvTE9VUEVfTUFHTklGSUNBVElPTl9GQUNUT1IgLSAxKS8yOworICB2YXIgc291cmNlWU9mZnNl
dCA9ICh0YXJnZXRDYW52YXMuaGVpZ2h0L0xPVVBFX01BR05JRklDQVRJT05fRkFDVE9SIC0gMSkv
MjsKKworICBmdW5jdGlvbiByZWFkUGl4ZWxDb21wb25lbnQoeCwgeSwgY29tcG9uZW50KSB7Cisg
ICAgcmV0dXJuIHNvdXJjZUltYWdlRGF0YS5kYXRhWyh5ICogc291cmNlSW1hZ2VEYXRhLndpZHRo
ICsgeCkgKiA0ICsgY29tcG9uZW50XTsKKyAgfQorICAKKyAgZm9yICh2YXIgaSA9IC1zb3VyY2VY
T2Zmc2V0OyBpIDw9IHNvdXJjZVhPZmZzZXQ7IGkrKykgeworICAgIGZvciAodmFyIGogPSAtc291
cmNlWU9mZnNldDsgaiA8PSBzb3VyY2VZT2Zmc2V0OyBqKyspIHsKKyAgICAgIHZhciBzb3VyY2VY
ID0geCArIGk7CisgICAgICB2YXIgc291cmNlWSA9IHkgKyBqOworICAgICAgCisgICAgICB2YXIg
c291cmNlUiA9IHJlYWRQaXhlbENvbXBvbmVudChzb3VyY2VYLCBzb3VyY2VZLCAwKTsgCisgICAg
ICB2YXIgc291cmNlRyA9IHJlYWRQaXhlbENvbXBvbmVudChzb3VyY2VYLCBzb3VyY2VZLCAxKTsK
KyAgICAgIHZhciBzb3VyY2VCID0gcmVhZFBpeGVsQ29tcG9uZW50KHNvdXJjZVgsIHNvdXJjZVks
IDIpOworICAgICAgdmFyIHNvdXJjZUEgPSByZWFkUGl4ZWxDb21wb25lbnQoc291cmNlWCwgc291
cmNlWSwgMykvMjU1OworICAgICAgc291cmNlQSA9IE1hdGgucm91bmQoc291cmNlQSAqIDEwKS8x
MDsKKworICAgICAgdmFyIHRhcmdldFggPSAoaSArIHNvdXJjZVhPZmZzZXQpICogTE9VUEVfTUFH
TklGSUNBVElPTl9GQUNUT1I7CisgICAgICB2YXIgdGFyZ2V0WSA9IChqICsgc291cmNlWU9mZnNl
dCkgKiBMT1VQRV9NQUdOSUZJQ0FUSU9OX0ZBQ1RPUjsKKyAgICAgIHZhciBjb2xvclN0cmluZyA9
CisgICAgICAgICAgc291cmNlUiArICcsICcgKyBzb3VyY2VHICsgJywgJyArIHNvdXJjZUIgKyAn
LCAnICsgc291cmNlQTsKKyAgICAgIHRhcmdldENvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoJyAr
IGNvbG9yU3RyaW5nICsgJyknOworICAgICAgdGFyZ2V0Q29udGV4dC5maWxsUmVjdCgKKyAgICAg
ICAgICB0YXJnZXRYLCB0YXJnZXRZLAorICAgICAgICAgIExPVVBFX01BR05JRklDQVRJT05fRkFD
VE9SLCBMT1VQRV9NQUdOSUZJQ0FUSU9OX0ZBQ1RPUik7CisgICAgCisgICAgICBpZiAoaSA9PSAw
ICYmIGogPT0gMCkgeworICAgICAgICAkKCdsb3VwZS1jb29yZGluYXRlJykudGV4dENvbnRlbnQg
PSBzb3VyY2VYICsgJywgJyArIHNvdXJjZVk7CisKKyAgICAgICAgJCh0eXBlICsgJy1sb3VwZS1j
b2xvcicpLnRleHRDb250ZW50ID0gY29sb3JTdHJpbmc7CisgICAgICB9CisgICAgfQorICB9Cit9
CisKK2Z1bmN0aW9uIGhpZGVMb3VwZSgpIHsKKyAgJCgnbG91cGUnKS5zdHlsZS5kaXNwbGF5ID0g
J25vbmUnOyAgCit9CisKK2Z1bmN0aW9uIGFkZFRvUmViYXNlbGluZVF1ZXVlKCkgeworICB2YXIg
dGVzdE5hbWUgPSBnZXRTZWxlY3RlZFRlc3QoKTsKKyAgdmFyIHRlc3QgPSByZXN1bHRzLnRlc3Rz
W3Rlc3ROYW1lXTsKKyAgCisgIGlmICh0ZXN0LnN0YXRlICE9IFNUQVRFX05FRURTX1JFQkFTRUxJ
TkUpIHsKKyAgICBsb2coJ0Nhbm5vdCBhZGQgdGVzdCB3aXRoIHN0YXRlICcgKyB0ZXN0LnN0YXRl
ICsgJyB0byBxdWV1ZScpOworICAgIHJldHVybjsKKyAgfQorICAKKyAgdmFyIHF1ZXVlT3B0aW9u
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CisgIHF1ZXVlT3B0aW9uLnZhbHVl
ID0gdGVzdE5hbWU7CisgIHF1ZXVlT3B0aW9uLnRleHRDb250ZW50ID0gdGVzdE5hbWU7CisgICQo
J3F1ZXVlLXNlbGVjdCcpLmFwcGVuZENoaWxkKHF1ZXVlT3B0aW9uKTsKKyAgdGVzdC5zdGF0ZSA9
IFNUQVRFX0lOX1FVRVVFOworICB1cGRhdGVTdGF0ZSgpOworfQorCitmdW5jdGlvbiByZW1vdmVT
ZWxlY3Rpb25Gcm9tUmViYXNlbGluZVF1ZXVlKCkgeworICB2YXIgcXVldWVTZWxlY3QgPSAkKCdx
dWV1ZS1zZWxlY3QnKTsKKyAgaWYgKHF1ZXVlU2VsZWN0LnNlbGVjdGVkSW5kZXggPT0gLTEpIHsK
KyAgICByZXR1cm47CisgIH0KKworICB2YXIgcXVldWVPcHRpb24gPSBxdWV1ZVNlbGVjdC5vcHRp
b25zW3F1ZXVlU2VsZWN0LnNlbGVjdGVkSW5kZXhdOyAgCisgIHJlbW92ZUZyb21SZWJhc2VsaW5l
UXVldWUocXVldWVPcHRpb24udmFsdWUpOworfQorCitmdW5jdGlvbiByZW1vdmVGcm9tUmViYXNl
bGluZVF1ZXVlKHRlc3ROYW1lKSB7CisgIHZhciBxdWV1ZVNlbGVjdCA9ICQoJ3F1ZXVlLXNlbGVj
dCcpOworICBmb3IgKHZhciBxdWV1ZU9wdGlvbiA9IHF1ZXVlU2VsZWN0LmZpcnN0Q2hpbGQ7Cisg
ICAgIHF1ZXVlT3B0aW9uICYmIHF1ZXVlT3B0aW9uLnZhbHVlICE9IHRlc3ROYW1lOworICAgICBx
dWV1ZU9wdGlvbiA9IHF1ZXVlT3B0aW9uLm5leHRTaWJsaW5nKSB7O30KKworICBpZiAoIXF1ZXVl
T3B0aW9uKSByZXR1cm47CisgIAorICBxdWV1ZVNlbGVjdC5yZW1vdmVDaGlsZChxdWV1ZU9wdGlv
bik7CisgIHZhciB0ZXN0ID0gcmVzdWx0cy50ZXN0c1t0ZXN0TmFtZV07CisgIHRlc3Quc3RhdGUg
PSBTVEFURV9ORUVEU19SRUJBU0VMSU5FOworICB1cGRhdGVTdGF0ZSgpOworfQorCitmdW5jdGlv
biByZWJhc2VsaW5lUXVldWUoKSB7CisgIHZhciB0ZXN0TmFtZXMgPSBbXTsKKyAgZm9yICh2YXIg
cXVldWVPcHRpb24gPSAkKCdxdWV1ZS1zZWxlY3QnKS5maXJzdENoaWxkOworICAgICBxdWV1ZU9w
dGlvbjsKKyAgICAgcXVldWVPcHRpb24gPSBxdWV1ZU9wdGlvbi5uZXh0U2libGluZykgeworICAg
IHRlc3ROYW1lcy5wdXNoKHF1ZXVlT3B0aW9uLnZhbHVlKTsKKyAgfQorICAKKyAgaW5Qcm9ncmVz
c1JlYmFzZWxpbmVDb3VudCA9IHRlc3ROYW1lcy5sZW5ndGg7CisgIHVwZGF0ZVN0YXRlKCk7CisK
KyAgdmFyIGJhc2VsaW5lVGFyZ2V0ID0gZ2V0U2VsZWN0VmFsdWUoJ2Jhc2VsaW5lLXRhcmdldCcp
OworICB2YXIgYmFzZWxpbmVNb3ZlVG8gPSBnZXRTZWxlY3RWYWx1ZSgnYmFzZWxpbmUtbW92ZS10
bycpOworCisgIHRlc3ROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKHRlc3ROYW1lKSB7CisgICAgcmVi
YXNlbGluZSh0ZXN0TmFtZSwgYmFzZWxpbmVUYXJnZXQsIGJhc2VsaW5lTW92ZVRvKTsKKyAgfSk7
Cit9CisKK2Z1bmN0aW9uIHJlYmFzZWxpbmUodGVzdE5hbWUsIGJhc2VsaW5lVGFyZ2V0LCBiYXNl
bGluZU1vdmVUbykgeworICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgIHhoci5v
cGVuKCdQT1NUJywKKyAgICAgICcvcmViYXNlbGluZT90ZXN0PScgKyBlbmNvZGVVUklDb21wb25l
bnQodGVzdE5hbWUpICsgCisgICAgICAnJmJhc2VsaW5lLXRhcmdldD0nICsgZW5jb2RlVVJJQ29t
cG9uZW50KGJhc2VsaW5lVGFyZ2V0KSArCisgICAgICAnJmJhc2VsaW5lLW1vdmUtdG89JyArIGVu
Y29kZVVSSUNvbXBvbmVudChiYXNlbGluZU1vdmVUbykpOworICB2YXIgdGVzdCA9IHJlc3VsdHMu
dGVzdHNbdGVzdE5hbWVdOworICBmdW5jdGlvbiBoYW5kbGVTdWNjZXNzKCkgeworICAgIHZhciBz
dWNjZXNzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICAgIHN1Y2Nlc3MudGV4
dENvbnRlbnQgPSAnU3VjY2VzczogJzsKKyAgICBzdWNjZXNzLnN0eWxlLmNvbG9yID0gJ2dyZWVu
JzsKKyAgICAkKCdsb2cnKS5hcHBlbmRDaGlsZChzdWNjZXNzKTsKKyAgICBsb2coeGhyLnJlc3Bv
bnNlVGV4dCk7CisgICAgcmVtb3ZlRnJvbVJlYmFzZWxpbmVRdWV1ZSh0ZXN0TmFtZSk7CisgICAg
aW5Qcm9ncmVzc1JlYmFzZWxpbmVDb3VudC0tOworICAgIHRlc3Quc3RhdGUgPSBTVEFURV9SRUJB
U0VMSU5FX1NVQ0NFRURFRDsKKyAgICB1cGRhdGVTdGF0ZSgpOworICB9CisgIGZ1bmN0aW9uIGhh
bmRsZUZhaWx1cmUoKSB7CisgICAgdmFyIGZhaWx1cmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdzcGFuJyk7CisgICAgZmFpbHVyZS50ZXh0Q29udGVudCA9ICdGYWlsdXJlOiAnOworICAgIGZh
aWx1cmUuc3R5bGUuY29sb3IgPSAncmVkJzsKKyAgICAkKCdsb2cnKS5hcHBlbmRDaGlsZChmYWls
dXJlKTsKKyAgICBsb2coeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgcmVtb3ZlRnJvbVJlYmFzZWxp
bmVRdWV1ZSh0ZXN0TmFtZSk7CisgICAgaW5Qcm9ncmVzc1JlYmFzZWxpbmVDb3VudC0tOworICAg
IHRlc3Quc3RhdGUgPSBTVEFURV9SRUJBU0VMSU5FX0ZBSUxFRDsKKyAgICB1cGRhdGVTdGF0ZSgp
OworICB9CisgIAorICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgewor
ICAgIGlmICh4aHIuc3RhdHVzIDwgNDAwKSB7CisgICAgICBoYW5kbGVTdWNjZXNzKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgIGhhbmRsZUZhaWx1cmUoKTsKKyAgICB9CisgIH0pOworICB4aHIuYWRk
RXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVGYWlsdXJlKTsKKworICB4aHIuc2VuZCgpOwor
fQorCitmdW5jdGlvbiBsb2codGV4dCkgeworICAkKCdsb2cnKS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSh0ZXh0ICsgJ1xuJykpOworICAkKCdsb2cnKS5zY3JvbGxUb3AgPSAk
KCdsb2cnKS5zY3JvbGxIZWlnaHQ7Cit9CisKK2Z1bmN0aW9uIHRvZ2dsZShpZCkgeworICB2YXIg
ZWxlbWVudCA9ICQoaWQpOworICB2YXIgdG9nZ2xlciA9ICQoJ3RvZ2dsZS0nICsgaWQpOworICBp
ZiAoZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09ICdub25lJykgeworICAgIGVsZW1lbnQuc3R5bGUu
ZGlzcGxheSA9ICcnOworICAgIHRvZ2dsZXIuY2xhc3NOYW1lID0gJ2xpbmsgc2VsZWN0ZWQnOwor
ICB9IGVsc2UgeworICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICB0b2dn
bGVyLmNsYXNzTmFtZSA9ICdsaW5rJzsKKyAgfQorfQorCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
cignRE9NQ29udGVudExvYWRlZCcsIG1haW4pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9y
ZWJhc2VsaW5lc2VydmVyLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3JlYmFzZWxpbmVzZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJkZWUzNzU0NjZjNWEwYjZj
M2M5OTU2Y2NjMWExNzU2ZDYzNDJmOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lc2VydmVyLnB5CkBAIC0wLDAg
KzEsMzM5IEBACisjIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgZm5t
YXRjaAoraW1wb3J0IG1pbWV0eXBlcworaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0
IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdXJsbGliCitpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIK
K2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJs
cGFyc2UKKworZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24KK2Zyb20gd3NnaXJlZi5o
YW5kbGVycyBpbXBvcnQgZm9ybWF0X2RhdGVfdGltZQorCitmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBmYWN0b3J5Citmcm9tIHdlYmtpdHB5LnRvb2wubXVsdGljb21tYW5k
dG9vbCBpbXBvcnQgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQKK2ltcG9ydCB3ZWJraXRweS50
aGlyZHBhcnR5LnNpbXBsZWpzb24gYXMgc2ltcGxlanNvbgorCisjIFRPRE8KKyMgLSBoYW5kbGUg
Y2FzZXMgd2hlcmUgdGhlcmUncyBubyBKU09OIGZpbGUgKGp1c3Qgc2hvdyBhbGwgcmVzdWx0cykK
KyMgLSBzaG93IHdoaWNoIGJhc2VsaW5lcyB3ZXJlIHVzZWQgZm9yIHRoZSB0ZXN0IHJ1bgorCitT
VEFURV9ORUVEU19SRUJBU0VMSU5FID0gJ25lZWRzX3JlYmFzZWxpbmUnCitTVEFURV9SRUJBU0VM
SU5FX0ZBSUxFRCA9ICdyZWJhc2VsaW5lX2ZhaWxlZCcKK1NUQVRFX1JFQkFTRUxJTkVfU1VDQ0VF
REVEID0gJ3JlYmFzZWxpbmVfc3VjY2VlZGVkJworCisKK2NsYXNzIFJlYmFzZWxpbmVIVFRQU2Vy
dmVyKEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBo
dHRwZF9wb3J0LCByZXN1bHRzX2RpcmVjdG9yeSwgcmVzdWx0c19qc29uLCBwb3J0LCBzY20pOgor
ICAgICAgICBCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyLl9faW5pdF9fKHNlbGYsICgnJywgaHR0
cGRfcG9ydCksIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIpCisgICAgICAgIHNlbGYucmVz
dWx0c19kaXJlY3RvcnkgPSByZXN1bHRzX2RpcmVjdG9yeQorICAgICAgICBzZWxmLnJlc3VsdHNf
anNvbiA9IHJlc3VsdHNfanNvbgorICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAgIHNl
bGYuc2NtID0gc2NtCisKKworY2xhc3MgUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlcihCYXNl
SFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKKyAgICBmaWxlX25hbWVzID0gWwor
ICAgICAgJ2luZGV4Lmh0bWwnLAorICAgICAgJ21haW4uanMnLAorICAgICAgJ21haW4uY3NzJywK
KyAgICBdCisKKyAgICBkZWYgZG9fR0VUKHNlbGYpOgorICAgICAgICBzZWxmLl9oYW5kbGVfcmVx
dWVzdCgpCisKKyAgICBkZWYgZG9fUE9TVChzZWxmKToKKyAgICAgICAgc2VsZi5faGFuZGxlX3Jl
cXVlc3QoKQorCisgICAgZGVmIF9oYW5kbGVfcmVxdWVzdChzZWxmKToKKyAgICAgICAgaWYgJz8n
IGluIHNlbGYucGF0aDoKKyAgICAgICAgICAgIChwYXRoLCBxdWVyeV9zdHJpbmcpID0gc2VsZi5w
YXRoLnNwbGl0KCc/JywgMSkKKyAgICAgICAgICAgIHNlbGYucXVlcnkgPSB1cmxwYXJzZS5wYXJz
ZV9xcyhxdWVyeV9zdHJpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXRoID0gc2Vs
Zi5wYXRoCisgICAgICAgICAgICBzZWxmLnF1ZXJ5ID0ge30KKyAgICAgICAgZnVuY19vcl9maWxl
X25hbWUgPSBwYXRoWzE6XSBvciAnaW5kZXguaHRtbCcKKworICAgICAgICBpZiBmdW5jX29yX2Zp
bGVfbmFtZSBpbiBSZWJhc2VsaW5lSFRUUFJlcXVlc3RIYW5kbGVyLmZpbGVfbmFtZXM6CisgICAg
ICAgICAgICBzZWxmLnNlcnZlX3N0YXRpY19maWxlKGZ1bmNfb3JfZmlsZV9uYW1lKQorICAgICAg
ICAgICAgcmV0dXJuCisKKyAgICAgICAgZnVuY19uYW1lID0gZnVuY19vcl9maWxlX25hbWUucmVw
bGFjZSgnLicsICdfJykKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgZnVuY19uYW1lKToK
KyAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICdVbmtub3duIGZ1bmN0aW9uICVzJyAl
IGZ1bmNfbmFtZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmdW5jID0gZ2V0YXR0cihz
ZWxmLCBmdW5jX25hbWUpCisgICAgICAgIGZ1bmMoKQorCisgICAgZGVmIHNlcnZlX3N0YXRpY19m
aWxlKHNlbGYsIHN0YXRpY19wYXRoKToKKyAgICAgICAgc2VsZi5fc2VydmVfZmlsZShvcy5wYXRo
LmpvaW4oCisgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZGF0YScsICdy
ZWJhc2VsaW5lc2VydmVyJywgc3RhdGljX3BhdGgpKQorCisgICAgZGVmIHJlYmFzZWxpbmUoc2Vs
Zik6CisgICAgICAgIGxvZyA9IFtdCisgICAgICAgIHN1Y2Nlc3MgPSBzZWxmLl9ydW5fcmViYXNl
bGluZSgKKyAgICAgICAgICAgIHNlbGYucXVlcnlbJ3Rlc3QnXVswXSwKKyAgICAgICAgICAgIHNl
bGYucXVlcnlbJ2Jhc2VsaW5lLXRhcmdldCddWzBdLAorICAgICAgICAgICAgc2VsZi5xdWVyeVsn
YmFzZWxpbmUtbW92ZS10byddWzBdLAorICAgICAgICAgICAgbG9nPWxhbWJkYSBsOiBsb2cuYXBw
ZW5kKGwpKQorICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2Uoc3VjY2VzcyBhbmQgMjAwIG9yIDUw
MCkKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvcGxhaW4n
KQorICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZSgn
XG4nLmpvaW4obG9nKSkKKworICAgIGRlZiBfcnVuX3JlYmFzZWxpbmUoc2VsZiwgdGVzdCwgYmFz
ZWxpbmVfdGFyZ2V0LCBiYXNlbGluZV9tb3ZlX3RvLCBsb2cpOgorICAgICAgICAodGVzdF9uYW1l
LCB0ZXN0X2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KHRlc3QpCisgICAgICAgIHRlc3Rf
ZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKHRlc3RfbmFtZSkKKyAgICAgICAgcGF0aF9waWVj
ZXMgPSB0ZXN0X2RpcmVjdG9yeS5zcGxpdChvcy5zZXApCisgICAgICAgIGlmIGxlbihwYXRoX3Bp
ZWNlcykgPj0gMiBhbmQgcGF0aF9waWVjZXNbMF0gPT0gJ3BsYXRmb3JtJzoKKyAgICAgICAgICAg
IGJhc2VfdGVzdF9kaXJlY3RvcnkgPSBvcy5zZXAuam9pbihwYXRoX3BpZWNlc1syOl0pCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBiYXNlX3Rlc3RfZGlyZWN0b3J5ID0gdGVzdF9kaXJlY3Rv
cnkKKworICAgICAgICBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5ID0gc2VsZi5zZXJ2ZXIucG9ydC5s
YXlvdXRfdGVzdHNfZGlyKCkKKyAgICAgICAgdGFyZ2V0X2V4cGVjdGF0aW9uc19kaXJlY3Rvcnkg
PSBvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5LCAncGxh
dGZvcm0nLCBiYXNlbGluZV90YXJnZXQsIGJhc2VfdGVzdF9kaXJlY3RvcnkpCisKKyAgICAgICAg
bG9nKCdSZWJhc2VsaW5pbmcgJXMuLi4nICUgdGVzdF9uYW1lKQorICAgICAgICB0ZXN0X2pzb24g
PSBzZWxmLnNlcnZlci5yZXN1bHRzX2pzb25bJ3Rlc3RzJ11bdGVzdF0KKworICAgICAgICBpZiB0
ZXN0X2pzb25bJ3N0YXRlJ10gIT0gU1RBVEVfTkVFRFNfUkVCQVNFTElORToKKyAgICAgICAgICAg
IGxvZygnICBUZXN0IGlzIGluIHVuZXhwZWN0ZWQgc3RhdGU6ICVzJyAlIHRlc3RfanNvblsnc3Rh
dGUnXSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGN1cnJlbnRfYmFzZWxp
bmVzID0gdGVzdF9qc29uLmdldCgnYmFzZWxpbmVzJywge30pLmtleXMoKQorCisgICAgICAgIHRl
c3RfcmVzdWx0c19kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICBzZWxmLnNl
cnZlci5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9kaXJlY3RvcnkpCisgICAgICAgIGFjdHVhbF9w
YXR0ZXJuID0gb3MucGF0aC5iYXNlbmFtZSh0ZXN0X25hbWUpICsgJy1hY3R1YWwuKicKKyAgICAg
ICAgYWN0dWFsX2ZpbGVzID0gW10KKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIo
dGVzdF9yZXN1bHRzX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2go
ZmlsZW5hbWUsIGFjdHVhbF9wYXR0ZXJuKToKKyAgICAgICAgICAgICAgICBhY3R1YWxfZmlsZXMu
YXBwZW5kKGZpbGVuYW1lLnJlcGxhY2UoJy1hY3R1YWwnLCAnLWV4cGVjdGVkJykpCisKKyAgICAg
ICAgIyBJZiByZXF1ZXN0ZWQsIG1vdmUgY3VycmVudCBiYXNlbGluZXMgb3V0CisgICAgICAgIGlm
IGJhc2VsaW5lX3RhcmdldCBpbiBjdXJyZW50X2Jhc2VsaW5lcyBhbmQgYmFzZWxpbmVfbW92ZV90
byAhPSAnbm9uZSc6CisgICAgICAgICAgICBsb2coJyAgTW92aW5nIGN1cnJlbnQgJXMgYmFzZWxp
bmVzIHRvICVzJyAlIChiYXNlbGluZV90YXJnZXQsIGJhc2VsaW5lX21vdmVfdG8pKQorICAgICAg
ICAgICAgbW92ZV90b19leHBlY3RhdGlvbnNfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKAorICAg
ICAgICAgICAgICAgIGxheW91dF90ZXN0c19kaXJlY3RvcnksICdwbGF0Zm9ybScsIGJhc2VsaW5l
X21vdmVfdG8sIGJhc2VfdGVzdF9kaXJlY3RvcnkpCisgICAgICAgICAgICBleHBlY3RhdGlvbl9w
YXR0ZXJuID0gb3MucGF0aC5iYXNlbmFtZSh0ZXN0X25hbWUpICsgJy1leHBlY3RlZC4qJworCisg
ICAgICAgICAgICAjIFNlZSB3aGljaCBmaWxlcyBuZWVkIHRvIG1vdmUKKyAgICAgICAgICAgIGN1
cnJlbnRfZXhwZWN0YXRpb25zX2ZpbGVzID0gW10KKyAgICAgICAgICAgIGZvciBmaWxlbmFtZSBp
biBvcy5saXN0ZGlyKHRhcmdldF9leHBlY3RhdGlvbnNfZGlyZWN0b3J5KToKKyAgICAgICAgICAg
ICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZmlsZW5hbWUsIGV4cGVjdGF0aW9uX3BhdHRlcm4pOgor
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2V4cGVjdGF0aW9uc19maWxlcy5hcHBlbmQoZmls
ZW5hbWUpCisgICAgICAgICAgICBjdXJyZW50X2V4cGVjdGF0aW9uc19maWxlcyA9IFtmIGZvciBm
IGluIGN1cnJlbnRfZXhwZWN0YXRpb25zX2ZpbGVzIGlmIGYgaW4gYWN0dWFsX2ZpbGVzXQorCisg
ICAgICAgICAgICBpZiBjdXJyZW50X2V4cGVjdGF0aW9uc19maWxlczoKKyAgICAgICAgICAgICAg
ICAjIE1ha2Ugc3VyZSB3ZSdyZSBub3QgY2xvYmJlcmluZyBleGlzdGluZyBmaWxlcworICAgICAg
ICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG1vdmVfdG9fZXhwZWN0YXRpb25zX2RpcmVjdG9y
eSk6CisgICAgICAgICAgICAgICAgICAgIG1vdmVfdG9fZXhwZWN0YXRpb25zX2ZpbGVzID0gW10K
KyAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIobW92ZV90b19l
eHBlY3RhdGlvbnNfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZubWF0
Y2guZm5tYXRjaChmaWxlbmFtZSwgZXhwZWN0YXRpb25fcGF0dGVybik6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbW92ZV90b19leHBlY3RhdGlvbnNfZmlsZXMuYXBwZW5kKGZpbGVuYW1l
KQorICAgICAgICAgICAgICAgICAgICBleGlzdGluZ19tb3ZlX3RvX2ZpbGVzID0gW2YgZm9yIGYg
aW4gbW92ZV90b19leHBlY3RhdGlvbnNfZmlsZXMgaWYgZiBpbiBjdXJyZW50X2V4cGVjdGF0aW9u
c19maWxlc10KKyAgICAgICAgICAgICAgICAgICAgaWYgZXhpc3RpbmdfbW92ZV90b19maWxlczoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygnICBBbHJlYWR5IGhhZCAlcyBiYXNlbGluZXMg
KCVzKSwgZG9uXCd0IGtub3cgd2hhdCB0byBkbyB3aXRoIGN1cnJlbnQgJXMgYmFzZWxpbmVzJyAl
IChiYXNlbGluZV9tb3ZlX3RvLCAnLCAnLmpvaW4oZXhpc3RpbmdfbW92ZV90b19maWxlcyksIGJh
c2VsaW5lX3RhcmdldCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2pzb25bJ3N0YXRl
J10gPSBTVEFURV9SRUJBU0VMSU5FX0ZBSUxFRAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisKKyAgICAgICAgICAgICAgICAjIE1vdmUgdGhlbQorICAgICAgICAgICAgICAg
IGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhtb3ZlX3RvX2V4cGVjdGF0aW9uc19kaXJlY3RvcnkpOgor
ICAgICAgICAgICAgICAgICAgICBsb2coJyAgQ3JlYXRpbmcgJXMgJXMgZGlyZWN0b3J5JyAlIChi
YXNlbGluZV9tb3ZlX3RvLCBiYXNlX3Rlc3RfZGlyZWN0b3J5KSkKKyAgICAgICAgICAgICAgICAg
ICAgb3MubWFrZWRpcnMobW92ZV90b19leHBlY3RhdGlvbnNfZGlyZWN0b3J5KQorICAgICAgICAg
ICAgICAgIGZvciBmaWxlIGluIGN1cnJlbnRfZXhwZWN0YXRpb25zX2ZpbGVzOgorICAgICAgICAg
ICAgICAgICAgICBzb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbih0YXJnZXRfZXhwZWN0YXRpb25z
X2RpcmVjdG9yeSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25fcGF0aCA9
IG9zLnBhdGguam9pbihtb3ZlX3RvX2V4cGVjdGF0aW9uc19kaXJlY3RvcnksIGZpbGUpCisgICAg
ICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKHNvdXJjZV9wYXRoLCBkZXN0aW5hdGlvbl9wYXRo
KQorICAgICAgICAgICAgICAgICAgICBleGl0X2NvZGUgPSBzZWxmLnNlcnZlci5zY20uYWRkKGRl
c3RpbmF0aW9uX3BhdGgsIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgbG9nKCcgICAgTW92ZWQgJXMsIGV4aXQgY29kZSAlZCcgJSAoZmlsZSwgZXhpdF9jb2RlKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgZXhpdF9jb2RlOgorICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdF9qc29uWydzdGF0ZSddID0gU1RBVEVfUkVCQVNFTElORV9GQUlMRUQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGxvZygnICBBZGRpbmcgbmV3
IGJhc2VsaW5lcyB0byAlcycgJSBiYXNlbGluZV90YXJnZXQpCisgICAgICAgIGZvciBmaWxlIGlu
IGFjdHVhbF9maWxlczoKKyAgICAgICAgICAgIHNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHRl
c3RfcmVzdWx0c19kaXJlY3RvcnksIGZpbGUucmVwbGFjZSgnLWV4cGVjdGVkJywgJy1hY3R1YWwn
KSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uX3BhdGggPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2V4
cGVjdGF0aW9uc19kaXJlY3RvcnksIGZpbGUpCisgICAgICAgICAgICBzaHV0aWwuY29weShzb3Vy
Y2VfcGF0aCwgZGVzdGluYXRpb25fcGF0aCkKKyAgICAgICAgICAgIGV4aXRfY29kZSA9IHNlbGYu
c2VydmVyLnNjbS5hZGQoZGVzdGluYXRpb25fcGF0aCwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQor
ICAgICAgICAgICAgbG9nKCcgICAgQWRkZWQgJXMsIGV4aXQgY29kZSAlZCcgJSAoZmlsZSwgZXhp
dF9jb2RlKSkKKyAgICAgICAgICAgIGlmIGV4aXRfY29kZToKKyAgICAgICAgICAgICAgICB0ZXN0
X2pzb25bJ3N0YXRlJ10gPSBTVEFURV9SRUJBU0VMSU5FX0ZBSUxFRAorICAgICAgICAgICAgICAg
IHJldHVybiBGYWxzZQorCisgICAgICAgIHRlc3RfanNvblsnc3RhdGUnXSA9IFNUQVRFX1JFQkFT
RUxJTkVfU1VDQ0VFREVECisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgdGVzdF9yZXN1
bHQoc2VsZik6CisgICAgICAgICh0ZXN0X25hbWUsIHRlc3RfZXh0ZW5zaW9uKSA9IG9zLnBhdGgu
c3BsaXRleHQoc2VsZi5xdWVyeVsndGVzdCddWzBdKQorICAgICAgICBtb2RlID0gc2VsZi5xdWVy
eVsnbW9kZSddWzBdCisgICAgICAgIGlmIG1vZGUgPT0gJ2V4cGVjdGVkLWltYWdlJzoKKyAgICAg
ICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZXhwZWN0ZWQucG5nJworICAgICAgICBl
bGlmIG1vZGUgPT0gJ2FjdHVhbC1pbWFnZSc6CisgICAgICAgICAgICBmaWxlX25hbWUgPSB0ZXN0
X25hbWUgKyAnLWFjdHVhbC5wbmcnCisgICAgICAgIGlmIG1vZGUgPT0gJ2V4cGVjdGVkLWNoZWNr
c3VtJzoKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZXhwZWN0ZWQuY2hl
Y2tzdW0nCisgICAgICAgIGVsaWYgbW9kZSA9PSAnYWN0dWFsLWNoZWNrc3VtJzoKKyAgICAgICAg
ICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctYWN0dWFsLmNoZWNrc3VtJworICAgICAgICBl
bGlmIG1vZGUgPT0gJ2RpZmYtaW1hZ2UnOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gdGVzdF9u
YW1lICsgJy1kaWZmLnBuZycKKyAgICAgICAgaWYgbW9kZSA9PSAnZXhwZWN0ZWQtdGV4dCc6Cisg
ICAgICAgICAgICBmaWxlX25hbWUgPSB0ZXN0X25hbWUgKyAnLWV4cGVjdGVkLnR4dCcKKyAgICAg
ICAgZWxpZiBtb2RlID09ICdhY3R1YWwtdGV4dCc6CisgICAgICAgICAgICBmaWxlX25hbWUgPSB0
ZXN0X25hbWUgKyAnLWFjdHVhbC50eHQnCisgICAgICAgIGVsaWYgbW9kZSA9PSAnZGlmZi10ZXh0
JzoKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IHRlc3RfbmFtZSArICctZGlmZi50eHQnCisKKyAg
ICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuc2VydmVyLnJlc3VsdHNfZGlyZWN0
b3J5LCBmaWxlX25hbWUpCisKKyAgICAgICAgIyBMZXQgcmVzdWx0cyBiZSBjYWNoZWQgZm9yIDYw
IHNlY29uZHMsIHNvIHRoYXQgdGhleSBjYW4gYmUgcHJlLWZldGNoZWQKKyAgICAgICAgIyBieSB0
aGUgVUkKKyAgICAgICAgc2VsZi5fc2VydmVfZmlsZShmaWxlX3BhdGgsIGNhY2hlX3NlY29uZHM9
NjApCisKKyAgICBkZWYgcmVzdWx0c19qc29uKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfcmVz
cG9uc2UoMjAwKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBw
bGljYXRpb24vanNvbicpCisgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorICAgICAgICBzaW1w
bGVqc29uLmR1bXAoc2VsZi5zZXJ2ZXIucmVzdWx0c19qc29uLCBzZWxmLndmaWxlKQorCisgICAg
ZGVmIHF1aXRxdWl0cXVpdChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkK
KyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvcGxhaW4nKQor
ICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZSgnUXVp
dC5cbicpCisKKyAgICAgICAgIyBTaHV0ZG93biBoYXMgdG8gaGFwcGVuIG9uIGFub3RoZXIgdGhy
ZWFkIGZyb20gdGhlIHNlcnZlcidzIHRocmVhZCwKKyAgICAgICAgIyBvdGhlcndpc2UgdGhlcmUn
cyBhIGRlYWRsb2NrCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxhbWJkYTogc2Vs
Zi5zZXJ2ZXIuc2h1dGRvd24oKSkuc3RhcnQoKQorCisgICAgZGVmIF9zZXJ2ZV9maWxlKHNlbGYs
IGZpbGVfcGF0aCwgY2FjaGVfc2Vjb25kcz0wKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhp
c3RzKGZpbGVfcGF0aCk6CisgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0LCAnRmlsZSBu
b3QgZm91bmQnKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHN0YXRpY19maWxlID0gZmls
ZShmaWxlX3BhdGgsICdyYicpCisKKyAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAg
ICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1MZW5ndGgnLCBvcy5wYXRoLmdldHNpemUo
ZmlsZV9wYXRoKSkKKyAgICAgICAgKG1pbWVfdHlwZSwgZW5jb2RpbmcpID0gbWltZXR5cGVzLmd1
ZXNzX3R5cGUoZmlsZV9wYXRoKQorICAgICAgICBpZiBtaW1lX3R5cGU6CisgICAgICAgICAgICBz
ZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LXR5cGUnLCBtaW1lX3R5cGUpCisKKyAgICAgICAgaWYg
Y2FjaGVfc2Vjb25kczoKKyAgICAgICAgICAgIGV4cGlyZXNfdGltZSA9IFwKKyAgICAgICAgICAg
ICAgICBkYXRldGltZS5kYXRldGltZS5ub3coKSArIGRhdGV0aW1lLnRpbWVkZWx0YSgwLCBjYWNo
ZV9zZWNvbmRzKQorICAgICAgICAgICAgZXhwaXJlc19mb3JtYXR0ZWQgPSBcCisgICAgICAgICAg
ICAgICAgZm9ybWF0X2RhdGVfdGltZSh0aW1lLm1rdGltZShleHBpcmVzX3RpbWUudGltZXR1cGxl
KCkpKQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignRXhwaXJlcycsIGV4cGlyZXNfZm9y
bWF0dGVkKQorICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKworICAgICAgICBzaHV0aWwuY29w
eWZpbGVvYmooc3RhdGljX2ZpbGUsIHNlbGYud2ZpbGUpCisgICAgICAgIHN0YXRpY19maWxlLmNs
b3NlKCkKKworCitjbGFzcyBSZWJhc2VsaW5lU2VydmVyKEFic3RyYWN0RGVjbGFyYXRpdmVDb21t
YW5kKToKKyAgICBuYW1lID0gJ3JlYmFzZWxpbmUtc2VydmVyJworICAgIGhlbHBfdGV4dCA9ICdH
aXZlbiBhIHRlc3QgcmVzdWx0cyBkaXJlY3RvcnkgZ2VuZXJhdGVkIGJ5IChuZXctKXJ1bi13ZWJr
aXQtdGVzdHMsIHN0YXJ0cyBhIGxvY2FsIEhUVFAgc2VydmVyIHRoYXQgZGlzcGxheXMgdW5leHBl
Y3RlZCBmYWlsdXJlcyBhbmQgYWxsb3dzIHJlYmFzZWxpbmluZy4nCisgICAgYXJndW1lbnRfbmFt
ZXMgPSAnWy9wYXRoL3RvL3Jlc3VsdHMvZGlyZWN0b3J5L10nCisKKyAgICBkZWYgX19pbml0X18o
c2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbCisgICAgICAgICAgICBtYWtlX29wdGlvbignLS1o
dHRwZC1wb3J0JywgYWN0aW9uPSdzdG9yZScsIHR5cGU9J2ludCcsIGRlZmF1bHQ9ODEyNywgaGVs
cD0nUG9ydCB0byB1c2UgZm9yIHRoZSB0aGUgcmViYXNlbGluZSBIVFRQIHNlcnZlcicpLAorICAg
ICAgICBdCisgICAgICAgIEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kLl9faW5pdF9fKHNlbGYs
IG9wdGlvbnM9b3B0aW9ucykKKworICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3Ms
IHRvb2wpOgorICAgICAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgICAgIHByaW50ICdQ
YXRoIHRvIHJlc3VsdHMgZGlyZWN0b3J5IGlzIHJlcXVpcmVkLicKKyAgICAgICAgICAgIHJldHVy
biAxCisgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5ID0gYXJnc1swXQorCisgICAgICAgIHByaW50
ICdQYXJzaW5nIHVuZXhwZWN0ZWRfcmVzdWx0cy5qc29uLi4uJworICAgICAgICByZXN1bHRzX2pz
b25fcGF0aCA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5LCAn
dW5leHBlY3RlZF9yZXN1bHRzLmpzb24nKQorICAgICAgICByZXN1bHRzX2pzb25fZmlsZSA9IGZp
bGUocmVzdWx0c19qc29uX3BhdGgpCisgICAgICAgIHJlc3VsdHNfanNvbiA9IHNpbXBsZWpzb24u
bG9hZChyZXN1bHRzX2pzb25fZmlsZSkKKyAgICAgICAgcmVzdWx0c19qc29uX2ZpbGUuY2xvc2Uo
KQorCisgICAgICAgIHRlc3RfbmFtZV90b190ZXN0X2ZpbGUgPSB7fQorICAgICAgICBmb3IgdGVz
dF9maWxlLCB0ZXN0X2pzb24gaW4gcmVzdWx0c19qc29uWyd0ZXN0cyddLml0ZW1zKCk6CisgICAg
ICAgICAgICAodGVzdF9uYW1lLCB0ZXh0X2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KHRl
c3RfZmlsZSkKKyAgICAgICAgICAgIHRlc3RfbmFtZV90b190ZXN0X2ZpbGVbdGVzdF9uYW1lXSA9
IHRlc3RfZmlsZQorCisgICAgICAgICAgICAjIEFsc28gaW5kZXggcGVyLXBsYXRmb3JtIHRlc3Rz
IGJ5IHRoZWlyIG5vbi1wbGF0Zm9ybSBuYW1lcworICAgICAgICAgICAgcGF0aF9waWVjZXMgPSB0
ZXN0X25hbWUuc3BsaXQob3Muc2VwKQorICAgICAgICAgICAgaWYgbGVuKHBhdGhfcGllY2VzKSA+
PSAyIGFuZCBwYXRoX3BpZWNlc1swXSA9PSAncGxhdGZvcm0nOgorICAgICAgICAgICAgICAgIHRl
c3RfbmFtZV90b190ZXN0X2ZpbGVbb3Muc2VwLmpvaW4ocGF0aF9waWVjZXNbMjpdKV0gPSB0ZXN0
X2ZpbGUKKworICAgICAgICAgICAgdGVzdF9qc29uWydzdGF0ZSddID0gU1RBVEVfTkVFRFNfUkVC
QVNFTElORQorCisgICAgICAgIHByaW50ICdHYXRoZXJpbmcgY3VycmVudCBiYXNlbGluZXMuLi4n
CisKKyAgICAgICAgcG9ydCA9IGZhY3RvcnkuZ2V0KCkKKyAgICAgICAgbGF5b3V0X3Rlc3RzX2Rp
cmVjdG9yeSA9IHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpCisgICAgICAgIGZvciByb290LCBkaXJz
LCBmaWxlcyBpbiBvcy53YWxrKGxheW91dF90ZXN0c19kaXJlY3RvcnkpOgorICAgICAgICAgICAg
Zm9yIGZpbGVuYW1lIGluIGZubWF0Y2guZmlsdGVyKGZpbGVzLCAnKi1leHBlY3RlZC4qJyk6Cisg
ICAgICAgICAgICAgICAgcmVsYXRpdmVfcGF0aCA9IG9zLnBhdGgucmVscGF0aChyb290LCBsYXlv
dXRfdGVzdHNfZGlyZWN0b3J5KQorICAgICAgICAgICAgICAgIHBhdGhfcGllY2VzID0gcmVsYXRp
dmVfcGF0aC5zcGxpdChvcy5zZXApCisgICAgICAgICAgICAgICAgaWYgbGVuKHBhdGhfcGllY2Vz
KSA+PSAyIGFuZCBwYXRoX3BpZWNlc1swXSA9PSAncGxhdGZvcm0nOgorICAgICAgICAgICAgICAg
ICAgICBwbGF0Zm9ybSA9IHBhdGhfcGllY2VzWzFdCisgICAgICAgICAgICAgICAgICAgIHRlc3Rf
ZGlyX3BhdGggPSBvcy5zZXAuam9pbihwYXRoX3BpZWNlc1syOl0pCisgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0gPSAnYmFzZScKKyAgICAgICAgICAg
ICAgICAgICAgdGVzdF9kaXJfcGF0aCA9IHJlbGF0aXZlX3BhdGgKKworICAgICAgICAgICAgICAg
ICh0ZXN0X25hbWUsIGJhc2VsaW5lX2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVu
YW1lKQorICAgICAgICAgICAgICAgIHRlc3RfbmFtZSA9IG9zLnBhdGguam9pbih0ZXN0X2Rpcl9w
YXRoLCB0ZXN0X25hbWVbMDotbGVuKCctZXhwZWN0ZWQnKV0pCisgICAgICAgICAgICAgICAgaWYg
dGVzdF9uYW1lIG5vdCBpbiB0ZXN0X25hbWVfdG9fdGVzdF9maWxlOgorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHRlc3RfZmlsZSA9IHRlc3RfbmFtZV90b190
ZXN0X2ZpbGVbdGVzdF9uYW1lXQorICAgICAgICAgICAgICAgIHRlc3RfanNvbiA9IHJlc3VsdHNf
anNvblsndGVzdHMnXVt0ZXN0X2ZpbGVdCisgICAgICAgICAgICAgICAgaWYgJ2Jhc2VsaW5lcycg
bm90IGluIHRlc3RfanNvbjoKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9qc29uWydiYXNlbGlu
ZXMnXSA9IHt9CisgICAgICAgICAgICAgICAgaWYgcGxhdGZvcm0gbm90IGluIHRlc3RfanNvblsn
YmFzZWxpbmVzJ106CisgICAgICAgICAgICAgICAgICAgIHRlc3RfanNvblsnYmFzZWxpbmVzJ11b
cGxhdGZvcm1dID0gW10KKyAgICAgICAgICAgICAgICB0ZXN0X2pzb25bJ2Jhc2VsaW5lcyddW3Bs
YXRmb3JtXS5hcHBlbmQoYmFzZWxpbmVfZXh0ZW5zaW9uKQorCisgICAgICAgIHByaW50ICdTdGFy
dGluZyBzZXJ2ZXIgYXQgaHR0cDovL2xvY2FsaG9zdDolZC8nICUgb3B0aW9ucy5odHRwZF9wb3J0
CisKKyAgICAgICAgaHR0cGQgPSBSZWJhc2VsaW5lSFRUUFNlcnZlcigKKyAgICAgICAgICAgIGh0
dHBkX3BvcnQ9b3B0aW9ucy5odHRwZF9wb3J0LAorICAgICAgICAgICAgcmVzdWx0c19kaXJlY3Rv
cnk9cmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICByZXN1bHRzX2pzb249cmVzdWx0c19q
c29uLAorICAgICAgICAgICAgcG9ydD1wb3J0LAorICAgICAgICAgICAgc2NtPXNlbGYuX3Rvb2wu
c2NtKCkpCisgICAgICAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72996</attachid>
            <date>2010-11-04 15:58:06 -0700</date>
            <delta_ts>2010-11-04 15:59:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47761-20101104155804.patch</filename>
            <type>text/plain</type>
            <size>14829</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwNDk1MmQwNjUzYWI1Y2NmYTQzNmYxMGQ1ZTgyZmQ1MmE0MzdlZDgwLi5lNDMyYTUx
OTkwYzZlZWU2NjM0OWZiYTkwNmUxN2VjN2U4NGVjMTNmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDIgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmViYXNlbGluZSBz
ZXJ2ZXI6IGluaXRpYWwgZnJhbWV3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00ODg5MgorICAgICAgICAKKyAgICAgICAgQWRkcyB0aGUgYmFzaWMg
ZnJhbWV3b3JrIGZvciB0aGUgcmViYXNlbGluZSBzZXJ2ZXIgKGRldGFpbHMgYXQgCisgICAgICAg
IGh0dHA6Ly93ZWJraXQub3JnL2IvNDc3NjEpLiBJbmNsdWRlcyB0aGUgcmViYXNlbGluZS1zZXJ2
ZXIgd2Via2l0LXBhdGNoCisgICAgICAgIGNvbW1hbmQsIHdoaWNoIHN0YXJ0cyBhbiBIVFRQIHNl
cnZlciB0aGF0IGNhbiBzZXJ2ZSBzdGF0aWMgZmlsZXMgb3IKKyAgICAgICAgaW52b2tlIGhhbmRs
ZXIgbWV0aG9kcyBvbiBhIGNsYXNzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL19faW5pdF9fLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9t
YWluLmNzczogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L2RhdGEvcmViYXNlbGluZXNlcnZlci9tYWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5weTogQWRkZWQuCisKIDIw
MTAtMTEtMDIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggYnVpbGQuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvX19pbml0X18ucHkKaW5kZXggOWJkZWM4ZjU5N2UxNzYzNjM0NGE4MTgzYjEw
M2ExNTBiZjhjOWRlMy4uYTA3MDMyNGZjY2EwYWVhYjdhNmYyYTg4YTJlOWNhYzM3ZDA5YmNjMCAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19f
aW5pdF9fLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9fX2luaXRfXy5weQpAQCAtMiw0ICsyLDUgQEAKIAogZnJvbSB3ZWJraXRweS50b29sLmNvbW1h
bmRzLnByZXR0eWRpZmYgaW1wb3J0IFByZXR0eURpZmYKIGZyb20gd2Via2l0cHkudG9vbC5jb21t
YW5kcy5yZWJhc2VsaW5lIGltcG9ydCBSZWJhc2VsaW5lCitmcm9tIHdlYmtpdHB5LnRvb2wuY29t
bWFuZHMucmViYXNlbGluZXNlcnZlciBpbXBvcnQgUmViYXNlbGluZVNlcnZlcgogIyBGSVhNRTog
QWRkIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kcyBoZXJlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9p
bmRleC5odG1sIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rh
dGEvcmViYXNlbGluZXNlcnZlci9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2NjdjZDJhZjI3NGQ3
ZTAyZTkyZTNiYTc1OGU3YjdlYTc4NjYyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL2lu
ZGV4Lmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgIENvcHly
aWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAKKyAgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAgbWV0OgorICAKKyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgZGlzdHJpYnV0aW9uLgorICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAgCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKy0tPgorPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkxheW91dCBUZXN0IFJlYmFz
ZWxpbmUgU2VydmVyPC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvbWFp
bi5jc3MiIHR5cGU9InRleHQvY3NzIj4KKyAgPHNjcmlwdCBzcmM9Ii9tYWluLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJsb2FkaW5nIj4KKyAgICA8YSBocmVmPSIvcXVpdHF1
aXRxdWl0Ij5FeGl0PC9hPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9t
YWluLmNzcyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRh
L3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzViZDZhNWFkMWM5ZjliYjNi
NTgxOTYzMjU2ODE1YWNlYTBlMTdiMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5j
c3MKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK2JvZHkgeworICBmb250LXNpemU6IDEycHg7CisgIGZvbnQtZmFt
aWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICBwYWRkaW5nOiAwOworICBtYXJn
aW46IDA7Cit9CisKKy5sb2FkaW5nIHsKKyAgb3BhY2l0eTogMC41OworfQorCitkaXYgeworICBt
YXJnaW46IDA7Cit9CisKK2EsIC5saW5rIHsKKyAgY29sb3I6ICNhYWY7CisgIHRleHQtZGVjb3Jh
dGlvbjogdW5kZXJsaW5lOworICBjdXJzb3I6IHBvaW50ZXI7ICAgICAgCit9CisKKy5saW5rLnNl
bGVjdGVkIHsKKyAgY29sb3I6ICNmZmY7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICB0ZXh0LWRl
Y29yYXRpb246IG5vbmU7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL21haW4uanMgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVy
L21haW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVmMTlhNGYzZTI5NzA5Y2UzZjEzZGQyZTlkOGQxMTc0ZGUy
ZjQxYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5qcwpAQCAtMCwwICsxLDM2IEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
ZnVuY3Rpb24gbWFpbigpCit7CisgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCds
b2FkaW5nJyk7Cit9CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVk
JywgbWFpbik7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxMzZhOGMy
MTJhODJiMWI4ZjFkYmNiZmY3YmU3ZTAxNDU3NTAyMzEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5w
eQpAQCAtMCwwICsxLDE1NCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0
OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlN0YXJ0cyBhIGxvY2Fs
IEhUVFAgc2VydmVyIHdoaWNoIGRpc3BsYXlzIGxheW91dCB0ZXN0IGZhaWx1cmVzIChnaXZlbiBh
IHRlc3QKK3Jlc3VsdHMgZGlyZWN0b3J5KSwgcHJvdmlkZXMgY29tcGFyaXNvbnMgb2YgZXhwZWN0
ZWQgYW5kIGFjdHVhbCByZXN1bHRzIChib3RoCitpbWFnZXMgYW5kIHRleHQpIGFuZCBhbGxvd3Mg
b25lLWNsaWNrIHJlYmFzZWxpbmluZyBvZiB0ZXN0cy4iIiIKKworaW1wb3J0IGNvZGVjcworaW1w
b3J0IGRhdGV0aW1lCitpbXBvcnQgbWltZXR5cGVzCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRo
CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHVy
bHBhcnNlCitpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKKworZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFr
ZV9vcHRpb24KK2Zyb20gd3NnaXJlZi5oYW5kbGVycyBpbXBvcnQgZm9ybWF0X2RhdGVfdGltZQor
Citmcm9tIHdlYmtpdHB5LnRvb2wubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQWJzdHJhY3REZWNs
YXJhdGl2ZUNvbW1hbmQKKworCitjbGFzcyBSZWJhc2VsaW5lSFRUUFNlcnZlcihCYXNlSFRUUFNl
cnZlci5IVFRQU2VydmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaHR0cGRfcG9ydCwgcmVz
dWx0c19kaXJlY3RvcnkpOgorICAgICAgICBCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyLl9faW5p
dF9fKHNlbGYsICgnJywgaHR0cGRfcG9ydCksIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIp
CisgICAgICAgIHNlbGYucmVzdWx0c19kaXJlY3RvcnkgPSByZXN1bHRzX2RpcmVjdG9yeQorCisK
K2NsYXNzIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIoQmFzZUhUVFBTZXJ2ZXIuQmFzZUhU
VFBSZXF1ZXN0SGFuZGxlcik6CisgICAgU1RBVElDX0ZJTEVfTkFNRVMgPSBmcm96ZW5zZXQoWwor
ICAgICAgICAnaW5kZXguaHRtbCcsCisgICAgICAgICdtYWluLmpzJywKKyAgICAgICAgJ21haW4u
Y3NzJywKKyAgICBdKQorCisgICAgU1RBVElDX0ZJTEVfRElSRUNUT1JZID0gb3MucGF0aC5qb2lu
KG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdkYXRhJywgJ3JlYmFzZWxpbmVzZXJ2ZXInKQor
CisgICAgZGVmIGRvX0dFVChzZWxmKToKKyAgICAgICAgc2VsZi5faGFuZGxlX3JlcXVlc3QoKQor
CisgICAgZGVmIGRvX1BPU1Qoc2VsZik6CisgICAgICAgIHNlbGYuX2hhbmRsZV9yZXF1ZXN0KCkK
KworICAgIGRlZiBfaGFuZGxlX3JlcXVlc3Qoc2VsZik6CisgICAgICAgICMgUGFyc2UgaW5wdXQu
CisgICAgICAgIGlmICc/JyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgICBwYXRoLCBxdWVyeV9z
dHJpbmcgPSBzZWxmLnBhdGguc3BsaXQoJz8nLCAxKQorICAgICAgICAgICAgc2VsZi5xdWVyeSA9
IHVybHBhcnNlLnBhcnNlX3FzKHF1ZXJ5X3N0cmluZykKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHBhdGggPSBzZWxmLnBhdGgKKyAgICAgICAgICAgIHNlbGYucXVlcnkgPSB7fQorICAgICAg
ICBmdW5jX29yX2ZpbGVfbmFtZSA9IHBhdGhbMTpdIG9yICdpbmRleC5odG1sJworCisgICAgICAg
ICMgU2VlIGlmIGEgc3RhdGljIGZpbGUgbWF0Y2hlcy4KKyAgICAgICAgaWYgZnVuY19vcl9maWxl
X25hbWUgaW4gUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlci5TVEFUSUNfRklMRV9OQU1FUzoK
KyAgICAgICAgICAgIHNlbGYuX3NlcnZlX3N0YXRpY19maWxlKGZ1bmNfb3JfZmlsZV9uYW1lKQor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBTZWUgaWYgYSBjbGFzcyBtZXRob2QgbWF0
Y2hlcy4KKyAgICAgICAgZnVuY19uYW1lID0gZnVuY19vcl9maWxlX25hbWUucmVwbGFjZSgnLics
ICdfJykKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgZnVuY19uYW1lKToKKyAgICAgICAg
ICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICdVbmtub3duIGZ1bmN0aW9uICVzJyAlIGZ1bmNfbmFt
ZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLCBmdW5j
X25hbWUpCisgICAgICAgIGZ1bmMoKQorCisgICAgZGVmIF9zZXJ2ZV9zdGF0aWNfZmlsZShzZWxm
LCBzdGF0aWNfcGF0aCk6CisgICAgICAgIHNlbGYuX3NlcnZlX2ZpbGUob3MucGF0aC5qb2luKAor
ICAgICAgICAgICAgUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlci5TVEFUSUNfRklMRV9ESVJF
Q1RPUlksIHN0YXRpY19wYXRoKSkKKworICAgIGRlZiBxdWl0cXVpdHF1aXQoc2VsZik6CisgICAg
ICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0Nv
bnRlbnQtdHlwZScsICd0ZXh0L3BsYWluJykKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisg
ICAgICAgIHNlbGYud2ZpbGUud3JpdGUoJ1F1aXQuXG4nKQorCisgICAgICAgICMgU2h1dGRvd24g
aGFzIHRvIGhhcHBlbiBvbiBhbm90aGVyIHRocmVhZCBmcm9tIHRoZSBzZXJ2ZXIncyB0aHJlYWQs
CisgICAgICAgICMgb3RoZXJ3aXNlIHRoZXJlJ3MgYSBkZWFkbG9jaworICAgICAgICB0aHJlYWRp
bmcuVGhyZWFkKHRhcmdldD1sYW1iZGE6IHNlbGYuc2VydmVyLnNodXRkb3duKCkpLnN0YXJ0KCkK
KworICAgIGRlZiBfc2VydmVfZmlsZShzZWxmLCBmaWxlX3BhdGgsIGNhY2hlYWJsZV9zZWNvbmRz
PTApOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKKyAgICAgICAg
ICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICdGaWxlIG5vdCBmb3VuZCcpCisgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihmaWxlX3BhdGgsICdyYicpIGFzIHN0YXRp
Y19maWxlOgorICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgICAgICAg
IHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgb3MucGF0aC5nZXRzaXplKGZpbGVf
cGF0aCkpCisgICAgICAgICAgICBtaW1lX3R5cGUsIGVuY29kaW5nID0gbWltZXR5cGVzLmd1ZXNz
X3R5cGUoZmlsZV9wYXRoKQorICAgICAgICAgICAgaWYgbWltZV90eXBlOgorICAgICAgICAgICAg
ICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtdHlwZScsIG1pbWVfdHlwZSkKKworICAgICAg
ICAgICAgaWYgY2FjaGVhYmxlX3NlY29uZHM6CisgICAgICAgICAgICAgICAgZXhwaXJlc190aW1l
ID0gKGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpICsKKyAgICAgICAgICAgICAgICAgICAgZGF0ZXRp
bWUudGltZWRlbHRhKDAsIGNhY2hlYWJsZV9zZWNvbmRzKSkKKyAgICAgICAgICAgICAgICBleHBp
cmVzX2Zvcm1hdHRlZCA9IGZvcm1hdF9kYXRlX3RpbWUoCisgICAgICAgICAgICAgICAgICAgIHRp
bWUubWt0aW1lKGV4cGlyZXNfdGltZS50aW1ldHVwbGUoKSkpCisgICAgICAgICAgICAgICAgc2Vs
Zi5zZW5kX2hlYWRlcignRXhwaXJlcycsIGV4cGlyZXNfZm9ybWF0dGVkKQorICAgICAgICAgICAg
c2VsZi5lbmRfaGVhZGVycygpCisKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaihzdGF0
aWNfZmlsZSwgc2VsZi53ZmlsZSkKKworCitjbGFzcyBSZWJhc2VsaW5lU2VydmVyKEFic3RyYWN0
RGVjbGFyYXRpdmVDb21tYW5kKToKKyAgICBuYW1lID0gJ3JlYmFzZWxpbmUtc2VydmVyJworICAg
IGhlbHBfdGV4dCA9IF9fZG9jX18KKyAgICBhcmd1bWVudF9uYW1lcyA9ICdbL3BhdGgvdG8vcmVz
dWx0cy9kaXJlY3RvcnkvXScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgb3B0
aW9ucyA9IFsKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCctLWh0dHBkLXBvcnQnLCBhY3Rpb249
J3N0b3JlJywgdHlwZT0naW50JywgZGVmYXVsdD04MTI3LCBoZWxwPSdQb3J0IHRvIHVzZSBmb3Ig
dGhlIHRoZSByZWJhc2VsaW5lIEhUVFAgc2VydmVyJyksCisgICAgICAgIF0KKyAgICAgICAgQWJz
dHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQuX19pbml0X18oc2VsZiwgb3B0aW9ucz1vcHRpb25zKQor
CisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CisgICAgICAgIGlm
IGxlbihhcmdzKSAhPSAxOgorICAgICAgICAgICAgcHJpbnQgJ1BhdGggdG8gcmVzdWx0cyBkaXJl
Y3RvcnkgaXMgcmVxdWlyZWQuJworICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmVzdWx0
c19kaXJlY3RvcnkgPSBhcmdzWzBdCisKKyAgICAgICAgcHJpbnQgJ1N0YXJ0aW5nIHNlcnZlciBh
dCBodHRwOi8vbG9jYWxob3N0OiVkLycgJSBvcHRpb25zLmh0dHBkX3BvcnQKKyAgICAgICAgcHJp
bnQgKCdVc2UgdGhlICJFeGl0IiBsaW5rIGluIHRoZSBVSSwgaHR0cDovL2xvY2FsaG9zdDolZC8n
ICsKKyAgICAgICAgICAgICdxdWl0cXVpdHF1aXQgb3IgQ3RybC1DIHRvIHN0b3AnKSAlIG9wdGlv
bnMuaHR0cGRfcG9ydAorCisgICAgICAgIGh0dHBkID0gUmViYXNlbGluZUhUVFBTZXJ2ZXIoCisg
ICAgICAgICAgICBodHRwZF9wb3J0PW9wdGlvbnMuaHR0cGRfcG9ydCwKKyAgICAgICAgICAgIHJl
c3VsdHNfZGlyZWN0b3J5PXJlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBodHRwZC5zZXJ2ZV9m
b3JldmVyKCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>