<?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>60354</bug_id>
          
          <creation_ts>2011-05-06 01:10:10 -0700</creation_ts>
          <short_desc>Add a --skip-integrationtests mode to test-webkitpy</short_desc>
          <delta_ts>2011-05-06 13:04:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dpranke</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>399411</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-06 01:10:10 -0700</bug_when>
    <thetext>Add a --fast mode to test-webkitpy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399413</commentid>
    <comment_count>1</comment_count>
      <attachid>92559</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-06 01:13:02 -0700</bug_when>
    <thetext>Created attachment 92559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399553</commentid>
    <comment_count>2</comment_count>
      <attachid>92559</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-06 09:25:58 -0700</bug_when>
    <thetext>Comment on attachment 92559
Patch

I guess.  Why don&apos;t we just kill the slow tests?  I guess that&apos;s what we&apos;re effectively doing here, since if folks start running --fast, the non-fast tests will go south.

This reminds me exactly of the &quot;fast&quot; directory in LayoutTests.  :)  Eventually everything wanted to be a fast/ test...

What constitutes a &quot;slow&quot; module?  How do you get on/off that list?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399559</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-06 09:31:36 -0700</bug_when>
    <thetext>&gt; I guess.  Why don&apos;t we just kill the slow tests?

I support that plan, but I suspect the folks that wrote those tests would be sad.

&gt; I guess that&apos;s what we&apos;re effectively doing here, since if folks start running --fast, the non-fast tests will go south.

They&apos;re still run by the buildbot.

&gt; This reminds me exactly of the &quot;fast&quot; directory in LayoutTests.  :)  Eventually everything wanted to be a fast/ test...
&gt; 
&gt; What constitutes a &quot;slow&quot; module?  How do you get on/off that list?

If test-webkitpy gets too slow (e.g., takes more than 10s), we continue to add things to the list until it is fast again.

Another approach is to refuse crapy tests that are slow.  There&apos;s no python unit tests should be slow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399560</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-06 09:32:17 -0700</bug_when>
    <thetext>&gt; There&apos;s no python unit tests should be slow.

^^^ &quot;There&apos;s no reason python ...&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399615</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-05-06 10:34:22 -0700</bug_when>
    <thetext>I&apos;m not a big fan of this change. I don&apos;t like doing anything that discourages people from running tests. We should just fix bug 60350 instead.

Those tests used to complete in a few seconds, so I suspect something simple just slipped in to cause the slowdown.

Additionally, in bug 59985 I added a way to mark tests as integration tests that weren&apos;t run by default. Most of the tests that are in this list are actually integration tests and should probably be marked like that anyway, so this patch is kinda redundant with that one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399648</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-05-06 11:09:21 -0700</bug_when>
    <thetext>In the grand scheme of things, 30 seconds isn&apos;t that long to wait for a set of tests to complete, so turning off &quot;slow&quot; tests to speed things up seems a bit misguided to me.

Some other things ideas:

1. If the goal is to speed up the EWS doing an entire test run, why not be smarter about which test suites need to run at all ? I.e., if there are no python modules modified, maybe skip test-webkitpy. If no perl tests, skip test-webkitperl, etc. If no changes to Source or LayoutTests, skip layout tests, etc.

2. Modify test-wekbitpy to run tests in parallel. This should be easy, since the tests are already designed to be run standalone.

3. Figure out which tests should be run based on the change and dependency analysis (granted, this one is a whole lot harder).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399675</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-06 11:41:54 -0700</bug_when>
    <thetext>The goal is to speed up my development of Python.  30s is needlessly long.  4s is much more pleasant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399705</commentid>
    <comment_count>8</comment_count>
      <attachid>92620</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-06 12:11:18 -0700</bug_when>
    <thetext>Created attachment 92620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399706</commentid>
    <comment_count>9</comment_count>
      <attachid>92621</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-06 12:12:11 -0700</bug_when>
    <thetext>Created attachment 92621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399709</commentid>
    <comment_count>10</comment_count>
      <attachid>92620</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-06 12:14:17 -0700</bug_when>
    <thetext>Comment on attachment 92620
Patch

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

LGTM.

&gt; Tools/Scripts/webkitpy/test/main.py:40
&gt; +    def _find_unittest_files(self, webkitpy_dir, suffix):

I would have renamed this _find_test_files.  Entertainingly python 2.7 has this implemented for us as TestDiscoverer. :)

&gt; Tools/Scripts/webkitpy/test/main.py:127
&gt; +        skip_integration_tests = False
&gt; +        if len(sys_argv) &gt; 1 and sys.argv[1] == &quot;--skip-integrationtests&quot;:
&gt; +            sys.argv.remove(&quot;--skip-integrationtests&quot;)

Some day we&apos;ll have real arg parsing... some day.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399712</commentid>
    <comment_count>11</comment_count>
      <attachid>92621</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-06 12:14:59 -0700</bug_when>
    <thetext>Comment on attachment 92621
Patch

I would argue these could be off by default...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399713</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-06 12:17:06 -0700</bug_when>
    <thetext>Committed r85969: &lt;http://trac.webkit.org/changeset/85969&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399714</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-05-06 12:18:30 -0700</bug_when>
    <thetext>Please do not submit this patch as is. 

run_webkit_tests_unittests contains tests that do a lot of different things. Also, my definition of &quot;unit test&quot; for purposes of distinguishing between unit and integration tests are test that are self contained and will neither affect or be affected by the environment. Not tests that are slow.

You are also recreating a similar but needlessly different mechanism from the thing I implemented in bug 59985. Can we just reuse that mechanism instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399717</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-06 12:20:24 -0700</bug_when>
    <thetext>&gt; You are also recreating a similar but needlessly different mechanism from the thing I implemented in bug 59985. Can we just reuse that mechanism instead?

The mechanism you created in bug 59985 doesn&apos;t work for this purpose.  It&apos;s insufficiently general and only works when running the tests individually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399747</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-05-06 13:00:33 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; You are also recreating a similar but needlessly different mechanism from the thing I implemented in bug 59985. Can we just reuse that mechanism instead?
&gt; 
&gt; The mechanism you created in bug 59985 doesn&apos;t work for this purpose.  It&apos;s insufficiently general and only works when running the tests individually.

Well, yeah. The idea is to integrate that approach into test-webkitpy so that TestLoader is used for all of the tests.

Why do you think it is insufficiently general?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399749</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-06 13:04:30 -0700</bug_when>
    <thetext>&gt; Why do you think it is insufficiently general?

Because you didn&apos;t do that work and this approach was like four lines of code.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92559</attachid>
            <date>2011-05-06 01:13:02 -0700</date>
            <delta_ts>2011-05-06 12:11:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60354-20110506011301.patch</filename>
            <type>text/plain</type>
            <size>2625</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg1OTM0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjAgQEAKKzIwMTEtMDUtMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSAtLWZh
c3QgbW9kZSB0byB0ZXN0LXdlYmtpdHB5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MDM1NAorCisgICAgICAgIFRoaXMgcGF0Y2ggYXBwbGllcyB0aGUg
ODAvMjAgcnVsZSB0byB0ZXN0LXdlYmtpdHB5LCBsZXR0aW5nIHVzIGFjaGlldmUKKyAgICAgICAg
ODAlIG9mIHRoZSB0ZXN0IGNvdmVyYWdlIGluIDIwJSBvZiB0aGUgdGltZS4gIE1vcmUgcHJlY2lz
ZWx5LCAtLWZhc3QKKyAgICAgICAgcnVucyA4MDggb2YgMTAzNiB0ZXN0cyAoNzglKSBpbiA0Ljhz
IGluc3RlYWQgb2YgMjQuOHMgKDE5LjUlKS4KKworICAgICAgICBJdCB3b3VsZCBiZSBiZXR0ZXIs
IG9mIGNvdXJzZSwgdG8gZml4IEJ1ZyA2MDM1MCBhbmQgbWFrZSB0aGUgc2xvdyB0ZXN0cworICAg
ICAgICBmYXN0LiAgSG93ZXZlciwgYWRkaW5nIHRoaXMgLS1mYXN0IG1vZGUgd2lsbCBtYWtlIHVz
IG1vcmUgcHJvZHVjdGl2ZSBpbgorICAgICAgICB0aGUgbWVhbnRpbWUuCisKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKwogMjAxMS0wNS0wNiAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9qYW4gVmFmYWkuCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQkocmV2aXNpb24gODU5MjIpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMTM3
LDEyICsxMzcsMjQgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAKICAgICAgICAgIyBGSVhNRTog
VGhpcyBpcyBhIGhhY2ssIGJ1dCBJJ20gdGlyZWQgb2YgY29tbWVudGluZyBvdXQgdGhlIHRlc3Qu
CiAgICAgICAgICMgICAgICAgIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzE4MTgKLSAgICAgICAgaWYgbGVuKHN5c19hcmd2KSA+IDEgYW5kIHN5cy5hcmd2WzFd
ID09ICItLWFsbCI6Ci0gICAgICAgICAgICBzeXMuYXJndi5yZW1vdmUoIi0tYWxsIikKLSAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgIGV4Y2x1ZGVkX21vZHVsZSA9ICJ3ZWJraXRweS5jb21tb24u
Y2hlY2tvdXQuc2NtLnNjbV91bml0dGVzdCIKLSAgICAgICAgICAgIF9sb2cuaW5mbygiRXhjbHVk
aW5nOiAlcyAodXNlIC0tYWxsIHRvIGluY2x1ZGUpIiAlIGV4Y2x1ZGVkX21vZHVsZSkKLSAgICAg
ICAgICAgIG1vZHVsZXMucmVtb3ZlKGV4Y2x1ZGVkX21vZHVsZSkKKyAgICAgICAgbW9kdWxlc190
b19leGNsdWRlID0gWyJ3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtLnNjbV91bml0dGVzdCJd
CisgICAgICAgIGlmIGxlbihzeXNfYXJndikgPiAxOgorICAgICAgICAgICAgaWYgc3lzLmFyZ3Zb
MV0gPT0gIi0tYWxsIjoKKyAgICAgICAgICAgICAgICBzeXMuYXJndi5yZW1vdmUoIi0tYWxsIikK
KyAgICAgICAgICAgICAgICBtb2R1bGVzX3RvX2V4Y2x1ZGUgPSBbXQorICAgICAgICAgICAgZWxp
ZiBzeXMuYXJndlsxXSA9PSAiLS1mYXN0IjoKKyAgICAgICAgICAgICAgICBzeXMuYXJndi5yZW1v
dmUoIi0tZmFzdCIpCisgICAgICAgICAgICAgICAgc2xvd19tb2R1bGVzID0gWworICAgICAgICAg
ICAgICAgICAgICAjIHJ1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QgYWxvbmUgYWNjb3VudHMgZm9y
IG1vcmUgdGhhbiA1MCUgb2YgdGhlIHJ1bm5pbmcgdGltZS4KKyAgICAgICAgICAgICAgICAgICAg
IndlYmtpdHB5LmxheW91dF90ZXN0cy5ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0IiwKKyAgICAg
ICAgICAgICAgICAgICAgIndlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZV9sb2NrX3VuaXR0ZXN0
IiwKKyAgICAgICAgICAgICAgICAgICAgIndlYmtpdHB5LnN0eWxlLmNoZWNrZXJzLmNwcF91bml0
dGVzdCIsCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIG1vZHVsZXNfdG9fZXhj
bHVkZS5leHRlbmQoc2xvd19tb2R1bGVzKQorCisgICAgICAgIF9sb2cuaW5mbygiRXhjbHVkaW5n
OiAlcyAodXNlIC0tYWxsIHRvIGluY2x1ZGUpIiAlIG1vZHVsZXNfdG9fZXhjbHVkZSkKKyAgICAg
ICAgZm9yIG1vZHVsZSBpbiBtb2R1bGVzX3RvX2V4Y2x1ZGU6CisgICAgICAgICAgICBtb2R1bGVz
LnJlbW92ZShtb2R1bGUpCiAKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAg
ICAgICAgICAgICBtb2R1bGVzID0gZmlsdGVyKHNlbGYuX3dpbjMyX2JsYWNrbGlzdCwgbW9kdWxl
cykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92620</attachid>
            <date>2011-05-06 12:11:18 -0700</date>
            <delta_ts>2011-05-06 12:14:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60354-20110506121117.patch</filename>
            <type>text/plain</type>
            <size>71310</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg1OTY1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjQgQEAKKzIwMTEtMDUtMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSAtLXNr
aXAtaW50ZWdyYXRpb250ZXN0cyBtb2RlIHRvIHRlc3Qtd2Via2l0cHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzU0CisKKyAgICAgICAgVGhlc2Ug
dHdvIHRlc3Qgc3VpdGVzIGFjY291bnQgZm9yIDIvMyBvZiB0ZXN0LXdlYmtpdHB5J3MgcnVubmlu
ZyB0aW1lCisgICAgICAgIGJlY2F1c2UgdGhleSdyZSBub3QgYWN0dWFsbHkgdW5pdCB0ZXN0cy4g
IFRoZXkncmUgaW50ZWdyYXRpb24gdGVzdHMuCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGUg
YWJpbGl0eSB0byBza2lwIGludGVncmF0aW9uIHRlc3RzIGJ5IHBhc3NpbmcgYQorICAgICAgICBj
b21tYW5kIGxpbmUgYXJndW1lbnQgdG8gdGVzdC13ZWJraXRweS4gIFRoZSBidWlsZGJvdHMgd2ls
bCBjb250aW51ZSB0bworICAgICAgICBydW4gdGhlc2UgaW50ZWdyYXRpb24gdGVzdHMgdG8gbWFr
ZSBzdXJlIHRoZXkgZG9uJ3QgcmVncmVzcy4gIFRoaXMKKyAgICAgICAgb3B0aW9uIGlzIGZvciB1
c2UgYnkgZGV2ZWxvcGVycyB3aGVuIHdvcmtpbmcgb24gcGFydHMgb2YgdGhlIGNvZGUgdGhhdAor
ICAgICAgICBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHVuaXQgdGVzdHMuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZV9sb2NrX2ludGVncmF0aW9udGVzdC5weTog
Q29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVfbG9j
a191bml0dGVzdC5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZV9sb2NrX3VuaXR0ZXN0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5OiBDb3Bp
ZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzX3VuaXR0ZXN0LnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS90ZXN0L21haW4ucHk6CisKIDIwMTEtMDUtMDYgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlX2xvY2tfaW50ZWdyYXRp
b250ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9maWxlX2xvY2tfaW50ZWdyYXRpb250ZXN0LnB5CShyZXZpc2lvbiA4NTk2NCkJKGZyb20g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVfbG9ja191bml0dGVzdC5w
eTo4NTk2NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlX2xv
Y2tfaW50ZWdyYXRpb250ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR2Fib3IgUmFwY3Nhbnlp
IChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyMKKyMgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklW
RVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIE9SCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorIyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisjIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uZmlsZV9sb2NrIGltcG9ydCBGaWxlTG9jaworCisKK2NsYXNzIEZp
bGVMb2NrVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6Cisg
ICAgICAgIHNlbGYuX2xvY2tfbmFtZSA9ICJUZXN0V2ViS2l0IiArIHN0cihvcy5nZXRwaWQoKSkg
KyAiLmxvY2siCisgICAgICAgIHNlbGYuX2xvY2tfcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmls
ZS5nZXR0ZW1wZGlyKCksIHNlbGYuX2xvY2tfbmFtZSkKKyAgICAgICAgc2VsZi5fZmlsZV9sb2Nr
MSA9IEZpbGVMb2NrKHNlbGYuX2xvY2tfcGF0aCwgMSkKKyAgICAgICAgc2VsZi5fZmlsZV9sb2Nr
MiA9IEZpbGVMb2NrKHNlbGYuX2xvY2tfcGF0aCwgMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxm
KToKKyAgICAgICAgc2VsZi5fZmlsZV9sb2NrMS5yZWxlYXNlX2xvY2soKQorICAgICAgICBzZWxm
Ll9maWxlX2xvY2syLnJlbGVhc2VfbG9jaygpCisKKyAgICBkZWYgdGVzdF9sb2NrX2xpZmVjeWNs
ZShzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgdGhlIGxvY2suCisgICAgICAgIHNlbGYuX2ZpbGVf
bG9jazEuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhp
c3RzKHNlbGYuX2xvY2tfcGF0aCkpCisKKyAgICAgICAgIyBUcnkgdG8gbG9jayBhZ2Fpbi4KKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLl9maWxlX2xvY2syLmFjcXVpcmVfbG9jaygpKQor
CisgICAgICAgICMgUmVsZWFzZSB0aGUgbG9jay4KKyAgICAgICAgc2VsZi5fZmlsZV9sb2NrMS5y
ZWxlYXNlX2xvY2soKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNl
bGYuX2xvY2tfcGF0aCkpCisKKyAgICBkZWYgdGVzdF9zdHVja19sb2NrKHNlbGYpOgorICAgICAg
ICBvcGVuKHNlbGYuX2xvY2tfcGF0aCwgJ3cnKS5jbG9zZSgpCisgICAgICAgIHNlbGYuX2ZpbGVf
bG9jazEuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgc2VsZi5fZmlsZV9sb2NrMS5yZWxlYXNlX2xv
Y2soKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVfbG9j
a191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vZmlsZV9sb2NrX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA4NTk2NCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlX2xvY2tfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsNjEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENv
cHlyaWdodCAoQykgMjAxMCBHYWJvciBSYXBjc2FueWkgKHJnYWJvckBpbmYudS1zemVnZWQuaHUp
LCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotIwotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMn
JyBBTkQgQU5ZCi0jIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0jIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0jIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSMgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0j
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgb3MKLWltcG9ydCB0ZW1wZmls
ZQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlX2xv
Y2sgaW1wb3J0IEZpbGVMb2NrCi0KLQotY2xhc3MgRmlsZUxvY2tUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5fbG9ja19uYW1lID0g
IlRlc3RXZWJLaXQiICsgc3RyKG9zLmdldHBpZCgpKSArICIubG9jayIKLSAgICAgICAgc2VsZi5f
bG9ja19wYXRoID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgc2VsZi5fbG9j
a19uYW1lKQotICAgICAgICBzZWxmLl9maWxlX2xvY2sxID0gRmlsZUxvY2soc2VsZi5fbG9ja19w
YXRoLCAxKQotICAgICAgICBzZWxmLl9maWxlX2xvY2syID0gRmlsZUxvY2soc2VsZi5fbG9ja19w
YXRoLCAxKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxmLl9maWxlX2xv
Y2sxLnJlbGVhc2VfbG9jaygpCi0gICAgICAgIHNlbGYuX2ZpbGVfbG9jazIucmVsZWFzZV9sb2Nr
KCkKLQotICAgIGRlZiB0ZXN0X2xvY2tfbGlmZWN5Y2xlKHNlbGYpOgotICAgICAgICAjIENyZWF0
ZSB0aGUgbG9jay4KLSAgICAgICAgc2VsZi5fZmlsZV9sb2NrMS5hY3F1aXJlX2xvY2soKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5fbG9ja19wYXRoKSkKLQot
ICAgICAgICAjIFRyeSB0byBsb2NrIGFnYWluLgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNl
bGYuX2ZpbGVfbG9jazIuYWNxdWlyZV9sb2NrKCkpCi0KLSAgICAgICAgIyBSZWxlYXNlIHRoZSBs
b2NrLgotICAgICAgICBzZWxmLl9maWxlX2xvY2sxLnJlbGVhc2VfbG9jaygpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5fbG9ja19wYXRoKSkKLQotICAgIGRl
ZiB0ZXN0X3N0dWNrX2xvY2soc2VsZik6Ci0gICAgICAgIG9wZW4oc2VsZi5fbG9ja19wYXRoLCAn
dycpLmNsb3NlKCkKLSAgICAgICAgc2VsZi5fZmlsZV9sb2NrMS5hY3F1aXJlX2xvY2soKQotICAg
ICAgICBzZWxmLl9maWxlX2xvY2sxLnJlbGVhc2VfbG9jaygpCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQkocmV2aXNpb24gODU5NjQpCShmcm9tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRl
c3QucHk6ODU5NjQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY3MiBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMCBHYWJvciBSYXBj
c2FueWkgKHJnYWJvckBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorIyBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBmb3IgcnVuX3dlYmtpdF90ZXN0cy4iIiIKKwor
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQgY29kZWNzCitp
bXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgUXVldWUK
K2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWQKK2ltcG9ydCB0aW1lCitpbXBvcnQgdGhyZWFkaW5n
CitpbXBvcnQgdW5pdHRlc3QKKwordHJ5OgorICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2V4
Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBtdWx0aXByb2Nlc3NpbmcgPSBOb25lCisKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uIGltcG9ydCBhcnJheV9zdHJlYW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGlt
cG9ydCBmaWxlc3lzdGVtX21vY2sKK2Zyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgbW9ja3Rvb2wK
K2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Citmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cworZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMucG9ydC50ZXN0IGltcG9ydCBUZXN0UG9ydCwgVGVzdERyaXZlcgorZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydC50ZXN0X2ZpbGVzIGltcG9ydCBpc19yZWZlcmVuY2VfaHRtbF9m
aWxlCitmcm9tIHdlYmtpdHB5LnB5dGhvbjI0LnZlcnNpb25pbmcgaW1wb3J0IGNvbXBhcmVfdmVy
c2lvbgorZnJvbSB3ZWJraXRweS50ZXN0LnNraXAgaW1wb3J0IHNraXBfaWYKKworZnJvbSB3ZWJr
aXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKKworCitkZWYgcGFyc2VfYXJncyhleHRy
YV9hcmdzPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLCB0ZXN0c19pbmNsdWRlZD1GYWxzZSwK
KyAgICAgICAgICAgICAgIHByaW50X25vdGhpbmc9VHJ1ZSk6CisgICAgZXh0cmFfYXJncyA9IGV4
dHJhX2FyZ3Mgb3IgW10KKyAgICBpZiBwcmludF9ub3RoaW5nOgorICAgICAgICBhcmdzID0gWyct
LXByaW50JywgJ25vdGhpbmcnXQorICAgIGVsc2U6CisgICAgICAgIGFyZ3MgPSBbXQorICAgIGlm
IG5vdCAnLS1wbGF0Zm9ybScgaW4gZXh0cmFfYXJnczoKKyAgICAgICAgYXJncy5leHRlbmQoWyct
LXBsYXRmb3JtJywgJ3Rlc3QnXSkKKyAgICBpZiBub3QgcmVjb3JkX3Jlc3VsdHM6CisgICAgICAg
IGFyZ3MuYXBwZW5kKCctLW5vLXJlY29yZC1yZXN1bHRzJykKKyAgICBpZiBub3QgJy0tY2hpbGQt
cHJvY2Vzc2VzJyBpbiBleHRyYV9hcmdzIGFuZCBub3QgJy0td29ya2VyLW1vZGVsJyBpbiBleHRy
YV9hcmdzOgorICAgICAgICBhcmdzLmV4dGVuZChbJy0td29ya2VyLW1vZGVsJywgJ2lubGluZSdd
KQorICAgIGFyZ3MuZXh0ZW5kKGV4dHJhX2FyZ3MpCisgICAgaWYgbm90IHRlc3RzX2luY2x1ZGVk
OgorICAgICAgICAjIFdlIHVzZSB0aGUgZ2xvYiB0byB0ZXN0IHRoYXQgZ2xvYmJpbmcgd29ya3Mu
CisgICAgICAgIGFyZ3MuZXh0ZW5kKFsncGFzc2VzJywKKyAgICAgICAgICAgICAgICAgICAgICdo
dHRwL3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICd3ZWJzb2NrZXQvdGVzdHMnLAorICAg
ICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkLyonXSkKKyAgICByZXR1cm4gcnVu
X3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdzKGFyZ3MpCisKKworZGVmIHBhc3NpbmdfcnVuKGV4dHJh
X2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgcmVjb3JkX3Jlc3VsdHM9RmFsc2UsCisgICAgICAg
ICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGZpbGVzeXN0ZW09Tm9uZSk6CisgICAgb3B0
aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKGV4dHJhX2FyZ3MsIHJlY29yZF9yZXN1bHRz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZCkK
KyAgICBpZiBub3QgcG9ydF9vYmo6CisgICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQocG9ydF9u
YW1lPW9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnM9b3B0aW9ucywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1c2VyPW1vY2t0b29sLk1vY2tVc2VyKCksIGZpbGVzeXN0ZW09ZmlsZXN5c3Rl
bSkKKyAgICByZXMgPSBydW5fd2Via2l0X3Rlc3RzLnJ1bihwb3J0X29iaiwgb3B0aW9ucywgcGFy
c2VkX2FyZ3MpCisgICAgcmV0dXJuIHJlcyA9PSAwCisKKworZGVmIGxvZ2dpbmdfcnVuKGV4dHJh
X2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgcmVjb3JkX3Jlc3VsdHM9RmFsc2UsIHRlc3RzX2lu
Y2x1ZGVkPUZhbHNlLCBmaWxlc3lzdGVtPU5vbmUpOgorICAgIG9wdGlvbnMsIHBhcnNlZF9hcmdz
ID0gcGFyc2VfYXJncyhleHRyYV9hcmdzPWV4dHJhX2FyZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY29yZF9yZXN1bHRzPXJlY29yZF9yZXN1bHRzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD10ZXN0c19pbmNs
dWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfbm90aGlu
Zz1GYWxzZSkKKyAgICB1c2VyID0gbW9ja3Rvb2wuTW9ja1VzZXIoKQorICAgIGlmIG5vdCBwb3J0
X29iajoKKyAgICAgICAgcG9ydF9vYmogPSBwb3J0LmdldChwb3J0X25hbWU9b3B0aW9ucy5wbGF0
Zm9ybSwgb3B0aW9ucz1vcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9
dXNlciwgZmlsZXN5c3RlbT1maWxlc3lzdGVtKQorCisgICAgcmVzLCBidWlsZGJvdF9vdXRwdXQs
IHJlZ3VsYXJfb3V0cHV0ID0gcnVuX2FuZF9jYXB0dXJlKHBvcnRfb2JqLCBvcHRpb25zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZWRfYXJncykKKyAgICByZXR1cm4gKHJlcywgYnVpbGRib3Rfb3V0cHV0LCByZWd1bGFyX291
dHB1dCwgdXNlcikKKworCitkZWYgcnVuX2FuZF9jYXB0dXJlKHBvcnRfb2JqLCBvcHRpb25zLCBw
YXJzZWRfYXJncyk6CisgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAg
IHRyeToKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICBidWlsZGJvdF9vdXRw
dXQgPSBhcnJheV9zdHJlYW0uQXJyYXlTdHJlYW0oKQorICAgICAgICByZWd1bGFyX291dHB1dCA9
IGFycmF5X3N0cmVhbS5BcnJheVN0cmVhbSgpCisgICAgICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVz
dHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRfYXJncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnVpbGRib3Rfb3V0cHV0PWJ1aWxkYm90X291dHB1dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhcl9vdXRwdXQ9cmVndWxhcl9vdXRw
dXQpCisgICAgZmluYWxseToKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQorICAgIHJldHVy
biAocmVzLCBidWlsZGJvdF9vdXRwdXQsIHJlZ3VsYXJfb3V0cHV0KQorCisKK2RlZiBnZXRfdGVz
dHNfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGZsYXR0ZW5fYmF0
Y2hlcz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW09Tm9uZSwgaW5jbHVkZV9y
ZWZlcmVuY2VfaHRtbD1GYWxzZSk6CisgICAgZXh0cmFfYXJncyA9IGV4dHJhX2FyZ3Mgb3IgW10K
KyAgICBpZiBub3QgdGVzdHNfaW5jbHVkZWQ6CisgICAgICAgICMgTm90IGluY2x1ZGluZyBodHRw
IHRlc3RzIHNpbmNlIHRoZXkgZ2V0IHJ1biBvdXQgb2Ygb3JkZXIgKHRoYXQKKyAgICAgICAgIyBi
ZWhhdmlvciBoYXMgaXRzIG93biB0ZXN0LCBzZWUgdGVzdF9nZXRfdGVzdF9maWxlX3F1ZXVlKQor
ICAgICAgICBleHRyYV9hcmdzID0gWydwYXNzZXMnLCAnZmFpbHVyZXMnXSArIGV4dHJhX2FyZ3MK
KyAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHBhcnNlX2FyZ3MoZXh0cmFfYXJncywgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSkKKworICAgIHVzZXIgPSBtb2NrdG9vbC5Nb2NrVXNlcigpCisKKyAgICB0
ZXN0X2JhdGNoZXMgPSBbXQorCisKKyAgICBjbGFzcyBSZWNvcmRpbmdUZXN0RHJpdmVyKFRlc3RE
cml2ZXIpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgd29ya2VyX251bWJlcik6
CisgICAgICAgICAgICBUZXN0RHJpdmVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1i
ZXIpCisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfYmF0Y2ggPSBOb25lCisKKyAgICAg
ICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgICAgICAjIFNvIHRoYXQgd2UgZG9uJ3QgY3JlYXRl
IGEgbmV3IGRyaXZlciBmb3IgZXZlcnkgdGVzdAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgICAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9i
YXRjaCA9IE5vbmUKKworICAgICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6Cisg
ICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Rlc3RfYmF0Y2ggaXMgTm9uZToKKyAgICAgICAg
ICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfYmF0Y2ggPSBbXQorICAgICAgICAgICAgICAgIHRl
c3RfYmF0Y2hlcy5hcHBlbmQoc2VsZi5fY3VycmVudF90ZXN0X2JhdGNoKQorICAgICAgICAgICAg
dGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQu
ZmlsZW5hbWUpCisgICAgICAgICAgICAjIEluIGNhc2Ugb2YgcmVmdGVzdCwgb25lIHRlc3QgY2Fs
bHMgdGhlIGRyaXZlcidzIHJ1bl90ZXN0KCkgdHdpY2UuCisgICAgICAgICAgICAjIFdlIHNob3Vs
ZCBub3QgYWRkIGEgcmVmZXJlbmNlIGh0bWwgdXNlZCBieSByZWZ0ZXN0cyB0byB0ZXN0cyB1bmxl
c3MgaW5jbHVkZV9yZWZlcmVuY2VfaHRtbCBwYXJhbWV0ZXIKKyAgICAgICAgICAgICMgaXMgZXhw
bGljaXRseSBnaXZlbi4KKyAgICAgICAgICAgIGlmIGluY2x1ZGVfcmVmZXJlbmNlX2h0bWwgb3Ig
bm90IGlzX3JlZmVyZW5jZV9odG1sX2ZpbGUodGVzdF9pbnB1dC5maWxlbmFtZSk6CisgICAgICAg
ICAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X2JhdGNoLmFwcGVuZCh0ZXN0X25hbWUpCisgICAg
ICAgICAgICByZXR1cm4gVGVzdERyaXZlci5ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KQorCisg
ICAgY2xhc3MgUmVjb3JkaW5nVGVzdFBvcnQoVGVzdFBvcnQpOgorICAgICAgICBkZWYgY3JlYXRl
X2RyaXZlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgICAgIHJldHVybiBSZWNvcmRp
bmdUZXN0RHJpdmVyKHNlbGYsIHdvcmtlcl9udW1iZXIpCisKKyAgICByZWNvcmRpbmdfcG9ydCA9
IFJlY29yZGluZ1Rlc3RQb3J0KG9wdGlvbnM9b3B0aW9ucywgdXNlcj11c2VyLCBmaWxlc3lzdGVt
PWZpbGVzeXN0ZW0pCisgICAgcnVuX2FuZF9jYXB0dXJlKHJlY29yZGluZ19wb3J0LCBvcHRpb25z
LCBwYXJzZWRfYXJncykKKworICAgIGlmIGZsYXR0ZW5fYmF0Y2hlczoKKyAgICAgICAgcmV0dXJu
IGxpc3QoaXRlcnRvb2xzLmNoYWluKCp0ZXN0X2JhdGNoZXMpKQorCisgICAgcmV0dXJuIHRlc3Rf
YmF0Y2hlcworCisKK2NsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYg
dGVzdF9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyhzZWxmKToKKyAgICAgICAgIyBUaGlzIGp1c3Qg
dGVzdHMgdGhhdCB3ZSByZWNvZ25pemUgdGhlIGNvbW1hbmQgbGluZSBhcmdzCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tYWNjZWxlcmF0ZWQtY29tcG9zaXRpbmcnXSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tbm8tYWNjZWxlcmF0ZWQt
Y29tcG9zaXRpbmcnXSkpCisKKyAgICBkZWYgdGVzdF9hY2NlbGVyYXRlZF8yZF9jYW52YXMoc2Vs
Zik6CisgICAgICAgICMgVGhpcyBqdXN0IHRlc3RzIHRoYXQgd2UgcmVjb2duaXplIHRoZSBjb21t
YW5kIGxpbmUgYXJncworICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLWFj
Y2VsZXJhdGVkLTJkLWNhbnZhcyddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Npbmdf
cnVuKFsnLS1uby1hY2NlbGVyYXRlZC0yZC1jYW52YXMnXSkpCisKKyAgICBkZWYgdGVzdF9iYXNp
YyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKCkpCisKKyAgICBk
ZWYgdGVzdF9iYXRjaF9zaXplKHNlbGYpOgorICAgICAgICBiYXRjaF90ZXN0c19ydW4gPSBnZXRf
dGVzdHNfcnVuKFsnLS1iYXRjaC1zaXplJywgJzInXSkKKyAgICAgICAgZm9yIGJhdGNoIGluIGJh
dGNoX3Rlc3RzX3J1bjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oYmF0Y2gpIDw9
IDIsICclcyBoYWQgdG9vIG1hbnkgdGVzdHMnICUgJywgJy5qb2luKGJhdGNoKSkKKworICAgIGRl
ZiB0ZXN0X2NoaWxkX3Byb2Nlc3NfMShzZWxmKToKKyAgICAgICAgXywgXywgcmVndWxhcl9vdXRw
dXQsIF8gPSBsb2dnaW5nX3J1bigKKyAgICAgICAgICAgICBbJy0tcHJpbnQnLCAnY29uZmlnJywg
Jy0td29ya2VyLW1vZGVsJywgJ3RocmVhZHMnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMSddKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KFsnUnVubmluZyAxICcgaW4gbGluZSBmb3IgbGlu
ZSBpbiByZWd1bGFyX291dHB1dC5nZXQoKV0pKQorCisgICAgZGVmIHRlc3RfY2hpbGRfcHJvY2Vz
c2VzXzIoc2VsZik6CisgICAgICAgIF8sIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0gbG9nZ2luZ19y
dW4oCisgICAgICAgICAgICAgWyctLXByaW50JywgJ2NvbmZpZycsICctLXdvcmtlci1tb2RlbCcs
ICd0aHJlYWRzJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzInXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKGFueShbJ1J1bm5pbmcgMiAnIGluIGxpbmUgZm9yIGxpbmUgaW4gcmVndWxhcl9vdXRw
dXQuZ2V0KCldKSkKKworICAgIGRlZiB0ZXN0X2NoaWxkX3Byb2Nlc3Nlc19taW4oc2VsZik6Cisg
ICAgICAgIF8sIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0gbG9nZ2luZ19ydW4oCisgICAgICAgICAg
ICAgWyctLXByaW50JywgJ2NvbmZpZycsICctLXdvcmtlci1tb2RlbCcsICd0aHJlYWRzJywgJy0t
Y2hpbGQtcHJvY2Vzc2VzJywgJzInLCAncGFzc2VzJ10sCisgICAgICAgICAgICAgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueShbJ1J1bm5pbmcgMSAnIGlu
IGxpbmUgZm9yIGxpbmUgaW4gcmVndWxhcl9vdXRwdXQuZ2V0KCldKSkKKworICAgIGRlZiB0ZXN0
X2RyeXJ1bihzZWxmKToKKyAgICAgICAgYmF0Y2hfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihb
Jy0tZHJ5LXJ1biddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhdGNoX3Rlc3RzX3J1biwg
W10pCisKKyAgICAgICAgYmF0Y2hfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy1uJ10pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF0Y2hfdGVzdHNfcnVuLCBbXSkKKworICAgIGRlZiB0
ZXN0X2V4Y2VwdGlvbl9yYWlzZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IsIGxvZ2dpbmdfcnVuLAorICAgICAgICAgICAgWydmYWlsdXJlcy9leHBlY3RlZC9l
eGNlcHRpb24uaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQorCisgICAgZGVmIHRlc3RfZnVs
bF9yZXN1bHRzX2h0bWwoc2VsZik6CisgICAgICAgICMgRklYTUU6IHZlcmlmeSBodG1sPworICAg
ICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLWZ1bGwtcmVzdWx0cy1o
dG1sJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAwKQorCisgICAgZGVmIHRlc3Rf
aGVscF9wcmludGluZyhzZWxmKToKKyAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dp
bmdfcnVuKFsnLS1oZWxwLXByaW50aW5nJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVz
LCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9odW5nX3RocmVhZChzZWxm
KToKKyAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1ydW4tc2lu
Z2x5JywgJy0tdGltZS1vdXQtbXM9NTAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL2hhbmcuaHRtbCddLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3V0
LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICBk
ZWYgdGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgICMgTm90ZSB0aGF0IHRo
aXMgYWxzbyB0ZXN0cyBydW5uaW5nIGEgdGVzdCBtYXJrZWQgYXMgU0tJUCBpZgorICAgICAgICAj
IHlvdSBzcGVjaWZ5IGl0IGV4cGxpY2l0bHkuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtl
eWJvYXJkSW50ZXJydXB0LCBsb2dnaW5nX3J1biwKKyAgICAgICAgICAgIFsnZmFpbHVyZXMvZXhw
ZWN0ZWQva2V5Ym9hcmQuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQorCisgICAgZGVmIHRl
c3Rfa2V5Ym9hcmRfaW50ZXJydXB0X2lubGluZV93b3JrZXJfbW9kZWwoc2VsZik6CisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBsb2dnaW5nX3J1biwKKyAgICAg
ICAgICAgIFsnZmFpbHVyZXMvZXhwZWN0ZWQva2V5Ym9hcmQuaHRtbCcsICctLXdvcmtlci1tb2Rl
bCcsICdpbmxpbmUnXSwKKyAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUpCisKKyAgICBk
ZWYgdGVzdF9sYXN0X3Jlc3VsdHMoc2VsZik6CisgICAgICAgIGZzID0gcG9ydC51bml0X3Rlc3Rf
ZmlsZXN5c3RlbSgpCisgICAgICAgICMgV2UgZG8gYSBsb2dnaW5nIHJ1biBoZXJlIGluc3RlYWQg
b2YgYSBwYXNzaW5nIHJ1biBpbiBvcmRlciB0bworICAgICAgICAjIHN1cHByZXNzIHRoZSBvdXRw
dXQgZnJvbSB0aGUganNvbiBnZW5lcmF0b3IuCisgICAgICAgIHJlcywgYnVpbGRib3Rfb3V0cHV0
LCByZWd1bGFyX291dHB1dCwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1jbG9iYmVyLW9sZC1yZXN1
bHRzJ10sIHJlY29yZF9yZXN1bHRzPVRydWUsIGZpbGVzeXN0ZW09ZnMpCisgICAgICAgIHJlcywg
YnVpbGRib3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCwgdXNlciA9IGxvZ2dpbmdfcnVuKAorICAg
ICAgICAgICAgWyctLXByaW50LWxhc3QtZmFpbHVyZXMnXSwgZmlsZXN5c3RlbT1mcykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChyZWd1bGFyX291dHB1dC5nZXQoKSwgWydcblxuJ10pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGRib3Rfb3V0cHV0LmdldCgpLCBbXSkKKworICAgIGRl
ZiB0ZXN0X2xpbnRfdGVzdF9maWxlcyhzZWxmKToKKyAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNl
ciA9IGxvZ2dpbmdfcnVuKFsnLS1saW50LXRlc3QtZmlsZXMnXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChyZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueShbJ0xpbnQgc3VjY2VlZGVkJyBpbiBtc2cgZm9yIG1z
ZyBpbiBlcnIuZ2V0KCldKSkKKworICAgIGRlZiB0ZXN0X2xpbnRfdGVzdF9maWxlc19fZXJyb3Jz
KHNlbGYpOgorICAgICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHBhcnNlX2FyZ3MoWyctLWxp
bnQtdGVzdC1maWxlcyddKQorICAgICAgICB1c2VyID0gbW9ja3Rvb2wuTW9ja1VzZXIoKQorICAg
ICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnM9b3B0aW9u
cywgdXNlcj11c2VyKQorICAgICAgICBwb3J0X29iai50ZXN0X2V4cGVjdGF0aW9ucyA9IGxhbWJk
YTogIiMgc3ludGF4IGVycm9yIgorICAgICAgICByZXMsIG91dCwgZXJyID0gcnVuX2FuZF9jYXB0
dXJlKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRfYXJncykKKworICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHJlcywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueShbJ0xpbnQgZmFpbGVkJyBpbiBtc2cgZm9yIG1zZyBp
biBlcnIuZ2V0KCldKSkKKworICAgIGRlZiB0ZXN0X25vX3Rlc3RzX2ZvdW5kKHNlbGYpOgorICAg
ICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWydyZXNvdXJjZXMnXSwgdGVz
dHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIC0xKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZSgnTm8gdGVzdHMgdG8gcnVuLlxuJyBpbiBlcnIuZ2V0KCkpCisKKyAgICBkZWYgdGVzdF9ub190
ZXN0c19mb3VuZF8yKHNlbGYpOgorICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2lu
Z19ydW4oWydmb28nXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChyZXMsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnTm8gdGVzdHMgdG8gcnVuLlxuJyBpbiBlcnIuZ2V0KCkpCisK
KyAgICBkZWYgdGVzdF9yYW5kb21pemVfb3JkZXIoc2VsZik6CisgICAgICAgICMgRklYTUU6IHZl
cmlmeSBvcmRlciB3YXMgc2h1ZmZsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Npbmdf
cnVuKFsnLS1yYW5kb21pemUtb3JkZXInXSkpCisKKyAgICBkZWYgdGVzdF9nY19iZXR3ZWVuX3Rl
c3RzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLWdjLWJl
dHdlZW4tdGVzdHMnXSkpCisKKyAgICBkZWYgdGVzdF9jb21wbGV4X3RleHQoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tY29tcGxleC10ZXh0J10pKQorCisg
ICAgZGVmIHRlc3RfdGhyZWFkZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNz
aW5nX3J1bihbJy0tdGhyZWFkZWQnXSkpCisKKyAgICBkZWYgdGVzdF9ydW5fY2h1bmsoc2VsZik6
CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGFjdHVhbGx5IHNlbGVjdCB0aGUgcmlnaHQgY2h1bmsK
KyAgICAgICAgYWxsX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oZmxhdHRlbl9iYXRjaGVzPVRy
dWUpCisgICAgICAgIGNodW5rX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXJ1bi1jaHVu
aycsICcxOjQnXSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKGFsbF90ZXN0c19ydW5bNDo4XSwgY2h1bmtfdGVzdHNfcnVuKQorCisgICAgICAgICMgVGVz
dCB0aGF0IHdlIHdyYXAgYXJvdW5kIGlmIHRoZSBudW1iZXIgb2YgdGVzdHMgaXMgbm90IGV2ZW5s
eSBkaXZpc2libGUgYnkgdGhlIGNodW5rIHNpemUKKyAgICAgICAgdGVzdHNfdG9fcnVuID0gWydw
YXNzZXMvZXJyb3IuaHRtbCcsICdwYXNzZXMvaW1hZ2UuaHRtbCcsICdwYXNzZXMvcGxhdGZvcm1f
aW1hZ2UuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJ10KKyAgICAgICAgY2h1bmtfdGVzdHNfcnVu
ID0gZ2V0X3Rlc3RzX3J1bihbJy0tcnVuLWNodW5rJywgJzE6MyddICsgdGVzdHNfdG9fcnVuLCB0
ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoWydwYXNzZXMvdGV4dC5odG1sJywgJ3Bhc3Nlcy9lcnJvci5odG1sJywgJ3Bh
c3Nlcy9pbWFnZS5odG1sJ10sIGNodW5rX3Rlc3RzX3J1bikKKworICAgIGRlZiB0ZXN0X3J1bl9m
b3JjZShzZWxmKToKKyAgICAgICAgIyBUaGlzIHJhaXNlcyBhbiBleGNlcHRpb24gYmVjYXVzZSB3
ZSBydW4KKyAgICAgICAgIyBmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCwgd2hpY2gg
aXMgbm9ybWFsbHkgU0tJUHBlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
ciwgbG9nZ2luZ19ydW4sIFsnLS1mb3JjZSddKQorCisgICAgZGVmIHRlc3RfcnVuX3BhcnQoc2Vs
Zik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGFjdHVhbGx5IHNlbGVjdCB0aGUgcmlnaHQgcGFy
dAorICAgICAgICB0ZXN0c190b19ydW4gPSBbJ3Bhc3Nlcy9lcnJvci5odG1sJywgJ3Bhc3Nlcy9p
bWFnZS5odG1sJywgJ3Bhc3Nlcy9wbGF0Zm9ybV9pbWFnZS5odG1sJywgJ3Bhc3Nlcy90ZXh0Lmh0
bWwnXQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1ydW4tcGFydCcsICcx
OjInXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVz
PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL2Vycm9yLmh0bWwnLCAn
cGFzc2VzL2ltYWdlLmh0bWwnXSwgdGVzdHNfcnVuKQorCisgICAgICAgICMgVGVzdCB0aGF0IHdl
IHdyYXAgYXJvdW5kIGlmIHRoZSBudW1iZXIgb2YgdGVzdHMgaXMgbm90IGV2ZW5seSBkaXZpc2li
bGUgYnkgdGhlIGNodW5rIHNpemUKKyAgICAgICAgIyAoaGVyZSB3ZSBlbmQgdXAgd2l0aCAzIHBh
cnRzLCBlYWNoIHdpdGggMiB0ZXN0cywgYW5kIHdlIG9ubHkgaGF2ZSA0IHRlc3RzIHRvdGFsLCBz
byB0aGUKKyAgICAgICAgIyBsYXN0IHBhcnQgcmVwZWF0cyB0aGUgZmlyc3QgdHdvIHRlc3RzKS4K
KyAgICAgICAgY2h1bmtfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tcnVuLXBhcnQnLCAn
MzozJ10gKyB0ZXN0c190b19ydW4sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hl
cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy9lcnJvci5odG1sJywg
J3Bhc3Nlcy9pbWFnZS5odG1sJ10sIGNodW5rX3Rlc3RzX3J1bikKKworICAgIGRlZiB0ZXN0X3J1
bl9zaW5nbHkoc2VsZik6CisgICAgICAgIGJhdGNoX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4o
WyctLXJ1bi1zaW5nbHknXSkKKyAgICAgICAgZm9yIGJhdGNoIGluIGJhdGNoX3Rlc3RzX3J1bjoK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihiYXRjaCksIDEsICclcyBoYWQgdG9v
IG1hbnkgdGVzdHMnICUgJywgJy5qb2luKGJhdGNoKSkKKworICAgIGRlZiB0ZXN0X3NraXBfZmFp
bGluZ190ZXN0cyhzZWxmKToKKyAgICAgICAgYmF0Y2hlcyA9IGdldF90ZXN0c19ydW4oWyctLXNr
aXAtZmFpbGluZy10ZXN0cyddKQorICAgICAgICBoYXNfcGFzc2VzX3RleHQgPSBGYWxzZQorICAg
ICAgICBmb3IgYmF0Y2ggaW4gYmF0Y2hlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
J2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCcgaW4gYmF0Y2gpCisgICAgICAgICAgICBoYXNf
cGFzc2VzX3RleHQgPSBoYXNfcGFzc2VzX3RleHQgb3IgKCdwYXNzZXMvdGV4dC5odG1sJyBpbiBi
YXRjaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc19wYXNzZXNfdGV4dCkKKworICAgIGRl
ZiB0ZXN0X3J1bl9zaW5nbHlfYWN0dWFsbHlfcnVuc190ZXN0cyhzZWxmKToKKyAgICAgICAgcmVz
LCBfLCBfLCBfID0gbG9nZ2luZ19ydW4oWyctLXJ1bi1zaW5nbHknLCAnZmFpbHVyZXMvdW5leHBl
Y3RlZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMsIDUpCisKKyAgICBkZWYgdGVz
dF9zaW5nbGVfZmlsZShzZWxmKToKKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihb
J3Bhc3Nlcy90ZXh0Lmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVz
PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL3RleHQuaHRtbCddLCB0
ZXN0c19ydW4pCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfZmlsZV93aXRoX3ByZWZpeChzZWxmKToK
KyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ0xheW91dFRlc3RzL3Bhc3Nlcy90
ZXh0Lmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL3RleHQuaHRtbCddLCB0ZXN0c19ydW4p
CisKKyAgICBkZWYgdGVzdF9zaW5nbGVfc2tpcHBlZF9maWxlKHNlbGYpOgorICAgICAgICB0ZXN0
c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnZmFpbHVyZXMvZXhwZWN0ZWQva2V5YmFvcmQuaHRtbCdd
LCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoW10sIHRlc3RzX3J1bikKKworICAgIGRlZiB0ZXN0X3N0ZGVycl9pc19z
YXZlZChzZWxmKToKKyAgICAgICAgZnMgPSBwb3J0LnVuaXRfdGVzdF9maWxlc3lzdGVtKCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKGZpbGVzeXN0ZW09ZnMpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhmcy5yZWFkX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQtdGVzdC1y
ZXN1bHRzL3Bhc3Nlcy9lcnJvci1zdGRlcnIudHh0JyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICdzdHVmZiBnb2luZyB0byBzdGRlcnInKQorCisgICAgZGVmIHRlc3RfdGVzdF9saXN0KHNl
bGYpOgorICAgICAgICBmcyA9IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQorICAgICAgICBm
aWxlbmFtZSA9ICcvdG1wL2Zvby50eHQnCisgICAgICAgIGZzLndyaXRlX3RleHRfZmlsZShmaWxl
bmFtZSwgJ3Bhc3Nlcy90ZXh0Lmh0bWwnKQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNf
cnVuKFsnLS10ZXN0LWxpc3Q9JXMnICUgZmlsZW5hbWVdLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBm
bGF0dGVuX2JhdGNoZXM9VHJ1ZSwgZmlsZXN5c3RlbT1mcykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoWydwYXNzZXMvdGV4dC5odG1sJ10sIHRlc3RzX3J1bikKKyAgICAgICAgZnMucmVtb3Zl
KGZpbGVuYW1lKQorICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWyct
LXRlc3QtbGlzdD0lcycgJSBmaWxlbmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmaWxlc3lzdGVtPWZzKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHJlcywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJy
LmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF90ZXN0X2xpc3Rfd2l0aF9wcmVmaXgoc2VsZik6Cisg
ICAgICAgIGZzID0gcG9ydC51bml0X3Rlc3RfZmlsZXN5c3RlbSgpCisgICAgICAgIGZpbGVuYW1l
ID0gJy90bXAvZm9vLnR4dCcKKyAgICAgICAgZnMud3JpdGVfdGV4dF9maWxlKGZpbGVuYW1lLCAn
TGF5b3V0VGVzdHMvcGFzc2VzL3RleHQuaHRtbCcpCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90
ZXN0c19ydW4oWyctLXRlc3QtbGlzdD0lcycgJSBmaWxlbmFtZV0sIHRlc3RzX2luY2x1ZGVkPVRy
dWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlLCBmaWxlc3lzdGVtPWZzKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhbJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSwgdGVzdHNfcnVuKQorCisgICAgZGVmIHRl
c3RfdW5leHBlY3RlZF9mYWlsdXJlcyhzZWxmKToKKyAgICAgICAgIyBSdW4gdGVzdHMgaW5jbHVk
aW5nIHRoZSB1bmV4cGVjdGVkIGZhaWx1cmVzLgorICAgICAgICBzZWxmLl91cmxfb3BlbmVkID0g
Tm9uZQorICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4odGVzdHNfaW5j
bHVkZWQ9VHJ1ZSkKKworICAgICAgICAjIFVwZGF0ZSB0aGlzIG1hZ2ljIG51bWJlciBpZiB5b3Ug
YWRkIGFuIHVuZXhwZWN0ZWQgdGVzdCB0byB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC50ZXN0
CisgICAgICAgICMgRklYTUU6IEl0J3MgbmljZSB0byBoYXZlIGEgcm91dGluZSBpbiBwb3J0L3Rl
c3QucHkgdGhhdCByZXR1cm5zIHRoaXMgbnVtYmVyLgorICAgICAgICB1bmV4cGVjdGVkX3Rlc3Rz
X2NvdW50ID0gNQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCB1bmV4cGVjdGVkX3Rl
c3RzX2NvdW50KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHVzZXIub3BlbmVkX3VybHMsIFsnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Jlc3VsdHMuaHRt
bCddKQorCisgICAgZGVmIHRlc3RfZXhpdF9hZnRlcl9uX2ZhaWx1cmVzX3VwbG9hZChzZWxmKToK
KyAgICAgICAgZnMgPSBwb3J0LnVuaXRfdGVzdF9maWxlc3lzdGVtKCkKKyAgICAgICAgcmVzLCBi
dWlsZGJvdF9vdXRwdXQsIHJlZ3VsYXJfb3V0cHV0LCB1c2VyID0gbG9nZ2luZ19ydW4oWworICAg
ICAgICAgICAgICAgICdmYWlsdXJlcy91bmV4cGVjdGVkL3RleHQtaW1hZ2UtY2hlY2tzdW0uaHRt
bCcsCisgICAgICAgICAgICAgICAgJ3Bhc3Nlcy90ZXh0Lmh0bWwnLAorICAgICAgICAgICAgICAg
ICctLWV4aXQtYWZ0ZXItbi1mYWlsdXJlcycsICcxJywKKyAgICAgICAgICAgIF0sCisgICAgICAg
ICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLAorICAgICAgICAgICAgcmVjb3JkX3Jlc3VsdHM9VHJ1
ZSwKKyAgICAgICAgICAgIGZpbGVzeXN0ZW09ZnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgn
L3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2luY3JlbWVudGFsX3Jlc3VsdHMuanNvbicgaW4gZnMu
ZmlsZXMpCisKKyAgICBkZWYgdGVzdF9leGl0X2FmdGVyX25fZmFpbHVyZXMoc2VsZik6CisgICAg
ICAgICMgVW5leHBlY3RlZCBmYWlsdXJlcyBzaG91bGQgcmVzdWx0IGluIHRlc3RzIHN0b3BwaW5n
LgorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsKKyAgICAgICAgICAgICAgICAn
ZmFpbHVyZXMvdW5leHBlY3RlZC90ZXh0LWltYWdlLWNoZWNrc3VtLmh0bWwnLAorICAgICAgICAg
ICAgICAgICdwYXNzZXMvdGV4dC5odG1sJywKKyAgICAgICAgICAgICAgICAnLS1leGl0LWFmdGVy
LW4tZmFpbHVyZXMnLCAnMScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwKKyAgICAgICAgICAgIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhbJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvdGV4dC1pbWFnZS1jaGVja3N1
bS5odG1sJ10sIHRlc3RzX3J1bikKKworICAgICAgICAjIEJ1dCB3ZSdsbCBrZWVwIGdvaW5nIGZv
ciBleHBlY3RlZCBvbmVzLgorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsKKyAg
ICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5odG1sJywKKyAgICAgICAgICAg
ICAgICAncGFzc2VzL3RleHQuaHRtbCcsCisgICAgICAgICAgICAgICAgJy0tZXhpdC1hZnRlci1u
LWZhaWx1cmVzJywgJzEnLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHRlc3RzX2luY2x1
ZGVkPVRydWUsCisgICAgICAgICAgICBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoWydmYWlsdXJlcy9leHBlY3RlZC90ZXh0Lmh0bWwnLCAncGFzc2VzL3Rl
eHQuaHRtbCddLCB0ZXN0c19ydW4pCisKKyAgICBkZWYgdGVzdF9leGl0X2FmdGVyX25fY3Jhc2hl
cyhzZWxmKToKKyAgICAgICAgIyBVbmV4cGVjdGVkIGNyYXNoZXMgc2hvdWxkIHJlc3VsdCBpbiB0
ZXN0cyBzdG9wcGluZy4KKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCisgICAg
ICAgICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvY3Jhc2guaHRtbCcsCisgICAgICAgICAg
ICAgICAgJ3Bhc3Nlcy90ZXh0Lmh0bWwnLAorICAgICAgICAgICAgICAgICctLWV4aXQtYWZ0ZXIt
bi1jcmFzaGVzLW9yLXRpbWVvdXRzJywgJzEnLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
IHRlc3RzX2luY2x1ZGVkPVRydWUsCisgICAgICAgICAgICBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydmYWlsdXJlcy91bmV4cGVjdGVkL2NyYXNoLmh0
bWwnXSwgdGVzdHNfcnVuKQorCisgICAgICAgICMgU2FtZSB3aXRoIHRpbWVvdXRzLgorICAgICAg
ICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsKKyAgICAgICAgICAgICAgICAnZmFpbHVyZXMv
dW5leHBlY3RlZC90aW1lb3V0Lmh0bWwnLAorICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC5o
dG1sJywKKyAgICAgICAgICAgICAgICAnLS1leGl0LWFmdGVyLW4tY3Jhc2hlcy1vci10aW1lb3V0
cycsICcxJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVl
LAorICAgICAgICAgICAgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKFsnZmFpbHVyZXMvdW5leHBlY3RlZC90aW1lb3V0Lmh0bWwnXSwgdGVzdHNfcnVuKQor
CisgICAgICAgICMgQnV0IHdlJ2xsIGtlZXAgZ29pbmcgZm9yIGV4cGVjdGVkIG9uZXMuCisgICAg
ICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWworICAgICAgICAgICAgICAgICdmYWlsdXJl
cy9leHBlY3RlZC9jcmFzaC5odG1sJywKKyAgICAgICAgICAgICAgICAncGFzc2VzL3RleHQuaHRt
bCcsCisgICAgICAgICAgICAgICAgJy0tZXhpdC1hZnRlci1uLWNyYXNoZXMtb3ItdGltZW91dHMn
LCAnMScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwK
KyAgICAgICAgICAgIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhbJ2ZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCdd
LCB0ZXN0c19ydW4pCisKKyAgICBkZWYgdGVzdF9leGl0X2FmdGVyX25fY3Jhc2hlc19pbmxpbmVf
d29ya2VyX21vZGVsKHNlbGYpOgorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsK
KyAgICAgICAgICAgICAgICAnZmFpbHVyZXMvdW5leHBlY3RlZC90aW1lb3V0Lmh0bWwnLAorICAg
ICAgICAgICAgICAgICdwYXNzZXMvdGV4dC5odG1sJywKKyAgICAgICAgICAgICAgICAnLS1leGl0
LWFmdGVyLW4tY3Jhc2hlcy1vci10aW1lb3V0cycsICcxJywKKyAgICAgICAgICAgICAgICAnLS13
b3JrZXItbW9kZWwnLCAnaW5saW5lJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB0ZXN0
c19pbmNsdWRlZD1UcnVlLAorICAgICAgICAgICAgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnZmFpbHVyZXMvdW5leHBlY3RlZC90aW1lb3V0Lmh0bWwn
XSwgdGVzdHNfcnVuKQorCisgICAgZGVmIHRlc3RfcmVzdWx0c19kaXJlY3RvcnlfYWJzb2x1dGUo
c2VsZik6CisgICAgICAgICMgV2UgcnVuIGEgY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBmYWls
LCB0byBnZW5lcmF0ZSBvdXRwdXQsIHRoZW4KKyAgICAgICAgIyBsb29rIGZvciB3aGF0IHRoZSBv
dXRwdXQgcmVzdWx0cyB1cmwgd2FzLgorCisgICAgICAgIGZzID0gcG9ydC51bml0X3Rlc3RfZmls
ZXN5c3RlbSgpCisgICAgICAgIHdpdGggZnMubWtkdGVtcCgpIGFzIHRtcGRpcjoKKyAgICAgICAg
ICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1bihbJy0tcmVzdWx0cy1kaXJlY3Rv
cnk9JyArIHN0cih0bXBkaXIpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmaWxlc3lzdGVtPWZzKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCh1c2VyLm9wZW5lZF91cmxzLCBbZnMuam9pbih0bXBkaXIsICdy
ZXN1bHRzLmh0bWwnKV0pCisKKyAgICBkZWYgdGVzdF9yZXN1bHRzX2RpcmVjdG9yeV9kZWZhdWx0
KHNlbGYpOgorICAgICAgICAjIFdlIHJ1biBhIGNvbmZpZ3VyYXRpb24gdGhhdCBzaG91bGQgZmFp
bCwgdG8gZ2VuZXJhdGUgb3V0cHV0LCB0aGVuCisgICAgICAgICMgbG9vayBmb3Igd2hhdCB0aGUg
b3V0cHV0IHJlc3VsdHMgdXJsIHdhcy4KKworICAgICAgICAjIFRoaXMgaXMgdGhlIGRlZmF1bHQg
bG9jYXRpb24uCisgICAgICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1bih0ZXN0
c19pbmNsdWRlZD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVzZXIub3BlbmVkX3Vy
bHMsIFsnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Jlc3VsdHMuaHRtbCddKQorCisgICAgZGVm
IHRlc3RfcmVzdWx0c19kaXJlY3RvcnlfcmVsYXRpdmUoc2VsZik6CisgICAgICAgICMgV2UgcnVu
IGEgY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBmYWlsLCB0byBnZW5lcmF0ZSBvdXRwdXQsIHRo
ZW4KKyAgICAgICAgIyBsb29rIGZvciB3aGF0IHRoZSBvdXRwdXQgcmVzdWx0cyB1cmwgd2FzLgor
ICAgICAgICBmcyA9IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQorICAgICAgICBmcy5tYXli
ZV9tYWtlX2RpcmVjdG9yeSgnL3RtcC9jd2QnKQorICAgICAgICBmcy5jaGRpcignL3RtcC9jd2Qn
KQorICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLXJlc3VsdHMt
ZGlyZWN0b3J5PWZvbyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmlsZXN5c3RlbT1mcykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCh1c2VyLm9wZW5lZF91cmxzLCBbJy90bXAvY3dkL2Zvby9yZXN1bHRzLmh0bWwnXSkK
KworICAgICMgVGhlc2UgbmV4dCB0ZXN0cyB0ZXN0IHRoYXQgd2UgcnVuIHRoZSB0ZXN0cyBpbiBh
c2NlbmRpbmcgYWxwaGFiZXRpY2FsCisgICAgIyBvcmRlciBwZXIgZGlyZWN0b3J5LiBIVFRQIHRl
c3RzIGFyZSBzaGFyZGVkIHNlcGFyYXRlbHkgZnJvbSBvdGhlciB0ZXN0cywKKyAgICAjIHNvIHdl
IGhhdmUgdG8gdGVzdCBib3RoLgorICAgIGRlZiBhc3NlcnRfcnVuX29yZGVyKHNlbGYsIHdvcmtl
cl9tb2RlbCwgY2hpbGRfcHJvY2Vzc2VzPScxJyk6CisgICAgICAgIHRlc3RzX3J1biA9IGdldF90
ZXN0c19ydW4oWyctLXdvcmtlci1tb2RlbCcsIHdvcmtlcl9tb2RlbCwKKyAgICAgICAgICAgICct
LWNoaWxkLXByb2Nlc3NlcycsIGNoaWxkX3Byb2Nlc3NlcywgJ3Bhc3NlcyddLAorICAgICAgICAg
ICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHRlc3RzX3J1biwgc29ydGVkKHRlc3RzX3J1bikpCisKKyAgICAgICAg
dGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0td29ya2VyLW1vZGVsJywgd29ya2VyX21vZGVs
LAorICAgICAgICAgICAgJy0tY2hpbGQtcHJvY2Vzc2VzJywgY2hpbGRfcHJvY2Vzc2VzLCAnaHR0
cC90ZXN0cy9wYXNzZXMnXSwKKyAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0
ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0ZXN0c19ydW4sIHNv
cnRlZCh0ZXN0c19ydW4pKQorCisgICAgZGVmIHRlc3RfcnVuX29yZGVyX19pbmxpbmUoc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0X3J1bl9vcmRlcignaW5saW5lJykKKworICAgIGRlZiB0ZXN0
X3RvbGVyYW5jZShzZWxmKToKKyAgICAgICAgY2xhc3MgSW1hZ2VEaWZmVGVzdFBvcnQoVGVzdFBv
cnQpOgorICAgICAgICAgICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfY29udGVudHMs
IGFjdHVhbF9jb250ZW50cywKKyAgICAgICAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lPU5vbmUp
OgorICAgICAgICAgICAgICAgIHNlbGYudG9sZXJhbmNlX3VzZWRfZm9yX2RpZmZfaW1hZ2UgPSBz
ZWxmLl9vcHRpb25zLnRvbGVyYW5jZQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICAgICAgZGVmIGdldF9wb3J0X2Zvcl9ydW4oYXJncyk6CisgICAgICAgICAgICBvcHRpb25zLCBw
YXJzZWRfYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhhcmdzKQorICAgICAgICAg
ICAgdGVzdF9wb3J0ID0gSW1hZ2VEaWZmVGVzdFBvcnQob3B0aW9ucz1vcHRpb25zLCB1c2VyPW1v
Y2t0b29sLk1vY2tVc2VyKCkpCisgICAgICAgICAgICBwYXNzaW5nX3J1bihhcmdzLCBwb3J0X29i
aj10ZXN0X3BvcnQsIHRlc3RzX2luY2x1ZGVkPVRydWUpCisgICAgICAgICAgICByZXR1cm4gdGVz
dF9wb3J0CisKKyAgICAgICAgYmFzZV9hcmdzID0gWyctLXBpeGVsLXRlc3RzJywgJ2ZhaWx1cmVz
L2V4cGVjdGVkLyonXQorCisgICAgICAgICMgSWYgd2UgcGFzcyBpbiBhbiBleHBsaWNpdCB0b2xl
cmFuY2UgYXJndW1lbnQsIHRoZW4gdGhhdCB3aWxsIGJlIHVzZWQuCisgICAgICAgIHRlc3RfcG9y
dCA9IGdldF9wb3J0X2Zvcl9ydW4oYmFzZV9hcmdzICsgWyctLXRvbGVyYW5jZScsICcuMSddKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuMSwgdGVzdF9wb3J0LnRvbGVyYW5jZV91c2VkX2Zv
cl9kaWZmX2ltYWdlKQorICAgICAgICB0ZXN0X3BvcnQgPSBnZXRfcG9ydF9mb3JfcnVuKGJhc2Vf
YXJncyArIFsnLS10b2xlcmFuY2UnLCAnMCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAs
IHRlc3RfcG9ydC50b2xlcmFuY2VfdXNlZF9mb3JfZGlmZl9pbWFnZSkKKworICAgICAgICAjIE90
aGVyd2lzZSB0aGUgcG9ydCdzIGRlZmF1bHQgdG9sZXJhbmNlIGJlaGF2aW9yIChpbmNsdWRpbmcg
aWdub3JpbmcgaXQpCisgICAgICAgICMgc2hvdWxkIGJlIHVzZWQuCisgICAgICAgIHRlc3RfcG9y
dCA9IGdldF9wb3J0X2Zvcl9ydW4oYmFzZV9hcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KE5vbmUsIHRlc3RfcG9ydC50b2xlcmFuY2VfdXNlZF9mb3JfZGlmZl9pbWFnZSkKKworICAgIGRl
ZiB0ZXN0X3dvcmtlcl9tb2RlbF9faW5saW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRy
dWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICdpbmxpbmUnXSkpCisKKyAgICBkZWYg
dGVzdF93b3JrZXJfbW9kZWxfX2lubGluZV93aXRoX2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKKyAg
ICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwn
LCAnaW5saW5lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
LS1jaGlsZC1wcm9jZXNzZXMnLCAnMiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywg
MCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCctLXdvcmtlci1tb2RlbD1pbmxpbmUgb3ZlcnJp
ZGVzIC0tY2hpbGQtcHJvY2Vzc2VzXG4nIGluIGVyci5nZXQoKSkKKworICAgIGRlZiB0ZXN0X3dv
cmtlcl9tb2RlbF9fcHJvY2Vzc2VzKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiByZW1vdmUgdGhp
cyB3aGVuIHdlIGZpeCB0ZXN0LXdlYmtpdHB5IHRvIHdvcmsgcHJvcGVybHkKKyAgICAgICAgIyB3
aXRoIHRoZSBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlIChidWcgNTQ1MjApLgorICAgICAgICBpZiBt
dWx0aXByb2Nlc3NpbmcgYW5kIHN5cy5wbGF0Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAnd2luMzIn
KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1v
ZGVsJywgJ3Byb2Nlc3NlcyddKSkKKworICAgIGRlZiB0ZXN0X3dvcmtlcl9tb2RlbF9fcHJvY2Vz
c2VzX2FuZF9kcnlfcnVuKHNlbGYpOgorICAgICAgICBpZiBtdWx0aXByb2Nlc3NpbmcgYW5kIHN5
cy5wbGF0Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAnd2luMzInKToKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywgJ3Byb2Nlc3NlcycsICct
LWRyeS1ydW4nXSkpCisKKyAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3RocmVhZHMoc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywg
J3RocmVhZHMnXSkpCisKKyAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3Vua25vd24oc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBbJy0td29ya2VyLW1vZGVsJywgJ3Vua25vd24nXSkKKwor
ICAgIGRlZiB0ZXN0X3JlZnRlc3RfcnVuKHNlbGYpOgorICAgICAgICB0ZXN0c19ydW4gPSBnZXRf
dGVzdHNfcnVuKFsncGFzc2VzL3JlZnRlc3QuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBm
bGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNzZXMv
cmVmdGVzdC5odG1sJ10sIHRlc3RzX3J1bikKKworICAgIGRlZiB0ZXN0X3JlZnRlc3RfZXhwZWN0
ZWRfaHRtbF9zaG91bGRfYmVfaWdub3JlZChzZWxmKToKKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0
X3Rlc3RzX3J1bihbJ3Bhc3Nlcy9yZWZ0ZXN0LWV4cGVjdGVkLmh0bWwnXSwgdGVzdHNfaW5jbHVk
ZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KFtdLCB0ZXN0c19ydW4pCisKKyAgICBkZWYgdGVzdF9yZWZ0ZXN0X2RyaXZlcl9zaG91bGRfcnVu
X2V4cGVjdGVkX2h0bWwoc2VsZik6CisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4o
WydwYXNzZXMvcmVmdGVzdC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0
Y2hlcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfcmVm
ZXJlbmNlX2h0bWw9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNzZXMvcmVm
dGVzdC5odG1sJywgJ3Bhc3Nlcy9yZWZ0ZXN0LWV4cGVjdGVkLmh0bWwnXSwgdGVzdHNfcnVuKQor
CisgICAgZGVmIHRlc3RfcmVmdGVzdF9kcml2ZXJfc2hvdWxkX3J1bl9leHBlY3RlZF9taXNtYXRj
aF9odG1sKHNlbGYpOgorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsncGFzc2Vz
L21pc21hdGNoLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRy
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9yZWZlcmVuY2Vf
aHRtbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy9taXNtYXRjaC5o
dG1sJywgJ3Bhc3Nlcy9taXNtYXRjaC1leHBlY3RlZC1taXNtYXRjaC5odG1sJ10sIHRlc3RzX3J1
bikKKworICAgIGRlZiB0ZXN0X2FkZGl0aW9uYWxfcGxhdGZvcm1fZGlyZWN0b3J5KHNlbGYpOgor
ICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLWFkZGl0aW9uYWwtcGxhdGZv
cm0tZGlyZWN0b3J5JywgJy90bXAvZm9vJ10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFz
c2luZ19ydW4oWyctLWFkZGl0aW9uYWwtcGxhdGZvcm0tZGlyZWN0b3J5JywgJy90bXAvLi4vZm9v
J10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLWFkZGl0aW9uYWwt
cGxhdGZvcm0tZGlyZWN0b3J5JywgJy90bXAvZm9vJywKKyAgICAgICAgICAgICctLWFkZGl0aW9u
YWwtcGxhdGZvcm0tZGlyZWN0b3J5JywgJy90bXAvYmFyJ10pKQorCisgICAgICAgIHJlcywgYnVp
bGRib3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCwgdXNlciA9IGxvZ2dpbmdfcnVuKAorICAgICAg
ICAgICAgIFsnLS1hZGRpdGlvbmFsLXBsYXRmb3JtLWRpcmVjdG9yeScsICdmb28nXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKCctLWFkZGl0aW9uYWwtcGxhdGZvcm0tZGlyZWN0b3J5PWZvbyBp
cyBpZ25vcmVkIHNpbmNlIGl0IGlzIG5vdCBhYnNvbHV0ZVxuJworICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gcmVndWxhcl9vdXRwdXQuZ2V0KCkpCisKKworTWFpblRlc3QgPSBza2lwX2lmKE1h
aW5UZXN0LCBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbicgYW5kIGNvbXBhcmVfdmVyc2lvbihzeXMs
ICcyLjYnKVswXSA8IDAsICduZXctcnVuLXdlYmtpdC10ZXN0cyB0ZXN0cyBoYW5nIG9uIEN5Z3dp
biBQeXRob24gMi41LjInKQorCisKK2NsYXNzIFJlYmFzZWxpbmVUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKKyAgICBkZWYgYXNzZXJ0QmFzZWxpbmVzKHNlbGYsIGZpbGVfbGlzdCwgZmlsZSk6Cisg
ICAgICAgICJhc3NlcnQgdGhhdCB0aGUgZmlsZV9saXN0IGNvbnRhaW5zIHRoZSBiYXNlbGluZXMu
IiIiCisgICAgICAgIGZvciBleHQgaW4gKCIudHh0IiwgIi5wbmciKToKKyAgICAgICAgICAgIGJh
c2VsaW5lID0gZmlsZSArICItZXhwZWN0ZWQiICsgZXh0CisgICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoYW55KGYuZmluZChiYXNlbGluZSkgIT0gLTEgZm9yIGYgaW4gZmlsZV9saXN0KSkKKwor
ICAgICMgRklYTUU6IEFkZCB0ZXN0cyB0byBlbnN1cmUgdGhhdCB3ZSdyZSAqbm90KiB3cml0aW5n
IGJhc2VsaW5lcyB3aGVuIHdlJ3JlIG5vdAorICAgICMgc3VwcG9zZWQgdG8gYmUuCisKKyAgICBk
ZWYgdGVzdF9yZXNldF9yZXN1bHRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB3ZSB1cGRh
dGUgZXhwZWN0YXRpb25zIGluIHBsYWNlLiBJZiB0aGUgZXhwZWN0YXRpb24KKyAgICAgICAgIyBp
cyBtaXNzaW5nLCB1cGRhdGUgdGhlIGV4cGVjdGVkIGdlbmVyaWMgbG9jYXRpb24uCisgICAgICAg
IGZzID0gcG9ydC51bml0X3Rlc3RfZmlsZXN5c3RlbSgpCisgICAgICAgIHBhc3NpbmdfcnVuKFsn
LS1waXhlbC10ZXN0cycsCisgICAgICAgICAgICAgICAgICAgICAgICAnLS1yZXNldC1yZXN1bHRz
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvaW1hZ2UuaHRtbCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZS5odG1sJ10s
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmaWxlc3lzdGVt
PWZzKQorICAgICAgICBmaWxlX2xpc3QgPSBmcy53cml0dGVuX2ZpbGVzLmtleXMoKQorICAgICAg
ICBmaWxlX2xpc3QucmVtb3ZlKCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvdGVzdHNfcnVuMC50
eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxlX2xpc3QpLCA0KQorICAgICAg
ICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxlX2xpc3QsICIvcGFzc2VzL2ltYWdlIikKKyAgICAg
ICAgc2VsZi5hc3NlcnRCYXNlbGluZXMoZmlsZV9saXN0LCAiL2ZhaWx1cmVzL2V4cGVjdGVkL21p
c3NpbmdfaW1hZ2UiKQorCisgICAgZGVmIHRlc3RfbmV3X2Jhc2VsaW5lKHNlbGYpOgorICAgICAg
ICAjIFRlc3QgdGhhdCB3ZSB1cGRhdGUgdGhlIHBsYXRmb3JtIGV4cGVjdGF0aW9ucy4gSWYgdGhl
IGV4cGVjdGF0aW9uCisgICAgICAgICMgaXMgbXNzaW5nLCB0aGVuIGNyZWF0ZSBhIG5ldyBleHBl
Y3RhdGlvbiBpbiB0aGUgcGxhdGZvcm0gZGlyLgorICAgICAgICBmcyA9IHBvcnQudW5pdF90ZXN0
X2ZpbGVzeXN0ZW0oKQorICAgICAgICBwYXNzaW5nX3J1bihbJy0tcGl4ZWwtdGVzdHMnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgJy0tbmV3LWJhc2VsaW5lJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICdwYXNzZXMvaW1hZ2UuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnZmFp
bHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZS5odG1sJ10sCisgICAgICAgICAgICAgICAgICAg
IHRlc3RzX2luY2x1ZGVkPVRydWUsIGZpbGVzeXN0ZW09ZnMpCisgICAgICAgIGZpbGVfbGlzdCA9
IGZzLndyaXR0ZW5fZmlsZXMua2V5cygpCisgICAgICAgIGZpbGVfbGlzdC5yZW1vdmUoJy90bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy90ZXN0c19ydW4wLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobGVuKGZpbGVfbGlzdCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0QmFzZWxpbmVzKGZp
bGVfbGlzdCwKKyAgICAgICAgICAgICIvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9wYXNzZXMv
aW1hZ2UiKQorICAgICAgICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxlX2xpc3QsCisgICAgICAg
ICAgICAiL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2lu
Z19pbWFnZSIpCisKKworY2xhc3MgRHJ5cnVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
IyBGSVhNRTogaXQncyBoYXJkIHRvIGtub3cgd2hpY2ggcGxhdGZvcm1zIGFyZSBzYWZlIHRvIHRl
c3Q7IHRoZQorICAgICMgY2hyb21pdW0gcGxhdGZvcm1zIHJlcXVpcmUgYSBjaHJvbWl1bSBjaGVj
a291dCwgYW5kIHRoZSBtYWMgcGxhdGZvcm0KKyAgICAjIHJlcXVpcmVzIGZjbnRsLCBzbyBpdCBj
YW4ndCBiZSB0ZXN0ZWQgb24gd2luMzIsIGV0Yy4gVGhlcmUgaXMKKyAgICAjIHByb2JhYmx5IGEg
YmV0dGVyIHdheSBvZiBoYW5kbGluZyB0aGlzLgorICAgIGRlZiBkaXNhYmxlZF90ZXN0X2Rhcndp
bihzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJkYXJ3aW4iOgorICAgICAgICAg
ICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0
Zm9ybScsICdkcnlydW4nLCAnZmFzdC9odG1sJ10sCisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0c19pbmNsdWRlZD1UcnVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVu
KFsnLS1wbGF0Zm9ybScsICdkcnlydW4tbWFjJywgJ2Zhc3QvaHRtbCddLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkpCisKKyAgICBkZWYgdGVzdF90ZXN0KHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywg
J2RyeXJ1bi10ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnLS1waXhlbC10ZXN0cyddKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAg
IHVuaXR0ZXN0Lm1haW4oKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiA4NTk2NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcyICswLDAg
QEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR2Fib3IgUmFwY3Nhbnlp
IChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSMgQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLSIiIlVuaXQgdGVzdHMgZm9yIHJ1bl93ZWJraXRfdGVzdHMuIiIiCi0KLWZyb20g
X19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKLQotaW1wb3J0IGNvZGVjcwotaW1wb3J0
IGl0ZXJ0b29scwotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IFF1ZXVlCi1pbXBv
cnQgc3lzCi1pbXBvcnQgdGhyZWFkCi1pbXBvcnQgdGltZQotaW1wb3J0IHRocmVhZGluZwotaW1w
b3J0IHVuaXR0ZXN0Ci0KLXRyeToKLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCi1leGNlcHQg
SW1wb3J0RXJyb3I6Ci0gICAgbXVsdGlwcm9jZXNzaW5nID0gTm9uZQotCi1mcm9tIHdlYmtpdHB5
LmNvbW1vbiBpbXBvcnQgYXJyYXlfc3RyZWFtCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0g
aW1wb3J0IG91dHB1dGNhcHR1cmUKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQg
ZmlsZXN5c3RlbV9tb2NrCi1mcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IG1vY2t0b29sCi1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAotZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnBvcnQudGVzdCBpbXBvcnQgVGVzdFBvcnQsIFRlc3REcml2ZXIKLWZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnBvcnQudGVzdF9maWxlcyBpbXBvcnQgaXNfcmVmZXJlbmNlX2h0bWxfZmlsZQot
ZnJvbSB3ZWJraXRweS5weXRob24yNC52ZXJzaW9uaW5nIGltcG9ydCBjb21wYXJlX3ZlcnNpb24K
LWZyb20gd2Via2l0cHkudGVzdC5za2lwIGltcG9ydCBza2lwX2lmCi0KLWZyb20gd2Via2l0cHku
dGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCi0KLQotZGVmIHBhcnNlX2FyZ3MoZXh0cmFfYXJn
cz1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsCi0gICAg
ICAgICAgICAgICBwcmludF9ub3RoaW5nPVRydWUpOgotICAgIGV4dHJhX2FyZ3MgPSBleHRyYV9h
cmdzIG9yIFtdCi0gICAgaWYgcHJpbnRfbm90aGluZzoKLSAgICAgICAgYXJncyA9IFsnLS1wcmlu
dCcsICdub3RoaW5nJ10KLSAgICBlbHNlOgotICAgICAgICBhcmdzID0gW10KLSAgICBpZiBub3Qg
Jy0tcGxhdGZvcm0nIGluIGV4dHJhX2FyZ3M6Ci0gICAgICAgIGFyZ3MuZXh0ZW5kKFsnLS1wbGF0
Zm9ybScsICd0ZXN0J10pCi0gICAgaWYgbm90IHJlY29yZF9yZXN1bHRzOgotICAgICAgICBhcmdz
LmFwcGVuZCgnLS1uby1yZWNvcmQtcmVzdWx0cycpCi0gICAgaWYgbm90ICctLWNoaWxkLXByb2Nl
c3NlcycgaW4gZXh0cmFfYXJncyBhbmQgbm90ICctLXdvcmtlci1tb2RlbCcgaW4gZXh0cmFfYXJn
czoKLSAgICAgICAgYXJncy5leHRlbmQoWyctLXdvcmtlci1tb2RlbCcsICdpbmxpbmUnXSkKLSAg
ICBhcmdzLmV4dGVuZChleHRyYV9hcmdzKQotICAgIGlmIG5vdCB0ZXN0c19pbmNsdWRlZDoKLSAg
ICAgICAgIyBXZSB1c2UgdGhlIGdsb2IgdG8gdGVzdCB0aGF0IGdsb2JiaW5nIHdvcmtzLgotICAg
ICAgICBhcmdzLmV4dGVuZChbJ3Bhc3NlcycsCi0gICAgICAgICAgICAgICAgICAgICAnaHR0cC90
ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICAnd2Vic29ja2V0L3Rlc3RzJywKLSAgICAgICAg
ICAgICAgICAgICAgICdmYWlsdXJlcy9leHBlY3RlZC8qJ10pCi0gICAgcmV0dXJuIHJ1bl93ZWJr
aXRfdGVzdHMucGFyc2VfYXJncyhhcmdzKQotCi0KLWRlZiBwYXNzaW5nX3J1bihleHRyYV9hcmdz
PU5vbmUsIHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLAotICAgICAgICAgICAg
ICAgIHRlc3RzX2luY2x1ZGVkPUZhbHNlLCBmaWxlc3lzdGVtPU5vbmUpOgotICAgIG9wdGlvbnMs
IHBhcnNlZF9hcmdzID0gcGFyc2VfYXJncyhleHRyYV9hcmdzLCByZWNvcmRfcmVzdWx0cywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQpCi0gICAg
aWYgbm90IHBvcnRfb2JqOgotICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KHBvcnRfbmFtZT1v
cHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlcj1tb2NrdG9vbC5Nb2NrVXNlcigpLCBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0pCi0g
ICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIHBhcnNlZF9h
cmdzKQotICAgIHJldHVybiByZXMgPT0gMAotCi0KLWRlZiBsb2dnaW5nX3J1bihleHRyYV9hcmdz
PU5vbmUsIHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLCB0ZXN0c19pbmNsdWRl
ZD1GYWxzZSwgZmlsZXN5c3RlbT1Ob25lKToKLSAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHBh
cnNlX2FyZ3MoZXh0cmFfYXJncz1leHRyYV9hcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWNvcmRfcmVzdWx0cz1yZWNvcmRfcmVzdWx0cywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9dGVzdHNfaW5jbHVkZWQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X25vdGhpbmc9RmFs
c2UpCi0gICAgdXNlciA9IG1vY2t0b29sLk1vY2tVc2VyKCkKLSAgICBpZiBub3QgcG9ydF9vYmo6
Ci0gICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQocG9ydF9uYW1lPW9wdGlvbnMucGxhdGZvcm0s
IG9wdGlvbnM9b3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyPXVzZXIs
IGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkKLQotICAgIHJlcywgYnVpbGRib3Rfb3V0cHV0LCByZWd1
bGFyX291dHB1dCA9IHJ1bl9hbmRfY2FwdHVyZShwb3J0X29iaiwgb3B0aW9ucywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vk
X2FyZ3MpCi0gICAgcmV0dXJuIChyZXMsIGJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRwdXQs
IHVzZXIpCi0KLQotZGVmIHJ1bl9hbmRfY2FwdHVyZShwb3J0X29iaiwgb3B0aW9ucywgcGFyc2Vk
X2FyZ3MpOgotICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKLSAgICB0cnk6
Ci0gICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAgYnVpbGRib3Rfb3V0cHV0ID0g
YXJyYXlfc3RyZWFtLkFycmF5U3RyZWFtKCkKLSAgICAgICAgcmVndWxhcl9vdXRwdXQgPSBhcnJh
eV9zdHJlYW0uQXJyYXlTdHJlYW0oKQotICAgICAgICByZXMgPSBydW5fd2Via2l0X3Rlc3RzLnJ1
bihwb3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkYm90X291dHB1dD1idWlsZGJvdF9vdXRwdXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJfb3V0cHV0PXJlZ3VsYXJfb3V0cHV0KQot
ICAgIGZpbmFsbHk6Ci0gICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKLSAgICByZXR1cm4gKHJl
cywgYnVpbGRib3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCkKLQotCi1kZWYgZ2V0X3Rlc3RzX3J1
bihleHRyYV9hcmdzPU5vbmUsIHRlc3RzX2luY2x1ZGVkPUZhbHNlLCBmbGF0dGVuX2JhdGNoZXM9
RmFsc2UsCi0gICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtPU5vbmUsIGluY2x1ZGVfcmVmZXJl
bmNlX2h0bWw9RmFsc2UpOgotICAgIGV4dHJhX2FyZ3MgPSBleHRyYV9hcmdzIG9yIFtdCi0gICAg
aWYgbm90IHRlc3RzX2luY2x1ZGVkOgotICAgICAgICAjIE5vdCBpbmNsdWRpbmcgaHR0cCB0ZXN0
cyBzaW5jZSB0aGV5IGdldCBydW4gb3V0IG9mIG9yZGVyICh0aGF0Ci0gICAgICAgICMgYmVoYXZp
b3IgaGFzIGl0cyBvd24gdGVzdCwgc2VlIHRlc3RfZ2V0X3Rlc3RfZmlsZV9xdWV1ZSkKLSAgICAg
ICAgZXh0cmFfYXJncyA9IFsncGFzc2VzJywgJ2ZhaWx1cmVzJ10gKyBleHRyYV9hcmdzCi0gICAg
b3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKGV4dHJhX2FyZ3MsIHRlc3RzX2luY2x1
ZGVkPVRydWUpCi0KLSAgICB1c2VyID0gbW9ja3Rvb2wuTW9ja1VzZXIoKQotCi0gICAgdGVzdF9i
YXRjaGVzID0gW10KLQotCi0gICAgY2xhc3MgUmVjb3JkaW5nVGVzdERyaXZlcihUZXN0RHJpdmVy
KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1iZXIpOgotICAg
ICAgICAgICAgVGVzdERyaXZlci5fX2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyKQot
ICAgICAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X2JhdGNoID0gTm9uZQotCi0gICAgICAgIGRl
ZiBwb2xsKHNlbGYpOgotICAgICAgICAgICAgIyBTbyB0aGF0IHdlIGRvbid0IGNyZWF0ZSBhIG5l
dyBkcml2ZXIgZm9yIGV2ZXJ5IHRlc3QKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAg
ICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfYmF0Y2gg
PSBOb25lCi0KLSAgICAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgotICAgICAg
ICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X2JhdGNoIGlzIE5vbmU6Ci0gICAgICAgICAgICAg
ICAgc2VsZi5fY3VycmVudF90ZXN0X2JhdGNoID0gW10KLSAgICAgICAgICAgICAgICB0ZXN0X2Jh
dGNoZXMuYXBwZW5kKHNlbGYuX2N1cnJlbnRfdGVzdF9iYXRjaCkKLSAgICAgICAgICAgIHRlc3Rf
bmFtZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVu
YW1lKQotICAgICAgICAgICAgIyBJbiBjYXNlIG9mIHJlZnRlc3QsIG9uZSB0ZXN0IGNhbGxzIHRo
ZSBkcml2ZXIncyBydW5fdGVzdCgpIHR3aWNlLgotICAgICAgICAgICAgIyBXZSBzaG91bGQgbm90
IGFkZCBhIHJlZmVyZW5jZSBodG1sIHVzZWQgYnkgcmVmdGVzdHMgdG8gdGVzdHMgdW5sZXNzIGlu
Y2x1ZGVfcmVmZXJlbmNlX2h0bWwgcGFyYW1ldGVyCi0gICAgICAgICAgICAjIGlzIGV4cGxpY2l0
bHkgZ2l2ZW4uCi0gICAgICAgICAgICBpZiBpbmNsdWRlX3JlZmVyZW5jZV9odG1sIG9yIG5vdCBp
c19yZWZlcmVuY2VfaHRtbF9maWxlKHRlc3RfaW5wdXQuZmlsZW5hbWUpOgotICAgICAgICAgICAg
ICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9iYXRjaC5hcHBlbmQodGVzdF9uYW1lKQotICAgICAgICAg
ICAgcmV0dXJuIFRlc3REcml2ZXIucnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCkKLQotICAgIGNs
YXNzIFJlY29yZGluZ1Rlc3RQb3J0KFRlc3RQb3J0KToKLSAgICAgICAgZGVmIGNyZWF0ZV9kcml2
ZXIoc2VsZiwgd29ya2VyX251bWJlcik6Ci0gICAgICAgICAgICByZXR1cm4gUmVjb3JkaW5nVGVz
dERyaXZlcihzZWxmLCB3b3JrZXJfbnVtYmVyKQotCi0gICAgcmVjb3JkaW5nX3BvcnQgPSBSZWNv
cmRpbmdUZXN0UG9ydChvcHRpb25zPW9wdGlvbnMsIHVzZXI9dXNlciwgZmlsZXN5c3RlbT1maWxl
c3lzdGVtKQotICAgIHJ1bl9hbmRfY2FwdHVyZShyZWNvcmRpbmdfcG9ydCwgb3B0aW9ucywgcGFy
c2VkX2FyZ3MpCi0KLSAgICBpZiBmbGF0dGVuX2JhdGNoZXM6Ci0gICAgICAgIHJldHVybiBsaXN0
KGl0ZXJ0b29scy5jaGFpbigqdGVzdF9iYXRjaGVzKSkKLQotICAgIHJldHVybiB0ZXN0X2JhdGNo
ZXMKLQotCi1jbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3Rf
YWNjZWxlcmF0ZWRfY29tcG9zaXRpbmcoc2VsZik6Ci0gICAgICAgICMgVGhpcyBqdXN0IHRlc3Rz
IHRoYXQgd2UgcmVjb2duaXplIHRoZSBjb21tYW5kIGxpbmUgYXJncwotICAgICAgICBzZWxmLmFz
c2VydFRydWUocGFzc2luZ19ydW4oWyctLWFjY2VsZXJhdGVkLWNvbXBvc2l0aW5nJ10pKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLW5vLWFjY2VsZXJhdGVkLWNvbXBv
c2l0aW5nJ10pKQotCi0gICAgZGVmIHRlc3RfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNlbGYpOgot
ICAgICAgICAjIFRoaXMganVzdCB0ZXN0cyB0aGF0IHdlIHJlY29nbml6ZSB0aGUgY29tbWFuZCBs
aW5lIGFyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1hY2NlbGVy
YXRlZC0yZC1jYW52YXMnXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihb
Jy0tbm8tYWNjZWxlcmF0ZWQtMmQtY2FudmFzJ10pKQotCi0gICAgZGVmIHRlc3RfYmFzaWMoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bigpKQotCi0gICAgZGVmIHRl
c3RfYmF0Y2hfc2l6ZShzZWxmKToKLSAgICAgICAgYmF0Y2hfdGVzdHNfcnVuID0gZ2V0X3Rlc3Rz
X3J1bihbJy0tYmF0Y2gtc2l6ZScsICcyJ10pCi0gICAgICAgIGZvciBiYXRjaCBpbiBiYXRjaF90
ZXN0c19ydW46Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGJhdGNoKSA8PSAyLCAn
JXMgaGFkIHRvbyBtYW55IHRlc3RzJyAlICcsICcuam9pbihiYXRjaCkpCi0KLSAgICBkZWYgdGVz
dF9jaGlsZF9wcm9jZXNzXzEoc2VsZik6Ci0gICAgICAgIF8sIF8sIHJlZ3VsYXJfb3V0cHV0LCBf
ID0gbG9nZ2luZ19ydW4oCi0gICAgICAgICAgICAgWyctLXByaW50JywgJ2NvbmZpZycsICctLXdv
cmtlci1tb2RlbCcsICd0aHJlYWRzJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzEnXSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGFueShbJ1J1bm5pbmcgMSAnIGluIGxpbmUgZm9yIGxpbmUgaW4g
cmVndWxhcl9vdXRwdXQuZ2V0KCldKSkKLQotICAgIGRlZiB0ZXN0X2NoaWxkX3Byb2Nlc3Nlc18y
KHNlbGYpOgotICAgICAgICBfLCBfLCByZWd1bGFyX291dHB1dCwgXyA9IGxvZ2dpbmdfcnVuKAot
ICAgICAgICAgICAgIFsnLS1wcmludCcsICdjb25maWcnLCAnLS13b3JrZXItbW9kZWwnLCAndGhy
ZWFkcycsICctLWNoaWxkLXByb2Nlc3NlcycsICcyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShhbnkoWydSdW5uaW5nIDIgJyBpbiBsaW5lIGZvciBsaW5lIGluIHJlZ3VsYXJfb3V0cHV0Lmdl
dCgpXSkpCi0KLSAgICBkZWYgdGVzdF9jaGlsZF9wcm9jZXNzZXNfbWluKHNlbGYpOgotICAgICAg
ICBfLCBfLCByZWd1bGFyX291dHB1dCwgXyA9IGxvZ2dpbmdfcnVuKAotICAgICAgICAgICAgIFsn
LS1wcmludCcsICdjb25maWcnLCAnLS13b3JrZXItbW9kZWwnLCAndGhyZWFkcycsICctLWNoaWxk
LXByb2Nlc3NlcycsICcyJywgJ3Bhc3NlcyddLAotICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVk
PVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoWydSdW5uaW5nIDEgJyBpbiBsaW5l
IGZvciBsaW5lIGluIHJlZ3VsYXJfb3V0cHV0LmdldCgpXSkpCi0KLSAgICBkZWYgdGVzdF9kcnly
dW4oc2VsZik6Ci0gICAgICAgIGJhdGNoX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLWRy
eS1ydW4nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXRjaF90ZXN0c19ydW4sIFtdKQot
Ci0gICAgICAgIGJhdGNoX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctbiddKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGJhdGNoX3Rlc3RzX3J1biwgW10pCi0KLSAgICBkZWYgdGVzdF9l
eGNlcHRpb25fcmFpc2VkKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy
cm9yLCBsb2dnaW5nX3J1biwKLSAgICAgICAgICAgIFsnZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0
aW9uLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKLQotICAgIGRlZiB0ZXN0X2Z1bGxfcmVz
dWx0c19odG1sKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB2ZXJpZnkgaHRtbD8KLSAgICAgICAg
cmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1mdWxsLXJlc3VsdHMtaHRtbCdd
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMCkKLQotICAgIGRlZiB0ZXN0X2hlbHBf
cHJpbnRpbmcoc2VsZik6Ci0gICAgICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1
bihbJy0taGVscC1wcmludGluZyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMCkK
LSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQotICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKGVyci5lbXB0eSgpKQotCi0gICAgZGVmIHRlc3RfaHVuZ190aHJlYWQoc2VsZik6Ci0g
ICAgICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1bihbJy0tcnVuLXNpbmdseScs
ICctLXRpbWUtb3V0LW1zPTUwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdmYWlsdXJlcy9leHBlY3RlZC9oYW5nLmh0bWwnXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocmVzLCAwKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0
eSgpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQotCi0gICAgZGVmIHRl
c3Rfa2V5Ym9hcmRfaW50ZXJydXB0KHNlbGYpOgotICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIGFs
c28gdGVzdHMgcnVubmluZyBhIHRlc3QgbWFya2VkIGFzIFNLSVAgaWYKLSAgICAgICAgIyB5b3Ug
c3BlY2lmeSBpdCBleHBsaWNpdGx5LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2Fy
ZEludGVycnVwdCwgbG9nZ2luZ19ydW4sCi0gICAgICAgICAgICBbJ2ZhaWx1cmVzL2V4cGVjdGVk
L2tleWJvYXJkLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKLQotICAgIGRlZiB0ZXN0X2tl
eWJvYXJkX2ludGVycnVwdF9pbmxpbmVfd29ya2VyX21vZGVsKHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgbG9nZ2luZ19ydW4sCi0gICAgICAgICAg
ICBbJ2ZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJkLmh0bWwnLCAnLS13b3JrZXItbW9kZWwnLCAn
aW5saW5lJ10sCi0gICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlKQotCi0gICAgZGVmIHRl
c3RfbGFzdF9yZXN1bHRzKHNlbGYpOgotICAgICAgICBmcyA9IHBvcnQudW5pdF90ZXN0X2ZpbGVz
eXN0ZW0oKQotICAgICAgICAjIFdlIGRvIGEgbG9nZ2luZyBydW4gaGVyZSBpbnN0ZWFkIG9mIGEg
cGFzc2luZyBydW4gaW4gb3JkZXIgdG8KLSAgICAgICAgIyBzdXBwcmVzcyB0aGUgb3V0cHV0IGZy
b20gdGhlIGpzb24gZ2VuZXJhdG9yLgotICAgICAgICByZXMsIGJ1aWxkYm90X291dHB1dCwgcmVn
dWxhcl9vdXRwdXQsIHVzZXIgPSBsb2dnaW5nX3J1bihbJy0tY2xvYmJlci1vbGQtcmVzdWx0cydd
LCByZWNvcmRfcmVzdWx0cz1UcnVlLCBmaWxlc3lzdGVtPWZzKQotICAgICAgICByZXMsIGJ1aWxk
Ym90X291dHB1dCwgcmVndWxhcl9vdXRwdXQsIHVzZXIgPSBsb2dnaW5nX3J1bigKLSAgICAgICAg
ICAgIFsnLS1wcmludC1sYXN0LWZhaWx1cmVzJ10sIGZpbGVzeXN0ZW09ZnMpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocmVndWxhcl9vdXRwdXQuZ2V0KCksIFsnXG5cbiddKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGJ1aWxkYm90X291dHB1dC5nZXQoKSwgW10pCi0KLSAgICBkZWYgdGVz
dF9saW50X3Rlc3RfZmlsZXMoc2VsZik6Ci0gICAgICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBs
b2dnaW5nX3J1bihbJy0tbGludC10ZXN0LWZpbGVzJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocmVzLCAwKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCi0gICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShhbnkoWydMaW50IHN1Y2NlZWRlZCcgaW4gbXNnIGZvciBtc2cgaW4g
ZXJyLmdldCgpXSkpCi0KLSAgICBkZWYgdGVzdF9saW50X3Rlc3RfZmlsZXNfX2Vycm9ycyhzZWxm
KToKLSAgICAgICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKFsnLS1saW50LXRl
c3QtZmlsZXMnXSkKLSAgICAgICAgdXNlciA9IG1vY2t0b29sLk1vY2tVc2VyKCkKLSAgICAgICAg
cG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMsIHVz
ZXI9dXNlcikKLSAgICAgICAgcG9ydF9vYmoudGVzdF9leHBlY3RhdGlvbnMgPSBsYW1iZGE6ICIj
IHN5bnRheCBlcnJvciIKLSAgICAgICAgcmVzLCBvdXQsIGVyciA9IHJ1bl9hbmRfY2FwdHVyZShw
b3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2FyZ3MpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChyZXMsIC0xKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCi0gICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShhbnkoWydMaW50IGZhaWxlZCcgaW4gbXNnIGZvciBtc2cgaW4gZXJy
LmdldCgpXSkpCi0KLSAgICBkZWYgdGVzdF9ub190ZXN0c19mb3VuZChzZWxmKToKLSAgICAgICAg
cmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsncmVzb3VyY2VzJ10sIHRlc3RzX2lu
Y2x1ZGVkPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAtMSkKLSAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ05v
IHRlc3RzIHRvIHJ1bi5cbicgaW4gZXJyLmdldCgpKQotCi0gICAgZGVmIHRlc3Rfbm9fdGVzdHNf
Zm91bmRfMihzZWxmKToKLSAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVu
KFsnZm9vJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cmVzLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQotICAgICAgICBz
ZWxmLmFzc2VydFRydWUoJ05vIHRlc3RzIHRvIHJ1bi5cbicgaW4gZXJyLmdldCgpKQotCi0gICAg
ZGVmIHRlc3RfcmFuZG9taXplX29yZGVyKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB2ZXJpZnkg
b3JkZXIgd2FzIHNodWZmbGVkCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihb
Jy0tcmFuZG9taXplLW9yZGVyJ10pKQotCi0gICAgZGVmIHRlc3RfZ2NfYmV0d2Vlbl90ZXN0cyhz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1nYy1iZXR3ZWVu
LXRlc3RzJ10pKQotCi0gICAgZGVmIHRlc3RfY29tcGxleF90ZXh0KHNlbGYpOgotICAgICAgICBz
ZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLWNvbXBsZXgtdGV4dCddKSkKLQotICAgIGRl
ZiB0ZXN0X3RocmVhZGVkKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19y
dW4oWyctLXRocmVhZGVkJ10pKQotCi0gICAgZGVmIHRlc3RfcnVuX2NodW5rKHNlbGYpOgotICAg
ICAgICAjIFRlc3QgdGhhdCB3ZSBhY3R1YWxseSBzZWxlY3QgdGhlIHJpZ2h0IGNodW5rCi0gICAg
ICAgIGFsbF90ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQot
ICAgICAgICBjaHVua190ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1ydW4tY2h1bmsnLCAn
MTo0J10sIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhh
bGxfdGVzdHNfcnVuWzQ6OF0sIGNodW5rX3Rlc3RzX3J1bikKLQotICAgICAgICAjIFRlc3QgdGhh
dCB3ZSB3cmFwIGFyb3VuZCBpZiB0aGUgbnVtYmVyIG9mIHRlc3RzIGlzIG5vdCBldmVubHkgZGl2
aXNpYmxlIGJ5IHRoZSBjaHVuayBzaXplCi0gICAgICAgIHRlc3RzX3RvX3J1biA9IFsncGFzc2Vz
L2Vycm9yLmh0bWwnLCAncGFzc2VzL2ltYWdlLmh0bWwnLCAncGFzc2VzL3BsYXRmb3JtX2ltYWdl
Lmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCddCi0gICAgICAgIGNodW5rX3Rlc3RzX3J1biA9IGdl
dF90ZXN0c19ydW4oWyctLXJ1bi1jaHVuaycsICcxOjMnXSArIHRlc3RzX3RvX3J1biwgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKFsncGFzc2VzL3RleHQuaHRtbCcsICdwYXNzZXMvZXJyb3IuaHRtbCcsICdwYXNzZXMv
aW1hZ2UuaHRtbCddLCBjaHVua190ZXN0c19ydW4pCi0KLSAgICBkZWYgdGVzdF9ydW5fZm9yY2Uo
c2VsZik6Ci0gICAgICAgICMgVGhpcyByYWlzZXMgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugd2UgcnVu
Ci0gICAgICAgICMgZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0aW9uLmh0bWwsIHdoaWNoIGlzIG5v
cm1hbGx5IFNLSVBwZWQuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxv
Z2dpbmdfcnVuLCBbJy0tZm9yY2UnXSkKLQotICAgIGRlZiB0ZXN0X3J1bl9wYXJ0KHNlbGYpOgot
ICAgICAgICAjIFRlc3QgdGhhdCB3ZSBhY3R1YWxseSBzZWxlY3QgdGhlIHJpZ2h0IHBhcnQKLSAg
ICAgICAgdGVzdHNfdG9fcnVuID0gWydwYXNzZXMvZXJyb3IuaHRtbCcsICdwYXNzZXMvaW1hZ2Uu
aHRtbCcsICdwYXNzZXMvcGxhdGZvcm1faW1hZ2UuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJ10K
LSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tcnVuLXBhcnQnLCAnMToyJ10g
KyB0ZXN0c190b19ydW4sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVl
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy9lcnJvci5odG1sJywgJ3Bhc3Nl
cy9pbWFnZS5odG1sJ10sIHRlc3RzX3J1bikKLQotICAgICAgICAjIFRlc3QgdGhhdCB3ZSB3cmFw
IGFyb3VuZCBpZiB0aGUgbnVtYmVyIG9mIHRlc3RzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5
IHRoZSBjaHVuayBzaXplCi0gICAgICAgICMgKGhlcmUgd2UgZW5kIHVwIHdpdGggMyBwYXJ0cywg
ZWFjaCB3aXRoIDIgdGVzdHMsIGFuZCB3ZSBvbmx5IGhhdmUgNCB0ZXN0cyB0b3RhbCwgc28gdGhl
Ci0gICAgICAgICMgbGFzdCBwYXJ0IHJlcGVhdHMgdGhlIGZpcnN0IHR3byB0ZXN0cykuCi0gICAg
ICAgIGNodW5rX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXJ1bi1wYXJ0JywgJzM6Mydd
ICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1
ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNzZXMvZXJyb3IuaHRtbCcsICdwYXNz
ZXMvaW1hZ2UuaHRtbCddLCBjaHVua190ZXN0c19ydW4pCi0KLSAgICBkZWYgdGVzdF9ydW5fc2lu
Z2x5KHNlbGYpOgotICAgICAgICBiYXRjaF90ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1y
dW4tc2luZ2x5J10pCi0gICAgICAgIGZvciBiYXRjaCBpbiBiYXRjaF90ZXN0c19ydW46Ci0gICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYmF0Y2gpLCAxLCAnJXMgaGFkIHRvbyBtYW55
IHRlc3RzJyAlICcsICcuam9pbihiYXRjaCkpCi0KLSAgICBkZWYgdGVzdF9za2lwX2ZhaWxpbmdf
dGVzdHMoc2VsZik6Ci0gICAgICAgIGJhdGNoZXMgPSBnZXRfdGVzdHNfcnVuKFsnLS1za2lwLWZh
aWxpbmctdGVzdHMnXSkKLSAgICAgICAgaGFzX3Bhc3Nlc190ZXh0ID0gRmFsc2UKLSAgICAgICAg
Zm9yIGJhdGNoIGluIGJhdGNoZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdmYWls
dXJlcy9leHBlY3RlZC90ZXh0Lmh0bWwnIGluIGJhdGNoKQotICAgICAgICAgICAgaGFzX3Bhc3Nl
c190ZXh0ID0gaGFzX3Bhc3Nlc190ZXh0IG9yICgncGFzc2VzL3RleHQuaHRtbCcgaW4gYmF0Y2gp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNfcGFzc2VzX3RleHQpCi0KLSAgICBkZWYgdGVz
dF9ydW5fc2luZ2x5X2FjdHVhbGx5X3J1bnNfdGVzdHMoc2VsZik6Ci0gICAgICAgIHJlcywgXywg
XywgXyA9IGxvZ2dpbmdfcnVuKFsnLS1ydW4tc2luZ2x5JywgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQn
XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLCA1KQotCi0gICAgZGVmIHRlc3Rfc2lu
Z2xlX2ZpbGUoc2VsZik6Ci0gICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWydwYXNz
ZXMvdGV4dC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVl
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSwgdGVzdHNf
cnVuKQotCi0gICAgZGVmIHRlc3Rfc2luZ2xlX2ZpbGVfd2l0aF9wcmVmaXgoc2VsZik6Ci0gICAg
ICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWydMYXlvdXRUZXN0cy9wYXNzZXMvdGV4dC5o
dG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSwgdGVzdHNfcnVuKQotCi0g
ICAgZGVmIHRlc3Rfc2luZ2xlX3NraXBwZWRfZmlsZShzZWxmKToKLSAgICAgICAgdGVzdHNfcnVu
ID0gZ2V0X3Rlc3RzX3J1bihbJ2ZhaWx1cmVzL2V4cGVjdGVkL2tleWJhb3JkLmh0bWwnXSwgdGVz
dHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKFtdLCB0ZXN0c19ydW4pCi0KLSAgICBkZWYgdGVzdF9zdGRlcnJfaXNfc2F2ZWQo
c2VsZik6Ci0gICAgICAgIGZzID0gcG9ydC51bml0X3Rlc3RfZmlsZXN5c3RlbSgpCi0gICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihmaWxlc3lzdGVtPWZzKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoZnMucmVhZF90ZXh0X2ZpbGUoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0
cy9wYXNzZXMvZXJyb3Itc3RkZXJyLnR4dCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAn
c3R1ZmYgZ29pbmcgdG8gc3RkZXJyJykKLQotICAgIGRlZiB0ZXN0X3Rlc3RfbGlzdChzZWxmKToK
LSAgICAgICAgZnMgPSBwb3J0LnVuaXRfdGVzdF9maWxlc3lzdGVtKCkKLSAgICAgICAgZmlsZW5h
bWUgPSAnL3RtcC9mb28udHh0JwotICAgICAgICBmcy53cml0ZV90ZXh0X2ZpbGUoZmlsZW5hbWUs
ICdwYXNzZXMvdGV4dC5odG1sJykKLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihb
Jy0tdGVzdC1saXN0PSVzJyAlIGZpbGVuYW1lXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRl
bl9iYXRjaGVzPVRydWUsIGZpbGVzeXN0ZW09ZnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KFsncGFzc2VzL3RleHQuaHRtbCddLCB0ZXN0c19ydW4pCi0gICAgICAgIGZzLnJlbW92ZShmaWxl
bmFtZSkKLSAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS10ZXN0
LWxpc3Q9JXMnICUgZmlsZW5hbWVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmlsZXN5c3RlbT1mcykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChyZXMsIC0xKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0
eSgpKQotCi0gICAgZGVmIHRlc3RfdGVzdF9saXN0X3dpdGhfcHJlZml4KHNlbGYpOgotICAgICAg
ICBmcyA9IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQotICAgICAgICBmaWxlbmFtZSA9ICcv
dG1wL2Zvby50eHQnCi0gICAgICAgIGZzLndyaXRlX3RleHRfZmlsZShmaWxlbmFtZSwgJ0xheW91
dFRlc3RzL3Bhc3Nlcy90ZXh0Lmh0bWwnKQotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNf
cnVuKFsnLS10ZXN0LWxpc3Q9JXMnICUgZmlsZW5hbWVdLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBm
bGF0dGVuX2JhdGNoZXM9VHJ1ZSwgZmlsZXN5c3RlbT1mcykKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoWydwYXNzZXMvdGV4dC5odG1sJ10sIHRlc3RzX3J1bikKLQotICAgIGRlZiB0ZXN0X3Vu
ZXhwZWN0ZWRfZmFpbHVyZXMoc2VsZik6Ci0gICAgICAgICMgUnVuIHRlc3RzIGluY2x1ZGluZyB0
aGUgdW5leHBlY3RlZCBmYWlsdXJlcy4KLSAgICAgICAgc2VsZi5fdXJsX29wZW5lZCA9IE5vbmUK
LSAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKHRlc3RzX2luY2x1ZGVk
PVRydWUpCi0KLSAgICAgICAgIyBVcGRhdGUgdGhpcyBtYWdpYyBudW1iZXIgaWYgeW91IGFkZCBh
biB1bmV4cGVjdGVkIHRlc3QgdG8gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQudGVzdAotICAg
ICAgICAjIEZJWE1FOiBJdCdzIG5pY2UgdG8gaGF2ZSBhIHJvdXRpbmUgaW4gcG9ydC90ZXN0LnB5
IHRoYXQgcmV0dXJucyB0aGlzIG51bWJlci4KLSAgICAgICAgdW5leHBlY3RlZF90ZXN0c19jb3Vu
dCA9IDUKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgdW5leHBlY3RlZF90ZXN0c19j
b3VudCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1c2Vy
Lm9wZW5lZF91cmxzLCBbJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9yZXN1bHRzLmh0bWwnXSkK
LQotICAgIGRlZiB0ZXN0X2V4aXRfYWZ0ZXJfbl9mYWlsdXJlc191cGxvYWQoc2VsZik6Ci0gICAg
ICAgIGZzID0gcG9ydC51bml0X3Rlc3RfZmlsZXN5c3RlbSgpCi0gICAgICAgIHJlcywgYnVpbGRi
b3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCwgdXNlciA9IGxvZ2dpbmdfcnVuKFsKLSAgICAgICAg
ICAgICAgICAnZmFpbHVyZXMvdW5leHBlY3RlZC90ZXh0LWltYWdlLWNoZWNrc3VtLmh0bWwnLAot
ICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC5odG1sJywKLSAgICAgICAgICAgICAgICAnLS1l
eGl0LWFmdGVyLW4tZmFpbHVyZXMnLCAnMScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAg
dGVzdHNfaW5jbHVkZWQ9VHJ1ZSwKLSAgICAgICAgICAgIHJlY29yZF9yZXN1bHRzPVRydWUsCi0g
ICAgICAgICAgICBmaWxlc3lzdGVtPWZzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJy90bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy9pbmNyZW1lbnRhbF9yZXN1bHRzLmpzb24nIGluIGZzLmZpbGVz
KQotCi0gICAgZGVmIHRlc3RfZXhpdF9hZnRlcl9uX2ZhaWx1cmVzKHNlbGYpOgotICAgICAgICAj
IFVuZXhwZWN0ZWQgZmFpbHVyZXMgc2hvdWxkIHJlc3VsdCBpbiB0ZXN0cyBzdG9wcGluZy4KLSAg
ICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCi0gICAgICAgICAgICAgICAgJ2ZhaWx1
cmVzL3VuZXhwZWN0ZWQvdGV4dC1pbWFnZS1jaGVja3N1bS5odG1sJywKLSAgICAgICAgICAgICAg
ICAncGFzc2VzL3RleHQuaHRtbCcsCi0gICAgICAgICAgICAgICAgJy0tZXhpdC1hZnRlci1uLWZh
aWx1cmVzJywgJzEnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVk
PVRydWUsCi0gICAgICAgICAgICBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoWydmYWlsdXJlcy91bmV4cGVjdGVkL3RleHQtaW1hZ2UtY2hlY2tzdW0uaHRt
bCddLCB0ZXN0c19ydW4pCi0KLSAgICAgICAgIyBCdXQgd2UnbGwga2VlcCBnb2luZyBmb3IgZXhw
ZWN0ZWQgb25lcy4KLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCi0gICAgICAg
ICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCcsCi0gICAgICAgICAgICAgICAg
J3Bhc3Nlcy90ZXh0Lmh0bWwnLAotICAgICAgICAgICAgICAgICctLWV4aXQtYWZ0ZXItbi1mYWls
dXJlcycsICcxJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1U
cnVlLAotICAgICAgICAgICAgZmxhdHRlbl9iYXRjaGVzPVRydWUpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKFsnZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5odG1sJywgJ3Bhc3Nlcy90ZXh0Lmh0
bWwnXSwgdGVzdHNfcnVuKQotCi0gICAgZGVmIHRlc3RfZXhpdF9hZnRlcl9uX2NyYXNoZXMoc2Vs
Zik6Ci0gICAgICAgICMgVW5leHBlY3RlZCBjcmFzaGVzIHNob3VsZCByZXN1bHQgaW4gdGVzdHMg
c3RvcHBpbmcuCi0gICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWwotICAgICAgICAg
ICAgICAgICdmYWlsdXJlcy91bmV4cGVjdGVkL2NyYXNoLmh0bWwnLAotICAgICAgICAgICAgICAg
ICdwYXNzZXMvdGV4dC5odG1sJywKLSAgICAgICAgICAgICAgICAnLS1leGl0LWFmdGVyLW4tY3Jh
c2hlcy1vci10aW1lb3V0cycsICcxJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB0ZXN0
c19pbmNsdWRlZD1UcnVlLAotICAgICAgICAgICAgZmxhdHRlbl9iYXRjaGVzPVRydWUpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnZmFpbHVyZXMvdW5leHBlY3RlZC9jcmFzaC5odG1sJ10s
IHRlc3RzX3J1bikKLQotICAgICAgICAjIFNhbWUgd2l0aCB0aW1lb3V0cy4KLSAgICAgICAgdGVz
dHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCi0gICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhw
ZWN0ZWQvdGltZW91dC5odG1sJywKLSAgICAgICAgICAgICAgICAncGFzc2VzL3RleHQuaHRtbCcs
Ci0gICAgICAgICAgICAgICAgJy0tZXhpdC1hZnRlci1uLWNyYXNoZXMtb3ItdGltZW91dHMnLCAn
MScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwKLSAg
ICAgICAgICAgIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhbJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvdGltZW91dC5odG1sJ10sIHRlc3RzX3J1bikKLQotICAg
ICAgICAjIEJ1dCB3ZSdsbCBrZWVwIGdvaW5nIGZvciBleHBlY3RlZCBvbmVzLgotICAgICAgICB0
ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsKLSAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhw
ZWN0ZWQvY3Jhc2guaHRtbCcsCi0gICAgICAgICAgICAgICAgJ3Bhc3Nlcy90ZXh0Lmh0bWwnLAot
ICAgICAgICAgICAgICAgICctLWV4aXQtYWZ0ZXItbi1jcmFzaGVzLW9yLXRpbWVvdXRzJywgJzEn
LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsCi0gICAg
ICAgICAgICBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
WydmYWlsdXJlcy9leHBlY3RlZC9jcmFzaC5odG1sJywgJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSwgdGVz
dHNfcnVuKQotCi0gICAgZGVmIHRlc3RfZXhpdF9hZnRlcl9uX2NyYXNoZXNfaW5saW5lX3dvcmtl
cl9tb2RlbChzZWxmKToKLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCi0gICAg
ICAgICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvdGltZW91dC5odG1sJywKLSAgICAgICAg
ICAgICAgICAncGFzc2VzL3RleHQuaHRtbCcsCi0gICAgICAgICAgICAgICAgJy0tZXhpdC1hZnRl
ci1uLWNyYXNoZXMtb3ItdGltZW91dHMnLCAnMScsCi0gICAgICAgICAgICAgICAgJy0td29ya2Vy
LW1vZGVsJywgJ2lubGluZScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwKLSAgICAgICAgICAgIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhbJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvdGltZW91dC5odG1sJ10sIHRl
c3RzX3J1bikKLQotICAgIGRlZiB0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5X2Fic29sdXRlKHNlbGYp
OgotICAgICAgICAjIFdlIHJ1biBhIGNvbmZpZ3VyYXRpb24gdGhhdCBzaG91bGQgZmFpbCwgdG8g
Z2VuZXJhdGUgb3V0cHV0LCB0aGVuCi0gICAgICAgICMgbG9vayBmb3Igd2hhdCB0aGUgb3V0cHV0
IHJlc3VsdHMgdXJsIHdhcy4KLQotICAgICAgICBmcyA9IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0
ZW0oKQotICAgICAgICB3aXRoIGZzLm1rZHRlbXAoKSBhcyB0bXBkaXI6Ci0gICAgICAgICAgICBy
ZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLXJlc3VsdHMtZGlyZWN0b3J5PScg
KyBzdHIodG1wZGlyKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmlsZXN5c3RlbT1mcykKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwodXNlci5vcGVuZWRfdXJscywgW2ZzLmpvaW4odG1wZGlyLCAncmVzdWx0
cy5odG1sJyldKQotCi0gICAgZGVmIHRlc3RfcmVzdWx0c19kaXJlY3RvcnlfZGVmYXVsdChzZWxm
KToKLSAgICAgICAgIyBXZSBydW4gYSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGZhaWwsIHRv
IGdlbmVyYXRlIG91dHB1dCwgdGhlbgotICAgICAgICAjIGxvb2sgZm9yIHdoYXQgdGhlIG91dHB1
dCByZXN1bHRzIHVybCB3YXMuCi0KLSAgICAgICAgIyBUaGlzIGlzIHRoZSBkZWZhdWx0IGxvY2F0
aW9uLgotICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4odGVzdHNfaW5j
bHVkZWQ9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1c2VyLm9wZW5lZF91cmxzLCBb
Jy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9yZXN1bHRzLmh0bWwnXSkKLQotICAgIGRlZiB0ZXN0
X3Jlc3VsdHNfZGlyZWN0b3J5X3JlbGF0aXZlKHNlbGYpOgotICAgICAgICAjIFdlIHJ1biBhIGNv
bmZpZ3VyYXRpb24gdGhhdCBzaG91bGQgZmFpbCwgdG8gZ2VuZXJhdGUgb3V0cHV0LCB0aGVuCi0g
ICAgICAgICMgbG9vayBmb3Igd2hhdCB0aGUgb3V0cHV0IHJlc3VsdHMgdXJsIHdhcy4KLSAgICAg
ICAgZnMgPSBwb3J0LnVuaXRfdGVzdF9maWxlc3lzdGVtKCkKLSAgICAgICAgZnMubWF5YmVfbWFr
ZV9kaXJlY3RvcnkoJy90bXAvY3dkJykKLSAgICAgICAgZnMuY2hkaXIoJy90bXAvY3dkJykKLSAg
ICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1yZXN1bHRzLWRpcmVj
dG9yeT1mb28nXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RzX2luY2x1ZGVkPVRydWUsIGZpbGVzeXN0ZW09ZnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodXNlci5vcGVuZWRfdXJscywgWycvdG1wL2N3ZC9mb28vcmVzdWx0cy5odG1sJ10pCi0KLSAg
ICAjIFRoZXNlIG5leHQgdGVzdHMgdGVzdCB0aGF0IHdlIHJ1biB0aGUgdGVzdHMgaW4gYXNjZW5k
aW5nIGFscGhhYmV0aWNhbAotICAgICMgb3JkZXIgcGVyIGRpcmVjdG9yeS4gSFRUUCB0ZXN0cyBh
cmUgc2hhcmRlZCBzZXBhcmF0ZWx5IGZyb20gb3RoZXIgdGVzdHMsCi0gICAgIyBzbyB3ZSBoYXZl
IHRvIHRlc3QgYm90aC4KLSAgICBkZWYgYXNzZXJ0X3J1bl9vcmRlcihzZWxmLCB3b3JrZXJfbW9k
ZWwsIGNoaWxkX3Byb2Nlc3Nlcz0nMScpOgotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNf
cnVuKFsnLS13b3JrZXItbW9kZWwnLCB3b3JrZXJfbW9kZWwsCi0gICAgICAgICAgICAnLS1jaGls
ZC1wcm9jZXNzZXMnLCBjaGlsZF9wcm9jZXNzZXMsICdwYXNzZXMnXSwKLSAgICAgICAgICAgIHRl
c3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyh0ZXN0c19ydW4sIHNvcnRlZCh0ZXN0c19ydW4pKQotCi0gICAgICAgIHRlc3Rz
X3J1biA9IGdldF90ZXN0c19ydW4oWyctLXdvcmtlci1tb2RlbCcsIHdvcmtlcl9tb2RlbCwKLSAg
ICAgICAgICAgICctLWNoaWxkLXByb2Nlc3NlcycsIGNoaWxkX3Byb2Nlc3NlcywgJ2h0dHAvdGVz
dHMvcGFzc2VzJ10sCi0gICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2Jh
dGNoZXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGVzdHNfcnVuLCBzb3J0ZWQo
dGVzdHNfcnVuKSkKLQotICAgIGRlZiB0ZXN0X3J1bl9vcmRlcl9faW5saW5lKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydF9ydW5fb3JkZXIoJ2lubGluZScpCi0KLSAgICBkZWYgdGVzdF90b2xl
cmFuY2Uoc2VsZik6Ci0gICAgICAgIGNsYXNzIEltYWdlRGlmZlRlc3RQb3J0KFRlc3RQb3J0KToK
LSAgICAgICAgICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1
YWxfY29udGVudHMsCi0gICAgICAgICAgICAgICAgICAgZGlmZl9maWxlbmFtZT1Ob25lKToKLSAg
ICAgICAgICAgICAgICBzZWxmLnRvbGVyYW5jZV91c2VkX2Zvcl9kaWZmX2ltYWdlID0gc2VsZi5f
b3B0aW9ucy50b2xlcmFuY2UKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAg
IGRlZiBnZXRfcG9ydF9mb3JfcnVuKGFyZ3MpOgotICAgICAgICAgICAgb3B0aW9ucywgcGFyc2Vk
X2FyZ3MgPSBydW5fd2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3MoYXJncykKLSAgICAgICAgICAgIHRl
c3RfcG9ydCA9IEltYWdlRGlmZlRlc3RQb3J0KG9wdGlvbnM9b3B0aW9ucywgdXNlcj1tb2NrdG9v
bC5Nb2NrVXNlcigpKQotICAgICAgICAgICAgcGFzc2luZ19ydW4oYXJncywgcG9ydF9vYmo9dGVz
dF9wb3J0LCB0ZXN0c19pbmNsdWRlZD1UcnVlKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RfcG9y
dAotCi0gICAgICAgIGJhc2VfYXJncyA9IFsnLS1waXhlbC10ZXN0cycsICdmYWlsdXJlcy9leHBl
Y3RlZC8qJ10KLQotICAgICAgICAjIElmIHdlIHBhc3MgaW4gYW4gZXhwbGljaXQgdG9sZXJhbmNl
IGFyZ3VtZW50LCB0aGVuIHRoYXQgd2lsbCBiZSB1c2VkLgotICAgICAgICB0ZXN0X3BvcnQgPSBn
ZXRfcG9ydF9mb3JfcnVuKGJhc2VfYXJncyArIFsnLS10b2xlcmFuY2UnLCAnLjEnXSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgwLjEsIHRlc3RfcG9ydC50b2xlcmFuY2VfdXNlZF9mb3JfZGlm
Zl9pbWFnZSkKLSAgICAgICAgdGVzdF9wb3J0ID0gZ2V0X3BvcnRfZm9yX3J1bihiYXNlX2FyZ3Mg
KyBbJy0tdG9sZXJhbmNlJywgJzAnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCB0ZXN0
X3BvcnQudG9sZXJhbmNlX3VzZWRfZm9yX2RpZmZfaW1hZ2UpCi0KLSAgICAgICAgIyBPdGhlcndp
c2UgdGhlIHBvcnQncyBkZWZhdWx0IHRvbGVyYW5jZSBiZWhhdmlvciAoaW5jbHVkaW5nIGlnbm9y
aW5nIGl0KQotICAgICAgICAjIHNob3VsZCBiZSB1c2VkLgotICAgICAgICB0ZXN0X3BvcnQgPSBn
ZXRfcG9ydF9mb3JfcnVuKGJhc2VfYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25l
LCB0ZXN0X3BvcnQudG9sZXJhbmNlX3VzZWRfZm9yX2RpZmZfaW1hZ2UpCi0KLSAgICBkZWYgdGVz
dF93b3JrZXJfbW9kZWxfX2lubGluZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBh
c3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAnaW5saW5lJ10pKQotCi0gICAgZGVmIHRlc3Rf
d29ya2VyX21vZGVsX19pbmxpbmVfd2l0aF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAg
IHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywgJ2lu
bGluZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tY2hp
bGQtcHJvY2Vzc2VzJywgJzInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCi0g
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLS13b3JrZXItbW9kZWw9aW5saW5lIG92ZXJyaWRlcyAt
LWNoaWxkLXByb2Nlc3Nlc1xuJyBpbiBlcnIuZ2V0KCkpCi0KLSAgICBkZWYgdGVzdF93b3JrZXJf
bW9kZWxfX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hl
biB3ZSBmaXggdGVzdC13ZWJraXRweSB0byB3b3JrIHByb3Blcmx5Ci0gICAgICAgICMgd2l0aCB0
aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZSAoYnVnIDU0NTIwKS4KLSAgICAgICAgaWYgbXVsdGlw
cm9jZXNzaW5nIGFuZCBzeXMucGxhdGZvcm0gbm90IGluICgnY3lnd2luJywgJ3dpbjMyJyk6Ci0g
ICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcs
ICdwcm9jZXNzZXMnXSkpCi0KLSAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3Byb2Nlc3Nlc19h
bmRfZHJ5X3J1bihzZWxmKToKLSAgICAgICAgaWYgbXVsdGlwcm9jZXNzaW5nIGFuZCBzeXMucGxh
dGZvcm0gbm90IGluICgnY3lnd2luJywgJ3dpbjMyJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICdwcm9jZXNzZXMnLCAnLS1kcnkt
cnVuJ10pKQotCi0gICAgZGVmIHRlc3Rfd29ya2VyX21vZGVsX190aHJlYWRzKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICd0aHJl
YWRzJ10pKQotCi0gICAgZGVmIHRlc3Rfd29ya2VyX21vZGVsX191bmtub3duKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgWyctLXdvcmtlci1tb2RlbCcsICd1bmtub3duJ10pCi0KLSAgICBk
ZWYgdGVzdF9yZWZ0ZXN0X3J1bihzZWxmKToKLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3Rz
X3J1bihbJ3Bhc3Nlcy9yZWZ0ZXN0Lmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRl
bl9iYXRjaGVzPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL3JlZnRl
c3QuaHRtbCddLCB0ZXN0c19ydW4pCi0KLSAgICBkZWYgdGVzdF9yZWZ0ZXN0X2V4cGVjdGVkX2h0
bWxfc2hvdWxkX2JlX2lnbm9yZWQoc2VsZik6Ci0gICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0
c19ydW4oWydwYXNzZXMvcmVmdGVzdC1leHBlY3RlZC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRy
dWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwg
dGVzdHNfcnVuKQotCi0gICAgZGVmIHRlc3RfcmVmdGVzdF9kcml2ZXJfc2hvdWxkX3J1bl9leHBl
Y3RlZF9odG1sKHNlbGYpOgotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsncGFz
c2VzL3JlZnRlc3QuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9
VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX3JlZmVyZW5j
ZV9odG1sPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL3JlZnRlc3Qu
aHRtbCcsICdwYXNzZXMvcmVmdGVzdC1leHBlY3RlZC5odG1sJ10sIHRlc3RzX3J1bikKLQotICAg
IGRlZiB0ZXN0X3JlZnRlc3RfZHJpdmVyX3Nob3VsZF9ydW5fZXhwZWN0ZWRfbWlzbWF0Y2hfaHRt
bChzZWxmKToKLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ3Bhc3Nlcy9taXNt
YXRjaC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfcmVmZXJlbmNlX2h0bWw9
VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNzZXMvbWlzbWF0Y2guaHRtbCcs
ICdwYXNzZXMvbWlzbWF0Y2gtZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbCddLCB0ZXN0c19ydW4pCi0K
LSAgICBkZWYgdGVzdF9hZGRpdGlvbmFsX3BsYXRmb3JtX2RpcmVjdG9yeShzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1hZGRpdGlvbmFsLXBsYXRmb3JtLWRp
cmVjdG9yeScsICcvdG1wL2ZvbyddKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Npbmdf
cnVuKFsnLS1hZGRpdGlvbmFsLXBsYXRmb3JtLWRpcmVjdG9yeScsICcvdG1wLy4uL2ZvbyddKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1hZGRpdGlvbmFsLXBsYXRm
b3JtLWRpcmVjdG9yeScsICcvdG1wL2ZvbycsCi0gICAgICAgICAgICAnLS1hZGRpdGlvbmFsLXBs
YXRmb3JtLWRpcmVjdG9yeScsICcvdG1wL2JhciddKSkKLQotICAgICAgICByZXMsIGJ1aWxkYm90
X291dHB1dCwgcmVndWxhcl9vdXRwdXQsIHVzZXIgPSBsb2dnaW5nX3J1bigKLSAgICAgICAgICAg
ICBbJy0tYWRkaXRpb25hbC1wbGF0Zm9ybS1kaXJlY3RvcnknLCAnZm9vJ10pCi0gICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZSgnLS1hZGRpdGlvbmFsLXBsYXRmb3JtLWRpcmVjdG9yeT1mb28gaXMgaWdu
b3JlZCBzaW5jZSBpdCBpcyBub3QgYWJzb2x1dGVcbicKLSAgICAgICAgICAgICAgICAgICAgICAg
IGluIHJlZ3VsYXJfb3V0cHV0LmdldCgpKQotCi0KLU1haW5UZXN0ID0gc2tpcF9pZihNYWluVGVz
dCwgc3lzLnBsYXRmb3JtID09ICdjeWd3aW4nIGFuZCBjb21wYXJlX3ZlcnNpb24oc3lzLCAnMi42
JylbMF0gPCAwLCAnbmV3LXJ1bi13ZWJraXQtdGVzdHMgdGVzdHMgaGFuZyBvbiBDeWd3aW4gUHl0
aG9uIDIuNS4yJykKLQotCi1jbGFzcyBSZWJhc2VsaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
Ci0gICAgZGVmIGFzc2VydEJhc2VsaW5lcyhzZWxmLCBmaWxlX2xpc3QsIGZpbGUpOgotICAgICAg
ICAiYXNzZXJ0IHRoYXQgdGhlIGZpbGVfbGlzdCBjb250YWlucyB0aGUgYmFzZWxpbmVzLiIiIgot
ICAgICAgICBmb3IgZXh0IGluICgiLnR4dCIsICIucG5nIik6Ci0gICAgICAgICAgICBiYXNlbGlu
ZSA9IGZpbGUgKyAiLWV4cGVjdGVkIiArIGV4dAotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGFueShmLmZpbmQoYmFzZWxpbmUpICE9IC0xIGZvciBmIGluIGZpbGVfbGlzdCkpCi0KLSAgICAj
IEZJWE1FOiBBZGQgdGVzdHMgdG8gZW5zdXJlIHRoYXQgd2UncmUgKm5vdCogd3JpdGluZyBiYXNl
bGluZXMgd2hlbiB3ZSdyZSBub3QKLSAgICAjIHN1cHBvc2VkIHRvIGJlLgotCi0gICAgZGVmIHRl
c3RfcmVzZXRfcmVzdWx0cyhzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoYXQgd2UgdXBkYXRlIGV4
cGVjdGF0aW9ucyBpbiBwbGFjZS4gSWYgdGhlIGV4cGVjdGF0aW9uCi0gICAgICAgICMgaXMgbWlz
c2luZywgdXBkYXRlIHRoZSBleHBlY3RlZCBnZW5lcmljIGxvY2F0aW9uLgotICAgICAgICBmcyA9
IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQotICAgICAgICBwYXNzaW5nX3J1bihbJy0tcGl4
ZWwtdGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgJy0tcmVzZXQtcmVzdWx0cycsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAncGFzc2VzL2ltYWdlLmh0bWwnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UuaHRtbCddLAotICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmlsZXN5c3RlbT1mcykK
LSAgICAgICAgZmlsZV9saXN0ID0gZnMud3JpdHRlbl9maWxlcy5rZXlzKCkKLSAgICAgICAgZmls
ZV9saXN0LnJlbW92ZSgnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Rlc3RzX3J1bjAudHh0JykK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZV9saXN0KSwgNCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRCYXNlbGluZXMoZmlsZV9saXN0LCAiL3Bhc3Nlcy9pbWFnZSIpCi0gICAgICAgIHNl
bGYuYXNzZXJ0QmFzZWxpbmVzKGZpbGVfbGlzdCwgIi9mYWlsdXJlcy9leHBlY3RlZC9taXNzaW5n
X2ltYWdlIikKLQotICAgIGRlZiB0ZXN0X25ld19iYXNlbGluZShzZWxmKToKLSAgICAgICAgIyBU
ZXN0IHRoYXQgd2UgdXBkYXRlIHRoZSBwbGF0Zm9ybSBleHBlY3RhdGlvbnMuIElmIHRoZSBleHBl
Y3RhdGlvbgotICAgICAgICAjIGlzIG1zc2luZywgdGhlbiBjcmVhdGUgYSBuZXcgZXhwZWN0YXRp
b24gaW4gdGhlIHBsYXRmb3JtIGRpci4KLSAgICAgICAgZnMgPSBwb3J0LnVuaXRfdGVzdF9maWxl
c3lzdGVtKCkKLSAgICAgICAgcGFzc2luZ19ydW4oWyctLXBpeGVsLXRlc3RzJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICctLW5ldy1iYXNlbGluZScsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAncGFzc2VzL2ltYWdlLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVz
L2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UuaHRtbCddLAotICAgICAgICAgICAgICAgICAgICB0ZXN0
c19pbmNsdWRlZD1UcnVlLCBmaWxlc3lzdGVtPWZzKQotICAgICAgICBmaWxlX2xpc3QgPSBmcy53
cml0dGVuX2ZpbGVzLmtleXMoKQotICAgICAgICBmaWxlX2xpc3QucmVtb3ZlKCcvdG1wL2xheW91
dC10ZXN0LXJlc3VsdHMvdGVzdHNfcnVuMC50eHQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGxlbihmaWxlX2xpc3QpLCA0KQotICAgICAgICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxlX2xp
c3QsCi0gICAgICAgICAgICAiL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvcGFzc2VzL2ltYWdl
IikKLSAgICAgICAgc2VsZi5hc3NlcnRCYXNlbGluZXMoZmlsZV9saXN0LAotICAgICAgICAgICAg
Ii9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1h
Z2UiKQotCi0KLWNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICMgRklY
TUU6IGl0J3MgaGFyZCB0byBrbm93IHdoaWNoIHBsYXRmb3JtcyBhcmUgc2FmZSB0byB0ZXN0OyB0
aGUKLSAgICAjIGNocm9taXVtIHBsYXRmb3JtcyByZXF1aXJlIGEgY2hyb21pdW0gY2hlY2tvdXQs
IGFuZCB0aGUgbWFjIHBsYXRmb3JtCi0gICAgIyByZXF1aXJlcyBmY250bCwgc28gaXQgY2FuJ3Qg
YmUgdGVzdGVkIG9uIHdpbjMyLCBldGMuIFRoZXJlIGlzCi0gICAgIyBwcm9iYWJseSBhIGJldHRl
ciB3YXkgb2YgaGFuZGxpbmcgdGhpcy4KLSAgICBkZWYgZGlzYWJsZWRfdGVzdF9kYXJ3aW4oc2Vs
Zik6Ci0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAiZGFyd2luIjoKLSAgICAgICAgICAgIHJl
dHVybgotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0n
LCAnZHJ5cnVuJywgJ2Zhc3QvaHRtbCddLAotICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0t
cGxhdGZvcm0nLCAnZHJ5cnVuLW1hYycsICdmYXN0L2h0bWwnXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUpKQotCi0gICAgZGVmIHRlc3RfdGVzdChzZWxmKToK
LSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScsICdkcnly
dW4tdGVzdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0t
cGl4ZWwtdGVzdHMnXSkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0
dGVzdC5tYWluKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CShyZXZpc2lv
biA4NTk2NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0zNywxMyArMzcsMTMgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAKICAgICAi
IiJEaXNjb3ZlcnMgYW5kIHJ1bnMgd2Via2l0cHkgdW5pdCB0ZXN0cy4iIiIKIAotICAgIGRlZiBf
ZmluZF91bml0dGVzdF9maWxlcyhzZWxmLCB3ZWJraXRweV9kaXIpOgorICAgIGRlZiBfZmluZF91
bml0dGVzdF9maWxlcyhzZWxmLCB3ZWJraXRweV9kaXIsIHN1ZmZpeCk6CiAgICAgICAgICIiIlJl
dHVybiBhIGxpc3Qgb2YgcGF0aHMgdG8gYWxsIHVuaXQtdGVzdCBmaWxlcy4iIiIKICAgICAgICAg
dW5pdHRlc3RfcGF0aHMgPSBbXSAgIyBSZXR1cm4gdmFsdWUuCiAKICAgICAgICAgZm9yIGRpcl9w
YXRoLCBkaXJfbmFtZXMsIGZpbGVfbmFtZXMgaW4gb3Mud2Fsayh3ZWJraXRweV9kaXIpOgogICAg
ICAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBmaWxlX25hbWVzOgotICAgICAgICAgICAgICAgIGlm
IG5vdCBmaWxlX25hbWUuZW5kc3dpdGgoIl91bml0dGVzdC5weSIpOgorICAgICAgICAgICAgICAg
IGlmIG5vdCBmaWxlX25hbWUuZW5kc3dpdGgoc3VmZml4KToKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWUKICAgICAgICAgICAgICAgICB1bml0dGVzdF9wYXRoID0gb3MucGF0aC5qb2luKGRp
cl9wYXRoLCBmaWxlX25hbWUpCiAgICAgICAgICAgICAgICAgdW5pdHRlc3RfcGF0aHMuYXBwZW5k
KHVuaXR0ZXN0X3BhdGgpCkBAIC0xMjIsOSArMTIyLDE2IEBAIGNsYXNzIFRlc3RlcihvYmplY3Qp
OgogICAgICAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjb21iaW5lZCB3aXRoIHRoZSBleHRl
cm5hbF9wYWNrYWdlX3BhdGhzIGNvZGUgYWJvdmUuCiAgICAgICAgIHdlYmtpdHB5X2RpciA9IG9z
LnBhdGguZGlybmFtZSh3ZWJraXRweS5fX2ZpbGVfXykKIAorICAgICAgICBza2lwX2ludGVncmF0
aW9uX3Rlc3RzID0gRmFsc2UKKyAgICAgICAgaWYgbGVuKHN5c19hcmd2KSA+IDEgYW5kIHN5cy5h
cmd2WzFdID09ICItLXNraXAtaW50ZWdyYXRpb250ZXN0cyI6CisgICAgICAgICAgICBzeXMuYXJn
di5yZW1vdmUoIi0tc2tpcC1pbnRlZ3JhdGlvbnRlc3RzIikKKyAgICAgICAgICAgIHNraXBfaW50
ZWdyYXRpb25fdGVzdHMgPSBUcnVlCisKICAgICAgICAgbW9kdWxlcyA9IFtdCiAgICAgICAgIGZv
ciBwYXRoIGluIFt3ZWJraXRweV9kaXJdICsgZXh0ZXJuYWxfcGFja2FnZV9wYXRoczoKLSAgICAg
ICAgICAgIG1vZHVsZXMuZXh0ZW5kKHNlbGYuX21vZHVsZXNfZnJvbV9wYXRocyhwYXRoLCBzZWxm
Ll9maW5kX3VuaXR0ZXN0X2ZpbGVzKHBhdGgpKSkKKyAgICAgICAgICAgIG1vZHVsZXMuZXh0ZW5k
KHNlbGYuX21vZHVsZXNfZnJvbV9wYXRocyhwYXRoLCBzZWxmLl9maW5kX3VuaXR0ZXN0X2ZpbGVz
KHBhdGgsICJfdW5pdHRlc3QucHkiKSkpCisgICAgICAgICAgICBpZiBub3Qgc2tpcF9pbnRlZ3Jh
dGlvbl90ZXN0czoKKyAgICAgICAgICAgICAgICBtb2R1bGVzLmV4dGVuZChzZWxmLl9tb2R1bGVz
X2Zyb21fcGF0aHMocGF0aCwgc2VsZi5fZmluZF91bml0dGVzdF9maWxlcyhwYXRoLCAiX2ludGVn
cmF0aW9udGVzdC5weSIpKSkKICAgICAgICAgbW9kdWxlcy5zb3J0KCkKIAogICAgICAgICAjIFRo
aXMgaXMgYSBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHVuaXQtdGVzdCBkaXNjb3Zl
cnkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92621</attachid>
            <date>2011-05-06 12:12:11 -0700</date>
            <delta_ts>2011-05-06 12:14:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60354-20110506121210.patch</filename>
            <type>text/plain</type>
            <size>71298</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg1OTY1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjQgQEAKKzIwMTEtMDUtMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSAtLXNr
aXAtaW50ZWdyYXRpb250ZXN0cyBtb2RlIHRvIHRlc3Qtd2Via2l0cHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzU0CisKKyAgICAgICAgVGhlc2Ug
dHdvIHRlc3Qgc3VpdGVzIGFjY291bnQgZm9yIDIvMyBvZiB0ZXN0LXdlYmtpdHB5J3MgcnVubmlu
ZyB0aW1lCisgICAgICAgIGJlY2F1c2UgdGhleSdyZSBub3QgYWN0dWFsbHkgdW5pdCB0ZXN0cy4g
IFRoZXkncmUgaW50ZWdyYXRpb24gdGVzdHMuCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGUg
YWJpbGl0eSB0byBza2lwIGludGVncmF0aW9uIHRlc3RzIGJ5IHBhc3NpbmcgYQorICAgICAgICBj
b21tYW5kIGxpbmUgYXJndW1lbnQgdG8gdGVzdC13ZWJraXRweS4gIFRoZSBidWlsZGJvdHMgd2ls
bCBjb250aW51ZSB0bworICAgICAgICBydW4gdGhlc2UgaW50ZWdyYXRpb24gdGVzdHMgdG8gbWFr
ZSBzdXJlIHRoZXkgZG9uJ3QgcmVncmVzcy4gIFRoaXMKKyAgICAgICAgb3B0aW9uIGlzIGZvciB1
c2UgYnkgZGV2ZWxvcGVycyB3aGVuIHdvcmtpbmcgb24gcGFydHMgb2YgdGhlIGNvZGUgdGhhdAor
ICAgICAgICBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHVuaXQgdGVzdHMuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZV9sb2NrX2ludGVncmF0aW9udGVzdC5weTog
Q29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVfbG9j
a191bml0dGVzdC5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZV9sb2NrX3VuaXR0ZXN0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5OiBDb3Bp
ZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzX3VuaXR0ZXN0LnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS90ZXN0L21haW4ucHk6CisKIDIwMTEtMDUtMDYgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlX2xvY2tfaW50ZWdyYXRp
b250ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9maWxlX2xvY2tfaW50ZWdyYXRpb250ZXN0LnB5CShyZXZpc2lvbiA4NTk2NCkJKGZyb20g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVfbG9ja191bml0dGVzdC5w
eTo4NTk2NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlX2xv
Y2tfaW50ZWdyYXRpb250ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR2Fib3IgUmFwY3Nhbnlp
IChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyMKKyMgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklW
RVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIE9SCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorIyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisjIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uZmlsZV9sb2NrIGltcG9ydCBGaWxlTG9jaworCisKK2NsYXNzIEZp
bGVMb2NrVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6Cisg
ICAgICAgIHNlbGYuX2xvY2tfbmFtZSA9ICJUZXN0V2ViS2l0IiArIHN0cihvcy5nZXRwaWQoKSkg
KyAiLmxvY2siCisgICAgICAgIHNlbGYuX2xvY2tfcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmls
ZS5nZXR0ZW1wZGlyKCksIHNlbGYuX2xvY2tfbmFtZSkKKyAgICAgICAgc2VsZi5fZmlsZV9sb2Nr
MSA9IEZpbGVMb2NrKHNlbGYuX2xvY2tfcGF0aCwgMSkKKyAgICAgICAgc2VsZi5fZmlsZV9sb2Nr
MiA9IEZpbGVMb2NrKHNlbGYuX2xvY2tfcGF0aCwgMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxm
KToKKyAgICAgICAgc2VsZi5fZmlsZV9sb2NrMS5yZWxlYXNlX2xvY2soKQorICAgICAgICBzZWxm
Ll9maWxlX2xvY2syLnJlbGVhc2VfbG9jaygpCisKKyAgICBkZWYgdGVzdF9sb2NrX2xpZmVjeWNs
ZShzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgdGhlIGxvY2suCisgICAgICAgIHNlbGYuX2ZpbGVf
bG9jazEuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhp
c3RzKHNlbGYuX2xvY2tfcGF0aCkpCisKKyAgICAgICAgIyBUcnkgdG8gbG9jayBhZ2Fpbi4KKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLl9maWxlX2xvY2syLmFjcXVpcmVfbG9jaygpKQor
CisgICAgICAgICMgUmVsZWFzZSB0aGUgbG9jay4KKyAgICAgICAgc2VsZi5fZmlsZV9sb2NrMS5y
ZWxlYXNlX2xvY2soKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNl
bGYuX2xvY2tfcGF0aCkpCisKKyAgICBkZWYgdGVzdF9zdHVja19sb2NrKHNlbGYpOgorICAgICAg
ICBvcGVuKHNlbGYuX2xvY2tfcGF0aCwgJ3cnKS5jbG9zZSgpCisgICAgICAgIHNlbGYuX2ZpbGVf
bG9jazEuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgc2VsZi5fZmlsZV9sb2NrMS5yZWxlYXNlX2xv
Y2soKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVfbG9j
a191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vZmlsZV9sb2NrX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA4NTk2NCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlX2xvY2tfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsNjEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENv
cHlyaWdodCAoQykgMjAxMCBHYWJvciBSYXBjc2FueWkgKHJnYWJvckBpbmYudS1zemVnZWQuaHUp
LCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotIwotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMn
JyBBTkQgQU5ZCi0jIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0jIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0jIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSMgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0j
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgb3MKLWltcG9ydCB0ZW1wZmls
ZQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlX2xv
Y2sgaW1wb3J0IEZpbGVMb2NrCi0KLQotY2xhc3MgRmlsZUxvY2tUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5fbG9ja19uYW1lID0g
IlRlc3RXZWJLaXQiICsgc3RyKG9zLmdldHBpZCgpKSArICIubG9jayIKLSAgICAgICAgc2VsZi5f
bG9ja19wYXRoID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgc2VsZi5fbG9j
a19uYW1lKQotICAgICAgICBzZWxmLl9maWxlX2xvY2sxID0gRmlsZUxvY2soc2VsZi5fbG9ja19w
YXRoLCAxKQotICAgICAgICBzZWxmLl9maWxlX2xvY2syID0gRmlsZUxvY2soc2VsZi5fbG9ja19w
YXRoLCAxKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxmLl9maWxlX2xv
Y2sxLnJlbGVhc2VfbG9jaygpCi0gICAgICAgIHNlbGYuX2ZpbGVfbG9jazIucmVsZWFzZV9sb2Nr
KCkKLQotICAgIGRlZiB0ZXN0X2xvY2tfbGlmZWN5Y2xlKHNlbGYpOgotICAgICAgICAjIENyZWF0
ZSB0aGUgbG9jay4KLSAgICAgICAgc2VsZi5fZmlsZV9sb2NrMS5hY3F1aXJlX2xvY2soKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5fbG9ja19wYXRoKSkKLQot
ICAgICAgICAjIFRyeSB0byBsb2NrIGFnYWluLgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNl
bGYuX2ZpbGVfbG9jazIuYWNxdWlyZV9sb2NrKCkpCi0KLSAgICAgICAgIyBSZWxlYXNlIHRoZSBs
b2NrLgotICAgICAgICBzZWxmLl9maWxlX2xvY2sxLnJlbGVhc2VfbG9jaygpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5fbG9ja19wYXRoKSkKLQotICAgIGRl
ZiB0ZXN0X3N0dWNrX2xvY2soc2VsZik6Ci0gICAgICAgIG9wZW4oc2VsZi5fbG9ja19wYXRoLCAn
dycpLmNsb3NlKCkKLSAgICAgICAgc2VsZi5fZmlsZV9sb2NrMS5hY3F1aXJlX2xvY2soKQotICAg
ICAgICBzZWxmLl9maWxlX2xvY2sxLnJlbGVhc2VfbG9jaygpCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQkocmV2aXNpb24gODU5NjQpCShmcm9tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRl
c3QucHk6ODU5NjQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY3MiBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMCBHYWJvciBSYXBj
c2FueWkgKHJnYWJvckBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorIyBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworIiIiVW5pdCB0ZXN0cyBmb3IgcnVuX3dlYmtpdF90ZXN0cy4iIiIKKwor
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQgY29kZWNzCitp
bXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgUXVldWUK
K2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWQKK2ltcG9ydCB0aW1lCitpbXBvcnQgdGhyZWFkaW5n
CitpbXBvcnQgdW5pdHRlc3QKKwordHJ5OgorICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2V4
Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBtdWx0aXByb2Nlc3NpbmcgPSBOb25lCisKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uIGltcG9ydCBhcnJheV9zdHJlYW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGlt
cG9ydCBmaWxlc3lzdGVtX21vY2sKK2Zyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgbW9ja3Rvb2wK
K2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Citmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cworZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMucG9ydC50ZXN0IGltcG9ydCBUZXN0UG9ydCwgVGVzdERyaXZlcgorZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydC50ZXN0X2ZpbGVzIGltcG9ydCBpc19yZWZlcmVuY2VfaHRtbF9m
aWxlCitmcm9tIHdlYmtpdHB5LnB5dGhvbjI0LnZlcnNpb25pbmcgaW1wb3J0IGNvbXBhcmVfdmVy
c2lvbgorZnJvbSB3ZWJraXRweS50ZXN0LnNraXAgaW1wb3J0IHNraXBfaWYKKworZnJvbSB3ZWJr
aXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKKworCitkZWYgcGFyc2VfYXJncyhleHRy
YV9hcmdzPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLCB0ZXN0c19pbmNsdWRlZD1GYWxzZSwK
KyAgICAgICAgICAgICAgIHByaW50X25vdGhpbmc9VHJ1ZSk6CisgICAgZXh0cmFfYXJncyA9IGV4
dHJhX2FyZ3Mgb3IgW10KKyAgICBpZiBwcmludF9ub3RoaW5nOgorICAgICAgICBhcmdzID0gWyct
LXByaW50JywgJ25vdGhpbmcnXQorICAgIGVsc2U6CisgICAgICAgIGFyZ3MgPSBbXQorICAgIGlm
IG5vdCAnLS1wbGF0Zm9ybScgaW4gZXh0cmFfYXJnczoKKyAgICAgICAgYXJncy5leHRlbmQoWyct
LXBsYXRmb3JtJywgJ3Rlc3QnXSkKKyAgICBpZiBub3QgcmVjb3JkX3Jlc3VsdHM6CisgICAgICAg
IGFyZ3MuYXBwZW5kKCctLW5vLXJlY29yZC1yZXN1bHRzJykKKyAgICBpZiBub3QgJy0tY2hpbGQt
cHJvY2Vzc2VzJyBpbiBleHRyYV9hcmdzIGFuZCBub3QgJy0td29ya2VyLW1vZGVsJyBpbiBleHRy
YV9hcmdzOgorICAgICAgICBhcmdzLmV4dGVuZChbJy0td29ya2VyLW1vZGVsJywgJ2lubGluZSdd
KQorICAgIGFyZ3MuZXh0ZW5kKGV4dHJhX2FyZ3MpCisgICAgaWYgbm90IHRlc3RzX2luY2x1ZGVk
OgorICAgICAgICAjIFdlIHVzZSB0aGUgZ2xvYiB0byB0ZXN0IHRoYXQgZ2xvYmJpbmcgd29ya3Mu
CisgICAgICAgIGFyZ3MuZXh0ZW5kKFsncGFzc2VzJywKKyAgICAgICAgICAgICAgICAgICAgICdo
dHRwL3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICd3ZWJzb2NrZXQvdGVzdHMnLAorICAg
ICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkLyonXSkKKyAgICByZXR1cm4gcnVu
X3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdzKGFyZ3MpCisKKworZGVmIHBhc3NpbmdfcnVuKGV4dHJh
X2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgcmVjb3JkX3Jlc3VsdHM9RmFsc2UsCisgICAgICAg
ICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGZpbGVzeXN0ZW09Tm9uZSk6CisgICAgb3B0
aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKGV4dHJhX2FyZ3MsIHJlY29yZF9yZXN1bHRz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZCkK
KyAgICBpZiBub3QgcG9ydF9vYmo6CisgICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQocG9ydF9u
YW1lPW9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnM9b3B0aW9ucywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1c2VyPW1vY2t0b29sLk1vY2tVc2VyKCksIGZpbGVzeXN0ZW09ZmlsZXN5c3Rl
bSkKKyAgICByZXMgPSBydW5fd2Via2l0X3Rlc3RzLnJ1bihwb3J0X29iaiwgb3B0aW9ucywgcGFy
c2VkX2FyZ3MpCisgICAgcmV0dXJuIHJlcyA9PSAwCisKKworZGVmIGxvZ2dpbmdfcnVuKGV4dHJh
X2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgcmVjb3JkX3Jlc3VsdHM9RmFsc2UsIHRlc3RzX2lu
Y2x1ZGVkPUZhbHNlLCBmaWxlc3lzdGVtPU5vbmUpOgorICAgIG9wdGlvbnMsIHBhcnNlZF9hcmdz
ID0gcGFyc2VfYXJncyhleHRyYV9hcmdzPWV4dHJhX2FyZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY29yZF9yZXN1bHRzPXJlY29yZF9yZXN1bHRzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD10ZXN0c19pbmNs
dWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfbm90aGlu
Zz1GYWxzZSkKKyAgICB1c2VyID0gbW9ja3Rvb2wuTW9ja1VzZXIoKQorICAgIGlmIG5vdCBwb3J0
X29iajoKKyAgICAgICAgcG9ydF9vYmogPSBwb3J0LmdldChwb3J0X25hbWU9b3B0aW9ucy5wbGF0
Zm9ybSwgb3B0aW9ucz1vcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9
dXNlciwgZmlsZXN5c3RlbT1maWxlc3lzdGVtKQorCisgICAgcmVzLCBidWlsZGJvdF9vdXRwdXQs
IHJlZ3VsYXJfb3V0cHV0ID0gcnVuX2FuZF9jYXB0dXJlKHBvcnRfb2JqLCBvcHRpb25zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZWRfYXJncykKKyAgICByZXR1cm4gKHJlcywgYnVpbGRib3Rfb3V0cHV0LCByZWd1bGFyX291
dHB1dCwgdXNlcikKKworCitkZWYgcnVuX2FuZF9jYXB0dXJlKHBvcnRfb2JqLCBvcHRpb25zLCBw
YXJzZWRfYXJncyk6CisgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAg
IHRyeToKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICBidWlsZGJvdF9vdXRw
dXQgPSBhcnJheV9zdHJlYW0uQXJyYXlTdHJlYW0oKQorICAgICAgICByZWd1bGFyX291dHB1dCA9
IGFycmF5X3N0cmVhbS5BcnJheVN0cmVhbSgpCisgICAgICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVz
dHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRfYXJncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnVpbGRib3Rfb3V0cHV0PWJ1aWxkYm90X291dHB1dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhcl9vdXRwdXQ9cmVndWxhcl9vdXRw
dXQpCisgICAgZmluYWxseToKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQorICAgIHJldHVy
biAocmVzLCBidWlsZGJvdF9vdXRwdXQsIHJlZ3VsYXJfb3V0cHV0KQorCisKK2RlZiBnZXRfdGVz
dHNfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGZsYXR0ZW5fYmF0
Y2hlcz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW09Tm9uZSwgaW5jbHVkZV9y
ZWZlcmVuY2VfaHRtbD1GYWxzZSk6CisgICAgZXh0cmFfYXJncyA9IGV4dHJhX2FyZ3Mgb3IgW10K
KyAgICBpZiBub3QgdGVzdHNfaW5jbHVkZWQ6CisgICAgICAgICMgTm90IGluY2x1ZGluZyBodHRw
IHRlc3RzIHNpbmNlIHRoZXkgZ2V0IHJ1biBvdXQgb2Ygb3JkZXIgKHRoYXQKKyAgICAgICAgIyBi
ZWhhdmlvciBoYXMgaXRzIG93biB0ZXN0LCBzZWUgdGVzdF9nZXRfdGVzdF9maWxlX3F1ZXVlKQor
ICAgICAgICBleHRyYV9hcmdzID0gWydwYXNzZXMnLCAnZmFpbHVyZXMnXSArIGV4dHJhX2FyZ3MK
KyAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHBhcnNlX2FyZ3MoZXh0cmFfYXJncywgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSkKKworICAgIHVzZXIgPSBtb2NrdG9vbC5Nb2NrVXNlcigpCisKKyAgICB0
ZXN0X2JhdGNoZXMgPSBbXQorCisKKyAgICBjbGFzcyBSZWNvcmRpbmdUZXN0RHJpdmVyKFRlc3RE
cml2ZXIpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgd29ya2VyX251bWJlcik6
CisgICAgICAgICAgICBUZXN0RHJpdmVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1i
ZXIpCisgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfYmF0Y2ggPSBOb25lCisKKyAgICAg
ICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgICAgICAjIFNvIHRoYXQgd2UgZG9uJ3QgY3JlYXRl
IGEgbmV3IGRyaXZlciBmb3IgZXZlcnkgdGVzdAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgICAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9i
YXRjaCA9IE5vbmUKKworICAgICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6Cisg
ICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X3Rlc3RfYmF0Y2ggaXMgTm9uZToKKyAgICAgICAg
ICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfYmF0Y2ggPSBbXQorICAgICAgICAgICAgICAgIHRl
c3RfYmF0Y2hlcy5hcHBlbmQoc2VsZi5fY3VycmVudF90ZXN0X2JhdGNoKQorICAgICAgICAgICAg
dGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQu
ZmlsZW5hbWUpCisgICAgICAgICAgICAjIEluIGNhc2Ugb2YgcmVmdGVzdCwgb25lIHRlc3QgY2Fs
bHMgdGhlIGRyaXZlcidzIHJ1bl90ZXN0KCkgdHdpY2UuCisgICAgICAgICAgICAjIFdlIHNob3Vs
ZCBub3QgYWRkIGEgcmVmZXJlbmNlIGh0bWwgdXNlZCBieSByZWZ0ZXN0cyB0byB0ZXN0cyB1bmxl
c3MgaW5jbHVkZV9yZWZlcmVuY2VfaHRtbCBwYXJhbWV0ZXIKKyAgICAgICAgICAgICMgaXMgZXhw
bGljaXRseSBnaXZlbi4KKyAgICAgICAgICAgIGlmIGluY2x1ZGVfcmVmZXJlbmNlX2h0bWwgb3Ig
bm90IGlzX3JlZmVyZW5jZV9odG1sX2ZpbGUodGVzdF9pbnB1dC5maWxlbmFtZSk6CisgICAgICAg
ICAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X2JhdGNoLmFwcGVuZCh0ZXN0X25hbWUpCisgICAg
ICAgICAgICByZXR1cm4gVGVzdERyaXZlci5ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KQorCisg
ICAgY2xhc3MgUmVjb3JkaW5nVGVzdFBvcnQoVGVzdFBvcnQpOgorICAgICAgICBkZWYgY3JlYXRl
X2RyaXZlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgICAgIHJldHVybiBSZWNvcmRp
bmdUZXN0RHJpdmVyKHNlbGYsIHdvcmtlcl9udW1iZXIpCisKKyAgICByZWNvcmRpbmdfcG9ydCA9
IFJlY29yZGluZ1Rlc3RQb3J0KG9wdGlvbnM9b3B0aW9ucywgdXNlcj11c2VyLCBmaWxlc3lzdGVt
PWZpbGVzeXN0ZW0pCisgICAgcnVuX2FuZF9jYXB0dXJlKHJlY29yZGluZ19wb3J0LCBvcHRpb25z
LCBwYXJzZWRfYXJncykKKworICAgIGlmIGZsYXR0ZW5fYmF0Y2hlczoKKyAgICAgICAgcmV0dXJu
IGxpc3QoaXRlcnRvb2xzLmNoYWluKCp0ZXN0X2JhdGNoZXMpKQorCisgICAgcmV0dXJuIHRlc3Rf
YmF0Y2hlcworCisKK2NsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYg
dGVzdF9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyhzZWxmKToKKyAgICAgICAgIyBUaGlzIGp1c3Qg
dGVzdHMgdGhhdCB3ZSByZWNvZ25pemUgdGhlIGNvbW1hbmQgbGluZSBhcmdzCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tYWNjZWxlcmF0ZWQtY29tcG9zaXRpbmcnXSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tbm8tYWNjZWxlcmF0ZWQt
Y29tcG9zaXRpbmcnXSkpCisKKyAgICBkZWYgdGVzdF9hY2NlbGVyYXRlZF8yZF9jYW52YXMoc2Vs
Zik6CisgICAgICAgICMgVGhpcyBqdXN0IHRlc3RzIHRoYXQgd2UgcmVjb2duaXplIHRoZSBjb21t
YW5kIGxpbmUgYXJncworICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLWFj
Y2VsZXJhdGVkLTJkLWNhbnZhcyddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Npbmdf
cnVuKFsnLS1uby1hY2NlbGVyYXRlZC0yZC1jYW52YXMnXSkpCisKKyAgICBkZWYgdGVzdF9iYXNp
YyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKCkpCisKKyAgICBk
ZWYgdGVzdF9iYXRjaF9zaXplKHNlbGYpOgorICAgICAgICBiYXRjaF90ZXN0c19ydW4gPSBnZXRf
dGVzdHNfcnVuKFsnLS1iYXRjaC1zaXplJywgJzInXSkKKyAgICAgICAgZm9yIGJhdGNoIGluIGJh
dGNoX3Rlc3RzX3J1bjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oYmF0Y2gpIDw9
IDIsICclcyBoYWQgdG9vIG1hbnkgdGVzdHMnICUgJywgJy5qb2luKGJhdGNoKSkKKworICAgIGRl
ZiB0ZXN0X2NoaWxkX3Byb2Nlc3NfMShzZWxmKToKKyAgICAgICAgXywgXywgcmVndWxhcl9vdXRw
dXQsIF8gPSBsb2dnaW5nX3J1bigKKyAgICAgICAgICAgICBbJy0tcHJpbnQnLCAnY29uZmlnJywg
Jy0td29ya2VyLW1vZGVsJywgJ3RocmVhZHMnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMSddKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KFsnUnVubmluZyAxICcgaW4gbGluZSBmb3IgbGlu
ZSBpbiByZWd1bGFyX291dHB1dC5nZXQoKV0pKQorCisgICAgZGVmIHRlc3RfY2hpbGRfcHJvY2Vz
c2VzXzIoc2VsZik6CisgICAgICAgIF8sIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0gbG9nZ2luZ19y
dW4oCisgICAgICAgICAgICAgWyctLXByaW50JywgJ2NvbmZpZycsICctLXdvcmtlci1tb2RlbCcs
ICd0aHJlYWRzJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzInXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKGFueShbJ1J1bm5pbmcgMiAnIGluIGxpbmUgZm9yIGxpbmUgaW4gcmVndWxhcl9vdXRw
dXQuZ2V0KCldKSkKKworICAgIGRlZiB0ZXN0X2NoaWxkX3Byb2Nlc3Nlc19taW4oc2VsZik6Cisg
ICAgICAgIF8sIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0gbG9nZ2luZ19ydW4oCisgICAgICAgICAg
ICAgWyctLXByaW50JywgJ2NvbmZpZycsICctLXdvcmtlci1tb2RlbCcsICd0aHJlYWRzJywgJy0t
Y2hpbGQtcHJvY2Vzc2VzJywgJzInLCAncGFzc2VzJ10sCisgICAgICAgICAgICAgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueShbJ1J1bm5pbmcgMSAnIGlu
IGxpbmUgZm9yIGxpbmUgaW4gcmVndWxhcl9vdXRwdXQuZ2V0KCldKSkKKworICAgIGRlZiB0ZXN0
X2RyeXJ1bihzZWxmKToKKyAgICAgICAgYmF0Y2hfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihb
Jy0tZHJ5LXJ1biddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhdGNoX3Rlc3RzX3J1biwg
W10pCisKKyAgICAgICAgYmF0Y2hfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy1uJ10pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF0Y2hfdGVzdHNfcnVuLCBbXSkKKworICAgIGRlZiB0
ZXN0X2V4Y2VwdGlvbl9yYWlzZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IsIGxvZ2dpbmdfcnVuLAorICAgICAgICAgICAgWydmYWlsdXJlcy9leHBlY3RlZC9l
eGNlcHRpb24uaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQorCisgICAgZGVmIHRlc3RfZnVs
bF9yZXN1bHRzX2h0bWwoc2VsZik6CisgICAgICAgICMgRklYTUU6IHZlcmlmeSBodG1sPworICAg
ICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLWZ1bGwtcmVzdWx0cy1o
dG1sJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAwKQorCisgICAgZGVmIHRlc3Rf
aGVscF9wcmludGluZyhzZWxmKToKKyAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dp
bmdfcnVuKFsnLS1oZWxwLXByaW50aW5nJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVz
LCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9odW5nX3RocmVhZChzZWxm
KToKKyAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1ydW4tc2lu
Z2x5JywgJy0tdGltZS1vdXQtbXM9NTAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL2hhbmcuaHRtbCddLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3V0
LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCisKKyAgICBk
ZWYgdGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgICMgTm90ZSB0aGF0IHRo
aXMgYWxzbyB0ZXN0cyBydW5uaW5nIGEgdGVzdCBtYXJrZWQgYXMgU0tJUCBpZgorICAgICAgICAj
IHlvdSBzcGVjaWZ5IGl0IGV4cGxpY2l0bHkuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtl
eWJvYXJkSW50ZXJydXB0LCBsb2dnaW5nX3J1biwKKyAgICAgICAgICAgIFsnZmFpbHVyZXMvZXhw
ZWN0ZWQva2V5Ym9hcmQuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQorCisgICAgZGVmIHRl
c3Rfa2V5Ym9hcmRfaW50ZXJydXB0X2lubGluZV93b3JrZXJfbW9kZWwoc2VsZik6CisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBsb2dnaW5nX3J1biwKKyAgICAg
ICAgICAgIFsnZmFpbHVyZXMvZXhwZWN0ZWQva2V5Ym9hcmQuaHRtbCcsICctLXdvcmtlci1tb2Rl
bCcsICdpbmxpbmUnXSwKKyAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUpCisKKyAgICBk
ZWYgdGVzdF9sYXN0X3Jlc3VsdHMoc2VsZik6CisgICAgICAgIGZzID0gcG9ydC51bml0X3Rlc3Rf
ZmlsZXN5c3RlbSgpCisgICAgICAgICMgV2UgZG8gYSBsb2dnaW5nIHJ1biBoZXJlIGluc3RlYWQg
b2YgYSBwYXNzaW5nIHJ1biBpbiBvcmRlciB0bworICAgICAgICAjIHN1cHByZXNzIHRoZSBvdXRw
dXQgZnJvbSB0aGUganNvbiBnZW5lcmF0b3IuCisgICAgICAgIHJlcywgYnVpbGRib3Rfb3V0cHV0
LCByZWd1bGFyX291dHB1dCwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1jbG9iYmVyLW9sZC1yZXN1
bHRzJ10sIHJlY29yZF9yZXN1bHRzPVRydWUsIGZpbGVzeXN0ZW09ZnMpCisgICAgICAgIHJlcywg
YnVpbGRib3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCwgdXNlciA9IGxvZ2dpbmdfcnVuKAorICAg
ICAgICAgICAgWyctLXByaW50LWxhc3QtZmFpbHVyZXMnXSwgZmlsZXN5c3RlbT1mcykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChyZWd1bGFyX291dHB1dC5nZXQoKSwgWydcblxuJ10pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGRib3Rfb3V0cHV0LmdldCgpLCBbXSkKKworICAgIGRl
ZiB0ZXN0X2xpbnRfdGVzdF9maWxlcyhzZWxmKToKKyAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNl
ciA9IGxvZ2dpbmdfcnVuKFsnLS1saW50LXRlc3QtZmlsZXMnXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChyZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueShbJ0xpbnQgc3VjY2VlZGVkJyBpbiBtc2cgZm9yIG1z
ZyBpbiBlcnIuZ2V0KCldKSkKKworICAgIGRlZiB0ZXN0X2xpbnRfdGVzdF9maWxlc19fZXJyb3Jz
KHNlbGYpOgorICAgICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHBhcnNlX2FyZ3MoWyctLWxp
bnQtdGVzdC1maWxlcyddKQorICAgICAgICB1c2VyID0gbW9ja3Rvb2wuTW9ja1VzZXIoKQorICAg
ICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnM9b3B0aW9u
cywgdXNlcj11c2VyKQorICAgICAgICBwb3J0X29iai50ZXN0X2V4cGVjdGF0aW9ucyA9IGxhbWJk
YTogIiMgc3ludGF4IGVycm9yIgorICAgICAgICByZXMsIG91dCwgZXJyID0gcnVuX2FuZF9jYXB0
dXJlKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRfYXJncykKKworICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHJlcywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW1wdHkoKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueShbJ0xpbnQgZmFpbGVkJyBpbiBtc2cgZm9yIG1zZyBp
biBlcnIuZ2V0KCldKSkKKworICAgIGRlZiB0ZXN0X25vX3Rlc3RzX2ZvdW5kKHNlbGYpOgorICAg
ICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWydyZXNvdXJjZXMnXSwgdGVz
dHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIC0xKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZSgnTm8gdGVzdHMgdG8gcnVuLlxuJyBpbiBlcnIuZ2V0KCkpCisKKyAgICBkZWYgdGVzdF9ub190
ZXN0c19mb3VuZF8yKHNlbGYpOgorICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2lu
Z19ydW4oWydmb28nXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChyZXMsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnTm8gdGVzdHMgdG8gcnVuLlxuJyBpbiBlcnIuZ2V0KCkpCisK
KyAgICBkZWYgdGVzdF9yYW5kb21pemVfb3JkZXIoc2VsZik6CisgICAgICAgICMgRklYTUU6IHZl
cmlmeSBvcmRlciB3YXMgc2h1ZmZsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Npbmdf
cnVuKFsnLS1yYW5kb21pemUtb3JkZXInXSkpCisKKyAgICBkZWYgdGVzdF9nY19iZXR3ZWVuX3Rl
c3RzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLWdjLWJl
dHdlZW4tdGVzdHMnXSkpCisKKyAgICBkZWYgdGVzdF9jb21wbGV4X3RleHQoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tY29tcGxleC10ZXh0J10pKQorCisg
ICAgZGVmIHRlc3RfdGhyZWFkZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNz
aW5nX3J1bihbJy0tdGhyZWFkZWQnXSkpCisKKyAgICBkZWYgdGVzdF9ydW5fY2h1bmsoc2VsZik6
CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGFjdHVhbGx5IHNlbGVjdCB0aGUgcmlnaHQgY2h1bmsK
KyAgICAgICAgYWxsX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oZmxhdHRlbl9iYXRjaGVzPVRy
dWUpCisgICAgICAgIGNodW5rX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXJ1bi1jaHVu
aycsICcxOjQnXSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKGFsbF90ZXN0c19ydW5bNDo4XSwgY2h1bmtfdGVzdHNfcnVuKQorCisgICAgICAgICMgVGVz
dCB0aGF0IHdlIHdyYXAgYXJvdW5kIGlmIHRoZSBudW1iZXIgb2YgdGVzdHMgaXMgbm90IGV2ZW5s
eSBkaXZpc2libGUgYnkgdGhlIGNodW5rIHNpemUKKyAgICAgICAgdGVzdHNfdG9fcnVuID0gWydw
YXNzZXMvZXJyb3IuaHRtbCcsICdwYXNzZXMvaW1hZ2UuaHRtbCcsICdwYXNzZXMvcGxhdGZvcm1f
aW1hZ2UuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJ10KKyAgICAgICAgY2h1bmtfdGVzdHNfcnVu
ID0gZ2V0X3Rlc3RzX3J1bihbJy0tcnVuLWNodW5rJywgJzE6MyddICsgdGVzdHNfdG9fcnVuLCB0
ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoWydwYXNzZXMvdGV4dC5odG1sJywgJ3Bhc3Nlcy9lcnJvci5odG1sJywgJ3Bh
c3Nlcy9pbWFnZS5odG1sJ10sIGNodW5rX3Rlc3RzX3J1bikKKworICAgIGRlZiB0ZXN0X3J1bl9m
b3JjZShzZWxmKToKKyAgICAgICAgIyBUaGlzIHJhaXNlcyBhbiBleGNlcHRpb24gYmVjYXVzZSB3
ZSBydW4KKyAgICAgICAgIyBmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCwgd2hpY2gg
aXMgbm9ybWFsbHkgU0tJUHBlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
ciwgbG9nZ2luZ19ydW4sIFsnLS1mb3JjZSddKQorCisgICAgZGVmIHRlc3RfcnVuX3BhcnQoc2Vs
Zik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGFjdHVhbGx5IHNlbGVjdCB0aGUgcmlnaHQgcGFy
dAorICAgICAgICB0ZXN0c190b19ydW4gPSBbJ3Bhc3Nlcy9lcnJvci5odG1sJywgJ3Bhc3Nlcy9p
bWFnZS5odG1sJywgJ3Bhc3Nlcy9wbGF0Zm9ybV9pbWFnZS5odG1sJywgJ3Bhc3Nlcy90ZXh0Lmh0
bWwnXQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1ydW4tcGFydCcsICcx
OjInXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVz
PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL2Vycm9yLmh0bWwnLCAn
cGFzc2VzL2ltYWdlLmh0bWwnXSwgdGVzdHNfcnVuKQorCisgICAgICAgICMgVGVzdCB0aGF0IHdl
IHdyYXAgYXJvdW5kIGlmIHRoZSBudW1iZXIgb2YgdGVzdHMgaXMgbm90IGV2ZW5seSBkaXZpc2li
bGUgYnkgdGhlIGNodW5rIHNpemUKKyAgICAgICAgIyAoaGVyZSB3ZSBlbmQgdXAgd2l0aCAzIHBh
cnRzLCBlYWNoIHdpdGggMiB0ZXN0cywgYW5kIHdlIG9ubHkgaGF2ZSA0IHRlc3RzIHRvdGFsLCBz
byB0aGUKKyAgICAgICAgIyBsYXN0IHBhcnQgcmVwZWF0cyB0aGUgZmlyc3QgdHdvIHRlc3RzKS4K
KyAgICAgICAgY2h1bmtfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tcnVuLXBhcnQnLCAn
MzozJ10gKyB0ZXN0c190b19ydW4sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hl
cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy9lcnJvci5odG1sJywg
J3Bhc3Nlcy9pbWFnZS5odG1sJ10sIGNodW5rX3Rlc3RzX3J1bikKKworICAgIGRlZiB0ZXN0X3J1
bl9zaW5nbHkoc2VsZik6CisgICAgICAgIGJhdGNoX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4o
WyctLXJ1bi1zaW5nbHknXSkKKyAgICAgICAgZm9yIGJhdGNoIGluIGJhdGNoX3Rlc3RzX3J1bjoK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihiYXRjaCksIDEsICclcyBoYWQgdG9v
IG1hbnkgdGVzdHMnICUgJywgJy5qb2luKGJhdGNoKSkKKworICAgIGRlZiB0ZXN0X3NraXBfZmFp
bGluZ190ZXN0cyhzZWxmKToKKyAgICAgICAgYmF0Y2hlcyA9IGdldF90ZXN0c19ydW4oWyctLXNr
aXAtZmFpbGluZy10ZXN0cyddKQorICAgICAgICBoYXNfcGFzc2VzX3RleHQgPSBGYWxzZQorICAg
ICAgICBmb3IgYmF0Y2ggaW4gYmF0Y2hlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
J2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCcgaW4gYmF0Y2gpCisgICAgICAgICAgICBoYXNf
cGFzc2VzX3RleHQgPSBoYXNfcGFzc2VzX3RleHQgb3IgKCdwYXNzZXMvdGV4dC5odG1sJyBpbiBi
YXRjaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc19wYXNzZXNfdGV4dCkKKworICAgIGRl
ZiB0ZXN0X3J1bl9zaW5nbHlfYWN0dWFsbHlfcnVuc190ZXN0cyhzZWxmKToKKyAgICAgICAgcmVz
LCBfLCBfLCBfID0gbG9nZ2luZ19ydW4oWyctLXJ1bi1zaW5nbHknLCAnZmFpbHVyZXMvdW5leHBl
Y3RlZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMsIDUpCisKKyAgICBkZWYgdGVz
dF9zaW5nbGVfZmlsZShzZWxmKToKKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihb
J3Bhc3Nlcy90ZXh0Lmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVz
PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL3RleHQuaHRtbCddLCB0
ZXN0c19ydW4pCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfZmlsZV93aXRoX3ByZWZpeChzZWxmKToK
KyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ0xheW91dFRlc3RzL3Bhc3Nlcy90
ZXh0Lmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL3RleHQuaHRtbCddLCB0ZXN0c19ydW4p
CisKKyAgICBkZWYgdGVzdF9zaW5nbGVfc2tpcHBlZF9maWxlKHNlbGYpOgorICAgICAgICB0ZXN0
c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnZmFpbHVyZXMvZXhwZWN0ZWQva2V5YmFvcmQuaHRtbCdd
LCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoW10sIHRlc3RzX3J1bikKKworICAgIGRlZiB0ZXN0X3N0ZGVycl9pc19z
YXZlZChzZWxmKToKKyAgICAgICAgZnMgPSBwb3J0LnVuaXRfdGVzdF9maWxlc3lzdGVtKCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKGZpbGVzeXN0ZW09ZnMpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhmcy5yZWFkX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQtdGVzdC1y
ZXN1bHRzL3Bhc3Nlcy9lcnJvci1zdGRlcnIudHh0JyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICdzdHVmZiBnb2luZyB0byBzdGRlcnInKQorCisgICAgZGVmIHRlc3RfdGVzdF9saXN0KHNl
bGYpOgorICAgICAgICBmcyA9IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQorICAgICAgICBm
aWxlbmFtZSA9ICcvdG1wL2Zvby50eHQnCisgICAgICAgIGZzLndyaXRlX3RleHRfZmlsZShmaWxl
bmFtZSwgJ3Bhc3Nlcy90ZXh0Lmh0bWwnKQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNf
cnVuKFsnLS10ZXN0LWxpc3Q9JXMnICUgZmlsZW5hbWVdLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBm
bGF0dGVuX2JhdGNoZXM9VHJ1ZSwgZmlsZXN5c3RlbT1mcykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoWydwYXNzZXMvdGV4dC5odG1sJ10sIHRlc3RzX3J1bikKKyAgICAgICAgZnMucmVtb3Zl
KGZpbGVuYW1lKQorICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWyct
LXRlc3QtbGlzdD0lcycgJSBmaWxlbmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmaWxlc3lzdGVtPWZzKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHJlcywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJy
LmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF90ZXN0X2xpc3Rfd2l0aF9wcmVmaXgoc2VsZik6Cisg
ICAgICAgIGZzID0gcG9ydC51bml0X3Rlc3RfZmlsZXN5c3RlbSgpCisgICAgICAgIGZpbGVuYW1l
ID0gJy90bXAvZm9vLnR4dCcKKyAgICAgICAgZnMud3JpdGVfdGV4dF9maWxlKGZpbGVuYW1lLCAn
TGF5b3V0VGVzdHMvcGFzc2VzL3RleHQuaHRtbCcpCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90
ZXN0c19ydW4oWyctLXRlc3QtbGlzdD0lcycgJSBmaWxlbmFtZV0sIHRlc3RzX2luY2x1ZGVkPVRy
dWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlLCBmaWxlc3lzdGVtPWZzKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhbJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSwgdGVzdHNfcnVuKQorCisgICAgZGVmIHRl
c3RfdW5leHBlY3RlZF9mYWlsdXJlcyhzZWxmKToKKyAgICAgICAgIyBSdW4gdGVzdHMgaW5jbHVk
aW5nIHRoZSB1bmV4cGVjdGVkIGZhaWx1cmVzLgorICAgICAgICBzZWxmLl91cmxfb3BlbmVkID0g
Tm9uZQorICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4odGVzdHNfaW5j
bHVkZWQ9VHJ1ZSkKKworICAgICAgICAjIFVwZGF0ZSB0aGlzIG1hZ2ljIG51bWJlciBpZiB5b3Ug
YWRkIGFuIHVuZXhwZWN0ZWQgdGVzdCB0byB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC50ZXN0
CisgICAgICAgICMgRklYTUU6IEl0J3MgbmljZSB0byBoYXZlIGEgcm91dGluZSBpbiBwb3J0L3Rl
c3QucHkgdGhhdCByZXR1cm5zIHRoaXMgbnVtYmVyLgorICAgICAgICB1bmV4cGVjdGVkX3Rlc3Rz
X2NvdW50ID0gNQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCB1bmV4cGVjdGVkX3Rl
c3RzX2NvdW50KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHVzZXIub3BlbmVkX3VybHMsIFsnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Jlc3VsdHMuaHRt
bCddKQorCisgICAgZGVmIHRlc3RfZXhpdF9hZnRlcl9uX2ZhaWx1cmVzX3VwbG9hZChzZWxmKToK
KyAgICAgICAgZnMgPSBwb3J0LnVuaXRfdGVzdF9maWxlc3lzdGVtKCkKKyAgICAgICAgcmVzLCBi
dWlsZGJvdF9vdXRwdXQsIHJlZ3VsYXJfb3V0cHV0LCB1c2VyID0gbG9nZ2luZ19ydW4oWworICAg
ICAgICAgICAgICAgICdmYWlsdXJlcy91bmV4cGVjdGVkL3RleHQtaW1hZ2UtY2hlY2tzdW0uaHRt
bCcsCisgICAgICAgICAgICAgICAgJ3Bhc3Nlcy90ZXh0Lmh0bWwnLAorICAgICAgICAgICAgICAg
ICctLWV4aXQtYWZ0ZXItbi1mYWlsdXJlcycsICcxJywKKyAgICAgICAgICAgIF0sCisgICAgICAg
ICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLAorICAgICAgICAgICAgcmVjb3JkX3Jlc3VsdHM9VHJ1
ZSwKKyAgICAgICAgICAgIGZpbGVzeXN0ZW09ZnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgn
L3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2luY3JlbWVudGFsX3Jlc3VsdHMuanNvbicgaW4gZnMu
ZmlsZXMpCisKKyAgICBkZWYgdGVzdF9leGl0X2FmdGVyX25fZmFpbHVyZXMoc2VsZik6CisgICAg
ICAgICMgVW5leHBlY3RlZCBmYWlsdXJlcyBzaG91bGQgcmVzdWx0IGluIHRlc3RzIHN0b3BwaW5n
LgorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsKKyAgICAgICAgICAgICAgICAn
ZmFpbHVyZXMvdW5leHBlY3RlZC90ZXh0LWltYWdlLWNoZWNrc3VtLmh0bWwnLAorICAgICAgICAg
ICAgICAgICdwYXNzZXMvdGV4dC5odG1sJywKKyAgICAgICAgICAgICAgICAnLS1leGl0LWFmdGVy
LW4tZmFpbHVyZXMnLCAnMScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwKKyAgICAgICAgICAgIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhbJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvdGV4dC1pbWFnZS1jaGVja3N1
bS5odG1sJ10sIHRlc3RzX3J1bikKKworICAgICAgICAjIEJ1dCB3ZSdsbCBrZWVwIGdvaW5nIGZv
ciBleHBlY3RlZCBvbmVzLgorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsKKyAg
ICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5odG1sJywKKyAgICAgICAgICAg
ICAgICAncGFzc2VzL3RleHQuaHRtbCcsCisgICAgICAgICAgICAgICAgJy0tZXhpdC1hZnRlci1u
LWZhaWx1cmVzJywgJzEnLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHRlc3RzX2luY2x1
ZGVkPVRydWUsCisgICAgICAgICAgICBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoWydmYWlsdXJlcy9leHBlY3RlZC90ZXh0Lmh0bWwnLCAncGFzc2VzL3Rl
eHQuaHRtbCddLCB0ZXN0c19ydW4pCisKKyAgICBkZWYgdGVzdF9leGl0X2FmdGVyX25fY3Jhc2hl
cyhzZWxmKToKKyAgICAgICAgIyBVbmV4cGVjdGVkIGNyYXNoZXMgc2hvdWxkIHJlc3VsdCBpbiB0
ZXN0cyBzdG9wcGluZy4KKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCisgICAg
ICAgICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvY3Jhc2guaHRtbCcsCisgICAgICAgICAg
ICAgICAgJ3Bhc3Nlcy90ZXh0Lmh0bWwnLAorICAgICAgICAgICAgICAgICctLWV4aXQtYWZ0ZXIt
bi1jcmFzaGVzLW9yLXRpbWVvdXRzJywgJzEnLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
IHRlc3RzX2luY2x1ZGVkPVRydWUsCisgICAgICAgICAgICBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydmYWlsdXJlcy91bmV4cGVjdGVkL2NyYXNoLmh0
bWwnXSwgdGVzdHNfcnVuKQorCisgICAgICAgICMgU2FtZSB3aXRoIHRpbWVvdXRzLgorICAgICAg
ICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsKKyAgICAgICAgICAgICAgICAnZmFpbHVyZXMv
dW5leHBlY3RlZC90aW1lb3V0Lmh0bWwnLAorICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC5o
dG1sJywKKyAgICAgICAgICAgICAgICAnLS1leGl0LWFmdGVyLW4tY3Jhc2hlcy1vci10aW1lb3V0
cycsICcxJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVl
LAorICAgICAgICAgICAgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKFsnZmFpbHVyZXMvdW5leHBlY3RlZC90aW1lb3V0Lmh0bWwnXSwgdGVzdHNfcnVuKQor
CisgICAgICAgICMgQnV0IHdlJ2xsIGtlZXAgZ29pbmcgZm9yIGV4cGVjdGVkIG9uZXMuCisgICAg
ICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWworICAgICAgICAgICAgICAgICdmYWlsdXJl
cy9leHBlY3RlZC9jcmFzaC5odG1sJywKKyAgICAgICAgICAgICAgICAncGFzc2VzL3RleHQuaHRt
bCcsCisgICAgICAgICAgICAgICAgJy0tZXhpdC1hZnRlci1uLWNyYXNoZXMtb3ItdGltZW91dHMn
LCAnMScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwK
KyAgICAgICAgICAgIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhbJ2ZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCdd
LCB0ZXN0c19ydW4pCisKKyAgICBkZWYgdGVzdF9leGl0X2FmdGVyX25fY3Jhc2hlc19pbmxpbmVf
d29ya2VyX21vZGVsKHNlbGYpOgorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsK
KyAgICAgICAgICAgICAgICAnZmFpbHVyZXMvdW5leHBlY3RlZC90aW1lb3V0Lmh0bWwnLAorICAg
ICAgICAgICAgICAgICdwYXNzZXMvdGV4dC5odG1sJywKKyAgICAgICAgICAgICAgICAnLS1leGl0
LWFmdGVyLW4tY3Jhc2hlcy1vci10aW1lb3V0cycsICcxJywKKyAgICAgICAgICAgICAgICAnLS13
b3JrZXItbW9kZWwnLCAnaW5saW5lJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB0ZXN0
c19pbmNsdWRlZD1UcnVlLAorICAgICAgICAgICAgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnZmFpbHVyZXMvdW5leHBlY3RlZC90aW1lb3V0Lmh0bWwn
XSwgdGVzdHNfcnVuKQorCisgICAgZGVmIHRlc3RfcmVzdWx0c19kaXJlY3RvcnlfYWJzb2x1dGUo
c2VsZik6CisgICAgICAgICMgV2UgcnVuIGEgY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBmYWls
LCB0byBnZW5lcmF0ZSBvdXRwdXQsIHRoZW4KKyAgICAgICAgIyBsb29rIGZvciB3aGF0IHRoZSBv
dXRwdXQgcmVzdWx0cyB1cmwgd2FzLgorCisgICAgICAgIGZzID0gcG9ydC51bml0X3Rlc3RfZmls
ZXN5c3RlbSgpCisgICAgICAgIHdpdGggZnMubWtkdGVtcCgpIGFzIHRtcGRpcjoKKyAgICAgICAg
ICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1bihbJy0tcmVzdWx0cy1kaXJlY3Rv
cnk9JyArIHN0cih0bXBkaXIpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmaWxlc3lzdGVtPWZzKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCh1c2VyLm9wZW5lZF91cmxzLCBbZnMuam9pbih0bXBkaXIsICdy
ZXN1bHRzLmh0bWwnKV0pCisKKyAgICBkZWYgdGVzdF9yZXN1bHRzX2RpcmVjdG9yeV9kZWZhdWx0
KHNlbGYpOgorICAgICAgICAjIFdlIHJ1biBhIGNvbmZpZ3VyYXRpb24gdGhhdCBzaG91bGQgZmFp
bCwgdG8gZ2VuZXJhdGUgb3V0cHV0LCB0aGVuCisgICAgICAgICMgbG9vayBmb3Igd2hhdCB0aGUg
b3V0cHV0IHJlc3VsdHMgdXJsIHdhcy4KKworICAgICAgICAjIFRoaXMgaXMgdGhlIGRlZmF1bHQg
bG9jYXRpb24uCisgICAgICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1bih0ZXN0
c19pbmNsdWRlZD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVzZXIub3BlbmVkX3Vy
bHMsIFsnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Jlc3VsdHMuaHRtbCddKQorCisgICAgZGVm
IHRlc3RfcmVzdWx0c19kaXJlY3RvcnlfcmVsYXRpdmUoc2VsZik6CisgICAgICAgICMgV2UgcnVu
IGEgY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBmYWlsLCB0byBnZW5lcmF0ZSBvdXRwdXQsIHRo
ZW4KKyAgICAgICAgIyBsb29rIGZvciB3aGF0IHRoZSBvdXRwdXQgcmVzdWx0cyB1cmwgd2FzLgor
ICAgICAgICBmcyA9IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQorICAgICAgICBmcy5tYXli
ZV9tYWtlX2RpcmVjdG9yeSgnL3RtcC9jd2QnKQorICAgICAgICBmcy5jaGRpcignL3RtcC9jd2Qn
KQorICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLXJlc3VsdHMt
ZGlyZWN0b3J5PWZvbyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmlsZXN5c3RlbT1mcykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCh1c2VyLm9wZW5lZF91cmxzLCBbJy90bXAvY3dkL2Zvby9yZXN1bHRzLmh0bWwnXSkK
KworICAgICMgVGhlc2UgbmV4dCB0ZXN0cyB0ZXN0IHRoYXQgd2UgcnVuIHRoZSB0ZXN0cyBpbiBh
c2NlbmRpbmcgYWxwaGFiZXRpY2FsCisgICAgIyBvcmRlciBwZXIgZGlyZWN0b3J5LiBIVFRQIHRl
c3RzIGFyZSBzaGFyZGVkIHNlcGFyYXRlbHkgZnJvbSBvdGhlciB0ZXN0cywKKyAgICAjIHNvIHdl
IGhhdmUgdG8gdGVzdCBib3RoLgorICAgIGRlZiBhc3NlcnRfcnVuX29yZGVyKHNlbGYsIHdvcmtl
cl9tb2RlbCwgY2hpbGRfcHJvY2Vzc2VzPScxJyk6CisgICAgICAgIHRlc3RzX3J1biA9IGdldF90
ZXN0c19ydW4oWyctLXdvcmtlci1tb2RlbCcsIHdvcmtlcl9tb2RlbCwKKyAgICAgICAgICAgICct
LWNoaWxkLXByb2Nlc3NlcycsIGNoaWxkX3Byb2Nlc3NlcywgJ3Bhc3NlcyddLAorICAgICAgICAg
ICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHRlc3RzX3J1biwgc29ydGVkKHRlc3RzX3J1bikpCisKKyAgICAgICAg
dGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0td29ya2VyLW1vZGVsJywgd29ya2VyX21vZGVs
LAorICAgICAgICAgICAgJy0tY2hpbGQtcHJvY2Vzc2VzJywgY2hpbGRfcHJvY2Vzc2VzLCAnaHR0
cC90ZXN0cy9wYXNzZXMnXSwKKyAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0
ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0ZXN0c19ydW4sIHNv
cnRlZCh0ZXN0c19ydW4pKQorCisgICAgZGVmIHRlc3RfcnVuX29yZGVyX19pbmxpbmUoc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0X3J1bl9vcmRlcignaW5saW5lJykKKworICAgIGRlZiB0ZXN0
X3RvbGVyYW5jZShzZWxmKToKKyAgICAgICAgY2xhc3MgSW1hZ2VEaWZmVGVzdFBvcnQoVGVzdFBv
cnQpOgorICAgICAgICAgICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfY29udGVudHMs
IGFjdHVhbF9jb250ZW50cywKKyAgICAgICAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lPU5vbmUp
OgorICAgICAgICAgICAgICAgIHNlbGYudG9sZXJhbmNlX3VzZWRfZm9yX2RpZmZfaW1hZ2UgPSBz
ZWxmLl9vcHRpb25zLnRvbGVyYW5jZQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICAgICAgZGVmIGdldF9wb3J0X2Zvcl9ydW4oYXJncyk6CisgICAgICAgICAgICBvcHRpb25zLCBw
YXJzZWRfYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhhcmdzKQorICAgICAgICAg
ICAgdGVzdF9wb3J0ID0gSW1hZ2VEaWZmVGVzdFBvcnQob3B0aW9ucz1vcHRpb25zLCB1c2VyPW1v
Y2t0b29sLk1vY2tVc2VyKCkpCisgICAgICAgICAgICBwYXNzaW5nX3J1bihhcmdzLCBwb3J0X29i
aj10ZXN0X3BvcnQsIHRlc3RzX2luY2x1ZGVkPVRydWUpCisgICAgICAgICAgICByZXR1cm4gdGVz
dF9wb3J0CisKKyAgICAgICAgYmFzZV9hcmdzID0gWyctLXBpeGVsLXRlc3RzJywgJ2ZhaWx1cmVz
L2V4cGVjdGVkLyonXQorCisgICAgICAgICMgSWYgd2UgcGFzcyBpbiBhbiBleHBsaWNpdCB0b2xl
cmFuY2UgYXJndW1lbnQsIHRoZW4gdGhhdCB3aWxsIGJlIHVzZWQuCisgICAgICAgIHRlc3RfcG9y
dCA9IGdldF9wb3J0X2Zvcl9ydW4oYmFzZV9hcmdzICsgWyctLXRvbGVyYW5jZScsICcuMSddKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuMSwgdGVzdF9wb3J0LnRvbGVyYW5jZV91c2VkX2Zv
cl9kaWZmX2ltYWdlKQorICAgICAgICB0ZXN0X3BvcnQgPSBnZXRfcG9ydF9mb3JfcnVuKGJhc2Vf
YXJncyArIFsnLS10b2xlcmFuY2UnLCAnMCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAs
IHRlc3RfcG9ydC50b2xlcmFuY2VfdXNlZF9mb3JfZGlmZl9pbWFnZSkKKworICAgICAgICAjIE90
aGVyd2lzZSB0aGUgcG9ydCdzIGRlZmF1bHQgdG9sZXJhbmNlIGJlaGF2aW9yIChpbmNsdWRpbmcg
aWdub3JpbmcgaXQpCisgICAgICAgICMgc2hvdWxkIGJlIHVzZWQuCisgICAgICAgIHRlc3RfcG9y
dCA9IGdldF9wb3J0X2Zvcl9ydW4oYmFzZV9hcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KE5vbmUsIHRlc3RfcG9ydC50b2xlcmFuY2VfdXNlZF9mb3JfZGlmZl9pbWFnZSkKKworICAgIGRl
ZiB0ZXN0X3dvcmtlcl9tb2RlbF9faW5saW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRy
dWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICdpbmxpbmUnXSkpCisKKyAgICBkZWYg
dGVzdF93b3JrZXJfbW9kZWxfX2lubGluZV93aXRoX2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKKyAg
ICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwn
LCAnaW5saW5lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
LS1jaGlsZC1wcm9jZXNzZXMnLCAnMiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywg
MCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCctLXdvcmtlci1tb2RlbD1pbmxpbmUgb3ZlcnJp
ZGVzIC0tY2hpbGQtcHJvY2Vzc2VzXG4nIGluIGVyci5nZXQoKSkKKworICAgIGRlZiB0ZXN0X3dv
cmtlcl9tb2RlbF9fcHJvY2Vzc2VzKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiByZW1vdmUgdGhp
cyB3aGVuIHdlIGZpeCB0ZXN0LXdlYmtpdHB5IHRvIHdvcmsgcHJvcGVybHkKKyAgICAgICAgIyB3
aXRoIHRoZSBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlIChidWcgNTQ1MjApLgorICAgICAgICBpZiBt
dWx0aXByb2Nlc3NpbmcgYW5kIHN5cy5wbGF0Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAnd2luMzIn
KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1v
ZGVsJywgJ3Byb2Nlc3NlcyddKSkKKworICAgIGRlZiB0ZXN0X3dvcmtlcl9tb2RlbF9fcHJvY2Vz
c2VzX2FuZF9kcnlfcnVuKHNlbGYpOgorICAgICAgICBpZiBtdWx0aXByb2Nlc3NpbmcgYW5kIHN5
cy5wbGF0Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAnd2luMzInKToKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywgJ3Byb2Nlc3NlcycsICct
LWRyeS1ydW4nXSkpCisKKyAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3RocmVhZHMoc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywg
J3RocmVhZHMnXSkpCisKKyAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3Vua25vd24oc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBbJy0td29ya2VyLW1vZGVsJywgJ3Vua25vd24nXSkKKwor
ICAgIGRlZiB0ZXN0X3JlZnRlc3RfcnVuKHNlbGYpOgorICAgICAgICB0ZXN0c19ydW4gPSBnZXRf
dGVzdHNfcnVuKFsncGFzc2VzL3JlZnRlc3QuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBm
bGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNzZXMv
cmVmdGVzdC5odG1sJ10sIHRlc3RzX3J1bikKKworICAgIGRlZiB0ZXN0X3JlZnRlc3RfZXhwZWN0
ZWRfaHRtbF9zaG91bGRfYmVfaWdub3JlZChzZWxmKToKKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0
X3Rlc3RzX3J1bihbJ3Bhc3Nlcy9yZWZ0ZXN0LWV4cGVjdGVkLmh0bWwnXSwgdGVzdHNfaW5jbHVk
ZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KFtdLCB0ZXN0c19ydW4pCisKKyAgICBkZWYgdGVzdF9yZWZ0ZXN0X2RyaXZlcl9zaG91bGRfcnVu
X2V4cGVjdGVkX2h0bWwoc2VsZik6CisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4o
WydwYXNzZXMvcmVmdGVzdC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0
Y2hlcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfcmVm
ZXJlbmNlX2h0bWw9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNzZXMvcmVm
dGVzdC5odG1sJywgJ3Bhc3Nlcy9yZWZ0ZXN0LWV4cGVjdGVkLmh0bWwnXSwgdGVzdHNfcnVuKQor
CisgICAgZGVmIHRlc3RfcmVmdGVzdF9kcml2ZXJfc2hvdWxkX3J1bl9leHBlY3RlZF9taXNtYXRj
aF9odG1sKHNlbGYpOgorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsncGFzc2Vz
L21pc21hdGNoLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRy
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9yZWZlcmVuY2Vf
aHRtbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy9taXNtYXRjaC5o
dG1sJywgJ3Bhc3Nlcy9taXNtYXRjaC1leHBlY3RlZC1taXNtYXRjaC5odG1sJ10sIHRlc3RzX3J1
bikKKworICAgIGRlZiB0ZXN0X2FkZGl0aW9uYWxfcGxhdGZvcm1fZGlyZWN0b3J5KHNlbGYpOgor
ICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLWFkZGl0aW9uYWwtcGxhdGZv
cm0tZGlyZWN0b3J5JywgJy90bXAvZm9vJ10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFz
c2luZ19ydW4oWyctLWFkZGl0aW9uYWwtcGxhdGZvcm0tZGlyZWN0b3J5JywgJy90bXAvLi4vZm9v
J10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLWFkZGl0aW9uYWwt
cGxhdGZvcm0tZGlyZWN0b3J5JywgJy90bXAvZm9vJywKKyAgICAgICAgICAgICctLWFkZGl0aW9u
YWwtcGxhdGZvcm0tZGlyZWN0b3J5JywgJy90bXAvYmFyJ10pKQorCisgICAgICAgIHJlcywgYnVp
bGRib3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCwgdXNlciA9IGxvZ2dpbmdfcnVuKAorICAgICAg
ICAgICAgIFsnLS1hZGRpdGlvbmFsLXBsYXRmb3JtLWRpcmVjdG9yeScsICdmb28nXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKCctLWFkZGl0aW9uYWwtcGxhdGZvcm0tZGlyZWN0b3J5PWZvbyBp
cyBpZ25vcmVkIHNpbmNlIGl0IGlzIG5vdCBhYnNvbHV0ZVxuJworICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gcmVndWxhcl9vdXRwdXQuZ2V0KCkpCisKKworTWFpblRlc3QgPSBza2lwX2lmKE1h
aW5UZXN0LCBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbicgYW5kIGNvbXBhcmVfdmVyc2lvbihzeXMs
ICcyLjYnKVswXSA8IDAsICduZXctcnVuLXdlYmtpdC10ZXN0cyB0ZXN0cyBoYW5nIG9uIEN5Z3dp
biBQeXRob24gMi41LjInKQorCisKK2NsYXNzIFJlYmFzZWxpbmVUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKKyAgICBkZWYgYXNzZXJ0QmFzZWxpbmVzKHNlbGYsIGZpbGVfbGlzdCwgZmlsZSk6Cisg
ICAgICAgICJhc3NlcnQgdGhhdCB0aGUgZmlsZV9saXN0IGNvbnRhaW5zIHRoZSBiYXNlbGluZXMu
IiIiCisgICAgICAgIGZvciBleHQgaW4gKCIudHh0IiwgIi5wbmciKToKKyAgICAgICAgICAgIGJh
c2VsaW5lID0gZmlsZSArICItZXhwZWN0ZWQiICsgZXh0CisgICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoYW55KGYuZmluZChiYXNlbGluZSkgIT0gLTEgZm9yIGYgaW4gZmlsZV9saXN0KSkKKwor
ICAgICMgRklYTUU6IEFkZCB0ZXN0cyB0byBlbnN1cmUgdGhhdCB3ZSdyZSAqbm90KiB3cml0aW5n
IGJhc2VsaW5lcyB3aGVuIHdlJ3JlIG5vdAorICAgICMgc3VwcG9zZWQgdG8gYmUuCisKKyAgICBk
ZWYgdGVzdF9yZXNldF9yZXN1bHRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB3ZSB1cGRh
dGUgZXhwZWN0YXRpb25zIGluIHBsYWNlLiBJZiB0aGUgZXhwZWN0YXRpb24KKyAgICAgICAgIyBp
cyBtaXNzaW5nLCB1cGRhdGUgdGhlIGV4cGVjdGVkIGdlbmVyaWMgbG9jYXRpb24uCisgICAgICAg
IGZzID0gcG9ydC51bml0X3Rlc3RfZmlsZXN5c3RlbSgpCisgICAgICAgIHBhc3NpbmdfcnVuKFsn
LS1waXhlbC10ZXN0cycsCisgICAgICAgICAgICAgICAgICAgICAgICAnLS1yZXNldC1yZXN1bHRz
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvaW1hZ2UuaHRtbCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZS5odG1sJ10s
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmaWxlc3lzdGVt
PWZzKQorICAgICAgICBmaWxlX2xpc3QgPSBmcy53cml0dGVuX2ZpbGVzLmtleXMoKQorICAgICAg
ICBmaWxlX2xpc3QucmVtb3ZlKCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvdGVzdHNfcnVuMC50
eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxlX2xpc3QpLCA0KQorICAgICAg
ICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxlX2xpc3QsICIvcGFzc2VzL2ltYWdlIikKKyAgICAg
ICAgc2VsZi5hc3NlcnRCYXNlbGluZXMoZmlsZV9saXN0LCAiL2ZhaWx1cmVzL2V4cGVjdGVkL21p
c3NpbmdfaW1hZ2UiKQorCisgICAgZGVmIHRlc3RfbmV3X2Jhc2VsaW5lKHNlbGYpOgorICAgICAg
ICAjIFRlc3QgdGhhdCB3ZSB1cGRhdGUgdGhlIHBsYXRmb3JtIGV4cGVjdGF0aW9ucy4gSWYgdGhl
IGV4cGVjdGF0aW9uCisgICAgICAgICMgaXMgbXNzaW5nLCB0aGVuIGNyZWF0ZSBhIG5ldyBleHBl
Y3RhdGlvbiBpbiB0aGUgcGxhdGZvcm0gZGlyLgorICAgICAgICBmcyA9IHBvcnQudW5pdF90ZXN0
X2ZpbGVzeXN0ZW0oKQorICAgICAgICBwYXNzaW5nX3J1bihbJy0tcGl4ZWwtdGVzdHMnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgJy0tbmV3LWJhc2VsaW5lJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICdwYXNzZXMvaW1hZ2UuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnZmFp
bHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZS5odG1sJ10sCisgICAgICAgICAgICAgICAgICAg
IHRlc3RzX2luY2x1ZGVkPVRydWUsIGZpbGVzeXN0ZW09ZnMpCisgICAgICAgIGZpbGVfbGlzdCA9
IGZzLndyaXR0ZW5fZmlsZXMua2V5cygpCisgICAgICAgIGZpbGVfbGlzdC5yZW1vdmUoJy90bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy90ZXN0c19ydW4wLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobGVuKGZpbGVfbGlzdCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0QmFzZWxpbmVzKGZp
bGVfbGlzdCwKKyAgICAgICAgICAgICIvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9wYXNzZXMv
aW1hZ2UiKQorICAgICAgICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxlX2xpc3QsCisgICAgICAg
ICAgICAiL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2lu
Z19pbWFnZSIpCisKKworY2xhc3MgRHJ5cnVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
IyBGSVhNRTogaXQncyBoYXJkIHRvIGtub3cgd2hpY2ggcGxhdGZvcm1zIGFyZSBzYWZlIHRvIHRl
c3Q7IHRoZQorICAgICMgY2hyb21pdW0gcGxhdGZvcm1zIHJlcXVpcmUgYSBjaHJvbWl1bSBjaGVj
a291dCwgYW5kIHRoZSBtYWMgcGxhdGZvcm0KKyAgICAjIHJlcXVpcmVzIGZjbnRsLCBzbyBpdCBj
YW4ndCBiZSB0ZXN0ZWQgb24gd2luMzIsIGV0Yy4gVGhlcmUgaXMKKyAgICAjIHByb2JhYmx5IGEg
YmV0dGVyIHdheSBvZiBoYW5kbGluZyB0aGlzLgorICAgIGRlZiBkaXNhYmxlZF90ZXN0X2Rhcndp
bihzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJkYXJ3aW4iOgorICAgICAgICAg
ICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0
Zm9ybScsICdkcnlydW4nLCAnZmFzdC9odG1sJ10sCisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0c19pbmNsdWRlZD1UcnVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVu
KFsnLS1wbGF0Zm9ybScsICdkcnlydW4tbWFjJywgJ2Zhc3QvaHRtbCddLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkpCisKKyAgICBkZWYgdGVzdF90ZXN0KHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXBsYXRmb3JtJywg
J2RyeXJ1bi10ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnLS1waXhlbC10ZXN0cyddKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAg
IHVuaXR0ZXN0Lm1haW4oKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiA4NTk2NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcyICswLDAg
QEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR2Fib3IgUmFwY3Nhbnlp
IChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSMgQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLSIiIlVuaXQgdGVzdHMgZm9yIHJ1bl93ZWJraXRfdGVzdHMuIiIiCi0KLWZyb20g
X19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKLQotaW1wb3J0IGNvZGVjcwotaW1wb3J0
IGl0ZXJ0b29scwotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IFF1ZXVlCi1pbXBv
cnQgc3lzCi1pbXBvcnQgdGhyZWFkCi1pbXBvcnQgdGltZQotaW1wb3J0IHRocmVhZGluZwotaW1w
b3J0IHVuaXR0ZXN0Ci0KLXRyeToKLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCi1leGNlcHQg
SW1wb3J0RXJyb3I6Ci0gICAgbXVsdGlwcm9jZXNzaW5nID0gTm9uZQotCi1mcm9tIHdlYmtpdHB5
LmNvbW1vbiBpbXBvcnQgYXJyYXlfc3RyZWFtCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0g
aW1wb3J0IG91dHB1dGNhcHR1cmUKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQg
ZmlsZXN5c3RlbV9tb2NrCi1mcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IG1vY2t0b29sCi1mcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAotZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnBvcnQudGVzdCBpbXBvcnQgVGVzdFBvcnQsIFRlc3REcml2ZXIKLWZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnBvcnQudGVzdF9maWxlcyBpbXBvcnQgaXNfcmVmZXJlbmNlX2h0bWxfZmlsZQot
ZnJvbSB3ZWJraXRweS5weXRob24yNC52ZXJzaW9uaW5nIGltcG9ydCBjb21wYXJlX3ZlcnNpb24K
LWZyb20gd2Via2l0cHkudGVzdC5za2lwIGltcG9ydCBza2lwX2lmCi0KLWZyb20gd2Via2l0cHku
dGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCi0KLQotZGVmIHBhcnNlX2FyZ3MoZXh0cmFfYXJn
cz1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsCi0gICAg
ICAgICAgICAgICBwcmludF9ub3RoaW5nPVRydWUpOgotICAgIGV4dHJhX2FyZ3MgPSBleHRyYV9h
cmdzIG9yIFtdCi0gICAgaWYgcHJpbnRfbm90aGluZzoKLSAgICAgICAgYXJncyA9IFsnLS1wcmlu
dCcsICdub3RoaW5nJ10KLSAgICBlbHNlOgotICAgICAgICBhcmdzID0gW10KLSAgICBpZiBub3Qg
Jy0tcGxhdGZvcm0nIGluIGV4dHJhX2FyZ3M6Ci0gICAgICAgIGFyZ3MuZXh0ZW5kKFsnLS1wbGF0
Zm9ybScsICd0ZXN0J10pCi0gICAgaWYgbm90IHJlY29yZF9yZXN1bHRzOgotICAgICAgICBhcmdz
LmFwcGVuZCgnLS1uby1yZWNvcmQtcmVzdWx0cycpCi0gICAgaWYgbm90ICctLWNoaWxkLXByb2Nl
c3NlcycgaW4gZXh0cmFfYXJncyBhbmQgbm90ICctLXdvcmtlci1tb2RlbCcgaW4gZXh0cmFfYXJn
czoKLSAgICAgICAgYXJncy5leHRlbmQoWyctLXdvcmtlci1tb2RlbCcsICdpbmxpbmUnXSkKLSAg
ICBhcmdzLmV4dGVuZChleHRyYV9hcmdzKQotICAgIGlmIG5vdCB0ZXN0c19pbmNsdWRlZDoKLSAg
ICAgICAgIyBXZSB1c2UgdGhlIGdsb2IgdG8gdGVzdCB0aGF0IGdsb2JiaW5nIHdvcmtzLgotICAg
ICAgICBhcmdzLmV4dGVuZChbJ3Bhc3NlcycsCi0gICAgICAgICAgICAgICAgICAgICAnaHR0cC90
ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICAnd2Vic29ja2V0L3Rlc3RzJywKLSAgICAgICAg
ICAgICAgICAgICAgICdmYWlsdXJlcy9leHBlY3RlZC8qJ10pCi0gICAgcmV0dXJuIHJ1bl93ZWJr
aXRfdGVzdHMucGFyc2VfYXJncyhhcmdzKQotCi0KLWRlZiBwYXNzaW5nX3J1bihleHRyYV9hcmdz
PU5vbmUsIHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLAotICAgICAgICAgICAg
ICAgIHRlc3RzX2luY2x1ZGVkPUZhbHNlLCBmaWxlc3lzdGVtPU5vbmUpOgotICAgIG9wdGlvbnMs
IHBhcnNlZF9hcmdzID0gcGFyc2VfYXJncyhleHRyYV9hcmdzLCByZWNvcmRfcmVzdWx0cywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQpCi0gICAg
aWYgbm90IHBvcnRfb2JqOgotICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KHBvcnRfbmFtZT1v
cHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlcj1tb2NrdG9vbC5Nb2NrVXNlcigpLCBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0pCi0g
ICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIHBhcnNlZF9h
cmdzKQotICAgIHJldHVybiByZXMgPT0gMAotCi0KLWRlZiBsb2dnaW5nX3J1bihleHRyYV9hcmdz
PU5vbmUsIHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLCB0ZXN0c19pbmNsdWRl
ZD1GYWxzZSwgZmlsZXN5c3RlbT1Ob25lKToKLSAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHBh
cnNlX2FyZ3MoZXh0cmFfYXJncz1leHRyYV9hcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWNvcmRfcmVzdWx0cz1yZWNvcmRfcmVzdWx0cywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9dGVzdHNfaW5jbHVkZWQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X25vdGhpbmc9RmFs
c2UpCi0gICAgdXNlciA9IG1vY2t0b29sLk1vY2tVc2VyKCkKLSAgICBpZiBub3QgcG9ydF9vYmo6
Ci0gICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQocG9ydF9uYW1lPW9wdGlvbnMucGxhdGZvcm0s
IG9wdGlvbnM9b3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyPXVzZXIs
IGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkKLQotICAgIHJlcywgYnVpbGRib3Rfb3V0cHV0LCByZWd1
bGFyX291dHB1dCA9IHJ1bl9hbmRfY2FwdHVyZShwb3J0X29iaiwgb3B0aW9ucywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vk
X2FyZ3MpCi0gICAgcmV0dXJuIChyZXMsIGJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRwdXQs
IHVzZXIpCi0KLQotZGVmIHJ1bl9hbmRfY2FwdHVyZShwb3J0X29iaiwgb3B0aW9ucywgcGFyc2Vk
X2FyZ3MpOgotICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKLSAgICB0cnk6
Ci0gICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAgYnVpbGRib3Rfb3V0cHV0ID0g
YXJyYXlfc3RyZWFtLkFycmF5U3RyZWFtKCkKLSAgICAgICAgcmVndWxhcl9vdXRwdXQgPSBhcnJh
eV9zdHJlYW0uQXJyYXlTdHJlYW0oKQotICAgICAgICByZXMgPSBydW5fd2Via2l0X3Rlc3RzLnJ1
bihwb3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkYm90X291dHB1dD1idWlsZGJvdF9vdXRwdXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJfb3V0cHV0PXJlZ3VsYXJfb3V0cHV0KQot
ICAgIGZpbmFsbHk6Ci0gICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKLSAgICByZXR1cm4gKHJl
cywgYnVpbGRib3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCkKLQotCi1kZWYgZ2V0X3Rlc3RzX3J1
bihleHRyYV9hcmdzPU5vbmUsIHRlc3RzX2luY2x1ZGVkPUZhbHNlLCBmbGF0dGVuX2JhdGNoZXM9
RmFsc2UsCi0gICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtPU5vbmUsIGluY2x1ZGVfcmVmZXJl
bmNlX2h0bWw9RmFsc2UpOgotICAgIGV4dHJhX2FyZ3MgPSBleHRyYV9hcmdzIG9yIFtdCi0gICAg
aWYgbm90IHRlc3RzX2luY2x1ZGVkOgotICAgICAgICAjIE5vdCBpbmNsdWRpbmcgaHR0cCB0ZXN0
cyBzaW5jZSB0aGV5IGdldCBydW4gb3V0IG9mIG9yZGVyICh0aGF0Ci0gICAgICAgICMgYmVoYXZp
b3IgaGFzIGl0cyBvd24gdGVzdCwgc2VlIHRlc3RfZ2V0X3Rlc3RfZmlsZV9xdWV1ZSkKLSAgICAg
ICAgZXh0cmFfYXJncyA9IFsncGFzc2VzJywgJ2ZhaWx1cmVzJ10gKyBleHRyYV9hcmdzCi0gICAg
b3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKGV4dHJhX2FyZ3MsIHRlc3RzX2luY2x1
ZGVkPVRydWUpCi0KLSAgICB1c2VyID0gbW9ja3Rvb2wuTW9ja1VzZXIoKQotCi0gICAgdGVzdF9i
YXRjaGVzID0gW10KLQotCi0gICAgY2xhc3MgUmVjb3JkaW5nVGVzdERyaXZlcihUZXN0RHJpdmVy
KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIHdvcmtlcl9udW1iZXIpOgotICAg
ICAgICAgICAgVGVzdERyaXZlci5fX2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyKQot
ICAgICAgICAgICAgc2VsZi5fY3VycmVudF90ZXN0X2JhdGNoID0gTm9uZQotCi0gICAgICAgIGRl
ZiBwb2xsKHNlbGYpOgotICAgICAgICAgICAgIyBTbyB0aGF0IHdlIGRvbid0IGNyZWF0ZSBhIG5l
dyBkcml2ZXIgZm9yIGV2ZXJ5IHRlc3QKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAg
ICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfYmF0Y2gg
PSBOb25lCi0KLSAgICAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgotICAgICAg
ICAgICAgaWYgc2VsZi5fY3VycmVudF90ZXN0X2JhdGNoIGlzIE5vbmU6Ci0gICAgICAgICAgICAg
ICAgc2VsZi5fY3VycmVudF90ZXN0X2JhdGNoID0gW10KLSAgICAgICAgICAgICAgICB0ZXN0X2Jh
dGNoZXMuYXBwZW5kKHNlbGYuX2N1cnJlbnRfdGVzdF9iYXRjaCkKLSAgICAgICAgICAgIHRlc3Rf
bmFtZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVu
YW1lKQotICAgICAgICAgICAgIyBJbiBjYXNlIG9mIHJlZnRlc3QsIG9uZSB0ZXN0IGNhbGxzIHRo
ZSBkcml2ZXIncyBydW5fdGVzdCgpIHR3aWNlLgotICAgICAgICAgICAgIyBXZSBzaG91bGQgbm90
IGFkZCBhIHJlZmVyZW5jZSBodG1sIHVzZWQgYnkgcmVmdGVzdHMgdG8gdGVzdHMgdW5sZXNzIGlu
Y2x1ZGVfcmVmZXJlbmNlX2h0bWwgcGFyYW1ldGVyCi0gICAgICAgICAgICAjIGlzIGV4cGxpY2l0
bHkgZ2l2ZW4uCi0gICAgICAgICAgICBpZiBpbmNsdWRlX3JlZmVyZW5jZV9odG1sIG9yIG5vdCBp
c19yZWZlcmVuY2VfaHRtbF9maWxlKHRlc3RfaW5wdXQuZmlsZW5hbWUpOgotICAgICAgICAgICAg
ICAgIHNlbGYuX2N1cnJlbnRfdGVzdF9iYXRjaC5hcHBlbmQodGVzdF9uYW1lKQotICAgICAgICAg
ICAgcmV0dXJuIFRlc3REcml2ZXIucnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCkKLQotICAgIGNs
YXNzIFJlY29yZGluZ1Rlc3RQb3J0KFRlc3RQb3J0KToKLSAgICAgICAgZGVmIGNyZWF0ZV9kcml2
ZXIoc2VsZiwgd29ya2VyX251bWJlcik6Ci0gICAgICAgICAgICByZXR1cm4gUmVjb3JkaW5nVGVz
dERyaXZlcihzZWxmLCB3b3JrZXJfbnVtYmVyKQotCi0gICAgcmVjb3JkaW5nX3BvcnQgPSBSZWNv
cmRpbmdUZXN0UG9ydChvcHRpb25zPW9wdGlvbnMsIHVzZXI9dXNlciwgZmlsZXN5c3RlbT1maWxl
c3lzdGVtKQotICAgIHJ1bl9hbmRfY2FwdHVyZShyZWNvcmRpbmdfcG9ydCwgb3B0aW9ucywgcGFy
c2VkX2FyZ3MpCi0KLSAgICBpZiBmbGF0dGVuX2JhdGNoZXM6Ci0gICAgICAgIHJldHVybiBsaXN0
KGl0ZXJ0b29scy5jaGFpbigqdGVzdF9iYXRjaGVzKSkKLQotICAgIHJldHVybiB0ZXN0X2JhdGNo
ZXMKLQotCi1jbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3Rf
YWNjZWxlcmF0ZWRfY29tcG9zaXRpbmcoc2VsZik6Ci0gICAgICAgICMgVGhpcyBqdXN0IHRlc3Rz
IHRoYXQgd2UgcmVjb2duaXplIHRoZSBjb21tYW5kIGxpbmUgYXJncwotICAgICAgICBzZWxmLmFz
c2VydFRydWUocGFzc2luZ19ydW4oWyctLWFjY2VsZXJhdGVkLWNvbXBvc2l0aW5nJ10pKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLW5vLWFjY2VsZXJhdGVkLWNvbXBv
c2l0aW5nJ10pKQotCi0gICAgZGVmIHRlc3RfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNlbGYpOgot
ICAgICAgICAjIFRoaXMganVzdCB0ZXN0cyB0aGF0IHdlIHJlY29nbml6ZSB0aGUgY29tbWFuZCBs
aW5lIGFyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1hY2NlbGVy
YXRlZC0yZC1jYW52YXMnXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihb
Jy0tbm8tYWNjZWxlcmF0ZWQtMmQtY2FudmFzJ10pKQotCi0gICAgZGVmIHRlc3RfYmFzaWMoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bigpKQotCi0gICAgZGVmIHRl
c3RfYmF0Y2hfc2l6ZShzZWxmKToKLSAgICAgICAgYmF0Y2hfdGVzdHNfcnVuID0gZ2V0X3Rlc3Rz
X3J1bihbJy0tYmF0Y2gtc2l6ZScsICcyJ10pCi0gICAgICAgIGZvciBiYXRjaCBpbiBiYXRjaF90
ZXN0c19ydW46Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGJhdGNoKSA8PSAyLCAn
JXMgaGFkIHRvbyBtYW55IHRlc3RzJyAlICcsICcuam9pbihiYXRjaCkpCi0KLSAgICBkZWYgdGVz
dF9jaGlsZF9wcm9jZXNzXzEoc2VsZik6Ci0gICAgICAgIF8sIF8sIHJlZ3VsYXJfb3V0cHV0LCBf
ID0gbG9nZ2luZ19ydW4oCi0gICAgICAgICAgICAgWyctLXByaW50JywgJ2NvbmZpZycsICctLXdv
cmtlci1tb2RlbCcsICd0aHJlYWRzJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzEnXSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGFueShbJ1J1bm5pbmcgMSAnIGluIGxpbmUgZm9yIGxpbmUgaW4g
cmVndWxhcl9vdXRwdXQuZ2V0KCldKSkKLQotICAgIGRlZiB0ZXN0X2NoaWxkX3Byb2Nlc3Nlc18y
KHNlbGYpOgotICAgICAgICBfLCBfLCByZWd1bGFyX291dHB1dCwgXyA9IGxvZ2dpbmdfcnVuKAot
ICAgICAgICAgICAgIFsnLS1wcmludCcsICdjb25maWcnLCAnLS13b3JrZXItbW9kZWwnLCAndGhy
ZWFkcycsICctLWNoaWxkLXByb2Nlc3NlcycsICcyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShhbnkoWydSdW5uaW5nIDIgJyBpbiBsaW5lIGZvciBsaW5lIGluIHJlZ3VsYXJfb3V0cHV0Lmdl
dCgpXSkpCi0KLSAgICBkZWYgdGVzdF9jaGlsZF9wcm9jZXNzZXNfbWluKHNlbGYpOgotICAgICAg
ICBfLCBfLCByZWd1bGFyX291dHB1dCwgXyA9IGxvZ2dpbmdfcnVuKAotICAgICAgICAgICAgIFsn
LS1wcmludCcsICdjb25maWcnLCAnLS13b3JrZXItbW9kZWwnLCAndGhyZWFkcycsICctLWNoaWxk
LXByb2Nlc3NlcycsICcyJywgJ3Bhc3NlcyddLAotICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVk
PVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoWydSdW5uaW5nIDEgJyBpbiBsaW5l
IGZvciBsaW5lIGluIHJlZ3VsYXJfb3V0cHV0LmdldCgpXSkpCi0KLSAgICBkZWYgdGVzdF9kcnly
dW4oc2VsZik6Ci0gICAgICAgIGJhdGNoX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLWRy
eS1ydW4nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXRjaF90ZXN0c19ydW4sIFtdKQot
Ci0gICAgICAgIGJhdGNoX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctbiddKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGJhdGNoX3Rlc3RzX3J1biwgW10pCi0KLSAgICBkZWYgdGVzdF9l
eGNlcHRpb25fcmFpc2VkKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy
cm9yLCBsb2dnaW5nX3J1biwKLSAgICAgICAgICAgIFsnZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0
aW9uLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKLQotICAgIGRlZiB0ZXN0X2Z1bGxfcmVz
dWx0c19odG1sKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB2ZXJpZnkgaHRtbD8KLSAgICAgICAg
cmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1mdWxsLXJlc3VsdHMtaHRtbCdd
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMCkKLQotICAgIGRlZiB0ZXN0X2hlbHBf
cHJpbnRpbmcoc2VsZik6Ci0gICAgICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1
bihbJy0taGVscC1wcmludGluZyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMCkK
LSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQotICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKGVyci5lbXB0eSgpKQotCi0gICAgZGVmIHRlc3RfaHVuZ190aHJlYWQoc2VsZik6Ci0g
ICAgICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1bihbJy0tcnVuLXNpbmdseScs
ICctLXRpbWUtb3V0LW1zPTUwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdmYWlsdXJlcy9leHBlY3RlZC9oYW5nLmh0bWwnXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocmVzLCAwKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0
eSgpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0eSgpKQotCi0gICAgZGVmIHRl
c3Rfa2V5Ym9hcmRfaW50ZXJydXB0KHNlbGYpOgotICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIGFs
c28gdGVzdHMgcnVubmluZyBhIHRlc3QgbWFya2VkIGFzIFNLSVAgaWYKLSAgICAgICAgIyB5b3Ug
c3BlY2lmeSBpdCBleHBsaWNpdGx5LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2Fy
ZEludGVycnVwdCwgbG9nZ2luZ19ydW4sCi0gICAgICAgICAgICBbJ2ZhaWx1cmVzL2V4cGVjdGVk
L2tleWJvYXJkLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKLQotICAgIGRlZiB0ZXN0X2tl
eWJvYXJkX2ludGVycnVwdF9pbmxpbmVfd29ya2VyX21vZGVsKHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgbG9nZ2luZ19ydW4sCi0gICAgICAgICAg
ICBbJ2ZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJkLmh0bWwnLCAnLS13b3JrZXItbW9kZWwnLCAn
aW5saW5lJ10sCi0gICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlKQotCi0gICAgZGVmIHRl
c3RfbGFzdF9yZXN1bHRzKHNlbGYpOgotICAgICAgICBmcyA9IHBvcnQudW5pdF90ZXN0X2ZpbGVz
eXN0ZW0oKQotICAgICAgICAjIFdlIGRvIGEgbG9nZ2luZyBydW4gaGVyZSBpbnN0ZWFkIG9mIGEg
cGFzc2luZyBydW4gaW4gb3JkZXIgdG8KLSAgICAgICAgIyBzdXBwcmVzcyB0aGUgb3V0cHV0IGZy
b20gdGhlIGpzb24gZ2VuZXJhdG9yLgotICAgICAgICByZXMsIGJ1aWxkYm90X291dHB1dCwgcmVn
dWxhcl9vdXRwdXQsIHVzZXIgPSBsb2dnaW5nX3J1bihbJy0tY2xvYmJlci1vbGQtcmVzdWx0cydd
LCByZWNvcmRfcmVzdWx0cz1UcnVlLCBmaWxlc3lzdGVtPWZzKQotICAgICAgICByZXMsIGJ1aWxk
Ym90X291dHB1dCwgcmVndWxhcl9vdXRwdXQsIHVzZXIgPSBsb2dnaW5nX3J1bigKLSAgICAgICAg
ICAgIFsnLS1wcmludC1sYXN0LWZhaWx1cmVzJ10sIGZpbGVzeXN0ZW09ZnMpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocmVndWxhcl9vdXRwdXQuZ2V0KCksIFsnXG5cbiddKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGJ1aWxkYm90X291dHB1dC5nZXQoKSwgW10pCi0KLSAgICBkZWYgdGVz
dF9saW50X3Rlc3RfZmlsZXMoc2VsZik6Ci0gICAgICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBs
b2dnaW5nX3J1bihbJy0tbGludC10ZXN0LWZpbGVzJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocmVzLCAwKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCi0gICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShhbnkoWydMaW50IHN1Y2NlZWRlZCcgaW4gbXNnIGZvciBtc2cgaW4g
ZXJyLmdldCgpXSkpCi0KLSAgICBkZWYgdGVzdF9saW50X3Rlc3RfZmlsZXNfX2Vycm9ycyhzZWxm
KToKLSAgICAgICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKFsnLS1saW50LXRl
c3QtZmlsZXMnXSkKLSAgICAgICAgdXNlciA9IG1vY2t0b29sLk1vY2tVc2VyKCkKLSAgICAgICAg
cG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMsIHVz
ZXI9dXNlcikKLSAgICAgICAgcG9ydF9vYmoudGVzdF9leHBlY3RhdGlvbnMgPSBsYW1iZGE6ICIj
IHN5bnRheCBlcnJvciIKLSAgICAgICAgcmVzLCBvdXQsIGVyciA9IHJ1bl9hbmRfY2FwdHVyZShw
b3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2FyZ3MpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChyZXMsIC0xKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVtcHR5KCkpCi0gICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShhbnkoWydMaW50IGZhaWxlZCcgaW4gbXNnIGZvciBtc2cgaW4gZXJy
LmdldCgpXSkpCi0KLSAgICBkZWYgdGVzdF9ub190ZXN0c19mb3VuZChzZWxmKToKLSAgICAgICAg
cmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsncmVzb3VyY2VzJ10sIHRlc3RzX2lu
Y2x1ZGVkPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAtMSkKLSAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ05v
IHRlc3RzIHRvIHJ1bi5cbicgaW4gZXJyLmdldCgpKQotCi0gICAgZGVmIHRlc3Rfbm9fdGVzdHNf
Zm91bmRfMihzZWxmKToKLSAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVu
KFsnZm9vJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cmVzLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbXB0eSgpKQotICAgICAgICBz
ZWxmLmFzc2VydFRydWUoJ05vIHRlc3RzIHRvIHJ1bi5cbicgaW4gZXJyLmdldCgpKQotCi0gICAg
ZGVmIHRlc3RfcmFuZG9taXplX29yZGVyKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB2ZXJpZnkg
b3JkZXIgd2FzIHNodWZmbGVkCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihb
Jy0tcmFuZG9taXplLW9yZGVyJ10pKQotCi0gICAgZGVmIHRlc3RfZ2NfYmV0d2Vlbl90ZXN0cyhz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1nYy1iZXR3ZWVu
LXRlc3RzJ10pKQotCi0gICAgZGVmIHRlc3RfY29tcGxleF90ZXh0KHNlbGYpOgotICAgICAgICBz
ZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLWNvbXBsZXgtdGV4dCddKSkKLQotICAgIGRl
ZiB0ZXN0X3RocmVhZGVkKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19y
dW4oWyctLXRocmVhZGVkJ10pKQotCi0gICAgZGVmIHRlc3RfcnVuX2NodW5rKHNlbGYpOgotICAg
ICAgICAjIFRlc3QgdGhhdCB3ZSBhY3R1YWxseSBzZWxlY3QgdGhlIHJpZ2h0IGNodW5rCi0gICAg
ICAgIGFsbF90ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQot
ICAgICAgICBjaHVua190ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1ydW4tY2h1bmsnLCAn
MTo0J10sIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhh
bGxfdGVzdHNfcnVuWzQ6OF0sIGNodW5rX3Rlc3RzX3J1bikKLQotICAgICAgICAjIFRlc3QgdGhh
dCB3ZSB3cmFwIGFyb3VuZCBpZiB0aGUgbnVtYmVyIG9mIHRlc3RzIGlzIG5vdCBldmVubHkgZGl2
aXNpYmxlIGJ5IHRoZSBjaHVuayBzaXplCi0gICAgICAgIHRlc3RzX3RvX3J1biA9IFsncGFzc2Vz
L2Vycm9yLmh0bWwnLCAncGFzc2VzL2ltYWdlLmh0bWwnLCAncGFzc2VzL3BsYXRmb3JtX2ltYWdl
Lmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCddCi0gICAgICAgIGNodW5rX3Rlc3RzX3J1biA9IGdl
dF90ZXN0c19ydW4oWyctLXJ1bi1jaHVuaycsICcxOjMnXSArIHRlc3RzX3RvX3J1biwgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKFsncGFzc2VzL3RleHQuaHRtbCcsICdwYXNzZXMvZXJyb3IuaHRtbCcsICdwYXNzZXMv
aW1hZ2UuaHRtbCddLCBjaHVua190ZXN0c19ydW4pCi0KLSAgICBkZWYgdGVzdF9ydW5fZm9yY2Uo
c2VsZik6Ci0gICAgICAgICMgVGhpcyByYWlzZXMgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugd2UgcnVu
Ci0gICAgICAgICMgZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0aW9uLmh0bWwsIHdoaWNoIGlzIG5v
cm1hbGx5IFNLSVBwZWQuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxv
Z2dpbmdfcnVuLCBbJy0tZm9yY2UnXSkKLQotICAgIGRlZiB0ZXN0X3J1bl9wYXJ0KHNlbGYpOgot
ICAgICAgICAjIFRlc3QgdGhhdCB3ZSBhY3R1YWxseSBzZWxlY3QgdGhlIHJpZ2h0IHBhcnQKLSAg
ICAgICAgdGVzdHNfdG9fcnVuID0gWydwYXNzZXMvZXJyb3IuaHRtbCcsICdwYXNzZXMvaW1hZ2Uu
aHRtbCcsICdwYXNzZXMvcGxhdGZvcm1faW1hZ2UuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJ10K
LSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tcnVuLXBhcnQnLCAnMToyJ10g
KyB0ZXN0c190b19ydW4sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVl
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy9lcnJvci5odG1sJywgJ3Bhc3Nl
cy9pbWFnZS5odG1sJ10sIHRlc3RzX3J1bikKLQotICAgICAgICAjIFRlc3QgdGhhdCB3ZSB3cmFw
IGFyb3VuZCBpZiB0aGUgbnVtYmVyIG9mIHRlc3RzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5
IHRoZSBjaHVuayBzaXplCi0gICAgICAgICMgKGhlcmUgd2UgZW5kIHVwIHdpdGggMyBwYXJ0cywg
ZWFjaCB3aXRoIDIgdGVzdHMsIGFuZCB3ZSBvbmx5IGhhdmUgNCB0ZXN0cyB0b3RhbCwgc28gdGhl
Ci0gICAgICAgICMgbGFzdCBwYXJ0IHJlcGVhdHMgdGhlIGZpcnN0IHR3byB0ZXN0cykuCi0gICAg
ICAgIGNodW5rX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXJ1bi1wYXJ0JywgJzM6Mydd
ICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1
ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNzZXMvZXJyb3IuaHRtbCcsICdwYXNz
ZXMvaW1hZ2UuaHRtbCddLCBjaHVua190ZXN0c19ydW4pCi0KLSAgICBkZWYgdGVzdF9ydW5fc2lu
Z2x5KHNlbGYpOgotICAgICAgICBiYXRjaF90ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1y
dW4tc2luZ2x5J10pCi0gICAgICAgIGZvciBiYXRjaCBpbiBiYXRjaF90ZXN0c19ydW46Ci0gICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYmF0Y2gpLCAxLCAnJXMgaGFkIHRvbyBtYW55
IHRlc3RzJyAlICcsICcuam9pbihiYXRjaCkpCi0KLSAgICBkZWYgdGVzdF9za2lwX2ZhaWxpbmdf
dGVzdHMoc2VsZik6Ci0gICAgICAgIGJhdGNoZXMgPSBnZXRfdGVzdHNfcnVuKFsnLS1za2lwLWZh
aWxpbmctdGVzdHMnXSkKLSAgICAgICAgaGFzX3Bhc3Nlc190ZXh0ID0gRmFsc2UKLSAgICAgICAg
Zm9yIGJhdGNoIGluIGJhdGNoZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdmYWls
dXJlcy9leHBlY3RlZC90ZXh0Lmh0bWwnIGluIGJhdGNoKQotICAgICAgICAgICAgaGFzX3Bhc3Nl
c190ZXh0ID0gaGFzX3Bhc3Nlc190ZXh0IG9yICgncGFzc2VzL3RleHQuaHRtbCcgaW4gYmF0Y2gp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNfcGFzc2VzX3RleHQpCi0KLSAgICBkZWYgdGVz
dF9ydW5fc2luZ2x5X2FjdHVhbGx5X3J1bnNfdGVzdHMoc2VsZik6Ci0gICAgICAgIHJlcywgXywg
XywgXyA9IGxvZ2dpbmdfcnVuKFsnLS1ydW4tc2luZ2x5JywgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQn
XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLCA1KQotCi0gICAgZGVmIHRlc3Rfc2lu
Z2xlX2ZpbGUoc2VsZik6Ci0gICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWydwYXNz
ZXMvdGV4dC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVl
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSwgdGVzdHNf
cnVuKQotCi0gICAgZGVmIHRlc3Rfc2luZ2xlX2ZpbGVfd2l0aF9wcmVmaXgoc2VsZik6Ci0gICAg
ICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWydMYXlvdXRUZXN0cy9wYXNzZXMvdGV4dC5o
dG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSwgdGVzdHNfcnVuKQotCi0g
ICAgZGVmIHRlc3Rfc2luZ2xlX3NraXBwZWRfZmlsZShzZWxmKToKLSAgICAgICAgdGVzdHNfcnVu
ID0gZ2V0X3Rlc3RzX3J1bihbJ2ZhaWx1cmVzL2V4cGVjdGVkL2tleWJhb3JkLmh0bWwnXSwgdGVz
dHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKFtdLCB0ZXN0c19ydW4pCi0KLSAgICBkZWYgdGVzdF9zdGRlcnJfaXNfc2F2ZWQo
c2VsZik6Ci0gICAgICAgIGZzID0gcG9ydC51bml0X3Rlc3RfZmlsZXN5c3RlbSgpCi0gICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihmaWxlc3lzdGVtPWZzKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoZnMucmVhZF90ZXh0X2ZpbGUoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0
cy9wYXNzZXMvZXJyb3Itc3RkZXJyLnR4dCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAn
c3R1ZmYgZ29pbmcgdG8gc3RkZXJyJykKLQotICAgIGRlZiB0ZXN0X3Rlc3RfbGlzdChzZWxmKToK
LSAgICAgICAgZnMgPSBwb3J0LnVuaXRfdGVzdF9maWxlc3lzdGVtKCkKLSAgICAgICAgZmlsZW5h
bWUgPSAnL3RtcC9mb28udHh0JwotICAgICAgICBmcy53cml0ZV90ZXh0X2ZpbGUoZmlsZW5hbWUs
ICdwYXNzZXMvdGV4dC5odG1sJykKLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihb
Jy0tdGVzdC1saXN0PSVzJyAlIGZpbGVuYW1lXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRl
bl9iYXRjaGVzPVRydWUsIGZpbGVzeXN0ZW09ZnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KFsncGFzc2VzL3RleHQuaHRtbCddLCB0ZXN0c19ydW4pCi0gICAgICAgIGZzLnJlbW92ZShmaWxl
bmFtZSkKLSAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS10ZXN0
LWxpc3Q9JXMnICUgZmlsZW5hbWVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmlsZXN5c3RlbT1mcykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChyZXMsIC0xKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0
eSgpKQotCi0gICAgZGVmIHRlc3RfdGVzdF9saXN0X3dpdGhfcHJlZml4KHNlbGYpOgotICAgICAg
ICBmcyA9IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQotICAgICAgICBmaWxlbmFtZSA9ICcv
dG1wL2Zvby50eHQnCi0gICAgICAgIGZzLndyaXRlX3RleHRfZmlsZShmaWxlbmFtZSwgJ0xheW91
dFRlc3RzL3Bhc3Nlcy90ZXh0Lmh0bWwnKQotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNf
cnVuKFsnLS10ZXN0LWxpc3Q9JXMnICUgZmlsZW5hbWVdLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBm
bGF0dGVuX2JhdGNoZXM9VHJ1ZSwgZmlsZXN5c3RlbT1mcykKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoWydwYXNzZXMvdGV4dC5odG1sJ10sIHRlc3RzX3J1bikKLQotICAgIGRlZiB0ZXN0X3Vu
ZXhwZWN0ZWRfZmFpbHVyZXMoc2VsZik6Ci0gICAgICAgICMgUnVuIHRlc3RzIGluY2x1ZGluZyB0
aGUgdW5leHBlY3RlZCBmYWlsdXJlcy4KLSAgICAgICAgc2VsZi5fdXJsX29wZW5lZCA9IE5vbmUK
LSAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKHRlc3RzX2luY2x1ZGVk
PVRydWUpCi0KLSAgICAgICAgIyBVcGRhdGUgdGhpcyBtYWdpYyBudW1iZXIgaWYgeW91IGFkZCBh
biB1bmV4cGVjdGVkIHRlc3QgdG8gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQudGVzdAotICAg
ICAgICAjIEZJWE1FOiBJdCdzIG5pY2UgdG8gaGF2ZSBhIHJvdXRpbmUgaW4gcG9ydC90ZXN0LnB5
IHRoYXQgcmV0dXJucyB0aGlzIG51bWJlci4KLSAgICAgICAgdW5leHBlY3RlZF90ZXN0c19jb3Vu
dCA9IDUKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgdW5leHBlY3RlZF90ZXN0c19j
b3VudCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1c2Vy
Lm9wZW5lZF91cmxzLCBbJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9yZXN1bHRzLmh0bWwnXSkK
LQotICAgIGRlZiB0ZXN0X2V4aXRfYWZ0ZXJfbl9mYWlsdXJlc191cGxvYWQoc2VsZik6Ci0gICAg
ICAgIGZzID0gcG9ydC51bml0X3Rlc3RfZmlsZXN5c3RlbSgpCi0gICAgICAgIHJlcywgYnVpbGRi
b3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCwgdXNlciA9IGxvZ2dpbmdfcnVuKFsKLSAgICAgICAg
ICAgICAgICAnZmFpbHVyZXMvdW5leHBlY3RlZC90ZXh0LWltYWdlLWNoZWNrc3VtLmh0bWwnLAot
ICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC5odG1sJywKLSAgICAgICAgICAgICAgICAnLS1l
eGl0LWFmdGVyLW4tZmFpbHVyZXMnLCAnMScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAg
dGVzdHNfaW5jbHVkZWQ9VHJ1ZSwKLSAgICAgICAgICAgIHJlY29yZF9yZXN1bHRzPVRydWUsCi0g
ICAgICAgICAgICBmaWxlc3lzdGVtPWZzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJy90bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy9pbmNyZW1lbnRhbF9yZXN1bHRzLmpzb24nIGluIGZzLmZpbGVz
KQotCi0gICAgZGVmIHRlc3RfZXhpdF9hZnRlcl9uX2ZhaWx1cmVzKHNlbGYpOgotICAgICAgICAj
IFVuZXhwZWN0ZWQgZmFpbHVyZXMgc2hvdWxkIHJlc3VsdCBpbiB0ZXN0cyBzdG9wcGluZy4KLSAg
ICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCi0gICAgICAgICAgICAgICAgJ2ZhaWx1
cmVzL3VuZXhwZWN0ZWQvdGV4dC1pbWFnZS1jaGVja3N1bS5odG1sJywKLSAgICAgICAgICAgICAg
ICAncGFzc2VzL3RleHQuaHRtbCcsCi0gICAgICAgICAgICAgICAgJy0tZXhpdC1hZnRlci1uLWZh
aWx1cmVzJywgJzEnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVk
PVRydWUsCi0gICAgICAgICAgICBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoWydmYWlsdXJlcy91bmV4cGVjdGVkL3RleHQtaW1hZ2UtY2hlY2tzdW0uaHRt
bCddLCB0ZXN0c19ydW4pCi0KLSAgICAgICAgIyBCdXQgd2UnbGwga2VlcCBnb2luZyBmb3IgZXhw
ZWN0ZWQgb25lcy4KLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCi0gICAgICAg
ICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCcsCi0gICAgICAgICAgICAgICAg
J3Bhc3Nlcy90ZXh0Lmh0bWwnLAotICAgICAgICAgICAgICAgICctLWV4aXQtYWZ0ZXItbi1mYWls
dXJlcycsICcxJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1U
cnVlLAotICAgICAgICAgICAgZmxhdHRlbl9iYXRjaGVzPVRydWUpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKFsnZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5odG1sJywgJ3Bhc3Nlcy90ZXh0Lmh0
bWwnXSwgdGVzdHNfcnVuKQotCi0gICAgZGVmIHRlc3RfZXhpdF9hZnRlcl9uX2NyYXNoZXMoc2Vs
Zik6Ci0gICAgICAgICMgVW5leHBlY3RlZCBjcmFzaGVzIHNob3VsZCByZXN1bHQgaW4gdGVzdHMg
c3RvcHBpbmcuCi0gICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWwotICAgICAgICAg
ICAgICAgICdmYWlsdXJlcy91bmV4cGVjdGVkL2NyYXNoLmh0bWwnLAotICAgICAgICAgICAgICAg
ICdwYXNzZXMvdGV4dC5odG1sJywKLSAgICAgICAgICAgICAgICAnLS1leGl0LWFmdGVyLW4tY3Jh
c2hlcy1vci10aW1lb3V0cycsICcxJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB0ZXN0
c19pbmNsdWRlZD1UcnVlLAotICAgICAgICAgICAgZmxhdHRlbl9iYXRjaGVzPVRydWUpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsnZmFpbHVyZXMvdW5leHBlY3RlZC9jcmFzaC5odG1sJ10s
IHRlc3RzX3J1bikKLQotICAgICAgICAjIFNhbWUgd2l0aCB0aW1lb3V0cy4KLSAgICAgICAgdGVz
dHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCi0gICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhw
ZWN0ZWQvdGltZW91dC5odG1sJywKLSAgICAgICAgICAgICAgICAncGFzc2VzL3RleHQuaHRtbCcs
Ci0gICAgICAgICAgICAgICAgJy0tZXhpdC1hZnRlci1uLWNyYXNoZXMtb3ItdGltZW91dHMnLCAn
MScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwKLSAg
ICAgICAgICAgIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhbJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvdGltZW91dC5odG1sJ10sIHRlc3RzX3J1bikKLQotICAg
ICAgICAjIEJ1dCB3ZSdsbCBrZWVwIGdvaW5nIGZvciBleHBlY3RlZCBvbmVzLgotICAgICAgICB0
ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsKLSAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhw
ZWN0ZWQvY3Jhc2guaHRtbCcsCi0gICAgICAgICAgICAgICAgJ3Bhc3Nlcy90ZXh0Lmh0bWwnLAot
ICAgICAgICAgICAgICAgICctLWV4aXQtYWZ0ZXItbi1jcmFzaGVzLW9yLXRpbWVvdXRzJywgJzEn
LAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsCi0gICAg
ICAgICAgICBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
WydmYWlsdXJlcy9leHBlY3RlZC9jcmFzaC5odG1sJywgJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSwgdGVz
dHNfcnVuKQotCi0gICAgZGVmIHRlc3RfZXhpdF9hZnRlcl9uX2NyYXNoZXNfaW5saW5lX3dvcmtl
cl9tb2RlbChzZWxmKToKLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCi0gICAg
ICAgICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvdGltZW91dC5odG1sJywKLSAgICAgICAg
ICAgICAgICAncGFzc2VzL3RleHQuaHRtbCcsCi0gICAgICAgICAgICAgICAgJy0tZXhpdC1hZnRl
ci1uLWNyYXNoZXMtb3ItdGltZW91dHMnLCAnMScsCi0gICAgICAgICAgICAgICAgJy0td29ya2Vy
LW1vZGVsJywgJ2lubGluZScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwKLSAgICAgICAgICAgIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhbJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvdGltZW91dC5odG1sJ10sIHRl
c3RzX3J1bikKLQotICAgIGRlZiB0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5X2Fic29sdXRlKHNlbGYp
OgotICAgICAgICAjIFdlIHJ1biBhIGNvbmZpZ3VyYXRpb24gdGhhdCBzaG91bGQgZmFpbCwgdG8g
Z2VuZXJhdGUgb3V0cHV0LCB0aGVuCi0gICAgICAgICMgbG9vayBmb3Igd2hhdCB0aGUgb3V0cHV0
IHJlc3VsdHMgdXJsIHdhcy4KLQotICAgICAgICBmcyA9IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0
ZW0oKQotICAgICAgICB3aXRoIGZzLm1rZHRlbXAoKSBhcyB0bXBkaXI6Ci0gICAgICAgICAgICBy
ZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLXJlc3VsdHMtZGlyZWN0b3J5PScg
KyBzdHIodG1wZGlyKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmlsZXN5c3RlbT1mcykKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwodXNlci5vcGVuZWRfdXJscywgW2ZzLmpvaW4odG1wZGlyLCAncmVzdWx0
cy5odG1sJyldKQotCi0gICAgZGVmIHRlc3RfcmVzdWx0c19kaXJlY3RvcnlfZGVmYXVsdChzZWxm
KToKLSAgICAgICAgIyBXZSBydW4gYSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGZhaWwsIHRv
IGdlbmVyYXRlIG91dHB1dCwgdGhlbgotICAgICAgICAjIGxvb2sgZm9yIHdoYXQgdGhlIG91dHB1
dCByZXN1bHRzIHVybCB3YXMuCi0KLSAgICAgICAgIyBUaGlzIGlzIHRoZSBkZWZhdWx0IGxvY2F0
aW9uLgotICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4odGVzdHNfaW5j
bHVkZWQ9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1c2VyLm9wZW5lZF91cmxzLCBb
Jy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9yZXN1bHRzLmh0bWwnXSkKLQotICAgIGRlZiB0ZXN0
X3Jlc3VsdHNfZGlyZWN0b3J5X3JlbGF0aXZlKHNlbGYpOgotICAgICAgICAjIFdlIHJ1biBhIGNv
bmZpZ3VyYXRpb24gdGhhdCBzaG91bGQgZmFpbCwgdG8gZ2VuZXJhdGUgb3V0cHV0LCB0aGVuCi0g
ICAgICAgICMgbG9vayBmb3Igd2hhdCB0aGUgb3V0cHV0IHJlc3VsdHMgdXJsIHdhcy4KLSAgICAg
ICAgZnMgPSBwb3J0LnVuaXRfdGVzdF9maWxlc3lzdGVtKCkKLSAgICAgICAgZnMubWF5YmVfbWFr
ZV9kaXJlY3RvcnkoJy90bXAvY3dkJykKLSAgICAgICAgZnMuY2hkaXIoJy90bXAvY3dkJykKLSAg
ICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1yZXN1bHRzLWRpcmVj
dG9yeT1mb28nXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RzX2luY2x1ZGVkPVRydWUsIGZpbGVzeXN0ZW09ZnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodXNlci5vcGVuZWRfdXJscywgWycvdG1wL2N3ZC9mb28vcmVzdWx0cy5odG1sJ10pCi0KLSAg
ICAjIFRoZXNlIG5leHQgdGVzdHMgdGVzdCB0aGF0IHdlIHJ1biB0aGUgdGVzdHMgaW4gYXNjZW5k
aW5nIGFscGhhYmV0aWNhbAotICAgICMgb3JkZXIgcGVyIGRpcmVjdG9yeS4gSFRUUCB0ZXN0cyBh
cmUgc2hhcmRlZCBzZXBhcmF0ZWx5IGZyb20gb3RoZXIgdGVzdHMsCi0gICAgIyBzbyB3ZSBoYXZl
IHRvIHRlc3QgYm90aC4KLSAgICBkZWYgYXNzZXJ0X3J1bl9vcmRlcihzZWxmLCB3b3JrZXJfbW9k
ZWwsIGNoaWxkX3Byb2Nlc3Nlcz0nMScpOgotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNf
cnVuKFsnLS13b3JrZXItbW9kZWwnLCB3b3JrZXJfbW9kZWwsCi0gICAgICAgICAgICAnLS1jaGls
ZC1wcm9jZXNzZXMnLCBjaGlsZF9wcm9jZXNzZXMsICdwYXNzZXMnXSwKLSAgICAgICAgICAgIHRl
c3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyh0ZXN0c19ydW4sIHNvcnRlZCh0ZXN0c19ydW4pKQotCi0gICAgICAgIHRlc3Rz
X3J1biA9IGdldF90ZXN0c19ydW4oWyctLXdvcmtlci1tb2RlbCcsIHdvcmtlcl9tb2RlbCwKLSAg
ICAgICAgICAgICctLWNoaWxkLXByb2Nlc3NlcycsIGNoaWxkX3Byb2Nlc3NlcywgJ2h0dHAvdGVz
dHMvcGFzc2VzJ10sCi0gICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2Jh
dGNoZXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGVzdHNfcnVuLCBzb3J0ZWQo
dGVzdHNfcnVuKSkKLQotICAgIGRlZiB0ZXN0X3J1bl9vcmRlcl9faW5saW5lKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydF9ydW5fb3JkZXIoJ2lubGluZScpCi0KLSAgICBkZWYgdGVzdF90b2xl
cmFuY2Uoc2VsZik6Ci0gICAgICAgIGNsYXNzIEltYWdlRGlmZlRlc3RQb3J0KFRlc3RQb3J0KToK
LSAgICAgICAgICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1
YWxfY29udGVudHMsCi0gICAgICAgICAgICAgICAgICAgZGlmZl9maWxlbmFtZT1Ob25lKToKLSAg
ICAgICAgICAgICAgICBzZWxmLnRvbGVyYW5jZV91c2VkX2Zvcl9kaWZmX2ltYWdlID0gc2VsZi5f
b3B0aW9ucy50b2xlcmFuY2UKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAg
IGRlZiBnZXRfcG9ydF9mb3JfcnVuKGFyZ3MpOgotICAgICAgICAgICAgb3B0aW9ucywgcGFyc2Vk
X2FyZ3MgPSBydW5fd2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3MoYXJncykKLSAgICAgICAgICAgIHRl
c3RfcG9ydCA9IEltYWdlRGlmZlRlc3RQb3J0KG9wdGlvbnM9b3B0aW9ucywgdXNlcj1tb2NrdG9v
bC5Nb2NrVXNlcigpKQotICAgICAgICAgICAgcGFzc2luZ19ydW4oYXJncywgcG9ydF9vYmo9dGVz
dF9wb3J0LCB0ZXN0c19pbmNsdWRlZD1UcnVlKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RfcG9y
dAotCi0gICAgICAgIGJhc2VfYXJncyA9IFsnLS1waXhlbC10ZXN0cycsICdmYWlsdXJlcy9leHBl
Y3RlZC8qJ10KLQotICAgICAgICAjIElmIHdlIHBhc3MgaW4gYW4gZXhwbGljaXQgdG9sZXJhbmNl
IGFyZ3VtZW50LCB0aGVuIHRoYXQgd2lsbCBiZSB1c2VkLgotICAgICAgICB0ZXN0X3BvcnQgPSBn
ZXRfcG9ydF9mb3JfcnVuKGJhc2VfYXJncyArIFsnLS10b2xlcmFuY2UnLCAnLjEnXSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgwLjEsIHRlc3RfcG9ydC50b2xlcmFuY2VfdXNlZF9mb3JfZGlm
Zl9pbWFnZSkKLSAgICAgICAgdGVzdF9wb3J0ID0gZ2V0X3BvcnRfZm9yX3J1bihiYXNlX2FyZ3Mg
KyBbJy0tdG9sZXJhbmNlJywgJzAnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCB0ZXN0
X3BvcnQudG9sZXJhbmNlX3VzZWRfZm9yX2RpZmZfaW1hZ2UpCi0KLSAgICAgICAgIyBPdGhlcndp
c2UgdGhlIHBvcnQncyBkZWZhdWx0IHRvbGVyYW5jZSBiZWhhdmlvciAoaW5jbHVkaW5nIGlnbm9y
aW5nIGl0KQotICAgICAgICAjIHNob3VsZCBiZSB1c2VkLgotICAgICAgICB0ZXN0X3BvcnQgPSBn
ZXRfcG9ydF9mb3JfcnVuKGJhc2VfYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25l
LCB0ZXN0X3BvcnQudG9sZXJhbmNlX3VzZWRfZm9yX2RpZmZfaW1hZ2UpCi0KLSAgICBkZWYgdGVz
dF93b3JrZXJfbW9kZWxfX2lubGluZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBh
c3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAnaW5saW5lJ10pKQotCi0gICAgZGVmIHRlc3Rf
d29ya2VyX21vZGVsX19pbmxpbmVfd2l0aF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAg
IHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywgJ2lu
bGluZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tY2hp
bGQtcHJvY2Vzc2VzJywgJzInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCi0g
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLS13b3JrZXItbW9kZWw9aW5saW5lIG92ZXJyaWRlcyAt
LWNoaWxkLXByb2Nlc3Nlc1xuJyBpbiBlcnIuZ2V0KCkpCi0KLSAgICBkZWYgdGVzdF93b3JrZXJf
bW9kZWxfX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hl
biB3ZSBmaXggdGVzdC13ZWJraXRweSB0byB3b3JrIHByb3Blcmx5Ci0gICAgICAgICMgd2l0aCB0
aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZSAoYnVnIDU0NTIwKS4KLSAgICAgICAgaWYgbXVsdGlw
cm9jZXNzaW5nIGFuZCBzeXMucGxhdGZvcm0gbm90IGluICgnY3lnd2luJywgJ3dpbjMyJyk6Ci0g
ICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcs
ICdwcm9jZXNzZXMnXSkpCi0KLSAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3Byb2Nlc3Nlc19h
bmRfZHJ5X3J1bihzZWxmKToKLSAgICAgICAgaWYgbXVsdGlwcm9jZXNzaW5nIGFuZCBzeXMucGxh
dGZvcm0gbm90IGluICgnY3lnd2luJywgJ3dpbjMyJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICdwcm9jZXNzZXMnLCAnLS1kcnkt
cnVuJ10pKQotCi0gICAgZGVmIHRlc3Rfd29ya2VyX21vZGVsX190aHJlYWRzKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICd0aHJl
YWRzJ10pKQotCi0gICAgZGVmIHRlc3Rfd29ya2VyX21vZGVsX191bmtub3duKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgWyctLXdvcmtlci1tb2RlbCcsICd1bmtub3duJ10pCi0KLSAgICBk
ZWYgdGVzdF9yZWZ0ZXN0X3J1bihzZWxmKToKLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3Rz
X3J1bihbJ3Bhc3Nlcy9yZWZ0ZXN0Lmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRl
bl9iYXRjaGVzPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL3JlZnRl
c3QuaHRtbCddLCB0ZXN0c19ydW4pCi0KLSAgICBkZWYgdGVzdF9yZWZ0ZXN0X2V4cGVjdGVkX2h0
bWxfc2hvdWxkX2JlX2lnbm9yZWQoc2VsZik6Ci0gICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0
c19ydW4oWydwYXNzZXMvcmVmdGVzdC1leHBlY3RlZC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRy
dWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwg
dGVzdHNfcnVuKQotCi0gICAgZGVmIHRlc3RfcmVmdGVzdF9kcml2ZXJfc2hvdWxkX3J1bl9leHBl
Y3RlZF9odG1sKHNlbGYpOgotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsncGFz
c2VzL3JlZnRlc3QuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9
VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX3JlZmVyZW5j
ZV9odG1sPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL3JlZnRlc3Qu
aHRtbCcsICdwYXNzZXMvcmVmdGVzdC1leHBlY3RlZC5odG1sJ10sIHRlc3RzX3J1bikKLQotICAg
IGRlZiB0ZXN0X3JlZnRlc3RfZHJpdmVyX3Nob3VsZF9ydW5fZXhwZWN0ZWRfbWlzbWF0Y2hfaHRt
bChzZWxmKToKLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ3Bhc3Nlcy9taXNt
YXRjaC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfcmVmZXJlbmNlX2h0bWw9
VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNzZXMvbWlzbWF0Y2guaHRtbCcs
ICdwYXNzZXMvbWlzbWF0Y2gtZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbCddLCB0ZXN0c19ydW4pCi0K
LSAgICBkZWYgdGVzdF9hZGRpdGlvbmFsX3BsYXRmb3JtX2RpcmVjdG9yeShzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1hZGRpdGlvbmFsLXBsYXRmb3JtLWRp
cmVjdG9yeScsICcvdG1wL2ZvbyddKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Npbmdf
cnVuKFsnLS1hZGRpdGlvbmFsLXBsYXRmb3JtLWRpcmVjdG9yeScsICcvdG1wLy4uL2ZvbyddKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1hZGRpdGlvbmFsLXBsYXRm
b3JtLWRpcmVjdG9yeScsICcvdG1wL2ZvbycsCi0gICAgICAgICAgICAnLS1hZGRpdGlvbmFsLXBs
YXRmb3JtLWRpcmVjdG9yeScsICcvdG1wL2JhciddKSkKLQotICAgICAgICByZXMsIGJ1aWxkYm90
X291dHB1dCwgcmVndWxhcl9vdXRwdXQsIHVzZXIgPSBsb2dnaW5nX3J1bigKLSAgICAgICAgICAg
ICBbJy0tYWRkaXRpb25hbC1wbGF0Zm9ybS1kaXJlY3RvcnknLCAnZm9vJ10pCi0gICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZSgnLS1hZGRpdGlvbmFsLXBsYXRmb3JtLWRpcmVjdG9yeT1mb28gaXMgaWdu
b3JlZCBzaW5jZSBpdCBpcyBub3QgYWJzb2x1dGVcbicKLSAgICAgICAgICAgICAgICAgICAgICAg
IGluIHJlZ3VsYXJfb3V0cHV0LmdldCgpKQotCi0KLU1haW5UZXN0ID0gc2tpcF9pZihNYWluVGVz
dCwgc3lzLnBsYXRmb3JtID09ICdjeWd3aW4nIGFuZCBjb21wYXJlX3ZlcnNpb24oc3lzLCAnMi42
JylbMF0gPCAwLCAnbmV3LXJ1bi13ZWJraXQtdGVzdHMgdGVzdHMgaGFuZyBvbiBDeWd3aW4gUHl0
aG9uIDIuNS4yJykKLQotCi1jbGFzcyBSZWJhc2VsaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
Ci0gICAgZGVmIGFzc2VydEJhc2VsaW5lcyhzZWxmLCBmaWxlX2xpc3QsIGZpbGUpOgotICAgICAg
ICAiYXNzZXJ0IHRoYXQgdGhlIGZpbGVfbGlzdCBjb250YWlucyB0aGUgYmFzZWxpbmVzLiIiIgot
ICAgICAgICBmb3IgZXh0IGluICgiLnR4dCIsICIucG5nIik6Ci0gICAgICAgICAgICBiYXNlbGlu
ZSA9IGZpbGUgKyAiLWV4cGVjdGVkIiArIGV4dAotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGFueShmLmZpbmQoYmFzZWxpbmUpICE9IC0xIGZvciBmIGluIGZpbGVfbGlzdCkpCi0KLSAgICAj
IEZJWE1FOiBBZGQgdGVzdHMgdG8gZW5zdXJlIHRoYXQgd2UncmUgKm5vdCogd3JpdGluZyBiYXNl
bGluZXMgd2hlbiB3ZSdyZSBub3QKLSAgICAjIHN1cHBvc2VkIHRvIGJlLgotCi0gICAgZGVmIHRl
c3RfcmVzZXRfcmVzdWx0cyhzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoYXQgd2UgdXBkYXRlIGV4
cGVjdGF0aW9ucyBpbiBwbGFjZS4gSWYgdGhlIGV4cGVjdGF0aW9uCi0gICAgICAgICMgaXMgbWlz
c2luZywgdXBkYXRlIHRoZSBleHBlY3RlZCBnZW5lcmljIGxvY2F0aW9uLgotICAgICAgICBmcyA9
IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQotICAgICAgICBwYXNzaW5nX3J1bihbJy0tcGl4
ZWwtdGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgJy0tcmVzZXQtcmVzdWx0cycsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAncGFzc2VzL2ltYWdlLmh0bWwnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UuaHRtbCddLAotICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmlsZXN5c3RlbT1mcykK
LSAgICAgICAgZmlsZV9saXN0ID0gZnMud3JpdHRlbl9maWxlcy5rZXlzKCkKLSAgICAgICAgZmls
ZV9saXN0LnJlbW92ZSgnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Rlc3RzX3J1bjAudHh0JykK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZV9saXN0KSwgNCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRCYXNlbGluZXMoZmlsZV9saXN0LCAiL3Bhc3Nlcy9pbWFnZSIpCi0gICAgICAgIHNl
bGYuYXNzZXJ0QmFzZWxpbmVzKGZpbGVfbGlzdCwgIi9mYWlsdXJlcy9leHBlY3RlZC9taXNzaW5n
X2ltYWdlIikKLQotICAgIGRlZiB0ZXN0X25ld19iYXNlbGluZShzZWxmKToKLSAgICAgICAgIyBU
ZXN0IHRoYXQgd2UgdXBkYXRlIHRoZSBwbGF0Zm9ybSBleHBlY3RhdGlvbnMuIElmIHRoZSBleHBl
Y3RhdGlvbgotICAgICAgICAjIGlzIG1zc2luZywgdGhlbiBjcmVhdGUgYSBuZXcgZXhwZWN0YXRp
b24gaW4gdGhlIHBsYXRmb3JtIGRpci4KLSAgICAgICAgZnMgPSBwb3J0LnVuaXRfdGVzdF9maWxl
c3lzdGVtKCkKLSAgICAgICAgcGFzc2luZ19ydW4oWyctLXBpeGVsLXRlc3RzJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICctLW5ldy1iYXNlbGluZScsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAncGFzc2VzL2ltYWdlLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVz
L2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UuaHRtbCddLAotICAgICAgICAgICAgICAgICAgICB0ZXN0
c19pbmNsdWRlZD1UcnVlLCBmaWxlc3lzdGVtPWZzKQotICAgICAgICBmaWxlX2xpc3QgPSBmcy53
cml0dGVuX2ZpbGVzLmtleXMoKQotICAgICAgICBmaWxlX2xpc3QucmVtb3ZlKCcvdG1wL2xheW91
dC10ZXN0LXJlc3VsdHMvdGVzdHNfcnVuMC50eHQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGxlbihmaWxlX2xpc3QpLCA0KQotICAgICAgICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxlX2xp
c3QsCi0gICAgICAgICAgICAiL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvcGFzc2VzL2ltYWdl
IikKLSAgICAgICAgc2VsZi5hc3NlcnRCYXNlbGluZXMoZmlsZV9saXN0LAotICAgICAgICAgICAg
Ii9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1h
Z2UiKQotCi0KLWNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICMgRklY
TUU6IGl0J3MgaGFyZCB0byBrbm93IHdoaWNoIHBsYXRmb3JtcyBhcmUgc2FmZSB0byB0ZXN0OyB0
aGUKLSAgICAjIGNocm9taXVtIHBsYXRmb3JtcyByZXF1aXJlIGEgY2hyb21pdW0gY2hlY2tvdXQs
IGFuZCB0aGUgbWFjIHBsYXRmb3JtCi0gICAgIyByZXF1aXJlcyBmY250bCwgc28gaXQgY2FuJ3Qg
YmUgdGVzdGVkIG9uIHdpbjMyLCBldGMuIFRoZXJlIGlzCi0gICAgIyBwcm9iYWJseSBhIGJldHRl
ciB3YXkgb2YgaGFuZGxpbmcgdGhpcy4KLSAgICBkZWYgZGlzYWJsZWRfdGVzdF9kYXJ3aW4oc2Vs
Zik6Ci0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAiZGFyd2luIjoKLSAgICAgICAgICAgIHJl
dHVybgotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0tcGxhdGZvcm0n
LCAnZHJ5cnVuJywgJ2Zhc3QvaHRtbCddLAotICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0t
cGxhdGZvcm0nLCAnZHJ5cnVuLW1hYycsICdmYXN0L2h0bWwnXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUpKQotCi0gICAgZGVmIHRlc3RfdGVzdChzZWxmKToK
LSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1wbGF0Zm9ybScsICdkcnly
dW4tdGVzdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0t
cGl4ZWwtdGVzdHMnXSkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0
dGVzdC5tYWluKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CShyZXZpc2lv
biA4NTk2NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0zNywxMyArMzcsMTMgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAKICAgICAi
IiJEaXNjb3ZlcnMgYW5kIHJ1bnMgd2Via2l0cHkgdW5pdCB0ZXN0cy4iIiIKIAotICAgIGRlZiBf
ZmluZF91bml0dGVzdF9maWxlcyhzZWxmLCB3ZWJraXRweV9kaXIpOgorICAgIGRlZiBfZmluZF90
ZXN0X2ZpbGVzKHNlbGYsIHdlYmtpdHB5X2Rpciwgc3VmZml4KToKICAgICAgICAgIiIiUmV0dXJu
IGEgbGlzdCBvZiBwYXRocyB0byBhbGwgdW5pdC10ZXN0IGZpbGVzLiIiIgogICAgICAgICB1bml0
dGVzdF9wYXRocyA9IFtdICAjIFJldHVybiB2YWx1ZS4KIAogICAgICAgICBmb3IgZGlyX3BhdGgs
IGRpcl9uYW1lcywgZmlsZV9uYW1lcyBpbiBvcy53YWxrKHdlYmtpdHB5X2Rpcik6CiAgICAgICAg
ICAgICBmb3IgZmlsZV9uYW1lIGluIGZpbGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgaWYgbm90
IGZpbGVfbmFtZS5lbmRzd2l0aCgiX3VuaXR0ZXN0LnB5Iik6CisgICAgICAgICAgICAgICAgaWYg
bm90IGZpbGVfbmFtZS5lbmRzd2l0aChzdWZmaXgpOgogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZQogICAgICAgICAgICAgICAgIHVuaXR0ZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyX3Bh
dGgsIGZpbGVfbmFtZSkKICAgICAgICAgICAgICAgICB1bml0dGVzdF9wYXRocy5hcHBlbmQodW5p
dHRlc3RfcGF0aCkKQEAgLTEyMiw5ICsxMjIsMTYgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAg
ICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbWJpbmVkIHdpdGggdGhlIGV4dGVybmFs
X3BhY2thZ2VfcGF0aHMgY29kZSBhYm92ZS4KICAgICAgICAgd2Via2l0cHlfZGlyID0gb3MucGF0
aC5kaXJuYW1lKHdlYmtpdHB5Ll9fZmlsZV9fKQogCisgICAgICAgIHNraXBfaW50ZWdyYXRpb25f
dGVzdHMgPSBGYWxzZQorICAgICAgICBpZiBsZW4oc3lzX2FyZ3YpID4gMSBhbmQgc3lzLmFyZ3Zb
MV0gPT0gIi0tc2tpcC1pbnRlZ3JhdGlvbnRlc3RzIjoKKyAgICAgICAgICAgIHN5cy5hcmd2LnJl
bW92ZSgiLS1za2lwLWludGVncmF0aW9udGVzdHMiKQorICAgICAgICAgICAgc2tpcF9pbnRlZ3Jh
dGlvbl90ZXN0cyA9IFRydWUKKwogICAgICAgICBtb2R1bGVzID0gW10KICAgICAgICAgZm9yIHBh
dGggaW4gW3dlYmtpdHB5X2Rpcl0gKyBleHRlcm5hbF9wYWNrYWdlX3BhdGhzOgotICAgICAgICAg
ICAgbW9kdWxlcy5leHRlbmQoc2VsZi5fbW9kdWxlc19mcm9tX3BhdGhzKHBhdGgsIHNlbGYuX2Zp
bmRfdW5pdHRlc3RfZmlsZXMocGF0aCkpKQorICAgICAgICAgICAgbW9kdWxlcy5leHRlbmQoc2Vs
Zi5fbW9kdWxlc19mcm9tX3BhdGhzKHBhdGgsIHNlbGYuX2ZpbmRfdGVzdF9maWxlcyhwYXRoLCAi
X3VuaXR0ZXN0LnB5IikpKQorICAgICAgICAgICAgaWYgbm90IHNraXBfaW50ZWdyYXRpb25fdGVz
dHM6CisgICAgICAgICAgICAgICAgbW9kdWxlcy5leHRlbmQoc2VsZi5fbW9kdWxlc19mcm9tX3Bh
dGhzKHBhdGgsIHNlbGYuX2ZpbmRfdGVzdF9maWxlcyhwYXRoLCAiX2ludGVncmF0aW9udGVzdC5w
eSIpKSkKICAgICAgICAgbW9kdWxlcy5zb3J0KCkKIAogICAgICAgICAjIFRoaXMgaXMgYSBzYW5p
dHkgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIHVuaXQtdGVzdCBkaXNjb3ZlcnkK
</data>
<flag name="review"
          id="85616"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="85617"
          type_id="3"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>