<?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>48820</bug_id>
          
          <creation_ts>2010-11-01 23:42:45 -0700</creation_ts>
          <short_desc>nrwt - checkpoint multiprocess work</short_desc>
          <delta_ts>2010-12-07 20:46:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>hayato</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>303238</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-01 23:42:45 -0700</bug_when>
    <thetext>nrwt - checkpoint multiprocess work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303239</commentid>
    <comment_count>1</comment_count>
      <attachid>72633</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-01 23:43:41 -0700</bug_when>
    <thetext>Created attachment 72633
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303240</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-01 23:44:29 -0700</bug_when>
    <thetext>checkpointing work in progress. The code seems to work and not wedge any more. But, it needs a lot more testing and cleanup, and then it needs to be broken into multiple chunks for review / landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305848</commentid>
    <comment_count>3</comment_count>
      <attachid>73184</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-06 20:45:21 -0700</bug_when>
    <thetext>Created attachment 73184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305849</commentid>
    <comment_count>4</comment_count>
      <attachid>73185</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-06 20:53:23 -0700</bug_when>
    <thetext>Created attachment 73185
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305851</commentid>
    <comment_count>5</comment_count>
      <attachid>73186</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-06 21:05:43 -0700</bug_when>
    <thetext>Created attachment 73186
merge to head (r71474)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306427</commentid>
    <comment_count>6</comment_count>
      <attachid>73301</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-08 15:59:37 -0800</bug_when>
    <thetext>Created attachment 73301
merge from trunk@71580</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308449</commentid>
    <comment_count>7</comment_count>
      <attachid>73722</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-12 02:01:36 -0800</bug_when>
    <thetext>Created attachment 73722
cleanup, merge to tip of tree as of r71873</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308451</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-12 02:05:03 -0800</bug_when>
    <thetext>Note that the code as it stands works fine on Mac and Linux (I think) if you want to apply it and start playing with it. We get a near-linear speed up on the tests up to at least 16 workers/processes (threads top out somewhere between 4 and 8, assuming things don&apos;t wedge) ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308664</commentid>
    <comment_count>9</comment_count>
      <attachid>73722</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-12 11:25:15 -0800</bug_when>
    <thetext>Comment on attachment 73722
cleanup, merge to tip of tree as of r71873

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

&gt; WebKitTools/ChangeLog:10
&gt; +        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:

So this isn&apos;t actually really a thread anymore?  I assume we&apos;ll fix the naming later.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:53
&gt; +from webkitpy.layout_tests.test_types import test_type_base
&gt; +from webkitpy.layout_tests.test_types import text_diff
&gt; +from webkitpy.layout_tests.test_types import image_diff

Isn&apos;t this just one import line with commas?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:94
&gt; +        _log.debug(&quot;%s Stacktrace for %s:\n%s&quot; % (name, test_name, error))
&gt; +        filename = os.path.join(options.results_directory, test_name)

Seems you&apos;re fixing path handling in this change as well as process/thread devisions which is slightly confusing.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:160
&gt; +            self._driver.run_test(test_info.uri, test_info.timeout,
&gt; +                                  test_info.image_checksum)

Seems we&apos;re almost just passing test_info, maybe that&apos;s the eventual goal.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:172
&gt; +class Worker(object):

I&apos;m assuming this object is in the parent process?  We should definitely separate parent vs. child classes in separate files.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:182
&gt; +        self._container = container

It&apos;s probably more accurately a test_queue or input_queue?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:186
&gt; +        self._name = &apos;worker-%d&apos; % worker_number

Seems name() is just a function which uses worker_number.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:216
&gt; +        if self._options.pixel_tests:
&gt; +            png_path = os.path.join(self._options.results_directory,
&gt; +                                    &quot;png_result%s.png&quot; %
&gt; +                                    self._worker_number)
&gt; +            test_args.png_path = png_path

It&apos;s always struck me as strange that CrDRT uses this file to pass the png data back to the parent instead of the parent just telling it where to write the final png.  But this is a long-standing design issue.  I guess other DRTs pass the data over the pipe, which has its own quirks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308678</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-12 11:58:20 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 73722 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73722&amp;action=review
&gt; 
&gt; &gt; WebKitTools/ChangeLog:10
&gt; &gt; +        * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
&gt; 
&gt; So this isn&apos;t actually really a thread anymore?  I assume we&apos;ll fix the naming later.
&gt;

Yes (that was in the email).
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:53
&gt; &gt; +from webkitpy.layout_tests.test_types import test_type_base
&gt; &gt; +from webkitpy.layout_tests.test_types import text_diff
&gt; &gt; +from webkitpy.layout_tests.test_types import image_diff
&gt; 
&gt; Isn&apos;t this just one import line with commas?
&gt; 

Could be. I usually import one package per line.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:94
&gt; &gt; +        _log.debug(&quot;%s Stacktrace for %s:\n%s&quot; % (name, test_name, error))
&gt; &gt; +        filename = os.path.join(options.results_directory, test_name)
&gt; 
&gt; Seems you&apos;re fixing path handling in this change as well as process/thread devisions which is slightly confusing.
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:160
&gt; &gt; +            self._driver.run_test(test_info.uri, test_info.timeout,
&gt; &gt; +                                  test_info.image_checksum)
&gt; 
&gt; Seems we&apos;re almost just passing test_info, maybe that&apos;s the eventual goal.
&gt; 

Yes, exactly. I told Ito-san that in a separate patch last night, and I think he might be making that change.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:172
&gt; &gt; +class Worker(object):
&gt; 
&gt; I&apos;m assuming this object is in the parent process?  We should definitely separate parent vs. child classes in separate files.
&gt;

No.  Worker objects are owned by the (perhaps not yet well named) WorkerThunk object in router.py. WorkerThunk is a base class subclassed by WorkerThread or WorkerProcess (also in router.py).

But, yes, they&apos;re in separate files.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:182
&gt; &gt; +        self._container = container
&gt; 
&gt; It&apos;s probably more accurately a test_queue or input_queue?
&gt;

No, it&apos;s a container, in the JSEE sense, if that means anything to you. It&apos;s the WorkerThread/Process.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:186
&gt; &gt; +        self._name = &apos;worker-%d&apos; % worker_number
&gt; 
&gt; Seems name() is just a function which uses worker_number.
&gt;

Sure.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:216
&gt; &gt; +        if self._options.pixel_tests:
&gt; &gt; +            png_path = os.path.join(self._options.results_directory,
&gt; &gt; +                                    &quot;png_result%s.png&quot; %
&gt; &gt; +                                    self._worker_number)
&gt; &gt; +            test_args.png_path = png_path
&gt; 
&gt; It&apos;s always struck me as strange that CrDRT uses this file to pass the png data back to the parent instead of the parent just telling it where to write the final png.  But this is a long-standing design issue.  I guess other DRTs pass the data over the pipe, which has its own quirks.

Yes, I also want to change this so that DRT&apos;s abstraction is the one we use. This approach is lame because it makes us have to write the data we get from DRT into a file, which we then read back into memory so we can write it over a pipe to ImageDiff. It&apos;s design for Chromium&apos;s implementation, and we need to change it to the WebKit default.

See that same patch that Ito-san is working on for reftests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309476</commentid>
    <comment_count>11</comment_count>
      <attachid>73937</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-15 15:34:15 -0800</bug_when>
    <thetext>Created attachment 73937
change default # of child processes for test port back to 1, merge to ToT as of r72041</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310622</commentid>
    <comment_count>12</comment_count>
      <attachid>74180</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-17 17:07:49 -0800</bug_when>
    <thetext>Created attachment 74180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311102</commentid>
    <comment_count>13</comment_count>
      <attachid>74292</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-18 14:49:43 -0800</bug_when>
    <thetext>Created attachment 74292
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313110</commentid>
    <comment_count>14</comment_count>
      <attachid>74718</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-23 19:03:22 -0800</bug_when>
    <thetext>Created attachment 74718
sync to r72641 + patch to bug 49779</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313547</commentid>
    <comment_count>15</comment_count>
      <attachid>74816</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-24 17:13:53 -0800</bug_when>
    <thetext>Created attachment 74816
sync to r72708</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315998</commentid>
    <comment_count>16</comment_count>
      <attachid>75348</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-01 20:02:54 -0800</bug_when>
    <thetext>Created attachment 75348
sync to r73080, clean up broker abstraction a bunch, clean up dump_render_tree_thread to track bug 50367</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316065</commentid>
    <comment_count>17</comment_count>
      <attachid>75364</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-02 03:01:44 -0800</bug_when>
    <thetext>Created attachment 75364
Patch - merge to r73080 plus the chain of bugs from 50367 .. 50381</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318576</commentid>
    <comment_count>18</comment_count>
      <attachid>75867</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-07 20:45:26 -0800</bug_when>
    <thetext>Created attachment 75867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318577</commentid>
    <comment_count>19</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-07 20:46:53 -0800</bug_when>
    <thetext>merged in latest patch changes from bugs 50557, 50375, and 50381, plus a few other minor changes/cleanup discovered in testing. Sync to ToT as of r73469.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72633</attachid>
            <date>2010-11-01 23:43:41 -0700</date>
            <delta_ts>2010-11-06 20:45:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48820-20101101234340.patch</filename>
            <type>text/plain</type>
            <size>81844</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwNDEzY2RhNDc1MzViODVlMThiY2ZjNDc2Mjk4OGVkOTc3ZTA2MTc1Li5jYTFjMjYy
Yzg2ZGRmZTRkMzA3YTA5NmE1NzI3ZmNjMzgxYzJkMTQyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGFsbCBvZiB0aGUg
TlJXVCBtdWx0aXRocmVhZGluZyBpc3N1ZXMgYnkgbW92aW5nIHRvCisgICAgICAgIG11bHRpcHJv
Y2Vzcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3ByaW50aW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlci5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyX3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3Rlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5OgorCiAyMDEwLTExLTAxICBKZW5uIEJyYWl0aHdh
aXRlICA8amVubmJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9i
ZW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkLnB5CmluZGV4IDNlM2JhMGIxNjc3MDQ1MDAzNmY3MzE1YWMxNjFlZjFmYjli
N2Q3MzUuLjEzOWZjNTJjYmRmY2QzYTNlMDNkNTVlOTZhMTlkMmIyNjc1NzY5NDUgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhy
ZWFkLnB5CkBAIC00MiwxMyArNDIsMTUgQEAgaW1wb3J0IGNvZGVjcwogaW1wb3J0IGNvcHkKIGlt
cG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCBRdWV1ZQogaW1wb3J0IHNpZ25hbAogaW1w
b3J0IHN5cwotaW1wb3J0IHRocmVhZAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKLWlt
cG9ydCB0cmFjZWJhY2sKKworCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVz
IGltcG9ydCB0ZXN0X3R5cGVfYmFzZQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90
eXBlcyBpbXBvcnQgdGV4dF9kaWZmCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5
cGVzIGltcG9ydCBpbWFnZV9kaWZmCiAKIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBpbXBvcnQgdGVz
dF9yZXN1bHRzCkBAIC01NywyNiArNTksOSBAQCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndl
YmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS4iCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgImR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkIikKIAogCi1kZWYgZmluZF90aHJlYWRfc3Rh
Y2soaWQpOgotICAgICIiIlJldHVybnMgYSBzdGFjayBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0
byBkdW1wIGEgc3RhY2sgdHJhY2UgZm9yCi0gICAgdGhlIGdpdmVuIHRocmVhZCBpZCAob3IgTm9u
ZSBpZiB0aGUgaWQgaXMgbm90IGZvdW5kKS4iIiIKLSAgICBmb3IgdGhyZWFkX2lkLCBzdGFjayBp
biBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKToKLSAgICAgICAgaWYgdGhyZWFkX2lkID09
IGlkOgotICAgICAgICAgICAgcmV0dXJuIHN0YWNrCi0gICAgcmV0dXJuIE5vbmUKLQotCi1kZWYg
bG9nX3N0YWNrKHN0YWNrKToKLSAgICAiIiJMb2cgYSBzdGFjayB0cmFjZSB0byBsb2cuZXJyb3Io
KS4iIiIKLSAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiB0cmFjZWJhY2su
ZXh0cmFjdF9zdGFjayhzdGFjayk6Ci0gICAgICAgIF9sb2cuZXJyb3IoJ0ZpbGU6ICIlcyIsIGxp
bmUgJWQsIGluICVzJyAlIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKSkKLSAgICAgICAgaWYgbGlu
ZToKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJXMnICUgbGluZS5zdHJpcCgpKQotCi0KIGRl
ZiBfcHJvY2Vzc19vdXRwdXQocG9ydCwgb3B0aW9ucywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0
ZXN0X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgIGNyYXNoLCB0aW1lb3V0LCB0ZXN0X3J1bl90
aW1lLCBhY3R1YWxfY2hlY2tzdW0sCi0gICAgICAgICAgICAgICAgICAgIG91dHB1dCwgZXJyb3Ip
OgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGVycm9yLCBuYW1lKToKICAgICAiIiJSZWNl
aXZlcyB0aGUgb3V0cHV0IGZyb20gYSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLCBzdWJqZWN0cyBp
dCB0byBhCiAgICAgbnVtYmVyIG9mIHRlc3RzLCBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgZmFpbHVy
ZSB0eXBlcyB0aGUgdGVzdCBwcm9kdWNlZC4KIApAQCAtODQsNyArNjksNyBAQCBkZWYgX3Byb2Nl
c3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdz
LAogICAgICAgcG9ydDogcG9ydC1zcGVjaWZpYyBob29rcwogICAgICAgb3B0aW9uczogY29tbWFu
ZCBsaW5lIG9wdGlvbnMgYXJndW1lbnQgZnJvbSBvcHRwYXJzZQogICAgICAgcHJvYzogYW4gYWN0
aXZlIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MKLSAgICAgIHRlc3RfaW5mbzogT2JqZWN0IGNvbnRh
aW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUsIHVyaSBhbmQgdGltZW91dAorICAgICAgdGVzdF9pbmZv
OiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSBhbmQgdGltZW91dAogICAgICAg
dGVzdF90eXBlczogbGlzdCBvZiB0ZXN0IHR5cGVzIHRvIHN1YmplY3QgdGhlIG91dHB1dCB0bwog
ICAgICAgdGVzdF9hcmdzOiBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIGVhY2ggdGVzdAogCkBA
IC05NSw4ICs4MCw5IEBAIGRlZiBfcHJvY2Vzc19vdXRwdXQocG9ydCwgb3B0aW9ucywgdGVzdF9p
bmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCiAgICAgIyBTb21lIHRlc3QgYXJncywgc3VjaCBh
cyB0aGUgaW1hZ2UgaGFzaCwgbWF5IGJlIGFkZGVkIG9yIGNoYW5nZWQgb24gYQogICAgICMgdGVz
dC1ieS10ZXN0IGJhc2lzLgogICAgIGxvY2FsX3Rlc3RfYXJncyA9IGNvcHkuY29weSh0ZXN0X2Fy
Z3MpCi0KKyAgICBsb2NhbF90ZXN0X2FyZ3MudXJpID0gdGVzdF9pbmZvLnVyaQogICAgIGxvY2Fs
X3Rlc3RfYXJncy5oYXNoID0gYWN0dWFsX2NoZWNrc3VtCisgICAgdGVzdF9uYW1lID0gcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5mby5maWxlbmFtZSkKIAogICAgIGlmIGNyYXNo
OgogICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKSkK
QEAgLTEwNCwxOCArOTAsMTQgQEAgZGVmIF9wcm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0
ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKICAgICAgICAgZmFpbHVyZXMuYXBwZW5k
KHRlc3RfZmFpbHVyZXMuRmFpbHVyZVRpbWVvdXQoKSkKIAogICAgIGlmIGNyYXNoOgotICAgICAg
ICBfbG9nLmRlYnVnKCJTdGFja3RyYWNlIGZvciAlczpcbiVzIiAlICh0ZXN0X2luZm8uZmlsZW5h
bWUsIGVycm9yKSkKLSAgICAgICAgIyBTdHJpcCBvZmYgImZpbGU6Ly8iIHNpbmNlIFJlbGF0aXZl
VGVzdEZpbGVuYW1lIGV4cGVjdHMKLSAgICAgICAgIyBmaWxlc3lzdGVtIHBhdGhzLgotICAgICAg
ICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5mby5maWxlbmFtZSkpCisg
ICAgICAgIF9sb2cuZGVidWcoIiVzIFN0YWNrdHJhY2UgZm9yICVzOlxuJXMiICUgKG5hbWUsIHRl
c3RfbmFtZSwgZXJyb3IpKQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5LCB0ZXN0X25hbWUpCiAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0
aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gKyAiLXN0YWNrLnR4dCIKICAgICAgICAgcG9ydC5tYXli
ZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKVswXSkKICAgICAgICAgd2l0
aCBjb2RlY3Mub3BlbihmaWxlbmFtZSwgIndiIiwgInV0Zi04IikgYXMgZmlsZToKICAgICAgICAg
ICAgIGZpbGUud3JpdGUoZXJyb3IpCiAgICAgZWxpZiBlcnJvcjoKLSAgICAgICAgX2xvZy5kZWJ1
ZygiUHJldmlvdXMgdGVzdCBvdXRwdXQgc3RkZXJyIGxpbmVzOlxuJXMiICUgZXJyb3IpCisgICAg
ICAgIF9sb2cuZGVidWcoIiVzICVzIHN0ZGVyciBsaW5lczpcbiVzIiAlIChuYW1lLCB0ZXN0X25h
bWUsIGVycm9yKSkKIAogICAgICMgQ2hlY2sgdGhlIG91dHB1dCBhbmQgc2F2ZSB0aGUgcmVzdWx0
cy4KICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKQEAgLTEzOCwzMiArMTIwLDEwIEBAIGRl
ZiBfcHJvY2Vzc19vdXRwdXQocG9ydCwgb3B0aW9ucywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0
ZXN0X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3RpbWVf
Zm9yX2FsbF9kaWZmcywgdGltZV9mb3JfZGlmZnMpCiAKIAotZGVmIF9wYWRfdGltZW91dCh0aW1l
b3V0KToKLSAgICAiIiJSZXR1cm5zIGEgc2FmZSBtdWx0aXBsZSBvZiB0aGUgcGVyLXRlc3QgdGlt
ZW91dCB2YWx1ZSB0byB1c2UKLSAgICB0byBkZXRlY3QgaHVuZyB0ZXN0IHRocmVhZHMuCi0KLSAg
ICAiIiIKLSAgICAjIFdoZW4gd2UncmUgcnVubmluZyBvbmUgdGVzdCBwZXIgRHVtcFJlbmRlclRy
ZWUgcHJvY2Vzcywgd2UgY2FuCi0gICAgIyBlbmZvcmNlIGEgaGFyZCB0aW1lb3V0LiAgVGhlIER1
bXBSZW5kZXJUcmVlIHdhdGNoZG9nIHVzZXMgMi41eAotICAgICMgdGhlIHRpbWVvdXQ7IHdlIHdh
bnQgdG8gYmUgbGFyZ2VyIHRoYW4gdGhhdC4KLSAgICByZXR1cm4gdGltZW91dCAqIDMKLQotCi1k
ZWYgX21pbGxpc2Vjb25kc190b19zZWNvbmRzKG1zZWNzKToKLSAgICByZXR1cm4gZmxvYXQobXNl
Y3MpIC8gMTAwMC4wCi0KLQotZGVmIF9pbWFnZV9oYXNoKHRlc3RfaW5mbywgdGVzdF9hcmdzLCBv
cHRpb25zKToKLSAgICAiIiJSZXR1cm5zIHRoZSBpbWFnZSBoYXNoIG9mIHRoZSB0ZXN0IGlmIGl0
J3MgbmVlZGVkLCBvdGhlcndpc2UgTm9uZS4iIiIKLSAgICBpZiAodGVzdF9hcmdzLm5ld19iYXNl
bGluZSBvciB0ZXN0X2FyZ3MucmVzZXRfcmVzdWx0cyBvciBub3Qgb3B0aW9ucy5waXhlbF90ZXN0
cyk6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgcmV0dXJuIHRlc3RfaW5mby5pbWFnZV9oYXNo
KCkKLQotCiBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICIi
IlRocmVhZCB3cmFwcGVyIGZvciBydW5uaW5nIGEgc2luZ2xlIHRlc3QgZmlsZS4iIiIKIAotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMs
IHRlc3RfYXJncyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtl
cl9udW1iZXIsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzKToKICAgICAgICAgIiIi
CiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgcG9ydDogb2JqZWN0IGltcGxlbWVudGluZyBwb3J0
LXNwZWNpZmljIGhvb2tzCkBAIC0xODEsNiArMTQxLDggQEAgY2xhc3MgU2luZ2xlVGVzdFRocmVh
ZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IHRlc3RfdHlw
ZXMKICAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gdGVzdF9hcmdzCiAgICAgICAgIHNlbGYuX2Ry
aXZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIK
KyAgICAgICAgc2VsZi5fbmFtZSA9ICd3b3JrZXItJWQnICUgd29ya2VyX251bWJlcgogCiAgICAg
ZGVmIHJ1bihzZWxmKToKICAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQpAQCAtMTkyLDI2MyAr
MTU0LDEzMSBAQCBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAg
ICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fdGVzdF9h
cmdzLnBuZ19wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fb3B0aW9ucykKICAgICAgICAgc2VsZi5fZHJpdmVyLnN0YXJ0KCkKLSAgICAg
ICAgaW1hZ2VfaGFzaCA9IF9pbWFnZV9oYXNoKHRlc3RfaW5mbywgc2VsZi5fdGVzdF9hcmdzLCBz
ZWxmLl9vcHRpb25zKQogICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAgICAgIGNyYXNo
LCB0aW1lb3V0LCBhY3R1YWxfY2hlY2tzdW0sIG91dHB1dCwgZXJyb3IgPSBcCi0gICAgICAgICAg
ICBzZWxmLl9kcml2ZXIucnVuX3Rlc3QodGVzdF9pbmZvLnVyaS5zdHJpcCgpLCB0ZXN0X2luZm8u
dGltZW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9oYXNoKQor
ICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5mby51cmksIHRlc3RfaW5m
by50aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5mby5p
bWFnZV9jaGVja3N1bSkKICAgICAgICAgZW5kID0gdGltZS50aW1lKCkKICAgICAgICAgc2VsZi5f
dGVzdF9yZXN1bHQgPSBfcHJvY2Vzc19vdXRwdXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywK
ICAgICAgICAgICAgIHRlc3RfaW5mbywgc2VsZi5fdGVzdF90eXBlcywgc2VsZi5fdGVzdF9hcmdz
LAogICAgICAgICAgICAgY3Jhc2gsIHRpbWVvdXQsIGVuZCAtIHN0YXJ0LAotICAgICAgICAgICAg
YWN0dWFsX2NoZWNrc3VtLCBvdXRwdXQsIGVycm9yKQorICAgICAgICAgICAgYWN0dWFsX2NoZWNr
c3VtLCBvdXRwdXQsIGVycm9yLCBzZWxmLl9uYW1lKQogICAgICAgICBzZWxmLl9kcml2ZXIuc3Rv
cCgpCiAKICAgICBkZWYgZ2V0X3Rlc3RfcmVzdWx0KHNlbGYpOgogICAgICAgICByZXR1cm4gc2Vs
Zi5fdGVzdF9yZXN1bHQKIAogCi1jbGFzcyBXYXRjaGFibGVUaHJlYWQodGhyZWFkaW5nLlRocmVh
ZCk6Ci0gICAgIiIiVGhpcyBjbGFzcyBhYnN0cmFjdHMgYW4gaW50ZXJmYWNlIHVzZWQgYnkKLSAg
ICBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNo
IGZvciB0aHJlYWQKLSAgICBtYW5hZ2VtZW50LiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToK
LSAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9j
YW5jZWxlZCA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gTm9uZQotICAg
ICAgICBzZWxmLl9uZXh0X3RpbWVvdXQgPSBOb25lCi0gICAgICAgIHNlbGYuX3RocmVhZF9pZCA9
IE5vbmUKLQotICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAgICIiIlNldCBhIGZsYWcgdGVs
bGluZyB0aGlzIHRocmVhZCB0byBxdWl0LiIiIgotICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRy
dWUKLQotICAgIGRlZiBjbGVhcl9uZXh0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgICIiIk1hcmsg
YSBmbGFnIHRlbGxpbmcgdGhpcyB0aHJlYWQgdG8gc3RvcCBzZXR0aW5nIHRpbWVvdXRzLiIiIgot
ICAgICAgICBzZWxmLl90aW1lb3V0ID0gMAotCi0gICAgZGVmIGV4Y2VwdGlvbl9pbmZvKHNlbGYp
OgotICAgICAgICAiIiJJZiBydW4oKSB0ZXJtaW5hdGVkIG9uIGFuIHVuY2F1Z2h0IGV4Y2VwdGlv
biwgcmV0dXJuIGl0IGhlcmUKLSAgICAgICAgKCh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKSB0dXBs
ZSkuCi0gICAgICAgIFJldHVybnMgTm9uZSBpZiBydW4oKSB0ZXJtaW5hdGVkIG5vcm1hbGx5LiBN
ZWFudCB0byBiZSBjYWxsZWQgYWZ0ZXIKLSAgICAgICAgam9pbmluZyB0aGlzIHRocmVhZC4iIiIK
LSAgICAgICAgcmV0dXJuIHNlbGYuX2V4Y2VwdGlvbl9pbmZvCi0KLSAgICBkZWYgaWQoc2VsZik6
Ci0gICAgICAgICIiIlJldHVybiBhIHRocmVhZCBpZGVudGlmaWVyLiIiIgotICAgICAgICByZXR1
cm4gc2VsZi5fdGhyZWFkX2lkCi0KLSAgICBkZWYgbmV4dF90aW1lb3V0KHNlbGYpOgotICAgICAg
ICAiIiJSZXR1cm4gdGhlIHRpbWUgdGhlIHRlc3QgaXMgc3VwcG9zZWQgdG8gZmluaXNoIGJ5LiIi
IgotICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0Ci0KLQotY2xhc3MgVGVzdFNoZWxs
VGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9w
dGlvbnMsIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1ZSwKLSAgICAgICAgICAgICAg
ICAgdGVzdF90eXBlcywgdGVzdF9hcmdzKToKK2NsYXNzIFdvcmtlcihvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBjb250YWluZXIsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIp
OgogICAgICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoaXMgRHVt
cFJlbmRlclRyZWUgdGhyZWFkLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgcG9ydDogaW50
ZXJmYWNlIHRvIHBvcnQtc3BlY2lmaWMgaG9va3MKLSAgICAgICAgICBvcHRpb25zOiBjb21tYW5k
IGxpbmUgb3B0aW9ucyBhcmd1bWVudCBmcm9tIG9wdHBhcnNlCi0gICAgICAgICAgZmlsZW5hbWVf
bGlzdF9xdWV1ZTogQSB0aHJlYWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IGNvbnRhaW5zIGxpc3Rz
Ci0gICAgICAgICAgICAgIG9mIHR1cGxlcyBvZiAoZmlsZW5hbWUsIHVyaSkgcGFpcnMuCi0gICAg
ICAgICAgcmVzdWx0X3F1ZXVlOiBBIHRocmVhZCBzYWZlIFF1ZXVlIGNsYXNzIHRoYXQgd2lsbCBj
b250YWluCi0gICAgICAgICAgICAgIHNlcmlhbGl6ZWQgVGVzdFJlc3VsdCBvYmplY3RzLgotICAg
ICAgICAgIHRlc3RfdHlwZXM6IEEgbGlzdCBvZiBUZXN0VHlwZSBvYmplY3RzIHRvIHJ1biB0aGUg
dGVzdCBvdXRwdXQKLSAgICAgICAgICAgICAgYWdhaW5zdC4KLSAgICAgICAgICB0ZXN0X2FyZ3M6
IEEgVGVzdEFyZ3VtZW50cyBvYmplY3QgdG8gcGFzcyB0byBlYWNoIFRlc3RUeXBlLgorICAgICAg
ICAgIGNvbnRhaW5lcjogY29udGFpbmVyIG9iamVjdCB0byByZWNlaXZlIHRlc3RzIGZyb20KKyAg
ICAgICAgICB3b3JrZXJfbnVtYmVyOiBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZwogCiAgICAgICAg
ICIiIgotICAgICAgICBXYXRjaGFibGVUaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2Vs
Zi5fY2FuY2VsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9jb250YWluZXIgPSBjb250YWluZXIK
ICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlv
bnMKLSAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZSA9IGZpbGVuYW1lX2xpc3RfcXVl
dWUKLSAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gcmVzdWx0X3F1ZXVlCisgICAgICAgIHNl
bGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX25hbWUgPSAn
d29ya2VyLSVkJyAlIHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSA9IHNl
bGYuX29wdGlvbnMuYmF0Y2hfc2l6ZQorICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKwog
ICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0ID0gW10KLSAgICAgICAgc2VsZi5fdGVzdF90eXBl
cyA9IHRlc3RfdHlwZXMKLSAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gdGVzdF9hcmdzCisgICAg
ICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSBbXQorICAgICAgICBmb3IgY2xzIGluIHNlbGYuX3Rlc3Rf
dHlwZV9jbGFzc2VzKCk6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLmFwcGVuZChjbHMo
c2VsZi5fcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKKyAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0g
c2VsZi5fdGVzdF9hcmdzKHdvcmtlcl9udW1iZXIpCiAgICAgICAgIHNlbGYuX2RyaXZlciA9IE5v
bmUKLSAgICAgICAgc2VsZi5fdGVzdF9ncm91cF90aW1pbmdfc3RhdHMgPSB7fQotICAgICAgICBz
ZWxmLl90ZXN0X3Jlc3VsdHMgPSBbXQotICAgICAgICBzZWxmLl9udW1fdGVzdHMgPSAwCi0gICAg
ICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSAwCi0gICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IDAKLSAg
ICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxzZQotICAgICAgICBzZWxmLl9odHRwX2xv
Y2tfd2FpdF9iZWdpbiA9IDAKLSAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID0gMAot
Ci0gICAgICAgICMgQ3VycmVudCBncm91cCBvZiB0ZXN0cyB3ZSdyZSBydW5uaW5nLgotICAgICAg
ICBzZWxmLl9jdXJyZW50X2dyb3VwID0gTm9uZQotICAgICAgICAjIE51bWJlciBvZiB0ZXN0cyBp
biBzZWxmLl9jdXJyZW50X2dyb3VwLgotICAgICAgICBzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVu
dF9ncm91cCA9IE5vbmUKLSAgICAgICAgIyBUaW1lIGF0IHdoaWNoIHdlIHN0YXJ0ZWQgcnVubmlu
ZyB0ZXN0cyBmcm9tIHNlbGYuX2N1cnJlbnRfZ3JvdXAuCi0gICAgICAgIHNlbGYuX2N1cnJlbnRf
Z3JvdXBfc3RhcnRfdGltZSA9IE5vbmUKLQotICAgIGRlZiBnZXRfdGVzdF9ncm91cF90aW1pbmdf
c3RhdHMoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgdGVz
dCBncm91cCB0byBhIHR1cGxlIG9mCi0gICAgICAgIChudW1iZXIgb2YgdGVzdHMgaW4gdGhhdCBn
cm91cCwgdGltZSB0byBydW4gdGhlIHRlc3RzKSIiIgotICAgICAgICByZXR1cm4gc2VsZi5fdGVz
dF9ncm91cF90aW1pbmdfc3RhdHMKLQotICAgIGRlZiBnZXRfdGVzdF9yZXN1bHRzKHNlbGYpOgot
ICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHRlc3RzIHJ1biBvbiB0aGlzIHRocmVh
ZC4KLQotICAgICAgICBUaGlzIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHBlci10aHJlYWQgc3RhdGlz
dGljcy4KLQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfcmVzdWx0cwot
Ci0gICAgZGVmIGdldF90b3RhbF90aW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gbWF4KHNlbGYu
X3N0b3BfdGltZSAtIHNlbGYuX3N0YXJ0X3RpbWUgLQotICAgICAgICAgICAgICAgICAgIHNlbGYu
X2h0dHBfbG9ja193YWl0X3RpbWUoKSwgMC4wKQotCi0gICAgZGVmIGdldF9udW1fdGVzdHMoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9udW1fdGVzdHMKLQotICAgIGRlZiBydW4oc2VsZik6
Ci0gICAgICAgICIiIkRlbGVnYXRlIG1haW4gd29yayB0byBhIGhlbHBlciBtZXRob2QgYW5kIHdh
dGNoIGZvciB1bmNhdWdodAotICAgICAgICBleGNlcHRpb25zLiIiIgotICAgICAgICBzZWxmLl9j
b3ZlcmVkX3J1bigpCi0KLSAgICBkZWYgX2NvdmVyZWRfcnVuKHNlbGYpOgotICAgICAgICAjIEZJ
WE1FOiB0aGlzIGlzIGEgc2VwYXJhdGUgcm91dGluZSB0byB3b3JrIGFyb3VuZCBhIGJ1ZwotICAg
ICAgICAjIGluIGNvdmVyYWdlOiBzZWUgaHR0cDovL2JpdGJ1Y2tldC5vcmcvbmVkL2NvdmVyYWdl
cHkvaXNzdWUvODUuCi0gICAgICAgIHNlbGYuX3RocmVhZF9pZCA9IHRocmVhZC5nZXRfaWRlbnQo
KQotICAgICAgICBzZWxmLl9zdGFydF90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5f
bnVtX3Rlc3RzID0gMAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCclcyBz
dGFydGluZycgJSAoc2VsZi5nZXROYW1lKCkpKQotICAgICAgICAgICAgc2VsZi5fcnVuKHRlc3Rf
cnVubmVyPU5vbmUsIHJlc3VsdF9zdW1tYXJ5PU5vbmUpCi0gICAgICAgICAgICBfbG9nLmRlYnVn
KCclcyBkb25lICglZCB0ZXN0cyknICUgKHNlbGYuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLmdldF9udW1fdGVzdHMoKSkpCi0gICAgICAgIGV4Y2VwdCBLZXlib2FyZElu
dGVycnVwdDoKLSAgICAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZv
KCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIGludGVycnVwdGVkIiAlIHNlbGYuZ2V0TmFt
ZSgpKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAjIFNhdmUgdGhlIGV4Y2VwdGlvbiBm
b3Igb3VyIGNhbGxlciB0byBzZWUuCi0gICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9
IHN5cy5leGNfaW5mbygpCi0gICAgICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSB0aW1lLnRpbWUo
KQotICAgICAgICAgICAgX2xvZy5lcnJvcignJXMgZHlpbmcsIGV4Y2VwdGlvbiByYWlzZWQnICUg
c2VsZi5nZXROYW1lKCkpCi0KLSAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkK
LQotICAgIGRlZiBydW5faW5fbWFpbl90aHJlYWQoc2VsZiwgdGVzdF9ydW5uZXIsIHJlc3VsdF9z
dW1tYXJ5KToKLSAgICAgICAgIiIiVGhpcyBob29rIGFsbG93cyB1cyB0byBydW4gdGhlIHRlc3Rz
IGZyb20gdGhlIG1haW4gdGhyZWFkIGlmCi0gICAgICAgIC0tbnVtLXRlc3Qtc2hlbGxzPT0xLCBp
bnN0ZWFkIG9mIGhhdmluZyB0byBhbHdheXMgcnVuIHR3byBvciBtb3JlCi0gICAgICAgIHRocmVh
ZHMuIFRoaXMgYWxsb3dzIHVzIHRvIGRlYnVnIHRoZSB0ZXN0IGhhcm5lc3Mgd2l0aG91dCBoYXZp
bmcgdG8KLSAgICAgICAgZG8gbXVsdGktdGhyZWFkZWQgZGVidWdnaW5nLiIiIgotICAgICAgICBz
ZWxmLl9ydW4odGVzdF9ydW5uZXIsIHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgZGVmIGNhbmNlbChz
ZWxmKToKLSAgICAgICAgIiIiQ2xlYW4gdXAgaHR0cCBsb2NrIGFuZCBzZXQgYSBmbGFnIHRlbGxp
bmcgdGhpcyB0aHJlYWQgdG8gcXVpdC4iIiIKLSAgICAgICAgc2VsZi5fc3RvcF9odHRwX2xvY2so
KQotICAgICAgICBXYXRjaGFibGVUaHJlYWQuY2FuY2VsKHNlbGYpCi0KLSAgICBkZWYgbmV4dF90
aW1lb3V0KHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHRpbWUgdGhlIHRlc3QgaXMgc3Vw
cG9zZWQgdG8gZmluaXNoIGJ5LiIiIgotICAgICAgICBpZiBzZWxmLl9uZXh0X3RpbWVvdXQ6Ci0g
ICAgICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0ICsgc2VsZi5faHR0cF9sb2NrX3dh
aXRfdGltZSgpCi0gICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVvdXQKLQotICAgIGRlZiBf
aHR0cF9sb2NrX3dhaXRfdGltZShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIHdo
YXQgaHR0cCBsb2NraW5nIHRha2VzLiIiIgotICAgICAgICBpZiBzZWxmLl9odHRwX2xvY2tfd2Fp
dF9iZWdpbiA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgaWYgc2VsZi5faHR0
cF9sb2NrX3dhaXRfZW5kID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gdGltZS50aW1lKCkgLSBz
ZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbgotICAgICAgICByZXR1cm4gc2VsZi5faHR0cF9sb2Nr
X3dhaXRfZW5kIC0gc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4KLQotICAgIGRlZiBfcnVuKHNl
bGYsIHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIk1haW4gd29yayBl
bnRyeSBwb2ludCBvZiB0aGUgdGhyZWFkLiBCYXNpY2FsbHkgd2UgcHVsbCB1cmxzIGZyb20gdGhl
Ci0gICAgICAgIGZpbGVuYW1lIHF1ZXVlIGFuZCBydW4gdGhlIHRlc3RzIHVudGlsIHdlIHJ1biBv
dXQgb2YgdXJscy4KLQotICAgICAgICBJZiB0ZXN0X3J1bm5lciBpcyBub3QgTm9uZSwgdGhlbiB3
ZSBjYWxsIHRlc3RfcnVubmVyLlVwZGF0ZVN1bW1hcnkoKQotICAgICAgICB3aXRoIHRoZSByZXN1
bHRzIG9mIGVhY2ggdGVzdC4iIiIKLSAgICAgICAgYmF0Y2hfc2l6ZSA9IHNlbGYuX29wdGlvbnMu
YmF0Y2hfc2l6ZQotICAgICAgICBiYXRjaF9jb3VudCA9IDAKLQotICAgICAgICAjIEFwcGVuZCB0
ZXN0cyB3ZSdyZSBydW5uaW5nIHRvIHRoZSBleGlzdGluZyB0ZXN0c19ydW4udHh0IGZpbGUuCi0g
ICAgICAgICMgVGhpcyBpcyBjcmVhdGVkIGluIHJ1bl93ZWJraXRfdGVzdHMucHk6X1ByZXBhcmVM
aXN0c0FuZFByaW50T3V0cHV0LgogICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBvcy5wYXRo
LmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0c19ydW4udHh0IikKLSAgICAgICAgdGVzdHNf
cnVuX2ZpbGUgPSBjb2RlY3Mub3Blbih0ZXN0c19ydW5fZmlsZW5hbWUsICJhIiwgInV0Zi04IikK
LQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgaWYgc2VsZi5fY2FuY2VsZWQ6Ci0g
ICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGVzdGluZyBjYW5jZWxsZWQnKQotICAgICAgICAg
ICAgICAgIHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICByZXR1cm4KLQot
ICAgICAgICAgICAgaWYgbGVuKHNlbGYuX2ZpbGVuYW1lX2xpc3QpIGlzIDA6Ci0gICAgICAgICAg
ICAgICAgaWYgc2VsZi5fY3VycmVudF9ncm91cCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fdGVzdF9ncm91cF90aW1pbmdfc3RhdHNbc2VsZi5fY3VycmVudF9ncm91cF0g
PSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRf
Z3JvdXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGltZS50aW1lKCkgLSBzZWxmLl9jdXJy
ZW50X2dyb3VwX3N0YXJ0X3RpbWUpCi0KLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXAsIHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlLmdldF9ub3dh
aXQoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fc3RvcF9odHRwX2xvY2soKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9r
aWxsX2R1bXBfcmVuZGVyX3RyZWUoKQotICAgICAgICAgICAgICAgICAgICB0ZXN0c19ydW5fZmls
ZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy53YWl0X2Zvcl9odHRwZDoKLSAgICAgICAgICAgICAgICAgICAgaWYg
c2VsZi5fY3VycmVudF9ncm91cCA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luID0gdGltZS50aW1lKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigp
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gVHJ1ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID0gdGltZS50
aW1lKCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3BfaHR0cF9sb2NrKCkKLQotICAgICAgICAg
ICAgICAgIHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2dyb3VwID0gbGVuKHNlbGYuX2ZpbGVu
YW1lX2xpc3QpCi0gICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9ncm91cF9zdGFydF90aW1l
ID0gdGltZS50aW1lKCkKLQotICAgICAgICAgICAgdGVzdF9pbmZvID0gc2VsZi5fZmlsZW5hbWVf
bGlzdC5wb3AoKQotCi0gICAgICAgICAgICAjIFdlIGhhdmUgYSB1cmwsIHJ1biB0ZXN0cy4KLSAg
ICAgICAgICAgIGJhdGNoX2NvdW50ICs9IDEKLSAgICAgICAgICAgIHNlbGYuX251bV90ZXN0cyAr
PSAxCi0gICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3Rfc2luZ2x5KHRlc3RfaW5mbykKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3QodGVzdF9p
bmZvKQotCi0gICAgICAgICAgICBmaWxlbmFtZSA9IHRlc3RfaW5mby5maWxlbmFtZQotICAgICAg
ICAgICAgdGVzdHNfcnVuX2ZpbGUud3JpdGUoZmlsZW5hbWUgKyAiXG4iKQotICAgICAgICAgICAg
aWYgcmVzdWx0LmZhaWx1cmVzOgotICAgICAgICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgRHVt
cFJlbmRlclRyZWUgaWYgd2UgbmVlZCB0by4KLSAgICAgICAgICAgICAgICBpZiBsZW4oWzEgZm9y
IGYgaW4gcmVzdWx0LmZhaWx1cmVzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBmLnNob3Vs
ZF9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKV0pOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9r
aWxsX2R1bXBfcmVuZGVyX3RyZWUoKQotICAgICAgICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBi
YXRjaCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgotICAgICAgICAgICAgICAg
ICAgICBiYXRjaF9jb3VudCA9IDAKLSAgICAgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBt
ZXNzYWdlKHMpLgotICAgICAgICAgICAgICAgIGVycm9yX3N0ciA9ICdcbicuam9pbihbJyAgJyAr
IGYubWVzc2FnZSgpIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZiBpbiByZXN1bHQuZmFpbHVyZXNdKQotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVz
IGZhaWxlZDpcbiVzIiAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9zdHIpKQotICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuZ2V0TmFtZSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVu
YW1lKGZpbGVuYW1lKSkpCi0gICAgICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUucHV0KHJlc3Vs
dC5kdW1wcygpKQotCi0gICAgICAgICAgICBpZiBiYXRjaF9zaXplID4gMCBhbmQgYmF0Y2hfY291
bnQgPiBiYXRjaF9zaXplOgotICAgICAgICAgICAgICAgICMgQm91bmNlIHRoZSBzaGVsbCBhbmQg
cmVzZXQgY291bnQuCi0gICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVl
KCkKLSAgICAgICAgICAgICAgICBiYXRjaF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5fdGVzdHNf
cnVuX2ZpbGUgPSBjb2RlY3Mub3Blbih0ZXN0c19ydW5fZmlsZW5hbWUsICJhIiwgInV0Zi04IikK
KworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmKToKKyAgICAgICAgIiIiU3RvcCByZWNlaXZlZCAt
IG5vIG1vcmUgdGVzdHMgdG8gcnVuLiIiIgorICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVy
X3RyZWUoKQorICAgICAgICBpZiBzZWxmLl90ZXN0c19ydW5fZmlsZToKKyAgICAgICAgICAgIHNl
bGYuX3Rlc3RzX3J1bl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9m
aWxlID0gTm9uZQorCisgICAgZGVmIF90ZXN0X2FyZ3Moc2VsZiwgd29ya2VyX251bWJlcik6Cisg
ICAgICAgICIiIlJldHVybnMgdGhlIHR1cGxlIG9mIGFyZ3VtZW50cyBmb3IgdGVzdHMgYW5kIGZv
ciBEdW1wUmVuZGVyVHJlZS4iIiIKKyAgICAgICAgdGVzdF9hcmdzID0gdGVzdF90eXBlX2Jhc2Uu
VGVzdEFyZ3VtZW50cygpCisgICAgICAgIHRlc3RfYXJncy5wbmdfcGF0aCA9IE5vbmUKKyAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKKyAgICAgICAgICAgIHBuZ19wYXRoID0g
b3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicG5nX3Jlc3VsdCVzLnBuZyIgJQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlcikKKyAgICAgICAg
ICAgIHRlc3RfYXJncy5wbmdfcGF0aCA9IHBuZ19wYXRoCisgICAgICAgIHRlc3RfYXJncy5uZXdf
YmFzZWxpbmUgPSBzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZQorICAgICAgICB0ZXN0X2FyZ3Mu
cmVzZXRfcmVzdWx0cyA9IHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cworCisgICAgICAgIHJl
dHVybiB0ZXN0X2FyZ3MKKworICAgIGRlZiBfbmVlZHNfaW1hZ2VfaGFzaChzZWxmKToKKyAgICAg
ICAgIiIiUmV0dXJucyB0aGUgaW1hZ2UgaGFzaCBvZiB0aGUgdGVzdCBpZiBpdCdzIG5lZWRlZCwg
b3RoZXJ3aXNlIE5vbmUuIiIiCisgICAgICAgIHJldHVybiAoc2VsZi5fb3B0aW9ucy5uZXdfYmFz
ZWxpbmUgb3Igc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzIG9yCisgICAgICAgICAgICAgICAg
c2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cykKKworICAgIGRlZiBfdGVzdF90eXBlX2NsYXNzZXMo
c2VsZik6CisgICAgICAgIGNsYXNzZXMgPSBbdGV4dF9kaWZmLlRlc3RUZXh0RGlmZl0KKyAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKKyAgICAgICAgICAgIGNsYXNzZXMuYXBw
ZW5kKGltYWdlX2RpZmYuSW1hZ2VEaWZmKQorICAgICAgICByZXR1cm4gY2xhc3NlcworCisgICAg
ZGVmIHJ1bl90ZXN0KHNlbGYsIHRlc3RfaW5mbyk6CisgICAgICAgIGZpbGVuYW1lID0gdGVzdF9p
bmZvLmZpbGVuYW1lCisgICAgICAgIHRlc3RfaW5mby51cmkgPSBzZWxmLl9wb3J0LmZpbGVuYW1l
X3RvX3VyaShmaWxlbmFtZSkKKyAgICAgICAgaWYgc2VsZi5fbmVlZHNfaW1hZ2VfaGFzaCgpOgor
ICAgICAgICAgICAgdGVzdF9pbmZvLmltYWdlX2NoZWNrc3VtID0gc2VsZi5fcG9ydC5leHBlY3Rl
ZF9jaGVja3N1bShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgKz0gMQorCisg
ICAgICAgICMgV2UgZ2l2ZSBEUlQgc29tZSBleHRyYSB0aW1lIHRvIGRldGVjdCBhIHRpbWVvdXQs
IGFuZCB0aGVuCisgICAgICAgICMgZ2l2ZSBvdXIgd2F0Y2hkb2cgdGhyZWFkIGEgc2ltaWxhciBh
bW91bnQgdG8gZGV0ZWN0IGEgaHVuZworICAgICAgICAjIERSVC4gTm90ZSB0aGF0IHdlIG5lZWQg
dG8gY29udmVydCB0aGUgdGVzdCB0aW1lb3V0IGZyb20gYQorICAgICAgICAjIHN0cmluZyB2YWx1
ZSBpbiBtaWxsaXNlY29uZHMgdG8gYSBmbG9hdCBmb3IgUHl0aG9uLgorICAgICAgICBwYWRkaW5n
ID0gMy4wCisgICAgICAgIHRocmVhZF90aW1lb3V0ID0gZmxvYXQodGVzdF9pbmZvLnRpbWVvdXQp
IC8gMTAwMC4wICsgcGFkZGluZwogCi0gICAgICAgICAgICBpZiB0ZXN0X3J1bm5lcjoKLSAgICAg
ICAgICAgICAgICB0ZXN0X3J1bm5lci51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKLQot
ICAgIGRlZiBfcnVuX3Rlc3Rfc2luZ2x5KHNlbGYsIHRlc3RfaW5mbyk6CisgICAgICAgIHN0YXJ0
ID0gdGltZS50aW1lKCkKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgorICAg
ICAgICAgICAgc2VsZi5fY29udGFpbmVyLnN0YXJ0ZWRfdGVzdCh0ZXN0X2luZm8sIHRocmVhZF90
aW1lb3V0ICsgcGFkZGluZykKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X2lu
X2Fub3RoZXJfdGhyZWFkKHRlc3RfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1lb3V0KQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgc2VsZi5fY29udGFpbmVyLnN0YXJ0ZWRfdGVzdCh0ZXN0X2luZm8sIHRocmVh
ZF90aW1lb3V0KQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5fdGhpc190
aHJlYWQodGVzdF9pbmZvKQorCisgICAgICAgIHNlbGYuX2NvbnRhaW5lci5maW5pc2hlZF90ZXN0
KHJlc3VsdCwgdGltZS50aW1lKCkgLSBzdGFydCkKKworICAgICAgICBpZiBzZWxmLl9iYXRjaF9z
aXplID4gMCBhbmQgc2VsZi5fYmF0Y2hfY291bnQgPiBzZWxmLl9iYXRjaF9zaXplOgorICAgICAg
ICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNldCBjb3VudC4KKyAgICAgICAgICAgIHNl
bGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisgICAgICAgICAgICBzZWxmLl9iYXRjaF9jb3Vu
dCA9IDAKKworICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZS53cml0ZShmaWxlbmFtZSArICJc
biIpCisgICAgICAgIGlmIHJlc3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgICMgQ2hlY2sgYW5k
IGtpbGwgRHVtcFJlbmRlclRyZWUgaWYgd2UgbmVlZCB0by4KKyAgICAgICAgICAgIGlmIGxlbihb
MSBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXMKKyAgICAgICAgICAgICAgICAgICAgaWYgZi5zaG91
bGRfa2lsbF9kdW1wX3JlbmRlcl90cmVlKCldKToKKyAgICAgICAgICAgICAgICBzZWxmLl9raWxs
X2R1bXBfcmVuZGVyX3RyZWUoKQorICAgICAgICAgICAgICAgICMgUmVzZXQgdGhlIGJhdGNoIGNv
dW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQuCisgICAgICAgICAgICAgICAgc2VsZi5f
YmF0Y2hfY291bnQgPSAwCisgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBtZXNzYWdlKHMp
LgorICAgICAgICAgICAgZXJyb3Jfc3RyID0gJ1xuJy5qb2luKFsnICAnICsgZi5tZXNzYWdlKCkg
Zm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIGluIHJlc3VsdC5mYWls
dXJlc10pCisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBmYWlsZWQ6XG4lcyIgJSAoc2Vs
Zi5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVz
dF9maWxlbmFtZShmaWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9zdHIp
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAl
IChzZWxmLl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2
ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkpCisKKyAgICBkZWYgX3J1bl90ZXN0X2luX2Fub3Ro
ZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5mbywgdGhyZWFkX3RpbWVvdXQpOgogICAgICAgICAiIiJS
dW4gYSB0ZXN0IGluIGEgc2VwYXJhdGUgdGhyZWFkLCBlbmZvcmNpbmcgYSBoYXJkIHRpbWUgbGlt
aXQuCiAKICAgICAgICAgU2luY2Ugd2UgY2FuIG9ubHkgZGV0ZWN0IHRoZSB0ZXJtaW5hdGlvbiBv
ZiBhIHRocmVhZCwgbm90IGFueSBpbnRlcm5hbApAQCAtNDYwLDE5ICsyOTAsMTYgQEAgY2xhc3Mg
VGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAKICAgICAgICAgUmV0dXJuczoKICAg
ICAgICAgICBBIFRlc3RSZXN1bHQKLQogICAgICAgICAiIiIKICAgICAgICAgd29ya2VyID0gU2lu
Z2xlVGVzdFRocmVhZChzZWxmLl9wb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fd29ya2VyX251bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
X2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBl
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2FyZ3MpCiAK
ICAgICAgICAgd29ya2VyLnN0YXJ0KCkKIAotICAgICAgICB0aHJlYWRfdGltZW91dCA9IF9taWxs
aXNlY29uZHNfdG9fc2Vjb25kcygKLSAgICAgICAgICAgIF9wYWRfdGltZW91dChpbnQodGVzdF9p
bmZvLnRpbWVvdXQpKSkKLSAgICAgICAgdGhyZWFkLl9uZXh0X3RpbWVvdXQgPSB0aW1lLnRpbWUo
KSArIHRocmVhZF90aW1lb3V0CiAgICAgICAgIHdvcmtlci5qb2luKHRocmVhZF90aW1lb3V0KQog
ICAgICAgICBpZiB3b3JrZXIuaXNBbGl2ZSgpOgogICAgICAgICAgICAgIyBJZiBqb2luKCkgcmV0
dXJuZWQgd2l0aCB0aGUgdGhyZWFkIHN0aWxsIHJ1bm5pbmcsIHRoZQpAQCAtNDk1LDExICszMjIs
MTIgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAg
ICBfbG9nLmVycm9yKCdDYW5ub3QgZ2V0IHJlc3VsdHMgb2YgdGVzdDogJXMnICUKICAgICAgICAg
ICAgICAgICAgICAgICAgdGVzdF9pbmZvLmZpbGVuYW1lKQogICAgICAgICAgICAgcmVzdWx0ID0g
dGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbmZvLmZpbGVuYW1lLCBmYWlsdXJlcz1bXSwK
LSAgICAgICAgICAgICAgICB0ZXN0X3J1bl90aW1lPTAsIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZm
cz0wLCB0aW1lX2Zvcl9kaWZmcz0wKQorICAgICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9MCwg
dG90YWxfdGltZV9mb3JfYWxsX2RpZmZzPTAsCisgICAgICAgICAgICAgICAgdGltZV9mb3JfZGlm
ZnM9e30pCiAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIF9ydW5fdGVzdChzZWxm
LCB0ZXN0X2luZm8pOgorICAgIGRlZiBfcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQoc2VsZiwgdGVz
dF9pbmZvKToKICAgICAgICAgIiIiUnVuIGEgc2luZ2xlIHRlc3QgZmlsZSB1c2luZyBhIHNoYXJl
ZCBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLgogCiAgICAgICAgIEFyZ3M6CkBAIC01MDgsMjggKzMz
NiwxOCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAg
UmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYu
X2Vuc3VyZV9kdW1wX3JlbmRlcl90cmVlX2lzX3J1bm5pbmcoKQotICAgICAgICAjIFRoZSBwaXhl
bF9oYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUKLSAgICAg
ICAgIyBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFuayB2YWx1
ZSBpZiB3ZQotICAgICAgICAjIGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAgKE90aGVy
d2lzZSwgYW4gaW1hZ2UgZnJvbSBhCi0gICAgICAgICMgcHJldmlvdXMgcnVuIHdpbGwgYmUgY29w
aWVkIGludG8gdGhlIGJhc2VsaW5lLikKLSAgICAgICAgaW1hZ2VfaGFzaCA9IF9pbWFnZV9oYXNo
KHRlc3RfaW5mbywgc2VsZi5fdGVzdF9hcmdzLCBzZWxmLl9vcHRpb25zKQotICAgICAgICBzdGFy
dCA9IHRpbWUudGltZSgpCi0KLSAgICAgICAgdGhyZWFkX3RpbWVvdXQgPSBfbWlsbGlzZWNvbmRz
X3RvX3NlY29uZHMoCi0gICAgICAgICAgICAgX3BhZF90aW1lb3V0KGludCh0ZXN0X2luZm8udGlt
ZW91dCkpKQotICAgICAgICBzZWxmLl9uZXh0X3RpbWVvdXQgPSBzdGFydCArIHRocmVhZF90aW1l
b3V0CiAKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgICBjcmFzaCwgdGltZW91
dCwgYWN0dWFsX2NoZWNrc3VtLCBvdXRwdXQsIGVycm9yID0gXAotICAgICAgICAgICBzZWxmLl9k
cml2ZXIucnVuX3Rlc3QodGVzdF9pbmZvLnVyaSwgdGVzdF9pbmZvLnRpbWVvdXQsIGltYWdlX2hh
c2gpCisgICAgICAgICAgIHNlbGYuX2RyaXZlci5ydW5fdGVzdCh0ZXN0X2luZm8udXJpLCB0ZXN0
X2luZm8udGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5m
by5pbWFnZV9jaGVja3N1bSkKICAgICAgICAgZW5kID0gdGltZS50aW1lKCkKIAotICAgICAgICBy
ZXN1bHQgPSBfcHJvY2Vzc19vdXRwdXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywKKyAgICAg
ICAgcmV0dXJuIF9wcm9jZXNzX291dHB1dChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLCBzZWxmLl90ZXN0X3R5cGVz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9hcmdzLCBjcmFz
aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsIGVuZCAtIHN0YXJ0
LCBhY3R1YWxfY2hlY2tzdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQsIGVycm9yKQotICAgICAgICBzZWxmLl90ZXN0X3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LCBlcnJvciwgc2VsZi5fbmFtZSkKIAogICAgIGRlZiBfZW5zdXJlX2R1bXBfcmVuZGVyX3Ry
ZWVfaXNfcnVubmluZyhzZWxmKToKICAgICAgICAgIiIiU3RhcnQgdGhlIHNoYXJlZCBEdW1wUmVu
ZGVyVHJlZSwgaWYgaXQncyBub3QgcnVubmluZy4KQEAgLTU0NSwxNCArMzYzLDYgQEAgY2xhc3Mg
VGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucykKICAgICAgICAgICAg
IHNlbGYuX2RyaXZlci5zdGFydCgpCiAKLSAgICBkZWYgX3N0b3BfaHR0cF9sb2NrKHNlbGYpOgot
ICAgICAgICAiIiJTdG9wIHRoZSBzZXJ2ZXJzIGFuZCByZWxlYXNlIGh0dHAgbG9jay4iIiIKLSAg
ICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0LnN0
b3BfaHR0cF9zZXJ2ZXIoKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9z
ZXJ2ZXIoKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBfbG9jaygpCi0gICAg
ICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IEZhbHNlCi0KICAgICBkZWYgX2tpbGxfZHVt
cF9yZW5kZXJfdHJlZShzZWxmKToKICAgICAgICAgIiIiS2lsbCB0aGUgRHVtcFJlbmRlclRyZWUg
cHJvY2VzcyBpZiBpdCdzIHJ1bm5pbmcuIiIiCiAgICAgICAgIGlmIHNlbGYuX2RyaXZlcjoKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWRfdW5pdHRlc3QucHkKaW5kZXggNjNmODZkOTNkODk0OTVlYTk3YzlmMDFh
YTE3NDkxNjhlYjZhYWI4ZC4uMzE4NjMwODFjYjdlODg0NGFhZWMzOGQ4MWI4MTkzMTg1NDI4Yzdl
YyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRfdW5pdHRlc3QucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
ZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRfdW5pdHRlc3QucHkKQEAgLTMxLDE5ICszMSw4IEBACiBp
bXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAotaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhy
ZWFkCi0KLQogY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfZmlu
ZF90aHJlYWRfc3RhY2tfZm91bmQoc2VsZik6Ci0gICAgICAgIGlkLCBzdGFjayA9IHN5cy5fY3Vy
cmVudF9mcmFtZXMoKS5pdGVtcygpWzBdCi0gICAgICAgIGZvdW5kX3N0YWNrID0gZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWQuZmluZF90aHJlYWRfc3RhY2soaWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0
Tm90RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCi0KLSAgICBkZWYgdGVzdF9maW5kX3RocmVhZF9z
dGFja19ub3RfZm91bmQoc2VsZik6Ci0gICAgICAgIGZvdW5kX3N0YWNrID0gZHVtcF9yZW5kZXJf
dHJlZV90aHJlYWQuZmluZF90aHJlYWRfc3RhY2soMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChmb3VuZF9zdGFjaywgTm9uZSkKLQorICAgIHBhc3MKIAogaWYgX19uYW1lX18gPT0gJ19fbWFp
bl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJp
bnRpbmcucHkKaW5kZXggMDBmZjIxMTRjNTBhMDVlMDM4YzBkNDk1ODdkODdlYzFiN2Y2OTIwNS4u
NWQ4YTkyMzZlM2UwOTA3MDhiZTNmYTNmNmI4NTBlN2M5NTIzMzk0NyAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJp
bnRpbmcucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvcHJpbnRpbmcucHkKQEAgLTE4Miw4ICsxODIsOCBAQCBkZWYgX2NvbmZp
Z3VyZV9sb2dnaW5nKHN0cmVhbSwgdmVyYm9zZSk6CiAgICAgbG9nX2RhdGVmbXQgPSAnJXklbSVk
ICVIOiVNOiVTJwogICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTwogICAgIGlmIHZlcmJvc2U6
Ci0gICAgICAgIGxvZ19mbXQgPSAoJyUoYXNjdGltZSlzICUoZmlsZW5hbWUpczolKGxpbmVubykt
NGQgJShsZXZlbG5hbWUpcyAnCi0gICAgICAgICAgICAgICAgJyUobWVzc2FnZSlzJykKKyAgICAg
ICAgbG9nX2ZtdCA9ICgnJShhc2N0aW1lKXMgJShwcm9jZXNzKWQgJShmaWxlbmFtZSlzOiUobGlu
ZW5vKS00ZCAnCisgICAgICAgICAgICAgICAgICAgJyUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMn
KQogICAgICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCiAKICAgICByb290ID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFjYzJkOTQxNDIxMDhhZWViMzY5Y2I2YjdhODQwN2YwNTk0NzZlMWUKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9yb3V0ZXIucHkKQEAgLTAsMCArMSw1MzEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgY1BpY2tsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2lt
cG9ydCBvcworaW1wb3J0IFF1ZXVlCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkCitpbXBvcnQg
dGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNlYmFjaworCitpbXBvcnQgZHVtcF9y
ZW5kZXJfdHJlZV90aHJlYWQKK2ltcG9ydCB0ZXN0X3Jlc3VsdHMKKworCitfbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS5yb3V0ZXIi
KQorCisKK2RlZiBnZXQocG9ydCwgb3B0aW9ucyk6CisgICAgaWYgb3B0aW9ucy5zaW5nbGVfcHJv
Y2VzczoKKyAgICAgICAgcmV0dXJuIFNpbmdsZVRocmVhZGVkUm91dGVyKHBvcnQsIG9wdGlvbnMp
CisgICAgaWYgb3B0aW9ucy51c2VfdGhyZWFkczoKKyAgICAgICAgcmV0dXJuIE11bHRpVGhyZWFk
ZWRSb3V0ZXIocG9ydCwgb3B0aW9ucykKKyAgICByZXR1cm4gTXVsdGlQcm9jZXNzUm91dGVyKHBv
cnQsIG9wdGlvbnMpCisKKworY2xhc3MgX01lc3NhZ2Uob2JqZWN0KToKKyAgICBURVNUX0xJU1Qg
PSAndGVzdF9saXN0JworICAgIFNUT1AgPSAnc3RvcCcKKyAgICBET05FID0gJ2RvbmUnCisgICAg
U1RBUlRFRF9URVNUID0gJ3N0YXJ0ZWRfdGVzdCcKKyAgICBGSU5JU0hFRF9URVNUID0gJ2Zpbmlz
aGVkX3Rlc3QnCisgICAgRklOSVNIRURfR1JPVVAgPSAnZmluaXNoZWRfZ3JvdXAnCisgICAgRVhD
RVBUSU9OID0gJ2V4Y2VwdGlvbicKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbG9hZHMo
c3RyKToKKyAgICAgICAgb2JqID0gY1BpY2tsZS5sb2FkcyhzdHIpCisgICAgICAgIGFzc2VydChp
c2luc3RhbmNlKG9iaiwgX01lc3NhZ2UpKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyYywg
ZGVzdCwgaGRyLCBib2R5KToKKyAgICAgICAgc2VsZi5zcmMgPSBzcmMKKyAgICAgICAgc2VsZi5k
ZXN0ID0gZGVzdAorICAgICAgICBzZWxmLmhkciA9IGhkcgorICAgICAgICBzZWxmLmJvZHkgPSBi
b2R5CisKKyAgICBkZWYgZHVtcHMoc2VsZik6CisgICAgICAgIHJldHVybiBjUGlja2xlLmR1bXBz
KHNlbGYpCisKKworY2xhc3MgX1dvcmtlclN0YXRlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSBOb25lCisgICAgICAgIHNlbGYubmV4dF90aW1l
b3V0ID0gTm9uZQorICAgICAgICBzZWxmLnRocmVhZCA9IE5vbmUKKyAgICAgICAgc2VsZi53ZWRn
ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmRvbmUgPSBGYWxzZQorCisKK2NsYXNzIFJvdXRlcihv
YmplY3QpOgorICAgIE1BTkFHRVIgPSAnbWFuYWdlcicKKyAgICBBTllfV09SS0VSID0gJ3dvcmtl
ci1cZCsnCisKKyAgICBJTl9NRU1PUllfUkVQUkVTRU5UQVRJT04gPSAiPGluX21lbW9yeT4iCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvYWRzKHN0cik6CisgICAgICAgIGFzc2VydCBz
dHIgPT0gUm91dGVyLklOX01FTU9SWV9SRVBSRVNFTlRBVElPTgorICAgICAgICBnbG9iYWwgX3Jv
dXRlcgorICAgICAgICByZXR1cm4gX3JvdXRlcgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBv
cnQsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9v
cHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9tYW5hZ2VyID0gTm9uZQorICAgICAgICBz
ZWxmLl93b3JrZXJzID0ge30KKyAgICAgICAgc2VsZi5fbnVtX3dvcmtlcnMgPSBpbnQoc2VsZi5f
b3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpCisgICAgICAgIHNlbGYuX21hbmFnZXJfcXVldWUgPSBR
dWV1ZS5RdWV1ZSgpCisgICAgICAgIHNlbGYuX3dvcmtlcl9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkK
KyAgICAgICAgc2VsZi5fZ3JvdXBfdGltaW5nX3N0YXRzID0ge30KKworICAgIGRlZiBjbGVhbnVw
KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RhcnRfd29ya2VycyhzZWxmKToKKyAg
ICAgICAgIiIiSW5zdGFudGlhdGVzIGFuZCBzdGFydHMgdGhlIFRlc3RTaGVsbFRocmVhZChzKS4i
IiIKKyAgICAgICAgIyBJbnN0YW50aWF0ZSBUZXN0U2hlbGxUaHJlYWRzIGFuZCBzdGFydCB0aGVt
LgorICAgICAgICBmb3Igd29ya2VyX251bWJlciBpbiB4cmFuZ2Uoc2VsZi5fbnVtX3dvcmtlcnMp
OgorICAgICAgICAgICAgIyBDcmVhdGUgc2VwYXJhdGUgVGVzdFR5cGVzIGluc3RhbmNlcyBmb3Ig
ZWFjaCB0aHJlYWQuCisgICAgICAgICAgICB3b3JrZXIgPSBfV29ya2VyU3RhdGUoKQorCisgICAg
ICAgICAgICB3b3JrZXIudGhyZWFkID0gc2VsZi5fc3RhcnRfd29ya2VyKHdvcmtlcl9udW1iZXIp
CisgICAgICAgICAgICB3b3JrZXIubmFtZSA9ICd3b3JrZXItJWQnICUgd29ya2VyX251bWJlcgor
ICAgICAgICAgICAgc2VsZi5fd29ya2Vyc1t3b3JrZXIubmFtZV0gPSB3b3JrZXIKKworICAgIGRl
ZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2JhaWwoc2VsZiwgbXNnKToKKyAgICAgICAgX2xv
Zy5lcnJvcihtc2cpCisgICAgICAgIGFzc2VydCBGYWxzZSwgbXNnCisKKyAgICBkZWYgc3RvcF93
b3JrZXJzKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBibG9ja2luZz8K
KyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihzZWxmLl93b3JrZXJzKSk6CisgICAgICAgICAg
ICBzZWxmLnBvc3Rfc3RvcCgpCisKKyAgICBkZWYgY2FuY2VsX3dvcmtlcnMoc2VsZik6CisgICAg
ICAgIGZvciB3b3JrZXIgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgIHdv
cmtlci50aHJlYWQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fcG9sbF9tYW5hZ2VyX3F1ZXVlKHNl
bGYuX21hbmFnZXIuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMCkKKworICAgIGRlZiBwb3N0X3Rlc3Rf
bGlzdChzZWxmLCB0ZXN0X2xpc3QpOgorICAgICAgICBzZWxmLl9wdXQoc3JjPXNlbGYuTUFOQUdF
UiwgZGVzdD1zZWxmLkFOWV9XT1JLRVIsCisgICAgICAgICAgICAgICAgICBoZHI9X01lc3NhZ2Uu
VEVTVF9MSVNULCBib2R5PXRlc3RfbGlzdCkKKworICAgIGRlZiBwb3N0X3N0YXJ0ZWRfdGVzdChz
ZWxmLCBzcmMsIHRlc3RfaW5mbywgaGFuZ190aW1lb3V0KToKKyAgICAgICAgc2VsZi5fcHV0KHNy
Yz1zcmMsIGRlc3Q9c2VsZi5NQU5BR0VSLCBoZHI9X01lc3NhZ2UuU1RBUlRFRF9URVNULAorICAg
ICAgICAgICAgICAgICAgYm9keT0odGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpKQorCisgICAgZGVm
IHBvc3RfZmluaXNoZWRfZ3JvdXAoc2VsZiwgc3JjLCBncm91cF9uYW1lLCBudW1fdGVzdHMsIGVs
YXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0PXNlbGYuTUFOQUdF
UiwgaGRyPV9NZXNzYWdlLkZJTklTSEVEX0dST1VQLAorICAgICAgICAgICAgICAgICAgYm9keT0o
Z3JvdXBfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpKQorCisgICAgZGVmIHBvc3RfZmlu
aXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2Vs
Zi5fcHV0KHNyYz1zcmMsIGRlc3Q9c2VsZi5NQU5BR0VSLCBoZHI9X01lc3NhZ2UuRklOSVNIRURf
VEVTVCwKKyAgICAgICAgICAgICAgICAgIGJvZHk9KHJlc3VsdCwgZWxhcHNlZF90aW1lKSkKKwor
ICAgIGRlZiBwb3N0X2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y19pbmZvKToKKyAgICAgICAgc2Vs
Zi5fcHV0KHNyYz1zcmMsIGRlc3Q9c2VsZi5NQU5BR0VSLCBoZHI9X01lc3NhZ2UuRVhDRVBUSU9O
LAorICAgICAgICAgICAgICAgICAgYm9keT1leGNfaW5mbykKKworICAgIGRlZiBwb3N0X3N0b3Ao
c2VsZik6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c2VsZi5NQU5BR0VSLCBkZXN0PXNlbGYuQU5Z
X1dPUktFUiwKKyAgICAgICAgICAgICAgICAgIGhkcj1fTWVzc2FnZS5TVE9QLCBib2R5PU5vbmUp
CisKKyAgICBkZWYgcG9zdF9kb25lKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHNlbGYuX3B1dChz
cmM9d29ya2VyLCBkZXN0PXNlbGYuTUFOQUdFUiwKKyAgICAgICAgICAgICAgICAgIGhkcj1fTWVz
c2FnZS5ET05FLCBib2R5PU5vbmUpCisKKyAgICBkZWYgbG9vcChzZWxmLCBvYmopOgorICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJzdWJjbGFzcyBtdXN0IGltcGxlbWVudCBSb3V0
ZXIubG9vcCgpIikKKworICAgIGRlZiBfcHV0KHNlbGYsIHNyYywgZGVzdCwgaGRyLCBib2R5KToK
KyAgICAgICAgbXNnID0gX01lc3NhZ2Uoc3JjLCBkZXN0LCBoZHIsIGJvZHkpCisgICAgICAgIGlm
IG1zZy5kZXN0ID09IHNlbGYuTUFOQUdFUjoKKyAgICAgICAgICAgICMgX2xvZy5kZWJ1ZygiJXM6
IHBvc3RpbmcgJyVzJyBtc2cgdG8gbWFuYWdlciBxdWV1ZSIgJQorICAgICAgICAgICAgIyAgICAg
ICAgICAgICAobXNnLnNyYywgbXNnLmhkcikpCisgICAgICAgICAgICBzZWxmLl9tYW5hZ2VyX3F1
ZXVlLnB1dChtc2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIF9sb2cuZGVidWcoIiVz
OiBwb3N0aW5nICclcycgbXNnIHRvIHdvcmtlciBxdWV1ZSIgJQorICAgICAgICAgICAgIyAgICAg
ICAgICAgICAobXNnLnNyYywgbXNnLmhkcikpCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfcXVl
dWUucHV0KG1zZykKKworICAgIGRlZiBfZ2V0KHNlbGYsIG5hbWUsIHF1ZXVlLCBibG9jaywgdGlt
ZW91dCk6CisgICAgICAgIGlmIHF1ZXVlID09IHNlbGYuX21hbmFnZXJfcXVldWU6CisgICAgICAg
ICAgICBxdWV1ZV9uYW1lID0gIm1hbmFnZXIgcXVldWUiCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBxdWV1ZV9uYW1lID0gIndvcmtlciBxdWV1ZSIKKworICAgICAgICB0cnk6CisgICAgICAg
ICAgICAjX2xvZy5kZWJ1ZygiJXMgbmFtZSByZWFkaW5nIGZyb20gJXMgcXVldWUiICUgKG5hbWUs
IHF1ZXVlX25hbWUpKQorICAgICAgICAgICAgbXNnID0gcXVldWUuZ2V0KGJsb2NrLCB0aW1lb3V0
KQorICAgICAgICAgICAgI19sb2cuZGVidWcoIiVzIGdvdCAnJXMnIG1zZyBmcm9tICVzIiAlIChu
YW1lLCBtc2cuaGRyLCBtc2cuc3JjKSkKKyAgICAgICAgICAgIHJldHVybiBtc2cKKyAgICAgICAg
ZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgI19sb2cuZGVidWcoIiVzIGZvdW5kICVz
IGVtcHR5IiAlIChuYW1lLCBxdWV1ZV9uYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICBkZWYgX3BvbGxfbWFuYWdlcl9xdWV1ZShzZWxmLCBuYW1lLCB0aW1lb3V0KToKKyAgICAg
ICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICMgTm90ZSB0aGF0IGJsb2NrPVRydWUsIHRpbWVv
dXQ9MCBpcyBlcXVpdmFsZW50IHRvIGJsb2NrPUZhbHNlLgorICAgICAgICAgICAgbXNnID0gc2Vs
Zi5fZ2V0KG5hbWUsIHNlbGYuX21hbmFnZXJfcXVldWUsIFRydWUsIHRpbWVvdXQpCisgICAgICAg
ICAgICBpZiBub3QgbXNnOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlm
IG1zZy5oZHIgPT0gX01lc3NhZ2UuU1RBUlRFRF9URVNUOgorICAgICAgICAgICAgICAgIHNlbGYu
X2hhbmRsZV9zdGFydGVkX3Rlc3QobXNnKQorICAgICAgICAgICAgZWxpZiBtc2cuaGRyID09IF9N
ZXNzYWdlLkZJTklTSEVEX1RFU1Q6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2Zpbmlz
aGVkX3Rlc3QobXNnKQorICAgICAgICAgICAgZWxpZiBtc2cuaGRyID09IF9NZXNzYWdlLkZJTklT
SEVEX0dST1VQOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9maW5pc2hlZF9ncm91cCht
c2cpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuRE9ORToKKyAgICAgICAg
ICAgICAgICBzZWxmLl9oYW5kbGVfZG9uZShtc2cpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIg
PT0gX01lc3NhZ2UuRVhDRVBUSU9OOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9leGNl
cHRpb24obXNnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9iYWls
KCd1bmV4cGVjdGVkIG1lc3NhZ2UgdHlwZSBvbiBtYW5hZ2VyIHF1ZXVlOiAlcycgJQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbXNnLmhkcikKKworICAgIGRlZiBfcG9sbF93b3JrZXJfcXVl
dWUoc2VsZiwgd29ya2VyLCBwb2xsX21hbmFnZXIpOgorICAgICAgICB3aGlsZSBub3Qgd29ya2Vy
LmlzX2RvbmUoKToKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2dldCh3b3JrZXIuZ2V0TmFtZSgp
LCBzZWxmLl93b3JrZXJfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBv
bGxfbWFuYWdlciwgTm9uZSkKKyAgICAgICAgICAgIGlmIG5vdCBtc2c6CisgICAgICAgICAgICAg
ICAgaWYgbm90IHBvbGxfbWFuYWdlcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmFpbCgn
JXMgdW5leHBlY3RlZGx5IHJhbiBvdXQgb2YgcXVldWVkIG1lc3NhZ2VzJyAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd29ya2VyLmdldE5hbWUoKSkKKyAgICAgICAgICAgICAgICBi
cmVhaworCisgICAgICAgICAgICBpZiBtc2cuaGRyID09IF9NZXNzYWdlLlNUT1A6CisgICAgICAg
ICAgICAgICAgc2VsZi5faGFuZGxlX3N0b3Aod29ya2VyKQorICAgICAgICAgICAgZWxpZiBtc2cu
aGRyID09IF9NZXNzYWdlLlRFU1RfTElTVDoKKyAgICAgICAgICAgICAgICAodGVzdF9ncm91cCwg
dGVzdF9saXN0KSA9IG1zZy5ib2R5CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX3Rlc3Rf
bGlzdCh3b3JrZXIsIHRlc3RfZ3JvdXAsIHRlc3RfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvbGxfbWFuYWdlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgc2VsZi5fYmFpbCgnJXM6IHVuZXhwZWN0ZWQgbWVzc2FnZSB0eXBlIG9uIHdv
cmtlciBxdWV1ZTogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXIuZ2V0
TmFtZSgpLCBtc2cuaGRyKSkKKworICAgIGRlZiBfY2hlY2tfb25fd29ya2VycyhzZWxmKToKKyAg
ICAgICAgIlJldHVybnMgdHJ1ZSBpZmYgYWxsIHRoZSB3b3JrZXJzIGhhdmUgZWl0aGVyIGNvbXBs
ZXRlZCBvciB3ZWRnZWQuIgorICAgICAgICBkb25lID0gVHJ1ZQorICAgICAgICB0ID0gdGltZS50
aW1lKCkKKyAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAg
ICAgICAgICAgaWYgbm90IHdvcmtlci5kb25lIGFuZCBub3Qgd29ya2VyLndlZGdlZDoKKyAgICAg
ICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB3b3JrZXIubmV4dF90aW1lb3V0CisgICAgICAgICAg
ICAgICAgaWYgKG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dCk6CisgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2xvZ193ZWRnZWRfdGhyZWFkKHdvcmtlci50aHJlYWQpCisgICAgICAg
ICAgICAgICAgICAgIHdvcmtlci53ZWRnZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAgICAgIyBfbG9nLmRlYnVnKCIlcyBpcyBub3QgZG9uZSIgJSB3b3Jr
ZXIubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IEZhbHNlCisgICAgICAgIHJldHVy
biBkb25lCisKKyAgICBkZWYgX2hhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgbXNnKToKKyAgICAg
ICAgKHRlc3RfaW5mbywgaGFuZ190aW1lb3V0KSA9IG1zZy5ib2R5CisgICAgICAgIHdvcmtlciA9
IHNlbGYuX3dvcmtlcnNbbXNnLnNyY10KKyAgICAgICAgd29ya2VyLm5leHRfdGltZW91dCA9IHRp
bWUudGltZSgpICsgaGFuZ190aW1lb3V0CisKKyAgICBkZWYgX2hhbmRsZV9maW5pc2hlZF90ZXN0
KHNlbGYsIG1zZyk6CisgICAgICAgIChyZXN1bHQsIGVsYXBzZWRfdGltZSkgPSBtc2cuYm9keQor
ICAgICAgICB3b3JrZXIgPSBzZWxmLl93b3JrZXJzW21zZy5zcmNdCisgICAgICAgIHdvcmtlci5u
ZXh0X3RpbWVvdXQgPSBOb25lCisgICAgICAgIHNlbGYuX21hbmFnZXIuaGFuZGxlX2ZpbmlzaGVk
X3Rlc3QobXNnLnNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX2hhbmRsZV9m
aW5pc2hlZF9ncm91cChzZWxmLCBtc2cpOgorICAgICAgICAoZ3JvdXBfbmFtZSwgbnVtX3Rlc3Rz
LCBlbGFwc2VkX3RpbWUpID0gbXNnLmJvZHkKKyAgICAgICAgc2VsZi5fbWFuYWdlci5oYW5kbGVf
ZmluaXNoZWRfZ3JvdXAobXNnLnNyYywgZ3JvdXBfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBk
ZWYgX2hhbmRsZV9leGNlcHRpb24oc2VsZiwgbXNnKToKKyAgICAgICAgZXhjZXB0aW9uX2luZm8g
PSBtc2cuYm9keQorICAgICAgICBzZWxmLl9tYW5hZ2VyLmhhbmRsZV9leGNlcHRpb24obXNnLnNy
YywgZXhjZXB0aW9uX2luZm8pCisKKyAgICBkZWYgX2hhbmRsZV9zdG9wKHNlbGYsIHdvcmtlcik6
CisgICAgICAgIHdvcmtlci5oYW5kbGVfc3RvcCgpCisKKyAgICBkZWYgX2hhbmRsZV9kb25lKHNl
bGYsIG1zZyk6CisgICAgICAgIHdvcmtlciA9IHNlbGYuX3dvcmtlcnNbbXNnLnNyY10KKyAgICAg
ICAgd29ya2VyLmRvbmUgPSBUcnVlCisgICAgICAgICMgX2xvZy5kZWJ1ZygiJXMgaXMgZG9uZSIg
JSB3b3JrZXIubmFtZSkKKyAgICAgICAgc2VsZi5fbWFuYWdlci5oYW5kbGVfZG9uZShtc2cuc3Jj
KQorCisgICAgZGVmIF9oYW5kbGVfdGVzdF9saXN0KHNlbGYsIHdvcmtlciwgdGVzdF9ncm91cCwg
dGVzdF9saXN0LCBwb2xsX21hbmFnZXIpOgorICAgICAgICB3b3JrZXIuaGFuZGxlX3Rlc3RfbGlz
dCh0ZXN0X2dyb3VwLCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdlcikKKworICAgIGRlZiBfbG9nX3dl
ZGdlZF90aHJlYWQoc2VsZiwgdGhyZWFkKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF
cnJvcgorCisKK2NsYXNzIFNpbmdsZVRocmVhZGVkUm91dGVyKFJvdXRlcik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBSb3V0ZXIuX19pbml0X18oc2Vs
ZiwgcG9ydCwgb3B0aW9ucykKKyAgICAgICAgIyBGSVhNRTogQ291bGQgdXNlIGZha2UgcXVldWVz
IGhlcmUuCisgICAgICAgIHNlbGYuX21hbmFnZXJfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAg
ICAgIHNlbGYuX3dvcmtlcl9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKworICAgIGRlZiBfc3RhcnRf
d29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICAjIEZJWE1FOiBVc2UgV29ya2Vy
VGh1bmsgaW5zdGVhZCAuLi4KKyAgICAgICAgdGh1bmsgPSBfV29ya2VyVGhyZWFkKHNlbGYsIGR1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdvcmtlcl9udW1iZXIpCisgICAgICAgIHJldHVybiB0aHVuaworCisgICAgZGVmIGxvb3Ao
c2VsZiwgbWFuYWdlcik6CisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBtYW5hZ2VyCisgICAgICAg
IHdvcmtlciA9IHNlbGYuX3dvcmtlcnNbJ3dvcmtlci0wJ10KKyAgICAgICAgc2VsZi5fcG9sbF93
b3JrZXJfcXVldWUod29ya2VyLnRocmVhZCwgcG9sbF9tYW5hZ2VyPVRydWUpCisKKyAgICBkZWYg
X2xvZ193ZWRnZWRfdGhyZWFkKHNlbGYsIHRocmVhZCk6CisgICAgICAgIGFzc2VydCBGYWxzZSwg
IlNpbmdsZVRocmVhZGVkUm91dGVyLl9sb2dfd2VkZ2VkX3RocmVhZCgpIHNob3VsZCBuZXZlciBi
ZSBjYWxsZWQiCisKKworY2xhc3MgTXVsdGlUaHJlYWRlZFJvdXRlcihTaW5nbGVUaHJlYWRlZFJv
dXRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBT
aW5nbGVUaHJlYWRlZFJvdXRlci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKQorCisgICAg
ZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHRodW5rID0g
X1dvcmtlclRocmVhZChzZWxmLCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfbnVtYmVyKQorICAgICAgICB0aHVuay5z
dGFydCgpCisgICAgICAgIHJldHVybiB0aHVuaworCisgICAgZGVmIGxvb3Aoc2VsZiwgb2JqKToK
KyAgICAgICAgaWYgb2JqLmdldE5hbWUoKSA9PSBzZWxmLk1BTkFHRVI6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fbG9vcF9tYW5hZ2VyKG9iaikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl9sb29wX3dvcmtlcihvYmopCisKKyAgICBkZWYgX2xvb3BfbWFuYWdlcihz
ZWxmLCBtYW5hZ2VyKToKKyAgICAgICAgc2VsZi5fbWFuYWdlciA9IG1hbmFnZXIKKyAgICAgICAg
c2VsZi5fcG9sbF9tYW5hZ2VyX3F1ZXVlKG1hbmFnZXIuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMDEp
CisgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9jaGVja19vbl93b3JrZXJzKCk6CisgICAgICAgICAg
ICBzZWxmLl9wb2xsX21hbmFnZXJfcXVldWUobWFuYWdlci5nZXROYW1lKCksIHRpbWVvdXQ9MC4w
MSkKKworICAgIGRlZiBfbG9vcF93b3JrZXIoc2VsZiwgd29ya2VyKToKKyAgICAgICAgd2hpbGUg
bm90IHdvcmtlci5pc19kb25lKCk6CisgICAgICAgICAgICBzZWxmLl9wb2xsX3dvcmtlcl9xdWV1
ZSh3b3JrZXIsIHBvbGxfbWFuYWdlcj1GYWxzZSkKKworICAgIGRlZiBfbG9nX3dlZGdlZF90aHJl
YWQoc2VsZiwgdGhyZWFkKToKKyAgICAgICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBn
aXZlbiB0aHJlYWQgc3RhdGUuIiIiCisgICAgICAgIGlkID0gdGhyZWFkLmlkKCkKKyAgICAgICAg
c3RhY2sgPSBzZWxmLl9maW5kX3RocmVhZF9zdGFjayhpZCkKKyAgICAgICAgYXNzZXJ0KHN0YWNr
IGlzIG5vdCBOb25lKQorICAgICAgICBfbG9nLmVycm9yKCIiKQorICAgICAgICBfbG9nLmVycm9y
KCJ0aHJlYWQgJXMgKCVkKSBpcyB3ZWRnZWQiICUgKHRocmVhZC5nZXROYW1lKCksIGlkKSkKKyAg
ICAgICAgc2VsZi5fbG9nX3N0YWNrKHN0YWNrKQorICAgICAgICBfbG9nLmVycm9yKCIiKQorCisg
ICAgZGVmIF9maW5kX3RocmVhZF9zdGFjayhzZWxmLCBpZCk6CisgICAgICAgICIiIlJldHVybnMg
YSBzdGFjayBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBkdW1wIGEgc3RhY2sgdHJhY2UgZm9y
CisgICAgICAgIHRoZSBnaXZlbiB0aHJlYWQgaWQgKG9yIE5vbmUgaWYgdGhlIGlkIGlzIG5vdCBm
b3VuZCkuIiIiCisgICAgICAgIGZvciB0aHJlYWRfaWQsIHN0YWNrIGluIHN5cy5fY3VycmVudF9m
cmFtZXMoKS5pdGVtcygpOgorICAgICAgICAgICAgaWYgdGhyZWFkX2lkID09IGlkOgorICAgICAg
ICAgICAgICAgIHJldHVybiBzdGFjaworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9s
b2dfc3RhY2soc2VsZiwgc3RhY2spOgorICAgICAgICAiIiJMb2cgYSBzdGFjayB0cmFjZSB0byBs
b2cuZXJyb3IoKS4iIiIKKyAgICAgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUg
aW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgorICAgICAgICAgICAgX2xvZy5lcnJv
cignRmlsZTogIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUp
KQorICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcgICVz
JyAlIGxpbmUuc3RyaXAoKSkKKworCitjbGFzcyBNdWx0aVByb2Nlc3NSb3V0ZXIoTXVsdGlUaHJl
YWRlZFJvdXRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAg
ICAgICBSb3V0ZXIuX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucykKKyAgICAgICAgc2VsZi5f
bWFuYWdlcl9xdWV1ZSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgIHNlbGYuX3dv
cmtlcl9xdWV1ZSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisKKyAgICBkZWYgX3N0YXJ0X3dv
cmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgdGh1bmsgPSBfV29ya2VyUHJvY2Vz
cyhzZWxmLCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd29ya2VyX251bWJlcikKKyAgICAgICAgdGh1bmsuc3RhcnQoKQorICAg
ICAgICByZXR1cm4gdGh1bmsKKworICAgIGRlZiBwb3N0X2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4
Y2VwdGlvbl9pbmZvKToKKyAgICAgICAgIyBGSVhNRTogV2UgY2FuJ3QgcGlja2xlIHRyYWNlYmFj
ayBvYmplY3RzLCBzbyBsb2cgdGhlIHRyYWNlYmFjayBoZXJlLgorICAgICAgICBtcF9leGNfaW5m
byA9IChleGNlcHRpb25faW5mb1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIE5vbmUpCisgICAgICAg
IE11bHRpVGhyZWFkZWRSb3V0ZXIucG9zdF9leGNlcHRpb24oc2VsZiwgc3JjLCBtcF9leGNfaW5m
bykKKworICAgIGRlZiBfbG9nX3dlZGdlZF90aHJlYWQoc2VsZiwgdGhyZWFkKToKKyAgICAgICAg
aWQgPSB0aHJlYWQuaWQoKQorICAgICAgICBfbG9nLmVycm9yKCIiKQorICAgICAgICBfbG9nLmVy
cm9yKCJwcm9jZXNzICVzICglZCkgaXMgd2VkZ2VkIiAlICh0aHJlYWQuZ2V0TmFtZSgpLCBpZCkp
CisgICAgICAgIF9sb2cuZXJyb3IoIiIpCisKKworY2xhc3MgX1dvcmtlclRodW5rKG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRlciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVt
YmVyKToKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25lCisgICAgICAgIHNlbGYu
X3JvdXRlciA9IHJvdXRlcgorICAgICAgICBzZWxmLl9vcHRpb25zID0gcm91dGVyLl9vcHRpb25z
CisgICAgICAgIHNlbGYuX3BvcnQgPSByb3V0ZXIuX3BvcnQKKyAgICAgICAgc2VsZi5fY2FuY2Vs
bGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisgICAgICAgIHNlbGYuX2hh
dmVfaHR0cF9sb2NrID0gRmFsc2UKKyAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gMAorICAgICAg
ICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl93b3Jr
ZXIgPSB3b3JrZXJfY2xhc3Moc2VsZi5fcG9ydCwgc2VsZiwgc2VsZi5fb3B0aW9ucywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9udW1iZXIpCisKKyAgICBkZWYg
aWQoc2VsZik6CisgICAgICAgICMgdXNlZCBkdXJpbmcgbG9nX3dlZGdlZF90aHJlYWQKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2lkCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxm
Ll9jYW5jZWxsZWQgPSBUcnVlCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2RvbmUgb3Igc2VsZi5fY2FuY2VsbGVkCisKKyAgICBkZWYgaGFuZGxlX3N0b3Ao
c2VsZik6CisgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2Vs
Zi5fcmVsZWFzZV9sb2NrKCkKKyAgICAgICAgc2VsZi5fd29ya2VyLmhhbmRsZV9zdG9wKCkKKyAg
ICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKworICAgIGRlZiBoYW5kbGVfdGVzdF9saXN0KHNlbGYs
IGdyb3VwX25hbWUsIHRlc3RfbGlzdCwgcG9sbF9tYW5hZ2VyKToKKyAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy53YWl0X2Zvcl9odHRwZDoKKyAgICAgICAgICAgIGlmIGdyb3VwX25hbWUgPT0gInRl
c3RzX3RvX2h0dHBfbG9jayI6CisgICAgICAgICAgICAgICAgc2VsZi5fYWNxdWlyZV9sb2NrKCkK
KyAgICAgICAgICAgIGVsaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICAgICAg
c2VsZi5fcmVsZWFzZV9sb2NrKCkKKworICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkK
KyAgICAgICAgbnVtX3Rlc3RzID0gMAorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X2xpc3Q6Cisg
ICAgICAgICAgICBzZWxmLl93b3JrZXIucnVuX3Rlc3QodGVzdCkKKyAgICAgICAgICAgIG51bV90
ZXN0cyArPSAxCisKKyAgICAgICAgICAgICMgRklYTUU6IE5lZWQgdG8gZ2V0IHJpZCBvZiB0aGlz
LgorICAgICAgICAgICAgaWYgcG9sbF9tYW5hZ2VyOgorICAgICAgICAgICAgICAgIHNlbGYuX3Jv
dXRlci5fcG9sbF9tYW5hZ2VyX3F1ZXVlKHNlbGYuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMCkKKwor
ICAgICAgICAgICAgaWYgc2VsZi5fY2FuY2VsbGVkOgorICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQorCisgICAgICAg
IGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fcmVsZWFzZV9sb2Nr
KCkKKworICAgICAgICBzZWxmLl9yb3V0ZXIucG9zdF9maW5pc2hlZF9ncm91cChzZWxmLmdldE5h
bWUoKSwgZ3JvdXBfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAg
ICAgIHBhc3MKKworICAgIGRlZiBzdGFydGVkX3Rlc3Qoc2VsZiwgdGVzdF9pbmZvLCBodW5nX3Ro
cmVhZF90aW1lb3V0KToKKyAgICAgICAgc2VsZi5fcm91dGVyLnBvc3Rfc3RhcnRlZF90ZXN0KHNl
bGYuZ2V0TmFtZSgpLCB0ZXN0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBodW5nX3RocmVhZF90aW1lb3V0KQorCisgICAgZGVmIGZpbmlzaGVkX3Rlc3Qoc2Vs
ZiwgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9yb3V0ZXIucG9zdF9maW5p
c2hlZF90ZXN0KHNlbGYuZ2V0TmFtZSgpLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAgIGRl
ZiBfYWNxdWlyZV9sb2NrKHNlbGYpOgorICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9s
b2NrKCkKKyAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCisgICAgICAgIHNl
bGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgIHNlbGYuX2hhdmVfaHR0
cF9sb2NrID0gVHJ1ZQorCisgICAgZGVmIF9yZWxlYXNlX2xvY2soc2VsZik6CisgICAgICAgICIi
IlN0b3AgdGhlIHNlcnZlcnMgYW5kIHJlbGVhc2UgaHR0cCBsb2NrLiIiIgorICAgICAgICBpZiBz
ZWxmLl9oYXZlX2h0dHBfbG9jazoKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3Nl
cnZlcigpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisg
ICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGVhc2VfaHR0cF9sb2NrKCkKKyAgICAgICAgICAgIHNl
bGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAg
IHNlbGYuX2lkID0gc2VsZi5fZ2V0X2lkKCkKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAg
ICAgICBleGNlcHRpb25fbXNnID0gIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygnJXMgc3RhcnRpbmcn
ICUgbmFtZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9yb3V0ZXIubG9vcChz
ZWxmKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBleGNl
cHRpb25fbXNnID0gIiwgaW50ZXJydXB0ZWQiCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg
IGV4Y2VwdGlvbl9tc2cgPSAiLCBleGNlcHRpb24gcmFpc2VkIgorICAgICAgICBmaW5hbGx5Ogor
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgZG9uZSVzIiAlIChuYW1lLCBleGNlcHRpb25fbXNn
KSkKKyAgICAgICAgICAgIGlmIGV4Y2VwdGlvbl9tc2c6CisgICAgICAgICAgICAgICAgc2VsZi5f
ZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgIHNlbGYuX3Jv
dXRlci5wb3N0X2V4Y2VwdGlvbihzZWxmLmdldE5hbWUoKSwgc2VsZi5fZXhjZXB0aW9uX2luZm8p
CisgICAgICAgICAgICBzZWxmLl9yb3V0ZXIucG9zdF9kb25lKG5hbWUpCisKKyAgICAgICAgYXNz
ZXJ0IGV4Y2VwdGlvbl9tc2cgb3Igc2VsZi5fZG9uZSBvciBzZWxmLl9jYW5jZWxsZWQsICJleGl0
aW5nIHVuZXhwZWN0ZWRseSIKKworCitjbGFzcyBfV29ya2VyVGhyZWFkKF9Xb3JrZXJUaHVuaywg
dGhyZWFkaW5nLlRocmVhZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRlciwgd29ya2Vy
X2NsYXNzLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRf
XyhzZWxmKQorICAgICAgICBfV29ya2VyVGh1bmsuX19pbml0X18oc2VsZiwgcm91dGVyLCB3b3Jr
ZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpCisgICAgICAgIHNlbGYubmFtZSA9ICd3b3JrZXItJWQn
ICUgd29ya2VyX251bWJlcgorCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5faWQKKworICAgIGRlZiBfZ2V0X2lkKHNlbGYpOgorICAgICAgICB0aHJlYWQuZ2V0X2lkZW50
KCkKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRy
dWUKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5zdGFy
dChzZWxmKQorCisKK2NsYXNzIF9Xb3JrZXJQcm9jZXNzKF9Xb3JrZXJUaHVuaywgbXVsdGlwcm9j
ZXNzaW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb3V0ZXIsIHdvcmtlcl9j
bGFzcywgd29ya2VyX251bWJlcik6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLl9f
aW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJUaHVuay5fX2luaXRfXyhzZWxmLCByb3V0ZXIs
IHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcikKKyAgICAgICAgc2VsZi5uYW1lID0gJ3dvcmtl
ci0lZCcgJSB3b3JrZXJfbnVtYmVyCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgICMgRklY
TUU6IGZpZ3VyZSBvdXQgaWYgdGhpcyBuZWVkcyB0byBiZSBhd2FyZSBvZiBwYXJlbnQvY2hpbGQK
KyAgICAgICAgcmV0dXJuIHNlbGYucGlkCisKKyAgICBkZWYgX2dldF9pZChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIG9zLmdldHBpZCgpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBz
ZWxmLl9jYW5jZWxsZWQgPSBUcnVlCisgICAgICAgIHNlbGYudGVybWluYXRlKCkKKworICAgIGRl
ZiBzdGFydChzZWxmKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muc3RhcnQoc2Vs
ZikKKworICAgIGRlZiBnZXROYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9yb3V0ZXJfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9yb3V0ZXJfdW5pdHRlc3QucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZGFhOWNjMzc0Y2NhYWQwOGZkZGRiMTU2NWNiYWY0MDQ1M2VkMDg5ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3JvdXRlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDExOSBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCitpbXBv
cnQgUXVldWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHJvdXRlciBpbXBvcnQgKgorCisKK2Ns
YXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0
YWNrX2ZvdW5kKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcmV0
dXJuCisgICAgICAgIGlkLCBzdGFjayA9IHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpWzBd
CisgICAgICAgIGZvdW5kX3N0YWNrID0gZmluZF90aHJlYWRfc3RhY2soaWQpCisgICAgICAgIHNl
bGYuYXNzZXJ0Tm90RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCisKKyAgICBkZWYgdGVzdF9maW5k
X3RocmVhZF9zdGFja19ub3RfZm91bmQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVu
dAorICAgICAgICByZXR1cm4KKyAgICAgICAgZm91bmRfc3RhY2sgPSBmaW5kX3RocmVhZF9zdGFj
aygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQorCisKK2Ns
YXNzIFdhaXRGb3JUaHJlYWRzVG9GaW5pc2hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBk
ZWYgcnVuX29uZV90aHJlYWQoc2VsZiwgbXNnKToKKyAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBR
dWV1ZS5RdWV1ZSgpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAg
ICAgICBjaGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19x
dWV1ZSkKKyAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgc3RhcnRlZF9tc2cg
PSBzdGFydGluZ19xdWV1ZS5nZXQoKQorICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQobXNnKQor
ICAgICAgICB0aHJlYWRzID0gW2NoaWxkX3RocmVhZF0KKyAgICAgICAgcmV0dXJuIHJ1bm5lci5f
d2FpdF9mb3JfdGhyZWFkc190b19maW5pc2godGhyZWFkcywgTm9uZSkKKworICAgIGRlZiB0ZXN0
X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcmV0dXJu
CisgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnJykKKyAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdChz
ZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50LgorICAgICAgICByZXR1cm4KKyAgICAg
ICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcnKQorICAgICAgICBpbnRlcnJ1
cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJ0tleWJvYXJkSW50ZXJydXB0JykKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKGludGVycnVwdGVkKQorCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxm
KToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50LgorICAgICAgICByZXR1cm4KKyAgICAgICAg
aW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcnKQorICAgICAgICBvYyA9IG91dHB1
dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKKyAg
ICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCdUaW1lb3V0JykKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRw
dXQoKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBp
bXBsZW1lbnQuCisgICAgICAgIHJldHVybgorICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVu
X29uZV90aHJlYWQoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNl
bGYucnVuX29uZV90aHJlYWQsICdFeGNlcHRpb24nKQorCisKK2NsYXNzIFN0YW5kYWxvbmVGdW5j
dGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3Ro
cmVhZChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50CisgICAgICAgIHJldHVybgor
ICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNh
cHR1cmVfb3V0cHV0KCkKKyAgICAgICAgbG9nZ2VyID0gcnVuX3dlYmtpdF90ZXN0cy5fbG9nCisg
ICAgICAgIGFzdHJlYW0gPSBhcnJheV9zdHJlYW0uQXJyYXlTdHJlYW0oKQorICAgICAgICBoYW5k
bGVyID0gVGVzdEhhbmRsZXIoYXN0cmVhbSkKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFu
ZGxlcikKKworICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAg
c3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIGNoaWxkX3RocmVhZCA9IFRl
c3RUaHJlYWQoc3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKQorICAgICAgICBjaGlsZF90
aHJlYWQuc3RhcnQoKQorICAgICAgICBtc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQorCisgICAg
ICAgIHJ1bl93ZWJraXRfdGVzdHMuX2xvZ193ZWRnZWRfdGhyZWFkKGNoaWxkX3RocmVhZCkKKyAg
ICAgICAgc3RvcHBpbmdfcXVldWUucHV0KCcnKQorICAgICAgICBjaGlsZF90aHJlYWQuam9pbih0
aW1lb3V0PTEuMCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzdHJlYW0uZW1wdHkoKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjaGlsZF90aHJlYWQuaXNBbGl2ZSgpKQorICAgICAg
ICBvYy5yZXN0b3JlX291dHB1dCgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAg
ICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQppbmRleCBmZjQwODZjNzRkYzE4MmJhODQ3MTIz
ZTYzNTUwMGQxNDQxMWQ5OTNlLi4xZDk2YmQ5NjJiOTE2ZDllMjQxNGZiZThmYjU2OTM1OTdmMGRj
NzA1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3Rlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC90ZXN0LnB5CkBAIC0xMzYsNiArMTM2LDkgQEAgY2xhc3MgVGVzdFBvcnQoYmFz
ZS5Qb3J0KToKICAgICBkZWYgY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNfaHR0cCk6CiAgICAgICAg
IHJldHVybiBUcnVlCiAKKyAgICBkZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6Cisg
ICAgICAgIHJldHVybiAyCisKICAgICBkZWYgZGlmZl9pbWFnZShzZWxmLCBleHBlY3RlZF9jb250
ZW50cywgYWN0dWFsX2NvbnRlbnRzLAogICAgICAgICAgICAgICAgICAgIGRpZmZfZmlsZW5hbWU9
Tm9uZSk6CiAgICAgICAgIGRpZmZlZCA9IGFjdHVhbF9jb250ZW50cyAhPSBleHBlY3RlZF9jb250
ZW50cwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggZDE2OWNkODg0OGJkM2Q5NmE4YmUw
YTI0YjE1MmFkMjNiY2NmYjBmNC4uMjA2NzBkNDU1NjEyOTQ4ZGJhY2NhMGIxY2E0ZTFiMzNhOTUy
NmRiNyAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC02Nyw2ICs2Nyw3IEBAIGltcG9y
dCB0cmFjZWJhY2sKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVf
dGhyZWFkCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX2xheW91dF9yZXN1bHRzX2dl
bmVyYXRvcgogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcHJpbnRpbmcKK2Zyb20gbGF5b3V0
X3BhY2thZ2UgaW1wb3J0IHJvdXRlcgogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9l
eHBlY3RhdGlvbnMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZy
b20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcmVzdWx0cwpAQCAtODcsMzIgKzg4LDE5IEBA
IEJVSUxERVJfQkFTRV9VUkwgPSAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9idWlsZGJvdC9s
YXlvdXRfdGVzdF9yZXN1bHRzLyIKIAogVGVzdEV4cGVjdGF0aW9uc0ZpbGUgPSB0ZXN0X2V4cGVj
dGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zRmlsZQogCi0KIGNsYXNzIFRlc3RJbmZvOgogICAgICIi
Ikdyb3VwcyBpbmZvcm1hdGlvbiBhYm91dCBhIHRlc3QgZm9yIGVhc3kgcGFzc2luZyBvZiBkYXRh
LiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGZpbGVuYW1lLCB0aW1lb3V0KToK
LSAgICAgICAgIiIiR2VuZXJhdGVzIHRoZSBVUkkgYW5kIHN0b3JlcyB0aGUgZmlsZW5hbWUgYW5k
IHRpbWVvdXQgZm9yIHRoaXMgdGVzdC4KKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUs
IHRpbWVvdXQpOgorICAgICAgICAiIiJCdW5kbGVzIHRoZSBmaWxlbmFtZSBhbmQgdGltZW91dCBm
b3IgdGhpcyB0ZXN0LgogICAgICAgICBBcmdzOgogICAgICAgICAgIGZpbGVuYW1lOiBGdWxsIHBh
dGggdG8gdGhlIHRlc3QuCiAgICAgICAgICAgdGltZW91dDogVGltZW91dCBmb3IgcnVubmluZyB0
aGUgdGVzdCBpbiBUZXN0U2hlbGwuCiAgICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuZmlsZW5h
bWUgPSBmaWxlbmFtZQotICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotICAgICAgICBzZWxmLnVy
aSA9IHBvcnQuZmlsZW5hbWVfdG9fdXJpKGZpbGVuYW1lKQogICAgICAgICBzZWxmLnRpbWVvdXQg
PSB0aW1lb3V0Ci0gICAgICAgIHNlbGYuX2ltYWdlX2NoZWNrc3VtID0gLTEKLQotICAgIGRlZiBp
bWFnZV9oYXNoKHNlbGYpOgotICAgICAgICAjIFJlYWQgdGhlIGltYWdlX2hhc2ggbGF6aWx5IHRv
IHJlZHVjZSBzdGFydHVwIHRpbWUuCi0gICAgICAgICMgVGhpcyBjbGFzcyBpcyBhY2Nlc3NlZCBh
Y3Jvc3MgdGhyZWFkcywgYnV0IG9ubHkgb25lIHRocmVhZCBzaG91bGQKLSAgICAgICAgIyBldmVy
IGJlIGRlYWxpbmcgd2l0aCBhbnkgZ2l2ZW4gVGVzdEluZm8gc28gbm8gbG9ja2luZyBpcyBuZWVk
ZWQuCi0gICAgICAgICMKLSAgICAgICAgIyBOb3RlIHRoYXQgd2UgdXNlIC0xIHRvIGluZGljYXRl
IHRoYXQgd2UgaGF2ZW4ndCByZWFkIHRoZSB2YWx1ZSwKLSAgICAgICAgIyBiZWNhdXNlIGV4cGVj
dGVkX2NoZWNrc3VtKCkgcmV0dXJucyBhIHN0cmluZyBvciBOb25lLgotICAgICAgICBpZiBzZWxm
Ll9pbWFnZV9jaGVja3N1bSA9PSAtMToKLSAgICAgICAgICAgIHNlbGYuX2ltYWdlX2NoZWNrc3Vt
ID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShzZWxmLmZpbGVuYW1lKQotICAgICAgICBy
ZXR1cm4gc2VsZi5faW1hZ2VfY2hlY2tzdW0KKyAgICAgICAgc2VsZi51cmkgPSBOb25lCisgICAg
ICAgIHNlbGYuaW1hZ2VfY2hlY2tzdW0gPSBOb25lCiAKIAogY2xhc3MgUmVzdWx0U3VtbWFyeShv
YmplY3QpOgpAQCAtMTU5LDYgKzE0Nyw3IEBAIGNsYXNzIFJlc3VsdFN1bW1hcnkob2JqZWN0KToK
ICAgICAgICAgICAgIHNlbGYudW5leHBlY3RlZCArPSAxCiAKIAorCiBkZWYgc3VtbWFyaXplX3Vu
ZXhwZWN0ZWRfcmVzdWx0cyhwb3J0X29iaiwgZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5X3N1bW1hcnkpOgogICAgICIi
IlN1bW1hcml6ZSBhbnkgdW5leHBlY3RlZCByZXN1bHRzIGFzIGEgZGljdC4KQEAgLTI0OCwzMyAr
MjM3LDMyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgIyBpbiBEdW1wUmVuZGVyVHJlZS4KICAg
ICBERUZBVUxUX1RFU1RfVElNRU9VVF9NUyA9IDYgKiAxMDAwCiAKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBv
cnQsIG9wdGlvbnMsIHByaW50ZXIsIHJvdXRlcik6CiAgICAgICAgICIiIkluaXRpYWxpemUgdGVz
dCBydW5uZXIgZGF0YSBzdHJ1Y3R1cmVzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgcG9y
dDogYW4gb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmljCiAgICAgICAgICAgb3B0aW9u
czogYSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCiAgICAgICAgICAgcHJpbnRl
cjogYSBQcmludGVyIG9iamVjdCB0byByZWNvcmQgdXBkYXRlcyB0by4KKyAgICAgICAgICByb3V0
ZXI6IG9iamVjdCB1c2VkIHRvIGNvbW11bmljYXRlIHcvIHdvcmtlcnMuCiAgICAgICAgICIiIgog
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9u
cwogICAgICAgICBzZWxmLl9wcmludGVyID0gcHJpbnRlcgorICAgICAgICBzZWxmLl9yb3V0ZXIg
PSByb3V0ZXIKIAogICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxs
IHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCiAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3Vy
ZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KAogICAgICAgICAjICAgICAg
ICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCB1c2VfdGxzPVRydWUsIHBvcnQ9OTMyMykKIAot
ICAgICAgICAjIGEgbGlzdCBvZiBUZXN0VHlwZSBvYmplY3RzCi0gICAgICAgIHNlbGYuX3Rlc3Rf
dHlwZXMgPSBbdGV4dF9kaWZmLlRlc3RUZXh0RGlmZl0KLSAgICAgICAgaWYgb3B0aW9ucy5waXhl
bF90ZXN0czoKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKGltYWdlX2RpZmYu
SW1hZ2VEaWZmKQotCiAgICAgICAgICMgYSBzZXQgb2YgdGVzdCBmaWxlcywgYW5kIHRoZSBzYW1l
IHRlc3RzIGFzIGEgbGlzdAogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KCkKICAgICAg
ICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gTm9uZQotICAgICAgICBzZWxmLl9yZXN1bHRfcXVl
dWUgPSBRdWV1ZS5RdWV1ZSgpCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gRmFsc2UKIAorICAg
IGRlZiBnZXROYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gcm91dGVyLlJvdXRlci5NQU5BR0VS
CisKICAgICBkZWYgY29sbGVjdF90ZXN0cyhzZWxmLCBhcmdzLCBsYXN0X3VuZXhwZWN0ZWRfcmVz
dWx0cyk6CiAgICAgICAgICIiIkZpbmQgYWxsIHRoZSBmaWxlcyB0byB0ZXN0LgogCkBAIC00OTUs
MTAgKzQ4Myw5IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICIiIlJldHVybnMgdGhlIGFw
cHJvcHJpYXRlIFRlc3RJbmZvIG9iamVjdCBmb3IgdGhlIGZpbGUuIE1vc3RseSB0aGlzCiAgICAg
ICAgIGlzIHVzZWQgZm9yIGxvb2tpbmcgdXAgdGhlIHRpbWVvdXQgdmFsdWUgKGluIG1zKSB0byB1
c2UgZm9yIHRoZSBnaXZlbgogICAgICAgICB0ZXN0LiIiIgotICAgICAgICBpZiBzZWxmLl9leHBl
Y3RhdGlvbnMuaGFzX21vZGlmaWVyKHRlc3RfZmlsZSwgdGVzdF9leHBlY3RhdGlvbnMuU0xPVyk6
Ci0gICAgICAgICAgICByZXR1cm4gVGVzdEluZm8oc2VsZi5fcG9ydCwgdGVzdF9maWxlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2xvd190aW1lX291dF9tcykK
LSAgICAgICAgcmV0dXJuIFRlc3RJbmZvKHNlbGYuX3BvcnQsIHRlc3RfZmlsZSwgc2VsZi5fb3B0
aW9ucy50aW1lX291dF9tcykKKyAgICAgICAgaWYgc2VsZi5fdGVzdF9pc19zbG93KHRlc3RfZmls
ZSk6CisgICAgICAgICAgICByZXR1cm4gVGVzdEluZm8odGVzdF9maWxlLCBzZWxmLl9vcHRpb25z
LnNsb3dfdGltZV9vdXRfbXMpCisgICAgICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0X2ZpbGUsIHNl
bGYuX29wdGlvbnMudGltZV9vdXRfbXMpCiAKICAgICBkZWYgX3Rlc3RfcmVxdWlyZXNfbG9jayhz
ZWxmLCB0ZXN0X2ZpbGUpOgogICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgdGVzdCBuZWVk
cyB0byBiZSBsb2NrZWQgd2hlbgpAQCAtNTA2LDIzICs0OTMsMjIgQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKICAgICAgICAgc3BsaXRfcGF0aCA9IHRlc3RfZmlsZS5zcGxpdChvcy5zZXApCiAgICAgICAg
IHJldHVybiAnaHR0cCcgaW4gc3BsaXRfcGF0aCBvciAnd2Vic29ja2V0JyBpbiBzcGxpdF9wYXRo
CiAKLSAgICBkZWYgX2dldF90ZXN0X2ZpbGVfcXVldWUoc2VsZiwgdGVzdF9maWxlcyk6Ci0gICAg
ICAgICIiIkNyZWF0ZSB0aGUgdGhyZWFkIHNhZmUgcXVldWUgb2YgbGlzdHMgb2YgKHRlc3QgZmls
ZW5hbWVzLCB0ZXN0IFVSSXMpCi0gICAgICAgIHR1cGxlcy4gRWFjaCBUZXN0U2hlbGxUaHJlYWQg
cHVsbHMgYSBsaXN0IGZyb20gdGhpcyBxdWV1ZSBhbmQgcnVucwotICAgICAgICB0aG9zZSB0ZXN0
cyBpbiBvcmRlciBiZWZvcmUgZ3JhYmJpbmcgdGhlIG5leHQgYXZhaWxhYmxlIGxpc3QuCisgICAg
ZGVmIF90ZXN0X2lzX3Nsb3coc2VsZiwgdGVzdF9maWxlKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKQogCi0g
ICAgICAgIFNoYXJkIHRoZSBsaXN0cyBieSBkaXJlY3RvcnkuIFRoaXMgaGVscHMgZW5zdXJlIHRo
YXQgdGVzdHMgdGhhdCBkZXBlbmQKLSAgICAgICAgb24gZWFjaCBvdGhlciAoYWthIGJhZCB0ZXN0
cyEpIGNvbnRpbnVlIHRvIHJ1biB0b2dldGhlciBhcyBtb3N0Ci0gICAgICAgIGNyb3NzLXRlc3Rz
IGRlcGVuZGVuY2llcyB0ZW5kIHRvIG9jY3VyIHdpdGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisg
ICAgZGVmIF9zaGFyZF90ZXN0cyhzZWxmLCB0ZXN0X2ZpbGVzLCBzaW5nbGVfdGhyZWFkZWQpOgor
ICAgICAgICAiIiJHcm91cHMgdGVzdHMgaW50byBiYXRjaGVzLgorICAgICAgICBUaGlzIGhlbHBz
IGVuc3VyZSB0aGF0IHRlc3RzIHRoYXQgZGVwZW5kIG9uIGVhY2ggb3RoZXIgKGFrYSBiYWQgdGVz
dHMhKQorICAgICAgICBjb250aW51ZSB0byBydW4gdG9nZXRoZXIgYXMgbW9zdCBjcm9zcy10ZXN0
cyBkZXBlbmRlbmNpZXMgdGVuZCB0bworICAgICAgICBvY2N1ciB3aXRoaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LgogCiAgICAgICAgIFJldHVybjoKLSAgICAgICAgICBUaGUgUXVldWUgb2YgbGlzdHMg
b2YgVGVzdEluZm8gb2JqZWN0cy4KKyAgICAgICAgICAgIEEgbGlzdCBvZiBsaXN0cyBvZiBUZXN0
SW5mbyBvYmplY3RzCiAgICAgICAgICIiIgotCiAgICAgICAgIHRlc3RfbGlzdHMgPSBbXQogICAg
ICAgICB0ZXN0c190b19odHRwX2xvY2sgPSBbXQotICAgICAgICBpZiAoc2VsZi5fb3B0aW9ucy5l
eHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwgb3IKLSAgICAgICAgICAgIHNlbGYuX2lzX3Npbmds
ZV90aHJlYWRlZCgpKToKKyAgICAgICAgaWYgc2luZ2xlX3RocmVhZGVkOgogICAgICAgICAgICAg
Zm9yIHRlc3RfZmlsZSBpbiB0ZXN0X2ZpbGVzOgogICAgICAgICAgICAgICAgIHRlc3RfaW5mbyA9
IHNlbGYuX2dldF90ZXN0X2luZm9fZm9yX2ZpbGUodGVzdF9maWxlKQogICAgICAgICAgICAgICAg
IGlmIHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUpOgpAQCAtNTYxLDIzICs1NDcs
NyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgdGVzdHNfdG9faHR0cF9sb2NrLnJl
dmVyc2UoKQogICAgICAgICAgICAgdGVzdF9saXN0cy5pbnNlcnQoMCwgKCJ0ZXN0c190b19odHRw
X2xvY2siLCB0ZXN0c190b19odHRwX2xvY2spKQogCi0gICAgICAgIGZpbGVuYW1lX3F1ZXVlID0g
UXVldWUuUXVldWUoKQotICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3RzOgotICAgICAgICAg
ICAgZmlsZW5hbWVfcXVldWUucHV0KGl0ZW0pCi0gICAgICAgIHJldHVybiBmaWxlbmFtZV9xdWV1
ZQotCi0gICAgZGVmIF9nZXRfdGVzdF9hcmdzKHNlbGYsIGluZGV4KToKLSAgICAgICAgIiIiUmV0
dXJucyB0aGUgdHVwbGUgb2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9yIER1bXBSZW5kZXJU
cmVlLiIiIgotICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5UZXN0QXJndW1lbnRz
KCkKLSAgICAgICAgdGVzdF9hcmdzLnBuZ19wYXRoID0gTm9uZQotICAgICAgICBpZiBzZWxmLl9v
cHRpb25zLnBpeGVsX3Rlc3RzOgotICAgICAgICAgICAgcG5nX3BhdGggPSBvcy5wYXRoLmpvaW4o
c2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJwbmdfcmVzdWx0JXMucG5nIiAlIGluZGV4KQotICAgICAgICAgICAgdGVz
dF9hcmdzLnBuZ19wYXRoID0gcG5nX3BhdGgKLSAgICAgICAgdGVzdF9hcmdzLm5ld19iYXNlbGlu
ZSA9IHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lCi0gICAgICAgIHRlc3RfYXJncy5yZXNldF9y
ZXN1bHRzID0gc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzCi0KLSAgICAgICAgcmV0dXJuIHRl
c3RfYXJncworICAgICAgICByZXR1cm4gdGVzdF9saXN0cwogCiAgICAgZGVmIF9jb250YWluc190
ZXN0cyhzZWxmLCBzdWJkaXIpOgogICAgICAgICBmb3IgdGVzdF9maWxlIGluIHNlbGYuX3Rlc3Rf
ZmlsZXM6CkBAIC01ODUsMzYgKzU1NSw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBkZWYgX2luc3Rh
bnRpYXRlX2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkcyhzZWxmLCB0ZXN0X2ZpbGVzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KToK
LSAgICAgICAgIiIiSW5zdGFudGl0YXRlcyBhbmQgc3RhcnRzIHRoZSBUZXN0U2hlbGxUaHJlYWQo
cykuCi0KLSAgICAgICAgUmV0dXJuOgotICAgICAgICAgIFRoZSBsaXN0IG9mIHRocmVhZHMuCi0g
ICAgICAgICIiIgotICAgICAgICBmaWxlbmFtZV9xdWV1ZSA9IHNlbGYuX2dldF90ZXN0X2ZpbGVf
cXVldWUodGVzdF9maWxlcykKLQotICAgICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVsbFRocmVh
ZHMgYW5kIHN0YXJ0IHRoZW0uCi0gICAgICAgIHRocmVhZHMgPSBbXQotICAgICAgICBmb3IgaSBp
biB4cmFuZ2UoaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSk6Ci0gICAgICAgICAg
ICAjIENyZWF0ZSBzZXBhcmF0ZSBUZXN0VHlwZXMgaW5zdGFuY2VzIGZvciBlYWNoIHRocmVhZC4K
LSAgICAgICAgICAgIHRlc3RfdHlwZXMgPSBbXQotICAgICAgICAgICAgZm9yIHRlc3RfdHlwZSBp
biBzZWxmLl90ZXN0X3R5cGVzOgotICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMuYXBwZW5kKHRl
c3RfdHlwZShzZWxmLl9wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCi0KLSAgICAgICAgICAgIHRlc3RfYXJn
cyA9IHNlbGYuX2dldF90ZXN0X2FyZ3MoaSkKLSAgICAgICAgICAgIHRocmVhZCA9IGR1bXBfcmVu
ZGVyX3RyZWVfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAotICAgICAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMsIGZpbGVuYW1lX3F1ZXVlLCBzZWxmLl9yZXN1bHRfcXVldWUsCi0g
ICAgICAgICAgICAgICAgdGVzdF90eXBlcywgdGVzdF9hcmdzKQotICAgICAgICAgICAgaWYgc2Vs
Zi5faXNfc2luZ2xlX3RocmVhZGVkKCk6Ci0gICAgICAgICAgICAgICAgdGhyZWFkLnJ1bl9pbl9t
YWluX3RocmVhZChzZWxmLCByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgdGhyZWFkLnN0YXJ0KCkKLSAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHRo
cmVhZCkKLQotICAgICAgICByZXR1cm4gdGhyZWFkcwotCiAgICAgZGVmIF9pc19zaW5nbGVfdGhy
ZWFkZWQoc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhlciB3ZSBzaG91bGQgcnVuIGFs
bCB0aGUgdGVzdHMgaW4gdGhlIG1haW4gdGhyZWFkLiIiIgogICAgICAgICByZXR1cm4gaW50KHNl
bGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA9PSAxCkBAIC02MzMsNzMgKzU3Myw1NyBAQCBj
bGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICBpbiB0aGUgZm9ybSB7ZmlsZW5hbWU6Zmls
ZW5hbWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0KICAgICAgICAgICAgIHJlc3VsdF9z
dW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRoIHRoZSByZXN1bHRzCiAgICAg
ICAgICIiIgorICAgICAgICBudW1fd29ya2VycyA9IGludChzZWxmLl9vcHRpb25zLmNoaWxkX3By
b2Nlc3NlcykKKworICAgICAgICBzZWxmLl9jdXJyZW50X2ZpbGVfbGlzdCA9IGZpbGVfbGlzdAor
ICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gcmVzdWx0X3N1bW1hcnkKKyAg
ICAgICAgcm91dGVyID0gc2VsZi5fcm91dGVyCisKKyAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMg
PSBbXQorICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuX3dvcmtl
cl9zdGF0cyA9IHt9CisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1fd29ya2Vycyk6CisgICAg
ICAgICAgICBuYW1lID0gJ3dvcmtlci0lZCcgJSBpCisgICAgICAgICAgICBzZWxmLl93b3JrZXJf
c3RhdHNbbmFtZV0gPSB7fQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW25hbWVdWydu
YW1lJ10gPSBuYW1lCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHNbbmFtZV1bJ251bV90
ZXN0cyddID0gMAorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW25hbWVdWyd0b3RhbF90
aW1lJ10gPSAwCisKKyAgICAgICAgdGVzdF9saXN0cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVf
bGlzdCwKKyAgICAgICAgICAgIG51bV93b3JrZXJzID09IDEgb3Igc2VsZi5fb3B0aW9ucy5leHBl
cmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCisgICAgICAgIGZvciB0ZXN0X2xpc3QgaW4gdGVzdF9s
aXN0czoKKyAgICAgICAgICAgIHJvdXRlci5wb3N0X3Rlc3RfbGlzdCh0ZXN0X2xpc3QpCisKKyAg
ICAgICAgIyBUZWxsIHRoZSB3b3JrZXJzIHRvIHNodXQgZG93biBhZnRlciB0aGV5J3JlIGRvbmUg
cnVubmluZyBhbGwgdGhlCisgICAgICAgICMgdGVzdHMuCisgICAgICAgIGZvciBpIGluIHhyYW5n
ZShudW1fd29ya2Vycyk6CisgICAgICAgICAgICByb3V0ZXIucG9zdF9zdG9wKCkKKwogICAgICAg
ICAjIEZJWE1FOiBXZSBzaG91bGQgdXNlIHdlYmtpdHB5LnRvb2wuZ3JhbW1hci5wbHVyYWxpemUg
aGVyZS4KICAgICAgICAgcGx1cmFsID0gIiIKICAgICAgICAgaWYgbm90IHNlbGYuX2lzX3Npbmds
ZV90aHJlYWRlZCgpOgogICAgICAgICAgICAgcGx1cmFsID0gInMiCiAgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyVzIC4uLicgJQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpLCBwbHVyYWwpKQot
ICAgICAgICB0aHJlYWRzID0gc2VsZi5faW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJl
YWRzKGZpbGVfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKIAotICAgICAgICBrZXlib2Fy
ZF9pbnRlcnJ1cHRlZCA9IHNlbGYuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRocmVhZHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgICh0aHJlYWRfdGltaW5ncywgdGVzdF90
aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykgPSBcCi0gICAgICAgICAgICBzZWxmLl9j
b2xsZWN0X3RpbWluZ19pbmZvKHRocmVhZHMpCisgICAgICAgIHJvdXRlci5zdGFydF93b3JrZXJz
KCkKIAotICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5n
cywgdGVzdF90aW1pbmdzLAotICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdz
KQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAu
Li4iKQogCi0gICAgZGVmIF93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaChzZWxmLCB0aHJlYWRz
LCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UK
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRz
IHdhaXRpbmcgZm9yIHRoZW0gdG8gZmluaXNoLgotICAgICAgICAgICAgc29tZV90aHJlYWRfaXNf
YWxpdmUgPSBUcnVlCi0gICAgICAgICAgICB3aGlsZSBzb21lX3RocmVhZF9pc19hbGl2ZToKLSAg
ICAgICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IEZhbHNlCi0gICAgICAgICAgICAg
ICAgdCA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRz
OgotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25faW5mbyA9IHRocmVhZC5leGNlcHRpb25f
aW5mbygpCi0gICAgICAgICAgICAgICAgICAgIGlmIGV4Y2VwdGlvbl9pbmZvIGlzIG5vdCBOb25l
OgotICAgICAgICAgICAgICAgICAgICAgICAgIyBSZS1yYWlzZSB0aGUgdGhyZWFkJ3MgZXhjZXB0
aW9uIGhlcmUgdG8gbWFrZSBpdAotICAgICAgICAgICAgICAgICAgICAgICAgIyBjbGVhciB0aGF0
IHRlc3Rpbmcgd2FzIGFib3J0ZWQuIE90aGVyd2lzZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICMgdGhlIHRlc3RzIHRoYXQgZGlkIG5vdCBydW4gd291bGQgYmUgYXNzdW1lZAotICAgICAgICAg
ICAgICAgICAgICAgICAgIyB0byBoYXZlIHBhc3NlZC4KLSAgICAgICAgICAgICAgICAgICAgICAg
IHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2lu
Zm9bMl0KLQotICAgICAgICAgICAgICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB0aHJlYWQubmV4dF90aW1lb3V0KCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChuZXh0X3RpbWVvdXQgYW5kIHQgPiBuZXh0X3RpbWVvdXQp
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2dfd2VkZ2VkX3RocmVhZCh0aHJlYWQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmNsZWFyX25leHRfdGltZW91dCgp
Ci0KLSAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQot
Ci0gICAgICAgICAgICAgICAgaWYgc29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAgICAgICAgICAg
ICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLQorICAgICAgICAgICAgcm91dGVyLmxvb3Aoc2VsZikK
ICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcm91dGVyLmNh
bmNlbF93b3JrZXJzKCkKKyAgICAgICAgICAgIF9sb2cuaW5mbygiSW50ZXJydXB0ZWQsIGV4aXRp
bmciKQogICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVlCi0gICAgICAgICAg
ICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgdGhyZWFkLmNhbmNlbCgp
Ci0KLSAgICAgICAgcmV0dXJuIGtleWJvYXJkX2ludGVycnVwdGVkCi0KLSAgICBkZWYgX2NvbGxl
Y3RfdGltaW5nX2luZm8oc2VsZiwgdGhyZWFkcyk6Ci0gICAgICAgIHRlc3RfdGltaW5ncyA9IHt9
Ci0gICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzID0gW10KLSAgICAgICAgdGhyZWFkX3Rp
bWluZ3MgPSBbXQotCi0gICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAg
IHRocmVhZF90aW1pbmdzLmFwcGVuZCh7J25hbWUnOiB0aHJlYWQuZ2V0TmFtZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtX3Rlc3RzJzogdGhyZWFkLmdldF9udW1f
dGVzdHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvdGFsX3RpbWUn
OiB0aHJlYWQuZ2V0X3RvdGFsX3RpbWUoKX0pCi0gICAgICAgICAgICB0ZXN0X3RpbWluZ3MudXBk
YXRlKHRocmVhZC5nZXRfdGVzdF9ncm91cF90aW1pbmdfc3RhdHMoKSkKLSAgICAgICAgICAgIGlu
ZGl2aWR1YWxfdGVzdF90aW1pbmdzLmV4dGVuZCh0aHJlYWQuZ2V0X3Rlc3RfcmVzdWx0cygpKQor
ICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIFVuZXhwZWN0ZWQgZXhjZXB0aW9uOyBkb24n
dCB0cnkgdG8gY2xlYW4gdXAgd29ya2Vycy4KKyAgICAgICAgICAgIF9sb2cuaW5mbygiRXhjZXB0
aW9uIHJhaXNlZCwgZXhpdGluZyIpCisgICAgICAgICAgICByYWlzZQogCi0gICAgICAgIHJldHVy
biAodGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3Mp
CisgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHNlbGYuX3dvcmtlcl9zdGF0
cy52YWx1ZXMoKSwKKyAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9zdGF0cywgc2VsZi5fYWxs
X3Jlc3VsdHMpCiAKICAgICBkZWYgbmVlZHNfaHR0cChzZWxmKToKICAgICAgICAgIiIiUmV0dXJu
cyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5lciBuZWVkcyBhbiBIVFRQIHNlcnZlci4iIiIKQEAgLTc5
NCwxMiArNzE4LDEyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAKICAgICAgICAgZW5kX3RpbWUgPSB0
aW1lLnRpbWUoKQogCi0gICAgICAgIHNlbGYuX3ByaW50X3RpbWluZ19zdGF0aXN0aWNzKGVuZF90
aW1lIC0gc3RhcnRfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICAjc2VsZi5fcHJpbnRf
dGltaW5nX3N0YXRpc3RpY3MoZW5kX3RpbWUgLSBzdGFydF90aW1lLAorICAgICAgICAjICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKKyAg
ICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1p
bmdzLAorICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1h
cnkpCiAKLSAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnkocmVzdWx0X3N1bW1hcnkp
CisgICAgICAgICNzZWxmLl9wcmludF9yZXN1bHRfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKIAog
ICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCkBA
IC04NDksMjMgKzc3MywzNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBfbG9nLmRlYnVn
KCJzdG9wcGluZyBoZWxwZXIiKQogICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaGVscGVyKCkKIAot
ICAgIGRlZiB1cGRhdGVfc3VtbWFyeShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgZGVmIGhh
bmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgc3JjKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGhh
bmRsZV9kb25lKHNlbGYsIHNyYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBoYW5kbGVfZmlu
aXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKICAgICAgICAgIiIi
VXBkYXRlIHRoZSBzdW1tYXJ5IGFuZCBwcmludCByZXN1bHRzIHdpdGggYW55IGNvbXBsZXRlZCB0
ZXN0cy4iIiIKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSB0ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdC5sb2FkcyhzZWxmLl9yZXN1
bHRfcXVldWUuZ2V0X25vd2FpdCgpKQotICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5Ogot
ICAgICAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4
cGVjdGF0aW9ucy5tYXRjaGVzX2FuX2V4cGVjdGVkX3Jlc3VsdCgKLSAgICAgICAgICAgICAgICBy
ZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC50eXBlLCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQot
ICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuYWRkKHJlc3VsdCwgZXhwZWN0ZWQpCi0gICAgICAg
ICAgICBleHBfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5n
KAotICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSkKLSAgICAgICAgICAgIGdvdF9zdHIg
PSBzZWxmLl9leHBlY3RhdGlvbnMuZXhwZWN0YXRpb25fdG9fc3RyaW5nKHJlc3VsdC50eXBlKQot
ICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVj
dGVkLCBleHBfc3RyLCBnb3Rfc3RyKQotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9w
cm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgc2VsZi5fcmV0cnlpbmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKyAgICAgICAg
c2VsZi5fdXBkYXRlX3dvcmtlcl9zdGF0cyhzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKQorCisg
ICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRf
cmVzdWx0KAorICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lLCByZXN1bHQudHlwZSwgc2VsZi5f
b3B0aW9ucy5waXhlbF90ZXN0cykKKyAgICAgICAgZXhwX3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9u
cy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSkK
KyAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJp
bmcocmVzdWx0LnR5cGUpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQo
cmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cikKKworICAgICAgICBzZWxmLl9jdXJy
ZW50X3Jlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3Byb2dyZXNzKHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmV0cnlpbmcsIHNlbGYuX3Rl
c3RfZmlsZXNfbGlzdCkKKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfZ3JvdXAoc2VsZiwgc3Jj
LCBncm91cF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX2dy
b3VwX3N0YXRzW2dyb3VwX25hbWVdID0gKG51bV90ZXN0cywgZWxhcHNlZF90aW1lKQorCisgICAg
ZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNlcHRpb25faW5mbyk6CisgICAgICAg
IHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2lu
Zm9bMl0KKworICAgIGRlZiBfdXBkYXRlX3dvcmtlcl9zdGF0cyhzZWxmLCBzcmMsIHJlc3VsdCwg
ZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW3NyY11bJ3RvdGFsX3Rp
bWUnXSArPSBlbGFwc2VkX3RpbWUKKyAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW3NyY11bJ251
bV90ZXN0cyddICs9IDEKKyAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkK
IAogICAgIGRlZiBfY2xvYmJlcl9vbGRfcmVzdWx0cyhzZWxmKToKICAgICAgICAgIyBKdXN0IGNs
b2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJlc3VsdHMgZGlyZWN0b3JpZXMgc2luY2UgdGhlIG90aGVy
CkBAIC0xMzkzLDExICsxMzMxLDEzIEBAIGRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgcmVn
dWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkKICAgICAg
ICAgcmV0dXJuIDAKIAorICAgIHJvdXRlcl9vYmogPSByb3V0ZXIuZ2V0KHBvcnQsIG9wdGlvbnMp
CisKICAgICAjIFdlIHdyYXAgYW55IHBhcnRzIG9mIHRoZSBydW4gdGhhdCBhcmUgc2xvdyBvciBs
aWtlbHkgdG8gcmFpc2UgZXhjZXB0aW9ucwogICAgICMgaW4gYSB0cnkvZmluYWxseSB0byBlbnN1
cmUgdGhhdCB3ZSBjbGVhbiB1cCB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uLgogICAgIG51bV91
bmV4cGVjdGVkX3Jlc3VsdHMgPSAtMQogICAgIHRyeToKLSAgICAgICAgdGVzdF9ydW5uZXIgPSBU
ZXN0UnVubmVyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgICAgIHRlc3RfcnVubmVyID0g
VGVzdFJ1bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVyLCByb3V0ZXJfb2JqKQogICAgICAgICB0
ZXN0X3J1bm5lci5fcHJpbnRfY29uZmlnKCkKIAogICAgICAgICBwcmludGVyLnByaW50X3VwZGF0
ZSgiQ29sbGVjdGluZyB0ZXN0cyAuLi4iKQpAQCAtMTQyNiw2ICsxMzY2LDcgQEAgZGVmIHJ1bihw
b3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAogICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4aXQgc3RhdHVzOiAlZCIgJQogICAg
ICAgICAgICAgICAgICAgICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzKQogICAgIGZpbmFsbHk6
CisgICAgICAgIHJvdXRlcl9vYmouY2xlYW51cCgpCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgp
CiAKICAgICByZXR1cm4gbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cwpAQCAtMTQ4OCw3ICsxNDI5LDkg
QEAgZGVmIF9jb21wYXRfc2hpbV9vcHRpb24ob3B0aW9uX25hbWUsICoqa3dhcmdzKToKIGRlZiBw
YXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgIiIiUHJvdmlkZXMgYSBkZWZhdWx0IHNldCBvZiBj
b21tYW5kIGxpbmUgYXJncy4KIAotICAgIFJldHVybnMgYSB0dXBsZSBvZiBvcHRpb25zLCBhcmdz
IGZyb20gb3B0cGFyc2UiIiIKKyAgICBSZXR1cm5zIGEgdHVwbGUgb2Ygb3B0aW9ucywgYXJncyBm
cm9tIG9wdHBhcnNlLiIiIgorICAgIGlmIGFyZ3MgaXMgTm9uZToKKyAgICAgICAgYXJncyA9IHN5
cy5hcmd2WzE6XQogCiAgICAgIyBGSVhNRTogQWxsIG9mIHRoZXNlIG9wdGlvbnMgc2hvdWxkIGJl
IHN0b3JlZCBjbG9zZXIgdG8gdGhlIGNvZGUgd2hpY2gKICAgICAjIEZJWE1FOiBhY3R1YWxseSB1
c2VzIHRoZW0uIGNvbmZpZ3VyYXRpb25fb3B0aW9ucyBzaG91bGQgbW92ZQpAQCAtMTY2MSw2ICsx
NjA0LDEzIEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAgIG9wdHBhcnNlLm1h
a2Vfb3B0aW9uKCItLWNoaWxkLXByb2Nlc3NlcyIsCiAgICAgICAgICAgICBoZWxwPSJOdW1iZXIg
b2YgRHVtcFJlbmRlclRyZWVzIHRvIHJ1biBpbiBwYXJhbGxlbC4iKSwKICAgICAgICAgIyBGSVhN
RTogRGlzcGxheSBkZWZhdWx0IG51bWJlciBvZiBjaGlsZCBwcm9jZXNzZXMgdGhhdCB3aWxsIHJ1
bi4KKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tc2luZ2xlLXByb2Nlc3MiLCBhY3Rp
b249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJydW4g
aW4gYSBzaW5nbGUgcHJvY2VzcyIpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS11
c2UtdGhyZWFkcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9InVzZSB0aHJlYWRzIGluc3RlYWQgb2YgcHJvY2Vzc2VzIiksCisgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLW5vLXVzZS10aHJlYWRzIiwgZGVzdD0idXNlX3RocmVh
ZHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX2ZhbHNlIiwg
ZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZG9uJ3Qg
dXNlIHRocmVhZHMgaW5zdGVhZCBvZiBwcm9jZXNzZXMiKSwKICAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oIi0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFsbGVsIiwKICAgICAgICAgICAgIGFj
dGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICBoZWxwPSJydW4g
YWxsIHRlc3RzIGluIHBhcmFsbGVsIiksCkBAIC0xNzEwLDMwICsxNjYwLDIyIEBAIGRlZiBwYXJz
ZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAgICAgICBoZWxwPSJJZiB0cnVlLCB1cGxvYWQgZnVs
bCBqc29uIHJlc3VsdHMgdG8gc2VydmVyLiIpLAogICAgIF0KIAorICAgIG11bHRpX3Byb2Nlc3Nf
b3B0aW9ucyA9IFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbWFuYWdlciIsIGhl
bHA9IlRoZSB2YWx1ZSBvZiB0aGUgUXVldWUgIgorICAgICAgICAgICAgIm9iamVjdCB1c2VkIGZv
ciBtZXNzYWdlIHJvdXRpbmciKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0td29y
a2VyLW51bWJlciIsIGhlbHA9IldvcmtlciBudW1iZXIiKSwKKyAgICBdCisKICAgICBvcHRpb25f
bGlzdCA9IChjb25maWd1cmF0aW9uX29wdGlvbnMgKyBwcmludF9vcHRpb25zICsKICAgICAgICAg
ICAgICAgICAgICBjaHJvbWl1bV9vcHRpb25zICsgcmVzdWx0c19vcHRpb25zICsgdGVzdF9vcHRp
b25zICsKICAgICAgICAgICAgICAgICAgICBtaXNjX29wdGlvbnMgKyByZXN1bHRzX2pzb25fb3B0
aW9ucyArCi0gICAgICAgICAgICAgICAgICAgb2xkX3J1bl93ZWJraXRfdGVzdHNfY29tcGF0KQor
ICAgICAgICAgICAgICAgICAgIG11bHRpX3Byb2Nlc3Nfb3B0aW9ucyArIG9sZF9ydW5fd2Via2l0
X3Rlc3RzX2NvbXBhdCkKICAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2Vy
KG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQotCi0gICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9w
YXJzZXIucGFyc2VfYXJncyhhcmdzKQotCi0gICAgcmV0dXJuIG9wdGlvbnMsIGFyZ3MKLQotCi1k
ZWYgX2xvZ193ZWRnZWRfdGhyZWFkKHRocmVhZCk6Ci0gICAgIiIiTG9nIGluZm9ybWF0aW9uIGFi
b3V0IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUuIiIiCi0gICAgaWQgPSB0aHJlYWQuaWQoKQotICAg
IHN0YWNrID0gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuZmluZF90aHJlYWRfc3RhY2soaWQpCi0g
ICAgYXNzZXJ0KHN0YWNrIGlzIG5vdCBOb25lKQotICAgIF9sb2cuZXJyb3IoIiIpCi0gICAgX2xv
Zy5lcnJvcigidGhyZWFkICVzICglZCkgaXMgd2VkZ2VkIiAlICh0aHJlYWQuZ2V0TmFtZSgpLCBp
ZCkpCi0gICAgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQubG9nX3N0YWNrKHN0YWNrKQotICAgIF9s
b2cuZXJyb3IoIiIpCisgICAgcmV0dXJuIG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQog
CiAKLWRlZiBtYWluKCk6Ci0gICAgb3B0aW9ucywgYXJncyA9IHBhcnNlX2FyZ3MoKQorZGVmIG1h
aW4oYXJndj1Ob25lKToKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VfYXJncyhhcmd2KQogICAg
IHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKICAgICByZXR1
cm4gcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzKQogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c191bml0dGVzdC5weQppbmRleCAwZjA5ZmZhMDQzNDIzZDczNWNjMGEzZDNjNjY3MTVk
NTM3YWFhNjE0Li41YjE3MzJkN2ZkNWZmZWZhZTk5Njg4Yjg5ZTU3NzAzZmRiNjE1ZTU1IDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Vi
a2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTQ3LDcgKzQ3LDYg
QEAgZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRwdXRjYXB0dXJlCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHVzZXIKIGZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzIGltcG9ydCBwb3J0CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcnVu
X3dlYmtpdF90ZXN0cwotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5wb3J0LnRlc3QgaW1wb3J0IFRlc3RQb3J0CiAKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5t
b2NrIGltcG9ydCBNb2NrCkBAIC02OCwxMiArNjcsMTYgQEAgZGVmIHBhc3NpbmdfcnVuKGFyZ3M9
W10sIHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLAogICAgICAgICBuZXdfYXJn
cy5leHRlbmQoWyctLXBsYXRmb3JtJywgJ3Rlc3QnXSkKICAgICBpZiBub3QgcmVjb3JkX3Jlc3Vs
dHM6CiAgICAgICAgIG5ld19hcmdzLmFwcGVuZCgnLS1uby1yZWNvcmQtcmVzdWx0cycpCisgICAg
aWYgbm90ICctLWNoaWxkLXByb2Nlc3NlcycgaW4gYXJnczoKKyAgICAgICAgbmV3X2FyZ3MuZXh0
ZW5kKFsnLS1jaGlsZC1wcm9jZXNzZXMnLCAxXSkKKyAgICAgICAgbmV3X2FyZ3MuZXh0ZW5kKFsn
LS1zaW5nbGUtcHJvY2VzcyddKQorCiAgICAgbmV3X2FyZ3MuZXh0ZW5kKGFyZ3MpCiAgICAgaWYg
bm90IHRlc3RzX2luY2x1ZGVkOgogICAgICAgICAjIFdlIHVzZSB0aGUgZ2xvYiB0byB0ZXN0IHRo
YXQgZ2xvYmJpbmcgd29ya3MuCiAgICAgICAgIG5ld19hcmdzLmV4dGVuZChbJ3Bhc3NlcycsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHAvdGVzdHMnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICdodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cycsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3dlYnNvY2tldC90ZXN0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1
cmVzL2V4cGVjdGVkLyonXSkKICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1bl93ZWJraXRf
dGVzdHMucGFyc2VfYXJncyhuZXdfYXJncykKICAgICBpZiBwb3J0X29iaiBpcyBOb25lOgpAQCAt
MTU5LDcgKzE2Miw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBk
ZWYgdGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQoc2VsZik6CiAgICAgICAgICMgTm90ZSB0aGF0IHRo
aXMgYWxzbyB0ZXN0cyBydW5uaW5nIGEgdGVzdCBtYXJrZWQgYXMgU0tJUCBpZgogICAgICAgICAj
IHlvdSBzcGVjaWZ5IGl0IGV4cGxpY2l0bHkuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtl
eWJvYXJkSW50ZXJydXB0LCBwYXNzaW5nX3J1biwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
S2V5Ym9hcmRJbnRlcnJ1cHQsIGxvZ2dpbmdfcnVuLAogICAgICAgICAgICAgWydmYWlsdXJlcy9l
eHBlY3RlZC9rZXlib2FyZC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCiAKICAgICBkZWYg
dGVzdF9sYXN0X3Jlc3VsdHMoc2VsZik6CkBAIC0xOTksOCArMjAyLDE2IEBAIGNsYXNzIE1haW5U
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3J1bl9mb3JjZShzZWxmKToK
ICAgICAgICAgIyBUaGlzIHJhaXNlcyBhbiBleGNlcHRpb24gYmVjYXVzZSB3ZSBydW4KLSAgICAg
ICAgIyBmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCwgd2hpY2ggaXMgbm9ybWFsbHkg
U0tJUHBlZC4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19y
dW4sIFsnLS1mb3JjZSddKQorICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5o
dG1sIGFuZAorICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJkLCB3aGljaCBhcmUg
bm9ybWFsbHkgU0tJUHBlZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9nZ2luZ19ydW4o
WyctLWZvcmNlJ10pCisgICAgICAgICAgICB0ZXN0X3Bhc3NlZCA9IEZhbHNlCisgICAgICAgIGV4
Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgdGVzdF9wYXNzZWQgPSBUcnVlCisgICAgICAg
IGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHRlc3RfcGFzc2VkID0gVHJ1
ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdF9wYXNzZWQpCiAKICAgICBkZWYgdGVzdF9y
dW5fcGFydChzZWxmKToKICAgICAgICAgIyBGSVhNRTogdmVyaWZ5ICMgb2YgdGVzdHMgcnVuCkBA
IC0zNTEsNyArMzYyLDYgQEAgY2xhc3MgUmViYXNlbGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgY29kZWNzLm9wZW4gPSBvcmlnaW5hbF9v
cGVuCiAKLQogY2xhc3MgVGVzdFJ1bm5lcldyYXBwZXIocnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVu
bmVyKToKICAgICBkZWYgX2dldF90ZXN0X2luZm9fZm9yX2ZpbGUoc2VsZiwgdGVzdF9maWxlKToK
ICAgICAgICAgcmV0dXJuIHRlc3RfZmlsZQpAQCAtMzYzLDcgKzM3Myw4IEBAIGNsYXNzIFRlc3RS
dW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgbW9ja19wb3J0LnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUgPSBsYW1iZGEgbmFtZTogbmFtZQogICAgICAgICBtb2NrX3BvcnQuZmls
ZW5hbWVfdG9fdXJpID0gbGFtYmRhIG5hbWU6IG5hbWUKIAotICAgICAgICBydW5uZXIgPSBydW5f
d2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIocG9ydD1tb2NrX3BvcnQsIG9wdGlvbnM9TW9jaygpLCBw
cmludGVyPU1vY2soKSkKKyAgICAgICAgcnVubmVyID0gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVu
bmVyKHBvcnQ9bW9ja19wb3J0LAorICAgICAgICAgICAgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9
TW9jaygpLCByb3V0ZXI9TW9jaygpKQogICAgICAgICBleHBlY3RlZF9odG1sID0gdSIiIjxodG1s
PgogICA8aGVhZD4KICAgICA8dGl0bGU+TGF5b3V0IFRlc3QgUmVzdWx0cyAodGltZSk8L3RpdGxl
PgpAQCAtMzc3LDIwICszODgsMTAgQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICBodG1sID0gcnVubmVyLl9yZXN1bHRzX2h0bWwoWyJ0ZXN0X3BhdGgi
XSwge30sICJUaXRsZSIsIG92ZXJyaWRlX3RpbWU9InRpbWUiKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGh0bWwsIGV4cGVjdGVkX2h0bWwpCiAKLSAgICBkZWYgcXVldWVfdG9fbGlzdChzZWxm
LCBxdWV1ZSk6Ci0gICAgICAgIHF1ZXVlX2xpc3QgPSBbXQotICAgICAgICB3aGlsZShUcnVlKToK
LSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBxdWV1ZV9saXN0LmFwcGVuZChxdWV1
ZS5nZXRfbm93YWl0KCkpCi0gICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAg
ICAgICAgICAgYnJlYWsKLSAgICAgICAgcmV0dXJuIHF1ZXVlX2xpc3QKLQotICAgIGRlZiB0ZXN0
X2dldF90ZXN0X2ZpbGVfcXVldWUoc2VsZik6CisgICAgZGVmIHRlc3Rfc2hhcmRfdGVzdHMoc2Vs
Zik6CiAgICAgICAgICMgVGVzdCB0aGF0IF9nZXRfdGVzdF9maWxlX3F1ZXVlIGluIHJ1bl93ZWJr
aXRfdGVzdHMuVGVzdFJ1bm5lciByZWFsbHkKICAgICAgICAgIyBwdXQgdGhlIGh0dHAgdGVzdHMg
Zmlyc3QgaW4gdGhlIHF1ZXVlLgotICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihw
b3J0PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpKQotICAgICAgICBydW5u
ZXIuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsID0gRmFsc2UKKyAgICAgICAg
cnVubmVyID0gVGVzdFJ1bm5lcldyYXBwZXIocG9ydD1Nb2NrKCksIG9wdGlvbnM9TW9jaygpLCBw
cmludGVyPU1vY2soKSwgcm91dGVyPU1vY2soKSkKIAogICAgICAgICB0ZXN0X2xpc3QgPSBbCiAg
ICAgICAgICAgIkxheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91bmljb2RlLmh0bSIsCkBAIC00
MTEsMTkgKzQxMiwxNSBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9y
dGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwnLAogICAgICAgICBdKQogCi0gICAgICAgIHJ1bm5l
ci5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSAxCi0gICAgICAgIHRlc3RfcXVldWVfZm9yX3Np
bmdsZV90aHJlYWQgPSBydW5uZXIuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9saXN0KQotICAg
ICAgICBydW5uZXIuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gMgotICAgICAgICB0ZXN0X3F1
ZXVlX2Zvcl9tdWx0aV90aHJlYWQgPSBydW5uZXIuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9s
aXN0KQotCi0gICAgICAgIHNpbmdsZV90aHJlYWRfcmVzdWx0cyA9IHNlbGYucXVldWVfdG9fbGlz
dCh0ZXN0X3F1ZXVlX2Zvcl9zaW5nbGVfdGhyZWFkKQotICAgICAgICBtdWx0aV90aHJlYWRfcmVz
dWx0cyA9IHNlbGYucXVldWVfdG9fbGlzdCh0ZXN0X3F1ZXVlX2Zvcl9tdWx0aV90aHJlYWQpCisg
ICAgICAgIHNpbmdsZV90aHJlYWRfcmVzdWx0cyA9IHJ1bm5lci5fc2hhcmRfdGVzdHModGVzdF9s
aXN0LCBUcnVlKQorICAgICAgICBtdWx0aV90aHJlYWRfcmVzdWx0cyA9IHJ1bm5lci5fc2hhcmRf
dGVzdHModGVzdF9saXN0LCBGYWxzZSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0
c190b19odHRwX2xvY2siLCBzaW5nbGVfdGhyZWFkX3Jlc3VsdHNbMF1bMF0pCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQoc2luZ2xlX3Ro
cmVhZF9yZXN1bHRzWzBdWzFdKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9f
aHR0cF9sb2NrIiwgbXVsdGlfdGhyZWFkX3Jlc3VsdHNbMF1bMF0pCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQobXVsdGlfdGhyZWFkX3Jl
c3VsdHNbMF1bMV0pKQogCisKIGNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICMgRklYTUU6IGl0J3MgaGFyZCB0byBrbm93IHdoaWNoIHBsYXRmb3JtcyBhcmUgc2FmZSB0
byB0ZXN0OyB0aGUKICAgICAjIGNocm9taXVtIHBsYXRmb3JtcyByZXF1aXJlIGEgY2hyb21pdW0g
Y2hlY2tvdXQsIGFuZCB0aGUgbWFjIHBsYXRmb3JtCkBAIC00NDQsNDEgKzQ0MSw2IEBAIGNsYXNz
IERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICctLXBpeGVsLXRlc3RzJ10pKQogCiAKLWNsYXNzIFRlc3RUaHJl
YWQoZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxlVGhyZWFkKToKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgc3RhcnRlZF9xdWV1ZSwgc3RvcHBpbmdfcXVldWUpOgotICAgICAgICBkdW1w
X3JlbmRlcl90cmVlX3RocmVhZC5XYXRjaGFibGVUaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAg
ICAgc2VsZi5fc3RhcnRlZF9xdWV1ZSA9IHN0YXJ0ZWRfcXVldWUKLSAgICAgICAgc2VsZi5fc3Rv
cHBpbmdfcXVldWUgPSBzdG9wcGluZ19xdWV1ZQotICAgICAgICBzZWxmLl90aW1lb3V0ID0gRmFs
c2UKLSAgICAgICAgc2VsZi5fdGltZW91dF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLQotICAgIGRl
ZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkKLQotICAgIGRlZiBfY292
ZXJlZF9ydW4oc2VsZik6Ci0gICAgICAgICMgRklYTUU6IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0
aW5lIHRvIHdvcmsgYXJvdW5kIGEgYnVnCi0gICAgICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRw
Oi8vYml0YnVja2V0Lm9yZy9uZWQvY292ZXJhZ2VweS9pc3N1ZS84NS4KLSAgICAgICAgc2VsZi5f
dGhyZWFkX2lkID0gdGhyZWFkLmdldF9pZGVudCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IHNlbGYuX3N0YXJ0ZWRfcXVldWUucHV0KCcnKQotICAgICAgICAgICAgbXNnID0gc2VsZi5fc3Rv
cHBpbmdfcXVldWUuZ2V0KCkKLSAgICAgICAgICAgIGlmIG1zZyA9PSAnS2V5Ym9hcmRJbnRlcnJ1
cHQnOgotICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0Ci0gICAgICAgICAg
ICBlbGlmIG1zZyA9PSAnRXhjZXB0aW9uJzoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCkKLSAgICAgICAgICAgIGVsaWYgbXNnID09ICdUaW1lb3V0JzoKLSAgICAgICAgICAgICAg
ICBzZWxmLl90aW1lb3V0ID0gVHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVl
dWUuZ2V0KCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2lu
Zm8gPSBzeXMuZXhjX2luZm8oKQotCi0gICAgZGVmIG5leHRfdGltZW91dChzZWxmKToKLSAgICAg
ICAgaWYgc2VsZi5fdGltZW91dDoKLSAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUucHV0
KCdkb25lJykKLSAgICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUoKSAtIDEwCi0gICAgICAgIHJl
dHVybiB0aW1lLnRpbWUoKQotCi0KIGNsYXNzIFRlc3RIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6
CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFzdHJlYW0pOgogICAgICAgICBsb2dnaW5nLkhhbmRs
ZXIuX19pbml0X18oc2VsZikKQEAgLTQ4OCw3MCArNDUwLDUgQEAgY2xhc3MgVGVzdEhhbmRsZXIo
bG9nZ2luZy5IYW5kbGVyKToKICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKHNlbGYuZm9ybWF0
KHJlY29yZCkpCiAKIAotY2xhc3MgV2FpdEZvclRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgotICAgIGNsYXNzIE1vY2tUZXN0UnVubmVyKHJ1bl93ZWJraXRfdGVzdHMuVGVz
dFJ1bm5lcik6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgICAgIHBhc3MK
LQotICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAg
ICBkZWYgdXBkYXRlX3N1bW1hcnkoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAgICAg
cGFzcwotCi0gICAgZGVmIHJ1bl9vbmVfdGhyZWFkKHNlbGYsIG1zZyk6Ci0gICAgICAgIHJ1bm5l
ciA9IHNlbGYuTW9ja1Rlc3RSdW5uZXIoKQotICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVl
LlF1ZXVlKCkKLSAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAg
IGNoaWxkX3RocmVhZCA9IFRlc3RUaHJlYWQoc3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVl
KQotICAgICAgICBjaGlsZF90aHJlYWQuc3RhcnQoKQotICAgICAgICBzdGFydGVkX21zZyA9IHN0
YXJ0aW5nX3F1ZXVlLmdldCgpCi0gICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dChtc2cpCi0gICAg
ICAgIHRocmVhZHMgPSBbY2hpbGRfdGhyZWFkXQotICAgICAgICByZXR1cm4gcnVubmVyLl93YWl0
X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLCBOb25lKQotCi0gICAgZGVmIHRlc3RfYmFz
aWMoc2VsZik6Ci0gICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnJykK
LSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKLQotICAgIGRlZiB0ZXN0X2lu
dGVycnVwdChzZWxmKToKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFk
KCdLZXlib2FyZEludGVycnVwdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnRlcnJ1cHRl
ZCkKLQotICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIG9jID0gb3V0cHV0Y2Fw
dHVyZS5PdXRwdXRDYXB0dXJlKCkKLSAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQotICAgICAg
ICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJ1RpbWVvdXQnKQotICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVkKQotICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgp
Ci0KLSAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKFZhbHVlRXJyb3IsIHNlbGYucnVuX29uZV90aHJlYWQsICdFeGNlcHRpb24nKQotCi0KLWNs
YXNzIFN0YW5kYWxvbmVGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYg
dGVzdF9sb2dfd2VkZ2VkX3RocmVhZChzZWxmKToKLSAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJl
Lk91dHB1dENhcHR1cmUoKQotICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIGxv
Z2dlciA9IHJ1bl93ZWJraXRfdGVzdHMuX2xvZwotICAgICAgICBhc3RyZWFtID0gYXJyYXlfc3Ry
ZWFtLkFycmF5U3RyZWFtKCkKLSAgICAgICAgaGFuZGxlciA9IFRlc3RIYW5kbGVyKGFzdHJlYW0p
Ci0gICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCi0KLSAgICAgICAgc3RhcnRpbmdf
cXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVl
dWUoKQotICAgICAgICBjaGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBz
dG9wcGluZ19xdWV1ZSkKLSAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKLSAgICAgICAgbXNn
ID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKLQotICAgICAgICBydW5fd2Via2l0X3Rlc3RzLl9sb2df
d2VkZ2VkX3RocmVhZChjaGlsZF90aHJlYWQpCi0gICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgn
JykKLSAgICAgICAgY2hpbGRfdGhyZWFkLmpvaW4odGltZW91dD0xLjApCi0KLSAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShhc3RyZWFtLmVtcHR5KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
Y2hpbGRfdGhyZWFkLmlzQWxpdmUoKSkKLSAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQotCi0K
IGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73184</attachid>
            <date>2010-11-06 20:45:21 -0700</date>
            <delta_ts>2010-11-06 20:53:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48820-20101106204519.patch</filename>
            <type>text/plain</type>
            <size>86356</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1MDFiMTYwNWQ4OWMxY2U0NmJkY2RiMjE5YTFmNDE5NzM5MjkzMWE4Li41YTdlNjhi
NjZhZDc1ZGRkZDMyZDg5NTc3NDRjNjU1MmEyZDdmNjJjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGFsbCBvZiB0aGUg
TlJXVCBtdWx0aXRocmVhZGluZyBpc3N1ZXMgYnkgbW92aW5nIHRvCisgICAgICAgIG11bHRpcHJv
Y2Vzcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3ByaW50aW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlci5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyX3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3Rlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5OgorCiAyMDEwLTExLTAyICBHeXV5b3VuZyBLaW0g
IDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZDogQWRkIG15
c2VsZiB0byB0aGUgbGlzdCBvZiBDb21taXR0ZXJzLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJf
dHJlZV90aHJlYWQucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQppbmRleCAzZTNiYTBi
MTY3NzA0NTAwMzZmNzMxNWFjMTYxZWYxZmI5YjdkNzM1Li4xMzlmYzUyY2JkZmNkM2EzZTAzZDU1
ZTk2YTE5ZDJiMjY3NTc2OTQ1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5w
eQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQpAQCAtNDIsMTMgKzQyLDE1IEBAIGlt
cG9ydCBjb2RlY3MKIGltcG9ydCBjb3B5CiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCi1pbXBv
cnQgUXVldWUKIGltcG9ydCBzaWduYWwKIGltcG9ydCBzeXMKLWltcG9ydCB0aHJlYWQKIGltcG9y
dCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCi1pbXBvcnQgdHJhY2ViYWNrCisKKworZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRleHRfZGlmZgorZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgaW1hZ2VfZGlmZgogCiBpbXBv
cnQgdGVzdF9mYWlsdXJlcwogaW1wb3J0IHRlc3RfcmVzdWx0cwpAQCAtNTcsMjYgKzU5LDkgQEAg
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UuIgogICAgICAgICAgICAgICAgICAgICAgICAgICJkdW1wX3JlbmRlcl90cmVlX3RocmVh
ZCIpCiAKIAotZGVmIGZpbmRfdGhyZWFkX3N0YWNrKGlkKToKLSAgICAiIiJSZXR1cm5zIGEgc3Rh
Y2sgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZHVtcCBhIHN0YWNrIHRyYWNlIGZvcgotICAg
IHRoZSBnaXZlbiB0aHJlYWQgaWQgKG9yIE5vbmUgaWYgdGhlIGlkIGlzIG5vdCBmb3VuZCkuIiIi
Ci0gICAgZm9yIHRocmVhZF9pZCwgc3RhY2sgaW4gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1z
KCk6Ci0gICAgICAgIGlmIHRocmVhZF9pZCA9PSBpZDoKLSAgICAgICAgICAgIHJldHVybiBzdGFj
awotICAgIHJldHVybiBOb25lCi0KLQotZGVmIGxvZ19zdGFjayhzdGFjayk6Ci0gICAgIiIiTG9n
IGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCkuIiIiCi0gICAgZm9yIGZpbGVuYW1lLCBsaW5l
bm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgotICAgICAg
ICBfbG9nLmVycm9yKCdGaWxlOiAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxp
bmVubywgbmFtZSkpCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCcg
ICVzJyAlIGxpbmUuc3RyaXAoKSkKLQotCiBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlv
bnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLAogICAgICAgICAgICAgICAgICAg
ICBjcmFzaCwgdGltZW91dCwgdGVzdF9ydW5fdGltZSwgYWN0dWFsX2NoZWNrc3VtLAotICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQsIGVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LCBlcnJvciwgbmFtZSk6CiAgICAgIiIiUmVjZWl2ZXMgdGhlIG91dHB1dCBmcm9tIGEgRHVtcFJl
bmRlclRyZWUgcHJvY2Vzcywgc3ViamVjdHMgaXQgdG8gYQogICAgIG51bWJlciBvZiB0ZXN0cywg
YW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUgdHlwZXMgdGhlIHRlc3QgcHJvZHVjZWQuCiAK
QEAgLTg0LDcgKzY5LDcgQEAgZGVmIF9wcm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0
X2luZm8sIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKICAgICAgIHBvcnQ6IHBvcnQtc3BlY2lmaWMg
aG9va3MKICAgICAgIG9wdGlvbnM6IGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZ3VtZW50IGZyb20g
b3B0cGFyc2UKICAgICAgIHByb2M6IGFuIGFjdGl2ZSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzCi0g
ICAgICB0ZXN0X2luZm86IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkg
YW5kIHRpbWVvdXQKKyAgICAgIHRlc3RfaW5mbzogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3Qg
ZmlsZW5hbWUgYW5kIHRpbWVvdXQKICAgICAgIHRlc3RfdHlwZXM6IGxpc3Qgb2YgdGVzdCB0eXBl
cyB0byBzdWJqZWN0IHRoZSBvdXRwdXQgdG8KICAgICAgIHRlc3RfYXJnczogYXJndW1lbnRzIHRv
IGJlIHBhc3NlZCB0byBlYWNoIHRlc3QKIApAQCAtOTUsOCArODAsOSBAQCBkZWYgX3Byb2Nlc3Nf
b3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLAog
ICAgICMgU29tZSB0ZXN0IGFyZ3MsIHN1Y2ggYXMgdGhlIGltYWdlIGhhc2gsIG1heSBiZSBhZGRl
ZCBvciBjaGFuZ2VkIG9uIGEKICAgICAjIHRlc3QtYnktdGVzdCBiYXNpcy4KICAgICBsb2NhbF90
ZXN0X2FyZ3MgPSBjb3B5LmNvcHkodGVzdF9hcmdzKQotCisgICAgbG9jYWxfdGVzdF9hcmdzLnVy
aSA9IHRlc3RfaW5mby51cmkKICAgICBsb2NhbF90ZXN0X2FyZ3MuaGFzaCA9IGFjdHVhbF9jaGVj
a3N1bQorICAgIHRlc3RfbmFtZSA9IHBvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lu
Zm8uZmlsZW5hbWUpCiAKICAgICBpZiBjcmFzaDoKICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRl
c3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCkBAIC0xMDQsMTggKzkwLDE0IEBAIGRlZiBfcHJv
Y2Vzc19vdXRwdXQocG9ydCwgb3B0aW9ucywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2Fy
Z3MsCiAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0
KCkpCiAKICAgICBpZiBjcmFzaDoKLSAgICAgICAgX2xvZy5kZWJ1ZygiU3RhY2t0cmFjZSBmb3Ig
JXM6XG4lcyIgJSAodGVzdF9pbmZvLmZpbGVuYW1lLCBlcnJvcikpCi0gICAgICAgICMgU3RyaXAg
b2ZmICJmaWxlOi8vIiBzaW5jZSBSZWxhdGl2ZVRlc3RGaWxlbmFtZSBleHBlY3RzCi0gICAgICAg
ICMgZmlsZXN5c3RlbSBwYXRocy4KLSAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3B0
aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXN0X2luZm8uZmlsZW5hbWUpKQorICAgICAgICBfbG9nLmRlYnVnKCIlcyBTdGFja3Ry
YWNlIGZvciAlczpcbiVzIiAlIChuYW1lLCB0ZXN0X25hbWUsIGVycm9yKSkKKyAgICAgICAgZmls
ZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1l
KQogICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdICsgIi1z
dGFjay50eHQiCiAgICAgICAgIHBvcnQubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxp
dChmaWxlbmFtZSlbMF0pCiAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oZmlsZW5hbWUsICJ3YiIs
ICJ1dGYtOCIpIGFzIGZpbGU6CiAgICAgICAgICAgICBmaWxlLndyaXRlKGVycm9yKQogICAgIGVs
aWYgZXJyb3I6Ci0gICAgICAgIF9sb2cuZGVidWcoIlByZXZpb3VzIHRlc3Qgb3V0cHV0IHN0ZGVy
ciBsaW5lczpcbiVzIiAlIGVycm9yKQorICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBzdGRlcnIg
bGluZXM6XG4lcyIgJSAobmFtZSwgdGVzdF9uYW1lLCBlcnJvcikpCiAKICAgICAjIENoZWNrIHRo
ZSBvdXRwdXQgYW5kIHNhdmUgdGhlIHJlc3VsdHMuCiAgICAgc3RhcnRfdGltZSA9IHRpbWUudGlt
ZSgpCkBAIC0xMzgsMzIgKzEyMCwxMCBAQCBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlv
bnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZz
KQogCiAKLWRlZiBfcGFkX3RpbWVvdXQodGltZW91dCk6Ci0gICAgIiIiUmV0dXJucyBhIHNhZmUg
bXVsdGlwbGUgb2YgdGhlIHBlci10ZXN0IHRpbWVvdXQgdmFsdWUgdG8gdXNlCi0gICAgdG8gZGV0
ZWN0IGh1bmcgdGVzdCB0aHJlYWRzLgotCi0gICAgIiIiCi0gICAgIyBXaGVuIHdlJ3JlIHJ1bm5p
bmcgb25lIHRlc3QgcGVyIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MsIHdlIGNhbgotICAgICMgZW5m
b3JjZSBhIGhhcmQgdGltZW91dC4gIFRoZSBEdW1wUmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIu
NXgKLSAgICAjIHRoZSB0aW1lb3V0OyB3ZSB3YW50IHRvIGJlIGxhcmdlciB0aGFuIHRoYXQuCi0g
ICAgcmV0dXJuIHRpbWVvdXQgKiAzCi0KLQotZGVmIF9taWxsaXNlY29uZHNfdG9fc2Vjb25kcyht
c2Vjcyk6Ci0gICAgcmV0dXJuIGZsb2F0KG1zZWNzKSAvIDEwMDAuMAotCi0KLWRlZiBfaW1hZ2Vf
aGFzaCh0ZXN0X2luZm8sIHRlc3RfYXJncywgb3B0aW9ucyk6Ci0gICAgIiIiUmV0dXJucyB0aGUg
aW1hZ2UgaGFzaCBvZiB0aGUgdGVzdCBpZiBpdCdzIG5lZWRlZCwgb3RoZXJ3aXNlIE5vbmUuIiIi
Ci0gICAgaWYgKHRlc3RfYXJncy5uZXdfYmFzZWxpbmUgb3IgdGVzdF9hcmdzLnJlc2V0X3Jlc3Vs
dHMgb3Igbm90IG9wdGlvbnMucGl4ZWxfdGVzdHMpOgotICAgICAgICByZXR1cm4gTm9uZQotICAg
IHJldHVybiB0ZXN0X2luZm8uaW1hZ2VfaGFzaCgpCi0KLQogY2xhc3MgU2luZ2xlVGVzdFRocmVh
ZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAiIiJUaHJlYWQgd3JhcHBlciBmb3IgcnVubmluZyBh
IHNpbmdsZSB0ZXN0IGZpbGUuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0
aW9ucywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0LCBvcHRpb25zLCB3b3JrZXJfbnVtYmVyLCB0ZXN0X2luZm8sIHRlc3RfdHlw
ZXMsIHRlc3RfYXJncyk6CiAgICAgICAgICIiIgogICAgICAgICBBcmdzOgogICAgICAgICAgIHBv
cnQ6IG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1zcGVjaWZpYyBob29rcwpAQCAtMTgxLDYgKzE0
MSw4IEBAIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAg
IHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0X3R5cGVzCiAgICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9
IHRlc3RfYXJncwogICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dv
cmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX25hbWUgPSAnd29ya2Vy
LSVkJyAlIHdvcmtlcl9udW1iZXIKIAogICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgIHNlbGYu
X2NvdmVyZWRfcnVuKCkKQEAgLTE5MiwyNjMgKzE1NCwxMzEgQEAgY2xhc3MgU2luZ2xlVGVzdFRo
cmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgc2VsZi5fZHJpdmVyID0gc2VsZi5fcG9y
dC5jcmVhdGVfZHJpdmVyKHNlbGYuX3Rlc3RfYXJncy5wbmdfcGF0aCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMpCiAgICAgICAg
IHNlbGYuX2RyaXZlci5zdGFydCgpCi0gICAgICAgIGltYWdlX2hhc2ggPSBfaW1hZ2VfaGFzaCh0
ZXN0X2luZm8sIHNlbGYuX3Rlc3RfYXJncywgc2VsZi5fb3B0aW9ucykKICAgICAgICAgc3RhcnQg
PSB0aW1lLnRpbWUoKQogICAgICAgICBjcmFzaCwgdGltZW91dCwgYWN0dWFsX2NoZWNrc3VtLCBv
dXRwdXQsIGVycm9yID0gXAotICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHRlc3Rf
aW5mby51cmkuc3RyaXAoKSwgdGVzdF9pbmZvLnRpbWVvdXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW1hZ2VfaGFzaCkKKyAgICAgICAgICAgIHNlbGYuX2RyaXZlci5ydW5f
dGVzdCh0ZXN0X2luZm8udXJpLCB0ZXN0X2luZm8udGltZW91dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXN0X2luZm8uaW1hZ2VfY2hlY2tzdW0pCiAgICAgICAgIGVuZCA9
IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX3Rlc3RfcmVzdWx0ID0gX3Byb2Nlc3Nfb3V0cHV0
KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCiAgICAgICAgICAgICB0ZXN0X2luZm8sIHNlbGYu
X3Rlc3RfdHlwZXMsIHNlbGYuX3Rlc3RfYXJncywKICAgICAgICAgICAgIGNyYXNoLCB0aW1lb3V0
LCBlbmQgLSBzdGFydCwKLSAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSwgb3V0cHV0LCBlcnJv
cikKKyAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSwgb3V0cHV0LCBlcnJvciwgc2VsZi5fbmFt
ZSkKICAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3AoKQogCiAgICAgZGVmIGdldF90ZXN0X3Jlc3Vs
dChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfcmVzdWx0CiAKIAotY2xhc3MgV2F0
Y2hhYmxlVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgotICAgICIiIlRoaXMgY2xhc3MgYWJzdHJh
Y3RzIGFuIGludGVyZmFjZSB1c2VkIGJ5Ci0gICAgcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVy
Ll93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCBmb3IgdGhyZWFkCi0gICAgbWFuYWdlbWVudC4i
IiIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19p
bml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBGYWxzZQotICAgICAgICBzZWxm
Ll9leGNlcHRpb25faW5mbyA9IE5vbmUKLSAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9u
ZQotICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSBOb25lCi0KLSAgICBkZWYgY2FuY2VsKHNlbGYp
OgotICAgICAgICAiIiJTZXQgYSBmbGFnIHRlbGxpbmcgdGhpcyB0aHJlYWQgdG8gcXVpdC4iIiIK
LSAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCi0KLSAgICBkZWYgY2xlYXJfbmV4dF90aW1l
b3V0KHNlbGYpOgotICAgICAgICAiIiJNYXJrIGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRv
IHN0b3Agc2V0dGluZyB0aW1lb3V0cy4iIiIKLSAgICAgICAgc2VsZi5fdGltZW91dCA9IDAKLQot
ICAgIGRlZiBleGNlcHRpb25faW5mbyhzZWxmKToKLSAgICAgICAgIiIiSWYgcnVuKCkgdGVybWlu
YXRlZCBvbiBhbiB1bmNhdWdodCBleGNlcHRpb24sIHJldHVybiBpdCBoZXJlCi0gICAgICAgICgo
dHlwZSwgdmFsdWUsIHRyYWNlYmFjaykgdHVwbGUpLgotICAgICAgICBSZXR1cm5zIE5vbmUgaWYg
cnVuKCkgdGVybWluYXRlZCBub3JtYWxseS4gTWVhbnQgdG8gYmUgY2FsbGVkIGFmdGVyCi0gICAg
ICAgIGpvaW5pbmcgdGhpcyB0aHJlYWQuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRp
b25faW5mbwotCi0gICAgZGVmIGlkKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gYSB0aHJlYWQg
aWRlbnRpZmllci4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3RocmVhZF9pZAotCi0gICAgZGVm
IG5leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0
IGlzIHN1cHBvc2VkIHRvIGZpbmlzaCBieS4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX25leHRf
dGltZW91dAotCi0KLWNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBmaWxlbmFtZV9saXN0X3F1ZXVlLCBy
ZXN1bHRfcXVldWUsCi0gICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMsIHRlc3RfYXJncyk6Citj
bGFzcyBXb3JrZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgY29udGFp
bmVyLCBvcHRpb25zLCB3b3JrZXJfbnVtYmVyKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbGwg
dGhlIGxvY2FsIHN0YXRlIGZvciB0aGlzIER1bXBSZW5kZXJUcmVlIHRocmVhZC4KIAogICAgICAg
ICBBcmdzOgotICAgICAgICAgIHBvcnQ6IGludGVyZmFjZSB0byBwb3J0LXNwZWNpZmljIGhvb2tz
Ci0gICAgICAgICAgb3B0aW9uczogY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJndW1lbnQgZnJvbSBv
cHRwYXJzZQotICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWU6IEEgdGhyZWFkIHNhZmUgUXVl
dWUgY2xhc3MgdGhhdCBjb250YWlucyBsaXN0cwotICAgICAgICAgICAgICBvZiB0dXBsZXMgb2Yg
KGZpbGVuYW1lLCB1cmkpIHBhaXJzLgotICAgICAgICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJlYWQg
c2FmZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29udGFpbgotICAgICAgICAgICAgICBzZXJpYWxp
emVkIFRlc3RSZXN1bHQgb2JqZWN0cy4KLSAgICAgICAgICB0ZXN0X3R5cGVzOiBBIGxpc3Qgb2Yg
VGVzdFR5cGUgb2JqZWN0cyB0byBydW4gdGhlIHRlc3Qgb3V0cHV0Ci0gICAgICAgICAgICAgIGFn
YWluc3QuCi0gICAgICAgICAgdGVzdF9hcmdzOiBBIFRlc3RBcmd1bWVudHMgb2JqZWN0IHRvIHBh
c3MgdG8gZWFjaCBUZXN0VHlwZS4KKyAgICAgICAgICBjb250YWluZXI6IGNvbnRhaW5lciBvYmpl
Y3QgdG8gcmVjZWl2ZSB0ZXN0cyBmcm9tCisgICAgICAgICAgd29ya2VyX251bWJlcjogbmFtZSB0
byB1c2UgZm9yIGxvZ2dpbmcKIAogICAgICAgICAiIiIKLSAgICAgICAgV2F0Y2hhYmxlVGhyZWFk
Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAg
c2VsZi5fY29udGFpbmVyID0gY29udGFpbmVyCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAg
ICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xp
c3RfcXVldWUgPSBmaWxlbmFtZV9saXN0X3F1ZXVlCi0gICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1
ZSA9IHJlc3VsdF9xdWV1ZQorICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251
bWJlcgorICAgICAgICBzZWxmLl9uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisg
ICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKKyAgICAg
ICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKICAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdCA9
IFtdCi0gICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0X3R5cGVzCi0gICAgICAgIHNlbGYu
X3Rlc3RfYXJncyA9IHRlc3RfYXJncworICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gW10KKyAg
ICAgICAgZm9yIGNscyBpbiBzZWxmLl90ZXN0X3R5cGVfY2xhc3NlcygpOgorICAgICAgICAgICAg
c2VsZi5fdGVzdF90eXBlcy5hcHBlbmQoY2xzKHNlbGYuX3BvcnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkp
CisgICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHNlbGYuX3Rlc3RfYXJncyh3b3JrZXJfbnVtYmVy
KQogICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBf
dGltaW5nX3N0YXRzID0ge30KLSAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHRzID0gW10KLSAgICAg
ICAgc2VsZi5fbnVtX3Rlc3RzID0gMAotICAgICAgICBzZWxmLl9zdGFydF90aW1lID0gMAotICAg
ICAgICBzZWxmLl9zdG9wX3RpbWUgPSAwCi0gICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0g
RmFsc2UKLSAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4gPSAwCi0gICAgICAgIHNl
bGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IDAKLQotICAgICAgICAjIEN1cnJlbnQgZ3JvdXAgb2Yg
dGVzdHMgd2UncmUgcnVubmluZy4KLSAgICAgICAgc2VsZi5fY3VycmVudF9ncm91cCA9IE5vbmUK
LSAgICAgICAgIyBOdW1iZXIgb2YgdGVzdHMgaW4gc2VsZi5fY3VycmVudF9ncm91cC4KLSAgICAg
ICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3JvdXAgPSBOb25lCi0gICAgICAgICMgVGlt
ZSBhdCB3aGljaCB3ZSBzdGFydGVkIHJ1bm5pbmcgdGVzdHMgZnJvbSBzZWxmLl9jdXJyZW50X2dy
b3VwLgotICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUgPSBOb25lCi0KLSAg
ICBkZWYgZ2V0X3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzKHNlbGYpOgotICAgICAgICAiIiJSZXR1
cm5zIGEgZGljdGlvbmFyeSBtYXBwaW5nIHRlc3QgZ3JvdXAgdG8gYSB0dXBsZSBvZgotICAgICAg
ICAobnVtYmVyIG9mIHRlc3RzIGluIHRoYXQgZ3JvdXAsIHRpbWUgdG8gcnVuIHRoZSB0ZXN0cyki
IiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzCi0KLSAgICBk
ZWYgZ2V0X3Rlc3RfcmVzdWx0cyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9m
IGFsbCB0ZXN0cyBydW4gb24gdGhpcyB0aHJlYWQuCi0KLSAgICAgICAgVGhpcyBpcyB1c2VkIHRv
IGNhbGN1bGF0ZSBwZXItdGhyZWFkIHN0YXRpc3RpY3MuCi0KLSAgICAgICAgIiIiCi0gICAgICAg
IHJldHVybiBzZWxmLl90ZXN0X3Jlc3VsdHMKLQotICAgIGRlZiBnZXRfdG90YWxfdGltZShzZWxm
KToKLSAgICAgICAgcmV0dXJuIG1heChzZWxmLl9zdG9wX3RpbWUgLSBzZWxmLl9zdGFydF90aW1l
IC0KLSAgICAgICAgICAgICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF90aW1lKCksIDAuMCkK
LQotICAgIGRlZiBnZXRfbnVtX3Rlc3RzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fbnVt
X3Rlc3RzCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICAiIiJEZWxlZ2F0ZSBtYWluIHdv
cmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFuZCB3YXRjaCBmb3IgdW5jYXVnaHQKLSAgICAgICAgZXhj
ZXB0aW9ucy4iIiIKLSAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQotCi0gICAgZGVmIF9jb3Zl
cmVkX3J1bihzZWxmKToKLSAgICAgICAgIyBGSVhNRTogdGhpcyBpcyBhIHNlcGFyYXRlIHJvdXRp
bmUgdG8gd29yayBhcm91bmQgYSBidWcKLSAgICAgICAgIyBpbiBjb3ZlcmFnZTogc2VlIGh0dHA6
Ly9iaXRidWNrZXQub3JnL25lZC9jb3ZlcmFnZXB5L2lzc3VlLzg1LgotICAgICAgICBzZWxmLl90
aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKLSAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9
IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJXMgc3RhcnRpbmcnICUgKHNlbGYuZ2V0TmFtZSgpKSkK
LSAgICAgICAgICAgIHNlbGYuX3J1bih0ZXN0X3J1bm5lcj1Ob25lLCByZXN1bHRfc3VtbWFyeT1O
b25lKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJXMgZG9uZSAoJWQgdGVzdHMpJyAlIChzZWxm
LmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfbnVtX3Rlc3RzKCkp
KQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICBzZWxmLl9l
eGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCIl
cyBpbnRlcnJ1cHRlZCIgJSBzZWxmLmdldE5hbWUoKSkKLSAgICAgICAgZXhjZXB0OgotICAgICAg
ICAgICAgIyBTYXZlIHRoZSBleGNlcHRpb24gZm9yIG91ciBjYWxsZXIgdG8gc2VlLgotICAgICAg
ICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAg
c2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyVz
IGR5aW5nLCBleGNlcHRpb24gcmFpc2VkJyAlIHNlbGYuZ2V0TmFtZSgpKQotCi0gICAgICAgIHNl
bGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCi0KLSAgICBkZWYgcnVuX2luX21haW5fdGhyZWFk
KHNlbGYsIHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIlRoaXMgaG9v
ayBhbGxvd3MgdXMgdG8gcnVuIHRoZSB0ZXN0cyBmcm9tIHRoZSBtYWluIHRocmVhZCBpZgotICAg
ICAgICAtLW51bS10ZXN0LXNoZWxscz09MSwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gYWx3YXlzIHJ1
biB0d28gb3IgbW9yZQotICAgICAgICB0aHJlYWRzLiBUaGlzIGFsbG93cyB1cyB0byBkZWJ1ZyB0
aGUgdGVzdCBoYXJuZXNzIHdpdGhvdXQgaGF2aW5nIHRvCi0gICAgICAgIGRvIG11bHRpLXRocmVh
ZGVkIGRlYnVnZ2luZy4iIiIKLSAgICAgICAgc2VsZi5fcnVuKHRlc3RfcnVubmVyLCByZXN1bHRf
c3VtbWFyeSkKLQotICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAgICIiIkNsZWFuIHVwIGh0
dHAgbG9jayBhbmQgc2V0IGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCi0g
ICAgICAgIHNlbGYuX3N0b3BfaHR0cF9sb2NrKCkKLSAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLmNh
bmNlbChzZWxmKQotCi0gICAgZGVmIG5leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgIiIiUmV0
dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlzIHN1cHBvc2VkIHRvIGZpbmlzaCBieS4iIiIKLSAgICAg
ICAgaWYgc2VsZi5fbmV4dF90aW1lb3V0OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX25leHRf
dGltZW91dCArIHNlbGYuX2h0dHBfbG9ja193YWl0X3RpbWUoKQotICAgICAgICByZXR1cm4gc2Vs
Zi5fbmV4dF90aW1lb3V0Ci0KLSAgICBkZWYgX2h0dHBfbG9ja193YWl0X3RpbWUoc2VsZik6Ci0g
ICAgICAgICIiIlJldHVybiB0aGUgdGltZSB3aGF0IGh0dHAgbG9ja2luZyB0YWtlcy4iIiIKLSAg
ICAgICAgaWYgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4gPT0gMDoKLSAgICAgICAgICAgIHJl
dHVybiAwCi0gICAgICAgIGlmIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9PSAwOgotICAgICAg
ICAgICAgcmV0dXJuIHRpbWUudGltZSgpIC0gc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4KLSAg
ICAgICAgcmV0dXJuIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCAtIHNlbGYuX2h0dHBfbG9ja193
YWl0X2JlZ2luCi0KLSAgICBkZWYgX3J1bihzZWxmLCB0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1h
cnkpOgotICAgICAgICAiIiJNYWluIHdvcmsgZW50cnkgcG9pbnQgb2YgdGhlIHRocmVhZC4gQmFz
aWNhbGx5IHdlIHB1bGwgdXJscyBmcm9tIHRoZQotICAgICAgICBmaWxlbmFtZSBxdWV1ZSBhbmQg
cnVuIHRoZSB0ZXN0cyB1bnRpbCB3ZSBydW4gb3V0IG9mIHVybHMuCi0KLSAgICAgICAgSWYgdGVz
dF9ydW5uZXIgaXMgbm90IE5vbmUsIHRoZW4gd2UgY2FsbCB0ZXN0X3J1bm5lci5VcGRhdGVTdW1t
YXJ5KCkKLSAgICAgICAgd2l0aCB0aGUgcmVzdWx0cyBvZiBlYWNoIHRlc3QuIiIiCi0gICAgICAg
IGJhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKLSAgICAgICAgYmF0Y2hfY291
bnQgPSAwCi0KLSAgICAgICAgIyBBcHBlbmQgdGVzdHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhp
c3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgotICAgICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBy
dW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJlTGlzdHNBbmRQcmludE91dHB1dC4KICAgICAgICAg
dGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19k
aXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVz
dHNfcnVuLnR4dCIpCi0gICAgICAgIHRlc3RzX3J1bl9maWxlID0gY29kZWNzLm9wZW4odGVzdHNf
cnVuX2ZpbGVuYW1lLCAiYSIsICJ1dGYtOCIpCi0KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAg
ICAgICAgIGlmIHNlbGYuX2NhbmNlbGVkOgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Rl
c3RpbmcgY2FuY2VsbGVkJykKLSAgICAgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS5jbG9zZSgp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgIGlmIGxlbihzZWxmLl9maWxl
bmFtZV9saXN0KSBpcyAwOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfZ3JvdXAg
aXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5n
X3N0YXRzW3NlbGYuX2N1cnJlbnRfZ3JvdXBdID0gXAotICAgICAgICAgICAgICAgICAgICAgICAg
KHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2dyb3VwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWUudGltZSgpIC0gc2VsZi5fY3VycmVudF9ncm91cF9zdGFydF90aW1lKQotCi0gICAg
ICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3Vw
LCBzZWxmLl9maWxlbmFtZV9saXN0ID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
ZmlsZW5hbWVfbGlzdF9xdWV1ZS5nZXRfbm93YWl0KCkKLSAgICAgICAgICAgICAgICBleGNlcHQg
UXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3BfaHR0cF9sb2NrKCkK
LSAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAg
ICAgICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4KLQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMud2FpdF9mb3JfaHR0
cGQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfZ3JvdXAgPT0gInRlc3Rz
X3RvX2h0dHBfbG9jayI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9odHRwX2xvY2tf
d2FpdF9iZWdpbiA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9w
b3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
cG9ydC5zdGFydF9odHRwX3NlcnZlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9w
b3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2h0dHBfbG9ja193YWl0X2VuZCA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICAgICAgICAgIGVs
aWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9z
dG9wX2h0dHBfbG9jaygpCi0KLSAgICAgICAgICAgICAgICBzZWxmLl9udW1fdGVzdHNfaW5fY3Vy
cmVudF9ncm91cCA9IGxlbihzZWxmLl9maWxlbmFtZV9saXN0KQotICAgICAgICAgICAgICAgIHNl
bGYuX2N1cnJlbnRfZ3JvdXBfc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0KLSAgICAgICAgICAg
IHRlc3RfaW5mbyA9IHNlbGYuX2ZpbGVuYW1lX2xpc3QucG9wKCkKLQotICAgICAgICAgICAgIyBX
ZSBoYXZlIGEgdXJsLCBydW4gdGVzdHMuCi0gICAgICAgICAgICBiYXRjaF9jb3VudCArPSAxCi0g
ICAgICAgICAgICBzZWxmLl9udW1fdGVzdHMgKz0gMQotICAgICAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy5ydW5fc2luZ2x5OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0
X3NpbmdseSh0ZXN0X2luZm8pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5mbykKLQotICAgICAgICAgICAgZmlsZW5hbWUg
PSB0ZXN0X2luZm8uZmlsZW5hbWUKLSAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLndyaXRlKGZp
bGVuYW1lICsgIlxuIikKLSAgICAgICAgICAgIGlmIHJlc3VsdC5mYWlsdXJlczoKLSAgICAgICAg
ICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCi0g
ICAgICAgICAgICAgICAgaWYgbGVuKFsxIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlcwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgZi5zaG91bGRfa2lsbF9kdW1wX3JlbmRlcl90cmVlKCldKToK
LSAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAg
ICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2ggY291bnQgc2luY2UgdGhlIHNoZWxsIGp1
c3QgYm91bmNlZC4KLSAgICAgICAgICAgICAgICAgICAgYmF0Y2hfY291bnQgPSAwCi0gICAgICAg
ICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2FnZShzKS4KLSAgICAgICAgICAgICAgICBl
cnJvcl9zdHIgPSAnXG4nLmpvaW4oWycgICcgKyBmLm1lc3NhZ2UoKSBmb3IKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgaW4gcmVzdWx0LmZhaWx1cmVzXSkKLSAgICAg
ICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBmYWlsZWQ6XG4lcyIgJSAoc2VsZi5nZXROYW1l
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3Rf
ZmlsZW5hbWUoZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jfc3Ry
KSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMg
cGFzc2VkIiAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpKQotICAgICAgICAgICAg
c2VsZi5fcmVzdWx0X3F1ZXVlLnB1dChyZXN1bHQuZHVtcHMoKSkKLQotICAgICAgICAgICAgaWYg
YmF0Y2hfc2l6ZSA+IDAgYW5kIGJhdGNoX2NvdW50ID4gYmF0Y2hfc2l6ZToKLSAgICAgICAgICAg
ICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50LgotICAgICAgICAgICAgICAg
IHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCi0gICAgICAgICAgICAgICAgYmF0Y2hfY291
bnQgPSAwCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gY29kZWNzLm9wZW4odGVzdHNf
cnVuX2ZpbGVuYW1lLCAiYSIsICJ1dGYtOCIpCisKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZik6
CisgICAgICAgICIiIlN0b3AgcmVjZWl2ZWQgLSBubyBtb3JlIHRlc3RzIHRvIHJ1bi4iIiIKKyAg
ICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAgICAgaWYgc2VsZi5fdGVz
dHNfcnVuX2ZpbGU6CisgICAgICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZS5jbG9zZSgpCisg
ICAgICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9IE5vbmUKKworICAgIGRlZiBfdGVzdF9h
cmdzKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSB0dXBsZSBv
ZiBhcmd1bWVudHMgZm9yIHRlc3RzIGFuZCBmb3IgRHVtcFJlbmRlclRyZWUuIiIiCisgICAgICAg
IHRlc3RfYXJncyA9IHRlc3RfdHlwZV9iYXNlLlRlc3RBcmd1bWVudHMoKQorICAgICAgICB0ZXN0
X2FyZ3MucG5nX3BhdGggPSBOb25lCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVz
dHM6CisgICAgICAgICAgICBwbmdfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBu
Z19yZXN1bHQlcy5wbmciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX3dvcmtlcl9udW1iZXIpCisgICAgICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGggPSBwbmdf
cGF0aAorICAgICAgICB0ZXN0X2FyZ3MubmV3X2Jhc2VsaW5lID0gc2VsZi5fb3B0aW9ucy5uZXdf
YmFzZWxpbmUKKyAgICAgICAgdGVzdF9hcmdzLnJlc2V0X3Jlc3VsdHMgPSBzZWxmLl9vcHRpb25z
LnJlc2V0X3Jlc3VsdHMKKworICAgICAgICByZXR1cm4gdGVzdF9hcmdzCisKKyAgICBkZWYgX25l
ZWRzX2ltYWdlX2hhc2goc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGltYWdlIGhhc2gg
b2YgdGhlIHRlc3QgaWYgaXQncyBuZWVkZWQsIG90aGVyd2lzZSBOb25lLiIiIgorICAgICAgICBy
ZXR1cm4gKHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNlbGYuX29wdGlvbnMucmVzZXRf
cmVzdWx0cyBvcgorICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMpCisK
KyAgICBkZWYgX3Rlc3RfdHlwZV9jbGFzc2VzKHNlbGYpOgorICAgICAgICBjbGFzc2VzID0gW3Rl
eHRfZGlmZi5UZXN0VGV4dERpZmZdCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVz
dHM6CisgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZChpbWFnZV9kaWZmLkltYWdlRGlmZikKKyAg
ICAgICAgcmV0dXJuIGNsYXNzZXMKKworICAgIGRlZiBydW5fdGVzdChzZWxmLCB0ZXN0X2luZm8p
OgorICAgICAgICBmaWxlbmFtZSA9IHRlc3RfaW5mby5maWxlbmFtZQorICAgICAgICB0ZXN0X2lu
Zm8udXJpID0gc2VsZi5fcG9ydC5maWxlbmFtZV90b191cmkoZmlsZW5hbWUpCisgICAgICAgIGlm
IHNlbGYuX25lZWRzX2ltYWdlX2hhc2goKToKKyAgICAgICAgICAgIHRlc3RfaW5mby5pbWFnZV9j
aGVja3N1bSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hlY2tzdW0oZmlsZW5hbWUpCisgICAgICAg
IHNlbGYuX2JhdGNoX2NvdW50ICs9IDEKKworICAgICAgICAjIFdlIGdpdmUgRFJUIHNvbWUgZXh0
cmEgdGltZSB0byBkZXRlY3QgYSB0aW1lb3V0LCBhbmQgdGhlbgorICAgICAgICAjIGdpdmUgb3Vy
IHdhdGNoZG9nIHRocmVhZCBhIHNpbWlsYXIgYW1vdW50IHRvIGRldGVjdCBhIGh1bmcKKyAgICAg
ICAgIyBEUlQuIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIHRlc3QgdGltZW91dCBm
cm9tIGEKKyAgICAgICAgIyBzdHJpbmcgdmFsdWUgaW4gbWlsbGlzZWNvbmRzIHRvIGEgZmxvYXQg
Zm9yIFB5dGhvbi4KKyAgICAgICAgcGFkZGluZyA9IDMuMAorICAgICAgICB0aHJlYWRfdGltZW91
dCA9IGZsb2F0KHRlc3RfaW5mby50aW1lb3V0KSAvIDEwMDAuMCArIHBhZGRpbmcKIAotICAgICAg
ICAgICAgaWYgdGVzdF9ydW5uZXI6Ci0gICAgICAgICAgICAgICAgdGVzdF9ydW5uZXIudXBkYXRl
X3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCi0KLSAgICBkZWYgX3J1bl90ZXN0X3NpbmdseShzZWxm
LCB0ZXN0X2luZm8pOgorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIGlmIHNl
bGYuX29wdGlvbnMucnVuX3NpbmdseToKKyAgICAgICAgICAgIHNlbGYuX2NvbnRhaW5lci5zdGFy
dGVkX3Rlc3QodGVzdF9pbmZvLCB0aHJlYWRfdGltZW91dCArIHBhZGRpbmcpCisgICAgICAgICAg
ICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZCh0ZXN0X2luZm8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJl
YWRfdGltZW91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NvbnRhaW5lci5z
dGFydGVkX3Rlc3QodGVzdF9pbmZvLCB0aHJlYWRfdGltZW91dCkKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHNlbGYuX3J1bl90ZXN0X2luX3RoaXNfdGhyZWFkKHRlc3RfaW5mbykKKworICAgICAgICBz
ZWxmLl9jb250YWluZXIuZmluaXNoZWRfdGVzdChyZXN1bHQsIHRpbWUudGltZSgpIC0gc3RhcnQp
CisKKyAgICAgICAgaWYgc2VsZi5fYmF0Y2hfc2l6ZSA+IDAgYW5kIHNlbGYuX2JhdGNoX2NvdW50
ID4gc2VsZi5fYmF0Y2hfc2l6ZToKKyAgICAgICAgICAgICMgQm91bmNlIHRoZSBzaGVsbCBhbmQg
cmVzZXQgY291bnQuCisgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQor
ICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKKyAgICAgICAgc2VsZi5fdGVzdHNf
cnVuX2ZpbGUud3JpdGUoZmlsZW5hbWUgKyAiXG4iKQorICAgICAgICBpZiByZXN1bHQuZmFpbHVy
ZXM6CisgICAgICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdlIG5l
ZWQgdG8uCisgICAgICAgICAgICBpZiBsZW4oWzEgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzCisg
ICAgICAgICAgICAgICAgICAgIGlmIGYuc2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpXSk6
CisgICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAgICAg
ICAgICAgICAjIFJlc2V0IHRoZSBiYXRjaCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3Vu
Y2VkLgorICAgICAgICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorICAgICAgICAgICAg
IyBQcmludCB0aGUgZXJyb3IgbWVzc2FnZShzKS4KKyAgICAgICAgICAgIGVycm9yX3N0ciA9ICdc
bicuam9pbihbJyAgJyArIGYubWVzc2FnZSgpIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZiBpbiByZXN1bHQuZmFpbHVyZXNdKQorICAgICAgICAgICAgX2xvZy5kZWJ1
ZygiJXMgJXMgZmFpbGVkOlxuJXMiICUgKHNlbGYuX25hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3Jfc3RyKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IF9sb2cuZGVidWcoIiVzICVzIHBhc3NlZCIgJSAoc2VsZi5fbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpKQor
CisgICAgZGVmIF9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZChzZWxmLCB0ZXN0X2luZm8sIHRo
cmVhZF90aW1lb3V0KToKICAgICAgICAgIiIiUnVuIGEgdGVzdCBpbiBhIHNlcGFyYXRlIHRocmVh
ZCwgZW5mb3JjaW5nIGEgaGFyZCB0aW1lIGxpbWl0LgogCiAgICAgICAgIFNpbmNlIHdlIGNhbiBv
bmx5IGRldGVjdCB0aGUgdGVybWluYXRpb24gb2YgYSB0aHJlYWQsIG5vdCBhbnkgaW50ZXJuYWwK
QEAgLTQ2MCwxOSArMjkwLDE2IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJl
YWQpOgogCiAgICAgICAgIFJldHVybnM6CiAgICAgICAgICAgQSBUZXN0UmVzdWx0Ci0KICAgICAg
ICAgIiIiCiAgICAgICAgIHdvcmtlciA9IFNpbmdsZVRlc3RUaHJlYWQoc2VsZi5fcG9ydCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fdGVzdF9hcmdzKQogCiAgICAgICAgIHdvcmtlci5zdGFydCgpCiAKLSAg
ICAgICAgdGhyZWFkX3RpbWVvdXQgPSBfbWlsbGlzZWNvbmRzX3RvX3NlY29uZHMoCi0gICAgICAg
ICAgICBfcGFkX3RpbWVvdXQoaW50KHRlc3RfaW5mby50aW1lb3V0KSkpCi0gICAgICAgIHRocmVh
ZC5fbmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyB0aHJlYWRfdGltZW91dAogICAgICAgICB3
b3JrZXIuam9pbih0aHJlYWRfdGltZW91dCkKICAgICAgICAgaWYgd29ya2VyLmlzQWxpdmUoKToK
ICAgICAgICAgICAgICMgSWYgam9pbigpIHJldHVybmVkIHdpdGggdGhlIHRocmVhZCBzdGlsbCBy
dW5uaW5nLCB0aGUKQEAgLTQ5NSwxMSArMzIyLDEyIEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChX
YXRjaGFibGVUaHJlYWQpOgogICAgICAgICAgICAgX2xvZy5lcnJvcignQ2Fubm90IGdldCByZXN1
bHRzIG9mIHRlc3Q6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5mby5maWxl
bmFtZSkKICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3Rf
aW5mby5maWxlbmFtZSwgZmFpbHVyZXM9W10sCi0gICAgICAgICAgICAgICAgdGVzdF9ydW5fdGlt
ZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9MCkKKyAgICAg
ICAgICAgICAgICB0ZXN0X3J1bl90aW1lPTAsIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcz0wLAor
ICAgICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzPXt9KQogCiAgICAgICAgIHJldHVybiByZXN1
bHQKIAotICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbmZvKToKKyAgICBkZWYgX3J1bl90
ZXN0X2luX3RoaXNfdGhyZWFkKHNlbGYsIHRlc3RfaW5mbyk6CiAgICAgICAgICIiIlJ1biBhIHNp
bmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFyZWQgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcy4KIAog
ICAgICAgICBBcmdzOgpAQCAtNTA4LDI4ICszMzYsMTggQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFk
KFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgIFJldHVybnM6IGEgVGVzdFJlc3VsdCBvYmplY3Qu
CiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9lbnN1cmVfZHVtcF9yZW5kZXJfdHJlZV9pc19y
dW5uaW5nKCkKLSAgICAgICAgIyBUaGUgcGl4ZWxfaGFzaCBpcyB1c2VkIHRvIGF2b2lkIGRvaW5n
IGFuIGltYWdlIGR1bXAgaWYgdGhlCi0gICAgICAgICMgY2hlY2tzdW1zIG1hdGNoLCBzbyBpdCBz
aG91bGQgYmUgc2V0IHRvIGEgYmxhbmsgdmFsdWUgaWYgd2UKLSAgICAgICAgIyBhcmUgZ2VuZXJh
dGluZyBhIG5ldyBiYXNlbGluZS4gIChPdGhlcndpc2UsIGFuIGltYWdlIGZyb20gYQotICAgICAg
ICAjIHByZXZpb3VzIHJ1biB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSBiYXNlbGluZS4pCi0gICAg
ICAgIGltYWdlX2hhc2ggPSBfaW1hZ2VfaGFzaCh0ZXN0X2luZm8sIHNlbGYuX3Rlc3RfYXJncywg
c2VsZi5fb3B0aW9ucykKLSAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQotCi0gICAgICAgIHRo
cmVhZF90aW1lb3V0ID0gX21pbGxpc2Vjb25kc190b19zZWNvbmRzKAotICAgICAgICAgICAgIF9w
YWRfdGltZW91dChpbnQodGVzdF9pbmZvLnRpbWVvdXQpKSkKLSAgICAgICAgc2VsZi5fbmV4dF90
aW1lb3V0ID0gc3RhcnQgKyB0aHJlYWRfdGltZW91dAogCisgICAgICAgIHN0YXJ0ID0gdGltZS50
aW1lKCkKICAgICAgICAgY3Jhc2gsIHRpbWVvdXQsIGFjdHVhbF9jaGVja3N1bSwgb3V0cHV0LCBl
cnJvciA9IFwKLSAgICAgICAgICAgc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5mby51cmks
IHRlc3RfaW5mby50aW1lb3V0LCBpbWFnZV9oYXNoKQorICAgICAgICAgICBzZWxmLl9kcml2ZXIu
cnVuX3Rlc3QodGVzdF9pbmZvLnVyaSwgdGVzdF9pbmZvLnRpbWVvdXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8uaW1hZ2VfY2hlY2tzdW0pCiAgICAgICAgIGVu
ZCA9IHRpbWUudGltZSgpCiAKLSAgICAgICAgcmVzdWx0ID0gX3Byb2Nlc3Nfb3V0cHV0KHNlbGYu
X3BvcnQsIHNlbGYuX29wdGlvbnMsCisgICAgICAgIHJldHVybiBfcHJvY2Vzc19vdXRwdXQoc2Vs
Zi5fcG9ydCwgc2VsZi5fb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRlc3RfaW5mbywgc2VsZi5fdGVzdF90eXBlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3Rlc3RfYXJncywgY3Jhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lb3V0LCBlbmQgLSBzdGFydCwgYWN0dWFsX2NoZWNrc3VtLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBlcnJvcikKLSAgICAgICAgc2VsZi5fdGVz
dF9yZXN1bHRzLmFwcGVuZChyZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgZXJyb3IsIHNlbGYuX25hbWUpCiAKICAg
ICBkZWYgX2Vuc3VyZV9kdW1wX3JlbmRlcl90cmVlX2lzX3J1bm5pbmcoc2VsZik6CiAgICAgICAg
ICIiIlN0YXJ0IHRoZSBzaGFyZWQgRHVtcFJlbmRlclRyZWUsIGlmIGl0J3Mgbm90IHJ1bm5pbmcu
CkBAIC01NDUsMTQgKzM2Myw2IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJl
YWQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX29wdGlvbnMpCiAgICAgICAgICAgICBzZWxmLl9kcml2ZXIuc3RhcnQoKQogCi0gICAg
ZGVmIF9zdG9wX2h0dHBfbG9jayhzZWxmKToKLSAgICAgICAgIiIiU3RvcCB0aGUgc2VydmVycyBh
bmQgcmVsZWFzZSBodHRwIGxvY2suIiIiCi0gICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0cF9sb2Nr
OgotICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKLSAgICAgICAgICAg
IHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgICAgIHNlbGYuX3Bv
cnQucmVsZWFzZV9odHRwX2xvY2soKQotICAgICAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sg
PSBGYWxzZQotCiAgICAgZGVmIF9raWxsX2R1bXBfcmVuZGVyX3RyZWUoc2VsZik6CiAgICAgICAg
ICIiIktpbGwgdGhlIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MgaWYgaXQncyBydW5uaW5nLiIiIgog
ICAgICAgICBpZiBzZWxmLl9kcml2ZXI6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3Ro
cmVhZF91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkX3VuaXR0ZXN0LnB5Cmlu
ZGV4IDYzZjg2ZDkzZDg5NDk1ZWE5N2M5ZjAxYWExNzQ5MTY4ZWI2YWFiOGQuLjMxODYzMDgxY2I3
ZTg4NDRhYWVjMzhkODFiODE5MzE4NTQyOGM3ZWMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3Ry
ZWVfdGhyZWFkX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkX3VuaXR0
ZXN0LnB5CkBAIC0zMSwxOSArMzEsOCBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAK
LWltcG9ydCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZAotCi0KIGNsYXNzIFRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0YWNrX2ZvdW5kKHNlbGYpOgot
ICAgICAgICBpZCwgc3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKVswXQotICAg
ICAgICBmb3VuZF9zdGFjayA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmZpbmRfdGhyZWFkX3N0
YWNrKGlkKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQot
Ci0gICAgZGVmIHRlc3RfZmluZF90aHJlYWRfc3RhY2tfbm90X2ZvdW5kKHNlbGYpOgotICAgICAg
ICBmb3VuZF9zdGFjayA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmZpbmRfdGhyZWFkX3N0YWNr
KDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCi0KKyAgICBw
YXNzCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9wcmludGluZy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5CmluZGV4IDAwZmYyMTE0YzUwYTA1
ZTAzOGMwZDQ5NTg3ZDg3ZWMxYjdmNjkyMDUuLjVkOGE5MjM2ZTNlMDkwNzA4YmUzZmEzZjZiODUw
ZTdjOTUyMzM5NDcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5CkBA
IC0xODIsOCArMTgyLDggQEAgZGVmIF9jb25maWd1cmVfbG9nZ2luZyhzdHJlYW0sIHZlcmJvc2Up
OgogICAgIGxvZ19kYXRlZm10ID0gJyV5JW0lZCAlSDolTTolUycKICAgICBsb2dfbGV2ZWwgPSBs
b2dnaW5nLklORk8KICAgICBpZiB2ZXJib3NlOgotICAgICAgICBsb2dfZm10ID0gKCclKGFzY3Rp
bWUpcyAlKGZpbGVuYW1lKXM6JShsaW5lbm8pLTRkICUobGV2ZWxuYW1lKXMgJwotICAgICAgICAg
ICAgICAgICclKG1lc3NhZ2UpcycpCisgICAgICAgIGxvZ19mbXQgPSAoJyUoYXNjdGltZSlzICUo
cHJvY2VzcylkICUoZmlsZW5hbWUpczolKGxpbmVubyktNGQgJworICAgICAgICAgICAgICAgICAg
ICclKGxldmVsbmFtZSlzICUobWVzc2FnZSlzJykKICAgICAgICAgbG9nX2xldmVsID0gbG9nZ2lu
Zy5ERUJVRwogCiAgICAgcm9vdCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Jv
dXRlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3JvdXRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNWVhOGUzZmFlZTJiNTA1YWE1Yjk2MWFl
YzBiYTc4OTgyODZmNjJhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyLnB5CkBAIC0wLDAgKzEs
NTQzIEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGNQaWNrbGUKK2ltcG9ydCBsb2dnaW5n
CitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBRdWV1ZQoraW1wb3J0
IHN5cworaW1wb3J0IHRocmVhZAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9y
dCB0cmFjZWJhY2sKKworaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCitpbXBvcnQgdGVz
dF9yZXN1bHRzCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRf
dGVzdHMubGF5b3V0X3BhY2thZ2Uucm91dGVyIikKKworCitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMp
OgorICAgIGlmIG9wdGlvbnMud29ya2Vyc19hcmUgPT0gJ2lubGluZSc6CisgICAgICAgIHJldHVy
biBTaW5nbGVUaHJlYWRlZFJvdXRlcihwb3J0LCBvcHRpb25zKQorICAgIGlmIG9wdGlvbnMud29y
a2Vyc19hcmUgPT0gJ3RocmVhZHMnOgorICAgICAgICByZXR1cm4gTXVsdGlUaHJlYWRlZFJvdXRl
cihwb3J0LCBvcHRpb25zKQorICAgIHJldHVybiBNdWx0aVByb2Nlc3NSb3V0ZXIocG9ydCwgb3B0
aW9ucykKKworCitjbGFzcyBfTWVzc2FnZShvYmplY3QpOgorICAgIFRFU1RfTElTVCA9ICd0ZXN0
X2xpc3QnCisgICAgU1RPUCA9ICdzdG9wJworICAgIERPTkUgPSAnZG9uZScKKyAgICBTVEFSVEVE
X1RFU1QgPSAnc3RhcnRlZF90ZXN0JworICAgIEZJTklTSEVEX1RFU1QgPSAnZmluaXNoZWRfdGVz
dCcKKyAgICBGSU5JU0hFRF9HUk9VUCA9ICdmaW5pc2hlZF9ncm91cCcKKyAgICBFWENFUFRJT04g
PSAnZXhjZXB0aW9uJworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2FkcyhzdHIpOgor
ICAgICAgICBvYmogPSBjUGlja2xlLmxvYWRzKHN0cikKKyAgICAgICAgYXNzZXJ0KGlzaW5zdGFu
Y2Uob2JqLCBfTWVzc2FnZSkpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3JjLCBkZXN0LCBo
ZHIsIGJvZHkpOgorICAgICAgICBzZWxmLnNyYyA9IHNyYworICAgICAgICBzZWxmLmRlc3QgPSBk
ZXN0CisgICAgICAgIHNlbGYuaGRyID0gaGRyCisgICAgICAgIHNlbGYuYm9keSA9IGJvZHkKKwor
ICAgIGRlZiBkdW1wcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGNQaWNrbGUuZHVtcHMoc2VsZikK
KworCitjbGFzcyBfV29ya2VyU3RhdGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6
CisgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0X3RpbWVvdXQgPSBO
b25lCisgICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorICAgICAgICBzZWxmLndlZGdlZCA9IEZh
bHNlCisgICAgICAgIHNlbGYuZG9uZSA9IEZhbHNlCisKKworY2xhc3MgUm91dGVyKG9iamVjdCk6
CisgICAgTUFOQUdFUiA9ICdtYW5hZ2VyJworICAgIEFOWV9XT1JLRVIgPSAnd29ya2VyLVxkKycK
KworICAgIElOX01FTU9SWV9SRVBSRVNFTlRBVElPTiA9ICI8aW5fbWVtb3J5PiIKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgbG9hZHMoc3RyKToKKyAgICAgICAgYXNzZXJ0IHN0ciA9PSBS
b3V0ZXIuSU5fTUVNT1JZX1JFUFJFU0VOVEFUSU9OCisgICAgICAgIGdsb2JhbCBfcm91dGVyCisg
ICAgICAgIHJldHVybiBfcm91dGVyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0
aW9ucyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX29wdGlvbnMg
PSBvcHRpb25zCisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dv
cmtlcnMgPSB7fQorICAgICAgICBzZWxmLl9udW1fd29ya2VycyA9IGludChzZWxmLl9vcHRpb25z
LmNoaWxkX3Byb2Nlc3NlcykKKyAgICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1ZSA9IFF1ZXVlLlF1
ZXVlKCkKKyAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAg
ICBzZWxmLl9ncm91cF90aW1pbmdfc3RhdHMgPSB7fQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6
CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydF93b3JrZXJzKHNlbGYpOgorICAgICAgICAi
IiJJbnN0YW50aWF0ZXMgYW5kIHN0YXJ0cyB0aGUgVGVzdFNoZWxsVGhyZWFkKHMpLiIiIgorICAg
ICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVsbFRocmVhZHMgYW5kIHN0YXJ0IHRoZW0uCisgICAg
ICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShzZWxmLl9udW1fd29ya2Vycyk6CisgICAg
ICAgICAgICAjIENyZWF0ZSBzZXBhcmF0ZSBUZXN0VHlwZXMgaW5zdGFuY2VzIGZvciBlYWNoIHRo
cmVhZC4KKyAgICAgICAgICAgIHdvcmtlciA9IF9Xb3JrZXJTdGF0ZSgpCisKKyAgICAgICAgICAg
IHdvcmtlci50aHJlYWQgPSBzZWxmLl9zdGFydF93b3JrZXIod29ya2VyX251bWJlcikKKyAgICAg
ICAgICAgIHdvcmtlci5uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAg
ICAgICBzZWxmLl93b3JrZXJzW3dvcmtlci5uYW1lXSA9IHdvcmtlcgorCisgICAgZGVmIF9zdGFy
dF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IKKworICAgIGRlZiBfYmFpbChzZWxmLCBtc2cpOgorICAgICAgICBfbG9nLmVycm9y
KG1zZykKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCBtc2cKKworICAgIGRlZiBzdG9wX3dvcmtlcnMo
c2VsZik6CisgICAgICAgICMgRklYTUU6IFNob3VsZCB0aGlzIGJlIGJsb2NraW5nPworICAgICAg
ICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYuX3dvcmtlcnMpKToKKyAgICAgICAgICAgIHNlbGYu
cG9zdF9zdG9wKCkKKworICAgIGRlZiBjYW5jZWxfd29ya2VycyhzZWxmKToKKyAgICAgICAgZm9y
IHdvcmtlciBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgd29ya2VyLnRo
cmVhZC5jYW5jZWwoKQorICAgICAgICBzZWxmLl9wb2xsX21hbmFnZXJfcXVldWUoc2VsZi5fbWFu
YWdlci5nZXROYW1lKCksIHRpbWVvdXQ9MC4wKQorCisgICAgZGVmIHBvc3RfdGVzdF9saXN0KHNl
bGYsIHRlc3RfbGlzdCk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c2VsZi5NQU5BR0VSLCBkZXN0
PXNlbGYuQU5ZX1dPUktFUiwKKyAgICAgICAgICAgICAgICAgIGhkcj1fTWVzc2FnZS5URVNUX0xJ
U1QsIGJvZHk9dGVzdF9saXN0KQorCisgICAgZGVmIHBvc3Rfc3RhcnRlZF90ZXN0KHNlbGYsIHNy
YywgdGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpOgorICAgICAgICBzZWxmLl9wdXQoc3JjPXNyYywg
ZGVzdD1zZWxmLk1BTkFHRVIsIGhkcj1fTWVzc2FnZS5TVEFSVEVEX1RFU1QsCisgICAgICAgICAg
ICAgICAgICBib2R5PSh0ZXN0X2luZm8sIGhhbmdfdGltZW91dCkpCisKKyAgICBkZWYgcG9zdF9m
aW5pc2hlZF9ncm91cChzZWxmLCBzcmMsIGdyb3VwX25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90
aW1lKToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz1zcmMsIGRlc3Q9c2VsZi5NQU5BR0VSLCBoZHI9
X01lc3NhZ2UuRklOSVNIRURfR1JPVVAsCisgICAgICAgICAgICAgICAgICBib2R5PShncm91cF9u
YW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkpCisKKyAgICBkZWYgcG9zdF9maW5pc2hlZF90
ZXN0KHNlbGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9wdXQo
c3JjPXNyYywgZGVzdD1zZWxmLk1BTkFHRVIsIGhkcj1fTWVzc2FnZS5GSU5JU0hFRF9URVNULAor
ICAgICAgICAgICAgICAgICAgYm9keT0ocmVzdWx0LCBlbGFwc2VkX3RpbWUpKQorCisgICAgZGVm
IHBvc3RfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjX2luZm8pOgorICAgICAgICBzZWxmLl9wdXQo
c3JjPXNyYywgZGVzdD1zZWxmLk1BTkFHRVIsIGhkcj1fTWVzc2FnZS5FWENFUFRJT04sCisgICAg
ICAgICAgICAgICAgICBib2R5PWV4Y19pbmZvKQorCisgICAgZGVmIHBvc3Rfc3RvcChzZWxmKToK
KyAgICAgICAgc2VsZi5fcHV0KHNyYz1zZWxmLk1BTkFHRVIsIGRlc3Q9c2VsZi5BTllfV09SS0VS
LAorICAgICAgICAgICAgICAgICAgaGRyPV9NZXNzYWdlLlNUT1AsIGJvZHk9Tm9uZSkKKworICAg
IGRlZiBwb3N0X2RvbmUoc2VsZiwgd29ya2VyKToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz13b3Jr
ZXIsIGRlc3Q9c2VsZi5NQU5BR0VSLAorICAgICAgICAgICAgICAgICAgaGRyPV9NZXNzYWdlLkRP
TkUsIGJvZHk9Tm9uZSkKKworICAgIGRlZiBsb29wKHNlbGYsIG9iaik6CisgICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IoInN1YmNsYXNzIG11c3QgaW1wbGVtZW50IFJvdXRlci5sb29w
KCkiKQorCisgICAgZGVmIF9wdXQoc2VsZiwgc3JjLCBkZXN0LCBoZHIsIGJvZHkpOgorICAgICAg
ICBtc2cgPSBfTWVzc2FnZShzcmMsIGRlc3QsIGhkciwgYm9keSkKKyAgICAgICAgaWYgbXNnLmRl
c3QgPT0gc2VsZi5NQU5BR0VSOgorICAgICAgICAgICAgIyBfbG9nLmRlYnVnKCIlczogcG9zdGlu
ZyAnJXMnIG1zZyB0byBtYW5hZ2VyIHF1ZXVlIiAlCisgICAgICAgICAgICAjICAgICAgICAgICAg
IChtc2cuc3JjLCBtc2cuaGRyKSkKKyAgICAgICAgICAgIHNlbGYuX21hbmFnZXJfcXVldWUucHV0
KG1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgX2xvZy5kZWJ1ZygiJXM6IHBvc3Rp
bmcgJyVzJyBtc2cgdG8gd29ya2VyIHF1ZXVlIiAlCisgICAgICAgICAgICAjICAgICAgICAgICAg
IChtc2cuc3JjLCBtc2cuaGRyKSkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9xdWV1ZS5wdXQo
bXNnKQorCisgICAgZGVmIF9nZXQoc2VsZiwgbmFtZSwgcXVldWUsIGJsb2NrLCB0aW1lb3V0KToK
KyAgICAgICAgaWYgcXVldWUgPT0gc2VsZi5fbWFuYWdlcl9xdWV1ZToKKyAgICAgICAgICAgIHF1
ZXVlX25hbWUgPSAibWFuYWdlciBxdWV1ZSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHF1
ZXVlX25hbWUgPSAid29ya2VyIHF1ZXVlIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICNf
bG9nLmRlYnVnKCIlcyBuYW1lIHJlYWRpbmcgZnJvbSAlcyBxdWV1ZSIgJSAobmFtZSwgcXVldWVf
bmFtZSkpCisgICAgICAgICAgICBtc2cgPSBxdWV1ZS5nZXQoYmxvY2ssIHRpbWVvdXQpCisgICAg
ICAgICAgICAjX2xvZy5kZWJ1ZygiJXMgZ290ICclcycgbXNnIGZyb20gJXMiICUgKG5hbWUsIG1z
Zy5oZHIsIG1zZy5zcmMpKQorICAgICAgICAgICAgcmV0dXJuIG1zZworICAgICAgICBleGNlcHQg
UXVldWUuRW1wdHk6CisgICAgICAgICAgICAjX2xvZy5kZWJ1ZygiJXMgZm91bmQgJXMgZW1wdHki
ICUgKG5hbWUsIHF1ZXVlX25hbWUpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRl
ZiBfcG9sbF9tYW5hZ2VyX3F1ZXVlKHNlbGYsIG5hbWUsIHRpbWVvdXQpOgorICAgICAgICB3aGls
ZSBUcnVlOgorICAgICAgICAgICAgIyBOb3RlIHRoYXQgYmxvY2s9VHJ1ZSwgdGltZW91dD0wIGlz
IGVxdWl2YWxlbnQgdG8gYmxvY2s9RmFsc2UuCisgICAgICAgICAgICBtc2cgPSBzZWxmLl9nZXQo
bmFtZSwgc2VsZi5fbWFuYWdlcl9xdWV1ZSwgVHJ1ZSwgdGltZW91dCkKKyAgICAgICAgICAgIGlm
IG5vdCBtc2c6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbXNnLmhk
ciA9PSBfTWVzc2FnZS5TVEFSVEVEX1RFU1Q6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxl
X3N0YXJ0ZWRfdGVzdChtc2cpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01lc3NhZ2Uu
RklOSVNIRURfVEVTVDoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZmluaXNoZWRfdGVz
dChtc2cpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuRklOSVNIRURfR1JP
VVA6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2ZpbmlzaGVkX2dyb3VwKG1zZykKKyAg
ICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5ET05FOgorICAgICAgICAgICAgICAg
IHNlbGYuX2hhbmRsZV9kb25lKG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVz
c2FnZS5FWENFUFRJT046CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V4Y2VwdGlvbiht
c2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2JhaWwoJ3VuZXhw
ZWN0ZWQgbWVzc2FnZSB0eXBlIG9uIG1hbmFnZXIgcXVldWU6ICVzJyAlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtc2cuaGRyKQorCisgICAgZGVmIF9wb2xsX3dvcmtlcl9xdWV1ZShzZWxm
LCB3b3JrZXIsIHBvbGxfbWFuYWdlcik6CisgICAgICAgIHdoaWxlIG5vdCB3b3JrZXIuaXNfZG9u
ZSgpOgorICAgICAgICAgICAgbXNnID0gc2VsZi5fZ2V0KHdvcmtlci5nZXROYW1lKCksIHNlbGYu
X3dvcmtlcl9xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgcG9sbF9tYW5h
Z2VyLCBOb25lKQorICAgICAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgICAgICBpZiBu
b3QgcG9sbF9tYW5hZ2VyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9iYWlsKCclcyB1bmV4
cGVjdGVkbHkgcmFuIG91dCBvZiBxdWV1ZWQgbWVzc2FnZXMnICUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3b3JrZXIuZ2V0TmFtZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrCisK
KyAgICAgICAgICAgIGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuU1RPUDoKKyAgICAgICAgICAgICAg
ICBzZWxmLl9oYW5kbGVfc3RvcCh3b3JrZXIpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0g
X01lc3NhZ2UuVEVTVF9MSVNUOgorICAgICAgICAgICAgICAgICh0ZXN0X2dyb3VwLCB0ZXN0X2xp
c3QpID0gbXNnLmJvZHkKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfdGVzdF9saXN0KHdv
cmtlciwgdGVzdF9ncm91cCwgdGVzdF9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG9sbF9tYW5hZ2VyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBzZWxmLl9iYWlsKCclczogdW5leHBlY3RlZCBtZXNzYWdlIHR5cGUgb24gd29ya2VyIHF1
ZXVlOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdvcmtlci5nZXROYW1lKCks
IG1zZy5oZHIpKQorCisgICAgZGVmIF9oYW5kbGVfc3RhcnRlZF90ZXN0KHNlbGYsIG1zZyk6Cisg
ICAgICAgICh0ZXN0X2luZm8sIGhhbmdfdGltZW91dCkgPSBtc2cuYm9keQorICAgICAgICB3b3Jr
ZXIgPSBzZWxmLl93b3JrZXJzW21zZy5zcmNdCisgICAgICAgIHdvcmtlci5jdXJyZW50X3Rlc3Rf
bmFtZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2luZm8uZmlsZW5h
bWUpCisgICAgICAgIHdvcmtlci5uZXh0X3RpbWVvdXQgPSB0aW1lLnRpbWUoKSArIGhhbmdfdGlt
ZW91dAorCisgICAgZGVmIF9oYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCBtc2cpOgorICAgICAg
ICAocmVzdWx0LCBlbGFwc2VkX3RpbWUpID0gbXNnLmJvZHkKKyAgICAgICAgd29ya2VyID0gc2Vs
Zi5fd29ya2Vyc1ttc2cuc3JjXQorICAgICAgICB3b3JrZXIubmV4dF90aW1lb3V0ID0gTm9uZQor
ICAgICAgICB3b3JrZXIuY3VycmVudF90ZXN0ID0gTm9uZQorCisgICAgICAgIGlmIHdvcmtlci53
ZWRnZWQ6CisgICAgICAgICAgICAjIEhtbS4gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLgorICAgICAg
ICAgICAgX2xvZy5lcnJvcigiJXMgdW53ZWRnZWQiLCB3b3JrZXIuZ2V0TmFtZSgpKQorCisgICAg
ICAgIHNlbGYuX21hbmFnZXIuaGFuZGxlX2ZpbmlzaGVkX3Rlc3QobXNnLnNyYywgcmVzdWx0LCBl
bGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX2hhbmRsZV9maW5pc2hlZF9ncm91cChzZWxmLCBtc2cp
OgorICAgICAgICAoZ3JvdXBfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpID0gbXNnLmJv
ZHkKKyAgICAgICAgc2VsZi5fbWFuYWdlci5oYW5kbGVfZmluaXNoZWRfZ3JvdXAobXNnLnNyYywg
Z3JvdXBfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX2hhbmRsZV9leGNlcHRpb24oc2Vs
ZiwgbXNnKToKKyAgICAgICAgZXhjZXB0aW9uX2luZm8gPSBtc2cuYm9keQorICAgICAgICBzZWxm
Ll9tYW5hZ2VyLmhhbmRsZV9leGNlcHRpb24obXNnLnNyYywgZXhjZXB0aW9uX2luZm8pCisKKyAg
ICBkZWYgX2hhbmRsZV9zdG9wKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHdvcmtlci5oYW5kbGVf
c3RvcCgpCisKKyAgICBkZWYgX2hhbmRsZV9kb25lKHNlbGYsIG1zZyk6CisgICAgICAgIHdvcmtl
ciA9IHNlbGYuX3dvcmtlcnNbbXNnLnNyY10KKyAgICAgICAgd29ya2VyLmRvbmUgPSBUcnVlCisg
ICAgICAgICMgX2xvZy5kZWJ1ZygiJXMgaXMgZG9uZSIgJSB3b3JrZXIubmFtZSkKKyAgICAgICAg
c2VsZi5fbWFuYWdlci5oYW5kbGVfZG9uZShtc2cuc3JjKQorCisgICAgZGVmIF9oYW5kbGVfdGVz
dF9saXN0KHNlbGYsIHdvcmtlciwgdGVzdF9ncm91cCwgdGVzdF9saXN0LCBwb2xsX21hbmFnZXIp
OgorICAgICAgICB3b3JrZXIuaGFuZGxlX3Rlc3RfbGlzdCh0ZXN0X2dyb3VwLCB0ZXN0X2xpc3Qs
IHBvbGxfbWFuYWdlcikKKworICAgIGRlZiBfbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgd29ya2Vy
KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFNpbmdsZVRo
cmVhZGVkUm91dGVyKFJvdXRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlv
bnMpOgorICAgICAgICBSb3V0ZXIuX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucykKKyAgICAg
ICAgIyBGSVhNRTogQ291bGQgdXNlIGZha2UgcXVldWVzIGhlcmUuCisgICAgICAgIHNlbGYuX21h
bmFnZXJfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHNlbGYuX3dvcmtlcl9xdWV1ZSA9
IFF1ZXVlLlF1ZXVlKCkKKworICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1i
ZXIpOgorICAgICAgICAjIEZJWE1FOiBVc2UgV29ya2VyVGh1bmsgaW5zdGVhZCAuLi4KKyAgICAg
ICAgdGh1bmsgPSBfV29ya2VyVGhyZWFkKHNlbGYsIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldv
cmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9udW1iZXIpCisgICAg
ICAgIHJldHVybiB0aHVuaworCisgICAgZGVmIGxvb3Aoc2VsZiwgbWFuYWdlcik6CisgICAgICAg
IHNlbGYuX21hbmFnZXIgPSBtYW5hZ2VyCisgICAgICAgIHdvcmtlciA9IHNlbGYuX3dvcmtlcnNb
J3dvcmtlci0wJ10KKyAgICAgICAgc2VsZi5fcG9sbF93b3JrZXJfcXVldWUod29ya2VyLnRocmVh
ZCwgcG9sbF9tYW5hZ2VyPVRydWUpCisKKyAgICBkZWYgX2xvZ193ZWRnZWRfd29ya2VyKHNlbGYs
IHdvcmtlcik6CisgICAgICAgIGFzc2VydCBGYWxzZSwgIlNpbmdsZVRocmVhZGVkUm91dGVyLl9s
b2dfd2VkZ2VkX3dvcmtlcigpIHNob3VsZCBuZXZlciBiZSBjYWxsZWQiCisKKworY2xhc3MgTXVs
dGlUaHJlYWRlZFJvdXRlcihTaW5nbGVUaHJlYWRlZFJvdXRlcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBTaW5nbGVUaHJlYWRlZFJvdXRlci5fX2lu
aXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKQorCisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwg
d29ya2VyX251bWJlcik6CisgICAgICAgIHRodW5rID0gX1dvcmtlclRocmVhZChzZWxmLCBkdW1w
X3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3b3JrZXJfbnVtYmVyKQorICAgICAgICB0aHVuay5zdGFydCgpCisgICAgICAgIHJldHVybiB0
aHVuaworCisgICAgZGVmIGxvb3Aoc2VsZiwgb2JqKToKKyAgICAgICAgaWYgb2JqLmdldE5hbWUo
KSA9PSBzZWxmLk1BTkFHRVI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbG9vcF9tYW5hZ2Vy
KG9iaikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9sb29wX3dvcmtl
cihvYmopCisKKyAgICBkZWYgX2xvb3BfbWFuYWdlcihzZWxmLCBtYW5hZ2VyKToKKyAgICAgICAg
c2VsZi5fbWFuYWdlciA9IG1hbmFnZXIKKyAgICAgICAgc2VsZi5fcG9sbF9tYW5hZ2VyX3F1ZXVl
KG1hbmFnZXIuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMDEpCisgICAgICAgIHdoaWxlIG5vdCBzZWxm
Ll9jaGVja19vbl93b3JrZXJzKCk6CisgICAgICAgICAgICBzZWxmLl9wb2xsX21hbmFnZXJfcXVl
dWUobWFuYWdlci5nZXROYW1lKCksIHRpbWVvdXQ9MC4wMSkKKworICAgICAgICBmb3IgdyBpbiBz
ZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgYXNzZXJ0IHcud2VkZ2VkIG9yIG5v
dCB3LnRocmVhZC5pc19hbGl2ZSgpCisKKyAgICBkZWYgX2xvb3Bfd29ya2VyKHNlbGYsIHdvcmtl
cik6CisgICAgICAgIHdoaWxlIG5vdCB3b3JrZXIuaXNfZG9uZSgpOgorICAgICAgICAgICAgc2Vs
Zi5fcG9sbF93b3JrZXJfcXVldWUod29ya2VyLCBwb2xsX21hbmFnZXI9RmFsc2UpCisKKyAgICBk
ZWYgX2NoZWNrX29uX3dvcmtlcnMoc2VsZik6CisgICAgICAgICJSZXR1cm5zIHRydWUgaWZmIGFs
bCB0aGUgd29ya2VycyBoYXZlIGVpdGhlciBjb21wbGV0ZWQgb3Igd2VkZ2VkLiIKKyAgICAgICAg
ZG9uZSA9IFRydWUKKyAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAgICAgIGZvciB3b3JrZXIg
aW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB3b3JrZXIuZG9u
ZSBhbmQgbm90IHdvcmtlci53ZWRnZWQ6CisgICAgICAgICAgICAgICAgbmV4dF90aW1lb3V0ID0g
d29ya2VyLm5leHRfdGltZW91dAorICAgICAgICAgICAgICAgIGlmIChuZXh0X3RpbWVvdXQgYW5k
IHQgPiBuZXh0X3RpbWVvdXQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2dfd2VkZ2Vk
X3dvcmtlcih3b3JrZXIud29ya2VyKQorICAgICAgICAgICAgICAgICAgICB3b3JrZXIud2VkZ2Vk
ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgX2xv
Zy5kZWJ1ZygiJXMgaXMgbm90IGRvbmUiICUgd29ya2VyLm5hbWUpCisgICAgICAgICAgICAgICAg
ICAgIGRvbmUgPSBGYWxzZQorICAgICAgICByZXR1cm4gZG9uZQorCisgICAgZGVmIF9sb2dfd2Vk
Z2VkX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICAiIiJMb2cgaW5mb3JtYXRpb24gYWJv
dXQgdGhlIGdpdmVuIHRocmVhZCBzdGF0ZS4iIiIKKyAgICAgICAgaWQgPSB3b3JrZXIudGhyZWFk
LmlkKCkKKyAgICAgICAgc3RhY2sgPSBzZWxmLl9maW5kX3RocmVhZF9zdGFjayhpZCkKKyAgICAg
ICAgYXNzZXJ0KHN0YWNrIGlzIG5vdCBOb25lKQorICAgICAgICBfbG9nLmVycm9yKCIiKQorICAg
ICAgICBfbG9nLmVycm9yKCIlcyAodGlkICVkKSBpcyB3ZWRnZWQgb24gdGVzdCAlcyIgJQorICAg
ICAgICAgICAgICAgICAgICh3b3JrZXIudGhyZWFkLmdldE5hbWUoKSwgaWQsIHdvcmtlci5jdXJy
ZW50X3Rlc3RfbmFtZSkpCisgICAgICAgIHNlbGYuX2xvZ19zdGFjayhzdGFjaykKKyAgICAgICAg
X2xvZy5lcnJvcigiIikKKworICAgIGRlZiBfZmluZF90aHJlYWRfc3RhY2soc2VsZiwgaWQpOgor
ICAgICAgICAiIiJSZXR1cm5zIGEgc3RhY2sgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZHVt
cCBhIHN0YWNrIHRyYWNlIGZvcgorICAgICAgICB0aGUgZ2l2ZW4gdGhyZWFkIGlkIChvciBOb25l
IGlmIHRoZSBpZCBpcyBub3QgZm91bmQpLiIiIgorICAgICAgICBmb3IgdGhyZWFkX2lkLCBzdGFj
ayBpbiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHRocmVh
ZF9pZCA9PSBpZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sKKyAgICAgICAgcmV0dXJu
IE5vbmUKKworICAgIGRlZiBfbG9nX3N0YWNrKHNlbGYsIHN0YWNrKToKKyAgICAgICAgIiIiTG9n
IGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCkuIiIiCisgICAgICAgIGZvciBmaWxlbmFtZSwg
bGluZW5vLCBuYW1lLCBsaW5lIGluIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKHN0YWNrKToKKyAg
ICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZpbGU6ICIlcyIsIGxpbmUgJWQsIGluICVzJyAlIChmaWxl
bmFtZSwgbGluZW5vLCBuYW1lKSkKKyAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAg
ICAgX2xvZy5lcnJvcignICAlcycgJSBsaW5lLnN0cmlwKCkpCisKKworY2xhc3MgTXVsdGlQcm9j
ZXNzUm91dGVyKE11bHRpVGhyZWFkZWRSb3V0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
b3J0LCBvcHRpb25zKToKKyAgICAgICAgUm91dGVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlv
bnMpCisgICAgICAgIHNlbGYuX21hbmFnZXJfcXVldWUgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUo
KQorICAgICAgICBzZWxmLl93b3JrZXJfcXVldWUgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQor
CisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHRo
dW5rID0gX1dvcmtlclByb2Nlc3Moc2VsZiwgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV29ya2Vy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9udW1iZXIpCisgICAgICAg
IHRodW5rLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIHRodW5rCisKKyAgICBkZWYgcG9zdF9leGNl
cHRpb24oc2VsZiwgc3JjLCBleGNlcHRpb25faW5mbyk6CisgICAgICAgICMgRklYTUU6IFdlIGNh
bid0IHBpY2tsZSB0cmFjZWJhY2sgb2JqZWN0cywgc28gbG9nIHRoZSB0cmFjZWJhY2sgaGVyZS4K
KyAgICAgICAgbXBfZXhjX2luZm8gPSAoZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2VwdGlvbl9pbmZv
WzFdLCBOb25lKQorICAgICAgICBNdWx0aVRocmVhZGVkUm91dGVyLnBvc3RfZXhjZXB0aW9uKHNl
bGYsIHNyYywgbXBfZXhjX2luZm8pCisKKyAgICBkZWYgX2xvZ193ZWRnZWRfd29ya2VyKHNlbGYs
IHdvcmtlcik6CisgICAgICAgIGlkID0gd29ya2VyLnRocmVhZC5pZCgpCisgICAgICAgIF9sb2cu
ZXJyb3IoIiIpCisgICAgICAgIF9sb2cuZXJyb3IoIiVzIChwaWQgJWQpIGlzIHdlZGdlZCBvbiB0
ZXN0ICVzIiAlCisgICAgICAgICAgICAgICAgICAgKHdvcmtlci50aHJlYWQuZ2V0TmFtZSgpLCBp
ZCwgd29ya2VyLmN1cnJlbnRfdGVzdF9uYW1lKSkKKyAgICAgICAgX2xvZy5lcnJvcigiIikKKwor
CitjbGFzcyBfV29ya2VyVGh1bmsob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm91
dGVyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICBzZWxmLl9leGNlcHRp
b25faW5mbyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcm91dGVyID0gcm91dGVyCisgICAgICAgIHNl
bGYuX29wdGlvbnMgPSByb3V0ZXIuX29wdGlvbnMKKyAgICAgICAgc2VsZi5fcG9ydCA9IHJvdXRl
ci5fcG9ydAorICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9k
b25lID0gRmFsc2UKKyAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxzZQorICAgICAg
ICBzZWxmLl9pZCA9IDAKKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1i
ZXIKKyAgICAgICAgc2VsZi5fd29ya2VyID0gd29ya2VyX2NsYXNzKHNlbGYuX3BvcnQsIHNlbGYs
IHNlbGYuX29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jr
ZXJfbnVtYmVyKQorCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICAjIHVzZWQgZHVyaW5nIGxv
Z193ZWRnZWRfd29ya2VyCisgICAgICAgIHJldHVybiBzZWxmLl9pZAorCisgICAgZGVmIGNhbmNl
bChzZWxmKToKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gVHJ1ZQorCisgICAgZGVmIGlzX2Rv
bmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb25lIG9yIHNlbGYuX2NhbmNlbGxlZAor
CisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBf
bG9jazoKKyAgICAgICAgICAgIHNlbGYuX3JlbGVhc2VfbG9jaygpCisgICAgICAgIHNlbGYuX3dv
cmtlci5oYW5kbGVfc3RvcCgpCisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICBkZWYg
aGFuZGxlX3Rlc3RfbGlzdChzZWxmLCBncm91cF9uYW1lLCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdl
cik6CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMud2FpdF9mb3JfaHR0cGQ6CisgICAgICAgICAg
ICBpZiBncm91cF9uYW1lID09ICJ0ZXN0c190b19odHRwX2xvY2siOgorICAgICAgICAgICAgICAg
IHNlbGYuX2FjcXVpcmVfbG9jaygpCisgICAgICAgICAgICBlbGlmIHNlbGYuX2hhdmVfaHR0cF9s
b2NrOgorICAgICAgICAgICAgICAgIHNlbGYuX3JlbGVhc2VfbG9jaygpCisKKyAgICAgICAgc3Rh
cnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIG51bV90ZXN0cyA9IDAKKyAgICAgICAgZm9y
IHRlc3QgaW4gdGVzdF9saXN0OgorICAgICAgICAgICAgc2VsZi5fd29ya2VyLnJ1bl90ZXN0KHRl
c3QpCisgICAgICAgICAgICBudW1fdGVzdHMgKz0gMQorCisgICAgICAgICAgICAjIEZJWE1FOiBO
ZWVkIHRvIGdldCByaWQgb2YgdGhpcy4KKyAgICAgICAgICAgIGlmIHBvbGxfbWFuYWdlcjoKKyAg
ICAgICAgICAgICAgICBzZWxmLl9yb3V0ZXIuX3BvbGxfbWFuYWdlcl9xdWV1ZShzZWxmLmdldE5h
bWUoKSwgdGltZW91dD0wLjApCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2NhbmNlbGxlZDoKKyAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbGFwc2VkX3RpbWUgPSB0aW1lLnRpbWUoKSAt
IHN0YXJ0X3RpbWUKKworICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKKyAgICAgICAg
ICAgIHNlbGYuX3JlbGVhc2VfbG9jaygpCisKKyAgICAgICAgc2VsZi5fcm91dGVyLnBvc3RfZmlu
aXNoZWRfZ3JvdXAoc2VsZi5nZXROYW1lKCksIGdyb3VwX25hbWUsIG51bV90ZXN0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZF90aW1lKQorCisgICAg
ZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RhcnRlZF90ZXN0KHNl
bGYsIHRlc3RfaW5mbywgaHVuZ190aHJlYWRfdGltZW91dCk6CisgICAgICAgIHNlbGYuX3JvdXRl
ci5wb3N0X3N0YXJ0ZWRfdGVzdChzZWxmLmdldE5hbWUoKSwgdGVzdF9pbmZvLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVuZ190aHJlYWRfdGltZW91dCkKKworICAg
IGRlZiBmaW5pc2hlZF90ZXN0KHNlbGYsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAgICAg
c2VsZi5fcm91dGVyLnBvc3RfZmluaXNoZWRfdGVzdChzZWxmLmdldE5hbWUoKSwgcmVzdWx0LCBl
bGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX2FjcXVpcmVfbG9jayhzZWxmKToKKyAgICAgICAgc2Vs
Zi5fcG9ydC5hY3F1aXJlX2h0dHBfbG9jaygpCisgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0
cF9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQor
ICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRydWUKKworICAgIGRlZiBfcmVsZWFzZV9s
b2NrKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHRoZSBzZXJ2ZXJzIGFuZCByZWxlYXNlIGh0dHAg
bG9jay4iIiIKKyAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBz
ZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9w
X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBf
bG9jaygpCisgICAgICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IEZhbHNlCisKKyAgICBk
ZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLl9pZCA9IHNlbGYuX2dldF9pZCgpCisgICAgICAg
IG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIiCisgICAgICAgIF9s
b2cuZGVidWcoJyVzIHN0YXJ0aW5nJyAlIG5hbWUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgc2VsZi5fcm91dGVyLmxvb3Aoc2VsZikKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJy
dXB0OgorICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGludGVycnVwdGVkIgorICAgICAg
ICBleGNlcHQ6CisgICAgICAgICAgICBleGNlcHRpb25fbXNnID0gIiwgZXhjZXB0aW9uIHJhaXNl
ZCIKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIGRvbmUlcyIg
JSAobmFtZSwgZXhjZXB0aW9uX21zZykpCisgICAgICAgICAgICBpZiBleGNlcHRpb25fbXNnOgor
ICAgICAgICAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAg
ICAgICAgICAgICAgICBzZWxmLl9yb3V0ZXIucG9zdF9leGNlcHRpb24oc2VsZi5nZXROYW1lKCks
IHNlbGYuX2V4Y2VwdGlvbl9pbmZvKQorICAgICAgICAgICAgc2VsZi5fcm91dGVyLnBvc3RfZG9u
ZShuYW1lKQorCisgICAgICAgIGFzc2VydCBleGNlcHRpb25fbXNnIG9yIHNlbGYuX2RvbmUgb3Ig
c2VsZi5fY2FuY2VsbGVkLCAiZXhpdGluZyB1bmV4cGVjdGVkbHkiCisKKworY2xhc3MgX1dvcmtl
clRocmVhZChfV29ya2VyVGh1bmssIHRocmVhZGluZy5UaHJlYWQpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCByb3V0ZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcik6CisgICAgICAgIHRo
cmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgX1dvcmtlclRodW5rLl9faW5p
dF9fKHNlbGYsIHJvdXRlciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyKQorICAgICAgICBz
ZWxmLm5hbWUgPSAnd29ya2VyLSVkJyAlIHdvcmtlcl9udW1iZXIKKworICAgIGRlZiBpZChzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lkCisKKyAgICBkZWYgX2dldF9pZChzZWxmKToKKyAg
ICAgICAgdGhyZWFkLmdldF9pZGVudCgpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAg
ICBzZWxmLl9jYW5jZWxsZWQgPSBUcnVlCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAg
IHRocmVhZGluZy5UaHJlYWQuc3RhcnQoc2VsZikKKworCitjbGFzcyBfV29ya2VyUHJvY2Vzcyhf
V29ya2VyVGh1bmssIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcm91dGVyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICBtdWx0
aXByb2Nlc3NpbmcuUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQorICAgICAgICBfV29ya2VyVGh1bmsu
X19pbml0X18oc2VsZiwgcm91dGVyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpCisgICAg
ICAgIHNlbGYubmFtZSA9ICd3b3JrZXItJWQnICUgd29ya2VyX251bWJlcgorCisgICAgZGVmIGlk
KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBmaWd1cmUgb3V0IGlmIHRoaXMgbmVlZHMgdG8gYmUg
YXdhcmUgb2YgcGFyZW50L2NoaWxkCisgICAgICAgIHJldHVybiBzZWxmLnBpZAorCisgICAgZGVm
IF9nZXRfaWQoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5nZXRwaWQoKQorCisgICAgZGVmIGNh
bmNlbChzZWxmKToKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gVHJ1ZQorICAgICAgICBzZWxm
LnRlcm1pbmF0ZSgpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIG11bHRpcHJvY2Vz
c2luZy5Qcm9jZXNzLnN0YXJ0KHNlbGYpCisKKyAgICBkZWYgZ2V0TmFtZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYubmFtZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyX3VuaXR0ZXN0LnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91
dGVyX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhYTljYzM3NGNjYWFkMDhmZGRkYjE1NjVjYmFm
NDA0NTNlZDA4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9yb3V0ZXJfdW5pdHRlc3QucHkKQEAgLTAs
MCArMSwxMTkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHku
bW9jayBpbXBvcnQgTW9jaworaW1wb3J0IFF1ZXVlCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBy
b3V0ZXIgaW1wb3J0ICoKKworCitjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBk
ZWYgdGVzdF9maW5kX3RocmVhZF9zdGFja19mb3VuZChzZWxmKToKKyAgICAgICAgIyBGSVhNRTog
aW1wbGVtZW50CisgICAgICAgIHJldHVybgorICAgICAgICBpZCwgc3RhY2sgPSBzeXMuX2N1cnJl
bnRfZnJhbWVzKCkuaXRlbXMoKVswXQorICAgICAgICBmb3VuZF9zdGFjayA9IGZpbmRfdGhyZWFk
X3N0YWNrKGlkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZvdW5kX3N0YWNrLCBOb25l
KQorCisgICAgZGVmIHRlc3RfZmluZF90aHJlYWRfc3RhY2tfbm90X2ZvdW5kKHNlbGYpOgorICAg
ICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcmV0dXJuCisgICAgICAgIGZvdW5kX3N0
YWNrID0gZmluZF90aHJlYWRfc3RhY2soMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3Vu
ZF9zdGFjaywgTm9uZSkKKworCitjbGFzcyBXYWl0Rm9yVGhyZWFkc1RvRmluaXNoVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHJ1bl9vbmVfdGhyZWFkKHNlbGYsIG1zZyk6CisgICAg
ICAgIHN0YXJ0aW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBzdG9wcGluZ19xdWV1
ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgY2hpbGRfdGhyZWFkID0gVGVzdFRocmVhZChzdGFy
dGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVldWUpCisgICAgICAgIGNoaWxkX3RocmVhZC5zdGFydCgp
CisgICAgICAgIHN0YXJ0ZWRfbXNnID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAgc3Rv
cHBpbmdfcXVldWUucHV0KG1zZykKKyAgICAgICAgdGhyZWFkcyA9IFtjaGlsZF90aHJlYWRdCisg
ICAgICAgIHJldHVybiBydW5uZXIuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRocmVhZHMs
IE5vbmUpCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1w
bGVtZW50CisgICAgICAgIHJldHVybgorICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29u
ZV90aHJlYWQoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0ZWQpCisKKyAg
ICBkZWYgdGVzdF9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudC4K
KyAgICAgICAgcmV0dXJuCisgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVh
ZCgnJykKKyAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCdLZXlib2Fy
ZEludGVycnVwdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnRlcnJ1cHRlZCkKKworICAg
IGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudC4KKyAg
ICAgICAgcmV0dXJuCisgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgn
JykKKyAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAgICAgICBv
Yy5jYXB0dXJlX291dHB1dCgpCisgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3Ro
cmVhZCgnVGltZW91dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0ZWQpCisg
ICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxm
KToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50LgorICAgICAgICByZXR1cm4KKyAgICAgICAg
aW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcnKQorICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJ1bl9vbmVfdGhyZWFkLCAnRXhjZXB0aW9uJykKKwor
CitjbGFzcyBTdGFuZGFsb25lRnVuY3Rpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
ZGVmIHRlc3RfbG9nX3dlZGdlZF90aHJlYWQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxl
bWVudAorICAgICAgICByZXR1cm4KKyAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENh
cHR1cmUoKQorICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCisgICAgICAgIGxvZ2dlciA9IHJ1
bl93ZWJraXRfdGVzdHMuX2xvZworICAgICAgICBhc3RyZWFtID0gYXJyYXlfc3RyZWFtLkFycmF5
U3RyZWFtKCkKKyAgICAgICAgaGFuZGxlciA9IFRlc3RIYW5kbGVyKGFzdHJlYW0pCisgICAgICAg
IGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKyAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBR
dWV1ZS5RdWV1ZSgpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAg
ICAgICBjaGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19x
dWV1ZSkKKyAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgbXNnID0gc3RhcnRp
bmdfcXVldWUuZ2V0KCkKKworICAgICAgICBydW5fd2Via2l0X3Rlc3RzLl9sb2dfd2VkZ2VkX3Ro
cmVhZChjaGlsZF90aHJlYWQpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgnJykKKyAgICAg
ICAgY2hpbGRfdGhyZWFkLmpvaW4odGltZW91dD0xLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShhc3RyZWFtLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2hpbGRfdGhy
ZWFkLmlzQWxpdmUoKSkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQorCisKK2lmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fbWFjLnB5CmluZGV4IGQxYzM4M2MxM2VjMmYxM2FmNWZiMWYxNTQwNTc5YzRjODg5ZmRkNjMu
LjdkNzA0YzNhODlhZjU0YWQwZGFmMDc0OGI0ZDg4OWE2MjJhY2U0Y2QgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFj
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW1fbWFjLnB5CkBAIC02MiwxNSArNjIsNiBAQCBjbGFzcyBDaHJvbWl1bU1hY1BvcnQo
Y2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgICAgICAgICAgICAgICAgJ01hY0J1aWxk
SW5zdHJ1Y3Rpb25zJykKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIGRlZmF1bHRf
Y2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIHRvIHJ1biBz
aW5nbGUtdGhyZWFkZWQgZm9yIG5vdy4gU2VlCi0gICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NTUzLiBVbmZvcnR1bmF0ZWx5IHRoaXMKLSAgICAgICAg
IyByb3V0aW5lIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGxvZ2dlciBpcyBjb25maWd1cmVk
LCBzbyBpZiB3ZQotICAgICAgICAjIHRyeSB0byBfbG9nLndhcm5pbmcoKSwgaXQgZ2V0cyB0aHJv
d24gYXdheS4KLSAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJE
ZWZhdWx0aW5nIHRvIG9uZSBjaGlsZCAtIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mzg1NTNcbiIpCi0gICAgICAgIHJldHVybiAxCi0KICAgICBkZWYgZHJpdmVy
X25hbWUoc2VsZik6CiAgICAgICAgICIiIm5hbWUgZm9yIHRoaXMgcG9ydCdzIGVxdWl2YWxlbnQg
b2YgRHVtcFJlbmRlclRyZWUuIiIiCiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigndXNlX2Ry
dCcpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L21hYy5weQppbmRleCA2OTZlMzM5OGVhNGIyOGFjNzYyMjU5MDdkYzM2MmZmYzNmYjg2
ZjllLi43MmY5MWQ4MzgyMTVhZjRiYzQ0ZjFkYzFmMDY1NWRhZGM3ZDMzNmZmIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5w
eQpAQCAtNDcsMTUgKzQ3LDYgQEAgY2xhc3MgTWFjUG9ydChXZWJLaXRQb3J0KToKICAgICAgICAg
a3dhcmdzLnNldGRlZmF1bHQoJ3BvcnRfbmFtZScsICdtYWMnICsgc2VsZi52ZXJzaW9uKCkpCiAg
ICAgICAgIFdlYktpdFBvcnQuX19pbml0X18oc2VsZiwgKiprd2FyZ3MpCiAKLSAgICBkZWYgZGVm
YXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IG5ldy1ydW4td2Vi
a2l0LXRlc3RzIGlzIHVuc3RhYmxlIG9uIE1hYyBydW5uaW5nIG1vcmUgdGhhbgotICAgICAgICAj
IGZvdXIgdGhyZWFkcyBpbiBwYXJhbGxlbC4KLSAgICAgICAgIyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NjIyCi0gICAgICAgIGNoaWxkX3Byb2Nlc3NlcyA9
IFdlYktpdFBvcnQuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZikKLSAgICAgICAgaWYgY2hp
bGRfcHJvY2Vzc2VzID4gNDoKLSAgICAgICAgICAgIHJldHVybiA0Ci0gICAgICAgIHJldHVybiBj
aGlsZF9wcm9jZXNzZXMKLQogICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKICAg
ICAgICAgcG9ydF9uYW1lcyA9IFtdCiAgICAgICAgIGlmIHNlbGYuX25hbWUgPT0gJ21hYy10aWdl
cic6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3Rlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3Rlc3QucHkKaW5kZXggZmY0MDg2Yzc0ZGMxODJiYTg0NzEyM2U2MzU1MDBkMTQ0MTFk
OTkzZS4uMWQ5NmJkOTYyYjkxNmQ5ZTI0MTRmYmU4ZmI1NjkzNTk3ZjBkYzcwNSAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVz
dC5weQpAQCAtMTM2LDYgKzEzNiw5IEBAIGNsYXNzIFRlc3RQb3J0KGJhc2UuUG9ydCk6CiAgICAg
ZGVmIGNoZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApOgogICAgICAgICByZXR1cm4gVHJ1ZQog
CisgICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgorICAgICAgICByZXR1cm4g
MgorCiAgICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfY29udGVudHMsIGFjdHVhbF9j
b250ZW50cywKICAgICAgICAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lPU5vbmUpOgogICAgICAg
ICBkaWZmZWQgPSBhY3R1YWxfY29udGVudHMgIT0gZXhwZWN0ZWRfY29udGVudHMKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzLnB5CmluZGV4IGYxMDNiY2Q2ZDdkOTA2YzAzZDc3MjM5ZTNiYjNkM2Q5MDQ3
OTA1OTkuLjkyNWJmZTcyMGJlYWNmYmNiZTVkZjdiZGVkNzA2NzhiZmQ3NWJlYWYgMTAwNzU1Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNjcsNiArNjcsNyBAQCBpbXBvcnQgdHJhY2ViYWNrCiBm
cm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZAogZnJvbSBs
YXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IKIGZyb20g
bGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9y
dCByb3V0ZXIKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBm
cm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBmcm9tIGxheW91dF9wYWNr
YWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKQEAgLTg5LDMyICs5MCwxOSBAQCBMQVlPVVRfVEVTVFNf
RElSRUNUT1JZID0gIkxheW91dFRlc3RzIiArIG9zLnNlcAogCiBUZXN0RXhwZWN0YXRpb25zRmls
ZSA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnNGaWxlCiAKLQogY2xhc3MgVGVz
dEluZm86CiAgICAgIiIiR3JvdXBzIGluZm9ybWF0aW9uIGFib3V0IGEgdGVzdCBmb3IgZWFzeSBw
YXNzaW5nIG9mIGRhdGEuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgZmlsZW5h
bWUsIHRpbWVvdXQpOgotICAgICAgICAiIiJHZW5lcmF0ZXMgdGhlIFVSSSBhbmQgc3RvcmVzIHRo
ZSBmaWxlbmFtZSBhbmQgdGltZW91dCBmb3IgdGhpcyB0ZXN0LgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBmaWxlbmFtZSwgdGltZW91dCk6CisgICAgICAgICIiIkJ1bmRsZXMgdGhlIGZpbGVuYW1l
IGFuZCB0aW1lb3V0IGZvciB0aGlzIHRlc3QuCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgZmls
ZW5hbWU6IEZ1bGwgcGF0aCB0byB0aGUgdGVzdC4KICAgICAgICAgICB0aW1lb3V0OiBUaW1lb3V0
IGZvciBydW5uaW5nIHRoZSB0ZXN0IGluIFRlc3RTaGVsbC4KICAgICAgICAgICAiIiIKICAgICAg
ICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCi0gICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0g
ICAgICAgIHNlbGYudXJpID0gcG9ydC5maWxlbmFtZV90b191cmkoZmlsZW5hbWUpCiAgICAgICAg
IHNlbGYudGltZW91dCA9IHRpbWVvdXQKLSAgICAgICAgc2VsZi5faW1hZ2VfY2hlY2tzdW0gPSAt
MQotCi0gICAgZGVmIGltYWdlX2hhc2goc2VsZik6Ci0gICAgICAgICMgUmVhZCB0aGUgaW1hZ2Vf
aGFzaCBsYXppbHkgdG8gcmVkdWNlIHN0YXJ0dXAgdGltZS4KLSAgICAgICAgIyBUaGlzIGNsYXNz
IGlzIGFjY2Vzc2VkIGFjcm9zcyB0aHJlYWRzLCBidXQgb25seSBvbmUgdGhyZWFkIHNob3VsZAot
ICAgICAgICAjIGV2ZXIgYmUgZGVhbGluZyB3aXRoIGFueSBnaXZlbiBUZXN0SW5mbyBzbyBubyBs
b2NraW5nIGlzIG5lZWRlZC4KLSAgICAgICAgIwotICAgICAgICAjIE5vdGUgdGhhdCB3ZSB1c2Ug
LTEgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlbid0IHJlYWQgdGhlIHZhbHVlLAotICAgICAgICAj
IGJlY2F1c2UgZXhwZWN0ZWRfY2hlY2tzdW0oKSByZXR1cm5zIGEgc3RyaW5nIG9yIE5vbmUuCi0g
ICAgICAgIGlmIHNlbGYuX2ltYWdlX2NoZWNrc3VtID09IC0xOgotICAgICAgICAgICAgc2VsZi5f
aW1hZ2VfY2hlY2tzdW0gPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHNlbGYuZmlsZW5h
bWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9pbWFnZV9jaGVja3N1bQorICAgICAgICBzZWxmLnVy
aSA9IE5vbmUKKyAgICAgICAgc2VsZi5pbWFnZV9jaGVja3N1bSA9IE5vbmUKIAogCiBjbGFzcyBS
ZXN1bHRTdW1tYXJ5KG9iamVjdCk6CkBAIC0xNjEsNiArMTQ5LDcgQEAgY2xhc3MgUmVzdWx0U3Vt
bWFyeShvYmplY3QpOgogICAgICAgICAgICAgc2VsZi51bmV4cGVjdGVkICs9IDEKIAogCisKIGRl
ZiBzdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHBvcnRfb2JqLCBleHBlY3RhdGlvbnMsIHJl
c3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlfc3Vt
bWFyeSk6CiAgICAgIiIiU3VtbWFyaXplIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgYXMgYSBkaWN0
LgpAQCAtMjUwLDMzICsyMzksMzIgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAjIGluIER1bXBS
ZW5kZXJUcmVlLgogICAgIERFRkFVTFRfVEVTVF9USU1FT1VUX01TID0gNiAqIDEwMDAKIAotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlciwgcm91dGVyKToKICAgICAgICAgIiIi
SW5pdGlhbGl6ZSB0ZXN0IHJ1bm5lciBkYXRhIHN0cnVjdHVyZXMuCiAKICAgICAgICAgQXJnczoK
ICAgICAgICAgICBwb3J0OiBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQtc3BlY2lmaWMKICAg
ICAgICAgICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMKICAg
ICAgICAgICBwcmludGVyOiBhIFByaW50ZXIgb2JqZWN0IHRvIHJlY29yZCB1cGRhdGVzIHRvLgor
ICAgICAgICAgIHJvdXRlcjogb2JqZWN0IHVzZWQgdG8gY29tbXVuaWNhdGUgdy8gd29ya2Vycy4K
ICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29w
dGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmludGVyCisgICAgICAg
IHNlbGYuX3JvdXRlciA9IHJvdXRlcgogCiAgICAgICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBu
ZWVkIHRvIGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KICAgICAgICAgIyBzZWxmLl93
ZWJzb2NrZXRfc2VjdXJlX3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCiAg
ICAgICAgICMgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHVzZV90bHM9VHJ1ZSwg
cG9ydD05MzIzKQogCi0gICAgICAgICMgYSBsaXN0IG9mIFRlc3RUeXBlIG9iamVjdHMKLSAgICAg
ICAgc2VsZi5fdGVzdF90eXBlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQotICAgICAgICBp
ZiBvcHRpb25zLnBpeGVsX3Rlc3RzOgotICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcy5hcHBl
bmQoaW1hZ2VfZGlmZi5JbWFnZURpZmYpCi0KICAgICAgICAgIyBhIHNldCBvZiB0ZXN0IGZpbGVz
LCBhbmQgdGhlIHNhbWUgdGVzdHMgYXMgYSBsaXN0CiAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMg
PSBzZXQoKQogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBOb25lCi0gICAgICAgIHNl
bGYuX3Jlc3VsdF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKICAgICAgICAgc2VsZi5fcmV0cnlpbmcg
PSBGYWxzZQogCisgICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiByb3V0ZXIu
Um91dGVyLk1BTkFHRVIKKwogICAgIGRlZiBjb2xsZWN0X3Rlc3RzKHNlbGYsIGFyZ3MsIGxhc3Rf
dW5leHBlY3RlZF9yZXN1bHRzKToKICAgICAgICAgIiIiRmluZCBhbGwgdGhlIGZpbGVzIHRvIHRl
c3QuCiAKQEAgLTUwMiwxMCArNDkwLDkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgIiIi
UmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgVGVzdEluZm8gb2JqZWN0IGZvciB0aGUgZmlsZS4gTW9z
dGx5IHRoaXMKICAgICAgICAgaXMgdXNlZCBmb3IgbG9va2luZyB1cCB0aGUgdGltZW91dCB2YWx1
ZSAoaW4gbXMpIHRvIHVzZSBmb3IgdGhlIGdpdmVuCiAgICAgICAgIHRlc3QuIiIiCi0gICAgICAg
IGlmIHNlbGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxlLCB0ZXN0X2V4cGVj
dGF0aW9ucy5TTE9XKToKLSAgICAgICAgICAgIHJldHVybiBUZXN0SW5mbyhzZWxmLl9wb3J0LCB0
ZXN0X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zbG93
X3RpbWVfb3V0X21zKQotICAgICAgICByZXR1cm4gVGVzdEluZm8oc2VsZi5fcG9ydCwgdGVzdF9m
aWxlLCBzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zKQorICAgICAgICBpZiBzZWxmLl90ZXN0X2lz
X3Nsb3codGVzdF9maWxlKToKKyAgICAgICAgICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0X2ZpbGUs
IHNlbGYuX29wdGlvbnMuc2xvd190aW1lX291dF9tcykKKyAgICAgICAgcmV0dXJuIFRlc3RJbmZv
KHRlc3RfZmlsZSwgc2VsZi5fb3B0aW9ucy50aW1lX291dF9tcykKIAogICAgIGRlZiBfdGVzdF9y
ZXF1aXJlc19sb2NrKHNlbGYsIHRlc3RfZmlsZSk6CiAgICAgICAgICIiIlJldHVybiBUcnVlIGlm
IHRoZSB0ZXN0IG5lZWRzIHRvIGJlIGxvY2tlZCB3aGVuCkBAIC01MTMsMjMgKzUwMCwyMiBAQCBj
bGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzcGxpdF9wYXRoID0gdGVzdF9maWxlLnNwbGl0KG9z
LnNlcCkKICAgICAgICAgcmV0dXJuICdodHRwJyBpbiBzcGxpdF9wYXRoIG9yICd3ZWJzb2NrZXQn
IGluIHNwbGl0X3BhdGgKIAotICAgIGRlZiBfZ2V0X3Rlc3RfZmlsZV9xdWV1ZShzZWxmLCB0ZXN0
X2ZpbGVzKToKLSAgICAgICAgIiIiQ3JlYXRlIHRoZSB0aHJlYWQgc2FmZSBxdWV1ZSBvZiBsaXN0
cyBvZiAodGVzdCBmaWxlbmFtZXMsIHRlc3QgVVJJcykKLSAgICAgICAgdHVwbGVzLiBFYWNoIFRl
c3RTaGVsbFRocmVhZCBwdWxscyBhIGxpc3QgZnJvbSB0aGlzIHF1ZXVlIGFuZCBydW5zCi0gICAg
ICAgIHRob3NlIHRlc3RzIGluIG9yZGVyIGJlZm9yZSBncmFiYmluZyB0aGUgbmV4dCBhdmFpbGFi
bGUgbGlzdC4KKyAgICBkZWYgX3Rlc3RfaXNfc2xvdyhzZWxmLCB0ZXN0X2ZpbGUpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fZXhwZWN0YXRpb25zLmhhc19tb2RpZmllcih0ZXN0X2ZpbGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRp
b25zLlNMT1cpCiAKLSAgICAgICAgU2hhcmQgdGhlIGxpc3RzIGJ5IGRpcmVjdG9yeS4gVGhpcyBo
ZWxwcyBlbnN1cmUgdGhhdCB0ZXN0cyB0aGF0IGRlcGVuZAotICAgICAgICBvbiBlYWNoIG90aGVy
IChha2EgYmFkIHRlc3RzISkgY29udGludWUgdG8gcnVuIHRvZ2V0aGVyIGFzIG1vc3QKLSAgICAg
ICAgY3Jvc3MtdGVzdHMgZGVwZW5kZW5jaWVzIHRlbmQgdG8gb2NjdXIgd2l0aGluIHRoZSBzYW1l
IGRpcmVjdG9yeS4KKyAgICBkZWYgX3NoYXJkX3Rlc3RzKHNlbGYsIHRlc3RfZmlsZXMsIHNpbmds
ZV90aHJlYWRlZCk6CisgICAgICAgICIiIkdyb3VwcyB0ZXN0cyBpbnRvIGJhdGNoZXMuCisgICAg
ICAgIFRoaXMgaGVscHMgZW5zdXJlIHRoYXQgdGVzdHMgdGhhdCBkZXBlbmQgb24gZWFjaCBvdGhl
ciAoYWthIGJhZCB0ZXN0cyEpCisgICAgICAgIGNvbnRpbnVlIHRvIHJ1biB0b2dldGhlciBhcyBt
b3N0IGNyb3NzLXRlc3RzIGRlcGVuZGVuY2llcyB0ZW5kIHRvCisgICAgICAgIG9jY3VyIHdpdGhp
biB0aGUgc2FtZSBkaXJlY3RvcnkuCiAKICAgICAgICAgUmV0dXJuOgotICAgICAgICAgIFRoZSBR
dWV1ZSBvZiBsaXN0cyBvZiBUZXN0SW5mbyBvYmplY3RzLgorICAgICAgICAgICAgQSBsaXN0IG9m
IGxpc3RzIG9mIFRlc3RJbmZvIG9iamVjdHMKICAgICAgICAgIiIiCi0KICAgICAgICAgdGVzdF9s
aXN0cyA9IFtdCiAgICAgICAgIHRlc3RzX3RvX2h0dHBfbG9jayA9IFtdCi0gICAgICAgIGlmIChz
ZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCBvcgotICAgICAgICAgICAg
c2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCkpOgorICAgICAgICBpZiBzaW5nbGVfdGhyZWFkZWQ6
CiAgICAgICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CiAgICAgICAgICAgICAg
ICAgdGVzdF9pbmZvID0gc2VsZi5fZ2V0X3Rlc3RfaW5mb19mb3JfZmlsZSh0ZXN0X2ZpbGUpCiAg
ICAgICAgICAgICAgICAgaWYgc2VsZi5fdGVzdF9yZXF1aXJlc19sb2NrKHRlc3RfZmlsZSk6CkBA
IC01NjgsMjMgKzU1NCw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICB0ZXN0c190
b19odHRwX2xvY2sucmV2ZXJzZSgpCiAgICAgICAgICAgICB0ZXN0X2xpc3RzLmluc2VydCgwLCAo
InRlc3RzX3RvX2h0dHBfbG9jayIsIHRlc3RzX3RvX2h0dHBfbG9jaykpCiAKLSAgICAgICAgZmls
ZW5hbWVfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlz
dHM6Ci0gICAgICAgICAgICBmaWxlbmFtZV9xdWV1ZS5wdXQoaXRlbSkKLSAgICAgICAgcmV0dXJu
IGZpbGVuYW1lX3F1ZXVlCi0KLSAgICBkZWYgX2dldF90ZXN0X2FyZ3Moc2VsZiwgaW5kZXgpOgot
ICAgICAgICAiIiJSZXR1cm5zIHRoZSB0dXBsZSBvZiBhcmd1bWVudHMgZm9yIHRlc3RzIGFuZCBm
b3IgRHVtcFJlbmRlclRyZWUuIiIiCi0gICAgICAgIHRlc3RfYXJncyA9IHRlc3RfdHlwZV9iYXNl
LlRlc3RBcmd1bWVudHMoKQotICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGggPSBOb25lCi0gICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6Ci0gICAgICAgICAgICBwbmdfcGF0aCA9
IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInBuZ19yZXN1bHQlcy5wbmciICUgaW5kZXgpCi0g
ICAgICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGggPSBwbmdfcGF0aAotICAgICAgICB0ZXN0X2Fy
Z3MubmV3X2Jhc2VsaW5lID0gc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUKLSAgICAgICAgdGVz
dF9hcmdzLnJlc2V0X3Jlc3VsdHMgPSBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMKLQotICAg
ICAgICByZXR1cm4gdGVzdF9hcmdzCisgICAgICAgIHJldHVybiB0ZXN0X2xpc3RzCiAKICAgICBk
ZWYgX2NvbnRhaW5zX3Rlc3RzKHNlbGYsIHN1YmRpcik6CiAgICAgICAgIGZvciB0ZXN0X2ZpbGUg
aW4gc2VsZi5fdGVzdF9maWxlczoKQEAgLTU5Miw0MCArNTYyLDYgQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKIAot
ICAgIGRlZiBfaW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzKHNlbGYsIHRlc3Rf
ZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJJbnN0YW50aXRhdGVzIGFuZCBzdGFydHMgdGhlIFRl
c3RTaGVsbFRocmVhZChzKS4KLQotICAgICAgICBSZXR1cm46Ci0gICAgICAgICAgVGhlIGxpc3Qg
b2YgdGhyZWFkcy4KLSAgICAgICAgIiIiCi0gICAgICAgIGZpbGVuYW1lX3F1ZXVlID0gc2VsZi5f
Z2V0X3Rlc3RfZmlsZV9xdWV1ZSh0ZXN0X2ZpbGVzKQotCi0gICAgICAgICMgSW5zdGFudGlhdGUg
VGVzdFNoZWxsVGhyZWFkcyBhbmQgc3RhcnQgdGhlbS4KLSAgICAgICAgdGhyZWFkcyA9IFtdCi0g
ICAgICAgIGZvciBpIGluIHhyYW5nZShpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMp
KToKLSAgICAgICAgICAgICMgQ3JlYXRlIHNlcGFyYXRlIFRlc3RUeXBlcyBpbnN0YW5jZXMgZm9y
IGVhY2ggdGhyZWFkLgotICAgICAgICAgICAgdGVzdF90eXBlcyA9IFtdCi0gICAgICAgICAgICBm
b3IgdGVzdF90eXBlIGluIHNlbGYuX3Rlc3RfdHlwZXM6Ci0gICAgICAgICAgICAgICAgdGVzdF90
eXBlcy5hcHBlbmQodGVzdF90eXBlKHNlbGYuX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKLQotICAgICAg
ICAgICAgdGVzdF9hcmdzID0gc2VsZi5fZ2V0X3Rlc3RfYXJncyhpKQotICAgICAgICAgICAgdGhy
ZWFkID0gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFNoZWxsVGhyZWFkKHNlbGYuX3BvcnQs
Ci0gICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucywgZmlsZW5hbWVfcXVldWUsIHNlbGYuX3Jl
c3VsdF9xdWV1ZSwKLSAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MpCi0gICAg
ICAgICAgICBpZiBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKToKLSAgICAgICAgICAgICAgICB0
aHJlYWQucnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQotICAgICAgICAgICAgdGhy
ZWFkcy5hcHBlbmQodGhyZWFkKQotCi0gICAgICAgIHJldHVybiB0aHJlYWRzCi0KLSAgICBkZWYg
X2lzX3NpbmdsZV90aHJlYWRlZChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHdl
IHNob3VsZCBydW4gYWxsIHRoZSB0ZXN0cyBpbiB0aGUgbWFpbiB0aHJlYWQuIiIiCi0gICAgICAg
IHJldHVybiBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID09IDEKLQogICAgIGRl
ZiBfcnVuX3Rlc3RzKHNlbGYsIGZpbGVfbGlzdCwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAi
IiJSdW5zIHRoZSB0ZXN0cyBpbiB0aGUgZmlsZV9saXN0LgogCkBAIC02NDAsNzMgKzU3Niw1NyBA
QCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICBpbiB0aGUgZm9ybSB7ZmlsZW5hbWU6
ZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0KICAgICAgICAgICAgIHJlc3Vs
dF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRoIHRoZSByZXN1bHRzCiAg
ICAgICAgICIiIgorICAgICAgICBudW1fd29ya2VycyA9IGludChzZWxmLl9vcHRpb25zLmNoaWxk
X3Byb2Nlc3NlcykKKworICAgICAgICBzZWxmLl9jdXJyZW50X2ZpbGVfbGlzdCA9IGZpbGVfbGlz
dAorICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gcmVzdWx0X3N1bW1hcnkK
KyAgICAgICAgcm91dGVyID0gc2VsZi5fcm91dGVyCisKKyAgICAgICAgc2VsZi5fYWxsX3Jlc3Vs
dHMgPSBbXQorICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuX3dv
cmtlcl9zdGF0cyA9IHt9CisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1fd29ya2Vycyk6Cisg
ICAgICAgICAgICBuYW1lID0gJ3dvcmtlci0lZCcgJSBpCisgICAgICAgICAgICBzZWxmLl93b3Jr
ZXJfc3RhdHNbbmFtZV0gPSB7fQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW25hbWVd
WyduYW1lJ10gPSBuYW1lCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHNbbmFtZV1bJ251
bV90ZXN0cyddID0gMAorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW25hbWVdWyd0b3Rh
bF90aW1lJ10gPSAwCisKKyAgICAgICAgdGVzdF9saXN0cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZp
bGVfbGlzdCwKKyAgICAgICAgICAgIG51bV93b3JrZXJzID09IDEgb3Igc2VsZi5fb3B0aW9ucy5l
eHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCisgICAgICAgIGZvciB0ZXN0X2xpc3QgaW4gdGVz
dF9saXN0czoKKyAgICAgICAgICAgIHJvdXRlci5wb3N0X3Rlc3RfbGlzdCh0ZXN0X2xpc3QpCisK
KyAgICAgICAgIyBUZWxsIHRoZSB3b3JrZXJzIHRvIHNodXQgZG93biBhZnRlciB0aGV5J3JlIGRv
bmUgcnVubmluZyBhbGwgdGhlCisgICAgICAgICMgdGVzdHMuCisgICAgICAgIGZvciBpIGluIHhy
YW5nZShudW1fd29ya2Vycyk6CisgICAgICAgICAgICByb3V0ZXIucG9zdF9zdG9wKCkKKwogICAg
ICAgICAjIEZJWE1FOiBXZSBzaG91bGQgdXNlIHdlYmtpdHB5LnRvb2wuZ3JhbW1hci5wbHVyYWxp
emUgaGVyZS4KICAgICAgICAgcGx1cmFsID0gIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzX3Np
bmdsZV90aHJlYWRlZCgpOgorICAgICAgICBpZiBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9j
ZXNzZXMpID4gMToKICAgICAgICAgICAgIHBsdXJhbCA9ICJzIgogICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMlcyAuLi4nICUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSwgcGx1cmFsKSkKLSAg
ICAgICAgdGhyZWFkcyA9IHNlbGYuX2luc3RhbnRpYXRlX2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
cyhmaWxlX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCiAKLSAgICAgICAga2V5Ym9hcmRf
aW50ZXJydXB0ZWQgPSBzZWxmLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAodGhyZWFkX3RpbWluZ3MsIHRlc3RfdGlt
aW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpID0gXAotICAgICAgICAgICAgc2VsZi5fY29s
bGVjdF90aW1pbmdfaW5mbyh0aHJlYWRzKQorICAgICAgICByb3V0ZXIuc3RhcnRfd29ya2Vycygp
CiAKLSAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3Ms
IHRlc3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykK
KyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4u
IikKIAotICAgIGRlZiBfd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2goc2VsZiwgdGhyZWFkcywg
cmVzdWx0X3N1bW1hcnkpOgogICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCiAg
ICAgICAgIHRyeToKLSAgICAgICAgICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgdGhyZWFkcyB3
YWl0aW5nIGZvciB0aGVtIHRvIGZpbmlzaC4KLSAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2Fs
aXZlID0gVHJ1ZQotICAgICAgICAgICAgd2hpbGUgc29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAg
ICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBGYWxzZQotICAgICAgICAgICAgICAg
IHQgPSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoK
LSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX2luZm8gPSB0aHJlYWQuZXhjZXB0aW9uX2lu
Zm8oKQotICAgICAgICAgICAgICAgICAgICBpZiBleGNlcHRpb25faW5mbyBpcyBub3QgTm9uZToK
LSAgICAgICAgICAgICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2VwdGlv
biBoZXJlIHRvIG1ha2UgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICMgY2xlYXIgdGhhdCB0
ZXN0aW5nIHdhcyBhYm9ydGVkLiBPdGhlcndpc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAj
IHRoZSB0ZXN0cyB0aGF0IGRpZCBub3QgcnVuIHdvdWxkIGJlIGFzc3VtZWQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICMgdG8gaGF2ZSBwYXNzZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBy
YWlzZSBleGNlcHRpb25faW5mb1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlvbl9pbmZv
WzJdCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgdGhyZWFkLmlzQWxpdmUoKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgbmV4dF90aW1lb3V0ID0gdGhyZWFkLm5leHRfdGltZW91dCgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0KToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbG9nX3dlZGdlZF90aHJlYWQodGhyZWFkKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZC5jbGVhcl9uZXh0X3RpbWVvdXQoKQot
Ci0gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKLQot
ICAgICAgICAgICAgICAgIGlmIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgotICAgICAgICAgICAgICAg
ICAgICB0aW1lLnNsZWVwKDAuMDEpCi0KKyAgICAgICAgICAgIHJvdXRlci5sb29wKHNlbGYpCiAg
ICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHJvdXRlci5jYW5j
ZWxfd29ya2VycygpCisgICAgICAgICAgICBfbG9nLmluZm8oIkludGVycnVwdGVkLCBleGl0aW5n
IikKICAgICAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gVHJ1ZQotICAgICAgICAgICAg
Zm9yIHRocmVhZCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgICAgIHRocmVhZC5jYW5jZWwoKQot
Ci0gICAgICAgIHJldHVybiBrZXlib2FyZF9pbnRlcnJ1cHRlZAotCi0gICAgZGVmIF9jb2xsZWN0
X3RpbWluZ19pbmZvKHNlbGYsIHRocmVhZHMpOgotICAgICAgICB0ZXN0X3RpbWluZ3MgPSB7fQot
ICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9IFtdCi0gICAgICAgIHRocmVhZF90aW1p
bmdzID0gW10KLQotICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICB0
aHJlYWRfdGltaW5ncy5hcHBlbmQoeyduYW1lJzogdGhyZWFkLmdldE5hbWUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bV90ZXN0cyc6IHRocmVhZC5nZXRfbnVtX3Rl
c3RzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0b3RhbF90aW1lJzog
dGhyZWFkLmdldF90b3RhbF90aW1lKCl9KQotICAgICAgICAgICAgdGVzdF90aW1pbmdzLnVwZGF0
ZSh0aHJlYWQuZ2V0X3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzKCkpCi0gICAgICAgICAgICBpbmRp
dmlkdWFsX3Rlc3RfdGltaW5ncy5leHRlbmQodGhyZWFkLmdldF90ZXN0X3Jlc3VsdHMoKSkKKyAg
ICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBVbmV4cGVjdGVkIGV4Y2VwdGlvbjsgZG9uJ3Qg
dHJ5IHRvIGNsZWFuIHVwIHdvcmtlcnMuCisgICAgICAgICAgICBfbG9nLmluZm8oIkV4Y2VwdGlv
biByYWlzZWQsIGV4aXRpbmciKQorICAgICAgICAgICAgcmFpc2UKIAotICAgICAgICByZXR1cm4g
KHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQor
ICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCBzZWxmLl93b3JrZXJfc3RhdHMu
dmFsdWVzKCksCisgICAgICAgICAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMsIHNlbGYuX2FsbF9y
ZXN1bHRzKQogCiAgICAgZGVmIG5lZWRzX2h0dHAoc2VsZik6CiAgICAgICAgICIiIlJldHVybnMg
d2hldGhlciB0aGUgdGVzdCBydW5uZXIgbmVlZHMgYW4gSFRUUCBzZXJ2ZXIuIiIiCkBAIC04MDEs
MTIgKzcyMSwxMiBAQCBjbGFzcyBUZXN0UnVubmVyOgogCiAgICAgICAgIGVuZF90aW1lID0gdGlt
ZS50aW1lKCkKIAotICAgICAgICBzZWxmLl9wcmludF90aW1pbmdfc3RhdGlzdGljcyhlbmRfdGlt
ZSAtIHN0YXJ0X3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
cmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgI3NlbGYuX3ByaW50X3Rp
bWluZ19zdGF0aXN0aWNzKGVuZF90aW1lIC0gc3RhcnRfdGltZSwKKyAgICAgICAgIyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisgICAg
ICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5n
cywKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5
KQogCi0gICAgICAgIHNlbGYuX3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQor
ICAgICAgICAjc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCiAKICAg
ICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQpAQCAt
ODU2LDIzICs3NzYsMzcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgX2xvZy5kZWJ1Zygi
c3RvcHBpbmcgaGVscGVyIikKICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2hlbHBlcigpCiAKLSAg
ICBkZWYgdXBkYXRlX3N1bW1hcnkoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgorICAgIGRlZiBoYW5k
bGVfc3RhcnRlZF90ZXN0KHNlbGYsIHNyYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBoYW5k
bGVfZG9uZShzZWxmLCBzcmMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFuZGxlX2Zpbmlz
aGVkX3Rlc3Qoc2VsZiwgc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CiAgICAgICAgICIiIlVw
ZGF0ZSB0aGUgc3VtbWFyeSBhbmQgcHJpbnQgcmVzdWx0cyB3aXRoIGFueSBjb21wbGV0ZWQgdGVz
dHMuIiIiCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQubG9hZHMoc2VsZi5fcmVzdWx0
X3F1ZXVlLmdldF9ub3dhaXQoKSkKLSAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAg
ICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBl
Y3RhdGlvbnMubWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoCi0gICAgICAgICAgICAgICAgcmVz
dWx0LmZpbGVuYW1lLCByZXN1bHQudHlwZSwgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cykKLSAg
ICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVjdGVkKQotICAgICAgICAg
ICAgZXhwX3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygK
LSAgICAgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUpCi0gICAgICAgICAgICBnb3Rfc3RyID0g
c2VsZi5fZXhwZWN0YXRpb25zLmV4cGVjdGF0aW9uX3RvX3N0cmluZyhyZXN1bHQudHlwZSkKLSAg
ICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3Rl
ZCwgZXhwX3N0ciwgZ290X3N0cikKLSAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfcHJv
Z3Jlc3MocmVzdWx0X3N1bW1hcnksIHNlbGYuX3JldHJ5aW5nLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QpCisgICAgICAgIHNl
bGYuX3VwZGF0ZV93b3JrZXJfc3RhdHMoc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAg
ICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5tYXRjaGVzX2FuX2V4cGVjdGVkX3Jl
c3VsdCgKKyAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSwgcmVzdWx0LnR5cGUsIHNlbGYuX29w
dGlvbnMucGl4ZWxfdGVzdHMpCisgICAgICAgIGV4cF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMu
Z2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoCisgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUpCisg
ICAgICAgIGdvdF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZXhwZWN0YXRpb25fdG9fc3RyaW5n
KHJlc3VsdC50eXBlKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJl
c3VsdCwgZXhwZWN0ZWQsIGV4cF9zdHIsIGdvdF9zdHIpCisKKyAgICAgICAgc2VsZi5fY3VycmVu
dF9yZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0LCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF9wcm9ncmVzcyhzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JldHJ5aW5nLCBzZWxmLl90ZXN0
X2ZpbGVzX2xpc3QpCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX2dyb3VwKHNlbGYsIHNyYywg
Z3JvdXBfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9ncm91
cF9zdGF0c1tncm91cF9uYW1lXSA9IChudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKKworICAgIGRl
ZiBoYW5kbGVfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX2luZm8pOgorICAgICAgICBy
YWlzZSBleGNlcHRpb25faW5mb1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlvbl9pbmZv
WzJdCisKKyAgICBkZWYgX3VwZGF0ZV93b3JrZXJfc3RhdHMoc2VsZiwgc3JjLCByZXN1bHQsIGVs
YXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0c1tzcmNdWyd0b3RhbF90aW1l
J10gKz0gZWxhcHNlZF90aW1lCisgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0c1tzcmNdWydudW1f
dGVzdHMnXSArPSAxCisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzLmFwcGVuZChyZXN1bHQpCiAK
ICAgICBkZWYgX2Nsb2JiZXJfb2xkX3Jlc3VsdHMoc2VsZik6CiAgICAgICAgICMgSnVzdCBjbG9i
YmVyIHRoZSBhY3R1YWwgdGVzdCByZXN1bHRzIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBvdGhlcgpA
QCAtMTAwNSwxMiArOTM5LDEzIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAg
ICAgICAgIChzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zLAogICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fb3B0aW9ucy5zbG93X3RpbWVfb3V0X21zKSkKIAotICAgICAgICBpZiBzZWxmLl9p
c19zaW5nbGVfdGhyZWFkZWQoKToKLSAgICAgICAgICAgIHAucHJpbnRfY29uZmlnKCJSdW5uaW5n
IG9uZSAlcyIgJSBzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCkpCisgICAgICAgIGlmIGludChzZWxm
Ll9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPT0gMToKKyAgICAgICAgICAgcC5wcmludF9jb25m
aWcoIlJ1bm5pbmcgb25lICVzIiAlIHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSkKICAgICAgICAg
ZWxzZToKICAgICAgICAgICAgIHAucHJpbnRfY29uZmlnKCJSdW5uaW5nICVzICVzcyBpbiBwYXJh
bGxlbCIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX29wdGlvbnMuY2hpbGRf
cHJvY2Vzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZHJpdmVy
X25hbWUoKSkpCisgICAgICAgIHAucHJpbnRfY29uZmlnKCJXb3JrZXJzIGFyZSAlcyIgJSBzZWxm
Ll9vcHRpb25zLndvcmtlcnNfYXJlKQogICAgICAgICBwLnByaW50X2NvbmZpZygiIikKIAogICAg
IGRlZiBfcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHNlbGYsIHJlc3VsdF9zdW1tYXJ5
LApAQCAtMTQwMCwxMSArMTMzNSwxMyBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJl
Z3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAgICAg
ICAgIHJldHVybiAwCiAKKyAgICByb3V0ZXJfb2JqID0gcm91dGVyLmdldChwb3J0LCBvcHRpb25z
KQorCiAgICAgIyBXZSB3cmFwIGFueSBwYXJ0cyBvZiB0aGUgcnVuIHRoYXQgYXJlIHNsb3cgb3Ig
bGlrZWx5IHRvIHJhaXNlIGV4Y2VwdGlvbnMKICAgICAjIGluIGEgdHJ5L2ZpbmFsbHkgdG8gZW5z
dXJlIHRoYXQgd2UgY2xlYW4gdXAgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4KICAgICBudW1f
dW5leHBlY3RlZF9yZXN1bHRzID0gLTEKICAgICB0cnk6Ci0gICAgICAgIHRlc3RfcnVubmVyID0g
VGVzdFJ1bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVyKQorICAgICAgICB0ZXN0X3J1bm5lciA9
IFRlc3RSdW5uZXIocG9ydCwgb3B0aW9ucywgcHJpbnRlciwgcm91dGVyX29iaikKICAgICAgICAg
dGVzdF9ydW5uZXIuX3ByaW50X2NvbmZpZygpCiAKICAgICAgICAgcHJpbnRlci5wcmludF91cGRh
dGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4uIikKQEAgLTE0MzMsNiArMTM3MCw3IEBAIGRlZiBydW4o
cG9ydCwgb3B0aW9ucywgYXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAgICAgICAg
ICAgIF9sb2cuZGVidWcoIlRlc3RpbmcgY29tcGxldGVkLCBFeGl0IHN0YXR1czogJWQiICUKICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cykKICAgICBmaW5hbGx5
OgorICAgICAgICByb3V0ZXJfb2JqLmNsZWFudXAoKQogICAgICAgICBwcmludGVyLmNsZWFudXAo
KQogCiAgICAgcmV0dXJuIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMKQEAgLTE0NDIsOSArMTM4MCwx
NCBAQCBkZWYgX3NldF91cF9kZXJpdmVkX29wdGlvbnMocG9ydF9vYmosIG9wdGlvbnMpOgogICAg
ICIiIlNldHMgdGhlIG9wdGlvbnMgdmFsdWVzIHRoYXQgZGVwZW5kIG9uIG90aGVyIG9wdGlvbnMg
dmFsdWVzLiIiIgogCiAgICAgaWYgbm90IG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzOgotICAgICAg
ICAjIEZJWE1FOiBJbnZlc3RpZ2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qgb2YgdXNpbmcgY3B1
X2NvdW50ICsgMS4KLSAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBvcy5lbnZpcm9u
LmdldCgiV0VCS0lUX1RFU1RfQ0hJTERfUFJPQ0VTU0VTIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIocG9ydF9vYmouZGVmYXVsdF9jaGlsZF9w
cm9jZXNzZXMoKSkpCisgICAgICAgIGlmIG9wdGlvbnMud29ya2Vyc19hcmUgPT0gJ2lubGluZSc6
CisgICAgICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9ICIxIgorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBvcy5lbnZpcm9uLmdldCgi
V0VCS0lUX1RFU1RfQ0hJTERfUFJPQ0VTU0VTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHBvcnRfb2JqLmRlZmF1bHRfY2hpbGRfcHJv
Y2Vzc2VzKCkpKQorICAgIGVsaWYgb3B0aW9ucy53b3JrZXJzX2FyZSA9PSAnaW5saW5lJyBhbmQg
b3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPiAxOgorICAgICAgICBfbG9nLndhcm5pbmcoIi0td29y
a2Vycy1hcmU9aW5saW5lIG92ZXJyaWRlcyAtLWNoaWxkLXByb2Nlc3NlcyIpCisgICAgICAgIG9w
dGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gIjEiCiAKICAgICBpZiBub3Qgb3B0aW9ucy5jb25maWd1
cmF0aW9uOgogICAgICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPSBwb3J0X29iai5kZWZhdWx0
X2NvbmZpZ3VyYXRpb24oKQpAQCAtMTQ5NSw3ICsxNDM4LDkgQEAgZGVmIF9jb21wYXRfc2hpbV9v
cHRpb24ob3B0aW9uX25hbWUsICoqa3dhcmdzKToKIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6
CiAgICAgIiIiUHJvdmlkZXMgYSBkZWZhdWx0IHNldCBvZiBjb21tYW5kIGxpbmUgYXJncy4KIAot
ICAgIFJldHVybnMgYSB0dXBsZSBvZiBvcHRpb25zLCBhcmdzIGZyb20gb3B0cGFyc2UiIiIKKyAg
ICBSZXR1cm5zIGEgdHVwbGUgb2Ygb3B0aW9ucywgYXJncyBmcm9tIG9wdHBhcnNlLiIiIgorICAg
IGlmIGFyZ3MgaXMgTm9uZToKKyAgICAgICAgYXJncyA9IHN5cy5hcmd2WzE6XQogCiAgICAgIyBG
SVhNRTogQWxsIG9mIHRoZXNlIG9wdGlvbnMgc2hvdWxkIGJlIHN0b3JlZCBjbG9zZXIgdG8gdGhl
IGNvZGUgd2hpY2gKICAgICAjIEZJWE1FOiBhY3R1YWxseSB1c2VzIHRoZW0uIGNvbmZpZ3VyYXRp
b25fb3B0aW9ucyBzaG91bGQgbW92ZQpAQCAtMTY2OCw5ICsxNjEzLDEzIEBAIGRlZiBwYXJzZV9h
cmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWNoaWxkLXBy
b2Nlc3NlcyIsCiAgICAgICAgICAgICBoZWxwPSJOdW1iZXIgb2YgRHVtcFJlbmRlclRyZWVzIHRv
IHJ1biBpbiBwYXJhbGxlbC4iKSwKICAgICAgICAgIyBGSVhNRTogRGlzcGxheSBkZWZhdWx0IG51
bWJlciBvZiBjaGlsZCBwcm9jZXNzZXMgdGhhdCB3aWxsIHJ1bi4KKyAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oIi0td29ya2Vycy1hcmUiLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0PSJwcm9jZXNzZXMiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9ImNvbnRyb2xzIHdvcmtlciBtb2RlbC4gVmFsaWQgdmFsdWVzIGFyZSAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidpbmxpbmUnLCAndGhyZWFkcycsIGFuZCAn
cHJvY2Vzc2VzJyAoZGVmYXVsdCkuIiksCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCIt
LWV4cGVyaW1lbnRhbC1mdWxseS1wYXJhbGxlbCIsCiAgICAgICAgICAgICBhY3Rpb249InN0b3Jl
X3RydWUiLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgaGVscD0icnVuIGFsbCB0ZXN0cyBp
biBwYXJhbGxlbCIpLAorICAgICAgICAgICAgaGVscD0iUnVuIGFsbCB0ZXN0cyBpbiBwYXJhbGxl
bCAoZG9uJ3Qgc2hhcmQgdGhlbSkuIiksCiAgICAgICAgICMgRklYTUU6IE5lZWQgLS1leGl0LWFm
dGVyLW4tZmFpbHVyZXMgTgogICAgICAgICAjICAgICAgRXhpdCBhZnRlciB0aGUgZmlyc3QgTiBm
YWlsdXJlcyBpbnN0ZWFkIG9mIHJ1bm5pbmcgYWxsIHRlc3RzCiAgICAgICAgICMgRklYTUU6IE5l
ZWQgLS1leGl0LWFmdGVyLW4tY3Jhc2hlcyBOCkBAIC0xNzE3LDMwICsxNjY2LDIyIEBAIGRlZiBw
YXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAgICAgICBoZWxwPSJJZiB0cnVlLCB1cGxvYWQg
ZnVsbCBqc29uIHJlc3VsdHMgdG8gc2VydmVyLiIpLAogICAgIF0KIAorICAgIG11bHRpX3Byb2Nl
c3Nfb3B0aW9ucyA9IFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbWFuYWdlciIs
IGhlbHA9IlRoZSB2YWx1ZSBvZiB0aGUgUXVldWUgIgorICAgICAgICAgICAgIm9iamVjdCB1c2Vk
IGZvciBtZXNzYWdlIHJvdXRpbmciKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0t
d29ya2VyLW51bWJlciIsIGhlbHA9IldvcmtlciBudW1iZXIiKSwKKyAgICBdCisKICAgICBvcHRp
b25fbGlzdCA9IChjb25maWd1cmF0aW9uX29wdGlvbnMgKyBwcmludF9vcHRpb25zICsKICAgICAg
ICAgICAgICAgICAgICBjaHJvbWl1bV9vcHRpb25zICsgcmVzdWx0c19vcHRpb25zICsgdGVzdF9v
cHRpb25zICsKICAgICAgICAgICAgICAgICAgICBtaXNjX29wdGlvbnMgKyByZXN1bHRzX2pzb25f
b3B0aW9ucyArCi0gICAgICAgICAgICAgICAgICAgb2xkX3J1bl93ZWJraXRfdGVzdHNfY29tcGF0
KQorICAgICAgICAgICAgICAgICAgIG11bHRpX3Byb2Nlc3Nfb3B0aW9ucyArIG9sZF9ydW5fd2Vi
a2l0X3Rlc3RzX2NvbXBhdCkKICAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFy
c2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQotCi0gICAgb3B0aW9ucywgYXJncyA9IG9wdGlv
bl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQotCi0gICAgcmV0dXJuIG9wdGlvbnMsIGFyZ3MKLQot
Ci1kZWYgX2xvZ193ZWRnZWRfdGhyZWFkKHRocmVhZCk6Ci0gICAgIiIiTG9nIGluZm9ybWF0aW9u
IGFib3V0IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUuIiIiCi0gICAgaWQgPSB0aHJlYWQuaWQoKQot
ICAgIHN0YWNrID0gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuZmluZF90aHJlYWRfc3RhY2soaWQp
Ci0gICAgYXNzZXJ0KHN0YWNrIGlzIG5vdCBOb25lKQotICAgIF9sb2cuZXJyb3IoIiIpCi0gICAg
X2xvZy5lcnJvcigidGhyZWFkICVzICglZCkgaXMgd2VkZ2VkIiAlICh0aHJlYWQuZ2V0TmFtZSgp
LCBpZCkpCi0gICAgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQubG9nX3N0YWNrKHN0YWNrKQotICAg
IF9sb2cuZXJyb3IoIiIpCisgICAgcmV0dXJuIG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdz
KQogCiAKLWRlZiBtYWluKCk6Ci0gICAgb3B0aW9ucywgYXJncyA9IHBhcnNlX2FyZ3MoKQorZGVm
IG1haW4oYXJndj1Ob25lKToKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VfYXJncyhhcmd2KQog
ICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKICAgICBy
ZXR1cm4gcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzKQogCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0
ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weQppbmRleCAyNjcyNTA4NGE5NmZkNTM3NDI3M2QyZGQ3ZGU1
N2IwMDBmMmNhOTRlLi4yNjI0MWJkYjE3ZjU3OGIzNGM3MDE5ZTViNTc1OWQ5NzZhZjY5NTViIDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTQ3LDcgKzQ3
LDYgQEAgZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRwdXRjYXB0dXJlCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHVzZXIKIGZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzIGltcG9ydCBwb3J0CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQg
cnVuX3dlYmtpdF90ZXN0cwotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2th
Z2UgaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCiBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0LnRlc3QgaW1wb3J0IFRlc3RQb3J0CiBmcm9tIHdlYmtpdHB5LnB5dGhvbjI0LnZl
cnNpb25pbmcgaW1wb3J0IGNvbXBhcmVfdmVyc2lvbgogZnJvbSB3ZWJraXRweS50ZXN0LnNraXAg
aW1wb3J0IHNraXBfaWYKQEAgLTcwLDEyICs2OSwxNSBAQCBkZWYgcGFzc2luZ19ydW4oYXJncz1b
XSwgcG9ydF9vYmo9Tm9uZSwgcmVjb3JkX3Jlc3VsdHM9RmFsc2UsCiAgICAgICAgIG5ld19hcmdz
LmV4dGVuZChbJy0tcGxhdGZvcm0nLCAndGVzdCddKQogICAgIGlmIG5vdCByZWNvcmRfcmVzdWx0
czoKICAgICAgICAgbmV3X2FyZ3MuYXBwZW5kKCctLW5vLXJlY29yZC1yZXN1bHRzJykKKyAgICBp
ZiBub3QgJy0tY2hpbGQtcHJvY2Vzc2VzJyBpbiBhcmdzOgorICAgICAgICBuZXdfYXJncy5leHRl
bmQoWyctLXdvcmtlcnMtYXJlPWlubGluZSddKQorCiAgICAgbmV3X2FyZ3MuZXh0ZW5kKGFyZ3Mp
CiAgICAgaWYgbm90IHRlc3RzX2luY2x1ZGVkOgogICAgICAgICAjIFdlIHVzZSB0aGUgZ2xvYiB0
byB0ZXN0IHRoYXQgZ2xvYmJpbmcgd29ya3MuCiAgICAgICAgIG5ld19hcmdzLmV4dGVuZChbJ3Bh
c3NlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHAvdGVzdHMnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICdodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3dlYnNvY2tldC90ZXN0cycsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2ZhaWx1cmVzL2V4cGVjdGVkLyonXSkKICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1
bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhuZXdfYXJncykKICAgICBpZiBwb3J0X29iaiBpcyBO
b25lOgpAQCAtMTYxLDcgKzE2Myw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICBkZWYgdGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQoc2VsZik6CiAgICAgICAgICMgTm90
ZSB0aGF0IHRoaXMgYWxzbyB0ZXN0cyBydW5uaW5nIGEgdGVzdCBtYXJrZWQgYXMgU0tJUCBpZgog
ICAgICAgICAjIHlvdSBzcGVjaWZ5IGl0IGV4cGxpY2l0bHkuCi0gICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBwYXNzaW5nX3J1biwKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIGxvZ2dpbmdfcnVuLAogICAgICAgICAgICAgWydm
YWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCiAK
ICAgICBkZWYgdGVzdF9sYXN0X3Jlc3VsdHMoc2VsZik6CkBAIC0yMDEsOCArMjAzLDE2IEBAIGNs
YXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3J1bl9mb3Jj
ZShzZWxmKToKICAgICAgICAgIyBUaGlzIHJhaXNlcyBhbiBleGNlcHRpb24gYmVjYXVzZSB3ZSBy
dW4KLSAgICAgICAgIyBmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCwgd2hpY2ggaXMg
bm9ybWFsbHkgU0tJUHBlZC4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwg
bG9nZ2luZ19ydW4sIFsnLS1mb3JjZSddKQorICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVkL2V4
Y2VwdGlvbi5odG1sIGFuZAorICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJkLCB3
aGljaCBhcmUgbm9ybWFsbHkgU0tJUHBlZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9n
Z2luZ19ydW4oWyctLWZvcmNlJ10pCisgICAgICAgICAgICB0ZXN0X3Bhc3NlZCA9IEZhbHNlCisg
ICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgdGVzdF9wYXNzZWQgPSBUcnVl
CisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHRlc3RfcGFz
c2VkID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdF9wYXNzZWQpCiAKICAgICBk
ZWYgdGVzdF9ydW5fcGFydChzZWxmKToKICAgICAgICAgIyBGSVhNRTogdmVyaWZ5ICMgb2YgdGVz
dHMgcnVuCkBAIC0zNTUsNyArMzY1LDYgQEAgY2xhc3MgUmViYXNlbGluZVRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgY29kZWNzLm9wZW4gPSBv
cmlnaW5hbF9vcGVuCiAKLQogY2xhc3MgVGVzdFJ1bm5lcldyYXBwZXIocnVuX3dlYmtpdF90ZXN0
cy5UZXN0UnVubmVyKToKICAgICBkZWYgX2dldF90ZXN0X2luZm9fZm9yX2ZpbGUoc2VsZiwgdGVz
dF9maWxlKToKICAgICAgICAgcmV0dXJuIHRlc3RfZmlsZQpAQCAtMzY3LDcgKzM3Niw4IEBAIGNs
YXNzIFRlc3RSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgbW9ja19wb3J0
LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUgPSBsYW1iZGEgbmFtZTogbmFtZQogICAgICAgICBtb2Nr
X3BvcnQuZmlsZW5hbWVfdG9fdXJpID0gbGFtYmRhIG5hbWU6IG5hbWUKIAotICAgICAgICBydW5u
ZXIgPSBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIocG9ydD1tb2NrX3BvcnQsIG9wdGlvbnM9
TW9jaygpLCBwcmludGVyPU1vY2soKSkKKyAgICAgICAgcnVubmVyID0gcnVuX3dlYmtpdF90ZXN0
cy5UZXN0UnVubmVyKHBvcnQ9bW9ja19wb3J0LAorICAgICAgICAgICAgb3B0aW9ucz1Nb2NrKCks
IHByaW50ZXI9TW9jaygpLCByb3V0ZXI9TW9jaygpKQogICAgICAgICBleHBlY3RlZF9odG1sID0g
dSIiIjxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+TGF5b3V0IFRlc3QgUmVzdWx0cyAodGlt
ZSk8L3RpdGxlPgpAQCAtMzgxLDIwICszOTEsMTAgQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICBodG1sID0gcnVubmVyLl9yZXN1bHRzX2h0bWwoWyJ0
ZXN0X3BhdGgiXSwge30sICJUaXRsZSIsIG92ZXJyaWRlX3RpbWU9InRpbWUiKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGh0bWwsIGV4cGVjdGVkX2h0bWwpCiAKLSAgICBkZWYgcXVldWVfdG9f
bGlzdChzZWxmLCBxdWV1ZSk6Ci0gICAgICAgIHF1ZXVlX2xpc3QgPSBbXQotICAgICAgICB3aGls
ZShUcnVlKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBxdWV1ZV9saXN0LmFw
cGVuZChxdWV1ZS5nZXRfbm93YWl0KCkpCi0gICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6
Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgcmV0dXJuIHF1ZXVlX2xpc3QKLQotICAg
IGRlZiB0ZXN0X2dldF90ZXN0X2ZpbGVfcXVldWUoc2VsZik6CisgICAgZGVmIHRlc3Rfc2hhcmRf
dGVzdHMoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IF9nZXRfdGVzdF9maWxlX3F1ZXVlIGlu
IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciByZWFsbHkKICAgICAgICAgIyBwdXQgdGhlIGh0
dHAgdGVzdHMgZmlyc3QgaW4gdGhlIHF1ZXVlLgotICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVy
V3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpKQotICAg
ICAgICBydW5uZXIuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsID0gRmFsc2UK
KyAgICAgICAgcnVubmVyID0gVGVzdFJ1bm5lcldyYXBwZXIocG9ydD1Nb2NrKCksIG9wdGlvbnM9
TW9jaygpLCBwcmludGVyPU1vY2soKSwgcm91dGVyPU1vY2soKSkKIAogICAgICAgICB0ZXN0X2xp
c3QgPSBbCiAgICAgICAgICAgIkxheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91bmljb2RlLmh0
bSIsCkBAIC00MTUsMTkgKzQxNSwxNSBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwnLAogICAgICAgICBdKQogCi0gICAg
ICAgIHJ1bm5lci5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSAxCi0gICAgICAgIHRlc3RfcXVl
dWVfZm9yX3NpbmdsZV90aHJlYWQgPSBydW5uZXIuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9s
aXN0KQotICAgICAgICBydW5uZXIuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gMgotICAgICAg
ICB0ZXN0X3F1ZXVlX2Zvcl9tdWx0aV90aHJlYWQgPSBydW5uZXIuX2dldF90ZXN0X2ZpbGVfcXVl
dWUodGVzdF9saXN0KQotCi0gICAgICAgIHNpbmdsZV90aHJlYWRfcmVzdWx0cyA9IHNlbGYucXVl
dWVfdG9fbGlzdCh0ZXN0X3F1ZXVlX2Zvcl9zaW5nbGVfdGhyZWFkKQotICAgICAgICBtdWx0aV90
aHJlYWRfcmVzdWx0cyA9IHNlbGYucXVldWVfdG9fbGlzdCh0ZXN0X3F1ZXVlX2Zvcl9tdWx0aV90
aHJlYWQpCisgICAgICAgIHNpbmdsZV90aHJlYWRfcmVzdWx0cyA9IHJ1bm5lci5fc2hhcmRfdGVz
dHModGVzdF9saXN0LCBUcnVlKQorICAgICAgICBtdWx0aV90aHJlYWRfcmVzdWx0cyA9IHJ1bm5l
ci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBGYWxzZSkKIAogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCJ0ZXN0c190b19odHRwX2xvY2siLCBzaW5nbGVfdGhyZWFkX3Jlc3VsdHNbMF1bMF0pCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQo
c2luZ2xlX3RocmVhZF9yZXN1bHRzWzBdWzFdKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgi
dGVzdHNfdG9faHR0cF9sb2NrIiwgbXVsdGlfdGhyZWFkX3Jlc3VsdHNbMF1bMF0pCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQobXVsdGlf
dGhyZWFkX3Jlc3VsdHNbMF1bMV0pKQogCisKIGNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICMgRklYTUU6IGl0J3MgaGFyZCB0byBrbm93IHdoaWNoIHBsYXRmb3JtcyBh
cmUgc2FmZSB0byB0ZXN0OyB0aGUKICAgICAjIGNocm9taXVtIHBsYXRmb3JtcyByZXF1aXJlIGEg
Y2hyb21pdW0gY2hlY2tvdXQsIGFuZCB0aGUgbWFjIHBsYXRmb3JtCkBAIC00NDgsNDEgKzQ0NCw2
IEBAIGNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLXBpeGVsLXRlc3RzJ10pKQogCiAKLWNsYXNz
IFRlc3RUaHJlYWQoZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxlVGhyZWFkKToKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRlZF9xdWV1ZSwgc3RvcHBpbmdfcXVldWUpOgotICAg
ICAgICBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5XYXRjaGFibGVUaHJlYWQuX19pbml0X18oc2Vs
ZikKLSAgICAgICAgc2VsZi5fc3RhcnRlZF9xdWV1ZSA9IHN0YXJ0ZWRfcXVldWUKLSAgICAgICAg
c2VsZi5fc3RvcHBpbmdfcXVldWUgPSBzdG9wcGluZ19xdWV1ZQotICAgICAgICBzZWxmLl90aW1l
b3V0ID0gRmFsc2UKLSAgICAgICAgc2VsZi5fdGltZW91dF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkK
LQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkKLQotICAg
IGRlZiBfY292ZXJlZF9ydW4oc2VsZik6Ci0gICAgICAgICMgRklYTUU6IHRoaXMgaXMgYSBzZXBh
cmF0ZSByb3V0aW5lIHRvIHdvcmsgYXJvdW5kIGEgYnVnCi0gICAgICAgICMgaW4gY292ZXJhZ2U6
IHNlZSBodHRwOi8vYml0YnVja2V0Lm9yZy9uZWQvY292ZXJhZ2VweS9pc3N1ZS84NS4KLSAgICAg
ICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkLmdldF9pZGVudCgpCi0gICAgICAgIHRyeToKLSAg
ICAgICAgICAgIHNlbGYuX3N0YXJ0ZWRfcXVldWUucHV0KCcnKQotICAgICAgICAgICAgbXNnID0g
c2VsZi5fc3RvcHBpbmdfcXVldWUuZ2V0KCkKLSAgICAgICAgICAgIGlmIG1zZyA9PSAnS2V5Ym9h
cmRJbnRlcnJ1cHQnOgotICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0Ci0g
ICAgICAgICAgICBlbGlmIG1zZyA9PSAnRXhjZXB0aW9uJzoKLSAgICAgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCkKLSAgICAgICAgICAgIGVsaWYgbXNnID09ICdUaW1lb3V0JzoKLSAgICAg
ICAgICAgICAgICBzZWxmLl90aW1lb3V0ID0gVHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuX3Rp
bWVvdXRfcXVldWUuZ2V0KCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5fZXhj
ZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQotCi0gICAgZGVmIG5leHRfdGltZW91dChzZWxm
KToKLSAgICAgICAgaWYgc2VsZi5fdGltZW91dDoKLSAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRf
cXVldWUucHV0KCdkb25lJykKLSAgICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUoKSAtIDEwCi0g
ICAgICAgIHJldHVybiB0aW1lLnRpbWUoKQotCi0KIGNsYXNzIFRlc3RIYW5kbGVyKGxvZ2dpbmcu
SGFuZGxlcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFzdHJlYW0pOgogICAgICAgICBsb2dn
aW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKQEAgLTQ5Miw3MCArNDUzLDUgQEAgY2xhc3MgVGVz
dEhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKHNl
bGYuZm9ybWF0KHJlY29yZCkpCiAKIAotY2xhc3MgV2FpdEZvclRocmVhZHNUb0ZpbmlzaFRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGNsYXNzIE1vY2tUZXN0UnVubmVyKHJ1bl93ZWJraXRf
dGVzdHMuVGVzdFJ1bm5lcik6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAg
ICAgIHBhc3MKLQotICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgICAgIHBhc3MK
LQotICAgICAgICBkZWYgdXBkYXRlX3N1bW1hcnkoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgotICAg
ICAgICAgICAgcGFzcwotCi0gICAgZGVmIHJ1bl9vbmVfdGhyZWFkKHNlbGYsIG1zZyk6Ci0gICAg
ICAgIHJ1bm5lciA9IHNlbGYuTW9ja1Rlc3RSdW5uZXIoKQotICAgICAgICBzdGFydGluZ19xdWV1
ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgp
Ci0gICAgICAgIGNoaWxkX3RocmVhZCA9IFRlc3RUaHJlYWQoc3RhcnRpbmdfcXVldWUsIHN0b3Bw
aW5nX3F1ZXVlKQotICAgICAgICBjaGlsZF90aHJlYWQuc3RhcnQoKQotICAgICAgICBzdGFydGVk
X21zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCi0gICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCht
c2cpCi0gICAgICAgIHRocmVhZHMgPSBbY2hpbGRfdGhyZWFkXQotICAgICAgICByZXR1cm4gcnVu
bmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLCBOb25lKQotCi0gICAgZGVm
IHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3Ro
cmVhZCgnJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKLQotICAgIGRl
ZiB0ZXN0X2ludGVycnVwdChzZWxmKToKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9v
bmVfdGhyZWFkKCdLZXlib2FyZEludGVycnVwdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShp
bnRlcnJ1cHRlZCkKLQotICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIG9jID0g
b3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKLSAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQo
KQotICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJ1RpbWVvdXQnKQot
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVkKQotICAgICAgICBvYy5yZXN0b3Jl
X291dHB1dCgpCi0KLSAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6Ci0gICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYucnVuX29uZV90aHJlYWQsICdFeGNlcHRpb24n
KQotCi0KLWNsYXNzIFN0YW5kYWxvbmVGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
LSAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3RocmVhZChzZWxmKToKLSAgICAgICAgb2MgPSBvdXRw
dXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQotICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0g
ICAgICAgIGxvZ2dlciA9IHJ1bl93ZWJraXRfdGVzdHMuX2xvZwotICAgICAgICBhc3RyZWFtID0g
YXJyYXlfc3RyZWFtLkFycmF5U3RyZWFtKCkKLSAgICAgICAgaGFuZGxlciA9IFRlc3RIYW5kbGVy
KGFzdHJlYW0pCi0gICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCi0KLSAgICAgICAg
c3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIHN0b3BwaW5nX3F1ZXVlID0g
UXVldWUuUXVldWUoKQotICAgICAgICBjaGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5n
X3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKLSAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKLSAg
ICAgICAgbXNnID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKLQotICAgICAgICBydW5fd2Via2l0X3Rl
c3RzLl9sb2dfd2VkZ2VkX3RocmVhZChjaGlsZF90aHJlYWQpCi0gICAgICAgIHN0b3BwaW5nX3F1
ZXVlLnB1dCgnJykKLSAgICAgICAgY2hpbGRfdGhyZWFkLmpvaW4odGltZW91dD0xLjApCi0KLSAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyZWFtLmVtcHR5KCkpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RmFsc2UoY2hpbGRfdGhyZWFkLmlzQWxpdmUoKSkKLSAgICAgICAgb2MucmVzdG9yZV9vdXRw
dXQoKQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73185</attachid>
            <date>2010-11-06 20:53:23 -0700</date>
            <delta_ts>2010-11-06 21:05:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48820-20101106205322.patch</filename>
            <type>text/plain</type>
            <size>86206</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1ODEyYzg0NmRjZTllYTcwOTQwM2FjYzRkOWIxMGY2MzNmYjM0MGY1Li45NmE4MzQ0
Y2JiZmZiMGY1ZjhkODVlOGRhNzc3NjFhMDI4ZDU5NzdmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGFsbCBvZiB0aGUg
TlJXVCBtdWx0aXRocmVhZGluZyBpc3N1ZXMgYnkgbW92aW5nIHRvCisgICAgICAgIG11bHRpcHJv
Y2Vzcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3ByaW50aW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlci5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyX3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3Rlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5OgorCiAyMDEwLTExLTA2ICBEaXJrIFByYW5rZSAg
PGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2llZGVs
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90
cmVlX3RocmVhZC5weQppbmRleCA3ZmU0MGE3NTdjMjY2ZjRjZDBiZGZhNDVmOWJlMGY5MWVmYzBm
ZmFlLi4xMzlmYzUyY2JkZmNkM2EzZTAzZDU1ZTk2YTE5ZDJiMjY3NTc2OTQ1IDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVh
ZC5weQpAQCAtNDIsMTMgKzQyLDE1IEBAIGltcG9ydCBjb2RlY3MKIGltcG9ydCBjb3B5CiBpbXBv
cnQgbG9nZ2luZwogaW1wb3J0IG9zCi1pbXBvcnQgUXVldWUKIGltcG9ydCBzaWduYWwKIGltcG9y
dCBzeXMKLWltcG9ydCB0aHJlYWQKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCi1pbXBv
cnQgdHJhY2ViYWNrCisKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBp
bXBvcnQgdGVzdF90eXBlX2Jhc2UKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlw
ZXMgaW1wb3J0IHRleHRfZGlmZgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBl
cyBpbXBvcnQgaW1hZ2VfZGlmZgogCiBpbXBvcnQgdGVzdF9mYWlsdXJlcwogaW1wb3J0IHRlc3Rf
cmVzdWx0cwpAQCAtNTcsMjYgKzU5LDkgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UuIgogICAgICAgICAgICAgICAgICAgICAg
ICAgICJkdW1wX3JlbmRlcl90cmVlX3RocmVhZCIpCiAKIAotZGVmIGZpbmRfdGhyZWFkX3N0YWNr
KGlkKToKLSAgICAiIiJSZXR1cm5zIGEgc3RhY2sgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8g
ZHVtcCBhIHN0YWNrIHRyYWNlIGZvcgotICAgIHRoZSBnaXZlbiB0aHJlYWQgaWQgKG9yIE5vbmUg
aWYgdGhlIGlkIGlzIG5vdCBmb3VuZCkuIiIiCi0gICAgZm9yIHRocmVhZF9pZCwgc3RhY2sgaW4g
c3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKCk6Ci0gICAgICAgIGlmIHRocmVhZF9pZCA9PSBp
ZDoKLSAgICAgICAgICAgIHJldHVybiBzdGFjawotICAgIHJldHVybiBOb25lCi0KLQotZGVmIGxv
Z19zdGFjayhzdGFjayk6Ci0gICAgIiIiTG9nIGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCku
IiIiCi0gICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4
dHJhY3Rfc3RhY2soc3RhY2spOgotICAgICAgICBfbG9nLmVycm9yKCdGaWxlOiAiJXMiLCBsaW5l
ICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCi0gICAgICAgIGlmIGxpbmU6
Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCcgICVzJyAlIGxpbmUuc3RyaXAoKSkKLQotCiBkZWYg
X3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVz
dF9hcmdzLAogICAgICAgICAgICAgICAgICAgICBjcmFzaCwgdGltZW91dCwgdGVzdF9ydW5fdGlt
ZSwgYWN0dWFsX2NoZWNrc3VtLAotICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGVycm9yKToK
KyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBlcnJvciwgbmFtZSk6CiAgICAgIiIiUmVjZWl2
ZXMgdGhlIG91dHB1dCBmcm9tIGEgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcywgc3ViamVjdHMgaXQg
dG8gYQogICAgIG51bWJlciBvZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUg
dHlwZXMgdGhlIHRlc3QgcHJvZHVjZWQuCiAKQEAgLTg0LDcgKzY5LDcgQEAgZGVmIF9wcm9jZXNz
X291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRlc3RfYXJncywK
ICAgICAgIHBvcnQ6IHBvcnQtc3BlY2lmaWMgaG9va3MKICAgICAgIG9wdGlvbnM6IGNvbW1hbmQg
bGluZSBvcHRpb25zIGFyZ3VtZW50IGZyb20gb3B0cGFyc2UKICAgICAgIHByb2M6IGFuIGFjdGl2
ZSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzCi0gICAgICB0ZXN0X2luZm86IE9iamVjdCBjb250YWlu
aW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKKyAgICAgIHRlc3RfaW5mbzog
T2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKICAgICAgIHRl
c3RfdHlwZXM6IGxpc3Qgb2YgdGVzdCB0eXBlcyB0byBzdWJqZWN0IHRoZSBvdXRwdXQgdG8KICAg
ICAgIHRlc3RfYXJnczogYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBlYWNoIHRlc3QKIApAQCAt
OTUsOCArODAsOSBAQCBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5m
bywgdGVzdF90eXBlcywgdGVzdF9hcmdzLAogICAgICMgU29tZSB0ZXN0IGFyZ3MsIHN1Y2ggYXMg
dGhlIGltYWdlIGhhc2gsIG1heSBiZSBhZGRlZCBvciBjaGFuZ2VkIG9uIGEKICAgICAjIHRlc3Qt
YnktdGVzdCBiYXNpcy4KICAgICBsb2NhbF90ZXN0X2FyZ3MgPSBjb3B5LmNvcHkodGVzdF9hcmdz
KQotCisgICAgbG9jYWxfdGVzdF9hcmdzLnVyaSA9IHRlc3RfaW5mby51cmkKICAgICBsb2NhbF90
ZXN0X2FyZ3MuaGFzaCA9IGFjdHVhbF9jaGVja3N1bQorICAgIHRlc3RfbmFtZSA9IHBvcnQucmVs
YXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2luZm8uZmlsZW5hbWUpCiAKICAgICBpZiBjcmFzaDoK
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCkBA
IC0xMDQsMTggKzkwLDE0IEBAIGRlZiBfcHJvY2Vzc19vdXRwdXQocG9ydCwgb3B0aW9ucywgdGVz
dF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCiAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0
ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCkpCiAKICAgICBpZiBjcmFzaDoKLSAgICAgICAg
X2xvZy5kZWJ1ZygiU3RhY2t0cmFjZSBmb3IgJXM6XG4lcyIgJSAodGVzdF9pbmZvLmZpbGVuYW1l
LCBlcnJvcikpCi0gICAgICAgICMgU3RyaXAgb2ZmICJmaWxlOi8vIiBzaW5jZSBSZWxhdGl2ZVRl
c3RGaWxlbmFtZSBleHBlY3RzCi0gICAgICAgICMgZmlsZXN5c3RlbSBwYXRocy4KLSAgICAgICAg
ZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8uZmlsZW5hbWUpKQorICAg
ICAgICBfbG9nLmRlYnVnKCIlcyBTdGFja3RyYWNlIGZvciAlczpcbiVzIiAlIChuYW1lLCB0ZXN0
X25hbWUsIGVycm9yKSkKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5y
ZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1lKQogICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGgu
c3BsaXRleHQoZmlsZW5hbWUpWzBdICsgIi1zdGFjay50eHQiCiAgICAgICAgIHBvcnQubWF5YmVf
bWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMF0pCiAgICAgICAgIHdpdGgg
Y29kZWNzLm9wZW4oZmlsZW5hbWUsICJ3YiIsICJ1dGYtOCIpIGFzIGZpbGU6CiAgICAgICAgICAg
ICBmaWxlLndyaXRlKGVycm9yKQogICAgIGVsaWYgZXJyb3I6Ci0gICAgICAgIF9sb2cuZGVidWco
IlByZXZpb3VzIHRlc3Qgb3V0cHV0IHN0ZGVyciBsaW5lczpcbiVzIiAlIGVycm9yKQorICAgICAg
ICBfbG9nLmRlYnVnKCIlcyAlcyBzdGRlcnIgbGluZXM6XG4lcyIgJSAobmFtZSwgdGVzdF9uYW1l
LCBlcnJvcikpCiAKICAgICAjIENoZWNrIHRoZSBvdXRwdXQgYW5kIHNhdmUgdGhlIHJlc3VsdHMu
CiAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCkBAIC0xMzgsMzIgKzEyMCwxMCBAQCBkZWYg
X3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVz
dF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zv
cl9hbGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZzKQogCiAKLWRlZiBfcGFkX3RpbWVvdXQodGltZW91
dCk6Ci0gICAgIiIiUmV0dXJucyBhIHNhZmUgbXVsdGlwbGUgb2YgdGhlIHBlci10ZXN0IHRpbWVv
dXQgdmFsdWUgdG8gdXNlCi0gICAgdG8gZGV0ZWN0IGh1bmcgdGVzdCB0aHJlYWRzLgotCi0gICAg
IiIiCi0gICAgIyBXaGVuIHdlJ3JlIHJ1bm5pbmcgb25lIHRlc3QgcGVyIER1bXBSZW5kZXJUcmVl
IHByb2Nlc3MsIHdlIGNhbgotICAgICMgZW5mb3JjZSBhIGhhcmQgdGltZW91dC4gIFRoZSBEdW1w
UmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIuNXgKLSAgICAjIHRoZSB0aW1lb3V0OyB3ZSB3YW50
IHRvIGJlIGxhcmdlciB0aGFuIHRoYXQuCi0gICAgcmV0dXJuIHRpbWVvdXQgKiAzCi0KLQotZGVm
IF9taWxsaXNlY29uZHNfdG9fc2Vjb25kcyhtc2Vjcyk6Ci0gICAgcmV0dXJuIGZsb2F0KG1zZWNz
KSAvIDEwMDAuMAotCi0KLWRlZiBfaW1hZ2VfaGFzaCh0ZXN0X2luZm8sIHRlc3RfYXJncywgb3B0
aW9ucyk6Ci0gICAgIiIiUmV0dXJucyB0aGUgaW1hZ2UgaGFzaCBvZiB0aGUgdGVzdCBpZiBpdCdz
IG5lZWRlZCwgb3RoZXJ3aXNlIE5vbmUuIiIiCi0gICAgaWYgKHRlc3RfYXJncy5uZXdfYmFzZWxp
bmUgb3IgdGVzdF9hcmdzLnJlc2V0X3Jlc3VsdHMgb3Igbm90IG9wdGlvbnMucGl4ZWxfdGVzdHMp
OgotICAgICAgICByZXR1cm4gTm9uZQotICAgIHJldHVybiB0ZXN0X2luZm8uaW1hZ2VfaGFzaCgp
Ci0KLQogY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAiIiJU
aHJlYWQgd3JhcHBlciBmb3IgcnVubmluZyBhIHNpbmdsZSB0ZXN0IGZpbGUuIiIiCiAKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0
ZXN0X2FyZ3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCB3b3JrZXJf
bnVtYmVyLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRlc3RfYXJncyk6CiAgICAgICAgICIiIgog
ICAgICAgICBBcmdzOgogICAgICAgICAgIHBvcnQ6IG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1z
cGVjaWZpYyBob29rcwpAQCAtMTgxLDYgKzE0MSw4IEBAIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQo
dGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0X3R5cGVz
CiAgICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHRlc3RfYXJncwogICAgICAgICBzZWxmLl9kcml2
ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisg
ICAgICAgIHNlbGYuX25hbWUgPSAnd29ya2VyLSVkJyAlIHdvcmtlcl9udW1iZXIKIAogICAgIGRl
ZiBydW4oc2VsZik6CiAgICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkKQEAgLTE5MiwyNjMgKzE1
NCwxMzEgQEAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAg
ICAgc2VsZi5fZHJpdmVyID0gc2VsZi5fcG9ydC5jcmVhdGVfZHJpdmVyKHNlbGYuX3Rlc3RfYXJn
cy5wbmdfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMpCiAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCi0gICAgICAg
IGltYWdlX2hhc2ggPSBfaW1hZ2VfaGFzaCh0ZXN0X2luZm8sIHNlbGYuX3Rlc3RfYXJncywgc2Vs
Zi5fb3B0aW9ucykKICAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgICBjcmFzaCwg
dGltZW91dCwgYWN0dWFsX2NoZWNrc3VtLCBvdXRwdXQsIGVycm9yID0gXAotICAgICAgICAgICAg
c2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5mby51cmkuc3RyaXAoKSwgdGVzdF9pbmZvLnRp
bWVvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfaGFzaCkKKyAg
ICAgICAgICAgIHNlbGYuX2RyaXZlci5ydW5fdGVzdCh0ZXN0X2luZm8udXJpLCB0ZXN0X2luZm8u
dGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8uaW1h
Z2VfY2hlY2tzdW0pCiAgICAgICAgIGVuZCA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX3Rl
c3RfcmVzdWx0ID0gX3Byb2Nlc3Nfb3V0cHV0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCiAg
ICAgICAgICAgICB0ZXN0X2luZm8sIHNlbGYuX3Rlc3RfdHlwZXMsIHNlbGYuX3Rlc3RfYXJncywK
ICAgICAgICAgICAgIGNyYXNoLCB0aW1lb3V0LCBlbmQgLSBzdGFydCwKLSAgICAgICAgICAgIGFj
dHVhbF9jaGVja3N1bSwgb3V0cHV0LCBlcnJvcikKKyAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1
bSwgb3V0cHV0LCBlcnJvciwgc2VsZi5fbmFtZSkKICAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3Ao
KQogCiAgICAgZGVmIGdldF90ZXN0X3Jlc3VsdChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYu
X3Rlc3RfcmVzdWx0CiAKIAotY2xhc3MgV2F0Y2hhYmxlVGhyZWFkKHRocmVhZGluZy5UaHJlYWQp
OgotICAgICIiIlRoaXMgY2xhc3MgYWJzdHJhY3RzIGFuIGludGVyZmFjZSB1c2VkIGJ5Ci0gICAg
cnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCBm
b3IgdGhyZWFkCi0gICAgbWFuYWdlbWVudC4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0g
ICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fY2Fu
Y2VsZWQgPSBGYWxzZQotICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IE5vbmUKLSAgICAg
ICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9uZQotICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSBO
b25lCi0KLSAgICBkZWYgY2FuY2VsKHNlbGYpOgotICAgICAgICAiIiJTZXQgYSBmbGFnIHRlbGxp
bmcgdGhpcyB0aHJlYWQgdG8gcXVpdC4iIiIKLSAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVl
Ci0KLSAgICBkZWYgY2xlYXJfbmV4dF90aW1lb3V0KHNlbGYpOgotICAgICAgICAiIiJNYXJrIGEg
ZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRvIHN0b3Agc2V0dGluZyB0aW1lb3V0cy4iIiIKLSAg
ICAgICAgc2VsZi5fdGltZW91dCA9IDAKLQotICAgIGRlZiBleGNlcHRpb25faW5mbyhzZWxmKToK
LSAgICAgICAgIiIiSWYgcnVuKCkgdGVybWluYXRlZCBvbiBhbiB1bmNhdWdodCBleGNlcHRpb24s
IHJldHVybiBpdCBoZXJlCi0gICAgICAgICgodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykgdHVwbGUp
LgotICAgICAgICBSZXR1cm5zIE5vbmUgaWYgcnVuKCkgdGVybWluYXRlZCBub3JtYWxseS4gTWVh
bnQgdG8gYmUgY2FsbGVkIGFmdGVyCi0gICAgICAgIGpvaW5pbmcgdGhpcyB0aHJlYWQuIiIiCi0g
ICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb25faW5mbwotCi0gICAgZGVmIGlkKHNlbGYpOgot
ICAgICAgICAiIiJSZXR1cm4gYSB0aHJlYWQgaWRlbnRpZmllci4iIiIKLSAgICAgICAgcmV0dXJu
IHNlbGYuX3RocmVhZF9pZAotCi0gICAgZGVmIG5leHRfdGltZW91dChzZWxmKToKLSAgICAgICAg
IiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlzIHN1cHBvc2VkIHRvIGZpbmlzaCBieS4iIiIK
LSAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dAotCi0KLWNsYXNzIFRlc3RTaGVsbFRo
cmVhZChXYXRjaGFibGVUaHJlYWQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRp
b25zLCBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVldWUsCi0gICAgICAgICAgICAgICAg
IHRlc3RfdHlwZXMsIHRlc3RfYXJncyk6CitjbGFzcyBXb3JrZXIob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydCwgY29udGFpbmVyLCBvcHRpb25zLCB3b3JrZXJfbnVtYmVyKToK
ICAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbGwgdGhlIGxvY2FsIHN0YXRlIGZvciB0aGlzIER1bXBS
ZW5kZXJUcmVlIHRocmVhZC4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIHBvcnQ6IGludGVy
ZmFjZSB0byBwb3J0LXNwZWNpZmljIGhvb2tzCi0gICAgICAgICAgb3B0aW9uczogY29tbWFuZCBs
aW5lIG9wdGlvbnMgYXJndW1lbnQgZnJvbSBvcHRwYXJzZQotICAgICAgICAgIGZpbGVuYW1lX2xp
c3RfcXVldWU6IEEgdGhyZWFkIHNhZmUgUXVldWUgY2xhc3MgdGhhdCBjb250YWlucyBsaXN0cwot
ICAgICAgICAgICAgICBvZiB0dXBsZXMgb2YgKGZpbGVuYW1lLCB1cmkpIHBhaXJzLgotICAgICAg
ICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJlYWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29u
dGFpbgotICAgICAgICAgICAgICBzZXJpYWxpemVkIFRlc3RSZXN1bHQgb2JqZWN0cy4KLSAgICAg
ICAgICB0ZXN0X3R5cGVzOiBBIGxpc3Qgb2YgVGVzdFR5cGUgb2JqZWN0cyB0byBydW4gdGhlIHRl
c3Qgb3V0cHV0Ci0gICAgICAgICAgICAgIGFnYWluc3QuCi0gICAgICAgICAgdGVzdF9hcmdzOiBB
IFRlc3RBcmd1bWVudHMgb2JqZWN0IHRvIHBhc3MgdG8gZWFjaCBUZXN0VHlwZS4KKyAgICAgICAg
ICBjb250YWluZXI6IGNvbnRhaW5lciBvYmplY3QgdG8gcmVjZWl2ZSB0ZXN0cyBmcm9tCisgICAg
ICAgICAgd29ya2VyX251bWJlcjogbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmcKIAogICAgICAgICAi
IiIKLSAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYu
X2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fY29udGFpbmVyID0gY29udGFpbmVyCiAg
ICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25z
Ci0gICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3RfcXVldWUgPSBmaWxlbmFtZV9saXN0X3F1ZXVl
Ci0gICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IHJlc3VsdF9xdWV1ZQorICAgICAgICBzZWxm
Ll93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9uYW1lID0gJ3dv
cmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxm
Ll9vcHRpb25zLmJhdGNoX3NpemUKKyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKICAg
ICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdCA9IFtdCi0gICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMg
PSB0ZXN0X3R5cGVzCi0gICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHRlc3RfYXJncworICAgICAg
ICBzZWxmLl90ZXN0X3R5cGVzID0gW10KKyAgICAgICAgZm9yIGNscyBpbiBzZWxmLl90ZXN0X3R5
cGVfY2xhc3NlcygpOgorICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcy5hcHBlbmQoY2xzKHNl
bGYuX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCisgICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHNl
bGYuX3Rlc3RfYXJncyh3b3JrZXJfbnVtYmVyKQogICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25l
Ci0gICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzID0ge30KLSAgICAgICAgc2Vs
Zi5fdGVzdF9yZXN1bHRzID0gW10KLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0gMAotICAgICAg
ICBzZWxmLl9zdGFydF90aW1lID0gMAotICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSAwCi0gICAg
ICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKLSAgICAgICAgc2VsZi5faHR0cF9sb2Nr
X3dhaXRfYmVnaW4gPSAwCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IDAKLQot
ICAgICAgICAjIEN1cnJlbnQgZ3JvdXAgb2YgdGVzdHMgd2UncmUgcnVubmluZy4KLSAgICAgICAg
c2VsZi5fY3VycmVudF9ncm91cCA9IE5vbmUKLSAgICAgICAgIyBOdW1iZXIgb2YgdGVzdHMgaW4g
c2VsZi5fY3VycmVudF9ncm91cC4KLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRf
Z3JvdXAgPSBOb25lCi0gICAgICAgICMgVGltZSBhdCB3aGljaCB3ZSBzdGFydGVkIHJ1bm5pbmcg
dGVzdHMgZnJvbSBzZWxmLl9jdXJyZW50X2dyb3VwLgotICAgICAgICBzZWxmLl9jdXJyZW50X2dy
b3VwX3N0YXJ0X3RpbWUgPSBOb25lCi0KLSAgICBkZWYgZ2V0X3Rlc3RfZ3JvdXBfdGltaW5nX3N0
YXRzKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIGEgZGljdGlvbmFyeSBtYXBwaW5nIHRlc3Qg
Z3JvdXAgdG8gYSB0dXBsZSBvZgotICAgICAgICAobnVtYmVyIG9mIHRlc3RzIGluIHRoYXQgZ3Jv
dXAsIHRpbWUgdG8gcnVuIHRoZSB0ZXN0cykiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3Rf
Z3JvdXBfdGltaW5nX3N0YXRzCi0KLSAgICBkZWYgZ2V0X3Rlc3RfcmVzdWx0cyhzZWxmKToKLSAg
ICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIGFsbCB0ZXN0cyBydW4gb24gdGhpcyB0aHJlYWQu
Ci0KLSAgICAgICAgVGhpcyBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBwZXItdGhyZWFkIHN0YXRpc3Rp
Y3MuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3Jlc3VsdHMKLQot
ICAgIGRlZiBnZXRfdG90YWxfdGltZShzZWxmKToKLSAgICAgICAgcmV0dXJuIG1heChzZWxmLl9z
dG9wX3RpbWUgLSBzZWxmLl9zdGFydF90aW1lIC0KLSAgICAgICAgICAgICAgICAgICBzZWxmLl9o
dHRwX2xvY2tfd2FpdF90aW1lKCksIDAuMCkKLQotICAgIGRlZiBnZXRfbnVtX3Rlc3RzKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5fbnVtX3Rlc3RzCi0KLSAgICBkZWYgcnVuKHNlbGYpOgot
ICAgICAgICAiIiJEZWxlZ2F0ZSBtYWluIHdvcmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFuZCB3YXRj
aCBmb3IgdW5jYXVnaHQKLSAgICAgICAgZXhjZXB0aW9ucy4iIiIKLSAgICAgICAgc2VsZi5fY292
ZXJlZF9ydW4oKQotCi0gICAgZGVmIF9jb3ZlcmVkX3J1bihzZWxmKToKLSAgICAgICAgIyBGSVhN
RTogdGhpcyBpcyBhIHNlcGFyYXRlIHJvdXRpbmUgdG8gd29yayBhcm91bmQgYSBidWcKLSAgICAg
ICAgIyBpbiBjb3ZlcmFnZTogc2VlIGh0dHA6Ly9iaXRidWNrZXQub3JnL25lZC9jb3ZlcmFnZXB5
L2lzc3VlLzg1LgotICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkK
LSAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuX251
bV90ZXN0cyA9IDAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJXMgc3Rh
cnRpbmcnICUgKHNlbGYuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgIHNlbGYuX3J1bih0ZXN0X3J1
bm5lcj1Ob25lLCByZXN1bHRfc3VtbWFyeT1Ob25lKQotICAgICAgICAgICAgX2xvZy5kZWJ1Zygn
JXMgZG9uZSAoJWQgdGVzdHMpJyAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5nZXRfbnVtX3Rlc3RzKCkpKQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRl
cnJ1cHQ6Ci0gICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygp
Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBpbnRlcnJ1cHRlZCIgJSBzZWxmLmdldE5hbWUo
KSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgIyBTYXZlIHRoZSBleGNlcHRpb24gZm9y
IG91ciBjYWxsZXIgdG8gc2VlLgotICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBz
eXMuZXhjX2luZm8oKQotICAgICAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkK
LSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyVzIGR5aW5nLCBleGNlcHRpb24gcmFpc2VkJyAlIHNl
bGYuZ2V0TmFtZSgpKQotCi0gICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCi0K
LSAgICBkZWYgcnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHRlc3RfcnVubmVyLCByZXN1bHRfc3Vt
bWFyeSk6Ci0gICAgICAgICIiIlRoaXMgaG9vayBhbGxvd3MgdXMgdG8gcnVuIHRoZSB0ZXN0cyBm
cm9tIHRoZSBtYWluIHRocmVhZCBpZgotICAgICAgICAtLW51bS10ZXN0LXNoZWxscz09MSwgaW5z
dGVhZCBvZiBoYXZpbmcgdG8gYWx3YXlzIHJ1biB0d28gb3IgbW9yZQotICAgICAgICB0aHJlYWRz
LiBUaGlzIGFsbG93cyB1cyB0byBkZWJ1ZyB0aGUgdGVzdCBoYXJuZXNzIHdpdGhvdXQgaGF2aW5n
IHRvCi0gICAgICAgIGRvIG11bHRpLXRocmVhZGVkIGRlYnVnZ2luZy4iIiIKLSAgICAgICAgc2Vs
Zi5fcnVuKHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSkKLQotICAgIGRlZiBjYW5jZWwoc2Vs
Zik6Ci0gICAgICAgICIiIkNsZWFuIHVwIGh0dHAgbG9jayBhbmQgc2V0IGEgZmxhZyB0ZWxsaW5n
IHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCi0gICAgICAgIHNlbGYuX3N0b3BfaHR0cF9sb2NrKCkK
LSAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLmNhbmNlbChzZWxmKQotCi0gICAgZGVmIG5leHRfdGlt
ZW91dChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlzIHN1cHBv
c2VkIHRvIGZpbmlzaCBieS4iIiIKLSAgICAgICAgaWYgc2VsZi5fbmV4dF90aW1lb3V0OgotICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dCArIHNlbGYuX2h0dHBfbG9ja193YWl0
X3RpbWUoKQotICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0Ci0KLSAgICBkZWYgX2h0
dHBfbG9ja193YWl0X3RpbWUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgdGltZSB3aGF0
IGh0dHAgbG9ja2luZyB0YWtlcy4iIiIKLSAgICAgICAgaWYgc2VsZi5faHR0cF9sb2NrX3dhaXRf
YmVnaW4gPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGlmIHNlbGYuX2h0dHBf
bG9ja193YWl0X2VuZCA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIHRpbWUudGltZSgpIC0gc2Vs
Zi5faHR0cF9sb2NrX3dhaXRfYmVnaW4KLSAgICAgICAgcmV0dXJuIHNlbGYuX2h0dHBfbG9ja193
YWl0X2VuZCAtIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luCi0KLSAgICBkZWYgX3J1bihzZWxm
LCB0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJNYWluIHdvcmsgZW50
cnkgcG9pbnQgb2YgdGhlIHRocmVhZC4gQmFzaWNhbGx5IHdlIHB1bGwgdXJscyBmcm9tIHRoZQot
ICAgICAgICBmaWxlbmFtZSBxdWV1ZSBhbmQgcnVuIHRoZSB0ZXN0cyB1bnRpbCB3ZSBydW4gb3V0
IG9mIHVybHMuCi0KLSAgICAgICAgSWYgdGVzdF9ydW5uZXIgaXMgbm90IE5vbmUsIHRoZW4gd2Ug
Y2FsbCB0ZXN0X3J1bm5lci5VcGRhdGVTdW1tYXJ5KCkKLSAgICAgICAgd2l0aCB0aGUgcmVzdWx0
cyBvZiBlYWNoIHRlc3QuIiIiCi0gICAgICAgIGJhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJh
dGNoX3NpemUKLSAgICAgICAgYmF0Y2hfY291bnQgPSAwCi0KLSAgICAgICAgIyBBcHBlbmQgdGVz
dHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgotICAg
ICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJlTGlz
dHNBbmRQcmludE91dHB1dC4KICAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5q
b2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuLnR4dCIpCi0gICAgICAgIHRlc3RzX3J1
bl9maWxlID0gY29kZWNzLm9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAiYSIsICJ1dGYtOCIpCi0K
LSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIHNlbGYuX2NhbmNlbGVkOgotICAg
ICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Rlc3RpbmcgY2FuY2VsbGVkJykKLSAgICAgICAgICAg
ICAgICB0ZXN0c19ydW5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAg
ICAgICAgICAgIGlmIGxlbihzZWxmLl9maWxlbmFtZV9saXN0KSBpcyAwOgotICAgICAgICAgICAg
ICAgIGlmIHNlbGYuX2N1cnJlbnRfZ3JvdXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzW3NlbGYuX2N1cnJlbnRfZ3JvdXBdID0g
XAotICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2dy
b3VwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc2VsZi5fY3VycmVu
dF9ncm91cF9zdGFydF90aW1lKQotCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwLCBzZWxmLl9maWxlbmFtZV9saXN0ID0gXAotICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZS5nZXRfbm93YWl0
KCkKLSAgICAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3N0b3BfaHR0cF9sb2NrKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2ls
bF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUu
Y2xvc2UoKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgICAgIGlm
IHNlbGYuX29wdGlvbnMud2FpdF9mb3JfaHR0cGQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNl
bGYuX2N1cnJlbnRfZ3JvdXAgPT0gInRlc3RzX3RvX2h0dHBfbG9jayI6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9IHRpbWUudGltZSgpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRydWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IHRpbWUudGlt
ZSgpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdG9wX2h0dHBfbG9jaygpCi0KLSAgICAgICAgICAg
ICAgICBzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVudF9ncm91cCA9IGxlbihzZWxmLl9maWxlbmFt
ZV9saXN0KQotICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXBfc3RhcnRfdGltZSA9
IHRpbWUudGltZSgpCi0KLSAgICAgICAgICAgIHRlc3RfaW5mbyA9IHNlbGYuX2ZpbGVuYW1lX2xp
c3QucG9wKCkKLQotICAgICAgICAgICAgIyBXZSBoYXZlIGEgdXJsLCBydW4gdGVzdHMuCi0gICAg
ICAgICAgICBiYXRjaF9jb3VudCArPSAxCi0gICAgICAgICAgICBzZWxmLl9udW1fdGVzdHMgKz0g
MQotICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X3NpbmdseSh0ZXN0X2luZm8pCi0gICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5m
bykKLQotICAgICAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X2luZm8uZmlsZW5hbWUKLSAgICAgICAg
ICAgIHRlc3RzX3J1bl9maWxlLndyaXRlKGZpbGVuYW1lICsgIlxuIikKLSAgICAgICAgICAgIGlm
IHJlc3VsdC5mYWlsdXJlczoKLSAgICAgICAgICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1bXBS
ZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCi0gICAgICAgICAgICAgICAgaWYgbGVuKFsxIGZvciBm
IGluIHJlc3VsdC5mYWlsdXJlcwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZi5zaG91bGRf
a2lsbF9kdW1wX3JlbmRlcl90cmVlKCldKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2ls
bF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0
Y2ggY291bnQgc2luY2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KLSAgICAgICAgICAgICAgICAg
ICAgYmF0Y2hfY291bnQgPSAwCi0gICAgICAgICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVz
c2FnZShzKS4KLSAgICAgICAgICAgICAgICBlcnJvcl9zdHIgPSAnXG4nLmpvaW4oWycgICcgKyBm
Lm1lc3NhZ2UoKSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYg
aW4gcmVzdWx0LmZhaWx1cmVzXSkKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBm
YWlsZWQ6XG4lcyIgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3Jfc3RyKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLmdldE5hbWUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFt
ZShmaWxlbmFtZSkpKQotICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlLnB1dChyZXN1bHQu
ZHVtcHMoKSkKLQotICAgICAgICAgICAgaWYgYmF0Y2hfc2l6ZSA+IDAgYW5kIGJhdGNoX2NvdW50
ID49IGJhdGNoX3NpemU6Ci0gICAgICAgICAgICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCBy
ZXNldCBjb3VudC4KLSAgICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUo
KQotICAgICAgICAgICAgICAgIGJhdGNoX2NvdW50ID0gMAorICAgICAgICBzZWxmLl90ZXN0c19y
dW5fZmlsZSA9IGNvZGVjcy5vcGVuKHRlc3RzX3J1bl9maWxlbmFtZSwgImEiLCAidXRmLTgiKQor
CisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHJlY2VpdmVkIC0g
bm8gbW9yZSB0ZXN0cyB0byBydW4uIiIiCisgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJf
dHJlZSgpCisgICAgICAgIGlmIHNlbGYuX3Rlc3RzX3J1bl9maWxlOgorICAgICAgICAgICAgc2Vs
Zi5fdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2Zp
bGUgPSBOb25lCisKKyAgICBkZWYgX3Rlc3RfYXJncyhzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAg
ICAgICAgIiIiUmV0dXJucyB0aGUgdHVwbGUgb2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9y
IER1bXBSZW5kZXJUcmVlLiIiIgorICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5U
ZXN0QXJndW1lbnRzKCkKKyAgICAgICAgdGVzdF9hcmdzLnBuZ19wYXRoID0gTm9uZQorICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgcG5nX3BhdGggPSBv
cy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJwbmdfcmVzdWx0JXMucG5nIiAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyKQorICAgICAgICAg
ICAgdGVzdF9hcmdzLnBuZ19wYXRoID0gcG5nX3BhdGgKKyAgICAgICAgdGVzdF9hcmdzLm5ld19i
YXNlbGluZSA9IHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lCisgICAgICAgIHRlc3RfYXJncy5y
ZXNldF9yZXN1bHRzID0gc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzCisKKyAgICAgICAgcmV0
dXJuIHRlc3RfYXJncworCisgICAgZGVmIF9uZWVkc19pbWFnZV9oYXNoKHNlbGYpOgorICAgICAg
ICAiIiJSZXR1cm5zIHRoZSBpbWFnZSBoYXNoIG9mIHRoZSB0ZXN0IGlmIGl0J3MgbmVlZGVkLCBv
dGhlcndpc2UgTm9uZS4iIiIKKyAgICAgICAgcmV0dXJuIChzZWxmLl9vcHRpb25zLm5ld19iYXNl
bGluZSBvciBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMgb3IKKyAgICAgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQorCisgICAgZGVmIF90ZXN0X3R5cGVfY2xhc3Nlcyhz
ZWxmKToKKyAgICAgICAgY2xhc3NlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQorICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBl
bmQoaW1hZ2VfZGlmZi5JbWFnZURpZmYpCisgICAgICAgIHJldHVybiBjbGFzc2VzCisKKyAgICBk
ZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbmZvKToKKyAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X2lu
Zm8uZmlsZW5hbWUKKyAgICAgICAgdGVzdF9pbmZvLnVyaSA9IHNlbGYuX3BvcnQuZmlsZW5hbWVf
dG9fdXJpKGZpbGVuYW1lKQorICAgICAgICBpZiBzZWxmLl9uZWVkc19pbWFnZV9oYXNoKCk6Cisg
ICAgICAgICAgICB0ZXN0X2luZm8uaW1hZ2VfY2hlY2tzdW0gPSBzZWxmLl9wb3J0LmV4cGVjdGVk
X2NoZWNrc3VtKGZpbGVuYW1lKQorICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCArPSAxCisKKyAg
ICAgICAgIyBXZSBnaXZlIERSVCBzb21lIGV4dHJhIHRpbWUgdG8gZGV0ZWN0IGEgdGltZW91dCwg
YW5kIHRoZW4KKyAgICAgICAgIyBnaXZlIG91ciB3YXRjaGRvZyB0aHJlYWQgYSBzaW1pbGFyIGFt
b3VudCB0byBkZXRlY3QgYSBodW5nCisgICAgICAgICMgRFJULiBOb3RlIHRoYXQgd2UgbmVlZCB0
byBjb252ZXJ0IHRoZSB0ZXN0IHRpbWVvdXQgZnJvbSBhCisgICAgICAgICMgc3RyaW5nIHZhbHVl
IGluIG1pbGxpc2Vjb25kcyB0byBhIGZsb2F0IGZvciBQeXRob24uCisgICAgICAgIHBhZGRpbmcg
PSAzLjAKKyAgICAgICAgdGhyZWFkX3RpbWVvdXQgPSBmbG9hdCh0ZXN0X2luZm8udGltZW91dCkg
LyAxMDAwLjAgKyBwYWRkaW5nCiAKLSAgICAgICAgICAgIGlmIHRlc3RfcnVubmVyOgotICAgICAg
ICAgICAgICAgIHRlc3RfcnVubmVyLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQotCi0g
ICAgZGVmIF9ydW5fdGVzdF9zaW5nbHkoc2VsZiwgdGVzdF9pbmZvKToKKyAgICAgICAgc3RhcnQg
PSB0aW1lLnRpbWUoKQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAg
ICAgICAgICBzZWxmLl9jb250YWluZXIuc3RhcnRlZF90ZXN0KHRlc3RfaW5mbywgdGhyZWFkX3Rp
bWVvdXQgKyBwYWRkaW5nKQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5f
YW5vdGhlcl90aHJlYWQodGVzdF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWVvdXQpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBzZWxmLl9jb250YWluZXIuc3RhcnRlZF90ZXN0KHRlc3RfaW5mbywgdGhyZWFk
X3RpbWVvdXQpCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl90aGlzX3Ro
cmVhZCh0ZXN0X2luZm8pCisKKyAgICAgICAgc2VsZi5fY29udGFpbmVyLmZpbmlzaGVkX3Rlc3Qo
cmVzdWx0LCB0aW1lLnRpbWUoKSAtIHN0YXJ0KQorCisgICAgICAgIGlmIHNlbGYuX2JhdGNoX3Np
emUgPiAwIGFuZCBzZWxmLl9iYXRjaF9jb3VudCA+IHNlbGYuX2JhdGNoX3NpemU6CisgICAgICAg
ICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50LgorICAgICAgICAgICAgc2Vs
Zi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50
ID0gMAorCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLndyaXRlKGZpbGVuYW1lICsgIlxu
IikKKyAgICAgICAgaWYgcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgIyBDaGVjayBhbmQg
a2lsbCBEdW1wUmVuZGVyVHJlZSBpZiB3ZSBuZWVkIHRvLgorICAgICAgICAgICAgaWYgbGVuKFsx
IGZvciBmIGluIHJlc3VsdC5mYWlsdXJlcworICAgICAgICAgICAgICAgICAgICBpZiBmLnNob3Vs
ZF9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKV0pOgorICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxf
ZHVtcF9yZW5kZXJfdHJlZSgpCisgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2ggY291
bnQgc2luY2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KKyAgICAgICAgICAgICAgICBzZWxmLl9i
YXRjaF9jb3VudCA9IDAKKyAgICAgICAgICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3NhZ2Uocyku
CisgICAgICAgICAgICBlcnJvcl9zdHIgPSAnXG4nLmpvaW4oWycgICcgKyBmLm1lc3NhZ2UoKSBm
b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgaW4gcmVzdWx0LmZhaWx1
cmVzXSkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIGZhaWxlZDpcbiVzIiAlIChzZWxm
Ll9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKGZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX3N0cikp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUg
KHNlbGYuX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKSkKKworICAgIGRlZiBfcnVuX3Rlc3RfaW5fYW5vdGhl
cl90aHJlYWQoc2VsZiwgdGVzdF9pbmZvLCB0aHJlYWRfdGltZW91dCk6CiAgICAgICAgICIiIlJ1
biBhIHRlc3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGVuZm9yY2luZyBhIGhhcmQgdGltZSBsaW1p
dC4KIAogICAgICAgICBTaW5jZSB3ZSBjYW4gb25seSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9m
IGEgdGhyZWFkLCBub3QgYW55IGludGVybmFsCkBAIC00NjAsMTkgKzI5MCwxNiBAQCBjbGFzcyBU
ZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKIAogICAgICAgICBSZXR1cm5zOgogICAg
ICAgICAgIEEgVGVzdFJlc3VsdAotCiAgICAgICAgICIiIgogICAgICAgICB3b3JrZXIgPSBTaW5n
bGVUZXN0VGhyZWFkKHNlbGYuX3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll93b3JrZXJfbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rf
aW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfYXJncykKIAog
ICAgICAgICB3b3JrZXIuc3RhcnQoKQogCi0gICAgICAgIHRocmVhZF90aW1lb3V0ID0gX21pbGxp
c2Vjb25kc190b19zZWNvbmRzKAotICAgICAgICAgICAgX3BhZF90aW1lb3V0KGludCh0ZXN0X2lu
Zm8udGltZW91dCkpKQotICAgICAgICB0aHJlYWQuX25leHRfdGltZW91dCA9IHRpbWUudGltZSgp
ICsgdGhyZWFkX3RpbWVvdXQKICAgICAgICAgd29ya2VyLmpvaW4odGhyZWFkX3RpbWVvdXQpCiAg
ICAgICAgIGlmIHdvcmtlci5pc0FsaXZlKCk6CiAgICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1
cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwgcnVubmluZywgdGhlCkBAIC00OTUsMTEgKzMyMiwx
MiBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgICAg
IF9sb2cuZXJyb3IoJ0Nhbm5vdCBnZXQgcmVzdWx0cyBvZiB0ZXN0OiAlcycgJQogICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0X2luZm8uZmlsZW5hbWUpCiAgICAgICAgICAgICByZXN1bHQgPSB0
ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdCh0ZXN0X2luZm8uZmlsZW5hbWUsIGZhaWx1cmVzPVtdLAot
ICAgICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9MCwgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZz
PTAsIHRpbWVfZm9yX2RpZmZzPTApCisgICAgICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0
b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwKKyAgICAgICAgICAgICAgICB0aW1lX2Zvcl9kaWZm
cz17fSkKIAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgX3J1bl90ZXN0KHNlbGYs
IHRlc3RfaW5mbyk6CisgICAgZGVmIF9ydW5fdGVzdF9pbl90aGlzX3RocmVhZChzZWxmLCB0ZXN0
X2luZm8pOgogICAgICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdCBmaWxlIHVzaW5nIGEgc2hhcmVk
IER1bXBSZW5kZXJUcmVlIHByb2Nlc3MuCiAKICAgICAgICAgQXJnczoKQEAgLTUwOCwyOCArMzM2
LDE4IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICBS
ZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5f
ZW5zdXJlX2R1bXBfcmVuZGVyX3RyZWVfaXNfcnVubmluZygpCi0gICAgICAgICMgVGhlIHBpeGVs
X2hhc2ggaXMgdXNlZCB0byBhdm9pZCBkb2luZyBhbiBpbWFnZSBkdW1wIGlmIHRoZQotICAgICAg
ICAjIGNoZWNrc3VtcyBtYXRjaCwgc28gaXQgc2hvdWxkIGJlIHNldCB0byBhIGJsYW5rIHZhbHVl
IGlmIHdlCi0gICAgICAgICMgYXJlIGdlbmVyYXRpbmcgYSBuZXcgYmFzZWxpbmUuICAoT3RoZXJ3
aXNlLCBhbiBpbWFnZSBmcm9tIGEKLSAgICAgICAgIyBwcmV2aW91cyBydW4gd2lsbCBiZSBjb3Bp
ZWQgaW50byB0aGUgYmFzZWxpbmUuKQotICAgICAgICBpbWFnZV9oYXNoID0gX2ltYWdlX2hhc2go
dGVzdF9pbmZvLCBzZWxmLl90ZXN0X2FyZ3MsIHNlbGYuX29wdGlvbnMpCi0gICAgICAgIHN0YXJ0
ID0gdGltZS50aW1lKCkKLQotICAgICAgICB0aHJlYWRfdGltZW91dCA9IF9taWxsaXNlY29uZHNf
dG9fc2Vjb25kcygKLSAgICAgICAgICAgICBfcGFkX3RpbWVvdXQoaW50KHRlc3RfaW5mby50aW1l
b3V0KSkpCi0gICAgICAgIHNlbGYuX25leHRfdGltZW91dCA9IHN0YXJ0ICsgdGhyZWFkX3RpbWVv
dXQKIAorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAgICAgIGNyYXNoLCB0aW1lb3V0
LCBhY3R1YWxfY2hlY2tzdW0sIG91dHB1dCwgZXJyb3IgPSBcCi0gICAgICAgICAgIHNlbGYuX2Ry
aXZlci5ydW5fdGVzdCh0ZXN0X2luZm8udXJpLCB0ZXN0X2luZm8udGltZW91dCwgaW1hZ2VfaGFz
aCkKKyAgICAgICAgICAgc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5mby51cmksIHRlc3Rf
aW5mby50aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZv
LmltYWdlX2NoZWNrc3VtKQogICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQogCi0gICAgICAgIHJl
c3VsdCA9IF9wcm9jZXNzX291dHB1dChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLAorICAgICAg
ICByZXR1cm4gX3Byb2Nlc3Nfb3V0cHV0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8sIHNlbGYuX3Rlc3RfdHlwZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2FyZ3MsIGNyYXNo
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwgZW5kIC0gc3RhcnQs
IGFjdHVhbF9jaGVja3N1bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dCwgZXJyb3IpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVzdWx0cy5hcHBlbmQocmVzdWx0KQotICAg
ICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQsIGVycm9yLCBzZWxmLl9uYW1lKQogCiAgICAgZGVmIF9lbnN1cmVfZHVtcF9yZW5kZXJfdHJl
ZV9pc19ydW5uaW5nKHNlbGYpOgogICAgICAgICAiIiJTdGFydCB0aGUgc2hhcmVkIER1bXBSZW5k
ZXJUcmVlLCBpZiBpdCdzIG5vdCBydW5uaW5nLgpAQCAtNTQ1LDE0ICszNjMsNiBAQCBjbGFzcyBU
ZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zKQogICAgICAgICAgICAg
c2VsZi5fZHJpdmVyLnN0YXJ0KCkKIAotICAgIGRlZiBfc3RvcF9odHRwX2xvY2soc2VsZik6Ci0g
ICAgICAgICIiIlN0b3AgdGhlIHNlcnZlcnMgYW5kIHJlbGVhc2UgaHR0cCBsb2NrLiIiIgotICAg
ICAgICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuc3Rv
cF9odHRwX3NlcnZlcigpCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3Nl
cnZlcigpCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGVhc2VfaHR0cF9sb2NrKCkKLSAgICAg
ICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKLQogICAgIGRlZiBfa2lsbF9kdW1w
X3JlbmRlcl90cmVlKHNlbGYpOgogICAgICAgICAiIiJLaWxsIHRoZSBEdW1wUmVuZGVyVHJlZSBw
cm9jZXNzIGlmIGl0J3MgcnVubmluZy4iIiIKICAgICAgICAgaWYgc2VsZi5fZHJpdmVyOgpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRl
cl90cmVlX3RocmVhZF91bml0dGVzdC5weQppbmRleCA2M2Y4NmQ5M2Q4OTQ5NWVhOTdjOWYwMWFh
MTc0OTE2OGViNmFhYjhkLi4zMTg2MzA4MWNiN2U4ODQ0YWFlYzM4ZDgxYjgxOTMxODU0MjhjN2Vj
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZF91bml0dGVzdC5weQorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9k
dW1wX3JlbmRlcl90cmVlX3RocmVhZF91bml0dGVzdC5weQpAQCAtMzEsMTkgKzMxLDggQEAKIGlt
cG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCi1pbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJl
YWQKLQotCiBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9maW5k
X3RocmVhZF9zdGFja19mb3VuZChzZWxmKToKLSAgICAgICAgaWQsIHN0YWNrID0gc3lzLl9jdXJy
ZW50X2ZyYW1lcygpLml0ZW1zKClbMF0KLSAgICAgICAgZm91bmRfc3RhY2sgPSBkdW1wX3JlbmRl
cl90cmVlX3RocmVhZC5maW5kX3RocmVhZF9zdGFjayhpZCkKLSAgICAgICAgc2VsZi5hc3NlcnRO
b3RFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKLQotICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0
YWNrX25vdF9mb3VuZChzZWxmKToKLSAgICAgICAgZm91bmRfc3RhY2sgPSBkdW1wX3JlbmRlcl90
cmVlX3RocmVhZC5maW5kX3RocmVhZF9zdGFjaygwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGZvdW5kX3N0YWNrLCBOb25lKQotCisgICAgcGFzcwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRpbmcucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmlu
dGluZy5weQppbmRleCAwMGZmMjExNGM1MGEwNWUwMzhjMGQ0OTU4N2Q4N2VjMWI3ZjY5MjA1Li41
ZDhhOTIzNmUzZTA5MDcwOGJlM2ZhM2Y2Yjg1MGU3Yzk1MjMzOTQ3IDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmlu
dGluZy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9wcmludGluZy5weQpAQCAtMTgyLDggKzE4Miw4IEBAIGRlZiBfY29uZmln
dXJlX2xvZ2dpbmcoc3RyZWFtLCB2ZXJib3NlKToKICAgICBsb2dfZGF0ZWZtdCA9ICcleSVtJWQg
JUg6JU06JVMnCiAgICAgbG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCiAgICAgaWYgdmVyYm9zZToK
LSAgICAgICAgbG9nX2ZtdCA9ICgnJShhc2N0aW1lKXMgJShmaWxlbmFtZSlzOiUobGluZW5vKS00
ZCAlKGxldmVsbmFtZSlzICcKLSAgICAgICAgICAgICAgICAnJShtZXNzYWdlKXMnKQorICAgICAg
ICBsb2dfZm10ID0gKCclKGFzY3RpbWUpcyAlKHByb2Nlc3MpZCAlKGZpbGVuYW1lKXM6JShsaW5l
bm8pLTRkICcKKyAgICAgICAgICAgICAgICAgICAnJShsZXZlbG5hbWUpcyAlKG1lc3NhZ2Upcycp
CiAgICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcKIAogICAgIHJvb3QgPSBsb2dnaW5n
LmdldExvZ2dlcigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9yb3V0ZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9yb3V0ZXIucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTVlYThlM2ZhZWUyYjUwNWFhNWI5NjFhZWMwYmE3ODk4Mjg2ZjYyYQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL3JvdXRlci5weQpAQCAtMCwwICsxLDU0MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2lt
cG9ydCBjUGlja2xlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1w
b3J0IG9zCitpbXBvcnQgUXVldWUKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWQKK2ltcG9ydCB0
aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCisKK2ltcG9ydCBkdW1wX3Jl
bmRlcl90cmVlX3RocmVhZAoraW1wb3J0IHRlc3RfcmVzdWx0cworCisKK19sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLnJvdXRlciIp
CisKKworZGVmIGdldChwb3J0LCBvcHRpb25zKToKKyAgICBpZiBvcHRpb25zLndvcmtlcnNfYXJl
ID09ICdpbmxpbmUnOgorICAgICAgICByZXR1cm4gU2luZ2xlVGhyZWFkZWRSb3V0ZXIocG9ydCwg
b3B0aW9ucykKKyAgICBpZiBvcHRpb25zLndvcmtlcnNfYXJlID09ICd0aHJlYWRzJzoKKyAgICAg
ICAgcmV0dXJuIE11bHRpVGhyZWFkZWRSb3V0ZXIocG9ydCwgb3B0aW9ucykKKyAgICByZXR1cm4g
TXVsdGlQcm9jZXNzUm91dGVyKHBvcnQsIG9wdGlvbnMpCisKKworY2xhc3MgX01lc3NhZ2Uob2Jq
ZWN0KToKKyAgICBURVNUX0xJU1QgPSAndGVzdF9saXN0JworICAgIFNUT1AgPSAnc3RvcCcKKyAg
ICBET05FID0gJ2RvbmUnCisgICAgU1RBUlRFRF9URVNUID0gJ3N0YXJ0ZWRfdGVzdCcKKyAgICBG
SU5JU0hFRF9URVNUID0gJ2ZpbmlzaGVkX3Rlc3QnCisgICAgRklOSVNIRURfR1JPVVAgPSAnZmlu
aXNoZWRfZ3JvdXAnCisgICAgRVhDRVBUSU9OID0gJ2V4Y2VwdGlvbicKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgbG9hZHMoc3RyKToKKyAgICAgICAgb2JqID0gY1BpY2tsZS5sb2Fkcyhz
dHIpCisgICAgICAgIGFzc2VydChpc2luc3RhbmNlKG9iaiwgX01lc3NhZ2UpKQorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHNyYywgZGVzdCwgaGRyLCBib2R5KToKKyAgICAgICAgc2VsZi5zcmMg
PSBzcmMKKyAgICAgICAgc2VsZi5kZXN0ID0gZGVzdAorICAgICAgICBzZWxmLmhkciA9IGhkcgor
ICAgICAgICBzZWxmLmJvZHkgPSBib2R5CisKKyAgICBkZWYgZHVtcHMoc2VsZik6CisgICAgICAg
IHJldHVybiBjUGlja2xlLmR1bXBzKHNlbGYpCisKKworY2xhc3MgX1dvcmtlclN0YXRlKG9iamVj
dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSBOb25lCisg
ICAgICAgIHNlbGYubmV4dF90aW1lb3V0ID0gTm9uZQorICAgICAgICBzZWxmLnRocmVhZCA9IE5v
bmUKKyAgICAgICAgc2VsZi53ZWRnZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmRvbmUgPSBGYWxz
ZQorCisKK2NsYXNzIFJvdXRlcihvYmplY3QpOgorICAgIE1BTkFHRVIgPSAnbWFuYWdlcicKKyAg
ICBBTllfV09SS0VSID0gJ3dvcmtlci1cZCsnCisKKyAgICBJTl9NRU1PUllfUkVQUkVTRU5UQVRJ
T04gPSAiPGluX21lbW9yeT4iCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvYWRzKHN0
cik6CisgICAgICAgIGFzc2VydCBzdHIgPT0gUm91dGVyLklOX01FTU9SWV9SRVBSRVNFTlRBVElP
TgorICAgICAgICBnbG9iYWwgX3JvdXRlcgorICAgICAgICByZXR1cm4gX3JvdXRlcgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9wb3J0ID0g
cG9ydAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9tYW5h
Z2VyID0gTm9uZQorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKyAgICAgICAgc2VsZi5fbnVt
X3dvcmtlcnMgPSBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpCisgICAgICAgIHNl
bGYuX21hbmFnZXJfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHNlbGYuX3dvcmtlcl9x
dWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fZ3JvdXBfdGltaW5nX3N0YXRzID0g
e30KKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3Rh
cnRfd29ya2VycyhzZWxmKToKKyAgICAgICAgIiIiSW5zdGFudGlhdGVzIGFuZCBzdGFydHMgdGhl
IFRlc3RTaGVsbFRocmVhZChzKS4iIiIKKyAgICAgICAgIyBJbnN0YW50aWF0ZSBUZXN0U2hlbGxU
aHJlYWRzIGFuZCBzdGFydCB0aGVtLgorICAgICAgICBmb3Igd29ya2VyX251bWJlciBpbiB4cmFu
Z2Uoc2VsZi5fbnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgIyBDcmVhdGUgc2VwYXJhdGUgVGVz
dFR5cGVzIGluc3RhbmNlcyBmb3IgZWFjaCB0aHJlYWQuCisgICAgICAgICAgICB3b3JrZXIgPSBf
V29ya2VyU3RhdGUoKQorCisgICAgICAgICAgICB3b3JrZXIudGhyZWFkID0gc2VsZi5fc3RhcnRf
d29ya2VyKHdvcmtlcl9udW1iZXIpCisgICAgICAgICAgICB3b3JrZXIubmFtZSA9ICd3b3JrZXIt
JWQnICUgd29ya2VyX251bWJlcgorICAgICAgICAgICAgc2VsZi5fd29ya2Vyc1t3b3JrZXIubmFt
ZV0gPSB3b3JrZXIKKworICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIp
OgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2JhaWwoc2Vs
ZiwgbXNnKToKKyAgICAgICAgX2xvZy5lcnJvcihtc2cpCisgICAgICAgIGFzc2VydCBGYWxzZSwg
bXNnCisKKyAgICBkZWYgc3RvcF93b3JrZXJzKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBTaG91
bGQgdGhpcyBiZSBibG9ja2luZz8KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihzZWxmLl93
b3JrZXJzKSk6CisgICAgICAgICAgICBzZWxmLnBvc3Rfc3RvcCgpCisKKyAgICBkZWYgY2FuY2Vs
X3dvcmtlcnMoc2VsZik6CisgICAgICAgIGZvciB3b3JrZXIgaW4gc2VsZi5fd29ya2Vycy52YWx1
ZXMoKToKKyAgICAgICAgICAgIHdvcmtlci50aHJlYWQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5f
cG9sbF9tYW5hZ2VyX3F1ZXVlKHNlbGYuX21hbmFnZXIuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMCkK
KworICAgIGRlZiBwb3N0X3Rlc3RfbGlzdChzZWxmLCB0ZXN0X2xpc3QpOgorICAgICAgICBzZWxm
Ll9wdXQoc3JjPXNlbGYuTUFOQUdFUiwgZGVzdD1zZWxmLkFOWV9XT1JLRVIsCisgICAgICAgICAg
ICAgICAgICBoZHI9X01lc3NhZ2UuVEVTVF9MSVNULCBib2R5PXRlc3RfbGlzdCkKKworICAgIGRl
ZiBwb3N0X3N0YXJ0ZWRfdGVzdChzZWxmLCBzcmMsIHRlc3RfaW5mbywgaGFuZ190aW1lb3V0KToK
KyAgICAgICAgc2VsZi5fcHV0KHNyYz1zcmMsIGRlc3Q9c2VsZi5NQU5BR0VSLCBoZHI9X01lc3Nh
Z2UuU1RBUlRFRF9URVNULAorICAgICAgICAgICAgICAgICAgYm9keT0odGVzdF9pbmZvLCBoYW5n
X3RpbWVvdXQpKQorCisgICAgZGVmIHBvc3RfZmluaXNoZWRfZ3JvdXAoc2VsZiwgc3JjLCBncm91
cF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9
c3JjLCBkZXN0PXNlbGYuTUFOQUdFUiwgaGRyPV9NZXNzYWdlLkZJTklTSEVEX0dST1VQLAorICAg
ICAgICAgICAgICAgICAgYm9keT0oZ3JvdXBfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUp
KQorCisgICAgZGVmIHBvc3RfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNl
ZF90aW1lKToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz1zcmMsIGRlc3Q9c2VsZi5NQU5BR0VSLCBo
ZHI9X01lc3NhZ2UuRklOSVNIRURfVEVTVCwKKyAgICAgICAgICAgICAgICAgIGJvZHk9KHJlc3Vs
dCwgZWxhcHNlZF90aW1lKSkKKworICAgIGRlZiBwb3N0X2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4
Y19pbmZvKToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz1zcmMsIGRlc3Q9c2VsZi5NQU5BR0VSLCBo
ZHI9X01lc3NhZ2UuRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgYm9keT1leGNfaW5mbykK
KworICAgIGRlZiBwb3N0X3N0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c2VsZi5N
QU5BR0VSLCBkZXN0PXNlbGYuQU5ZX1dPUktFUiwKKyAgICAgICAgICAgICAgICAgIGhkcj1fTWVz
c2FnZS5TVE9QLCBib2R5PU5vbmUpCisKKyAgICBkZWYgcG9zdF9kb25lKHNlbGYsIHdvcmtlcik6
CisgICAgICAgIHNlbGYuX3B1dChzcmM9d29ya2VyLCBkZXN0PXNlbGYuTUFOQUdFUiwKKyAgICAg
ICAgICAgICAgICAgIGhkcj1fTWVzc2FnZS5ET05FLCBib2R5PU5vbmUpCisKKyAgICBkZWYgbG9v
cChzZWxmLCBvYmopOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJzdWJjbGFz
cyBtdXN0IGltcGxlbWVudCBSb3V0ZXIubG9vcCgpIikKKworICAgIGRlZiBfcHV0KHNlbGYsIHNy
YywgZGVzdCwgaGRyLCBib2R5KToKKyAgICAgICAgbXNnID0gX01lc3NhZ2Uoc3JjLCBkZXN0LCBo
ZHIsIGJvZHkpCisgICAgICAgIGlmIG1zZy5kZXN0ID09IHNlbGYuTUFOQUdFUjoKKyAgICAgICAg
ICAgICMgX2xvZy5kZWJ1ZygiJXM6IHBvc3RpbmcgJyVzJyBtc2cgdG8gbWFuYWdlciBxdWV1ZSIg
JQorICAgICAgICAgICAgIyAgICAgICAgICAgICAobXNnLnNyYywgbXNnLmhkcikpCisgICAgICAg
ICAgICBzZWxmLl9tYW5hZ2VyX3F1ZXVlLnB1dChtc2cpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAjIF9sb2cuZGVidWcoIiVzOiBwb3N0aW5nICclcycgbXNnIHRvIHdvcmtlciBxdWV1ZSIg
JQorICAgICAgICAgICAgIyAgICAgICAgICAgICAobXNnLnNyYywgbXNnLmhkcikpCisgICAgICAg
ICAgICBzZWxmLl93b3JrZXJfcXVldWUucHV0KG1zZykKKworICAgIGRlZiBfZ2V0KHNlbGYsIG5h
bWUsIHF1ZXVlLCBibG9jaywgdGltZW91dCk6CisgICAgICAgIGlmIHF1ZXVlID09IHNlbGYuX21h
bmFnZXJfcXVldWU6CisgICAgICAgICAgICBxdWV1ZV9uYW1lID0gIm1hbmFnZXIgcXVldWUiCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBxdWV1ZV9uYW1lID0gIndvcmtlciBxdWV1ZSIKKwor
ICAgICAgICB0cnk6CisgICAgICAgICAgICAjX2xvZy5kZWJ1ZygiJXMgbmFtZSByZWFkaW5nIGZy
b20gJXMgcXVldWUiICUgKG5hbWUsIHF1ZXVlX25hbWUpKQorICAgICAgICAgICAgbXNnID0gcXVl
dWUuZ2V0KGJsb2NrLCB0aW1lb3V0KQorICAgICAgICAgICAgI19sb2cuZGVidWcoIiVzIGdvdCAn
JXMnIG1zZyBmcm9tICVzIiAlIChuYW1lLCBtc2cuaGRyLCBtc2cuc3JjKSkKKyAgICAgICAgICAg
IHJldHVybiBtc2cKKyAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgI19s
b2cuZGVidWcoIiVzIGZvdW5kICVzIGVtcHR5IiAlIChuYW1lLCBxdWV1ZV9uYW1lKSkKKyAgICAg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3BvbGxfbWFuYWdlcl9xdWV1ZShzZWxmLCBu
YW1lLCB0aW1lb3V0KToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICMgTm90ZSB0
aGF0IGJsb2NrPVRydWUsIHRpbWVvdXQ9MCBpcyBlcXVpdmFsZW50IHRvIGJsb2NrPUZhbHNlLgor
ICAgICAgICAgICAgbXNnID0gc2VsZi5fZ2V0KG5hbWUsIHNlbGYuX21hbmFnZXJfcXVldWUsIFRy
dWUsIHRpbWVvdXQpCisgICAgICAgICAgICBpZiBub3QgbXNnOgorICAgICAgICAgICAgICAgIGJy
ZWFrCisKKyAgICAgICAgICAgIGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuU1RBUlRFRF9URVNUOgor
ICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9zdGFydGVkX3Rlc3QobXNnKQorICAgICAgICAg
ICAgZWxpZiBtc2cuaGRyID09IF9NZXNzYWdlLkZJTklTSEVEX1RFU1Q6CisgICAgICAgICAgICAg
ICAgc2VsZi5faGFuZGxlX2ZpbmlzaGVkX3Rlc3QobXNnKQorICAgICAgICAgICAgZWxpZiBtc2cu
aGRyID09IF9NZXNzYWdlLkZJTklTSEVEX0dST1VQOgorICAgICAgICAgICAgICAgIHNlbGYuX2hh
bmRsZV9maW5pc2hlZF9ncm91cChtc2cpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01l
c3NhZ2UuRE9ORToKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZG9uZShtc2cpCisgICAg
ICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuRVhDRVBUSU9OOgorICAgICAgICAgICAg
ICAgIHNlbGYuX2hhbmRsZV9leGNlcHRpb24obXNnKQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBzZWxmLl9iYWlsKCd1bmV4cGVjdGVkIG1lc3NhZ2UgdHlwZSBvbiBtYW5hZ2Vy
IHF1ZXVlOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmhkcikKKworICAg
IGRlZiBfcG9sbF93b3JrZXJfcXVldWUoc2VsZiwgd29ya2VyLCBwb2xsX21hbmFnZXIpOgorICAg
ICAgICB3aGlsZSBub3Qgd29ya2VyLmlzX2RvbmUoKToKKyAgICAgICAgICAgIG1zZyA9IHNlbGYu
X2dldCh3b3JrZXIuZ2V0TmFtZSgpLCBzZWxmLl93b3JrZXJfcXVldWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm90IHBvbGxfbWFuYWdlciwgTm9uZSkKKyAgICAgICAgICAgIGlmIG5v
dCBtc2c6CisgICAgICAgICAgICAgICAgaWYgbm90IHBvbGxfbWFuYWdlcjoKKyAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fYmFpbCgnJXMgdW5leHBlY3RlZGx5IHJhbiBvdXQgb2YgcXVldWVkIG1l
c3NhZ2VzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLmdldE5hbWUo
KSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBtc2cuaGRyID09IF9N
ZXNzYWdlLlNUT1A6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX3N0b3Aod29ya2VyKQor
ICAgICAgICAgICAgZWxpZiBtc2cuaGRyID09IF9NZXNzYWdlLlRFU1RfTElTVDoKKyAgICAgICAg
ICAgICAgICAodGVzdF9ncm91cCwgdGVzdF9saXN0KSA9IG1zZy5ib2R5CisgICAgICAgICAgICAg
ICAgc2VsZi5faGFuZGxlX3Rlc3RfbGlzdCh3b3JrZXIsIHRlc3RfZ3JvdXAsIHRlc3RfbGlzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGxfbWFuYWdlcikKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fYmFpbCgnJXM6IHVuZXhwZWN0
ZWQgbWVzc2FnZSB0eXBlIG9uIHdvcmtlciBxdWV1ZTogJXMnICUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh3b3JrZXIuZ2V0TmFtZSgpLCBtc2cuaGRyKSkKKworICAgIGRlZiBfaGFuZGxl
X3N0YXJ0ZWRfdGVzdChzZWxmLCBtc2cpOgorICAgICAgICAodGVzdF9pbmZvLCBoYW5nX3RpbWVv
dXQpID0gbXNnLmJvZHkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fd29ya2Vyc1ttc2cuc3JjXQor
ICAgICAgICB3b3JrZXIuY3VycmVudF90ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUodGVzdF9pbmZvLmZpbGVuYW1lKQorICAgICAgICB3b3JrZXIubmV4dF90aW1l
b3V0ID0gdGltZS50aW1lKCkgKyBoYW5nX3RpbWVvdXQKKworICAgIGRlZiBfaGFuZGxlX2Zpbmlz
aGVkX3Rlc3Qoc2VsZiwgbXNnKToKKyAgICAgICAgKHJlc3VsdCwgZWxhcHNlZF90aW1lKSA9IG1z
Zy5ib2R5CisgICAgICAgIHdvcmtlciA9IHNlbGYuX3dvcmtlcnNbbXNnLnNyY10KKyAgICAgICAg
d29ya2VyLm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAgd29ya2VyLmN1cnJlbnRfdGVzdCA9
IE5vbmUKKworICAgICAgICBpZiB3b3JrZXIud2VkZ2VkOgorICAgICAgICAgICAgIyBIbW0uIFRo
aXMgc2hvdWxkbid0IGhhcHBlbi4KKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIiVzIHVud2VkZ2Vk
Iiwgd29ya2VyLmdldE5hbWUoKSkKKworICAgICAgICBzZWxmLl9tYW5hZ2VyLmhhbmRsZV9maW5p
c2hlZF90ZXN0KG1zZy5zcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKQorCisgICAgZGVmIF9oYW5k
bGVfZmluaXNoZWRfZ3JvdXAoc2VsZiwgbXNnKToKKyAgICAgICAgKGdyb3VwX25hbWUsIG51bV90
ZXN0cywgZWxhcHNlZF90aW1lKSA9IG1zZy5ib2R5CisgICAgICAgIHNlbGYuX21hbmFnZXIuaGFu
ZGxlX2ZpbmlzaGVkX2dyb3VwKG1zZy5zcmMsIGdyb3VwX25hbWUsIG51bV90ZXN0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZF90aW1lKQorCisg
ICAgZGVmIF9oYW5kbGVfZXhjZXB0aW9uKHNlbGYsIG1zZyk6CisgICAgICAgIGV4Y2VwdGlvbl9p
bmZvID0gbXNnLmJvZHkKKyAgICAgICAgc2VsZi5fbWFuYWdlci5oYW5kbGVfZXhjZXB0aW9uKG1z
Zy5zcmMsIGV4Y2VwdGlvbl9pbmZvKQorCisgICAgZGVmIF9oYW5kbGVfc3RvcChzZWxmLCB3b3Jr
ZXIpOgorICAgICAgICB3b3JrZXIuaGFuZGxlX3N0b3AoKQorCisgICAgZGVmIF9oYW5kbGVfZG9u
ZShzZWxmLCBtc2cpOgorICAgICAgICB3b3JrZXIgPSBzZWxmLl93b3JrZXJzW21zZy5zcmNdCisg
ICAgICAgIHdvcmtlci5kb25lID0gVHJ1ZQorICAgICAgICAjIF9sb2cuZGVidWcoIiVzIGlzIGRv
bmUiICUgd29ya2VyLm5hbWUpCisgICAgICAgIHNlbGYuX21hbmFnZXIuaGFuZGxlX2RvbmUobXNn
LnNyYykKKworICAgIGRlZiBfaGFuZGxlX3Rlc3RfbGlzdChzZWxmLCB3b3JrZXIsIHRlc3RfZ3Jv
dXAsIHRlc3RfbGlzdCwgcG9sbF9tYW5hZ2VyKToKKyAgICAgICAgd29ya2VyLmhhbmRsZV90ZXN0
X2xpc3QodGVzdF9ncm91cCwgdGVzdF9saXN0LCBwb2xsX21hbmFnZXIpCisKKyAgICBkZWYgX2xv
Z193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IKKworCitjbGFzcyBTaW5nbGVUaHJlYWRlZFJvdXRlcihSb3V0ZXIpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKToKKyAgICAgICAgUm91dGVyLl9faW5pdF9f
KHNlbGYsIHBvcnQsIG9wdGlvbnMpCisgICAgICAgICMgRklYTUU6IENvdWxkIHVzZSBmYWtlIHF1
ZXVlcyBoZXJlLgorICAgICAgICBzZWxmLl9tYW5hZ2VyX3F1ZXVlID0gUXVldWUuUXVldWUoKQor
ICAgICAgICBzZWxmLl93b3JrZXJfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisKKyAgICBkZWYgX3N0
YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgIyBGSVhNRTogVXNlIFdv
cmtlclRodW5rIGluc3RlYWQgLi4uCisgICAgICAgIHRodW5rID0gX1dvcmtlclRocmVhZChzZWxm
LCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3b3JrZXJfbnVtYmVyKQorICAgICAgICByZXR1cm4gdGh1bmsKKworICAgIGRlZiBs
b29wKHNlbGYsIG1hbmFnZXIpOgorICAgICAgICBzZWxmLl9tYW5hZ2VyID0gbWFuYWdlcgorICAg
ICAgICB3b3JrZXIgPSBzZWxmLl93b3JrZXJzWyd3b3JrZXItMCddCisgICAgICAgIHNlbGYuX3Bv
bGxfd29ya2VyX3F1ZXVlKHdvcmtlci50aHJlYWQsIHBvbGxfbWFuYWdlcj1UcnVlKQorCisgICAg
ZGVmIF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICBhc3NlcnQgRmFs
c2UsICJTaW5nbGVUaHJlYWRlZFJvdXRlci5fbG9nX3dlZGdlZF93b3JrZXIoKSBzaG91bGQgbmV2
ZXIgYmUgY2FsbGVkIgorCisKK2NsYXNzIE11bHRpVGhyZWFkZWRSb3V0ZXIoU2luZ2xlVGhyZWFk
ZWRSb3V0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKToKKyAgICAg
ICAgU2luZ2xlVGhyZWFkZWRSb3V0ZXIuX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucykKKwor
ICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICB0aHVu
ayA9IF9Xb3JrZXJUaHJlYWQoc2VsZiwgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV29ya2VyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX251bWJlcikKKyAgICAgICAgdGh1
bmsuc3RhcnQoKQorICAgICAgICByZXR1cm4gdGh1bmsKKworICAgIGRlZiBsb29wKHNlbGYsIG9i
aik6CisgICAgICAgIGlmIG9iai5nZXROYW1lKCkgPT0gc2VsZi5NQU5BR0VSOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX2xvb3BfbWFuYWdlcihvYmopCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5fbG9vcF93b3JrZXIob2JqKQorCisgICAgZGVmIF9sb29wX21hbmFn
ZXIoc2VsZiwgbWFuYWdlcik6CisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBtYW5hZ2VyCisgICAg
ICAgIHNlbGYuX3BvbGxfbWFuYWdlcl9xdWV1ZShtYW5hZ2VyLmdldE5hbWUoKSwgdGltZW91dD0w
LjAxKQorICAgICAgICB3aGlsZSBub3Qgc2VsZi5fY2hlY2tfb25fd29ya2VycygpOgorICAgICAg
ICAgICAgc2VsZi5fcG9sbF9tYW5hZ2VyX3F1ZXVlKG1hbmFnZXIuZ2V0TmFtZSgpLCB0aW1lb3V0
PTAuMDEpCisKKyAgICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAg
ICAgICAgIGFzc2VydCB3LndlZGdlZCBvciBub3Qgdy50aHJlYWQuaXNfYWxpdmUoKQorCisgICAg
ZGVmIF9sb29wX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICB3aGlsZSBub3Qgd29ya2Vy
LmlzX2RvbmUoKToKKyAgICAgICAgICAgIHNlbGYuX3BvbGxfd29ya2VyX3F1ZXVlKHdvcmtlciwg
cG9sbF9tYW5hZ2VyPUZhbHNlKQorCisgICAgZGVmIF9jaGVja19vbl93b3JrZXJzKHNlbGYpOgor
ICAgICAgICAiUmV0dXJucyB0cnVlIGlmZiBhbGwgdGhlIHdvcmtlcnMgaGF2ZSBlaXRoZXIgY29t
cGxldGVkIG9yIHdlZGdlZC4iCisgICAgICAgIGRvbmUgPSBUcnVlCisgICAgICAgIHQgPSB0aW1l
LnRpbWUoKQorICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCk6Cisg
ICAgICAgICAgICBpZiBub3Qgd29ya2VyLmRvbmUgYW5kIG5vdCB3b3JrZXIud2VkZ2VkOgorICAg
ICAgICAgICAgICAgIG5leHRfdGltZW91dCA9IHdvcmtlci5uZXh0X3RpbWVvdXQKKyAgICAgICAg
ICAgICAgICBpZiAobmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0KToKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fbG9nX3dlZGdlZF93b3JrZXIod29ya2VyLndvcmtlcikKKyAgICAg
ICAgICAgICAgICAgICAgd29ya2VyLndlZGdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgICAgICAjIF9sb2cuZGVidWcoIiVzIGlzIG5vdCBkb25lIiAlIHdv
cmtlci5uYW1lKQorICAgICAgICAgICAgICAgICAgICBkb25lID0gRmFsc2UKKyAgICAgICAgcmV0
dXJuIGRvbmUKKworICAgIGRlZiBfbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgd29ya2VyKToKKyAg
ICAgICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUuIiIi
CisgICAgICAgIGlkID0gd29ya2VyLnRocmVhZC5pZCgpCisgICAgICAgIHN0YWNrID0gc2VsZi5f
ZmluZF90aHJlYWRfc3RhY2soaWQpCisgICAgICAgIGFzc2VydChzdGFjayBpcyBub3QgTm9uZSkK
KyAgICAgICAgX2xvZy5lcnJvcigiIikKKyAgICAgICAgX2xvZy5lcnJvcigiJXMgKHRpZCAlZCkg
aXMgd2VkZ2VkIG9uIHRlc3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAod29ya2VyLnRocmVh
ZC5nZXROYW1lKCksIGlkLCB3b3JrZXIuY3VycmVudF90ZXN0X25hbWUpKQorICAgICAgICBzZWxm
Ll9sb2dfc3RhY2soc3RhY2spCisgICAgICAgIF9sb2cuZXJyb3IoIiIpCisKKyAgICBkZWYgX2Zp
bmRfdGhyZWFkX3N0YWNrKHNlbGYsIGlkKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHN0YWNrIG9i
amVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGR1bXAgYSBzdGFjayB0cmFjZSBmb3IKKyAgICAgICAg
dGhlIGdpdmVuIHRocmVhZCBpZCAob3IgTm9uZSBpZiB0aGUgaWQgaXMgbm90IGZvdW5kKS4iIiIK
KyAgICAgICAgZm9yIHRocmVhZF9pZCwgc3RhY2sgaW4gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0
ZW1zKCk6CisgICAgICAgICAgICBpZiB0aHJlYWRfaWQgPT0gaWQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHN0YWNrCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2xvZ19zdGFjayhz
ZWxmLCBzdGFjayk6CisgICAgICAgICIiIkxvZyBhIHN0YWNrIHRyYWNlIHRvIGxvZy5lcnJvcigp
LiIiIgorICAgICAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiB0cmFjZWJh
Y2suZXh0cmFjdF9zdGFjayhzdGFjayk6CisgICAgICAgICAgICBfbG9nLmVycm9yKCdGaWxlOiAi
JXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCisgICAgICAg
ICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJXMnICUgbGluZS5z
dHJpcCgpKQorCisKK2NsYXNzIE11bHRpUHJvY2Vzc1JvdXRlcihNdWx0aVRocmVhZGVkUm91dGVy
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAgIFJvdXRl
ci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKQorICAgICAgICBzZWxmLl9tYW5hZ2VyX3F1
ZXVlID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVl
ID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKworICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYs
IHdvcmtlcl9udW1iZXIpOgorICAgICAgICB0aHVuayA9IF9Xb3JrZXJQcm9jZXNzKHNlbGYsIGR1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3b3JrZXJfbnVtYmVyKQorICAgICAgICB0aHVuay5zdGFydCgpCisgICAgICAgIHJldHVy
biB0aHVuaworCisgICAgZGVmIHBvc3RfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX2lu
Zm8pOgorICAgICAgICAjIEZJWE1FOiBXZSBjYW4ndCBwaWNrbGUgdHJhY2ViYWNrIG9iamVjdHMs
IHNvIGxvZyB0aGUgdHJhY2ViYWNrIGhlcmUuCisgICAgICAgIG1wX2V4Y19pbmZvID0gKGV4Y2Vw
dGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgTm9uZSkKKyAgICAgICAgTXVsdGlUaHJl
YWRlZFJvdXRlci5wb3N0X2V4Y2VwdGlvbihzZWxmLCBzcmMsIG1wX2V4Y19pbmZvKQorCisgICAg
ZGVmIF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICBpZCA9IHdvcmtl
ci50aHJlYWQuaWQoKQorICAgICAgICBfbG9nLmVycm9yKCIiKQorICAgICAgICBfbG9nLmVycm9y
KCIlcyAocGlkICVkKSBpcyB3ZWRnZWQgb24gdGVzdCAlcyIgJQorICAgICAgICAgICAgICAgICAg
ICh3b3JrZXIudGhyZWFkLmdldE5hbWUoKSwgaWQsIHdvcmtlci5jdXJyZW50X3Rlc3RfbmFtZSkp
CisgICAgICAgIF9sb2cuZXJyb3IoIiIpCisKKworY2xhc3MgX1dvcmtlclRodW5rKG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRlciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVt
YmVyKToKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25lCisgICAgICAgIHNlbGYu
X3JvdXRlciA9IHJvdXRlcgorICAgICAgICBzZWxmLl9vcHRpb25zID0gcm91dGVyLl9vcHRpb25z
CisgICAgICAgIHNlbGYuX3BvcnQgPSByb3V0ZXIuX3BvcnQKKyAgICAgICAgc2VsZi5fY2FuY2Vs
bGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisgICAgICAgIHNlbGYuX2hh
dmVfaHR0cF9sb2NrID0gRmFsc2UKKyAgICAgICAgc2VsZi5faWQgPSAwCisgICAgICAgIHNlbGYu
X3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX3dvcmtlciA9IHdv
cmtlcl9jbGFzcyhzZWxmLl9wb3J0LCBzZWxmLCBzZWxmLl9vcHRpb25zLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX251bWJlcikKKworICAgIGRlZiBpZChzZWxm
KToKKyAgICAgICAgIyB1c2VkIGR1cmluZyBsb2dfd2VkZ2VkX3dvcmtlcgorICAgICAgICByZXR1
cm4gc2VsZi5faWQKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNl
bGxlZCA9IFRydWUKKworICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fZG9uZSBvciBzZWxmLl9jYW5jZWxsZWQKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmKToK
KyAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9yZWxl
YXNlX2xvY2soKQorICAgICAgICBzZWxmLl93b3JrZXIuaGFuZGxlX3N0b3AoKQorICAgICAgICBz
ZWxmLl9kb25lID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV90ZXN0X2xpc3Qoc2VsZiwgZ3JvdXBf
bmFtZSwgdGVzdF9saXN0LCBwb2xsX21hbmFnZXIpOgorICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LndhaXRfZm9yX2h0dHBkOgorICAgICAgICAgICAgaWYgZ3JvdXBfbmFtZSA9PSAidGVzdHNfdG9f
aHR0cF9sb2NrIjoKKyAgICAgICAgICAgICAgICBzZWxmLl9hY3F1aXJlX2xvY2soKQorICAgICAg
ICAgICAgZWxpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLl9y
ZWxlYXNlX2xvY2soKQorCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAg
ICBudW1fdGVzdHMgPSAwCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RfbGlzdDoKKyAgICAgICAg
ICAgIHNlbGYuX3dvcmtlci5ydW5fdGVzdCh0ZXN0KQorICAgICAgICAgICAgbnVtX3Rlc3RzICs9
IDEKKworICAgICAgICAgICAgIyBGSVhNRTogTmVlZCB0byBnZXQgcmlkIG9mIHRoaXMuCisgICAg
ICAgICAgICBpZiBwb2xsX21hbmFnZXI6CisgICAgICAgICAgICAgICAgc2VsZi5fcm91dGVyLl9w
b2xsX21hbmFnZXJfcXVldWUoc2VsZi5nZXROYW1lKCksIHRpbWVvdXQ9MC4wKQorCisgICAgICAg
ICAgICBpZiBzZWxmLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAg
ZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCisKKyAgICAgICAgaWYgc2Vs
Zi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9yZWxlYXNlX2xvY2soKQorCisg
ICAgICAgIHNlbGYuX3JvdXRlci5wb3N0X2ZpbmlzaGVkX2dyb3VwKHNlbGYuZ2V0TmFtZSgpLCBn
cm91cF9uYW1lLCBudW1fdGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgcGFz
cworCisgICAgZGVmIHN0YXJ0ZWRfdGVzdChzZWxmLCB0ZXN0X2luZm8sIGh1bmdfdGhyZWFkX3Rp
bWVvdXQpOgorICAgICAgICBzZWxmLl9yb3V0ZXIucG9zdF9zdGFydGVkX3Rlc3Qoc2VsZi5nZXRO
YW1lKCksIHRlc3RfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGh1bmdfdGhyZWFkX3RpbWVvdXQpCisKKyAgICBkZWYgZmluaXNoZWRfdGVzdChzZWxmLCByZXN1
bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX3JvdXRlci5wb3N0X2ZpbmlzaGVkX3Rl
c3Qoc2VsZi5nZXROYW1lKCksIHJlc3VsdCwgZWxhcHNlZF90aW1lKQorCisgICAgZGVmIF9hY3F1
aXJlX2xvY2soc2VsZik6CisgICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQor
ICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKKyAgICAgICAgc2VsZi5fcG9y
dC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sg
PSBUcnVlCisKKyAgICBkZWYgX3JlbGVhc2VfbG9jayhzZWxmKToKKyAgICAgICAgIiIiU3RvcCB0
aGUgc2VydmVycyBhbmQgcmVsZWFzZSBodHRwIGxvY2suIiIiCisgICAgICAgIGlmIHNlbGYuX2hh
dmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkK
KyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAg
ICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQorICAgICAgICAgICAgc2VsZi5faGF2
ZV9odHRwX2xvY2sgPSBGYWxzZQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5f
aWQgPSBzZWxmLl9nZXRfaWQoKQorICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGV4
Y2VwdGlvbl9tc2cgPSAiIgorICAgICAgICBfbG9nLmRlYnVnKCclcyBzdGFydGluZycgJSBuYW1l
KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3JvdXRlci5sb29wKHNlbGYpCisg
ICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9t
c2cgPSAiLCBpbnRlcnJ1cHRlZCIKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjZXB0
aW9uX21zZyA9ICIsIGV4Y2VwdGlvbiByYWlzZWQiCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBfbG9nLmRlYnVnKCIlcyBkb25lJXMiICUgKG5hbWUsIGV4Y2VwdGlvbl9tc2cpKQorICAg
ICAgICAgICAgaWYgZXhjZXB0aW9uX21zZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9leGNlcHRp
b25faW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgc2VsZi5fcm91dGVyLnBv
c3RfZXhjZXB0aW9uKHNlbGYuZ2V0TmFtZSgpLCBzZWxmLl9leGNlcHRpb25faW5mbykKKyAgICAg
ICAgICAgIHNlbGYuX3JvdXRlci5wb3N0X2RvbmUobmFtZSkKKworICAgICAgICBhc3NlcnQgZXhj
ZXB0aW9uX21zZyBvciBzZWxmLl9kb25lIG9yIHNlbGYuX2NhbmNlbGxlZCwgImV4aXRpbmcgdW5l
eHBlY3RlZGx5IgorCisKK2NsYXNzIF9Xb3JrZXJUaHJlYWQoX1dvcmtlclRodW5rLCB0aHJlYWRp
bmcuVGhyZWFkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm91dGVyLCB3b3JrZXJfY2xhc3Ms
IHdvcmtlcl9udW1iZXIpOgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYp
CisgICAgICAgIF9Xb3JrZXJUaHVuay5fX2luaXRfXyhzZWxmLCByb3V0ZXIsIHdvcmtlcl9jbGFz
cywgd29ya2VyX251bWJlcikKKyAgICAgICAgc2VsZi5uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3Jr
ZXJfbnVtYmVyCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pZAor
CisgICAgZGVmIF9nZXRfaWQoc2VsZik6CisgICAgICAgIHRocmVhZC5nZXRfaWRlbnQoKQorCisg
ICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gVHJ1ZQorCisg
ICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLnN0YXJ0KHNlbGYp
CisKKworY2xhc3MgX1dvcmtlclByb2Nlc3MoX1dvcmtlclRodW5rLCBtdWx0aXByb2Nlc3Npbmcu
UHJvY2Vzcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRlciwgd29ya2VyX2NsYXNzLCB3
b3JrZXJfbnVtYmVyKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuX19pbml0X18o
c2VsZikKKyAgICAgICAgX1dvcmtlclRodW5rLl9faW5pdF9fKHNlbGYsIHJvdXRlciwgd29ya2Vy
X2NsYXNzLCB3b3JrZXJfbnVtYmVyKQorICAgICAgICBzZWxmLm5hbWUgPSAnd29ya2VyLSVkJyAl
IHdvcmtlcl9udW1iZXIKKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogZmln
dXJlIG91dCBpZiB0aGlzIG5lZWRzIHRvIGJlIGF3YXJlIG9mIHBhcmVudC9jaGlsZAorICAgICAg
ICByZXR1cm4gc2VsZi5waWQKKworICAgIGRlZiBfZ2V0X2lkKHNlbGYpOgorICAgICAgICByZXR1
cm4gb3MuZ2V0cGlkKCkKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2Nh
bmNlbGxlZCA9IFRydWUKKyAgICAgICAgc2VsZi50ZXJtaW5hdGUoKQorCisgICAgZGVmIHN0YXJ0
KHNlbGYpOgorICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5zdGFydChzZWxmKQorCisg
ICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm5hbWUKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3JvdXRlcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlcl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
YWE5Y2MzNzRjY2FhZDA4ZmRkZGIxNTY1Y2JhZjQwNDUzZWQwODllCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2Uvcm91dGVyX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsMTE5IEBACisjIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKK2ltcG9ydCBRdWV1
ZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gcm91dGVyIGltcG9ydCAqCisKKworY2xhc3MgVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZmluZF90aHJlYWRfc3RhY2tfZm91
bmQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudAorICAgICAgICByZXR1cm4KKyAg
ICAgICAgaWQsIHN0YWNrID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKClbMF0KKyAgICAg
ICAgZm91bmRfc3RhY2sgPSBmaW5kX3RocmVhZF9zdGFjayhpZCkKKyAgICAgICAgc2VsZi5hc3Nl
cnROb3RFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFk
X3N0YWNrX25vdF9mb3VuZChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50CisgICAg
ICAgIHJldHVybgorICAgICAgICBmb3VuZF9zdGFjayA9IGZpbmRfdGhyZWFkX3N0YWNrKDApCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCisKKworY2xhc3MgV2Fp
dEZvclRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBydW5f
b25lX3RocmVhZChzZWxmLCBtc2cpOgorICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVlLlF1
ZXVlKCkKKyAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIGNo
aWxkX3RocmVhZCA9IFRlc3RUaHJlYWQoc3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKQor
ICAgICAgICBjaGlsZF90aHJlYWQuc3RhcnQoKQorICAgICAgICBzdGFydGVkX21zZyA9IHN0YXJ0
aW5nX3F1ZXVlLmdldCgpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dChtc2cpCisgICAgICAg
IHRocmVhZHMgPSBbY2hpbGRfdGhyZWFkXQorICAgICAgICByZXR1cm4gcnVubmVyLl93YWl0X2Zv
cl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLCBOb25lKQorCisgICAgZGVmIHRlc3RfYmFzaWMo
c2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudAorICAgICAgICByZXR1cm4KKyAgICAg
ICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcnKQorICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKGludGVycnVwdGVkKQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0KHNlbGYpOgor
ICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQuCisgICAgICAgIHJldHVybgorICAgICAgICBpbnRl
cnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJycpCisgICAgICAgIGludGVycnVwdGVkID0g
c2VsZi5ydW5fb25lX3RocmVhZCgnS2V5Ym9hcmRJbnRlcnJ1cHQnKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoaW50ZXJydXB0ZWQpCisKKyAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAg
ICAgICAjIEZJWE1FOiBpbXBsZW1lbnQuCisgICAgICAgIHJldHVybgorICAgICAgICBpbnRlcnJ1
cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJycpCisgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVy
ZS5PdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICBp
bnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJ1RpbWVvdXQnKQorICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKGludGVycnVwdGVkKQorICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCisK
KyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVu
dC4KKyAgICAgICAgcmV0dXJuCisgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3Ro
cmVhZCgnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5ydW5f
b25lX3RocmVhZCwgJ0V4Y2VwdGlvbicpCisKKworY2xhc3MgU3RhbmRhbG9uZUZ1bmN0aW9uc1Rl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRfdGhyZWFkKHNl
bGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcmV0dXJuCisgICAgICAg
IG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9v
dXRwdXQoKQorICAgICAgICBsb2dnZXIgPSBydW5fd2Via2l0X3Rlc3RzLl9sb2cKKyAgICAgICAg
YXN0cmVhbSA9IGFycmF5X3N0cmVhbS5BcnJheVN0cmVhbSgpCisgICAgICAgIGhhbmRsZXIgPSBU
ZXN0SGFuZGxlcihhc3RyZWFtKQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQor
CisgICAgICAgIHN0YXJ0aW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBzdG9wcGlu
Z19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgY2hpbGRfdGhyZWFkID0gVGVzdFRocmVh
ZChzdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVldWUpCisgICAgICAgIGNoaWxkX3RocmVhZC5z
dGFydCgpCisgICAgICAgIG1zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCisKKyAgICAgICAgcnVu
X3dlYmtpdF90ZXN0cy5fbG9nX3dlZGdlZF90aHJlYWQoY2hpbGRfdGhyZWFkKQorICAgICAgICBz
dG9wcGluZ19xdWV1ZS5wdXQoJycpCisgICAgICAgIGNoaWxkX3RocmVhZC5qb2luKHRpbWVvdXQ9
MS4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN0cmVhbS5lbXB0eSgpKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKGNoaWxkX3RocmVhZC5pc0FsaXZlKCkpCisgICAgICAgIG9jLnJl
c3RvcmVfb3V0cHV0KCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0
ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQppbmRleCBkMWMzODNjMTNlYzJm
MTNhZjVmYjFmMTU0MDU3OWM0Yzg4OWZkZDYzLi43ZDcwNGMzYTg5YWY1NGFkMGRhZjA3NDhiNGQ4
ODlhNjIyYWNlNGNkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQpAQCAtNjIsMTUgKzYy
LDYgQEAgY2xhc3MgQ2hyb21pdW1NYWNQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAg
ICAgICAgICAgICAgICAgICAgICdNYWNCdWlsZEluc3RydWN0aW9ucycpCiAgICAgICAgIHJldHVy
biByZXN1bHQKIAotICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAg
ICAgIyBGSVhNRTogd2UgbmVlZCB0byBydW4gc2luZ2xlLXRocmVhZGVkIGZvciBub3cuIFNlZQot
ICAgICAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODU1My4g
VW5mb3J0dW5hdGVseSB0aGlzCi0gICAgICAgICMgcm91dGluZSBpcyBjYWxsZWQgcmlnaHQgYmVm
b3JlIHRoZSBsb2dnZXIgaXMgY29uZmlndXJlZCwgc28gaWYgd2UKLSAgICAgICAgIyB0cnkgdG8g
X2xvZy53YXJuaW5nKCksIGl0IGdldHMgdGhyb3duIGF3YXkuCi0gICAgICAgIGltcG9ydCBzeXMK
LSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRGVmYXVsdGluZyB0byBvbmUgY2hpbGQgLSBzZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NTUzXG4iKQotICAgICAg
ICByZXR1cm4gMQotCiAgICAgZGVmIGRyaXZlcl9uYW1lKHNlbGYpOgogICAgICAgICAiIiJuYW1l
IGZvciB0aGlzIHBvcnQncyBlcXVpdmFsZW50IG9mIER1bXBSZW5kZXJUcmVlLiIiIgogICAgICAg
ICBpZiBzZWxmLmdldF9vcHRpb24oJ3VzZV9kcnQnKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKaW5kZXggNjk2ZTMzOThl
YTRiMjhhYzc2MjI1OTA3ZGMzNjJmZmMzZmI4NmY5ZS4uNzJmOTFkODM4MjE1YWY0YmM0NGYxZGMx
ZjA2NTVkYWRjN2QzMzZmZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKQEAgLTQ3LDE1ICs0Nyw2IEBAIGNsYXNzIE1h
Y1BvcnQoV2ViS2l0UG9ydCk6CiAgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0KCdwb3J0X25hbWUn
LCAnbWFjJyArIHNlbGYudmVyc2lvbigpKQogICAgICAgICBXZWJLaXRQb3J0Ll9faW5pdF9fKHNl
bGYsICoqa3dhcmdzKQogCi0gICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgot
ICAgICAgICAjIEZJWE1FOiBuZXctcnVuLXdlYmtpdC10ZXN0cyBpcyB1bnN0YWJsZSBvbiBNYWMg
cnVubmluZyBtb3JlIHRoYW4KLSAgICAgICAgIyBmb3VyIHRocmVhZHMgaW4gcGFyYWxsZWwuCi0g
ICAgICAgICMgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjYy
MgotICAgICAgICBjaGlsZF9wcm9jZXNzZXMgPSBXZWJLaXRQb3J0LmRlZmF1bHRfY2hpbGRfcHJv
Y2Vzc2VzKHNlbGYpCi0gICAgICAgIGlmIGNoaWxkX3Byb2Nlc3NlcyA+IDQ6Ci0gICAgICAgICAg
ICByZXR1cm4gNAotICAgICAgICByZXR1cm4gY2hpbGRfcHJvY2Vzc2VzCi0KICAgICBkZWYgYmFz
ZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CiAgICAgICAgIHBvcnRfbmFtZXMgPSBbXQogICAgICAg
ICBpZiBzZWxmLl9uYW1lID09ICdtYWMtdGlnZXInOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IGZmNDA4NmM3
NGRjMTgyYmE4NDcxMjNlNjM1NTAwZDE0NDExZDk5M2UuLjFkOTZiZDk2MmI5MTZkOWUyNDE0ZmJl
OGZiNTY5MzU5N2YwZGM3MDUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTEzNiw2ICsxMzYsOSBAQCBjbGFz
cyBUZXN0UG9ydChiYXNlLlBvcnQpOgogICAgIGRlZiBjaGVja19idWlsZChzZWxmLCBuZWVkc19o
dHRwKToKICAgICAgICAgcmV0dXJuIFRydWUKIAorICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nl
c3NlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDIKKwogICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYs
IGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1YWxfY29udGVudHMsCiAgICAgICAgICAgICAgICAgICAg
ZGlmZl9maWxlbmFtZT1Ob25lKToKICAgICAgICAgZGlmZmVkID0gYWN0dWFsX2NvbnRlbnRzICE9
IGV4cGVjdGVkX2NvbnRlbnRzCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRleCAxZjdhMGFk
OWRlM2QzZTE1ZDVlNmRkZTAzMmRlMjEyODRhYjlhNmYxLi5mNTljZjdjZmEyODY1YjQ5ZGE5NjM0
NjE3NjcyNWUyMzZiOTQ3ZTBmIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTY3LDYg
KzY3LDcgQEAgaW1wb3J0IHRyYWNlYmFjawogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fbGF5
b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwcmludGlu
ZworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcm91dGVyCiBmcm9tIGxheW91dF9wYWNrYWdl
IGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVz
dF9mYWlsdXJlcwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9yZXN1bHRzCkBAIC04
OSwzMiArOTAsMTkgQEAgTEFZT1VUX1RFU1RTX0RJUkVDVE9SWSA9ICJMYXlvdXRUZXN0cyIgKyBv
cy5zZXAKIAogVGVzdEV4cGVjdGF0aW9uc0ZpbGUgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhw
ZWN0YXRpb25zRmlsZQogCi0KIGNsYXNzIFRlc3RJbmZvOgogICAgICIiIkdyb3VwcyBpbmZvcm1h
dGlvbiBhYm91dCBhIHRlc3QgZm9yIGVhc3kgcGFzc2luZyBvZiBkYXRhLiIiIgogCi0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBvcnQsIGZpbGVuYW1lLCB0aW1lb3V0KToKLSAgICAgICAgIiIiR2Vu
ZXJhdGVzIHRoZSBVUkkgYW5kIHN0b3JlcyB0aGUgZmlsZW5hbWUgYW5kIHRpbWVvdXQgZm9yIHRo
aXMgdGVzdC4KKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIHRpbWVvdXQpOgorICAg
ICAgICAiIiJCdW5kbGVzIHRoZSBmaWxlbmFtZSBhbmQgdGltZW91dCBmb3IgdGhpcyB0ZXN0Lgog
ICAgICAgICBBcmdzOgogICAgICAgICAgIGZpbGVuYW1lOiBGdWxsIHBhdGggdG8gdGhlIHRlc3Qu
CiAgICAgICAgICAgdGltZW91dDogVGltZW91dCBmb3IgcnVubmluZyB0aGUgdGVzdCBpbiBUZXN0
U2hlbGwuCiAgICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQot
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotICAgICAgICBzZWxmLnVyaSA9IHBvcnQuZmlsZW5h
bWVfdG9fdXJpKGZpbGVuYW1lKQogICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0Ci0gICAg
ICAgIHNlbGYuX2ltYWdlX2NoZWNrc3VtID0gLTEKLQotICAgIGRlZiBpbWFnZV9oYXNoKHNlbGYp
OgotICAgICAgICAjIFJlYWQgdGhlIGltYWdlX2hhc2ggbGF6aWx5IHRvIHJlZHVjZSBzdGFydHVw
IHRpbWUuCi0gICAgICAgICMgVGhpcyBjbGFzcyBpcyBhY2Nlc3NlZCBhY3Jvc3MgdGhyZWFkcywg
YnV0IG9ubHkgb25lIHRocmVhZCBzaG91bGQKLSAgICAgICAgIyBldmVyIGJlIGRlYWxpbmcgd2l0
aCBhbnkgZ2l2ZW4gVGVzdEluZm8gc28gbm8gbG9ja2luZyBpcyBuZWVkZWQuCi0gICAgICAgICMK
LSAgICAgICAgIyBOb3RlIHRoYXQgd2UgdXNlIC0xIHRvIGluZGljYXRlIHRoYXQgd2UgaGF2ZW4n
dCByZWFkIHRoZSB2YWx1ZSwKLSAgICAgICAgIyBiZWNhdXNlIGV4cGVjdGVkX2NoZWNrc3VtKCkg
cmV0dXJucyBhIHN0cmluZyBvciBOb25lLgotICAgICAgICBpZiBzZWxmLl9pbWFnZV9jaGVja3N1
bSA9PSAtMToKLSAgICAgICAgICAgIHNlbGYuX2ltYWdlX2NoZWNrc3VtID0gc2VsZi5fcG9ydC5l
eHBlY3RlZF9jaGVja3N1bShzZWxmLmZpbGVuYW1lKQotICAgICAgICByZXR1cm4gc2VsZi5faW1h
Z2VfY2hlY2tzdW0KKyAgICAgICAgc2VsZi51cmkgPSBOb25lCisgICAgICAgIHNlbGYuaW1hZ2Vf
Y2hlY2tzdW0gPSBOb25lCiAKIAogY2xhc3MgUmVzdWx0U3VtbWFyeShvYmplY3QpOgpAQCAtMTYx
LDYgKzE0OSw3IEBAIGNsYXNzIFJlc3VsdFN1bW1hcnkob2JqZWN0KToKICAgICAgICAgICAgIHNl
bGYudW5leHBlY3RlZCArPSAxCiAKIAorCiBkZWYgc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0
cyhwb3J0X29iaiwgZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHJ5X3N1bW1hcnkpOgogICAgICIiIlN1bW1hcml6ZSBhbnkg
dW5leHBlY3RlZCByZXN1bHRzIGFzIGEgZGljdC4KQEAgLTI1MCwzMyArMjM5LDMyIEBAIGNsYXNz
IFRlc3RSdW5uZXI6CiAgICAgIyBpbiBEdW1wUmVuZGVyVHJlZS4KICAgICBERUZBVUxUX1RFU1Rf
VElNRU9VVF9NUyA9IDYgKiAxMDAwCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0
aW9ucywgcHJpbnRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHBy
aW50ZXIsIHJvdXRlcik6CiAgICAgICAgICIiIkluaXRpYWxpemUgdGVzdCBydW5uZXIgZGF0YSBz
dHJ1Y3R1cmVzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgcG9ydDogYW4gb2JqZWN0IGlt
cGxlbWVudGluZyBwb3J0LXNwZWNpZmljCiAgICAgICAgICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5
IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCiAgICAgICAgICAgcHJpbnRlcjogYSBQcmludGVyIG9i
amVjdCB0byByZWNvcmQgdXBkYXRlcyB0by4KKyAgICAgICAgICByb3V0ZXI6IG9iamVjdCB1c2Vk
IHRvIGNvbW11bmljYXRlIHcvIHdvcmtlcnMuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxm
Ll9wcmludGVyID0gcHJpbnRlcgorICAgICAgICBzZWxmLl9yb3V0ZXIgPSByb3V0ZXIKIAogICAg
ICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3BlblNTTCBvbiBi
dWlsZGJvdHMuCiAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJz
b2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KAogICAgICAgICAjICAgICAgICBvcHRpb25zLnJlc3Vs
dHNfZGlyZWN0b3J5LCB1c2VfdGxzPVRydWUsIHBvcnQ9OTMyMykKIAotICAgICAgICAjIGEgbGlz
dCBvZiBUZXN0VHlwZSBvYmplY3RzCi0gICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSBbdGV4dF9k
aWZmLlRlc3RUZXh0RGlmZl0KLSAgICAgICAgaWYgb3B0aW9ucy5waXhlbF90ZXN0czoKLSAgICAg
ICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKGltYWdlX2RpZmYuSW1hZ2VEaWZmKQotCiAg
ICAgICAgICMgYSBzZXQgb2YgdGVzdCBmaWxlcywgYW5kIHRoZSBzYW1lIHRlc3RzIGFzIGEgbGlz
dAogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KCkKICAgICAgICAgc2VsZi5fdGVzdF9m
aWxlc19saXN0ID0gTm9uZQotICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUgPSBRdWV1ZS5RdWV1
ZSgpCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gRmFsc2UKIAorICAgIGRlZiBnZXROYW1lKHNl
bGYpOgorICAgICAgICByZXR1cm4gcm91dGVyLlJvdXRlci5NQU5BR0VSCisKICAgICBkZWYgY29s
bGVjdF90ZXN0cyhzZWxmLCBhcmdzLCBsYXN0X3VuZXhwZWN0ZWRfcmVzdWx0cyk6CiAgICAgICAg
ICIiIkZpbmQgYWxsIHRoZSBmaWxlcyB0byB0ZXN0LgogCkBAIC01MDEsMTAgKzQ4OSw5IEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICIiIlJldHVybnMgdGhlIGFwcHJvcHJpYXRlIFRlc3RJ
bmZvIG9iamVjdCBmb3IgdGhlIGZpbGUuIE1vc3RseSB0aGlzCiAgICAgICAgIGlzIHVzZWQgZm9y
IGxvb2tpbmcgdXAgdGhlIHRpbWVvdXQgdmFsdWUgKGluIG1zKSB0byB1c2UgZm9yIHRoZSBnaXZl
bgogICAgICAgICB0ZXN0LiIiIgotICAgICAgICBpZiBzZWxmLl9leHBlY3RhdGlvbnMuaGFzX21v
ZGlmaWVyKHRlc3RfZmlsZSwgdGVzdF9leHBlY3RhdGlvbnMuU0xPVyk6Ci0gICAgICAgICAgICBy
ZXR1cm4gVGVzdEluZm8oc2VsZi5fcG9ydCwgdGVzdF9maWxlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2xvd190aW1lX291dF9tcykKLSAgICAgICAgcmV0dXJu
IFRlc3RJbmZvKHNlbGYuX3BvcnQsIHRlc3RfZmlsZSwgc2VsZi5fb3B0aW9ucy50aW1lX291dF9t
cykKKyAgICAgICAgaWYgc2VsZi5fdGVzdF9pc19zbG93KHRlc3RfZmlsZSk6CisgICAgICAgICAg
ICByZXR1cm4gVGVzdEluZm8odGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnNsb3dfdGltZV9vdXRf
bXMpCisgICAgICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0X2ZpbGUsIHNlbGYuX29wdGlvbnMudGlt
ZV9vdXRfbXMpCiAKICAgICBkZWYgX3Rlc3RfcmVxdWlyZXNfbG9jayhzZWxmLCB0ZXN0X2ZpbGUp
OgogICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgdGVzdCBuZWVkcyB0byBiZSBsb2NrZWQg
d2hlbgpAQCAtNTEyLDIzICs0OTksMjIgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgc3Bs
aXRfcGF0aCA9IHRlc3RfZmlsZS5zcGxpdChvcy5zZXApCiAgICAgICAgIHJldHVybiAnaHR0cCcg
aW4gc3BsaXRfcGF0aCBvciAnd2Vic29ja2V0JyBpbiBzcGxpdF9wYXRoCiAKLSAgICBkZWYgX2dl
dF90ZXN0X2ZpbGVfcXVldWUoc2VsZiwgdGVzdF9maWxlcyk6Ci0gICAgICAgICIiIkNyZWF0ZSB0
aGUgdGhyZWFkIHNhZmUgcXVldWUgb2YgbGlzdHMgb2YgKHRlc3QgZmlsZW5hbWVzLCB0ZXN0IFVS
SXMpCi0gICAgICAgIHR1cGxlcy4gRWFjaCBUZXN0U2hlbGxUaHJlYWQgcHVsbHMgYSBsaXN0IGZy
b20gdGhpcyBxdWV1ZSBhbmQgcnVucwotICAgICAgICB0aG9zZSB0ZXN0cyBpbiBvcmRlciBiZWZv
cmUgZ3JhYmJpbmcgdGhlIG5leHQgYXZhaWxhYmxlIGxpc3QuCisgICAgZGVmIF90ZXN0X2lzX3Ns
b3coc2VsZiwgdGVzdF9maWxlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucy5o
YXNfbW9kaWZpZXIodGVzdF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKQogCi0gICAgICAgIFNoYXJkIHRo
ZSBsaXN0cyBieSBkaXJlY3RvcnkuIFRoaXMgaGVscHMgZW5zdXJlIHRoYXQgdGVzdHMgdGhhdCBk
ZXBlbmQKLSAgICAgICAgb24gZWFjaCBvdGhlciAoYWthIGJhZCB0ZXN0cyEpIGNvbnRpbnVlIHRv
IHJ1biB0b2dldGhlciBhcyBtb3N0Ci0gICAgICAgIGNyb3NzLXRlc3RzIGRlcGVuZGVuY2llcyB0
ZW5kIHRvIG9jY3VyIHdpdGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgICAgZGVmIF9zaGFyZF90
ZXN0cyhzZWxmLCB0ZXN0X2ZpbGVzLCBzaW5nbGVfdGhyZWFkZWQpOgorICAgICAgICAiIiJHcm91
cHMgdGVzdHMgaW50byBiYXRjaGVzLgorICAgICAgICBUaGlzIGhlbHBzIGVuc3VyZSB0aGF0IHRl
c3RzIHRoYXQgZGVwZW5kIG9uIGVhY2ggb3RoZXIgKGFrYSBiYWQgdGVzdHMhKQorICAgICAgICBj
b250aW51ZSB0byBydW4gdG9nZXRoZXIgYXMgbW9zdCBjcm9zcy10ZXN0cyBkZXBlbmRlbmNpZXMg
dGVuZCB0bworICAgICAgICBvY2N1ciB3aXRoaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgogCiAgICAg
ICAgIFJldHVybjoKLSAgICAgICAgICBUaGUgUXVldWUgb2YgbGlzdHMgb2YgVGVzdEluZm8gb2Jq
ZWN0cy4KKyAgICAgICAgICAgIEEgbGlzdCBvZiBsaXN0cyBvZiBUZXN0SW5mbyBvYmplY3RzCiAg
ICAgICAgICIiIgotCiAgICAgICAgIHRlc3RfbGlzdHMgPSBbXQogICAgICAgICB0ZXN0c190b19o
dHRwX2xvY2sgPSBbXQotICAgICAgICBpZiAoc2VsZi5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVs
bHlfcGFyYWxsZWwgb3IKLSAgICAgICAgICAgIHNlbGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpKToK
KyAgICAgICAgaWYgc2luZ2xlX3RocmVhZGVkOgogICAgICAgICAgICAgZm9yIHRlc3RfZmlsZSBp
biB0ZXN0X2ZpbGVzOgogICAgICAgICAgICAgICAgIHRlc3RfaW5mbyA9IHNlbGYuX2dldF90ZXN0
X2luZm9fZm9yX2ZpbGUodGVzdF9maWxlKQogICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3Rf
cmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUpOgpAQCAtNTY3LDIzICs1NTMsNyBAQCBjbGFzcyBUZXN0
UnVubmVyOgogICAgICAgICAgICAgdGVzdHNfdG9faHR0cF9sb2NrLnJldmVyc2UoKQogICAgICAg
ICAgICAgdGVzdF9saXN0cy5pbnNlcnQoMCwgKCJ0ZXN0c190b19odHRwX2xvY2siLCB0ZXN0c190
b19odHRwX2xvY2spKQogCi0gICAgICAgIGZpbGVuYW1lX3F1ZXVlID0gUXVldWUuUXVldWUoKQot
ICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3RzOgotICAgICAgICAgICAgZmlsZW5hbWVfcXVl
dWUucHV0KGl0ZW0pCi0gICAgICAgIHJldHVybiBmaWxlbmFtZV9xdWV1ZQotCi0gICAgZGVmIF9n
ZXRfdGVzdF9hcmdzKHNlbGYsIGluZGV4KToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgdHVwbGUg
b2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9yIER1bXBSZW5kZXJUcmVlLiIiIgotICAgICAg
ICB0ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5UZXN0QXJndW1lbnRzKCkKLSAgICAgICAgdGVz
dF9hcmdzLnBuZ19wYXRoID0gTm9uZQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rl
c3RzOgotICAgICAgICAgICAgcG5nX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5y
ZXN1bHRzX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw
bmdfcmVzdWx0JXMucG5nIiAlIGluZGV4KQotICAgICAgICAgICAgdGVzdF9hcmdzLnBuZ19wYXRo
ID0gcG5nX3BhdGgKLSAgICAgICAgdGVzdF9hcmdzLm5ld19iYXNlbGluZSA9IHNlbGYuX29wdGlv
bnMubmV3X2Jhc2VsaW5lCi0gICAgICAgIHRlc3RfYXJncy5yZXNldF9yZXN1bHRzID0gc2VsZi5f
b3B0aW9ucy5yZXNldF9yZXN1bHRzCi0KLSAgICAgICAgcmV0dXJuIHRlc3RfYXJncworICAgICAg
ICByZXR1cm4gdGVzdF9saXN0cwogCiAgICAgZGVmIF9jb250YWluc190ZXN0cyhzZWxmLCBzdWJk
aXIpOgogICAgICAgICBmb3IgdGVzdF9maWxlIGluIHNlbGYuX3Rlc3RfZmlsZXM6CkBAIC01OTEs
NDAgKzU2MSw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRy
dWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBkZWYgX2luc3RhbnRpYXRlX2R1bXBfcmVu
ZGVyX3RyZWVfdGhyZWFkcyhzZWxmLCB0ZXN0X2ZpbGVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIiIiSW5z
dGFudGl0YXRlcyBhbmQgc3RhcnRzIHRoZSBUZXN0U2hlbGxUaHJlYWQocykuCi0KLSAgICAgICAg
UmV0dXJuOgotICAgICAgICAgIFRoZSBsaXN0IG9mIHRocmVhZHMuCi0gICAgICAgICIiIgotICAg
ICAgICBmaWxlbmFtZV9xdWV1ZSA9IHNlbGYuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9maWxl
cykKLQotICAgICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVsbFRocmVhZHMgYW5kIHN0YXJ0IHRo
ZW0uCi0gICAgICAgIHRocmVhZHMgPSBbXQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoaW50KHNl
bGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSk6Ci0gICAgICAgICAgICAjIENyZWF0ZSBzZXBh
cmF0ZSBUZXN0VHlwZXMgaW5zdGFuY2VzIGZvciBlYWNoIHRocmVhZC4KLSAgICAgICAgICAgIHRl
c3RfdHlwZXMgPSBbXQotICAgICAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiBzZWxmLl90ZXN0X3R5
cGVzOgotICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMuYXBwZW5kKHRlc3RfdHlwZShzZWxmLl9w
b3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5y
ZXN1bHRzX2RpcmVjdG9yeSkpCi0KLSAgICAgICAgICAgIHRlc3RfYXJncyA9IHNlbGYuX2dldF90
ZXN0X2FyZ3MoaSkKLSAgICAgICAgICAgIHRocmVhZCA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
LlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAotICAgICAgICAgICAgICAgIHNlbGYuX29wdGlv
bnMsIGZpbGVuYW1lX3F1ZXVlLCBzZWxmLl9yZXN1bHRfcXVldWUsCi0gICAgICAgICAgICAgICAg
dGVzdF90eXBlcywgdGVzdF9hcmdzKQotICAgICAgICAgICAgaWYgc2VsZi5faXNfc2luZ2xlX3Ro
cmVhZGVkKCk6Ci0gICAgICAgICAgICAgICAgdGhyZWFkLnJ1bl9pbl9tYWluX3RocmVhZChzZWxm
LCByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdGhy
ZWFkLnN0YXJ0KCkKLSAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHRocmVhZCkKLQotICAgICAg
ICByZXR1cm4gdGhyZWFkcwotCi0gICAgZGVmIF9pc19zaW5nbGVfdGhyZWFkZWQoc2VsZik6Ci0g
ICAgICAgICIiIlJldHVybnMgd2hldGhlciB3ZSBzaG91bGQgcnVuIGFsbCB0aGUgdGVzdHMgaW4g
dGhlIG1haW4gdGhyZWFkLiIiIgotICAgICAgICByZXR1cm4gaW50KHNlbGYuX29wdGlvbnMuY2hp
bGRfcHJvY2Vzc2VzKSA9PSAxCi0KICAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCBmaWxlX2xpc3Qs
IHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUnVucyB0aGUgdGVzdHMgaW4gdGhlIGZpbGVf
bGlzdC4KIApAQCAtNjM5LDczICs1NzUsNTcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAg
ICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1lOmZpbGVuYW1lLCB0ZXN0X3J1bl90aW1lOnRlc3Rf
cnVuX3RpbWV9CiAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgdG8g
cG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cwogICAgICAgICAiIiIKKyAgICAgICAgbnVtX3dvcmtl
cnMgPSBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpCisKKyAgICAgICAgc2VsZi5f
Y3VycmVudF9maWxlX2xpc3QgPSBmaWxlX2xpc3QKKyAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1
bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisgICAgICAgIHJvdXRlciA9IHNlbGYuX3JvdXRl
cgorCisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzID0gW10KKyAgICAgICAgc2VsZi5fZ3JvdXBf
c3RhdHMgPSB7fQorICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHMgPSB7fQorICAgICAgICBmb3Ig
aSBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgbmFtZSA9ICd3b3JrZXItJWQn
ICUgaQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW25hbWVdID0ge30KKyAgICAgICAg
ICAgIHNlbGYuX3dvcmtlcl9zdGF0c1tuYW1lXVsnbmFtZSddID0gbmFtZQorICAgICAgICAgICAg
c2VsZi5fd29ya2VyX3N0YXRzW25hbWVdWydudW1fdGVzdHMnXSA9IDAKKyAgICAgICAgICAgIHNl
bGYuX3dvcmtlcl9zdGF0c1tuYW1lXVsndG90YWxfdGltZSddID0gMAorCisgICAgICAgIHRlc3Rf
bGlzdHMgPSBzZWxmLl9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsCisgICAgICAgICAgICBudW1fd29y
a2VycyA9PSAxIG9yIHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQor
ICAgICAgICBmb3IgdGVzdF9saXN0IGluIHRlc3RfbGlzdHM6CisgICAgICAgICAgICByb3V0ZXIu
cG9zdF90ZXN0X2xpc3QodGVzdF9saXN0KQorCisgICAgICAgICMgVGVsbCB0aGUgd29ya2VycyB0
byBzaHV0IGRvd24gYWZ0ZXIgdGhleSdyZSBkb25lIHJ1bm5pbmcgYWxsIHRoZQorICAgICAgICAj
IHRlc3RzLgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAg
ICAgcm91dGVyLnBvc3Rfc3RvcCgpCisKICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHVzZSB3
ZWJraXRweS50b29sLmdyYW1tYXIucGx1cmFsaXplIGhlcmUuCiAgICAgICAgIHBsdXJhbCA9ICIi
Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKToKKyAgICAgICAgaWYg
aW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA+IDE6CiAgICAgICAgICAgICBwbHVy
YWwgPSAicyIKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nICVz
JXMgLi4uJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9wb3J0
LmRyaXZlcl9uYW1lKCksIHBsdXJhbCkpCi0gICAgICAgIHRocmVhZHMgPSBzZWxmLl9pbnN0YW50
aWF0ZV9kdW1wX3JlbmRlcl90cmVlX3RocmVhZHMoZmlsZV9saXN0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5KQotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGlu
ZyAuLi4iKQogCi0gICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gc2VsZi5fd2FpdF9mb3Jf
dGhyZWFkc190b19maW5pc2godGhyZWFkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLSAgICAg
ICAgKHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdz
KSA9IFwKLSAgICAgICAgICAgIHNlbGYuX2NvbGxlY3RfdGltaW5nX2luZm8odGhyZWFkcykKKyAg
ICAgICAgcm91dGVyLnN0YXJ0X3dvcmtlcnMoKQogCi0gICAgICAgIHJldHVybiAoa2V5Ym9hcmRf
aW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCi0gICAgICAgICAgICAg
ICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRf
dXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCiAKLSAgICBkZWYgX3dhaXRfZm9yX3RocmVh
ZHNfdG9fZmluaXNoKHNlbGYsIHRocmVhZHMsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAga2V5
Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIExv
b3AgdGhyb3VnaCBhbGwgdGhlIHRocmVhZHMgd2FpdGluZyBmb3IgdGhlbSB0byBmaW5pc2guCi0g
ICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKLSAgICAgICAgICAgIHdoaWxl
IHNvbWVfdGhyZWFkX2lzX2FsaXZlOgotICAgICAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2Fs
aXZlID0gRmFsc2UKLSAgICAgICAgICAgICAgICB0ID0gdGltZS50aW1lKCkKLSAgICAgICAgICAg
ICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bl9pbmZvID0gdGhyZWFkLmV4Y2VwdGlvbl9pbmZvKCkKLSAgICAgICAgICAgICAgICAgICAgaWYg
ZXhjZXB0aW9uX2luZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIFJl
LXJhaXNlIHRoZSB0aHJlYWQncyBleGNlcHRpb24gaGVyZSB0byBtYWtlIGl0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAjIGNsZWFyIHRoYXQgdGVzdGluZyB3YXMgYWJvcnRlZC4gT3RoZXJ3aXNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgdGVzdHMgdGhhdCBkaWQgbm90IHJ1biB3
b3VsZCBiZSBhc3N1bWVkCi0gICAgICAgICAgICAgICAgICAgICAgICAjIHRvIGhhdmUgcGFzc2Vk
LgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2Vw
dGlvbl9pbmZvWzFdLCBleGNlcHRpb25faW5mb1syXQotCi0gICAgICAgICAgICAgICAgICAgIGlm
IHRocmVhZC5pc0FsaXZlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzb21lX3RocmVhZF9p
c19hbGl2ZSA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfdGltZW91dCA9IHRo
cmVhZC5uZXh0X3RpbWVvdXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRfdGlt
ZW91dCBhbmQgdCA+IG5leHRfdGltZW91dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
X2xvZ193ZWRnZWRfdGhyZWFkKHRocmVhZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aHJlYWQuY2xlYXJfbmV4dF90aW1lb3V0KCkKLQotICAgICAgICAgICAgICAgIHNlbGYudXBkYXRl
X3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCi0KLSAgICAgICAgICAgICAgICBpZiBzb21lX3RocmVh
ZF9pc19hbGl2ZToKLSAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQotCisgICAg
ICAgICAgICByb3V0ZXIubG9vcChzZWxmKQogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1
cHQ6CisgICAgICAgICAgICByb3V0ZXIuY2FuY2VsX3dvcmtlcnMoKQorICAgICAgICAgICAgX2xv
Zy5pbmZvKCJJbnRlcnJ1cHRlZCwgZXhpdGluZyIpCiAgICAgICAgICAgICBrZXlib2FyZF9pbnRl
cnJ1cHRlZCA9IFRydWUKLSAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAg
ICAgICAgICAgICB0aHJlYWQuY2FuY2VsKCkKLQotICAgICAgICByZXR1cm4ga2V5Ym9hcmRfaW50
ZXJydXB0ZWQKLQotICAgIGRlZiBfY29sbGVjdF90aW1pbmdfaW5mbyhzZWxmLCB0aHJlYWRzKToK
LSAgICAgICAgdGVzdF90aW1pbmdzID0ge30KLSAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWlu
Z3MgPSBbXQotICAgICAgICB0aHJlYWRfdGltaW5ncyA9IFtdCi0KLSAgICAgICAgZm9yIHRocmVh
ZCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MuYXBwZW5kKHsnbmFtZSc6
IHRocmVhZC5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdu
dW1fdGVzdHMnOiB0aHJlYWQuZ2V0X251bV90ZXN0cygpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAndG90YWxfdGltZSc6IHRocmVhZC5nZXRfdG90YWxfdGltZSgpfSkKLSAg
ICAgICAgICAgIHRlc3RfdGltaW5ncy51cGRhdGUodGhyZWFkLmdldF90ZXN0X2dyb3VwX3RpbWlu
Z19zdGF0cygpKQotICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MuZXh0ZW5kKHRo
cmVhZC5nZXRfdGVzdF9yZXN1bHRzKCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMg
VW5leHBlY3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0byBjbGVhbiB1cCB3b3JrZXJzLgorICAg
ICAgICAgICAgX2xvZy5pbmZvKCJFeGNlcHRpb24gcmFpc2VkLCBleGl0aW5nIikKKyAgICAgICAg
ICAgIHJhaXNlCiAKLSAgICAgICAgcmV0dXJuICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdz
LCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRl
cnJ1cHRlZCwgc2VsZi5fd29ya2VyX3N0YXRzLnZhbHVlcygpLAorICAgICAgICAgICAgICAgIHNl
bGYuX2dyb3VwX3N0YXRzLCBzZWxmLl9hbGxfcmVzdWx0cykKIAogICAgIGRlZiBuZWVkc19odHRw
KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHRlc3QgcnVubmVyIG5lZWRz
IGFuIEhUVFAgc2VydmVyLiIiIgpAQCAtODAwLDEyICs3MjAsMTIgQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKIAogICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCiAKLSAgICAgICAgc2VsZi5fcHJp
bnRfdGltaW5nX3N0YXRpc3RpY3MoZW5kX3RpbWUgLSBzdGFydF90aW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGlt
aW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1h
cnkpCisgICAgICAgICNzZWxmLl9wcmludF90aW1pbmdfc3RhdGlzdGljcyhlbmRfdGltZSAtIHN0
YXJ0X3RpbWUsCisgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRf
dGltaW5ncywgdGVzdF90aW1pbmdzLAorICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgICAgICMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKIAotICAgICAgICBzZWxmLl9wcmludF9yZXN1
bHRfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgI3NlbGYuX3ByaW50X3Jlc3VsdF9z
dW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQogCiAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAg
ICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKQEAgLTg1NSwyMyArNzc1LDM3IEBAIGNsYXNzIFRlc3RS
dW5uZXI6CiAgICAgICAgIF9sb2cuZGVidWcoInN0b3BwaW5nIGhlbHBlciIpCiAgICAgICAgIHNl
bGYuX3BvcnQuc3RvcF9oZWxwZXIoKQogCi0gICAgZGVmIHVwZGF0ZV9zdW1tYXJ5KHNlbGYsIHJl
c3VsdF9zdW1tYXJ5KToKKyAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzcmMpOgor
ICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAg
cGFzcworCisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNyYywgcmVzdWx0LCBl
bGFwc2VkX3RpbWUpOgogICAgICAgICAiIiJVcGRhdGUgdGhlIHN1bW1hcnkgYW5kIHByaW50IHJl
c3VsdHMgd2l0aCBhbnkgY29tcGxldGVkIHRlc3RzLiIiIgotICAgICAgICB3aGlsZSBUcnVlOgot
ICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfcmVzdWx0cy5U
ZXN0UmVzdWx0LmxvYWRzKHNlbGYuX3Jlc3VsdF9xdWV1ZS5nZXRfbm93YWl0KCkpCi0gICAgICAg
ICAgICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAg
ICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRf
cmVzdWx0KAotICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSwgcmVzdWx0LnR5cGUsIHNl
bGYuX29wdGlvbnMucGl4ZWxfdGVzdHMpCi0gICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQo
cmVzdWx0LCBleHBlY3RlZCkKLSAgICAgICAgICAgIGV4cF9zdHIgPSBzZWxmLl9leHBlY3RhdGlv
bnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoCi0gICAgICAgICAgICAgICAgcmVzdWx0LmZpbGVu
YW1lKQotICAgICAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlv
bl90b19zdHJpbmcocmVzdWx0LnR5cGUpCi0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50
X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQsIGV4cF9zdHIsIGdvdF9zdHIpCi0gICAgICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCBzZWxmLl9y
ZXRyeWluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
dGVzdF9maWxlc19saXN0KQorICAgICAgICBzZWxmLl91cGRhdGVfd29ya2VyX3N0YXRzKHNyYywg
cmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3Rh
dGlvbnMubWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoCisgICAgICAgICAgICByZXN1bHQuZmls
ZW5hbWUsIHJlc3VsdC50eXBlLCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQorICAgICAgICBl
eHBfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAorICAg
ICAgICAgICAgcmVzdWx0LmZpbGVuYW1lKQorICAgICAgICBnb3Rfc3RyID0gc2VsZi5fZXhwZWN0
YXRpb25zLmV4cGVjdGF0aW9uX3RvX3N0cmluZyhyZXN1bHQudHlwZSkKKyAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rf
c3RyKQorCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkuYWRkKHJlc3VsdCwg
ZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfcHJvZ3Jlc3Moc2VsZi5fY3Vy
cmVudF9yZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9yZXRyeWluZywgc2VsZi5fdGVzdF9maWxlc19saXN0KQorCisgICAgZGVmIGhhbmRs
ZV9maW5pc2hlZF9ncm91cChzZWxmLCBzcmMsIGdyb3VwX25hbWUsIG51bV90ZXN0cywgZWxhcHNl
ZF90aW1lKToKKyAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHNbZ3JvdXBfbmFtZV0gPSAobnVtX3Rl
c3RzLCBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMs
IGV4Y2VwdGlvbl9pbmZvKToKKyAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2Vw
dGlvbl9pbmZvWzFdLCBleGNlcHRpb25faW5mb1syXQorCisgICAgZGVmIF91cGRhdGVfd29ya2Vy
X3N0YXRzKHNlbGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl93
b3JrZXJfc3RhdHNbc3JjXVsndG90YWxfdGltZSddICs9IGVsYXBzZWRfdGltZQorICAgICAgICBz
ZWxmLl93b3JrZXJfc3RhdHNbc3JjXVsnbnVtX3Rlc3RzJ10gKz0gMQorICAgICAgICBzZWxmLl9h
bGxfcmVzdWx0cy5hcHBlbmQocmVzdWx0KQogCiAgICAgZGVmIF9jbG9iYmVyX29sZF9yZXN1bHRz
KHNlbGYpOgogICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBk
aXJlY3RvcmllcyBzaW5jZSB0aGUgb3RoZXIKQEAgLTEwMDQsMTIgKzkzOCwxMyBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fb3B0aW9ucy50aW1lX291
dF9tcywKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2xvd190aW1lX291
dF9tcykpCiAKLSAgICAgICAgaWYgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCk6CisgICAgICAg
IGlmIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPT0gMToKICAgICAgICAgICAg
IHAucHJpbnRfY29uZmlnKCJSdW5uaW5nIG9uZSAlcyIgJSBzZWxmLl9wb3J0LmRyaXZlcl9uYW1l
KCkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwLnByaW50X2NvbmZpZygiUnVubmluZyAl
cyAlc3MgaW4gcGFyYWxsZWwiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9v
cHRpb25zLmNoaWxkX3Byb2Nlc3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9wb3J0LmRyaXZlcl9uYW1lKCkpKQorICAgICAgICBwLnByaW50X2NvbmZpZygiV29ya2VycyBh
cmUgJXMiICUgc2VsZi5fb3B0aW9ucy53b3JrZXJzX2FyZSkKICAgICAgICAgcC5wcmludF9jb25m
aWcoIiIpCiAKICAgICBkZWYgX3ByaW50X2V4cGVjdGVkX3Jlc3VsdHNfb2ZfdHlwZShzZWxmLCBy
ZXN1bHRfc3VtbWFyeSwKQEAgLTEzOTksMTEgKzEzMzQsMTMgQEAgZGVmIHJ1bihwb3J0LCBvcHRp
b25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAogICAgICAgICBwcmludGVyLmNs
ZWFudXAoKQogICAgICAgICByZXR1cm4gMAogCisgICAgcm91dGVyX29iaiA9IHJvdXRlci5nZXQo
cG9ydCwgb3B0aW9ucykKKwogICAgICMgV2Ugd3JhcCBhbnkgcGFydHMgb2YgdGhlIHJ1biB0aGF0
IGFyZSBzbG93IG9yIGxpa2VseSB0byByYWlzZSBleGNlcHRpb25zCiAgICAgIyBpbiBhIHRyeS9m
aW5hbGx5IHRvIGVuc3VyZSB0aGF0IHdlIGNsZWFuIHVwIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRp
b24uCiAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cyA9IC0xCiAgICAgdHJ5OgotICAgICAgICB0
ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIocG9ydCwgb3B0aW9ucywgcHJpbnRlcikKKyAgICAgICAg
dGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIsIHJvdXRlcl9v
YmopCiAgICAgICAgIHRlc3RfcnVubmVyLl9wcmludF9jb25maWcoKQogCiAgICAgICAgIHByaW50
ZXIucHJpbnRfdXBkYXRlKCJDb2xsZWN0aW5nIHRlc3RzIC4uLiIpCkBAIC0xNDMyLDYgKzEzNjks
NyBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRl
cnIsCiAgICAgICAgICAgICBfbG9nLmRlYnVnKCJUZXN0aW5nIGNvbXBsZXRlZCwgRXhpdCBzdGF0
dXM6ICVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMp
CiAgICAgZmluYWxseToKKyAgICAgICAgcm91dGVyX29iai5jbGVhbnVwKCkKICAgICAgICAgcHJp
bnRlci5jbGVhbnVwKCkKIAogICAgIHJldHVybiBudW1fdW5leHBlY3RlZF9yZXN1bHRzCkBAIC0x
NDQxLDkgKzEzNzksMTQgQEAgZGVmIF9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnRfb2JqLCBv
cHRpb25zKToKICAgICAiIiJTZXRzIHRoZSBvcHRpb25zIHZhbHVlcyB0aGF0IGRlcGVuZCBvbiBv
dGhlciBvcHRpb25zIHZhbHVlcy4iIiIKIAogICAgIGlmIG5vdCBvcHRpb25zLmNoaWxkX3Byb2Nl
c3NlczoKLSAgICAgICAgIyBGSVhNRTogSW52ZXN0aWdhdGUgcGVyZi9mbGFraW5lc3MgaW1wYWN0
IG9mIHVzaW5nIGNwdV9jb3VudCArIDEuCi0gICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2Vz
ID0gb3MuZW52aXJvbi5nZXQoIldFQktJVF9URVNUX0NISUxEX1BST0NFU1NFUyIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHBvcnRfb2JqLmRl
ZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgICAgICBpZiBvcHRpb25zLndvcmtlcnNfYXJl
ID09ICdpbmxpbmUnOgorICAgICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSAiMSIK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gb3Mu
ZW52aXJvbi5nZXQoIldFQktJVF9URVNUX0NISUxEX1BST0NFU1NFUyIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihwb3J0X29iai5kZWZh
dWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKKyAgICBlbGlmIG9wdGlvbnMud29ya2Vyc19hcmUgPT0g
J2lubGluZScgYW5kIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID4gMToKKyAgICAgICAgX2xvZy53
YXJuaW5nKCItLXdvcmtlcnMtYXJlPWlubGluZSBvdmVycmlkZXMgLS1jaGlsZC1wcm9jZXNzZXMi
KQorICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9ICIxIgogCiAgICAgaWYgbm90IG9w
dGlvbnMuY29uZmlndXJhdGlvbjoKICAgICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0gcG9y
dF9vYmouZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKQEAgLTE0OTQsNyArMTQzNyw5IEBAIGRlZiBf
Y29tcGF0X3NoaW1fb3B0aW9uKG9wdGlvbl9uYW1lLCAqKmt3YXJncyk6CiBkZWYgcGFyc2VfYXJn
cyhhcmdzPU5vbmUpOgogICAgICIiIlByb3ZpZGVzIGEgZGVmYXVsdCBzZXQgb2YgY29tbWFuZCBs
aW5lIGFyZ3MuCiAKLSAgICBSZXR1cm5zIGEgdHVwbGUgb2Ygb3B0aW9ucywgYXJncyBmcm9tIG9w
dHBhcnNlIiIiCisgICAgUmV0dXJucyBhIHR1cGxlIG9mIG9wdGlvbnMsIGFyZ3MgZnJvbSBvcHRw
YXJzZS4iIiIKKyAgICBpZiBhcmdzIGlzIE5vbmU6CisgICAgICAgIGFyZ3MgPSBzeXMuYXJndlsx
Ol0KIAogICAgICMgRklYTUU6IEFsbCBvZiB0aGVzZSBvcHRpb25zIHNob3VsZCBiZSBzdG9yZWQg
Y2xvc2VyIHRvIHRoZSBjb2RlIHdoaWNoCiAgICAgIyBGSVhNRTogYWN0dWFsbHkgdXNlcyB0aGVt
LiBjb25maWd1cmF0aW9uX29wdGlvbnMgc2hvdWxkIG1vdmUKQEAgLTE2NjcsOSArMTYxMiwxMyBA
QCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bigiLS1jaGlsZC1wcm9jZXNzZXMiLAogICAgICAgICAgICAgaGVscD0iTnVtYmVyIG9mIER1bXBS
ZW5kZXJUcmVlcyB0byBydW4gaW4gcGFyYWxsZWwuIiksCiAgICAgICAgICMgRklYTUU6IERpc3Bs
YXkgZGVmYXVsdCBudW1iZXIgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgd2lsbCBydW4uCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdvcmtlcnMtYXJlIiwgYWN0aW9uPSJzdG9yZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0icHJvY2Vzc2VzIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJjb250cm9scyB3b3JrZXIgbW9kZWwuIFZhbGlk
IHZhbHVlcyBhcmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICInaW5saW5lJywgJ3Ro
cmVhZHMnLCBhbmQgJ3Byb2Nlc3NlcycgKGRlZmF1bHQpLiIpLAogICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbigiLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwiLAogICAgICAgICAgICAg
YWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgIGhlbHA9InJ1
biBhbGwgdGVzdHMgaW4gcGFyYWxsZWwiKSwKKyAgICAgICAgICAgIGhlbHA9IlJ1biBhbGwgdGVz
dHMgaW4gcGFyYWxsZWwgKGRvbid0IHNoYXJkIHRoZW0pLiIpLAogICAgICAgICAjIEZJWE1FOiBO
ZWVkIC0tZXhpdC1hZnRlci1uLWZhaWx1cmVzIE4KICAgICAgICAgIyAgICAgIEV4aXQgYWZ0ZXIg
dGhlIGZpcnN0IE4gZmFpbHVyZXMgaW5zdGVhZCBvZiBydW5uaW5nIGFsbCB0ZXN0cwogICAgICAg
ICAjIEZJWE1FOiBOZWVkIC0tZXhpdC1hZnRlci1uLWNyYXNoZXMgTgpAQCAtMTcxNiwzMCArMTY2
NSwyMiBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICAgICAgaGVscD0iSWYg
dHJ1ZSwgdXBsb2FkIGZ1bGwganNvbiByZXN1bHRzIHRvIHNlcnZlci4iKSwKICAgICBdCiAKKyAg
ICBtdWx0aV9wcm9jZXNzX29wdGlvbnMgPSBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9u
KCItLW1hbmFnZXIiLCBoZWxwPSJUaGUgdmFsdWUgb2YgdGhlIFF1ZXVlICIKKyAgICAgICAgICAg
ICJvYmplY3QgdXNlZCBmb3IgbWVzc2FnZSByb3V0aW5nIiksCisgICAgICAgIG9wdHBhcnNlLm1h
a2Vfb3B0aW9uKCItLXdvcmtlci1udW1iZXIiLCBoZWxwPSJXb3JrZXIgbnVtYmVyIiksCisgICAg
XQorCiAgICAgb3B0aW9uX2xpc3QgPSAoY29uZmlndXJhdGlvbl9vcHRpb25zICsgcHJpbnRfb3B0
aW9ucyArCiAgICAgICAgICAgICAgICAgICAgY2hyb21pdW1fb3B0aW9ucyArIHJlc3VsdHNfb3B0
aW9ucyArIHRlc3Rfb3B0aW9ucyArCiAgICAgICAgICAgICAgICAgICAgbWlzY19vcHRpb25zICsg
cmVzdWx0c19qc29uX29wdGlvbnMgKwotICAgICAgICAgICAgICAgICAgIG9sZF9ydW5fd2Via2l0
X3Rlc3RzX2NvbXBhdCkKKyAgICAgICAgICAgICAgICAgICBtdWx0aV9wcm9jZXNzX29wdGlvbnMg
KyBvbGRfcnVuX3dlYmtpdF90ZXN0c19jb21wYXQpCiAgICAgb3B0aW9uX3BhcnNlciA9IG9wdHBh
cnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKLQotICAgIG9wdGlvbnMs
IGFyZ3MgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKLQotICAgIHJldHVybiBvcHRp
b25zLCBhcmdzCi0KLQotZGVmIF9sb2dfd2VkZ2VkX3RocmVhZCh0aHJlYWQpOgotICAgICIiIkxv
ZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2l2ZW4gdGhyZWFkIHN0YXRlLiIiIgotICAgIGlkID0g
dGhyZWFkLmlkKCkKLSAgICBzdGFjayA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmZpbmRfdGhy
ZWFkX3N0YWNrKGlkKQotICAgIGFzc2VydChzdGFjayBpcyBub3QgTm9uZSkKLSAgICBfbG9nLmVy
cm9yKCIiKQotICAgIF9sb2cuZXJyb3IoInRocmVhZCAlcyAoJWQpIGlzIHdlZGdlZCIgJSAodGhy
ZWFkLmdldE5hbWUoKSwgaWQpKQotICAgIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmxvZ19zdGFj
ayhzdGFjaykKLSAgICBfbG9nLmVycm9yKCIiKQorICAgIHJldHVybiBvcHRpb25fcGFyc2VyLnBh
cnNlX2FyZ3MoYXJncykKIAogCi1kZWYgbWFpbigpOgotICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJz
ZV9hcmdzKCkKK2RlZiBtYWluKGFyZ3Y9Tm9uZSk6CisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNl
X2FyZ3MoYXJndikKICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9w
dGlvbnMpCiAgICAgcmV0dXJuIHJ1bihwb3J0X29iaiwgb3B0aW9ucywgYXJncykKIApkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggMjQ4YTI5MWQzOTMwMzI1
ZmM3MmNiZjA2ZGZkNjJlM2FkMDZhNDIyYi4uYzRlM2RmNjBiNzc4NjljOTJlODE2OTgzMDY4MjBj
NDI2MGI5YjkwYSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5
CkBAIC03MywxNCArNzMsMTggQEAgZGVmIHBhc3NpbmdfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgcG9y
dF9vYmo9Tm9uZSwgcmVjb3JkX3Jlc3VsdHM9RmFsc2UsCiAgICAgaWYgbm90IHJlY29yZF9yZXN1
bHRzOgogICAgICAgICBhcmdzLmFwcGVuZCgnLS1uby1yZWNvcmQtcmVzdWx0cycpCiAgICAgYXJn
cy5leHRlbmQoZXh0cmFfYXJncykKKyAgICBpZiBub3QgJy0tY2hpbGQtcHJvY2Vzc2VzJyBpbiBh
cmdzOgorICAgICAgICBuZXdfYXJncy5leHRlbmQoWyctLXdvcmtlcnMtYXJlPWlubGluZSddKQor
CisgICAgbmV3X2FyZ3MuZXh0ZW5kKGFyZ3MpCiAgICAgaWYgbm90IHRlc3RzX2luY2x1ZGVkOgog
ICAgICAgICAjIFdlIHVzZSB0aGUgZ2xvYiB0byB0ZXN0IHRoYXQgZ2xvYmJpbmcgd29ya3MuCi0g
ICAgICAgIGFyZ3MuZXh0ZW5kKFsncGFzc2VzJywKLSAgICAgICAgICAgICAgICAgICAgICdodHRw
L3Rlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICdodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cycsCi0gICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvKiddKQotICAgIG9w
dGlvbnMsIHBhcnNlZF9hcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdzKGFyZ3MpCi0g
ICAgaWYgbm90IHBvcnRfb2JqOgorICAgICAgICBuZXdfYXJncy5leHRlbmQoWydwYXNzZXMnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwL3Rlc3RzJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAnd2Vic29ja2V0L3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmFp
bHVyZXMvZXhwZWN0ZWQvKiddKQorICAgIG9wdGlvbnMsIHBhcnNlZF9hcmdzID0gcnVuX3dlYmtp
dF90ZXN0cy5wYXJzZV9hcmdzKG5ld19hcmdzKQorICAgIGlmIHBvcnRfb2JqIGlzIE5vbmU6CiAg
ICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQocG9ydF9uYW1lPW9wdGlvbnMucGxhdGZvcm0sIG9w
dGlvbnM9b3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyPU1vY2tVc2Vy
KCkpCiAgICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIHBh
cnNlZF9hcmdzKQpAQCAtMjE0LDcgKzIxOCw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICBkZWYgdGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQoc2VsZik6CiAgICAgICAg
ICMgTm90ZSB0aGF0IHRoaXMgYWxzbyB0ZXN0cyBydW5uaW5nIGEgdGVzdCBtYXJrZWQgYXMgU0tJ
UCBpZgogICAgICAgICAjIHlvdSBzcGVjaWZ5IGl0IGV4cGxpY2l0bHkuCi0gICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBwYXNzaW5nX3J1biwKKyAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIGxvZ2dpbmdfcnVuLAogICAgICAgICAg
ICAgWydmYWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRy
dWUpCiAKICAgICBkZWYgdGVzdF9sYXN0X3Jlc3VsdHMoc2VsZik6CkBAIC0yNjEsOCArMjY1LDE2
IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3J1
bl9mb3JjZShzZWxmKToKICAgICAgICAgIyBUaGlzIHJhaXNlcyBhbiBleGNlcHRpb24gYmVjYXVz
ZSB3ZSBydW4KLSAgICAgICAgIyBmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCwgd2hp
Y2ggaXMgbm9ybWFsbHkgU0tJUHBlZC4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVF
cnJvciwgbG9nZ2luZ19ydW4sIFsnLS1mb3JjZSddKQorICAgICAgICAjIGZhaWx1cmVzL2V4cGVj
dGVkL2V4Y2VwdGlvbi5odG1sIGFuZAorICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVkL2tleWJv
YXJkLCB3aGljaCBhcmUgbm9ybWFsbHkgU0tJUHBlZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgbG9nZ2luZ19ydW4oWyctLWZvcmNlJ10pCisgICAgICAgICAgICB0ZXN0X3Bhc3NlZCA9IEZh
bHNlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgdGVzdF9wYXNzZWQg
PSBUcnVlCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHRl
c3RfcGFzc2VkID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdF9wYXNzZWQpCiAK
ICAgICBkZWYgdGVzdF9ydW5fcGFydChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgd2UgYWN0
dWFsbHkgc2VsZWN0IHRoZSByaWdodCBwYXJ0CkBAIC00MjQsNyArNDM2LDYgQEAgY2xhc3MgUmVi
YXNlbGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBmaW5hbGx5OgogICAgICAg
ICAgICAgY29kZWNzLm9wZW4gPSBvcmlnaW5hbF9vcGVuCiAKLQogY2xhc3MgVGVzdFJ1bm5lcldy
YXBwZXIocnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKToKICAgICBkZWYgX2dldF90ZXN0X2lu
Zm9fZm9yX2ZpbGUoc2VsZiwgdGVzdF9maWxlKToKICAgICAgICAgcmV0dXJuIHRlc3RfZmlsZQpA
QCAtNDM2LDcgKzQ0Nyw4IEBAIGNsYXNzIFRlc3RSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICAgICAgbW9ja19wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUgPSBsYW1iZGEgbmFt
ZTogbmFtZQogICAgICAgICBtb2NrX3BvcnQuZmlsZW5hbWVfdG9fdXJpID0gbGFtYmRhIG5hbWU6
IG5hbWUKIAotICAgICAgICBydW5uZXIgPSBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIocG9y
dD1tb2NrX3BvcnQsIG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSkKKyAgICAgICAgcnVu
bmVyID0gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKHBvcnQ9bW9ja19wb3J0LAorICAgICAg
ICAgICAgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpLCByb3V0ZXI9TW9jaygpKQogICAg
ICAgICBleHBlY3RlZF9odG1sID0gdSIiIjxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+TGF5
b3V0IFRlc3QgUmVzdWx0cyAodGltZSk8L3RpdGxlPgpAQCAtNDUwLDIwICs0NjIsMTAgQEAgY2xh
c3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBodG1sID0gcnVu
bmVyLl9yZXN1bHRzX2h0bWwoWyJ0ZXN0X3BhdGgiXSwge30sICJUaXRsZSIsIG92ZXJyaWRlX3Rp
bWU9InRpbWUiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0bWwsIGV4cGVjdGVkX2h0bWwp
CiAKLSAgICBkZWYgcXVldWVfdG9fbGlzdChzZWxmLCBxdWV1ZSk6Ci0gICAgICAgIHF1ZXVlX2xp
c3QgPSBbXQotICAgICAgICB3aGlsZShUcnVlKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgICAgICBxdWV1ZV9saXN0LmFwcGVuZChxdWV1ZS5nZXRfbm93YWl0KCkpCi0gICAgICAgICAg
ICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgcmV0
dXJuIHF1ZXVlX2xpc3QKLQotICAgIGRlZiB0ZXN0X2dldF90ZXN0X2ZpbGVfcXVldWUoc2VsZik6
CisgICAgZGVmIHRlc3Rfc2hhcmRfdGVzdHMoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IF9n
ZXRfdGVzdF9maWxlX3F1ZXVlIGluIHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciByZWFsbHkK
ICAgICAgICAgIyBwdXQgdGhlIGh0dHAgdGVzdHMgZmlyc3QgaW4gdGhlIHF1ZXVlLgotICAgICAg
ICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCks
IHByaW50ZXI9TW9jaygpKQotICAgICAgICBydW5uZXIuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1
bGx5X3BhcmFsbGVsID0gRmFsc2UKKyAgICAgICAgcnVubmVyID0gVGVzdFJ1bm5lcldyYXBwZXIo
cG9ydD1Nb2NrKCksIG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSwgcm91dGVyPU1vY2so
KSkKIAogICAgICAgICB0ZXN0X2xpc3QgPSBbCiAgICAgICAgICAgIkxheW91dFRlc3RzL3dlYnNv
Y2tldC90ZXN0cy91bmljb2RlLmh0bSIsCkBAIC00ODQsMTkgKzQ4NiwxNSBAQCBjbGFzcyBUZXN0
UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwn
LAogICAgICAgICBdKQogCi0gICAgICAgIHJ1bm5lci5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMg
PSAxCi0gICAgICAgIHRlc3RfcXVldWVfZm9yX3NpbmdsZV90aHJlYWQgPSBydW5uZXIuX2dldF90
ZXN0X2ZpbGVfcXVldWUodGVzdF9saXN0KQotICAgICAgICBydW5uZXIuX29wdGlvbnMuY2hpbGRf
cHJvY2Vzc2VzID0gMgotICAgICAgICB0ZXN0X3F1ZXVlX2Zvcl9tdWx0aV90aHJlYWQgPSBydW5u
ZXIuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9saXN0KQotCi0gICAgICAgIHNpbmdsZV90aHJl
YWRfcmVzdWx0cyA9IHNlbGYucXVldWVfdG9fbGlzdCh0ZXN0X3F1ZXVlX2Zvcl9zaW5nbGVfdGhy
ZWFkKQotICAgICAgICBtdWx0aV90aHJlYWRfcmVzdWx0cyA9IHNlbGYucXVldWVfdG9fbGlzdCh0
ZXN0X3F1ZXVlX2Zvcl9tdWx0aV90aHJlYWQpCisgICAgICAgIHNpbmdsZV90aHJlYWRfcmVzdWx0
cyA9IHJ1bm5lci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBUcnVlKQorICAgICAgICBtdWx0aV90
aHJlYWRfcmVzdWx0cyA9IHJ1bm5lci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBGYWxzZSkKIAog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0c190b19odHRwX2xvY2siLCBzaW5nbGVfdGhy
ZWFkX3Jlc3VsdHNbMF1bMF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVz
dHNfdG9faHR0cF9sb2NrLCBzZXQoc2luZ2xlX3RocmVhZF9yZXN1bHRzWzBdWzFdKSkKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9faHR0cF9sb2NrIiwgbXVsdGlfdGhyZWFkX3Jl
c3VsdHNbMF1bMF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9f
aHR0cF9sb2NrLCBzZXQobXVsdGlfdGhyZWFkX3Jlc3VsdHNbMF1bMV0pKQogCisKIGNsYXNzIERy
eXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgRklYTUU6IGl0J3MgaGFyZCB0byBr
bm93IHdoaWNoIHBsYXRmb3JtcyBhcmUgc2FmZSB0byB0ZXN0OyB0aGUKICAgICAjIGNocm9taXVt
IHBsYXRmb3JtcyByZXF1aXJlIGEgY2hyb21pdW0gY2hlY2tvdXQsIGFuZCB0aGUgbWFjIHBsYXRm
b3JtCkBAIC01MTcsNDEgKzUxNSw2IEBAIGNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLXBpeGVs
LXRlc3RzJ10pKQogCiAKLWNsYXNzIFRlc3RUaHJlYWQoZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQu
V2F0Y2hhYmxlVGhyZWFkKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRlZF9xdWV1ZSwg
c3RvcHBpbmdfcXVldWUpOgotICAgICAgICBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5XYXRjaGFi
bGVUaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fc3RhcnRlZF9xdWV1ZSA9IHN0
YXJ0ZWRfcXVldWUKLSAgICAgICAgc2VsZi5fc3RvcHBpbmdfcXVldWUgPSBzdG9wcGluZ19xdWV1
ZQotICAgICAgICBzZWxmLl90aW1lb3V0ID0gRmFsc2UKLSAgICAgICAgc2VsZi5fdGltZW91dF9x
dWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYu
X2NvdmVyZWRfcnVuKCkKLQotICAgIGRlZiBfY292ZXJlZF9ydW4oc2VsZik6Ci0gICAgICAgICMg
RklYTUU6IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0aW5lIHRvIHdvcmsgYXJvdW5kIGEgYnVnCi0g
ICAgICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8vYml0YnVja2V0Lm9yZy9uZWQvY292ZXJh
Z2VweS9pc3N1ZS84NS4KLSAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkLmdldF9pZGVu
dCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX3N0YXJ0ZWRfcXVldWUucHV0KCcn
KQotICAgICAgICAgICAgbXNnID0gc2VsZi5fc3RvcHBpbmdfcXVldWUuZ2V0KCkKLSAgICAgICAg
ICAgIGlmIG1zZyA9PSAnS2V5Ym9hcmRJbnRlcnJ1cHQnOgotICAgICAgICAgICAgICAgIHJhaXNl
IEtleWJvYXJkSW50ZXJydXB0Ci0gICAgICAgICAgICBlbGlmIG1zZyA9PSAnRXhjZXB0aW9uJzoK
LSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKLSAgICAgICAgICAgIGVsaWYgbXNn
ID09ICdUaW1lb3V0JzoKLSAgICAgICAgICAgICAgICBzZWxmLl90aW1lb3V0ID0gVHJ1ZQotICAg
ICAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUuZ2V0KCkKLSAgICAgICAgZXhjZXB0Ogot
ICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQotCi0gICAg
ZGVmIG5leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fdGltZW91dDoKLSAgICAg
ICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUucHV0KCdkb25lJykKLSAgICAgICAgICAgIHJldHVy
biB0aW1lLnRpbWUoKSAtIDEwCi0gICAgICAgIHJldHVybiB0aW1lLnRpbWUoKQotCi0KIGNsYXNz
IFRlc3RIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFz
dHJlYW0pOgogICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKQEAgLTU2MSw3
MCArNTI0LDUgQEAgY2xhc3MgVGVzdEhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAgICAgICAg
c2VsZi5fc3RyZWFtLndyaXRlKHNlbGYuZm9ybWF0KHJlY29yZCkpCiAKIAotY2xhc3MgV2FpdEZv
clRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGNsYXNzIE1vY2tU
ZXN0UnVubmVyKHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcik6Ci0gICAgICAgIGRlZiBfX2lu
aXRfXyhzZWxmKToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBkZWYgX19kZWxfXyhzZWxm
KToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBkZWYgdXBkYXRlX3N1bW1hcnkoc2VsZiwg
cmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHJ1bl9vbmVfdGhy
ZWFkKHNlbGYsIG1zZyk6Ci0gICAgICAgIHJ1bm5lciA9IHNlbGYuTW9ja1Rlc3RSdW5uZXIoKQot
ICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAgICAgc3RvcHBpbmdf
cXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIGNoaWxkX3RocmVhZCA9IFRlc3RUaHJlYWQo
c3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKQotICAgICAgICBjaGlsZF90aHJlYWQuc3Rh
cnQoKQotICAgICAgICBzdGFydGVkX21zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCi0gICAgICAg
IHN0b3BwaW5nX3F1ZXVlLnB1dChtc2cpCi0gICAgICAgIHRocmVhZHMgPSBbY2hpbGRfdGhyZWFk
XQotICAgICAgICByZXR1cm4gcnVubmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJl
YWRzLCBOb25lKQotCi0gICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIGludGVycnVw
dGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShp
bnRlcnJ1cHRlZCkKLQotICAgIGRlZiB0ZXN0X2ludGVycnVwdChzZWxmKToKLSAgICAgICAgaW50
ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCdLZXlib2FyZEludGVycnVwdCcpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnRlcnJ1cHRlZCkKLQotICAgIGRlZiB0ZXN0X3RpbWVvdXQo
c2VsZik6Ci0gICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKLSAgICAg
ICAgb2MuY2FwdHVyZV9vdXRwdXQoKQotICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29u
ZV90aHJlYWQoJ1RpbWVvdXQnKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVk
KQotICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCi0KLSAgICBkZWYgdGVzdF9leGNlcHRpb24o
c2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYucnVuX29u
ZV90aHJlYWQsICdFeGNlcHRpb24nKQotCi0KLWNsYXNzIFN0YW5kYWxvbmVGdW5jdGlvbnNUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3RocmVhZChzZWxm
KToKLSAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQotICAgICAgICBv
Yy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIGxvZ2dlciA9IHJ1bl93ZWJraXRfdGVzdHMuX2xv
ZwotICAgICAgICBhc3RyZWFtID0gYXJyYXlfc3RyZWFtLkFycmF5U3RyZWFtKCkKLSAgICAgICAg
aGFuZGxlciA9IFRlc3RIYW5kbGVyKGFzdHJlYW0pCi0gICAgICAgIGxvZ2dlci5hZGRIYW5kbGVy
KGhhbmRsZXIpCi0KLSAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAg
ICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBjaGlsZF90aHJlYWQg
PSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKLSAgICAgICAgY2hp
bGRfdGhyZWFkLnN0YXJ0KCkKLSAgICAgICAgbXNnID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKLQot
ICAgICAgICBydW5fd2Via2l0X3Rlc3RzLl9sb2dfd2VkZ2VkX3RocmVhZChjaGlsZF90aHJlYWQp
Ci0gICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgnJykKLSAgICAgICAgY2hpbGRfdGhyZWFkLmpv
aW4odGltZW91dD0xLjApCi0KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyZWFtLmVtcHR5
KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2hpbGRfdGhyZWFkLmlzQWxpdmUoKSkKLSAg
ICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6
CiAgICAgdW5pdHRlc3QubWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73186</attachid>
            <date>2010-11-06 21:05:43 -0700</date>
            <delta_ts>2010-11-08 15:59:35 -0800</delta_ts>
            <desc>merge to head (r71474)</desc>
            <filename>bug-48820-20101106210542.patch</filename>
            <type>text/plain</type>
            <size>86825</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1ODEyYzg0NmRjZTllYTcwOTQwM2FjYzRkOWIxMGY2MzNmYjM0MGY1Li45NmE4MzQ0
Y2JiZmZiMGY1ZjhkODVlOGRhNzc3NjFhMDI4ZDU5NzdmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGFsbCBvZiB0aGUg
TlJXVCBtdWx0aXRocmVhZGluZyBpc3N1ZXMgYnkgbW92aW5nIHRvCisgICAgICAgIG11bHRpcHJv
Y2Vzcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3ByaW50aW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlci5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyX3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3Rlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5OgorCiAyMDEwLTExLTA2ICBEaXJrIFByYW5rZSAg
PGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2llZGVs
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90
cmVlX3RocmVhZC5weQppbmRleCA3ZmU0MGE3NTdjMjY2ZjRjZDBiZGZhNDVmOWJlMGY5MWVmYzBm
ZmFlLi5kZjQzZTU5Yzc0YzFlM2E1ODJjNjBkMjRkYTRlMmViM2VhMTFmZDE3IDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVh
ZC5weQpAQCAtNDIsMTMgKzQyLDE1IEBAIGltcG9ydCBjb2RlY3MKIGltcG9ydCBjb3B5CiBpbXBv
cnQgbG9nZ2luZwogaW1wb3J0IG9zCi1pbXBvcnQgUXVldWUKIGltcG9ydCBzaWduYWwKIGltcG9y
dCBzeXMKLWltcG9ydCB0aHJlYWQKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCi1pbXBv
cnQgdHJhY2ViYWNrCisKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBp
bXBvcnQgdGVzdF90eXBlX2Jhc2UKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlw
ZXMgaW1wb3J0IHRleHRfZGlmZgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBl
cyBpbXBvcnQgaW1hZ2VfZGlmZgogCiBpbXBvcnQgdGVzdF9mYWlsdXJlcwogaW1wb3J0IHRlc3Rf
cmVzdWx0cwpAQCAtNTcsMjYgKzU5LDkgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UuIgogICAgICAgICAgICAgICAgICAgICAg
ICAgICJkdW1wX3JlbmRlcl90cmVlX3RocmVhZCIpCiAKIAotZGVmIGZpbmRfdGhyZWFkX3N0YWNr
KGlkKToKLSAgICAiIiJSZXR1cm5zIGEgc3RhY2sgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8g
ZHVtcCBhIHN0YWNrIHRyYWNlIGZvcgotICAgIHRoZSBnaXZlbiB0aHJlYWQgaWQgKG9yIE5vbmUg
aWYgdGhlIGlkIGlzIG5vdCBmb3VuZCkuIiIiCi0gICAgZm9yIHRocmVhZF9pZCwgc3RhY2sgaW4g
c3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKCk6Ci0gICAgICAgIGlmIHRocmVhZF9pZCA9PSBp
ZDoKLSAgICAgICAgICAgIHJldHVybiBzdGFjawotICAgIHJldHVybiBOb25lCi0KLQotZGVmIGxv
Z19zdGFjayhzdGFjayk6Ci0gICAgIiIiTG9nIGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCku
IiIiCi0gICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4
dHJhY3Rfc3RhY2soc3RhY2spOgotICAgICAgICBfbG9nLmVycm9yKCdGaWxlOiAiJXMiLCBsaW5l
ICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCi0gICAgICAgIGlmIGxpbmU6
Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCcgICVzJyAlIGxpbmUuc3RyaXAoKSkKLQotCiBkZWYg
X3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVz
dF9hcmdzLAogICAgICAgICAgICAgICAgICAgICBjcmFzaCwgdGltZW91dCwgdGVzdF9ydW5fdGlt
ZSwgYWN0dWFsX2NoZWNrc3VtLAotICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGVycm9yKToK
KyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBlcnJvciwgbmFtZSk6CiAgICAgIiIiUmVjZWl2
ZXMgdGhlIG91dHB1dCBmcm9tIGEgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcywgc3ViamVjdHMgaXQg
dG8gYQogICAgIG51bWJlciBvZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUg
dHlwZXMgdGhlIHRlc3QgcHJvZHVjZWQuCiAKQEAgLTg0LDcgKzY5LDcgQEAgZGVmIF9wcm9jZXNz
X291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRlc3RfYXJncywK
ICAgICAgIHBvcnQ6IHBvcnQtc3BlY2lmaWMgaG9va3MKICAgICAgIG9wdGlvbnM6IGNvbW1hbmQg
bGluZSBvcHRpb25zIGFyZ3VtZW50IGZyb20gb3B0cGFyc2UKICAgICAgIHByb2M6IGFuIGFjdGl2
ZSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzCi0gICAgICB0ZXN0X2luZm86IE9iamVjdCBjb250YWlu
aW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKKyAgICAgIHRlc3RfaW5mbzog
T2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKICAgICAgIHRl
c3RfdHlwZXM6IGxpc3Qgb2YgdGVzdCB0eXBlcyB0byBzdWJqZWN0IHRoZSBvdXRwdXQgdG8KICAg
ICAgIHRlc3RfYXJnczogYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBlYWNoIHRlc3QKIApAQCAt
OTUsOCArODAsOSBAQCBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5m
bywgdGVzdF90eXBlcywgdGVzdF9hcmdzLAogICAgICMgU29tZSB0ZXN0IGFyZ3MsIHN1Y2ggYXMg
dGhlIGltYWdlIGhhc2gsIG1heSBiZSBhZGRlZCBvciBjaGFuZ2VkIG9uIGEKICAgICAjIHRlc3Qt
YnktdGVzdCBiYXNpcy4KICAgICBsb2NhbF90ZXN0X2FyZ3MgPSBjb3B5LmNvcHkodGVzdF9hcmdz
KQotCisgICAgbG9jYWxfdGVzdF9hcmdzLnVyaSA9IHRlc3RfaW5mby51cmkKICAgICBsb2NhbF90
ZXN0X2FyZ3MuaGFzaCA9IGFjdHVhbF9jaGVja3N1bQorICAgIHRlc3RfbmFtZSA9IHBvcnQucmVs
YXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2luZm8uZmlsZW5hbWUpCiAKICAgICBpZiBjcmFzaDoK
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCkBA
IC0xMDQsMTggKzkwLDE0IEBAIGRlZiBfcHJvY2Vzc19vdXRwdXQocG9ydCwgb3B0aW9ucywgdGVz
dF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCiAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0
ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCkpCiAKICAgICBpZiBjcmFzaDoKLSAgICAgICAg
X2xvZy5kZWJ1ZygiU3RhY2t0cmFjZSBmb3IgJXM6XG4lcyIgJSAodGVzdF9pbmZvLmZpbGVuYW1l
LCBlcnJvcikpCi0gICAgICAgICMgU3RyaXAgb2ZmICJmaWxlOi8vIiBzaW5jZSBSZWxhdGl2ZVRl
c3RGaWxlbmFtZSBleHBlY3RzCi0gICAgICAgICMgZmlsZXN5c3RlbSBwYXRocy4KLSAgICAgICAg
ZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8uZmlsZW5hbWUpKQorICAg
ICAgICBfbG9nLmRlYnVnKCIlcyBTdGFja3RyYWNlIGZvciAlczpcbiVzIiAlIChuYW1lLCB0ZXN0
X25hbWUsIGVycm9yKSkKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5y
ZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1lKQogICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGgu
c3BsaXRleHQoZmlsZW5hbWUpWzBdICsgIi1zdGFjay50eHQiCiAgICAgICAgIHBvcnQubWF5YmVf
bWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMF0pCiAgICAgICAgIHdpdGgg
Y29kZWNzLm9wZW4oZmlsZW5hbWUsICJ3YiIsICJ1dGYtOCIpIGFzIGZpbGU6CiAgICAgICAgICAg
ICBmaWxlLndyaXRlKGVycm9yKQogICAgIGVsaWYgZXJyb3I6Ci0gICAgICAgIF9sb2cuZGVidWco
IlByZXZpb3VzIHRlc3Qgb3V0cHV0IHN0ZGVyciBsaW5lczpcbiVzIiAlIGVycm9yKQorICAgICAg
ICBfbG9nLmRlYnVnKCIlcyAlcyBzdGRlcnIgbGluZXM6XG4lcyIgJSAobmFtZSwgdGVzdF9uYW1l
LCBlcnJvcikpCiAKICAgICAjIENoZWNrIHRoZSBvdXRwdXQgYW5kIHNhdmUgdGhlIHJlc3VsdHMu
CiAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCkBAIC0xMzgsMzIgKzEyMCwxMCBAQCBkZWYg
X3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVz
dF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zv
cl9hbGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZzKQogCiAKLWRlZiBfcGFkX3RpbWVvdXQodGltZW91
dCk6Ci0gICAgIiIiUmV0dXJucyBhIHNhZmUgbXVsdGlwbGUgb2YgdGhlIHBlci10ZXN0IHRpbWVv
dXQgdmFsdWUgdG8gdXNlCi0gICAgdG8gZGV0ZWN0IGh1bmcgdGVzdCB0aHJlYWRzLgotCi0gICAg
IiIiCi0gICAgIyBXaGVuIHdlJ3JlIHJ1bm5pbmcgb25lIHRlc3QgcGVyIER1bXBSZW5kZXJUcmVl
IHByb2Nlc3MsIHdlIGNhbgotICAgICMgZW5mb3JjZSBhIGhhcmQgdGltZW91dC4gIFRoZSBEdW1w
UmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIuNXgKLSAgICAjIHRoZSB0aW1lb3V0OyB3ZSB3YW50
IHRvIGJlIGxhcmdlciB0aGFuIHRoYXQuCi0gICAgcmV0dXJuIHRpbWVvdXQgKiAzCi0KLQotZGVm
IF9taWxsaXNlY29uZHNfdG9fc2Vjb25kcyhtc2Vjcyk6Ci0gICAgcmV0dXJuIGZsb2F0KG1zZWNz
KSAvIDEwMDAuMAotCi0KLWRlZiBfaW1hZ2VfaGFzaCh0ZXN0X2luZm8sIHRlc3RfYXJncywgb3B0
aW9ucyk6Ci0gICAgIiIiUmV0dXJucyB0aGUgaW1hZ2UgaGFzaCBvZiB0aGUgdGVzdCBpZiBpdCdz
IG5lZWRlZCwgb3RoZXJ3aXNlIE5vbmUuIiIiCi0gICAgaWYgKHRlc3RfYXJncy5uZXdfYmFzZWxp
bmUgb3IgdGVzdF9hcmdzLnJlc2V0X3Jlc3VsdHMgb3Igbm90IG9wdGlvbnMucGl4ZWxfdGVzdHMp
OgotICAgICAgICByZXR1cm4gTm9uZQotICAgIHJldHVybiB0ZXN0X2luZm8uaW1hZ2VfaGFzaCgp
Ci0KLQogY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAiIiJU
aHJlYWQgd3JhcHBlciBmb3IgcnVubmluZyBhIHNpbmdsZSB0ZXN0IGZpbGUuIiIiCiAKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0
ZXN0X2FyZ3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCB3b3JrZXJf
bnVtYmVyLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRlc3RfYXJncyk6CiAgICAgICAgICIiIgog
ICAgICAgICBBcmdzOgogICAgICAgICAgIHBvcnQ6IG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1z
cGVjaWZpYyBob29rcwpAQCAtMTgxLDYgKzE0MSw4IEBAIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQo
dGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0X3R5cGVz
CiAgICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHRlc3RfYXJncwogICAgICAgICBzZWxmLl9kcml2
ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisg
ICAgICAgIHNlbGYuX25hbWUgPSAnd29ya2VyLSVkJyAlIHdvcmtlcl9udW1iZXIKIAogICAgIGRl
ZiBydW4oc2VsZik6CiAgICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkKQEAgLTE5MiwyNjMgKzE1
NCwxMzEgQEAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAg
ICAgc2VsZi5fZHJpdmVyID0gc2VsZi5fcG9ydC5jcmVhdGVfZHJpdmVyKHNlbGYuX3Rlc3RfYXJn
cy5wbmdfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMpCiAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCi0gICAgICAg
IGltYWdlX2hhc2ggPSBfaW1hZ2VfaGFzaCh0ZXN0X2luZm8sIHNlbGYuX3Rlc3RfYXJncywgc2Vs
Zi5fb3B0aW9ucykKICAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgICBjcmFzaCwg
dGltZW91dCwgYWN0dWFsX2NoZWNrc3VtLCBvdXRwdXQsIGVycm9yID0gXAotICAgICAgICAgICAg
c2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5mby51cmkuc3RyaXAoKSwgdGVzdF9pbmZvLnRp
bWVvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfaGFzaCkKKyAg
ICAgICAgICAgIHNlbGYuX2RyaXZlci5ydW5fdGVzdCh0ZXN0X2luZm8udXJpLCB0ZXN0X2luZm8u
dGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8uaW1h
Z2VfY2hlY2tzdW0pCiAgICAgICAgIGVuZCA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX3Rl
c3RfcmVzdWx0ID0gX3Byb2Nlc3Nfb3V0cHV0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCiAg
ICAgICAgICAgICB0ZXN0X2luZm8sIHNlbGYuX3Rlc3RfdHlwZXMsIHNlbGYuX3Rlc3RfYXJncywK
ICAgICAgICAgICAgIGNyYXNoLCB0aW1lb3V0LCBlbmQgLSBzdGFydCwKLSAgICAgICAgICAgIGFj
dHVhbF9jaGVja3N1bSwgb3V0cHV0LCBlcnJvcikKKyAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1
bSwgb3V0cHV0LCBlcnJvciwgc2VsZi5fbmFtZSkKICAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3Ao
KQogCiAgICAgZGVmIGdldF90ZXN0X3Jlc3VsdChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYu
X3Rlc3RfcmVzdWx0CiAKIAotY2xhc3MgV2F0Y2hhYmxlVGhyZWFkKHRocmVhZGluZy5UaHJlYWQp
OgotICAgICIiIlRoaXMgY2xhc3MgYWJzdHJhY3RzIGFuIGludGVyZmFjZSB1c2VkIGJ5Ci0gICAg
cnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCBm
b3IgdGhyZWFkCi0gICAgbWFuYWdlbWVudC4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0g
ICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fY2Fu
Y2VsZWQgPSBGYWxzZQotICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IE5vbmUKLSAgICAg
ICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9uZQotICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSBO
b25lCi0KLSAgICBkZWYgY2FuY2VsKHNlbGYpOgotICAgICAgICAiIiJTZXQgYSBmbGFnIHRlbGxp
bmcgdGhpcyB0aHJlYWQgdG8gcXVpdC4iIiIKLSAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVl
Ci0KLSAgICBkZWYgY2xlYXJfbmV4dF90aW1lb3V0KHNlbGYpOgotICAgICAgICAiIiJNYXJrIGEg
ZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRvIHN0b3Agc2V0dGluZyB0aW1lb3V0cy4iIiIKLSAg
ICAgICAgc2VsZi5fdGltZW91dCA9IDAKLQotICAgIGRlZiBleGNlcHRpb25faW5mbyhzZWxmKToK
LSAgICAgICAgIiIiSWYgcnVuKCkgdGVybWluYXRlZCBvbiBhbiB1bmNhdWdodCBleGNlcHRpb24s
IHJldHVybiBpdCBoZXJlCi0gICAgICAgICgodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykgdHVwbGUp
LgotICAgICAgICBSZXR1cm5zIE5vbmUgaWYgcnVuKCkgdGVybWluYXRlZCBub3JtYWxseS4gTWVh
bnQgdG8gYmUgY2FsbGVkIGFmdGVyCi0gICAgICAgIGpvaW5pbmcgdGhpcyB0aHJlYWQuIiIiCi0g
ICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb25faW5mbwotCi0gICAgZGVmIGlkKHNlbGYpOgot
ICAgICAgICAiIiJSZXR1cm4gYSB0aHJlYWQgaWRlbnRpZmllci4iIiIKLSAgICAgICAgcmV0dXJu
IHNlbGYuX3RocmVhZF9pZAotCi0gICAgZGVmIG5leHRfdGltZW91dChzZWxmKToKLSAgICAgICAg
IiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlzIHN1cHBvc2VkIHRvIGZpbmlzaCBieS4iIiIK
LSAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dAotCi0KLWNsYXNzIFRlc3RTaGVsbFRo
cmVhZChXYXRjaGFibGVUaHJlYWQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRp
b25zLCBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVldWUsCi0gICAgICAgICAgICAgICAg
IHRlc3RfdHlwZXMsIHRlc3RfYXJncyk6CitjbGFzcyBXb3JrZXIob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydCwgY29udGFpbmVyLCBvcHRpb25zLCB3b3JrZXJfbnVtYmVyKToK
ICAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbGwgdGhlIGxvY2FsIHN0YXRlIGZvciB0aGlzIER1bXBS
ZW5kZXJUcmVlIHRocmVhZC4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIHBvcnQ6IGludGVy
ZmFjZSB0byBwb3J0LXNwZWNpZmljIGhvb2tzCi0gICAgICAgICAgb3B0aW9uczogY29tbWFuZCBs
aW5lIG9wdGlvbnMgYXJndW1lbnQgZnJvbSBvcHRwYXJzZQotICAgICAgICAgIGZpbGVuYW1lX2xp
c3RfcXVldWU6IEEgdGhyZWFkIHNhZmUgUXVldWUgY2xhc3MgdGhhdCBjb250YWlucyBsaXN0cwot
ICAgICAgICAgICAgICBvZiB0dXBsZXMgb2YgKGZpbGVuYW1lLCB1cmkpIHBhaXJzLgotICAgICAg
ICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJlYWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29u
dGFpbgotICAgICAgICAgICAgICBzZXJpYWxpemVkIFRlc3RSZXN1bHQgb2JqZWN0cy4KLSAgICAg
ICAgICB0ZXN0X3R5cGVzOiBBIGxpc3Qgb2YgVGVzdFR5cGUgb2JqZWN0cyB0byBydW4gdGhlIHRl
c3Qgb3V0cHV0Ci0gICAgICAgICAgICAgIGFnYWluc3QuCi0gICAgICAgICAgdGVzdF9hcmdzOiBB
IFRlc3RBcmd1bWVudHMgb2JqZWN0IHRvIHBhc3MgdG8gZWFjaCBUZXN0VHlwZS4KKyAgICAgICAg
ICBjb250YWluZXI6IGNvbnRhaW5lciBvYmplY3QgdG8gcmVjZWl2ZSB0ZXN0cyBmcm9tCisgICAg
ICAgICAgd29ya2VyX251bWJlcjogbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmcKIAogICAgICAgICAi
IiIKLSAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYu
X2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fY29udGFpbmVyID0gY29udGFpbmVyCiAg
ICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25z
Ci0gICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3RfcXVldWUgPSBmaWxlbmFtZV9saXN0X3F1ZXVl
Ci0gICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IHJlc3VsdF9xdWV1ZQorICAgICAgICBzZWxm
Ll93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9uYW1lID0gJ3dv
cmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxm
Ll9vcHRpb25zLmJhdGNoX3NpemUKKyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKICAg
ICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdCA9IFtdCi0gICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMg
PSB0ZXN0X3R5cGVzCi0gICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHRlc3RfYXJncworICAgICAg
ICBzZWxmLl90ZXN0X3R5cGVzID0gW10KKyAgICAgICAgZm9yIGNscyBpbiBzZWxmLl90ZXN0X3R5
cGVfY2xhc3NlcygpOgorICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcy5hcHBlbmQoY2xzKHNl
bGYuX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCisgICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHNl
bGYuX3Rlc3RfYXJncyh3b3JrZXJfbnVtYmVyKQogICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25l
Ci0gICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzID0ge30KLSAgICAgICAgc2Vs
Zi5fdGVzdF9yZXN1bHRzID0gW10KLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0gMAotICAgICAg
ICBzZWxmLl9zdGFydF90aW1lID0gMAotICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSAwCi0gICAg
ICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKLSAgICAgICAgc2VsZi5faHR0cF9sb2Nr
X3dhaXRfYmVnaW4gPSAwCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IDAKLQot
ICAgICAgICAjIEN1cnJlbnQgZ3JvdXAgb2YgdGVzdHMgd2UncmUgcnVubmluZy4KLSAgICAgICAg
c2VsZi5fY3VycmVudF9ncm91cCA9IE5vbmUKLSAgICAgICAgIyBOdW1iZXIgb2YgdGVzdHMgaW4g
c2VsZi5fY3VycmVudF9ncm91cC4KLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRf
Z3JvdXAgPSBOb25lCi0gICAgICAgICMgVGltZSBhdCB3aGljaCB3ZSBzdGFydGVkIHJ1bm5pbmcg
dGVzdHMgZnJvbSBzZWxmLl9jdXJyZW50X2dyb3VwLgotICAgICAgICBzZWxmLl9jdXJyZW50X2dy
b3VwX3N0YXJ0X3RpbWUgPSBOb25lCi0KLSAgICBkZWYgZ2V0X3Rlc3RfZ3JvdXBfdGltaW5nX3N0
YXRzKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIGEgZGljdGlvbmFyeSBtYXBwaW5nIHRlc3Qg
Z3JvdXAgdG8gYSB0dXBsZSBvZgotICAgICAgICAobnVtYmVyIG9mIHRlc3RzIGluIHRoYXQgZ3Jv
dXAsIHRpbWUgdG8gcnVuIHRoZSB0ZXN0cykiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3Rf
Z3JvdXBfdGltaW5nX3N0YXRzCi0KLSAgICBkZWYgZ2V0X3Rlc3RfcmVzdWx0cyhzZWxmKToKLSAg
ICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIGFsbCB0ZXN0cyBydW4gb24gdGhpcyB0aHJlYWQu
Ci0KLSAgICAgICAgVGhpcyBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBwZXItdGhyZWFkIHN0YXRpc3Rp
Y3MuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3Jlc3VsdHMKLQot
ICAgIGRlZiBnZXRfdG90YWxfdGltZShzZWxmKToKLSAgICAgICAgcmV0dXJuIG1heChzZWxmLl9z
dG9wX3RpbWUgLSBzZWxmLl9zdGFydF90aW1lIC0KLSAgICAgICAgICAgICAgICAgICBzZWxmLl9o
dHRwX2xvY2tfd2FpdF90aW1lKCksIDAuMCkKLQotICAgIGRlZiBnZXRfbnVtX3Rlc3RzKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5fbnVtX3Rlc3RzCi0KLSAgICBkZWYgcnVuKHNlbGYpOgot
ICAgICAgICAiIiJEZWxlZ2F0ZSBtYWluIHdvcmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFuZCB3YXRj
aCBmb3IgdW5jYXVnaHQKLSAgICAgICAgZXhjZXB0aW9ucy4iIiIKLSAgICAgICAgc2VsZi5fY292
ZXJlZF9ydW4oKQotCi0gICAgZGVmIF9jb3ZlcmVkX3J1bihzZWxmKToKLSAgICAgICAgIyBGSVhN
RTogdGhpcyBpcyBhIHNlcGFyYXRlIHJvdXRpbmUgdG8gd29yayBhcm91bmQgYSBidWcKLSAgICAg
ICAgIyBpbiBjb3ZlcmFnZTogc2VlIGh0dHA6Ly9iaXRidWNrZXQub3JnL25lZC9jb3ZlcmFnZXB5
L2lzc3VlLzg1LgotICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkK
LSAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuX251
bV90ZXN0cyA9IDAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJXMgc3Rh
cnRpbmcnICUgKHNlbGYuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgIHNlbGYuX3J1bih0ZXN0X3J1
bm5lcj1Ob25lLCByZXN1bHRfc3VtbWFyeT1Ob25lKQotICAgICAgICAgICAgX2xvZy5kZWJ1Zygn
JXMgZG9uZSAoJWQgdGVzdHMpJyAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5nZXRfbnVtX3Rlc3RzKCkpKQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRl
cnJ1cHQ6Ci0gICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygp
Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBpbnRlcnJ1cHRlZCIgJSBzZWxmLmdldE5hbWUo
KSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgIyBTYXZlIHRoZSBleGNlcHRpb24gZm9y
IG91ciBjYWxsZXIgdG8gc2VlLgotICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBz
eXMuZXhjX2luZm8oKQotICAgICAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkK
LSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyVzIGR5aW5nLCBleGNlcHRpb24gcmFpc2VkJyAlIHNl
bGYuZ2V0TmFtZSgpKQotCi0gICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCi0K
LSAgICBkZWYgcnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHRlc3RfcnVubmVyLCByZXN1bHRfc3Vt
bWFyeSk6Ci0gICAgICAgICIiIlRoaXMgaG9vayBhbGxvd3MgdXMgdG8gcnVuIHRoZSB0ZXN0cyBm
cm9tIHRoZSBtYWluIHRocmVhZCBpZgotICAgICAgICAtLW51bS10ZXN0LXNoZWxscz09MSwgaW5z
dGVhZCBvZiBoYXZpbmcgdG8gYWx3YXlzIHJ1biB0d28gb3IgbW9yZQotICAgICAgICB0aHJlYWRz
LiBUaGlzIGFsbG93cyB1cyB0byBkZWJ1ZyB0aGUgdGVzdCBoYXJuZXNzIHdpdGhvdXQgaGF2aW5n
IHRvCi0gICAgICAgIGRvIG11bHRpLXRocmVhZGVkIGRlYnVnZ2luZy4iIiIKLSAgICAgICAgc2Vs
Zi5fcnVuKHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSkKLQotICAgIGRlZiBjYW5jZWwoc2Vs
Zik6Ci0gICAgICAgICIiIkNsZWFuIHVwIGh0dHAgbG9jayBhbmQgc2V0IGEgZmxhZyB0ZWxsaW5n
IHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCi0gICAgICAgIHNlbGYuX3N0b3BfaHR0cF9sb2NrKCkK
LSAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLmNhbmNlbChzZWxmKQotCi0gICAgZGVmIG5leHRfdGlt
ZW91dChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlzIHN1cHBv
c2VkIHRvIGZpbmlzaCBieS4iIiIKLSAgICAgICAgaWYgc2VsZi5fbmV4dF90aW1lb3V0OgotICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dCArIHNlbGYuX2h0dHBfbG9ja193YWl0
X3RpbWUoKQotICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0Ci0KLSAgICBkZWYgX2h0
dHBfbG9ja193YWl0X3RpbWUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgdGltZSB3aGF0
IGh0dHAgbG9ja2luZyB0YWtlcy4iIiIKLSAgICAgICAgaWYgc2VsZi5faHR0cF9sb2NrX3dhaXRf
YmVnaW4gPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGlmIHNlbGYuX2h0dHBf
bG9ja193YWl0X2VuZCA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIHRpbWUudGltZSgpIC0gc2Vs
Zi5faHR0cF9sb2NrX3dhaXRfYmVnaW4KLSAgICAgICAgcmV0dXJuIHNlbGYuX2h0dHBfbG9ja193
YWl0X2VuZCAtIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luCi0KLSAgICBkZWYgX3J1bihzZWxm
LCB0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJNYWluIHdvcmsgZW50
cnkgcG9pbnQgb2YgdGhlIHRocmVhZC4gQmFzaWNhbGx5IHdlIHB1bGwgdXJscyBmcm9tIHRoZQot
ICAgICAgICBmaWxlbmFtZSBxdWV1ZSBhbmQgcnVuIHRoZSB0ZXN0cyB1bnRpbCB3ZSBydW4gb3V0
IG9mIHVybHMuCi0KLSAgICAgICAgSWYgdGVzdF9ydW5uZXIgaXMgbm90IE5vbmUsIHRoZW4gd2Ug
Y2FsbCB0ZXN0X3J1bm5lci5VcGRhdGVTdW1tYXJ5KCkKLSAgICAgICAgd2l0aCB0aGUgcmVzdWx0
cyBvZiBlYWNoIHRlc3QuIiIiCi0gICAgICAgIGJhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJh
dGNoX3NpemUKLSAgICAgICAgYmF0Y2hfY291bnQgPSAwCi0KLSAgICAgICAgIyBBcHBlbmQgdGVz
dHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgotICAg
ICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJlTGlz
dHNBbmRQcmludE91dHB1dC4KICAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5q
b2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuLnR4dCIpCi0gICAgICAgIHRlc3RzX3J1
bl9maWxlID0gY29kZWNzLm9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAiYSIsICJ1dGYtOCIpCi0K
LSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIHNlbGYuX2NhbmNlbGVkOgotICAg
ICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Rlc3RpbmcgY2FuY2VsbGVkJykKLSAgICAgICAgICAg
ICAgICB0ZXN0c19ydW5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAg
ICAgICAgICAgIGlmIGxlbihzZWxmLl9maWxlbmFtZV9saXN0KSBpcyAwOgotICAgICAgICAgICAg
ICAgIGlmIHNlbGYuX2N1cnJlbnRfZ3JvdXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzW3NlbGYuX2N1cnJlbnRfZ3JvdXBdID0g
XAotICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2dy
b3VwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc2VsZi5fY3VycmVu
dF9ncm91cF9zdGFydF90aW1lKQotCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwLCBzZWxmLl9maWxlbmFtZV9saXN0ID0gXAotICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZS5nZXRfbm93YWl0
KCkKLSAgICAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3N0b3BfaHR0cF9sb2NrKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2ls
bF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUu
Y2xvc2UoKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgICAgIGlm
IHNlbGYuX29wdGlvbnMud2FpdF9mb3JfaHR0cGQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNl
bGYuX2N1cnJlbnRfZ3JvdXAgPT0gInRlc3RzX3RvX2h0dHBfbG9jayI6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9IHRpbWUudGltZSgpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRydWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IHRpbWUudGlt
ZSgpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdG9wX2h0dHBfbG9jaygpCi0KLSAgICAgICAgICAg
ICAgICBzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVudF9ncm91cCA9IGxlbihzZWxmLl9maWxlbmFt
ZV9saXN0KQotICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXBfc3RhcnRfdGltZSA9
IHRpbWUudGltZSgpCi0KLSAgICAgICAgICAgIHRlc3RfaW5mbyA9IHNlbGYuX2ZpbGVuYW1lX2xp
c3QucG9wKCkKLQotICAgICAgICAgICAgIyBXZSBoYXZlIGEgdXJsLCBydW4gdGVzdHMuCi0gICAg
ICAgICAgICBiYXRjaF9jb3VudCArPSAxCi0gICAgICAgICAgICBzZWxmLl9udW1fdGVzdHMgKz0g
MQotICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X3NpbmdseSh0ZXN0X2luZm8pCi0gICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5m
bykKLQotICAgICAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X2luZm8uZmlsZW5hbWUKLSAgICAgICAg
ICAgIHRlc3RzX3J1bl9maWxlLndyaXRlKGZpbGVuYW1lICsgIlxuIikKLSAgICAgICAgICAgIGlm
IHJlc3VsdC5mYWlsdXJlczoKLSAgICAgICAgICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1bXBS
ZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCi0gICAgICAgICAgICAgICAgaWYgbGVuKFsxIGZvciBm
IGluIHJlc3VsdC5mYWlsdXJlcwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZi5zaG91bGRf
a2lsbF9kdW1wX3JlbmRlcl90cmVlKCldKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2ls
bF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0
Y2ggY291bnQgc2luY2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KLSAgICAgICAgICAgICAgICAg
ICAgYmF0Y2hfY291bnQgPSAwCi0gICAgICAgICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVz
c2FnZShzKS4KLSAgICAgICAgICAgICAgICBlcnJvcl9zdHIgPSAnXG4nLmpvaW4oWycgICcgKyBm
Lm1lc3NhZ2UoKSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYg
aW4gcmVzdWx0LmZhaWx1cmVzXSkKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBm
YWlsZWQ6XG4lcyIgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3Jfc3RyKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLmdldE5hbWUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFt
ZShmaWxlbmFtZSkpKQotICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlLnB1dChyZXN1bHQu
ZHVtcHMoKSkKLQotICAgICAgICAgICAgaWYgYmF0Y2hfc2l6ZSA+IDAgYW5kIGJhdGNoX2NvdW50
ID49IGJhdGNoX3NpemU6Ci0gICAgICAgICAgICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCBy
ZXNldCBjb3VudC4KLSAgICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUo
KQotICAgICAgICAgICAgICAgIGJhdGNoX2NvdW50ID0gMAorICAgICAgICBzZWxmLl90ZXN0c19y
dW5fZmlsZSA9IGNvZGVjcy5vcGVuKHRlc3RzX3J1bl9maWxlbmFtZSwgImEiLCAidXRmLTgiKQor
CisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHJlY2VpdmVkIC0g
bm8gbW9yZSB0ZXN0cyB0byBydW4uIiIiCisgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJf
dHJlZSgpCisgICAgICAgIGlmIHNlbGYuX3Rlc3RzX3J1bl9maWxlOgorICAgICAgICAgICAgc2Vs
Zi5fdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2Zp
bGUgPSBOb25lCisKKyAgICBkZWYgX3Rlc3RfYXJncyhzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAg
ICAgICAgIiIiUmV0dXJucyB0aGUgdHVwbGUgb2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9y
IER1bXBSZW5kZXJUcmVlLiIiIgorICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5U
ZXN0QXJndW1lbnRzKCkKKyAgICAgICAgdGVzdF9hcmdzLnBuZ19wYXRoID0gTm9uZQorICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgcG5nX3BhdGggPSBv
cy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJwbmdfcmVzdWx0JXMucG5nIiAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyKQorICAgICAgICAg
ICAgdGVzdF9hcmdzLnBuZ19wYXRoID0gcG5nX3BhdGgKKyAgICAgICAgdGVzdF9hcmdzLm5ld19i
YXNlbGluZSA9IHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lCisgICAgICAgIHRlc3RfYXJncy5y
ZXNldF9yZXN1bHRzID0gc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzCisKKyAgICAgICAgcmV0
dXJuIHRlc3RfYXJncworCisgICAgZGVmIF9uZWVkc19pbWFnZV9oYXNoKHNlbGYpOgorICAgICAg
ICAiIiJSZXR1cm5zIHRoZSBpbWFnZSBoYXNoIG9mIHRoZSB0ZXN0IGlmIGl0J3MgbmVlZGVkLCBv
dGhlcndpc2UgTm9uZS4iIiIKKyAgICAgICAgcmV0dXJuIChzZWxmLl9vcHRpb25zLm5ld19iYXNl
bGluZSBvciBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMgb3IKKyAgICAgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQorCisgICAgZGVmIF90ZXN0X3R5cGVfY2xhc3Nlcyhz
ZWxmKToKKyAgICAgICAgY2xhc3NlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQorICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBl
bmQoaW1hZ2VfZGlmZi5JbWFnZURpZmYpCisgICAgICAgIHJldHVybiBjbGFzc2VzCisKKyAgICBk
ZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbmZvKToKKyAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X2lu
Zm8uZmlsZW5hbWUKKyAgICAgICAgdGVzdF9pbmZvLnVyaSA9IHNlbGYuX3BvcnQuZmlsZW5hbWVf
dG9fdXJpKGZpbGVuYW1lKQorICAgICAgICBpZiBzZWxmLl9uZWVkc19pbWFnZV9oYXNoKCk6Cisg
ICAgICAgICAgICB0ZXN0X2luZm8uaW1hZ2VfY2hlY2tzdW0gPSBzZWxmLl9wb3J0LmV4cGVjdGVk
X2NoZWNrc3VtKGZpbGVuYW1lKQorICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCArPSAxCisKKyAg
ICAgICAgIyBXZSBnaXZlIERSVCBzb21lIGV4dHJhIHRpbWUgdG8gZGV0ZWN0IGEgdGltZW91dCwg
YW5kIHRoZW4KKyAgICAgICAgIyBnaXZlIG91ciB3YXRjaGRvZyB0aHJlYWQgYSBzaW1pbGFyIGFt
b3VudCB0byBkZXRlY3QgYSBodW5nCisgICAgICAgICMgRFJULiBOb3RlIHRoYXQgd2UgbmVlZCB0
byBjb252ZXJ0IHRoZSB0ZXN0IHRpbWVvdXQgZnJvbSBhCisgICAgICAgICMgc3RyaW5nIHZhbHVl
IGluIG1pbGxpc2Vjb25kcyB0byBhIGZsb2F0IGZvciBQeXRob24uCisgICAgICAgIHBhZGRpbmcg
PSAzLjAKKyAgICAgICAgdGhyZWFkX3RpbWVvdXQgPSBmbG9hdCh0ZXN0X2luZm8udGltZW91dCkg
LyAxMDAwLjAgKyBwYWRkaW5nCiAKLSAgICAgICAgICAgIGlmIHRlc3RfcnVubmVyOgotICAgICAg
ICAgICAgICAgIHRlc3RfcnVubmVyLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQotCi0g
ICAgZGVmIF9ydW5fdGVzdF9zaW5nbHkoc2VsZiwgdGVzdF9pbmZvKToKKyAgICAgICAgc3RhcnQg
PSB0aW1lLnRpbWUoKQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAg
ICAgICAgICBzZWxmLl9jb250YWluZXIuc3RhcnRlZF90ZXN0KHRlc3RfaW5mbywgdGhyZWFkX3Rp
bWVvdXQgKyBwYWRkaW5nKQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5f
YW5vdGhlcl90aHJlYWQodGVzdF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWVvdXQpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBzZWxmLl9jb250YWluZXIuc3RhcnRlZF90ZXN0KHRlc3RfaW5mbywgdGhyZWFk
X3RpbWVvdXQpCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl90aGlzX3Ro
cmVhZCh0ZXN0X2luZm8pCisKKyAgICAgICAgc2VsZi5fY29udGFpbmVyLmZpbmlzaGVkX3Rlc3Qo
cmVzdWx0LCB0aW1lLnRpbWUoKSAtIHN0YXJ0KQorCisgICAgICAgIGlmIHNlbGYuX2JhdGNoX3Np
emUgPiAwIGFuZCBzZWxmLl9iYXRjaF9jb3VudCA+PSBzZWxmLl9iYXRjaF9zaXplOgorICAgICAg
ICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNldCBjb3VudC4KKyAgICAgICAgICAgIHNl
bGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisgICAgICAgICAgICBzZWxmLl9iYXRjaF9jb3Vu
dCA9IDAKKworICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZS53cml0ZShmaWxlbmFtZSArICJc
biIpCisgICAgICAgIGlmIHJlc3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgICMgQ2hlY2sgYW5k
IGtpbGwgRHVtcFJlbmRlclRyZWUgaWYgd2UgbmVlZCB0by4KKyAgICAgICAgICAgIGlmIGxlbihb
MSBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXMKKyAgICAgICAgICAgICAgICAgICAgaWYgZi5zaG91
bGRfa2lsbF9kdW1wX3JlbmRlcl90cmVlKCldKToKKyAgICAgICAgICAgICAgICBzZWxmLl9raWxs
X2R1bXBfcmVuZGVyX3RyZWUoKQorICAgICAgICAgICAgICAgICMgUmVzZXQgdGhlIGJhdGNoIGNv
dW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQuCisgICAgICAgICAgICAgICAgc2VsZi5f
YmF0Y2hfY291bnQgPSAwCisgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBtZXNzYWdlKHMp
LgorICAgICAgICAgICAgZXJyb3Jfc3RyID0gJ1xuJy5qb2luKFsnICAnICsgZi5tZXNzYWdlKCkg
Zm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIGluIHJlc3VsdC5mYWls
dXJlc10pCisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBmYWlsZWQ6XG4lcyIgJSAoc2Vs
Zi5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVz
dF9maWxlbmFtZShmaWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9zdHIp
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAl
IChzZWxmLl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2
ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkpCisKKyAgICBkZWYgX3J1bl90ZXN0X2luX2Fub3Ro
ZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5mbywgdGhyZWFkX3RpbWVvdXQpOgogICAgICAgICAiIiJS
dW4gYSB0ZXN0IGluIGEgc2VwYXJhdGUgdGhyZWFkLCBlbmZvcmNpbmcgYSBoYXJkIHRpbWUgbGlt
aXQuCiAKICAgICAgICAgU2luY2Ugd2UgY2FuIG9ubHkgZGV0ZWN0IHRoZSB0ZXJtaW5hdGlvbiBv
ZiBhIHRocmVhZCwgbm90IGFueSBpbnRlcm5hbApAQCAtNDYwLDE5ICsyOTAsMTYgQEAgY2xhc3Mg
VGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAKICAgICAgICAgUmV0dXJuczoKICAg
ICAgICAgICBBIFRlc3RSZXN1bHQKLQogICAgICAgICAiIiIKICAgICAgICAgd29ya2VyID0gU2lu
Z2xlVGVzdFRocmVhZChzZWxmLl9wb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fd29ya2VyX251bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
X2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBl
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2FyZ3MpCiAK
ICAgICAgICAgd29ya2VyLnN0YXJ0KCkKIAotICAgICAgICB0aHJlYWRfdGltZW91dCA9IF9taWxs
aXNlY29uZHNfdG9fc2Vjb25kcygKLSAgICAgICAgICAgIF9wYWRfdGltZW91dChpbnQodGVzdF9p
bmZvLnRpbWVvdXQpKSkKLSAgICAgICAgdGhyZWFkLl9uZXh0X3RpbWVvdXQgPSB0aW1lLnRpbWUo
KSArIHRocmVhZF90aW1lb3V0CiAgICAgICAgIHdvcmtlci5qb2luKHRocmVhZF90aW1lb3V0KQog
ICAgICAgICBpZiB3b3JrZXIuaXNBbGl2ZSgpOgogICAgICAgICAgICAgIyBJZiBqb2luKCkgcmV0
dXJuZWQgd2l0aCB0aGUgdGhyZWFkIHN0aWxsIHJ1bm5pbmcsIHRoZQpAQCAtNDk1LDExICszMjIs
MTIgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAg
ICBfbG9nLmVycm9yKCdDYW5ub3QgZ2V0IHJlc3VsdHMgb2YgdGVzdDogJXMnICUKICAgICAgICAg
ICAgICAgICAgICAgICAgdGVzdF9pbmZvLmZpbGVuYW1lKQogICAgICAgICAgICAgcmVzdWx0ID0g
dGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbmZvLmZpbGVuYW1lLCBmYWlsdXJlcz1bXSwK
LSAgICAgICAgICAgICAgICB0ZXN0X3J1bl90aW1lPTAsIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZm
cz0wLCB0aW1lX2Zvcl9kaWZmcz0wKQorICAgICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9MCwg
dG90YWxfdGltZV9mb3JfYWxsX2RpZmZzPTAsCisgICAgICAgICAgICAgICAgdGltZV9mb3JfZGlm
ZnM9e30pCiAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIF9ydW5fdGVzdChzZWxm
LCB0ZXN0X2luZm8pOgorICAgIGRlZiBfcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQoc2VsZiwgdGVz
dF9pbmZvKToKICAgICAgICAgIiIiUnVuIGEgc2luZ2xlIHRlc3QgZmlsZSB1c2luZyBhIHNoYXJl
ZCBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLgogCiAgICAgICAgIEFyZ3M6CkBAIC01MDgsMjggKzMz
NiwxOCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAg
UmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYu
X2Vuc3VyZV9kdW1wX3JlbmRlcl90cmVlX2lzX3J1bm5pbmcoKQotICAgICAgICAjIFRoZSBwaXhl
bF9oYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUKLSAgICAg
ICAgIyBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFuayB2YWx1
ZSBpZiB3ZQotICAgICAgICAjIGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAgKE90aGVy
d2lzZSwgYW4gaW1hZ2UgZnJvbSBhCi0gICAgICAgICMgcHJldmlvdXMgcnVuIHdpbGwgYmUgY29w
aWVkIGludG8gdGhlIGJhc2VsaW5lLikKLSAgICAgICAgaW1hZ2VfaGFzaCA9IF9pbWFnZV9oYXNo
KHRlc3RfaW5mbywgc2VsZi5fdGVzdF9hcmdzLCBzZWxmLl9vcHRpb25zKQotICAgICAgICBzdGFy
dCA9IHRpbWUudGltZSgpCi0KLSAgICAgICAgdGhyZWFkX3RpbWVvdXQgPSBfbWlsbGlzZWNvbmRz
X3RvX3NlY29uZHMoCi0gICAgICAgICAgICAgX3BhZF90aW1lb3V0KGludCh0ZXN0X2luZm8udGlt
ZW91dCkpKQotICAgICAgICBzZWxmLl9uZXh0X3RpbWVvdXQgPSBzdGFydCArIHRocmVhZF90aW1l
b3V0CiAKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgICBjcmFzaCwgdGltZW91
dCwgYWN0dWFsX2NoZWNrc3VtLCBvdXRwdXQsIGVycm9yID0gXAotICAgICAgICAgICBzZWxmLl9k
cml2ZXIucnVuX3Rlc3QodGVzdF9pbmZvLnVyaSwgdGVzdF9pbmZvLnRpbWVvdXQsIGltYWdlX2hh
c2gpCisgICAgICAgICAgIHNlbGYuX2RyaXZlci5ydW5fdGVzdCh0ZXN0X2luZm8udXJpLCB0ZXN0
X2luZm8udGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5m
by5pbWFnZV9jaGVja3N1bSkKICAgICAgICAgZW5kID0gdGltZS50aW1lKCkKIAotICAgICAgICBy
ZXN1bHQgPSBfcHJvY2Vzc19vdXRwdXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywKKyAgICAg
ICAgcmV0dXJuIF9wcm9jZXNzX291dHB1dChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLCBzZWxmLl90ZXN0X3R5cGVz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9hcmdzLCBjcmFz
aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsIGVuZCAtIHN0YXJ0
LCBhY3R1YWxfY2hlY2tzdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQsIGVycm9yKQotICAgICAgICBzZWxmLl90ZXN0X3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LCBlcnJvciwgc2VsZi5fbmFtZSkKIAogICAgIGRlZiBfZW5zdXJlX2R1bXBfcmVuZGVyX3Ry
ZWVfaXNfcnVubmluZyhzZWxmKToKICAgICAgICAgIiIiU3RhcnQgdGhlIHNoYXJlZCBEdW1wUmVu
ZGVyVHJlZSwgaWYgaXQncyBub3QgcnVubmluZy4KQEAgLTU0NSwxNCArMzYzLDYgQEAgY2xhc3Mg
VGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucykKICAgICAgICAgICAg
IHNlbGYuX2RyaXZlci5zdGFydCgpCiAKLSAgICBkZWYgX3N0b3BfaHR0cF9sb2NrKHNlbGYpOgot
ICAgICAgICAiIiJTdG9wIHRoZSBzZXJ2ZXJzIGFuZCByZWxlYXNlIGh0dHAgbG9jay4iIiIKLSAg
ICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0LnN0
b3BfaHR0cF9zZXJ2ZXIoKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9z
ZXJ2ZXIoKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBfbG9jaygpCi0gICAg
ICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IEZhbHNlCi0KICAgICBkZWYgX2tpbGxfZHVt
cF9yZW5kZXJfdHJlZShzZWxmKToKICAgICAgICAgIiIiS2lsbCB0aGUgRHVtcFJlbmRlclRyZWUg
cHJvY2VzcyBpZiBpdCdzIHJ1bm5pbmcuIiIiCiAgICAgICAgIGlmIHNlbGYuX2RyaXZlcjoKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWRfdW5pdHRlc3QucHkKaW5kZXggNjNmODZkOTNkODk0OTVlYTk3YzlmMDFh
YTE3NDkxNjhlYjZhYWI4ZC4uMzE4NjMwODFjYjdlODg0NGFhZWMzOGQ4MWI4MTkzMTg1NDI4Yzdl
YyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRfdW5pdHRlc3QucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
ZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRfdW5pdHRlc3QucHkKQEAgLTMxLDE5ICszMSw4IEBACiBp
bXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAotaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhy
ZWFkCi0KLQogY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfZmlu
ZF90aHJlYWRfc3RhY2tfZm91bmQoc2VsZik6Ci0gICAgICAgIGlkLCBzdGFjayA9IHN5cy5fY3Vy
cmVudF9mcmFtZXMoKS5pdGVtcygpWzBdCi0gICAgICAgIGZvdW5kX3N0YWNrID0gZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWQuZmluZF90aHJlYWRfc3RhY2soaWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0
Tm90RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCi0KLSAgICBkZWYgdGVzdF9maW5kX3RocmVhZF9z
dGFja19ub3RfZm91bmQoc2VsZik6Ci0gICAgICAgIGZvdW5kX3N0YWNrID0gZHVtcF9yZW5kZXJf
dHJlZV90aHJlYWQuZmluZF90aHJlYWRfc3RhY2soMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChmb3VuZF9zdGFjaywgTm9uZSkKLQorICAgIHBhc3MKIAogaWYgX19uYW1lX18gPT0gJ19fbWFp
bl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJp
bnRpbmcucHkKaW5kZXggMDBmZjIxMTRjNTBhMDVlMDM4YzBkNDk1ODdkODdlYzFiN2Y2OTIwNS4u
NWQ4YTkyMzZlM2UwOTA3MDhiZTNmYTNmNmI4NTBlN2M5NTIzMzk0NyAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJp
bnRpbmcucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvcHJpbnRpbmcucHkKQEAgLTE4Miw4ICsxODIsOCBAQCBkZWYgX2NvbmZp
Z3VyZV9sb2dnaW5nKHN0cmVhbSwgdmVyYm9zZSk6CiAgICAgbG9nX2RhdGVmbXQgPSAnJXklbSVk
ICVIOiVNOiVTJwogICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTwogICAgIGlmIHZlcmJvc2U6
Ci0gICAgICAgIGxvZ19mbXQgPSAoJyUoYXNjdGltZSlzICUoZmlsZW5hbWUpczolKGxpbmVubykt
NGQgJShsZXZlbG5hbWUpcyAnCi0gICAgICAgICAgICAgICAgJyUobWVzc2FnZSlzJykKKyAgICAg
ICAgbG9nX2ZtdCA9ICgnJShhc2N0aW1lKXMgJShwcm9jZXNzKWQgJShmaWxlbmFtZSlzOiUobGlu
ZW5vKS00ZCAnCisgICAgICAgICAgICAgICAgICAgJyUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMn
KQogICAgICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCiAKICAgICByb290ID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE1ZWE4ZTNmYWVlMmI1MDVhYTViOTYxYWVjMGJhNzg5ODI4NmY2MmEKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9yb3V0ZXIucHkKQEAgLTAsMCArMSw1NDMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgY1BpY2tsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2lt
cG9ydCBvcworaW1wb3J0IFF1ZXVlCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkCitpbXBvcnQg
dGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNlYmFjaworCitpbXBvcnQgZHVtcF9y
ZW5kZXJfdHJlZV90aHJlYWQKK2ltcG9ydCB0ZXN0X3Jlc3VsdHMKKworCitfbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS5yb3V0ZXIi
KQorCisKK2RlZiBnZXQocG9ydCwgb3B0aW9ucyk6CisgICAgaWYgb3B0aW9ucy53b3JrZXJzX2Fy
ZSA9PSAnaW5saW5lJzoKKyAgICAgICAgcmV0dXJuIFNpbmdsZVRocmVhZGVkUm91dGVyKHBvcnQs
IG9wdGlvbnMpCisgICAgaWYgb3B0aW9ucy53b3JrZXJzX2FyZSA9PSAndGhyZWFkcyc6CisgICAg
ICAgIHJldHVybiBNdWx0aVRocmVhZGVkUm91dGVyKHBvcnQsIG9wdGlvbnMpCisgICAgcmV0dXJu
IE11bHRpUHJvY2Vzc1JvdXRlcihwb3J0LCBvcHRpb25zKQorCisKK2NsYXNzIF9NZXNzYWdlKG9i
amVjdCk6CisgICAgVEVTVF9MSVNUID0gJ3Rlc3RfbGlzdCcKKyAgICBTVE9QID0gJ3N0b3AnCisg
ICAgRE9ORSA9ICdkb25lJworICAgIFNUQVJURURfVEVTVCA9ICdzdGFydGVkX3Rlc3QnCisgICAg
RklOSVNIRURfVEVTVCA9ICdmaW5pc2hlZF90ZXN0JworICAgIEZJTklTSEVEX0dST1VQID0gJ2Zp
bmlzaGVkX2dyb3VwJworICAgIEVYQ0VQVElPTiA9ICdleGNlcHRpb24nCisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIGxvYWRzKHN0cik6CisgICAgICAgIG9iaiA9IGNQaWNrbGUubG9hZHMo
c3RyKQorICAgICAgICBhc3NlcnQoaXNpbnN0YW5jZShvYmosIF9NZXNzYWdlKSkKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBzcmMsIGRlc3QsIGhkciwgYm9keSk6CisgICAgICAgIHNlbGYuc3Jj
ID0gc3JjCisgICAgICAgIHNlbGYuZGVzdCA9IGRlc3QKKyAgICAgICAgc2VsZi5oZHIgPSBoZHIK
KyAgICAgICAgc2VsZi5ib2R5ID0gYm9keQorCisgICAgZGVmIGR1bXBzKHNlbGYpOgorICAgICAg
ICByZXR1cm4gY1BpY2tsZS5kdW1wcyhzZWxmKQorCisKK2NsYXNzIF9Xb3JrZXJTdGF0ZShvYmpl
Y3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gTm9uZQor
ICAgICAgICBzZWxmLm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAgc2VsZi50aHJlYWQgPSBO
b25lCisgICAgICAgIHNlbGYud2VkZ2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5kb25lID0gRmFs
c2UKKworCitjbGFzcyBSb3V0ZXIob2JqZWN0KToKKyAgICBNQU5BR0VSID0gJ21hbmFnZXInCisg
ICAgQU5ZX1dPUktFUiA9ICd3b3JrZXItXGQrJworCisgICAgSU5fTUVNT1JZX1JFUFJFU0VOVEFU
SU9OID0gIjxpbl9tZW1vcnk+IgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2Fkcyhz
dHIpOgorICAgICAgICBhc3NlcnQgc3RyID09IFJvdXRlci5JTl9NRU1PUllfUkVQUkVTRU5UQVRJ
T04KKyAgICAgICAgZ2xvYmFsIF9yb3V0ZXIKKyAgICAgICAgcmV0dXJuIF9yb3V0ZXIKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5fcG9ydCA9
IHBvcnQKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fbWFu
YWdlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fd29ya2VycyA9IHt9CisgICAgICAgIHNlbGYuX251
bV93b3JrZXJzID0gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQorICAgICAgICBz
ZWxmLl9tYW5hZ2VyX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLl93b3JrZXJf
cXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHNlbGYuX2dyb3VwX3RpbWluZ19zdGF0cyA9
IHt9CisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0
YXJ0X3dvcmtlcnMoc2VsZik6CisgICAgICAgICIiIkluc3RhbnRpYXRlcyBhbmQgc3RhcnRzIHRo
ZSBUZXN0U2hlbGxUaHJlYWQocykuIiIiCisgICAgICAgICMgSW5zdGFudGlhdGUgVGVzdFNoZWxs
VGhyZWFkcyBhbmQgc3RhcnQgdGhlbS4KKyAgICAgICAgZm9yIHdvcmtlcl9udW1iZXIgaW4geHJh
bmdlKHNlbGYuX251bV93b3JrZXJzKToKKyAgICAgICAgICAgICMgQ3JlYXRlIHNlcGFyYXRlIFRl
c3RUeXBlcyBpbnN0YW5jZXMgZm9yIGVhY2ggdGhyZWFkLgorICAgICAgICAgICAgd29ya2VyID0g
X1dvcmtlclN0YXRlKCkKKworICAgICAgICAgICAgd29ya2VyLnRocmVhZCA9IHNlbGYuX3N0YXJ0
X3dvcmtlcih3b3JrZXJfbnVtYmVyKQorICAgICAgICAgICAgd29ya2VyLm5hbWUgPSAnd29ya2Vy
LSVkJyAlIHdvcmtlcl9udW1iZXIKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcnNbd29ya2VyLm5h
bWVdID0gd29ya2VyCisKKyAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVy
KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9iYWlsKHNl
bGYsIG1zZyk6CisgICAgICAgIF9sb2cuZXJyb3IobXNnKQorICAgICAgICBhc3NlcnQgRmFsc2Us
IG1zZworCisgICAgZGVmIHN0b3Bfd29ya2VycyhzZWxmKToKKyAgICAgICAgIyBGSVhNRTogU2hv
dWxkIHRoaXMgYmUgYmxvY2tpbmc/CisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oc2VsZi5f
d29ya2VycykpOgorICAgICAgICAgICAgc2VsZi5wb3N0X3N0b3AoKQorCisgICAgZGVmIGNhbmNl
bF93b3JrZXJzKHNlbGYpOgorICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYuX3dvcmtlcnMudmFs
dWVzKCk6CisgICAgICAgICAgICB3b3JrZXIudGhyZWFkLmNhbmNlbCgpCisgICAgICAgIHNlbGYu
X3BvbGxfbWFuYWdlcl9xdWV1ZShzZWxmLl9tYW5hZ2VyLmdldE5hbWUoKSwgdGltZW91dD0wLjAp
CisKKyAgICBkZWYgcG9zdF90ZXN0X2xpc3Qoc2VsZiwgdGVzdF9saXN0KToKKyAgICAgICAgc2Vs
Zi5fcHV0KHNyYz1zZWxmLk1BTkFHRVIsIGRlc3Q9c2VsZi5BTllfV09SS0VSLAorICAgICAgICAg
ICAgICAgICAgaGRyPV9NZXNzYWdlLlRFU1RfTElTVCwgYm9keT10ZXN0X2xpc3QpCisKKyAgICBk
ZWYgcG9zdF9zdGFydGVkX3Rlc3Qoc2VsZiwgc3JjLCB0ZXN0X2luZm8sIGhhbmdfdGltZW91dCk6
CisgICAgICAgIHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0PXNlbGYuTUFOQUdFUiwgaGRyPV9NZXNz
YWdlLlNUQVJURURfVEVTVCwKKyAgICAgICAgICAgICAgICAgIGJvZHk9KHRlc3RfaW5mbywgaGFu
Z190aW1lb3V0KSkKKworICAgIGRlZiBwb3N0X2ZpbmlzaGVkX2dyb3VwKHNlbGYsIHNyYywgZ3Jv
dXBfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9wdXQoc3Jj
PXNyYywgZGVzdD1zZWxmLk1BTkFHRVIsIGhkcj1fTWVzc2FnZS5GSU5JU0hFRF9HUk9VUCwKKyAg
ICAgICAgICAgICAgICAgIGJvZHk9KGdyb3VwX25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1l
KSkKKworICAgIGRlZiBwb3N0X2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc3JjLCByZXN1bHQsIGVsYXBz
ZWRfdGltZSk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0PXNlbGYuTUFOQUdFUiwg
aGRyPV9NZXNzYWdlLkZJTklTSEVEX1RFU1QsCisgICAgICAgICAgICAgICAgICBib2R5PShyZXN1
bHQsIGVsYXBzZWRfdGltZSkpCisKKyAgICBkZWYgcG9zdF9leGNlcHRpb24oc2VsZiwgc3JjLCBl
eGNfaW5mbyk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0PXNlbGYuTUFOQUdFUiwg
aGRyPV9NZXNzYWdlLkVYQ0VQVElPTiwKKyAgICAgICAgICAgICAgICAgIGJvZHk9ZXhjX2luZm8p
CisKKyAgICBkZWYgcG9zdF9zdG9wKHNlbGYpOgorICAgICAgICBzZWxmLl9wdXQoc3JjPXNlbGYu
TUFOQUdFUiwgZGVzdD1zZWxmLkFOWV9XT1JLRVIsCisgICAgICAgICAgICAgICAgICBoZHI9X01l
c3NhZ2UuU1RPUCwgYm9keT1Ob25lKQorCisgICAgZGVmIHBvc3RfZG9uZShzZWxmLCB3b3JrZXIp
OgorICAgICAgICBzZWxmLl9wdXQoc3JjPXdvcmtlciwgZGVzdD1zZWxmLk1BTkFHRVIsCisgICAg
ICAgICAgICAgICAgICBoZHI9X01lc3NhZ2UuRE9ORSwgYm9keT1Ob25lKQorCisgICAgZGVmIGxv
b3Aoc2VsZiwgb2JqKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigic3ViY2xh
c3MgbXVzdCBpbXBsZW1lbnQgUm91dGVyLmxvb3AoKSIpCisKKyAgICBkZWYgX3B1dChzZWxmLCBz
cmMsIGRlc3QsIGhkciwgYm9keSk6CisgICAgICAgIG1zZyA9IF9NZXNzYWdlKHNyYywgZGVzdCwg
aGRyLCBib2R5KQorICAgICAgICBpZiBtc2cuZGVzdCA9PSBzZWxmLk1BTkFHRVI6CisgICAgICAg
ICAgICAjIF9sb2cuZGVidWcoIiVzOiBwb3N0aW5nICclcycgbXNnIHRvIG1hbmFnZXIgcXVldWUi
ICUKKyAgICAgICAgICAgICMgICAgICAgICAgICAgKG1zZy5zcmMsIG1zZy5oZHIpKQorICAgICAg
ICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1ZS5wdXQobXNnKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgIyBfbG9nLmRlYnVnKCIlczogcG9zdGluZyAnJXMnIG1zZyB0byB3b3JrZXIgcXVldWUi
ICUKKyAgICAgICAgICAgICMgICAgICAgICAgICAgKG1zZy5zcmMsIG1zZy5oZHIpKQorICAgICAg
ICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlLnB1dChtc2cpCisKKyAgICBkZWYgX2dldChzZWxmLCBu
YW1lLCBxdWV1ZSwgYmxvY2ssIHRpbWVvdXQpOgorICAgICAgICBpZiBxdWV1ZSA9PSBzZWxmLl9t
YW5hZ2VyX3F1ZXVlOgorICAgICAgICAgICAgcXVldWVfbmFtZSA9ICJtYW5hZ2VyIHF1ZXVlIgor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcXVldWVfbmFtZSA9ICJ3b3JrZXIgcXVldWUiCisK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI19sb2cuZGVidWcoIiVzIG5hbWUgcmVhZGluZyBm
cm9tICVzIHF1ZXVlIiAlIChuYW1lLCBxdWV1ZV9uYW1lKSkKKyAgICAgICAgICAgIG1zZyA9IHF1
ZXVlLmdldChibG9jaywgdGltZW91dCkKKyAgICAgICAgICAgICNfbG9nLmRlYnVnKCIlcyBnb3Qg
JyVzJyBtc2cgZnJvbSAlcyIgJSAobmFtZSwgbXNnLmhkciwgbXNnLnNyYykpCisgICAgICAgICAg
ICByZXR1cm4gbXNnCisgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICNf
bG9nLmRlYnVnKCIlcyBmb3VuZCAlcyBlbXB0eSIgJSAobmFtZSwgcXVldWVfbmFtZSkpCisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9wb2xsX21hbmFnZXJfcXVldWUoc2VsZiwg
bmFtZSwgdGltZW91dCk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIE5vdGUg
dGhhdCBibG9jaz1UcnVlLCB0aW1lb3V0PTAgaXMgZXF1aXZhbGVudCB0byBibG9jaz1GYWxzZS4K
KyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2dldChuYW1lLCBzZWxmLl9tYW5hZ2VyX3F1ZXVlLCBU
cnVlLCB0aW1lb3V0KQorICAgICAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgICAgICBi
cmVhaworCisgICAgICAgICAgICBpZiBtc2cuaGRyID09IF9NZXNzYWdlLlNUQVJURURfVEVTVDoK
KyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfc3RhcnRlZF90ZXN0KG1zZykKKyAgICAgICAg
ICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5GSU5JU0hFRF9URVNUOgorICAgICAgICAgICAg
ICAgIHNlbGYuX2hhbmRsZV9maW5pc2hlZF90ZXN0KG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNn
LmhkciA9PSBfTWVzc2FnZS5GSU5JU0hFRF9HUk9VUDoKKyAgICAgICAgICAgICAgICBzZWxmLl9o
YW5kbGVfZmluaXNoZWRfZ3JvdXAobXNnKQorICAgICAgICAgICAgZWxpZiBtc2cuaGRyID09IF9N
ZXNzYWdlLkRPTkU6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2RvbmUobXNnKQorICAg
ICAgICAgICAgZWxpZiBtc2cuaGRyID09IF9NZXNzYWdlLkVYQ0VQVElPTjoKKyAgICAgICAgICAg
ICAgICBzZWxmLl9oYW5kbGVfZXhjZXB0aW9uKG1zZykKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgc2VsZi5fYmFpbCgndW5leHBlY3RlZCBtZXNzYWdlIHR5cGUgb24gbWFuYWdl
ciBxdWV1ZTogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5oZHIpCisKKyAg
ICBkZWYgX3BvbGxfd29ya2VyX3F1ZXVlKHNlbGYsIHdvcmtlciwgcG9sbF9tYW5hZ2VyKToKKyAg
ICAgICAgd2hpbGUgbm90IHdvcmtlci5pc19kb25lKCk6CisgICAgICAgICAgICBtc2cgPSBzZWxm
Ll9nZXQod29ya2VyLmdldE5hbWUoKSwgc2VsZi5fd29ya2VyX3F1ZXVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vdCBwb2xsX21hbmFnZXIsIE5vbmUpCisgICAgICAgICAgICBpZiBu
b3QgbXNnOgorICAgICAgICAgICAgICAgIGlmIG5vdCBwb2xsX21hbmFnZXI6CisgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2JhaWwoJyVzIHVuZXhwZWN0ZWRseSByYW4gb3V0IG9mIHF1ZXVlZCBt
ZXNzYWdlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5nZXROYW1l
KCkpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbXNnLmhkciA9PSBf
TWVzc2FnZS5TVE9QOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9zdG9wKHdvcmtlcikK
KyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5URVNUX0xJU1Q6CisgICAgICAg
ICAgICAgICAgKHRlc3RfZ3JvdXAsIHRlc3RfbGlzdCkgPSBtc2cuYm9keQorICAgICAgICAgICAg
ICAgIHNlbGYuX2hhbmRsZV90ZXN0X2xpc3Qod29ya2VyLCB0ZXN0X2dyb3VwLCB0ZXN0X2xpc3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xsX21hbmFnZXIpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2JhaWwoJyVzOiB1bmV4cGVj
dGVkIG1lc3NhZ2UgdHlwZSBvbiB3b3JrZXIgcXVldWU6ICVzJyAlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAod29ya2VyLmdldE5hbWUoKSwgbXNnLmhkcikpCisKKyAgICBkZWYgX2hhbmRs
ZV9zdGFydGVkX3Rlc3Qoc2VsZiwgbXNnKToKKyAgICAgICAgKHRlc3RfaW5mbywgaGFuZ190aW1l
b3V0KSA9IG1zZy5ib2R5CisgICAgICAgIHdvcmtlciA9IHNlbGYuX3dvcmtlcnNbbXNnLnNyY10K
KyAgICAgICAgd29ya2VyLmN1cnJlbnRfdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90
ZXN0X2ZpbGVuYW1lKHRlc3RfaW5mby5maWxlbmFtZSkKKyAgICAgICAgd29ya2VyLm5leHRfdGlt
ZW91dCA9IHRpbWUudGltZSgpICsgaGFuZ190aW1lb3V0CisKKyAgICBkZWYgX2hhbmRsZV9maW5p
c2hlZF90ZXN0KHNlbGYsIG1zZyk6CisgICAgICAgIChyZXN1bHQsIGVsYXBzZWRfdGltZSkgPSBt
c2cuYm9keQorICAgICAgICB3b3JrZXIgPSBzZWxmLl93b3JrZXJzW21zZy5zcmNdCisgICAgICAg
IHdvcmtlci5uZXh0X3RpbWVvdXQgPSBOb25lCisgICAgICAgIHdvcmtlci5jdXJyZW50X3Rlc3Qg
PSBOb25lCisKKyAgICAgICAgaWYgd29ya2VyLndlZGdlZDoKKyAgICAgICAgICAgICMgSG1tLiBU
aGlzIHNob3VsZG4ndCBoYXBwZW4uCisgICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB1bndlZGdl
ZCIsIHdvcmtlci5nZXROYW1lKCkpCisKKyAgICAgICAgc2VsZi5fbWFuYWdlci5oYW5kbGVfZmlu
aXNoZWRfdGVzdChtc2cuc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBfaGFu
ZGxlX2ZpbmlzaGVkX2dyb3VwKHNlbGYsIG1zZyk6CisgICAgICAgIChncm91cF9uYW1lLCBudW1f
dGVzdHMsIGVsYXBzZWRfdGltZSkgPSBtc2cuYm9keQorICAgICAgICBzZWxmLl9tYW5hZ2VyLmhh
bmRsZV9maW5pc2hlZF9ncm91cChtc2cuc3JjLCBncm91cF9uYW1lLCBudW1fdGVzdHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRfdGltZSkKKwor
ICAgIGRlZiBfaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBtc2cpOgorICAgICAgICBleGNlcHRpb25f
aW5mbyA9IG1zZy5ib2R5CisgICAgICAgIHNlbGYuX21hbmFnZXIuaGFuZGxlX2V4Y2VwdGlvbiht
c2cuc3JjLCBleGNlcHRpb25faW5mbykKKworICAgIGRlZiBfaGFuZGxlX3N0b3Aoc2VsZiwgd29y
a2VyKToKKyAgICAgICAgd29ya2VyLmhhbmRsZV9zdG9wKCkKKworICAgIGRlZiBfaGFuZGxlX2Rv
bmUoc2VsZiwgbXNnKToKKyAgICAgICAgd29ya2VyID0gc2VsZi5fd29ya2Vyc1ttc2cuc3JjXQor
ICAgICAgICB3b3JrZXIuZG9uZSA9IFRydWUKKyAgICAgICAgIyBfbG9nLmRlYnVnKCIlcyBpcyBk
b25lIiAlIHdvcmtlci5uYW1lKQorICAgICAgICBzZWxmLl9tYW5hZ2VyLmhhbmRsZV9kb25lKG1z
Zy5zcmMpCisKKyAgICBkZWYgX2hhbmRsZV90ZXN0X2xpc3Qoc2VsZiwgd29ya2VyLCB0ZXN0X2dy
b3VwLCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdlcik6CisgICAgICAgIHdvcmtlci5oYW5kbGVfdGVz
dF9saXN0KHRlc3RfZ3JvdXAsIHRlc3RfbGlzdCwgcG9sbF9tYW5hZ2VyKQorCisgICAgZGVmIF9s
b2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yCisKKworY2xhc3MgU2luZ2xlVGhyZWFkZWRSb3V0ZXIoUm91dGVyKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAgIFJvdXRlci5fX2luaXRf
XyhzZWxmLCBwb3J0LCBvcHRpb25zKQorICAgICAgICAjIEZJWE1FOiBDb3VsZCB1c2UgZmFrZSBx
dWV1ZXMgaGVyZS4KKyAgICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkK
KyAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlID0gUXVldWUuUXVldWUoKQorCisgICAgZGVmIF9z
dGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgICMgRklYTUU6IFVzZSBX
b3JrZXJUaHVuayBpbnN0ZWFkIC4uLgorICAgICAgICB0aHVuayA9IF9Xb3JrZXJUaHJlYWQoc2Vs
ZiwgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV29ya2VyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd29ya2VyX251bWJlcikKKyAgICAgICAgcmV0dXJuIHRodW5rCisKKyAgICBkZWYg
bG9vcChzZWxmLCBtYW5hZ2VyKToKKyAgICAgICAgc2VsZi5fbWFuYWdlciA9IG1hbmFnZXIKKyAg
ICAgICAgd29ya2VyID0gc2VsZi5fd29ya2Vyc1snd29ya2VyLTAnXQorICAgICAgICBzZWxmLl9w
b2xsX3dvcmtlcl9xdWV1ZSh3b3JrZXIudGhyZWFkLCBwb2xsX21hbmFnZXI9VHJ1ZSkKKworICAg
IGRlZiBfbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgd29ya2VyKToKKyAgICAgICAgYXNzZXJ0IEZh
bHNlLCAiU2luZ2xlVGhyZWFkZWRSb3V0ZXIuX2xvZ193ZWRnZWRfd29ya2VyKCkgc2hvdWxkIG5l
dmVyIGJlIGNhbGxlZCIKKworCitjbGFzcyBNdWx0aVRocmVhZGVkUm91dGVyKFNpbmdsZVRocmVh
ZGVkUm91dGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAg
ICAgIFNpbmdsZVRocmVhZGVkUm91dGVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpCisK
KyAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgdGh1
bmsgPSBfV29ya2VyVGhyZWFkKHNlbGYsIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldvcmtlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9udW1iZXIpCisgICAgICAgIHRo
dW5rLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIHRodW5rCisKKyAgICBkZWYgbG9vcChzZWxmLCBv
YmopOgorICAgICAgICBpZiBvYmouZ2V0TmFtZSgpID09IHNlbGYuTUFOQUdFUjoKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLl9sb29wX21hbmFnZXIob2JqKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX2xvb3Bfd29ya2VyKG9iaikKKworICAgIGRlZiBfbG9vcF9tYW5h
Z2VyKHNlbGYsIG1hbmFnZXIpOgorICAgICAgICBzZWxmLl9tYW5hZ2VyID0gbWFuYWdlcgorICAg
ICAgICBzZWxmLl9wb2xsX21hbmFnZXJfcXVldWUobWFuYWdlci5nZXROYW1lKCksIHRpbWVvdXQ9
MC4wMSkKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX2NoZWNrX29uX3dvcmtlcnMoKToKKyAgICAg
ICAgICAgIHNlbGYuX3BvbGxfbWFuYWdlcl9xdWV1ZShtYW5hZ2VyLmdldE5hbWUoKSwgdGltZW91
dD0wLjAxKQorCisgICAgICAgIGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCk6CisgICAg
ICAgICAgICBhc3NlcnQgdy53ZWRnZWQgb3Igbm90IHcudGhyZWFkLmlzX2FsaXZlKCkKKworICAg
IGRlZiBfbG9vcF93b3JrZXIoc2VsZiwgd29ya2VyKToKKyAgICAgICAgd2hpbGUgbm90IHdvcmtl
ci5pc19kb25lKCk6CisgICAgICAgICAgICBzZWxmLl9wb2xsX3dvcmtlcl9xdWV1ZSh3b3JrZXIs
IHBvbGxfbWFuYWdlcj1GYWxzZSkKKworICAgIGRlZiBfY2hlY2tfb25fd29ya2VycyhzZWxmKToK
KyAgICAgICAgIlJldHVybnMgdHJ1ZSBpZmYgYWxsIHRoZSB3b3JrZXJzIGhhdmUgZWl0aGVyIGNv
bXBsZXRlZCBvciB3ZWRnZWQuIgorICAgICAgICBkb25lID0gVHJ1ZQorICAgICAgICB0ID0gdGlt
ZS50aW1lKCkKKyAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgor
ICAgICAgICAgICAgaWYgbm90IHdvcmtlci5kb25lIGFuZCBub3Qgd29ya2VyLndlZGdlZDoKKyAg
ICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB3b3JrZXIubmV4dF90aW1lb3V0CisgICAgICAg
ICAgICAgICAgaWYgKG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dCk6CisgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX2xvZ193ZWRnZWRfd29ya2VyKHdvcmtlci53b3JrZXIpCisgICAg
ICAgICAgICAgICAgICAgIHdvcmtlci53ZWRnZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgIyBfbG9nLmRlYnVnKCIlcyBpcyBub3QgZG9uZSIgJSB3
b3JrZXIubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IEZhbHNlCisgICAgICAgIHJl
dHVybiBkb25lCisKKyAgICBkZWYgX2xvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtlcik6Cisg
ICAgICAgICIiIkxvZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2l2ZW4gdGhyZWFkIHN0YXRlLiIi
IgorICAgICAgICBpZCA9IHdvcmtlci50aHJlYWQuaWQoKQorICAgICAgICBzdGFjayA9IHNlbGYu
X2ZpbmRfdGhyZWFkX3N0YWNrKGlkKQorICAgICAgICBhc3NlcnQoc3RhY2sgaXMgbm90IE5vbmUp
CisgICAgICAgIF9sb2cuZXJyb3IoIiIpCisgICAgICAgIF9sb2cuZXJyb3IoIiVzICh0aWQgJWQp
IGlzIHdlZGdlZCBvbiB0ZXN0ICVzIiAlCisgICAgICAgICAgICAgICAgICAgKHdvcmtlci50aHJl
YWQuZ2V0TmFtZSgpLCBpZCwgd29ya2VyLmN1cnJlbnRfdGVzdF9uYW1lKSkKKyAgICAgICAgc2Vs
Zi5fbG9nX3N0YWNrKHN0YWNrKQorICAgICAgICBfbG9nLmVycm9yKCIiKQorCisgICAgZGVmIF9m
aW5kX3RocmVhZF9zdGFjayhzZWxmLCBpZCk6CisgICAgICAgICIiIlJldHVybnMgYSBzdGFjayBv
YmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBkdW1wIGEgc3RhY2sgdHJhY2UgZm9yCisgICAgICAg
IHRoZSBnaXZlbiB0aHJlYWQgaWQgKG9yIE5vbmUgaWYgdGhlIGlkIGlzIG5vdCBmb3VuZCkuIiIi
CisgICAgICAgIGZvciB0aHJlYWRfaWQsIHN0YWNrIGluIHN5cy5fY3VycmVudF9mcmFtZXMoKS5p
dGVtcygpOgorICAgICAgICAgICAgaWYgdGhyZWFkX2lkID09IGlkOgorICAgICAgICAgICAgICAg
IHJldHVybiBzdGFjaworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9sb2dfc3RhY2so
c2VsZiwgc3RhY2spOgorICAgICAgICAiIiJMb2cgYSBzdGFjayB0cmFjZSB0byBsb2cuZXJyb3Io
KS4iIiIKKyAgICAgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2Vi
YWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgorICAgICAgICAgICAgX2xvZy5lcnJvcignRmlsZTog
IiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpKQorICAgICAg
ICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcgICVzJyAlIGxpbmUu
c3RyaXAoKSkKKworCitjbGFzcyBNdWx0aVByb2Nlc3NSb3V0ZXIoTXVsdGlUaHJlYWRlZFJvdXRl
cik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBSb3V0
ZXIuX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucykKKyAgICAgICAgc2VsZi5fbWFuYWdlcl9x
dWV1ZSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgIHNlbGYuX3dvcmtlcl9xdWV1
ZSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisKKyAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxm
LCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgdGh1bmsgPSBfV29ya2VyUHJvY2VzcyhzZWxmLCBk
dW1wX3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd29ya2VyX251bWJlcikKKyAgICAgICAgdGh1bmsuc3RhcnQoKQorICAgICAgICByZXR1
cm4gdGh1bmsKKworICAgIGRlZiBwb3N0X2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y2VwdGlvbl9p
bmZvKToKKyAgICAgICAgIyBGSVhNRTogV2UgY2FuJ3QgcGlja2xlIHRyYWNlYmFjayBvYmplY3Rz
LCBzbyBsb2cgdGhlIHRyYWNlYmFjayBoZXJlLgorICAgICAgICBtcF9leGNfaW5mbyA9IChleGNl
cHRpb25faW5mb1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIE5vbmUpCisgICAgICAgIE11bHRpVGhy
ZWFkZWRSb3V0ZXIucG9zdF9leGNlcHRpb24oc2VsZiwgc3JjLCBtcF9leGNfaW5mbykKKworICAg
IGRlZiBfbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgd29ya2VyKToKKyAgICAgICAgaWQgPSB3b3Jr
ZXIudGhyZWFkLmlkKCkKKyAgICAgICAgX2xvZy5lcnJvcigiIikKKyAgICAgICAgX2xvZy5lcnJv
cigiJXMgKHBpZCAlZCkgaXMgd2VkZ2VkIG9uIHRlc3QgJXMiICUKKyAgICAgICAgICAgICAgICAg
ICAod29ya2VyLnRocmVhZC5nZXROYW1lKCksIGlkLCB3b3JrZXIuY3VycmVudF90ZXN0X25hbWUp
KQorICAgICAgICBfbG9nLmVycm9yKCIiKQorCisKK2NsYXNzIF9Xb3JrZXJUaHVuayhvYmplY3Qp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb3V0ZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251
bWJlcik6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gTm9uZQorICAgICAgICBzZWxm
Ll9yb3V0ZXIgPSByb3V0ZXIKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IHJvdXRlci5fb3B0aW9u
cworICAgICAgICBzZWxmLl9wb3J0ID0gcm91dGVyLl9wb3J0CisgICAgICAgIHNlbGYuX2NhbmNl
bGxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2RvbmUgPSBGYWxzZQorICAgICAgICBzZWxmLl9o
YXZlX2h0dHBfbG9jayA9IEZhbHNlCisgICAgICAgIHNlbGYuX2lkID0gMAorICAgICAgICBzZWxm
Ll93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl93b3JrZXIgPSB3
b3JrZXJfY2xhc3Moc2VsZi5fcG9ydCwgc2VsZiwgc2VsZi5fb3B0aW9ucywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9udW1iZXIpCisKKyAgICBkZWYgaWQoc2Vs
Zik6CisgICAgICAgICMgdXNlZCBkdXJpbmcgbG9nX3dlZGdlZF93b3JrZXIKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2lkCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5j
ZWxsZWQgPSBUcnVlCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2RvbmUgb3Igc2VsZi5fY2FuY2VsbGVkCisKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZik6
CisgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fcmVs
ZWFzZV9sb2NrKCkKKyAgICAgICAgc2VsZi5fd29ya2VyLmhhbmRsZV9zdG9wKCkKKyAgICAgICAg
c2VsZi5fZG9uZSA9IFRydWUKKworICAgIGRlZiBoYW5kbGVfdGVzdF9saXN0KHNlbGYsIGdyb3Vw
X25hbWUsIHRlc3RfbGlzdCwgcG9sbF9tYW5hZ2VyKToKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9u
cy53YWl0X2Zvcl9odHRwZDoKKyAgICAgICAgICAgIGlmIGdyb3VwX25hbWUgPT0gInRlc3RzX3Rv
X2h0dHBfbG9jayI6CisgICAgICAgICAgICAgICAgc2VsZi5fYWNxdWlyZV9sb2NrKCkKKyAgICAg
ICAgICAgIGVsaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5f
cmVsZWFzZV9sb2NrKCkKKworICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAg
ICAgbnVtX3Rlc3RzID0gMAorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X2xpc3Q6CisgICAgICAg
ICAgICBzZWxmLl93b3JrZXIucnVuX3Rlc3QodGVzdCkKKyAgICAgICAgICAgIG51bV90ZXN0cyAr
PSAxCisKKyAgICAgICAgICAgICMgRklYTUU6IE5lZWQgdG8gZ2V0IHJpZCBvZiB0aGlzLgorICAg
ICAgICAgICAgaWYgcG9sbF9tYW5hZ2VyOgorICAgICAgICAgICAgICAgIHNlbGYuX3JvdXRlci5f
cG9sbF9tYW5hZ2VyX3F1ZXVlKHNlbGYuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMCkKKworICAgICAg
ICAgICAgaWYgc2VsZi5fY2FuY2VsbGVkOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAg
IGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQorCisgICAgICAgIGlmIHNl
bGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fcmVsZWFzZV9sb2NrKCkKKwor
ICAgICAgICBzZWxmLl9yb3V0ZXIucG9zdF9maW5pc2hlZF9ncm91cChzZWxmLmdldE5hbWUoKSwg
Z3JvdXBfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHBh
c3MKKworICAgIGRlZiBzdGFydGVkX3Rlc3Qoc2VsZiwgdGVzdF9pbmZvLCBodW5nX3RocmVhZF90
aW1lb3V0KToKKyAgICAgICAgc2VsZi5fcm91dGVyLnBvc3Rfc3RhcnRlZF90ZXN0KHNlbGYuZ2V0
TmFtZSgpLCB0ZXN0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBodW5nX3RocmVhZF90aW1lb3V0KQorCisgICAgZGVmIGZpbmlzaGVkX3Rlc3Qoc2VsZiwgcmVz
dWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9yb3V0ZXIucG9zdF9maW5pc2hlZF90
ZXN0KHNlbGYuZ2V0TmFtZSgpLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBfYWNx
dWlyZV9sb2NrKHNlbGYpOgorICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkK
KyAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCisgICAgICAgIHNlbGYuX3Bv
cnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2Nr
ID0gVHJ1ZQorCisgICAgZGVmIF9yZWxlYXNlX2xvY2soc2VsZik6CisgICAgICAgICIiIlN0b3Ag
dGhlIHNlcnZlcnMgYW5kIHJlbGVhc2UgaHR0cCBsb2NrLiIiIgorICAgICAgICBpZiBzZWxmLl9o
YXZlX2h0dHBfbG9jazoKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigp
CisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAg
ICAgICBzZWxmLl9wb3J0LnJlbGVhc2VfaHR0cF9sb2NrKCkKKyAgICAgICAgICAgIHNlbGYuX2hh
dmVfaHR0cF9sb2NrID0gRmFsc2UKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYu
X2lkID0gc2VsZi5fZ2V0X2lkKCkKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBl
eGNlcHRpb25fbXNnID0gIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygnJXMgc3RhcnRpbmcnICUgbmFt
ZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9yb3V0ZXIubG9vcChzZWxmKQor
ICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBleGNlcHRpb25f
bXNnID0gIiwgaW50ZXJydXB0ZWQiCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2Vw
dGlvbl9tc2cgPSAiLCBleGNlcHRpb24gcmFpc2VkIgorICAgICAgICBmaW5hbGx5OgorICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygiJXMgZG9uZSVzIiAlIChuYW1lLCBleGNlcHRpb25fbXNnKSkKKyAg
ICAgICAgICAgIGlmIGV4Y2VwdGlvbl9tc2c6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhjZXB0
aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgIHNlbGYuX3JvdXRlci5w
b3N0X2V4Y2VwdGlvbihzZWxmLmdldE5hbWUoKSwgc2VsZi5fZXhjZXB0aW9uX2luZm8pCisgICAg
ICAgICAgICBzZWxmLl9yb3V0ZXIucG9zdF9kb25lKG5hbWUpCisKKyAgICAgICAgYXNzZXJ0IGV4
Y2VwdGlvbl9tc2cgb3Igc2VsZi5fZG9uZSBvciBzZWxmLl9jYW5jZWxsZWQsICJleGl0aW5nIHVu
ZXhwZWN0ZWRseSIKKworCitjbGFzcyBfV29ya2VyVGhyZWFkKF9Xb3JrZXJUaHVuaywgdGhyZWFk
aW5nLlRocmVhZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRlciwgd29ya2VyX2NsYXNz
LCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxm
KQorICAgICAgICBfV29ya2VyVGh1bmsuX19pbml0X18oc2VsZiwgcm91dGVyLCB3b3JrZXJfY2xh
c3MsIHdvcmtlcl9udW1iZXIpCisgICAgICAgIHNlbGYubmFtZSA9ICd3b3JrZXItJWQnICUgd29y
a2VyX251bWJlcgorCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faWQK
KworICAgIGRlZiBfZ2V0X2lkKHNlbGYpOgorICAgICAgICB0aHJlYWQuZ2V0X2lkZW50KCkKKwor
ICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKKwor
ICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5zdGFydChzZWxm
KQorCisKK2NsYXNzIF9Xb3JrZXJQcm9jZXNzKF9Xb3JrZXJUaHVuaywgbXVsdGlwcm9jZXNzaW5n
LlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb3V0ZXIsIHdvcmtlcl9jbGFzcywg
d29ya2VyX251bWJlcik6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLl9faW5pdF9f
KHNlbGYpCisgICAgICAgIF9Xb3JrZXJUaHVuay5fX2luaXRfXyhzZWxmLCByb3V0ZXIsIHdvcmtl
cl9jbGFzcywgd29ya2VyX251bWJlcikKKyAgICAgICAgc2VsZi5uYW1lID0gJ3dvcmtlci0lZCcg
JSB3b3JrZXJfbnVtYmVyCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGZp
Z3VyZSBvdXQgaWYgdGhpcyBuZWVkcyB0byBiZSBhd2FyZSBvZiBwYXJlbnQvY2hpbGQKKyAgICAg
ICAgcmV0dXJuIHNlbGYucGlkCisKKyAgICBkZWYgX2dldF9pZChzZWxmKToKKyAgICAgICAgcmV0
dXJuIG9zLmdldHBpZCgpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9j
YW5jZWxsZWQgPSBUcnVlCisgICAgICAgIHNlbGYudGVybWluYXRlKCkKKworICAgIGRlZiBzdGFy
dChzZWxmKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muc3RhcnQoc2VsZikKKwor
ICAgIGRlZiBnZXROYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9yb3V0ZXJfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9yb3V0ZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZGFhOWNjMzc0Y2NhYWQwOGZkZGRiMTU2NWNiYWY0MDQ1M2VkMDg5ZQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3JvdXRlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDExOSBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCitpbXBvcnQgUXVl
dWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHJvdXRlciBpbXBvcnQgKgorCisKK2NsYXNzIFRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0YWNrX2Zv
dW5kKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcmV0dXJuCisg
ICAgICAgIGlkLCBzdGFjayA9IHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpWzBdCisgICAg
ICAgIGZvdW5kX3N0YWNrID0gZmluZF90aHJlYWRfc3RhY2soaWQpCisgICAgICAgIHNlbGYuYXNz
ZXJ0Tm90RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCisKKyAgICBkZWYgdGVzdF9maW5kX3RocmVh
ZF9zdGFja19ub3RfZm91bmQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudAorICAg
ICAgICByZXR1cm4KKyAgICAgICAgZm91bmRfc3RhY2sgPSBmaW5kX3RocmVhZF9zdGFjaygwKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQorCisKK2NsYXNzIFdh
aXRGb3JUaHJlYWRzVG9GaW5pc2hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgcnVu
X29uZV90aHJlYWQoc2VsZiwgbXNnKToKKyAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5R
dWV1ZSgpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBj
aGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkK
KyAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgc3RhcnRlZF9tc2cgPSBzdGFy
dGluZ19xdWV1ZS5nZXQoKQorICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQobXNnKQorICAgICAg
ICB0aHJlYWRzID0gW2NoaWxkX3RocmVhZF0KKyAgICAgICAgcmV0dXJuIHJ1bm5lci5fd2FpdF9m
b3JfdGhyZWFkc190b19maW5pc2godGhyZWFkcywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2Jhc2lj
KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcmV0dXJuCisgICAg
ICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnJykKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdChzZWxmKToK
KyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50LgorICAgICAgICByZXR1cm4KKyAgICAgICAgaW50
ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcnKQorICAgICAgICBpbnRlcnJ1cHRlZCA9
IHNlbGYucnVuX29uZV90aHJlYWQoJ0tleWJvYXJkSW50ZXJydXB0JykKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGludGVycnVwdGVkKQorCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAg
ICAgICAgIyBGSVhNRTogaW1wbGVtZW50LgorICAgICAgICByZXR1cm4KKyAgICAgICAgaW50ZXJy
dXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcnKQorICAgICAgICBvYyA9IG91dHB1dGNhcHR1
cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKKyAgICAgICAg
aW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCdUaW1lb3V0JykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQor
CisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1l
bnQuCisgICAgICAgIHJldHVybgorICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90
aHJlYWQoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYucnVu
X29uZV90aHJlYWQsICdFeGNlcHRpb24nKQorCisKK2NsYXNzIFN0YW5kYWxvbmVGdW5jdGlvbnNU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3RocmVhZChz
ZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50CisgICAgICAgIHJldHVybgorICAgICAg
ICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNhcHR1cmVf
b3V0cHV0KCkKKyAgICAgICAgbG9nZ2VyID0gcnVuX3dlYmtpdF90ZXN0cy5fbG9nCisgICAgICAg
IGFzdHJlYW0gPSBhcnJheV9zdHJlYW0uQXJyYXlTdHJlYW0oKQorICAgICAgICBoYW5kbGVyID0g
VGVzdEhhbmRsZXIoYXN0cmVhbSkKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikK
KworICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc3RvcHBp
bmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIGNoaWxkX3RocmVhZCA9IFRlc3RUaHJl
YWQoc3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKQorICAgICAgICBjaGlsZF90aHJlYWQu
c3RhcnQoKQorICAgICAgICBtc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQorCisgICAgICAgIHJ1
bl93ZWJraXRfdGVzdHMuX2xvZ193ZWRnZWRfdGhyZWFkKGNoaWxkX3RocmVhZCkKKyAgICAgICAg
c3RvcHBpbmdfcXVldWUucHV0KCcnKQorICAgICAgICBjaGlsZF90aHJlYWQuam9pbih0aW1lb3V0
PTEuMCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzdHJlYW0uZW1wdHkoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShjaGlsZF90aHJlYWQuaXNBbGl2ZSgpKQorICAgICAgICBvYy5y
ZXN0b3JlX291dHB1dCgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0
dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKaW5kZXggZDFjMzgzYzEzZWMy
ZjEzYWY1ZmIxZjE1NDA1NzljNGM4ODlmZGQ2My4uN2Q3MDRjM2E4OWFmNTRhZDBkYWYwNzQ4YjRk
ODg5YTYyMmFjZTRjZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKQEAgLTYyLDE1ICs2
Miw2IEBAIGNsYXNzIENocm9taXVtTWFjUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAg
ICAgICAgICAgICAgICAgICAgICAnTWFjQnVpbGRJbnN0cnVjdGlvbnMnKQogICAgICAgICByZXR1
cm4gcmVzdWx0CiAKLSAgICBkZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6Ci0gICAg
ICAgICMgRklYTUU6IHdlIG5lZWQgdG8gcnVuIHNpbmdsZS10aHJlYWRlZCBmb3Igbm93LiBTZWUK
LSAgICAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg1NTMu
IFVuZm9ydHVuYXRlbHkgdGhpcwotICAgICAgICAjIHJvdXRpbmUgaXMgY2FsbGVkIHJpZ2h0IGJl
Zm9yZSB0aGUgbG9nZ2VyIGlzIGNvbmZpZ3VyZWQsIHNvIGlmIHdlCi0gICAgICAgICMgdHJ5IHRv
IF9sb2cud2FybmluZygpLCBpdCBnZXRzIHRocm93biBhd2F5LgotICAgICAgICBpbXBvcnQgc3lz
Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkRlZmF1bHRpbmcgdG8gb25lIGNoaWxkIC0gc2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODU1M1xuIikKLSAgICAg
ICAgcmV0dXJuIDEKLQogICAgIGRlZiBkcml2ZXJfbmFtZShzZWxmKToKICAgICAgICAgIiIibmFt
ZSBmb3IgdGhpcyBwb3J0J3MgZXF1aXZhbGVudCBvZiBEdW1wUmVuZGVyVHJlZS4iIiIKICAgICAg
ICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd1c2VfZHJ0Jyk6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CmluZGV4IDY5NmUzMzk4
ZWE0YjI4YWM3NjIyNTkwN2RjMzYyZmZjM2ZiODZmOWUuLjcyZjkxZDgzODIxNWFmNGJjNDRmMWRj
MWYwNjU1ZGFkYzdkMzM2ZmYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CkBAIC00NywxNSArNDcsNiBAQCBjbGFzcyBN
YWNQb3J0KFdlYktpdFBvcnQpOgogICAgICAgICBrd2FyZ3Muc2V0ZGVmYXVsdCgncG9ydF9uYW1l
JywgJ21hYycgKyBzZWxmLnZlcnNpb24oKSkKICAgICAgICAgV2ViS2l0UG9ydC5fX2luaXRfXyhz
ZWxmLCAqKmt3YXJncykKIAotICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToK
LSAgICAgICAgIyBGSVhNRTogbmV3LXJ1bi13ZWJraXQtdGVzdHMgaXMgdW5zdGFibGUgb24gTWFj
IHJ1bm5pbmcgbW9yZSB0aGFuCi0gICAgICAgICMgZm91ciB0aHJlYWRzIGluIHBhcmFsbGVsLgot
ICAgICAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY2
MjIKLSAgICAgICAgY2hpbGRfcHJvY2Vzc2VzID0gV2ViS2l0UG9ydC5kZWZhdWx0X2NoaWxkX3By
b2Nlc3NlcyhzZWxmKQotICAgICAgICBpZiBjaGlsZF9wcm9jZXNzZXMgPiA0OgotICAgICAgICAg
ICAgcmV0dXJuIDQKLSAgICAgICAgcmV0dXJuIGNoaWxkX3Byb2Nlc3NlcwotCiAgICAgZGVmIGJh
c2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgogICAgICAgICBwb3J0X25hbWVzID0gW10KICAgICAg
ICAgaWYgc2VsZi5fbmFtZSA9PSAnbWFjLXRpZ2VyJzoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQppbmRleCBmZjQwODZj
NzRkYzE4MmJhODQ3MTIzZTYzNTUwMGQxNDQxMWQ5OTNlLi4xZDk2YmQ5NjJiOTE2ZDllMjQxNGZi
ZThmYjU2OTM1OTdmMGRjNzA1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CkBAIC0xMzYsNiArMTM2LDkgQEAgY2xh
c3MgVGVzdFBvcnQoYmFzZS5Qb3J0KToKICAgICBkZWYgY2hlY2tfYnVpbGQoc2VsZiwgbmVlZHNf
aHR0cCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKKyAgICBkZWYgZGVmYXVsdF9jaGlsZF9wcm9j
ZXNzZXMoc2VsZik6CisgICAgICAgIHJldHVybiAyCisKICAgICBkZWYgZGlmZl9pbWFnZShzZWxm
LCBleHBlY3RlZF9jb250ZW50cywgYWN0dWFsX2NvbnRlbnRzLAogICAgICAgICAgICAgICAgICAg
IGRpZmZfZmlsZW5hbWU9Tm9uZSk6CiAgICAgICAgIGRpZmZlZCA9IGFjdHVhbF9jb250ZW50cyAh
PSBleHBlY3RlZF9jb250ZW50cwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggMWY3YTBh
ZDlkZTNkM2UxNWQ1ZTZkZGUwMzJkZTIxMjg0YWI5YTZmMS4uZjU5Y2Y3Y2ZhMjg2NWI0OWRhOTYz
NDYxNzY3MjVlMjM2Yjk0N2UwZiAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC02Nyw2
ICs2Nyw3IEBAIGltcG9ydCB0cmFjZWJhY2sKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IGR1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvcgogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcHJpbnRp
bmcKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHJvdXRlcgogZnJvbSBsYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRl
c3RfZmFpbHVyZXMKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcmVzdWx0cwpAQCAt
ODksMzIgKzkwLDE5IEBAIExBWU9VVF9URVNUU19ESVJFQ1RPUlkgPSAiTGF5b3V0VGVzdHMiICsg
b3Muc2VwCiAKIFRlc3RFeHBlY3RhdGlvbnNGaWxlID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4
cGVjdGF0aW9uc0ZpbGUKIAotCiBjbGFzcyBUZXN0SW5mbzoKICAgICAiIiJHcm91cHMgaW5mb3Jt
YXRpb24gYWJvdXQgYSB0ZXN0IGZvciBlYXN5IHBhc3Npbmcgb2YgZGF0YS4iIiIKIAotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBmaWxlbmFtZSwgdGltZW91dCk6Ci0gICAgICAgICIiIkdl
bmVyYXRlcyB0aGUgVVJJIGFuZCBzdG9yZXMgdGhlIGZpbGVuYW1lIGFuZCB0aW1lb3V0IGZvciB0
aGlzIHRlc3QuCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0aW1lb3V0KToKKyAg
ICAgICAgIiIiQnVuZGxlcyB0aGUgZmlsZW5hbWUgYW5kIHRpbWVvdXQgZm9yIHRoaXMgdGVzdC4K
ICAgICAgICAgQXJnczoKICAgICAgICAgICBmaWxlbmFtZTogRnVsbCBwYXRoIHRvIHRoZSB0ZXN0
LgogICAgICAgICAgIHRpbWVvdXQ6IFRpbWVvdXQgZm9yIHJ1bm5pbmcgdGhlIHRlc3QgaW4gVGVz
dFNoZWxsLgogICAgICAgICAgICIiIgogICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUK
LSAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKLSAgICAgICAgc2VsZi51cmkgPSBwb3J0LmZpbGVu
YW1lX3RvX3VyaShmaWxlbmFtZSkKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAotICAg
ICAgICBzZWxmLl9pbWFnZV9jaGVja3N1bSA9IC0xCi0KLSAgICBkZWYgaW1hZ2VfaGFzaChzZWxm
KToKLSAgICAgICAgIyBSZWFkIHRoZSBpbWFnZV9oYXNoIGxhemlseSB0byByZWR1Y2Ugc3RhcnR1
cCB0aW1lLgotICAgICAgICAjIFRoaXMgY2xhc3MgaXMgYWNjZXNzZWQgYWNyb3NzIHRocmVhZHMs
IGJ1dCBvbmx5IG9uZSB0aHJlYWQgc2hvdWxkCi0gICAgICAgICMgZXZlciBiZSBkZWFsaW5nIHdp
dGggYW55IGdpdmVuIFRlc3RJbmZvIHNvIG5vIGxvY2tpbmcgaXMgbmVlZGVkLgotICAgICAgICAj
Ci0gICAgICAgICMgTm90ZSB0aGF0IHdlIHVzZSAtMSB0byBpbmRpY2F0ZSB0aGF0IHdlIGhhdmVu
J3QgcmVhZCB0aGUgdmFsdWUsCi0gICAgICAgICMgYmVjYXVzZSBleHBlY3RlZF9jaGVja3N1bSgp
IHJldHVybnMgYSBzdHJpbmcgb3IgTm9uZS4KLSAgICAgICAgaWYgc2VsZi5faW1hZ2VfY2hlY2tz
dW0gPT0gLTE6Ci0gICAgICAgICAgICBzZWxmLl9pbWFnZV9jaGVja3N1bSA9IHNlbGYuX3BvcnQu
ZXhwZWN0ZWRfY2hlY2tzdW0oc2VsZi5maWxlbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2lt
YWdlX2NoZWNrc3VtCisgICAgICAgIHNlbGYudXJpID0gTm9uZQorICAgICAgICBzZWxmLmltYWdl
X2NoZWNrc3VtID0gTm9uZQogCiAKIGNsYXNzIFJlc3VsdFN1bW1hcnkob2JqZWN0KToKQEAgLTE2
MSw2ICsxNDksNyBAQCBjbGFzcyBSZXN1bHRTdW1tYXJ5KG9iamVjdCk6CiAgICAgICAgICAgICBz
ZWxmLnVuZXhwZWN0ZWQgKz0gMQogCiAKKwogZGVmIHN1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3Vs
dHMocG9ydF9vYmosIGV4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXRyeV9zdW1tYXJ5KToKICAgICAiIiJTdW1tYXJpemUgYW55
IHVuZXhwZWN0ZWQgcmVzdWx0cyBhcyBhIGRpY3QuCkBAIC0yNTAsMzMgKzIzOSwzMiBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICMgaW4gRHVtcFJlbmRlclRyZWUuCiAgICAgREVGQVVMVF9URVNU
X1RJTUVPVVRfTVMgPSA2ICogMTAwMAogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9w
dGlvbnMsIHByaW50ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBw
cmludGVyLCByb3V0ZXIpOgogICAgICAgICAiIiJJbml0aWFsaXplIHRlc3QgcnVubmVyIGRhdGEg
c3RydWN0dXJlcy4KIAogICAgICAgICBBcmdzOgogICAgICAgICAgIHBvcnQ6IGFuIG9iamVjdCBp
bXBsZW1lbnRpbmcgcG9ydC1zcGVjaWZpYwogICAgICAgICAgIG9wdGlvbnM6IGEgZGljdGlvbmFy
eSBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucwogICAgICAgICAgIHByaW50ZXI6IGEgUHJpbnRlciBv
YmplY3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisgICAgICAgICAgcm91dGVyOiBvYmplY3QgdXNl
ZCB0byBjb21tdW5pY2F0ZSB3LyB3b3JrZXJzLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5f
cG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2Vs
Zi5fcHJpbnRlciA9IHByaW50ZXIKKyAgICAgICAgc2VsZi5fcm91dGVyID0gcm91dGVyCiAKICAg
ICAgICAgIyBkaXNhYmxlIHdzcyBzZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24g
YnVpbGRib3RzLgogICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVyID0gd2Vi
c29ja2V0X3NlcnZlci5QeVdlYlNvY2tldCgKICAgICAgICAgIyAgICAgICAgb3B0aW9ucy5yZXN1
bHRzX2RpcmVjdG9yeSwgdXNlX3Rscz1UcnVlLCBwb3J0PTkzMjMpCiAKLSAgICAgICAgIyBhIGxp
c3Qgb2YgVGVzdFR5cGUgb2JqZWN0cwotICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gW3RleHRf
ZGlmZi5UZXN0VGV4dERpZmZdCi0gICAgICAgIGlmIG9wdGlvbnMucGl4ZWxfdGVzdHM6Ci0gICAg
ICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLmFwcGVuZChpbWFnZV9kaWZmLkltYWdlRGlmZikKLQog
ICAgICAgICAjIGEgc2V0IG9mIHRlc3QgZmlsZXMsIGFuZCB0aGUgc2FtZSB0ZXN0cyBhcyBhIGxp
c3QKICAgICAgICAgc2VsZi5fdGVzdF9maWxlcyA9IHNldCgpCiAgICAgICAgIHNlbGYuX3Rlc3Rf
ZmlsZXNfbGlzdCA9IE5vbmUKLSAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gUXVldWUuUXVl
dWUoKQogICAgICAgICBzZWxmLl9yZXRyeWluZyA9IEZhbHNlCiAKKyAgICBkZWYgZ2V0TmFtZShz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHJvdXRlci5Sb3V0ZXIuTUFOQUdFUgorCiAgICAgZGVmIGNv
bGxlY3RfdGVzdHMoc2VsZiwgYXJncywgbGFzdF91bmV4cGVjdGVkX3Jlc3VsdHMpOgogICAgICAg
ICAiIiJGaW5kIGFsbCB0aGUgZmlsZXMgdG8gdGVzdC4KIApAQCAtNTAxLDEwICs0ODksOSBAQCBj
bGFzcyBUZXN0UnVubmVyOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBUZXN0
SW5mbyBvYmplY3QgZm9yIHRoZSBmaWxlLiBNb3N0bHkgdGhpcwogICAgICAgICBpcyB1c2VkIGZv
ciBsb29raW5nIHVwIHRoZSB0aW1lb3V0IHZhbHVlIChpbiBtcykgdG8gdXNlIGZvciB0aGUgZ2l2
ZW4KICAgICAgICAgdGVzdC4iIiIKLSAgICAgICAgaWYgc2VsZi5fZXhwZWN0YXRpb25zLmhhc19t
b2RpZmllcih0ZXN0X2ZpbGUsIHRlc3RfZXhwZWN0YXRpb25zLlNMT1cpOgotICAgICAgICAgICAg
cmV0dXJuIFRlc3RJbmZvKHNlbGYuX3BvcnQsIHRlc3RfZmlsZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLnNsb3dfdGltZV9vdXRfbXMpCi0gICAgICAgIHJldHVy
biBUZXN0SW5mbyhzZWxmLl9wb3J0LCB0ZXN0X2ZpbGUsIHNlbGYuX29wdGlvbnMudGltZV9vdXRf
bXMpCisgICAgICAgIGlmIHNlbGYuX3Rlc3RfaXNfc2xvdyh0ZXN0X2ZpbGUpOgorICAgICAgICAg
ICAgcmV0dXJuIFRlc3RJbmZvKHRlc3RfZmlsZSwgc2VsZi5fb3B0aW9ucy5zbG93X3RpbWVfb3V0
X21zKQorICAgICAgICByZXR1cm4gVGVzdEluZm8odGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnRp
bWVfb3V0X21zKQogCiAgICAgZGVmIF90ZXN0X3JlcXVpcmVzX2xvY2soc2VsZiwgdGVzdF9maWxl
KToKICAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIHRlc3QgbmVlZHMgdG8gYmUgbG9ja2Vk
IHdoZW4KQEAgLTUxMiwyMyArNDk5LDIyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHNw
bGl0X3BhdGggPSB0ZXN0X2ZpbGUuc3BsaXQob3Muc2VwKQogICAgICAgICByZXR1cm4gJ2h0dHAn
IGluIHNwbGl0X3BhdGggb3IgJ3dlYnNvY2tldCcgaW4gc3BsaXRfcGF0aAogCi0gICAgZGVmIF9n
ZXRfdGVzdF9maWxlX3F1ZXVlKHNlbGYsIHRlc3RfZmlsZXMpOgotICAgICAgICAiIiJDcmVhdGUg
dGhlIHRocmVhZCBzYWZlIHF1ZXVlIG9mIGxpc3RzIG9mICh0ZXN0IGZpbGVuYW1lcywgdGVzdCBV
UklzKQotICAgICAgICB0dXBsZXMuIEVhY2ggVGVzdFNoZWxsVGhyZWFkIHB1bGxzIGEgbGlzdCBm
cm9tIHRoaXMgcXVldWUgYW5kIHJ1bnMKLSAgICAgICAgdGhvc2UgdGVzdHMgaW4gb3JkZXIgYmVm
b3JlIGdyYWJiaW5nIHRoZSBuZXh0IGF2YWlsYWJsZSBsaXN0LgorICAgIGRlZiBfdGVzdF9pc19z
bG93KHNlbGYsIHRlc3RfZmlsZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RhdGlvbnMu
aGFzX21vZGlmaWVyKHRlc3RfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGVzdF9leHBlY3RhdGlvbnMuU0xPVykKIAotICAgICAgICBTaGFyZCB0
aGUgbGlzdHMgYnkgZGlyZWN0b3J5LiBUaGlzIGhlbHBzIGVuc3VyZSB0aGF0IHRlc3RzIHRoYXQg
ZGVwZW5kCi0gICAgICAgIG9uIGVhY2ggb3RoZXIgKGFrYSBiYWQgdGVzdHMhKSBjb250aW51ZSB0
byBydW4gdG9nZXRoZXIgYXMgbW9zdAotICAgICAgICBjcm9zcy10ZXN0cyBkZXBlbmRlbmNpZXMg
dGVuZCB0byBvY2N1ciB3aXRoaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICAgIGRlZiBfc2hhcmRf
dGVzdHMoc2VsZiwgdGVzdF9maWxlcywgc2luZ2xlX3RocmVhZGVkKToKKyAgICAgICAgIiIiR3Jv
dXBzIHRlc3RzIGludG8gYmF0Y2hlcy4KKyAgICAgICAgVGhpcyBoZWxwcyBlbnN1cmUgdGhhdCB0
ZXN0cyB0aGF0IGRlcGVuZCBvbiBlYWNoIG90aGVyIChha2EgYmFkIHRlc3RzISkKKyAgICAgICAg
Y29udGludWUgdG8gcnVuIHRvZ2V0aGVyIGFzIG1vc3QgY3Jvc3MtdGVzdHMgZGVwZW5kZW5jaWVz
IHRlbmQgdG8KKyAgICAgICAgb2NjdXIgd2l0aGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KIAogICAg
ICAgICBSZXR1cm46Ci0gICAgICAgICAgVGhlIFF1ZXVlIG9mIGxpc3RzIG9mIFRlc3RJbmZvIG9i
amVjdHMuCisgICAgICAgICAgICBBIGxpc3Qgb2YgbGlzdHMgb2YgVGVzdEluZm8gb2JqZWN0cwog
ICAgICAgICAiIiIKLQogICAgICAgICB0ZXN0X2xpc3RzID0gW10KICAgICAgICAgdGVzdHNfdG9f
aHR0cF9sb2NrID0gW10KLSAgICAgICAgaWYgKHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1
bGx5X3BhcmFsbGVsIG9yCi0gICAgICAgICAgICBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKSk6
CisgICAgICAgIGlmIHNpbmdsZV90aHJlYWRlZDoKICAgICAgICAgICAgIGZvciB0ZXN0X2ZpbGUg
aW4gdGVzdF9maWxlczoKICAgICAgICAgICAgICAgICB0ZXN0X2luZm8gPSBzZWxmLl9nZXRfdGVz
dF9pbmZvX2Zvcl9maWxlKHRlc3RfZmlsZSkKICAgICAgICAgICAgICAgICBpZiBzZWxmLl90ZXN0
X3JlcXVpcmVzX2xvY2sodGVzdF9maWxlKToKQEAgLTU2NywyMyArNTUzLDcgQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKICAgICAgICAgICAgIHRlc3RzX3RvX2h0dHBfbG9jay5yZXZlcnNlKCkKICAgICAg
ICAgICAgIHRlc3RfbGlzdHMuaW5zZXJ0KDAsICgidGVzdHNfdG9faHR0cF9sb2NrIiwgdGVzdHNf
dG9faHR0cF9sb2NrKSkKIAotICAgICAgICBmaWxlbmFtZV9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkK
LSAgICAgICAgZm9yIGl0ZW0gaW4gdGVzdF9saXN0czoKLSAgICAgICAgICAgIGZpbGVuYW1lX3F1
ZXVlLnB1dChpdGVtKQotICAgICAgICByZXR1cm4gZmlsZW5hbWVfcXVldWUKLQotICAgIGRlZiBf
Z2V0X3Rlc3RfYXJncyhzZWxmLCBpbmRleCk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIHR1cGxl
IG9mIGFyZ3VtZW50cyBmb3IgdGVzdHMgYW5kIGZvciBEdW1wUmVuZGVyVHJlZS4iIiIKLSAgICAg
ICAgdGVzdF9hcmdzID0gdGVzdF90eXBlX2Jhc2UuVGVzdEFyZ3VtZW50cygpCi0gICAgICAgIHRl
c3RfYXJncy5wbmdfcGF0aCA9IE5vbmUKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90
ZXN0czoKLSAgICAgICAgICAgIHBuZ19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
cG5nX3Jlc3VsdCVzLnBuZyIgJSBpbmRleCkKLSAgICAgICAgICAgIHRlc3RfYXJncy5wbmdfcGF0
aCA9IHBuZ19wYXRoCi0gICAgICAgIHRlc3RfYXJncy5uZXdfYmFzZWxpbmUgPSBzZWxmLl9vcHRp
b25zLm5ld19iYXNlbGluZQotICAgICAgICB0ZXN0X2FyZ3MucmVzZXRfcmVzdWx0cyA9IHNlbGYu
X29wdGlvbnMucmVzZXRfcmVzdWx0cwotCi0gICAgICAgIHJldHVybiB0ZXN0X2FyZ3MKKyAgICAg
ICAgcmV0dXJuIHRlc3RfbGlzdHMKIAogICAgIGRlZiBfY29udGFpbnNfdGVzdHMoc2VsZiwgc3Vi
ZGlyKToKICAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiBzZWxmLl90ZXN0X2ZpbGVzOgpAQCAtNTkx
LDQwICs1NjEsNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICAgIHJldHVybiBU
cnVlCiAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgZGVmIF9pbnN0YW50aWF0ZV9kdW1wX3Jl
bmRlcl90cmVlX3RocmVhZHMoc2VsZiwgdGVzdF9maWxlcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIklu
c3RhbnRpdGF0ZXMgYW5kIHN0YXJ0cyB0aGUgVGVzdFNoZWxsVGhyZWFkKHMpLgotCi0gICAgICAg
IFJldHVybjoKLSAgICAgICAgICBUaGUgbGlzdCBvZiB0aHJlYWRzLgotICAgICAgICAiIiIKLSAg
ICAgICAgZmlsZW5hbWVfcXVldWUgPSBzZWxmLl9nZXRfdGVzdF9maWxlX3F1ZXVlKHRlc3RfZmls
ZXMpCi0KLSAgICAgICAgIyBJbnN0YW50aWF0ZSBUZXN0U2hlbGxUaHJlYWRzIGFuZCBzdGFydCB0
aGVtLgotICAgICAgICB0aHJlYWRzID0gW10KLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKGludChz
ZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykpOgotICAgICAgICAgICAgIyBDcmVhdGUgc2Vw
YXJhdGUgVGVzdFR5cGVzIGluc3RhbmNlcyBmb3IgZWFjaCB0aHJlYWQuCi0gICAgICAgICAgICB0
ZXN0X3R5cGVzID0gW10KLSAgICAgICAgICAgIGZvciB0ZXN0X3R5cGUgaW4gc2VsZi5fdGVzdF90
eXBlczoKLSAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLmFwcGVuZCh0ZXN0X3R5cGUoc2VsZi5f
cG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnkpKQotCi0gICAgICAgICAgICB0ZXN0X2FyZ3MgPSBzZWxmLl9nZXRf
dGVzdF9hcmdzKGkpCi0gICAgICAgICAgICB0aHJlYWQgPSBkdW1wX3JlbmRlcl90cmVlX3RocmVh
ZC5UZXN0U2hlbGxUaHJlYWQoc2VsZi5fcG9ydCwKLSAgICAgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLCBmaWxlbmFtZV9xdWV1ZSwgc2VsZi5fcmVzdWx0X3F1ZXVlLAotICAgICAgICAgICAgICAg
IHRlc3RfdHlwZXMsIHRlc3RfYXJncykKLSAgICAgICAgICAgIGlmIHNlbGYuX2lzX3NpbmdsZV90
aHJlYWRlZCgpOgotICAgICAgICAgICAgICAgIHRocmVhZC5ydW5faW5fbWFpbl90aHJlYWQoc2Vs
ZiwgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHRo
cmVhZC5zdGFydCgpCi0gICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0aHJlYWQpCi0KLSAgICAg
ICAgcmV0dXJuIHRocmVhZHMKLQotICAgIGRlZiBfaXNfc2luZ2xlX3RocmVhZGVkKHNlbGYpOgot
ICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgd2Ugc2hvdWxkIHJ1biBhbGwgdGhlIHRlc3RzIGlu
IHRoZSBtYWluIHRocmVhZC4iIiIKLSAgICAgICAgcmV0dXJuIGludChzZWxmLl9vcHRpb25zLmNo
aWxkX3Byb2Nlc3NlcykgPT0gMQotCiAgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgZmlsZV9saXN0
LCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIiIlJ1bnMgdGhlIHRlc3RzIGluIHRoZSBmaWxl
X2xpc3QuCiAKQEAgLTYzOSw3MyArNTc1LDU3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAg
ICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0
X3J1bl90aW1lfQogICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRv
IHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKICAgICAgICAgIiIiCisgICAgICAgIG51bV93b3Jr
ZXJzID0gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQorCisgICAgICAgIHNlbGYu
X2N1cnJlbnRfZmlsZV9saXN0ID0gZmlsZV9saXN0CisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVz
dWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorICAgICAgICByb3V0ZXIgPSBzZWxmLl9yb3V0
ZXIKKworICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2dyb3Vw
X3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzID0ge30KKyAgICAgICAgZm9y
IGkgaW4geHJhbmdlKG51bV93b3JrZXJzKToKKyAgICAgICAgICAgIG5hbWUgPSAnd29ya2VyLSVk
JyAlIGkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0c1tuYW1lXSA9IHt9CisgICAgICAg
ICAgICBzZWxmLl93b3JrZXJfc3RhdHNbbmFtZV1bJ25hbWUnXSA9IG5hbWUKKyAgICAgICAgICAg
IHNlbGYuX3dvcmtlcl9zdGF0c1tuYW1lXVsnbnVtX3Rlc3RzJ10gPSAwCisgICAgICAgICAgICBz
ZWxmLl93b3JrZXJfc3RhdHNbbmFtZV1bJ3RvdGFsX3RpbWUnXSA9IDAKKworICAgICAgICB0ZXN0
X2xpc3RzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LAorICAgICAgICAgICAgbnVtX3dv
cmtlcnMgPT0gMSBvciBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkK
KyAgICAgICAgZm9yIHRlc3RfbGlzdCBpbiB0ZXN0X2xpc3RzOgorICAgICAgICAgICAgcm91dGVy
LnBvc3RfdGVzdF9saXN0KHRlc3RfbGlzdCkKKworICAgICAgICAjIFRlbGwgdGhlIHdvcmtlcnMg
dG8gc2h1dCBkb3duIGFmdGVyIHRoZXkncmUgZG9uZSBydW5uaW5nIGFsbCB0aGUKKyAgICAgICAg
IyB0ZXN0cy4KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG51bV93b3JrZXJzKToKKyAgICAgICAg
ICAgIHJvdXRlci5wb3N0X3N0b3AoKQorCiAgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCB1c2Ug
d2Via2l0cHkudG9vbC5ncmFtbWFyLnBsdXJhbGl6ZSBoZXJlLgogICAgICAgICBwbHVyYWwgPSAi
IgotICAgICAgICBpZiBub3Qgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCk6CisgICAgICAgIGlm
IGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPiAxOgogICAgICAgICAgICAgcGx1
cmFsID0gInMiCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAl
cyVzIC4uLicgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9y
dC5kcml2ZXJfbmFtZSgpLCBwbHVyYWwpKQotICAgICAgICB0aHJlYWRzID0gc2VsZi5faW5zdGFu
dGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzKGZpbGVfbGlzdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3Vt
bWFyeSkKLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3Rp
bmcgLi4uIikKIAotICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IHNlbGYuX3dhaXRfZm9y
X3RocmVhZHNfdG9fZmluaXNoKHRocmVhZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0gICAg
ICAgICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5n
cykgPSBcCi0gICAgICAgICAgICBzZWxmLl9jb2xsZWN0X3RpbWluZ19pbmZvKHRocmVhZHMpCisg
ICAgICAgIHJvdXRlci5zdGFydF93b3JrZXJzKCkKIAotICAgICAgICByZXR1cm4gKGtleWJvYXJk
X2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAotICAgICAgICAgICAg
ICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50
X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQogCi0gICAgZGVmIF93YWl0X2Zvcl90aHJl
YWRzX3RvX2ZpbmlzaChzZWxmLCB0aHJlYWRzLCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgIGtl
eWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBM
b29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZW0gdG8gZmluaXNoLgot
ICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVlCi0gICAgICAgICAgICB3aGls
ZSBzb21lX3RocmVhZF9pc19hbGl2ZToKLSAgICAgICAgICAgICAgICBzb21lX3RocmVhZF9pc19h
bGl2ZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgdCA9IHRpbWUudGltZSgpCi0gICAgICAgICAg
ICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgICAgICAgICBleGNlcHRp
b25faW5mbyA9IHRocmVhZC5leGNlcHRpb25faW5mbygpCi0gICAgICAgICAgICAgICAgICAgIGlm
IGV4Y2VwdGlvbl9pbmZvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBS
ZS1yYWlzZSB0aGUgdGhyZWFkJ3MgZXhjZXB0aW9uIGhlcmUgdG8gbWFrZSBpdAotICAgICAgICAg
ICAgICAgICAgICAgICAgIyBjbGVhciB0aGF0IHRlc3Rpbmcgd2FzIGFib3J0ZWQuIE90aGVyd2lz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHRlc3RzIHRoYXQgZGlkIG5vdCBydW4g
d291bGQgYmUgYXNzdW1lZAotICAgICAgICAgICAgICAgICAgICAgICAgIyB0byBoYXZlIHBhc3Nl
ZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNl
cHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KLQotICAgICAgICAgICAgICAgICAgICBp
ZiB0aHJlYWQuaXNBbGl2ZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgc29tZV90aHJlYWRf
aXNfYWxpdmUgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB0
aHJlYWQubmV4dF90aW1lb3V0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0X3Rp
bWVvdXQgYW5kIHQgPiBuZXh0X3RpbWVvdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9sb2dfd2VkZ2VkX3RocmVhZCh0aHJlYWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhyZWFkLmNsZWFyX25leHRfdGltZW91dCgpCi0KLSAgICAgICAgICAgICAgICBzZWxmLnVwZGF0
ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgICAgICAgICAgICAgaWYgc29tZV90aHJl
YWRfaXNfYWxpdmU6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLQorICAg
ICAgICAgICAgcm91dGVyLmxvb3Aoc2VsZikKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJy
dXB0OgorICAgICAgICAgICAgcm91dGVyLmNhbmNlbF93b3JrZXJzKCkKKyAgICAgICAgICAgIF9s
b2cuaW5mbygiSW50ZXJydXB0ZWQsIGV4aXRpbmciKQogICAgICAgICAgICAga2V5Ym9hcmRfaW50
ZXJydXB0ZWQgPSBUcnVlCi0gICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAg
ICAgICAgICAgICAgdGhyZWFkLmNhbmNlbCgpCi0KLSAgICAgICAgcmV0dXJuIGtleWJvYXJkX2lu
dGVycnVwdGVkCi0KLSAgICBkZWYgX2NvbGxlY3RfdGltaW5nX2luZm8oc2VsZiwgdGhyZWFkcyk6
Ci0gICAgICAgIHRlc3RfdGltaW5ncyA9IHt9Ci0gICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1p
bmdzID0gW10KLSAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbXQotCi0gICAgICAgIGZvciB0aHJl
YWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLmFwcGVuZCh7J25hbWUn
OiB0aHJlYWQuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
bnVtX3Rlc3RzJzogdGhyZWFkLmdldF9udW1fdGVzdHMoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3RvdGFsX3RpbWUnOiB0aHJlYWQuZ2V0X3RvdGFsX3RpbWUoKX0pCi0g
ICAgICAgICAgICB0ZXN0X3RpbWluZ3MudXBkYXRlKHRocmVhZC5nZXRfdGVzdF9ncm91cF90aW1p
bmdfc3RhdHMoKSkKLSAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLmV4dGVuZCh0
aHJlYWQuZ2V0X3Rlc3RfcmVzdWx0cygpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAj
IFVuZXhwZWN0ZWQgZXhjZXB0aW9uOyBkb24ndCB0cnkgdG8gY2xlYW4gdXAgd29ya2Vycy4KKyAg
ICAgICAgICAgIF9sb2cuaW5mbygiRXhjZXB0aW9uIHJhaXNlZCwgZXhpdGluZyIpCisgICAgICAg
ICAgICByYWlzZQogCi0gICAgICAgIHJldHVybiAodGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5n
cywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50
ZXJydXB0ZWQsIHNlbGYuX3dvcmtlcl9zdGF0cy52YWx1ZXMoKSwKKyAgICAgICAgICAgICAgICBz
ZWxmLl9ncm91cF9zdGF0cywgc2VsZi5fYWxsX3Jlc3VsdHMpCiAKICAgICBkZWYgbmVlZHNfaHR0
cChzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5lciBuZWVk
cyBhbiBIVFRQIHNlcnZlci4iIiIKQEAgLTgwMCwxMiArNzIwLDEyIEBAIGNsYXNzIFRlc3RSdW5u
ZXI6CiAKICAgICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQogCi0gICAgICAgIHNlbGYuX3By
aW50X3RpbWluZ19zdGF0aXN0aWNzKGVuZF90aW1lIC0gc3RhcnRfdGltZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5KQorICAgICAgICAjc2VsZi5fcHJpbnRfdGltaW5nX3N0YXRpc3RpY3MoZW5kX3RpbWUgLSBz
dGFydF90aW1lLAorICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFk
X3RpbWluZ3MsIHRlc3RfdGltaW5ncywKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLAorICAgICAgICAjICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCiAKLSAgICAgICAgc2VsZi5fcHJpbnRfcmVz
dWx0X3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCisgICAgICAgICNzZWxmLl9wcmludF9yZXN1bHRf
c3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKIAogICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAg
ICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCkBAIC04NTUsMjMgKzc3NSwzNyBAQCBjbGFzcyBUZXN0
UnVubmVyOgogICAgICAgICBfbG9nLmRlYnVnKCJzdG9wcGluZyBoZWxwZXIiKQogICAgICAgICBz
ZWxmLl9wb3J0LnN0b3BfaGVscGVyKCkKIAotICAgIGRlZiB1cGRhdGVfc3VtbWFyeShzZWxmLCBy
ZXN1bHRfc3VtbWFyeSk6CisgICAgZGVmIGhhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgc3JjKToK
KyAgICAgICAgcGFzcworCisgICAgZGVmIGhhbmRsZV9kb25lKHNlbGYsIHNyYyk6CisgICAgICAg
IHBhc3MKKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3VsdCwg
ZWxhcHNlZF90aW1lKToKICAgICAgICAgIiIiVXBkYXRlIHRoZSBzdW1tYXJ5IGFuZCBwcmludCBy
ZXN1bHRzIHdpdGggYW55IGNvbXBsZXRlZCB0ZXN0cy4iIiIKLSAgICAgICAgd2hpbGUgVHJ1ZToK
LSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X3Jlc3VsdHMu
VGVzdFJlc3VsdC5sb2FkcyhzZWxmLl9yZXN1bHRfcXVldWUuZ2V0X25vd2FpdCgpKQotICAgICAg
ICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgotICAgICAgICAgICAgICAgIHJldHVybgotCi0gICAg
ICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5tYXRjaGVzX2FuX2V4cGVjdGVk
X3Jlc3VsdCgKLSAgICAgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC50eXBlLCBz
ZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQotICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuYWRk
KHJlc3VsdCwgZXhwZWN0ZWQpCi0gICAgICAgICAgICBleHBfc3RyID0gc2VsZi5fZXhwZWN0YXRp
b25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAotICAgICAgICAgICAgICAgIHJlc3VsdC5maWxl
bmFtZSkKLSAgICAgICAgICAgIGdvdF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZXhwZWN0YXRp
b25fdG9fc3RyaW5nKHJlc3VsdC50eXBlKQotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmlu
dF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKQotICAgICAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgc2VsZi5f
cmV0cnlpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3Rlc3RfZmlsZXNfbGlzdCkKKyAgICAgICAgc2VsZi5fdXBkYXRlX3dvcmtlcl9zdGF0cyhzcmMs
IHJlc3VsdCwgZWxhcHNlZF90aW1lKQorCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0
YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KAorICAgICAgICAgICAgcmVzdWx0LmZp
bGVuYW1lLCByZXN1bHQudHlwZSwgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cykKKyAgICAgICAg
ZXhwX3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAg
ICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSkKKyAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVj
dGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUpCisgICAgICAgIHNlbGYu
X3ByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290
X3N0cikKKworICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQs
IGV4cGVjdGVkKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Byb2dyZXNzKHNlbGYuX2N1
cnJlbnRfcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fcmV0cnlpbmcsIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKworICAgIGRlZiBoYW5k
bGVfZmluaXNoZWRfZ3JvdXAoc2VsZiwgc3JjLCBncm91cF9uYW1lLCBudW1fdGVzdHMsIGVsYXBz
ZWRfdGltZSk6CisgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzW2dyb3VwX25hbWVdID0gKG51bV90
ZXN0cywgZWxhcHNlZF90aW1lKQorCisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3Jj
LCBleGNlcHRpb25faW5mbyk6CisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNl
cHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KKworICAgIGRlZiBfdXBkYXRlX3dvcmtl
cl9zdGF0cyhzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5f
d29ya2VyX3N0YXRzW3NyY11bJ3RvdGFsX3RpbWUnXSArPSBlbGFwc2VkX3RpbWUKKyAgICAgICAg
c2VsZi5fd29ya2VyX3N0YXRzW3NyY11bJ251bV90ZXN0cyddICs9IDEKKyAgICAgICAgc2VsZi5f
YWxsX3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKIAogICAgIGRlZiBfY2xvYmJlcl9vbGRfcmVzdWx0
cyhzZWxmKToKICAgICAgICAgIyBKdXN0IGNsb2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJlc3VsdHMg
ZGlyZWN0b3JpZXMgc2luY2UgdGhlIG90aGVyCkBAIC0xMDA0LDEyICs5MzgsMTMgQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX29wdGlvbnMudGltZV9v
dXRfbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnNsb3dfdGltZV9v
dXRfbXMpKQogCi0gICAgICAgIGlmIHNlbGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpOgorICAgICAg
ICBpZiBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID09IDE6CiAgICAgICAgICAg
ICBwLnByaW50X2NvbmZpZygiUnVubmluZyBvbmUgJXMiICUgc2VsZi5fcG9ydC5kcml2ZXJfbmFt
ZSgpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcC5wcmludF9jb25maWcoIlJ1bm5pbmcg
JXMgJXNzIGluIHBhcmFsbGVsIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5f
b3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5kcml2ZXJfbmFtZSgpKSkKKyAgICAgICAgcC5wcmludF9jb25maWcoIldvcmtlcnMg
YXJlICVzIiAlIHNlbGYuX29wdGlvbnMud29ya2Vyc19hcmUpCiAgICAgICAgIHAucHJpbnRfY29u
ZmlnKCIiKQogCiAgICAgZGVmIF9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUoc2VsZiwg
cmVzdWx0X3N1bW1hcnksCkBAIC0xMzk5LDExICsxMzM0LDEzIEBAIGRlZiBydW4ocG9ydCwgb3B0
aW9ucywgYXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAgICAgICAgcHJpbnRlci5j
bGVhbnVwKCkKICAgICAgICAgcmV0dXJuIDAKIAorICAgIHJvdXRlcl9vYmogPSByb3V0ZXIuZ2V0
KHBvcnQsIG9wdGlvbnMpCisKICAgICAjIFdlIHdyYXAgYW55IHBhcnRzIG9mIHRoZSBydW4gdGhh
dCBhcmUgc2xvdyBvciBsaWtlbHkgdG8gcmFpc2UgZXhjZXB0aW9ucwogICAgICMgaW4gYSB0cnkv
ZmluYWxseSB0byBlbnN1cmUgdGhhdCB3ZSBjbGVhbiB1cCB0aGUgbG9nZ2luZyBjb25maWd1cmF0
aW9uLgogICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSAtMQogICAgIHRyeToKLSAgICAgICAg
dGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgICAg
IHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVyLCByb3V0ZXJf
b2JqKQogICAgICAgICB0ZXN0X3J1bm5lci5fcHJpbnRfY29uZmlnKCkKIAogICAgICAgICBwcmlu
dGVyLnByaW50X3VwZGF0ZSgiQ29sbGVjdGluZyB0ZXN0cyAuLi4iKQpAQCAtMTQzMiw2ICsxMzY5
LDcgQEAgZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1zeXMuc3Rk
ZXJyLAogICAgICAgICAgICAgX2xvZy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4aXQgc3Rh
dHVzOiAlZCIgJQogICAgICAgICAgICAgICAgICAgICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRz
KQogICAgIGZpbmFsbHk6CisgICAgICAgIHJvdXRlcl9vYmouY2xlYW51cCgpCiAgICAgICAgIHBy
aW50ZXIuY2xlYW51cCgpCiAKICAgICByZXR1cm4gbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cwpAQCAt
MTQ0MSw5ICsxMzc5LDE0IEBAIGRlZiBfc2V0X3VwX2Rlcml2ZWRfb3B0aW9ucyhwb3J0X29iaiwg
b3B0aW9ucyk6CiAgICAgIiIiU2V0cyB0aGUgb3B0aW9ucyB2YWx1ZXMgdGhhdCBkZXBlbmQgb24g
b3RoZXIgb3B0aW9ucyB2YWx1ZXMuIiIiCiAKICAgICBpZiBub3Qgb3B0aW9ucy5jaGlsZF9wcm9j
ZXNzZXM6Ci0gICAgICAgICMgRklYTUU6IEludmVzdGlnYXRlIHBlcmYvZmxha2luZXNzIGltcGFj
dCBvZiB1c2luZyBjcHVfY291bnQgKyAxLgotICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3Nl
cyA9IG9zLmVudmlyb24uZ2V0KCJXRUJLSVRfVEVTVF9DSElMRF9QUk9DRVNTRVMiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihwb3J0X29iai5k
ZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKKyAgICAgICAgaWYgb3B0aW9ucy53b3JrZXJzX2Fy
ZSA9PSAnaW5saW5lJzoKKyAgICAgICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gIjEi
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9IG9z
LmVudmlyb24uZ2V0KCJXRUJLSVRfVEVTVF9DSElMRF9QUk9DRVNTRVMiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIocG9ydF9vYmouZGVm
YXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCisgICAgZWxpZiBvcHRpb25zLndvcmtlcnNfYXJlID09
ICdpbmxpbmUnIGFuZCBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA+IDE6CisgICAgICAgIF9sb2cu
d2FybmluZygiLS13b3JrZXJzLWFyZT1pbmxpbmUgb3ZlcnJpZGVzIC0tY2hpbGQtcHJvY2Vzc2Vz
IikKKyAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSAiMSIKIAogICAgIGlmIG5vdCBv
cHRpb25zLmNvbmZpZ3VyYXRpb246CiAgICAgICAgIG9wdGlvbnMuY29uZmlndXJhdGlvbiA9IHBv
cnRfb2JqLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCkBAIC0xNDk0LDcgKzE0MzcsOSBAQCBkZWYg
X2NvbXBhdF9zaGltX29wdGlvbihvcHRpb25fbmFtZSwgKiprd2FyZ3MpOgogZGVmIHBhcnNlX2Fy
Z3MoYXJncz1Ob25lKToKICAgICAiIiJQcm92aWRlcyBhIGRlZmF1bHQgc2V0IG9mIGNvbW1hbmQg
bGluZSBhcmdzLgogCi0gICAgUmV0dXJucyBhIHR1cGxlIG9mIG9wdGlvbnMsIGFyZ3MgZnJvbSBv
cHRwYXJzZSIiIgorICAgIFJldHVybnMgYSB0dXBsZSBvZiBvcHRpb25zLCBhcmdzIGZyb20gb3B0
cGFyc2UuIiIiCisgICAgaWYgYXJncyBpcyBOb25lOgorICAgICAgICBhcmdzID0gc3lzLmFyZ3Zb
MTpdCiAKICAgICAjIEZJWE1FOiBBbGwgb2YgdGhlc2Ugb3B0aW9ucyBzaG91bGQgYmUgc3RvcmVk
IGNsb3NlciB0byB0aGUgY29kZSB3aGljaAogICAgICMgRklYTUU6IGFjdHVhbGx5IHVzZXMgdGhl
bS4gY29uZmlndXJhdGlvbl9vcHRpb25zIHNob3VsZCBtb3ZlCkBAIC0xNjY3LDkgKzE2MTIsMTMg
QEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oIi0tY2hpbGQtcHJvY2Vzc2VzIiwKICAgICAgICAgICAgIGhlbHA9Ik51bWJlciBvZiBEdW1w
UmVuZGVyVHJlZXMgdG8gcnVuIGluIHBhcmFsbGVsLiIpLAogICAgICAgICAjIEZJWE1FOiBEaXNw
bGF5IGRlZmF1bHQgbnVtYmVyIG9mIGNoaWxkIHByb2Nlc3NlcyB0aGF0IHdpbGwgcnVuLgorICAg
ICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13b3JrZXJzLWFyZSIsIGFjdGlvbj0ic3RvcmUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9InByb2Nlc3NlcyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iY29udHJvbHMgd29ya2VyIG1vZGVsLiBWYWxp
ZCB2YWx1ZXMgYXJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ2lubGluZScsICd0
aHJlYWRzJywgYW5kICdwcm9jZXNzZXMnIChkZWZhdWx0KS4iKSwKICAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oIi0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFsbGVsIiwKICAgICAgICAgICAg
IGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICBoZWxwPSJy
dW4gYWxsIHRlc3RzIGluIHBhcmFsbGVsIiksCisgICAgICAgICAgICBoZWxwPSJSdW4gYWxsIHRl
c3RzIGluIHBhcmFsbGVsIChkb24ndCBzaGFyZCB0aGVtKS4iKSwKICAgICAgICAgIyBGSVhNRTog
TmVlZCAtLWV4aXQtYWZ0ZXItbi1mYWlsdXJlcyBOCiAgICAgICAgICMgICAgICBFeGl0IGFmdGVy
IHRoZSBmaXJzdCBOIGZhaWx1cmVzIGluc3RlYWQgb2YgcnVubmluZyBhbGwgdGVzdHMKICAgICAg
ICAgIyBGSVhNRTogTmVlZCAtLWV4aXQtYWZ0ZXItbi1jcmFzaGVzIE4KQEAgLTE3MTYsMzAgKzE2
NjUsMjIgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgICAgIGhlbHA9Iklm
IHRydWUsIHVwbG9hZCBmdWxsIGpzb24gcmVzdWx0cyB0byBzZXJ2ZXIuIiksCiAgICAgXQogCisg
ICAgbXVsdGlfcHJvY2Vzc19vcHRpb25zID0gWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bigiLS1tYW5hZ2VyIiwgaGVscD0iVGhlIHZhbHVlIG9mIHRoZSBRdWV1ZSAiCisgICAgICAgICAg
ICAib2JqZWN0IHVzZWQgZm9yIG1lc3NhZ2Ugcm91dGluZyIpLAorICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbigiLS13b3JrZXItbnVtYmVyIiwgaGVscD0iV29ya2VyIG51bWJlciIpLAorICAg
IF0KKwogICAgIG9wdGlvbl9saXN0ID0gKGNvbmZpZ3VyYXRpb25fb3B0aW9ucyArIHByaW50X29w
dGlvbnMgKwogICAgICAgICAgICAgICAgICAgIGNocm9taXVtX29wdGlvbnMgKyByZXN1bHRzX29w
dGlvbnMgKyB0ZXN0X29wdGlvbnMgKwogICAgICAgICAgICAgICAgICAgIG1pc2Nfb3B0aW9ucyAr
IHJlc3VsdHNfanNvbl9vcHRpb25zICsKLSAgICAgICAgICAgICAgICAgICBvbGRfcnVuX3dlYmtp
dF90ZXN0c19jb21wYXQpCisgICAgICAgICAgICAgICAgICAgbXVsdGlfcHJvY2Vzc19vcHRpb25z
ICsgb2xkX3J1bl93ZWJraXRfdGVzdHNfY29tcGF0KQogICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRw
YXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9uX2xpc3QpCi0KLSAgICBvcHRpb25z
LCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCi0KLSAgICByZXR1cm4gb3B0
aW9ucywgYXJncwotCi0KLWRlZiBfbG9nX3dlZGdlZF90aHJlYWQodGhyZWFkKToKLSAgICAiIiJM
b2cgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHRocmVhZCBzdGF0ZS4iIiIKLSAgICBpZCA9
IHRocmVhZC5pZCgpCi0gICAgc3RhY2sgPSBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5maW5kX3Ro
cmVhZF9zdGFjayhpZCkKLSAgICBhc3NlcnQoc3RhY2sgaXMgbm90IE5vbmUpCi0gICAgX2xvZy5l
cnJvcigiIikKLSAgICBfbG9nLmVycm9yKCJ0aHJlYWQgJXMgKCVkKSBpcyB3ZWRnZWQiICUgKHRo
cmVhZC5nZXROYW1lKCksIGlkKSkKLSAgICBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5sb2dfc3Rh
Y2soc3RhY2spCi0gICAgX2xvZy5lcnJvcigiIikKKyAgICByZXR1cm4gb3B0aW9uX3BhcnNlci5w
YXJzZV9hcmdzKGFyZ3MpCiAKIAotZGVmIG1haW4oKToKLSAgICBvcHRpb25zLCBhcmdzID0gcGFy
c2VfYXJncygpCitkZWYgbWFpbihhcmd2PU5vbmUpOgorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJz
ZV9hcmdzKGFyZ3YpCiAgICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3JtLCBv
cHRpb25zKQogICAgIHJldHVybiBydW4ocG9ydF9vYmosIG9wdGlvbnMsIGFyZ3MpCiAKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IDI0OGEyOTFkMzkzMDMy
NWZjNzJjYmYwNmRmZDYyZTNhZDA2YTQyMmIuLjhjOWY1OGQ2ODQxYmE3NDE2ZjRmMzIyZmFkZTFh
NGJkNzM0ZjQ4NjggMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5w
eQpAQCAtNzIsMTUgKzcyLDE3IEBAIGRlZiBwYXNzaW5nX3J1bihleHRyYV9hcmdzPU5vbmUsIHBv
cnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLAogICAgICAgICBhcmdzLmV4dGVuZChb
Jy0tcGxhdGZvcm0nLCAndGVzdCddKQogICAgIGlmIG5vdCByZWNvcmRfcmVzdWx0czoKICAgICAg
ICAgYXJncy5hcHBlbmQoJy0tbm8tcmVjb3JkLXJlc3VsdHMnKQorICAgIGlmIG5vdCAnLS1jaGls
ZC1wcm9jZXNzZXMnIGluIGV4dHJhX2FyZ3M6CisgICAgICAgIGFyZ3MuZXh0ZW5kKFsnLS13b3Jr
ZXJzLWFyZScsICdpbmxpbmUnXSkKICAgICBhcmdzLmV4dGVuZChleHRyYV9hcmdzKQogICAgIGlm
IG5vdCB0ZXN0c19pbmNsdWRlZDoKICAgICAgICAgIyBXZSB1c2UgdGhlIGdsb2IgdG8gdGVzdCB0
aGF0IGdsb2JiaW5nIHdvcmtzLgogICAgICAgICBhcmdzLmV4dGVuZChbJ3Bhc3NlcycsCiAgICAg
ICAgICAgICAgICAgICAgICAnaHR0cC90ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICAnaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgJ3dlYnNvY2tl
dC90ZXN0cycsCiAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvKiddKQog
ICAgIG9wdGlvbnMsIHBhcnNlZF9hcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdzKGFy
Z3MpCi0gICAgaWYgbm90IHBvcnRfb2JqOgorICAgIGlmIHBvcnRfb2JqIGlzIE5vbmU6CiAgICAg
ICAgIHBvcnRfb2JqID0gcG9ydC5nZXQocG9ydF9uYW1lPW9wdGlvbnMucGxhdGZvcm0sIG9wdGlv
bnM9b3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyPU1vY2tVc2VyKCkp
CiAgICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMsIHBhcnNl
ZF9hcmdzKQpAQCAtOTIsNiArOTQsOCBAQCBkZWYgbG9nZ2luZ19ydW4oZXh0cmFfYXJncz1Ob25l
LCBwb3J0X29iaj1Ob25lLCB0ZXN0c19pbmNsdWRlZD1GYWxzZSk6CiAgICAgYXJncyA9IFsnLS1u
by1yZWNvcmQtcmVzdWx0cyddCiAgICAgaWYgbm90ICctLXBsYXRmb3JtJyBpbiBleHRyYV9hcmdz
OgogICAgICAgICBhcmdzLmV4dGVuZChbJy0tcGxhdGZvcm0nLCAndGVzdCddKQorICAgIGlmIG5v
dCAnLS1jaGlsZC1wcm9jZXNzZXMnIGluIGV4dHJhX2FyZ3M6CisgICAgICAgIGFyZ3MuZXh0ZW5k
KFsnLS13b3JrZXJzLWFyZScsICdpbmxpbmUnXSkKICAgICBhcmdzLmV4dGVuZChleHRyYV9hcmdz
KQogICAgIGlmIG5vdCB0ZXN0c19pbmNsdWRlZDoKICAgICAgICAgYXJncy5leHRlbmQoWydwYXNz
ZXMnLApAQCAtMTE2LDcgKzEyMCw3IEBAIGRlZiBnZXRfdGVzdHNfcnVuKGV4dHJhX2FyZ3M9Tm9u
ZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGZsYXR0ZW5fYmF0Y2hlcz1GYWxzZSk6CiAgICAgICAg
ICctLXByaW50JywgJ25vdGhpbmcnLAogICAgICAgICAnLS1wbGF0Zm9ybScsICd0ZXN0JywKICAg
ICAgICAgJy0tbm8tcmVjb3JkLXJlc3VsdHMnLAotICAgICAgICAnLS1jaGlsZC1wcm9jZXNzZXMn
LCAnMSddCisgICAgICAgICctLXdvcmtlcnMtYXJlJywgJ2lubGluZSddCiAgICAgYXJncy5leHRl
bmQoZXh0cmFfYXJncykKICAgICBpZiBub3QgdGVzdHNfaW5jbHVkZWQ6CiAgICAgICAgICMgTm90
IGluY2x1ZGluZyBodHRwIHRlc3RzIHNpbmNlIHRoZXkgZ2V0IHJ1biBvdXQgb2Ygb3JkZXIgKHRo
YXQKQEAgLTIxNCw3ICsyMTgsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgZGVmIHRlc3Rfa2V5Ym9hcmRfaW50ZXJydXB0KHNlbGYpOgogICAgICAgICAjIE5vdGUg
dGhhdCB0aGlzIGFsc28gdGVzdHMgcnVubmluZyBhIHRlc3QgbWFya2VkIGFzIFNLSVAgaWYKICAg
ICAgICAgIyB5b3Ugc3BlY2lmeSBpdCBleHBsaWNpdGx5LgotICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhLZXlib2FyZEludGVycnVwdCwgcGFzc2luZ19ydW4sCisgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBsb2dnaW5nX3J1biwKICAgICAgICAgICAgIFsnZmFp
bHVyZXMvZXhwZWN0ZWQva2V5Ym9hcmQuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQogCiAg
ICAgZGVmIHRlc3RfbGFzdF9yZXN1bHRzKHNlbGYpOgpAQCAtMjYxLDggKzI2NSwxNiBAQCBjbGFz
cyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9ydW5fZm9yY2Uo
c2VsZik6CiAgICAgICAgICMgVGhpcyByYWlzZXMgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugd2UgcnVu
Ci0gICAgICAgICMgZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0aW9uLmh0bWwsIHdoaWNoIGlzIG5v
cm1hbGx5IFNLSVBwZWQuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxv
Z2dpbmdfcnVuLCBbJy0tZm9yY2UnXSkKKyAgICAgICAgIyBmYWlsdXJlcy9leHBlY3RlZC9leGNl
cHRpb24uaHRtbCBhbmQKKyAgICAgICAgIyBmYWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZCwgd2hp
Y2ggYXJlIG5vcm1hbGx5IFNLSVBwZWQuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvZ2dp
bmdfcnVuKFsnLS1mb3JjZSddKQorICAgICAgICAgICAgdGVzdF9wYXNzZWQgPSBGYWxzZQorICAg
ICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHRlc3RfcGFzc2VkID0gVHJ1ZQor
ICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICB0ZXN0X3Bhc3Nl
ZCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RfcGFzc2VkKQogCiAgICAgZGVm
IHRlc3RfcnVuX3BhcnQoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IHdlIGFjdHVhbGx5IHNl
bGVjdCB0aGUgcmlnaHQgcGFydApAQCAtNDI0LDcgKzQzNiw2IEBAIGNsYXNzIFJlYmFzZWxpbmVU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGNv
ZGVjcy5vcGVuID0gb3JpZ2luYWxfb3BlbgogCi0KIGNsYXNzIFRlc3RSdW5uZXJXcmFwcGVyKHJ1
bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcik6CiAgICAgZGVmIF9nZXRfdGVzdF9pbmZvX2Zvcl9m
aWxlKHNlbGYsIHRlc3RfZmlsZSk6CiAgICAgICAgIHJldHVybiB0ZXN0X2ZpbGUKQEAgLTQzNiw3
ICs0NDcsOCBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ICAgIG1vY2tfcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lID0gbGFtYmRhIG5hbWU6IG5hbWUK
ICAgICAgICAgbW9ja19wb3J0LmZpbGVuYW1lX3RvX3VyaSA9IGxhbWJkYSBuYW1lOiBuYW1lCiAK
LSAgICAgICAgcnVubmVyID0gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKHBvcnQ9bW9ja19w
b3J0LCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCkpCisgICAgICAgIHJ1bm5lciA9IHJ1
bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcihwb3J0PW1vY2tfcG9ydCwKKyAgICAgICAgICAgIG9w
dGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSwgcm91dGVyPU1vY2soKSkKICAgICAgICAgZXhw
ZWN0ZWRfaHRtbCA9IHUiIiI8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPkxheW91dCBUZXN0
IFJlc3VsdHMgKHRpbWUpPC90aXRsZT4KQEAgLTQ1MCwyMCArNDYyLDEwIEBAIGNsYXNzIFRlc3RS
dW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgaHRtbCA9IHJ1bm5lci5fcmVz
dWx0c19odG1sKFsidGVzdF9wYXRoIl0sIHt9LCAiVGl0bGUiLCBvdmVycmlkZV90aW1lPSJ0aW1l
IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodG1sLCBleHBlY3RlZF9odG1sKQogCi0gICAg
ZGVmIHF1ZXVlX3RvX2xpc3Qoc2VsZiwgcXVldWUpOgotICAgICAgICBxdWV1ZV9saXN0ID0gW10K
LSAgICAgICAgd2hpbGUoVHJ1ZSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAg
cXVldWVfbGlzdC5hcHBlbmQocXVldWUuZ2V0X25vd2FpdCgpKQotICAgICAgICAgICAgZXhjZXB0
IFF1ZXVlLkVtcHR5OgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBxdWV1
ZV9saXN0Ci0KLSAgICBkZWYgdGVzdF9nZXRfdGVzdF9maWxlX3F1ZXVlKHNlbGYpOgorICAgIGRl
ZiB0ZXN0X3NoYXJkX3Rlc3RzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBfZ2V0X3Rlc3Rf
ZmlsZV9xdWV1ZSBpbiBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIgcmVhbGx5CiAgICAgICAg
ICMgcHV0IHRoZSBodHRwIHRlc3RzIGZpcnN0IGluIHRoZSBxdWV1ZS4KLSAgICAgICAgcnVubmVy
ID0gVGVzdFJ1bm5lcldyYXBwZXIocG9ydD1Nb2NrKCksIG9wdGlvbnM9TW9jaygpLCBwcmludGVy
PU1vY2soKSkKLSAgICAgICAgcnVubmVyLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJh
bGxlbCA9IEZhbHNlCisgICAgICAgIHJ1bm5lciA9IFRlc3RSdW5uZXJXcmFwcGVyKHBvcnQ9TW9j
aygpLCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCksIHJvdXRlcj1Nb2NrKCkpCiAKICAg
ICAgICAgdGVzdF9saXN0ID0gWwogICAgICAgICAgICJMYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVz
dHMvdW5pY29kZS5odG0iLApAQCAtNDg0LDE5ICs0ODYsMTUgQEAgY2xhc3MgVGVzdFJ1bm5lclRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sJywKICAgICAg
ICAgXSkKIAotICAgICAgICBydW5uZXIuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gMQotICAg
ICAgICB0ZXN0X3F1ZXVlX2Zvcl9zaW5nbGVfdGhyZWFkID0gcnVubmVyLl9nZXRfdGVzdF9maWxl
X3F1ZXVlKHRlc3RfbGlzdCkKLSAgICAgICAgcnVubmVyLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3Nl
cyA9IDIKLSAgICAgICAgdGVzdF9xdWV1ZV9mb3JfbXVsdGlfdGhyZWFkID0gcnVubmVyLl9nZXRf
dGVzdF9maWxlX3F1ZXVlKHRlc3RfbGlzdCkKLQotICAgICAgICBzaW5nbGVfdGhyZWFkX3Jlc3Vs
dHMgPSBzZWxmLnF1ZXVlX3RvX2xpc3QodGVzdF9xdWV1ZV9mb3Jfc2luZ2xlX3RocmVhZCkKLSAg
ICAgICAgbXVsdGlfdGhyZWFkX3Jlc3VsdHMgPSBzZWxmLnF1ZXVlX3RvX2xpc3QodGVzdF9xdWV1
ZV9mb3JfbXVsdGlfdGhyZWFkKQorICAgICAgICBzaW5nbGVfdGhyZWFkX3Jlc3VsdHMgPSBydW5u
ZXIuX3NoYXJkX3Rlc3RzKHRlc3RfbGlzdCwgVHJ1ZSkKKyAgICAgICAgbXVsdGlfdGhyZWFkX3Jl
c3VsdHMgPSBydW5uZXIuX3NoYXJkX3Rlc3RzKHRlc3RfbGlzdCwgRmFsc2UpCiAKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9faHR0cF9sb2NrIiwgc2luZ2xlX3RocmVhZF9yZXN1
bHRzWzBdWzBdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3RvX2h0
dHBfbG9jaywgc2V0KHNpbmdsZV90aHJlYWRfcmVzdWx0c1swXVsxXSkpCiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoInRlc3RzX3RvX2h0dHBfbG9jayIsIG11bHRpX3RocmVhZF9yZXN1bHRzWzBd
WzBdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3RvX2h0dHBfbG9j
aywgc2V0KG11bHRpX3RocmVhZF9yZXN1bHRzWzBdWzFdKSkKIAorCiBjbGFzcyBEcnlydW5UZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIEZJWE1FOiBpdCdzIGhhcmQgdG8ga25vdyB3aGlj
aCBwbGF0Zm9ybXMgYXJlIHNhZmUgdG8gdGVzdDsgdGhlCiAgICAgIyBjaHJvbWl1bSBwbGF0Zm9y
bXMgcmVxdWlyZSBhIGNocm9taXVtIGNoZWNrb3V0LCBhbmQgdGhlIG1hYyBwbGF0Zm9ybQpAQCAt
NTE3LDQxICs1MTUsNiBAQCBjbGFzcyBEcnlydW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1waXhlbC10ZXN0cydd
KSkKIAogCi1jbGFzcyBUZXN0VGhyZWFkKGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldhdGNoYWJs
ZVRocmVhZCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0ZWRfcXVldWUsIHN0b3BwaW5n
X3F1ZXVlKToKLSAgICAgICAgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxlVGhyZWFk
Ll9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX3N0YXJ0ZWRfcXVldWUgPSBzdGFydGVkX3F1
ZXVlCi0gICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlID0gc3RvcHBpbmdfcXVldWUKLSAgICAg
ICAgc2VsZi5fdGltZW91dCA9IEZhbHNlCi0gICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUgPSBR
dWV1ZS5RdWV1ZSgpCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICBzZWxmLl9jb3ZlcmVk
X3J1bigpCi0KLSAgICBkZWYgX2NvdmVyZWRfcnVuKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB0
aGlzIGlzIGEgc2VwYXJhdGUgcm91dGluZSB0byB3b3JrIGFyb3VuZCBhIGJ1ZwotICAgICAgICAj
IGluIGNvdmVyYWdlOiBzZWUgaHR0cDovL2JpdGJ1Y2tldC5vcmcvbmVkL2NvdmVyYWdlcHkvaXNz
dWUvODUuCi0gICAgICAgIHNlbGYuX3RocmVhZF9pZCA9IHRocmVhZC5nZXRfaWRlbnQoKQotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9zdGFydGVkX3F1ZXVlLnB1dCgnJykKLSAgICAg
ICAgICAgIG1zZyA9IHNlbGYuX3N0b3BwaW5nX3F1ZXVlLmdldCgpCi0gICAgICAgICAgICBpZiBt
c2cgPT0gJ0tleWJvYXJkSW50ZXJydXB0JzoKLSAgICAgICAgICAgICAgICByYWlzZSBLZXlib2Fy
ZEludGVycnVwdAotICAgICAgICAgICAgZWxpZiBtc2cgPT0gJ0V4Y2VwdGlvbic6Ci0gICAgICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCi0gICAgICAgICAgICBlbGlmIG1zZyA9PSAnVGlt
ZW91dCc6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdGltZW91dCA9IFRydWUKLSAgICAgICAgICAg
ICAgICBzZWxmLl90aW1lb3V0X3F1ZXVlLmdldCgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAg
ICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkKLQotICAgIGRlZiBuZXh0
X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3RpbWVvdXQ6Ci0gICAgICAgICAgICBz
ZWxmLl90aW1lb3V0X3F1ZXVlLnB1dCgnZG9uZScpCi0gICAgICAgICAgICByZXR1cm4gdGltZS50
aW1lKCkgLSAxMAotICAgICAgICByZXR1cm4gdGltZS50aW1lKCkKLQotCiBjbGFzcyBUZXN0SGFu
ZGxlcihsb2dnaW5nLkhhbmRsZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhc3RyZWFtKToK
ICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCkBAIC01NjEsNzAgKzUyNCw1
IEBAIGNsYXNzIFRlc3RIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiAgICAgICAgIHNlbGYuX3N0
cmVhbS53cml0ZShzZWxmLmZvcm1hdChyZWNvcmQpKQogCiAKLWNsYXNzIFdhaXRGb3JUaHJlYWRz
VG9GaW5pc2hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBjbGFzcyBNb2NrVGVzdFJ1bm5l
cihydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIpOgotICAgICAgICBkZWYgX19pbml0X18oc2Vs
Zik6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAg
ICAgICAgICBwYXNzCi0KLSAgICAgICAgZGVmIHVwZGF0ZV9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9z
dW1tYXJ5KToKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiBydW5fb25lX3RocmVhZChzZWxm
LCBtc2cpOgotICAgICAgICBydW5uZXIgPSBzZWxmLk1vY2tUZXN0UnVubmVyKCkKLSAgICAgICAg
c3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIHN0b3BwaW5nX3F1ZXVlID0g
UXVldWUuUXVldWUoKQotICAgICAgICBjaGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5n
X3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKLSAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKLSAg
ICAgICAgc3RhcnRlZF9tc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQotICAgICAgICBzdG9wcGlu
Z19xdWV1ZS5wdXQobXNnKQotICAgICAgICB0aHJlYWRzID0gW2NoaWxkX3RocmVhZF0KLSAgICAg
ICAgcmV0dXJuIHJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2godGhyZWFkcywgTm9u
ZSkKLQotICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgotICAgICAgICBpbnRlcnJ1cHRlZCA9IHNl
bGYucnVuX29uZV90aHJlYWQoJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0
ZWQpCi0KLSAgICBkZWYgdGVzdF9pbnRlcnJ1cHQoc2VsZik6Ci0gICAgICAgIGludGVycnVwdGVk
ID0gc2VsZi5ydW5fb25lX3RocmVhZCgnS2V5Ym9hcmRJbnRlcnJ1cHQnKQotICAgICAgICBzZWxm
LmFzc2VydFRydWUoaW50ZXJydXB0ZWQpCi0KLSAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgot
ICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCi0gICAgICAgIG9jLmNh
cHR1cmVfb3V0cHV0KCkKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFk
KCdUaW1lb3V0JykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKLSAgICAg
ICAgb2MucmVzdG9yZV9vdXRwdXQoKQotCi0gICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgot
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJ1bl9vbmVfdGhyZWFk
LCAnRXhjZXB0aW9uJykKLQotCi1jbGFzcyBTdGFuZGFsb25lRnVuY3Rpb25zVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfbG9nX3dlZGdlZF90aHJlYWQoc2VsZik6Ci0gICAg
ICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKLSAgICAgICAgb2MuY2FwdHVy
ZV9vdXRwdXQoKQotICAgICAgICBsb2dnZXIgPSBydW5fd2Via2l0X3Rlc3RzLl9sb2cKLSAgICAg
ICAgYXN0cmVhbSA9IGFycmF5X3N0cmVhbS5BcnJheVN0cmVhbSgpCi0gICAgICAgIGhhbmRsZXIg
PSBUZXN0SGFuZGxlcihhc3RyZWFtKQotICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVy
KQotCi0gICAgICAgIHN0YXJ0aW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBzdG9w
cGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAgICAgY2hpbGRfdGhyZWFkID0gVGVzdFRo
cmVhZChzdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVldWUpCi0gICAgICAgIGNoaWxkX3RocmVh
ZC5zdGFydCgpCi0gICAgICAgIG1zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCi0KLSAgICAgICAg
cnVuX3dlYmtpdF90ZXN0cy5fbG9nX3dlZGdlZF90aHJlYWQoY2hpbGRfdGhyZWFkKQotICAgICAg
ICBzdG9wcGluZ19xdWV1ZS5wdXQoJycpCi0gICAgICAgIGNoaWxkX3RocmVhZC5qb2luKHRpbWVv
dXQ9MS4wKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN0cmVhbS5lbXB0eSgpKQotICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKGNoaWxkX3RocmVhZC5pc0FsaXZlKCkpCi0gICAgICAgIG9j
LnJlc3RvcmVfb3V0cHV0KCkKLQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVu
aXR0ZXN0Lm1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73301</attachid>
            <date>2010-11-08 15:59:37 -0800</date>
            <delta_ts>2010-11-12 02:01:34 -0800</delta_ts>
            <desc>merge from trunk@71580</desc>
            <filename>bug-48820-20101108155936.patch</filename>
            <type>text/plain</type>
            <size>87348</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1ODllZGM5YTgyMzliOWRhZTBiZTIzNDhhY2IzY2VmM2Y4NWE1ZWZjLi5iMzYxOGY4
ZjdjZmEwOTFkOTdkZjc1YmZjYWFiYjQzZmE1N2FjZTIzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGFsbCBvZiB0aGUg
TlJXVCBtdWx0aXRocmVhZGluZyBpc3N1ZXMgYnkgbW92aW5nIHRvCisgICAgICAgIG11bHRpcHJv
Y2Vzcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3ByaW50aW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlci5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyX3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3Rlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5OgorCiAyMDEwLTExLTA4ICBEaXJrIFByYW5rZSA8
ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwu
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3Ry
ZWVfdGhyZWFkLnB5CmluZGV4IDlmMmRlN2U0NzZiN2I1YzBiN2YxMWVkYzQ2ZTg4MjU0NzRmM2Y4
NWYuLmRmNDNlNTljNzRjMWUzYTU4MmM2MGQyNGRhNGUyZWIzZWExMWZkMTcgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
LnB5CkBAIC00MiwxMyArNDIsMTUgQEAgaW1wb3J0IGNvZGVjcwogaW1wb3J0IGNvcHkKIGltcG9y
dCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCBRdWV1ZQogaW1wb3J0IHNpZ25hbAogaW1wb3J0
IHN5cwotaW1wb3J0IHRocmVhZAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKLWltcG9y
dCB0cmFjZWJhY2sKKworCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVzIGlt
cG9ydCB0ZXN0X3R5cGVfYmFzZQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBl
cyBpbXBvcnQgdGV4dF9kaWZmCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVz
IGltcG9ydCBpbWFnZV9kaWZmCiAKIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBpbXBvcnQgdGVzdF9y
ZXN1bHRzCkBAIC01NywyNiArNTksOSBAQCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtp
dHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS4iCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgImR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkIikKIAogCi1kZWYgZmluZF90aHJlYWRfc3RhY2so
aWQpOgotICAgICIiIlJldHVybnMgYSBzdGFjayBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBk
dW1wIGEgc3RhY2sgdHJhY2UgZm9yCi0gICAgdGhlIGdpdmVuIHRocmVhZCBpZCAob3IgTm9uZSBp
ZiB0aGUgaWQgaXMgbm90IGZvdW5kKS4iIiIKLSAgICBmb3IgdGhyZWFkX2lkLCBzdGFjayBpbiBz
eXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKToKLSAgICAgICAgaWYgdGhyZWFkX2lkID09IGlk
OgotICAgICAgICAgICAgcmV0dXJuIHN0YWNrCi0gICAgcmV0dXJuIE5vbmUKLQotCi1kZWYgbG9n
X3N0YWNrKHN0YWNrKToKLSAgICAiIiJMb2cgYSBzdGFjayB0cmFjZSB0byBsb2cuZXJyb3IoKS4i
IiIKLSAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiB0cmFjZWJhY2suZXh0
cmFjdF9zdGFjayhzdGFjayk6Ci0gICAgICAgIF9sb2cuZXJyb3IoJ0ZpbGU6ICIlcyIsIGxpbmUg
JWQsIGluICVzJyAlIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKSkKLSAgICAgICAgaWYgbGluZToK
LSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJXMnICUgbGluZS5zdHJpcCgpKQotCi0KIGRlZiBf
cHJvY2Vzc19vdXRwdXQocG9ydCwgb3B0aW9ucywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0
X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgIGNyYXNoLCB0aW1lb3V0LCB0ZXN0X3J1bl90aW1l
LCBhY3R1YWxfY2hlY2tzdW0sCi0gICAgICAgICAgICAgICAgICAgIG91dHB1dCwgZXJyb3IpOgor
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGVycm9yLCBuYW1lKToKICAgICAiIiJSZWNlaXZl
cyB0aGUgb3V0cHV0IGZyb20gYSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLCBzdWJqZWN0cyBpdCB0
byBhCiAgICAgbnVtYmVyIG9mIHRlc3RzLCBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgZmFpbHVyZSB0
eXBlcyB0aGUgdGVzdCBwcm9kdWNlZC4KIApAQCAtODQsNyArNjksNyBAQCBkZWYgX3Byb2Nlc3Nf
b3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLAog
ICAgICAgcG9ydDogcG9ydC1zcGVjaWZpYyBob29rcwogICAgICAgb3B0aW9uczogY29tbWFuZCBs
aW5lIG9wdGlvbnMgYXJndW1lbnQgZnJvbSBvcHRwYXJzZQogICAgICAgcHJvYzogYW4gYWN0aXZl
IER1bXBSZW5kZXJUcmVlIHByb2Nlc3MKLSAgICAgIHRlc3RfaW5mbzogT2JqZWN0IGNvbnRhaW5p
bmcgdGhlIHRlc3QgZmlsZW5hbWUsIHVyaSBhbmQgdGltZW91dAorICAgICAgdGVzdF9pbmZvOiBP
YmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSBhbmQgdGltZW91dAogICAgICAgdGVz
dF90eXBlczogbGlzdCBvZiB0ZXN0IHR5cGVzIHRvIHN1YmplY3QgdGhlIG91dHB1dCB0bwogICAg
ICAgdGVzdF9hcmdzOiBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIGVhY2ggdGVzdAogCkBAIC05
NSw4ICs4MCw5IEBAIGRlZiBfcHJvY2Vzc19vdXRwdXQocG9ydCwgb3B0aW9ucywgdGVzdF9pbmZv
LCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCiAgICAgIyBTb21lIHRlc3QgYXJncywgc3VjaCBhcyB0
aGUgaW1hZ2UgaGFzaCwgbWF5IGJlIGFkZGVkIG9yIGNoYW5nZWQgb24gYQogICAgICMgdGVzdC1i
eS10ZXN0IGJhc2lzLgogICAgIGxvY2FsX3Rlc3RfYXJncyA9IGNvcHkuY29weSh0ZXN0X2FyZ3Mp
Ci0KKyAgICBsb2NhbF90ZXN0X2FyZ3MudXJpID0gdGVzdF9pbmZvLnVyaQogICAgIGxvY2FsX3Rl
c3RfYXJncy5oYXNoID0gYWN0dWFsX2NoZWNrc3VtCisgICAgdGVzdF9uYW1lID0gcG9ydC5yZWxh
dGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5mby5maWxlbmFtZSkKIAogICAgIGlmIGNyYXNoOgog
ICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKSkKQEAg
LTEwNCwxOCArOTAsMTQgQEAgZGVmIF9wcm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0
X2luZm8sIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRl
c3RfZmFpbHVyZXMuRmFpbHVyZVRpbWVvdXQoKSkKIAogICAgIGlmIGNyYXNoOgotICAgICAgICBf
bG9nLmRlYnVnKCJTdGFja3RyYWNlIGZvciAlczpcbiVzIiAlICh0ZXN0X2luZm8uZmlsZW5hbWUs
IGVycm9yKSkKLSAgICAgICAgIyBTdHJpcCBvZmYgImZpbGU6Ly8iIHNpbmNlIFJlbGF0aXZlVGVz
dEZpbGVuYW1lIGV4cGVjdHMKLSAgICAgICAgIyBmaWxlc3lzdGVtIHBhdGhzLgotICAgICAgICBm
aWxlbmFtZSA9IG9zLnBhdGguam9pbihvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5mby5maWxlbmFtZSkpCisgICAg
ICAgIF9sb2cuZGVidWcoIiVzIFN0YWNrdHJhY2UgZm9yICVzOlxuJXMiICUgKG5hbWUsIHRlc3Rf
bmFtZSwgZXJyb3IpKQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5LCB0ZXN0X25hbWUpCiAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5z
cGxpdGV4dChmaWxlbmFtZSlbMF0gKyAiLXN0YWNrLnR4dCIKICAgICAgICAgcG9ydC5tYXliZV9t
YWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKVswXSkKICAgICAgICAgd2l0aCBj
b2RlY3Mub3BlbihmaWxlbmFtZSwgIndiIiwgInV0Zi04IikgYXMgZmlsZToKICAgICAgICAgICAg
IGZpbGUud3JpdGUoZXJyb3IpCiAgICAgZWxpZiBlcnJvcjoKLSAgICAgICAgX2xvZy5kZWJ1Zygi
UHJldmlvdXMgdGVzdCBvdXRwdXQgc3RkZXJyIGxpbmVzOlxuJXMiICUgZXJyb3IpCisgICAgICAg
IF9sb2cuZGVidWcoIiVzICVzIHN0ZGVyciBsaW5lczpcbiVzIiAlIChuYW1lLCB0ZXN0X25hbWUs
IGVycm9yKSkKIAogICAgICMgQ2hlY2sgdGhlIG91dHB1dCBhbmQgc2F2ZSB0aGUgcmVzdWx0cy4K
ICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKQEAgLTEzOCwzMiArMTIwLDEwIEBAIGRlZiBf
cHJvY2Vzc19vdXRwdXQocG9ydCwgb3B0aW9ucywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0
X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3RpbWVfZm9y
X2FsbF9kaWZmcywgdGltZV9mb3JfZGlmZnMpCiAKIAotZGVmIF9wYWRfdGltZW91dCh0aW1lb3V0
KToKLSAgICAiIiJSZXR1cm5zIGEgc2FmZSBtdWx0aXBsZSBvZiB0aGUgcGVyLXRlc3QgdGltZW91
dCB2YWx1ZSB0byB1c2UKLSAgICB0byBkZXRlY3QgaHVuZyB0ZXN0IHRocmVhZHMuCi0KLSAgICAi
IiIKLSAgICAjIFdoZW4gd2UncmUgcnVubmluZyBvbmUgdGVzdCBwZXIgRHVtcFJlbmRlclRyZWUg
cHJvY2Vzcywgd2UgY2FuCi0gICAgIyBlbmZvcmNlIGEgaGFyZCB0aW1lb3V0LiAgVGhlIER1bXBS
ZW5kZXJUcmVlIHdhdGNoZG9nIHVzZXMgMi41eAotICAgICMgdGhlIHRpbWVvdXQ7IHdlIHdhbnQg
dG8gYmUgbGFyZ2VyIHRoYW4gdGhhdC4KLSAgICByZXR1cm4gdGltZW91dCAqIDMKLQotCi1kZWYg
X21pbGxpc2Vjb25kc190b19zZWNvbmRzKG1zZWNzKToKLSAgICByZXR1cm4gZmxvYXQobXNlY3Mp
IC8gMTAwMC4wCi0KLQotZGVmIF9pbWFnZV9oYXNoKHRlc3RfaW5mbywgdGVzdF9hcmdzLCBvcHRp
b25zKToKLSAgICAiIiJSZXR1cm5zIHRoZSBpbWFnZSBoYXNoIG9mIHRoZSB0ZXN0IGlmIGl0J3Mg
bmVlZGVkLCBvdGhlcndpc2UgTm9uZS4iIiIKLSAgICBpZiAodGVzdF9hcmdzLm5ld19iYXNlbGlu
ZSBvciB0ZXN0X2FyZ3MucmVzZXRfcmVzdWx0cyBvciBub3Qgb3B0aW9ucy5waXhlbF90ZXN0cyk6
Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgcmV0dXJuIHRlc3RfaW5mby5pbWFnZV9oYXNoKCkK
LQotCiBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICIiIlRo
cmVhZCB3cmFwcGVyIGZvciBydW5uaW5nIGEgc2luZ2xlIHRlc3QgZmlsZS4iIiIKIAotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRl
c3RfYXJncyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9u
dW1iZXIsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzKToKICAgICAgICAgIiIiCiAg
ICAgICAgIEFyZ3M6CiAgICAgICAgICAgcG9ydDogb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNw
ZWNpZmljIGhvb2tzCkBAIC0xODEsNiArMTQxLDggQEAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0
aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IHRlc3RfdHlwZXMK
ICAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gdGVzdF9hcmdzCiAgICAgICAgIHNlbGYuX2RyaXZl
ciA9IE5vbmUKKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKKyAg
ICAgICAgc2VsZi5fbmFtZSA9ICd3b3JrZXItJWQnICUgd29ya2VyX251bWJlcgogCiAgICAgZGVm
IHJ1bihzZWxmKToKICAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQpAQCAtMTkyLDI1NSArMTU0
LDEzMSBAQCBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAg
ICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fdGVzdF9hcmdz
LnBuZ19wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fb3B0aW9ucykKICAgICAgICAgc2VsZi5fZHJpdmVyLnN0YXJ0KCkKLSAgICAgICAg
aW1hZ2VfaGFzaCA9IF9pbWFnZV9oYXNoKHRlc3RfaW5mbywgc2VsZi5fdGVzdF9hcmdzLCBzZWxm
Ll9vcHRpb25zKQogICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAgICAgIGNyYXNoLCB0
aW1lb3V0LCBhY3R1YWxfY2hlY2tzdW0sIG91dHB1dCwgZXJyb3IgPSBcCi0gICAgICAgICAgICBz
ZWxmLl9kcml2ZXIucnVuX3Rlc3QodGVzdF9pbmZvLnVyaS5zdHJpcCgpLCB0ZXN0X2luZm8udGlt
ZW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9oYXNoKQorICAg
ICAgICAgICAgc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5mby51cmksIHRlc3RfaW5mby50
aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5mby5pbWFn
ZV9jaGVja3N1bSkKICAgICAgICAgZW5kID0gdGltZS50aW1lKCkKICAgICAgICAgc2VsZi5fdGVz
dF9yZXN1bHQgPSBfcHJvY2Vzc19vdXRwdXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywKICAg
ICAgICAgICAgIHRlc3RfaW5mbywgc2VsZi5fdGVzdF90eXBlcywgc2VsZi5fdGVzdF9hcmdzLAog
ICAgICAgICAgICAgY3Jhc2gsIHRpbWVvdXQsIGVuZCAtIHN0YXJ0LAotICAgICAgICAgICAgYWN0
dWFsX2NoZWNrc3VtLCBvdXRwdXQsIGVycm9yKQorICAgICAgICAgICAgYWN0dWFsX2NoZWNrc3Vt
LCBvdXRwdXQsIGVycm9yLCBzZWxmLl9uYW1lKQogICAgICAgICBzZWxmLl9kcml2ZXIuc3RvcCgp
CiAKICAgICBkZWYgZ2V0X3Rlc3RfcmVzdWx0KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5f
dGVzdF9yZXN1bHQKIAogCi1jbGFzcyBXYXRjaGFibGVUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6
Ci0gICAgIiIiVGhpcyBjbGFzcyBhYnN0cmFjdHMgYW4gaW50ZXJmYWNlIHVzZWQgYnkKLSAgICBy
dW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoIGZv
ciB0aHJlYWQKLSAgICBtYW5hZ2VtZW50LiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAg
ICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9jYW5j
ZWxlZCA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gTm9uZQotICAgICAg
ICBzZWxmLl9uZXh0X3RpbWVvdXQgPSBOb25lCi0gICAgICAgIHNlbGYuX3RocmVhZF9pZCA9IE5v
bmUKLQotICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAgICIiIlNldCBhIGZsYWcgdGVsbGlu
ZyB0aGlzIHRocmVhZCB0byBxdWl0LiIiIgotICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRydWUK
LQotICAgIGRlZiBjbGVhcl9uZXh0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgICIiIk1hcmsgYSBm
bGFnIHRlbGxpbmcgdGhpcyB0aHJlYWQgdG8gc3RvcCBzZXR0aW5nIHRpbWVvdXRzLiIiIgotICAg
ICAgICBzZWxmLl90aW1lb3V0ID0gMAotCi0gICAgZGVmIGV4Y2VwdGlvbl9pbmZvKHNlbGYpOgot
ICAgICAgICAiIiJJZiBydW4oKSB0ZXJtaW5hdGVkIG9uIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiwg
cmV0dXJuIGl0IGhlcmUKLSAgICAgICAgKCh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKSB0dXBsZSku
Ci0gICAgICAgIFJldHVybnMgTm9uZSBpZiBydW4oKSB0ZXJtaW5hdGVkIG5vcm1hbGx5LiBNZWFu
dCB0byBiZSBjYWxsZWQgYWZ0ZXIKLSAgICAgICAgam9pbmluZyB0aGlzIHRocmVhZC4iIiIKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX2V4Y2VwdGlvbl9pbmZvCi0KLSAgICBkZWYgaWQoc2VsZik6Ci0g
ICAgICAgICIiIlJldHVybiBhIHRocmVhZCBpZGVudGlmaWVyLiIiIgotICAgICAgICByZXR1cm4g
c2VsZi5fdGhyZWFkX2lkCi0KLSAgICBkZWYgbmV4dF90aW1lb3V0KHNlbGYpOgotICAgICAgICAi
IiJSZXR1cm4gdGhlIHRpbWUgdGhlIHRlc3QgaXMgc3VwcG9zZWQgdG8gZmluaXNoIGJ5LiIiIgot
ICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0Ci0KLQotY2xhc3MgVGVzdFNoZWxsVGhy
ZWFkKFdhdGNoYWJsZVRocmVhZCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlv
bnMsIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1ZSwKLSAgICAgICAgICAgICAgICAg
dGVzdF90eXBlcywgdGVzdF9hcmdzKToKK2NsYXNzIFdvcmtlcihvYmplY3QpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0LCBjb250YWluZXIsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIpOgog
ICAgICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoaXMgRHVtcFJl
bmRlclRyZWUgdGhyZWFkLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgcG9ydDogaW50ZXJm
YWNlIHRvIHBvcnQtc3BlY2lmaWMgaG9va3MKLSAgICAgICAgICBvcHRpb25zOiBjb21tYW5kIGxp
bmUgb3B0aW9ucyBhcmd1bWVudCBmcm9tIG9wdHBhcnNlCi0gICAgICAgICAgZmlsZW5hbWVfbGlz
dF9xdWV1ZTogQSB0aHJlYWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IGNvbnRhaW5zIGxpc3RzCi0g
ICAgICAgICAgICAgIG9mIHR1cGxlcyBvZiAoZmlsZW5hbWUsIHVyaSkgcGFpcnMuCi0gICAgICAg
ICAgcmVzdWx0X3F1ZXVlOiBBIHRocmVhZCBzYWZlIFF1ZXVlIGNsYXNzIHRoYXQgd2lsbCBjb250
YWluCi0gICAgICAgICAgICAgIHNlcmlhbGl6ZWQgVGVzdFJlc3VsdCBvYmplY3RzLgotICAgICAg
ICAgIHRlc3RfdHlwZXM6IEEgbGlzdCBvZiBUZXN0VHlwZSBvYmplY3RzIHRvIHJ1biB0aGUgdGVz
dCBvdXRwdXQKLSAgICAgICAgICAgICAgYWdhaW5zdC4KLSAgICAgICAgICB0ZXN0X2FyZ3M6IEEg
VGVzdEFyZ3VtZW50cyBvYmplY3QgdG8gcGFzcyB0byBlYWNoIFRlc3RUeXBlLgorICAgICAgICAg
IGNvbnRhaW5lcjogY29udGFpbmVyIG9iamVjdCB0byByZWNlaXZlIHRlc3RzIGZyb20KKyAgICAg
ICAgICB3b3JrZXJfbnVtYmVyOiBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZwogCiAgICAgICAgICIi
IgotICAgICAgICBXYXRjaGFibGVUaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5f
Y2FuY2VsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9jb250YWluZXIgPSBjb250YWluZXIKICAg
ICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMK
LSAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZSA9IGZpbGVuYW1lX2xpc3RfcXVldWUK
LSAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gcmVzdWx0X3F1ZXVlCisgICAgICAgIHNlbGYu
X3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX25hbWUgPSAnd29y
a2VyLSVkJyAlIHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSA9IHNlbGYu
X29wdGlvbnMuYmF0Y2hfc2l6ZQorICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKwogICAg
ICAgICBzZWxmLl9maWxlbmFtZV9saXN0ID0gW10KLSAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9
IHRlc3RfdHlwZXMKLSAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gdGVzdF9hcmdzCisgICAgICAg
IHNlbGYuX3Rlc3RfdHlwZXMgPSBbXQorICAgICAgICBmb3IgY2xzIGluIHNlbGYuX3Rlc3RfdHlw
ZV9jbGFzc2VzKCk6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLmFwcGVuZChjbHMoc2Vs
Zi5fcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9v
cHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKKyAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gc2Vs
Zi5fdGVzdF9hcmdzKHdvcmtlcl9udW1iZXIpCiAgICAgICAgIHNlbGYuX2RyaXZlciA9IE5vbmUK
LSAgICAgICAgc2VsZi5fdGVzdF9ncm91cF90aW1pbmdfc3RhdHMgPSB7fQotICAgICAgICBzZWxm
Ll90ZXN0X3Jlc3VsdHMgPSBbXQotICAgICAgICBzZWxmLl9udW1fdGVzdHMgPSAwCi0gICAgICAg
IHNlbGYuX3N0YXJ0X3RpbWUgPSAwCi0gICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IDAKLSAgICAg
ICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxzZQotICAgICAgICBzZWxmLl9odHRwX2xvY2tf
d2FpdF9iZWdpbiA9IDAKLSAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID0gMAotCi0g
ICAgICAgICMgQ3VycmVudCBncm91cCBvZiB0ZXN0cyB3ZSdyZSBydW5uaW5nLgotICAgICAgICBz
ZWxmLl9jdXJyZW50X2dyb3VwID0gTm9uZQotICAgICAgICAjIE51bWJlciBvZiB0ZXN0cyBpbiBz
ZWxmLl9jdXJyZW50X2dyb3VwLgotICAgICAgICBzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVudF9n
cm91cCA9IE5vbmUKLSAgICAgICAgIyBUaW1lIGF0IHdoaWNoIHdlIHN0YXJ0ZWQgcnVubmluZyB0
ZXN0cyBmcm9tIHNlbGYuX2N1cnJlbnRfZ3JvdXAuCi0gICAgICAgIHNlbGYuX2N1cnJlbnRfZ3Jv
dXBfc3RhcnRfdGltZSA9IE5vbmUKLQotICAgIGRlZiBnZXRfdGVzdF9ncm91cF90aW1pbmdfc3Rh
dHMoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgdGVzdCBn
cm91cCB0byBhIHR1cGxlIG9mCi0gICAgICAgIChudW1iZXIgb2YgdGVzdHMgaW4gdGhhdCBncm91
cCwgdGltZSB0byBydW4gdGhlIHRlc3RzKSIiIgotICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9n
cm91cF90aW1pbmdfc3RhdHMKLQotICAgIGRlZiBnZXRfdGVzdF9yZXN1bHRzKHNlbGYpOgotICAg
ICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHRlc3RzIHJ1biBvbiB0aGlzIHRocmVhZC4K
LQotICAgICAgICBUaGlzIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHBlci10aHJlYWQgc3RhdGlzdGlj
cy4KLQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfcmVzdWx0cwotCi0g
ICAgZGVmIGdldF90b3RhbF90aW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gbWF4KHNlbGYuX3N0
b3BfdGltZSAtIHNlbGYuX3N0YXJ0X3RpbWUgLQotICAgICAgICAgICAgICAgICAgIHNlbGYuX2h0
dHBfbG9ja193YWl0X3RpbWUoKSwgMC4wKQotCi0gICAgZGVmIGdldF9udW1fdGVzdHMoc2VsZik6
Ci0gICAgICAgIHJldHVybiBzZWxmLl9udW1fdGVzdHMKLQotICAgIGRlZiBydW4oc2VsZik6Ci0g
ICAgICAgICIiIkRlbGVnYXRlIG1haW4gd29yayB0byBhIGhlbHBlciBtZXRob2QgYW5kIHdhdGNo
IGZvciB1bmNhdWdodAotICAgICAgICBleGNlcHRpb25zLiIiIgotICAgICAgICBzZWxmLl9jb3Zl
cmVkX3J1bigpCi0KLSAgICBkZWYgX2NvdmVyZWRfcnVuKHNlbGYpOgotICAgICAgICAjIEZJWE1F
OiB0aGlzIGlzIGEgc2VwYXJhdGUgcm91dGluZSB0byB3b3JrIGFyb3VuZCBhIGJ1ZwotICAgICAg
ICAjIGluIGNvdmVyYWdlOiBzZWUgaHR0cDovL2JpdGJ1Y2tldC5vcmcvbmVkL2NvdmVyYWdlcHkv
aXNzdWUvODUuCi0gICAgICAgIHNlbGYuX3RocmVhZF9pZCA9IHRocmVhZC5nZXRfaWRlbnQoKQot
ICAgICAgICBzZWxmLl9zdGFydF90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5fbnVt
X3Rlc3RzID0gMAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCclcyBzdGFy
dGluZycgJSAoc2VsZi5nZXROYW1lKCkpKQotICAgICAgICAgICAgc2VsZi5fcnVuKHRlc3RfcnVu
bmVyPU5vbmUsIHJlc3VsdF9zdW1tYXJ5PU5vbmUpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCcl
cyBkb25lICglZCB0ZXN0cyknICUgKHNlbGYuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLmdldF9udW1fdGVzdHMoKSkpCi0gICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVy
cnVwdDoKLSAgICAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkK
LSAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIGludGVycnVwdGVkIiAlIHNlbGYuZ2V0TmFtZSgp
KQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAjIFNhdmUgdGhlIGV4Y2VwdGlvbiBmb3Ig
b3VyIGNhbGxlciB0byBzZWUuCi0gICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5
cy5leGNfaW5mbygpCi0gICAgICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSB0aW1lLnRpbWUoKQot
ICAgICAgICAgICAgX2xvZy5lcnJvcignJXMgZHlpbmcsIGV4Y2VwdGlvbiByYWlzZWQnICUgc2Vs
Zi5nZXROYW1lKCkpCi0KLSAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkKLQot
ICAgIGRlZiBydW5faW5fbWFpbl90aHJlYWQoc2VsZiwgdGVzdF9ydW5uZXIsIHJlc3VsdF9zdW1t
YXJ5KToKLSAgICAgICAgIiIiVGhpcyBob29rIGFsbG93cyB1cyB0byBydW4gdGhlIHRlc3RzIGZy
b20gdGhlIG1haW4gdGhyZWFkIGlmCi0gICAgICAgIC0tbnVtLXRlc3Qtc2hlbGxzPT0xLCBpbnN0
ZWFkIG9mIGhhdmluZyB0byBhbHdheXMgcnVuIHR3byBvciBtb3JlCi0gICAgICAgIHRocmVhZHMu
IFRoaXMgYWxsb3dzIHVzIHRvIGRlYnVnIHRoZSB0ZXN0IGhhcm5lc3Mgd2l0aG91dCBoYXZpbmcg
dG8KLSAgICAgICAgZG8gbXVsdGktdGhyZWFkZWQgZGVidWdnaW5nLiIiIgotICAgICAgICBzZWxm
Ll9ydW4odGVzdF9ydW5uZXIsIHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgZGVmIGNhbmNlbChzZWxm
KToKLSAgICAgICAgIiIiQ2xlYW4gdXAgaHR0cCBsb2NrIGFuZCBzZXQgYSBmbGFnIHRlbGxpbmcg
dGhpcyB0aHJlYWQgdG8gcXVpdC4iIiIKLSAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhf
bG9jaygpCi0gICAgICAgIFdhdGNoYWJsZVRocmVhZC5jYW5jZWwoc2VsZikKLQotICAgIGRlZiBu
ZXh0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgdGltZSB0aGUgdGVzdCBp
cyBzdXBwb3NlZCB0byBmaW5pc2ggYnkuIiIiCi0gICAgICAgIGlmIHNlbGYuX25leHRfdGltZW91
dDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVvdXQgKyBzZWxmLl9odHRwX2xv
Y2tfd2FpdF90aW1lKCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dAotCi0gICAg
ZGVmIF9odHRwX2xvY2tfd2FpdF90aW1lKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHRp
bWUgd2hhdCBodHRwIGxvY2tpbmcgdGFrZXMuIiIiCi0gICAgICAgIGlmIHNlbGYuX2h0dHBfbG9j
a193YWl0X2JlZ2luID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBpZiBzZWxm
Ll9odHRwX2xvY2tfd2FpdF9lbmQgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUo
KSAtIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luCi0gICAgICAgIHJldHVybiBzZWxmLl9odHRw
X2xvY2tfd2FpdF9lbmQgLSBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbgotCi0gICAgZGVmIF9y
dW4oc2VsZiwgdGVzdF9ydW5uZXIsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIiIiTWFpbiB3
b3JrIGVudHJ5IHBvaW50IG9mIHRoZSB0aHJlYWQuIEJhc2ljYWxseSB3ZSBwdWxsIHVybHMgZnJv
bSB0aGUKLSAgICAgICAgZmlsZW5hbWUgcXVldWUgYW5kIHJ1biB0aGUgdGVzdHMgdW50aWwgd2Ug
cnVuIG91dCBvZiB1cmxzLgotCi0gICAgICAgIElmIHRlc3RfcnVubmVyIGlzIG5vdCBOb25lLCB0
aGVuIHdlIGNhbGwgdGVzdF9ydW5uZXIuVXBkYXRlU3VtbWFyeSgpCi0gICAgICAgIHdpdGggdGhl
IHJlc3VsdHMgb2YgZWFjaCB0ZXN0LiIiIgotICAgICAgICBiYXRjaF9zaXplID0gc2VsZi5fb3B0
aW9ucy5iYXRjaF9zaXplCi0gICAgICAgIGJhdGNoX2NvdW50ID0gMAotCi0gICAgICAgICMgQXBw
ZW5kIHRlc3RzIHdlJ3JlIHJ1bm5pbmcgdG8gdGhlIGV4aXN0aW5nIHRlc3RzX3J1bi50eHQgZmls
ZS4KLSAgICAgICAgIyBUaGlzIGlzIGNyZWF0ZWQgaW4gcnVuX3dlYmtpdF90ZXN0cy5weTpfUHJl
cGFyZUxpc3RzQW5kUHJpbnRPdXRwdXQuCiAgICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IG9z
LnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RzX3J1bi50eHQiKQotICAgICAgICB0
ZXN0c19ydW5fZmlsZSA9IGNvZGVjcy5vcGVuKHRlc3RzX3J1bl9maWxlbmFtZSwgImEiLCAidXRm
LTgiKQotCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBpZiBzZWxmLl9jYW5jZWxl
ZDoKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUZXN0aW5nIGNhbmNlbGxlZCcpCi0gICAg
ICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAgIHJldHVy
bgotCi0gICAgICAgICAgICBpZiBsZW4oc2VsZi5fZmlsZW5hbWVfbGlzdCkgaXMgMDoKLSAgICAg
ICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X2dyb3VwIGlzIG5vdCBOb25lOgotICAgICAgICAg
ICAgICAgICAgICBzZWxmLl90ZXN0X2dyb3VwX3RpbWluZ19zdGF0c1tzZWxmLl9jdXJyZW50X2dy
b3VwXSA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9udW1fdGVzdHNfaW5fY3Vy
cmVudF9ncm91cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnRpbWUoKSAtIHNlbGYu
X2N1cnJlbnRfZ3JvdXBfc3RhcnRfdGltZSkKLQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9ncm91cCwgc2VsZi5fZmlsZW5hbWVfbGlzdCA9
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3RfcXVldWUuZ2V0
X25vd2FpdCgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgotICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKLSAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICAgICAg
dGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4KLQotICAg
ICAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfZ3JvdXAgPT0gInRlc3RzX3RvX2h0dHBfbG9j
ayI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKCkK
LSAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgotICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKLQotICAgICAgICAgICAgICAg
IHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2dyb3VwID0gbGVuKHNlbGYuX2ZpbGVuYW1lX2xp
c3QpCi0gICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9ncm91cF9zdGFydF90aW1lID0gdGlt
ZS50aW1lKCkKLQotICAgICAgICAgICAgdGVzdF9pbmZvID0gc2VsZi5fZmlsZW5hbWVfbGlzdC5w
b3AoKQotCi0gICAgICAgICAgICAjIFdlIGhhdmUgYSB1cmwsIHJ1biB0ZXN0cy4KLSAgICAgICAg
ICAgIGJhdGNoX2NvdW50ICs9IDEKLSAgICAgICAgICAgIHNlbGYuX251bV90ZXN0cyArPSAxCi0g
ICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3Rfc2luZ2x5KHRlc3RfaW5mbykKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3QodGVzdF9pbmZvKQot
Ci0gICAgICAgICAgICBmaWxlbmFtZSA9IHRlc3RfaW5mby5maWxlbmFtZQotICAgICAgICAgICAg
dGVzdHNfcnVuX2ZpbGUud3JpdGUoZmlsZW5hbWUgKyAiXG4iKQotICAgICAgICAgICAgaWYgcmVz
dWx0LmZhaWx1cmVzOgotICAgICAgICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgRHVtcFJlbmRl
clRyZWUgaWYgd2UgbmVlZCB0by4KLSAgICAgICAgICAgICAgICBpZiBsZW4oWzEgZm9yIGYgaW4g
cmVzdWx0LmZhaWx1cmVzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBmLnNob3VsZF9raWxs
X2R1bXBfcmVuZGVyX3RyZWUoKV0pOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1
bXBfcmVuZGVyX3RyZWUoKQotICAgICAgICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBiYXRjaCBj
b3VudCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgotICAgICAgICAgICAgICAgICAgICBi
YXRjaF9jb3VudCA9IDAKLSAgICAgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBtZXNzYWdl
KHMpLgotICAgICAgICAgICAgICAgIGVycm9yX3N0ciA9ICdcbicuam9pbihbJyAgJyArIGYubWVz
c2FnZSgpIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiBpbiBy
ZXN1bHQuZmFpbHVyZXNdKQotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIGZhaWxl
ZDpcbiVzIiAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9zdHIpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuZ2V0TmFtZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZp
bGVuYW1lKSkpCi0gICAgICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUucHV0KHJlc3VsdC5kdW1w
cygpKQotCi0gICAgICAgICAgICBpZiBiYXRjaF9zaXplID4gMCBhbmQgYmF0Y2hfY291bnQgPj0g
YmF0Y2hfc2l6ZToKLSAgICAgICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0
IGNvdW50LgotICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCi0g
ICAgICAgICAgICAgICAgYmF0Y2hfY291bnQgPSAwCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9m
aWxlID0gY29kZWNzLm9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAiYSIsICJ1dGYtOCIpCisKKyAg
ICBkZWYgaGFuZGxlX3N0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3AgcmVjZWl2ZWQgLSBubyBt
b3JlIHRlc3RzIHRvIHJ1bi4iIiIKKyAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVl
KCkKKyAgICAgICAgaWYgc2VsZi5fdGVzdHNfcnVuX2ZpbGU6CisgICAgICAgICAgICBzZWxmLl90
ZXN0c19ydW5fZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9
IE5vbmUKKworICAgIGRlZiBfdGVzdF9hcmdzKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAg
ICAiIiJSZXR1cm5zIHRoZSB0dXBsZSBvZiBhcmd1bWVudHMgZm9yIHRlc3RzIGFuZCBmb3IgRHVt
cFJlbmRlclRyZWUuIiIiCisgICAgICAgIHRlc3RfYXJncyA9IHRlc3RfdHlwZV9iYXNlLlRlc3RB
cmd1bWVudHMoKQorICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGggPSBOb25lCisgICAgICAgIGlm
IHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBwbmdfcGF0aCA9IG9zLnBh
dGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInBuZ19yZXN1bHQlcy5wbmciICUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIpCisgICAgICAgICAgICB0
ZXN0X2FyZ3MucG5nX3BhdGggPSBwbmdfcGF0aAorICAgICAgICB0ZXN0X2FyZ3MubmV3X2Jhc2Vs
aW5lID0gc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUKKyAgICAgICAgdGVzdF9hcmdzLnJlc2V0
X3Jlc3VsdHMgPSBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMKKworICAgICAgICByZXR1cm4g
dGVzdF9hcmdzCisKKyAgICBkZWYgX25lZWRzX2ltYWdlX2hhc2goc2VsZik6CisgICAgICAgICIi
IlJldHVybnMgdGhlIGltYWdlIGhhc2ggb2YgdGhlIHRlc3QgaWYgaXQncyBuZWVkZWQsIG90aGVy
d2lzZSBOb25lLiIiIgorICAgICAgICByZXR1cm4gKHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5l
IG9yIHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cyBvcgorICAgICAgICAgICAgICAgIHNlbGYu
X29wdGlvbnMucGl4ZWxfdGVzdHMpCisKKyAgICBkZWYgX3Rlc3RfdHlwZV9jbGFzc2VzKHNlbGYp
OgorICAgICAgICBjbGFzc2VzID0gW3RleHRfZGlmZi5UZXN0VGV4dERpZmZdCisgICAgICAgIGlm
IHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZChp
bWFnZV9kaWZmLkltYWdlRGlmZikKKyAgICAgICAgcmV0dXJuIGNsYXNzZXMKKworICAgIGRlZiBy
dW5fdGVzdChzZWxmLCB0ZXN0X2luZm8pOgorICAgICAgICBmaWxlbmFtZSA9IHRlc3RfaW5mby5m
aWxlbmFtZQorICAgICAgICB0ZXN0X2luZm8udXJpID0gc2VsZi5fcG9ydC5maWxlbmFtZV90b191
cmkoZmlsZW5hbWUpCisgICAgICAgIGlmIHNlbGYuX25lZWRzX2ltYWdlX2hhc2goKToKKyAgICAg
ICAgICAgIHRlc3RfaW5mby5pbWFnZV9jaGVja3N1bSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hl
Y2tzdW0oZmlsZW5hbWUpCisgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ICs9IDEKKworICAgICAg
ICAjIFdlIGdpdmUgRFJUIHNvbWUgZXh0cmEgdGltZSB0byBkZXRlY3QgYSB0aW1lb3V0LCBhbmQg
dGhlbgorICAgICAgICAjIGdpdmUgb3VyIHdhdGNoZG9nIHRocmVhZCBhIHNpbWlsYXIgYW1vdW50
IHRvIGRldGVjdCBhIGh1bmcKKyAgICAgICAgIyBEUlQuIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGNv
bnZlcnQgdGhlIHRlc3QgdGltZW91dCBmcm9tIGEKKyAgICAgICAgIyBzdHJpbmcgdmFsdWUgaW4g
bWlsbGlzZWNvbmRzIHRvIGEgZmxvYXQgZm9yIFB5dGhvbi4KKyAgICAgICAgcGFkZGluZyA9IDMu
MAorICAgICAgICB0aHJlYWRfdGltZW91dCA9IGZsb2F0KHRlc3RfaW5mby50aW1lb3V0KSAvIDEw
MDAuMCArIHBhZGRpbmcKIAotICAgICAgICAgICAgaWYgdGVzdF9ydW5uZXI6Ci0gICAgICAgICAg
ICAgICAgdGVzdF9ydW5uZXIudXBkYXRlX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCi0KLSAgICBk
ZWYgX3J1bl90ZXN0X3NpbmdseShzZWxmLCB0ZXN0X2luZm8pOgorICAgICAgICBzdGFydCA9IHRp
bWUudGltZSgpCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKKyAgICAgICAg
ICAgIHNlbGYuX2NvbnRhaW5lci5zdGFydGVkX3Rlc3QodGVzdF9pbmZvLCB0aHJlYWRfdGltZW91
dCArIHBhZGRpbmcpCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl9hbm90
aGVyX3RocmVhZCh0ZXN0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltZW91dCkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHNlbGYuX2NvbnRhaW5lci5zdGFydGVkX3Rlc3QodGVzdF9pbmZvLCB0aHJlYWRfdGlt
ZW91dCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X2luX3RoaXNfdGhyZWFk
KHRlc3RfaW5mbykKKworICAgICAgICBzZWxmLl9jb250YWluZXIuZmluaXNoZWRfdGVzdChyZXN1
bHQsIHRpbWUudGltZSgpIC0gc3RhcnQpCisKKyAgICAgICAgaWYgc2VsZi5fYmF0Y2hfc2l6ZSA+
IDAgYW5kIHNlbGYuX2JhdGNoX2NvdW50ID49IHNlbGYuX2JhdGNoX3NpemU6CisgICAgICAgICAg
ICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50LgorICAgICAgICAgICAgc2VsZi5f
a2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0g
MAorCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLndyaXRlKGZpbGVuYW1lICsgIlxuIikK
KyAgICAgICAgaWYgcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgIyBDaGVjayBhbmQga2ls
bCBEdW1wUmVuZGVyVHJlZSBpZiB3ZSBuZWVkIHRvLgorICAgICAgICAgICAgaWYgbGVuKFsxIGZv
ciBmIGluIHJlc3VsdC5mYWlsdXJlcworICAgICAgICAgICAgICAgICAgICBpZiBmLnNob3VsZF9r
aWxsX2R1bXBfcmVuZGVyX3RyZWUoKV0pOgorICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVt
cF9yZW5kZXJfdHJlZSgpCisgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2ggY291bnQg
c2luY2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KKyAgICAgICAgICAgICAgICBzZWxmLl9iYXRj
aF9jb3VudCA9IDAKKyAgICAgICAgICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCisg
ICAgICAgICAgICBlcnJvcl9zdHIgPSAnXG4nLmpvaW4oWycgICcgKyBmLm1lc3NhZ2UoKSBmb3IK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgaW4gcmVzdWx0LmZhaWx1cmVz
XSkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIGZhaWxlZDpcbiVzIiAlIChzZWxmLl9u
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2Zp
bGVuYW1lKGZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX3N0cikpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNl
bGYuX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUoZmlsZW5hbWUpKSkKKworICAgIGRlZiBfcnVuX3Rlc3RfaW5fYW5vdGhlcl90
aHJlYWQoc2VsZiwgdGVzdF9pbmZvLCB0aHJlYWRfdGltZW91dCk6CiAgICAgICAgICIiIlJ1biBh
IHRlc3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGVuZm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4K
IAogICAgICAgICBTaW5jZSB3ZSBjYW4gb25seSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEg
dGhyZWFkLCBub3QgYW55IGludGVybmFsCkBAIC00NTIsMTkgKzI5MCwxNiBAQCBjbGFzcyBUZXN0
U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKIAogICAgICAgICBSZXR1cm5zOgogICAgICAg
ICAgIEEgVGVzdFJlc3VsdAotCiAgICAgICAgICIiIgogICAgICAgICB3b3JrZXIgPSBTaW5nbGVU
ZXN0VGhyZWFkKHNlbGYuX3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93
b3JrZXJfbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5m
bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfYXJncykKIAogICAg
ICAgICB3b3JrZXIuc3RhcnQoKQogCi0gICAgICAgIHRocmVhZF90aW1lb3V0ID0gX21pbGxpc2Vj
b25kc190b19zZWNvbmRzKAotICAgICAgICAgICAgX3BhZF90aW1lb3V0KGludCh0ZXN0X2luZm8u
dGltZW91dCkpKQotICAgICAgICB0aHJlYWQuX25leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsg
dGhyZWFkX3RpbWVvdXQKICAgICAgICAgd29ya2VyLmpvaW4odGhyZWFkX3RpbWVvdXQpCiAgICAg
ICAgIGlmIHdvcmtlci5pc0FsaXZlKCk6CiAgICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1cm5l
ZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwgcnVubmluZywgdGhlCkBAIC00ODcsMTEgKzMyMiwxMiBA
QCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgICAgIF9s
b2cuZXJyb3IoJ0Nhbm5vdCBnZXQgcmVzdWx0cyBvZiB0ZXN0OiAlcycgJQogICAgICAgICAgICAg
ICAgICAgICAgICB0ZXN0X2luZm8uZmlsZW5hbWUpCiAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0
X3Jlc3VsdHMuVGVzdFJlc3VsdCh0ZXN0X2luZm8uZmlsZW5hbWUsIGZhaWx1cmVzPVtdLAotICAg
ICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9MCwgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzPTAs
IHRpbWVfZm9yX2RpZmZzPTApCisgICAgICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0b3Rh
bF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwKKyAgICAgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmcz17
fSkKIAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRl
c3RfaW5mbyk6CisgICAgZGVmIF9ydW5fdGVzdF9pbl90aGlzX3RocmVhZChzZWxmLCB0ZXN0X2lu
Zm8pOgogICAgICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdCBmaWxlIHVzaW5nIGEgc2hhcmVkIER1
bXBSZW5kZXJUcmVlIHByb2Nlc3MuCiAKICAgICAgICAgQXJnczoKQEAgLTUwMCwyOCArMzM2LDE4
IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICBSZXR1
cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fZW5z
dXJlX2R1bXBfcmVuZGVyX3RyZWVfaXNfcnVubmluZygpCi0gICAgICAgICMgVGhlIHBpeGVsX2hh
c2ggaXMgdXNlZCB0byBhdm9pZCBkb2luZyBhbiBpbWFnZSBkdW1wIGlmIHRoZQotICAgICAgICAj
IGNoZWNrc3VtcyBtYXRjaCwgc28gaXQgc2hvdWxkIGJlIHNldCB0byBhIGJsYW5rIHZhbHVlIGlm
IHdlCi0gICAgICAgICMgYXJlIGdlbmVyYXRpbmcgYSBuZXcgYmFzZWxpbmUuICAoT3RoZXJ3aXNl
LCBhbiBpbWFnZSBmcm9tIGEKLSAgICAgICAgIyBwcmV2aW91cyBydW4gd2lsbCBiZSBjb3BpZWQg
aW50byB0aGUgYmFzZWxpbmUuKQotICAgICAgICBpbWFnZV9oYXNoID0gX2ltYWdlX2hhc2godGVz
dF9pbmZvLCBzZWxmLl90ZXN0X2FyZ3MsIHNlbGYuX29wdGlvbnMpCi0gICAgICAgIHN0YXJ0ID0g
dGltZS50aW1lKCkKLQotICAgICAgICB0aHJlYWRfdGltZW91dCA9IF9taWxsaXNlY29uZHNfdG9f
c2Vjb25kcygKLSAgICAgICAgICAgICBfcGFkX3RpbWVvdXQoaW50KHRlc3RfaW5mby50aW1lb3V0
KSkpCi0gICAgICAgIHNlbGYuX25leHRfdGltZW91dCA9IHN0YXJ0ICsgdGhyZWFkX3RpbWVvdXQK
IAorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAgICAgIGNyYXNoLCB0aW1lb3V0LCBh
Y3R1YWxfY2hlY2tzdW0sIG91dHB1dCwgZXJyb3IgPSBcCi0gICAgICAgICAgIHNlbGYuX2RyaXZl
ci5ydW5fdGVzdCh0ZXN0X2luZm8udXJpLCB0ZXN0X2luZm8udGltZW91dCwgaW1hZ2VfaGFzaCkK
KyAgICAgICAgICAgc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5mby51cmksIHRlc3RfaW5m
by50aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLmlt
YWdlX2NoZWNrc3VtKQogICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQogCi0gICAgICAgIHJlc3Vs
dCA9IF9wcm9jZXNzX291dHB1dChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLAorICAgICAgICBy
ZXR1cm4gX3Byb2Nlc3Nfb3V0cHV0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8sIHNlbGYuX3Rlc3RfdHlwZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2FyZ3MsIGNyYXNoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwgZW5kIC0gc3RhcnQsIGFj
dHVhbF9jaGVja3N1bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwg
ZXJyb3IpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVzdWx0cy5hcHBlbmQocmVzdWx0KQotICAgICAg
ICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQs
IGVycm9yLCBzZWxmLl9uYW1lKQogCiAgICAgZGVmIF9lbnN1cmVfZHVtcF9yZW5kZXJfdHJlZV9p
c19ydW5uaW5nKHNlbGYpOgogICAgICAgICAiIiJTdGFydCB0aGUgc2hhcmVkIER1bXBSZW5kZXJU
cmVlLCBpZiBpdCdzIG5vdCBydW5uaW5nLgpAQCAtNTM3LDI5ICszNjMsNiBAQCBjbGFzcyBUZXN0
U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zKQogICAgICAgICAgICAgc2Vs
Zi5fZHJpdmVyLnN0YXJ0KCkKIAotICAgIGRlZiBfc3RhcnRfc2VydmVyc193aXRoX2xvY2soc2Vs
Zik6Ci0gICAgICAgICIiIkFjcXVpcmUgaHR0cCBsb2NrIGFuZCBzdGFydCB0aGUgc2VydmVycy4i
IiIKLSAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4gPSB0aW1lLnRpbWUoKQotICAg
ICAgICBfbG9nLmRlYnVnKCdBY3F1aXJlIGh0dHAgbG9jayAuLi4nKQotICAgICAgICBzZWxmLl9w
b3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgSFRU
UCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCi0g
ICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKLSAgICAg
ICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgc2VsZi5faHR0
cF9sb2NrX3dhaXRfZW5kID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xv
Y2sgPSBUcnVlCi0KLSAgICBkZWYgX3N0b3Bfc2VydmVyc193aXRoX2xvY2soc2VsZik6Ci0gICAg
ICAgICIiIlN0b3AgdGhlIHNlcnZlcnMgYW5kIHJlbGVhc2UgaHR0cCBsb2NrLiIiIgotICAgICAg
ICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0b3Bw
aW5nIEhUVFAgc2VydmVyIC4uLicpCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaHR0cF9z
ZXJ2ZXIoKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgV2ViU29ja2V0IHNlcnZl
ciAuLi4nKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQot
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygnUmVsZWFzZSBodHRwIGxvY2sgLi4uJykKLSAgICAgICAg
ICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQotICAgICAgICAgICAgc2VsZi5faGF2
ZV9odHRwX2xvY2sgPSBGYWxzZQotCiAgICAgZGVmIF9raWxsX2R1bXBfcmVuZGVyX3RyZWUoc2Vs
Zik6CiAgICAgICAgICIiIktpbGwgdGhlIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MgaWYgaXQncyBy
dW5uaW5nLiIiIgogICAgICAgICBpZiBzZWxmLl9kcml2ZXI6CmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3Jl
bmRlcl90cmVlX3RocmVhZF91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkX3Vu
aXR0ZXN0LnB5CmluZGV4IDYzZjg2ZDkzZDg5NDk1ZWE5N2M5ZjAxYWExNzQ5MTY4ZWI2YWFiOGQu
LjMxODYzMDgxY2I3ZTg4NDRhYWVjMzhkODFiODE5MzE4NTQyOGM3ZWMgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVf
dGhyZWFkX3VuaXR0ZXN0LnB5CkBAIC0zMSwxOSArMzEsOCBAQAogaW1wb3J0IHN5cwogaW1wb3J0
IHVuaXR0ZXN0CiAKLWltcG9ydCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZAotCi0KIGNsYXNzIFRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0YWNrX2Zv
dW5kKHNlbGYpOgotICAgICAgICBpZCwgc3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRl
bXMoKVswXQotICAgICAgICBmb3VuZF9zdGFjayA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmZp
bmRfdGhyZWFkX3N0YWNrKGlkKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZvdW5kX3N0
YWNrLCBOb25lKQotCi0gICAgZGVmIHRlc3RfZmluZF90aHJlYWRfc3RhY2tfbm90X2ZvdW5kKHNl
bGYpOgotICAgICAgICBmb3VuZF9zdGFjayA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmZpbmRf
dGhyZWFkX3N0YWNrKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmRfc3RhY2ssIE5v
bmUpCi0KKyAgICBwYXNzCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRl
c3QubWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5CmluZGV4IDAw
ZmYyMTE0YzUwYTA1ZTAzOGMwZDQ5NTg3ZDg3ZWMxYjdmNjkyMDUuLjVkOGE5MjM2ZTNlMDkwNzA4
YmUzZmEzZjZiODUwZTdjOTUyMzM5NDcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3By
aW50aW5nLnB5CkBAIC0xODIsOCArMTgyLDggQEAgZGVmIF9jb25maWd1cmVfbG9nZ2luZyhzdHJl
YW0sIHZlcmJvc2UpOgogICAgIGxvZ19kYXRlZm10ID0gJyV5JW0lZCAlSDolTTolUycKICAgICBs
b2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KICAgICBpZiB2ZXJib3NlOgotICAgICAgICBsb2dfZm10
ID0gKCclKGFzY3RpbWUpcyAlKGZpbGVuYW1lKXM6JShsaW5lbm8pLTRkICUobGV2ZWxuYW1lKXMg
JwotICAgICAgICAgICAgICAgICclKG1lc3NhZ2UpcycpCisgICAgICAgIGxvZ19mbXQgPSAoJyUo
YXNjdGltZSlzICUocHJvY2VzcylkICUoZmlsZW5hbWUpczolKGxpbmVubyktNGQgJworICAgICAg
ICAgICAgICAgICAgICclKGxldmVsbmFtZSlzICUobWVzc2FnZSlzJykKICAgICAgICAgbG9nX2xl
dmVsID0gbG9nZ2luZy5ERUJVRwogCiAgICAgcm9vdCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3JvdXRlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDFhMDU2MDMyMWVh
YTczN2UxNWVjNjNiNTk5ZjE4Nzk1ZWI5NDJmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyLnB5
CkBAIC0wLDAgKzEsNTQ3IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGNQaWNrbGUKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBR
dWV1ZQoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0
IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKKworaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
CitpbXBvcnQgdGVzdF9yZXN1bHRzCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2Uucm91dGVyIikKKworCitkZWYgZ2V0KHBv
cnQsIG9wdGlvbnMpOgorICAgIGlmIG9wdGlvbnMud29ya2Vyc19hcmUgPT0gJ2lubGluZSc6Cisg
ICAgICAgIHJldHVybiBTaW5nbGVUaHJlYWRlZFJvdXRlcihwb3J0LCBvcHRpb25zKQorICAgIGlm
IG9wdGlvbnMud29ya2Vyc19hcmUgPT0gJ3RocmVhZHMnOgorICAgICAgICByZXR1cm4gTXVsdGlU
aHJlYWRlZFJvdXRlcihwb3J0LCBvcHRpb25zKQorICAgIHJldHVybiBNdWx0aVByb2Nlc3NSb3V0
ZXIocG9ydCwgb3B0aW9ucykKKworCitjbGFzcyBfTWVzc2FnZShvYmplY3QpOgorICAgIFRFU1Rf
TElTVCA9ICd0ZXN0X2xpc3QnCisgICAgU1RPUCA9ICdzdG9wJworICAgIERPTkUgPSAnZG9uZScK
KyAgICBTVEFSVEVEX1RFU1QgPSAnc3RhcnRlZF90ZXN0JworICAgIEZJTklTSEVEX1RFU1QgPSAn
ZmluaXNoZWRfdGVzdCcKKyAgICBGSU5JU0hFRF9HUk9VUCA9ICdmaW5pc2hlZF9ncm91cCcKKyAg
ICBFWENFUFRJT04gPSAnZXhjZXB0aW9uJworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBs
b2FkcyhzdHIpOgorICAgICAgICBvYmogPSBjUGlja2xlLmxvYWRzKHN0cikKKyAgICAgICAgYXNz
ZXJ0KGlzaW5zdGFuY2Uob2JqLCBfTWVzc2FnZSkpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c3JjLCBkZXN0LCBoZHIsIGJvZHkpOgorICAgICAgICBzZWxmLnNyYyA9IHNyYworICAgICAgICBz
ZWxmLmRlc3QgPSBkZXN0CisgICAgICAgIHNlbGYuaGRyID0gaGRyCisgICAgICAgIHNlbGYuYm9k
eSA9IGJvZHkKKworICAgIGRlZiBkdW1wcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGNQaWNrbGUu
ZHVtcHMoc2VsZikKKworCitjbGFzcyBfV29ya2VyU3RhdGUob2JqZWN0KToKKyAgICBkZWYgX19p
bml0X18oc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0
X3RpbWVvdXQgPSBOb25lCisgICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorICAgICAgICBzZWxm
LndlZGdlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuZG9uZSA9IEZhbHNlCisKKworY2xhc3MgUm91
dGVyKG9iamVjdCk6CisgICAgTUFOQUdFUiA9ICdtYW5hZ2VyJworICAgIEFOWV9XT1JLRVIgPSAn
d29ya2VyLVxkKycKKworICAgIElOX01FTU9SWV9SRVBSRVNFTlRBVElPTiA9ICI8aW5fbWVtb3J5
PiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbG9hZHMoc3RyKToKKyAgICAgICAgYXNz
ZXJ0IHN0ciA9PSBSb3V0ZXIuSU5fTUVNT1JZX1JFUFJFU0VOVEFUSU9OCisgICAgICAgIGdsb2Jh
bCBfcm91dGVyCisgICAgICAgIHJldHVybiBfcm91dGVyCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNl
bGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBOb25lCisgICAg
ICAgIHNlbGYuX3dvcmtlcnMgPSB7fQorICAgICAgICBzZWxmLl9udW1fd29ya2VycyA9IGludChz
ZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykKKyAgICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1
ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlID0gUXVldWUuUXVl
dWUoKQorICAgICAgICBzZWxmLl9ncm91cF90aW1pbmdfc3RhdHMgPSB7fQorCisgICAgZGVmIGNs
ZWFudXAoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydF93b3JrZXJzKHNlbGYp
OgorICAgICAgICAiIiJJbnN0YW50aWF0ZXMgYW5kIHN0YXJ0cyB0aGUgVGVzdFNoZWxsVGhyZWFk
KHMpLiIiIgorICAgICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVsbFRocmVhZHMgYW5kIHN0YXJ0
IHRoZW0uCisgICAgICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShzZWxmLl9udW1fd29y
a2Vycyk6CisgICAgICAgICAgICAjIENyZWF0ZSBzZXBhcmF0ZSBUZXN0VHlwZXMgaW5zdGFuY2Vz
IGZvciBlYWNoIHRocmVhZC4KKyAgICAgICAgICAgIHdvcmtlciA9IF9Xb3JrZXJTdGF0ZSgpCisK
KyAgICAgICAgICAgIHdvcmtlci50aHJlYWQgPSBzZWxmLl9zdGFydF93b3JrZXIod29ya2VyX251
bWJlcikKKyAgICAgICAgICAgIHdvcmtlci5uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVt
YmVyCisgICAgICAgICAgICBzZWxmLl93b3JrZXJzW3dvcmtlci5uYW1lXSA9IHdvcmtlcgorCisg
ICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfYmFpbChzZWxmLCBtc2cpOgorICAgICAg
ICBfbG9nLmVycm9yKG1zZykKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCBtc2cKKworICAgIGRlZiBz
dG9wX3dvcmtlcnMoc2VsZik6CisgICAgICAgICMgRklYTUU6IFNob3VsZCB0aGlzIGJlIGJsb2Nr
aW5nPworICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYuX3dvcmtlcnMpKToKKyAgICAg
ICAgICAgIHNlbGYucG9zdF9zdG9wKCkKKworICAgIGRlZiBjYW5jZWxfd29ya2VycyhzZWxmKToK
KyAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAg
ICAgd29ya2VyLnRocmVhZC5jYW5jZWwoKQorICAgICAgICBzZWxmLl9wb2xsX21hbmFnZXJfcXVl
dWUoc2VsZi5fbWFuYWdlci5nZXROYW1lKCksIHRpbWVvdXQ9MC4wKQorCisgICAgZGVmIHBvc3Rf
dGVzdF9saXN0KHNlbGYsIHRlc3RfbGlzdCk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c2VsZi5N
QU5BR0VSLCBkZXN0PXNlbGYuQU5ZX1dPUktFUiwKKyAgICAgICAgICAgICAgICAgIGhkcj1fTWVz
c2FnZS5URVNUX0xJU1QsIGJvZHk9dGVzdF9saXN0KQorCisgICAgZGVmIHBvc3Rfc3RhcnRlZF90
ZXN0KHNlbGYsIHNyYywgdGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpOgorICAgICAgICBzZWxmLl9w
dXQoc3JjPXNyYywgZGVzdD1zZWxmLk1BTkFHRVIsIGhkcj1fTWVzc2FnZS5TVEFSVEVEX1RFU1Qs
CisgICAgICAgICAgICAgICAgICBib2R5PSh0ZXN0X2luZm8sIGhhbmdfdGltZW91dCkpCisKKyAg
ICBkZWYgcG9zdF9maW5pc2hlZF9ncm91cChzZWxmLCBzcmMsIGdyb3VwX25hbWUsIG51bV90ZXN0
cywgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz1zcmMsIGRlc3Q9c2VsZi5N
QU5BR0VSLCBoZHI9X01lc3NhZ2UuRklOSVNIRURfR1JPVVAsCisgICAgICAgICAgICAgICAgICBi
b2R5PShncm91cF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkpCisKKyAgICBkZWYgcG9z
dF9maW5pc2hlZF90ZXN0KHNlbGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAg
ICBzZWxmLl9wdXQoc3JjPXNyYywgZGVzdD1zZWxmLk1BTkFHRVIsIGhkcj1fTWVzc2FnZS5GSU5J
U0hFRF9URVNULAorICAgICAgICAgICAgICAgICAgYm9keT0ocmVzdWx0LCBlbGFwc2VkX3RpbWUp
KQorCisgICAgZGVmIHBvc3RfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjX2luZm8pOgorICAgICAg
ICBzZWxmLl9wdXQoc3JjPXNyYywgZGVzdD1zZWxmLk1BTkFHRVIsIGhkcj1fTWVzc2FnZS5FWENF
UFRJT04sCisgICAgICAgICAgICAgICAgICBib2R5PWV4Y19pbmZvKQorCisgICAgZGVmIHBvc3Rf
c3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz1zZWxmLk1BTkFHRVIsIGRlc3Q9c2Vs
Zi5BTllfV09SS0VSLAorICAgICAgICAgICAgICAgICAgaGRyPV9NZXNzYWdlLlNUT1AsIGJvZHk9
Tm9uZSkKKworICAgIGRlZiBwb3N0X2RvbmUoc2VsZiwgd29ya2VyKToKKyAgICAgICAgc2VsZi5f
cHV0KHNyYz13b3JrZXIsIGRlc3Q9c2VsZi5NQU5BR0VSLAorICAgICAgICAgICAgICAgICAgaGRy
PV9NZXNzYWdlLkRPTkUsIGJvZHk9Tm9uZSkKKworICAgIGRlZiBsb29wKHNlbGYsIG9iaik6Cisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInN1YmNsYXNzIG11c3QgaW1wbGVtZW50
IFJvdXRlci5sb29wKCkiKQorCisgICAgZGVmIF9wdXQoc2VsZiwgc3JjLCBkZXN0LCBoZHIsIGJv
ZHkpOgorICAgICAgICBtc2cgPSBfTWVzc2FnZShzcmMsIGRlc3QsIGhkciwgYm9keSkKKyAgICAg
ICAgaWYgbXNnLmRlc3QgPT0gc2VsZi5NQU5BR0VSOgorICAgICAgICAgICAgIyBfbG9nLmRlYnVn
KCIlczogcG9zdGluZyAnJXMnIG1zZyB0byBtYW5hZ2VyIHF1ZXVlIiAlCisgICAgICAgICAgICAj
ICAgICAgICAgICAgIChtc2cuc3JjLCBtc2cuaGRyKSkKKyAgICAgICAgICAgIHNlbGYuX21hbmFn
ZXJfcXVldWUucHV0KG1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgX2xvZy5kZWJ1
ZygiJXM6IHBvc3RpbmcgJyVzJyBtc2cgdG8gd29ya2VyIHF1ZXVlIiAlCisgICAgICAgICAgICAj
ICAgICAgICAgICAgIChtc2cuc3JjLCBtc2cuaGRyKSkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtl
cl9xdWV1ZS5wdXQobXNnKQorCisgICAgZGVmIF9nZXQoc2VsZiwgbmFtZSwgcXVldWUsIGJsb2Nr
LCB0aW1lb3V0KToKKyAgICAgICAgaWYgcXVldWUgPT0gc2VsZi5fbWFuYWdlcl9xdWV1ZToKKyAg
ICAgICAgICAgIHF1ZXVlX25hbWUgPSAibWFuYWdlciBxdWV1ZSIKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHF1ZXVlX25hbWUgPSAid29ya2VyIHF1ZXVlIgorCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICNfbG9nLmRlYnVnKCIlcyBuYW1lIHJlYWRpbmcgZnJvbSAlcyBxdWV1ZSIgJSAo
bmFtZSwgcXVldWVfbmFtZSkpCisgICAgICAgICAgICBtc2cgPSBxdWV1ZS5nZXQoYmxvY2ssIHRp
bWVvdXQpCisgICAgICAgICAgICAjX2xvZy5kZWJ1ZygiJXMgZ290ICclcycgbXNnIGZyb20gJXMi
ICUgKG5hbWUsIG1zZy5oZHIsIG1zZy5zcmMpKQorICAgICAgICAgICAgcmV0dXJuIG1zZworICAg
ICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAjX2xvZy5kZWJ1ZygiJXMgZm91
bmQgJXMgZW1wdHkiICUgKG5hbWUsIHF1ZXVlX25hbWUpKQorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKworICAgIGRlZiBfcG9sbF9tYW5hZ2VyX3F1ZXVlKHNlbGYsIG5hbWUsIHRpbWVvdXQpOgor
ICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgIyBOb3RlIHRoYXQgYmxvY2s9VHJ1ZSwg
dGltZW91dD0wIGlzIGVxdWl2YWxlbnQgdG8gYmxvY2s9RmFsc2UuCisgICAgICAgICAgICBtc2cg
PSBzZWxmLl9nZXQobmFtZSwgc2VsZi5fbWFuYWdlcl9xdWV1ZSwgVHJ1ZSwgdGltZW91dCkKKyAg
ICAgICAgICAgIGlmIG5vdCBtc2c6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAg
ICAgaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5TVEFSVEVEX1RFU1Q6CisgICAgICAgICAgICAgICAg
c2VsZi5faGFuZGxlX3N0YXJ0ZWRfdGVzdChtc2cpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIg
PT0gX01lc3NhZ2UuRklOSVNIRURfVEVTVDoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVf
ZmluaXNoZWRfdGVzdChtc2cpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01lc3NhZ2Uu
RklOSVNIRURfR1JPVVA6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2ZpbmlzaGVkX2dy
b3VwKG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5ET05FOgorICAg
ICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9kb25lKG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNn
LmhkciA9PSBfTWVzc2FnZS5FWENFUFRJT046CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxl
X2V4Y2VwdGlvbihtc2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYu
X2JhaWwoJ3VuZXhwZWN0ZWQgbWVzc2FnZSB0eXBlIG9uIG1hbmFnZXIgcXVldWU6ICVzJyAlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cuaGRyKQorCisgICAgZGVmIF9wb2xsX3dvcmtl
cl9xdWV1ZShzZWxmLCB3b3JrZXIsIHBvbGxfbWFuYWdlcik6CisgICAgICAgIHdoaWxlIG5vdCB3
b3JrZXIuaXNfZG9uZSgpOgorICAgICAgICAgICAgbXNnID0gc2VsZi5fZ2V0KHdvcmtlci5nZXRO
YW1lKCksIHNlbGYuX3dvcmtlcl9xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b3QgcG9sbF9tYW5hZ2VyLCBOb25lKQorICAgICAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAg
ICAgICAgICBpZiBub3QgcG9sbF9tYW5hZ2VyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9i
YWlsKCclcyB1bmV4cGVjdGVkbHkgcmFuIG91dCBvZiBxdWV1ZWQgbWVzc2FnZXMnICUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIuZ2V0TmFtZSgpKQorICAgICAgICAgICAg
ICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuU1RPUDoKKyAg
ICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfc3RvcCh3b3JrZXIpCisgICAgICAgICAgICBlbGlm
IG1zZy5oZHIgPT0gX01lc3NhZ2UuVEVTVF9MSVNUOgorICAgICAgICAgICAgICAgICh0ZXN0X2dy
b3VwLCB0ZXN0X2xpc3QpID0gbXNnLmJvZHkKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVf
dGVzdF9saXN0KHdvcmtlciwgdGVzdF9ncm91cCwgdGVzdF9saXN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcG9sbF9tYW5hZ2VyKQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBzZWxmLl9iYWlsKCclczogdW5leHBlY3RlZCBtZXNzYWdlIHR5cGUg
b24gd29ya2VyIHF1ZXVlOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdvcmtl
ci5nZXROYW1lKCksIG1zZy5oZHIpKQorCisgICAgZGVmIF9oYW5kbGVfc3RhcnRlZF90ZXN0KHNl
bGYsIG1zZyk6CisgICAgICAgICh0ZXN0X2luZm8sIGhhbmdfdGltZW91dCkgPSBtc2cuYm9keQor
ICAgICAgICB3b3JrZXIgPSBzZWxmLl93b3JrZXJzW21zZy5zcmNdCisgICAgICAgIHdvcmtlci5j
dXJyZW50X3Rlc3RfbmFtZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0
X2luZm8uZmlsZW5hbWUpCisgICAgICAgIHdvcmtlci5uZXh0X3RpbWVvdXQgPSB0aW1lLnRpbWUo
KSArIGhhbmdfdGltZW91dAorCisgICAgZGVmIF9oYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCBt
c2cpOgorICAgICAgICAocmVzdWx0LCBlbGFwc2VkX3RpbWUpID0gbXNnLmJvZHkKKyAgICAgICAg
d29ya2VyID0gc2VsZi5fd29ya2Vyc1ttc2cuc3JjXQorICAgICAgICB3b3JrZXIubmV4dF90aW1l
b3V0ID0gTm9uZQorICAgICAgICB3b3JrZXIuY3VycmVudF90ZXN0ID0gTm9uZQorCisgICAgICAg
IGlmIHdvcmtlci53ZWRnZWQ6CisgICAgICAgICAgICAjIEhtbS4gVGhpcyBzaG91bGRuJ3QgaGFw
cGVuLgorICAgICAgICAgICAgX2xvZy5lcnJvcigiJXMgdW53ZWRnZWQiLCB3b3JrZXIuZ2V0TmFt
ZSgpKQorCisgICAgICAgIHNlbGYuX21hbmFnZXIuaGFuZGxlX2ZpbmlzaGVkX3Rlc3QobXNnLnNy
YywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX2hhbmRsZV9maW5pc2hlZF9ncm91
cChzZWxmLCBtc2cpOgorICAgICAgICAoZ3JvdXBfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3Rp
bWUpID0gbXNnLmJvZHkKKyAgICAgICAgc2VsZi5fbWFuYWdlci5oYW5kbGVfZmluaXNoZWRfZ3Jv
dXAobXNnLnNyYywgZ3JvdXBfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX2hhbmRsZV9l
eGNlcHRpb24oc2VsZiwgbXNnKToKKyAgICAgICAgZXhjZXB0aW9uX2luZm8gPSBtc2cuYm9keQor
ICAgICAgICBzZWxmLl9tYW5hZ2VyLmhhbmRsZV9leGNlcHRpb24obXNnLnNyYywgZXhjZXB0aW9u
X2luZm8pCisKKyAgICBkZWYgX2hhbmRsZV9zdG9wKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHdv
cmtlci5oYW5kbGVfc3RvcCgpCisKKyAgICBkZWYgX2hhbmRsZV9kb25lKHNlbGYsIG1zZyk6Cisg
ICAgICAgIHdvcmtlciA9IHNlbGYuX3dvcmtlcnNbbXNnLnNyY10KKyAgICAgICAgd29ya2VyLmRv
bmUgPSBUcnVlCisgICAgICAgICMgX2xvZy5kZWJ1ZygiJXMgaXMgZG9uZSIgJSB3b3JrZXIubmFt
ZSkKKyAgICAgICAgc2VsZi5fbWFuYWdlci5oYW5kbGVfZG9uZShtc2cuc3JjKQorCisgICAgZGVm
IF9oYW5kbGVfdGVzdF9saXN0KHNlbGYsIHdvcmtlciwgdGVzdF9ncm91cCwgdGVzdF9saXN0LCBw
b2xsX21hbmFnZXIpOgorICAgICAgICB3b3JrZXIuaGFuZGxlX3Rlc3RfbGlzdCh0ZXN0X2dyb3Vw
LCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdlcikKKworICAgIGRlZiBfbG9nX3dlZGdlZF93b3JrZXIo
c2VsZiwgd29ya2VyKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2Ns
YXNzIFNpbmdsZVRocmVhZGVkUm91dGVyKFJvdXRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBSb3V0ZXIuX19pbml0X18oc2VsZiwgcG9ydCwgb3B0
aW9ucykKKyAgICAgICAgIyBGSVhNRTogQ291bGQgdXNlIGZha2UgcXVldWVzIGhlcmUuCisgICAg
ICAgIHNlbGYuX21hbmFnZXJfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHNlbGYuX3dv
cmtlcl9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKworICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYs
IHdvcmtlcl9udW1iZXIpOgorICAgICAgICAjIEZJWE1FOiBVc2UgV29ya2VyVGh1bmsgaW5zdGVh
ZCAuLi4KKyAgICAgICAgdGh1bmsgPSBfV29ya2VyVGhyZWFkKHNlbGYsIGR1bXBfcmVuZGVyX3Ry
ZWVfdGhyZWFkLldvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9u
dW1iZXIpCisgICAgICAgIHJldHVybiB0aHVuaworCisgICAgZGVmIGxvb3Aoc2VsZiwgbWFuYWdl
cik6CisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBtYW5hZ2VyCisgICAgICAgIHdvcmtlciA9IHNl
bGYuX3dvcmtlcnNbJ3dvcmtlci0wJ10KKyAgICAgICAgc2VsZi5fcG9sbF93b3JrZXJfcXVldWUo
d29ya2VyLnRocmVhZCwgcG9sbF9tYW5hZ2VyPVRydWUpCisKKyAgICBkZWYgX2xvZ193ZWRnZWRf
d29ya2VyKHNlbGYsIHdvcmtlcik6CisgICAgICAgIGFzc2VydCBGYWxzZSwgIlNpbmdsZVRocmVh
ZGVkUm91dGVyLl9sb2dfd2VkZ2VkX3dvcmtlcigpIHNob3VsZCBuZXZlciBiZSBjYWxsZWQiCisK
KworY2xhc3MgTXVsdGlUaHJlYWRlZFJvdXRlcihTaW5nbGVUaHJlYWRlZFJvdXRlcik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBTaW5nbGVUaHJlYWRl
ZFJvdXRlci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKQorCisgICAgZGVmIF9zdGFydF93
b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHRodW5rID0gX1dvcmtlclRocmVh
ZChzZWxmLCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3b3JrZXJfbnVtYmVyKQorICAgICAgICB0aHVuay5zdGFydCgpCisgICAg
ICAgIHJldHVybiB0aHVuaworCisgICAgZGVmIGxvb3Aoc2VsZiwgb2JqKToKKyAgICAgICAgaWYg
b2JqLmdldE5hbWUoKSA9PSBzZWxmLk1BTkFHRVI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5f
bG9vcF9tYW5hZ2VyKG9iaikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9sb29wX3dvcmtlcihvYmopCisKKyAgICBkZWYgX2xvb3BfbWFuYWdlcihzZWxmLCBtYW5hZ2Vy
KToKKyAgICAgICAgc2VsZi5fbWFuYWdlciA9IG1hbmFnZXIKKyAgICAgICAgc2VsZi5fcG9sbF9t
YW5hZ2VyX3F1ZXVlKG1hbmFnZXIuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMDEpCisgICAgICAgIHdo
aWxlIG5vdCBzZWxmLl9jaGVja19vbl93b3JrZXJzKCk6CisgICAgICAgICAgICBzZWxmLl9wb2xs
X21hbmFnZXJfcXVldWUobWFuYWdlci5nZXROYW1lKCksIHRpbWVvdXQ9MC4wMSkKKworICAgICAg
ICBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgYXNzZXJ0IHcu
d2VkZ2VkIG9yIG5vdCB3LnRocmVhZC5pc19hbGl2ZSgpCisKKyAgICBkZWYgX2xvb3Bfd29ya2Vy
KHNlbGYsIHdvcmtlcik6CisgICAgICAgIHdoaWxlIG5vdCB3b3JrZXIuaXNfZG9uZSgpOgorICAg
ICAgICAgICAgc2VsZi5fcG9sbF93b3JrZXJfcXVldWUod29ya2VyLCBwb2xsX21hbmFnZXI9RmFs
c2UpCisKKyAgICBkZWYgX2NoZWNrX29uX3dvcmtlcnMoc2VsZik6CisgICAgICAgICJSZXR1cm5z
IHRydWUgaWZmIGFsbCB0aGUgd29ya2VycyBoYXZlIGVpdGhlciBjb21wbGV0ZWQgb3Igd2VkZ2Vk
LiIKKyAgICAgICAgZG9uZSA9IFRydWUKKyAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAgICAg
IGZvciB3b3JrZXIgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIG5v
dCB3b3JrZXIuZG9uZSBhbmQgbm90IHdvcmtlci53ZWRnZWQ6CisgICAgICAgICAgICAgICAgbmV4
dF90aW1lb3V0ID0gd29ya2VyLm5leHRfdGltZW91dAorICAgICAgICAgICAgICAgIGlmIChuZXh0
X3RpbWVvdXQgYW5kIHQgPiBuZXh0X3RpbWVvdXQpOgorICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9sb2dfd2VkZ2VkX3dvcmtlcih3b3JrZXIud29ya2VyKQorICAgICAgICAgICAgICAgICAgICB3
b3JrZXIud2VkZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgICAgICMgX2xvZy5kZWJ1ZygiJXMgaXMgbm90IGRvbmUiICUgd29ya2VyLm5hbWUpCisgICAg
ICAgICAgICAgICAgICAgIGRvbmUgPSBGYWxzZQorICAgICAgICByZXR1cm4gZG9uZQorCisgICAg
ZGVmIF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICAiIiJMb2cgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHRocmVhZCBzdGF0ZS4iIiIKKyAgICAgICAgaWQgPSB3
b3JrZXIudGhyZWFkLmlkKCkKKyAgICAgICAgc3RhY2sgPSBzZWxmLl9maW5kX3RocmVhZF9zdGFj
ayhpZCkKKyAgICAgICAgYXNzZXJ0KHN0YWNrIGlzIG5vdCBOb25lKQorICAgICAgICBfbG9nLmVy
cm9yKCIiKQorICAgICAgICBfbG9nLmVycm9yKCIlcyAodGlkICVkKSBpcyB3ZWRnZWQgb24gdGVz
dCAlcyIgJQorICAgICAgICAgICAgICAgICAgICh3b3JrZXIudGhyZWFkLmdldE5hbWUoKSwgaWQs
IHdvcmtlci5jdXJyZW50X3Rlc3RfbmFtZSkpCisgICAgICAgIHNlbGYuX2xvZ19zdGFjayhzdGFj
aykKKyAgICAgICAgX2xvZy5lcnJvcigiIikKKworICAgIGRlZiBfZmluZF90aHJlYWRfc3RhY2so
c2VsZiwgaWQpOgorICAgICAgICAiIiJSZXR1cm5zIGEgc3RhY2sgb2JqZWN0IHRoYXQgY2FuIGJl
IHVzZWQgdG8gZHVtcCBhIHN0YWNrIHRyYWNlIGZvcgorICAgICAgICB0aGUgZ2l2ZW4gdGhyZWFk
IGlkIChvciBOb25lIGlmIHRoZSBpZCBpcyBub3QgZm91bmQpLiIiIgorICAgICAgICBmb3IgdGhy
ZWFkX2lkLCBzdGFjayBpbiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKToKKyAgICAgICAg
ICAgIGlmIHRocmVhZF9pZCA9PSBpZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sKKyAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfbG9nX3N0YWNrKHNlbGYsIHN0YWNrKToKKyAg
ICAgICAgIiIiTG9nIGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCkuIiIiCisgICAgICAgIGZv
ciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIHRyYWNlYmFjay5leHRyYWN0X3N0YWNr
KHN0YWNrKToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZpbGU6ICIlcyIsIGxpbmUgJWQsIGlu
ICVzJyAlIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKSkKKyAgICAgICAgICAgIGlmIGxpbmU6Cisg
ICAgICAgICAgICAgICAgX2xvZy5lcnJvcignICAlcycgJSBsaW5lLnN0cmlwKCkpCisKKworY2xh
c3MgTXVsdGlQcm9jZXNzUm91dGVyKE11bHRpVGhyZWFkZWRSb3V0ZXIpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKToKKyAgICAgICAgUm91dGVyLl9faW5pdF9fKHNlbGYs
IHBvcnQsIG9wdGlvbnMpCisgICAgICAgIHNlbGYuX21hbmFnZXJfcXVldWUgPSBtdWx0aXByb2Nl
c3NpbmcuUXVldWUoKQorICAgICAgICBzZWxmLl93b3JrZXJfcXVldWUgPSBtdWx0aXByb2Nlc3Np
bmcuUXVldWUoKQorCisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6
CisgICAgICAgIHRodW5rID0gX1dvcmtlclByb2Nlc3Moc2VsZiwgZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWQuV29ya2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9udW1i
ZXIpCisgICAgICAgIHRodW5rLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIHRodW5rCisKKyAgICBk
ZWYgcG9zdF9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNlcHRpb25faW5mbyk6CisgICAgICAgICMg
RklYTUU6IFdlIGNhbid0IHBpY2tsZSB0cmFjZWJhY2sgb2JqZWN0cywgc28gbG9nIHRoZSB0cmFj
ZWJhY2sgaGVyZS4KKyAgICAgICAgbXBfZXhjX2luZm8gPSAoZXhjZXB0aW9uX2luZm9bMF0sIGV4
Y2VwdGlvbl9pbmZvWzFdLCBOb25lKQorICAgICAgICBNdWx0aVRocmVhZGVkUm91dGVyLnBvc3Rf
ZXhjZXB0aW9uKHNlbGYsIHNyYywgbXBfZXhjX2luZm8pCisKKyAgICBkZWYgX2xvZ193ZWRnZWRf
d29ya2VyKHNlbGYsIHdvcmtlcik6CisgICAgICAgIGlkID0gd29ya2VyLnRocmVhZC5pZCgpCisg
ICAgICAgIF9sb2cuZXJyb3IoIiIpCisgICAgICAgIF9sb2cuZXJyb3IoIiVzIChwaWQgJWQpIGlz
IHdlZGdlZCBvbiB0ZXN0ICVzIiAlCisgICAgICAgICAgICAgICAgICAgKHdvcmtlci50aHJlYWQu
Z2V0TmFtZSgpLCBpZCwgd29ya2VyLmN1cnJlbnRfdGVzdF9uYW1lKSkKKyAgICAgICAgX2xvZy5l
cnJvcigiIikKKworCitjbGFzcyBfV29ya2VyVGh1bmsob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcm91dGVyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICBz
ZWxmLl9leGNlcHRpb25faW5mbyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcm91dGVyID0gcm91dGVy
CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSByb3V0ZXIuX29wdGlvbnMKKyAgICAgICAgc2VsZi5f
cG9ydCA9IHJvdXRlci5fcG9ydAorICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBGYWxzZQorICAg
ICAgICBzZWxmLl9kb25lID0gRmFsc2UKKyAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBG
YWxzZQorICAgICAgICBzZWxmLl9pZCA9IDAKKyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9
IHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fd29ya2VyID0gd29ya2VyX2NsYXNzKHNlbGYu
X3BvcnQsIHNlbGYsIHNlbGYuX29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3b3JrZXJfbnVtYmVyKQorCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICAjIHVz
ZWQgZHVyaW5nIGxvZ193ZWRnZWRfd29ya2VyCisgICAgICAgIHJldHVybiBzZWxmLl9pZAorCisg
ICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gVHJ1ZQorCisg
ICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb25lIG9yIHNlbGYu
X2NhbmNlbGxlZAorCisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYpOgorICAgICAgICBpZiBzZWxm
Ll9oYXZlX2h0dHBfbG9jazoKKyAgICAgICAgICAgIHNlbGYuX3JlbGVhc2VfbG9jaygpCisgICAg
ICAgIHNlbGYuX3dvcmtlci5oYW5kbGVfc3RvcCgpCisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVl
CisKKyAgICBkZWYgaGFuZGxlX3Rlc3RfbGlzdChzZWxmLCBncm91cF9uYW1lLCB0ZXN0X2xpc3Qs
IHBvbGxfbWFuYWdlcik6CisgICAgICAgIGlmIGdyb3VwX25hbWUgPT0gInRlc3RzX3RvX2h0dHBf
bG9jayI6CisgICAgICAgICAgICBzZWxmLl9hY3F1aXJlX2xvY2soKQorICAgICAgICBlbGlmIHNl
bGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fcmVsZWFzZV9sb2NrKCkKKwor
ICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgbnVtX3Rlc3RzID0gMAor
ICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBzZWxmLl93b3JrZXIu
cnVuX3Rlc3QodGVzdCkKKyAgICAgICAgICAgIG51bV90ZXN0cyArPSAxCisKKyAgICAgICAgICAg
ICMgRklYTUU6IE5lZWQgdG8gZ2V0IHJpZCBvZiB0aGlzLgorICAgICAgICAgICAgaWYgcG9sbF9t
YW5hZ2VyOgorICAgICAgICAgICAgICAgIHNlbGYuX3JvdXRlci5fcG9sbF9tYW5hZ2VyX3F1ZXVl
KHNlbGYuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMCkKKworICAgICAgICAgICAgaWYgc2VsZi5fY2Fu
Y2VsbGVkOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsYXBzZWRfdGltZSA9IHRp
bWUudGltZSgpIC0gc3RhcnRfdGltZQorCisgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0cF9sb2Nr
OgorICAgICAgICAgICAgc2VsZi5fcmVsZWFzZV9sb2NrKCkKKworICAgICAgICBzZWxmLl9yb3V0
ZXIucG9zdF9maW5pc2hlZF9ncm91cChzZWxmLmdldE5hbWUoKSwgZ3JvdXBfbmFtZSwgbnVtX3Rl
c3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkX3Rp
bWUpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFy
dGVkX3Rlc3Qoc2VsZiwgdGVzdF9pbmZvLCBodW5nX3RocmVhZF90aW1lb3V0KToKKyAgICAgICAg
c2VsZi5fcm91dGVyLnBvc3Rfc3RhcnRlZF90ZXN0KHNlbGYuZ2V0TmFtZSgpLCB0ZXN0X2luZm8s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodW5nX3RocmVhZF90aW1l
b3V0KQorCisgICAgZGVmIGZpbmlzaGVkX3Rlc3Qoc2VsZiwgcmVzdWx0LCBlbGFwc2VkX3RpbWUp
OgorICAgICAgICBzZWxmLl9yb3V0ZXIucG9zdF9maW5pc2hlZF90ZXN0KHNlbGYuZ2V0TmFtZSgp
LCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBfYWNxdWlyZV9sb2NrKHNlbGYpOgor
ICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4uLicpCisgICAgICAgIHNl
bGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGlu
ZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVy
KCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQor
ICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBzZWxm
Ll9oYXZlX2h0dHBfbG9jayA9IFRydWUKKworICAgIGRlZiBfcmVsZWFzZV9sb2NrKHNlbGYpOgor
ICAgICAgICAiIiJTdG9wIHRoZSBzZXJ2ZXJzIGFuZCByZWxlYXNlIGh0dHAgbG9jay4iIiIKKyAg
ICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdT
dG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0
dHBfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nIFdlYlNvY2tldCBz
ZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVy
KCkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQorICAgICAgICAg
ICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxzZQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAg
ICAgICAgc2VsZi5faWQgPSBzZWxmLl9nZXRfaWQoKQorICAgICAgICBuYW1lID0gc2VsZi5uYW1l
CisgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiIgorICAgICAgICBfbG9nLmRlYnVnKCclcyBzdGFy
dGluZycgJSBuYW1lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3JvdXRlci5s
b29wKHNlbGYpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAg
IGV4Y2VwdGlvbl9tc2cgPSAiLCBpbnRlcnJ1cHRlZCIKKyAgICAgICAgZXhjZXB0OgorICAgICAg
ICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGV4Y2VwdGlvbiByYWlzZWQiCisgICAgICAgIGZpbmFs
bHk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBkb25lJXMiICUgKG5hbWUsIGV4Y2VwdGlv
bl9tc2cpKQorICAgICAgICAgICAgaWYgZXhjZXB0aW9uX21zZzoKKyAgICAgICAgICAgICAgICBz
ZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgc2Vs
Zi5fcm91dGVyLnBvc3RfZXhjZXB0aW9uKHNlbGYuZ2V0TmFtZSgpLCBzZWxmLl9leGNlcHRpb25f
aW5mbykKKyAgICAgICAgICAgIHNlbGYuX3JvdXRlci5wb3N0X2RvbmUobmFtZSkKKworICAgICAg
ICBhc3NlcnQgZXhjZXB0aW9uX21zZyBvciBzZWxmLl9kb25lIG9yIHNlbGYuX2NhbmNlbGxlZCwg
ImV4aXRpbmcgdW5leHBlY3RlZGx5IgorCisKK2NsYXNzIF9Xb3JrZXJUaHJlYWQoX1dvcmtlclRo
dW5rLCB0aHJlYWRpbmcuVGhyZWFkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm91dGVyLCB3
b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9f
aW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJUaHVuay5fX2luaXRfXyhzZWxmLCByb3V0ZXIs
IHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcikKKyAgICAgICAgc2VsZi5uYW1lID0gJ3dvcmtl
ci0lZCcgJSB3b3JrZXJfbnVtYmVyCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLl9pZAorCisgICAgZGVmIF9nZXRfaWQoc2VsZik6CisgICAgICAgIHRocmVhZC5nZXRf
aWRlbnQoKQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVk
ID0gVHJ1ZQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFk
LnN0YXJ0KHNlbGYpCisKKworY2xhc3MgX1dvcmtlclByb2Nlc3MoX1dvcmtlclRodW5rLCBtdWx0
aXByb2Nlc3NpbmcuUHJvY2Vzcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRlciwgd29y
a2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nl
c3MuX19pbml0X18oc2VsZikKKyAgICAgICAgX1dvcmtlclRodW5rLl9faW5pdF9fKHNlbGYsIHJv
dXRlciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyKQorICAgICAgICBzZWxmLm5hbWUgPSAn
d29ya2VyLSVkJyAlIHdvcmtlcl9udW1iZXIKKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAg
IyBGSVhNRTogZmlndXJlIG91dCBpZiB0aGlzIG5lZWRzIHRvIGJlIGF3YXJlIG9mIHBhcmVudC9j
aGlsZAorICAgICAgICByZXR1cm4gc2VsZi5waWQKKworICAgIGRlZiBfZ2V0X2lkKHNlbGYpOgor
ICAgICAgICByZXR1cm4gb3MuZ2V0cGlkKCkKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAg
ICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKKyAgICAgICAgc2VsZi50ZXJtaW5hdGUoKQorCisg
ICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5zdGFy
dChzZWxmKQorCisgICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm5h
bWUKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL3JvdXRlcl91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlcl91bml0dGVzdC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kYWE5Y2MzNzRjY2FhZDA4ZmRkZGIxNTY1Y2JhZjQwNDUzZWQwODllCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2Uvcm91dGVyX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsMTE5IEBACisjIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
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
VUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sK
K2ltcG9ydCBRdWV1ZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gcm91dGVyIGltcG9ydCAqCisK
KworY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZmluZF90aHJl
YWRfc3RhY2tfZm91bmQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudAorICAgICAg
ICByZXR1cm4KKyAgICAgICAgaWQsIHN0YWNrID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1z
KClbMF0KKyAgICAgICAgZm91bmRfc3RhY2sgPSBmaW5kX3RocmVhZF9zdGFjayhpZCkKKyAgICAg
ICAgc2VsZi5hc3NlcnROb3RFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKKworICAgIGRlZiB0ZXN0
X2ZpbmRfdGhyZWFkX3N0YWNrX25vdF9mb3VuZChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1w
bGVtZW50CisgICAgICAgIHJldHVybgorICAgICAgICBmb3VuZF9zdGFjayA9IGZpbmRfdGhyZWFk
X3N0YWNrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCisK
KworY2xhc3MgV2FpdEZvclRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgIGRlZiBydW5fb25lX3RocmVhZChzZWxmLCBtc2cpOgorICAgICAgICBzdGFydGluZ19xdWV1
ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgp
CisgICAgICAgIGNoaWxkX3RocmVhZCA9IFRlc3RUaHJlYWQoc3RhcnRpbmdfcXVldWUsIHN0b3Bw
aW5nX3F1ZXVlKQorICAgICAgICBjaGlsZF90aHJlYWQuc3RhcnQoKQorICAgICAgICBzdGFydGVk
X21zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCht
c2cpCisgICAgICAgIHRocmVhZHMgPSBbY2hpbGRfdGhyZWFkXQorICAgICAgICByZXR1cm4gcnVu
bmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLCBOb25lKQorCisgICAgZGVm
IHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudAorICAgICAgICBy
ZXR1cm4KKyAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcnKQorICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVkKQorCisgICAgZGVmIHRlc3RfaW50ZXJy
dXB0KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQuCisgICAgICAgIHJldHVybgor
ICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJycpCisgICAgICAgIGlu
dGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnS2V5Ym9hcmRJbnRlcnJ1cHQnKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoaW50ZXJydXB0ZWQpCisKKyAgICBkZWYgdGVzdF90aW1lb3V0
KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQuCisgICAgICAgIHJldHVybgorICAg
ICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJycpCisgICAgICAgIG9jID0g
b3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQo
KQorICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJ1RpbWVvdXQnKQor
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVkKQorICAgICAgICBvYy5yZXN0b3Jl
X291dHB1dCgpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgICMgRklY
TUU6IGltcGxlbWVudC4KKyAgICAgICAgcmV0dXJuCisgICAgICAgIGludGVycnVwdGVkID0gc2Vs
Zi5ydW5fb25lX3RocmVhZCgnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
ciwgc2VsZi5ydW5fb25lX3RocmVhZCwgJ0V4Y2VwdGlvbicpCisKKworY2xhc3MgU3RhbmRhbG9u
ZUZ1bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2xvZ193ZWRn
ZWRfdGhyZWFkKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcmV0
dXJuCisgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKKyAgICAgICAg
b2MuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICBsb2dnZXIgPSBydW5fd2Via2l0X3Rlc3RzLl9s
b2cKKyAgICAgICAgYXN0cmVhbSA9IGFycmF5X3N0cmVhbS5BcnJheVN0cmVhbSgpCisgICAgICAg
IGhhbmRsZXIgPSBUZXN0SGFuZGxlcihhc3RyZWFtKQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxl
cihoYW5kbGVyKQorCisgICAgICAgIHN0YXJ0aW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAg
ICAgICBzdG9wcGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgY2hpbGRfdGhyZWFk
ID0gVGVzdFRocmVhZChzdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVldWUpCisgICAgICAgIGNo
aWxkX3RocmVhZC5zdGFydCgpCisgICAgICAgIG1zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCisK
KyAgICAgICAgcnVuX3dlYmtpdF90ZXN0cy5fbG9nX3dlZGdlZF90aHJlYWQoY2hpbGRfdGhyZWFk
KQorICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQoJycpCisgICAgICAgIGNoaWxkX3RocmVhZC5q
b2luKHRpbWVvdXQ9MS4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN0cmVhbS5lbXB0
eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNoaWxkX3RocmVhZC5pc0FsaXZlKCkpCisg
ICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQppbmRleCBk
MWMzODNjMTNlYzJmMTNhZjVmYjFmMTU0MDU3OWM0Yzg4OWZkZDYzLi43ZDcwNGMzYTg5YWY1NGFk
MGRhZjA3NDhiNGQ4ODlhNjIyYWNlNGNkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQpA
QCAtNjIsMTUgKzYyLDYgQEAgY2xhc3MgQ2hyb21pdW1NYWNQb3J0KGNocm9taXVtLkNocm9taXVt
UG9ydCk6CiAgICAgICAgICAgICAgICAgICAgICAgICdNYWNCdWlsZEluc3RydWN0aW9ucycpCiAg
ICAgICAgIHJldHVybiByZXN1bHQKIAotICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3Nlcyhz
ZWxmKToKLSAgICAgICAgIyBGSVhNRTogd2UgbmVlZCB0byBydW4gc2luZ2xlLXRocmVhZGVkIGZv
ciBub3cuIFNlZQotICAgICAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zODU1My4gVW5mb3J0dW5hdGVseSB0aGlzCi0gICAgICAgICMgcm91dGluZSBpcyBjYWxs
ZWQgcmlnaHQgYmVmb3JlIHRoZSBsb2dnZXIgaXMgY29uZmlndXJlZCwgc28gaWYgd2UKLSAgICAg
ICAgIyB0cnkgdG8gX2xvZy53YXJuaW5nKCksIGl0IGdldHMgdGhyb3duIGF3YXkuCi0gICAgICAg
IGltcG9ydCBzeXMKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRGVmYXVsdGluZyB0byBvbmUg
Y2hpbGQgLSBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NTUz
XG4iKQotICAgICAgICByZXR1cm4gMQotCiAgICAgZGVmIGRyaXZlcl9uYW1lKHNlbGYpOgogICAg
ICAgICAiIiJuYW1lIGZvciB0aGlzIHBvcnQncyBlcXVpdmFsZW50IG9mIER1bXBSZW5kZXJUcmVl
LiIiIgogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3VzZV9kcnQnKToKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKaW5k
ZXggNjk2ZTMzOThlYTRiMjhhYzc2MjI1OTA3ZGMzNjJmZmMzZmI4NmY5ZS4uNzJmOTFkODM4MjE1
YWY0YmM0NGYxZGMxZjA2NTVkYWRjN2QzMzZmZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKQEAgLTQ3LDE1ICs0Nyw2
IEBAIGNsYXNzIE1hY1BvcnQoV2ViS2l0UG9ydCk6CiAgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0
KCdwb3J0X25hbWUnLCAnbWFjJyArIHNlbGYudmVyc2lvbigpKQogICAgICAgICBXZWJLaXRQb3J0
Ll9faW5pdF9fKHNlbGYsICoqa3dhcmdzKQogCi0gICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vz
c2VzKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBuZXctcnVuLXdlYmtpdC10ZXN0cyBpcyB1bnN0
YWJsZSBvbiBNYWMgcnVubmluZyBtb3JlIHRoYW4KLSAgICAgICAgIyBmb3VyIHRocmVhZHMgaW4g
cGFyYWxsZWwuCi0gICAgICAgICMgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNjYyMgotICAgICAgICBjaGlsZF9wcm9jZXNzZXMgPSBXZWJLaXRQb3J0LmRlZmF1
bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpCi0gICAgICAgIGlmIGNoaWxkX3Byb2Nlc3NlcyA+IDQ6
Ci0gICAgICAgICAgICByZXR1cm4gNAotICAgICAgICByZXR1cm4gY2hpbGRfcHJvY2Vzc2VzCi0K
ICAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CiAgICAgICAgIHBvcnRfbmFtZXMg
PSBbXQogICAgICAgICBpZiBzZWxmLl9uYW1lID09ICdtYWMtdGlnZXInOgpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5Cmlu
ZGV4IGZmNDA4NmM3NGRjMTgyYmE4NDcxMjNlNjM1NTAwZDE0NDExZDk5M2UuLjFkOTZiZDk2MmI5
MTZkOWUyNDE0ZmJlOGZiNTY5MzU5N2YwZGM3MDUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTEzNiw2ICsx
MzYsOSBAQCBjbGFzcyBUZXN0UG9ydChiYXNlLlBvcnQpOgogICAgIGRlZiBjaGVja19idWlsZChz
ZWxmLCBuZWVkc19odHRwKToKICAgICAgICAgcmV0dXJuIFRydWUKIAorICAgIGRlZiBkZWZhdWx0
X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDIKKwogICAgIGRlZiBkaWZm
X2ltYWdlKHNlbGYsIGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1YWxfY29udGVudHMsCiAgICAgICAg
ICAgICAgICAgICAgZGlmZl9maWxlbmFtZT1Ob25lKToKICAgICAgICAgZGlmZmVkID0gYWN0dWFs
X2NvbnRlbnRzICE9IGV4cGVjdGVkX2NvbnRlbnRzCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpp
bmRleCBmMzYwYWRjOWE2NTNjNThmMGM3ZmNjMzcxNjRlZDljMzhkOWViODQ0Li4xZjNjODJkNmEx
OTVlYWY5MzFhNDE3NTcwYTU5NTc3YmNjNjMxYjhkIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMu
cHkKQEAgLTY3LDYgKzY3LDcgQEAgaW1wb3J0IHRyYWNlYmFjawogZnJvbSBsYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1w
b3J0IGpzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yCiBmcm9tIGxheW91dF9wYWNrYWdlIGlt
cG9ydCBwcmludGluZworZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgcm91dGVyCiBmcm9tIGxh
eW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSBsYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgdGVzdF9mYWlsdXJlcwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVzdF9y
ZXN1bHRzCkBAIC04OSwzMiArOTAsMTkgQEAgTEFZT1VUX1RFU1RTX0RJUkVDVE9SWSA9ICJMYXlv
dXRUZXN0cyIgKyBvcy5zZXAKIAogVGVzdEV4cGVjdGF0aW9uc0ZpbGUgPSB0ZXN0X2V4cGVjdGF0
aW9ucy5UZXN0RXhwZWN0YXRpb25zRmlsZQogCi0KIGNsYXNzIFRlc3RJbmZvOgogICAgICIiIkdy
b3VwcyBpbmZvcm1hdGlvbiBhYm91dCBhIHRlc3QgZm9yIGVhc3kgcGFzc2luZyBvZiBkYXRhLiIi
IgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGZpbGVuYW1lLCB0aW1lb3V0KToKLSAg
ICAgICAgIiIiR2VuZXJhdGVzIHRoZSBVUkkgYW5kIHN0b3JlcyB0aGUgZmlsZW5hbWUgYW5kIHRp
bWVvdXQgZm9yIHRoaXMgdGVzdC4KKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIHRp
bWVvdXQpOgorICAgICAgICAiIiJCdW5kbGVzIHRoZSBmaWxlbmFtZSBhbmQgdGltZW91dCBmb3Ig
dGhpcyB0ZXN0LgogICAgICAgICBBcmdzOgogICAgICAgICAgIGZpbGVuYW1lOiBGdWxsIHBhdGgg
dG8gdGhlIHRlc3QuCiAgICAgICAgICAgdGltZW91dDogVGltZW91dCBmb3IgcnVubmluZyB0aGUg
dGVzdCBpbiBUZXN0U2hlbGwuCiAgICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuZmlsZW5hbWUg
PSBmaWxlbmFtZQotICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotICAgICAgICBzZWxmLnVyaSA9
IHBvcnQuZmlsZW5hbWVfdG9fdXJpKGZpbGVuYW1lKQogICAgICAgICBzZWxmLnRpbWVvdXQgPSB0
aW1lb3V0Ci0gICAgICAgIHNlbGYuX2ltYWdlX2NoZWNrc3VtID0gLTEKLQotICAgIGRlZiBpbWFn
ZV9oYXNoKHNlbGYpOgotICAgICAgICAjIFJlYWQgdGhlIGltYWdlX2hhc2ggbGF6aWx5IHRvIHJl
ZHVjZSBzdGFydHVwIHRpbWUuCi0gICAgICAgICMgVGhpcyBjbGFzcyBpcyBhY2Nlc3NlZCBhY3Jv
c3MgdGhyZWFkcywgYnV0IG9ubHkgb25lIHRocmVhZCBzaG91bGQKLSAgICAgICAgIyBldmVyIGJl
IGRlYWxpbmcgd2l0aCBhbnkgZ2l2ZW4gVGVzdEluZm8gc28gbm8gbG9ja2luZyBpcyBuZWVkZWQu
Ci0gICAgICAgICMKLSAgICAgICAgIyBOb3RlIHRoYXQgd2UgdXNlIC0xIHRvIGluZGljYXRlIHRo
YXQgd2UgaGF2ZW4ndCByZWFkIHRoZSB2YWx1ZSwKLSAgICAgICAgIyBiZWNhdXNlIGV4cGVjdGVk
X2NoZWNrc3VtKCkgcmV0dXJucyBhIHN0cmluZyBvciBOb25lLgotICAgICAgICBpZiBzZWxmLl9p
bWFnZV9jaGVja3N1bSA9PSAtMToKLSAgICAgICAgICAgIHNlbGYuX2ltYWdlX2NoZWNrc3VtID0g
c2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bShzZWxmLmZpbGVuYW1lKQotICAgICAgICByZXR1
cm4gc2VsZi5faW1hZ2VfY2hlY2tzdW0KKyAgICAgICAgc2VsZi51cmkgPSBOb25lCisgICAgICAg
IHNlbGYuaW1hZ2VfY2hlY2tzdW0gPSBOb25lCiAKIAogY2xhc3MgUmVzdWx0U3VtbWFyeShvYmpl
Y3QpOgpAQCAtMTYxLDYgKzE0OSw3IEBAIGNsYXNzIFJlc3VsdFN1bW1hcnkob2JqZWN0KToKICAg
ICAgICAgICAgIHNlbGYudW5leHBlY3RlZCArPSAxCiAKIAorCiBkZWYgc3VtbWFyaXplX3VuZXhw
ZWN0ZWRfcmVzdWx0cyhwb3J0X29iaiwgZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5X3N1bW1hcnkpOgogICAgICIiIlN1
bW1hcml6ZSBhbnkgdW5leHBlY3RlZCByZXN1bHRzIGFzIGEgZGljdC4KQEAgLTI1MCwzMyArMjM5
LDMyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgIyBpbiBEdW1wUmVuZGVyVHJlZS4KICAgICBE
RUZBVUxUX1RFU1RfVElNRU9VVF9NUyA9IDYgKiAxMDAwCiAKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQs
IG9wdGlvbnMsIHByaW50ZXIsIHJvdXRlcik6CiAgICAgICAgICIiIkluaXRpYWxpemUgdGVzdCBy
dW5uZXIgZGF0YSBzdHJ1Y3R1cmVzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgcG9ydDog
YW4gb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmljCiAgICAgICAgICAgb3B0aW9uczog
YSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCiAgICAgICAgICAgcHJpbnRlcjog
YSBQcmludGVyIG9iamVjdCB0byByZWNvcmQgdXBkYXRlcyB0by4KKyAgICAgICAgICByb3V0ZXI6
IG9iamVjdCB1c2VkIHRvIGNvbW11bmljYXRlIHcvIHdvcmtlcnMuCiAgICAgICAgICIiIgogICAg
ICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwog
ICAgICAgICBzZWxmLl9wcmludGVyID0gcHJpbnRlcgorICAgICAgICBzZWxmLl9yb3V0ZXIgPSBy
b3V0ZXIKIAogICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5
T3BlblNTTCBvbiBidWlsZGJvdHMuCiAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9z
ZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KAogICAgICAgICAjICAgICAgICBv
cHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCB1c2VfdGxzPVRydWUsIHBvcnQ9OTMyMykKIAotICAg
ICAgICAjIGEgbGlzdCBvZiBUZXN0VHlwZSBvYmplY3RzCi0gICAgICAgIHNlbGYuX3Rlc3RfdHlw
ZXMgPSBbdGV4dF9kaWZmLlRlc3RUZXh0RGlmZl0KLSAgICAgICAgaWYgb3B0aW9ucy5waXhlbF90
ZXN0czoKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKGltYWdlX2RpZmYuSW1h
Z2VEaWZmKQotCiAgICAgICAgICMgYSBzZXQgb2YgdGVzdCBmaWxlcywgYW5kIHRoZSBzYW1lIHRl
c3RzIGFzIGEgbGlzdAogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KCkKICAgICAgICAg
c2VsZi5fdGVzdF9maWxlc19saXN0ID0gTm9uZQotICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUg
PSBRdWV1ZS5RdWV1ZSgpCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gRmFsc2UKIAorICAgIGRl
ZiBnZXROYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gcm91dGVyLlJvdXRlci5NQU5BR0VSCisK
ICAgICBkZWYgY29sbGVjdF90ZXN0cyhzZWxmLCBhcmdzLCBsYXN0X3VuZXhwZWN0ZWRfcmVzdWx0
cyk6CiAgICAgICAgICIiIkZpbmQgYWxsIHRoZSBmaWxlcyB0byB0ZXN0LgogCkBAIC01MDEsMTAg
KzQ4OSw5IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICIiIlJldHVybnMgdGhlIGFwcHJv
cHJpYXRlIFRlc3RJbmZvIG9iamVjdCBmb3IgdGhlIGZpbGUuIE1vc3RseSB0aGlzCiAgICAgICAg
IGlzIHVzZWQgZm9yIGxvb2tpbmcgdXAgdGhlIHRpbWVvdXQgdmFsdWUgKGluIG1zKSB0byB1c2Ug
Zm9yIHRoZSBnaXZlbgogICAgICAgICB0ZXN0LiIiIgotICAgICAgICBpZiBzZWxmLl9leHBlY3Rh
dGlvbnMuaGFzX21vZGlmaWVyKHRlc3RfZmlsZSwgdGVzdF9leHBlY3RhdGlvbnMuU0xPVyk6Ci0g
ICAgICAgICAgICByZXR1cm4gVGVzdEluZm8oc2VsZi5fcG9ydCwgdGVzdF9maWxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2xvd190aW1lX291dF9tcykKLSAg
ICAgICAgcmV0dXJuIFRlc3RJbmZvKHNlbGYuX3BvcnQsIHRlc3RfZmlsZSwgc2VsZi5fb3B0aW9u
cy50aW1lX291dF9tcykKKyAgICAgICAgaWYgc2VsZi5fdGVzdF9pc19zbG93KHRlc3RfZmlsZSk6
CisgICAgICAgICAgICByZXR1cm4gVGVzdEluZm8odGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnNs
b3dfdGltZV9vdXRfbXMpCisgICAgICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0X2ZpbGUsIHNlbGYu
X29wdGlvbnMudGltZV9vdXRfbXMpCiAKICAgICBkZWYgX3Rlc3RfcmVxdWlyZXNfbG9jayhzZWxm
LCB0ZXN0X2ZpbGUpOgogICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgdGVzdCBuZWVkcyB0
byBiZSBsb2NrZWQgd2hlbgpAQCAtNTEyLDIzICs0OTksMjIgQEAgY2xhc3MgVGVzdFJ1bm5lcjoK
ICAgICAgICAgc3BsaXRfcGF0aCA9IHRlc3RfZmlsZS5zcGxpdChvcy5zZXApCiAgICAgICAgIHJl
dHVybiAnaHR0cCcgaW4gc3BsaXRfcGF0aCBvciAnd2Vic29ja2V0JyBpbiBzcGxpdF9wYXRoCiAK
LSAgICBkZWYgX2dldF90ZXN0X2ZpbGVfcXVldWUoc2VsZiwgdGVzdF9maWxlcyk6Ci0gICAgICAg
ICIiIkNyZWF0ZSB0aGUgdGhyZWFkIHNhZmUgcXVldWUgb2YgbGlzdHMgb2YgKHRlc3QgZmlsZW5h
bWVzLCB0ZXN0IFVSSXMpCi0gICAgICAgIHR1cGxlcy4gRWFjaCBUZXN0U2hlbGxUaHJlYWQgcHVs
bHMgYSBsaXN0IGZyb20gdGhpcyBxdWV1ZSBhbmQgcnVucwotICAgICAgICB0aG9zZSB0ZXN0cyBp
biBvcmRlciBiZWZvcmUgZ3JhYmJpbmcgdGhlIG5leHQgYXZhaWxhYmxlIGxpc3QuCisgICAgZGVm
IF90ZXN0X2lzX3Nsb3coc2VsZiwgdGVzdF9maWxlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4
cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKQogCi0gICAg
ICAgIFNoYXJkIHRoZSBsaXN0cyBieSBkaXJlY3RvcnkuIFRoaXMgaGVscHMgZW5zdXJlIHRoYXQg
dGVzdHMgdGhhdCBkZXBlbmQKLSAgICAgICAgb24gZWFjaCBvdGhlciAoYWthIGJhZCB0ZXN0cyEp
IGNvbnRpbnVlIHRvIHJ1biB0b2dldGhlciBhcyBtb3N0Ci0gICAgICAgIGNyb3NzLXRlc3RzIGRl
cGVuZGVuY2llcyB0ZW5kIHRvIG9jY3VyIHdpdGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgICAg
ZGVmIF9zaGFyZF90ZXN0cyhzZWxmLCB0ZXN0X2ZpbGVzLCBzaW5nbGVfdGhyZWFkZWQpOgorICAg
ICAgICAiIiJHcm91cHMgdGVzdHMgaW50byBiYXRjaGVzLgorICAgICAgICBUaGlzIGhlbHBzIGVu
c3VyZSB0aGF0IHRlc3RzIHRoYXQgZGVwZW5kIG9uIGVhY2ggb3RoZXIgKGFrYSBiYWQgdGVzdHMh
KQorICAgICAgICBjb250aW51ZSB0byBydW4gdG9nZXRoZXIgYXMgbW9zdCBjcm9zcy10ZXN0cyBk
ZXBlbmRlbmNpZXMgdGVuZCB0bworICAgICAgICBvY2N1ciB3aXRoaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LgogCiAgICAgICAgIFJldHVybjoKLSAgICAgICAgICBUaGUgUXVldWUgb2YgbGlzdHMgb2Yg
VGVzdEluZm8gb2JqZWN0cy4KKyAgICAgICAgICAgIEEgbGlzdCBvZiBsaXN0cyBvZiBUZXN0SW5m
byBvYmplY3RzCiAgICAgICAgICIiIgotCiAgICAgICAgIHRlc3RfbGlzdHMgPSBbXQogICAgICAg
ICB0ZXN0c190b19odHRwX2xvY2sgPSBbXQotICAgICAgICBpZiAoc2VsZi5fb3B0aW9ucy5leHBl
cmltZW50YWxfZnVsbHlfcGFyYWxsZWwgb3IKLSAgICAgICAgICAgIHNlbGYuX2lzX3NpbmdsZV90
aHJlYWRlZCgpKToKKyAgICAgICAgaWYgc2luZ2xlX3RocmVhZGVkOgogICAgICAgICAgICAgZm9y
IHRlc3RfZmlsZSBpbiB0ZXN0X2ZpbGVzOgogICAgICAgICAgICAgICAgIHRlc3RfaW5mbyA9IHNl
bGYuX2dldF90ZXN0X2luZm9fZm9yX2ZpbGUodGVzdF9maWxlKQogICAgICAgICAgICAgICAgIGlm
IHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUpOgpAQCAtNTY3LDIzICs1NTMsNyBA
QCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgdGVzdHNfdG9faHR0cF9sb2NrLnJldmVy
c2UoKQogICAgICAgICAgICAgdGVzdF9saXN0cy5pbnNlcnQoMCwgKCJ0ZXN0c190b19odHRwX2xv
Y2siLCB0ZXN0c190b19odHRwX2xvY2spKQogCi0gICAgICAgIGZpbGVuYW1lX3F1ZXVlID0gUXVl
dWUuUXVldWUoKQotICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3RzOgotICAgICAgICAgICAg
ZmlsZW5hbWVfcXVldWUucHV0KGl0ZW0pCi0gICAgICAgIHJldHVybiBmaWxlbmFtZV9xdWV1ZQot
Ci0gICAgZGVmIF9nZXRfdGVzdF9hcmdzKHNlbGYsIGluZGV4KToKLSAgICAgICAgIiIiUmV0dXJu
cyB0aGUgdHVwbGUgb2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9yIER1bXBSZW5kZXJUcmVl
LiIiIgotICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5UZXN0QXJndW1lbnRzKCkK
LSAgICAgICAgdGVzdF9hcmdzLnBuZ19wYXRoID0gTm9uZQotICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLnBpeGVsX3Rlc3RzOgotICAgICAgICAgICAgcG5nX3BhdGggPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJwbmdfcmVzdWx0JXMucG5nIiAlIGluZGV4KQotICAgICAgICAgICAgdGVzdF9h
cmdzLnBuZ19wYXRoID0gcG5nX3BhdGgKLSAgICAgICAgdGVzdF9hcmdzLm5ld19iYXNlbGluZSA9
IHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lCi0gICAgICAgIHRlc3RfYXJncy5yZXNldF9yZXN1
bHRzID0gc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzCi0KLSAgICAgICAgcmV0dXJuIHRlc3Rf
YXJncworICAgICAgICByZXR1cm4gdGVzdF9saXN0cwogCiAgICAgZGVmIF9jb250YWluc190ZXN0
cyhzZWxmLCBzdWJkaXIpOgogICAgICAgICBmb3IgdGVzdF9maWxlIGluIHNlbGYuX3Rlc3RfZmls
ZXM6CkBAIC01OTEsNDAgKzU2MSw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBkZWYgX2luc3RhbnRp
YXRlX2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkcyhzZWxmLCB0ZXN0X2ZpbGVzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KToKLSAg
ICAgICAgIiIiSW5zdGFudGl0YXRlcyBhbmQgc3RhcnRzIHRoZSBUZXN0U2hlbGxUaHJlYWQocyku
Ci0KLSAgICAgICAgUmV0dXJuOgotICAgICAgICAgIFRoZSBsaXN0IG9mIHRocmVhZHMuCi0gICAg
ICAgICIiIgotICAgICAgICBmaWxlbmFtZV9xdWV1ZSA9IHNlbGYuX2dldF90ZXN0X2ZpbGVfcXVl
dWUodGVzdF9maWxlcykKLQotICAgICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVsbFRocmVhZHMg
YW5kIHN0YXJ0IHRoZW0uCi0gICAgICAgIHRocmVhZHMgPSBbXQotICAgICAgICBmb3IgaSBpbiB4
cmFuZ2UoaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSk6Ci0gICAgICAgICAgICAj
IENyZWF0ZSBzZXBhcmF0ZSBUZXN0VHlwZXMgaW5zdGFuY2VzIGZvciBlYWNoIHRocmVhZC4KLSAg
ICAgICAgICAgIHRlc3RfdHlwZXMgPSBbXQotICAgICAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiBz
ZWxmLl90ZXN0X3R5cGVzOgotICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMuYXBwZW5kKHRlc3Rf
dHlwZShzZWxmLl9wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCi0KLSAgICAgICAgICAgIHRlc3RfYXJncyA9
IHNlbGYuX2dldF90ZXN0X2FyZ3MoaSkKLSAgICAgICAgICAgIHRocmVhZCA9IGR1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAotICAgICAgICAgICAgICAg
IHNlbGYuX29wdGlvbnMsIGZpbGVuYW1lX3F1ZXVlLCBzZWxmLl9yZXN1bHRfcXVldWUsCi0gICAg
ICAgICAgICAgICAgdGVzdF90eXBlcywgdGVzdF9hcmdzKQotICAgICAgICAgICAgaWYgc2VsZi5f
aXNfc2luZ2xlX3RocmVhZGVkKCk6Ci0gICAgICAgICAgICAgICAgdGhyZWFkLnJ1bl9pbl9tYWlu
X3RocmVhZChzZWxmLCByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgdGhyZWFkLnN0YXJ0KCkKLSAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHRocmVh
ZCkKLQotICAgICAgICByZXR1cm4gdGhyZWFkcwotCi0gICAgZGVmIF9pc19zaW5nbGVfdGhyZWFk
ZWQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgd2hldGhlciB3ZSBzaG91bGQgcnVuIGFsbCB0
aGUgdGVzdHMgaW4gdGhlIG1haW4gdGhyZWFkLiIiIgotICAgICAgICByZXR1cm4gaW50KHNlbGYu
X29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA9PSAxCi0KICAgICBkZWYgX3J1bl90ZXN0cyhzZWxm
LCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiUnVucyB0aGUgdGVzdHMg
aW4gdGhlIGZpbGVfbGlzdC4KIApAQCAtNjM5LDczICs1NzUsNTcgQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKICAgICAgICAgICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1lOmZpbGVuYW1lLCB0ZXN0X3J1
bl90aW1lOnRlc3RfcnVuX3RpbWV9CiAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFy
eSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cwogICAgICAgICAiIiIKKyAgICAg
ICAgbnVtX3dvcmtlcnMgPSBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpCisKKyAg
ICAgICAgc2VsZi5fY3VycmVudF9maWxlX2xpc3QgPSBmaWxlX2xpc3QKKyAgICAgICAgc2VsZi5f
Y3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisgICAgICAgIHJvdXRlciA9
IHNlbGYuX3JvdXRlcgorCisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzID0gW10KKyAgICAgICAg
c2VsZi5fZ3JvdXBfc3RhdHMgPSB7fQorICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHMgPSB7fQor
ICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgbmFtZSA9
ICd3b3JrZXItJWQnICUgaQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW25hbWVdID0g
e30KKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0c1tuYW1lXVsnbmFtZSddID0gbmFtZQor
ICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW25hbWVdWydudW1fdGVzdHMnXSA9IDAKKyAg
ICAgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0c1tuYW1lXVsndG90YWxfdGltZSddID0gMAorCisg
ICAgICAgIHRlc3RfbGlzdHMgPSBzZWxmLl9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsCisgICAgICAg
ICAgICBudW1fd29ya2VycyA9PSAxIG9yIHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5
X3BhcmFsbGVsKQorICAgICAgICBmb3IgdGVzdF9saXN0IGluIHRlc3RfbGlzdHM6CisgICAgICAg
ICAgICByb3V0ZXIucG9zdF90ZXN0X2xpc3QodGVzdF9saXN0KQorCisgICAgICAgICMgVGVsbCB0
aGUgd29ya2VycyB0byBzaHV0IGRvd24gYWZ0ZXIgdGhleSdyZSBkb25lIHJ1bm5pbmcgYWxsIHRo
ZQorICAgICAgICAjIHRlc3RzLgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobnVtX3dvcmtlcnMp
OgorICAgICAgICAgICAgcm91dGVyLnBvc3Rfc3RvcCgpCisKICAgICAgICAgIyBGSVhNRTogV2Ug
c2hvdWxkIHVzZSB3ZWJraXRweS50b29sLmdyYW1tYXIucGx1cmFsaXplIGhlcmUuCiAgICAgICAg
IHBsdXJhbCA9ICIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKToK
KyAgICAgICAgaWYgaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA+IDE6CiAgICAg
ICAgICAgICBwbHVyYWwgPSAicyIKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUo
J1N0YXJ0aW5nICVzJXMgLi4uJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChzZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCksIHBsdXJhbCkpCi0gICAgICAgIHRocmVhZHMgPSBz
ZWxmLl9pbnN0YW50aWF0ZV9kdW1wX3JlbmRlcl90cmVlX3RocmVhZHMoZmlsZV9saXN0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3Rh
cnRpbmcgdGVzdGluZyAuLi4iKQogCi0gICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gc2Vs
Zi5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2godGhyZWFkcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3Vt
bWFyeSkKLSAgICAgICAgKHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxf
dGVzdF90aW1pbmdzKSA9IFwKLSAgICAgICAgICAgIHNlbGYuX2NvbGxlY3RfdGltaW5nX2luZm8o
dGhyZWFkcykKKyAgICAgICAgcm91dGVyLnN0YXJ0X3dvcmtlcnMoKQogCi0gICAgICAgIHJldHVy
biAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCi0g
ICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCiAKLSAgICBkZWYgX3dh
aXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHNlbGYsIHRocmVhZHMsIHJlc3VsdF9zdW1tYXJ5KToK
ICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQogICAgICAgICB0cnk6Ci0gICAg
ICAgICAgICAjIExvb3AgdGhyb3VnaCBhbGwgdGhlIHRocmVhZHMgd2FpdGluZyBmb3IgdGhlbSB0
byBmaW5pc2guCi0gICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKLSAgICAg
ICAgICAgIHdoaWxlIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgotICAgICAgICAgICAgICAgIHNvbWVf
dGhyZWFkX2lzX2FsaXZlID0gRmFsc2UKLSAgICAgICAgICAgICAgICB0ID0gdGltZS50aW1lKCkK
LSAgICAgICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAg
ICAgIGV4Y2VwdGlvbl9pbmZvID0gdGhyZWFkLmV4Y2VwdGlvbl9pbmZvKCkKLSAgICAgICAgICAg
ICAgICAgICAgaWYgZXhjZXB0aW9uX2luZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAjIFJlLXJhaXNlIHRoZSB0aHJlYWQncyBleGNlcHRpb24gaGVyZSB0byBtYWtlIGl0
Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIGNsZWFyIHRoYXQgdGVzdGluZyB3YXMgYWJvcnRl
ZC4gT3RoZXJ3aXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgdGVzdHMgdGhhdCBk
aWQgbm90IHJ1biB3b3VsZCBiZSBhc3N1bWVkCi0gICAgICAgICAgICAgICAgICAgICAgICAjIHRv
IGhhdmUgcGFzc2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2lu
Zm9bMF0sIGV4Y2VwdGlvbl9pbmZvWzFdLCBleGNlcHRpb25faW5mb1syXQotCi0gICAgICAgICAg
ICAgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
b21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHRf
dGltZW91dCA9IHRocmVhZC5uZXh0X3RpbWVvdXQoKQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dCk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX2xvZ193ZWRnZWRfdGhyZWFkKHRocmVhZCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJlYWQuY2xlYXJfbmV4dF90aW1lb3V0KCkKLQotICAgICAgICAgICAgICAg
IHNlbGYudXBkYXRlX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCi0KLSAgICAgICAgICAgICAgICBp
ZiBzb21lX3RocmVhZF9pc19hbGl2ZToKLSAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgw
LjAxKQotCisgICAgICAgICAgICByb3V0ZXIubG9vcChzZWxmKQogICAgICAgICBleGNlcHQgS2V5
Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICByb3V0ZXIuY2FuY2VsX3dvcmtlcnMoKQorICAg
ICAgICAgICAgX2xvZy5pbmZvKCJJbnRlcnJ1cHRlZCwgZXhpdGluZyIpCiAgICAgICAgICAgICBr
ZXlib2FyZF9pbnRlcnJ1cHRlZCA9IFRydWUKLSAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhy
ZWFkczoKLSAgICAgICAgICAgICAgICB0aHJlYWQuY2FuY2VsKCkKLQotICAgICAgICByZXR1cm4g
a2V5Ym9hcmRfaW50ZXJydXB0ZWQKLQotICAgIGRlZiBfY29sbGVjdF90aW1pbmdfaW5mbyhzZWxm
LCB0aHJlYWRzKToKLSAgICAgICAgdGVzdF90aW1pbmdzID0ge30KLSAgICAgICAgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MgPSBbXQotICAgICAgICB0aHJlYWRfdGltaW5ncyA9IFtdCi0KLSAgICAg
ICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MuYXBw
ZW5kKHsnbmFtZSc6IHRocmVhZC5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdudW1fdGVzdHMnOiB0aHJlYWQuZ2V0X251bV90ZXN0cygpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAndG90YWxfdGltZSc6IHRocmVhZC5nZXRfdG90YWxf
dGltZSgpfSkKLSAgICAgICAgICAgIHRlc3RfdGltaW5ncy51cGRhdGUodGhyZWFkLmdldF90ZXN0
X2dyb3VwX3RpbWluZ19zdGF0cygpKQotICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWlu
Z3MuZXh0ZW5kKHRocmVhZC5nZXRfdGVzdF9yZXN1bHRzKCkpCisgICAgICAgIGV4Y2VwdDoKKyAg
ICAgICAgICAgICMgVW5leHBlY3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0byBjbGVhbiB1cCB3
b3JrZXJzLgorICAgICAgICAgICAgX2xvZy5pbmZvKCJFeGNlcHRpb24gcmFpc2VkLCBleGl0aW5n
IikKKyAgICAgICAgICAgIHJhaXNlCiAKLSAgICAgICAgcmV0dXJuICh0aHJlYWRfdGltaW5ncywg
dGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgcmV0dXJuIChr
ZXlib2FyZF9pbnRlcnJ1cHRlZCwgc2VsZi5fd29ya2VyX3N0YXRzLnZhbHVlcygpLAorICAgICAg
ICAgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzLCBzZWxmLl9hbGxfcmVzdWx0cykKIAogICAgIGRl
ZiBuZWVkc19odHRwKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHRlc3Qg
cnVubmVyIG5lZWRzIGFuIEhUVFAgc2VydmVyLiIiIgpAQCAtNzg5LDEyICs3MDksMTIgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCiAKLSAgICAg
ICAgc2VsZi5fcHJpbnRfdGltaW5nX3N0YXRpc3RpY3MoZW5kX3RpbWUgLSBzdGFydF90aW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltaW5ncywgdGVz
dF90aW1pbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlk
dWFsX3Rlc3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0X3N1bW1hcnkpCisgICAgICAgICNzZWxmLl9wcmludF90aW1pbmdfc3RhdGlzdGljcyhl
bmRfdGltZSAtIHN0YXJ0X3RpbWUsCisgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAorICAgICAgICAjICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsCisgICAgICAgICMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKIAotICAgICAgICBzZWxm
Ll9wcmludF9yZXN1bHRfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgI3NlbGYuX3By
aW50X3Jlc3VsdF9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQogCiAgICAgICAgIHN5cy5zdGRvdXQu
Zmx1c2goKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKQEAgLTgzOSwyMyArNzU5LDM3IEBA
IGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIF9sb2cuZGVidWcoInN0b3BwaW5nIGhlbHBlciIp
CiAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9oZWxwZXIoKQogCi0gICAgZGVmIHVwZGF0ZV9zdW1t
YXJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChz
ZWxmLCBzcmMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3Jj
KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNy
YywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgogICAgICAgICAiIiJVcGRhdGUgdGhlIHN1bW1hcnkg
YW5kIHByaW50IHJlc3VsdHMgd2l0aCBhbnkgY29tcGxldGVkIHRlc3RzLiIiIgotICAgICAgICB3
aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRl
c3RfcmVzdWx0cy5UZXN0UmVzdWx0LmxvYWRzKHNlbGYuX3Jlc3VsdF9xdWV1ZS5nZXRfbm93YWl0
KCkpCi0gICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuCi0KLSAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLm1hdGNoZXNf
YW5fZXhwZWN0ZWRfcmVzdWx0KAotICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSwgcmVz
dWx0LnR5cGUsIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMpCi0gICAgICAgICAgICByZXN1bHRf
c3VtbWFyeS5hZGQocmVzdWx0LCBleHBlY3RlZCkKLSAgICAgICAgICAgIGV4cF9zdHIgPSBzZWxm
Ll9leHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoCi0gICAgICAgICAgICAgICAg
cmVzdWx0LmZpbGVuYW1lKQotICAgICAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9u
cy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUpCi0gICAgICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQsIGV4cF9zdHIsIGdvdF9z
dHIpCi0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Byb2dyZXNzKHJlc3VsdF9zdW1t
YXJ5LCBzZWxmLl9yZXRyeWluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0KQorICAgICAgICBzZWxmLl91cGRhdGVfd29ya2Vy
X3N0YXRzKHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBz
ZWxmLl9leHBlY3RhdGlvbnMubWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoCisgICAgICAgICAg
ICByZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC50eXBlLCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3Rz
KQorICAgICAgICBleHBfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNf
c3RyaW5nKAorICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lKQorICAgICAgICBnb3Rfc3RyID0g
c2VsZi5fZXhwZWN0YXRpb25zLmV4cGVjdGF0aW9uX3RvX3N0cmluZyhyZXN1bHQudHlwZSkKKyAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkLCBl
eHBfc3RyLCBnb3Rfc3RyKQorCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnku
YWRkKHJlc3VsdCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfcHJvZ3Jl
c3Moc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9yZXRyeWluZywgc2VsZi5fdGVzdF9maWxlc19saXN0KQorCisg
ICAgZGVmIGhhbmRsZV9maW5pc2hlZF9ncm91cChzZWxmLCBzcmMsIGdyb3VwX25hbWUsIG51bV90
ZXN0cywgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHNbZ3JvdXBfbmFt
ZV0gPSAobnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlv
bihzZWxmLCBzcmMsIGV4Y2VwdGlvbl9pbmZvKToKKyAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2lu
Zm9bMF0sIGV4Y2VwdGlvbl9pbmZvWzFdLCBleGNlcHRpb25faW5mb1syXQorCisgICAgZGVmIF91
cGRhdGVfd29ya2VyX3N0YXRzKHNlbGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAg
ICAgICBzZWxmLl93b3JrZXJfc3RhdHNbc3JjXVsndG90YWxfdGltZSddICs9IGVsYXBzZWRfdGlt
ZQorICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHNbc3JjXVsnbnVtX3Rlc3RzJ10gKz0gMQorICAg
ICAgICBzZWxmLl9hbGxfcmVzdWx0cy5hcHBlbmQocmVzdWx0KQogCiAgICAgZGVmIF9jbG9iYmVy
X29sZF9yZXN1bHRzKHNlbGYpOgogICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRl
c3QgcmVzdWx0cyBkaXJlY3RvcmllcyBzaW5jZSB0aGUgb3RoZXIKQEAgLTk4OCwxMiArOTIyLDEz
IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9vcHRp
b25zLnRpbWVfb3V0X21zLAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5z
bG93X3RpbWVfb3V0X21zKSkKIAotICAgICAgICBpZiBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQo
KToKKyAgICAgICAgaWYgaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA9PSAxOgog
ICAgICAgICAgICAgcC5wcmludF9jb25maWcoIlJ1bm5pbmcgb25lICVzIiAlIHNlbGYuX3BvcnQu
ZHJpdmVyX25hbWUoKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHAucHJpbnRfY29uZmln
KCJSdW5uaW5nICVzICVzcyBpbiBwYXJhbGxlbCIgJQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSkpCisgICAgICAgIHAucHJpbnRfY29uZmln
KCJXb3JrZXJzIGFyZSAlcyIgJSBzZWxmLl9vcHRpb25zLndvcmtlcnNfYXJlKQogICAgICAgICBw
LnByaW50X2NvbmZpZygiIikKIAogICAgIGRlZiBfcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90
eXBlKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LApAQCAtMTM4MywxMSArMTMxOCwxMyBAQCBkZWYgcnVu
KHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCiAgICAgICAg
IHByaW50ZXIuY2xlYW51cCgpCiAgICAgICAgIHJldHVybiAwCiAKKyAgICByb3V0ZXJfb2JqID0g
cm91dGVyLmdldChwb3J0LCBvcHRpb25zKQorCiAgICAgIyBXZSB3cmFwIGFueSBwYXJ0cyBvZiB0
aGUgcnVuIHRoYXQgYXJlIHNsb3cgb3IgbGlrZWx5IHRvIHJhaXNlIGV4Y2VwdGlvbnMKICAgICAj
IGluIGEgdHJ5L2ZpbmFsbHkgdG8gZW5zdXJlIHRoYXQgd2UgY2xlYW4gdXAgdGhlIGxvZ2dpbmcg
Y29uZmlndXJhdGlvbi4KICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzID0gLTEKICAgICB0cnk6
Ci0gICAgICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVy
KQorICAgICAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIocG9ydCwgb3B0aW9ucywgcHJpbnRl
ciwgcm91dGVyX29iaikKICAgICAgICAgdGVzdF9ydW5uZXIuX3ByaW50X2NvbmZpZygpCiAKICAg
ICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4uIikKQEAgLTE0
MTYsNiArMTM1Myw3IEBAIGRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgcmVndWxhcl9vdXRw
dXQ9c3lzLnN0ZGVyciwKICAgICAgICAgICAgIF9sb2cuZGVidWcoIlRlc3RpbmcgY29tcGxldGVk
LCBFeGl0IHN0YXR1czogJWQiICUKICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3VuZXhwZWN0
ZWRfcmVzdWx0cykKICAgICBmaW5hbGx5OgorICAgICAgICByb3V0ZXJfb2JqLmNsZWFudXAoKQog
ICAgICAgICBwcmludGVyLmNsZWFudXAoKQogCiAgICAgcmV0dXJuIG51bV91bmV4cGVjdGVkX3Jl
c3VsdHMKQEAgLTE0MjUsOSArMTM2MywxNCBAQCBkZWYgX3NldF91cF9kZXJpdmVkX29wdGlvbnMo
cG9ydF9vYmosIG9wdGlvbnMpOgogICAgICIiIlNldHMgdGhlIG9wdGlvbnMgdmFsdWVzIHRoYXQg
ZGVwZW5kIG9uIG90aGVyIG9wdGlvbnMgdmFsdWVzLiIiIgogCiAgICAgaWYgbm90IG9wdGlvbnMu
Y2hpbGRfcHJvY2Vzc2VzOgotICAgICAgICAjIEZJWE1FOiBJbnZlc3RpZ2F0ZSBwZXJmL2ZsYWtp
bmVzcyBpbXBhY3Qgb2YgdXNpbmcgY3B1X2NvdW50ICsgMS4KLSAgICAgICAgb3B0aW9ucy5jaGls
ZF9wcm9jZXNzZXMgPSBvcy5lbnZpcm9uLmdldCgiV0VCS0lUX1RFU1RfQ0hJTERfUFJPQ0VTU0VT
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIo
cG9ydF9vYmouZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCisgICAgICAgIGlmIG9wdGlvbnMu
d29ya2Vyc19hcmUgPT0gJ2lubGluZSc6CisgICAgICAgICAgICBvcHRpb25zLmNoaWxkX3Byb2Nl
c3NlcyA9ICIxIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9j
ZXNzZXMgPSBvcy5lbnZpcm9uLmdldCgiV0VCS0lUX1RFU1RfQ0hJTERfUFJPQ0VTU0VTIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHBv
cnRfb2JqLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgIGVsaWYgb3B0aW9ucy53b3Jr
ZXJzX2FyZSA9PSAnaW5saW5lJyBhbmQgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPiAxOgorICAg
ICAgICBfbG9nLndhcm5pbmcoIi0td29ya2Vycy1hcmU9aW5saW5lIG92ZXJyaWRlcyAtLWNoaWxk
LXByb2Nlc3NlcyIpCisgICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gIjEiCiAKICAg
ICBpZiBub3Qgb3B0aW9ucy5jb25maWd1cmF0aW9uOgogICAgICAgICBvcHRpb25zLmNvbmZpZ3Vy
YXRpb24gPSBwb3J0X29iai5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQpAQCAtMTQ3OCw3ICsxNDIx
LDkgQEAgZGVmIF9jb21wYXRfc2hpbV9vcHRpb24ob3B0aW9uX25hbWUsICoqa3dhcmdzKToKIGRl
ZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgIiIiUHJvdmlkZXMgYSBkZWZhdWx0IHNldCBv
ZiBjb21tYW5kIGxpbmUgYXJncy4KIAotICAgIFJldHVybnMgYSB0dXBsZSBvZiBvcHRpb25zLCBh
cmdzIGZyb20gb3B0cGFyc2UiIiIKKyAgICBSZXR1cm5zIGEgdHVwbGUgb2Ygb3B0aW9ucywgYXJn
cyBmcm9tIG9wdHBhcnNlLiIiIgorICAgIGlmIGFyZ3MgaXMgTm9uZToKKyAgICAgICAgYXJncyA9
IHN5cy5hcmd2WzE6XQogCiAgICAgIyBGSVhNRTogQWxsIG9mIHRoZXNlIG9wdGlvbnMgc2hvdWxk
IGJlIHN0b3JlZCBjbG9zZXIgdG8gdGhlIGNvZGUgd2hpY2gKICAgICAjIEZJWE1FOiBhY3R1YWxs
eSB1c2VzIHRoZW0uIGNvbmZpZ3VyYXRpb25fb3B0aW9ucyBzaG91bGQgbW92ZQpAQCAtMTY0OCw5
ICsxNTkzLDEzIEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCItLWNoaWxkLXByb2Nlc3NlcyIsCiAgICAgICAgICAgICBoZWxwPSJOdW1i
ZXIgb2YgRHVtcFJlbmRlclRyZWVzIHRvIHJ1biBpbiBwYXJhbGxlbC4iKSwKICAgICAgICAgIyBG
SVhNRTogRGlzcGxheSBkZWZhdWx0IG51bWJlciBvZiBjaGlsZCBwcm9jZXNzZXMgdGhhdCB3aWxs
IHJ1bi4KKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0td29ya2Vycy1hcmUiLCBhY3Rp
b249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJwcm9jZXNz
ZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImNvbnRyb2xzIHdvcmtlciBt
b2RlbC4gVmFsaWQgdmFsdWVzIGFyZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidp
bmxpbmUnLCAndGhyZWFkcycsIGFuZCAncHJvY2Vzc2VzJyAoZGVmYXVsdCkuIiksCiAgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWV4cGVyaW1lbnRhbC1mdWxseS1wYXJhbGxlbCIsCiAg
ICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAg
ICAgaGVscD0icnVuIGFsbCB0ZXN0cyBpbiBwYXJhbGxlbCIpLAorICAgICAgICAgICAgaGVscD0i
UnVuIGFsbCB0ZXN0cyBpbiBwYXJhbGxlbCAoZG9uJ3Qgc2hhcmQgdGhlbSkuIiksCiAgICAgICAg
ICMgRklYTUU6IE5lZWQgLS1leGl0LWFmdGVyLW4tZmFpbHVyZXMgTgogICAgICAgICAjICAgICAg
RXhpdCBhZnRlciB0aGUgZmlyc3QgTiBmYWlsdXJlcyBpbnN0ZWFkIG9mIHJ1bm5pbmcgYWxsIHRl
c3RzCiAgICAgICAgICMgRklYTUU6IE5lZWQgLS1leGl0LWFmdGVyLW4tY3Jhc2hlcyBOCkBAIC0x
Njk3LDMwICsxNjQ2LDIyIEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAgICAg
ICBoZWxwPSJJZiB0cnVlLCB1cGxvYWQgZnVsbCBqc29uIHJlc3VsdHMgdG8gc2VydmVyLiIpLAog
ICAgIF0KIAorICAgIG11bHRpX3Byb2Nlc3Nfb3B0aW9ucyA9IFsKKyAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oIi0tbWFuYWdlciIsIGhlbHA9IlRoZSB2YWx1ZSBvZiB0aGUgUXVldWUgIgor
ICAgICAgICAgICAgIm9iamVjdCB1c2VkIGZvciBtZXNzYWdlIHJvdXRpbmciKSwKKyAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oIi0td29ya2VyLW51bWJlciIsIGhlbHA9IldvcmtlciBudW1i
ZXIiKSwKKyAgICBdCisKICAgICBvcHRpb25fbGlzdCA9IChjb25maWd1cmF0aW9uX29wdGlvbnMg
KyBwcmludF9vcHRpb25zICsKICAgICAgICAgICAgICAgICAgICBjaHJvbWl1bV9vcHRpb25zICsg
cmVzdWx0c19vcHRpb25zICsgdGVzdF9vcHRpb25zICsKICAgICAgICAgICAgICAgICAgICBtaXNj
X29wdGlvbnMgKyByZXN1bHRzX2pzb25fb3B0aW9ucyArCi0gICAgICAgICAgICAgICAgICAgb2xk
X3J1bl93ZWJraXRfdGVzdHNfY29tcGF0KQorICAgICAgICAgICAgICAgICAgIG11bHRpX3Byb2Nl
c3Nfb3B0aW9ucyArIG9sZF9ydW5fd2Via2l0X3Rlc3RzX2NvbXBhdCkKICAgICBvcHRpb25fcGFy
c2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbl9saXN0KQotCi0g
ICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQotCi0gICAg
cmV0dXJuIG9wdGlvbnMsIGFyZ3MKLQotCi1kZWYgX2xvZ193ZWRnZWRfdGhyZWFkKHRocmVhZCk6
Ci0gICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUuIiIi
Ci0gICAgaWQgPSB0aHJlYWQuaWQoKQotICAgIHN0YWNrID0gZHVtcF9yZW5kZXJfdHJlZV90aHJl
YWQuZmluZF90aHJlYWRfc3RhY2soaWQpCi0gICAgYXNzZXJ0KHN0YWNrIGlzIG5vdCBOb25lKQot
ICAgIF9sb2cuZXJyb3IoIiIpCi0gICAgX2xvZy5lcnJvcigidGhyZWFkICVzICglZCkgaXMgd2Vk
Z2VkIiAlICh0aHJlYWQuZ2V0TmFtZSgpLCBpZCkpCi0gICAgZHVtcF9yZW5kZXJfdHJlZV90aHJl
YWQubG9nX3N0YWNrKHN0YWNrKQotICAgIF9sb2cuZXJyb3IoIiIpCisgICAgcmV0dXJuIG9wdGlv
bl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQogCiAKLWRlZiBtYWluKCk6Ci0gICAgb3B0aW9ucywg
YXJncyA9IHBhcnNlX2FyZ3MoKQorZGVmIG1haW4oYXJndj1Ob25lKToKKyAgICBvcHRpb25zLCBh
cmdzID0gcGFyc2VfYXJncyhhcmd2KQogICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5w
bGF0Zm9ybSwgb3B0aW9ucykKICAgICByZXR1cm4gcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdz
KQogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQppbmRleCAyNDhh
MjkxZDM5MzAzMjVmYzcyY2JmMDZkZmQ2MmUzYWQwNmE0MjJiLi44YzlmNThkNjg0MWJhNzQxNmY0
ZjMyMmZhZGUxYTRiZDczNGY0ODY4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNf
dW5pdHRlc3QucHkKQEAgLTcyLDE1ICs3MiwxNyBAQCBkZWYgcGFzc2luZ19ydW4oZXh0cmFfYXJn
cz1Ob25lLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwKICAgICAgICAgYXJn
cy5leHRlbmQoWyctLXBsYXRmb3JtJywgJ3Rlc3QnXSkKICAgICBpZiBub3QgcmVjb3JkX3Jlc3Vs
dHM6CiAgICAgICAgIGFyZ3MuYXBwZW5kKCctLW5vLXJlY29yZC1yZXN1bHRzJykKKyAgICBpZiBu
b3QgJy0tY2hpbGQtcHJvY2Vzc2VzJyBpbiBleHRyYV9hcmdzOgorICAgICAgICBhcmdzLmV4dGVu
ZChbJy0td29ya2Vycy1hcmUnLCAnaW5saW5lJ10pCiAgICAgYXJncy5leHRlbmQoZXh0cmFfYXJn
cykKICAgICBpZiBub3QgdGVzdHNfaW5jbHVkZWQ6CiAgICAgICAgICMgV2UgdXNlIHRoZSBnbG9i
IHRvIHRlc3QgdGhhdCBnbG9iYmluZyB3b3Jrcy4KICAgICAgICAgYXJncy5leHRlbmQoWydwYXNz
ZXMnLAogICAgICAgICAgICAgICAgICAgICAgJ2h0dHAvdGVzdHMnLAotICAgICAgICAgICAgICAg
ICAgICAgJ2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAg
ICd3ZWJzb2NrZXQvdGVzdHMnLAogICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVj
dGVkLyonXSkKICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFy
c2VfYXJncyhhcmdzKQotICAgIGlmIG5vdCBwb3J0X29iajoKKyAgICBpZiBwb3J0X29iaiBpcyBO
b25lOgogICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KHBvcnRfbmFtZT1vcHRpb25zLnBsYXRm
b3JtLCBvcHRpb25zPW9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj1N
b2NrVXNlcigpKQogICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVzdHMucnVuKHBvcnRfb2JqLCBvcHRp
b25zLCBwYXJzZWRfYXJncykKQEAgLTkyLDYgKzk0LDggQEAgZGVmIGxvZ2dpbmdfcnVuKGV4dHJh
X2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UpOgogICAgIGFy
Z3MgPSBbJy0tbm8tcmVjb3JkLXJlc3VsdHMnXQogICAgIGlmIG5vdCAnLS1wbGF0Zm9ybScgaW4g
ZXh0cmFfYXJnczoKICAgICAgICAgYXJncy5leHRlbmQoWyctLXBsYXRmb3JtJywgJ3Rlc3QnXSkK
KyAgICBpZiBub3QgJy0tY2hpbGQtcHJvY2Vzc2VzJyBpbiBleHRyYV9hcmdzOgorICAgICAgICBh
cmdzLmV4dGVuZChbJy0td29ya2Vycy1hcmUnLCAnaW5saW5lJ10pCiAgICAgYXJncy5leHRlbmQo
ZXh0cmFfYXJncykKICAgICBpZiBub3QgdGVzdHNfaW5jbHVkZWQ6CiAgICAgICAgIGFyZ3MuZXh0
ZW5kKFsncGFzc2VzJywKQEAgLTExNiw3ICsxMjAsNyBAQCBkZWYgZ2V0X3Rlc3RzX3J1bihleHRy
YV9hcmdzPU5vbmUsIHRlc3RzX2luY2x1ZGVkPUZhbHNlLCBmbGF0dGVuX2JhdGNoZXM9RmFsc2Up
OgogICAgICAgICAnLS1wcmludCcsICdub3RoaW5nJywKICAgICAgICAgJy0tcGxhdGZvcm0nLCAn
dGVzdCcsCiAgICAgICAgICctLW5vLXJlY29yZC1yZXN1bHRzJywKLSAgICAgICAgJy0tY2hpbGQt
cHJvY2Vzc2VzJywgJzEnXQorICAgICAgICAnLS13b3JrZXJzLWFyZScsICdpbmxpbmUnXQogICAg
IGFyZ3MuZXh0ZW5kKGV4dHJhX2FyZ3MpCiAgICAgaWYgbm90IHRlc3RzX2luY2x1ZGVkOgogICAg
ICAgICAjIE5vdCBpbmNsdWRpbmcgaHR0cCB0ZXN0cyBzaW5jZSB0aGV5IGdldCBydW4gb3V0IG9m
IG9yZGVyICh0aGF0CkBAIC0yMTQsNyArMjE4LDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2tleWJvYXJkX2ludGVycnVwdChzZWxmKToKICAgICAg
ICAgIyBOb3RlIHRoYXQgdGhpcyBhbHNvIHRlc3RzIHJ1bm5pbmcgYSB0ZXN0IG1hcmtlZCBhcyBT
S0lQIGlmCiAgICAgICAgICMgeW91IHNwZWNpZnkgaXQgZXhwbGljaXRseS4KLSAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIHBhc3NpbmdfcnVuLAorICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgbG9nZ2luZ19ydW4sCiAgICAgICAg
ICAgICBbJ2ZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJkLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9
VHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2xhc3RfcmVzdWx0cyhzZWxmKToKQEAgLTI2MSw4ICsyNjUs
MTYgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rf
cnVuX2ZvcmNlKHNlbGYpOgogICAgICAgICAjIFRoaXMgcmFpc2VzIGFuIGV4Y2VwdGlvbiBiZWNh
dXNlIHdlIHJ1bgotICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sLCB3
aGljaCBpcyBub3JtYWxseSBTS0lQcGVkLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1
ZUVycm9yLCBsb2dnaW5nX3J1biwgWyctLWZvcmNlJ10pCisgICAgICAgICMgZmFpbHVyZXMvZXhw
ZWN0ZWQvZXhjZXB0aW9uLmh0bWwgYW5kCisgICAgICAgICMgZmFpbHVyZXMvZXhwZWN0ZWQva2V5
Ym9hcmQsIHdoaWNoIGFyZSBub3JtYWxseSBTS0lQcGVkLgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBsb2dnaW5nX3J1bihbJy0tZm9yY2UnXSkKKyAgICAgICAgICAgIHRlc3RfcGFzc2VkID0g
RmFsc2UKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICB0ZXN0X3Bhc3Nl
ZCA9IFRydWUKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAg
dGVzdF9wYXNzZWQgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X3Bhc3NlZCkK
IAogICAgIGRlZiB0ZXN0X3J1bl9wYXJ0KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCB3ZSBh
Y3R1YWxseSBzZWxlY3QgdGhlIHJpZ2h0IHBhcnQKQEAgLTQyNCw3ICs0MzYsNiBAQCBjbGFzcyBS
ZWJhc2VsaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGZpbmFsbHk6CiAgICAg
ICAgICAgICBjb2RlY3Mub3BlbiA9IG9yaWdpbmFsX29wZW4KIAotCiBjbGFzcyBUZXN0UnVubmVy
V3JhcHBlcihydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIpOgogICAgIGRlZiBfZ2V0X3Rlc3Rf
aW5mb19mb3JfZmlsZShzZWxmLCB0ZXN0X2ZpbGUpOgogICAgICAgICByZXR1cm4gdGVzdF9maWxl
CkBAIC00MzYsNyArNDQ3LDggQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICBtb2NrX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSA9IGxhbWJkYSBu
YW1lOiBuYW1lCiAgICAgICAgIG1vY2tfcG9ydC5maWxlbmFtZV90b191cmkgPSBsYW1iZGEgbmFt
ZTogbmFtZQogCi0gICAgICAgIHJ1bm5lciA9IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcihw
b3J0PW1vY2tfcG9ydCwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpKQorICAgICAgICBy
dW5uZXIgPSBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIocG9ydD1tb2NrX3BvcnQsCisgICAg
ICAgICAgICBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCksIHJvdXRlcj1Nb2NrKCkpCiAg
ICAgICAgIGV4cGVjdGVkX2h0bWwgPSB1IiIiPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5M
YXlvdXQgVGVzdCBSZXN1bHRzICh0aW1lKTwvdGl0bGU+CkBAIC00NTAsMjAgKzQ2MiwxMCBAQCBj
bGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGh0bWwgPSBy
dW5uZXIuX3Jlc3VsdHNfaHRtbChbInRlc3RfcGF0aCJdLCB7fSwgIlRpdGxlIiwgb3ZlcnJpZGVf
dGltZT0idGltZSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHRtbCwgZXhwZWN0ZWRfaHRt
bCkKIAotICAgIGRlZiBxdWV1ZV90b19saXN0KHNlbGYsIHF1ZXVlKToKLSAgICAgICAgcXVldWVf
bGlzdCA9IFtdCi0gICAgICAgIHdoaWxlKFRydWUpOgotICAgICAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgICAgIHF1ZXVlX2xpc3QuYXBwZW5kKHF1ZXVlLmdldF9ub3dhaXQoKSkKLSAgICAgICAg
ICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBy
ZXR1cm4gcXVldWVfbGlzdAotCi0gICAgZGVmIHRlc3RfZ2V0X3Rlc3RfZmlsZV9xdWV1ZShzZWxm
KToKKyAgICBkZWYgdGVzdF9zaGFyZF90ZXN0cyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQg
X2dldF90ZXN0X2ZpbGVfcXVldWUgaW4gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyIHJlYWxs
eQogICAgICAgICAjIHB1dCB0aGUgaHR0cCB0ZXN0cyBmaXJzdCBpbiB0aGUgcXVldWUuCi0gICAg
ICAgIHJ1bm5lciA9IFRlc3RSdW5uZXJXcmFwcGVyKHBvcnQ9TW9jaygpLCBvcHRpb25zPU1vY2so
KSwgcHJpbnRlcj1Nb2NrKCkpCi0gICAgICAgIHJ1bm5lci5fb3B0aW9ucy5leHBlcmltZW50YWxf
ZnVsbHlfcGFyYWxsZWwgPSBGYWxzZQorICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBl
cihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpLCByb3V0ZXI9TW9j
aygpKQogCiAgICAgICAgIHRlc3RfbGlzdCA9IFsKICAgICAgICAgICAiTGF5b3V0VGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRtIiwKQEAgLTQ4NCwxOSArNDg2LDE1IEBAIGNsYXNzIFRl
c3RSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAnTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRt
bCcsCiAgICAgICAgIF0pCiAKLSAgICAgICAgcnVubmVyLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3Nl
cyA9IDEKLSAgICAgICAgdGVzdF9xdWV1ZV9mb3Jfc2luZ2xlX3RocmVhZCA9IHJ1bm5lci5fZ2V0
X3Rlc3RfZmlsZV9xdWV1ZSh0ZXN0X2xpc3QpCi0gICAgICAgIHJ1bm5lci5fb3B0aW9ucy5jaGls
ZF9wcm9jZXNzZXMgPSAyCi0gICAgICAgIHRlc3RfcXVldWVfZm9yX211bHRpX3RocmVhZCA9IHJ1
bm5lci5fZ2V0X3Rlc3RfZmlsZV9xdWV1ZSh0ZXN0X2xpc3QpCi0KLSAgICAgICAgc2luZ2xlX3Ro
cmVhZF9yZXN1bHRzID0gc2VsZi5xdWV1ZV90b19saXN0KHRlc3RfcXVldWVfZm9yX3NpbmdsZV90
aHJlYWQpCi0gICAgICAgIG11bHRpX3RocmVhZF9yZXN1bHRzID0gc2VsZi5xdWV1ZV90b19saXN0
KHRlc3RfcXVldWVfZm9yX211bHRpX3RocmVhZCkKKyAgICAgICAgc2luZ2xlX3RocmVhZF9yZXN1
bHRzID0gcnVubmVyLl9zaGFyZF90ZXN0cyh0ZXN0X2xpc3QsIFRydWUpCisgICAgICAgIG11bHRp
X3RocmVhZF9yZXN1bHRzID0gcnVubmVyLl9zaGFyZF90ZXN0cyh0ZXN0X2xpc3QsIEZhbHNlKQog
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRlc3RzX3RvX2h0dHBfbG9jayIsIHNpbmdsZV90
aHJlYWRfcmVzdWx0c1swXVswXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF90
ZXN0c190b19odHRwX2xvY2ssIHNldChzaW5nbGVfdGhyZWFkX3Jlc3VsdHNbMF1bMV0pKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0c190b19odHRwX2xvY2siLCBtdWx0aV90aHJlYWRf
cmVzdWx0c1swXVswXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF90ZXN0c190
b19odHRwX2xvY2ssIHNldChtdWx0aV90aHJlYWRfcmVzdWx0c1swXVsxXSkpCiAKKwogY2xhc3Mg
RHJ5cnVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBGSVhNRTogaXQncyBoYXJkIHRv
IGtub3cgd2hpY2ggcGxhdGZvcm1zIGFyZSBzYWZlIHRvIHRlc3Q7IHRoZQogICAgICMgY2hyb21p
dW0gcGxhdGZvcm1zIHJlcXVpcmUgYSBjaHJvbWl1bSBjaGVja291dCwgYW5kIHRoZSBtYWMgcGxh
dGZvcm0KQEAgLTUxNyw0MSArNTE1LDYgQEAgY2xhc3MgRHJ5cnVuVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tcGl4
ZWwtdGVzdHMnXSkpCiAKIAotY2xhc3MgVGVzdFRocmVhZChkdW1wX3JlbmRlcl90cmVlX3RocmVh
ZC5XYXRjaGFibGVUaHJlYWQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydGVkX3F1ZXVl
LCBzdG9wcGluZ19xdWV1ZSk6Ci0gICAgICAgIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldhdGNo
YWJsZVRocmVhZC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9zdGFydGVkX3F1ZXVlID0g
c3RhcnRlZF9xdWV1ZQotICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZSA9IHN0b3BwaW5nX3F1
ZXVlCi0gICAgICAgIHNlbGYuX3RpbWVvdXQgPSBGYWxzZQotICAgICAgICBzZWxmLl90aW1lb3V0
X3F1ZXVlID0gUXVldWUuUXVldWUoKQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2Vs
Zi5fY292ZXJlZF9ydW4oKQotCi0gICAgZGVmIF9jb3ZlcmVkX3J1bihzZWxmKToKLSAgICAgICAg
IyBGSVhNRTogdGhpcyBpcyBhIHNlcGFyYXRlIHJvdXRpbmUgdG8gd29yayBhcm91bmQgYSBidWcK
LSAgICAgICAgIyBpbiBjb3ZlcmFnZTogc2VlIGh0dHA6Ly9iaXRidWNrZXQub3JnL25lZC9jb3Zl
cmFnZXB5L2lzc3VlLzg1LgotICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lk
ZW50KCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fc3RhcnRlZF9xdWV1ZS5wdXQo
JycpCi0gICAgICAgICAgICBtc2cgPSBzZWxmLl9zdG9wcGluZ19xdWV1ZS5nZXQoKQotICAgICAg
ICAgICAgaWYgbXNnID09ICdLZXlib2FyZEludGVycnVwdCc6Ci0gICAgICAgICAgICAgICAgcmFp
c2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgICAgIGVsaWYgbXNnID09ICdFeGNlcHRpb24n
OgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQotICAgICAgICAgICAgZWxpZiBt
c2cgPT0gJ1RpbWVvdXQnOgotICAgICAgICAgICAgICAgIHNlbGYuX3RpbWVvdXQgPSBUcnVlCi0g
ICAgICAgICAgICAgICAgc2VsZi5fdGltZW91dF9xdWV1ZS5nZXQoKQotICAgICAgICBleGNlcHQ6
Ci0gICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygpCi0KLSAg
ICBkZWYgbmV4dF90aW1lb3V0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLl90aW1lb3V0OgotICAg
ICAgICAgICAgc2VsZi5fdGltZW91dF9xdWV1ZS5wdXQoJ2RvbmUnKQotICAgICAgICAgICAgcmV0
dXJuIHRpbWUudGltZSgpIC0gMTAKLSAgICAgICAgcmV0dXJuIHRpbWUudGltZSgpCi0KLQogY2xh
c3MgVGVzdEhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAgICBkZWYgX19pbml0X18oc2VsZiwg
YXN0cmVhbSk6CiAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQpAQCAtNTYx
LDcwICs1MjQsNSBAQCBjbGFzcyBUZXN0SGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgogICAgICAg
ICBzZWxmLl9zdHJlYW0ud3JpdGUoc2VsZi5mb3JtYXQocmVjb3JkKSkKIAogCi1jbGFzcyBXYWl0
Rm9yVGhyZWFkc1RvRmluaXNoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgY2xhc3MgTW9j
a1Rlc3RSdW5uZXIocnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKToKLSAgICAgICAgZGVmIF9f
aW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGRlZiBfX2RlbF9fKHNl
bGYpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGRlZiB1cGRhdGVfc3VtbWFyeShzZWxm
LCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBkZWYgcnVuX29uZV90
aHJlYWQoc2VsZiwgbXNnKToKLSAgICAgICAgcnVubmVyID0gc2VsZi5Nb2NrVGVzdFJ1bm5lcigp
Ci0gICAgICAgIHN0YXJ0aW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBzdG9wcGlu
Z19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAgICAgY2hpbGRfdGhyZWFkID0gVGVzdFRocmVh
ZChzdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVldWUpCi0gICAgICAgIGNoaWxkX3RocmVhZC5z
dGFydCgpCi0gICAgICAgIHN0YXJ0ZWRfbXNnID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKLSAgICAg
ICAgc3RvcHBpbmdfcXVldWUucHV0KG1zZykKLSAgICAgICAgdGhyZWFkcyA9IFtjaGlsZF90aHJl
YWRdCi0gICAgICAgIHJldHVybiBydW5uZXIuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRo
cmVhZHMsIE5vbmUpCi0KLSAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgaW50ZXJy
dXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcnKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGludGVycnVwdGVkKQotCi0gICAgZGVmIHRlc3RfaW50ZXJydXB0KHNlbGYpOgotICAgICAgICBp
bnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJ0tleWJvYXJkSW50ZXJydXB0JykKLSAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGludGVycnVwdGVkKQotCi0gICAgZGVmIHRlc3RfdGltZW91
dChzZWxmKToKLSAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQotICAg
ICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5f
b25lX3RocmVhZCgnVGltZW91dCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0
ZWQpCi0gICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKLQotICAgIGRlZiB0ZXN0X2V4Y2VwdGlv
bihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5ydW5f
b25lX3RocmVhZCwgJ0V4Y2VwdGlvbicpCi0KLQotY2xhc3MgU3RhbmRhbG9uZUZ1bmN0aW9uc1Rl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRfdGhyZWFkKHNl
bGYpOgotICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCi0gICAgICAg
IG9jLmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAgbG9nZ2VyID0gcnVuX3dlYmtpdF90ZXN0cy5f
bG9nCi0gICAgICAgIGFzdHJlYW0gPSBhcnJheV9zdHJlYW0uQXJyYXlTdHJlYW0oKQotICAgICAg
ICBoYW5kbGVyID0gVGVzdEhhbmRsZXIoYXN0cmVhbSkKLSAgICAgICAgbG9nZ2VyLmFkZEhhbmRs
ZXIoaGFuZGxlcikKLQotICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAg
ICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIGNoaWxkX3RocmVh
ZCA9IFRlc3RUaHJlYWQoc3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKQotICAgICAgICBj
aGlsZF90aHJlYWQuc3RhcnQoKQotICAgICAgICBtc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQot
Ci0gICAgICAgIHJ1bl93ZWJraXRfdGVzdHMuX2xvZ193ZWRnZWRfdGhyZWFkKGNoaWxkX3RocmVh
ZCkKLSAgICAgICAgc3RvcHBpbmdfcXVldWUucHV0KCcnKQotICAgICAgICBjaGlsZF90aHJlYWQu
am9pbih0aW1lb3V0PTEuMCkKLQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzdHJlYW0uZW1w
dHkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjaGlsZF90aHJlYWQuaXNBbGl2ZSgpKQot
ICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCi0KLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKICAgICB1bml0dGVzdC5tYWluKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73722</attachid>
            <date>2010-11-12 02:01:36 -0800</date>
            <delta_ts>2010-11-15 15:34:11 -0800</delta_ts>
            <desc>cleanup, merge to tip of tree as of r71873</desc>
            <filename>bug-48820-20101112020135.patch</filename>
            <type>text/plain</type>
            <size>84553</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAzNTkzYzAwNWJmYjYyOTg5OTBlMDY4NjQ1YjdkYWMxYzQ2OWVkMTMzLi42MDEyOTk0
ZWI3NjAzMmY1NDJkNjA2MmUxNjZlYjdjMTA0MzYwYjVjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGFsbCBvZiB0aGUg
TlJXVCBtdWx0aXRocmVhZGluZyBpc3N1ZXMgYnkgbW92aW5nIHRvCisgICAgICAgIG11bHRpcHJv
Y2Vzcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3ByaW50aW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlci5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyX3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3Rlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5OgorCiAyMDEwLTExLTExICBEaXJrIFByYW5rZSAg
PGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4K
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJl
ZV90aHJlYWQucHkKaW5kZXggOWYyZGU3ZTQ3NmI3YjVjMGI3ZjExZWRjNDZlODgyNTQ3NGYzZjg1
Zi4uOTg5OTZhMzU0YThhOWM0YWQwMTlmMjY3NzMwYTRhOGMyMDc0NWNhNSAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
ZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQu
cHkKQEAgLTQyLDEzICs0MiwxNSBAQCBpbXBvcnQgY29kZWNzCiBpbXBvcnQgY29weQogaW1wb3J0
IGxvZ2dpbmcKIGltcG9ydCBvcwotaW1wb3J0IFF1ZXVlCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQg
c3lzCi1pbXBvcnQgdGhyZWFkCiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQotaW1wb3J0
IHRyYWNlYmFjaworCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1w
b3J0IHRlc3RfdHlwZV9iYXNlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVz
IGltcG9ydCB0ZXh0X2RpZmYKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMg
aW1wb3J0IGltYWdlX2RpZmYKIAogaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGltcG9ydCB0ZXN0X3Jl
c3VsdHMKQEAgLTU3LDI2ICs1OSw5IEBAIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0
cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLiIKICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQiKQogCiAKLWRlZiBmaW5kX3RocmVhZF9zdGFjayhp
ZCk6Ci0gICAgIiIiUmV0dXJucyBhIHN0YWNrIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGR1
bXAgYSBzdGFjayB0cmFjZSBmb3IKLSAgICB0aGUgZ2l2ZW4gdGhyZWFkIGlkIChvciBOb25lIGlm
IHRoZSBpZCBpcyBub3QgZm91bmQpLiIiIgotICAgIGZvciB0aHJlYWRfaWQsIHN0YWNrIGluIHN5
cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpOgotICAgICAgICBpZiB0aHJlYWRfaWQgPT0gaWQ6
Ci0gICAgICAgICAgICByZXR1cm4gc3RhY2sKLSAgICByZXR1cm4gTm9uZQotCi0KLWRlZiBsb2df
c3RhY2soc3RhY2spOgotICAgICIiIkxvZyBhIHN0YWNrIHRyYWNlIHRvIGxvZy5lcnJvcigpLiIi
IgotICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIHRyYWNlYmFjay5leHRy
YWN0X3N0YWNrKHN0YWNrKToKLSAgICAgICAgX2xvZy5lcnJvcignRmlsZTogIiVzIiwgbGluZSAl
ZCwgaW4gJXMnICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpKQotICAgICAgICBpZiBsaW5lOgot
ICAgICAgICAgICAgX2xvZy5lcnJvcignICAlcycgJSBsaW5lLnN0cmlwKCkpCi0KLQogZGVmIF9w
cm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRlc3Rf
YXJncywKICAgICAgICAgICAgICAgICAgICAgY3Jhc2gsIHRpbWVvdXQsIHRlc3RfcnVuX3RpbWUs
IGFjdHVhbF9jaGVja3N1bSwKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBlcnJvcik6Cisg
ICAgICAgICAgICAgICAgICAgIG91dHB1dCwgZXJyb3IsIG5hbWUpOgogICAgICIiIlJlY2VpdmVz
IHRoZSBvdXRwdXQgZnJvbSBhIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MsIHN1YmplY3RzIGl0IHRv
IGEKICAgICBudW1iZXIgb2YgdGVzdHMsIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBmYWlsdXJlIHR5
cGVzIHRoZSB0ZXN0IHByb2R1Y2VkLgogCkBAIC04NCw3ICs2OSw3IEBAIGRlZiBfcHJvY2Vzc19v
dXRwdXQocG9ydCwgb3B0aW9ucywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCiAg
ICAgICBwb3J0OiBwb3J0LXNwZWNpZmljIGhvb2tzCiAgICAgICBvcHRpb25zOiBjb21tYW5kIGxp
bmUgb3B0aW9ucyBhcmd1bWVudCBmcm9tIG9wdHBhcnNlCiAgICAgICBwcm9jOiBhbiBhY3RpdmUg
RHVtcFJlbmRlclRyZWUgcHJvY2VzcwotICAgICAgdGVzdF9pbmZvOiBPYmplY3QgY29udGFpbmlu
ZyB0aGUgdGVzdCBmaWxlbmFtZSwgdXJpIGFuZCB0aW1lb3V0CisgICAgICB0ZXN0X2luZm86IE9i
amVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lIGFuZCB0aW1lb3V0CiAgICAgICB0ZXN0
X3R5cGVzOiBsaXN0IG9mIHRlc3QgdHlwZXMgdG8gc3ViamVjdCB0aGUgb3V0cHV0IHRvCiAgICAg
ICB0ZXN0X2FyZ3M6IGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gZWFjaCB0ZXN0CiAKQEAgLTk1
LDggKzgwLDkgQEAgZGVmIF9wcm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2luZm8s
IHRlc3RfdHlwZXMsIHRlc3RfYXJncywKICAgICAjIFNvbWUgdGVzdCBhcmdzLCBzdWNoIGFzIHRo
ZSBpbWFnZSBoYXNoLCBtYXkgYmUgYWRkZWQgb3IgY2hhbmdlZCBvbiBhCiAgICAgIyB0ZXN0LWJ5
LXRlc3QgYmFzaXMuCiAgICAgbG9jYWxfdGVzdF9hcmdzID0gY29weS5jb3B5KHRlc3RfYXJncykK
LQorICAgIGxvY2FsX3Rlc3RfYXJncy51cmkgPSB0ZXN0X2luZm8udXJpCiAgICAgbG9jYWxfdGVz
dF9hcmdzLmhhc2ggPSBhY3R1YWxfY2hlY2tzdW0KKyAgICB0ZXN0X25hbWUgPSBwb3J0LnJlbGF0
aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbmZvLmZpbGVuYW1lKQogCiAgICAgaWYgY3Jhc2g6CiAg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCgpKQpAQCAt
MTA0LDE4ICs5MCwxNCBAQCBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3Rf
aW5mbywgdGVzdF90eXBlcywgdGVzdF9hcmdzLAogICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVz
dF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQogCiAgICAgaWYgY3Jhc2g6Ci0gICAgICAgIF9s
b2cuZGVidWcoIlN0YWNrdHJhY2UgZm9yICVzOlxuJXMiICUgKHRlc3RfaW5mby5maWxlbmFtZSwg
ZXJyb3IpKQotICAgICAgICAjIFN0cmlwIG9mZiAiZmlsZTovLyIgc2luY2UgUmVsYXRpdmVUZXN0
RmlsZW5hbWUgZXhwZWN0cwotICAgICAgICAjIGZpbGVzeXN0ZW0gcGF0aHMuCi0gICAgICAgIGZp
bGVuYW1lID0gb3MucGF0aC5qb2luKG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLmZpbGVuYW1lKSkKKyAgICAg
ICAgX2xvZy5kZWJ1ZygiJXMgU3RhY2t0cmFjZSBmb3IgJXM6XG4lcyIgJSAobmFtZSwgdGVzdF9u
YW1lLCBlcnJvcikpCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnksIHRlc3RfbmFtZSkKICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNw
bGl0ZXh0KGZpbGVuYW1lKVswXSArICItc3RhY2sudHh0IgogICAgICAgICBwb3J0Lm1heWJlX21h
a2VfZGlyZWN0b3J5KG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpWzBdKQogICAgICAgICB3aXRoIGNv
ZGVjcy5vcGVuKGZpbGVuYW1lLCAid2IiLCAidXRmLTgiKSBhcyBmaWxlOgogICAgICAgICAgICAg
ZmlsZS53cml0ZShlcnJvcikKICAgICBlbGlmIGVycm9yOgotICAgICAgICBfbG9nLmRlYnVnKCJQ
cmV2aW91cyB0ZXN0IG91dHB1dCBzdGRlcnIgbGluZXM6XG4lcyIgJSBlcnJvcikKKyAgICAgICAg
X2xvZy5kZWJ1ZygiJXMgJXMgc3RkZXJyIGxpbmVzOlxuJXMiICUgKG5hbWUsIHRlc3RfbmFtZSwg
ZXJyb3IpKQogCiAgICAgIyBDaGVjayB0aGUgb3V0cHV0IGFuZCBzYXZlIHRoZSByZXN1bHRzLgog
ICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQpAQCAtMTM4LDMyICsxMjAsMTAgQEAgZGVmIF9w
cm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRlc3Rf
YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfdGltZV9mb3Jf
YWxsX2RpZmZzLCB0aW1lX2Zvcl9kaWZmcykKIAogCi1kZWYgX3BhZF90aW1lb3V0KHRpbWVvdXQp
OgotICAgICIiIlJldHVybnMgYSBzYWZlIG11bHRpcGxlIG9mIHRoZSBwZXItdGVzdCB0aW1lb3V0
IHZhbHVlIHRvIHVzZQotICAgIHRvIGRldGVjdCBodW5nIHRlc3QgdGhyZWFkcy4KLQotICAgICIi
IgotICAgICMgV2hlbiB3ZSdyZSBydW5uaW5nIG9uZSB0ZXN0IHBlciBEdW1wUmVuZGVyVHJlZSBw
cm9jZXNzLCB3ZSBjYW4KLSAgICAjIGVuZm9yY2UgYSBoYXJkIHRpbWVvdXQuICBUaGUgRHVtcFJl
bmRlclRyZWUgd2F0Y2hkb2cgdXNlcyAyLjV4Ci0gICAgIyB0aGUgdGltZW91dDsgd2Ugd2FudCB0
byBiZSBsYXJnZXIgdGhhbiB0aGF0LgotICAgIHJldHVybiB0aW1lb3V0ICogMwotCi0KLWRlZiBf
bWlsbGlzZWNvbmRzX3RvX3NlY29uZHMobXNlY3MpOgotICAgIHJldHVybiBmbG9hdChtc2Vjcykg
LyAxMDAwLjAKLQotCi1kZWYgX2ltYWdlX2hhc2godGVzdF9pbmZvLCB0ZXN0X2FyZ3MsIG9wdGlv
bnMpOgotICAgICIiIlJldHVybnMgdGhlIGltYWdlIGhhc2ggb2YgdGhlIHRlc3QgaWYgaXQncyBu
ZWVkZWQsIG90aGVyd2lzZSBOb25lLiIiIgotICAgIGlmICh0ZXN0X2FyZ3MubmV3X2Jhc2VsaW5l
IG9yIHRlc3RfYXJncy5yZXNldF9yZXN1bHRzIG9yIG5vdCBvcHRpb25zLnBpeGVsX3Rlc3RzKToK
LSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICByZXR1cm4gdGVzdF9pbmZvLmltYWdlX2hhc2goKQot
Ci0KIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgIiIiVGhy
ZWFkIHdyYXBwZXIgZm9yIHJ1bm5pbmcgYSBzaW5nbGUgdGVzdCBmaWxlLiIiIgogCi0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVz
dF9hcmdzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgd29ya2VyX251
bWJlciwgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MpOgogICAgICAgICAiIiIKICAg
ICAgICAgQXJnczoKICAgICAgICAgICBwb3J0OiBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQtc3Bl
Y2lmaWMgaG9va3MKQEAgLTE4MSw2ICsxNDEsOCBAQCBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRo
cmVhZGluZy5UaHJlYWQpOgogICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gdGVzdF90eXBlcwog
ICAgICAgICBzZWxmLl90ZXN0X2FyZ3MgPSB0ZXN0X2FyZ3MKICAgICAgICAgc2VsZi5fZHJpdmVy
ID0gTm9uZQorICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAg
ICAgICBzZWxmLl9uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCiAKICAgICBkZWYg
cnVuKHNlbGYpOgogICAgICAgICBzZWxmLl9jb3ZlcmVkX3J1bigpCkBAIC0xOTIsMjU1ICsxNTQs
MTMzIEBAIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAg
IHNlbGYuX2RyaXZlciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZlcihzZWxmLl90ZXN0X2FyZ3Mu
cG5nX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9vcHRpb25zKQogICAgICAgICBzZWxmLl9kcml2ZXIuc3RhcnQoKQotICAgICAgICBp
bWFnZV9oYXNoID0gX2ltYWdlX2hhc2godGVzdF9pbmZvLCBzZWxmLl90ZXN0X2FyZ3MsIHNlbGYu
X29wdGlvbnMpCiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgICAgICAgY3Jhc2gsIHRp
bWVvdXQsIGFjdHVhbF9jaGVja3N1bSwgb3V0cHV0LCBlcnJvciA9IFwKLSAgICAgICAgICAgIHNl
bGYuX2RyaXZlci5ydW5fdGVzdCh0ZXN0X2luZm8udXJpLnN0cmlwKCksIHRlc3RfaW5mby50aW1l
b3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2hhc2gpCisgICAg
ICAgICAgICBzZWxmLl9kcml2ZXIucnVuX3Rlc3QodGVzdF9pbmZvLnVyaSwgdGVzdF9pbmZvLnRp
bWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLmltYWdl
X2NoZWNrc3VtKQogICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLl90ZXN0
X3Jlc3VsdCA9IF9wcm9jZXNzX291dHB1dChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLAogICAg
ICAgICAgICAgdGVzdF9pbmZvLCBzZWxmLl90ZXN0X3R5cGVzLCBzZWxmLl90ZXN0X2FyZ3MsCiAg
ICAgICAgICAgICBjcmFzaCwgdGltZW91dCwgZW5kIC0gc3RhcnQsCi0gICAgICAgICAgICBhY3R1
YWxfY2hlY2tzdW0sIG91dHB1dCwgZXJyb3IpCisgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0s
IG91dHB1dCwgZXJyb3IsIHNlbGYuX25hbWUpCiAgICAgICAgIHNlbGYuX2RyaXZlci5zdG9wKCkK
IAogICAgIGRlZiBnZXRfdGVzdF9yZXN1bHQoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl90
ZXN0X3Jlc3VsdAogCiAKLWNsYXNzIFdhdGNoYWJsZVRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToK
LSAgICAiIiJUaGlzIGNsYXNzIGFic3RyYWN0cyBhbiBpbnRlcmZhY2UgdXNlZCBieQotICAgIHJ1
bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2ggZm9y
IHRocmVhZAotICAgIG1hbmFnZW1lbnQuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAg
ICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX2NhbmNl
bGVkID0gRmFsc2UKLSAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25lCi0gICAgICAg
IHNlbGYuX25leHRfdGltZW91dCA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gTm9u
ZQotCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiU2V0IGEgZmxhZyB0ZWxsaW5n
IHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCi0gICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQot
Ci0gICAgZGVmIGNsZWFyX25leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgIiIiTWFyayBhIGZs
YWcgdGVsbGluZyB0aGlzIHRocmVhZCB0byBzdG9wIHNldHRpbmcgdGltZW91dHMuIiIiCi0gICAg
ICAgIHNlbGYuX3RpbWVvdXQgPSAwCi0KLSAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6Ci0g
ICAgICAgICIiIklmIHJ1bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9uLCBy
ZXR1cm4gaXQgaGVyZQotICAgICAgICAoKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIHR1cGxlKS4K
LSAgICAgICAgUmV0dXJucyBOb25lIGlmIHJ1bigpIHRlcm1pbmF0ZWQgbm9ybWFsbHkuIE1lYW50
IHRvIGJlIGNhbGxlZCBhZnRlcgotICAgICAgICBqb2luaW5nIHRoaXMgdGhyZWFkLiIiIgotICAg
ICAgICByZXR1cm4gc2VsZi5fZXhjZXB0aW9uX2luZm8KLQotICAgIGRlZiBpZChzZWxmKToKLSAg
ICAgICAgIiIiUmV0dXJuIGEgdGhyZWFkIGlkZW50aWZpZXIuIiIiCi0gICAgICAgIHJldHVybiBz
ZWxmLl90aHJlYWRfaWQKLQotICAgIGRlZiBuZXh0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgICIi
IlJldHVybiB0aGUgdGltZSB0aGUgdGVzdCBpcyBzdXBwb3NlZCB0byBmaW5pc2ggYnkuIiIiCi0g
ICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVvdXQKLQotCi1jbGFzcyBUZXN0U2hlbGxUaHJl
YWQoV2F0Y2hhYmxlVGhyZWFkKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9u
cywgZmlsZW5hbWVfbGlzdF9xdWV1ZSwgcmVzdWx0X3F1ZXVlLAotICAgICAgICAgICAgICAgICB0
ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MpOgorY2xhc3MgV29ya2VyKG9iamVjdCk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIGNvbnRhaW5lciwgb3B0aW9ucywgd29ya2VyX251bWJlcik6CiAg
ICAgICAgICIiIkluaXRpYWxpemUgYWxsIHRoZSBsb2NhbCBzdGF0ZSBmb3IgdGhpcyBEdW1wUmVu
ZGVyVHJlZSB0aHJlYWQuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICBwb3J0OiBpbnRlcmZh
Y2UgdG8gcG9ydC1zcGVjaWZpYyBob29rcwotICAgICAgICAgIG9wdGlvbnM6IGNvbW1hbmQgbGlu
ZSBvcHRpb25zIGFyZ3VtZW50IGZyb20gb3B0cGFyc2UKLSAgICAgICAgICBmaWxlbmFtZV9saXN0
X3F1ZXVlOiBBIHRocmVhZCBzYWZlIFF1ZXVlIGNsYXNzIHRoYXQgY29udGFpbnMgbGlzdHMKLSAg
ICAgICAgICAgICAgb2YgdHVwbGVzIG9mIChmaWxlbmFtZSwgdXJpKSBwYWlycy4KLSAgICAgICAg
ICByZXN1bHRfcXVldWU6IEEgdGhyZWFkIHNhZmUgUXVldWUgY2xhc3MgdGhhdCB3aWxsIGNvbnRh
aW4KLSAgICAgICAgICAgICAgc2VyaWFsaXplZCBUZXN0UmVzdWx0IG9iamVjdHMuCi0gICAgICAg
ICAgdGVzdF90eXBlczogQSBsaXN0IG9mIFRlc3RUeXBlIG9iamVjdHMgdG8gcnVuIHRoZSB0ZXN0
IG91dHB1dAotICAgICAgICAgICAgICBhZ2FpbnN0LgotICAgICAgICAgIHRlc3RfYXJnczogQSBU
ZXN0QXJndW1lbnRzIG9iamVjdCB0byBwYXNzIHRvIGVhY2ggVGVzdFR5cGUuCisgICAgICAgICAg
Y29udGFpbmVyOiBjb250YWluZXIgb2JqZWN0IHRvIHJlY2VpdmUgdGVzdHMgZnJvbQorICAgICAg
ICAgIHdvcmtlcl9udW1iZXI6IG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nCiAKICAgICAgICAgIiIi
Ci0gICAgICAgIFdhdGNoYWJsZVRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9j
YW5jZWxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2NvbnRhaW5lciA9IGNvbnRhaW5lcgogICAg
ICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwot
ICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9xdWV1ZQot
ICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUgPSByZXN1bHRfcXVldWUKKyAgICAgICAgc2VsZi5f
d29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fbmFtZSA9ICd3b3Jr
ZXItJWQnICUgd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9iYXRjaF9zaXplID0gc2VsZi5f
b3B0aW9ucy5iYXRjaF9zaXplCisgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorCiAgICAg
ICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBbXQotICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0g
dGVzdF90eXBlcwotICAgICAgICBzZWxmLl90ZXN0X2FyZ3MgPSB0ZXN0X2FyZ3MKKyAgICAgICAg
c2VsZi5fdGVzdF90eXBlcyA9IFtdCisgICAgICAgIGZvciBjbHMgaW4gc2VsZi5fdGVzdF90eXBl
X2NsYXNzZXMoKToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKGNscyhzZWxm
Ll9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29w
dGlvbnMucmVzdWx0c19kaXJlY3RvcnkpKQorICAgICAgICBzZWxmLl90ZXN0X2FyZ3MgPSBzZWxm
Ll90ZXN0X2FyZ3Mod29ya2VyX251bWJlcikKICAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQot
ICAgICAgICBzZWxmLl90ZXN0X2dyb3VwX3RpbWluZ19zdGF0cyA9IHt9Ci0gICAgICAgIHNlbGYu
X3Rlc3RfcmVzdWx0cyA9IFtdCi0gICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKLSAgICAgICAg
c2VsZi5fc3RhcnRfdGltZSA9IDAKLSAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gMAotICAgICAg
ICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193
YWl0X2JlZ2luID0gMAotICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgPSAwCi0KLSAg
ICAgICAgIyBDdXJyZW50IGdyb3VwIG9mIHRlc3RzIHdlJ3JlIHJ1bm5pbmcuCi0gICAgICAgIHNl
bGYuX2N1cnJlbnRfZ3JvdXAgPSBOb25lCi0gICAgICAgICMgTnVtYmVyIG9mIHRlc3RzIGluIHNl
bGYuX2N1cnJlbnRfZ3JvdXAuCi0gICAgICAgIHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2dy
b3VwID0gTm9uZQotICAgICAgICAjIFRpbWUgYXQgd2hpY2ggd2Ugc3RhcnRlZCBydW5uaW5nIHRl
c3RzIGZyb20gc2VsZi5fY3VycmVudF9ncm91cC4KLSAgICAgICAgc2VsZi5fY3VycmVudF9ncm91
cF9zdGFydF90aW1lID0gTm9uZQotCi0gICAgZGVmIGdldF90ZXN0X2dyb3VwX3RpbWluZ19zdGF0
cyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyBhIGRpY3Rpb25hcnkgbWFwcGluZyB0ZXN0IGdy
b3VwIHRvIGEgdHVwbGUgb2YKLSAgICAgICAgKG51bWJlciBvZiB0ZXN0cyBpbiB0aGF0IGdyb3Vw
LCB0aW1lIHRvIHJ1biB0aGUgdGVzdHMpIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl90ZXN0X2dy
b3VwX3RpbWluZ19zdGF0cwotCi0gICAgZGVmIGdldF90ZXN0X3Jlc3VsdHMoc2VsZik6Ci0gICAg
ICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiBhbGwgdGVzdHMgcnVuIG9uIHRoaXMgdGhyZWFkLgot
Ci0gICAgICAgIFRoaXMgaXMgdXNlZCB0byBjYWxjdWxhdGUgcGVyLXRocmVhZCBzdGF0aXN0aWNz
LgotCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9yZXN1bHRzCi0KLSAg
ICBkZWYgZ2V0X3RvdGFsX3RpbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBtYXgoc2VsZi5fc3Rv
cF90aW1lIC0gc2VsZi5fc3RhcnRfdGltZSAtCi0gICAgICAgICAgICAgICAgICAgc2VsZi5faHR0
cF9sb2NrX3dhaXRfdGltZSgpLCAwLjApCi0KLSAgICBkZWYgZ2V0X251bV90ZXN0cyhzZWxmKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuX251bV90ZXN0cwotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAg
ICAgICAgIiIiRGVsZWdhdGUgbWFpbiB3b3JrIHRvIGEgaGVscGVyIG1ldGhvZCBhbmQgd2F0Y2gg
Zm9yIHVuY2F1Z2h0Ci0gICAgICAgIGV4Y2VwdGlvbnMuIiIiCi0gICAgICAgIHNlbGYuX2NvdmVy
ZWRfcnVuKCkKLQotICAgIGRlZiBfY292ZXJlZF9ydW4oc2VsZik6Ci0gICAgICAgICMgRklYTUU6
IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0aW5lIHRvIHdvcmsgYXJvdW5kIGEgYnVnCi0gICAgICAg
ICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8vYml0YnVja2V0Lm9yZy9uZWQvY292ZXJhZ2VweS9p
c3N1ZS84NS4KLSAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkLmdldF9pZGVudCgpCi0g
ICAgICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLl9udW1f
dGVzdHMgPSAwCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyVzIHN0YXJ0
aW5nJyAlIChzZWxmLmdldE5hbWUoKSkpCi0gICAgICAgICAgICBzZWxmLl9ydW4odGVzdF9ydW5u
ZXI9Tm9uZSwgcmVzdWx0X3N1bW1hcnk9Tm9uZSkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyVz
IGRvbmUgKCVkIHRlc3RzKScgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuZ2V0X251bV90ZXN0cygpKSkKLSAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJy
dXB0OgotICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQot
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgaW50ZXJydXB0ZWQiICUgc2VsZi5nZXROYW1lKCkp
Ci0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICMgU2F2ZSB0aGUgZXhjZXB0aW9uIGZvciBv
dXIgY2FsbGVyIHRvIHNlZS4KLSAgICAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lz
LmV4Y19pbmZvKCkKLSAgICAgICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCi0g
ICAgICAgICAgICBfbG9nLmVycm9yKCclcyBkeWluZywgZXhjZXB0aW9uIHJhaXNlZCcgJSBzZWxm
LmdldE5hbWUoKSkKLQotICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSB0aW1lLnRpbWUoKQotCi0g
ICAgZGVmIHJ1bl9pbl9tYWluX3RocmVhZChzZWxmLCB0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1h
cnkpOgotICAgICAgICAiIiJUaGlzIGhvb2sgYWxsb3dzIHVzIHRvIHJ1biB0aGUgdGVzdHMgZnJv
bSB0aGUgbWFpbiB0aHJlYWQgaWYKLSAgICAgICAgLS1udW0tdGVzdC1zaGVsbHM9PTEsIGluc3Rl
YWQgb2YgaGF2aW5nIHRvIGFsd2F5cyBydW4gdHdvIG9yIG1vcmUKLSAgICAgICAgdGhyZWFkcy4g
VGhpcyBhbGxvd3MgdXMgdG8gZGVidWcgdGhlIHRlc3QgaGFybmVzcyB3aXRob3V0IGhhdmluZyB0
bwotICAgICAgICBkbyBtdWx0aS10aHJlYWRlZCBkZWJ1Z2dpbmcuIiIiCi0gICAgICAgIHNlbGYu
X3J1bih0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpCi0KLSAgICBkZWYgY2FuY2VsKHNlbGYp
OgotICAgICAgICAiIiJDbGVhbiB1cCBodHRwIGxvY2sgYW5kIHNldCBhIGZsYWcgdGVsbGluZyB0
aGlzIHRocmVhZCB0byBxdWl0LiIiIgotICAgICAgICBzZWxmLl9zdG9wX3NlcnZlcnNfd2l0aF9s
b2NrKCkKLSAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLmNhbmNlbChzZWxmKQotCi0gICAgZGVmIG5l
eHRfdGltZW91dChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlz
IHN1cHBvc2VkIHRvIGZpbmlzaCBieS4iIiIKLSAgICAgICAgaWYgc2VsZi5fbmV4dF90aW1lb3V0
OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dCArIHNlbGYuX2h0dHBfbG9j
a193YWl0X3RpbWUoKQotICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0Ci0KLSAgICBk
ZWYgX2h0dHBfbG9ja193YWl0X3RpbWUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgdGlt
ZSB3aGF0IGh0dHAgbG9ja2luZyB0YWtlcy4iIiIKLSAgICAgICAgaWYgc2VsZi5faHR0cF9sb2Nr
X3dhaXRfYmVnaW4gPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGlmIHNlbGYu
X2h0dHBfbG9ja193YWl0X2VuZCA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIHRpbWUudGltZSgp
IC0gc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4KLSAgICAgICAgcmV0dXJuIHNlbGYuX2h0dHBf
bG9ja193YWl0X2VuZCAtIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luCi0KLSAgICBkZWYgX3J1
bihzZWxmLCB0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJNYWluIHdv
cmsgZW50cnkgcG9pbnQgb2YgdGhlIHRocmVhZC4gQmFzaWNhbGx5IHdlIHB1bGwgdXJscyBmcm9t
IHRoZQotICAgICAgICBmaWxlbmFtZSBxdWV1ZSBhbmQgcnVuIHRoZSB0ZXN0cyB1bnRpbCB3ZSBy
dW4gb3V0IG9mIHVybHMuCi0KLSAgICAgICAgSWYgdGVzdF9ydW5uZXIgaXMgbm90IE5vbmUsIHRo
ZW4gd2UgY2FsbCB0ZXN0X3J1bm5lci5VcGRhdGVTdW1tYXJ5KCkKLSAgICAgICAgd2l0aCB0aGUg
cmVzdWx0cyBvZiBlYWNoIHRlc3QuIiIiCi0gICAgICAgIGJhdGNoX3NpemUgPSBzZWxmLl9vcHRp
b25zLmJhdGNoX3NpemUKLSAgICAgICAgYmF0Y2hfY291bnQgPSAwCi0KLSAgICAgICAgIyBBcHBl
bmQgdGVzdHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxl
LgotICAgICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVw
YXJlTGlzdHNBbmRQcmludE91dHB1dC4KICAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3Mu
cGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuLnR4dCIpCi0gICAgICAgIHRl
c3RzX3J1bl9maWxlID0gY29kZWNzLm9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAiYSIsICJ1dGYt
OCIpCi0KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIHNlbGYuX2NhbmNlbGVk
OgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Rlc3RpbmcgY2FuY2VsbGVkJykKLSAgICAg
ICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJu
Ci0KLSAgICAgICAgICAgIGlmIGxlbihzZWxmLl9maWxlbmFtZV9saXN0KSBpcyAwOgotICAgICAg
ICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfZ3JvdXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzW3NlbGYuX2N1cnJlbnRfZ3Jv
dXBdID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX251bV90ZXN0c19pbl9jdXJy
ZW50X2dyb3VwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc2VsZi5f
Y3VycmVudF9ncm91cF9zdGFydF90aW1lKQotCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwLCBzZWxmLl9maWxlbmFtZV9saXN0ID0g
XAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZS5nZXRf
bm93YWl0KCkKLSAgICAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQotICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQotICAgICAgICAgICAgICAgICAgICB0
ZXN0c19ydW5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybgotCi0gICAg
ICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF9ncm91cCA9PSAidGVzdHNfdG9faHR0cF9sb2Nr
IjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQot
ICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6Ci0gICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQotCi0gICAgICAgICAgICAgICAg
c2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3JvdXAgPSBsZW4oc2VsZi5fZmlsZW5hbWVfbGlz
dCkKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUgPSB0aW1l
LnRpbWUoKQotCi0gICAgICAgICAgICB0ZXN0X2luZm8gPSBzZWxmLl9maWxlbmFtZV9saXN0LnBv
cCgpCi0KLSAgICAgICAgICAgICMgV2UgaGF2ZSBhIHVybCwgcnVuIHRlc3RzLgotICAgICAgICAg
ICAgYmF0Y2hfY291bnQgKz0gMQotICAgICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzICs9IDEKLSAg
ICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9zaW5nbHkodGVzdF9pbmZvKQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdCh0ZXN0X2luZm8pCi0K
LSAgICAgICAgICAgIGZpbGVuYW1lID0gdGVzdF9pbmZvLmZpbGVuYW1lCi0gICAgICAgICAgICB0
ZXN0c19ydW5fZmlsZS53cml0ZShmaWxlbmFtZSArICJcbiIpCi0gICAgICAgICAgICBpZiByZXN1
bHQuZmFpbHVyZXM6Ci0gICAgICAgICAgICAgICAgIyBDaGVjayBhbmQga2lsbCBEdW1wUmVuZGVy
VHJlZSBpZiB3ZSBuZWVkIHRvLgotICAgICAgICAgICAgICAgIGlmIGxlbihbMSBmb3IgZiBpbiBy
ZXN1bHQuZmFpbHVyZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYuc2hvdWxkX2tpbGxf
ZHVtcF9yZW5kZXJfdHJlZSgpXSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVt
cF9yZW5kZXJfdHJlZSgpCi0gICAgICAgICAgICAgICAgICAgICMgUmVzZXQgdGhlIGJhdGNoIGNv
dW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQuCi0gICAgICAgICAgICAgICAgICAgIGJh
dGNoX2NvdW50ID0gMAotICAgICAgICAgICAgICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3NhZ2Uo
cykuCi0gICAgICAgICAgICAgICAgZXJyb3Jfc3RyID0gJ1xuJy5qb2luKFsnICAnICsgZi5tZXNz
YWdlKCkgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIGluIHJl
c3VsdC5mYWlsdXJlc10pCi0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgZmFpbGVk
OlxuJXMiICUgKHNlbGYuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX3N0cikpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIF9sb2cuZGVidWcoIiVzICVzIHBhc3NlZCIgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmls
ZW5hbWUpKSkKLSAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZS5wdXQocmVzdWx0LmR1bXBz
KCkpCi0KLSAgICAgICAgICAgIGlmIGJhdGNoX3NpemUgPiAwIGFuZCBiYXRjaF9jb3VudCA+PSBi
YXRjaF9zaXplOgotICAgICAgICAgICAgICAgICMgQm91bmNlIHRoZSBzaGVsbCBhbmQgcmVzZXQg
Y291bnQuCi0gICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAg
ICAgICAgICAgICAgICBiYXRjaF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2Zp
bGUgPSBjb2RlY3Mub3Blbih0ZXN0c19ydW5fZmlsZW5hbWUsICJhIiwgInV0Zi04IikKKworICAg
IGRlZiBoYW5kbGVfc3RvcChzZWxmKToKKyAgICAgICAgIiIiU3RvcCByZWNlaXZlZCAtIG5vIG1v
cmUgdGVzdHMgdG8gcnVuLiIiIgorICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUo
KQorICAgICAgICBpZiBzZWxmLl90ZXN0c19ydW5fZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Rl
c3RzX3J1bl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0g
Tm9uZQorCisgICAgZGVmIF90ZXN0X2FyZ3Moc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAg
ICIiIlJldHVybnMgdGhlIHR1cGxlIG9mIGFyZ3VtZW50cyBmb3IgdGVzdHMgYW5kIGZvciBEdW1w
UmVuZGVyVHJlZS4iIiIKKyAgICAgICAgdGVzdF9hcmdzID0gdGVzdF90eXBlX2Jhc2UuVGVzdEFy
Z3VtZW50cygpCisgICAgICAgIHRlc3RfYXJncy5wbmdfcGF0aCA9IE5vbmUKKyAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKKyAgICAgICAgICAgIHBuZ19wYXRoID0gb3MucGF0
aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAicG5nX3Jlc3VsdCVzLnBuZyIgJQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlcikKKyAgICAgICAgICAgIHRl
c3RfYXJncy5wbmdfcGF0aCA9IHBuZ19wYXRoCisgICAgICAgIHRlc3RfYXJncy5uZXdfYmFzZWxp
bmUgPSBzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZQorICAgICAgICB0ZXN0X2FyZ3MucmVzZXRf
cmVzdWx0cyA9IHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cworCisgICAgICAgIHJldHVybiB0
ZXN0X2FyZ3MKKworICAgIGRlZiBfbmVlZHNfaW1hZ2VfaGFzaChzZWxmKToKKyAgICAgICAgIiIi
UmV0dXJucyB0aGUgaW1hZ2UgaGFzaCBvZiB0aGUgdGVzdCBpZiBpdCdzIG5lZWRlZCwgb3RoZXJ3
aXNlIE5vbmUuIiIiCisgICAgICAgIHJldHVybiAoc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUg
b3Igc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzIG9yCisgICAgICAgICAgICAgICAgc2VsZi5f
b3B0aW9ucy5waXhlbF90ZXN0cykKKworICAgIGRlZiBfdGVzdF90eXBlX2NsYXNzZXMoc2VsZik6
CisgICAgICAgIGNsYXNzZXMgPSBbdGV4dF9kaWZmLlRlc3RUZXh0RGlmZl0KKyAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKKyAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKGlt
YWdlX2RpZmYuSW1hZ2VEaWZmKQorICAgICAgICByZXR1cm4gY2xhc3NlcworCisgICAgZGVmIHJ1
bl90ZXN0KHNlbGYsIHRlc3RfaW5mbyk6CisgICAgICAgIGZpbGVuYW1lID0gdGVzdF9pbmZvLmZp
bGVuYW1lCisgICAgICAgIHRlc3RfaW5mby51cmkgPSBzZWxmLl9wb3J0LmZpbGVuYW1lX3RvX3Vy
aShmaWxlbmFtZSkKKyAgICAgICAgaWYgc2VsZi5fbmVlZHNfaW1hZ2VfaGFzaCgpOgorICAgICAg
ICAgICAgdGVzdF9pbmZvLmltYWdlX2NoZWNrc3VtID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVj
a3N1bShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgKz0gMQorCisgICAgICAg
ICMgV2UgZ2l2ZSBEUlQgc29tZSBleHRyYSB0aW1lIHRvIGRldGVjdCBhIHRpbWVvdXQsIGFuZCB0
aGVuCisgICAgICAgICMgZ2l2ZSBvdXIgd2F0Y2hkb2cgdGhyZWFkIGEgc2ltaWxhciBhbW91bnQg
dG8gZGV0ZWN0IGEgaHVuZworICAgICAgICAjIERSVC4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gY29u
dmVydCB0aGUgdGVzdCB0aW1lb3V0IGZyb20gYQorICAgICAgICAjIHN0cmluZyB2YWx1ZSBpbiBt
aWxsaXNlY29uZHMgdG8gYSBmbG9hdCBmb3IgUHl0aG9uLgorICAgICAgICB0ZXN0X3BhZGRpbmcg
PSA0MC4wCisgICAgICAgIGtpbGxfcGFkZGluZyA9IDEuMAorICAgICAgICB0aHJlYWRfdGltZW91
dCA9IGZsb2F0KHRlc3RfaW5mby50aW1lb3V0KSAvIDEwMDAuMCArIHRlc3RfcGFkZGluZwogCi0g
ICAgICAgICAgICBpZiB0ZXN0X3J1bm5lcjoKLSAgICAgICAgICAgICAgICB0ZXN0X3J1bm5lci51
cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKLQotICAgIGRlZiBfcnVuX3Rlc3Rfc2luZ2x5
KHNlbGYsIHRlc3RfaW5mbyk6CisgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgorICAgICAgICAgICAgc2VsZi5fY29udGFpbmVy
LnN0YXJ0ZWRfdGVzdCh0ZXN0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRocmVhZF90aW1lb3V0ICsga2lsbF9wYWRkaW5nKQorICAgICAgICAgICAgcmVz
dWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQodGVzdF9pbmZvLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3Rp
bWVvdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9jb250YWluZXIuc3RhcnRl
ZF90ZXN0KHRlc3RfaW5mbywgdGhyZWFkX3RpbWVvdXQpCisgICAgICAgICAgICByZXN1bHQgPSBz
ZWxmLl9ydW5fdGVzdF9pbl90aGlzX3RocmVhZCh0ZXN0X2luZm8pCisKKyAgICAgICAgc2VsZi5f
Y29udGFpbmVyLmZpbmlzaGVkX3Rlc3QocmVzdWx0LCB0aW1lLnRpbWUoKSAtIHN0YXJ0KQorCisg
ICAgICAgIGlmIHNlbGYuX2JhdGNoX3NpemUgPiAwIGFuZCBzZWxmLl9iYXRjaF9jb3VudCA+PSBz
ZWxmLl9iYXRjaF9zaXplOgorICAgICAgICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNl
dCBjb3VudC4KKyAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisgICAg
ICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKworICAgICAgICBzZWxmLl90ZXN0c19ydW5f
ZmlsZS53cml0ZShmaWxlbmFtZSArICJcbiIpCisgICAgICAgIGlmIHJlc3VsdC5mYWlsdXJlczoK
KyAgICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgRHVtcFJlbmRlclRyZWUgaWYgd2UgbmVlZCB0
by4KKyAgICAgICAgICAgIGlmIGxlbihbMSBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXMKKyAgICAg
ICAgICAgICAgICAgICAgaWYgZi5zaG91bGRfa2lsbF9kdW1wX3JlbmRlcl90cmVlKCldKToKKyAg
ICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQorICAgICAgICAgICAg
ICAgICMgUmVzZXQgdGhlIGJhdGNoIGNvdW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQu
CisgICAgICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisgICAgICAgICAgICAjIFBy
aW50IHRoZSBlcnJvciBtZXNzYWdlKHMpLgorICAgICAgICAgICAgZXJyb3Jfc3RyID0gJ1xuJy5q
b2luKFsnICAnICsgZi5tZXNzYWdlKCkgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmIGluIHJlc3VsdC5mYWlsdXJlc10pCisgICAgICAgICAgICBfbG9nLmRlYnVnKCIl
cyAlcyBmYWlsZWQ6XG4lcyIgJSAoc2VsZi5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9zdHIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLl9uYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkpCisKKyAg
ICBkZWYgX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5mbywgdGhyZWFk
X3RpbWVvdXQpOgogICAgICAgICAiIiJSdW4gYSB0ZXN0IGluIGEgc2VwYXJhdGUgdGhyZWFkLCBl
bmZvcmNpbmcgYSBoYXJkIHRpbWUgbGltaXQuCiAKICAgICAgICAgU2luY2Ugd2UgY2FuIG9ubHkg
ZGV0ZWN0IHRoZSB0ZXJtaW5hdGlvbiBvZiBhIHRocmVhZCwgbm90IGFueSBpbnRlcm5hbApAQCAt
NDUyLDE5ICsyOTIsMTYgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6
CiAKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICBBIFRlc3RSZXN1bHQKLQogICAgICAgICAi
IiIKICAgICAgICAgd29ya2VyID0gU2luZ2xlVGVzdFRocmVhZChzZWxmLl9wb3J0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl90ZXN0X2FyZ3MpCiAKICAgICAgICAgd29ya2VyLnN0YXJ0KCkKIAotICAgICAg
ICB0aHJlYWRfdGltZW91dCA9IF9taWxsaXNlY29uZHNfdG9fc2Vjb25kcygKLSAgICAgICAgICAg
IF9wYWRfdGltZW91dChpbnQodGVzdF9pbmZvLnRpbWVvdXQpKSkKLSAgICAgICAgdGhyZWFkLl9u
ZXh0X3RpbWVvdXQgPSB0aW1lLnRpbWUoKSArIHRocmVhZF90aW1lb3V0CiAgICAgICAgIHdvcmtl
ci5qb2luKHRocmVhZF90aW1lb3V0KQogICAgICAgICBpZiB3b3JrZXIuaXNBbGl2ZSgpOgogICAg
ICAgICAgICAgIyBJZiBqb2luKCkgcmV0dXJuZWQgd2l0aCB0aGUgdGhyZWFkIHN0aWxsIHJ1bm5p
bmcsIHRoZQpAQCAtNDg3LDExICszMjQsMTIgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNo
YWJsZVRocmVhZCk6CiAgICAgICAgICAgICBfbG9nLmVycm9yKCdDYW5ub3QgZ2V0IHJlc3VsdHMg
b2YgdGVzdDogJXMnICUKICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLmZpbGVuYW1l
KQogICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbmZv
LmZpbGVuYW1lLCBmYWlsdXJlcz1bXSwKLSAgICAgICAgICAgICAgICB0ZXN0X3J1bl90aW1lPTAs
IHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcz0wLCB0aW1lX2Zvcl9kaWZmcz0wKQorICAgICAgICAg
ICAgICAgIHRlc3RfcnVuX3RpbWU9MCwgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzPTAsCisgICAg
ICAgICAgICAgICAgdGltZV9mb3JfZGlmZnM9e30pCiAKICAgICAgICAgcmV0dXJuIHJlc3VsdAog
Ci0gICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0X2luZm8pOgorICAgIGRlZiBfcnVuX3Rlc3Rf
aW5fdGhpc190aHJlYWQoc2VsZiwgdGVzdF9pbmZvKToKICAgICAgICAgIiIiUnVuIGEgc2luZ2xl
IHRlc3QgZmlsZSB1c2luZyBhIHNoYXJlZCBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLgogCiAgICAg
ICAgIEFyZ3M6CkBAIC01MDAsMjggKzMzOCwxOCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0
Y2hhYmxlVGhyZWFkKToKICAgICAgICAgUmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdC4KICAg
ICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2Vuc3VyZV9kdW1wX3JlbmRlcl90cmVlX2lzX3J1bm5p
bmcoKQotICAgICAgICAjIFRoZSBwaXhlbF9oYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4g
aW1hZ2UgZHVtcCBpZiB0aGUKLSAgICAgICAgIyBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3Vs
ZCBiZSBzZXQgdG8gYSBibGFuayB2YWx1ZSBpZiB3ZQotICAgICAgICAjIGFyZSBnZW5lcmF0aW5n
IGEgbmV3IGJhc2VsaW5lLiAgKE90aGVyd2lzZSwgYW4gaW1hZ2UgZnJvbSBhCi0gICAgICAgICMg
cHJldmlvdXMgcnVuIHdpbGwgYmUgY29waWVkIGludG8gdGhlIGJhc2VsaW5lLikKLSAgICAgICAg
aW1hZ2VfaGFzaCA9IF9pbWFnZV9oYXNoKHRlc3RfaW5mbywgc2VsZi5fdGVzdF9hcmdzLCBzZWxm
Ll9vcHRpb25zKQotICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCi0KLSAgICAgICAgdGhyZWFk
X3RpbWVvdXQgPSBfbWlsbGlzZWNvbmRzX3RvX3NlY29uZHMoCi0gICAgICAgICAgICAgX3BhZF90
aW1lb3V0KGludCh0ZXN0X2luZm8udGltZW91dCkpKQotICAgICAgICBzZWxmLl9uZXh0X3RpbWVv
dXQgPSBzdGFydCArIHRocmVhZF90aW1lb3V0CiAKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUo
KQogICAgICAgICBjcmFzaCwgdGltZW91dCwgYWN0dWFsX2NoZWNrc3VtLCBvdXRwdXQsIGVycm9y
ID0gXAotICAgICAgICAgICBzZWxmLl9kcml2ZXIucnVuX3Rlc3QodGVzdF9pbmZvLnVyaSwgdGVz
dF9pbmZvLnRpbWVvdXQsIGltYWdlX2hhc2gpCisgICAgICAgICAgIHNlbGYuX2RyaXZlci5ydW5f
dGVzdCh0ZXN0X2luZm8udXJpLCB0ZXN0X2luZm8udGltZW91dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3RfaW5mby5pbWFnZV9jaGVja3N1bSkKICAgICAgICAgZW5kID0g
dGltZS50aW1lKCkKIAotICAgICAgICByZXN1bHQgPSBfcHJvY2Vzc19vdXRwdXQoc2VsZi5fcG9y
dCwgc2VsZi5fb3B0aW9ucywKKyAgICAgICAgcmV0dXJuIF9wcm9jZXNzX291dHB1dChzZWxmLl9w
b3J0LCBzZWxmLl9vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dF9pbmZvLCBzZWxmLl90ZXN0X3R5cGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fdGVzdF9hcmdzLCBjcmFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVvdXQsIGVuZCAtIHN0YXJ0LCBhY3R1YWxfY2hlY2tzdW0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGVycm9yKQotICAgICAgICBzZWxmLl90ZXN0X3Jl
c3VsdHMuYXBwZW5kKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBlcnJvciwgc2VsZi5fbmFtZSkKIAogICAgIGRl
ZiBfZW5zdXJlX2R1bXBfcmVuZGVyX3RyZWVfaXNfcnVubmluZyhzZWxmKToKICAgICAgICAgIiIi
U3RhcnQgdGhlIHNoYXJlZCBEdW1wUmVuZGVyVHJlZSwgaWYgaXQncyBub3QgcnVubmluZy4KQEAg
LTUzNywyOSArMzY1LDYgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fb3B0aW9ucykKICAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCiAKLSAgICBkZWYg
X3N0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgotICAgICAgICAiIiJBY3F1aXJlIGh0dHAg
bG9jayBhbmQgc3RhcnQgdGhlIHNlcnZlcnMuIiIiCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193
YWl0X2JlZ2luID0gdGltZS50aW1lKCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnQWNxdWlyZSBodHRw
IGxvY2sgLi4uJykKLSAgICAgICAgc2VsZi5fcG9ydC5hY3F1aXJlX2h0dHBfbG9jaygpCi0gICAg
ICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIEhUVFAgc2VydmVyIC4uLicpCi0gICAgICAgIHNlbGYu
X3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBX
ZWJTb2NrZXQgc2VydmVyIC4uLicpCi0gICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0
X3NlcnZlcigpCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IHRpbWUudGltZSgp
Ci0gICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gVHJ1ZQotCi0gICAgZGVmIF9zdG9wX3Nl
cnZlcnNfd2l0aF9sb2NrKHNlbGYpOgotICAgICAgICAiIiJTdG9wIHRoZSBzZXJ2ZXJzIGFuZCBy
ZWxlYXNlIGh0dHAgbG9jay4iIiIKLSAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6Ci0g
ICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQotICAgICAg
ICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKLSAgICAgICAgICAgIF9sb2cuZGVi
dWcoJ1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgICAgIHNlbGYuX3Bv
cnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1JlbGVh
c2UgaHR0cCBsb2NrIC4uLicpCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGVhc2VfaHR0cF9s
b2NrKCkKLSAgICAgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKLQogICAgIGRl
ZiBfa2lsbF9kdW1wX3JlbmRlcl90cmVlKHNlbGYpOgogICAgICAgICAiIiJLaWxsIHRoZSBEdW1w
UmVuZGVyVHJlZSBwcm9jZXNzIGlmIGl0J3MgcnVubmluZy4iIiIKICAgICAgICAgaWYgc2VsZi5f
ZHJpdmVyOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRfdW5pdHRlc3QucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZF91bml0dGVzdC5weQppbmRleCA2M2Y4NmQ5M2Q4OTQ5
NWVhOTdjOWYwMWFhMTc0OTE2OGViNmFhYjhkLi4zMTg2MzA4MWNiN2U4ODQ0YWFlYzM4ZDgxYjgx
OTMxODU0MjhjN2VjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZF91bml0dGVz
dC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZF91bml0dGVzdC5weQpAQCAtMzEsMTkg
KzMxLDggQEAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCi1pbXBvcnQgZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWQKLQotCiBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBk
ZWYgdGVzdF9maW5kX3RocmVhZF9zdGFja19mb3VuZChzZWxmKToKLSAgICAgICAgaWQsIHN0YWNr
ID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKClbMF0KLSAgICAgICAgZm91bmRfc3RhY2sg
PSBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5maW5kX3RocmVhZF9zdGFjayhpZCkKLSAgICAgICAg
c2VsZi5hc3NlcnROb3RFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKLQotICAgIGRlZiB0ZXN0X2Zp
bmRfdGhyZWFkX3N0YWNrX25vdF9mb3VuZChzZWxmKToKLSAgICAgICAgZm91bmRfc3RhY2sgPSBk
dW1wX3JlbmRlcl90cmVlX3RocmVhZC5maW5kX3RocmVhZF9zdGFjaygwKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQotCisgICAgcGFzcwogCiBpZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvcHJpbnRp
bmcucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9wcmludGluZy5weQppbmRleCAwMGZmMjExNGM1MGEwNWUwMzhjMGQ0OTU4N2Q4N2Vj
MWI3ZjY5MjA1Li5mYjlmZTZkYWZkMTVjOGM1MGM1YzE2ODQ3NjQ0ZGQyYTlmMWE2YTAyIDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9wcmludGluZy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmludGluZy5weQpAQCAtMTgyLDggKzE4Miw4IEBA
IGRlZiBfY29uZmlndXJlX2xvZ2dpbmcoc3RyZWFtLCB2ZXJib3NlKToKICAgICBsb2dfZGF0ZWZt
dCA9ICcleSVtJWQgJUg6JU06JVMnCiAgICAgbG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCiAgICAg
aWYgdmVyYm9zZToKLSAgICAgICAgbG9nX2ZtdCA9ICgnJShhc2N0aW1lKXMgJShmaWxlbmFtZSlz
OiUobGluZW5vKS00ZCAlKGxldmVsbmFtZSlzICcKLSAgICAgICAgICAgICAgICAnJShtZXNzYWdl
KXMnKQorICAgICAgICBsb2dfZm10ID0gKCclKGFzY3RpbWUpcyAlKHByb2Nlc3MpZCAlKGZpbGVu
YW1lKXM6JShsaW5lbm8pLTRkICUobGV2ZWxuYW1lKXMnCisgICAgICAgICAgICAgICAgICAgJyUo
bWVzc2FnZSlzJykKICAgICAgICAgbG9nX2xldmVsID0gbG9nZ2luZy5ERUJVRwogCiAgICAgcm9v
dCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlci5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlci5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kYjY3NGUyYTM1Yjg1YTEwMDFiZjg1YjMzMDFlZjg5OWY0NjI1MzhiCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyLnB5CkBAIC0wLDAgKzEsNTU0IEBACisjIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworaW1wb3J0IGNQaWNrbGUKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbXVsdGlwcm9j
ZXNzaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHN5cworaW1wb3J0IHRocmVh
ZAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKKworaW1w
b3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCitpbXBvcnQgdGVzdF9yZXN1bHRzCisKKworX2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2th
Z2Uucm91dGVyIikKKworCitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMpOgorICAgIGlmIG9wdGlvbnMu
d29ya2Vyc19hcmUgPT0gJ2lubGluZSc6CisgICAgICAgIHJldHVybiBTaW5nbGVUaHJlYWRlZFJv
dXRlcihwb3J0LCBvcHRpb25zKQorICAgIGlmIG9wdGlvbnMud29ya2Vyc19hcmUgPT0gJ3RocmVh
ZHMnOgorICAgICAgICByZXR1cm4gTXVsdGlUaHJlYWRlZFJvdXRlcihwb3J0LCBvcHRpb25zKQor
ICAgIHJldHVybiBNdWx0aVByb2Nlc3NSb3V0ZXIocG9ydCwgb3B0aW9ucykKKworCitjbGFzcyBf
TWVzc2FnZShvYmplY3QpOgorICAgIFRFU1RfTElTVCA9ICd0ZXN0X2xpc3QnCisgICAgU1RPUCA9
ICdzdG9wJworICAgIERPTkUgPSAnZG9uZScKKyAgICBTVEFSVEVEX1RFU1QgPSAnc3RhcnRlZF90
ZXN0JworICAgIEZJTklTSEVEX1RFU1QgPSAnZmluaXNoZWRfdGVzdCcKKyAgICBGSU5JU0hFRF9M
SVNUID0gJ2ZpbmlzaGVkX2xpc3QnCisgICAgRVhDRVBUSU9OID0gJ2V4Y2VwdGlvbicKKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbG9hZHMoc3RyKToKKyAgICAgICAgb2JqID0gY1BpY2ts
ZS5sb2FkcyhzdHIpCisgICAgICAgIGFzc2VydChpc2luc3RhbmNlKG9iaiwgX01lc3NhZ2UpKQor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyYywgZGVzdCwgaGRyLCBib2R5KToKKyAgICAgICAg
c2VsZi5zcmMgPSBzcmMKKyAgICAgICAgc2VsZi5kZXN0ID0gZGVzdAorICAgICAgICBzZWxmLmhk
ciA9IGhkcgorICAgICAgICBzZWxmLmJvZHkgPSBib2R5CisKKyAgICBkZWYgZHVtcHMoc2VsZik6
CisgICAgICAgIHJldHVybiBjUGlja2xlLmR1bXBzKHNlbGYpCisKKworY2xhc3MgX1dvcmtlclN0
YXRlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUg
PSBOb25lCisgICAgICAgIHNlbGYubmV4dF90aW1lb3V0ID0gTm9uZQorICAgICAgICBzZWxmLnRo
cmVhZCA9IE5vbmUKKyAgICAgICAgc2VsZi53ZWRnZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmRv
bmUgPSBGYWxzZQorCisKK2NsYXNzIFJvdXRlcihvYmplY3QpOgorICAgIE1BTkFHRVIgPSAnbWFu
YWdlcicKKyAgICBBTllfV09SS0VSID0gJ3dvcmtlci1cZCsnCisKKyAgICBJTl9NRU1PUllfUkVQ
UkVTRU5UQVRJT04gPSAiPGluX21lbW9yeT4iCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IGxvYWRzKHN0cik6CisgICAgICAgIGFzc2VydCBzdHIgPT0gUm91dGVyLklOX01FTU9SWV9SRVBS
RVNFTlRBVElPTgorICAgICAgICBnbG9iYWwgX3JvdXRlcgorICAgICAgICByZXR1cm4gX3JvdXRl
cgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBzZWxm
Ll9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBz
ZWxmLl9tYW5hZ2VyID0gTm9uZQorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKyAgICAgICAg
c2VsZi5fbnVtX3dvcmtlcnMgPSBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpCisg
ICAgICAgIHNlbGYuX21hbmFnZXJfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHNlbGYu
X3dvcmtlcl9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgor
ICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RhcnRfd29ya2VycyhzZWxmKToKKyAgICAgICAgIiIi
SW5zdGFudGlhdGVzIGFuZCBzdGFydHMgdGhlIFRlc3RTaGVsbFRocmVhZChzKS4iIiIKKyAgICAg
ICAgIyBJbnN0YW50aWF0ZSBUZXN0U2hlbGxUaHJlYWRzIGFuZCBzdGFydCB0aGVtLgorICAgICAg
ICBmb3Igd29ya2VyX251bWJlciBpbiB4cmFuZ2Uoc2VsZi5fbnVtX3dvcmtlcnMpOgorICAgICAg
ICAgICAgIyBDcmVhdGUgc2VwYXJhdGUgVGVzdFR5cGVzIGluc3RhbmNlcyBmb3IgZWFjaCB0aHJl
YWQuCisgICAgICAgICAgICB3b3JrZXIgPSBfV29ya2VyU3RhdGUoKQorCisgICAgICAgICAgICB3
b3JrZXIudGhyZWFkID0gc2VsZi5fc3RhcnRfd29ya2VyKHdvcmtlcl9udW1iZXIpCisgICAgICAg
ICAgICB3b3JrZXIubmFtZSA9ICd3b3JrZXItJWQnICUgd29ya2VyX251bWJlcgorICAgICAgICAg
ICAgc2VsZi5fd29ya2Vyc1t3b3JrZXIubmFtZV0gPSB3b3JrZXIKKworICAgIGRlZiBfc3RhcnRf
d29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yCisKKyAgICBkZWYgX2JhaWwoc2VsZiwgbXNnKToKKyAgICAgICAgX2xvZy5lcnJvciht
c2cpCisgICAgICAgIGFzc2VydCBGYWxzZSwgbXNnCisKKyAgICBkZWYgc3RvcF93b3JrZXJzKHNl
bGYpOgorICAgICAgICAjIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBibG9ja2luZz8KKyAgICAgICAg
Zm9yIGkgaW4geHJhbmdlKGxlbihzZWxmLl93b3JrZXJzKSk6CisgICAgICAgICAgICBzZWxmLnBv
c3Rfc3RvcCgpCisKKyAgICBkZWYgY2FuY2VsX3dvcmtlcnMoc2VsZik6CisgICAgICAgIGZvciB3
b3JrZXIgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgIHdvcmtlci50aHJl
YWQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fcG9sbF9tYW5hZ2VyX3F1ZXVlKHNlbGYuX21hbmFn
ZXIuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMCkKKworICAgIGRlZiBwb3N0X3Rlc3RfbGlzdChzZWxm
LCB0ZXN0X2xpc3QpOgorICAgICAgICBzZWxmLl9wdXQoc3JjPXNlbGYuTUFOQUdFUiwgZGVzdD1z
ZWxmLkFOWV9XT1JLRVIsCisgICAgICAgICAgICAgICAgICBoZHI9X01lc3NhZ2UuVEVTVF9MSVNU
LCBib2R5PXRlc3RfbGlzdCkKKworICAgIGRlZiBwb3N0X3N0YXJ0ZWRfdGVzdChzZWxmLCBzcmMs
IHRlc3RfaW5mbywgaGFuZ190aW1lb3V0KToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz1zcmMsIGRl
c3Q9c2VsZi5NQU5BR0VSLCBoZHI9X01lc3NhZ2UuU1RBUlRFRF9URVNULAorICAgICAgICAgICAg
ICAgICAgYm9keT0odGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpKQorCisgICAgZGVmIHBvc3RfZmlu
aXNoZWRfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUp
OgorICAgICAgICBzZWxmLl9wdXQoc3JjPXNyYywgZGVzdD1zZWxmLk1BTkFHRVIsIGhkcj1fTWVz
c2FnZS5GSU5JU0hFRF9MSVNULAorICAgICAgICAgICAgICAgICAgYm9keT0obGlzdF9uYW1lLCBu
dW1fdGVzdHMsIGVsYXBzZWRfdGltZSkpCisKKyAgICBkZWYgcG9zdF9maW5pc2hlZF90ZXN0KHNl
bGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9wdXQoc3JjPXNy
YywgZGVzdD1zZWxmLk1BTkFHRVIsIGhkcj1fTWVzc2FnZS5GSU5JU0hFRF9URVNULAorICAgICAg
ICAgICAgICAgICAgYm9keT0ocmVzdWx0LCBlbGFwc2VkX3RpbWUpKQorCisgICAgZGVmIHBvc3Rf
ZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjX2luZm8pOgorICAgICAgICBzZWxmLl9wdXQoc3JjPXNy
YywgZGVzdD1zZWxmLk1BTkFHRVIsIGhkcj1fTWVzc2FnZS5FWENFUFRJT04sCisgICAgICAgICAg
ICAgICAgICBib2R5PWV4Y19pbmZvKQorCisgICAgZGVmIHBvc3Rfc3RvcChzZWxmKToKKyAgICAg
ICAgc2VsZi5fcHV0KHNyYz1zZWxmLk1BTkFHRVIsIGRlc3Q9c2VsZi5BTllfV09SS0VSLAorICAg
ICAgICAgICAgICAgICAgaGRyPV9NZXNzYWdlLlNUT1AsIGJvZHk9Tm9uZSkKKworICAgIGRlZiBw
b3N0X2RvbmUoc2VsZiwgd29ya2VyKToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz13b3JrZXIsIGRl
c3Q9c2VsZi5NQU5BR0VSLAorICAgICAgICAgICAgICAgICAgaGRyPV9NZXNzYWdlLkRPTkUsIGJv
ZHk9Tm9uZSkKKworICAgIGRlZiBsb29wKHNlbGYsIG9iaik6CisgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IoInN1YmNsYXNzIG11c3QgaW1wbGVtZW50IFJvdXRlci5sb29wKCkiKQor
CisgICAgZGVmIF9wdXQoc2VsZiwgc3JjLCBkZXN0LCBoZHIsIGJvZHkpOgorICAgICAgICBtc2cg
PSBfTWVzc2FnZShzcmMsIGRlc3QsIGhkciwgYm9keSkKKyAgICAgICAgaWYgbXNnLmRlc3QgPT0g
c2VsZi5NQU5BR0VSOgorICAgICAgICAgICAgIyBfbG9nLmRlYnVnKCIlczogcG9zdGluZyAnJXMn
IG1zZyB0byBtYW5hZ2VyIHF1ZXVlIiAlCisgICAgICAgICAgICAjICAgICAgICAgICAgIChtc2cu
c3JjLCBtc2cuaGRyKSkKKyAgICAgICAgICAgIHNlbGYuX21hbmFnZXJfcXVldWUucHV0KG1zZykK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgX2xvZy5kZWJ1ZygiJXM6IHBvc3RpbmcgJyVz
JyBtc2cgdG8gd29ya2VyIHF1ZXVlIiAlCisgICAgICAgICAgICAjICAgICAgICAgICAgIChtc2cu
c3JjLCBtc2cuaGRyKSkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9xdWV1ZS5wdXQobXNnKQor
CisgICAgZGVmIF9nZXQoc2VsZiwgbmFtZSwgcXVldWUsIGJsb2NrLCB0aW1lb3V0KToKKyAgICAg
ICAgaWYgcXVldWUgPT0gc2VsZi5fbWFuYWdlcl9xdWV1ZToKKyAgICAgICAgICAgIHF1ZXVlX25h
bWUgPSAibWFuYWdlciBxdWV1ZSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHF1ZXVlX25h
bWUgPSAid29ya2VyIHF1ZXVlIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICNfbG9nLmRl
YnVnKCIlcyBuYW1lIHJlYWRpbmcgZnJvbSAlcyBxdWV1ZSIgJSAobmFtZSwgcXVldWVfbmFtZSkp
CisgICAgICAgICAgICBtc2cgPSBxdWV1ZS5nZXQoYmxvY2ssIHRpbWVvdXQpCisgICAgICAgICAg
ICAjX2xvZy5kZWJ1ZygiJXMgZ290ICclcycgbXNnIGZyb20gJXMiICUgKG5hbWUsIG1zZy5oZHIs
IG1zZy5zcmMpKQorICAgICAgICAgICAgcmV0dXJuIG1zZworICAgICAgICBleGNlcHQgUXVldWUu
RW1wdHk6CisgICAgICAgICAgICAjX2xvZy5kZWJ1ZygiJXMgZm91bmQgJXMgZW1wdHkiICUgKG5h
bWUsIHF1ZXVlX25hbWUpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfcG9s
bF9tYW5hZ2VyX3F1ZXVlKHNlbGYsIG5hbWUsIHRpbWVvdXQpOgorICAgICAgICB3aGlsZSBUcnVl
OgorICAgICAgICAgICAgIyBOb3RlIHRoYXQgYmxvY2s9VHJ1ZSwgdGltZW91dD0wIGlzIGVxdWl2
YWxlbnQgdG8gYmxvY2s9RmFsc2UuCisgICAgICAgICAgICBtc2cgPSBzZWxmLl9nZXQobmFtZSwg
c2VsZi5fbWFuYWdlcl9xdWV1ZSwgVHJ1ZSwgdGltZW91dCkKKyAgICAgICAgICAgIGlmIG5vdCBt
c2c6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbXNnLmhkciA9PSBf
TWVzc2FnZS5TVEFSVEVEX1RFU1Q6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX3N0YXJ0
ZWRfdGVzdChtc2cpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuRklOSVNI
RURfVEVTVDoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZmluaXNoZWRfdGVzdChtc2cp
CisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuRklOSVNIRURfTElTVDoKKyAg
ICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZmluaXNoZWRfbGlzdChtc2cpCisgICAgICAgICAg
ICBlbGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuRE9ORToKKyAgICAgICAgICAgICAgICBzZWxmLl9o
YW5kbGVfZG9uZShtc2cpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuRVhD
RVBUSU9OOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9leGNlcHRpb24obXNnKQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9iYWlsKCd1bmV4cGVjdGVkIG1l
c3NhZ2UgdHlwZSBvbiBtYW5hZ2VyIHF1ZXVlOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXNnLmhkcikKKworICAgIGRlZiBfcG9sbF93b3JrZXJfcXVldWUoc2VsZiwgd29ya2Vy
LCBwb2xsX21hbmFnZXIpOgorICAgICAgICB3aGlsZSBub3Qgd29ya2VyLmlzX2RvbmUoKToKKyAg
ICAgICAgICAgIG1zZyA9IHNlbGYuX2dldCh3b3JrZXIuZ2V0TmFtZSgpLCBzZWxmLl93b3JrZXJf
cXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBvbGxfbWFuYWdlciwgTm9u
ZSkKKyAgICAgICAgICAgIGlmIG5vdCBtc2c6CisgICAgICAgICAgICAgICAgaWYgbm90IHBvbGxf
bWFuYWdlcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmFpbCgnJXMgdW5leHBlY3RlZGx5
IHJhbiBvdXQgb2YgcXVldWVkIG1lc3NhZ2VzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd29ya2VyLmdldE5hbWUoKSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAg
ICAgICBpZiBtc2cuaGRyID09IF9NZXNzYWdlLlNUT1A6CisgICAgICAgICAgICAgICAgc2VsZi5f
aGFuZGxlX3N0b3Aod29ya2VyKQorICAgICAgICAgICAgZWxpZiBtc2cuaGRyID09IF9NZXNzYWdl
LlRFU1RfTElTVDoKKyAgICAgICAgICAgICAgICAobGlzdF9uYW1lLCB0ZXN0X2xpc3QpID0gbXNn
LmJvZHkKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfdGVzdF9saXN0KHdvcmtlciwgbGlz
dF9uYW1lLCB0ZXN0X2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwb2xsX21hbmFnZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYu
X2JhaWwoJyVzOiB1bmV4cGVjdGVkIG1lc3NhZ2UgdHlwZSBvbiB3b3JrZXIgcXVldWU6ICVzJyAl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2VyLmdldE5hbWUoKSwgbXNnLmhkcikp
CisKKyAgICBkZWYgX2hhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgbXNnKToKKyAgICAgICAgKHRl
c3RfaW5mbywgaGFuZ190aW1lb3V0KSA9IG1zZy5ib2R5CisgICAgICAgIHdvcmtlciA9IHNlbGYu
X3dvcmtlcnNbbXNnLnNyY10KKyAgICAgICAgd29ya2VyLmN1cnJlbnRfdGVzdF9uYW1lID0gc2Vs
Zi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5mby5maWxlbmFtZSkKKyAgICAg
ICAgd29ya2VyLm5leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgaGFuZ190aW1lb3V0CisKKyAg
ICBkZWYgX2hhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIG1zZyk6CisgICAgICAgIChyZXN1bHQs
IGVsYXBzZWRfdGltZSkgPSBtc2cuYm9keQorICAgICAgICB3b3JrZXIgPSBzZWxmLl93b3JrZXJz
W21zZy5zcmNdCisgICAgICAgIHdvcmtlci5uZXh0X3RpbWVvdXQgPSBOb25lCisgICAgICAgIHdv
cmtlci5jdXJyZW50X3Rlc3QgPSBOb25lCisKKyAgICAgICAgaWYgd29ya2VyLndlZGdlZDoKKyAg
ICAgICAgICAgICMgSG1tLiBUaGlzIHNob3VsZG4ndCBoYXBwZW4uCisgICAgICAgICAgICBfbG9n
LmVycm9yKCIlcyB1bndlZGdlZCIsIHdvcmtlci5nZXROYW1lKCkpCisKKyAgICAgICAgc2VsZi5f
bWFuYWdlci5oYW5kbGVfZmluaXNoZWRfdGVzdChtc2cuc3JjLCByZXN1bHQsIGVsYXBzZWRfdGlt
ZSkKKworICAgIGRlZiBfaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgbXNnKToKKyAgICAgICAg
KGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpID0gbXNnLmJvZHkKKyAgICAgICAg
c2VsZi5fbWFuYWdlci5oYW5kbGVfZmluaXNoZWRfbGlzdChtc2cuc3JjLCBsaXN0X25hbWUsIG51
bV90ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxh
cHNlZF90aW1lKQorCisgICAgZGVmIF9oYW5kbGVfZXhjZXB0aW9uKHNlbGYsIG1zZyk6CisgICAg
ICAgIGV4Y2VwdGlvbl9pbmZvID0gbXNnLmJvZHkKKyAgICAgICAgc2VsZi5fbWFuYWdlci5oYW5k
bGVfZXhjZXB0aW9uKG1zZy5zcmMsIGV4Y2VwdGlvbl9pbmZvKQorCisgICAgZGVmIF9oYW5kbGVf
c3RvcChzZWxmLCB3b3JrZXIpOgorICAgICAgICB3b3JrZXIuaGFuZGxlX3N0b3AoKQorCisgICAg
ZGVmIF9oYW5kbGVfZG9uZShzZWxmLCBtc2cpOgorICAgICAgICB3b3JrZXIgPSBzZWxmLl93b3Jr
ZXJzW21zZy5zcmNdCisgICAgICAgIHdvcmtlci5kb25lID0gVHJ1ZQorICAgICAgICAjIF9sb2cu
ZGVidWcoIiVzIGlzIGRvbmUiICUgd29ya2VyLm5hbWUpCisgICAgICAgIHNlbGYuX21hbmFnZXIu
aGFuZGxlX2RvbmUobXNnLnNyYykKKworICAgIGRlZiBfaGFuZGxlX3Rlc3RfbGlzdChzZWxmLCB3
b3JrZXIsIGxpc3RfbmFtZSwgdGVzdF9saXN0LCBwb2xsX21hbmFnZXIpOgorICAgICAgICB3b3Jr
ZXIuaGFuZGxlX3Rlc3RfbGlzdChsaXN0X25hbWUsIHRlc3RfbGlzdCwgcG9sbF9tYW5hZ2VyKQor
CisgICAgZGVmIF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgU2luZ2xlVGhyZWFkZWRSb3V0ZXIoUm91
dGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAgIFJv
dXRlci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKQorICAgICAgICAjIEZJWE1FOiBDb3Vs
ZCB1c2UgZmFrZSBxdWV1ZXMgaGVyZS4KKyAgICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1ZSA9IFF1
ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlID0gUXVldWUuUXVldWUoKQor
CisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgICMg
RklYTUU6IFVzZSBXb3JrZXJUaHVuayBpbnN0ZWFkIC4uLgorICAgICAgICB0aHVuayA9IF9Xb3Jr
ZXJUaHJlYWQoc2VsZiwgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV29ya2VyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd29ya2VyX251bWJlcikKKyAgICAgICAgcmV0dXJuIHRodW5r
CisKKyAgICBkZWYgbG9vcChzZWxmLCBtYW5hZ2VyKToKKyAgICAgICAgc2VsZi5fbWFuYWdlciA9
IG1hbmFnZXIKKyAgICAgICAgd29ya2VyID0gc2VsZi5fd29ya2Vyc1snd29ya2VyLTAnXQorICAg
ICAgICBzZWxmLl9wb2xsX3dvcmtlcl9xdWV1ZSh3b3JrZXIudGhyZWFkLCBwb2xsX21hbmFnZXI9
VHJ1ZSkKKworICAgIGRlZiBfbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgd29ya2VyKToKKyAgICAg
ICAgYXNzZXJ0IEZhbHNlLCAiU2luZ2xlVGhyZWFkZWRSb3V0ZXIuX2xvZ193ZWRnZWRfd29ya2Vy
KCkgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCIKKworCitjbGFzcyBNdWx0aVRocmVhZGVkUm91dGVy
KFNpbmdsZVRocmVhZGVkUm91dGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0
aW9ucyk6CisgICAgICAgIFNpbmdsZVRocmVhZGVkUm91dGVyLl9faW5pdF9fKHNlbGYsIHBvcnQs
IG9wdGlvbnMpCisKKyAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToK
KyAgICAgICAgdGh1bmsgPSBfV29ya2VyVGhyZWFkKHNlbGYsIGR1bXBfcmVuZGVyX3RyZWVfdGhy
ZWFkLldvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9udW1iZXIp
CisgICAgICAgIHRodW5rLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIHRodW5rCisKKyAgICBkZWYg
bG9vcChzZWxmLCBvYmopOgorICAgICAgICBpZiBvYmouZ2V0TmFtZSgpID09IHNlbGYuTUFOQUdF
UjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9sb29wX21hbmFnZXIob2JqKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xvb3Bfd29ya2VyKG9iaikKKworICAgIGRl
ZiBfbG9vcF9tYW5hZ2VyKHNlbGYsIG1hbmFnZXIpOgorICAgICAgICBzZWxmLl9tYW5hZ2VyID0g
bWFuYWdlcgorICAgICAgICBzZWxmLl9wb2xsX21hbmFnZXJfcXVldWUobWFuYWdlci5nZXROYW1l
KCksIHRpbWVvdXQ9MC4wMSkKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX2NoZWNrX29uX3dvcmtl
cnMoKToKKyAgICAgICAgICAgIHNlbGYuX3BvbGxfbWFuYWdlcl9xdWV1ZShtYW5hZ2VyLmdldE5h
bWUoKSwgdGltZW91dD0wLjAxKQorCisgICAgICAgIGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFs
dWVzKCk6CisgICAgICAgICAgICBhc3NlcnQgdy53ZWRnZWQgb3Igbm90IHcudGhyZWFkLmlzX2Fs
aXZlKCkKKworICAgIGRlZiBfbG9vcF93b3JrZXIoc2VsZiwgd29ya2VyKToKKyAgICAgICAgd2hp
bGUgbm90IHdvcmtlci5pc19kb25lKCk6CisgICAgICAgICAgICBzZWxmLl9wb2xsX3dvcmtlcl9x
dWV1ZSh3b3JrZXIsIHBvbGxfbWFuYWdlcj1GYWxzZSkKKworICAgIGRlZiBfY2hlY2tfb25fd29y
a2VycyhzZWxmKToKKyAgICAgICAgIlJldHVybnMgdHJ1ZSBpZmYgYWxsIHRoZSB3b3JrZXJzIGhh
dmUgZWl0aGVyIGNvbXBsZXRlZCBvciB3ZWRnZWQuIgorICAgICAgICBkb25lID0gVHJ1ZQorICAg
ICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLl93b3JrZXJz
LnZhbHVlcygpOgorICAgICAgICAgICAgaWYgbm90IHdvcmtlci5kb25lIGFuZCBub3Qgd29ya2Vy
LndlZGdlZDoKKyAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB3b3JrZXIubmV4dF90aW1l
b3V0CisgICAgICAgICAgICAgICAgaWYgKG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91
dCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvZ193ZWRnZWRfd29ya2VyKHdvcmtlci53
b3JrZXIpCisgICAgICAgICAgICAgICAgICAgIHdvcmtlci53ZWRnZWQgPSBUcnVlCisgICAgICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBfbG9nLmRlYnVnKCIlcyBpcyBu
b3QgZG9uZSIgJSB3b3JrZXIubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IEZhbHNl
CisKKyAgICAgICAgaWYgZG9uZSBhbmQgYW55KFt3LndlZGdlZCBmb3IgdyBpbiBzZWxmLl93b3Jr
ZXJzLnZhbHVlcygpXSk6CisgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQorICAgICAgICAgICAg
X2xvZy5lcnJvcignUmVtYWluaW5nIHdvcmtlcnMgYXJlIHdlZGdlZCwgYmFpbGluZyBvdXQuJykK
KyAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgIGVsaWYgZG9uZToKKyAgICAgICAg
ICAgIF9sb2cuaW5mbygnTm8gd2VkZ2VkIHRocmVhZHMnKQorCisgICAgICAgIHJldHVybiBkb25l
CisKKyAgICBkZWYgX2xvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtlcik6CisgICAgICAgICIi
IkxvZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2l2ZW4gdGhyZWFkIHN0YXRlLiIiIgorICAgICAg
ICBpZCA9IHdvcmtlci50aHJlYWQuaWQoKQorICAgICAgICBzdGFjayA9IHNlbGYuX2ZpbmRfdGhy
ZWFkX3N0YWNrKGlkKQorICAgICAgICBhc3NlcnQoc3RhY2sgaXMgbm90IE5vbmUpCisgICAgICAg
IF9sb2cuZXJyb3IoIiIpCisgICAgICAgIF9sb2cuZXJyb3IoIiVzICh0aWQgJWQpIGlzIHdlZGdl
ZCBvbiB0ZXN0ICVzIiAlCisgICAgICAgICAgICAgICAgICAgKHdvcmtlci50aHJlYWQuZ2V0TmFt
ZSgpLCBpZCwgd29ya2VyLmN1cnJlbnRfdGVzdF9uYW1lKSkKKyAgICAgICAgc2VsZi5fbG9nX3N0
YWNrKHN0YWNrKQorICAgICAgICBfbG9nLmVycm9yKCIiKQorCisgICAgZGVmIF9maW5kX3RocmVh
ZF9zdGFjayhzZWxmLCBpZCk6CisgICAgICAgICIiIlJldHVybnMgYSBzdGFjayBvYmplY3QgdGhh
dCBjYW4gYmUgdXNlZCB0byBkdW1wIGEgc3RhY2sgdHJhY2UgZm9yCisgICAgICAgIHRoZSBnaXZl
biB0aHJlYWQgaWQgKG9yIE5vbmUgaWYgdGhlIGlkIGlzIG5vdCBmb3VuZCkuIiIiCisgICAgICAg
IGZvciB0aHJlYWRfaWQsIHN0YWNrIGluIHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpOgor
ICAgICAgICAgICAgaWYgdGhyZWFkX2lkID09IGlkOgorICAgICAgICAgICAgICAgIHJldHVybiBz
dGFjaworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9sb2dfc3RhY2soc2VsZiwgc3Rh
Y2spOgorICAgICAgICAiIiJMb2cgYSBzdGFjayB0cmFjZSB0byBsb2cuZXJyb3IoKS4iIiIKKyAg
ICAgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJh
Y3Rfc3RhY2soc3RhY2spOgorICAgICAgICAgICAgX2xvZy5lcnJvcignRmlsZTogIiVzIiwgbGlu
ZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpKQorICAgICAgICAgICAgaWYg
bGluZToKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcgICVzJyAlIGxpbmUuc3RyaXAoKSkK
KworCitjbGFzcyBNdWx0aVByb2Nlc3NSb3V0ZXIoTXVsdGlUaHJlYWRlZFJvdXRlcik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBSb3V0ZXIuX19pbml0
X18oc2VsZiwgcG9ydCwgb3B0aW9ucykKKyAgICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1ZSA9IG11
bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgIHNlbGYuX3dvcmtlcl9xdWV1ZSA9IG11bHRp
cHJvY2Vzc2luZy5RdWV1ZSgpCisKKyAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJf
bnVtYmVyKToKKyAgICAgICAgdGh1bmsgPSBfV29ya2VyUHJvY2VzcyhzZWxmLCBkdW1wX3JlbmRl
cl90cmVlX3RocmVhZC5Xb3JrZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29y
a2VyX251bWJlcikKKyAgICAgICAgdGh1bmsuc3RhcnQoKQorICAgICAgICByZXR1cm4gdGh1bmsK
KworICAgIGRlZiBwb3N0X2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y2VwdGlvbl9pbmZvKToKKyAg
ICAgICAgIyBGSVhNRTogV2UgY2FuJ3QgcGlja2xlIHRyYWNlYmFjayBvYmplY3RzLCBzbyBsb2cg
dGhlIHRyYWNlYmFjayBoZXJlLgorICAgICAgICBtcF9leGNfaW5mbyA9IChleGNlcHRpb25faW5m
b1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIE5vbmUpCisgICAgICAgIE11bHRpVGhyZWFkZWRSb3V0
ZXIucG9zdF9leGNlcHRpb24oc2VsZiwgc3JjLCBtcF9leGNfaW5mbykKKworICAgIGRlZiBfbG9n
X3dlZGdlZF93b3JrZXIoc2VsZiwgd29ya2VyKToKKyAgICAgICAgaWQgPSB3b3JrZXIudGhyZWFk
LmlkKCkKKyAgICAgICAgX2xvZy5lcnJvcigiIikKKyAgICAgICAgX2xvZy5lcnJvcigiJXMgKHBp
ZCAlZCkgaXMgd2VkZ2VkIG9uIHRlc3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAod29ya2Vy
LnRocmVhZC5nZXROYW1lKCksIGlkLCB3b3JrZXIuY3VycmVudF90ZXN0X25hbWUpKQorICAgICAg
ICBfbG9nLmVycm9yKCIiKQorCisKK2NsYXNzIF9Xb3JrZXJUaHVuayhvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCByb3V0ZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcik6Cisg
ICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gTm9uZQorICAgICAgICBzZWxmLl9yb3V0ZXIg
PSByb3V0ZXIKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IHJvdXRlci5fb3B0aW9ucworICAgICAg
ICBzZWxmLl9wb3J0ID0gcm91dGVyLl9wb3J0CisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IEZh
bHNlCisgICAgICAgIHNlbGYuX2RvbmUgPSBGYWxzZQorICAgICAgICBzZWxmLl9oYXZlX2h0dHBf
bG9jayA9IEZhbHNlCisgICAgICAgIHNlbGYuX2lkID0gMAorICAgICAgICBzZWxmLl93b3JrZXJf
bnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl93b3JrZXIgPSB3b3JrZXJfY2xh
c3Moc2VsZi5fcG9ydCwgc2VsZiwgc2VsZi5fb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdvcmtlcl9udW1iZXIpCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAg
ICAgICMgdXNlZCBkdXJpbmcgbG9nX3dlZGdlZF93b3JrZXIKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2lkCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBU
cnVlCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUg
b3Igc2VsZi5fY2FuY2VsbGVkCisKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZik6CisgICAgICAg
IGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fcmVsZWFzZV9sb2Nr
KCkKKyAgICAgICAgc2VsZi5fd29ya2VyLmhhbmRsZV9zdG9wKCkKKyAgICAgICAgc2VsZi5fZG9u
ZSA9IFRydWUKKworICAgIGRlZiBoYW5kbGVfdGVzdF9saXN0KHNlbGYsIGxpc3RfbmFtZSwgdGVz
dF9saXN0LCBwb2xsX21hbmFnZXIpOgorICAgICAgICBpZiBsaXN0X25hbWUgPT0gInRlc3RzX3Rv
X2h0dHBfbG9jayI6CisgICAgICAgICAgICBzZWxmLl9hY3F1aXJlX2xvY2soKQorICAgICAgICBl
bGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fcmVsZWFzZV9sb2Nr
KCkKKworICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgbnVtX3Rlc3Rz
ID0gMAorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBzZWxmLl93
b3JrZXIucnVuX3Rlc3QodGVzdCkKKyAgICAgICAgICAgIG51bV90ZXN0cyArPSAxCisKKyAgICAg
ICAgICAgICMgRklYTUU6IE5lZWQgdG8gZ2V0IHJpZCBvZiB0aGlzLgorICAgICAgICAgICAgaWYg
cG9sbF9tYW5hZ2VyOgorICAgICAgICAgICAgICAgIHNlbGYuX3JvdXRlci5fcG9sbF9tYW5hZ2Vy
X3F1ZXVlKHNlbGYuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMCkKKworICAgICAgICAgICAgaWYgc2Vs
Zi5fY2FuY2VsbGVkOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsYXBzZWRfdGlt
ZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQorCisgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0
cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fcmVsZWFzZV9sb2NrKCkKKworICAgICAgICBzZWxm
Ll9yb3V0ZXIucG9zdF9maW5pc2hlZF9saXN0KHNlbGYuZ2V0TmFtZSgpLCBsaXN0X25hbWUsIG51
bV90ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNl
ZF90aW1lKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYg
c3RhcnRlZF90ZXN0KHNlbGYsIHRlc3RfaW5mbywgaHVuZ190aHJlYWRfdGltZW91dCk6CisgICAg
ICAgIHNlbGYuX3JvdXRlci5wb3N0X3N0YXJ0ZWRfdGVzdChzZWxmLmdldE5hbWUoKSwgdGVzdF9p
bmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVuZ190aHJlYWRf
dGltZW91dCkKKworICAgIGRlZiBmaW5pc2hlZF90ZXN0KHNlbGYsIHJlc3VsdCwgZWxhcHNlZF90
aW1lKToKKyAgICAgICAgc2VsZi5fcm91dGVyLnBvc3RfZmluaXNoZWRfdGVzdChzZWxmLmdldE5h
bWUoKSwgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX2FjcXVpcmVfbG9jayhzZWxm
KToKKyAgICAgICAgX2xvZy5kZWJ1ZygnQWNxdWlyaW5nIGh0dHAgbG9jayAuLi4nKQorICAgICAg
ICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3Rh
cnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3Nl
cnZlcigpCisgICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4u
JykKKyAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAg
c2VsZi5faGF2ZV9odHRwX2xvY2sgPSBUcnVlCisKKyAgICBkZWYgX3JlbGVhc2VfbG9jayhzZWxm
KToKKyAgICAgICAgIiIiU3RvcCB0aGUgc2VydmVycyBhbmQgcmVsZWFzZSBodHRwIGxvY2suIiIi
CisgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgX2xvZy5kZWJ1
ZygnU3RvcHBpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3Rv
cF9odHRwX3NlcnZlcigpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBXZWJTb2Nr
ZXQgc2VydmVyIC4uLicpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3Nl
cnZlcigpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGVhc2VfaHR0cF9sb2NrKCkKKyAgICAg
ICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKKworICAgIGRlZiBydW4oc2VsZik6
CisgICAgICAgIHNlbGYuX2lkID0gc2VsZi5fZ2V0X2lkKCkKKyAgICAgICAgbmFtZSA9IHNlbGYu
bmFtZQorICAgICAgICBleGNlcHRpb25fbXNnID0gIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygnJXMg
c3RhcnRpbmcnICUgbmFtZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9yb3V0
ZXIubG9vcChzZWxmKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAg
ICAgICBleGNlcHRpb25fbXNnID0gIiwgaW50ZXJydXB0ZWQiCisgICAgICAgIGV4Y2VwdDoKKyAg
ICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBleGNlcHRpb24gcmFpc2VkIgorICAgICAgICBm
aW5hbGx5OgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgZG9uZSVzIiAlIChuYW1lLCBleGNl
cHRpb25fbXNnKSkKKyAgICAgICAgICAgIGlmIGV4Y2VwdGlvbl9tc2c6CisgICAgICAgICAgICAg
ICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAg
IHNlbGYuX3JvdXRlci5wb3N0X2V4Y2VwdGlvbihzZWxmLmdldE5hbWUoKSwgc2VsZi5fZXhjZXB0
aW9uX2luZm8pCisgICAgICAgICAgICBzZWxmLl9yb3V0ZXIucG9zdF9kb25lKG5hbWUpCisKKyAg
ICAgICAgYXNzZXJ0IGV4Y2VwdGlvbl9tc2cgb3Igc2VsZi5fZG9uZSBvciBzZWxmLl9jYW5jZWxs
ZWQsICJleGl0aW5nIHVuZXhwZWN0ZWRseSIKKworCitjbGFzcyBfV29ya2VyVGhyZWFkKF9Xb3Jr
ZXJUaHVuaywgdGhyZWFkaW5nLlRocmVhZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRl
ciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVh
ZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBfV29ya2VyVGh1bmsuX19pbml0X18oc2VsZiwgcm91
dGVyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpCisgICAgICAgIHNlbGYubmFtZSA9ICd3
b3JrZXItJWQnICUgd29ya2VyX251bWJlcgorCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5faWQKKworICAgIGRlZiBfZ2V0X2lkKHNlbGYpOgorICAgICAgICByZXR1cm4g
dGhyZWFkLmdldF9pZGVudCgpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxm
Ll9jYW5jZWxsZWQgPSBUcnVlCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHRocmVh
ZGluZy5UaHJlYWQuc3RhcnQoc2VsZikKKworCitjbGFzcyBfV29ya2VyUHJvY2VzcyhfV29ya2Vy
VGh1bmssIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
cm91dGVyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICBtdWx0aXByb2Nl
c3NpbmcuUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQorICAgICAgICBfV29ya2VyVGh1bmsuX19pbml0
X18oc2VsZiwgcm91dGVyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpCisgICAgICAgIHNl
bGYubmFtZSA9ICd3b3JrZXItJWQnICUgd29ya2VyX251bWJlcgorCisgICAgZGVmIGlkKHNlbGYp
OgorICAgICAgICAjIEZJWE1FOiBmaWd1cmUgb3V0IGlmIHRoaXMgbmVlZHMgdG8gYmUgYXdhcmUg
b2YgcGFyZW50L2NoaWxkCisgICAgICAgIHJldHVybiBzZWxmLnBpZAorCisgICAgZGVmIF9nZXRf
aWQoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5nZXRwaWQoKQorCisgICAgZGVmIGNhbmNlbChz
ZWxmKToKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gVHJ1ZQorICAgICAgICBzZWxmLnRlcm1p
bmF0ZSgpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Q
cm9jZXNzLnN0YXJ0KHNlbGYpCisKKyAgICBkZWYgZ2V0TmFtZShzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYubmFtZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyX3Vu
aXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhYTljYzM3NGNjYWFkMDhmZGRkYjE1NjVjYmFmNDA0NTNl
ZDA4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9yb3V0ZXJfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwx
MTkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBp
bXBvcnQgTW9jaworaW1wb3J0IFF1ZXVlCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSByb3V0ZXIg
aW1wb3J0ICoKKworCitjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVz
dF9maW5kX3RocmVhZF9zdGFja19mb3VuZChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVt
ZW50CisgICAgICAgIHJldHVybgorICAgICAgICBpZCwgc3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJh
bWVzKCkuaXRlbXMoKVswXQorICAgICAgICBmb3VuZF9zdGFjayA9IGZpbmRfdGhyZWFkX3N0YWNr
KGlkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQorCisg
ICAgZGVmIHRlc3RfZmluZF90aHJlYWRfc3RhY2tfbm90X2ZvdW5kKHNlbGYpOgorICAgICAgICAj
IEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcmV0dXJuCisgICAgICAgIGZvdW5kX3N0YWNrID0g
ZmluZF90aHJlYWRfc3RhY2soMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZF9zdGFj
aywgTm9uZSkKKworCitjbGFzcyBXYWl0Rm9yVGhyZWFkc1RvRmluaXNoVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CisgICAgZGVmIHJ1bl9vbmVfdGhyZWFkKHNlbGYsIG1zZyk6CisgICAgICAgIHN0
YXJ0aW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBzdG9wcGluZ19xdWV1ZSA9IFF1
ZXVlLlF1ZXVlKCkKKyAgICAgICAgY2hpbGRfdGhyZWFkID0gVGVzdFRocmVhZChzdGFydGluZ19x
dWV1ZSwgc3RvcHBpbmdfcXVldWUpCisgICAgICAgIGNoaWxkX3RocmVhZC5zdGFydCgpCisgICAg
ICAgIHN0YXJ0ZWRfbXNnID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAgc3RvcHBpbmdf
cXVldWUucHV0KG1zZykKKyAgICAgICAgdGhyZWFkcyA9IFtjaGlsZF90aHJlYWRdCisgICAgICAg
IHJldHVybiBydW5uZXIuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRocmVhZHMsIE5vbmUp
CisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50
CisgICAgICAgIHJldHVybgorICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJl
YWQoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0ZWQpCisKKyAgICBkZWYg
dGVzdF9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudC4KKyAgICAg
ICAgcmV0dXJuCisgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnJykK
KyAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCdLZXlib2FyZEludGVy
cnVwdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnRlcnJ1cHRlZCkKKworICAgIGRlZiB0
ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudC4KKyAgICAgICAg
cmV0dXJuCisgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnJykKKyAg
ICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAgICAgICBvYy5jYXB0
dXJlX291dHB1dCgpCisgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgn
VGltZW91dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0ZWQpCisgICAgICAg
IG9jLnJlc3RvcmVfb3V0cHV0KCkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAg
ICAgICAgIyBGSVhNRTogaW1wbGVtZW50LgorICAgICAgICByZXR1cm4KKyAgICAgICAgaW50ZXJy
dXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhWYWx1ZUVycm9yLCBzZWxmLnJ1bl9vbmVfdGhyZWFkLCAnRXhjZXB0aW9uJykKKworCitjbGFz
cyBTdGFuZGFsb25lRnVuY3Rpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRl
c3RfbG9nX3dlZGdlZF90aHJlYWQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudAor
ICAgICAgICByZXR1cm4KKyAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUo
KQorICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCisgICAgICAgIGxvZ2dlciA9IHJ1bl93ZWJr
aXRfdGVzdHMuX2xvZworICAgICAgICBhc3RyZWFtID0gYXJyYXlfc3RyZWFtLkFycmF5U3RyZWFt
KCkKKyAgICAgICAgaGFuZGxlciA9IFRlc3RIYW5kbGVyKGFzdHJlYW0pCisgICAgICAgIGxvZ2dl
ci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKyAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5R
dWV1ZSgpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBj
aGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkK
KyAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgbXNnID0gc3RhcnRpbmdfcXVl
dWUuZ2V0KCkKKworICAgICAgICBydW5fd2Via2l0X3Rlc3RzLl9sb2dfd2VkZ2VkX3RocmVhZChj
aGlsZF90aHJlYWQpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgnJykKKyAgICAgICAgY2hp
bGRfdGhyZWFkLmpvaW4odGltZW91dD0xLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShh
c3RyZWFtLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2hpbGRfdGhyZWFkLmlz
QWxpdmUoKSkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQorCisKK2lmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFj
LnB5CmluZGV4IGQxYzM4M2MxM2VjMmYxM2FmNWZiMWYxNTQwNTc5YzRjODg5ZmRkNjMuLjdkNzA0
YzNhODlhZjU0YWQwZGFmMDc0OGI0ZDg4OWE2MjJhY2U0Y2QgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5Cisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fbWFjLnB5CkBAIC02MiwxNSArNjIsNiBAQCBjbGFzcyBDaHJvbWl1bU1hY1BvcnQoY2hyb21p
dW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgICAgICAgICAgICAgICAgJ01hY0J1aWxkSW5zdHJ1
Y3Rpb25zJykKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIGRlZmF1bHRfY2hpbGRf
cHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIHRvIHJ1biBzaW5nbGUt
dGhyZWFkZWQgZm9yIG5vdy4gU2VlCi0gICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM4NTUzLiBVbmZvcnR1bmF0ZWx5IHRoaXMKLSAgICAgICAgIyByb3V0
aW5lIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGxvZ2dlciBpcyBjb25maWd1cmVkLCBzbyBp
ZiB3ZQotICAgICAgICAjIHRyeSB0byBfbG9nLndhcm5pbmcoKSwgaXQgZ2V0cyB0aHJvd24gYXdh
eS4KLSAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJEZWZhdWx0
aW5nIHRvIG9uZSBjaGlsZCAtIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzg1NTNcbiIpCi0gICAgICAgIHJldHVybiAxCi0KICAgICBkZWYgZHJpdmVyX25hbWUo
c2VsZik6CiAgICAgICAgICIiIm5hbWUgZm9yIHRoaXMgcG9ydCdzIGVxdWl2YWxlbnQgb2YgRHVt
cFJlbmRlclRyZWUuIiIiCiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigndXNlX2RydCcpOgpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L21hYy5weQppbmRleCA2OTZlMzM5OGVhNGIyOGFjNzYyMjU5MDdkYzM2MmZmYzNmYjg2ZjllLi43
MmY5MWQ4MzgyMTVhZjRiYzQ0ZjFkYzFmMDY1NWRhZGM3ZDMzNmZmIDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQpAQCAt
NDcsMTUgKzQ3LDYgQEAgY2xhc3MgTWFjUG9ydChXZWJLaXRQb3J0KToKICAgICAgICAga3dhcmdz
LnNldGRlZmF1bHQoJ3BvcnRfbmFtZScsICdtYWMnICsgc2VsZi52ZXJzaW9uKCkpCiAgICAgICAg
IFdlYktpdFBvcnQuX19pbml0X18oc2VsZiwgKiprd2FyZ3MpCiAKLSAgICBkZWYgZGVmYXVsdF9j
aGlsZF9wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IG5ldy1ydW4td2Via2l0LXRl
c3RzIGlzIHVuc3RhYmxlIG9uIE1hYyBydW5uaW5nIG1vcmUgdGhhbgotICAgICAgICAjIGZvdXIg
dGhyZWFkcyBpbiBwYXJhbGxlbC4KLSAgICAgICAgIyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM2NjIyCi0gICAgICAgIGNoaWxkX3Byb2Nlc3NlcyA9IFdlYktp
dFBvcnQuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZikKLSAgICAgICAgaWYgY2hpbGRfcHJv
Y2Vzc2VzID4gNDoKLSAgICAgICAgICAgIHJldHVybiA0Ci0gICAgICAgIHJldHVybiBjaGlsZF9w
cm9jZXNzZXMKLQogICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKICAgICAgICAg
cG9ydF9uYW1lcyA9IFtdCiAgICAgICAgIGlmIHNlbGYuX25hbWUgPT0gJ21hYy10aWdlcic6CmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3Rlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3Rlc3QucHkKaW5kZXggZmY0MDg2Yzc0ZGMxODJiYTg0NzEyM2U2MzU1MDBkMTQ0MTFkOTkzZS4u
MWQ5NmJkOTYyYjkxNmQ5ZTI0MTRmYmU4ZmI1NjkzNTk3ZjBkYzcwNSAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQpA
QCAtMTM2LDYgKzEzNiw5IEBAIGNsYXNzIFRlc3RQb3J0KGJhc2UuUG9ydCk6CiAgICAgZGVmIGNo
ZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApOgogICAgICAgICByZXR1cm4gVHJ1ZQogCisgICAg
ZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgorICAgICAgICByZXR1cm4gMgorCiAg
ICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfY29udGVudHMsIGFjdHVhbF9jb250ZW50
cywKICAgICAgICAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lPU5vbmUpOgogICAgICAgICBkaWZm
ZWQgPSBhY3R1YWxfY29udGVudHMgIT0gZXhwZWN0ZWRfY29udGVudHMKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMu
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5CmluZGV4IGYzNjBhZGM5YTY1M2M1OGYwYzdmY2MzNzE2NGVkOWMzOGQ5ZWI4NDQu
LjgwZGQzZjNkYjBmMGM4NzFmZDgxOGEzODExMjY0OWU1MDU2MWFkMGIgMTAwNzU1Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMu
cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weQpAQCAtNjcsNiArNjcsNyBAQCBpbXBvcnQgdHJhY2ViYWNrCiBmcm9tIGxh
eW91dF9wYWNrYWdlIGltcG9ydCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZAogZnJvbSBsYXlvdXRf
cGFja2FnZSBpbXBvcnQganNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IKIGZyb20gbGF5b3V0
X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCitmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCByb3V0
ZXIKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBmcm9tIGxh
eW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBmcm9tIGxheW91dF9wYWNrYWdlIGlt
cG9ydCB0ZXN0X3Jlc3VsdHMKQEAgLTg5LDMyICs5MCwxOSBAQCBMQVlPVVRfVEVTVFNfRElSRUNU
T1JZID0gIkxheW91dFRlc3RzIiArIG9zLnNlcAogCiBUZXN0RXhwZWN0YXRpb25zRmlsZSA9IHRl
c3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnNGaWxlCiAKLQogY2xhc3MgVGVzdEluZm86
CiAgICAgIiIiR3JvdXBzIGluZm9ybWF0aW9uIGFib3V0IGEgdGVzdCBmb3IgZWFzeSBwYXNzaW5n
IG9mIGRhdGEuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgZmlsZW5hbWUsIHRp
bWVvdXQpOgotICAgICAgICAiIiJHZW5lcmF0ZXMgdGhlIFVSSSBhbmQgc3RvcmVzIHRoZSBmaWxl
bmFtZSBhbmQgdGltZW91dCBmb3IgdGhpcyB0ZXN0LgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBm
aWxlbmFtZSwgdGltZW91dCk6CisgICAgICAgICIiIkJ1bmRsZXMgdGhlIGZpbGVuYW1lIGFuZCB0
aW1lb3V0IGZvciB0aGlzIHRlc3QuCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgZmlsZW5hbWU6
IEZ1bGwgcGF0aCB0byB0aGUgdGVzdC4KICAgICAgICAgICB0aW1lb3V0OiBUaW1lb3V0IGZvciBy
dW5uaW5nIHRoZSB0ZXN0IGluIFRlc3RTaGVsbC4KICAgICAgICAgICAiIiIKICAgICAgICAgc2Vs
Zi5maWxlbmFtZSA9IGZpbGVuYW1lCi0gICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAg
IHNlbGYudXJpID0gcG9ydC5maWxlbmFtZV90b191cmkoZmlsZW5hbWUpCiAgICAgICAgIHNlbGYu
dGltZW91dCA9IHRpbWVvdXQKLSAgICAgICAgc2VsZi5faW1hZ2VfY2hlY2tzdW0gPSAtMQotCi0g
ICAgZGVmIGltYWdlX2hhc2goc2VsZik6Ci0gICAgICAgICMgUmVhZCB0aGUgaW1hZ2VfaGFzaCBs
YXppbHkgdG8gcmVkdWNlIHN0YXJ0dXAgdGltZS4KLSAgICAgICAgIyBUaGlzIGNsYXNzIGlzIGFj
Y2Vzc2VkIGFjcm9zcyB0aHJlYWRzLCBidXQgb25seSBvbmUgdGhyZWFkIHNob3VsZAotICAgICAg
ICAjIGV2ZXIgYmUgZGVhbGluZyB3aXRoIGFueSBnaXZlbiBUZXN0SW5mbyBzbyBubyBsb2NraW5n
IGlzIG5lZWRlZC4KLSAgICAgICAgIwotICAgICAgICAjIE5vdGUgdGhhdCB3ZSB1c2UgLTEgdG8g
aW5kaWNhdGUgdGhhdCB3ZSBoYXZlbid0IHJlYWQgdGhlIHZhbHVlLAotICAgICAgICAjIGJlY2F1
c2UgZXhwZWN0ZWRfY2hlY2tzdW0oKSByZXR1cm5zIGEgc3RyaW5nIG9yIE5vbmUuCi0gICAgICAg
IGlmIHNlbGYuX2ltYWdlX2NoZWNrc3VtID09IC0xOgotICAgICAgICAgICAgc2VsZi5faW1hZ2Vf
Y2hlY2tzdW0gPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHNlbGYuZmlsZW5hbWUpCi0g
ICAgICAgIHJldHVybiBzZWxmLl9pbWFnZV9jaGVja3N1bQorICAgICAgICBzZWxmLnVyaSA9IE5v
bmUKKyAgICAgICAgc2VsZi5pbWFnZV9jaGVja3N1bSA9IE5vbmUKIAogCiBjbGFzcyBSZXN1bHRT
dW1tYXJ5KG9iamVjdCk6CkBAIC0xNjEsNiArMTQ5LDcgQEAgY2xhc3MgUmVzdWx0U3VtbWFyeShv
YmplY3QpOgogICAgICAgICAgICAgc2VsZi51bmV4cGVjdGVkICs9IDEKIAogCisKIGRlZiBzdW1t
YXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHBvcnRfb2JqLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9z
dW1tYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlfc3VtbWFyeSk6
CiAgICAgIiIiU3VtbWFyaXplIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgYXMgYSBkaWN0LgpAQCAt
MjUwLDMzICsyMzksMzIgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAjIGluIER1bXBSZW5kZXJU
cmVlLgogICAgIERFRkFVTFRfVEVTVF9USU1FT1VUX01TID0gNiAqIDEwMDAKIAotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlciwgcm91dGVyKToKICAgICAgICAgIiIiSW5pdGlh
bGl6ZSB0ZXN0IHJ1bm5lciBkYXRhIHN0cnVjdHVyZXMuCiAKICAgICAgICAgQXJnczoKICAgICAg
ICAgICBwb3J0OiBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQtc3BlY2lmaWMKICAgICAgICAg
ICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMKICAgICAgICAg
ICBwcmludGVyOiBhIFByaW50ZXIgb2JqZWN0IHRvIHJlY29yZCB1cGRhdGVzIHRvLgorICAgICAg
ICAgIHJvdXRlcjogb2JqZWN0IHVzZWQgdG8gY29tbXVuaWNhdGUgdy8gd29ya2Vycy4KICAgICAg
ICAgIiIiCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlvbnMg
PSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmludGVyCisgICAgICAgIHNlbGYu
X3JvdXRlciA9IHJvdXRlcgogCiAgICAgICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRv
IGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KICAgICAgICAgIyBzZWxmLl93ZWJzb2Nr
ZXRfc2VjdXJlX3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCiAgICAgICAg
ICMgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHVzZV90bHM9VHJ1ZSwgcG9ydD05
MzIzKQogCi0gICAgICAgICMgYSBsaXN0IG9mIFRlc3RUeXBlIG9iamVjdHMKLSAgICAgICAgc2Vs
Zi5fdGVzdF90eXBlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQotICAgICAgICBpZiBvcHRp
b25zLnBpeGVsX3Rlc3RzOgotICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcy5hcHBlbmQoaW1h
Z2VfZGlmZi5JbWFnZURpZmYpCi0KICAgICAgICAgIyBhIHNldCBvZiB0ZXN0IGZpbGVzLCBhbmQg
dGhlIHNhbWUgdGVzdHMgYXMgYSBsaXN0CiAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgPSBzZXQo
KQogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBOb25lCi0gICAgICAgIHNlbGYuX3Jl
c3VsdF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKICAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSBGYWxz
ZQogCisgICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiByb3V0ZXIuUm91dGVy
Lk1BTkFHRVIKKwogICAgIGRlZiBjb2xsZWN0X3Rlc3RzKHNlbGYsIGFyZ3MsIGxhc3RfdW5leHBl
Y3RlZF9yZXN1bHRzKToKICAgICAgICAgIiIiRmluZCBhbGwgdGhlIGZpbGVzIHRvIHRlc3QuCiAK
QEAgLTUwMSwxMCArNDg5LDkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgIiIiUmV0dXJu
cyB0aGUgYXBwcm9wcmlhdGUgVGVzdEluZm8gb2JqZWN0IGZvciB0aGUgZmlsZS4gTW9zdGx5IHRo
aXMKICAgICAgICAgaXMgdXNlZCBmb3IgbG9va2luZyB1cCB0aGUgdGltZW91dCB2YWx1ZSAoaW4g
bXMpIHRvIHVzZSBmb3IgdGhlIGdpdmVuCiAgICAgICAgIHRlc3QuIiIiCi0gICAgICAgIGlmIHNl
bGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxlLCB0ZXN0X2V4cGVjdGF0aW9u
cy5TTE9XKToKLSAgICAgICAgICAgIHJldHVybiBUZXN0SW5mbyhzZWxmLl9wb3J0LCB0ZXN0X2Zp
bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zbG93X3RpbWVf
b3V0X21zKQotICAgICAgICByZXR1cm4gVGVzdEluZm8oc2VsZi5fcG9ydCwgdGVzdF9maWxlLCBz
ZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zKQorICAgICAgICBpZiBzZWxmLl90ZXN0X2lzX3Nsb3co
dGVzdF9maWxlKToKKyAgICAgICAgICAgIHJldHVybiBUZXN0SW5mbyh0ZXN0X2ZpbGUsIHNlbGYu
X29wdGlvbnMuc2xvd190aW1lX291dF9tcykKKyAgICAgICAgcmV0dXJuIFRlc3RJbmZvKHRlc3Rf
ZmlsZSwgc2VsZi5fb3B0aW9ucy50aW1lX291dF9tcykKIAogICAgIGRlZiBfdGVzdF9yZXF1aXJl
c19sb2NrKHNlbGYsIHRlc3RfZmlsZSk6CiAgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSB0
ZXN0IG5lZWRzIHRvIGJlIGxvY2tlZCB3aGVuCkBAIC01MTIsMjMgKzQ5OSwyMiBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICBzcGxpdF9wYXRoID0gdGVzdF9maWxlLnNwbGl0KG9zLnNlcCkK
ICAgICAgICAgcmV0dXJuICdodHRwJyBpbiBzcGxpdF9wYXRoIG9yICd3ZWJzb2NrZXQnIGluIHNw
bGl0X3BhdGgKIAotICAgIGRlZiBfZ2V0X3Rlc3RfZmlsZV9xdWV1ZShzZWxmLCB0ZXN0X2ZpbGVz
KToKLSAgICAgICAgIiIiQ3JlYXRlIHRoZSB0aHJlYWQgc2FmZSBxdWV1ZSBvZiBsaXN0cyBvZiAo
dGVzdCBmaWxlbmFtZXMsIHRlc3QgVVJJcykKLSAgICAgICAgdHVwbGVzLiBFYWNoIFRlc3RTaGVs
bFRocmVhZCBwdWxscyBhIGxpc3QgZnJvbSB0aGlzIHF1ZXVlIGFuZCBydW5zCi0gICAgICAgIHRo
b3NlIHRlc3RzIGluIG9yZGVyIGJlZm9yZSBncmFiYmluZyB0aGUgbmV4dCBhdmFpbGFibGUgbGlz
dC4KKyAgICBkZWYgX3Rlc3RfaXNfc2xvdyhzZWxmLCB0ZXN0X2ZpbGUpOgorICAgICAgICByZXR1
cm4gc2VsZi5fZXhwZWN0YXRpb25zLmhhc19tb2RpZmllcih0ZXN0X2ZpbGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlNM
T1cpCiAKLSAgICAgICAgU2hhcmQgdGhlIGxpc3RzIGJ5IGRpcmVjdG9yeS4gVGhpcyBoZWxwcyBl
bnN1cmUgdGhhdCB0ZXN0cyB0aGF0IGRlcGVuZAotICAgICAgICBvbiBlYWNoIG90aGVyIChha2Eg
YmFkIHRlc3RzISkgY29udGludWUgdG8gcnVuIHRvZ2V0aGVyIGFzIG1vc3QKLSAgICAgICAgY3Jv
c3MtdGVzdHMgZGVwZW5kZW5jaWVzIHRlbmQgdG8gb2NjdXIgd2l0aGluIHRoZSBzYW1lIGRpcmVj
dG9yeS4KKyAgICBkZWYgX3NoYXJkX3Rlc3RzKHNlbGYsIHRlc3RfZmlsZXMsIHNpbmdsZV90aHJl
YWRlZCk6CisgICAgICAgICIiIkdyb3VwcyB0ZXN0cyBpbnRvIGJhdGNoZXMuCisgICAgICAgIFRo
aXMgaGVscHMgZW5zdXJlIHRoYXQgdGVzdHMgdGhhdCBkZXBlbmQgb24gZWFjaCBvdGhlciAoYWth
IGJhZCB0ZXN0cyEpCisgICAgICAgIGNvbnRpbnVlIHRvIHJ1biB0b2dldGhlciBhcyBtb3N0IGNy
b3NzLXRlc3RzIGRlcGVuZGVuY2llcyB0ZW5kIHRvCisgICAgICAgIG9jY3VyIHdpdGhpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuCiAKICAgICAgICAgUmV0dXJuOgotICAgICAgICAgIFRoZSBRdWV1ZSBv
ZiBsaXN0cyBvZiBUZXN0SW5mbyBvYmplY3RzLgorICAgICAgICAgICAgQSBsaXN0IG9mIGxpc3Rz
IG9mIFRlc3RJbmZvIG9iamVjdHMKICAgICAgICAgIiIiCi0KICAgICAgICAgdGVzdF9saXN0cyA9
IFtdCiAgICAgICAgIHRlc3RzX3RvX2h0dHBfbG9jayA9IFtdCi0gICAgICAgIGlmIChzZWxmLl9v
cHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCBvcgotICAgICAgICAgICAgc2VsZi5f
aXNfc2luZ2xlX3RocmVhZGVkKCkpOgorICAgICAgICBpZiBzaW5nbGVfdGhyZWFkZWQ6CiAgICAg
ICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CiAgICAgICAgICAgICAgICAgdGVz
dF9pbmZvID0gc2VsZi5fZ2V0X3Rlc3RfaW5mb19mb3JfZmlsZSh0ZXN0X2ZpbGUpCiAgICAgICAg
ICAgICAgICAgaWYgc2VsZi5fdGVzdF9yZXF1aXJlc19sb2NrKHRlc3RfZmlsZSk6CkBAIC01Njcs
MjMgKzU1Myw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICB0ZXN0c190b19odHRw
X2xvY2sucmV2ZXJzZSgpCiAgICAgICAgICAgICB0ZXN0X2xpc3RzLmluc2VydCgwLCAoInRlc3Rz
X3RvX2h0dHBfbG9jayIsIHRlc3RzX3RvX2h0dHBfbG9jaykpCiAKLSAgICAgICAgZmlsZW5hbWVf
cXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdHM6Ci0g
ICAgICAgICAgICBmaWxlbmFtZV9xdWV1ZS5wdXQoaXRlbSkKLSAgICAgICAgcmV0dXJuIGZpbGVu
YW1lX3F1ZXVlCi0KLSAgICBkZWYgX2dldF90ZXN0X2FyZ3Moc2VsZiwgaW5kZXgpOgotICAgICAg
ICAiIiJSZXR1cm5zIHRoZSB0dXBsZSBvZiBhcmd1bWVudHMgZm9yIHRlc3RzIGFuZCBmb3IgRHVt
cFJlbmRlclRyZWUuIiIiCi0gICAgICAgIHRlc3RfYXJncyA9IHRlc3RfdHlwZV9iYXNlLlRlc3RB
cmd1bWVudHMoKQotICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGggPSBOb25lCi0gICAgICAgIGlm
IHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6Ci0gICAgICAgICAgICBwbmdfcGF0aCA9IG9zLnBh
dGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInBuZ19yZXN1bHQlcy5wbmciICUgaW5kZXgpCi0gICAgICAg
ICAgICB0ZXN0X2FyZ3MucG5nX3BhdGggPSBwbmdfcGF0aAotICAgICAgICB0ZXN0X2FyZ3MubmV3
X2Jhc2VsaW5lID0gc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUKLSAgICAgICAgdGVzdF9hcmdz
LnJlc2V0X3Jlc3VsdHMgPSBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMKLQotICAgICAgICBy
ZXR1cm4gdGVzdF9hcmdzCisgICAgICAgIHJldHVybiB0ZXN0X2xpc3RzCiAKICAgICBkZWYgX2Nv
bnRhaW5zX3Rlc3RzKHNlbGYsIHN1YmRpcik6CiAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gc2Vs
Zi5fdGVzdF9maWxlczoKQEAgLTU5MSwzOCArNTYxLDggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAg
ICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgIGRl
ZiBfaW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzKHNlbGYsIHRlc3RfZmlsZXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1
bW1hcnkpOgotICAgICAgICAiIiJJbnN0YW50aXRhdGVzIGFuZCBzdGFydHMgdGhlIFRlc3RTaGVs
bFRocmVhZChzKS4KLQotICAgICAgICBSZXR1cm46Ci0gICAgICAgICAgVGhlIGxpc3Qgb2YgdGhy
ZWFkcy4KLSAgICAgICAgIiIiCi0gICAgICAgIGZpbGVuYW1lX3F1ZXVlID0gc2VsZi5fZ2V0X3Rl
c3RfZmlsZV9xdWV1ZSh0ZXN0X2ZpbGVzKQotCi0gICAgICAgICMgSW5zdGFudGlhdGUgVGVzdFNo
ZWxsVGhyZWFkcyBhbmQgc3RhcnQgdGhlbS4KLSAgICAgICAgdGhyZWFkcyA9IFtdCi0gICAgICAg
IGZvciBpIGluIHhyYW5nZShpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpKToKLSAg
ICAgICAgICAgICMgQ3JlYXRlIHNlcGFyYXRlIFRlc3RUeXBlcyBpbnN0YW5jZXMgZm9yIGVhY2gg
dGhyZWFkLgotICAgICAgICAgICAgdGVzdF90eXBlcyA9IFtdCi0gICAgICAgICAgICBmb3IgdGVz
dF90eXBlIGluIHNlbGYuX3Rlc3RfdHlwZXM6Ci0gICAgICAgICAgICAgICAgdGVzdF90eXBlcy5h
cHBlbmQodGVzdF90eXBlKHNlbGYuX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKLQotICAgICAgICAgICAg
dGVzdF9hcmdzID0gc2VsZi5fZ2V0X3Rlc3RfYXJncyhpKQotICAgICAgICAgICAgdGhyZWFkID0g
ZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFNoZWxsVGhyZWFkKHNlbGYuX3BvcnQsCi0gICAg
ICAgICAgICAgICAgc2VsZi5fb3B0aW9ucywgZmlsZW5hbWVfcXVldWUsIHNlbGYuX3Jlc3VsdF9x
dWV1ZSwKLSAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MpCi0gICAgICAgICAg
ICBpZiBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKToKLSAgICAgICAgICAgICAgICB0aHJlYWQu
cnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQotICAgICAgICAgICAgdGhyZWFkcy5h
cHBlbmQodGhyZWFkKQotCi0gICAgICAgIHJldHVybiB0aHJlYWRzCi0KICAgICBkZWYgX2lzX3Np
bmdsZV90aHJlYWRlZChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHdlIHNob3Vs
ZCBydW4gYWxsIHRoZSB0ZXN0cyBpbiB0aGUgbWFpbiB0aHJlYWQuIiIiCisgICAgICAgICJSZXR1
cm5zIHdoZXRoZXIgdG8gcGx1cmFsaXplIGxvZyBtZXNzYWdlcyBhYm91dCBEUlQgaW5zdGFuY2Vz
LiIiIgogICAgICAgICByZXR1cm4gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSA9
PSAxCiAKICAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5
KToKQEAgLTYzOSw3MyArNTc5LDU3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAg
IGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90
aW1lfQogICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVs
YXRlIHdpdGggdGhlIHJlc3VsdHMKICAgICAgICAgIiIiCisgICAgICAgIG51bV93b3JrZXJzID0g
aW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQorCisgICAgICAgIHNlbGYuX2N1cnJl
bnRfZmlsZV9saXN0ID0gZmlsZV9saXN0CisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1
bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorICAgICAgICByb3V0ZXIgPSBzZWxmLl9yb3V0ZXIKKwor
ICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRz
ID0ge30KKyAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzID0ge30KKyAgICAgICAgZm9yIGkgaW4g
eHJhbmdlKG51bV93b3JrZXJzKToKKyAgICAgICAgICAgIG5hbWUgPSAnd29ya2VyLSVkJyAlIGkK
KyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0c1tuYW1lXSA9IHt9CisgICAgICAgICAgICBz
ZWxmLl93b3JrZXJfc3RhdHNbbmFtZV1bJ25hbWUnXSA9IG5hbWUKKyAgICAgICAgICAgIHNlbGYu
X3dvcmtlcl9zdGF0c1tuYW1lXVsnbnVtX3Rlc3RzJ10gPSAwCisgICAgICAgICAgICBzZWxmLl93
b3JrZXJfc3RhdHNbbmFtZV1bJ3RvdGFsX3RpbWUnXSA9IDAKKworICAgICAgICB0ZXN0X2xpc3Rz
ID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LAorICAgICAgICAgICAgbnVtX3dvcmtlcnMg
PT0gMSBvciBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKKyAgICAg
ICAgZm9yIHRlc3RfbGlzdCBpbiB0ZXN0X2xpc3RzOgorICAgICAgICAgICAgcm91dGVyLnBvc3Rf
dGVzdF9saXN0KHRlc3RfbGlzdCkKKworICAgICAgICAjIFRlbGwgdGhlIHdvcmtlcnMgdG8gc2h1
dCBkb3duIGFmdGVyIHRoZXkncmUgZG9uZSBydW5uaW5nIGFsbCB0aGUKKyAgICAgICAgIyB0ZXN0
cy4KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG51bV93b3JrZXJzKToKKyAgICAgICAgICAgIHJv
dXRlci5wb3N0X3N0b3AoKQorCiAgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCB1c2Ugd2Via2l0
cHkudG9vbC5ncmFtbWFyLnBsdXJhbGl6ZSBoZXJlLgogICAgICAgICBwbHVyYWwgPSAiIgotICAg
ICAgICBpZiBub3Qgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCk6CisgICAgICAgIGlmIHNlbGYu
X2lzX3NpbmdsZV90aHJlYWRlZCgpOgogICAgICAgICAgICAgcGx1cmFsID0gInMiCiAgICAgICAg
IHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyVzIC4uLicgJQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpLCBw
bHVyYWwpKQotICAgICAgICB0aHJlYWRzID0gc2VsZi5faW5zdGFudGlhdGVfZHVtcF9yZW5kZXJf
dHJlZV90aHJlYWRzKGZpbGVfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKIAotICAgICAg
ICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IHNlbGYuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNo
KHRocmVhZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgICh0aHJlYWRfdGltaW5n
cywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykgPSBcCi0gICAgICAgICAg
ICBzZWxmLl9jb2xsZWN0X3RpbWluZ19pbmZvKHRocmVhZHMpCisgICAgICAgIHJvdXRlci5zdGFy
dF93b3JrZXJzKCkKIAotICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJl
YWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAotICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVz
dF90aW1pbmdzKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcg
dGVzdGluZyAuLi4iKQogCi0gICAgZGVmIF93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaChzZWxm
LCB0aHJlYWRzLCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVk
ID0gRmFsc2UKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBMb29wIHRocm91Z2ggYWxsIHRo
ZSB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZW0gdG8gZmluaXNoLgotICAgICAgICAgICAgc29tZV90
aHJlYWRfaXNfYWxpdmUgPSBUcnVlCi0gICAgICAgICAgICB3aGlsZSBzb21lX3RocmVhZF9pc19h
bGl2ZToKLSAgICAgICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IEZhbHNlCi0gICAg
ICAgICAgICAgICAgdCA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICAgICAgZm9yIHRocmVhZCBp
biB0aHJlYWRzOgotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25faW5mbyA9IHRocmVhZC5l
eGNlcHRpb25faW5mbygpCi0gICAgICAgICAgICAgICAgICAgIGlmIGV4Y2VwdGlvbl9pbmZvIGlz
IG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBSZS1yYWlzZSB0aGUgdGhyZWFk
J3MgZXhjZXB0aW9uIGhlcmUgdG8gbWFrZSBpdAotICAgICAgICAgICAgICAgICAgICAgICAgIyBj
bGVhciB0aGF0IHRlc3Rpbmcgd2FzIGFib3J0ZWQuIE90aGVyd2lzZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICMgdGhlIHRlc3RzIHRoYXQgZGlkIG5vdCBydW4gd291bGQgYmUgYXNzdW1lZAot
ICAgICAgICAgICAgICAgICAgICAgICAgIyB0byBoYXZlIHBhc3NlZC4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhj
ZXB0aW9uX2luZm9bMl0KLQotICAgICAgICAgICAgICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgp
OgotICAgICAgICAgICAgICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB0aHJlYWQubmV4dF90aW1lb3V0
KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0X3RpbWVvdXQgYW5kIHQgPiBuZXh0
X3RpbWVvdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2dfd2VkZ2VkX3RocmVh
ZCh0aHJlYWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmNsZWFyX25leHRf
dGltZW91dCgpCi0KLSAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9z
dW1tYXJ5KQotCi0gICAgICAgICAgICAgICAgaWYgc29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAg
ICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLQorICAgICAgICAgICAgcm91dGVyLmxv
b3Aoc2VsZikKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAg
cm91dGVyLmNhbmNlbF93b3JrZXJzKCkKKyAgICAgICAgICAgIF9sb2cuaW5mbygiSW50ZXJydXB0
ZWQsIGV4aXRpbmciKQogICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVlCi0g
ICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgdGhyZWFk
LmNhbmNlbCgpCi0KLSAgICAgICAgcmV0dXJuIGtleWJvYXJkX2ludGVycnVwdGVkCi0KLSAgICBk
ZWYgX2NvbGxlY3RfdGltaW5nX2luZm8oc2VsZiwgdGhyZWFkcyk6Ci0gICAgICAgIHRlc3RfdGlt
aW5ncyA9IHt9Ci0gICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzID0gW10KLSAgICAgICAg
dGhyZWFkX3RpbWluZ3MgPSBbXQotCi0gICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAg
ICAgICAgICAgIHRocmVhZF90aW1pbmdzLmFwcGVuZCh7J25hbWUnOiB0aHJlYWQuZ2V0TmFtZSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtX3Rlc3RzJzogdGhyZWFk
LmdldF9udW1fdGVzdHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rv
dGFsX3RpbWUnOiB0aHJlYWQuZ2V0X3RvdGFsX3RpbWUoKX0pCi0gICAgICAgICAgICB0ZXN0X3Rp
bWluZ3MudXBkYXRlKHRocmVhZC5nZXRfdGVzdF9ncm91cF90aW1pbmdfc3RhdHMoKSkKLSAgICAg
ICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLmV4dGVuZCh0aHJlYWQuZ2V0X3Rlc3RfcmVz
dWx0cygpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIFVuZXhwZWN0ZWQgZXhjZXB0
aW9uOyBkb24ndCB0cnkgdG8gY2xlYW4gdXAgd29ya2Vycy4KKyAgICAgICAgICAgIF9sb2cuaW5m
bygiRXhjZXB0aW9uIHJhaXNlZCwgZXhpdGluZyIpCisgICAgICAgICAgICByYWlzZQogCi0gICAg
ICAgIHJldHVybiAodGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0
X3RpbWluZ3MpCisgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHNlbGYuX3dv
cmtlcl9zdGF0cy52YWx1ZXMoKSwKKyAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9zdGF0cywg
c2VsZi5fYWxsX3Jlc3VsdHMpCiAKICAgICBkZWYgbmVlZHNfaHR0cChzZWxmKToKICAgICAgICAg
IiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5lciBuZWVkcyBhbiBIVFRQIHNlcnZlci4i
IiIKQEAgLTgzOSwyMyArNzYzLDM3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIF9sb2cu
ZGVidWcoInN0b3BwaW5nIGhlbHBlciIpCiAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9oZWxwZXIo
KQogCi0gICAgZGVmIHVwZGF0ZV9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICBk
ZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzcmMpOgorICAgICAgICBwYXNzCisKKyAgICBk
ZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGhhbmRs
ZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgogICAgICAg
ICAiIiJVcGRhdGUgdGhlIHN1bW1hcnkgYW5kIHByaW50IHJlc3VsdHMgd2l0aCBhbnkgY29tcGxl
dGVkIHRlc3RzLiIiIgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0LmxvYWRzKHNlbGYu
X3Jlc3VsdF9xdWV1ZS5nZXRfbm93YWl0KCkpCi0gICAgICAgICAgICBleGNlcHQgUXVldWUuRW1w
dHk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgIGV4cGVjdGVkID0gc2Vs
Zi5fZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KAotICAgICAgICAgICAg
ICAgIHJlc3VsdC5maWxlbmFtZSwgcmVzdWx0LnR5cGUsIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVz
dHMpCi0gICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0LCBleHBlY3RlZCkKLSAg
ICAgICAgICAgIGV4cF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19z
dHJpbmcoCi0gICAgICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lKQotICAgICAgICAgICAgZ290
X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5
cGUpCi0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwg
ZXhwZWN0ZWQsIGV4cF9zdHIsIGdvdF9zdHIpCi0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCBzZWxmLl9yZXRyeWluZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0KQorICAg
ICAgICBzZWxmLl91cGRhdGVfd29ya2VyX3N0YXRzKHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUp
CisKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3RhdGlvbnMubWF0Y2hlc19hbl9leHBl
Y3RlZF9yZXN1bHQoCisgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC50eXBlLCBz
ZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQorICAgICAgICBleHBfc3RyID0gc2VsZi5fZXhwZWN0
YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAorICAgICAgICAgICAgcmVzdWx0LmZpbGVu
YW1lKQorICAgICAgICBnb3Rfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmV4cGVjdGF0aW9uX3Rv
X3N0cmluZyhyZXN1bHQudHlwZSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90ZXN0X3Jl
c3VsdChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKQorCisgICAgICAgIHNlbGYu
X2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkuYWRkKHJlc3VsdCwgZXhwZWN0ZWQpCisgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfcHJvZ3Jlc3Moc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXRyeWluZywgc2Vs
Zi5fdGVzdF9maWxlc19saXN0KQorCisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF9saXN0KHNlbGYs
IHNyYywgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYu
X2dyb3VwX3N0YXRzW2xpc3RfbmFtZV0gPSAobnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpCisKKyAg
ICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y2VwdGlvbl9pbmZvKToKKyAgICAg
ICAgcmFpc2UgZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2VwdGlvbl9pbmZvWzFdLCBleGNlcHRpb25f
aW5mb1syXQorCisgICAgZGVmIF91cGRhdGVfd29ya2VyX3N0YXRzKHNlbGYsIHNyYywgcmVzdWx0
LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHNbc3JjXVsndG90YWxf
dGltZSddICs9IGVsYXBzZWRfdGltZQorICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHNbc3JjXVsn
bnVtX3Rlc3RzJ10gKz0gMQorICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cy5hcHBlbmQocmVzdWx0
KQogCiAgICAgZGVmIF9jbG9iYmVyX29sZF9yZXN1bHRzKHNlbGYpOgogICAgICAgICAjIEp1c3Qg
Y2xvYmJlciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBkaXJlY3RvcmllcyBzaW5jZSB0aGUgb3Ro
ZXIKQEAgLTk5NCw2ICs5MzIsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgcC5w
cmludF9jb25maWcoIlJ1bm5pbmcgJXMgJXNzIGluIHBhcmFsbGVsIiAlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpKSkKKyAgICAgICAgcC5w
cmludF9jb25maWcoIldvcmtlcnMgYXJlICVzIiAlIHNlbGYuX29wdGlvbnMud29ya2Vyc19hcmUp
CiAgICAgICAgIHAucHJpbnRfY29uZmlnKCIiKQogCiAgICAgZGVmIF9wcmludF9leHBlY3RlZF9y
ZXN1bHRzX29mX3R5cGUoc2VsZiwgcmVzdWx0X3N1bW1hcnksCkBAIC0xMzgzLDExICsxMzIyLDEz
IEBAIGRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVy
ciwKICAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkKICAgICAgICAgcmV0dXJuIDAKIAorICAgIHJv
dXRlcl9vYmogPSByb3V0ZXIuZ2V0KHBvcnQsIG9wdGlvbnMpCisKICAgICAjIFdlIHdyYXAgYW55
IHBhcnRzIG9mIHRoZSBydW4gdGhhdCBhcmUgc2xvdyBvciBsaWtlbHkgdG8gcmFpc2UgZXhjZXB0
aW9ucwogICAgICMgaW4gYSB0cnkvZmluYWxseSB0byBlbnN1cmUgdGhhdCB3ZSBjbGVhbiB1cCB0
aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uLgogICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSAt
MQogICAgIHRyeToKLSAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnQsIG9wdGlv
bnMsIHByaW50ZXIpCisgICAgICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihwb3J0LCBvcHRp
b25zLCBwcmludGVyLCByb3V0ZXJfb2JqKQogICAgICAgICB0ZXN0X3J1bm5lci5fcHJpbnRfY29u
ZmlnKCkKIAogICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ29sbGVjdGluZyB0ZXN0cyAu
Li4iKQpAQCAtMTQxNiw2ICsxMzU3LDcgQEAgZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCBy
ZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAogICAgICAgICAgICAgX2xvZy5kZWJ1ZygiVGVzdGlu
ZyBjb21wbGV0ZWQsIEV4aXQgc3RhdHVzOiAlZCIgJQogICAgICAgICAgICAgICAgICAgICAgICBu
dW1fdW5leHBlY3RlZF9yZXN1bHRzKQogICAgIGZpbmFsbHk6CisgICAgICAgIHJvdXRlcl9vYmou
Y2xlYW51cCgpCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAKICAgICByZXR1cm4gbnVtX3Vu
ZXhwZWN0ZWRfcmVzdWx0cwpAQCAtMTQyNCw4ICsxMzY2LDExIEBAIGRlZiBydW4ocG9ydCwgb3B0
aW9ucywgYXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKIGRlZiBfc2V0X3VwX2Rlcml2
ZWRfb3B0aW9ucyhwb3J0X29iaiwgb3B0aW9ucyk6CiAgICAgIiIiU2V0cyB0aGUgb3B0aW9ucyB2
YWx1ZXMgdGhhdCBkZXBlbmQgb24gb3RoZXIgb3B0aW9ucyB2YWx1ZXMuIiIiCiAKLSAgICBpZiBu
b3Qgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXM6Ci0gICAgICAgICMgRklYTUU6IEludmVzdGlnYXRl
IHBlcmYvZmxha2luZXNzIGltcGFjdCBvZiB1c2luZyBjcHVfY291bnQgKyAxLgorICAgIGlmIG9w
dGlvbnMud29ya2Vyc19hcmUgPT0gJ2lubGluZSc6CisgICAgICAgIGlmIG9wdGlvbnMuY2hpbGRf
cHJvY2Vzc2VzIGFuZCBpbnQob3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID4gMToKKyAgICAgICAg
ICAgIF9sb2cud2FybmluZygiLS13b3JrZXJzLWFyZT1pbmxpbmUgb3ZlcnJpZGVzIC0tY2hpbGQt
cHJvY2Vzc2VzIikKKyAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSAiMSIKKyAgICBl
bGlmIG5vdCBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlczoKICAgICAgICAgb3B0aW9ucy5jaGlsZF9w
cm9jZXNzZXMgPSBvcy5lbnZpcm9uLmdldCgiV0VCS0lUX1RFU1RfQ0hJTERfUFJPQ0VTU0VTIiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIocG9y
dF9vYmouZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCiAKQEAgLTE2NDgsNiArMTU5MywxMCBA
QCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bigiLS1jaGlsZC1wcm9jZXNzZXMiLAogICAgICAgICAgICAgaGVscD0iTnVtYmVyIG9mIER1bXBS
ZW5kZXJUcmVlcyB0byBydW4gaW4gcGFyYWxsZWwuIiksCiAgICAgICAgICMgRklYTUU6IERpc3Bs
YXkgZGVmYXVsdCBudW1iZXIgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgd2lsbCBydW4uCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdvcmtlcnMtYXJlIiwgYWN0aW9uPSJzdG9yZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0icHJvY2Vzc2VzIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJjb250cm9scyB3b3JrZXIgbW9kZWwuIFZhbGlk
IHZhbHVlcyBhcmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICInaW5saW5lJywgJ3Ro
cmVhZHMnLCBhbmQgJ3Byb2Nlc3NlcycgKGRlZmF1bHQpLiIpLAogICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbigiLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwiLAogICAgICAgICAgICAg
YWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgIGhlbHA9InJ1
biBhbGwgdGVzdHMgaW4gcGFyYWxsZWwiKSwKQEAgLTE3MDgsMTcgKzE2NTcsNiBAQCBkZWYgcGFy
c2VfYXJncyhhcmdzPU5vbmUpOgogICAgIHJldHVybiBvcHRpb25zLCBhcmdzCiAKIAotZGVmIF9s
b2dfd2VkZ2VkX3RocmVhZCh0aHJlYWQpOgotICAgICIiIkxvZyBpbmZvcm1hdGlvbiBhYm91dCB0
aGUgZ2l2ZW4gdGhyZWFkIHN0YXRlLiIiIgotICAgIGlkID0gdGhyZWFkLmlkKCkKLSAgICBzdGFj
ayA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmZpbmRfdGhyZWFkX3N0YWNrKGlkKQotICAgIGFz
c2VydChzdGFjayBpcyBub3QgTm9uZSkKLSAgICBfbG9nLmVycm9yKCIiKQotICAgIF9sb2cuZXJy
b3IoInRocmVhZCAlcyAoJWQpIGlzIHdlZGdlZCIgJSAodGhyZWFkLmdldE5hbWUoKSwgaWQpKQot
ICAgIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmxvZ19zdGFjayhzdGFjaykKLSAgICBfbG9nLmVy
cm9yKCIiKQotCi0KIGRlZiBtYWluKCk6CiAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlX2FyZ3Mo
KQogICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IDI0OGEyOTFkMzkz
MDMyNWZjNzJjYmYwNmRmZDYyZTNhZDA2YTQyMmIuLmZhZmM4YmJhMGJmN2QwNTQ5MTFhYzc3MzAx
ZmMyNTU3NjJiZDczZmIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVz
dC5weQpAQCAtNzIsMTIgKzcyLDE0IEBAIGRlZiBwYXNzaW5nX3J1bihleHRyYV9hcmdzPU5vbmUs
IHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLAogICAgICAgICBhcmdzLmV4dGVu
ZChbJy0tcGxhdGZvcm0nLCAndGVzdCddKQogICAgIGlmIG5vdCByZWNvcmRfcmVzdWx0czoKICAg
ICAgICAgYXJncy5hcHBlbmQoJy0tbm8tcmVjb3JkLXJlc3VsdHMnKQorICAgIGlmIG5vdCAnLS1j
aGlsZC1wcm9jZXNzZXMnIGluIGV4dHJhX2FyZ3M6CisgICAgICAgIGFyZ3MuZXh0ZW5kKFsnLS13
b3JrZXJzLWFyZScsICdpbmxpbmUnXSkKICAgICBhcmdzLmV4dGVuZChleHRyYV9hcmdzKQogICAg
IGlmIG5vdCB0ZXN0c19pbmNsdWRlZDoKICAgICAgICAgIyBXZSB1c2UgdGhlIGdsb2IgdG8gdGVz
dCB0aGF0IGdsb2JiaW5nIHdvcmtzLgogICAgICAgICBhcmdzLmV4dGVuZChbJ3Bhc3NlcycsCiAg
ICAgICAgICAgICAgICAgICAgICAnaHR0cC90ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICAn
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgJ3dlYnNv
Y2tldC90ZXN0cycsCiAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvKidd
KQogICAgIG9wdGlvbnMsIHBhcnNlZF9hcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdz
KGFyZ3MpCiAgICAgaWYgbm90IHBvcnRfb2JqOgpAQCAtOTIsNiArOTQsOCBAQCBkZWYgbG9nZ2lu
Z19ydW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCB0ZXN0c19pbmNsdWRlZD1GYWxz
ZSk6CiAgICAgYXJncyA9IFsnLS1uby1yZWNvcmQtcmVzdWx0cyddCiAgICAgaWYgbm90ICctLXBs
YXRmb3JtJyBpbiBleHRyYV9hcmdzOgogICAgICAgICBhcmdzLmV4dGVuZChbJy0tcGxhdGZvcm0n
LCAndGVzdCddKQorICAgIGlmIG5vdCAnLS1jaGlsZC1wcm9jZXNzZXMnIGluIGV4dHJhX2FyZ3M6
CisgICAgICAgIGFyZ3MuZXh0ZW5kKFsnLS13b3JrZXJzLWFyZScsICdpbmxpbmUnXSkKICAgICBh
cmdzLmV4dGVuZChleHRyYV9hcmdzKQogICAgIGlmIG5vdCB0ZXN0c19pbmNsdWRlZDoKICAgICAg
ICAgYXJncy5leHRlbmQoWydwYXNzZXMnLApAQCAtMTE2LDcgKzEyMCw3IEBAIGRlZiBnZXRfdGVz
dHNfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGZsYXR0ZW5fYmF0
Y2hlcz1GYWxzZSk6CiAgICAgICAgICctLXByaW50JywgJ25vdGhpbmcnLAogICAgICAgICAnLS1w
bGF0Zm9ybScsICd0ZXN0JywKICAgICAgICAgJy0tbm8tcmVjb3JkLXJlc3VsdHMnLAotICAgICAg
ICAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMSddCisgICAgICAgICctLXdvcmtlcnMtYXJlJywgJ2lu
bGluZSddCiAgICAgYXJncy5leHRlbmQoZXh0cmFfYXJncykKICAgICBpZiBub3QgdGVzdHNfaW5j
bHVkZWQ6CiAgICAgICAgICMgTm90IGluY2x1ZGluZyBodHRwIHRlc3RzIHNpbmNlIHRoZXkgZ2V0
IHJ1biBvdXQgb2Ygb3JkZXIgKHRoYXQKQEAgLTIxNCw3ICsyMTgsNyBAQCBjbGFzcyBNYWluVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfa2V5Ym9hcmRfaW50ZXJydXB0KHNl
bGYpOgogICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIGFsc28gdGVzdHMgcnVubmluZyBhIHRlc3Qg
bWFya2VkIGFzIFNLSVAgaWYKICAgICAgICAgIyB5b3Ugc3BlY2lmeSBpdCBleHBsaWNpdGx5Lgot
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgcGFzc2luZ19ydW4s
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBsb2dnaW5nX3J1
biwKICAgICAgICAgICAgIFsnZmFpbHVyZXMvZXhwZWN0ZWQva2V5Ym9hcmQuaHRtbCddLCB0ZXN0
c19pbmNsdWRlZD1UcnVlKQogCiAgICAgZGVmIHRlc3RfbGFzdF9yZXN1bHRzKHNlbGYpOgpAQCAt
MjYxLDggKzI2NSwxNiBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAg
ICBkZWYgdGVzdF9ydW5fZm9yY2Uoc2VsZik6CiAgICAgICAgICMgVGhpcyByYWlzZXMgYW4gZXhj
ZXB0aW9uIGJlY2F1c2Ugd2UgcnVuCi0gICAgICAgICMgZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0
aW9uLmh0bWwsIHdoaWNoIGlzIG5vcm1hbGx5IFNLSVBwZWQuCi0gICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLCBbJy0tZm9yY2UnXSkKKyAgICAgICAgIyBm
YWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCBhbmQKKyAgICAgICAgIyBmYWlsdXJlcy9l
eHBlY3RlZC9rZXlib2FyZCwgd2hpY2ggYXJlIG5vcm1hbGx5IFNLSVBwZWQuCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGxvZ2dpbmdfcnVuKFsnLS1mb3JjZSddKQorICAgICAgICAgICAgdGVz
dF9wYXNzZWQgPSBGYWxzZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAg
IHRlc3RfcGFzc2VkID0gVHJ1ZQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Cisg
ICAgICAgICAgICB0ZXN0X3Bhc3NlZCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRl
c3RfcGFzc2VkKQogCiAgICAgZGVmIHRlc3RfcnVuX3BhcnQoc2VsZik6CiAgICAgICAgICMgVGVz
dCB0aGF0IHdlIGFjdHVhbGx5IHNlbGVjdCB0aGUgcmlnaHQgcGFydApAQCAtNDI0LDcgKzQzNiw2
IEBAIGNsYXNzIFJlYmFzZWxpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZmlu
YWxseToKICAgICAgICAgICAgIGNvZGVjcy5vcGVuID0gb3JpZ2luYWxfb3BlbgogCi0KIGNsYXNz
IFRlc3RSdW5uZXJXcmFwcGVyKHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcik6CiAgICAgZGVm
IF9nZXRfdGVzdF9pbmZvX2Zvcl9maWxlKHNlbGYsIHRlc3RfZmlsZSk6CiAgICAgICAgIHJldHVy
biB0ZXN0X2ZpbGUKQEAgLTQzNiw3ICs0NDcsNyBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG1vY2tfcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1l
ID0gbGFtYmRhIG5hbWU6IG5hbWUKICAgICAgICAgbW9ja19wb3J0LmZpbGVuYW1lX3RvX3VyaSA9
IGxhbWJkYSBuYW1lOiBuYW1lCiAKLSAgICAgICAgcnVubmVyID0gcnVuX3dlYmtpdF90ZXN0cy5U
ZXN0UnVubmVyKHBvcnQ9bW9ja19wb3J0LCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCkp
CisgICAgICAgIHJ1bm5lciA9IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcihwb3J0PW1vY2tf
cG9ydCwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpLCByb3V0ZXI9TW9jaygpKQogICAg
ICAgICBleHBlY3RlZF9odG1sID0gdSIiIjxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+TGF5
b3V0IFRlc3QgUmVzdWx0cyAodGltZSk8L3RpdGxlPgpAQCAtNDUwLDIwICs0NjEsMTAgQEAgY2xh
c3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBodG1sID0gcnVu
bmVyLl9yZXN1bHRzX2h0bWwoWyJ0ZXN0X3BhdGgiXSwge30sICJUaXRsZSIsIG92ZXJyaWRlX3Rp
bWU9InRpbWUiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0bWwsIGV4cGVjdGVkX2h0bWwp
CiAKLSAgICBkZWYgcXVldWVfdG9fbGlzdChzZWxmLCBxdWV1ZSk6Ci0gICAgICAgIHF1ZXVlX2xp
c3QgPSBbXQotICAgICAgICB3aGlsZShUcnVlKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgICAgICBxdWV1ZV9saXN0LmFwcGVuZChxdWV1ZS5nZXRfbm93YWl0KCkpCi0gICAgICAgICAg
ICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgcmV0
dXJuIHF1ZXVlX2xpc3QKLQotICAgIGRlZiB0ZXN0X2dldF90ZXN0X2ZpbGVfcXVldWUoc2VsZik6
CisgICAgZGVmIHRlc3Rfc2hhcmRfdGVzdHMoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IF9n
ZXRfdGVzdF9maWxlX3F1ZXVlIGluIHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciByZWFsbHkK
ICAgICAgICAgIyBwdXQgdGhlIGh0dHAgdGVzdHMgZmlyc3QgaW4gdGhlIHF1ZXVlLgotICAgICAg
ICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCks
IHByaW50ZXI9TW9jaygpKQotICAgICAgICBydW5uZXIuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1
bGx5X3BhcmFsbGVsID0gRmFsc2UKKyAgICAgICAgcnVubmVyID0gVGVzdFJ1bm5lcldyYXBwZXIo
cG9ydD1Nb2NrKCksIG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSwgcm91dGVyPU1vY2so
KSkKIAogICAgICAgICB0ZXN0X2xpc3QgPSBbCiAgICAgICAgICAgIkxheW91dFRlc3RzL3dlYnNv
Y2tldC90ZXN0cy91bmljb2RlLmh0bSIsCkBAIC00ODQsMTkgKzQ4NSwxNSBAQCBjbGFzcyBUZXN0
UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgJ0xheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwn
LAogICAgICAgICBdKQogCi0gICAgICAgIHJ1bm5lci5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMg
PSAxCi0gICAgICAgIHRlc3RfcXVldWVfZm9yX3NpbmdsZV90aHJlYWQgPSBydW5uZXIuX2dldF90
ZXN0X2ZpbGVfcXVldWUodGVzdF9saXN0KQotICAgICAgICBydW5uZXIuX29wdGlvbnMuY2hpbGRf
cHJvY2Vzc2VzID0gMgotICAgICAgICB0ZXN0X3F1ZXVlX2Zvcl9tdWx0aV90aHJlYWQgPSBydW5u
ZXIuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9saXN0KQotCi0gICAgICAgIHNpbmdsZV90aHJl
YWRfcmVzdWx0cyA9IHNlbGYucXVldWVfdG9fbGlzdCh0ZXN0X3F1ZXVlX2Zvcl9zaW5nbGVfdGhy
ZWFkKQotICAgICAgICBtdWx0aV90aHJlYWRfcmVzdWx0cyA9IHNlbGYucXVldWVfdG9fbGlzdCh0
ZXN0X3F1ZXVlX2Zvcl9tdWx0aV90aHJlYWQpCisgICAgICAgIHNpbmdsZV90aHJlYWRfcmVzdWx0
cyA9IHJ1bm5lci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBUcnVlKQorICAgICAgICBtdWx0aV90
aHJlYWRfcmVzdWx0cyA9IHJ1bm5lci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBGYWxzZSkKIAog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0c190b19odHRwX2xvY2siLCBzaW5nbGVfdGhy
ZWFkX3Jlc3VsdHNbMF1bMF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVz
dHNfdG9faHR0cF9sb2NrLCBzZXQoc2luZ2xlX3RocmVhZF9yZXN1bHRzWzBdWzFdKSkKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9faHR0cF9sb2NrIiwgbXVsdGlfdGhyZWFkX3Jl
c3VsdHNbMF1bMF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9f
aHR0cF9sb2NrLCBzZXQobXVsdGlfdGhyZWFkX3Jlc3VsdHNbMF1bMV0pKQogCisKIGNsYXNzIERy
eXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgRklYTUU6IGl0J3MgaGFyZCB0byBr
bm93IHdoaWNoIHBsYXRmb3JtcyBhcmUgc2FmZSB0byB0ZXN0OyB0aGUKICAgICAjIGNocm9taXVt
IHBsYXRmb3JtcyByZXF1aXJlIGEgY2hyb21pdW0gY2hlY2tvdXQsIGFuZCB0aGUgbWFjIHBsYXRm
b3JtCkBAIC01MTcsNDEgKzUxNCw2IEBAIGNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLXBpeGVs
LXRlc3RzJ10pKQogCiAKLWNsYXNzIFRlc3RUaHJlYWQoZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQu
V2F0Y2hhYmxlVGhyZWFkKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRlZF9xdWV1ZSwg
c3RvcHBpbmdfcXVldWUpOgotICAgICAgICBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5XYXRjaGFi
bGVUaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fc3RhcnRlZF9xdWV1ZSA9IHN0
YXJ0ZWRfcXVldWUKLSAgICAgICAgc2VsZi5fc3RvcHBpbmdfcXVldWUgPSBzdG9wcGluZ19xdWV1
ZQotICAgICAgICBzZWxmLl90aW1lb3V0ID0gRmFsc2UKLSAgICAgICAgc2VsZi5fdGltZW91dF9x
dWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYu
X2NvdmVyZWRfcnVuKCkKLQotICAgIGRlZiBfY292ZXJlZF9ydW4oc2VsZik6Ci0gICAgICAgICMg
RklYTUU6IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0aW5lIHRvIHdvcmsgYXJvdW5kIGEgYnVnCi0g
ICAgICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8vYml0YnVja2V0Lm9yZy9uZWQvY292ZXJh
Z2VweS9pc3N1ZS84NS4KLSAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkLmdldF9pZGVu
dCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX3N0YXJ0ZWRfcXVldWUucHV0KCcn
KQotICAgICAgICAgICAgbXNnID0gc2VsZi5fc3RvcHBpbmdfcXVldWUuZ2V0KCkKLSAgICAgICAg
ICAgIGlmIG1zZyA9PSAnS2V5Ym9hcmRJbnRlcnJ1cHQnOgotICAgICAgICAgICAgICAgIHJhaXNl
IEtleWJvYXJkSW50ZXJydXB0Ci0gICAgICAgICAgICBlbGlmIG1zZyA9PSAnRXhjZXB0aW9uJzoK
LSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKLSAgICAgICAgICAgIGVsaWYgbXNn
ID09ICdUaW1lb3V0JzoKLSAgICAgICAgICAgICAgICBzZWxmLl90aW1lb3V0ID0gVHJ1ZQotICAg
ICAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUuZ2V0KCkKLSAgICAgICAgZXhjZXB0Ogot
ICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQotCi0gICAg
ZGVmIG5leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fdGltZW91dDoKLSAgICAg
ICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUucHV0KCdkb25lJykKLSAgICAgICAgICAgIHJldHVy
biB0aW1lLnRpbWUoKSAtIDEwCi0gICAgICAgIHJldHVybiB0aW1lLnRpbWUoKQotCi0KIGNsYXNz
IFRlc3RIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFz
dHJlYW0pOgogICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKQEAgLTU2MSw3
MCArNTIzLDUgQEAgY2xhc3MgVGVzdEhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAgICAgICAg
c2VsZi5fc3RyZWFtLndyaXRlKHNlbGYuZm9ybWF0KHJlY29yZCkpCiAKIAotY2xhc3MgV2FpdEZv
clRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGNsYXNzIE1vY2tU
ZXN0UnVubmVyKHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcik6Ci0gICAgICAgIGRlZiBfX2lu
aXRfXyhzZWxmKToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBkZWYgX19kZWxfXyhzZWxm
KToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBkZWYgdXBkYXRlX3N1bW1hcnkoc2VsZiwg
cmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHJ1bl9vbmVfdGhy
ZWFkKHNlbGYsIG1zZyk6Ci0gICAgICAgIHJ1bm5lciA9IHNlbGYuTW9ja1Rlc3RSdW5uZXIoKQot
ICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAgICAgc3RvcHBpbmdf
cXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIGNoaWxkX3RocmVhZCA9IFRlc3RUaHJlYWQo
c3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKQotICAgICAgICBjaGlsZF90aHJlYWQuc3Rh
cnQoKQotICAgICAgICBzdGFydGVkX21zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCi0gICAgICAg
IHN0b3BwaW5nX3F1ZXVlLnB1dChtc2cpCi0gICAgICAgIHRocmVhZHMgPSBbY2hpbGRfdGhyZWFk
XQotICAgICAgICByZXR1cm4gcnVubmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJl
YWRzLCBOb25lKQotCi0gICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIGludGVycnVw
dGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShp
bnRlcnJ1cHRlZCkKLQotICAgIGRlZiB0ZXN0X2ludGVycnVwdChzZWxmKToKLSAgICAgICAgaW50
ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCdLZXlib2FyZEludGVycnVwdCcpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnRlcnJ1cHRlZCkKLQotICAgIGRlZiB0ZXN0X3RpbWVvdXQo
c2VsZik6Ci0gICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKLSAgICAg
ICAgb2MuY2FwdHVyZV9vdXRwdXQoKQotICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29u
ZV90aHJlYWQoJ1RpbWVvdXQnKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVk
KQotICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCi0KLSAgICBkZWYgdGVzdF9leGNlcHRpb24o
c2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYucnVuX29u
ZV90aHJlYWQsICdFeGNlcHRpb24nKQotCi0KLWNsYXNzIFN0YW5kYWxvbmVGdW5jdGlvbnNUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3RocmVhZChzZWxm
KToKLSAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQotICAgICAgICBv
Yy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIGxvZ2dlciA9IHJ1bl93ZWJraXRfdGVzdHMuX2xv
ZwotICAgICAgICBhc3RyZWFtID0gYXJyYXlfc3RyZWFtLkFycmF5U3RyZWFtKCkKLSAgICAgICAg
aGFuZGxlciA9IFRlc3RIYW5kbGVyKGFzdHJlYW0pCi0gICAgICAgIGxvZ2dlci5hZGRIYW5kbGVy
KGhhbmRsZXIpCi0KLSAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAg
ICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBjaGlsZF90aHJlYWQg
PSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKLSAgICAgICAgY2hp
bGRfdGhyZWFkLnN0YXJ0KCkKLSAgICAgICAgbXNnID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKLQot
ICAgICAgICBydW5fd2Via2l0X3Rlc3RzLl9sb2dfd2VkZ2VkX3RocmVhZChjaGlsZF90aHJlYWQp
Ci0gICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgnJykKLSAgICAgICAgY2hpbGRfdGhyZWFkLmpv
aW4odGltZW91dD0xLjApCi0KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyZWFtLmVtcHR5
KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2hpbGRfdGhyZWFkLmlzQWxpdmUoKSkKLSAg
ICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6
CiAgICAgdW5pdHRlc3QubWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73937</attachid>
            <date>2010-11-15 15:34:15 -0800</date>
            <delta_ts>2010-11-17 17:07:46 -0800</delta_ts>
            <desc>change default # of child processes for test port back to 1, merge to ToT as of r72041</desc>
            <filename>bug-48820-20101115153414.patch</filename>
            <type>text/plain</type>
            <size>83884</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkMzE2NzE3ZGFmOWU5NDkzM2RmZDVhNzBiNDllNzlmZTI5ZGUyY2Y5Li4yYzFjMzZj
ODZkMjRmYTE1Mzg1OGQwMjNmMTYxYWVhZDgwYmZkNTE1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGFsbCBvZiB0aGUg
TlJXVCBtdWx0aXRocmVhZGluZyBpc3N1ZXMgYnkgbW92aW5nIHRvCisgICAgICAgIG11bHRpcHJv
Y2Vzcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3ByaW50aW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlci5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyX3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3Rlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5OgorCiAyMDEwLTExLTE1ICBBbmRyYXMgQmVjc2kg
IDxhYmVjc2lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5n
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90
cmVlX3RocmVhZC5weQppbmRleCA5ZjJkZTdlNDc2YjdiNWMwYjdmMTFlZGM0NmU4ODI1NDc0ZjNm
ODVmLi45ODk5NmEzNTRhOGE5YzRhZDAxOWYyNjc3MzBhNGE4YzIwNzQ1Y2E1IDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVh
ZC5weQpAQCAtNDIsMTMgKzQyLDE1IEBAIGltcG9ydCBjb2RlY3MKIGltcG9ydCBjb3B5CiBpbXBv
cnQgbG9nZ2luZwogaW1wb3J0IG9zCi1pbXBvcnQgUXVldWUKIGltcG9ydCBzaWduYWwKIGltcG9y
dCBzeXMKLWltcG9ydCB0aHJlYWQKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCi1pbXBv
cnQgdHJhY2ViYWNrCisKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBp
bXBvcnQgdGVzdF90eXBlX2Jhc2UKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlw
ZXMgaW1wb3J0IHRleHRfZGlmZgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBl
cyBpbXBvcnQgaW1hZ2VfZGlmZgogCiBpbXBvcnQgdGVzdF9mYWlsdXJlcwogaW1wb3J0IHRlc3Rf
cmVzdWx0cwpAQCAtNTcsMjYgKzU5LDkgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UuIgogICAgICAgICAgICAgICAgICAgICAg
ICAgICJkdW1wX3JlbmRlcl90cmVlX3RocmVhZCIpCiAKIAotZGVmIGZpbmRfdGhyZWFkX3N0YWNr
KGlkKToKLSAgICAiIiJSZXR1cm5zIGEgc3RhY2sgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8g
ZHVtcCBhIHN0YWNrIHRyYWNlIGZvcgotICAgIHRoZSBnaXZlbiB0aHJlYWQgaWQgKG9yIE5vbmUg
aWYgdGhlIGlkIGlzIG5vdCBmb3VuZCkuIiIiCi0gICAgZm9yIHRocmVhZF9pZCwgc3RhY2sgaW4g
c3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKCk6Ci0gICAgICAgIGlmIHRocmVhZF9pZCA9PSBp
ZDoKLSAgICAgICAgICAgIHJldHVybiBzdGFjawotICAgIHJldHVybiBOb25lCi0KLQotZGVmIGxv
Z19zdGFjayhzdGFjayk6Ci0gICAgIiIiTG9nIGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCku
IiIiCi0gICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4
dHJhY3Rfc3RhY2soc3RhY2spOgotICAgICAgICBfbG9nLmVycm9yKCdGaWxlOiAiJXMiLCBsaW5l
ICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCi0gICAgICAgIGlmIGxpbmU6
Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCcgICVzJyAlIGxpbmUuc3RyaXAoKSkKLQotCiBkZWYg
X3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVz
dF9hcmdzLAogICAgICAgICAgICAgICAgICAgICBjcmFzaCwgdGltZW91dCwgdGVzdF9ydW5fdGlt
ZSwgYWN0dWFsX2NoZWNrc3VtLAotICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGVycm9yKToK
KyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBlcnJvciwgbmFtZSk6CiAgICAgIiIiUmVjZWl2
ZXMgdGhlIG91dHB1dCBmcm9tIGEgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcywgc3ViamVjdHMgaXQg
dG8gYQogICAgIG51bWJlciBvZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUg
dHlwZXMgdGhlIHRlc3QgcHJvZHVjZWQuCiAKQEAgLTg0LDcgKzY5LDcgQEAgZGVmIF9wcm9jZXNz
X291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRlc3RfYXJncywK
ICAgICAgIHBvcnQ6IHBvcnQtc3BlY2lmaWMgaG9va3MKICAgICAgIG9wdGlvbnM6IGNvbW1hbmQg
bGluZSBvcHRpb25zIGFyZ3VtZW50IGZyb20gb3B0cGFyc2UKICAgICAgIHByb2M6IGFuIGFjdGl2
ZSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzCi0gICAgICB0ZXN0X2luZm86IE9iamVjdCBjb250YWlu
aW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKKyAgICAgIHRlc3RfaW5mbzog
T2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKICAgICAgIHRl
c3RfdHlwZXM6IGxpc3Qgb2YgdGVzdCB0eXBlcyB0byBzdWJqZWN0IHRoZSBvdXRwdXQgdG8KICAg
ICAgIHRlc3RfYXJnczogYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBlYWNoIHRlc3QKIApAQCAt
OTUsOCArODAsOSBAQCBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5m
bywgdGVzdF90eXBlcywgdGVzdF9hcmdzLAogICAgICMgU29tZSB0ZXN0IGFyZ3MsIHN1Y2ggYXMg
dGhlIGltYWdlIGhhc2gsIG1heSBiZSBhZGRlZCBvciBjaGFuZ2VkIG9uIGEKICAgICAjIHRlc3Qt
YnktdGVzdCBiYXNpcy4KICAgICBsb2NhbF90ZXN0X2FyZ3MgPSBjb3B5LmNvcHkodGVzdF9hcmdz
KQotCisgICAgbG9jYWxfdGVzdF9hcmdzLnVyaSA9IHRlc3RfaW5mby51cmkKICAgICBsb2NhbF90
ZXN0X2FyZ3MuaGFzaCA9IGFjdHVhbF9jaGVja3N1bQorICAgIHRlc3RfbmFtZSA9IHBvcnQucmVs
YXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2luZm8uZmlsZW5hbWUpCiAKICAgICBpZiBjcmFzaDoK
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCkpCkBA
IC0xMDQsMTggKzkwLDE0IEBAIGRlZiBfcHJvY2Vzc19vdXRwdXQocG9ydCwgb3B0aW9ucywgdGVz
dF9pbmZvLCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCiAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0
ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCkpCiAKICAgICBpZiBjcmFzaDoKLSAgICAgICAg
X2xvZy5kZWJ1ZygiU3RhY2t0cmFjZSBmb3IgJXM6XG4lcyIgJSAodGVzdF9pbmZvLmZpbGVuYW1l
LCBlcnJvcikpCi0gICAgICAgICMgU3RyaXAgb2ZmICJmaWxlOi8vIiBzaW5jZSBSZWxhdGl2ZVRl
c3RGaWxlbmFtZSBleHBlY3RzCi0gICAgICAgICMgZmlsZXN5c3RlbSBwYXRocy4KLSAgICAgICAg
ZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8uZmlsZW5hbWUpKQorICAg
ICAgICBfbG9nLmRlYnVnKCIlcyBTdGFja3RyYWNlIGZvciAlczpcbiVzIiAlIChuYW1lLCB0ZXN0
X25hbWUsIGVycm9yKSkKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5y
ZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1lKQogICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGgu
c3BsaXRleHQoZmlsZW5hbWUpWzBdICsgIi1zdGFjay50eHQiCiAgICAgICAgIHBvcnQubWF5YmVf
bWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMF0pCiAgICAgICAgIHdpdGgg
Y29kZWNzLm9wZW4oZmlsZW5hbWUsICJ3YiIsICJ1dGYtOCIpIGFzIGZpbGU6CiAgICAgICAgICAg
ICBmaWxlLndyaXRlKGVycm9yKQogICAgIGVsaWYgZXJyb3I6Ci0gICAgICAgIF9sb2cuZGVidWco
IlByZXZpb3VzIHRlc3Qgb3V0cHV0IHN0ZGVyciBsaW5lczpcbiVzIiAlIGVycm9yKQorICAgICAg
ICBfbG9nLmRlYnVnKCIlcyAlcyBzdGRlcnIgbGluZXM6XG4lcyIgJSAobmFtZSwgdGVzdF9uYW1l
LCBlcnJvcikpCiAKICAgICAjIENoZWNrIHRoZSBvdXRwdXQgYW5kIHNhdmUgdGhlIHJlc3VsdHMu
CiAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCkBAIC0xMzgsMzIgKzEyMCwxMCBAQCBkZWYg
X3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5mbywgdGVzdF90eXBlcywgdGVz
dF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zv
cl9hbGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZzKQogCiAKLWRlZiBfcGFkX3RpbWVvdXQodGltZW91
dCk6Ci0gICAgIiIiUmV0dXJucyBhIHNhZmUgbXVsdGlwbGUgb2YgdGhlIHBlci10ZXN0IHRpbWVv
dXQgdmFsdWUgdG8gdXNlCi0gICAgdG8gZGV0ZWN0IGh1bmcgdGVzdCB0aHJlYWRzLgotCi0gICAg
IiIiCi0gICAgIyBXaGVuIHdlJ3JlIHJ1bm5pbmcgb25lIHRlc3QgcGVyIER1bXBSZW5kZXJUcmVl
IHByb2Nlc3MsIHdlIGNhbgotICAgICMgZW5mb3JjZSBhIGhhcmQgdGltZW91dC4gIFRoZSBEdW1w
UmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIuNXgKLSAgICAjIHRoZSB0aW1lb3V0OyB3ZSB3YW50
IHRvIGJlIGxhcmdlciB0aGFuIHRoYXQuCi0gICAgcmV0dXJuIHRpbWVvdXQgKiAzCi0KLQotZGVm
IF9taWxsaXNlY29uZHNfdG9fc2Vjb25kcyhtc2Vjcyk6Ci0gICAgcmV0dXJuIGZsb2F0KG1zZWNz
KSAvIDEwMDAuMAotCi0KLWRlZiBfaW1hZ2VfaGFzaCh0ZXN0X2luZm8sIHRlc3RfYXJncywgb3B0
aW9ucyk6Ci0gICAgIiIiUmV0dXJucyB0aGUgaW1hZ2UgaGFzaCBvZiB0aGUgdGVzdCBpZiBpdCdz
IG5lZWRlZCwgb3RoZXJ3aXNlIE5vbmUuIiIiCi0gICAgaWYgKHRlc3RfYXJncy5uZXdfYmFzZWxp
bmUgb3IgdGVzdF9hcmdzLnJlc2V0X3Jlc3VsdHMgb3Igbm90IG9wdGlvbnMucGl4ZWxfdGVzdHMp
OgotICAgICAgICByZXR1cm4gTm9uZQotICAgIHJldHVybiB0ZXN0X2luZm8uaW1hZ2VfaGFzaCgp
Ci0KLQogY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAiIiJU
aHJlYWQgd3JhcHBlciBmb3IgcnVubmluZyBhIHNpbmdsZSB0ZXN0IGZpbGUuIiIiCiAKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgdGVzdF9pbmZvLCB0ZXN0X3R5cGVzLCB0
ZXN0X2FyZ3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCB3b3JrZXJf
bnVtYmVyLCB0ZXN0X2luZm8sIHRlc3RfdHlwZXMsIHRlc3RfYXJncyk6CiAgICAgICAgICIiIgog
ICAgICAgICBBcmdzOgogICAgICAgICAgIHBvcnQ6IG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1z
cGVjaWZpYyBob29rcwpAQCAtMTgxLDYgKzE0MSw4IEBAIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQo
dGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0X3R5cGVz
CiAgICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHRlc3RfYXJncwogICAgICAgICBzZWxmLl9kcml2
ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisg
ICAgICAgIHNlbGYuX25hbWUgPSAnd29ya2VyLSVkJyAlIHdvcmtlcl9udW1iZXIKIAogICAgIGRl
ZiBydW4oc2VsZik6CiAgICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkKQEAgLTE5MiwyNTUgKzE1
NCwxMzMgQEAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAg
ICAgc2VsZi5fZHJpdmVyID0gc2VsZi5fcG9ydC5jcmVhdGVfZHJpdmVyKHNlbGYuX3Rlc3RfYXJn
cy5wbmdfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMpCiAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCi0gICAgICAg
IGltYWdlX2hhc2ggPSBfaW1hZ2VfaGFzaCh0ZXN0X2luZm8sIHNlbGYuX3Rlc3RfYXJncywgc2Vs
Zi5fb3B0aW9ucykKICAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgICBjcmFzaCwg
dGltZW91dCwgYWN0dWFsX2NoZWNrc3VtLCBvdXRwdXQsIGVycm9yID0gXAotICAgICAgICAgICAg
c2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5mby51cmkuc3RyaXAoKSwgdGVzdF9pbmZvLnRp
bWVvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfaGFzaCkKKyAg
ICAgICAgICAgIHNlbGYuX2RyaXZlci5ydW5fdGVzdCh0ZXN0X2luZm8udXJpLCB0ZXN0X2luZm8u
dGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8uaW1h
Z2VfY2hlY2tzdW0pCiAgICAgICAgIGVuZCA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX3Rl
c3RfcmVzdWx0ID0gX3Byb2Nlc3Nfb3V0cHV0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsCiAg
ICAgICAgICAgICB0ZXN0X2luZm8sIHNlbGYuX3Rlc3RfdHlwZXMsIHNlbGYuX3Rlc3RfYXJncywK
ICAgICAgICAgICAgIGNyYXNoLCB0aW1lb3V0LCBlbmQgLSBzdGFydCwKLSAgICAgICAgICAgIGFj
dHVhbF9jaGVja3N1bSwgb3V0cHV0LCBlcnJvcikKKyAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1
bSwgb3V0cHV0LCBlcnJvciwgc2VsZi5fbmFtZSkKICAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3Ao
KQogCiAgICAgZGVmIGdldF90ZXN0X3Jlc3VsdChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYu
X3Rlc3RfcmVzdWx0CiAKIAotY2xhc3MgV2F0Y2hhYmxlVGhyZWFkKHRocmVhZGluZy5UaHJlYWQp
OgotICAgICIiIlRoaXMgY2xhc3MgYWJzdHJhY3RzIGFuIGludGVyZmFjZSB1c2VkIGJ5Ci0gICAg
cnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCBm
b3IgdGhyZWFkCi0gICAgbWFuYWdlbWVudC4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0g
ICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fY2Fu
Y2VsZWQgPSBGYWxzZQotICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IE5vbmUKLSAgICAg
ICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9uZQotICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSBO
b25lCi0KLSAgICBkZWYgY2FuY2VsKHNlbGYpOgotICAgICAgICAiIiJTZXQgYSBmbGFnIHRlbGxp
bmcgdGhpcyB0aHJlYWQgdG8gcXVpdC4iIiIKLSAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVl
Ci0KLSAgICBkZWYgY2xlYXJfbmV4dF90aW1lb3V0KHNlbGYpOgotICAgICAgICAiIiJNYXJrIGEg
ZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRvIHN0b3Agc2V0dGluZyB0aW1lb3V0cy4iIiIKLSAg
ICAgICAgc2VsZi5fdGltZW91dCA9IDAKLQotICAgIGRlZiBleGNlcHRpb25faW5mbyhzZWxmKToK
LSAgICAgICAgIiIiSWYgcnVuKCkgdGVybWluYXRlZCBvbiBhbiB1bmNhdWdodCBleGNlcHRpb24s
IHJldHVybiBpdCBoZXJlCi0gICAgICAgICgodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykgdHVwbGUp
LgotICAgICAgICBSZXR1cm5zIE5vbmUgaWYgcnVuKCkgdGVybWluYXRlZCBub3JtYWxseS4gTWVh
bnQgdG8gYmUgY2FsbGVkIGFmdGVyCi0gICAgICAgIGpvaW5pbmcgdGhpcyB0aHJlYWQuIiIiCi0g
ICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb25faW5mbwotCi0gICAgZGVmIGlkKHNlbGYpOgot
ICAgICAgICAiIiJSZXR1cm4gYSB0aHJlYWQgaWRlbnRpZmllci4iIiIKLSAgICAgICAgcmV0dXJu
IHNlbGYuX3RocmVhZF9pZAotCi0gICAgZGVmIG5leHRfdGltZW91dChzZWxmKToKLSAgICAgICAg
IiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlzIHN1cHBvc2VkIHRvIGZpbmlzaCBieS4iIiIK
LSAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dAotCi0KLWNsYXNzIFRlc3RTaGVsbFRo
cmVhZChXYXRjaGFibGVUaHJlYWQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRp
b25zLCBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVldWUsCi0gICAgICAgICAgICAgICAg
IHRlc3RfdHlwZXMsIHRlc3RfYXJncyk6CitjbGFzcyBXb3JrZXIob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydCwgY29udGFpbmVyLCBvcHRpb25zLCB3b3JrZXJfbnVtYmVyKToK
ICAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbGwgdGhlIGxvY2FsIHN0YXRlIGZvciB0aGlzIER1bXBS
ZW5kZXJUcmVlIHRocmVhZC4KIAogICAgICAgICBBcmdzOgotICAgICAgICAgIHBvcnQ6IGludGVy
ZmFjZSB0byBwb3J0LXNwZWNpZmljIGhvb2tzCi0gICAgICAgICAgb3B0aW9uczogY29tbWFuZCBs
aW5lIG9wdGlvbnMgYXJndW1lbnQgZnJvbSBvcHRwYXJzZQotICAgICAgICAgIGZpbGVuYW1lX2xp
c3RfcXVldWU6IEEgdGhyZWFkIHNhZmUgUXVldWUgY2xhc3MgdGhhdCBjb250YWlucyBsaXN0cwot
ICAgICAgICAgICAgICBvZiB0dXBsZXMgb2YgKGZpbGVuYW1lLCB1cmkpIHBhaXJzLgotICAgICAg
ICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJlYWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29u
dGFpbgotICAgICAgICAgICAgICBzZXJpYWxpemVkIFRlc3RSZXN1bHQgb2JqZWN0cy4KLSAgICAg
ICAgICB0ZXN0X3R5cGVzOiBBIGxpc3Qgb2YgVGVzdFR5cGUgb2JqZWN0cyB0byBydW4gdGhlIHRl
c3Qgb3V0cHV0Ci0gICAgICAgICAgICAgIGFnYWluc3QuCi0gICAgICAgICAgdGVzdF9hcmdzOiBB
IFRlc3RBcmd1bWVudHMgb2JqZWN0IHRvIHBhc3MgdG8gZWFjaCBUZXN0VHlwZS4KKyAgICAgICAg
ICBjb250YWluZXI6IGNvbnRhaW5lciBvYmplY3QgdG8gcmVjZWl2ZSB0ZXN0cyBmcm9tCisgICAg
ICAgICAgd29ya2VyX251bWJlcjogbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmcKIAogICAgICAgICAi
IiIKLSAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYu
X2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fY29udGFpbmVyID0gY29udGFpbmVyCiAg
ICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25z
Ci0gICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3RfcXVldWUgPSBmaWxlbmFtZV9saXN0X3F1ZXVl
Ci0gICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IHJlc3VsdF9xdWV1ZQorICAgICAgICBzZWxm
Ll93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9uYW1lID0gJ3dv
cmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxm
Ll9vcHRpb25zLmJhdGNoX3NpemUKKyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKICAg
ICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdCA9IFtdCi0gICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMg
PSB0ZXN0X3R5cGVzCi0gICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHRlc3RfYXJncworICAgICAg
ICBzZWxmLl90ZXN0X3R5cGVzID0gW10KKyAgICAgICAgZm9yIGNscyBpbiBzZWxmLl90ZXN0X3R5
cGVfY2xhc3NlcygpOgorICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcy5hcHBlbmQoY2xzKHNl
bGYuX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCisgICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHNl
bGYuX3Rlc3RfYXJncyh3b3JrZXJfbnVtYmVyKQogICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25l
Ci0gICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzID0ge30KLSAgICAgICAgc2Vs
Zi5fdGVzdF9yZXN1bHRzID0gW10KLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0gMAotICAgICAg
ICBzZWxmLl9zdGFydF90aW1lID0gMAotICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSAwCi0gICAg
ICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKLSAgICAgICAgc2VsZi5faHR0cF9sb2Nr
X3dhaXRfYmVnaW4gPSAwCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IDAKLQot
ICAgICAgICAjIEN1cnJlbnQgZ3JvdXAgb2YgdGVzdHMgd2UncmUgcnVubmluZy4KLSAgICAgICAg
c2VsZi5fY3VycmVudF9ncm91cCA9IE5vbmUKLSAgICAgICAgIyBOdW1iZXIgb2YgdGVzdHMgaW4g
c2VsZi5fY3VycmVudF9ncm91cC4KLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRf
Z3JvdXAgPSBOb25lCi0gICAgICAgICMgVGltZSBhdCB3aGljaCB3ZSBzdGFydGVkIHJ1bm5pbmcg
dGVzdHMgZnJvbSBzZWxmLl9jdXJyZW50X2dyb3VwLgotICAgICAgICBzZWxmLl9jdXJyZW50X2dy
b3VwX3N0YXJ0X3RpbWUgPSBOb25lCi0KLSAgICBkZWYgZ2V0X3Rlc3RfZ3JvdXBfdGltaW5nX3N0
YXRzKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIGEgZGljdGlvbmFyeSBtYXBwaW5nIHRlc3Qg
Z3JvdXAgdG8gYSB0dXBsZSBvZgotICAgICAgICAobnVtYmVyIG9mIHRlc3RzIGluIHRoYXQgZ3Jv
dXAsIHRpbWUgdG8gcnVuIHRoZSB0ZXN0cykiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3Rf
Z3JvdXBfdGltaW5nX3N0YXRzCi0KLSAgICBkZWYgZ2V0X3Rlc3RfcmVzdWx0cyhzZWxmKToKLSAg
ICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIGFsbCB0ZXN0cyBydW4gb24gdGhpcyB0aHJlYWQu
Ci0KLSAgICAgICAgVGhpcyBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBwZXItdGhyZWFkIHN0YXRpc3Rp
Y3MuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3Jlc3VsdHMKLQot
ICAgIGRlZiBnZXRfdG90YWxfdGltZShzZWxmKToKLSAgICAgICAgcmV0dXJuIG1heChzZWxmLl9z
dG9wX3RpbWUgLSBzZWxmLl9zdGFydF90aW1lIC0KLSAgICAgICAgICAgICAgICAgICBzZWxmLl9o
dHRwX2xvY2tfd2FpdF90aW1lKCksIDAuMCkKLQotICAgIGRlZiBnZXRfbnVtX3Rlc3RzKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5fbnVtX3Rlc3RzCi0KLSAgICBkZWYgcnVuKHNlbGYpOgot
ICAgICAgICAiIiJEZWxlZ2F0ZSBtYWluIHdvcmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFuZCB3YXRj
aCBmb3IgdW5jYXVnaHQKLSAgICAgICAgZXhjZXB0aW9ucy4iIiIKLSAgICAgICAgc2VsZi5fY292
ZXJlZF9ydW4oKQotCi0gICAgZGVmIF9jb3ZlcmVkX3J1bihzZWxmKToKLSAgICAgICAgIyBGSVhN
RTogdGhpcyBpcyBhIHNlcGFyYXRlIHJvdXRpbmUgdG8gd29yayBhcm91bmQgYSBidWcKLSAgICAg
ICAgIyBpbiBjb3ZlcmFnZTogc2VlIGh0dHA6Ly9iaXRidWNrZXQub3JnL25lZC9jb3ZlcmFnZXB5
L2lzc3VlLzg1LgotICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkK
LSAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuX251
bV90ZXN0cyA9IDAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJXMgc3Rh
cnRpbmcnICUgKHNlbGYuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgIHNlbGYuX3J1bih0ZXN0X3J1
bm5lcj1Ob25lLCByZXN1bHRfc3VtbWFyeT1Ob25lKQotICAgICAgICAgICAgX2xvZy5kZWJ1Zygn
JXMgZG9uZSAoJWQgdGVzdHMpJyAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5nZXRfbnVtX3Rlc3RzKCkpKQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRl
cnJ1cHQ6Ci0gICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygp
Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBpbnRlcnJ1cHRlZCIgJSBzZWxmLmdldE5hbWUo
KSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgIyBTYXZlIHRoZSBleGNlcHRpb24gZm9y
IG91ciBjYWxsZXIgdG8gc2VlLgotICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBz
eXMuZXhjX2luZm8oKQotICAgICAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkK
LSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyVzIGR5aW5nLCBleGNlcHRpb24gcmFpc2VkJyAlIHNl
bGYuZ2V0TmFtZSgpKQotCi0gICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCi0K
LSAgICBkZWYgcnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHRlc3RfcnVubmVyLCByZXN1bHRfc3Vt
bWFyeSk6Ci0gICAgICAgICIiIlRoaXMgaG9vayBhbGxvd3MgdXMgdG8gcnVuIHRoZSB0ZXN0cyBm
cm9tIHRoZSBtYWluIHRocmVhZCBpZgotICAgICAgICAtLW51bS10ZXN0LXNoZWxscz09MSwgaW5z
dGVhZCBvZiBoYXZpbmcgdG8gYWx3YXlzIHJ1biB0d28gb3IgbW9yZQotICAgICAgICB0aHJlYWRz
LiBUaGlzIGFsbG93cyB1cyB0byBkZWJ1ZyB0aGUgdGVzdCBoYXJuZXNzIHdpdGhvdXQgaGF2aW5n
IHRvCi0gICAgICAgIGRvIG11bHRpLXRocmVhZGVkIGRlYnVnZ2luZy4iIiIKLSAgICAgICAgc2Vs
Zi5fcnVuKHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSkKLQotICAgIGRlZiBjYW5jZWwoc2Vs
Zik6Ci0gICAgICAgICIiIkNsZWFuIHVwIGh0dHAgbG9jayBhbmQgc2V0IGEgZmxhZyB0ZWxsaW5n
IHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCi0gICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRo
X2xvY2soKQotICAgICAgICBXYXRjaGFibGVUaHJlYWQuY2FuY2VsKHNlbGYpCi0KLSAgICBkZWYg
bmV4dF90aW1lb3V0KHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHRpbWUgdGhlIHRlc3Qg
aXMgc3VwcG9zZWQgdG8gZmluaXNoIGJ5LiIiIgotICAgICAgICBpZiBzZWxmLl9uZXh0X3RpbWVv
dXQ6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0ICsgc2VsZi5faHR0cF9s
b2NrX3dhaXRfdGltZSgpCi0gICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVvdXQKLQotICAg
IGRlZiBfaHR0cF9sb2NrX3dhaXRfdGltZShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSB0
aW1lIHdoYXQgaHR0cCBsb2NraW5nIHRha2VzLiIiIgotICAgICAgICBpZiBzZWxmLl9odHRwX2xv
Y2tfd2FpdF9iZWdpbiA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgaWYgc2Vs
Zi5faHR0cF9sb2NrX3dhaXRfZW5kID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gdGltZS50aW1l
KCkgLSBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbgotICAgICAgICByZXR1cm4gc2VsZi5faHR0
cF9sb2NrX3dhaXRfZW5kIC0gc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4KLQotICAgIGRlZiBf
cnVuKHNlbGYsIHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIk1haW4g
d29yayBlbnRyeSBwb2ludCBvZiB0aGUgdGhyZWFkLiBCYXNpY2FsbHkgd2UgcHVsbCB1cmxzIGZy
b20gdGhlCi0gICAgICAgIGZpbGVuYW1lIHF1ZXVlIGFuZCBydW4gdGhlIHRlc3RzIHVudGlsIHdl
IHJ1biBvdXQgb2YgdXJscy4KLQotICAgICAgICBJZiB0ZXN0X3J1bm5lciBpcyBub3QgTm9uZSwg
dGhlbiB3ZSBjYWxsIHRlc3RfcnVubmVyLlVwZGF0ZVN1bW1hcnkoKQotICAgICAgICB3aXRoIHRo
ZSByZXN1bHRzIG9mIGVhY2ggdGVzdC4iIiIKLSAgICAgICAgYmF0Y2hfc2l6ZSA9IHNlbGYuX29w
dGlvbnMuYmF0Y2hfc2l6ZQotICAgICAgICBiYXRjaF9jb3VudCA9IDAKLQotICAgICAgICAjIEFw
cGVuZCB0ZXN0cyB3ZSdyZSBydW5uaW5nIHRvIHRoZSBleGlzdGluZyB0ZXN0c19ydW4udHh0IGZp
bGUuCi0gICAgICAgICMgVGhpcyBpcyBjcmVhdGVkIGluIHJ1bl93ZWJraXRfdGVzdHMucHk6X1By
ZXBhcmVMaXN0c0FuZFByaW50T3V0cHV0LgogICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBv
cy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0c19ydW4udHh0IikKLSAgICAgICAg
dGVzdHNfcnVuX2ZpbGUgPSBjb2RlY3Mub3Blbih0ZXN0c19ydW5fZmlsZW5hbWUsICJhIiwgInV0
Zi04IikKLQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgaWYgc2VsZi5fY2FuY2Vs
ZWQ6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGVzdGluZyBjYW5jZWxsZWQnKQotICAg
ICAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICByZXR1
cm4KLQotICAgICAgICAgICAgaWYgbGVuKHNlbGYuX2ZpbGVuYW1lX2xpc3QpIGlzIDA6Ci0gICAg
ICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF9ncm91cCBpcyBub3QgTm9uZToKLSAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fdGVzdF9ncm91cF90aW1pbmdfc3RhdHNbc2VsZi5fY3VycmVudF9n
cm91cF0gPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fbnVtX3Rlc3RzX2luX2N1
cnJlbnRfZ3JvdXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGltZS50aW1lKCkgLSBzZWxm
Ll9jdXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUpCi0KLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAg
ICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXAsIHNlbGYuX2ZpbGVuYW1lX2xpc3Qg
PSBcCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlLmdl
dF9ub3dhaXQoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0gICAgICAgICAgICAg
ICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCi0gICAgICAgICAgICAgICAgICAg
IHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAg
ICAgICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X2dyb3VwID09ICJ0ZXN0c190b19odHRwX2xv
Y2siOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jaygp
Ci0gICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKLSAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0KLSAgICAgICAgICAgICAg
ICBzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVudF9ncm91cCA9IGxlbihzZWxmLl9maWxlbmFtZV9s
aXN0KQotICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXBfc3RhcnRfdGltZSA9IHRp
bWUudGltZSgpCi0KLSAgICAgICAgICAgIHRlc3RfaW5mbyA9IHNlbGYuX2ZpbGVuYW1lX2xpc3Qu
cG9wKCkKLQotICAgICAgICAgICAgIyBXZSBoYXZlIGEgdXJsLCBydW4gdGVzdHMuCi0gICAgICAg
ICAgICBiYXRjaF9jb3VudCArPSAxCi0gICAgICAgICAgICBzZWxmLl9udW1fdGVzdHMgKz0gMQot
ICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X3NpbmdseSh0ZXN0X2luZm8pCi0gICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5mbykK
LQotICAgICAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X2luZm8uZmlsZW5hbWUKLSAgICAgICAgICAg
IHRlc3RzX3J1bl9maWxlLndyaXRlKGZpbGVuYW1lICsgIlxuIikKLSAgICAgICAgICAgIGlmIHJl
c3VsdC5mYWlsdXJlczoKLSAgICAgICAgICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1bXBSZW5k
ZXJUcmVlIGlmIHdlIG5lZWQgdG8uCi0gICAgICAgICAgICAgICAgaWYgbGVuKFsxIGZvciBmIGlu
IHJlc3VsdC5mYWlsdXJlcwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZi5zaG91bGRfa2ls
bF9kdW1wX3JlbmRlcl90cmVlKCldKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9k
dW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2gg
Y291bnQgc2luY2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KLSAgICAgICAgICAgICAgICAgICAg
YmF0Y2hfY291bnQgPSAwCi0gICAgICAgICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2Fn
ZShzKS4KLSAgICAgICAgICAgICAgICBlcnJvcl9zdHIgPSAnXG4nLmpvaW4oWycgICcgKyBmLm1l
c3NhZ2UoKSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgaW4g
cmVzdWx0LmZhaWx1cmVzXSkKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBmYWls
ZWQ6XG4lcyIgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3Jfc3RyKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShm
aWxlbmFtZSkpKQotICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlLnB1dChyZXN1bHQuZHVt
cHMoKSkKLQotICAgICAgICAgICAgaWYgYmF0Y2hfc2l6ZSA+IDAgYW5kIGJhdGNoX2NvdW50ID49
IGJhdGNoX3NpemU6Ci0gICAgICAgICAgICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNl
dCBjb3VudC4KLSAgICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQot
ICAgICAgICAgICAgICAgIGJhdGNoX2NvdW50ID0gMAorICAgICAgICBzZWxmLl90ZXN0c19ydW5f
ZmlsZSA9IGNvZGVjcy5vcGVuKHRlc3RzX3J1bl9maWxlbmFtZSwgImEiLCAidXRmLTgiKQorCisg
ICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHJlY2VpdmVkIC0gbm8g
bW9yZSB0ZXN0cyB0byBydW4uIiIiCisgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJl
ZSgpCisgICAgICAgIGlmIHNlbGYuX3Rlc3RzX3J1bl9maWxlOgorICAgICAgICAgICAgc2VsZi5f
dGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUg
PSBOb25lCisKKyAgICBkZWYgX3Rlc3RfYXJncyhzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAg
ICAgIiIiUmV0dXJucyB0aGUgdHVwbGUgb2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9yIER1
bXBSZW5kZXJUcmVlLiIiIgorICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5UZXN0
QXJndW1lbnRzKCkKKyAgICAgICAgdGVzdF9hcmdzLnBuZ19wYXRoID0gTm9uZQorICAgICAgICBp
ZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgcG5nX3BhdGggPSBvcy5w
YXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJwbmdfcmVzdWx0JXMucG5nIiAlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyKQorICAgICAgICAgICAg
dGVzdF9hcmdzLnBuZ19wYXRoID0gcG5nX3BhdGgKKyAgICAgICAgdGVzdF9hcmdzLm5ld19iYXNl
bGluZSA9IHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lCisgICAgICAgIHRlc3RfYXJncy5yZXNl
dF9yZXN1bHRzID0gc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzCisKKyAgICAgICAgcmV0dXJu
IHRlc3RfYXJncworCisgICAgZGVmIF9uZWVkc19pbWFnZV9oYXNoKHNlbGYpOgorICAgICAgICAi
IiJSZXR1cm5zIHRoZSBpbWFnZSBoYXNoIG9mIHRoZSB0ZXN0IGlmIGl0J3MgbmVlZGVkLCBvdGhl
cndpc2UgTm9uZS4iIiIKKyAgICAgICAgcmV0dXJuIChzZWxmLl9vcHRpb25zLm5ld19iYXNlbGlu
ZSBvciBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMgb3IKKyAgICAgICAgICAgICAgICBzZWxm
Ll9vcHRpb25zLnBpeGVsX3Rlc3RzKQorCisgICAgZGVmIF90ZXN0X3R5cGVfY2xhc3NlcyhzZWxm
KToKKyAgICAgICAgY2xhc3NlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQorICAgICAgICBp
ZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQo
aW1hZ2VfZGlmZi5JbWFnZURpZmYpCisgICAgICAgIHJldHVybiBjbGFzc2VzCisKKyAgICBkZWYg
cnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbmZvKToKKyAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X2luZm8u
ZmlsZW5hbWUKKyAgICAgICAgdGVzdF9pbmZvLnVyaSA9IHNlbGYuX3BvcnQuZmlsZW5hbWVfdG9f
dXJpKGZpbGVuYW1lKQorICAgICAgICBpZiBzZWxmLl9uZWVkc19pbWFnZV9oYXNoKCk6CisgICAg
ICAgICAgICB0ZXN0X2luZm8uaW1hZ2VfY2hlY2tzdW0gPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2No
ZWNrc3VtKGZpbGVuYW1lKQorICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCArPSAxCisKKyAgICAg
ICAgIyBXZSBnaXZlIERSVCBzb21lIGV4dHJhIHRpbWUgdG8gZGV0ZWN0IGEgdGltZW91dCwgYW5k
IHRoZW4KKyAgICAgICAgIyBnaXZlIG91ciB3YXRjaGRvZyB0aHJlYWQgYSBzaW1pbGFyIGFtb3Vu
dCB0byBkZXRlY3QgYSBodW5nCisgICAgICAgICMgRFJULiBOb3RlIHRoYXQgd2UgbmVlZCB0byBj
b252ZXJ0IHRoZSB0ZXN0IHRpbWVvdXQgZnJvbSBhCisgICAgICAgICMgc3RyaW5nIHZhbHVlIGlu
IG1pbGxpc2Vjb25kcyB0byBhIGZsb2F0IGZvciBQeXRob24uCisgICAgICAgIHRlc3RfcGFkZGlu
ZyA9IDQwLjAKKyAgICAgICAga2lsbF9wYWRkaW5nID0gMS4wCisgICAgICAgIHRocmVhZF90aW1l
b3V0ID0gZmxvYXQodGVzdF9pbmZvLnRpbWVvdXQpIC8gMTAwMC4wICsgdGVzdF9wYWRkaW5nCiAK
LSAgICAgICAgICAgIGlmIHRlc3RfcnVubmVyOgotICAgICAgICAgICAgICAgIHRlc3RfcnVubmVy
LnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgZGVmIF9ydW5fdGVzdF9zaW5n
bHkoc2VsZiwgdGVzdF9pbmZvKToKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAgICBzZWxmLl9jb250YWlu
ZXIuc3RhcnRlZF90ZXN0KHRlc3RfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyZWFkX3RpbWVvdXQgKyBraWxsX3BhZGRpbmcpCisgICAgICAgICAgICBy
ZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZCh0ZXN0X2luZm8sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRf
dGltZW91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NvbnRhaW5lci5zdGFy
dGVkX3Rlc3QodGVzdF9pbmZvLCB0aHJlYWRfdGltZW91dCkKKyAgICAgICAgICAgIHJlc3VsdCA9
IHNlbGYuX3J1bl90ZXN0X2luX3RoaXNfdGhyZWFkKHRlc3RfaW5mbykKKworICAgICAgICBzZWxm
Ll9jb250YWluZXIuZmluaXNoZWRfdGVzdChyZXN1bHQsIHRpbWUudGltZSgpIC0gc3RhcnQpCisK
KyAgICAgICAgaWYgc2VsZi5fYmF0Y2hfc2l6ZSA+IDAgYW5kIHNlbGYuX2JhdGNoX2NvdW50ID49
IHNlbGYuX2JhdGNoX3NpemU6CisgICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJl
c2V0IGNvdW50LgorICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAg
ICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAorCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1
bl9maWxlLndyaXRlKGZpbGVuYW1lICsgIlxuIikKKyAgICAgICAgaWYgcmVzdWx0LmZhaWx1cmVz
OgorICAgICAgICAgICAgIyBDaGVjayBhbmQga2lsbCBEdW1wUmVuZGVyVHJlZSBpZiB3ZSBuZWVk
IHRvLgorICAgICAgICAgICAgaWYgbGVuKFsxIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlcworICAg
ICAgICAgICAgICAgICAgICBpZiBmLnNob3VsZF9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKV0pOgor
ICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisgICAgICAgICAg
ICAgICAgIyBSZXNldCB0aGUgYmF0Y2ggY291bnQgc2luY2UgdGhlIHNoZWxsIGp1c3QgYm91bmNl
ZC4KKyAgICAgICAgICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKyAgICAgICAgICAgICMg
UHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCisgICAgICAgICAgICBlcnJvcl9zdHIgPSAnXG4n
LmpvaW4oWycgICcgKyBmLm1lc3NhZ2UoKSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGYgaW4gcmVzdWx0LmZhaWx1cmVzXSkKKyAgICAgICAgICAgIF9sb2cuZGVidWco
IiVzICVzIGZhaWxlZDpcbiVzIiAlIChzZWxmLl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX3N0cikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBf
bG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuX25hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKSkKKwor
ICAgIGRlZiBfcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQoc2VsZiwgdGVzdF9pbmZvLCB0aHJl
YWRfdGltZW91dCk6CiAgICAgICAgICIiIlJ1biBhIHRlc3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQs
IGVuZm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4KIAogICAgICAgICBTaW5jZSB3ZSBjYW4gb25s
eSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEgdGhyZWFkLCBub3QgYW55IGludGVybmFsCkBA
IC00NTIsMTkgKzI5MiwxNiBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFk
KToKIAogICAgICAgICBSZXR1cm5zOgogICAgICAgICAgIEEgVGVzdFJlc3VsdAotCiAgICAgICAg
ICIiIgogICAgICAgICB3b3JrZXIgPSBTaW5nbGVUZXN0VGhyZWFkKHNlbGYuX3BvcnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3Rlc3RfYXJncykKIAogICAgICAgICB3b3JrZXIuc3RhcnQoKQogCi0gICAg
ICAgIHRocmVhZF90aW1lb3V0ID0gX21pbGxpc2Vjb25kc190b19zZWNvbmRzKAotICAgICAgICAg
ICAgX3BhZF90aW1lb3V0KGludCh0ZXN0X2luZm8udGltZW91dCkpKQotICAgICAgICB0aHJlYWQu
X25leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgdGhyZWFkX3RpbWVvdXQKICAgICAgICAgd29y
a2VyLmpvaW4odGhyZWFkX3RpbWVvdXQpCiAgICAgICAgIGlmIHdvcmtlci5pc0FsaXZlKCk6CiAg
ICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwgcnVu
bmluZywgdGhlCkBAIC00ODcsMTEgKzMyNCwxMiBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0
Y2hhYmxlVGhyZWFkKToKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0Nhbm5vdCBnZXQgcmVzdWx0
cyBvZiB0ZXN0OiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8uZmlsZW5h
bWUpCiAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdCh0ZXN0X2lu
Zm8uZmlsZW5hbWUsIGZhaWx1cmVzPVtdLAotICAgICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9
MCwgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzPTAsIHRpbWVfZm9yX2RpZmZzPTApCisgICAgICAg
ICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwKKyAg
ICAgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmcz17fSkKIAogICAgICAgICByZXR1cm4gcmVzdWx0
CiAKLSAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3RfaW5mbyk6CisgICAgZGVmIF9ydW5fdGVz
dF9pbl90aGlzX3RocmVhZChzZWxmLCB0ZXN0X2luZm8pOgogICAgICAgICAiIiJSdW4gYSBzaW5n
bGUgdGVzdCBmaWxlIHVzaW5nIGEgc2hhcmVkIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MuCiAKICAg
ICAgICAgQXJnczoKQEAgLTUwMCwyOCArMzM4LDE4IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChX
YXRjaGFibGVUaHJlYWQpOgogICAgICAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0Lgog
ICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fZW5zdXJlX2R1bXBfcmVuZGVyX3RyZWVfaXNfcnVu
bmluZygpCi0gICAgICAgICMgVGhlIHBpeGVsX2hhc2ggaXMgdXNlZCB0byBhdm9pZCBkb2luZyBh
biBpbWFnZSBkdW1wIGlmIHRoZQotICAgICAgICAjIGNoZWNrc3VtcyBtYXRjaCwgc28gaXQgc2hv
dWxkIGJlIHNldCB0byBhIGJsYW5rIHZhbHVlIGlmIHdlCi0gICAgICAgICMgYXJlIGdlbmVyYXRp
bmcgYSBuZXcgYmFzZWxpbmUuICAoT3RoZXJ3aXNlLCBhbiBpbWFnZSBmcm9tIGEKLSAgICAgICAg
IyBwcmV2aW91cyBydW4gd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgYmFzZWxpbmUuKQotICAgICAg
ICBpbWFnZV9oYXNoID0gX2ltYWdlX2hhc2godGVzdF9pbmZvLCBzZWxmLl90ZXN0X2FyZ3MsIHNl
bGYuX29wdGlvbnMpCi0gICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKLQotICAgICAgICB0aHJl
YWRfdGltZW91dCA9IF9taWxsaXNlY29uZHNfdG9fc2Vjb25kcygKLSAgICAgICAgICAgICBfcGFk
X3RpbWVvdXQoaW50KHRlc3RfaW5mby50aW1lb3V0KSkpCi0gICAgICAgIHNlbGYuX25leHRfdGlt
ZW91dCA9IHN0YXJ0ICsgdGhyZWFkX3RpbWVvdXQKIAorICAgICAgICBzdGFydCA9IHRpbWUudGlt
ZSgpCiAgICAgICAgIGNyYXNoLCB0aW1lb3V0LCBhY3R1YWxfY2hlY2tzdW0sIG91dHB1dCwgZXJy
b3IgPSBcCi0gICAgICAgICAgIHNlbGYuX2RyaXZlci5ydW5fdGVzdCh0ZXN0X2luZm8udXJpLCB0
ZXN0X2luZm8udGltZW91dCwgaW1hZ2VfaGFzaCkKKyAgICAgICAgICAgc2VsZi5fZHJpdmVyLnJ1
bl90ZXN0KHRlc3RfaW5mby51cmksIHRlc3RfaW5mby50aW1lb3V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLmltYWdlX2NoZWNrc3VtKQogICAgICAgICBlbmQg
PSB0aW1lLnRpbWUoKQogCi0gICAgICAgIHJlc3VsdCA9IF9wcm9jZXNzX291dHB1dChzZWxmLl9w
b3J0LCBzZWxmLl9vcHRpb25zLAorICAgICAgICByZXR1cm4gX3Byb2Nlc3Nfb3V0cHV0KHNlbGYu
X3BvcnQsIHNlbGYuX29wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0X2luZm8sIHNlbGYuX3Rlc3RfdHlwZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl90ZXN0X2FyZ3MsIGNyYXNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZW91dCwgZW5kIC0gc3RhcnQsIGFjdHVhbF9jaGVja3N1bSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgZXJyb3IpCi0gICAgICAgIHNlbGYuX3Rlc3Rf
cmVzdWx0cy5hcHBlbmQocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIGVycm9yLCBzZWxmLl9uYW1lKQogCiAgICAg
ZGVmIF9lbnN1cmVfZHVtcF9yZW5kZXJfdHJlZV9pc19ydW5uaW5nKHNlbGYpOgogICAgICAgICAi
IiJTdGFydCB0aGUgc2hhcmVkIER1bXBSZW5kZXJUcmVlLCBpZiBpdCdzIG5vdCBydW5uaW5nLgpA
QCAtNTM3LDI5ICszNjUsNiBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFk
KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zKQogICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnN0YXJ0KCkKIAotICAgIGRl
ZiBfc3RhcnRfc2VydmVyc193aXRoX2xvY2soc2VsZik6Ci0gICAgICAgICIiIkFjcXVpcmUgaHR0
cCBsb2NrIGFuZCBzdGFydCB0aGUgc2VydmVycy4iIiIKLSAgICAgICAgc2VsZi5faHR0cF9sb2Nr
X3dhaXRfYmVnaW4gPSB0aW1lLnRpbWUoKQotICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJlIGh0
dHAgbG9jayAuLi4nKQotICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKLSAg
ICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgc2Vs
Zi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCi0gICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5n
IFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2Nr
ZXRfc2VydmVyKCkKLSAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID0gdGltZS50aW1l
KCkKLSAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBUcnVlCi0KLSAgICBkZWYgX3N0b3Bf
c2VydmVyc193aXRoX2xvY2soc2VsZik6Ci0gICAgICAgICIiIlN0b3AgdGhlIHNlcnZlcnMgYW5k
IHJlbGVhc2UgaHR0cCBsb2NrLiIiIgotICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoK
LSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nIEhUVFAgc2VydmVyIC4uLicpCi0gICAg
ICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQotICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnU3RvcHBpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQotICAgICAgICAgICAgc2VsZi5f
cG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnUmVs
ZWFzZSBodHRwIGxvY2sgLi4uJykKLSAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRw
X2xvY2soKQotICAgICAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxzZQotCiAgICAg
ZGVmIF9raWxsX2R1bXBfcmVuZGVyX3RyZWUoc2VsZik6CiAgICAgICAgICIiIktpbGwgdGhlIER1
bXBSZW5kZXJUcmVlIHByb2Nlc3MgaWYgaXQncyBydW5uaW5nLiIiIgogICAgICAgICBpZiBzZWxm
Ll9kcml2ZXI6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZF91bml0dGVzdC5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkX3VuaXR0ZXN0LnB5CmluZGV4IDYzZjg2ZDkzZDg5
NDk1ZWE5N2M5ZjAxYWExNzQ5MTY4ZWI2YWFiOGQuLjMxODYzMDgxY2I3ZTg4NDRhYWVjMzhkODFi
ODE5MzE4NTQyOGM3ZWMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkX3VuaXR0
ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkX3VuaXR0ZXN0LnB5CkBAIC0zMSwx
OSArMzEsOCBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWltcG9ydCBkdW1wX3Jl
bmRlcl90cmVlX3RocmVhZAotCi0KIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAg
IGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0YWNrX2ZvdW5kKHNlbGYpOgotICAgICAgICBpZCwgc3Rh
Y2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKVswXQotICAgICAgICBmb3VuZF9zdGFj
ayA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmZpbmRfdGhyZWFkX3N0YWNrKGlkKQotICAgICAg
ICBzZWxmLmFzc2VydE5vdEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQotCi0gICAgZGVmIHRlc3Rf
ZmluZF90aHJlYWRfc3RhY2tfbm90X2ZvdW5kKHNlbGYpOgotICAgICAgICBmb3VuZF9zdGFjayA9
IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmZpbmRfdGhyZWFkX3N0YWNrKDApCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCi0KKyAgICBwYXNzCiAKIGlmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9wcmlu
dGluZy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3ByaW50aW5nLnB5CmluZGV4IDAwZmYyMTE0YzUwYTA1ZTAzOGMwZDQ5NTg3ZDg3
ZWMxYjdmNjkyMDUuLmZiOWZlNmRhZmQxNWM4YzUwYzVjMTY4NDc2NDRkZDJhOWYxYTZhMDIgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3ByaW50aW5nLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3ByaW50aW5nLnB5CkBAIC0xODIsOCArMTgyLDgg
QEAgZGVmIF9jb25maWd1cmVfbG9nZ2luZyhzdHJlYW0sIHZlcmJvc2UpOgogICAgIGxvZ19kYXRl
Zm10ID0gJyV5JW0lZCAlSDolTTolUycKICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLklORk8KICAg
ICBpZiB2ZXJib3NlOgotICAgICAgICBsb2dfZm10ID0gKCclKGFzY3RpbWUpcyAlKGZpbGVuYW1l
KXM6JShsaW5lbm8pLTRkICUobGV2ZWxuYW1lKXMgJwotICAgICAgICAgICAgICAgICclKG1lc3Nh
Z2UpcycpCisgICAgICAgIGxvZ19mbXQgPSAoJyUoYXNjdGltZSlzICUocHJvY2VzcylkICUoZmls
ZW5hbWUpczolKGxpbmVubyktNGQgJShsZXZlbG5hbWUpcycKKyAgICAgICAgICAgICAgICAgICAn
JShtZXNzYWdlKXMnKQogICAgICAgICBsb2dfbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCiAKICAgICBy
b290ID0gbG9nZ2luZy5nZXRMb2dnZXIoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVy
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRiNjc0ZTJhMzViODVhMTAwMWJmODViMzMwMWVmODk5ZjQ2MjUzOGIK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9yb3V0ZXIucHkKQEAgLTAsMCArMSw1NTQgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitpbXBvcnQgY1BpY2tsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXBy
b2Nlc3NpbmcKK2ltcG9ydCBvcworaW1wb3J0IFF1ZXVlCitpbXBvcnQgc3lzCitpbXBvcnQgdGhy
ZWFkCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNlYmFjaworCitp
bXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKK2ltcG9ydCB0ZXN0X3Jlc3VsdHMKKworCitf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFj
a2FnZS5yb3V0ZXIiKQorCisKK2RlZiBnZXQocG9ydCwgb3B0aW9ucyk6CisgICAgaWYgb3B0aW9u
cy53b3JrZXJzX2FyZSA9PSAnaW5saW5lJzoKKyAgICAgICAgcmV0dXJuIFNpbmdsZVRocmVhZGVk
Um91dGVyKHBvcnQsIG9wdGlvbnMpCisgICAgaWYgb3B0aW9ucy53b3JrZXJzX2FyZSA9PSAndGhy
ZWFkcyc6CisgICAgICAgIHJldHVybiBNdWx0aVRocmVhZGVkUm91dGVyKHBvcnQsIG9wdGlvbnMp
CisgICAgcmV0dXJuIE11bHRpUHJvY2Vzc1JvdXRlcihwb3J0LCBvcHRpb25zKQorCisKK2NsYXNz
IF9NZXNzYWdlKG9iamVjdCk6CisgICAgVEVTVF9MSVNUID0gJ3Rlc3RfbGlzdCcKKyAgICBTVE9Q
ID0gJ3N0b3AnCisgICAgRE9ORSA9ICdkb25lJworICAgIFNUQVJURURfVEVTVCA9ICdzdGFydGVk
X3Rlc3QnCisgICAgRklOSVNIRURfVEVTVCA9ICdmaW5pc2hlZF90ZXN0JworICAgIEZJTklTSEVE
X0xJU1QgPSAnZmluaXNoZWRfbGlzdCcKKyAgICBFWENFUFRJT04gPSAnZXhjZXB0aW9uJworCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2FkcyhzdHIpOgorICAgICAgICBvYmogPSBjUGlj
a2xlLmxvYWRzKHN0cikKKyAgICAgICAgYXNzZXJ0KGlzaW5zdGFuY2Uob2JqLCBfTWVzc2FnZSkp
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3JjLCBkZXN0LCBoZHIsIGJvZHkpOgorICAgICAg
ICBzZWxmLnNyYyA9IHNyYworICAgICAgICBzZWxmLmRlc3QgPSBkZXN0CisgICAgICAgIHNlbGYu
aGRyID0gaGRyCisgICAgICAgIHNlbGYuYm9keSA9IGJvZHkKKworICAgIGRlZiBkdW1wcyhzZWxm
KToKKyAgICAgICAgcmV0dXJuIGNQaWNrbGUuZHVtcHMoc2VsZikKKworCitjbGFzcyBfV29ya2Vy
U3RhdGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubmFt
ZSA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0X3RpbWVvdXQgPSBOb25lCisgICAgICAgIHNlbGYu
dGhyZWFkID0gTm9uZQorICAgICAgICBzZWxmLndlZGdlZCA9IEZhbHNlCisgICAgICAgIHNlbGYu
ZG9uZSA9IEZhbHNlCisKKworY2xhc3MgUm91dGVyKG9iamVjdCk6CisgICAgTUFOQUdFUiA9ICdt
YW5hZ2VyJworICAgIEFOWV9XT1JLRVIgPSAnd29ya2VyLVxkKycKKworICAgIElOX01FTU9SWV9S
RVBSRVNFTlRBVElPTiA9ICI8aW5fbWVtb3J5PiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgbG9hZHMoc3RyKToKKyAgICAgICAgYXNzZXJ0IHN0ciA9PSBSb3V0ZXIuSU5fTUVNT1JZX1JF
UFJFU0VOVEFUSU9OCisgICAgICAgIGdsb2JhbCBfcm91dGVyCisgICAgICAgIHJldHVybiBfcm91
dGVyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAgIHNl
bGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAg
IHNlbGYuX21hbmFnZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dvcmtlcnMgPSB7fQorICAgICAg
ICBzZWxmLl9udW1fd29ya2VycyA9IGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykK
KyAgICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2Vs
Zi5fd29ya2VyX3F1ZXVlID0gUXVldWUuUXVldWUoKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6
CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydF93b3JrZXJzKHNlbGYpOgorICAgICAgICAi
IiJJbnN0YW50aWF0ZXMgYW5kIHN0YXJ0cyB0aGUgVGVzdFNoZWxsVGhyZWFkKHMpLiIiIgorICAg
ICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVsbFRocmVhZHMgYW5kIHN0YXJ0IHRoZW0uCisgICAg
ICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShzZWxmLl9udW1fd29ya2Vycyk6CisgICAg
ICAgICAgICAjIENyZWF0ZSBzZXBhcmF0ZSBUZXN0VHlwZXMgaW5zdGFuY2VzIGZvciBlYWNoIHRo
cmVhZC4KKyAgICAgICAgICAgIHdvcmtlciA9IF9Xb3JrZXJTdGF0ZSgpCisKKyAgICAgICAgICAg
IHdvcmtlci50aHJlYWQgPSBzZWxmLl9zdGFydF93b3JrZXIod29ya2VyX251bWJlcikKKyAgICAg
ICAgICAgIHdvcmtlci5uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAg
ICAgICBzZWxmLl93b3JrZXJzW3dvcmtlci5uYW1lXSA9IHdvcmtlcgorCisgICAgZGVmIF9zdGFy
dF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IKKworICAgIGRlZiBfYmFpbChzZWxmLCBtc2cpOgorICAgICAgICBfbG9nLmVycm9y
KG1zZykKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCBtc2cKKworICAgIGRlZiBzdG9wX3dvcmtlcnMo
c2VsZik6CisgICAgICAgICMgRklYTUU6IFNob3VsZCB0aGlzIGJlIGJsb2NraW5nPworICAgICAg
ICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYuX3dvcmtlcnMpKToKKyAgICAgICAgICAgIHNlbGYu
cG9zdF9zdG9wKCkKKworICAgIGRlZiBjYW5jZWxfd29ya2VycyhzZWxmKToKKyAgICAgICAgZm9y
IHdvcmtlciBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgd29ya2VyLnRo
cmVhZC5jYW5jZWwoKQorICAgICAgICBzZWxmLl9wb2xsX21hbmFnZXJfcXVldWUoc2VsZi5fbWFu
YWdlci5nZXROYW1lKCksIHRpbWVvdXQ9MC4wKQorCisgICAgZGVmIHBvc3RfdGVzdF9saXN0KHNl
bGYsIHRlc3RfbGlzdCk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c2VsZi5NQU5BR0VSLCBkZXN0
PXNlbGYuQU5ZX1dPUktFUiwKKyAgICAgICAgICAgICAgICAgIGhkcj1fTWVzc2FnZS5URVNUX0xJ
U1QsIGJvZHk9dGVzdF9saXN0KQorCisgICAgZGVmIHBvc3Rfc3RhcnRlZF90ZXN0KHNlbGYsIHNy
YywgdGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpOgorICAgICAgICBzZWxmLl9wdXQoc3JjPXNyYywg
ZGVzdD1zZWxmLk1BTkFHRVIsIGhkcj1fTWVzc2FnZS5TVEFSVEVEX1RFU1QsCisgICAgICAgICAg
ICAgICAgICBib2R5PSh0ZXN0X2luZm8sIGhhbmdfdGltZW91dCkpCisKKyAgICBkZWYgcG9zdF9m
aW5pc2hlZF9saXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGlt
ZSk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0PXNlbGYuTUFOQUdFUiwgaGRyPV9N
ZXNzYWdlLkZJTklTSEVEX0xJU1QsCisgICAgICAgICAgICAgICAgICBib2R5PShsaXN0X25hbWUs
IG51bV90ZXN0cywgZWxhcHNlZF90aW1lKSkKKworICAgIGRlZiBwb3N0X2ZpbmlzaGVkX3Rlc3Qo
c2VsZiwgc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9
c3JjLCBkZXN0PXNlbGYuTUFOQUdFUiwgaGRyPV9NZXNzYWdlLkZJTklTSEVEX1RFU1QsCisgICAg
ICAgICAgICAgICAgICBib2R5PShyZXN1bHQsIGVsYXBzZWRfdGltZSkpCisKKyAgICBkZWYgcG9z
dF9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNfaW5mbyk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9
c3JjLCBkZXN0PXNlbGYuTUFOQUdFUiwgaGRyPV9NZXNzYWdlLkVYQ0VQVElPTiwKKyAgICAgICAg
ICAgICAgICAgIGJvZHk9ZXhjX2luZm8pCisKKyAgICBkZWYgcG9zdF9zdG9wKHNlbGYpOgorICAg
ICAgICBzZWxmLl9wdXQoc3JjPXNlbGYuTUFOQUdFUiwgZGVzdD1zZWxmLkFOWV9XT1JLRVIsCisg
ICAgICAgICAgICAgICAgICBoZHI9X01lc3NhZ2UuU1RPUCwgYm9keT1Ob25lKQorCisgICAgZGVm
IHBvc3RfZG9uZShzZWxmLCB3b3JrZXIpOgorICAgICAgICBzZWxmLl9wdXQoc3JjPXdvcmtlciwg
ZGVzdD1zZWxmLk1BTkFHRVIsCisgICAgICAgICAgICAgICAgICBoZHI9X01lc3NhZ2UuRE9ORSwg
Ym9keT1Ob25lKQorCisgICAgZGVmIGxvb3Aoc2VsZiwgb2JqKToKKyAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcigic3ViY2xhc3MgbXVzdCBpbXBsZW1lbnQgUm91dGVyLmxvb3AoKSIp
CisKKyAgICBkZWYgX3B1dChzZWxmLCBzcmMsIGRlc3QsIGhkciwgYm9keSk6CisgICAgICAgIG1z
ZyA9IF9NZXNzYWdlKHNyYywgZGVzdCwgaGRyLCBib2R5KQorICAgICAgICBpZiBtc2cuZGVzdCA9
PSBzZWxmLk1BTkFHRVI6CisgICAgICAgICAgICAjIF9sb2cuZGVidWcoIiVzOiBwb3N0aW5nICcl
cycgbXNnIHRvIG1hbmFnZXIgcXVldWUiICUKKyAgICAgICAgICAgICMgICAgICAgICAgICAgKG1z
Zy5zcmMsIG1zZy5oZHIpKQorICAgICAgICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1ZS5wdXQobXNn
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBfbG9nLmRlYnVnKCIlczogcG9zdGluZyAn
JXMnIG1zZyB0byB3b3JrZXIgcXVldWUiICUKKyAgICAgICAgICAgICMgICAgICAgICAgICAgKG1z
Zy5zcmMsIG1zZy5oZHIpKQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlLnB1dChtc2cp
CisKKyAgICBkZWYgX2dldChzZWxmLCBuYW1lLCBxdWV1ZSwgYmxvY2ssIHRpbWVvdXQpOgorICAg
ICAgICBpZiBxdWV1ZSA9PSBzZWxmLl9tYW5hZ2VyX3F1ZXVlOgorICAgICAgICAgICAgcXVldWVf
bmFtZSA9ICJtYW5hZ2VyIHF1ZXVlIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcXVldWVf
bmFtZSA9ICJ3b3JrZXIgcXVldWUiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI19sb2cu
ZGVidWcoIiVzIG5hbWUgcmVhZGluZyBmcm9tICVzIHF1ZXVlIiAlIChuYW1lLCBxdWV1ZV9uYW1l
KSkKKyAgICAgICAgICAgIG1zZyA9IHF1ZXVlLmdldChibG9jaywgdGltZW91dCkKKyAgICAgICAg
ICAgICNfbG9nLmRlYnVnKCIlcyBnb3QgJyVzJyBtc2cgZnJvbSAlcyIgJSAobmFtZSwgbXNnLmhk
ciwgbXNnLnNyYykpCisgICAgICAgICAgICByZXR1cm4gbXNnCisgICAgICAgIGV4Y2VwdCBRdWV1
ZS5FbXB0eToKKyAgICAgICAgICAgICNfbG9nLmRlYnVnKCIlcyBmb3VuZCAlcyBlbXB0eSIgJSAo
bmFtZSwgcXVldWVfbmFtZSkpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9w
b2xsX21hbmFnZXJfcXVldWUoc2VsZiwgbmFtZSwgdGltZW91dCk6CisgICAgICAgIHdoaWxlIFRy
dWU6CisgICAgICAgICAgICAjIE5vdGUgdGhhdCBibG9jaz1UcnVlLCB0aW1lb3V0PTAgaXMgZXF1
aXZhbGVudCB0byBibG9jaz1GYWxzZS4KKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2dldChuYW1l
LCBzZWxmLl9tYW5hZ2VyX3F1ZXVlLCBUcnVlLCB0aW1lb3V0KQorICAgICAgICAgICAgaWYgbm90
IG1zZzoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBtc2cuaGRyID09
IF9NZXNzYWdlLlNUQVJURURfVEVTVDoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfc3Rh
cnRlZF90ZXN0KG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5GSU5J
U0hFRF9URVNUOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9maW5pc2hlZF90ZXN0KG1z
ZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5GSU5JU0hFRF9MSVNUOgor
ICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9maW5pc2hlZF9saXN0KG1zZykKKyAgICAgICAg
ICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5ET05FOgorICAgICAgICAgICAgICAgIHNlbGYu
X2hhbmRsZV9kb25lKG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5F
WENFUFRJT046CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V4Y2VwdGlvbihtc2cpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2JhaWwoJ3VuZXhwZWN0ZWQg
bWVzc2FnZSB0eXBlIG9uIG1hbmFnZXIgcXVldWU6ICVzJyAlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtc2cuaGRyKQorCisgICAgZGVmIF9wb2xsX3dvcmtlcl9xdWV1ZShzZWxmLCB3b3Jr
ZXIsIHBvbGxfbWFuYWdlcik6CisgICAgICAgIHdoaWxlIG5vdCB3b3JrZXIuaXNfZG9uZSgpOgor
ICAgICAgICAgICAgbXNnID0gc2VsZi5fZ2V0KHdvcmtlci5nZXROYW1lKCksIHNlbGYuX3dvcmtl
cl9xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgcG9sbF9tYW5hZ2VyLCBO
b25lKQorICAgICAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgICAgICBpZiBub3QgcG9s
bF9tYW5hZ2VyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9iYWlsKCclcyB1bmV4cGVjdGVk
bHkgcmFuIG91dCBvZiBxdWV1ZWQgbWVzc2FnZXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3b3JrZXIuZ2V0TmFtZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAg
ICAgICAgIGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuU1RPUDoKKyAgICAgICAgICAgICAgICBzZWxm
Ll9oYW5kbGVfc3RvcCh3b3JrZXIpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01lc3Nh
Z2UuVEVTVF9MSVNUOgorICAgICAgICAgICAgICAgIChsaXN0X25hbWUsIHRlc3RfbGlzdCkgPSBt
c2cuYm9keQorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV90ZXN0X2xpc3Qod29ya2VyLCBs
aXN0X25hbWUsIHRlc3RfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBvbGxfbWFuYWdlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2Vs
Zi5fYmFpbCgnJXM6IHVuZXhwZWN0ZWQgbWVzc2FnZSB0eXBlIG9uIHdvcmtlciBxdWV1ZTogJXMn
ICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXIuZ2V0TmFtZSgpLCBtc2cuaGRy
KSkKKworICAgIGRlZiBfaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBtc2cpOgorICAgICAgICAo
dGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpID0gbXNnLmJvZHkKKyAgICAgICAgd29ya2VyID0gc2Vs
Zi5fd29ya2Vyc1ttc2cuc3JjXQorICAgICAgICB3b3JrZXIuY3VycmVudF90ZXN0X25hbWUgPSBz
ZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbmZvLmZpbGVuYW1lKQorICAg
ICAgICB3b3JrZXIubmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyBoYW5nX3RpbWVvdXQKKwor
ICAgIGRlZiBfaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgbXNnKToKKyAgICAgICAgKHJlc3Vs
dCwgZWxhcHNlZF90aW1lKSA9IG1zZy5ib2R5CisgICAgICAgIHdvcmtlciA9IHNlbGYuX3dvcmtl
cnNbbXNnLnNyY10KKyAgICAgICAgd29ya2VyLm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAg
d29ya2VyLmN1cnJlbnRfdGVzdCA9IE5vbmUKKworICAgICAgICBpZiB3b3JrZXIud2VkZ2VkOgor
ICAgICAgICAgICAgIyBIbW0uIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4KKyAgICAgICAgICAgIF9s
b2cuZXJyb3IoIiVzIHVud2VkZ2VkIiwgd29ya2VyLmdldE5hbWUoKSkKKworICAgICAgICBzZWxm
Ll9tYW5hZ2VyLmhhbmRsZV9maW5pc2hlZF90ZXN0KG1zZy5zcmMsIHJlc3VsdCwgZWxhcHNlZF90
aW1lKQorCisgICAgZGVmIF9oYW5kbGVfZmluaXNoZWRfbGlzdChzZWxmLCBtc2cpOgorICAgICAg
ICAobGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkgPSBtc2cuYm9keQorICAgICAg
ICBzZWxmLl9tYW5hZ2VyLmhhbmRsZV9maW5pc2hlZF9saXN0KG1zZy5zcmMsIGxpc3RfbmFtZSwg
bnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX2hhbmRsZV9leGNlcHRpb24oc2VsZiwgbXNnKToKKyAg
ICAgICAgZXhjZXB0aW9uX2luZm8gPSBtc2cuYm9keQorICAgICAgICBzZWxmLl9tYW5hZ2VyLmhh
bmRsZV9leGNlcHRpb24obXNnLnNyYywgZXhjZXB0aW9uX2luZm8pCisKKyAgICBkZWYgX2hhbmRs
ZV9zdG9wKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHdvcmtlci5oYW5kbGVfc3RvcCgpCisKKyAg
ICBkZWYgX2hhbmRsZV9kb25lKHNlbGYsIG1zZyk6CisgICAgICAgIHdvcmtlciA9IHNlbGYuX3dv
cmtlcnNbbXNnLnNyY10KKyAgICAgICAgd29ya2VyLmRvbmUgPSBUcnVlCisgICAgICAgICMgX2xv
Zy5kZWJ1ZygiJXMgaXMgZG9uZSIgJSB3b3JrZXIubmFtZSkKKyAgICAgICAgc2VsZi5fbWFuYWdl
ci5oYW5kbGVfZG9uZShtc2cuc3JjKQorCisgICAgZGVmIF9oYW5kbGVfdGVzdF9saXN0KHNlbGYs
IHdvcmtlciwgbGlzdF9uYW1lLCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdlcik6CisgICAgICAgIHdv
cmtlci5oYW5kbGVfdGVzdF9saXN0KGxpc3RfbmFtZSwgdGVzdF9saXN0LCBwb2xsX21hbmFnZXIp
CisKKyAgICBkZWYgX2xvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBTaW5nbGVUaHJlYWRlZFJvdXRlcihS
b3V0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKToKKyAgICAgICAg
Um91dGVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpCisgICAgICAgICMgRklYTUU6IENv
dWxkIHVzZSBmYWtlIHF1ZXVlcyBoZXJlLgorICAgICAgICBzZWxmLl9tYW5hZ2VyX3F1ZXVlID0g
UXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLl93b3JrZXJfcXVldWUgPSBRdWV1ZS5RdWV1ZSgp
CisKKyAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAg
IyBGSVhNRTogVXNlIFdvcmtlclRodW5rIGluc3RlYWQgLi4uCisgICAgICAgIHRodW5rID0gX1dv
cmtlclRocmVhZChzZWxmLCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfbnVtYmVyKQorICAgICAgICByZXR1cm4gdGh1
bmsKKworICAgIGRlZiBsb29wKHNlbGYsIG1hbmFnZXIpOgorICAgICAgICBzZWxmLl9tYW5hZ2Vy
ID0gbWFuYWdlcgorICAgICAgICB3b3JrZXIgPSBzZWxmLl93b3JrZXJzWyd3b3JrZXItMCddCisg
ICAgICAgIHNlbGYuX3BvbGxfd29ya2VyX3F1ZXVlKHdvcmtlci50aHJlYWQsIHBvbGxfbWFuYWdl
cj1UcnVlKQorCisgICAgZGVmIF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAg
ICAgICBhc3NlcnQgRmFsc2UsICJTaW5nbGVUaHJlYWRlZFJvdXRlci5fbG9nX3dlZGdlZF93b3Jr
ZXIoKSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIgorCisKK2NsYXNzIE11bHRpVGhyZWFkZWRSb3V0
ZXIoU2luZ2xlVGhyZWFkZWRSb3V0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBv
cHRpb25zKToKKyAgICAgICAgU2luZ2xlVGhyZWFkZWRSb3V0ZXIuX19pbml0X18oc2VsZiwgcG9y
dCwgb3B0aW9ucykKKworICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIp
OgorICAgICAgICB0aHVuayA9IF9Xb3JrZXJUaHJlYWQoc2VsZiwgZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWQuV29ya2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX251bWJl
cikKKyAgICAgICAgdGh1bmsuc3RhcnQoKQorICAgICAgICByZXR1cm4gdGh1bmsKKworICAgIGRl
ZiBsb29wKHNlbGYsIG9iaik6CisgICAgICAgIGlmIG9iai5nZXROYW1lKCkgPT0gc2VsZi5NQU5B
R0VSOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xvb3BfbWFuYWdlcihvYmopCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbG9vcF93b3JrZXIob2JqKQorCisgICAg
ZGVmIF9sb29wX21hbmFnZXIoc2VsZiwgbWFuYWdlcik6CisgICAgICAgIHNlbGYuX21hbmFnZXIg
PSBtYW5hZ2VyCisgICAgICAgIHNlbGYuX3BvbGxfbWFuYWdlcl9xdWV1ZShtYW5hZ2VyLmdldE5h
bWUoKSwgdGltZW91dD0wLjAxKQorICAgICAgICB3aGlsZSBub3Qgc2VsZi5fY2hlY2tfb25fd29y
a2VycygpOgorICAgICAgICAgICAgc2VsZi5fcG9sbF9tYW5hZ2VyX3F1ZXVlKG1hbmFnZXIuZ2V0
TmFtZSgpLCB0aW1lb3V0PTAuMDEpCisKKyAgICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52
YWx1ZXMoKToKKyAgICAgICAgICAgIGFzc2VydCB3LndlZGdlZCBvciBub3Qgdy50aHJlYWQuaXNf
YWxpdmUoKQorCisgICAgZGVmIF9sb29wX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICB3
aGlsZSBub3Qgd29ya2VyLmlzX2RvbmUoKToKKyAgICAgICAgICAgIHNlbGYuX3BvbGxfd29ya2Vy
X3F1ZXVlKHdvcmtlciwgcG9sbF9tYW5hZ2VyPUZhbHNlKQorCisgICAgZGVmIF9jaGVja19vbl93
b3JrZXJzKHNlbGYpOgorICAgICAgICAiUmV0dXJucyB0cnVlIGlmZiBhbGwgdGhlIHdvcmtlcnMg
aGF2ZSBlaXRoZXIgY29tcGxldGVkIG9yIHdlZGdlZC4iCisgICAgICAgIGRvbmUgPSBUcnVlCisg
ICAgICAgIHQgPSB0aW1lLnRpbWUoKQorICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYuX3dvcmtl
cnMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBub3Qgd29ya2VyLmRvbmUgYW5kIG5vdCB3b3Jr
ZXIud2VkZ2VkOgorICAgICAgICAgICAgICAgIG5leHRfdGltZW91dCA9IHdvcmtlci5uZXh0X3Rp
bWVvdXQKKyAgICAgICAgICAgICAgICBpZiAobmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1l
b3V0KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9nX3dlZGdlZF93b3JrZXIod29ya2Vy
LndvcmtlcikKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyLndlZGdlZCA9IFRydWUKKyAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIF9sb2cuZGVidWcoIiVzIGlz
IG5vdCBkb25lIiAlIHdvcmtlci5uYW1lKQorICAgICAgICAgICAgICAgICAgICBkb25lID0gRmFs
c2UKKworICAgICAgICBpZiBkb25lIGFuZCBhbnkoW3cud2VkZ2VkIGZvciB3IGluIHNlbGYuX3dv
cmtlcnMudmFsdWVzKCldKToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAg
ICBfbG9nLmVycm9yKCdSZW1haW5pbmcgd29ya2VycyBhcmUgd2VkZ2VkLCBiYWlsaW5nIG91dC4n
KQorICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgZWxpZiBkb25lOgorICAgICAg
ICAgICAgX2xvZy5pbmZvKCdObyB3ZWRnZWQgdGhyZWFkcycpCisKKyAgICAgICAgcmV0dXJuIGRv
bmUKKworICAgIGRlZiBfbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgd29ya2VyKToKKyAgICAgICAg
IiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUuIiIiCisgICAg
ICAgIGlkID0gd29ya2VyLnRocmVhZC5pZCgpCisgICAgICAgIHN0YWNrID0gc2VsZi5fZmluZF90
aHJlYWRfc3RhY2soaWQpCisgICAgICAgIGFzc2VydChzdGFjayBpcyBub3QgTm9uZSkKKyAgICAg
ICAgX2xvZy5lcnJvcigiIikKKyAgICAgICAgX2xvZy5lcnJvcigiJXMgKHRpZCAlZCkgaXMgd2Vk
Z2VkIG9uIHRlc3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAod29ya2VyLnRocmVhZC5nZXRO
YW1lKCksIGlkLCB3b3JrZXIuY3VycmVudF90ZXN0X25hbWUpKQorICAgICAgICBzZWxmLl9sb2df
c3RhY2soc3RhY2spCisgICAgICAgIF9sb2cuZXJyb3IoIiIpCisKKyAgICBkZWYgX2ZpbmRfdGhy
ZWFkX3N0YWNrKHNlbGYsIGlkKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHN0YWNrIG9iamVjdCB0
aGF0IGNhbiBiZSB1c2VkIHRvIGR1bXAgYSBzdGFjayB0cmFjZSBmb3IKKyAgICAgICAgdGhlIGdp
dmVuIHRocmVhZCBpZCAob3IgTm9uZSBpZiB0aGUgaWQgaXMgbm90IGZvdW5kKS4iIiIKKyAgICAg
ICAgZm9yIHRocmVhZF9pZCwgc3RhY2sgaW4gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKCk6
CisgICAgICAgICAgICBpZiB0aHJlYWRfaWQgPT0gaWQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0YWNrCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2xvZ19zdGFjayhzZWxmLCBz
dGFjayk6CisgICAgICAgICIiIkxvZyBhIHN0YWNrIHRyYWNlIHRvIGxvZy5lcnJvcigpLiIiIgor
ICAgICAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiB0cmFjZWJhY2suZXh0
cmFjdF9zdGFjayhzdGFjayk6CisgICAgICAgICAgICBfbG9nLmVycm9yKCdGaWxlOiAiJXMiLCBs
aW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCisgICAgICAgICAgICBp
ZiBsaW5lOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJXMnICUgbGluZS5zdHJpcCgp
KQorCisKK2NsYXNzIE11bHRpUHJvY2Vzc1JvdXRlcihNdWx0aVRocmVhZGVkUm91dGVyKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAgIFJvdXRlci5fX2lu
aXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKQorICAgICAgICBzZWxmLl9tYW5hZ2VyX3F1ZXVlID0g
bXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlID0gbXVs
dGlwcm9jZXNzaW5nLlF1ZXVlKCkKKworICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtl
cl9udW1iZXIpOgorICAgICAgICB0aHVuayA9IF9Xb3JrZXJQcm9jZXNzKHNlbGYsIGR1bXBfcmVu
ZGVyX3RyZWVfdGhyZWFkLldvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
b3JrZXJfbnVtYmVyKQorICAgICAgICB0aHVuay5zdGFydCgpCisgICAgICAgIHJldHVybiB0aHVu
aworCisgICAgZGVmIHBvc3RfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX2luZm8pOgor
ICAgICAgICAjIEZJWE1FOiBXZSBjYW4ndCBwaWNrbGUgdHJhY2ViYWNrIG9iamVjdHMsIHNvIGxv
ZyB0aGUgdHJhY2ViYWNrIGhlcmUuCisgICAgICAgIG1wX2V4Y19pbmZvID0gKGV4Y2VwdGlvbl9p
bmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgTm9uZSkKKyAgICAgICAgTXVsdGlUaHJlYWRlZFJv
dXRlci5wb3N0X2V4Y2VwdGlvbihzZWxmLCBzcmMsIG1wX2V4Y19pbmZvKQorCisgICAgZGVmIF9s
b2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICBpZCA9IHdvcmtlci50aHJl
YWQuaWQoKQorICAgICAgICBfbG9nLmVycm9yKCIiKQorICAgICAgICBfbG9nLmVycm9yKCIlcyAo
cGlkICVkKSBpcyB3ZWRnZWQgb24gdGVzdCAlcyIgJQorICAgICAgICAgICAgICAgICAgICh3b3Jr
ZXIudGhyZWFkLmdldE5hbWUoKSwgaWQsIHdvcmtlci5jdXJyZW50X3Rlc3RfbmFtZSkpCisgICAg
ICAgIF9sb2cuZXJyb3IoIiIpCisKKworY2xhc3MgX1dvcmtlclRodW5rKG9iamVjdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRlciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyKToK
KyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25lCisgICAgICAgIHNlbGYuX3JvdXRl
ciA9IHJvdXRlcgorICAgICAgICBzZWxmLl9vcHRpb25zID0gcm91dGVyLl9vcHRpb25zCisgICAg
ICAgIHNlbGYuX3BvcnQgPSByb3V0ZXIuX3BvcnQKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0g
RmFsc2UKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisgICAgICAgIHNlbGYuX2hhdmVfaHR0
cF9sb2NrID0gRmFsc2UKKyAgICAgICAgc2VsZi5faWQgPSAwCisgICAgICAgIHNlbGYuX3dvcmtl
cl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX3dvcmtlciA9IHdvcmtlcl9j
bGFzcyhzZWxmLl9wb3J0LCBzZWxmLCBzZWxmLl9vcHRpb25zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd29ya2VyX251bWJlcikKKworICAgIGRlZiBpZChzZWxmKToKKyAg
ICAgICAgIyB1c2VkIGR1cmluZyBsb2dfd2VkZ2VkX3dvcmtlcgorICAgICAgICByZXR1cm4gc2Vs
Zi5faWQKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9
IFRydWUKKworICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9u
ZSBvciBzZWxmLl9jYW5jZWxsZWQKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmKToKKyAgICAg
ICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9yZWxlYXNlX2xv
Y2soKQorICAgICAgICBzZWxmLl93b3JrZXIuaGFuZGxlX3N0b3AoKQorICAgICAgICBzZWxmLl9k
b25lID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV90ZXN0X2xpc3Qoc2VsZiwgbGlzdF9uYW1lLCB0
ZXN0X2xpc3QsIHBvbGxfbWFuYWdlcik6CisgICAgICAgIGlmIGxpc3RfbmFtZSA9PSAidGVzdHNf
dG9faHR0cF9sb2NrIjoKKyAgICAgICAgICAgIHNlbGYuX2FjcXVpcmVfbG9jaygpCisgICAgICAg
IGVsaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9yZWxlYXNlX2xv
Y2soKQorCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBudW1fdGVz
dHMgPSAwCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIHNlbGYu
X3dvcmtlci5ydW5fdGVzdCh0ZXN0KQorICAgICAgICAgICAgbnVtX3Rlc3RzICs9IDEKKworICAg
ICAgICAgICAgIyBGSVhNRTogTmVlZCB0byBnZXQgcmlkIG9mIHRoaXMuCisgICAgICAgICAgICBp
ZiBwb2xsX21hbmFnZXI6CisgICAgICAgICAgICAgICAgc2VsZi5fcm91dGVyLl9wb2xsX21hbmFn
ZXJfcXVldWUoc2VsZi5nZXROYW1lKCksIHRpbWVvdXQ9MC4wKQorCisgICAgICAgICAgICBpZiBz
ZWxmLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxhcHNlZF90
aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCisKKyAgICAgICAgaWYgc2VsZi5faGF2ZV9o
dHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9yZWxlYXNlX2xvY2soKQorCisgICAgICAgIHNl
bGYuX3JvdXRlci5wb3N0X2ZpbmlzaGVkX2xpc3Qoc2VsZi5nZXROYW1lKCksIGxpc3RfbmFtZSwg
bnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFw
c2VkX3RpbWUpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRl
ZiBzdGFydGVkX3Rlc3Qoc2VsZiwgdGVzdF9pbmZvLCBodW5nX3RocmVhZF90aW1lb3V0KToKKyAg
ICAgICAgc2VsZi5fcm91dGVyLnBvc3Rfc3RhcnRlZF90ZXN0KHNlbGYuZ2V0TmFtZSgpLCB0ZXN0
X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodW5nX3RocmVh
ZF90aW1lb3V0KQorCisgICAgZGVmIGZpbmlzaGVkX3Rlc3Qoc2VsZiwgcmVzdWx0LCBlbGFwc2Vk
X3RpbWUpOgorICAgICAgICBzZWxmLl9yb3V0ZXIucG9zdF9maW5pc2hlZF90ZXN0KHNlbGYuZ2V0
TmFtZSgpLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBfYWNxdWlyZV9sb2NrKHNl
bGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4uLicpCisgICAg
ICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQorICAgICAgICBfbG9nLmRlYnVnKCdT
dGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBf
c2VydmVyKCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAu
Li4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAg
ICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRydWUKKworICAgIGRlZiBfcmVsZWFzZV9sb2NrKHNl
bGYpOgorICAgICAgICAiIiJTdG9wIHRoZSBzZXJ2ZXJzIGFuZCByZWxlYXNlIGh0dHAgbG9jay4i
IiIKKyAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBfbG9nLmRl
YnVnKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5z
dG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nIFdlYlNv
Y2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRf
c2VydmVyKCkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQorICAg
ICAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxzZQorCisgICAgZGVmIHJ1bihzZWxm
KToKKyAgICAgICAgc2VsZi5faWQgPSBzZWxmLl9nZXRfaWQoKQorICAgICAgICBuYW1lID0gc2Vs
Zi5uYW1lCisgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiIgorICAgICAgICBfbG9nLmRlYnVnKCcl
cyBzdGFydGluZycgJSBuYW1lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Jv
dXRlci5sb29wKHNlbGYpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAg
ICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBpbnRlcnJ1cHRlZCIKKyAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGV4Y2VwdGlvbiByYWlzZWQiCisgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBkb25lJXMiICUgKG5hbWUsIGV4
Y2VwdGlvbl9tc2cpKQorICAgICAgICAgICAgaWYgZXhjZXB0aW9uX21zZzoKKyAgICAgICAgICAg
ICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAg
ICAgc2VsZi5fcm91dGVyLnBvc3RfZXhjZXB0aW9uKHNlbGYuZ2V0TmFtZSgpLCBzZWxmLl9leGNl
cHRpb25faW5mbykKKyAgICAgICAgICAgIHNlbGYuX3JvdXRlci5wb3N0X2RvbmUobmFtZSkKKwor
ICAgICAgICBhc3NlcnQgZXhjZXB0aW9uX21zZyBvciBzZWxmLl9kb25lIG9yIHNlbGYuX2NhbmNl
bGxlZCwgImV4aXRpbmcgdW5leHBlY3RlZGx5IgorCisKK2NsYXNzIF9Xb3JrZXJUaHJlYWQoX1dv
cmtlclRodW5rLCB0aHJlYWRpbmcuVGhyZWFkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm91
dGVyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICB0aHJlYWRpbmcuVGhy
ZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJUaHVuay5fX2luaXRfXyhzZWxmLCBy
b3V0ZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcikKKyAgICAgICAgc2VsZi5uYW1lID0g
J3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl9pZAorCisgICAgZGVmIF9nZXRfaWQoc2VsZik6CisgICAgICAgIHJldHVy
biB0aHJlYWQuZ2V0X2lkZW50KCkKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNl
bGYuX2NhbmNlbGxlZCA9IFRydWUKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgdGhy
ZWFkaW5nLlRocmVhZC5zdGFydChzZWxmKQorCisKK2NsYXNzIF9Xb3JrZXJQcm9jZXNzKF9Xb3Jr
ZXJUaHVuaywgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCByb3V0ZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcik6CisgICAgICAgIG11bHRpcHJv
Y2Vzc2luZy5Qcm9jZXNzLl9faW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJUaHVuay5fX2lu
aXRfXyhzZWxmLCByb3V0ZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcikKKyAgICAgICAg
c2VsZi5uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisKKyAgICBkZWYgaWQoc2Vs
Zik6CisgICAgICAgICMgRklYTUU6IGZpZ3VyZSBvdXQgaWYgdGhpcyBuZWVkcyB0byBiZSBhd2Fy
ZSBvZiBwYXJlbnQvY2hpbGQKKyAgICAgICAgcmV0dXJuIHNlbGYucGlkCisKKyAgICBkZWYgX2dl
dF9pZChzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLmdldHBpZCgpCisKKyAgICBkZWYgY2FuY2Vs
KHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBUcnVlCisgICAgICAgIHNlbGYudGVy
bWluYXRlKCkKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5n
LlByb2Nlc3Muc3RhcnQoc2VsZikKKworICAgIGRlZiBnZXROYW1lKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5uYW1lCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9yb3V0ZXJfdW5pdHRlc3QucHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9yb3V0ZXJf
dW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGFhOWNjMzc0Y2NhYWQwOGZkZGRiMTU2NWNiYWY0MDQ1
M2VkMDg5ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlcl91bml0dGVzdC5weQpAQCAtMCwwICsx
LDExOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2Nr
IGltcG9ydCBNb2NrCitpbXBvcnQgUXVldWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHJvdXRl
ciBpbXBvcnQgKgorCisKK2NsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0
ZXN0X2ZpbmRfdGhyZWFkX3N0YWNrX2ZvdW5kKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICAgICAgcmV0dXJuCisgICAgICAgIGlkLCBzdGFjayA9IHN5cy5fY3VycmVudF9m
cmFtZXMoKS5pdGVtcygpWzBdCisgICAgICAgIGZvdW5kX3N0YWNrID0gZmluZF90aHJlYWRfc3Rh
Y2soaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCisK
KyAgICBkZWYgdGVzdF9maW5kX3RocmVhZF9zdGFja19ub3RfZm91bmQoc2VsZik6CisgICAgICAg
ICMgRklYTUU6IGltcGxlbWVudAorICAgICAgICByZXR1cm4KKyAgICAgICAgZm91bmRfc3RhY2sg
PSBmaW5kX3RocmVhZF9zdGFjaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kX3N0
YWNrLCBOb25lKQorCisKK2NsYXNzIFdhaXRGb3JUaHJlYWRzVG9GaW5pc2hUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKKyAgICBkZWYgcnVuX29uZV90aHJlYWQoc2VsZiwgbXNnKToKKyAgICAgICAg
c3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHN0b3BwaW5nX3F1ZXVlID0g
UXVldWUuUXVldWUoKQorICAgICAgICBjaGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5n
X3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKKyAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKKyAg
ICAgICAgc3RhcnRlZF9tc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQorICAgICAgICBzdG9wcGlu
Z19xdWV1ZS5wdXQobXNnKQorICAgICAgICB0aHJlYWRzID0gW2NoaWxkX3RocmVhZF0KKyAgICAg
ICAgcmV0dXJuIHJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2godGhyZWFkcywgTm9u
ZSkKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1l
bnQKKyAgICAgICAgcmV0dXJuCisgICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3Ro
cmVhZCgnJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKKworICAgIGRl
ZiB0ZXN0X2ludGVycnVwdChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50LgorICAg
ICAgICByZXR1cm4KKyAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcn
KQorICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJ0tleWJvYXJkSW50
ZXJydXB0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludGVycnVwdGVkKQorCisgICAgZGVm
IHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50LgorICAgICAg
ICByZXR1cm4KKyAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcnKQor
ICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNh
cHR1cmVfb3V0cHV0KCkKKyAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFk
KCdUaW1lb3V0JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKKyAgICAg
ICAgb2MucmVzdG9yZV9vdXRwdXQoKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgor
ICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQuCisgICAgICAgIHJldHVybgorICAgICAgICBpbnRl
cnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKFZhbHVlRXJyb3IsIHNlbGYucnVuX29uZV90aHJlYWQsICdFeGNlcHRpb24nKQorCisKK2Ns
YXNzIFN0YW5kYWxvbmVGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYg
dGVzdF9sb2dfd2VkZ2VkX3RocmVhZChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50
CisgICAgICAgIHJldHVybgorICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVy
ZSgpCisgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKKyAgICAgICAgbG9nZ2VyID0gcnVuX3dl
YmtpdF90ZXN0cy5fbG9nCisgICAgICAgIGFzdHJlYW0gPSBhcnJheV9zdHJlYW0uQXJyYXlTdHJl
YW0oKQorICAgICAgICBoYW5kbGVyID0gVGVzdEhhbmRsZXIoYXN0cmVhbSkKKyAgICAgICAgbG9n
Z2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKworICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVl
LlF1ZXVlKCkKKyAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAg
IGNoaWxkX3RocmVhZCA9IFRlc3RUaHJlYWQoc3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVl
KQorICAgICAgICBjaGlsZF90aHJlYWQuc3RhcnQoKQorICAgICAgICBtc2cgPSBzdGFydGluZ19x
dWV1ZS5nZXQoKQorCisgICAgICAgIHJ1bl93ZWJraXRfdGVzdHMuX2xvZ193ZWRnZWRfdGhyZWFk
KGNoaWxkX3RocmVhZCkKKyAgICAgICAgc3RvcHBpbmdfcXVldWUucHV0KCcnKQorICAgICAgICBj
aGlsZF90aHJlYWQuam9pbih0aW1lb3V0PTEuMCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGFzdHJlYW0uZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjaGlsZF90aHJlYWQu
aXNBbGl2ZSgpKQorICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCisKKworaWYgX19uYW1lX18g
PT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9t
YWMucHkKaW5kZXggZDFjMzgzYzEzZWMyZjEzYWY1ZmIxZjE1NDA1NzljNGM4ODlmZGQ2My4uN2Q3
MDRjM2E4OWFmNTRhZDBkYWYwNzQ4YjRkODg5YTYyMmFjZTRjZCAxMDA2NDQKLS0tIGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJv
bWl1bV9tYWMucHkKQEAgLTYyLDE1ICs2Miw2IEBAIGNsYXNzIENocm9taXVtTWFjUG9ydChjaHJv
bWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICAgICAgICAgICAgICAgICAnTWFjQnVpbGRJbnN0
cnVjdGlvbnMnKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgZGVmYXVsdF9jaGls
ZF9wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IHdlIG5lZWQgdG8gcnVuIHNpbmds
ZS10aHJlYWRlZCBmb3Igbm93LiBTZWUKLSAgICAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzg1NTMuIFVuZm9ydHVuYXRlbHkgdGhpcwotICAgICAgICAjIHJv
dXRpbmUgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSB0aGUgbG9nZ2VyIGlzIGNvbmZpZ3VyZWQsIHNv
IGlmIHdlCi0gICAgICAgICMgdHJ5IHRvIF9sb2cud2FybmluZygpLCBpdCBnZXRzIHRocm93biBh
d2F5LgotICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkRlZmF1
bHRpbmcgdG8gb25lIGNoaWxkIC0gc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zODU1M1xuIikKLSAgICAgICAgcmV0dXJuIDEKLQogICAgIGRlZiBkcml2ZXJfbmFt
ZShzZWxmKToKICAgICAgICAgIiIibmFtZSBmb3IgdGhpcyBwb3J0J3MgZXF1aXZhbGVudCBvZiBE
dW1wUmVuZGVyVHJlZS4iIiIKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd1c2VfZHJ0Jyk6
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L21hYy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvbWFjLnB5CmluZGV4IDY5NmUzMzk4ZWE0YjI4YWM3NjIyNTkwN2RjMzYyZmZjM2ZiODZmOWUu
LjcyZjkxZDgzODIxNWFmNGJjNDRmMWRjMWYwNjU1ZGFkYzdkMzM2ZmYgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CkBA
IC00NywxNSArNDcsNiBAQCBjbGFzcyBNYWNQb3J0KFdlYktpdFBvcnQpOgogICAgICAgICBrd2Fy
Z3Muc2V0ZGVmYXVsdCgncG9ydF9uYW1lJywgJ21hYycgKyBzZWxmLnZlcnNpb24oKSkKICAgICAg
ICAgV2ViS2l0UG9ydC5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKIAotICAgIGRlZiBkZWZhdWx0
X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTogbmV3LXJ1bi13ZWJraXQt
dGVzdHMgaXMgdW5zdGFibGUgb24gTWFjIHJ1bm5pbmcgbW9yZSB0aGFuCi0gICAgICAgICMgZm91
ciB0aHJlYWRzIGluIHBhcmFsbGVsLgotICAgICAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY2MjIKLSAgICAgICAgY2hpbGRfcHJvY2Vzc2VzID0gV2Vi
S2l0UG9ydC5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKQotICAgICAgICBpZiBjaGlsZF9w
cm9jZXNzZXMgPiA0OgotICAgICAgICAgICAgcmV0dXJuIDQKLSAgICAgICAgcmV0dXJuIGNoaWxk
X3Byb2Nlc3NlcwotCiAgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgogICAgICAg
ICBwb3J0X25hbWVzID0gW10KICAgICAgICAgaWYgc2VsZi5fbmFtZSA9PSAnbWFjLXRpZ2VyJzoK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDlmYjY4NGZhMTA3MTdhYjM3ZjcxM2UyMWU0
MmUzZjMwOTcwYjJlZWYuLmE2YWFjYzQ2ZjJhZWY3ZWM3ZGE3ZGZmZTRhNDllYmY5YzgxZmZhZDMg
MTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNjcsNiArNjcsNyBAQCBpbXBvcnQgdHJh
Y2ViYWNrCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBkdW1wX3JlbmRlcl90cmVlX3RocmVh
ZAogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0
b3IKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCitmcm9tIGxheW91dF9wYWNr
YWdlIGltcG9ydCByb3V0ZXIKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfZXhwZWN0
YXRpb25zCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBmcm9tIGxh
eW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKQEAgLTg5LDMyICs5MCwxOSBAQCBMQVlP
VVRfVEVTVFNfRElSRUNUT1JZID0gIkxheW91dFRlc3RzIiArIG9zLnNlcAogCiBUZXN0RXhwZWN0
YXRpb25zRmlsZSA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnNGaWxlCiAKLQog
Y2xhc3MgVGVzdEluZm86CiAgICAgIiIiR3JvdXBzIGluZm9ybWF0aW9uIGFib3V0IGEgdGVzdCBm
b3IgZWFzeSBwYXNzaW5nIG9mIGRhdGEuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9y
dCwgZmlsZW5hbWUsIHRpbWVvdXQpOgotICAgICAgICAiIiJHZW5lcmF0ZXMgdGhlIFVSSSBhbmQg
c3RvcmVzIHRoZSBmaWxlbmFtZSBhbmQgdGltZW91dCBmb3IgdGhpcyB0ZXN0LgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgdGltZW91dCk6CisgICAgICAgICIiIkJ1bmRsZXMgdGhl
IGZpbGVuYW1lIGFuZCB0aW1lb3V0IGZvciB0aGlzIHRlc3QuCiAgICAgICAgIEFyZ3M6CiAgICAg
ICAgICAgZmlsZW5hbWU6IEZ1bGwgcGF0aCB0byB0aGUgdGVzdC4KICAgICAgICAgICB0aW1lb3V0
OiBUaW1lb3V0IGZvciBydW5uaW5nIHRoZSB0ZXN0IGluIFRlc3RTaGVsbC4KICAgICAgICAgICAi
IiIKICAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCi0gICAgICAgIHNlbGYuX3BvcnQg
PSBwb3J0Ci0gICAgICAgIHNlbGYudXJpID0gcG9ydC5maWxlbmFtZV90b191cmkoZmlsZW5hbWUp
CiAgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKLSAgICAgICAgc2VsZi5faW1hZ2VfY2hl
Y2tzdW0gPSAtMQotCi0gICAgZGVmIGltYWdlX2hhc2goc2VsZik6Ci0gICAgICAgICMgUmVhZCB0
aGUgaW1hZ2VfaGFzaCBsYXppbHkgdG8gcmVkdWNlIHN0YXJ0dXAgdGltZS4KLSAgICAgICAgIyBU
aGlzIGNsYXNzIGlzIGFjY2Vzc2VkIGFjcm9zcyB0aHJlYWRzLCBidXQgb25seSBvbmUgdGhyZWFk
IHNob3VsZAotICAgICAgICAjIGV2ZXIgYmUgZGVhbGluZyB3aXRoIGFueSBnaXZlbiBUZXN0SW5m
byBzbyBubyBsb2NraW5nIGlzIG5lZWRlZC4KLSAgICAgICAgIwotICAgICAgICAjIE5vdGUgdGhh
dCB3ZSB1c2UgLTEgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlbid0IHJlYWQgdGhlIHZhbHVlLAot
ICAgICAgICAjIGJlY2F1c2UgZXhwZWN0ZWRfY2hlY2tzdW0oKSByZXR1cm5zIGEgc3RyaW5nIG9y
IE5vbmUuCi0gICAgICAgIGlmIHNlbGYuX2ltYWdlX2NoZWNrc3VtID09IC0xOgotICAgICAgICAg
ICAgc2VsZi5faW1hZ2VfY2hlY2tzdW0gPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHNl
bGYuZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9pbWFnZV9jaGVja3N1bQorICAgICAg
ICBzZWxmLnVyaSA9IE5vbmUKKyAgICAgICAgc2VsZi5pbWFnZV9jaGVja3N1bSA9IE5vbmUKIAog
CiBjbGFzcyBSZXN1bHRTdW1tYXJ5KG9iamVjdCk6CkBAIC0xNjEsNiArMTQ5LDcgQEAgY2xhc3Mg
UmVzdWx0U3VtbWFyeShvYmplY3QpOgogICAgICAgICAgICAgc2VsZi51bmV4cGVjdGVkICs9IDEK
IAogCisKIGRlZiBzdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1bHRzKHBvcnRfb2JqLCBleHBlY3Rh
dGlvbnMsIHJlc3VsdF9zdW1tYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0cnlfc3VtbWFyeSk6CiAgICAgIiIiU3VtbWFyaXplIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMg
YXMgYSBkaWN0LgpAQCAtMjUwLDMzICsyMzksMzIgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAj
IGluIER1bXBSZW5kZXJUcmVlLgogICAgIERFRkFVTFRfVEVTVF9USU1FT1VUX01TID0gNiAqIDEw
MDAKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlciwgcm91dGVyKToKICAg
ICAgICAgIiIiSW5pdGlhbGl6ZSB0ZXN0IHJ1bm5lciBkYXRhIHN0cnVjdHVyZXMuCiAKICAgICAg
ICAgQXJnczoKICAgICAgICAgICBwb3J0OiBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQtc3Bl
Y2lmaWMKICAgICAgICAgICBvcHRpb25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9w
dGlvbnMKICAgICAgICAgICBwcmludGVyOiBhIFByaW50ZXIgb2JqZWN0IHRvIHJlY29yZCB1cGRh
dGVzIHRvLgorICAgICAgICAgIHJvdXRlcjogb2JqZWN0IHVzZWQgdG8gY29tbXVuaWNhdGUgdy8g
d29ya2Vycy4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAg
IHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmludGVy
CisgICAgICAgIHNlbGYuX3JvdXRlciA9IHJvdXRlcgogCiAgICAgICAgICMgZGlzYWJsZSB3c3Mg
c2VydmVyLiBuZWVkIHRvIGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KICAgICAgICAg
IyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJT
b2NrZXQoCiAgICAgICAgICMgICAgICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHVzZV90
bHM9VHJ1ZSwgcG9ydD05MzIzKQogCi0gICAgICAgICMgYSBsaXN0IG9mIFRlc3RUeXBlIG9iamVj
dHMKLSAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQot
ICAgICAgICBpZiBvcHRpb25zLnBpeGVsX3Rlc3RzOgotICAgICAgICAgICAgc2VsZi5fdGVzdF90
eXBlcy5hcHBlbmQoaW1hZ2VfZGlmZi5JbWFnZURpZmYpCi0KICAgICAgICAgIyBhIHNldCBvZiB0
ZXN0IGZpbGVzLCBhbmQgdGhlIHNhbWUgdGVzdHMgYXMgYSBsaXN0CiAgICAgICAgIHNlbGYuX3Rl
c3RfZmlsZXMgPSBzZXQoKQogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBOb25lCi0g
ICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKICAgICAgICAgc2VsZi5f
cmV0cnlpbmcgPSBGYWxzZQogCisgICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVy
biByb3V0ZXIuUm91dGVyLk1BTkFHRVIKKwogICAgIGRlZiBjb2xsZWN0X3Rlc3RzKHNlbGYsIGFy
Z3MsIGxhc3RfdW5leHBlY3RlZF9yZXN1bHRzKToKICAgICAgICAgIiIiRmluZCBhbGwgdGhlIGZp
bGVzIHRvIHRlc3QuCiAKQEAgLTUwMSwxMCArNDg5LDkgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAg
ICAgICAgIiIiUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgVGVzdEluZm8gb2JqZWN0IGZvciB0aGUg
ZmlsZS4gTW9zdGx5IHRoaXMKICAgICAgICAgaXMgdXNlZCBmb3IgbG9va2luZyB1cCB0aGUgdGlt
ZW91dCB2YWx1ZSAoaW4gbXMpIHRvIHVzZSBmb3IgdGhlIGdpdmVuCiAgICAgICAgIHRlc3QuIiIi
Ci0gICAgICAgIGlmIHNlbGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxlLCB0
ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKToKLSAgICAgICAgICAgIHJldHVybiBUZXN0SW5mbyhzZWxm
Ll9wb3J0LCB0ZXN0X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucy5zbG93X3RpbWVfb3V0X21zKQotICAgICAgICByZXR1cm4gVGVzdEluZm8oc2VsZi5fcG9y
dCwgdGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zKQorICAgICAgICBpZiBzZWxm
Ll90ZXN0X2lzX3Nsb3codGVzdF9maWxlKToKKyAgICAgICAgICAgIHJldHVybiBUZXN0SW5mbyh0
ZXN0X2ZpbGUsIHNlbGYuX29wdGlvbnMuc2xvd190aW1lX291dF9tcykKKyAgICAgICAgcmV0dXJu
IFRlc3RJbmZvKHRlc3RfZmlsZSwgc2VsZi5fb3B0aW9ucy50aW1lX291dF9tcykKIAogICAgIGRl
ZiBfdGVzdF9yZXF1aXJlc19sb2NrKHNlbGYsIHRlc3RfZmlsZSk6CiAgICAgICAgICIiIlJldHVy
biBUcnVlIGlmIHRoZSB0ZXN0IG5lZWRzIHRvIGJlIGxvY2tlZCB3aGVuCkBAIC01MTIsMjMgKzQ5
OSwyMiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzcGxpdF9wYXRoID0gdGVzdF9maWxl
LnNwbGl0KG9zLnNlcCkKICAgICAgICAgcmV0dXJuICdodHRwJyBpbiBzcGxpdF9wYXRoIG9yICd3
ZWJzb2NrZXQnIGluIHNwbGl0X3BhdGgKIAotICAgIGRlZiBfZ2V0X3Rlc3RfZmlsZV9xdWV1ZShz
ZWxmLCB0ZXN0X2ZpbGVzKToKLSAgICAgICAgIiIiQ3JlYXRlIHRoZSB0aHJlYWQgc2FmZSBxdWV1
ZSBvZiBsaXN0cyBvZiAodGVzdCBmaWxlbmFtZXMsIHRlc3QgVVJJcykKLSAgICAgICAgdHVwbGVz
LiBFYWNoIFRlc3RTaGVsbFRocmVhZCBwdWxscyBhIGxpc3QgZnJvbSB0aGlzIHF1ZXVlIGFuZCBy
dW5zCi0gICAgICAgIHRob3NlIHRlc3RzIGluIG9yZGVyIGJlZm9yZSBncmFiYmluZyB0aGUgbmV4
dCBhdmFpbGFibGUgbGlzdC4KKyAgICBkZWYgX3Rlc3RfaXNfc2xvdyhzZWxmLCB0ZXN0X2ZpbGUp
OgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0YXRpb25zLmhhc19tb2RpZmllcih0ZXN0X2Zp
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rf
ZXhwZWN0YXRpb25zLlNMT1cpCiAKLSAgICAgICAgU2hhcmQgdGhlIGxpc3RzIGJ5IGRpcmVjdG9y
eS4gVGhpcyBoZWxwcyBlbnN1cmUgdGhhdCB0ZXN0cyB0aGF0IGRlcGVuZAotICAgICAgICBvbiBl
YWNoIG90aGVyIChha2EgYmFkIHRlc3RzISkgY29udGludWUgdG8gcnVuIHRvZ2V0aGVyIGFzIG1v
c3QKLSAgICAgICAgY3Jvc3MtdGVzdHMgZGVwZW5kZW5jaWVzIHRlbmQgdG8gb2NjdXIgd2l0aGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAgICBkZWYgX3NoYXJkX3Rlc3RzKHNlbGYsIHRlc3RfZmls
ZXMsIHNpbmdsZV90aHJlYWRlZCk6CisgICAgICAgICIiIkdyb3VwcyB0ZXN0cyBpbnRvIGJhdGNo
ZXMuCisgICAgICAgIFRoaXMgaGVscHMgZW5zdXJlIHRoYXQgdGVzdHMgdGhhdCBkZXBlbmQgb24g
ZWFjaCBvdGhlciAoYWthIGJhZCB0ZXN0cyEpCisgICAgICAgIGNvbnRpbnVlIHRvIHJ1biB0b2dl
dGhlciBhcyBtb3N0IGNyb3NzLXRlc3RzIGRlcGVuZGVuY2llcyB0ZW5kIHRvCisgICAgICAgIG9j
Y3VyIHdpdGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCiAKICAgICAgICAgUmV0dXJuOgotICAgICAg
ICAgIFRoZSBRdWV1ZSBvZiBsaXN0cyBvZiBUZXN0SW5mbyBvYmplY3RzLgorICAgICAgICAgICAg
QSBsaXN0IG9mIGxpc3RzIG9mIFRlc3RJbmZvIG9iamVjdHMKICAgICAgICAgIiIiCi0KICAgICAg
ICAgdGVzdF9saXN0cyA9IFtdCiAgICAgICAgIHRlc3RzX3RvX2h0dHBfbG9jayA9IFtdCi0gICAg
ICAgIGlmIChzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCBvcgotICAg
ICAgICAgICAgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCkpOgorICAgICAgICBpZiBzaW5nbGVf
dGhyZWFkZWQ6CiAgICAgICAgICAgICBmb3IgdGVzdF9maWxlIGluIHRlc3RfZmlsZXM6CiAgICAg
ICAgICAgICAgICAgdGVzdF9pbmZvID0gc2VsZi5fZ2V0X3Rlc3RfaW5mb19mb3JfZmlsZSh0ZXN0
X2ZpbGUpCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fdGVzdF9yZXF1aXJlc19sb2NrKHRlc3Rf
ZmlsZSk6CkBAIC01NjcsMjMgKzU1Myw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAg
ICB0ZXN0c190b19odHRwX2xvY2sucmV2ZXJzZSgpCiAgICAgICAgICAgICB0ZXN0X2xpc3RzLmlu
c2VydCgwLCAoInRlc3RzX3RvX2h0dHBfbG9jayIsIHRlc3RzX3RvX2h0dHBfbG9jaykpCiAKLSAg
ICAgICAgZmlsZW5hbWVfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIGZvciBpdGVtIGlu
IHRlc3RfbGlzdHM6Ci0gICAgICAgICAgICBmaWxlbmFtZV9xdWV1ZS5wdXQoaXRlbSkKLSAgICAg
ICAgcmV0dXJuIGZpbGVuYW1lX3F1ZXVlCi0KLSAgICBkZWYgX2dldF90ZXN0X2FyZ3Moc2VsZiwg
aW5kZXgpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSB0dXBsZSBvZiBhcmd1bWVudHMgZm9yIHRl
c3RzIGFuZCBmb3IgRHVtcFJlbmRlclRyZWUuIiIiCi0gICAgICAgIHRlc3RfYXJncyA9IHRlc3Rf
dHlwZV9iYXNlLlRlc3RBcmd1bWVudHMoKQotICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGggPSBO
b25lCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6Ci0gICAgICAgICAgICBw
bmdfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBuZ19yZXN1bHQlcy5wbmciICUg
aW5kZXgpCi0gICAgICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGggPSBwbmdfcGF0aAotICAgICAg
ICB0ZXN0X2FyZ3MubmV3X2Jhc2VsaW5lID0gc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUKLSAg
ICAgICAgdGVzdF9hcmdzLnJlc2V0X3Jlc3VsdHMgPSBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3Vs
dHMKLQotICAgICAgICByZXR1cm4gdGVzdF9hcmdzCisgICAgICAgIHJldHVybiB0ZXN0X2xpc3Rz
CiAKICAgICBkZWYgX2NvbnRhaW5zX3Rlc3RzKHNlbGYsIHN1YmRpcik6CiAgICAgICAgIGZvciB0
ZXN0X2ZpbGUgaW4gc2VsZi5fdGVzdF9maWxlczoKQEAgLTU5MSwzOCArNTYxLDggQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4g
RmFsc2UKIAotICAgIGRlZiBfaW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzKHNl
bGYsIHRlc3RfZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJJbnN0YW50aXRhdGVzIGFuZCBzdGFy
dHMgdGhlIFRlc3RTaGVsbFRocmVhZChzKS4KLQotICAgICAgICBSZXR1cm46Ci0gICAgICAgICAg
VGhlIGxpc3Qgb2YgdGhyZWFkcy4KLSAgICAgICAgIiIiCi0gICAgICAgIGZpbGVuYW1lX3F1ZXVl
ID0gc2VsZi5fZ2V0X3Rlc3RfZmlsZV9xdWV1ZSh0ZXN0X2ZpbGVzKQotCi0gICAgICAgICMgSW5z
dGFudGlhdGUgVGVzdFNoZWxsVGhyZWFkcyBhbmQgc3RhcnQgdGhlbS4KLSAgICAgICAgdGhyZWFk
cyA9IFtdCi0gICAgICAgIGZvciBpIGluIHhyYW5nZShpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9w
cm9jZXNzZXMpKToKLSAgICAgICAgICAgICMgQ3JlYXRlIHNlcGFyYXRlIFRlc3RUeXBlcyBpbnN0
YW5jZXMgZm9yIGVhY2ggdGhyZWFkLgotICAgICAgICAgICAgdGVzdF90eXBlcyA9IFtdCi0gICAg
ICAgICAgICBmb3IgdGVzdF90eXBlIGluIHNlbGYuX3Rlc3RfdHlwZXM6Ci0gICAgICAgICAgICAg
ICAgdGVzdF90eXBlcy5hcHBlbmQodGVzdF90eXBlKHNlbGYuX3BvcnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkK
LQotICAgICAgICAgICAgdGVzdF9hcmdzID0gc2VsZi5fZ2V0X3Rlc3RfYXJncyhpKQotICAgICAg
ICAgICAgdGhyZWFkID0gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFNoZWxsVGhyZWFkKHNl
bGYuX3BvcnQsCi0gICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucywgZmlsZW5hbWVfcXVldWUs
IHNlbGYuX3Jlc3VsdF9xdWV1ZSwKLSAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2Fy
Z3MpCi0gICAgICAgICAgICBpZiBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKToKLSAgICAgICAg
ICAgICAgICB0aHJlYWQucnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KQot
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQotICAgICAg
ICAgICAgdGhyZWFkcy5hcHBlbmQodGhyZWFkKQotCi0gICAgICAgIHJldHVybiB0aHJlYWRzCi0K
ICAgICBkZWYgX2lzX3NpbmdsZV90aHJlYWRlZChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyB3
aGV0aGVyIHdlIHNob3VsZCBydW4gYWxsIHRoZSB0ZXN0cyBpbiB0aGUgbWFpbiB0aHJlYWQuIiIi
CisgICAgICAgICJSZXR1cm5zIHdoZXRoZXIgdG8gcGx1cmFsaXplIGxvZyBtZXNzYWdlcyBhYm91
dCBEUlQgaW5zdGFuY2VzLiIiIgogICAgICAgICByZXR1cm4gaW50KHNlbGYuX29wdGlvbnMuY2hp
bGRfcHJvY2Vzc2VzKSA9PSAxCiAKICAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCBmaWxlX2xpc3Qs
IHJlc3VsdF9zdW1tYXJ5KToKQEAgLTYzOSw3MyArNTc5LDU3IEBAIGNsYXNzIFRlc3RSdW5uZXI6
CiAgICAgICAgICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5f
dGltZTp0ZXN0X3J1bl90aW1lfQogICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkg
b2JqZWN0IHRvIHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKICAgICAgICAgIiIiCisgICAgICAg
IG51bV93b3JrZXJzID0gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQorCisgICAg
ICAgIHNlbGYuX2N1cnJlbnRfZmlsZV9saXN0ID0gZmlsZV9saXN0CisgICAgICAgIHNlbGYuX2N1
cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorICAgICAgICByb3V0ZXIgPSBz
ZWxmLl9yb3V0ZXIKKworICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCisgICAgICAgIHNl
bGYuX2dyb3VwX3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzID0ge30KKyAg
ICAgICAgZm9yIGkgaW4geHJhbmdlKG51bV93b3JrZXJzKToKKyAgICAgICAgICAgIG5hbWUgPSAn
d29ya2VyLSVkJyAlIGkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0c1tuYW1lXSA9IHt9
CisgICAgICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHNbbmFtZV1bJ25hbWUnXSA9IG5hbWUKKyAg
ICAgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0c1tuYW1lXVsnbnVtX3Rlc3RzJ10gPSAwCisgICAg
ICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHNbbmFtZV1bJ3RvdGFsX3RpbWUnXSA9IDAKKworICAg
ICAgICB0ZXN0X2xpc3RzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LAorICAgICAgICAg
ICAgbnVtX3dvcmtlcnMgPT0gMSBvciBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9w
YXJhbGxlbCkKKyAgICAgICAgZm9yIHRlc3RfbGlzdCBpbiB0ZXN0X2xpc3RzOgorICAgICAgICAg
ICAgcm91dGVyLnBvc3RfdGVzdF9saXN0KHRlc3RfbGlzdCkKKworICAgICAgICAjIFRlbGwgdGhl
IHdvcmtlcnMgdG8gc2h1dCBkb3duIGFmdGVyIHRoZXkncmUgZG9uZSBydW5uaW5nIGFsbCB0aGUK
KyAgICAgICAgIyB0ZXN0cy4KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG51bV93b3JrZXJzKToK
KyAgICAgICAgICAgIHJvdXRlci5wb3N0X3N0b3AoKQorCiAgICAgICAgICMgRklYTUU6IFdlIHNo
b3VsZCB1c2Ugd2Via2l0cHkudG9vbC5ncmFtbWFyLnBsdXJhbGl6ZSBoZXJlLgogICAgICAgICBw
bHVyYWwgPSAiIgotICAgICAgICBpZiBub3Qgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCk6Cisg
ICAgICAgIGlmIHNlbGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpOgogICAgICAgICAgICAgcGx1cmFs
ID0gInMiCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyVz
IC4uLicgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9ydC5k
cml2ZXJfbmFtZSgpLCBwbHVyYWwpKQotICAgICAgICB0aHJlYWRzID0gc2VsZi5faW5zdGFudGlh
dGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzKGZpbGVfbGlzdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFy
eSkKLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3Rpbmcg
Li4uIikKIAotICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IHNlbGYuX3dhaXRfZm9yX3Ro
cmVhZHNfdG9fZmluaXNoKHRocmVhZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAg
ICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykg
PSBcCi0gICAgICAgICAgICBzZWxmLl9jb2xsZWN0X3RpbWluZ19pbmZvKHRocmVhZHMpCisgICAg
ICAgIHJvdXRlci5zdGFydF93b3JrZXJzKCkKIAotICAgICAgICByZXR1cm4gKGtleWJvYXJkX2lu
dGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAotICAgICAgICAgICAgICAg
IGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Vw
ZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAuLi4iKQogCi0gICAgZGVmIF93YWl0X2Zvcl90aHJlYWRz
X3RvX2ZpbmlzaChzZWxmLCB0aHJlYWRzLCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgIGtleWJv
YXJkX2ludGVycnVwdGVkID0gRmFsc2UKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBMb29w
IHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZW0gdG8gZmluaXNoLgotICAg
ICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVlCi0gICAgICAgICAgICB3aGlsZSBz
b21lX3RocmVhZF9pc19hbGl2ZToKLSAgICAgICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2
ZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgdCA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICAg
ICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25f
aW5mbyA9IHRocmVhZC5leGNlcHRpb25faW5mbygpCi0gICAgICAgICAgICAgICAgICAgIGlmIGV4
Y2VwdGlvbl9pbmZvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBSZS1y
YWlzZSB0aGUgdGhyZWFkJ3MgZXhjZXB0aW9uIGhlcmUgdG8gbWFrZSBpdAotICAgICAgICAgICAg
ICAgICAgICAgICAgIyBjbGVhciB0aGF0IHRlc3Rpbmcgd2FzIGFib3J0ZWQuIE90aGVyd2lzZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHRlc3RzIHRoYXQgZGlkIG5vdCBydW4gd291
bGQgYmUgYXNzdW1lZAotICAgICAgICAgICAgICAgICAgICAgICAgIyB0byBoYXZlIHBhc3NlZC4K
LSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRp
b25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KLQotICAgICAgICAgICAgICAgICAgICBpZiB0
aHJlYWQuaXNBbGl2ZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgc29tZV90aHJlYWRfaXNf
YWxpdmUgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQgPSB0aHJl
YWQubmV4dF90aW1lb3V0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0X3RpbWVv
dXQgYW5kIHQgPiBuZXh0X3RpbWVvdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9s
b2dfd2VkZ2VkX3RocmVhZCh0aHJlYWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhy
ZWFkLmNsZWFyX25leHRfdGltZW91dCgpCi0KLSAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9z
dW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgICAgICAgICAgICAgaWYgc29tZV90aHJlYWRf
aXNfYWxpdmU6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLQorICAgICAg
ICAgICAgcm91dGVyLmxvb3Aoc2VsZikKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0
OgorICAgICAgICAgICAgcm91dGVyLmNhbmNlbF93b3JrZXJzKCkKKyAgICAgICAgICAgIF9sb2cu
aW5mbygiSW50ZXJydXB0ZWQsIGV4aXRpbmciKQogICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJy
dXB0ZWQgPSBUcnVlCi0gICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAg
ICAgICAgICAgdGhyZWFkLmNhbmNlbCgpCi0KLSAgICAgICAgcmV0dXJuIGtleWJvYXJkX2ludGVy
cnVwdGVkCi0KLSAgICBkZWYgX2NvbGxlY3RfdGltaW5nX2luZm8oc2VsZiwgdGhyZWFkcyk6Ci0g
ICAgICAgIHRlc3RfdGltaW5ncyA9IHt9Ci0gICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdz
ID0gW10KLSAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbXQotCi0gICAgICAgIGZvciB0aHJlYWQg
aW4gdGhyZWFkczoKLSAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLmFwcGVuZCh7J25hbWUnOiB0
aHJlYWQuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVt
X3Rlc3RzJzogdGhyZWFkLmdldF9udW1fdGVzdHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3RvdGFsX3RpbWUnOiB0aHJlYWQuZ2V0X3RvdGFsX3RpbWUoKX0pCi0gICAg
ICAgICAgICB0ZXN0X3RpbWluZ3MudXBkYXRlKHRocmVhZC5nZXRfdGVzdF9ncm91cF90aW1pbmdf
c3RhdHMoKSkKLSAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLmV4dGVuZCh0aHJl
YWQuZ2V0X3Rlc3RfcmVzdWx0cygpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIFVu
ZXhwZWN0ZWQgZXhjZXB0aW9uOyBkb24ndCB0cnkgdG8gY2xlYW4gdXAgd29ya2Vycy4KKyAgICAg
ICAgICAgIF9sb2cuaW5mbygiRXhjZXB0aW9uIHJhaXNlZCwgZXhpdGluZyIpCisgICAgICAgICAg
ICByYWlzZQogCi0gICAgICAgIHJldHVybiAodGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywg
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJy
dXB0ZWQsIHNlbGYuX3dvcmtlcl9zdGF0cy52YWx1ZXMoKSwKKyAgICAgICAgICAgICAgICBzZWxm
Ll9ncm91cF9zdGF0cywgc2VsZi5fYWxsX3Jlc3VsdHMpCiAKICAgICBkZWYgbmVlZHNfaHR0cChz
ZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5lciBuZWVkcyBh
biBIVFRQIHNlcnZlci4iIiIKQEAgLTgzNywyMyArNzYxLDM3IEBAIGNsYXNzIFRlc3RSdW5uZXI6
CiAgICAgICAgIF9sb2cuZGVidWcoInN0b3BwaW5nIGhlbHBlciIpCiAgICAgICAgIHNlbGYuX3Bv
cnQuc3RvcF9oZWxwZXIoKQogCi0gICAgZGVmIHVwZGF0ZV9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9z
dW1tYXJ5KToKKyAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzcmMpOgorICAgICAg
ICBwYXNzCisKKyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgcGFzcwor
CisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNyYywgcmVzdWx0LCBlbGFwc2Vk
X3RpbWUpOgogICAgICAgICAiIiJVcGRhdGUgdGhlIHN1bW1hcnkgYW5kIHByaW50IHJlc3VsdHMg
d2l0aCBhbnkgY29tcGxldGVkIHRlc3RzLiIiIgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfcmVzdWx0cy5UZXN0UmVz
dWx0LmxvYWRzKHNlbGYuX3Jlc3VsdF9xdWV1ZS5nZXRfbm93YWl0KCkpCi0gICAgICAgICAgICBl
eGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAg
IGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0
KAotICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSwgcmVzdWx0LnR5cGUsIHNlbGYuX29w
dGlvbnMucGl4ZWxfdGVzdHMpCi0gICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0
LCBleHBlY3RlZCkKLSAgICAgICAgICAgIGV4cF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0
X2V4cGVjdGF0aW9uc19zdHJpbmcoCi0gICAgICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lKQot
ICAgICAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19z
dHJpbmcocmVzdWx0LnR5cGUpCi0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Rlc3Rf
cmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQsIGV4cF9zdHIsIGdvdF9zdHIpCi0gICAgICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCBzZWxmLl9yZXRyeWlu
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9m
aWxlc19saXN0KQorICAgICAgICBzZWxmLl91cGRhdGVfd29ya2VyX3N0YXRzKHNyYywgcmVzdWx0
LCBlbGFwc2VkX3RpbWUpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3RhdGlvbnMu
bWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoCisgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUs
IHJlc3VsdC50eXBlLCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQorICAgICAgICBleHBfc3Ry
ID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAorICAgICAgICAg
ICAgcmVzdWx0LmZpbGVuYW1lKQorICAgICAgICBnb3Rfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25z
LmV4cGVjdGF0aW9uX3RvX3N0cmluZyhyZXN1bHQudHlwZSkKKyAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKQor
CisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkuYWRkKHJlc3VsdCwgZXhwZWN0
ZWQpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfcHJvZ3Jlc3Moc2VsZi5fY3VycmVudF9y
ZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9yZXRyeWluZywgc2VsZi5fdGVzdF9maWxlc19saXN0KQorCisgICAgZGVmIGhhbmRsZV9maW5p
c2hlZF9saXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6
CisgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzW2xpc3RfbmFtZV0gPSAobnVtX3Rlc3RzLCBlbGFw
c2VkX3RpbWUpCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y2VwdGlv
bl9pbmZvKToKKyAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2VwdGlvbl9pbmZv
WzFdLCBleGNlcHRpb25faW5mb1syXQorCisgICAgZGVmIF91cGRhdGVfd29ya2VyX3N0YXRzKHNl
bGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl93b3JrZXJfc3Rh
dHNbc3JjXVsndG90YWxfdGltZSddICs9IGVsYXBzZWRfdGltZQorICAgICAgICBzZWxmLl93b3Jr
ZXJfc3RhdHNbc3JjXVsnbnVtX3Rlc3RzJ10gKz0gMQorICAgICAgICBzZWxmLl9hbGxfcmVzdWx0
cy5hcHBlbmQocmVzdWx0KQogCiAgICAgZGVmIF9jbG9iYmVyX29sZF9yZXN1bHRzKHNlbGYpOgog
ICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBkaXJlY3Rvcmll
cyBzaW5jZSB0aGUgb3RoZXIKQEAgLTk2Nyw2ICs5MDUsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgog
ICAgICAgICAgICAgcC5wcmludF9jb25maWcoIlJ1bm5pbmcgJXMgJXNzIGluIHBhcmFsbGVsIiAl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNz
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgp
KSkKKyAgICAgICAgcC5wcmludF9jb25maWcoIldvcmtlcnMgYXJlICVzIiAlIHNlbGYuX29wdGlv
bnMud29ya2Vyc19hcmUpCiAgICAgICAgIHAucHJpbnRfY29uZmlnKCIiKQogCiAgICAgZGVmIF9w
cmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5cGUoc2VsZiwgcmVzdWx0X3N1bW1hcnksCkBAIC0x
MzU2LDExICsxMjk1LDEzIEBAIGRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgcmVndWxhcl9v
dXRwdXQ9c3lzLnN0ZGVyciwKICAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkKICAgICAgICAgcmV0
dXJuIDAKIAorICAgIHJvdXRlcl9vYmogPSByb3V0ZXIuZ2V0KHBvcnQsIG9wdGlvbnMpCisKICAg
ICAjIFdlIHdyYXAgYW55IHBhcnRzIG9mIHRoZSBydW4gdGhhdCBhcmUgc2xvdyBvciBsaWtlbHkg
dG8gcmFpc2UgZXhjZXB0aW9ucwogICAgICMgaW4gYSB0cnkvZmluYWxseSB0byBlbnN1cmUgdGhh
dCB3ZSBjbGVhbiB1cCB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uLgogICAgIG51bV91bmV4cGVj
dGVkX3Jlc3VsdHMgPSAtMQogICAgIHRyeToKLSAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVu
bmVyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCisgICAgICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1
bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVyLCByb3V0ZXJfb2JqKQogICAgICAgICB0ZXN0X3J1
bm5lci5fcHJpbnRfY29uZmlnKCkKIAogICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ29s
bGVjdGluZyB0ZXN0cyAuLi4iKQpAQCAtMTM4OSw2ICsxMzMwLDcgQEAgZGVmIHJ1bihwb3J0LCBv
cHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAogICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4aXQgc3RhdHVzOiAlZCIgJQogICAgICAgICAg
ICAgICAgICAgICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzKQogICAgIGZpbmFsbHk6CisgICAg
ICAgIHJvdXRlcl9vYmouY2xlYW51cCgpCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAKICAg
ICByZXR1cm4gbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cwpAQCAtMTM5Nyw4ICsxMzM5LDExIEBAIGRl
ZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKIGRl
ZiBfc2V0X3VwX2Rlcml2ZWRfb3B0aW9ucyhwb3J0X29iaiwgb3B0aW9ucyk6CiAgICAgIiIiU2V0
cyB0aGUgb3B0aW9ucyB2YWx1ZXMgdGhhdCBkZXBlbmQgb24gb3RoZXIgb3B0aW9ucyB2YWx1ZXMu
IiIiCiAKLSAgICBpZiBub3Qgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXM6Ci0gICAgICAgICMgRklY
TUU6IEludmVzdGlnYXRlIHBlcmYvZmxha2luZXNzIGltcGFjdCBvZiB1c2luZyBjcHVfY291bnQg
KyAxLgorICAgIGlmIG9wdGlvbnMud29ya2Vyc19hcmUgPT0gJ2lubGluZSc6CisgICAgICAgIGlm
IG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzIGFuZCBpbnQob3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMp
ID4gMToKKyAgICAgICAgICAgIF9sb2cud2FybmluZygiLS13b3JrZXJzLWFyZT1pbmxpbmUgb3Zl
cnJpZGVzIC0tY2hpbGQtcHJvY2Vzc2VzIikKKyAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNz
ZXMgPSAiMSIKKyAgICBlbGlmIG5vdCBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlczoKICAgICAgICAg
b3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSBvcy5lbnZpcm9uLmdldCgiV0VCS0lUX1RFU1RfQ0hJ
TERfUFJPQ0VTU0VTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIocG9ydF9vYmouZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCiAKQEAgLTE2
MjEsNiArMTU2NiwxMCBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICBvcHRw
YXJzZS5tYWtlX29wdGlvbigiLS1jaGlsZC1wcm9jZXNzZXMiLAogICAgICAgICAgICAgaGVscD0i
TnVtYmVyIG9mIER1bXBSZW5kZXJUcmVlcyB0byBydW4gaW4gcGFyYWxsZWwuIiksCiAgICAgICAg
ICMgRklYTUU6IERpc3BsYXkgZGVmYXVsdCBudW1iZXIgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQg
d2lsbCBydW4uCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdvcmtlcnMtYXJlIiwg
YWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0icHJv
Y2Vzc2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJjb250cm9scyB3b3Jr
ZXIgbW9kZWwuIFZhbGlkIHZhbHVlcyBhcmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICInaW5saW5lJywgJ3RocmVhZHMnLCBhbmQgJ3Byb2Nlc3NlcycgKGRlZmF1bHQpLiIpLAogICAg
ICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwi
LAogICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKICAgICAg
ICAgICAgIGhlbHA9InJ1biBhbGwgdGVzdHMgaW4gcGFyYWxsZWwiKSwKQEAgLTE2ODEsMTcgKzE2
MzAsNiBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgIHJldHVybiBvcHRpb25zLCBh
cmdzCiAKIAotZGVmIF9sb2dfd2VkZ2VkX3RocmVhZCh0aHJlYWQpOgotICAgICIiIkxvZyBpbmZv
cm1hdGlvbiBhYm91dCB0aGUgZ2l2ZW4gdGhyZWFkIHN0YXRlLiIiIgotICAgIGlkID0gdGhyZWFk
LmlkKCkKLSAgICBzdGFjayA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmZpbmRfdGhyZWFkX3N0
YWNrKGlkKQotICAgIGFzc2VydChzdGFjayBpcyBub3QgTm9uZSkKLSAgICBfbG9nLmVycm9yKCIi
KQotICAgIF9sb2cuZXJyb3IoInRocmVhZCAlcyAoJWQpIGlzIHdlZGdlZCIgJSAodGhyZWFkLmdl
dE5hbWUoKSwgaWQpKQotICAgIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmxvZ19zdGFjayhzdGFj
aykKLSAgICBfbG9nLmVycm9yKCIiKQotCi0KIGRlZiBtYWluKCk6CiAgICAgb3B0aW9ucywgYXJn
cyA9IHBhcnNlX2FyZ3MoKQogICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0Zm9y
bSwgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5Cmlu
ZGV4IDI0OGEyOTFkMzkzMDMyNWZjNzJjYmYwNmRmZDYyZTNhZDA2YTQyMmIuLmZhZmM4YmJhMGJm
N2QwNTQ5MTFhYzc3MzAxZmMyNTU3NjJiZDczZmIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c191bml0dGVzdC5weQpAQCAtNzIsMTIgKzcyLDE0IEBAIGRlZiBwYXNzaW5nX3J1bihl
eHRyYV9hcmdzPU5vbmUsIHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLAogICAg
ICAgICBhcmdzLmV4dGVuZChbJy0tcGxhdGZvcm0nLCAndGVzdCddKQogICAgIGlmIG5vdCByZWNv
cmRfcmVzdWx0czoKICAgICAgICAgYXJncy5hcHBlbmQoJy0tbm8tcmVjb3JkLXJlc3VsdHMnKQor
ICAgIGlmIG5vdCAnLS1jaGlsZC1wcm9jZXNzZXMnIGluIGV4dHJhX2FyZ3M6CisgICAgICAgIGFy
Z3MuZXh0ZW5kKFsnLS13b3JrZXJzLWFyZScsICdpbmxpbmUnXSkKICAgICBhcmdzLmV4dGVuZChl
eHRyYV9hcmdzKQogICAgIGlmIG5vdCB0ZXN0c19pbmNsdWRlZDoKICAgICAgICAgIyBXZSB1c2Ug
dGhlIGdsb2IgdG8gdGVzdCB0aGF0IGdsb2JiaW5nIHdvcmtzLgogICAgICAgICBhcmdzLmV4dGVu
ZChbJ3Bhc3NlcycsCiAgICAgICAgICAgICAgICAgICAgICAnaHR0cC90ZXN0cycsCi0gICAgICAg
ICAgICAgICAgICAgICAnaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMnLAorICAgICAgICAgICAg
ICAgICAgICAgJ3dlYnNvY2tldC90ZXN0cycsCiAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVy
ZXMvZXhwZWN0ZWQvKiddKQogICAgIG9wdGlvbnMsIHBhcnNlZF9hcmdzID0gcnVuX3dlYmtpdF90
ZXN0cy5wYXJzZV9hcmdzKGFyZ3MpCiAgICAgaWYgbm90IHBvcnRfb2JqOgpAQCAtOTIsNiArOTQs
OCBAQCBkZWYgbG9nZ2luZ19ydW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCB0ZXN0
c19pbmNsdWRlZD1GYWxzZSk6CiAgICAgYXJncyA9IFsnLS1uby1yZWNvcmQtcmVzdWx0cyddCiAg
ICAgaWYgbm90ICctLXBsYXRmb3JtJyBpbiBleHRyYV9hcmdzOgogICAgICAgICBhcmdzLmV4dGVu
ZChbJy0tcGxhdGZvcm0nLCAndGVzdCddKQorICAgIGlmIG5vdCAnLS1jaGlsZC1wcm9jZXNzZXMn
IGluIGV4dHJhX2FyZ3M6CisgICAgICAgIGFyZ3MuZXh0ZW5kKFsnLS13b3JrZXJzLWFyZScsICdp
bmxpbmUnXSkKICAgICBhcmdzLmV4dGVuZChleHRyYV9hcmdzKQogICAgIGlmIG5vdCB0ZXN0c19p
bmNsdWRlZDoKICAgICAgICAgYXJncy5leHRlbmQoWydwYXNzZXMnLApAQCAtMTE2LDcgKzEyMCw3
IEBAIGRlZiBnZXRfdGVzdHNfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgdGVzdHNfaW5jbHVkZWQ9RmFs
c2UsIGZsYXR0ZW5fYmF0Y2hlcz1GYWxzZSk6CiAgICAgICAgICctLXByaW50JywgJ25vdGhpbmcn
LAogICAgICAgICAnLS1wbGF0Zm9ybScsICd0ZXN0JywKICAgICAgICAgJy0tbm8tcmVjb3JkLXJl
c3VsdHMnLAotICAgICAgICAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMSddCisgICAgICAgICctLXdv
cmtlcnMtYXJlJywgJ2lubGluZSddCiAgICAgYXJncy5leHRlbmQoZXh0cmFfYXJncykKICAgICBp
ZiBub3QgdGVzdHNfaW5jbHVkZWQ6CiAgICAgICAgICMgTm90IGluY2x1ZGluZyBodHRwIHRlc3Rz
IHNpbmNlIHRoZXkgZ2V0IHJ1biBvdXQgb2Ygb3JkZXIgKHRoYXQKQEAgLTIxNCw3ICsyMTgsNyBA
QCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfa2V5Ym9h
cmRfaW50ZXJydXB0KHNlbGYpOgogICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIGFsc28gdGVzdHMg
cnVubmluZyBhIHRlc3QgbWFya2VkIGFzIFNLSVAgaWYKICAgICAgICAgIyB5b3Ugc3BlY2lmeSBp
dCBleHBsaWNpdGx5LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVw
dCwgcGFzc2luZ19ydW4sCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJy
dXB0LCBsb2dnaW5nX3J1biwKICAgICAgICAgICAgIFsnZmFpbHVyZXMvZXhwZWN0ZWQva2V5Ym9h
cmQuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQogCiAgICAgZGVmIHRlc3RfbGFzdF9yZXN1
bHRzKHNlbGYpOgpAQCAtMjYxLDggKzI2NSwxNiBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9ydW5fZm9yY2Uoc2VsZik6CiAgICAgICAgICMgVGhp
cyByYWlzZXMgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugd2UgcnVuCi0gICAgICAgICMgZmFpbHVyZXMv
ZXhwZWN0ZWQvZXhjZXB0aW9uLmh0bWwsIHdoaWNoIGlzIG5vcm1hbGx5IFNLSVBwZWQuCi0gICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLCBbJy0tZm9yY2Un
XSkKKyAgICAgICAgIyBmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCBhbmQKKyAgICAg
ICAgIyBmYWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZCwgd2hpY2ggYXJlIG5vcm1hbGx5IFNLSVBw
ZWQuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvZ2dpbmdfcnVuKFsnLS1mb3JjZSddKQor
ICAgICAgICAgICAgdGVzdF9wYXNzZWQgPSBGYWxzZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJv
cjoKKyAgICAgICAgICAgIHRlc3RfcGFzc2VkID0gVHJ1ZQorICAgICAgICBleGNlcHQgS2V5Ym9h
cmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICB0ZXN0X3Bhc3NlZCA9IFRydWUKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKHRlc3RfcGFzc2VkKQogCiAgICAgZGVmIHRlc3RfcnVuX3BhcnQoc2VsZik6
CiAgICAgICAgICMgVGVzdCB0aGF0IHdlIGFjdHVhbGx5IHNlbGVjdCB0aGUgcmlnaHQgcGFydApA
QCAtNDI0LDcgKzQzNiw2IEBAIGNsYXNzIFJlYmFzZWxpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGNvZGVjcy5vcGVuID0gb3JpZ2luYWxf
b3BlbgogCi0KIGNsYXNzIFRlc3RSdW5uZXJXcmFwcGVyKHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1
bm5lcik6CiAgICAgZGVmIF9nZXRfdGVzdF9pbmZvX2Zvcl9maWxlKHNlbGYsIHRlc3RfZmlsZSk6
CiAgICAgICAgIHJldHVybiB0ZXN0X2ZpbGUKQEAgLTQzNiw3ICs0NDcsNyBAQCBjbGFzcyBUZXN0
UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIG1vY2tfcG9ydC5yZWxhdGl2
ZV90ZXN0X2ZpbGVuYW1lID0gbGFtYmRhIG5hbWU6IG5hbWUKICAgICAgICAgbW9ja19wb3J0LmZp
bGVuYW1lX3RvX3VyaSA9IGxhbWJkYSBuYW1lOiBuYW1lCiAKLSAgICAgICAgcnVubmVyID0gcnVu
X3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKHBvcnQ9bW9ja19wb3J0LCBvcHRpb25zPU1vY2soKSwg
cHJpbnRlcj1Nb2NrKCkpCisgICAgICAgIHJ1bm5lciA9IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1
bm5lcihwb3J0PW1vY2tfcG9ydCwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpLCByb3V0
ZXI9TW9jaygpKQogICAgICAgICBleHBlY3RlZF9odG1sID0gdSIiIjxodG1sPgogICA8aGVhZD4K
ICAgICA8dGl0bGU+TGF5b3V0IFRlc3QgUmVzdWx0cyAodGltZSk8L3RpdGxlPgpAQCAtNDUwLDIw
ICs0NjEsMTAgQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICBodG1sID0gcnVubmVyLl9yZXN1bHRzX2h0bWwoWyJ0ZXN0X3BhdGgiXSwge30sICJUaXRs
ZSIsIG92ZXJyaWRlX3RpbWU9InRpbWUiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0bWws
IGV4cGVjdGVkX2h0bWwpCiAKLSAgICBkZWYgcXVldWVfdG9fbGlzdChzZWxmLCBxdWV1ZSk6Ci0g
ICAgICAgIHF1ZXVlX2xpc3QgPSBbXQotICAgICAgICB3aGlsZShUcnVlKToKLSAgICAgICAgICAg
IHRyeToKLSAgICAgICAgICAgICAgICBxdWV1ZV9saXN0LmFwcGVuZChxdWV1ZS5nZXRfbm93YWl0
KCkpCi0gICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAgICAgYnJl
YWsKLSAgICAgICAgcmV0dXJuIHF1ZXVlX2xpc3QKLQotICAgIGRlZiB0ZXN0X2dldF90ZXN0X2Zp
bGVfcXVldWUoc2VsZik6CisgICAgZGVmIHRlc3Rfc2hhcmRfdGVzdHMoc2VsZik6CiAgICAgICAg
ICMgVGVzdCB0aGF0IF9nZXRfdGVzdF9maWxlX3F1ZXVlIGluIHJ1bl93ZWJraXRfdGVzdHMuVGVz
dFJ1bm5lciByZWFsbHkKICAgICAgICAgIyBwdXQgdGhlIGh0dHAgdGVzdHMgZmlyc3QgaW4gdGhl
IHF1ZXVlLgotICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihwb3J0PU1vY2soKSwg
b3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpKQotICAgICAgICBydW5uZXIuX29wdGlvbnMu
ZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsID0gRmFsc2UKKyAgICAgICAgcnVubmVyID0gVGVz
dFJ1bm5lcldyYXBwZXIocG9ydD1Nb2NrKCksIG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2so
KSwgcm91dGVyPU1vY2soKSkKIAogICAgICAgICB0ZXN0X2xpc3QgPSBbCiAgICAgICAgICAgIkxh
eW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91bmljb2RlLmh0bSIsCkBAIC00ODQsMTkgKzQ4NSwx
NSBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAg
J0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3VwcG9ydGVkLXhtbC1jb250
ZW50LXR5cGVzLmh0bWwnLAogICAgICAgICBdKQogCi0gICAgICAgIHJ1bm5lci5fb3B0aW9ucy5j
aGlsZF9wcm9jZXNzZXMgPSAxCi0gICAgICAgIHRlc3RfcXVldWVfZm9yX3NpbmdsZV90aHJlYWQg
PSBydW5uZXIuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9saXN0KQotICAgICAgICBydW5uZXIu
X29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gMgotICAgICAgICB0ZXN0X3F1ZXVlX2Zvcl9tdWx0
aV90aHJlYWQgPSBydW5uZXIuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9saXN0KQotCi0gICAg
ICAgIHNpbmdsZV90aHJlYWRfcmVzdWx0cyA9IHNlbGYucXVldWVfdG9fbGlzdCh0ZXN0X3F1ZXVl
X2Zvcl9zaW5nbGVfdGhyZWFkKQotICAgICAgICBtdWx0aV90aHJlYWRfcmVzdWx0cyA9IHNlbGYu
cXVldWVfdG9fbGlzdCh0ZXN0X3F1ZXVlX2Zvcl9tdWx0aV90aHJlYWQpCisgICAgICAgIHNpbmds
ZV90aHJlYWRfcmVzdWx0cyA9IHJ1bm5lci5fc2hhcmRfdGVzdHModGVzdF9saXN0LCBUcnVlKQor
ICAgICAgICBtdWx0aV90aHJlYWRfcmVzdWx0cyA9IHJ1bm5lci5fc2hhcmRfdGVzdHModGVzdF9s
aXN0LCBGYWxzZSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0c190b19odHRwX2xv
Y2siLCBzaW5nbGVfdGhyZWFkX3Jlc3VsdHNbMF1bMF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQoc2luZ2xlX3RocmVhZF9yZXN1bHRz
WzBdWzFdKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9faHR0cF9sb2NrIiwg
bXVsdGlfdGhyZWFkX3Jlc3VsdHNbMF1bMF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhw
ZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQobXVsdGlfdGhyZWFkX3Jlc3VsdHNbMF1bMV0p
KQogCisKIGNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgRklYTUU6
IGl0J3MgaGFyZCB0byBrbm93IHdoaWNoIHBsYXRmb3JtcyBhcmUgc2FmZSB0byB0ZXN0OyB0aGUK
ICAgICAjIGNocm9taXVtIHBsYXRmb3JtcyByZXF1aXJlIGEgY2hyb21pdW0gY2hlY2tvdXQsIGFu
ZCB0aGUgbWFjIHBsYXRmb3JtCkBAIC01MTcsNDEgKzUxNCw2IEBAIGNsYXNzIERyeXJ1blRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICctLXBpeGVsLXRlc3RzJ10pKQogCiAKLWNsYXNzIFRlc3RUaHJlYWQoZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxlVGhyZWFkKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
c3RhcnRlZF9xdWV1ZSwgc3RvcHBpbmdfcXVldWUpOgotICAgICAgICBkdW1wX3JlbmRlcl90cmVl
X3RocmVhZC5XYXRjaGFibGVUaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fc3Rh
cnRlZF9xdWV1ZSA9IHN0YXJ0ZWRfcXVldWUKLSAgICAgICAgc2VsZi5fc3RvcHBpbmdfcXVldWUg
PSBzdG9wcGluZ19xdWV1ZQotICAgICAgICBzZWxmLl90aW1lb3V0ID0gRmFsc2UKLSAgICAgICAg
c2VsZi5fdGltZW91dF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLQotICAgIGRlZiBydW4oc2VsZik6
Ci0gICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkKLQotICAgIGRlZiBfY292ZXJlZF9ydW4oc2Vs
Zik6Ci0gICAgICAgICMgRklYTUU6IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0aW5lIHRvIHdvcmsg
YXJvdW5kIGEgYnVnCi0gICAgICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8vYml0YnVja2V0
Lm9yZy9uZWQvY292ZXJhZ2VweS9pc3N1ZS84NS4KLSAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0g
dGhyZWFkLmdldF9pZGVudCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX3N0YXJ0
ZWRfcXVldWUucHV0KCcnKQotICAgICAgICAgICAgbXNnID0gc2VsZi5fc3RvcHBpbmdfcXVldWUu
Z2V0KCkKLSAgICAgICAgICAgIGlmIG1zZyA9PSAnS2V5Ym9hcmRJbnRlcnJ1cHQnOgotICAgICAg
ICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0Ci0gICAgICAgICAgICBlbGlmIG1zZyA9
PSAnRXhjZXB0aW9uJzoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKLSAgICAg
ICAgICAgIGVsaWYgbXNnID09ICdUaW1lb3V0JzoKLSAgICAgICAgICAgICAgICBzZWxmLl90aW1l
b3V0ID0gVHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUuZ2V0KCkKLSAg
ICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhj
X2luZm8oKQotCi0gICAgZGVmIG5leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5f
dGltZW91dDoKLSAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUucHV0KCdkb25lJykKLSAg
ICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUoKSAtIDEwCi0gICAgICAgIHJldHVybiB0aW1lLnRp
bWUoKQotCi0KIGNsYXNzIFRlc3RIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGFzdHJlYW0pOgogICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18o
c2VsZikKQEAgLTU2MSw3MCArNTIzLDUgQEAgY2xhc3MgVGVzdEhhbmRsZXIobG9nZ2luZy5IYW5k
bGVyKToKICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKHNlbGYuZm9ybWF0KHJlY29yZCkpCiAK
IAotY2xhc3MgV2FpdEZvclRocmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgot
ICAgIGNsYXNzIE1vY2tUZXN0UnVubmVyKHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcik6Ci0g
ICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBk
ZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBkZWYgdXBkYXRl
X3N1bW1hcnkoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAgICAgcGFzcwotCi0gICAg
ZGVmIHJ1bl9vbmVfdGhyZWFkKHNlbGYsIG1zZyk6Ci0gICAgICAgIHJ1bm5lciA9IHNlbGYuTW9j
a1Rlc3RSdW5uZXIoKQotICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAg
ICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIGNoaWxkX3RocmVh
ZCA9IFRlc3RUaHJlYWQoc3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKQotICAgICAgICBj
aGlsZF90aHJlYWQuc3RhcnQoKQotICAgICAgICBzdGFydGVkX21zZyA9IHN0YXJ0aW5nX3F1ZXVl
LmdldCgpCi0gICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dChtc2cpCi0gICAgICAgIHRocmVhZHMg
PSBbY2hpbGRfdGhyZWFkXQotICAgICAgICByZXR1cm4gcnVubmVyLl93YWl0X2Zvcl90aHJlYWRz
X3RvX2ZpbmlzaCh0aHJlYWRzLCBOb25lKQotCi0gICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0g
ICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKLQotICAgIGRlZiB0ZXN0X2ludGVycnVwdChzZWxm
KToKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCdLZXlib2FyZElu
dGVycnVwdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnRlcnJ1cHRlZCkKLQotICAgIGRl
ZiB0ZXN0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRD
YXB0dXJlKCkKLSAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQotICAgICAgICBpbnRlcnJ1cHRl
ZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJ1RpbWVvdXQnKQotICAgICAgICBzZWxmLmFzc2VydEZh
bHNlKGludGVycnVwdGVkKQotICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCi0KLSAgICBkZWYg
dGVzdF9leGNlcHRpb24oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJy
b3IsIHNlbGYucnVuX29uZV90aHJlYWQsICdFeGNlcHRpb24nKQotCi0KLWNsYXNzIFN0YW5kYWxv
bmVGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9sb2dfd2Vk
Z2VkX3RocmVhZChzZWxmKToKLSAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1
cmUoKQotICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIGxvZ2dlciA9IHJ1bl93
ZWJraXRfdGVzdHMuX2xvZwotICAgICAgICBhc3RyZWFtID0gYXJyYXlfc3RyZWFtLkFycmF5U3Ry
ZWFtKCkKLSAgICAgICAgaGFuZGxlciA9IFRlc3RIYW5kbGVyKGFzdHJlYW0pCi0gICAgICAgIGxv
Z2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCi0KLSAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBRdWV1
ZS5RdWV1ZSgpCi0gICAgICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAg
ICBjaGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1
ZSkKLSAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkKLSAgICAgICAgbXNnID0gc3RhcnRpbmdf
cXVldWUuZ2V0KCkKLQotICAgICAgICBydW5fd2Via2l0X3Rlc3RzLl9sb2dfd2VkZ2VkX3RocmVh
ZChjaGlsZF90aHJlYWQpCi0gICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgnJykKLSAgICAgICAg
Y2hpbGRfdGhyZWFkLmpvaW4odGltZW91dD0xLjApCi0KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShhc3RyZWFtLmVtcHR5KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2hpbGRfdGhyZWFk
LmlzQWxpdmUoKSkKLSAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQotCi0KIGlmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74180</attachid>
            <date>2010-11-17 17:07:49 -0800</date>
            <delta_ts>2010-11-18 14:49:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48820-20101117170748.patch</filename>
            <type>text/plain</type>
            <size>80763</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwNDEyYWE4ODcxYzVjNDVjNDI1NTkyMGM3YmYxYTQ0MTc5ZmQ3Njk1Li40Y2IwZGJk
MmUwY2Y0NDg1ZDUwYmI0NjE3NzU2OWM3MjYwZTA0NjlmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGFsbCBvZiB0aGUg
TlJXVCBtdWx0aXRocmVhZGluZyBpc3N1ZXMgYnkgbW92aW5nIHRvCisgICAgICAgIG11bHRpcHJv
Y2Vzcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3ByaW50aW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlci5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91dGVyX3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3Rlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5OgorCiAyMDEwLTExLTE3ICBTdGV2ZSBGYWxrZW5i
dXJnICA8c2ZhbGtlbkBhcHBsZS5jb20+CiAKICAgICAgICAgRGVsZXRlIHVudXNlZCBmaWxlIHVu
aW50ZW50aW9uYWxseSBhZGRlZCBpbiBsYXN0IGNoYW5nZS4KZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVu
ZGVyX3RyZWVfdGhyZWFkLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKaW5kZXggODE0
Mjg2NzJiNjA1MTg3ZTIyMTExNzQ0YzA0NDkwZDU1OTVlYTNlZi4uZmIwMjVmZjcxMDNmMzVkZjA4
OWZjN2FmMmIxNjAxNDAwZjc1OTk0ZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJl
YWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKQEAgLTQyLDEzICs0MiwxNSBA
QCBpbXBvcnQgY29kZWNzCiBpbXBvcnQgY29weQogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwot
aW1wb3J0IFF1ZXVlCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3lzCi1pbXBvcnQgdGhyZWFkCiBp
bXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQotaW1wb3J0IHRyYWNlYmFjaworCisKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCitm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVzIGltcG9ydCB0ZXh0X2RpZmYKK2Zy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IGltYWdlX2RpZmYKIAog
aW1wb3J0IHRlc3RfZmFpbHVyZXMKIGltcG9ydCB0ZXN0X291dHB1dApAQCAtNTgsMjMgKzYwLDYg
QEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0
X3BhY2thZ2UuIgogICAgICAgICAgICAgICAgICAgICAgICAgICJkdW1wX3JlbmRlcl90cmVlX3Ro
cmVhZCIpCiAKIAotZGVmIGZpbmRfdGhyZWFkX3N0YWNrKGlkKToKLSAgICAiIiJSZXR1cm5zIGEg
c3RhY2sgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZHVtcCBhIHN0YWNrIHRyYWNlIGZvcgot
ICAgIHRoZSBnaXZlbiB0aHJlYWQgaWQgKG9yIE5vbmUgaWYgdGhlIGlkIGlzIG5vdCBmb3VuZCku
IiIiCi0gICAgZm9yIHRocmVhZF9pZCwgc3RhY2sgaW4gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0
ZW1zKCk6Ci0gICAgICAgIGlmIHRocmVhZF9pZCA9PSBpZDoKLSAgICAgICAgICAgIHJldHVybiBz
dGFjawotICAgIHJldHVybiBOb25lCi0KLQotZGVmIGxvZ19zdGFjayhzdGFjayk6Ci0gICAgIiIi
TG9nIGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCkuIiIiCi0gICAgZm9yIGZpbGVuYW1lLCBs
aW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgotICAg
ICAgICBfbG9nLmVycm9yKCdGaWxlOiAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUs
IGxpbmVubywgbmFtZSkpCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICBfbG9nLmVycm9y
KCcgICVzJyAlIGxpbmUuc3RyaXAoKSkKLQotCiBkZWYgX2V4cGVjdGVkX3Rlc3Rfb3V0cHV0KHBv
cnQsIGZpbGVuYW1lKToKICAgICAiIiJSZXR1cm5zIGFuIGV4cGVjdGVkIFRlc3RPdXRwdXQgb2Jq
ZWN0LiIiIgogICAgIHJldHVybiB0ZXN0X291dHB1dC5UZXN0T3V0cHV0KHBvcnQuZXhwZWN0ZWRf
dGV4dChmaWxlbmFtZSksCkBAIC04Miw3ICs2Nyw3IEBAIGRlZiBfZXhwZWN0ZWRfdGVzdF9vdXRw
dXQocG9ydCwgZmlsZW5hbWUpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBv
cnQuZXhwZWN0ZWRfY2hlY2tzdW0oZmlsZW5hbWUpKQogCiBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHBv
cnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKLSAgICAgICAg
ICAgICAgICAgICAgdGVzdF9vdXRwdXQpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1
dCwgbmFtZSk6CiAgICAgIiIiUmVjZWl2ZXMgdGhlIG91dHB1dCBmcm9tIGEgRHVtcFJlbmRlclRy
ZWUgcHJvY2Vzcywgc3ViamVjdHMgaXQgdG8gYQogICAgIG51bWJlciBvZiB0ZXN0cywgYW5kIHJl
dHVybnMgYSBsaXN0IG9mIGZhaWx1cmUgdHlwZXMgdGhlIHRlc3QgcHJvZHVjZWQuCiAKQEAgLTkw
LDM0ICs3NSwzMiBAQCBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5w
dXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKICAgICAgIHBvcnQ6IHBvcnQtc3BlY2lmaWMgaG9v
a3MKICAgICAgIG9wdGlvbnM6IGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZ3VtZW50IGZyb20gb3B0
cGFyc2UKICAgICAgIHByb2M6IGFuIGFjdGl2ZSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzCi0gICAg
ICB0ZXN0X2lucHV0OiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSwgdXJpIGFu
ZCB0aW1lb3V0CisgICAgICB0ZXN0X2lucHV0OiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBm
aWxlbmFtZSBhbmQgdGltZW91dAogICAgICAgdGVzdF90eXBlczogbGlzdCBvZiB0ZXN0IHR5cGVz
IHRvIHN1YmplY3QgdGhlIG91dHB1dCB0bwogICAgICAgdGVzdF9hcmdzOiBhcmd1bWVudHMgdG8g
YmUgcGFzc2VkIHRvIGVhY2ggdGVzdAogICAgICAgdGVzdF9vdXRwdXQ6IGEgVGVzdE91dHB1dCBv
YmplY3QgY29udGFpbmluZyB0aGUgb3V0cHV0IG9mIHRoZSB0ZXN0CisgICAgICBuYW1lOiB3b3Jr
ZXIgbmFtZQogCiAgICAgUmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdAogICAgICIiIgogICAg
IGZhaWx1cmVzID0gW10KIAorICAgIHRlc3RfbmFtZSA9IHBvcnQucmVsYXRpdmVfdGVzdF9maWxl
bmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorCiAgICAgaWYgdGVzdF9vdXRwdXQuY3Jhc2g6CiAg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCgpKQogICAg
IGlmIHRlc3Rfb3V0cHV0LnRpbWVvdXQ6CiAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVUaW1lb3V0KCkpCiAKICAgICBpZiB0ZXN0X291dHB1dC5jcmFzaDoKLSAg
ICAgICAgX2xvZy5kZWJ1ZygiU3RhY2t0cmFjZSBmb3IgJXM6XG4lcyIgJSAodGVzdF9pbnB1dC5m
aWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGVzdF9vdXRwdXQuZXJyb3IpKQotICAgICAgICAjIFN0cmlwIG9mZiAiZmlsZTovLyIgc2luY2Ug
UmVsYXRpdmVUZXN0RmlsZW5hbWUgZXhwZWN0cwotICAgICAgICAjIGZpbGVzeXN0ZW0gcGF0aHMu
Ci0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9wdGlvbnMucmVzdWx0c19kaXJlY3Rv
cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5maWxl
bmFtZSkpCisgICAgICAgIF9sb2cuZGVidWcoIiVzIFN0YWNrdHJhY2UgZm9yICVzOlxuJXMiICUg
KG5hbWUsIHRlc3RfbmFtZSwgdGVzdF9vdXRwdXQuZXJyb3IpKQorICAgICAgICBmaWxlbmFtZSA9
IG9zLnBhdGguam9pbihvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCB0ZXN0X25hbWUpCiAgICAg
ICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gKyAiLXN0YWNrLnR4
dCIKICAgICAgICAgcG9ydC5tYXliZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0KGZpbGVu
YW1lKVswXSkKICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihmaWxlbmFtZSwgIndiIiwgInV0Zi04
IikgYXMgZmlsZToKICAgICAgICAgICAgIGZpbGUud3JpdGUodGVzdF9vdXRwdXQuZXJyb3IpCiAg
ICAgZWxpZiB0ZXN0X291dHB1dC5lcnJvcjoKLSAgICAgICAgX2xvZy5kZWJ1ZygiUHJldmlvdXMg
dGVzdCBvdXRwdXQgc3RkZXJyIGxpbmVzOlxuJXMiICUgdGVzdF9vdXRwdXQuZXJyb3IpCisgICAg
ICAgIF9sb2cuZGVidWcoIiVzICVzIG91dHB1dCBzdGRlcnIgbGluZXM6XG4lcyIgJSAobmFtZSwg
dGVzdF9uYW1lLCB0ZXN0X291dHB1dC5lcnJvcikpCiAKICAgICBleHBlY3RlZF90ZXN0X291dHB1
dCA9IF9leHBlY3RlZF90ZXN0X291dHB1dChwb3J0LCB0ZXN0X2lucHV0LmZpbGVuYW1lKQogCkBA
IC0xNDIsMjYgKzEyNSwxMSBAQCBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRl
c3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzLCB0aW1lX2Zvcl9kaWZmcykKIAog
Ci1kZWYgX3BhZF90aW1lb3V0KHRpbWVvdXQpOgotICAgICIiIlJldHVybnMgYSBzYWZlIG11bHRp
cGxlIG9mIHRoZSBwZXItdGVzdCB0aW1lb3V0IHZhbHVlIHRvIHVzZQotICAgIHRvIGRldGVjdCBo
dW5nIHRlc3QgdGhyZWFkcy4KLQotICAgICIiIgotICAgICMgV2hlbiB3ZSdyZSBydW5uaW5nIG9u
ZSB0ZXN0IHBlciBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLCB3ZSBjYW4KLSAgICAjIGVuZm9yY2Ug
YSBoYXJkIHRpbWVvdXQuICBUaGUgRHVtcFJlbmRlclRyZWUgd2F0Y2hkb2cgdXNlcyAyLjV4Ci0g
ICAgIyB0aGUgdGltZW91dDsgd2Ugd2FudCB0byBiZSBsYXJnZXIgdGhhbiB0aGF0LgotICAgIHJl
dHVybiB0aW1lb3V0ICogMwotCi0KLWRlZiBfbWlsbGlzZWNvbmRzX3RvX3NlY29uZHMobXNlY3Mp
OgotICAgIHJldHVybiBmbG9hdChtc2VjcykgLyAxMDAwLjAKLQotCiBkZWYgX3Nob3VsZF9mZXRj
aF9leHBlY3RlZF9jaGVja3N1bShvcHRpb25zKToKICAgICByZXR1cm4gb3B0aW9ucy5waXhlbF90
ZXN0cyBhbmQgbm90IChvcHRpb25zLm5ld19iYXNlbGluZSBvciBvcHRpb25zLnJlc2V0X3Jlc3Vs
dHMpCiAKIAotZGVmIF9ydW5fc2luZ2xlX3Rlc3QocG9ydCwgb3B0aW9ucywgdGVzdF9pbnB1dCwg
dGVzdF90eXBlcywgdGVzdF9hcmdzLCBkcml2ZXIpOgorZGVmIF9ydW5fc2luZ2xlX3Rlc3QocG9y
dCwgb3B0aW9ucywgdGVzdF9pbnB1dCwgdGVzdF90eXBlcywgdGVzdF9hcmdzLCBkcml2ZXIsIG5h
bWUpOgogICAgICMgRklYTUU6IFB1bGwgdGhpcyBpbnRvIFRlc3RTaGVsbFRocmVhZC5fcnVuKCku
CiAKICAgICAjIFRoZSBpbWFnZSBoYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1hZ2Ug
ZHVtcCBpZiB0aGUKQEAgLTE3NSwxMyArMTQzLDEzIEBAIGRlZiBfcnVuX3NpbmdsZV90ZXN0KHBv
cnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywgZHJpdmVyKToK
ICAgICB0ZXN0X2lucHV0LnVyaSA9IHBvcnQuZmlsZW5hbWVfdG9fdXJpKHRlc3RfaW5wdXQuZmls
ZW5hbWUpLnN0cmlwKCkKICAgICB0ZXN0X291dHB1dCA9IGRyaXZlci5ydW5fdGVzdCh0ZXN0X2lu
cHV0LnVyaSwgdGVzdF9pbnB1dC50aW1lb3V0LCBpbWFnZV9oYXNoX3RvX2RyaXZlcikKICAgICBy
ZXR1cm4gX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlw
ZXMsIHRlc3RfYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQsIG5hbWUpCiAKIAogY2xhc3Mg
U2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAiIiJUaHJlYWQgd3JhcHBl
ciBmb3IgcnVubmluZyBhIHNpbmdsZSB0ZXN0IGZpbGUuIiIiCiAKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCwgb3B0aW9ucywgdGVzdF9pbnB1dCwgdGVzdF90eXBlcywgdGVzdF9hcmdzKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgd29ya2VyX251bWJlciwgdGVz
dF9pbnB1dCwgdGVzdF90eXBlcywgdGVzdF9hcmdzKToKICAgICAgICAgIiIiCiAgICAgICAgIEFy
Z3M6CiAgICAgICAgICAgcG9ydDogb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmljIGhv
b2tzCkBAIC0xOTksNiArMTY3LDggQEAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcu
VGhyZWFkKToKICAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IHRlc3RfdHlwZXMKICAgICAgICAg
c2VsZi5fdGVzdF9hcmdzID0gdGVzdF9hcmdzCiAgICAgICAgIHNlbGYuX2RyaXZlciA9IE5vbmUK
KyAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2Vs
Zi5fbmFtZSA9ICd3b3JrZXItJWQnICUgd29ya2VyX251bWJlcgogCiAgICAgZGVmIHJ1bihzZWxm
KToKICAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQpAQCAtMjExLDI0NSArMTgxLDEyMyBAQCBj
bGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICBzZWxmLl9k
cml2ZXIuc3RhcnQoKQogICAgICAgICBzZWxmLl90ZXN0X3Jlc3VsdCA9IF9ydW5fc2luZ2xlX3Rl
c3Qoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfaW5wdXQsIHNlbGYuX3Rlc3RfdHlwZXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2Fy
Z3MsIHNlbGYuX2RyaXZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3Rlc3RfYXJncywgc2VsZi5fZHJpdmVyLCBzZWxmLl9uYW1lKQogICAgICAg
ICBzZWxmLl9kcml2ZXIuc3RvcCgpCiAKICAgICBkZWYgZ2V0X3Rlc3RfcmVzdWx0KHNlbGYpOgog
ICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9yZXN1bHQKIAogCi1jbGFzcyBXYXRjaGFibGVUaHJl
YWQodGhyZWFkaW5nLlRocmVhZCk6Ci0gICAgIiIiVGhpcyBjbGFzcyBhYnN0cmFjdHMgYW4gaW50
ZXJmYWNlIHVzZWQgYnkKLSAgICBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIuX3dhaXRfZm9y
X3RocmVhZHNfdG9fZmluaXNoIGZvciB0aHJlYWQKLSAgICBtYW5hZ2VtZW50LiIiIgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxm
KQotICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2V4Y2VwdGlv
bl9pbmZvID0gTm9uZQotICAgICAgICBzZWxmLl9uZXh0X3RpbWVvdXQgPSBOb25lCi0gICAgICAg
IHNlbGYuX3RocmVhZF9pZCA9IE5vbmUKLQotICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAg
ICIiIlNldCBhIGZsYWcgdGVsbGluZyB0aGlzIHRocmVhZCB0byBxdWl0LiIiIgotICAgICAgICBz
ZWxmLl9jYW5jZWxlZCA9IFRydWUKLQotICAgIGRlZiBjbGVhcl9uZXh0X3RpbWVvdXQoc2VsZik6
Ci0gICAgICAgICIiIk1hcmsgYSBmbGFnIHRlbGxpbmcgdGhpcyB0aHJlYWQgdG8gc3RvcCBzZXR0
aW5nIHRpbWVvdXRzLiIiIgotICAgICAgICBzZWxmLl90aW1lb3V0ID0gMAotCi0gICAgZGVmIGV4
Y2VwdGlvbl9pbmZvKHNlbGYpOgotICAgICAgICAiIiJJZiBydW4oKSB0ZXJtaW5hdGVkIG9uIGFu
IHVuY2F1Z2h0IGV4Y2VwdGlvbiwgcmV0dXJuIGl0IGhlcmUKLSAgICAgICAgKCh0eXBlLCB2YWx1
ZSwgdHJhY2ViYWNrKSB0dXBsZSkuCi0gICAgICAgIFJldHVybnMgTm9uZSBpZiBydW4oKSB0ZXJt
aW5hdGVkIG5vcm1hbGx5LiBNZWFudCB0byBiZSBjYWxsZWQgYWZ0ZXIKLSAgICAgICAgam9pbmlu
ZyB0aGlzIHRocmVhZC4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2V4Y2VwdGlvbl9pbmZvCi0K
LSAgICBkZWYgaWQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIHRocmVhZCBpZGVudGlmaWVy
LiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fdGhyZWFkX2lkCi0KLSAgICBkZWYgbmV4dF90aW1l
b3V0KHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHRpbWUgdGhlIHRlc3QgaXMgc3VwcG9z
ZWQgdG8gZmluaXNoIGJ5LiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0Ci0K
LQotY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6Ci0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1
ZSwKLSAgICAgICAgICAgICAgICAgdGVzdF90eXBlcywgdGVzdF9hcmdzKToKK2NsYXNzIFdvcmtl
cihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBjb250YWluZXIsIG9wdGlv
bnMsIHdvcmtlcl9udW1iZXIpOgogICAgICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9jYWwg
c3RhdGUgZm9yIHRoaXMgRHVtcFJlbmRlclRyZWUgdGhyZWFkLgogCiAgICAgICAgIEFyZ3M6CiAg
ICAgICAgICAgcG9ydDogaW50ZXJmYWNlIHRvIHBvcnQtc3BlY2lmaWMgaG9va3MKKyAgICAgICAg
ICBjb250YWluZXI6IGNvbnRhaW5lciBvYmplY3QgdG8gcmVjZWl2ZSB0ZXN0cyBmcm9tCiAgICAg
ICAgICAgb3B0aW9uczogY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJndW1lbnQgZnJvbSBvcHRwYXJz
ZQotICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWU6IEEgdGhyZWFkIHNhZmUgUXVldWUgY2xh
c3MgdGhhdCBjb250YWlucyBsaXN0cwotICAgICAgICAgICAgICBvZiB0dXBsZXMgb2YgKGZpbGVu
YW1lLCB1cmkpIHBhaXJzLgotICAgICAgICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJlYWQgc2FmZSBR
dWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29udGFpbgotICAgICAgICAgICAgICBzZXJpYWxpemVkIFRl
c3RSZXN1bHQgb2JqZWN0cy4KLSAgICAgICAgICB0ZXN0X3R5cGVzOiBBIGxpc3Qgb2YgVGVzdFR5
cGUgb2JqZWN0cyB0byBydW4gdGhlIHRlc3Qgb3V0cHV0Ci0gICAgICAgICAgICAgIGFnYWluc3Qu
Ci0gICAgICAgICAgdGVzdF9hcmdzOiBBIFRlc3RBcmd1bWVudHMgb2JqZWN0IHRvIHBhc3MgdG8g
ZWFjaCBUZXN0VHlwZS4KKyAgICAgICAgICB3b3JrZXJfbnVtYmVyOiBuYW1lIHRvIHVzZSBmb3Ig
bG9nZ2luZwogICAgICAgICAiIiIKLSAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLl9faW5pdF9fKHNl
bGYpCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fY29udGFp
bmVyID0gY29udGFpbmVyCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYu
X29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3RfcXVldWUgPSBm
aWxlbmFtZV9saXN0X3F1ZXVlCi0gICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IHJlc3VsdF9x
dWV1ZQorICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAg
ICBzZWxmLl9uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYu
X2JhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKKyAgICAgICAgc2VsZi5fYmF0
Y2hfY291bnQgPSAwCisKICAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdCA9IFtdCi0gICAgICAg
IHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0X3R5cGVzCi0gICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9
IHRlc3RfYXJncworICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gW10KKyAgICAgICAgZm9yIGNs
cyBpbiBzZWxmLl90ZXN0X3R5cGVfY2xhc3NlcygpOgorICAgICAgICAgICAgc2VsZi5fdGVzdF90
eXBlcy5hcHBlbmQoY2xzKHNlbGYuX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCisgICAgICAgIHNl
bGYuX3Rlc3RfYXJncyA9IHNlbGYuX3Rlc3RfYXJncyh3b3JrZXJfbnVtYmVyKQogICAgICAgICBz
ZWxmLl9kcml2ZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRz
ID0ge30KLSAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHRzID0gW10KLSAgICAgICAgc2VsZi5fbnVt
X3Rlc3RzID0gMAotICAgICAgICBzZWxmLl9zdGFydF90aW1lID0gMAotICAgICAgICBzZWxmLl9z
dG9wX3RpbWUgPSAwCi0gICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKLSAgICAg
ICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4gPSAwCi0gICAgICAgIHNlbGYuX2h0dHBfbG9j
a193YWl0X2VuZCA9IDAKLQotICAgICAgICAjIEN1cnJlbnQgZ3JvdXAgb2YgdGVzdHMgd2UncmUg
cnVubmluZy4KLSAgICAgICAgc2VsZi5fY3VycmVudF9ncm91cCA9IE5vbmUKLSAgICAgICAgIyBO
dW1iZXIgb2YgdGVzdHMgaW4gc2VsZi5fY3VycmVudF9ncm91cC4KLSAgICAgICAgc2VsZi5fbnVt
X3Rlc3RzX2luX2N1cnJlbnRfZ3JvdXAgPSBOb25lCi0gICAgICAgICMgVGltZSBhdCB3aGljaCB3
ZSBzdGFydGVkIHJ1bm5pbmcgdGVzdHMgZnJvbSBzZWxmLl9jdXJyZW50X2dyb3VwLgotICAgICAg
ICBzZWxmLl9jdXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUgPSBOb25lCi0KLSAgICBkZWYgZ2V0X3Rl
c3RfZ3JvdXBfdGltaW5nX3N0YXRzKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIGEgZGljdGlv
bmFyeSBtYXBwaW5nIHRlc3QgZ3JvdXAgdG8gYSB0dXBsZSBvZgotICAgICAgICAobnVtYmVyIG9m
IHRlc3RzIGluIHRoYXQgZ3JvdXAsIHRpbWUgdG8gcnVuIHRoZSB0ZXN0cykiIiIKLSAgICAgICAg
cmV0dXJuIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzCi0KLSAgICBkZWYgZ2V0X3Rlc3Rf
cmVzdWx0cyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIGFsbCB0ZXN0cyBy
dW4gb24gdGhpcyB0aHJlYWQuCi0KLSAgICAgICAgVGhpcyBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBw
ZXItdGhyZWFkIHN0YXRpc3RpY3MuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxm
Ll90ZXN0X3Jlc3VsdHMKLQotICAgIGRlZiBnZXRfdG90YWxfdGltZShzZWxmKToKLSAgICAgICAg
cmV0dXJuIG1heChzZWxmLl9zdG9wX3RpbWUgLSBzZWxmLl9zdGFydF90aW1lIC0KLSAgICAgICAg
ICAgICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF90aW1lKCksIDAuMCkKLQotICAgIGRlZiBn
ZXRfbnVtX3Rlc3RzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fbnVtX3Rlc3RzCi0KLSAg
ICBkZWYgcnVuKHNlbGYpOgotICAgICAgICAiIiJEZWxlZ2F0ZSBtYWluIHdvcmsgdG8gYSBoZWxw
ZXIgbWV0aG9kIGFuZCB3YXRjaCBmb3IgdW5jYXVnaHQKLSAgICAgICAgZXhjZXB0aW9ucy4iIiIK
LSAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQotCi0gICAgZGVmIF9jb3ZlcmVkX3J1bihzZWxm
KToKLSAgICAgICAgIyBGSVhNRTogdGhpcyBpcyBhIHNlcGFyYXRlIHJvdXRpbmUgdG8gd29yayBh
cm91bmQgYSBidWcKLSAgICAgICAgIyBpbiBjb3ZlcmFnZTogc2VlIGh0dHA6Ly9iaXRidWNrZXQu
b3JnL25lZC9jb3ZlcmFnZXB5L2lzc3VlLzg1LgotICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSB0
aHJlYWQuZ2V0X2lkZW50KCkKLSAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgp
Ci0gICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAg
X2xvZy5kZWJ1ZygnJXMgc3RhcnRpbmcnICUgKHNlbGYuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAg
IHNlbGYuX3J1bih0ZXN0X3J1bm5lcj1Ob25lLCByZXN1bHRfc3VtbWFyeT1Ob25lKQotICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnJXMgZG9uZSAoJWQgdGVzdHMpJyAlIChzZWxmLmdldE5hbWUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfbnVtX3Rlc3RzKCkpKQotICAgICAgICBl
eGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5m
byA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBpbnRlcnJ1cHRl
ZCIgJSBzZWxmLmdldE5hbWUoKSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgIyBTYXZl
IHRoZSBleGNlcHRpb24gZm9yIG91ciBjYWxsZXIgdG8gc2VlLgotICAgICAgICAgICAgc2VsZi5f
ZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAgc2VsZi5fc3RvcF90
aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyVzIGR5aW5nLCBleGNl
cHRpb24gcmFpc2VkJyAlIHNlbGYuZ2V0TmFtZSgpKQotCi0gICAgICAgIHNlbGYuX3N0b3BfdGlt
ZSA9IHRpbWUudGltZSgpCi0KLSAgICBkZWYgcnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHRlc3Rf
cnVubmVyLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIlRoaXMgaG9vayBhbGxvd3MgdXMg
dG8gcnVuIHRoZSB0ZXN0cyBmcm9tIHRoZSBtYWluIHRocmVhZCBpZgotICAgICAgICAtLW51bS10
ZXN0LXNoZWxscz09MSwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gYWx3YXlzIHJ1biB0d28gb3IgbW9y
ZQotICAgICAgICB0aHJlYWRzLiBUaGlzIGFsbG93cyB1cyB0byBkZWJ1ZyB0aGUgdGVzdCBoYXJu
ZXNzIHdpdGhvdXQgaGF2aW5nIHRvCi0gICAgICAgIGRvIG11bHRpLXRocmVhZGVkIGRlYnVnZ2lu
Zy4iIiIKLSAgICAgICAgc2VsZi5fcnVuKHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSkKLQot
ICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAgICIiIkNsZWFuIHVwIGh0dHAgbG9jayBhbmQg
c2V0IGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCi0gICAgICAgIHNlbGYu
X3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQotICAgICAgICBXYXRjaGFibGVUaHJlYWQuY2FuY2Vs
KHNlbGYpCi0KLSAgICBkZWYgbmV4dF90aW1lb3V0KHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4g
dGhlIHRpbWUgdGhlIHRlc3QgaXMgc3VwcG9zZWQgdG8gZmluaXNoIGJ5LiIiIgotICAgICAgICBp
ZiBzZWxmLl9uZXh0X3RpbWVvdXQ6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1l
b3V0ICsgc2VsZi5faHR0cF9sb2NrX3dhaXRfdGltZSgpCi0gICAgICAgIHJldHVybiBzZWxmLl9u
ZXh0X3RpbWVvdXQKLQotICAgIGRlZiBfaHR0cF9sb2NrX3dhaXRfdGltZShzZWxmKToKLSAgICAg
ICAgIiIiUmV0dXJuIHRoZSB0aW1lIHdoYXQgaHR0cCBsb2NraW5nIHRha2VzLiIiIgotICAgICAg
ICBpZiBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9PSAwOgotICAgICAgICAgICAgcmV0dXJu
IDAKLSAgICAgICAgaWYgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID09IDA6Ci0gICAgICAgICAg
ICByZXR1cm4gdGltZS50aW1lKCkgLSBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbgotICAgICAg
ICByZXR1cm4gc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kIC0gc2VsZi5faHR0cF9sb2NrX3dhaXRf
YmVnaW4KLQotICAgIGRlZiBfcnVuKHNlbGYsIHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSk6
Ci0gICAgICAgICIiIk1haW4gd29yayBlbnRyeSBwb2ludCBvZiB0aGUgdGhyZWFkLiBCYXNpY2Fs
bHkgd2UgcHVsbCB1cmxzIGZyb20gdGhlCi0gICAgICAgIGZpbGVuYW1lIHF1ZXVlIGFuZCBydW4g
dGhlIHRlc3RzIHVudGlsIHdlIHJ1biBvdXQgb2YgdXJscy4KLQotICAgICAgICBJZiB0ZXN0X3J1
bm5lciBpcyBub3QgTm9uZSwgdGhlbiB3ZSBjYWxsIHRlc3RfcnVubmVyLlVwZGF0ZVN1bW1hcnko
KQotICAgICAgICB3aXRoIHRoZSByZXN1bHRzIG9mIGVhY2ggdGVzdC4iIiIKLSAgICAgICAgYmF0
Y2hfc2l6ZSA9IHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZQotICAgICAgICBiYXRjaF9jb3VudCA9
IDAKLQotICAgICAgICAjIEFwcGVuZCB0ZXN0cyB3ZSdyZSBydW5uaW5nIHRvIHRoZSBleGlzdGlu
ZyB0ZXN0c19ydW4udHh0IGZpbGUuCi0gICAgICAgICMgVGhpcyBpcyBjcmVhdGVkIGluIHJ1bl93
ZWJraXRfdGVzdHMucHk6X1ByZXBhcmVMaXN0c0FuZFByaW50T3V0cHV0LgogICAgICAgICB0ZXN0
c19ydW5fZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVj
dG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0c19y
dW4udHh0IikKLSAgICAgICAgdGVzdHNfcnVuX2ZpbGUgPSBjb2RlY3Mub3Blbih0ZXN0c19ydW5f
ZmlsZW5hbWUsICJhIiwgInV0Zi04IikKLQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAg
ICAgaWYgc2VsZi5fY2FuY2VsZWQ6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGVzdGlu
ZyBjYW5jZWxsZWQnKQotICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgaWYgbGVuKHNlbGYuX2ZpbGVuYW1l
X2xpc3QpIGlzIDA6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF9ncm91cCBpcyBu
b3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9ncm91cF90aW1pbmdfc3Rh
dHNbc2VsZi5fY3VycmVudF9ncm91cF0gPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoc2Vs
Zi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3JvdXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
dGltZS50aW1lKCkgLSBzZWxmLl9jdXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUpCi0KLSAgICAgICAg
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXAsIHNl
bGYuX2ZpbGVuYW1lX2xpc3QgPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxl
bmFtZV9saXN0X3F1ZXVlLmdldF9ub3dhaXQoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBRdWV1
ZS5FbXB0eToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9j
aygpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCi0g
ICAgICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X2dyb3VwID09
ICJ0ZXN0c190b19odHRwX2xvY2siOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGFydF9z
ZXJ2ZXJzX3dpdGhfbG9jaygpCi0gICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9oYXZlX2h0dHBf
bG9jazoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygp
Ci0KLSAgICAgICAgICAgICAgICBzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVudF9ncm91cCA9IGxl
bihzZWxmLl9maWxlbmFtZV9saXN0KQotICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3Jv
dXBfc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0KLSAgICAgICAgICAgIHRlc3RfaW5wdXQgPSBz
ZWxmLl9maWxlbmFtZV9saXN0LnBvcCgpCi0KLSAgICAgICAgICAgICMgV2UgaGF2ZSBhIHVybCwg
cnVuIHRlc3RzLgotICAgICAgICAgICAgYmF0Y2hfY291bnQgKz0gMQotICAgICAgICAgICAgc2Vs
Zi5fbnVtX3Rlc3RzICs9IDEKLSAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3Npbmds
eToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9zaW5nbHkodGVzdF9p
bnB1dCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5f
cnVuX3Rlc3QodGVzdF9pbnB1dCkKLQotICAgICAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X2lucHV0
LmZpbGVuYW1lCi0gICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS53cml0ZShmaWxlbmFtZSArICJc
biIpCi0gICAgICAgICAgICBpZiByZXN1bHQuZmFpbHVyZXM6Ci0gICAgICAgICAgICAgICAgIyBD
aGVjayBhbmQga2lsbCBEdW1wUmVuZGVyVHJlZSBpZiB3ZSBuZWVkIHRvLgotICAgICAgICAgICAg
ICAgIGlmIGxlbihbMSBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIGYuc2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpXSk6Ci0gICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCi0gICAgICAgICAgICAgICAg
ICAgICMgUmVzZXQgdGhlIGJhdGNoIGNvdW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQu
Ci0gICAgICAgICAgICAgICAgICAgIGJhdGNoX2NvdW50ID0gMAotICAgICAgICAgICAgICAgICMg
UHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCi0gICAgICAgICAgICAgICAgZXJyb3Jfc3RyID0g
J1xuJy5qb2luKFsnICAnICsgZi5tZXNzYWdlKCkgZm9yCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmIGluIHJlc3VsdC5mYWlsdXJlc10pCi0gICAgICAgICAgICAgICAg
X2xvZy5kZWJ1ZygiJXMgJXMgZmFpbGVkOlxuJXMiICUgKHNlbGYuZ2V0TmFtZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZp
bGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX3N0cikpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIHBhc3NlZCIgJSAo
c2VsZi5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJl
bGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKSkKLSAgICAgICAgICAgIHNlbGYuX3Jlc3Vs
dF9xdWV1ZS5wdXQocmVzdWx0LmR1bXBzKCkpCi0KLSAgICAgICAgICAgIGlmIGJhdGNoX3NpemUg
PiAwIGFuZCBiYXRjaF9jb3VudCA+PSBiYXRjaF9zaXplOgotICAgICAgICAgICAgICAgICMgQm91
bmNlIHRoZSBzaGVsbCBhbmQgcmVzZXQgY291bnQuCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9m
aWxlID0gY29kZWNzLm9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAiYSIsICJ1dGYtOCIpCisKKyAg
ICBkZWYgaGFuZGxlX3N0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3AgcmVjZWl2ZWQgLSBubyBt
b3JlIHRlc3RzIHRvIHJ1bi4iIiIKKyAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVl
KCkKKyAgICAgICAgaWYgc2VsZi5fdGVzdHNfcnVuX2ZpbGU6CisgICAgICAgICAgICBzZWxmLl90
ZXN0c19ydW5fZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9
IE5vbmUKKworICAgIGRlZiBfdGVzdF9hcmdzKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAg
ICAiIiJSZXR1cm5zIHRoZSB0dXBsZSBvZiBhcmd1bWVudHMgZm9yIHRlc3RzIGFuZCBmb3IgRHVt
cFJlbmRlclRyZWUuIiIiCisgICAgICAgIHRlc3RfYXJncyA9IHRlc3RfdHlwZV9iYXNlLlRlc3RB
cmd1bWVudHMoKQorICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGggPSBOb25lCisgICAgICAgIGlm
IHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBwbmdfcGF0aCA9IG9zLnBh
dGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInBuZ19yZXN1bHQlcy5wbmciICUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIpCisgICAgICAgICAgICB0
ZXN0X2FyZ3MucG5nX3BhdGggPSBwbmdfcGF0aAorICAgICAgICB0ZXN0X2FyZ3MubmV3X2Jhc2Vs
aW5lID0gc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUKKyAgICAgICAgdGVzdF9hcmdzLnJlc2V0
X3Jlc3VsdHMgPSBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMKKworICAgICAgICByZXR1cm4g
dGVzdF9hcmdzCisKKyAgICBkZWYgX3Rlc3RfdHlwZV9jbGFzc2VzKHNlbGYpOgorICAgICAgICBj
bGFzc2VzID0gW3RleHRfZGlmZi5UZXN0VGV4dERpZmZdCisgICAgICAgIGlmIHNlbGYuX29wdGlv
bnMucGl4ZWxfdGVzdHM6CisgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZChpbWFnZV9kaWZmLklt
YWdlRGlmZikKKyAgICAgICAgcmV0dXJuIGNsYXNzZXMKKworICAgIGRlZiBydW5fdGVzdChzZWxm
LCB0ZXN0X2lucHV0KToKKyAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X2lucHV0LmZpbGVuYW1lCisg
ICAgICAgIHRlc3RfaW5wdXQudXJpID0gc2VsZi5fcG9ydC5maWxlbmFtZV90b191cmkodGVzdF9p
bnB1dC5maWxlbmFtZSkKKyAgICAgICAgaWYgX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1
bShzZWxmLl9vcHRpb25zKToKKyAgICAgICAgICAgIHRlc3RfaW5wdXQuaW1hZ2VfY2hlY2tzdW0g
PSBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHRlc3RfaW5wdXQuZmlsZW5hbWUpCisKKyAg
ICAgICAgdGVzdF9pbnB1dC51cmkgPSBzZWxmLl9wb3J0LmZpbGVuYW1lX3RvX3VyaSh0ZXN0X2lu
cHV0LmZpbGVuYW1lKQorICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCArPSAxCisKKyAgICAgICAg
IyBXZSBnaXZlIERSVCBzb21lIGV4dHJhIHRpbWUgdG8gZGV0ZWN0IGEgdGltZW91dCwgYW5kIHRo
ZW4KKyAgICAgICAgIyBnaXZlIG91ciB3YXRjaGRvZyB0aHJlYWQgYSBzaW1pbGFyIGFtb3VudCB0
byBkZXRlY3QgYSBodW5nCisgICAgICAgICMgRFJULiBOb3RlIHRoYXQgd2UgbmVlZCB0byBjb252
ZXJ0IHRoZSB0ZXN0IHRpbWVvdXQgZnJvbSBhCisgICAgICAgICMgc3RyaW5nIHZhbHVlIGluIG1p
bGxpc2Vjb25kcyB0byBhIGZsb2F0IGZvciBQeXRob24uCisgICAgICAgIHRlc3RfcGFkZGluZyA9
IDQwLjAKKyAgICAgICAga2lsbF9wYWRkaW5nID0gMS4wCisgICAgICAgIHRocmVhZF90aW1lb3V0
ID0gZmxvYXQodGVzdF9pbnB1dC50aW1lb3V0KSAvIDEwMDAuMCArIHRlc3RfcGFkZGluZworCisg
ICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5f
c2luZ2x5OgorICAgICAgICAgICAgc2VsZi5fY29udGFpbmVyLnN0YXJ0ZWRfdGVzdCh0ZXN0X2lu
cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGlt
ZW91dCArIGtpbGxfcGFkZGluZykKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0
X2luX2Fub3RoZXJfdGhyZWFkKHRlc3RfaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfdGltZW91dCkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHNlbGYuX2NvbnRhaW5lci5zdGFydGVkX3Rlc3QodGVzdF9pbnB1dCwg
dGhyZWFkX3RpbWVvdXQpCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl90
aGlzX3RocmVhZCh0ZXN0X2lucHV0KQorCisgICAgICAgIHNlbGYuX2NvbnRhaW5lci5maW5pc2hl
ZF90ZXN0KHJlc3VsdCwgdGltZS50aW1lKCkgLSBzdGFydCkKKworICAgICAgICBpZiBzZWxmLl9i
YXRjaF9zaXplID4gMCBhbmQgc2VsZi5fYmF0Y2hfY291bnQgPj0gc2VsZi5fYmF0Y2hfc2l6ZToK
KyAgICAgICAgICAgICMgQm91bmNlIHRoZSBzaGVsbCBhbmQgcmVzZXQgY291bnQuCisgICAgICAg
ICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQorICAgICAgICAgICAgc2VsZi5fYmF0
Y2hfY291bnQgPSAwCisKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUud3JpdGUodGVzdF9p
bnB1dC5maWxlbmFtZSArICJcbiIpCisgICAgICAgIGlmIHJlc3VsdC5mYWlsdXJlczoKKyAgICAg
ICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgRHVtcFJlbmRlclRyZWUgaWYgd2UgbmVlZCB0by4KKyAg
ICAgICAgICAgIGlmIGxlbihbMSBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXMKKyAgICAgICAgICAg
ICAgICAgICAgaWYgZi5zaG91bGRfa2lsbF9kdW1wX3JlbmRlcl90cmVlKCldKToKICAgICAgICAg
ICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQotICAgICAgICAgICAgICAgIGJh
dGNoX2NvdW50ID0gMAotCi0gICAgICAgICAgICBpZiB0ZXN0X3J1bm5lcjoKLSAgICAgICAgICAg
ICAgICB0ZXN0X3J1bm5lci51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKLQotICAgIGRl
ZiBfcnVuX3Rlc3Rfc2luZ2x5KHNlbGYsIHRlc3RfaW5wdXQpOgorICAgICAgICAgICAgICAgICMg
UmVzZXQgdGhlIGJhdGNoIGNvdW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQuCisgICAg
ICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisgICAgICAgICAgICAjIFByaW50IHRo
ZSBlcnJvciBtZXNzYWdlKHMpLgorICAgICAgICAgICAgZXJyb3Jfc3RyID0gJ1xuJy5qb2luKFsn
ICAnICsgZi5tZXNzYWdlKCkgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmIGluIHJlc3VsdC5mYWlsdXJlc10pCisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBm
YWlsZWQ6XG4lcyIgJSAoc2VsZi5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX3N0cikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuX25hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1dC5m
aWxlbmFtZSkpKQorCisgICAgZGVmIF9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZChzZWxmLCB0
ZXN0X2lucHV0LCB0aHJlYWRfdGltZW91dCk6CiAgICAgICAgICIiIlJ1biBhIHRlc3QgaW4gYSBz
ZXBhcmF0ZSB0aHJlYWQsIGVuZm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4KIAogICAgICAgICBT
aW5jZSB3ZSBjYW4gb25seSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEgdGhyZWFkLCBub3Qg
YW55IGludGVybmFsCkBAIC00NjEsMTkgKzMwOSwxNiBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQo
V2F0Y2hhYmxlVGhyZWFkKToKIAogICAgICAgICBSZXR1cm5zOgogICAgICAgICAgIEEgVGVzdFJl
c3VsdAotCiAgICAgICAgICIiIgogICAgICAgICB3b3JrZXIgPSBTaW5nbGVUZXN0VGhyZWFkKHNl
bGYuX3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9u
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5wdXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2FyZ3MpCiAKICAgICAgICAgd29ya2Vy
LnN0YXJ0KCkKIAotICAgICAgICB0aHJlYWRfdGltZW91dCA9IF9taWxsaXNlY29uZHNfdG9fc2Vj
b25kcygKLSAgICAgICAgICAgIF9wYWRfdGltZW91dChpbnQodGVzdF9pbnB1dC50aW1lb3V0KSkp
Ci0gICAgICAgIHRocmVhZC5fbmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyB0aHJlYWRfdGlt
ZW91dAogICAgICAgICB3b3JrZXIuam9pbih0aHJlYWRfdGltZW91dCkKICAgICAgICAgaWYgd29y
a2VyLmlzQWxpdmUoKToKICAgICAgICAgICAgICMgSWYgam9pbigpIHJldHVybmVkIHdpdGggdGhl
IHRocmVhZCBzdGlsbCBydW5uaW5nLCB0aGUKQEAgLTQ5NiwxMSArMzQxLDEyIEBAIGNsYXNzIFRl
c3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICAgICAgX2xvZy5lcnJvcign
Q2Fubm90IGdldCByZXN1bHRzIG9mIHRlc3Q6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAg
IHRlc3RfaW5wdXQuZmlsZW5hbWUpCiAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X3Jlc3VsdHMu
VGVzdFJlc3VsdCh0ZXN0X2lucHV0LmZpbGVuYW1lLCBmYWlsdXJlcz1bXSwKLSAgICAgICAgICAg
ICAgICB0ZXN0X3J1bl90aW1lPTAsIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcz0wLCB0aW1lX2Zv
cl9kaWZmcz0wKQorICAgICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9MCwgdG90YWxfdGltZV9m
b3JfYWxsX2RpZmZzPTAsCisgICAgICAgICAgICAgICAgdGltZV9mb3JfZGlmZnM9e30pCiAKICAg
ICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0
KToKKyAgICBkZWYgX3J1bl90ZXN0X2luX3RoaXNfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQpOgog
ICAgICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdCBmaWxlIHVzaW5nIGEgc2hhcmVkIER1bXBSZW5k
ZXJUcmVlIHByb2Nlc3MuCiAKICAgICAgICAgQXJnczoKQEAgLTUwOSwxNCArMzU1LDkgQEAgY2xh
c3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgIFJldHVybnM6IGEg
VGVzdFJlc3VsdCBvYmplY3QuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9lbnN1cmVfZHVt
cF9yZW5kZXJfdHJlZV9pc19ydW5uaW5nKCkKLSAgICAgICAgdGhyZWFkX3RpbWVvdXQgPSBfbWls
bGlzZWNvbmRzX3RvX3NlY29uZHMoCi0gICAgICAgICAgICAgX3BhZF90aW1lb3V0KGludCh0ZXN0
X2lucHV0LnRpbWVvdXQpKSkKLSAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gdGltZS50aW1l
KCkgKyB0aHJlYWRfdGltZW91dAotICAgICAgICB0ZXN0X3Jlc3VsdCA9IF9ydW5fc2luZ2xlX3Rl
c3Qoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywgdGVzdF9pbnB1dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMsIHNlbGYuX3Rlc3RfYXJn
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RyaXZlcikK
LSAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHRzLmFwcGVuZCh0ZXN0X3Jlc3VsdCkKLSAgICAgICAg
cmV0dXJuIHRlc3RfcmVzdWx0CisgICAgICAgIHJldHVybiBfcnVuX3NpbmdsZV90ZXN0KHNlbGYu
X3BvcnQsIHNlbGYuX29wdGlvbnMsIHRlc3RfaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcywgc2VsZi5fdGVzdF9hcmdzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RyaXZlciwgc2VsZi5fbmFtZSkKIAogICAg
IGRlZiBfZW5zdXJlX2R1bXBfcmVuZGVyX3RyZWVfaXNfcnVubmluZyhzZWxmKToKICAgICAgICAg
IiIiU3RhcnQgdGhlIHNoYXJlZCBEdW1wUmVuZGVyVHJlZSwgaWYgaXQncyBub3QgcnVubmluZy4K
QEAgLTUzMiwyOSArMzczLDYgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVh
ZCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fb3B0aW9ucykKICAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCiAKLSAgICBk
ZWYgX3N0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgotICAgICAgICAiIiJBY3F1aXJlIGh0
dHAgbG9jayBhbmQgc3RhcnQgdGhlIHNlcnZlcnMuIiIiCi0gICAgICAgIHNlbGYuX2h0dHBfbG9j
a193YWl0X2JlZ2luID0gdGltZS50aW1lKCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnQWNxdWlyZSBo
dHRwIGxvY2sgLi4uJykKLSAgICAgICAgc2VsZi5fcG9ydC5hY3F1aXJlX2h0dHBfbG9jaygpCi0g
ICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIEhUVFAgc2VydmVyIC4uLicpCi0gICAgICAgIHNl
bGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGlu
ZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCi0gICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vic29j
a2V0X3NlcnZlcigpCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IHRpbWUudGlt
ZSgpCi0gICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gVHJ1ZQotCi0gICAgZGVmIF9zdG9w
X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgotICAgICAgICAiIiJTdG9wIHRoZSBzZXJ2ZXJzIGFu
ZCByZWxlYXNlIGh0dHAgbG9jay4iIiIKLSAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6
Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQotICAg
ICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKLSAgICAgICAgICAgIF9sb2cu
ZGVidWcoJ1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgICAgIHNlbGYu
X3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Jl
bGVhc2UgaHR0cCBsb2NrIC4uLicpCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGVhc2VfaHR0
cF9sb2NrKCkKLSAgICAgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKLQogICAg
IGRlZiBfa2lsbF9kdW1wX3JlbmRlcl90cmVlKHNlbGYpOgogICAgICAgICAiIiJLaWxsIHRoZSBE
dW1wUmVuZGVyVHJlZSBwcm9jZXNzIGlmIGl0J3MgcnVubmluZy4iIiIKICAgICAgICAgaWYgc2Vs
Zi5fZHJpdmVyOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRfdW5pdHRlc3Qu
cHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZF91bml0dGVzdC5weQppbmRleCA2M2Y4NmQ5M2Q4
OTQ5NWVhOTdjOWYwMWFhMTc0OTE2OGViNmFhYjhkLi4zMTg2MzA4MWNiN2U4ODQ0YWFlYzM4ZDgx
YjgxOTMxODU0MjhjN2VjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZF91bml0
dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZF91bml0dGVzdC5weQpAQCAtMzEs
MTkgKzMxLDggQEAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCi1pbXBvcnQgZHVtcF9y
ZW5kZXJfdHJlZV90aHJlYWQKLQotCiBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAg
ICBkZWYgdGVzdF9maW5kX3RocmVhZF9zdGFja19mb3VuZChzZWxmKToKLSAgICAgICAgaWQsIHN0
YWNrID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKClbMF0KLSAgICAgICAgZm91bmRfc3Rh
Y2sgPSBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5maW5kX3RocmVhZF9zdGFjayhpZCkKLSAgICAg
ICAgc2VsZi5hc3NlcnROb3RFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKLQotICAgIGRlZiB0ZXN0
X2ZpbmRfdGhyZWFkX3N0YWNrX25vdF9mb3VuZChzZWxmKToKLSAgICAgICAgZm91bmRfc3RhY2sg
PSBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5maW5kX3RocmVhZF9zdGFjaygwKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQotCisgICAgcGFzcwogCiBpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvcm91
dGVyLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2Uvcm91dGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiNjc0ZTJhMzViODVhMTAwMWJmODViMzMw
MWVmODk5ZjQ2MjUzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9yb3V0ZXIucHkKQEAgLTAsMCArMSw1
NTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgY1BpY2tsZQoraW1wb3J0IGxvZ2dpbmcK
K2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBvcworaW1wb3J0IFF1ZXVlCitpbXBvcnQg
c3lzCitpbXBvcnQgdGhyZWFkCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0
IHRyYWNlYmFjaworCitpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKK2ltcG9ydCB0ZXN0
X3Jlc3VsdHMKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90
ZXN0cy5sYXlvdXRfcGFja2FnZS5yb3V0ZXIiKQorCisKK2RlZiBnZXQocG9ydCwgb3B0aW9ucyk6
CisgICAgaWYgb3B0aW9ucy53b3JrZXJzX2FyZSA9PSAnaW5saW5lJzoKKyAgICAgICAgcmV0dXJu
IFNpbmdsZVRocmVhZGVkUm91dGVyKHBvcnQsIG9wdGlvbnMpCisgICAgaWYgb3B0aW9ucy53b3Jr
ZXJzX2FyZSA9PSAndGhyZWFkcyc6CisgICAgICAgIHJldHVybiBNdWx0aVRocmVhZGVkUm91dGVy
KHBvcnQsIG9wdGlvbnMpCisgICAgcmV0dXJuIE11bHRpUHJvY2Vzc1JvdXRlcihwb3J0LCBvcHRp
b25zKQorCisKK2NsYXNzIF9NZXNzYWdlKG9iamVjdCk6CisgICAgVEVTVF9MSVNUID0gJ3Rlc3Rf
bGlzdCcKKyAgICBTVE9QID0gJ3N0b3AnCisgICAgRE9ORSA9ICdkb25lJworICAgIFNUQVJURURf
VEVTVCA9ICdzdGFydGVkX3Rlc3QnCisgICAgRklOSVNIRURfVEVTVCA9ICdmaW5pc2hlZF90ZXN0
JworICAgIEZJTklTSEVEX0xJU1QgPSAnZmluaXNoZWRfbGlzdCcKKyAgICBFWENFUFRJT04gPSAn
ZXhjZXB0aW9uJworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2FkcyhzdHIpOgorICAg
ICAgICBvYmogPSBjUGlja2xlLmxvYWRzKHN0cikKKyAgICAgICAgYXNzZXJ0KGlzaW5zdGFuY2Uo
b2JqLCBfTWVzc2FnZSkpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3JjLCBkZXN0LCBoZHIs
IGJvZHkpOgorICAgICAgICBzZWxmLnNyYyA9IHNyYworICAgICAgICBzZWxmLmRlc3QgPSBkZXN0
CisgICAgICAgIHNlbGYuaGRyID0gaGRyCisgICAgICAgIHNlbGYuYm9keSA9IGJvZHkKKworICAg
IGRlZiBkdW1wcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGNQaWNrbGUuZHVtcHMoc2VsZikKKwor
CitjbGFzcyBfV29ya2VyU3RhdGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6Cisg
ICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0X3RpbWVvdXQgPSBOb25l
CisgICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorICAgICAgICBzZWxmLndlZGdlZCA9IEZhbHNl
CisgICAgICAgIHNlbGYuZG9uZSA9IEZhbHNlCisKKworY2xhc3MgUm91dGVyKG9iamVjdCk6Cisg
ICAgTUFOQUdFUiA9ICdtYW5hZ2VyJworICAgIEFOWV9XT1JLRVIgPSAnd29ya2VyLVxkKycKKwor
ICAgIElOX01FTU9SWV9SRVBSRVNFTlRBVElPTiA9ICI8aW5fbWVtb3J5PiIKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgbG9hZHMoc3RyKToKKyAgICAgICAgYXNzZXJ0IHN0ciA9PSBSb3V0
ZXIuSU5fTUVNT1JZX1JFUFJFU0VOVEFUSU9OCisgICAgICAgIGdsb2JhbCBfcm91dGVyCisgICAg
ICAgIHJldHVybiBfcm91dGVyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9u
cyk6CisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBv
cHRpb25zCisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dvcmtl
cnMgPSB7fQorICAgICAgICBzZWxmLl9udW1fd29ya2VycyA9IGludChzZWxmLl9vcHRpb25zLmNo
aWxkX3Byb2Nlc3NlcykKKyAgICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1ZSA9IFF1ZXVlLlF1ZXVl
KCkKKyAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlID0gUXVldWUuUXVldWUoKQorCisgICAgZGVm
IGNsZWFudXAoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydF93b3JrZXJzKHNl
bGYpOgorICAgICAgICAiIiJJbnN0YW50aWF0ZXMgYW5kIHN0YXJ0cyB0aGUgVGVzdFNoZWxsVGhy
ZWFkKHMpLiIiIgorICAgICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVsbFRocmVhZHMgYW5kIHN0
YXJ0IHRoZW0uCisgICAgICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShzZWxmLl9udW1f
d29ya2Vycyk6CisgICAgICAgICAgICAjIENyZWF0ZSBzZXBhcmF0ZSBUZXN0VHlwZXMgaW5zdGFu
Y2VzIGZvciBlYWNoIHRocmVhZC4KKyAgICAgICAgICAgIHdvcmtlciA9IF9Xb3JrZXJTdGF0ZSgp
CisKKyAgICAgICAgICAgIHdvcmtlci50aHJlYWQgPSBzZWxmLl9zdGFydF93b3JrZXIod29ya2Vy
X251bWJlcikKKyAgICAgICAgICAgIHdvcmtlci5uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJf
bnVtYmVyCisgICAgICAgICAgICBzZWxmLl93b3JrZXJzW3dvcmtlci5uYW1lXSA9IHdvcmtlcgor
CisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfYmFpbChzZWxmLCBtc2cpOgorICAg
ICAgICBfbG9nLmVycm9yKG1zZykKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCBtc2cKKworICAgIGRl
ZiBzdG9wX3dvcmtlcnMoc2VsZik6CisgICAgICAgICMgRklYTUU6IFNob3VsZCB0aGlzIGJlIGJs
b2NraW5nPworICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYuX3dvcmtlcnMpKToKKyAg
ICAgICAgICAgIHNlbGYucG9zdF9zdG9wKCkKKworICAgIGRlZiBjYW5jZWxfd29ya2VycyhzZWxm
KToKKyAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAg
ICAgICAgd29ya2VyLnRocmVhZC5jYW5jZWwoKQorICAgICAgICBzZWxmLl9wb2xsX21hbmFnZXJf
cXVldWUoc2VsZi5fbWFuYWdlci5nZXROYW1lKCksIHRpbWVvdXQ9MC4wKQorCisgICAgZGVmIHBv
c3RfdGVzdF9saXN0KHNlbGYsIHRlc3RfbGlzdCk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c2Vs
Zi5NQU5BR0VSLCBkZXN0PXNlbGYuQU5ZX1dPUktFUiwKKyAgICAgICAgICAgICAgICAgIGhkcj1f
TWVzc2FnZS5URVNUX0xJU1QsIGJvZHk9dGVzdF9saXN0KQorCisgICAgZGVmIHBvc3Rfc3RhcnRl
ZF90ZXN0KHNlbGYsIHNyYywgdGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpOgorICAgICAgICBzZWxm
Ll9wdXQoc3JjPXNyYywgZGVzdD1zZWxmLk1BTkFHRVIsIGhkcj1fTWVzc2FnZS5TVEFSVEVEX1RF
U1QsCisgICAgICAgICAgICAgICAgICBib2R5PSh0ZXN0X2luZm8sIGhhbmdfdGltZW91dCkpCisK
KyAgICBkZWYgcG9zdF9maW5pc2hlZF9saXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCBudW1fdGVz
dHMsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0PXNlbGYu
TUFOQUdFUiwgaGRyPV9NZXNzYWdlLkZJTklTSEVEX0xJU1QsCisgICAgICAgICAgICAgICAgICBi
b2R5PShsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKSkKKworICAgIGRlZiBwb3N0
X2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc3JjLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAg
IHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0PXNlbGYuTUFOQUdFUiwgaGRyPV9NZXNzYWdlLkZJTklT
SEVEX1RFU1QsCisgICAgICAgICAgICAgICAgICBib2R5PShyZXN1bHQsIGVsYXBzZWRfdGltZSkp
CisKKyAgICBkZWYgcG9zdF9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNfaW5mbyk6CisgICAgICAg
IHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0PXNlbGYuTUFOQUdFUiwgaGRyPV9NZXNzYWdlLkVYQ0VQ
VElPTiwKKyAgICAgICAgICAgICAgICAgIGJvZHk9ZXhjX2luZm8pCisKKyAgICBkZWYgcG9zdF9z
dG9wKHNlbGYpOgorICAgICAgICBzZWxmLl9wdXQoc3JjPXNlbGYuTUFOQUdFUiwgZGVzdD1zZWxm
LkFOWV9XT1JLRVIsCisgICAgICAgICAgICAgICAgICBoZHI9X01lc3NhZ2UuU1RPUCwgYm9keT1O
b25lKQorCisgICAgZGVmIHBvc3RfZG9uZShzZWxmLCB3b3JrZXIpOgorICAgICAgICBzZWxmLl9w
dXQoc3JjPXdvcmtlciwgZGVzdD1zZWxmLk1BTkFHRVIsCisgICAgICAgICAgICAgICAgICBoZHI9
X01lc3NhZ2UuRE9ORSwgYm9keT1Ob25lKQorCisgICAgZGVmIGxvb3Aoc2VsZiwgb2JqKToKKyAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigic3ViY2xhc3MgbXVzdCBpbXBsZW1lbnQg
Um91dGVyLmxvb3AoKSIpCisKKyAgICBkZWYgX3B1dChzZWxmLCBzcmMsIGRlc3QsIGhkciwgYm9k
eSk6CisgICAgICAgIG1zZyA9IF9NZXNzYWdlKHNyYywgZGVzdCwgaGRyLCBib2R5KQorICAgICAg
ICBpZiBtc2cuZGVzdCA9PSBzZWxmLk1BTkFHRVI6CisgICAgICAgICAgICAjIF9sb2cuZGVidWco
IiVzOiBwb3N0aW5nICclcycgbXNnIHRvIG1hbmFnZXIgcXVldWUiICUKKyAgICAgICAgICAgICMg
ICAgICAgICAgICAgKG1zZy5zcmMsIG1zZy5oZHIpKQorICAgICAgICAgICAgc2VsZi5fbWFuYWdl
cl9xdWV1ZS5wdXQobXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBfbG9nLmRlYnVn
KCIlczogcG9zdGluZyAnJXMnIG1zZyB0byB3b3JrZXIgcXVldWUiICUKKyAgICAgICAgICAgICMg
ICAgICAgICAgICAgKG1zZy5zcmMsIG1zZy5oZHIpKQorICAgICAgICAgICAgc2VsZi5fd29ya2Vy
X3F1ZXVlLnB1dChtc2cpCisKKyAgICBkZWYgX2dldChzZWxmLCBuYW1lLCBxdWV1ZSwgYmxvY2ss
IHRpbWVvdXQpOgorICAgICAgICBpZiBxdWV1ZSA9PSBzZWxmLl9tYW5hZ2VyX3F1ZXVlOgorICAg
ICAgICAgICAgcXVldWVfbmFtZSA9ICJtYW5hZ2VyIHF1ZXVlIgorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcXVldWVfbmFtZSA9ICJ3b3JrZXIgcXVldWUiCisKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgI19sb2cuZGVidWcoIiVzIG5hbWUgcmVhZGluZyBmcm9tICVzIHF1ZXVlIiAlIChu
YW1lLCBxdWV1ZV9uYW1lKSkKKyAgICAgICAgICAgIG1zZyA9IHF1ZXVlLmdldChibG9jaywgdGlt
ZW91dCkKKyAgICAgICAgICAgICNfbG9nLmRlYnVnKCIlcyBnb3QgJyVzJyBtc2cgZnJvbSAlcyIg
JSAobmFtZSwgbXNnLmhkciwgbXNnLnNyYykpCisgICAgICAgICAgICByZXR1cm4gbXNnCisgICAg
ICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICNfbG9nLmRlYnVnKCIlcyBmb3Vu
ZCAlcyBlbXB0eSIgJSAobmFtZSwgcXVldWVfbmFtZSkpCisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgZGVmIF9wb2xsX21hbmFnZXJfcXVldWUoc2VsZiwgbmFtZSwgdGltZW91dCk6Cisg
ICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIE5vdGUgdGhhdCBibG9jaz1UcnVlLCB0
aW1lb3V0PTAgaXMgZXF1aXZhbGVudCB0byBibG9jaz1GYWxzZS4KKyAgICAgICAgICAgIG1zZyA9
IHNlbGYuX2dldChuYW1lLCBzZWxmLl9tYW5hZ2VyX3F1ZXVlLCBUcnVlLCB0aW1lb3V0KQorICAg
ICAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAg
ICBpZiBtc2cuaGRyID09IF9NZXNzYWdlLlNUQVJURURfVEVTVDoKKyAgICAgICAgICAgICAgICBz
ZWxmLl9oYW5kbGVfc3RhcnRlZF90ZXN0KG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9
PSBfTWVzc2FnZS5GSU5JU0hFRF9URVNUOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9m
aW5pc2hlZF90ZXN0KG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5G
SU5JU0hFRF9MSVNUOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9maW5pc2hlZF9saXN0
KG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5ET05FOgorICAgICAg
ICAgICAgICAgIHNlbGYuX2hhbmRsZV9kb25lKG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhk
ciA9PSBfTWVzc2FnZS5FWENFUFRJT046CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V4
Y2VwdGlvbihtc2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2Jh
aWwoJ3VuZXhwZWN0ZWQgbWVzc2FnZSB0eXBlIG9uIG1hbmFnZXIgcXVldWU6ICVzJyAlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtc2cuaGRyKQorCisgICAgZGVmIF9wb2xsX3dvcmtlcl9x
dWV1ZShzZWxmLCB3b3JrZXIsIHBvbGxfbWFuYWdlcik6CisgICAgICAgIHdoaWxlIG5vdCB3b3Jr
ZXIuaXNfZG9uZSgpOgorICAgICAgICAgICAgbXNnID0gc2VsZi5fZ2V0KHdvcmtlci5nZXROYW1l
KCksIHNlbGYuX3dvcmtlcl9xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qg
cG9sbF9tYW5hZ2VyLCBOb25lKQorICAgICAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAg
ICAgICBpZiBub3QgcG9sbF9tYW5hZ2VyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9iYWls
KCclcyB1bmV4cGVjdGVkbHkgcmFuIG91dCBvZiBxdWV1ZWQgbWVzc2FnZXMnICUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIuZ2V0TmFtZSgpKQorICAgICAgICAgICAgICAg
IGJyZWFrCisKKyAgICAgICAgICAgIGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuU1RPUDoKKyAgICAg
ICAgICAgICAgICBzZWxmLl9oYW5kbGVfc3RvcCh3b3JrZXIpCisgICAgICAgICAgICBlbGlmIG1z
Zy5oZHIgPT0gX01lc3NhZ2UuVEVTVF9MSVNUOgorICAgICAgICAgICAgICAgIChsaXN0X25hbWUs
IHRlc3RfbGlzdCkgPSBtc2cuYm9keQorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV90ZXN0
X2xpc3Qod29ya2VyLCBsaXN0X25hbWUsIHRlc3RfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvbGxfbWFuYWdlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgc2VsZi5fYmFpbCgnJXM6IHVuZXhwZWN0ZWQgbWVzc2FnZSB0eXBlIG9uIHdv
cmtlciBxdWV1ZTogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXIuZ2V0
TmFtZSgpLCBtc2cuaGRyKSkKKworICAgIGRlZiBfaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBt
c2cpOgorICAgICAgICAodGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpID0gbXNnLmJvZHkKKyAgICAg
ICAgd29ya2VyID0gc2VsZi5fd29ya2Vyc1ttc2cuc3JjXQorICAgICAgICB3b3JrZXIuY3VycmVu
dF90ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbmZv
LmZpbGVuYW1lKQorICAgICAgICB3b3JrZXIubmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyBo
YW5nX3RpbWVvdXQKKworICAgIGRlZiBfaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgbXNnKToK
KyAgICAgICAgKHJlc3VsdCwgZWxhcHNlZF90aW1lKSA9IG1zZy5ib2R5CisgICAgICAgIHdvcmtl
ciA9IHNlbGYuX3dvcmtlcnNbbXNnLnNyY10KKyAgICAgICAgd29ya2VyLm5leHRfdGltZW91dCA9
IE5vbmUKKyAgICAgICAgd29ya2VyLmN1cnJlbnRfdGVzdCA9IE5vbmUKKworICAgICAgICBpZiB3
b3JrZXIud2VkZ2VkOgorICAgICAgICAgICAgIyBIbW0uIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4K
KyAgICAgICAgICAgIF9sb2cuZXJyb3IoIiVzIHVud2VkZ2VkIiwgd29ya2VyLmdldE5hbWUoKSkK
KworICAgICAgICBzZWxmLl9tYW5hZ2VyLmhhbmRsZV9maW5pc2hlZF90ZXN0KG1zZy5zcmMsIHJl
c3VsdCwgZWxhcHNlZF90aW1lKQorCisgICAgZGVmIF9oYW5kbGVfZmluaXNoZWRfbGlzdChzZWxm
LCBtc2cpOgorICAgICAgICAobGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkgPSBt
c2cuYm9keQorICAgICAgICBzZWxmLl9tYW5hZ2VyLmhhbmRsZV9maW5pc2hlZF9saXN0KG1zZy5z
cmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX2hhbmRsZV9leGNlcHRpb24o
c2VsZiwgbXNnKToKKyAgICAgICAgZXhjZXB0aW9uX2luZm8gPSBtc2cuYm9keQorICAgICAgICBz
ZWxmLl9tYW5hZ2VyLmhhbmRsZV9leGNlcHRpb24obXNnLnNyYywgZXhjZXB0aW9uX2luZm8pCisK
KyAgICBkZWYgX2hhbmRsZV9zdG9wKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHdvcmtlci5oYW5k
bGVfc3RvcCgpCisKKyAgICBkZWYgX2hhbmRsZV9kb25lKHNlbGYsIG1zZyk6CisgICAgICAgIHdv
cmtlciA9IHNlbGYuX3dvcmtlcnNbbXNnLnNyY10KKyAgICAgICAgd29ya2VyLmRvbmUgPSBUcnVl
CisgICAgICAgICMgX2xvZy5kZWJ1ZygiJXMgaXMgZG9uZSIgJSB3b3JrZXIubmFtZSkKKyAgICAg
ICAgc2VsZi5fbWFuYWdlci5oYW5kbGVfZG9uZShtc2cuc3JjKQorCisgICAgZGVmIF9oYW5kbGVf
dGVzdF9saXN0KHNlbGYsIHdvcmtlciwgbGlzdF9uYW1lLCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdl
cik6CisgICAgICAgIHdvcmtlci5oYW5kbGVfdGVzdF9saXN0KGxpc3RfbmFtZSwgdGVzdF9saXN0
LCBwb2xsX21hbmFnZXIpCisKKyAgICBkZWYgX2xvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtl
cik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBTaW5nbGVU
aHJlYWRlZFJvdXRlcihSb3V0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRp
b25zKToKKyAgICAgICAgUm91dGVyLl9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpCisgICAg
ICAgICMgRklYTUU6IENvdWxkIHVzZSBmYWtlIHF1ZXVlcyBoZXJlLgorICAgICAgICBzZWxmLl9t
YW5hZ2VyX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLl93b3JrZXJfcXVldWUg
PSBRdWV1ZS5RdWV1ZSgpCisKKyAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVt
YmVyKToKKyAgICAgICAgIyBGSVhNRTogVXNlIFdvcmtlclRodW5rIGluc3RlYWQgLi4uCisgICAg
ICAgIHRodW5rID0gX1dvcmtlclRocmVhZChzZWxmLCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5X
b3JrZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfbnVtYmVyKQorICAg
ICAgICByZXR1cm4gdGh1bmsKKworICAgIGRlZiBsb29wKHNlbGYsIG1hbmFnZXIpOgorICAgICAg
ICBzZWxmLl9tYW5hZ2VyID0gbWFuYWdlcgorICAgICAgICB3b3JrZXIgPSBzZWxmLl93b3JrZXJz
Wyd3b3JrZXItMCddCisgICAgICAgIHNlbGYuX3BvbGxfd29ya2VyX3F1ZXVlKHdvcmtlci50aHJl
YWQsIHBvbGxfbWFuYWdlcj1UcnVlKQorCisgICAgZGVmIF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxm
LCB3b3JrZXIpOgorICAgICAgICBhc3NlcnQgRmFsc2UsICJTaW5nbGVUaHJlYWRlZFJvdXRlci5f
bG9nX3dlZGdlZF93b3JrZXIoKSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIgorCisKK2NsYXNzIE11
bHRpVGhyZWFkZWRSb3V0ZXIoU2luZ2xlVGhyZWFkZWRSb3V0ZXIpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0LCBvcHRpb25zKToKKyAgICAgICAgU2luZ2xlVGhyZWFkZWRSb3V0ZXIuX19p
bml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucykKKworICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYs
IHdvcmtlcl9udW1iZXIpOgorICAgICAgICB0aHVuayA9IF9Xb3JrZXJUaHJlYWQoc2VsZiwgZHVt
cF9yZW5kZXJfdHJlZV90aHJlYWQuV29ya2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd29ya2VyX251bWJlcikKKyAgICAgICAgdGh1bmsuc3RhcnQoKQorICAgICAgICByZXR1cm4g
dGh1bmsKKworICAgIGRlZiBsb29wKHNlbGYsIG9iaik6CisgICAgICAgIGlmIG9iai5nZXROYW1l
KCkgPT0gc2VsZi5NQU5BR0VSOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xvb3BfbWFuYWdl
cihvYmopCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbG9vcF93b3Jr
ZXIob2JqKQorCisgICAgZGVmIF9sb29wX21hbmFnZXIoc2VsZiwgbWFuYWdlcik6CisgICAgICAg
IHNlbGYuX21hbmFnZXIgPSBtYW5hZ2VyCisgICAgICAgIHNlbGYuX3BvbGxfbWFuYWdlcl9xdWV1
ZShtYW5hZ2VyLmdldE5hbWUoKSwgdGltZW91dD0wLjAxKQorICAgICAgICB3aGlsZSBub3Qgc2Vs
Zi5fY2hlY2tfb25fd29ya2VycygpOgorICAgICAgICAgICAgc2VsZi5fcG9sbF9tYW5hZ2VyX3F1
ZXVlKG1hbmFnZXIuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMDEpCisKKyAgICAgICAgZm9yIHcgaW4g
c2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgIGFzc2VydCB3LndlZGdlZCBvciBu
b3Qgdy50aHJlYWQuaXNfYWxpdmUoKQorCisgICAgZGVmIF9sb29wX3dvcmtlcihzZWxmLCB3b3Jr
ZXIpOgorICAgICAgICB3aGlsZSBub3Qgd29ya2VyLmlzX2RvbmUoKToKKyAgICAgICAgICAgIHNl
bGYuX3BvbGxfd29ya2VyX3F1ZXVlKHdvcmtlciwgcG9sbF9tYW5hZ2VyPUZhbHNlKQorCisgICAg
ZGVmIF9jaGVja19vbl93b3JrZXJzKHNlbGYpOgorICAgICAgICAiUmV0dXJucyB0cnVlIGlmZiBh
bGwgdGhlIHdvcmtlcnMgaGF2ZSBlaXRoZXIgY29tcGxldGVkIG9yIHdlZGdlZC4iCisgICAgICAg
IGRvbmUgPSBUcnVlCisgICAgICAgIHQgPSB0aW1lLnRpbWUoKQorICAgICAgICBmb3Igd29ya2Vy
IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBub3Qgd29ya2VyLmRv
bmUgYW5kIG5vdCB3b3JrZXIud2VkZ2VkOgorICAgICAgICAgICAgICAgIG5leHRfdGltZW91dCA9
IHdvcmtlci5uZXh0X3RpbWVvdXQKKyAgICAgICAgICAgICAgICBpZiAobmV4dF90aW1lb3V0IGFu
ZCB0ID4gbmV4dF90aW1lb3V0KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9nX3dlZGdl
ZF93b3JrZXIod29ya2VyLndvcmtlcikKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyLndlZGdl
ZCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIF9s
b2cuZGVidWcoIiVzIGlzIG5vdCBkb25lIiAlIHdvcmtlci5uYW1lKQorICAgICAgICAgICAgICAg
ICAgICBkb25lID0gRmFsc2UKKworICAgICAgICBpZiBkb25lIGFuZCBhbnkoW3cud2VkZ2VkIGZv
ciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCldKToKKyAgICAgICAgICAgIF9sb2cuZXJyb3Io
JycpCisgICAgICAgICAgICBfbG9nLmVycm9yKCdSZW1haW5pbmcgd29ya2VycyBhcmUgd2VkZ2Vk
LCBiYWlsaW5nIG91dC4nKQorICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgZWxp
ZiBkb25lOgorICAgICAgICAgICAgX2xvZy5pbmZvKCdObyB3ZWRnZWQgdGhyZWFkcycpCisKKyAg
ICAgICAgcmV0dXJuIGRvbmUKKworICAgIGRlZiBfbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgd29y
a2VyKToKKyAgICAgICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0aHJlYWQg
c3RhdGUuIiIiCisgICAgICAgIGlkID0gd29ya2VyLnRocmVhZC5pZCgpCisgICAgICAgIHN0YWNr
ID0gc2VsZi5fZmluZF90aHJlYWRfc3RhY2soaWQpCisgICAgICAgIGFzc2VydChzdGFjayBpcyBu
b3QgTm9uZSkKKyAgICAgICAgX2xvZy5lcnJvcigiIikKKyAgICAgICAgX2xvZy5lcnJvcigiJXMg
KHRpZCAlZCkgaXMgd2VkZ2VkIG9uIHRlc3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAod29y
a2VyLnRocmVhZC5nZXROYW1lKCksIGlkLCB3b3JrZXIuY3VycmVudF90ZXN0X25hbWUpKQorICAg
ICAgICBzZWxmLl9sb2dfc3RhY2soc3RhY2spCisgICAgICAgIF9sb2cuZXJyb3IoIiIpCisKKyAg
ICBkZWYgX2ZpbmRfdGhyZWFkX3N0YWNrKHNlbGYsIGlkKToKKyAgICAgICAgIiIiUmV0dXJucyBh
IHN0YWNrIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGR1bXAgYSBzdGFjayB0cmFjZSBmb3IK
KyAgICAgICAgdGhlIGdpdmVuIHRocmVhZCBpZCAob3IgTm9uZSBpZiB0aGUgaWQgaXMgbm90IGZv
dW5kKS4iIiIKKyAgICAgICAgZm9yIHRocmVhZF9pZCwgc3RhY2sgaW4gc3lzLl9jdXJyZW50X2Zy
YW1lcygpLml0ZW1zKCk6CisgICAgICAgICAgICBpZiB0aHJlYWRfaWQgPT0gaWQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YWNrCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2xv
Z19zdGFjayhzZWxmLCBzdGFjayk6CisgICAgICAgICIiIkxvZyBhIHN0YWNrIHRyYWNlIHRvIGxv
Zy5lcnJvcigpLiIiIgorICAgICAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBp
biB0cmFjZWJhY2suZXh0cmFjdF9zdGFjayhzdGFjayk6CisgICAgICAgICAgICBfbG9nLmVycm9y
KCdGaWxlOiAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkp
CisgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJXMn
ICUgbGluZS5zdHJpcCgpKQorCisKK2NsYXNzIE11bHRpUHJvY2Vzc1JvdXRlcihNdWx0aVRocmVh
ZGVkUm91dGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAg
ICAgIFJvdXRlci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKQorICAgICAgICBzZWxmLl9t
YW5hZ2VyX3F1ZXVlID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fd29y
a2VyX3F1ZXVlID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKworICAgIGRlZiBfc3RhcnRfd29y
a2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICB0aHVuayA9IF9Xb3JrZXJQcm9jZXNz
KHNlbGYsIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldvcmtlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3b3JrZXJfbnVtYmVyKQorICAgICAgICB0aHVuay5zdGFydCgpCisgICAg
ICAgIHJldHVybiB0aHVuaworCisgICAgZGVmIHBvc3RfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhj
ZXB0aW9uX2luZm8pOgorICAgICAgICAjIEZJWE1FOiBXZSBjYW4ndCBwaWNrbGUgdHJhY2ViYWNr
IG9iamVjdHMsIHNvIGxvZyB0aGUgdHJhY2ViYWNrIGhlcmUuCisgICAgICAgIG1wX2V4Y19pbmZv
ID0gKGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgTm9uZSkKKyAgICAgICAg
TXVsdGlUaHJlYWRlZFJvdXRlci5wb3N0X2V4Y2VwdGlvbihzZWxmLCBzcmMsIG1wX2V4Y19pbmZv
KQorCisgICAgZGVmIF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICBp
ZCA9IHdvcmtlci50aHJlYWQuaWQoKQorICAgICAgICBfbG9nLmVycm9yKCIiKQorICAgICAgICBf
bG9nLmVycm9yKCIlcyAocGlkICVkKSBpcyB3ZWRnZWQgb24gdGVzdCAlcyIgJQorICAgICAgICAg
ICAgICAgICAgICh3b3JrZXIudGhyZWFkLmdldE5hbWUoKSwgaWQsIHdvcmtlci5jdXJyZW50X3Rl
c3RfbmFtZSkpCisgICAgICAgIF9sb2cuZXJyb3IoIiIpCisKKworY2xhc3MgX1dvcmtlclRodW5r
KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdXRlciwgd29ya2VyX2NsYXNzLCB3
b3JrZXJfbnVtYmVyKToKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25lCisgICAg
ICAgIHNlbGYuX3JvdXRlciA9IHJvdXRlcgorICAgICAgICBzZWxmLl9vcHRpb25zID0gcm91dGVy
Ll9vcHRpb25zCisgICAgICAgIHNlbGYuX3BvcnQgPSByb3V0ZXIuX3BvcnQKKyAgICAgICAgc2Vs
Zi5fY2FuY2VsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisgICAgICAg
IHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKKyAgICAgICAgc2VsZi5faWQgPSAwCisgICAg
ICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX3dv
cmtlciA9IHdvcmtlcl9jbGFzcyhzZWxmLl9wb3J0LCBzZWxmLCBzZWxmLl9vcHRpb25zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX251bWJlcikKKworICAgIGRl
ZiBpZChzZWxmKToKKyAgICAgICAgIyB1c2VkIGR1cmluZyBsb2dfd2VkZ2VkX3dvcmtlcgorICAg
ICAgICByZXR1cm4gc2VsZi5faWQKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNl
bGYuX2NhbmNlbGxlZCA9IFRydWUKKworICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fZG9uZSBvciBzZWxmLl9jYW5jZWxsZWQKKworICAgIGRlZiBoYW5kbGVfc3Rv
cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBz
ZWxmLl9yZWxlYXNlX2xvY2soKQorICAgICAgICBzZWxmLl93b3JrZXIuaGFuZGxlX3N0b3AoKQor
ICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV90ZXN0X2xpc3Qoc2Vs
ZiwgbGlzdF9uYW1lLCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdlcik6CisgICAgICAgIGlmIGxpc3Rf
bmFtZSA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKKyAgICAgICAgICAgIHNlbGYuX2FjcXVpcmVf
bG9jaygpCisgICAgICAgIGVsaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBz
ZWxmLl9yZWxlYXNlX2xvY2soKQorCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQor
ICAgICAgICBudW1fdGVzdHMgPSAwCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RfbGlzdDoKKyAg
ICAgICAgICAgIHNlbGYuX3dvcmtlci5ydW5fdGVzdCh0ZXN0KQorICAgICAgICAgICAgbnVtX3Rl
c3RzICs9IDEKKworICAgICAgICAgICAgIyBGSVhNRTogTmVlZCB0byBnZXQgcmlkIG9mIHRoaXMu
CisgICAgICAgICAgICBpZiBwb2xsX21hbmFnZXI6CisgICAgICAgICAgICAgICAgc2VsZi5fcm91
dGVyLl9wb2xsX21hbmFnZXJfcXVldWUoc2VsZi5nZXROYW1lKCksIHRpbWVvdXQ9MC4wKQorCisg
ICAgICAgICAgICBpZiBzZWxmLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCisKKyAgICAgICAg
aWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9yZWxlYXNlX2xvY2so
KQorCisgICAgICAgIHNlbGYuX3JvdXRlci5wb3N0X2ZpbmlzaGVkX2xpc3Qoc2VsZi5nZXROYW1l
KCksIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAg
IHBhc3MKKworICAgIGRlZiBzdGFydGVkX3Rlc3Qoc2VsZiwgdGVzdF9pbmZvLCBodW5nX3RocmVh
ZF90aW1lb3V0KToKKyAgICAgICAgc2VsZi5fcm91dGVyLnBvc3Rfc3RhcnRlZF90ZXN0KHNlbGYu
Z2V0TmFtZSgpLCB0ZXN0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBodW5nX3RocmVhZF90aW1lb3V0KQorCisgICAgZGVmIGZpbmlzaGVkX3Rlc3Qoc2VsZiwg
cmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9yb3V0ZXIucG9zdF9maW5pc2hl
ZF90ZXN0KHNlbGYuZ2V0TmFtZSgpLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBf
YWNxdWlyZV9sb2NrKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJpbmcgaHR0cCBs
b2NrIC4uLicpCisgICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQorICAgICAg
ICBfbG9nLmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9w
b3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgV2Vi
U29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9z
ZXJ2ZXIoKQorICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRydWUKKworICAgIGRlZiBf
cmVsZWFzZV9sb2NrKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHRoZSBzZXJ2ZXJzIGFuZCByZWxl
YXNlIGh0dHAgbG9jay4iIiIKKyAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAg
ICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICAg
ICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cuZGVidWco
J1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQu
c3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsZWFzZV9o
dHRwX2xvY2soKQorICAgICAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxzZQorCisg
ICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5faWQgPSBzZWxmLl9nZXRfaWQoKQorICAg
ICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiIgorICAgICAg
ICBfbG9nLmRlYnVnKCclcyBzdGFydGluZycgJSBuYW1lKQorCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHNlbGYuX3JvdXRlci5sb29wKHNlbGYpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZElu
dGVycnVwdDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBpbnRlcnJ1cHRlZCIKKyAg
ICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGV4Y2VwdGlvbiBy
YWlzZWQiCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBkb25l
JXMiICUgKG5hbWUsIGV4Y2VwdGlvbl9tc2cpKQorICAgICAgICAgICAgaWYgZXhjZXB0aW9uX21z
ZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygp
CisgICAgICAgICAgICAgICAgc2VsZi5fcm91dGVyLnBvc3RfZXhjZXB0aW9uKHNlbGYuZ2V0TmFt
ZSgpLCBzZWxmLl9leGNlcHRpb25faW5mbykKKyAgICAgICAgICAgIHNlbGYuX3JvdXRlci5wb3N0
X2RvbmUobmFtZSkKKworICAgICAgICBhc3NlcnQgZXhjZXB0aW9uX21zZyBvciBzZWxmLl9kb25l
IG9yIHNlbGYuX2NhbmNlbGxlZCwgImV4aXRpbmcgdW5leHBlY3RlZGx5IgorCisKK2NsYXNzIF9X
b3JrZXJUaHJlYWQoX1dvcmtlclRodW5rLCB0aHJlYWRpbmcuVGhyZWFkKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcm91dGVyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpOgorICAgICAg
ICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJUaHVuay5f
X2luaXRfXyhzZWxmLCByb3V0ZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcikKKyAgICAg
ICAgc2VsZi5uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisKKyAgICBkZWYgaWQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pZAorCisgICAgZGVmIF9nZXRfaWQoc2VsZik6
CisgICAgICAgIHJldHVybiB0aHJlYWQuZ2V0X2lkZW50KCkKKworICAgIGRlZiBjYW5jZWwoc2Vs
Zik6CisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKKworICAgIGRlZiBzdGFydChzZWxm
KToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5zdGFydChzZWxmKQorCisKK2NsYXNzIF9Xb3Jr
ZXJQcm9jZXNzKF9Xb3JrZXJUaHVuaywgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCByb3V0ZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcik6Cisg
ICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLl9faW5pdF9fKHNlbGYpCisgICAgICAgIF9X
b3JrZXJUaHVuay5fX2luaXRfXyhzZWxmLCByb3V0ZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251
bWJlcikKKyAgICAgICAgc2VsZi5uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisK
KyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGZpZ3VyZSBvdXQgaWYgdGhpcyBu
ZWVkcyB0byBiZSBhd2FyZSBvZiBwYXJlbnQvY2hpbGQKKyAgICAgICAgcmV0dXJuIHNlbGYucGlk
CisKKyAgICBkZWYgX2dldF9pZChzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLmdldHBpZCgpCisK
KyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBUcnVlCisg
ICAgICAgIHNlbGYudGVybWluYXRlKCkKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAg
bXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muc3RhcnQoc2VsZikKKworICAgIGRlZiBnZXROYW1lKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9yb3V0ZXJfdW5pdHRl
c3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9yb3V0ZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGFhOWNjMzc0Y2NhYWQwOGZk
ZGRiMTU2NWNiYWY0MDQ1M2VkMDg5ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3JvdXRlcl91bml0dGVz
dC5weQpAQCAtMCwwICsxLDExOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHku
dGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCitpbXBvcnQgUXVldWUKK2ltcG9ydCB1bml0dGVz
dAorCitmcm9tIHJvdXRlciBpbXBvcnQgKgorCisKK2NsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgorICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0YWNrX2ZvdW5kKHNlbGYpOgorICAgICAg
ICAjIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcmV0dXJuCisgICAgICAgIGlkLCBzdGFjayA9
IHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpWzBdCisgICAgICAgIGZvdW5kX3N0YWNrID0g
ZmluZF90aHJlYWRfc3RhY2soaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZm91bmRf
c3RhY2ssIE5vbmUpCisKKyAgICBkZWYgdGVzdF9maW5kX3RocmVhZF9zdGFja19ub3RfZm91bmQo
c2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudAorICAgICAgICByZXR1cm4KKyAgICAg
ICAgZm91bmRfc3RhY2sgPSBmaW5kX3RocmVhZF9zdGFjaygwKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQorCisKK2NsYXNzIFdhaXRGb3JUaHJlYWRzVG9GaW5p
c2hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgcnVuX29uZV90aHJlYWQoc2VsZiwg
bXNnKToKKyAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHN0
b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBjaGlsZF90aHJlYWQgPSBUZXN0
VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKKyAgICAgICAgY2hpbGRfdGhy
ZWFkLnN0YXJ0KCkKKyAgICAgICAgc3RhcnRlZF9tc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQor
ICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQobXNnKQorICAgICAgICB0aHJlYWRzID0gW2NoaWxk
X3RocmVhZF0KKyAgICAgICAgcmV0dXJuIHJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5p
c2godGhyZWFkcywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICAj
IEZJWE1FOiBpbXBsZW1lbnQKKyAgICAgICAgcmV0dXJuCisgICAgICAgIGludGVycnVwdGVkID0g
c2VsZi5ydW5fb25lX3RocmVhZCgnJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1
cHRlZCkKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdChzZWxmKToKKyAgICAgICAgIyBGSVhNRTog
aW1wbGVtZW50LgorICAgICAgICByZXR1cm4KKyAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1
bl9vbmVfdGhyZWFkKCcnKQorICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJl
YWQoJ0tleWJvYXJkSW50ZXJydXB0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludGVycnVw
dGVkKQorCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1w
bGVtZW50LgorICAgICAgICByZXR1cm4KKyAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9v
bmVfdGhyZWFkKCcnKQorICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgp
CisgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKKyAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxm
LnJ1bl9vbmVfdGhyZWFkKCdUaW1lb3V0JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRl
cnJ1cHRlZCkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQorCisgICAgZGVmIHRlc3RfZXhj
ZXB0aW9uKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQuCisgICAgICAgIHJldHVy
bgorICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJycpCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYucnVuX29uZV90aHJlYWQsICdFeGNl
cHRpb24nKQorCisKK2NsYXNzIFN0YW5kYWxvbmVGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKKyAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3RocmVhZChzZWxmKToKKyAgICAgICAgIyBG
SVhNRTogaW1wbGVtZW50CisgICAgICAgIHJldHVybgorICAgICAgICBvYyA9IG91dHB1dGNhcHR1
cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKKyAgICAgICAg
bG9nZ2VyID0gcnVuX3dlYmtpdF90ZXN0cy5fbG9nCisgICAgICAgIGFzdHJlYW0gPSBhcnJheV9z
dHJlYW0uQXJyYXlTdHJlYW0oKQorICAgICAgICBoYW5kbGVyID0gVGVzdEhhbmRsZXIoYXN0cmVh
bSkKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKworICAgICAgICBzdGFydGlu
Z19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5R
dWV1ZSgpCisgICAgICAgIGNoaWxkX3RocmVhZCA9IFRlc3RUaHJlYWQoc3RhcnRpbmdfcXVldWUs
IHN0b3BwaW5nX3F1ZXVlKQorICAgICAgICBjaGlsZF90aHJlYWQuc3RhcnQoKQorICAgICAgICBt
c2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQorCisgICAgICAgIHJ1bl93ZWJraXRfdGVzdHMuX2xv
Z193ZWRnZWRfdGhyZWFkKGNoaWxkX3RocmVhZCkKKyAgICAgICAgc3RvcHBpbmdfcXVldWUucHV0
KCcnKQorICAgICAgICBjaGlsZF90aHJlYWQuam9pbih0aW1lb3V0PTEuMCkKKworICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKGFzdHJlYW0uZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShjaGlsZF90aHJlYWQuaXNBbGl2ZSgpKQorICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCisK
KworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hy
b21pdW1fbWFjLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV9tYWMucHkKaW5kZXggZDFjMzgzYzEzZWMyZjEzYWY1ZmIxZjE1NDA1Nzlj
NGM4ODlmZGQ2My4uN2Q3MDRjM2E4OWFmNTRhZDBkYWYwNzQ4YjRkODg5YTYyMmFjZTRjZCAxMDA2
NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV9tYWMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKQEAgLTYyLDE1ICs2Miw2IEBAIGNsYXNzIENocm9t
aXVtTWFjUG9ydChjaHJvbWl1bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICAgICAgICAgICAgICAg
ICAnTWFjQnVpbGRJbnN0cnVjdGlvbnMnKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBk
ZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IHdlIG5l
ZWQgdG8gcnVuIHNpbmdsZS10aHJlYWRlZCBmb3Igbm93LiBTZWUKLSAgICAgICAgIyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg1NTMuIFVuZm9ydHVuYXRlbHkgdGhp
cwotICAgICAgICAjIHJvdXRpbmUgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSB0aGUgbG9nZ2VyIGlz
IGNvbmZpZ3VyZWQsIHNvIGlmIHdlCi0gICAgICAgICMgdHJ5IHRvIF9sb2cud2FybmluZygpLCBp
dCBnZXRzIHRocm93biBhd2F5LgotICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIHN5cy5zdGRl
cnIud3JpdGUoIkRlZmF1bHRpbmcgdG8gb25lIGNoaWxkIC0gc2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODU1M1xuIikKLSAgICAgICAgcmV0dXJuIDEKLQogICAg
IGRlZiBkcml2ZXJfbmFtZShzZWxmKToKICAgICAgICAgIiIibmFtZSBmb3IgdGhpcyBwb3J0J3Mg
ZXF1aXZhbGVudCBvZiBEdW1wUmVuZGVyVHJlZS4iIiIKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0
aW9uKCd1c2VfZHJ0Jyk6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L21hYy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CmluZGV4IDY5NmUzMzk4ZWE0YjI4YWM3NjIyNTkwN2Rj
MzYyZmZjM2ZiODZmOWUuLjcyZjkxZDgzODIxNWFmNGJjNDRmMWRjMWYwNjU1ZGFkYzdkMzM2ZmYg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvbWFjLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvbWFjLnB5CkBAIC00NywxNSArNDcsNiBAQCBjbGFzcyBNYWNQb3J0KFdlYktpdFBvcnQp
OgogICAgICAgICBrd2FyZ3Muc2V0ZGVmYXVsdCgncG9ydF9uYW1lJywgJ21hYycgKyBzZWxmLnZl
cnNpb24oKSkKICAgICAgICAgV2ViS2l0UG9ydC5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKIAot
ICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTog
bmV3LXJ1bi13ZWJraXQtdGVzdHMgaXMgdW5zdGFibGUgb24gTWFjIHJ1bm5pbmcgbW9yZSB0aGFu
Ci0gICAgICAgICMgZm91ciB0aHJlYWRzIGluIHBhcmFsbGVsLgotICAgICAgICAjIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY2MjIKLSAgICAgICAgY2hpbGRf
cHJvY2Vzc2VzID0gV2ViS2l0UG9ydC5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKQotICAg
ICAgICBpZiBjaGlsZF9wcm9jZXNzZXMgPiA0OgotICAgICAgICAgICAgcmV0dXJuIDQKLSAgICAg
ICAgcmV0dXJuIGNoaWxkX3Byb2Nlc3NlcwotCiAgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRo
KHNlbGYpOgogICAgICAgICBwb3J0X25hbWVzID0gW10KICAgICAgICAgaWYgc2VsZi5fbmFtZSA9
PSAnbWFjLXRpZ2VyJzoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IGIzN2ZhMWViZjJi
YjMyMTFkNTIyOTRiNWQ4ODE1ZWZiOTU0ZTM2ZWYuLjk2YjkwMzk2YTE5YjQyZGY0ZjhhODE1Yzdm
MTIxYzlhNWFjYTc1MzUgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNjcsNiArNjcs
NyBAQCBpbXBvcnQgdHJhY2ViYWNrCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBkdW1wX3Jl
bmRlcl90cmVlX3RocmVhZAogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9sYXlvdXRf
cmVzdWx0c19nZW5lcmF0b3IKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCitm
cm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCByb3V0ZXIKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1w
b3J0IHRlc3RfZXhwZWN0YXRpb25zCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2Zh
aWx1cmVzCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKQEAgLTE1MSw2
ICsxNTIsNyBAQCBjbGFzcyBSZXN1bHRTdW1tYXJ5KG9iamVjdCk6CiAgICAgICAgICAgICBzZWxm
LnVuZXhwZWN0ZWQgKz0gMQogCiAKKwogZGVmIHN1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMo
cG9ydF9vYmosIGV4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXRyeV9zdW1tYXJ5KToKICAgICAiIiJTdW1tYXJpemUgYW55IHVu
ZXhwZWN0ZWQgcmVzdWx0cyBhcyBhIGRpY3QuCkBAIC0yNDAsMzMgKzI0MiwzMiBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICMgaW4gRHVtcFJlbmRlclRyZWUuCiAgICAgREVGQVVMVF9URVNUX1RJ
TUVPVVRfTVMgPSA2ICogMTAwMAogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlv
bnMsIHByaW50ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmlu
dGVyLCByb3V0ZXIpOgogICAgICAgICAiIiJJbml0aWFsaXplIHRlc3QgcnVubmVyIGRhdGEgc3Ry
dWN0dXJlcy4KIAogICAgICAgICBBcmdzOgogICAgICAgICAgIHBvcnQ6IGFuIG9iamVjdCBpbXBs
ZW1lbnRpbmcgcG9ydC1zcGVjaWZpYwogICAgICAgICAgIG9wdGlvbnM6IGEgZGljdGlvbmFyeSBv
ZiBjb21tYW5kIGxpbmUgb3B0aW9ucwogICAgICAgICAgIHByaW50ZXI6IGEgUHJpbnRlciBvYmpl
Y3QgdG8gcmVjb3JkIHVwZGF0ZXMgdG8uCisgICAgICAgICAgcm91dGVyOiBvYmplY3QgdXNlZCB0
byBjb21tdW5pY2F0ZSB3LyB3b3JrZXJzLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fcG9y
dCA9IHBvcnQKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5f
cHJpbnRlciA9IHByaW50ZXIKKyAgICAgICAgc2VsZi5fcm91dGVyID0gcm91dGVyCiAKICAgICAg
ICAgIyBkaXNhYmxlIHdzcyBzZXJ2ZXIuIG5lZWQgdG8gaW5zdGFsbCBweU9wZW5TU0wgb24gYnVp
bGRib3RzLgogICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVyID0gd2Vic29j
a2V0X3NlcnZlci5QeVdlYlNvY2tldCgKICAgICAgICAgIyAgICAgICAgb3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSwgdXNlX3Rscz1UcnVlLCBwb3J0PTkzMjMpCiAKLSAgICAgICAgIyBhIGxpc3Qg
b2YgVGVzdFR5cGUgb2JqZWN0cwotICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gW3RleHRfZGlm
Zi5UZXN0VGV4dERpZmZdCi0gICAgICAgIGlmIG9wdGlvbnMucGl4ZWxfdGVzdHM6Ci0gICAgICAg
ICAgICBzZWxmLl90ZXN0X3R5cGVzLmFwcGVuZChpbWFnZV9kaWZmLkltYWdlRGlmZikKLQogICAg
ICAgICAjIGEgc2V0IG9mIHRlc3QgZmlsZXMsIGFuZCB0aGUgc2FtZSB0ZXN0cyBhcyBhIGxpc3QK
ICAgICAgICAgc2VsZi5fdGVzdF9maWxlcyA9IHNldCgpCiAgICAgICAgIHNlbGYuX3Rlc3RfZmls
ZXNfbGlzdCA9IE5vbmUKLSAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gUXVldWUuUXVldWUo
KQogICAgICAgICBzZWxmLl9yZXRyeWluZyA9IEZhbHNlCiAKKyAgICBkZWYgZ2V0TmFtZShzZWxm
KToKKyAgICAgICAgcmV0dXJuIHJvdXRlci5Sb3V0ZXIuTUFOQUdFUgorCiAgICAgZGVmIGNvbGxl
Y3RfdGVzdHMoc2VsZiwgYXJncywgbGFzdF91bmV4cGVjdGVkX3Jlc3VsdHMpOgogICAgICAgICAi
IiJGaW5kIGFsbCB0aGUgZmlsZXMgdG8gdGVzdC4KIApAQCAtNDkxLDcgKzQ5Miw3IEBAIGNsYXNz
IFRlc3RSdW5uZXI6CiAgICAgICAgICIiIlJldHVybnMgdGhlIGFwcHJvcHJpYXRlIFRlc3RJbnB1
dCBvYmplY3QgZm9yIHRoZSBmaWxlLiBNb3N0bHkgdGhpcwogICAgICAgICBpcyB1c2VkIGZvciBs
b29raW5nIHVwIHRoZSB0aW1lb3V0IHZhbHVlIChpbiBtcykgdG8gdXNlIGZvciB0aGUgZ2l2ZW4K
ICAgICAgICAgdGVzdC4iIiIKLSAgICAgICAgaWYgc2VsZi5fZXhwZWN0YXRpb25zLmhhc19tb2Rp
Zmllcih0ZXN0X2ZpbGUsIHRlc3RfZXhwZWN0YXRpb25zLlNMT1cpOgorICAgICAgICBpZiBzZWxm
Ll90ZXN0X2lzX3Nsb3codGVzdF9maWxlKToKICAgICAgICAgICAgIHJldHVybiBUZXN0SW5wdXQo
dGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnNsb3dfdGltZV9vdXRfbXMpCiAgICAgICAgIHJldHVy
biBUZXN0SW5wdXQodGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zKQogCkBAIC01
MDEsMjMgKzUwMiwyMiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzcGxpdF9wYXRoID0g
dGVzdF9maWxlLnNwbGl0KG9zLnNlcCkKICAgICAgICAgcmV0dXJuICdodHRwJyBpbiBzcGxpdF9w
YXRoIG9yICd3ZWJzb2NrZXQnIGluIHNwbGl0X3BhdGgKIAotICAgIGRlZiBfZ2V0X3Rlc3RfZmls
ZV9xdWV1ZShzZWxmLCB0ZXN0X2ZpbGVzKToKLSAgICAgICAgIiIiQ3JlYXRlIHRoZSB0aHJlYWQg
c2FmZSBxdWV1ZSBvZiBsaXN0cyBvZiAodGVzdCBmaWxlbmFtZXMsIHRlc3QgVVJJcykKLSAgICAg
ICAgdHVwbGVzLiBFYWNoIFRlc3RTaGVsbFRocmVhZCBwdWxscyBhIGxpc3QgZnJvbSB0aGlzIHF1
ZXVlIGFuZCBydW5zCi0gICAgICAgIHRob3NlIHRlc3RzIGluIG9yZGVyIGJlZm9yZSBncmFiYmlu
ZyB0aGUgbmV4dCBhdmFpbGFibGUgbGlzdC4KKyAgICBkZWYgX3Rlc3RfaXNfc2xvdyhzZWxmLCB0
ZXN0X2ZpbGUpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0YXRpb25zLmhhc19tb2RpZmll
cih0ZXN0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3RfZXhwZWN0YXRpb25zLlNMT1cpCiAKLSAgICAgICAgU2hhcmQgdGhlIGxpc3RzIGJ5
IGRpcmVjdG9yeS4gVGhpcyBoZWxwcyBlbnN1cmUgdGhhdCB0ZXN0cyB0aGF0IGRlcGVuZAotICAg
ICAgICBvbiBlYWNoIG90aGVyIChha2EgYmFkIHRlc3RzISkgY29udGludWUgdG8gcnVuIHRvZ2V0
aGVyIGFzIG1vc3QKLSAgICAgICAgY3Jvc3MtdGVzdHMgZGVwZW5kZW5jaWVzIHRlbmQgdG8gb2Nj
dXIgd2l0aGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAgICBkZWYgX3NoYXJkX3Rlc3RzKHNlbGYs
IHRlc3RfZmlsZXMsIHNpbmdsZV90aHJlYWRlZCk6CisgICAgICAgICIiIkdyb3VwcyB0ZXN0cyBp
bnRvIGJhdGNoZXMuCisgICAgICAgIFRoaXMgaGVscHMgZW5zdXJlIHRoYXQgdGVzdHMgdGhhdCBk
ZXBlbmQgb24gZWFjaCBvdGhlciAoYWthIGJhZCB0ZXN0cyEpCisgICAgICAgIGNvbnRpbnVlIHRv
IHJ1biB0b2dldGhlciBhcyBtb3N0IGNyb3NzLXRlc3RzIGRlcGVuZGVuY2llcyB0ZW5kIHRvCisg
ICAgICAgIG9jY3VyIHdpdGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCiAKICAgICAgICAgUmV0dXJu
OgotICAgICAgICAgIFRoZSBRdWV1ZSBvZiBsaXN0cyBvZiBUZXN0SW5wdXQgb2JqZWN0cy4KKyAg
ICAgICAgICAgIEEgbGlzdCBvZiBsaXN0cyBvZiBUZXN0SW5wdXQgb2JqZWN0cwogICAgICAgICAi
IiIKLQogICAgICAgICB0ZXN0X2xpc3RzID0gW10KICAgICAgICAgdGVzdHNfdG9faHR0cF9sb2Nr
ID0gW10KLSAgICAgICAgaWYgKHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFs
bGVsIG9yCi0gICAgICAgICAgICBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKSk6CisgICAgICAg
IGlmIHNpbmdsZV90aHJlYWRlZDoKICAgICAgICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9m
aWxlczoKICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRf
Zm9yX2ZpbGUodGVzdF9maWxlKQogICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Rlc3RfcmVxdWly
ZXNfbG9jayh0ZXN0X2ZpbGUpOgpAQCAtNTU2LDIzICs1NTYsNyBAQCBjbGFzcyBUZXN0UnVubmVy
OgogICAgICAgICAgICAgdGVzdHNfdG9faHR0cF9sb2NrLnJldmVyc2UoKQogICAgICAgICAgICAg
dGVzdF9saXN0cy5pbnNlcnQoMCwgKCJ0ZXN0c190b19odHRwX2xvY2siLCB0ZXN0c190b19odHRw
X2xvY2spKQogCi0gICAgICAgIGZpbGVuYW1lX3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAg
ICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3RzOgotICAgICAgICAgICAgZmlsZW5hbWVfcXVldWUucHV0
KGl0ZW0pCi0gICAgICAgIHJldHVybiBmaWxlbmFtZV9xdWV1ZQotCi0gICAgZGVmIF9nZXRfdGVz
dF9hcmdzKHNlbGYsIGluZGV4KToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgdHVwbGUgb2YgYXJn
dW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9yIER1bXBSZW5kZXJUcmVlLiIiIgotICAgICAgICB0ZXN0
X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5UZXN0QXJndW1lbnRzKCkKLSAgICAgICAgdGVzdF9hcmdz
LnBuZ19wYXRoID0gTm9uZQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgot
ICAgICAgICAgICAgcG5nX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbmdfcmVz
dWx0JXMucG5nIiAlIGluZGV4KQotICAgICAgICAgICAgdGVzdF9hcmdzLnBuZ19wYXRoID0gcG5n
X3BhdGgKLSAgICAgICAgdGVzdF9hcmdzLm5ld19iYXNlbGluZSA9IHNlbGYuX29wdGlvbnMubmV3
X2Jhc2VsaW5lCi0gICAgICAgIHRlc3RfYXJncy5yZXNldF9yZXN1bHRzID0gc2VsZi5fb3B0aW9u
cy5yZXNldF9yZXN1bHRzCi0KLSAgICAgICAgcmV0dXJuIHRlc3RfYXJncworICAgICAgICByZXR1
cm4gdGVzdF9saXN0cwogCiAgICAgZGVmIF9jb250YWluc190ZXN0cyhzZWxmLCBzdWJkaXIpOgog
ICAgICAgICBmb3IgdGVzdF9maWxlIGluIHNlbGYuX3Rlc3RfZmlsZXM6CkBAIC01ODAsMzggKzU2
NCw4IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAg
ICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBkZWYgX2luc3RhbnRpYXRlX2R1bXBfcmVuZGVyX3Ry
ZWVfdGhyZWFkcyhzZWxmLCB0ZXN0X2ZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIiIiSW5zdGFudGl0
YXRlcyBhbmQgc3RhcnRzIHRoZSBUZXN0U2hlbGxUaHJlYWQocykuCi0KLSAgICAgICAgUmV0dXJu
OgotICAgICAgICAgIFRoZSBsaXN0IG9mIHRocmVhZHMuCi0gICAgICAgICIiIgotICAgICAgICBm
aWxlbmFtZV9xdWV1ZSA9IHNlbGYuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9maWxlcykKLQot
ICAgICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVsbFRocmVhZHMgYW5kIHN0YXJ0IHRoZW0uCi0g
ICAgICAgIHRocmVhZHMgPSBbXQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoaW50KHNlbGYuX29w
dGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSk6Ci0gICAgICAgICAgICAjIENyZWF0ZSBzZXBhcmF0ZSBU
ZXN0VHlwZXMgaW5zdGFuY2VzIGZvciBlYWNoIHRocmVhZC4KLSAgICAgICAgICAgIHRlc3RfdHlw
ZXMgPSBbXQotICAgICAgICAgICAgZm9yIHRlc3RfdHlwZSBpbiBzZWxmLl90ZXN0X3R5cGVzOgot
ICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMuYXBwZW5kKHRlc3RfdHlwZShzZWxmLl9wb3J0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSkpCi0KLSAgICAgICAgICAgIHRlc3RfYXJncyA9IHNlbGYuX2dldF90ZXN0X2Fy
Z3MoaSkKLSAgICAgICAgICAgIHRocmVhZCA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RT
aGVsbFRocmVhZChzZWxmLl9wb3J0LAotICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsIGZp
bGVuYW1lX3F1ZXVlLCBzZWxmLl9yZXN1bHRfcXVldWUsCi0gICAgICAgICAgICAgICAgdGVzdF90
eXBlcywgdGVzdF9hcmdzKQotICAgICAgICAgICAgaWYgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVk
KCk6Ci0gICAgICAgICAgICAgICAgdGhyZWFkLnJ1bl9pbl9tYWluX3RocmVhZChzZWxmLCByZXN1
bHRfc3VtbWFyeSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdGhyZWFkLnN0
YXJ0KCkKLSAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHRocmVhZCkKLQotICAgICAgICByZXR1
cm4gdGhyZWFkcwotCiAgICAgZGVmIF9pc19zaW5nbGVfdGhyZWFkZWQoc2VsZik6Ci0gICAgICAg
ICIiIlJldHVybnMgd2hldGhlciB3ZSBzaG91bGQgcnVuIGFsbCB0aGUgdGVzdHMgaW4gdGhlIG1h
aW4gdGhyZWFkLiIiIgorICAgICAgICAiUmV0dXJucyB3aGV0aGVyIHRvIHBsdXJhbGl6ZSBsb2cg
bWVzc2FnZXMgYWJvdXQgRFJUIGluc3RhbmNlcy4iIiIKICAgICAgICAgcmV0dXJuIGludChzZWxm
Ll9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPT0gMQogCiAgICAgZGVmIF9ydW5fdGVzdHMoc2Vs
ZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CkBAIC02MjgsNzMgKzU4Miw1NyBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICBpbiB0aGUgZm9ybSB7ZmlsZW5hbWU6ZmlsZW5h
bWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0KICAgICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRoIHRoZSByZXN1bHRzCiAgICAgICAg
ICIiIgorICAgICAgICBudW1fd29ya2VycyA9IGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nl
c3NlcykKKworICAgICAgICBzZWxmLl9jdXJyZW50X2ZpbGVfbGlzdCA9IGZpbGVfbGlzdAorICAg
ICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gcmVzdWx0X3N1bW1hcnkKKyAgICAg
ICAgcm91dGVyID0gc2VsZi5fcm91dGVyCisKKyAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMgPSBb
XQorICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuX3dvcmtlcl9z
dGF0cyA9IHt9CisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1fd29ya2Vycyk6CisgICAgICAg
ICAgICBuYW1lID0gJ3dvcmtlci0lZCcgJSBpCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfc3Rh
dHNbbmFtZV0gPSB7fQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW25hbWVdWyduYW1l
J10gPSBuYW1lCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHNbbmFtZV1bJ251bV90ZXN0
cyddID0gMAorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW25hbWVdWyd0b3RhbF90aW1l
J10gPSAwCisKKyAgICAgICAgdGVzdF9saXN0cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlz
dCwKKyAgICAgICAgICAgIG51bV93b3JrZXJzID09IDEgb3Igc2VsZi5fb3B0aW9ucy5leHBlcmlt
ZW50YWxfZnVsbHlfcGFyYWxsZWwpCisgICAgICAgIGZvciB0ZXN0X2xpc3QgaW4gdGVzdF9saXN0
czoKKyAgICAgICAgICAgIHJvdXRlci5wb3N0X3Rlc3RfbGlzdCh0ZXN0X2xpc3QpCisKKyAgICAg
ICAgIyBUZWxsIHRoZSB3b3JrZXJzIHRvIHNodXQgZG93biBhZnRlciB0aGV5J3JlIGRvbmUgcnVu
bmluZyBhbGwgdGhlCisgICAgICAgICMgdGVzdHMuCisgICAgICAgIGZvciBpIGluIHhyYW5nZShu
dW1fd29ya2Vycyk6CisgICAgICAgICAgICByb3V0ZXIucG9zdF9zdG9wKCkKKwogICAgICAgICAj
IEZJWE1FOiBXZSBzaG91bGQgdXNlIHdlYmtpdHB5LnRvb2wuZ3JhbW1hci5wbHVyYWxpemUgaGVy
ZS4KICAgICAgICAgcGx1cmFsID0gIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lzX3NpbmdsZV90
aHJlYWRlZCgpOgorICAgICAgICBpZiBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKToKICAgICAg
ICAgICAgIHBsdXJhbCA9ICJzIgogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgn
U3RhcnRpbmcgJXMlcyAuLi4nICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSwgcGx1cmFsKSkKLSAgICAgICAgdGhyZWFkcyA9IHNl
bGYuX2luc3RhbnRpYXRlX2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkcyhmaWxlX2xpc3QsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0X3N1bW1hcnkpCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFy
dGluZyB0ZXN0aW5nIC4uLiIpCiAKLSAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBzZWxm
Ll93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5KQotICAgICAgICAodGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3MpID0gXAotICAgICAgICAgICAgc2VsZi5fY29sbGVjdF90aW1pbmdfaW5mbyh0
aHJlYWRzKQorICAgICAgICByb3V0ZXIuc3RhcnRfd29ya2VycygpCiAKLSAgICAgICAgcmV0dXJu
IChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKLSAg
ICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKIAotICAgIGRlZiBfd2Fp
dF9mb3JfdGhyZWFkc190b19maW5pc2goc2VsZiwgdGhyZWFkcywgcmVzdWx0X3N1bW1hcnkpOgog
ICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCiAgICAgICAgIHRyeToKLSAgICAg
ICAgICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgdGhyZWFkcyB3YWl0aW5nIGZvciB0aGVtIHRv
IGZpbmlzaC4KLSAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQotICAgICAg
ICAgICAgd2hpbGUgc29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAgICAgICAgICAgICAgc29tZV90
aHJlYWRfaXNfYWxpdmUgPSBGYWxzZQotICAgICAgICAgICAgICAgIHQgPSB0aW1lLnRpbWUoKQot
ICAgICAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9uX2luZm8gPSB0aHJlYWQuZXhjZXB0aW9uX2luZm8oKQotICAgICAgICAgICAg
ICAgICAgICBpZiBleGNlcHRpb25faW5mbyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICMgUmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2VwdGlvbiBoZXJlIHRvIG1ha2UgaXQK
LSAgICAgICAgICAgICAgICAgICAgICAgICMgY2xlYXIgdGhhdCB0ZXN0aW5nIHdhcyBhYm9ydGVk
LiBPdGhlcndpc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSB0ZXN0cyB0aGF0IGRp
ZCBub3QgcnVuIHdvdWxkIGJlIGFzc3VtZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICMgdG8g
aGF2ZSBwYXNzZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25faW5m
b1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlvbl9pbmZvWzJdCi0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgdGhyZWFkLmlzQWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNv
bWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF90
aW1lb3V0ID0gdGhyZWFkLm5leHRfdGltZW91dCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0KToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfbG9nX3dlZGdlZF90aHJlYWQodGhyZWFkKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRocmVhZC5jbGVhcl9uZXh0X3RpbWVvdXQoKQotCi0gICAgICAgICAgICAgICAg
c2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKLQotICAgICAgICAgICAgICAgIGlm
IHNvbWVfdGhyZWFkX2lzX2FsaXZlOgotICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAu
MDEpCi0KKyAgICAgICAgICAgIHJvdXRlci5sb29wKHNlbGYpCiAgICAgICAgIGV4Y2VwdCBLZXli
b2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHJvdXRlci5jYW5jZWxfd29ya2VycygpCisgICAg
ICAgICAgICBfbG9nLmluZm8oIkludGVycnVwdGVkLCBleGl0aW5nIikKICAgICAgICAgICAgIGtl
eWJvYXJkX2ludGVycnVwdGVkID0gVHJ1ZQotICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJl
YWRzOgotICAgICAgICAgICAgICAgIHRocmVhZC5jYW5jZWwoKQotCi0gICAgICAgIHJldHVybiBr
ZXlib2FyZF9pbnRlcnJ1cHRlZAotCi0gICAgZGVmIF9jb2xsZWN0X3RpbWluZ19pbmZvKHNlbGYs
IHRocmVhZHMpOgotICAgICAgICB0ZXN0X3RpbWluZ3MgPSB7fQotICAgICAgICBpbmRpdmlkdWFs
X3Rlc3RfdGltaW5ncyA9IFtdCi0gICAgICAgIHRocmVhZF90aW1pbmdzID0gW10KLQotICAgICAg
ICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICB0aHJlYWRfdGltaW5ncy5hcHBl
bmQoeyduYW1lJzogdGhyZWFkLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ251bV90ZXN0cyc6IHRocmVhZC5nZXRfbnVtX3Rlc3RzKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICd0b3RhbF90aW1lJzogdGhyZWFkLmdldF90b3RhbF90
aW1lKCl9KQotICAgICAgICAgICAgdGVzdF90aW1pbmdzLnVwZGF0ZSh0aHJlYWQuZ2V0X3Rlc3Rf
Z3JvdXBfdGltaW5nX3N0YXRzKCkpCi0gICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5n
cy5leHRlbmQodGhyZWFkLmdldF90ZXN0X3Jlc3VsdHMoKSkKKyAgICAgICAgZXhjZXB0OgorICAg
ICAgICAgICAgIyBVbmV4cGVjdGVkIGV4Y2VwdGlvbjsgZG9uJ3QgdHJ5IHRvIGNsZWFuIHVwIHdv
cmtlcnMuCisgICAgICAgICAgICBfbG9nLmluZm8oIkV4Y2VwdGlvbiByYWlzZWQsIGV4aXRpbmci
KQorICAgICAgICAgICAgcmFpc2UKIAotICAgICAgICByZXR1cm4gKHRocmVhZF90aW1pbmdzLCB0
ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICByZXR1cm4gKGtl
eWJvYXJkX2ludGVycnVwdGVkLCBzZWxmLl93b3JrZXJfc3RhdHMudmFsdWVzKCksCisgICAgICAg
ICAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMsIHNlbGYuX2FsbF9yZXN1bHRzKQogCiAgICAgZGVm
IG5lZWRzX2h0dHAoc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgdGVzdCBy
dW5uZXIgbmVlZHMgYW4gSFRUUCBzZXJ2ZXIuIiIiCkBAIC04MjYsMjMgKzc2NCwzNyBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICAgICBfbG9nLmRlYnVnKCJzdG9wcGluZyBoZWxwZXIiKQogICAg
ICAgICBzZWxmLl9wb3J0LnN0b3BfaGVscGVyKCkKIAotICAgIGRlZiB1cGRhdGVfc3VtbWFyeShz
ZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgZGVmIGhhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwg
c3JjKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGhhbmRsZV9kb25lKHNlbGYsIHNyYyk6Cisg
ICAgICAgIHBhc3MKKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHJl
c3VsdCwgZWxhcHNlZF90aW1lKToKICAgICAgICAgIiIiVXBkYXRlIHRoZSBzdW1tYXJ5IGFuZCBw
cmludCByZXN1bHRzIHdpdGggYW55IGNvbXBsZXRlZCB0ZXN0cy4iIiIKLSAgICAgICAgd2hpbGUg
VHJ1ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X3Jl
c3VsdHMuVGVzdFJlc3VsdC5sb2FkcyhzZWxmLl9yZXN1bHRfcXVldWUuZ2V0X25vd2FpdCgpKQot
ICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgotICAgICAgICAgICAgICAgIHJldHVybgot
Ci0gICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5tYXRjaGVzX2FuX2V4
cGVjdGVkX3Jlc3VsdCgKLSAgICAgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC50
eXBlLCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQotICAgICAgICAgICAgcmVzdWx0X3N1bW1h
cnkuYWRkKHJlc3VsdCwgZXhwZWN0ZWQpCi0gICAgICAgICAgICBleHBfc3RyID0gc2VsZi5fZXhw
ZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAotICAgICAgICAgICAgICAgIHJlc3Vs
dC5maWxlbmFtZSkKLSAgICAgICAgICAgIGdvdF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZXhw
ZWN0YXRpb25fdG9fc3RyaW5nKHJlc3VsdC50eXBlKQotICAgICAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKQot
ICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwg
c2VsZi5fcmV0cnlpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKyAgICAgICAgc2VsZi5fdXBkYXRlX3dvcmtlcl9zdGF0
cyhzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKQorCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5f
ZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KAorICAgICAgICAgICAgcmVz
dWx0LmZpbGVuYW1lLCByZXN1bHQudHlwZSwgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cykKKyAg
ICAgICAgZXhwX3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmlu
ZygKKyAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSkKKyAgICAgICAgZ290X3N0ciA9IHNlbGYu
X2V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUpCisgICAgICAg
IHNlbGYuX3ByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0
ciwgZ290X3N0cikKKworICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5LmFkZChy
ZXN1bHQsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Byb2dyZXNzKHNl
bGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fcmV0cnlpbmcsIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKworICAgIGRl
ZiBoYW5kbGVfZmluaXNoZWRfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBl
bGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9ncm91cF9zdGF0c1tsaXN0X25hbWVdID0gKG51
bV90ZXN0cywgZWxhcHNlZF90aW1lKQorCisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwg
c3JjLCBleGNlcHRpb25faW5mbyk6CisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBl
eGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KKworICAgIGRlZiBfdXBkYXRlX3dv
cmtlcl9zdGF0cyhzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2Vs
Zi5fd29ya2VyX3N0YXRzW3NyY11bJ3RvdGFsX3RpbWUnXSArPSBlbGFwc2VkX3RpbWUKKyAgICAg
ICAgc2VsZi5fd29ya2VyX3N0YXRzW3NyY11bJ251bV90ZXN0cyddICs9IDEKKyAgICAgICAgc2Vs
Zi5fYWxsX3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKIAogICAgIGRlZiBfY2xvYmJlcl9vbGRfcmVz
dWx0cyhzZWxmKToKICAgICAgICAgIyBKdXN0IGNsb2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJlc3Vs
dHMgZGlyZWN0b3JpZXMgc2luY2UgdGhlIG90aGVyCkBAIC05NTYsNiArOTA4LDcgQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKICAgICAgICAgICAgIHAucHJpbnRfY29uZmlnKCJSdW5uaW5nICVzICVzcyBp
biBwYXJhbGxlbCIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX29wdGlvbnMu
Y2hpbGRfcHJvY2Vzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQu
ZHJpdmVyX25hbWUoKSkpCisgICAgICAgIHAucHJpbnRfY29uZmlnKCJXb3JrZXJzIGFyZSAlcyIg
JSBzZWxmLl9vcHRpb25zLndvcmtlcnNfYXJlKQogICAgICAgICBwLnByaW50X2NvbmZpZygiIikK
IAogICAgIGRlZiBfcHJpbnRfZXhwZWN0ZWRfcmVzdWx0c19vZl90eXBlKHNlbGYsIHJlc3VsdF9z
dW1tYXJ5LApAQCAtMTM0NSwxMSArMTI5OCwxMyBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFy
Z3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgp
CiAgICAgICAgIHJldHVybiAwCiAKKyAgICByb3V0ZXJfb2JqID0gcm91dGVyLmdldChwb3J0LCBv
cHRpb25zKQorCiAgICAgIyBXZSB3cmFwIGFueSBwYXJ0cyBvZiB0aGUgcnVuIHRoYXQgYXJlIHNs
b3cgb3IgbGlrZWx5IHRvIHJhaXNlIGV4Y2VwdGlvbnMKICAgICAjIGluIGEgdHJ5L2ZpbmFsbHkg
dG8gZW5zdXJlIHRoYXQgd2UgY2xlYW4gdXAgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4KICAg
ICBudW1fdW5leHBlY3RlZF9yZXN1bHRzID0gLTEKICAgICB0cnk6Ci0gICAgICAgIHRlc3RfcnVu
bmVyID0gVGVzdFJ1bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVyKQorICAgICAgICB0ZXN0X3J1
bm5lciA9IFRlc3RSdW5uZXIocG9ydCwgb3B0aW9ucywgcHJpbnRlciwgcm91dGVyX29iaikKICAg
ICAgICAgdGVzdF9ydW5uZXIuX3ByaW50X2NvbmZpZygpCiAKICAgICAgICAgcHJpbnRlci5wcmlu
dF91cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4uIikKQEAgLTEzNzgsNiArMTMzMyw3IEBAIGRl
ZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAg
ICAgICAgICAgIF9sb2cuZGVidWcoIlRlc3RpbmcgY29tcGxldGVkLCBFeGl0IHN0YXR1czogJWQi
ICUKICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cykKICAgICBm
aW5hbGx5OgorICAgICAgICByb3V0ZXJfb2JqLmNsZWFudXAoKQogICAgICAgICBwcmludGVyLmNs
ZWFudXAoKQogCiAgICAgcmV0dXJuIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMKQEAgLTEzODYsOCAr
MTM0MiwxMSBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5
cy5zdGRlcnIsCiBkZWYgX3NldF91cF9kZXJpdmVkX29wdGlvbnMocG9ydF9vYmosIG9wdGlvbnMp
OgogICAgICIiIlNldHMgdGhlIG9wdGlvbnMgdmFsdWVzIHRoYXQgZGVwZW5kIG9uIG90aGVyIG9w
dGlvbnMgdmFsdWVzLiIiIgogCi0gICAgaWYgbm90IG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzOgot
ICAgICAgICAjIEZJWE1FOiBJbnZlc3RpZ2F0ZSBwZXJmL2ZsYWtpbmVzcyBpbXBhY3Qgb2YgdXNp
bmcgY3B1X2NvdW50ICsgMS4KKyAgICBpZiBvcHRpb25zLndvcmtlcnNfYXJlID09ICdpbmxpbmUn
OgorICAgICAgICBpZiBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyBhbmQgaW50KG9wdGlvbnMuY2hp
bGRfcHJvY2Vzc2VzKSA+IDE6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoIi0td29ya2Vycy1h
cmU9aW5saW5lIG92ZXJyaWRlcyAtLWNoaWxkLXByb2Nlc3NlcyIpCisgICAgICAgIG9wdGlvbnMu
Y2hpbGRfcHJvY2Vzc2VzID0gIjEiCisgICAgZWxpZiBub3Qgb3B0aW9ucy5jaGlsZF9wcm9jZXNz
ZXM6CiAgICAgICAgIG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gb3MuZW52aXJvbi5nZXQoIldF
QktJVF9URVNUX0NISUxEX1BST0NFU1NFUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyKHBvcnRfb2JqLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2Vz
KCkpKQogCkBAIC0xNjEwLDYgKzE1NjksMTAgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToK
ICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tY2hpbGQtcHJvY2Vzc2VzIiwKICAgICAg
ICAgICAgIGhlbHA9Ik51bWJlciBvZiBEdW1wUmVuZGVyVHJlZXMgdG8gcnVuIGluIHBhcmFsbGVs
LiIpLAogICAgICAgICAjIEZJWE1FOiBEaXNwbGF5IGRlZmF1bHQgbnVtYmVyIG9mIGNoaWxkIHBy
b2Nlc3NlcyB0aGF0IHdpbGwgcnVuLgorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13
b3JrZXJzLWFyZSIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ9InByb2Nlc3NlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0i
Y29udHJvbHMgd29ya2VyIG1vZGVsLiBWYWxpZCB2YWx1ZXMgYXJlICIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiJ2lubGluZScsICd0aHJlYWRzJywgYW5kICdwcm9jZXNzZXMnIChkZWZh
dWx0KS4iKSwKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZXhwZXJpbWVudGFsLWZ1
bGx5LXBhcmFsbGVsIiwKICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9
RmFsc2UsCiAgICAgICAgICAgICBoZWxwPSJydW4gYWxsIHRlc3RzIGluIHBhcmFsbGVsIiksCkBA
IC0xNjcwLDE3ICsxNjMzLDYgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICByZXR1
cm4gb3B0aW9ucywgYXJncwogCiAKLWRlZiBfbG9nX3dlZGdlZF90aHJlYWQodGhyZWFkKToKLSAg
ICAiIiJMb2cgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHRocmVhZCBzdGF0ZS4iIiIKLSAg
ICBpZCA9IHRocmVhZC5pZCgpCi0gICAgc3RhY2sgPSBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5m
aW5kX3RocmVhZF9zdGFjayhpZCkKLSAgICBhc3NlcnQoc3RhY2sgaXMgbm90IE5vbmUpCi0gICAg
X2xvZy5lcnJvcigiIikKLSAgICBfbG9nLmVycm9yKCJ0aHJlYWQgJXMgKCVkKSBpcyB3ZWRnZWQi
ICUgKHRocmVhZC5nZXROYW1lKCksIGlkKSkKLSAgICBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5s
b2dfc3RhY2soc3RhY2spCi0gICAgX2xvZy5lcnJvcigiIikKLQotCiBkZWYgbWFpbigpOgogICAg
IG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9hcmdzKCkKICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9w
dGlvbnMucGxhdGZvcm0sIG9wdGlvbnMpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191
bml0dGVzdC5weQppbmRleCA1NGUxZGMwNWRmMDFjNzA2MDdjZTMzNmQ1ZDkwMDA0MjYxNDQ1NTcw
Li43N2RjMGVhMjY2ZWMyMWRmYjU0Zjg1MThhNzg2YTE1ODM2ZmE2Y2ZjIDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
X3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTcyLDEyICs3MiwxNCBAQCBkZWYg
cGFzc2luZ19ydW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0
cz1GYWxzZSwKICAgICAgICAgYXJncy5leHRlbmQoWyctLXBsYXRmb3JtJywgJ3Rlc3QnXSkKICAg
ICBpZiBub3QgcmVjb3JkX3Jlc3VsdHM6CiAgICAgICAgIGFyZ3MuYXBwZW5kKCctLW5vLXJlY29y
ZC1yZXN1bHRzJykKKyAgICBpZiBub3QgJy0tY2hpbGQtcHJvY2Vzc2VzJyBpbiBleHRyYV9hcmdz
OgorICAgICAgICBhcmdzLmV4dGVuZChbJy0td29ya2Vycy1hcmUnLCAnaW5saW5lJ10pCiAgICAg
YXJncy5leHRlbmQoZXh0cmFfYXJncykKICAgICBpZiBub3QgdGVzdHNfaW5jbHVkZWQ6CiAgICAg
ICAgICMgV2UgdXNlIHRoZSBnbG9iIHRvIHRlc3QgdGhhdCBnbG9iYmluZyB3b3Jrcy4KICAgICAg
ICAgYXJncy5leHRlbmQoWydwYXNzZXMnLAogICAgICAgICAgICAgICAgICAgICAgJ2h0dHAvdGVz
dHMnLAotICAgICAgICAgICAgICAgICAgICAgJ2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzJywK
KyAgICAgICAgICAgICAgICAgICAgICd3ZWJzb2NrZXQvdGVzdHMnLAogICAgICAgICAgICAgICAg
ICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkLyonXSkKICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9
IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhhcmdzKQogICAgIGlmIG5vdCBwb3J0X29iajoK
QEAgLTkyLDYgKzk0LDggQEAgZGVmIGxvZ2dpbmdfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgcG9ydF9v
Ymo9Tm9uZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UpOgogICAgIGFyZ3MgPSBbJy0tbm8tcmVjb3Jk
LXJlc3VsdHMnXQogICAgIGlmIG5vdCAnLS1wbGF0Zm9ybScgaW4gZXh0cmFfYXJnczoKICAgICAg
ICAgYXJncy5leHRlbmQoWyctLXBsYXRmb3JtJywgJ3Rlc3QnXSkKKyAgICBpZiBub3QgJy0tY2hp
bGQtcHJvY2Vzc2VzJyBpbiBleHRyYV9hcmdzOgorICAgICAgICBhcmdzLmV4dGVuZChbJy0td29y
a2Vycy1hcmUnLCAnaW5saW5lJ10pCiAgICAgYXJncy5leHRlbmQoZXh0cmFfYXJncykKICAgICBp
ZiBub3QgdGVzdHNfaW5jbHVkZWQ6CiAgICAgICAgIGFyZ3MuZXh0ZW5kKFsncGFzc2VzJywKQEAg
LTExNiw3ICsxMjAsNyBAQCBkZWYgZ2V0X3Rlc3RzX3J1bihleHRyYV9hcmdzPU5vbmUsIHRlc3Rz
X2luY2x1ZGVkPUZhbHNlLCBmbGF0dGVuX2JhdGNoZXM9RmFsc2UpOgogICAgICAgICAnLS1wcmlu
dCcsICdub3RoaW5nJywKICAgICAgICAgJy0tcGxhdGZvcm0nLCAndGVzdCcsCiAgICAgICAgICct
LW5vLXJlY29yZC1yZXN1bHRzJywKLSAgICAgICAgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzEnXQor
ICAgICAgICAnLS13b3JrZXJzLWFyZScsICdpbmxpbmUnXQogICAgIGFyZ3MuZXh0ZW5kKGV4dHJh
X2FyZ3MpCiAgICAgaWYgbm90IHRlc3RzX2luY2x1ZGVkOgogICAgICAgICAjIE5vdCBpbmNsdWRp
bmcgaHR0cCB0ZXN0cyBzaW5jZSB0aGV5IGdldCBydW4gb3V0IG9mIG9yZGVyICh0aGF0CkBAIC0y
MTQsNyArMjE4LDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRl
ZiB0ZXN0X2tleWJvYXJkX2ludGVycnVwdChzZWxmKToKICAgICAgICAgIyBOb3RlIHRoYXQgdGhp
cyBhbHNvIHRlc3RzIHJ1bm5pbmcgYSB0ZXN0IG1hcmtlZCBhcyBTS0lQIGlmCiAgICAgICAgICMg
eW91IHNwZWNpZnkgaXQgZXhwbGljaXRseS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5
Ym9hcmRJbnRlcnJ1cHQsIHBhc3NpbmdfcnVuLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhL
ZXlib2FyZEludGVycnVwdCwgbG9nZ2luZ19ydW4sCiAgICAgICAgICAgICBbJ2ZhaWx1cmVzL2V4
cGVjdGVkL2tleWJvYXJkLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKIAogICAgIGRlZiB0
ZXN0X2xhc3RfcmVzdWx0cyhzZWxmKToKQEAgLTI2MSw4ICsyNjUsMTYgQEAgY2xhc3MgTWFpblRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfcnVuX2ZvcmNlKHNlbGYpOgog
ICAgICAgICAjIFRoaXMgcmFpc2VzIGFuIGV4Y2VwdGlvbiBiZWNhdXNlIHdlIHJ1bgotICAgICAg
ICAjIGZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sLCB3aGljaCBpcyBub3JtYWxseSBT
S0lQcGVkLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1
biwgWyctLWZvcmNlJ10pCisgICAgICAgICMgZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0aW9uLmh0
bWwgYW5kCisgICAgICAgICMgZmFpbHVyZXMvZXhwZWN0ZWQva2V5Ym9hcmQsIHdoaWNoIGFyZSBu
b3JtYWxseSBTS0lQcGVkLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2dnaW5nX3J1bihb
Jy0tZm9yY2UnXSkKKyAgICAgICAgICAgIHRlc3RfcGFzc2VkID0gRmFsc2UKKyAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICB0ZXN0X3Bhc3NlZCA9IFRydWUKKyAgICAgICAg
ZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgdGVzdF9wYXNzZWQgPSBUcnVl
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X3Bhc3NlZCkKIAogICAgIGRlZiB0ZXN0X3J1
bl9wYXJ0KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCB3ZSBhY3R1YWxseSBzZWxlY3QgdGhl
IHJpZ2h0IHBhcnQKQEAgLTQyNyw3ICs0MzksNiBAQCBjbGFzcyBSZWJhc2VsaW5lVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBjb2RlY3Mub3Bl
biA9IG9yaWdpbmFsX29wZW4KIAotCiBjbGFzcyBUZXN0UnVubmVyV3JhcHBlcihydW5fd2Via2l0
X3Rlc3RzLlRlc3RSdW5uZXIpOgogICAgIGRlZiBfZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUoc2Vs
ZiwgdGVzdF9maWxlKToKICAgICAgICAgcmV0dXJuIHRlc3RfZmlsZQpAQCAtNDM5LDcgKzQ1MCw3
IEBAIGNsYXNzIFRlc3RSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgbW9j
a19wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUgPSBsYW1iZGEgbmFtZTogbmFtZQogICAgICAg
ICBtb2NrX3BvcnQuZmlsZW5hbWVfdG9fdXJpID0gbGFtYmRhIG5hbWU6IG5hbWUKIAotICAgICAg
ICBydW5uZXIgPSBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIocG9ydD1tb2NrX3BvcnQsIG9w
dGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSkKKyAgICAgICAgcnVubmVyID0gcnVuX3dlYmtp
dF90ZXN0cy5UZXN0UnVubmVyKHBvcnQ9bW9ja19wb3J0LCBvcHRpb25zPU1vY2soKSwgcHJpbnRl
cj1Nb2NrKCksIHJvdXRlcj1Nb2NrKCkpCiAgICAgICAgIGV4cGVjdGVkX2h0bWwgPSB1IiIiPGh0
bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5MYXlvdXQgVGVzdCBSZXN1bHRzICh0aW1lKTwvdGl0
bGU+CkBAIC00NTMsMjAgKzQ2NCwxMCBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIGh0bWwgPSBydW5uZXIuX3Jlc3VsdHNfaHRtbChbInRlc3RfcGF0
aCJdLCB7fSwgIlRpdGxlIiwgb3ZlcnJpZGVfdGltZT0idGltZSIpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoaHRtbCwgZXhwZWN0ZWRfaHRtbCkKIAotICAgIGRlZiBxdWV1ZV90b19saXN0KHNl
bGYsIHF1ZXVlKToKLSAgICAgICAgcXVldWVfbGlzdCA9IFtdCi0gICAgICAgIHdoaWxlKFRydWUp
OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHF1ZXVlX2xpc3QuYXBwZW5kKHF1
ZXVlLmdldF9ub3dhaXQoKSkKLSAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAgICAg
ICAgICAgICAgICBicmVhawotICAgICAgICByZXR1cm4gcXVldWVfbGlzdAotCi0gICAgZGVmIHRl
c3RfZ2V0X3Rlc3RfZmlsZV9xdWV1ZShzZWxmKToKKyAgICBkZWYgdGVzdF9zaGFyZF90ZXN0cyhz
ZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgX2dldF90ZXN0X2ZpbGVfcXVldWUgaW4gcnVuX3dl
YmtpdF90ZXN0cy5UZXN0UnVubmVyIHJlYWxseQogICAgICAgICAjIHB1dCB0aGUgaHR0cCB0ZXN0
cyBmaXJzdCBpbiB0aGUgcXVldWUuCi0gICAgICAgIHJ1bm5lciA9IFRlc3RSdW5uZXJXcmFwcGVy
KHBvcnQ9TW9jaygpLCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCkpCi0gICAgICAgIHJ1
bm5lci5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwgPSBGYWxzZQorICAgICAg
ICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCks
IHByaW50ZXI9TW9jaygpLCByb3V0ZXI9TW9jaygpKQogCiAgICAgICAgIHRlc3RfbGlzdCA9IFsK
ICAgICAgICAgICAiTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRtIiwKQEAg
LTQ4NywxOSArNDg4LDE1IEBAIGNsYXNzIFRlc3RSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICAgICAgICAnTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBw
b3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRtbCcsCiAgICAgICAgIF0pCiAKLSAgICAgICAgcnVu
bmVyLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9IDEKLSAgICAgICAgdGVzdF9xdWV1ZV9mb3Jf
c2luZ2xlX3RocmVhZCA9IHJ1bm5lci5fZ2V0X3Rlc3RfZmlsZV9xdWV1ZSh0ZXN0X2xpc3QpCi0g
ICAgICAgIHJ1bm5lci5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSAyCi0gICAgICAgIHRlc3Rf
cXVldWVfZm9yX211bHRpX3RocmVhZCA9IHJ1bm5lci5fZ2V0X3Rlc3RfZmlsZV9xdWV1ZSh0ZXN0
X2xpc3QpCi0KLSAgICAgICAgc2luZ2xlX3RocmVhZF9yZXN1bHRzID0gc2VsZi5xdWV1ZV90b19s
aXN0KHRlc3RfcXVldWVfZm9yX3NpbmdsZV90aHJlYWQpCi0gICAgICAgIG11bHRpX3RocmVhZF9y
ZXN1bHRzID0gc2VsZi5xdWV1ZV90b19saXN0KHRlc3RfcXVldWVfZm9yX211bHRpX3RocmVhZCkK
KyAgICAgICAgc2luZ2xlX3RocmVhZF9yZXN1bHRzID0gcnVubmVyLl9zaGFyZF90ZXN0cyh0ZXN0
X2xpc3QsIFRydWUpCisgICAgICAgIG11bHRpX3RocmVhZF9yZXN1bHRzID0gcnVubmVyLl9zaGFy
ZF90ZXN0cyh0ZXN0X2xpc3QsIEZhbHNlKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRl
c3RzX3RvX2h0dHBfbG9jayIsIHNpbmdsZV90aHJlYWRfcmVzdWx0c1swXVswXSkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF90ZXN0c190b19odHRwX2xvY2ssIHNldChzaW5nbGVf
dGhyZWFkX3Jlc3VsdHNbMF1bMV0pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0c190
b19odHRwX2xvY2siLCBtdWx0aV90aHJlYWRfcmVzdWx0c1swXVswXSkKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChleHBlY3RlZF90ZXN0c190b19odHRwX2xvY2ssIHNldChtdWx0aV90aHJlYWRf
cmVzdWx0c1swXVsxXSkpCiAKKwogY2xhc3MgRHJ5cnVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgIyBGSVhNRTogaXQncyBoYXJkIHRvIGtub3cgd2hpY2ggcGxhdGZvcm1zIGFyZSBzYWZl
IHRvIHRlc3Q7IHRoZQogICAgICMgY2hyb21pdW0gcGxhdGZvcm1zIHJlcXVpcmUgYSBjaHJvbWl1
bSBjaGVja291dCwgYW5kIHRoZSBtYWMgcGxhdGZvcm0KQEAgLTUyMCw0MSArNTE3LDYgQEAgY2xh
c3MgRHJ5cnVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJy0tcGl4ZWwtdGVzdHMnXSkpCiAKIAotY2xhc3MgVGVzdFRo
cmVhZChkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5XYXRjaGFibGVUaHJlYWQpOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBzdGFydGVkX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSk6Ci0gICAgICAgIGR1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldhdGNoYWJsZVRocmVhZC5fX2luaXRfXyhzZWxmKQotICAg
ICAgICBzZWxmLl9zdGFydGVkX3F1ZXVlID0gc3RhcnRlZF9xdWV1ZQotICAgICAgICBzZWxmLl9z
dG9wcGluZ19xdWV1ZSA9IHN0b3BwaW5nX3F1ZXVlCi0gICAgICAgIHNlbGYuX3RpbWVvdXQgPSBG
YWxzZQotICAgICAgICBzZWxmLl90aW1lb3V0X3F1ZXVlID0gUXVldWUuUXVldWUoKQotCi0gICAg
ZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQotCi0gICAgZGVmIF9j
b3ZlcmVkX3J1bihzZWxmKToKLSAgICAgICAgIyBGSVhNRTogdGhpcyBpcyBhIHNlcGFyYXRlIHJv
dXRpbmUgdG8gd29yayBhcm91bmQgYSBidWcKLSAgICAgICAgIyBpbiBjb3ZlcmFnZTogc2VlIGh0
dHA6Ly9iaXRidWNrZXQub3JnL25lZC9jb3ZlcmFnZXB5L2lzc3VlLzg1LgotICAgICAgICBzZWxm
Ll90aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKLSAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgc2VsZi5fc3RhcnRlZF9xdWV1ZS5wdXQoJycpCi0gICAgICAgICAgICBtc2cgPSBzZWxmLl9z
dG9wcGluZ19xdWV1ZS5nZXQoKQotICAgICAgICAgICAgaWYgbXNnID09ICdLZXlib2FyZEludGVy
cnVwdCc6Ci0gICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAg
ICAgIGVsaWYgbXNnID09ICdFeGNlcHRpb24nOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoKQotICAgICAgICAgICAgZWxpZiBtc2cgPT0gJ1RpbWVvdXQnOgotICAgICAgICAgICAg
ICAgIHNlbGYuX3RpbWVvdXQgPSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5fdGltZW91dF9x
dWV1ZS5nZXQoKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLl9leGNlcHRpb25f
aW5mbyA9IHN5cy5leGNfaW5mbygpCi0KLSAgICBkZWYgbmV4dF90aW1lb3V0KHNlbGYpOgotICAg
ICAgICBpZiBzZWxmLl90aW1lb3V0OgotICAgICAgICAgICAgc2VsZi5fdGltZW91dF9xdWV1ZS5w
dXQoJ2RvbmUnKQotICAgICAgICAgICAgcmV0dXJuIHRpbWUudGltZSgpIC0gMTAKLSAgICAgICAg
cmV0dXJuIHRpbWUudGltZSgpCi0KLQogY2xhc3MgVGVzdEhhbmRsZXIobG9nZ2luZy5IYW5kbGVy
KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgYXN0cmVhbSk6CiAgICAgICAgIGxvZ2dpbmcuSGFu
ZGxlci5fX2luaXRfXyhzZWxmKQpAQCAtNTY0LDcwICs1MjYsNSBAQCBjbGFzcyBUZXN0SGFuZGxl
cihsb2dnaW5nLkhhbmRsZXIpOgogICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoc2VsZi5mb3Jt
YXQocmVjb3JkKSkKIAogCi1jbGFzcyBXYWl0Rm9yVGhyZWFkc1RvRmluaXNoVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6Ci0gICAgY2xhc3MgTW9ja1Rlc3RSdW5uZXIocnVuX3dlYmtpdF90ZXN0cy5U
ZXN0UnVubmVyKToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgcGFz
cwotCi0gICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICAgICAgcGFzcwotCi0gICAg
ICAgIGRlZiB1cGRhdGVfc3VtbWFyeShzZWxmLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICAg
ICBwYXNzCi0KLSAgICBkZWYgcnVuX29uZV90aHJlYWQoc2VsZiwgbXNnKToKLSAgICAgICAgcnVu
bmVyID0gc2VsZi5Nb2NrVGVzdFJ1bm5lcigpCi0gICAgICAgIHN0YXJ0aW5nX3F1ZXVlID0gUXVl
dWUuUXVldWUoKQotICAgICAgICBzdG9wcGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAg
ICAgY2hpbGRfdGhyZWFkID0gVGVzdFRocmVhZChzdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVl
dWUpCi0gICAgICAgIGNoaWxkX3RocmVhZC5zdGFydCgpCi0gICAgICAgIHN0YXJ0ZWRfbXNnID0g
c3RhcnRpbmdfcXVldWUuZ2V0KCkKLSAgICAgICAgc3RvcHBpbmdfcXVldWUucHV0KG1zZykKLSAg
ICAgICAgdGhyZWFkcyA9IFtjaGlsZF90aHJlYWRdCi0gICAgICAgIHJldHVybiBydW5uZXIuX3dh
aXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRocmVhZHMsIE5vbmUpCi0KLSAgICBkZWYgdGVzdF9i
YXNpYyhzZWxmKToKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcn
KQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVkKQotCi0gICAgZGVmIHRlc3Rf
aW50ZXJydXB0KHNlbGYpOgotICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJl
YWQoJ0tleWJvYXJkSW50ZXJydXB0JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludGVycnVw
dGVkKQotCi0gICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKLSAgICAgICAgb2MgPSBvdXRwdXRj
YXB0dXJlLk91dHB1dENhcHR1cmUoKQotICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAg
ICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnVGltZW91dCcpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0ZWQpCi0gICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0
KCkKLQotICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvciwgc2VsZi5ydW5fb25lX3RocmVhZCwgJ0V4Y2VwdGlvbicpCi0KLQot
Y2xhc3MgU3RhbmRhbG9uZUZ1bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRl
ZiB0ZXN0X2xvZ193ZWRnZWRfdGhyZWFkKHNlbGYpOgotICAgICAgICBvYyA9IG91dHB1dGNhcHR1
cmUuT3V0cHV0Q2FwdHVyZSgpCi0gICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAg
bG9nZ2VyID0gcnVuX3dlYmtpdF90ZXN0cy5fbG9nCi0gICAgICAgIGFzdHJlYW0gPSBhcnJheV9z
dHJlYW0uQXJyYXlTdHJlYW0oKQotICAgICAgICBoYW5kbGVyID0gVGVzdEhhbmRsZXIoYXN0cmVh
bSkKLSAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKLQotICAgICAgICBzdGFydGlu
Z19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5R
dWV1ZSgpCi0gICAgICAgIGNoaWxkX3RocmVhZCA9IFRlc3RUaHJlYWQoc3RhcnRpbmdfcXVldWUs
IHN0b3BwaW5nX3F1ZXVlKQotICAgICAgICBjaGlsZF90aHJlYWQuc3RhcnQoKQotICAgICAgICBt
c2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQotCi0gICAgICAgIHJ1bl93ZWJraXRfdGVzdHMuX2xv
Z193ZWRnZWRfdGhyZWFkKGNoaWxkX3RocmVhZCkKLSAgICAgICAgc3RvcHBpbmdfcXVldWUucHV0
KCcnKQotICAgICAgICBjaGlsZF90aHJlYWQuam9pbih0aW1lb3V0PTEuMCkKLQotICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKGFzdHJlYW0uZW1wdHkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShjaGlsZF90aHJlYWQuaXNBbGl2ZSgpKQotICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCi0K
LQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74292</attachid>
            <date>2010-11-18 14:49:43 -0800</date>
            <delta_ts>2010-11-23 19:03:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48820-20101118144942.patch</filename>
            <type>text/plain</type>
            <size>79418</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA2NjNmNTUxYmM5N2EwODQxOWQ2YTRjNzEzZThjY2U3ZTE2OWY0NjQ2Li5jMmRiMzIz
ZDAyODE5NjJjMGJjNDM4NDI5MGVlNDQ4Nzg2M2JlNDhiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAK
KzIwMTAtMTEtMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGFsbCBvZiB0aGUg
TlJXVCBtdWx0aXRocmVhZGluZyBpc3N1ZXMgYnkgbW92aW5nIHRvCisgICAgICAgIG11bHRpcHJv
Y2Vzcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3ByaW50aW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdl
X2Jyb2tlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weToKKworMjAxMC0xMS0x
NyAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBBbmRyZWFzIEtsaW5nLgorCisgICAgICAgIHdlYmtpdC1wYXRjaCBwcmV0dHktZGlmZiBz
aG91bGRuJ3QgbmVlZCB0byBiZSBydW4gZnJvbSBhIGNoZWNrb3V0IHJvb3QgaW4gZ2l0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTYzOQorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5OgorCiAyMDEwLTEx
LTE3ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFRvbnkgQ2hhbmcuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVh
ZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CmluZGV4IDgxNDI4NjcyYjYwNTE4N2Uy
MjExMTc0NGMwNDQ5MGQ1NTk1ZWEzZWYuLmZiMDI1ZmY3MTAzZjM1ZGYwODlmYzdhZjJiMTYwMTQw
MGY3NTk5NGQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CkBAIC00MiwxMyArNDIsMTUgQEAgaW1wb3J0IGNvZGVj
cwogaW1wb3J0IGNvcHkKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCBRdWV1ZQog
aW1wb3J0IHNpZ25hbAogaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZAogaW1wb3J0IHRocmVhZGlu
ZwogaW1wb3J0IHRpbWUKLWltcG9ydCB0cmFjZWJhY2sKKworCitmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy50ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFzZQorZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgdGV4dF9kaWZmCitmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy50ZXN0X3R5cGVzIGltcG9ydCBpbWFnZV9kaWZmCiAKIGltcG9ydCB0ZXN0X2Zh
aWx1cmVzCiBpbXBvcnQgdGVzdF9vdXRwdXQKQEAgLTU4LDIzICs2MCw2IEBAIF9sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLiIKICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQiKQogCiAKLWRl
ZiBmaW5kX3RocmVhZF9zdGFjayhpZCk6Ci0gICAgIiIiUmV0dXJucyBhIHN0YWNrIG9iamVjdCB0
aGF0IGNhbiBiZSB1c2VkIHRvIGR1bXAgYSBzdGFjayB0cmFjZSBmb3IKLSAgICB0aGUgZ2l2ZW4g
dGhyZWFkIGlkIChvciBOb25lIGlmIHRoZSBpZCBpcyBub3QgZm91bmQpLiIiIgotICAgIGZvciB0
aHJlYWRfaWQsIHN0YWNrIGluIHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpOgotICAgICAg
ICBpZiB0aHJlYWRfaWQgPT0gaWQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RhY2sKLSAgICByZXR1
cm4gTm9uZQotCi0KLWRlZiBsb2dfc3RhY2soc3RhY2spOgotICAgICIiIkxvZyBhIHN0YWNrIHRy
YWNlIHRvIGxvZy5lcnJvcigpLiIiIgotICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBs
aW5lIGluIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKHN0YWNrKToKLSAgICAgICAgX2xvZy5lcnJv
cignRmlsZTogIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUp
KQotICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAgX2xvZy5lcnJvcignICAlcycgJSBsaW5l
LnN0cmlwKCkpCi0KLQogZGVmIF9leHBlY3RlZF90ZXN0X291dHB1dChwb3J0LCBmaWxlbmFtZSk6
CiAgICAgIiIiUmV0dXJucyBhbiBleHBlY3RlZCBUZXN0T3V0cHV0IG9iamVjdC4iIiIKICAgICBy
ZXR1cm4gdGVzdF9vdXRwdXQuVGVzdE91dHB1dChwb3J0LmV4cGVjdGVkX3RleHQoZmlsZW5hbWUp
LApAQCAtODIsNyArNjcsNyBAQCBkZWYgX2V4cGVjdGVkX3Rlc3Rfb3V0cHV0KHBvcnQsIGZpbGVu
YW1lKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LmV4cGVjdGVkX2No
ZWNrc3VtKGZpbGVuYW1lKSkKIAogZGVmIF9wcm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0
ZXN0X2lucHV0LCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgIHRl
c3Rfb3V0cHV0KToKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQsIG5hbWUpOgogICAg
ICIiIlJlY2VpdmVzIHRoZSBvdXRwdXQgZnJvbSBhIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MsIHN1
YmplY3RzIGl0IHRvIGEKICAgICBudW1iZXIgb2YgdGVzdHMsIGFuZCByZXR1cm5zIGEgbGlzdCBv
ZiBmYWlsdXJlIHR5cGVzIHRoZSB0ZXN0IHByb2R1Y2VkLgogCkBAIC05MCwzNCArNzUsMzIgQEAg
ZGVmIF9wcm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2lucHV0LCB0ZXN0X3R5cGVz
LCB0ZXN0X2FyZ3MsCiAgICAgICBwb3J0OiBwb3J0LXNwZWNpZmljIGhvb2tzCiAgICAgICBvcHRp
b25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmd1bWVudCBmcm9tIG9wdHBhcnNlCiAgICAgICBw
cm9jOiBhbiBhY3RpdmUgRHVtcFJlbmRlclRyZWUgcHJvY2VzcwotICAgICAgdGVzdF9pbnB1dDog
T2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUsIHVyaSBhbmQgdGltZW91dAorICAg
ICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRp
bWVvdXQKICAgICAgIHRlc3RfdHlwZXM6IGxpc3Qgb2YgdGVzdCB0eXBlcyB0byBzdWJqZWN0IHRo
ZSBvdXRwdXQgdG8KICAgICAgIHRlc3RfYXJnczogYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBl
YWNoIHRlc3QKICAgICAgIHRlc3Rfb3V0cHV0OiBhIFRlc3RPdXRwdXQgb2JqZWN0IGNvbnRhaW5p
bmcgdGhlIG91dHB1dCBvZiB0aGUgdGVzdAorICAgICAgbmFtZTogd29ya2VyIG5hbWUKIAogICAg
IFJldHVybnM6IGEgVGVzdFJlc3VsdCBvYmplY3QKICAgICAiIiIKICAgICBmYWlsdXJlcyA9IFtd
CiAKKyAgICB0ZXN0X25hbWUgPSBwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1
dC5maWxlbmFtZSkKKwogICAgIGlmIHRlc3Rfb3V0cHV0LmNyYXNoOgogICAgICAgICBmYWlsdXJl
cy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKSkKICAgICBpZiB0ZXN0X291dHB1
dC50aW1lb3V0OgogICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJl
VGltZW91dCgpKQogCiAgICAgaWYgdGVzdF9vdXRwdXQuY3Jhc2g6Ci0gICAgICAgIF9sb2cuZGVi
dWcoIlN0YWNrdHJhY2UgZm9yICVzOlxuJXMiICUgKHRlc3RfaW5wdXQuZmlsZW5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0LmVy
cm9yKSkKLSAgICAgICAgIyBTdHJpcCBvZmYgImZpbGU6Ly8iIHNpbmNlIFJlbGF0aXZlVGVzdEZp
bGVuYW1lIGV4cGVjdHMKLSAgICAgICAgIyBmaWxlc3lzdGVtIHBhdGhzLgotICAgICAgICBmaWxl
bmFtZSA9IG9zLnBhdGguam9pbihvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5wdXQuZmlsZW5hbWUpKQorICAgICAg
ICBfbG9nLmRlYnVnKCIlcyBTdGFja3RyYWNlIGZvciAlczpcbiVzIiAlIChuYW1lLCB0ZXN0X25h
bWUsIHRlc3Rfb3V0cHV0LmVycm9yKSkKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4o
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1lKQogICAgICAgICBmaWxlbmFtZSA9
IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdICsgIi1zdGFjay50eHQiCiAgICAgICAgIHBv
cnQubWF5YmVfbWFrZV9kaXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMF0pCiAgICAg
ICAgIHdpdGggY29kZWNzLm9wZW4oZmlsZW5hbWUsICJ3YiIsICJ1dGYtOCIpIGFzIGZpbGU6CiAg
ICAgICAgICAgICBmaWxlLndyaXRlKHRlc3Rfb3V0cHV0LmVycm9yKQogICAgIGVsaWYgdGVzdF9v
dXRwdXQuZXJyb3I6Ci0gICAgICAgIF9sb2cuZGVidWcoIlByZXZpb3VzIHRlc3Qgb3V0cHV0IHN0
ZGVyciBsaW5lczpcbiVzIiAlIHRlc3Rfb3V0cHV0LmVycm9yKQorICAgICAgICBfbG9nLmRlYnVn
KCIlcyAlcyBvdXRwdXQgc3RkZXJyIGxpbmVzOlxuJXMiICUgKG5hbWUsIHRlc3RfbmFtZSwgdGVz
dF9vdXRwdXQuZXJyb3IpKQogCiAgICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQgPSBfZXhwZWN0ZWRf
dGVzdF9vdXRwdXQocG9ydCwgdGVzdF9pbnB1dC5maWxlbmFtZSkKIApAQCAtMTQyLDI2ICsxMjUs
MTEgQEAgZGVmIF9wcm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2lucHV0LCB0ZXN0
X3R5cGVzLCB0ZXN0X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
dGFsX3RpbWVfZm9yX2FsbF9kaWZmcywgdGltZV9mb3JfZGlmZnMpCiAKIAotZGVmIF9wYWRfdGlt
ZW91dCh0aW1lb3V0KToKLSAgICAiIiJSZXR1cm5zIGEgc2FmZSBtdWx0aXBsZSBvZiB0aGUgcGVy
LXRlc3QgdGltZW91dCB2YWx1ZSB0byB1c2UKLSAgICB0byBkZXRlY3QgaHVuZyB0ZXN0IHRocmVh
ZHMuCi0KLSAgICAiIiIKLSAgICAjIFdoZW4gd2UncmUgcnVubmluZyBvbmUgdGVzdCBwZXIgRHVt
cFJlbmRlclRyZWUgcHJvY2Vzcywgd2UgY2FuCi0gICAgIyBlbmZvcmNlIGEgaGFyZCB0aW1lb3V0
LiAgVGhlIER1bXBSZW5kZXJUcmVlIHdhdGNoZG9nIHVzZXMgMi41eAotICAgICMgdGhlIHRpbWVv
dXQ7IHdlIHdhbnQgdG8gYmUgbGFyZ2VyIHRoYW4gdGhhdC4KLSAgICByZXR1cm4gdGltZW91dCAq
IDMKLQotCi1kZWYgX21pbGxpc2Vjb25kc190b19zZWNvbmRzKG1zZWNzKToKLSAgICByZXR1cm4g
ZmxvYXQobXNlY3MpIC8gMTAwMC4wCi0KLQogZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hl
Y2tzdW0ob3B0aW9ucyk6CiAgICAgcmV0dXJuIG9wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIG5vdCAo
b3B0aW9ucy5uZXdfYmFzZWxpbmUgb3Igb3B0aW9ucy5yZXNldF9yZXN1bHRzKQogCiAKLWRlZiBf
cnVuX3NpbmdsZV90ZXN0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRl
c3RfYXJncywgZHJpdmVyKToKK2RlZiBfcnVuX3NpbmdsZV90ZXN0KHBvcnQsIG9wdGlvbnMsIHRl
c3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywgZHJpdmVyLCBuYW1lKToKICAgICAjIEZJ
WE1FOiBQdWxsIHRoaXMgaW50byBUZXN0U2hlbGxUaHJlYWQuX3J1bigpLgogCiAgICAgIyBUaGUg
aW1hZ2UgaGFzaCBpcyB1c2VkIHRvIGF2b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAgaWYgdGhlCkBA
IC0xNzUsMTMgKzE0MywxMyBAQCBkZWYgX3J1bl9zaW5nbGVfdGVzdChwb3J0LCBvcHRpb25zLCB0
ZXN0X2lucHV0LCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIGRyaXZlcik6CiAgICAgdGVzdF9pbnB1
dC51cmkgPSBwb3J0LmZpbGVuYW1lX3RvX3VyaSh0ZXN0X2lucHV0LmZpbGVuYW1lKS5zdHJpcCgp
CiAgICAgdGVzdF9vdXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QodGVzdF9pbnB1dC51cmksIHRlc3Rf
aW5wdXQudGltZW91dCwgaW1hZ2VfaGFzaF90b19kcml2ZXIpCiAgICAgcmV0dXJuIF9wcm9jZXNz
X291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2lucHV0LCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3Rfb3V0cHV0LCBuYW1lKQogCiAKIGNsYXNzIFNpbmdsZVRlc3RUaHJl
YWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgIiIiVGhyZWFkIHdyYXBwZXIgZm9yIHJ1bm5pbmcg
YSBzaW5nbGUgdGVzdCBmaWxlLiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9w
dGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncyk6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsIHRlc3RfaW5wdXQsIHRlc3Rf
dHlwZXMsIHRlc3RfYXJncyk6CiAgICAgICAgICIiIgogICAgICAgICBBcmdzOgogICAgICAgICAg
IHBvcnQ6IG9iamVjdCBpbXBsZW1lbnRpbmcgcG9ydC1zcGVjaWZpYyBob29rcwpAQCAtMTk5LDYg
KzE2Nyw4IEBAIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAg
ICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0X3R5cGVzCiAgICAgICAgIHNlbGYuX3Rlc3RfYXJn
cyA9IHRlc3RfYXJncwogICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCisgICAgICAgIHNlbGYu
X3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNlbGYuX25hbWUgPSAnd29y
a2VyLSVkJyAlIHdvcmtlcl9udW1iZXIKIAogICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgIHNl
bGYuX2NvdmVyZWRfcnVuKCkKQEAgLTIxMSwyNDUgKzE4MSwxMjMgQEAgY2xhc3MgU2luZ2xlVGVz
dFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgc2VsZi5fZHJpdmVyLnN0YXJ0KCkK
ICAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHQgPSBfcnVuX3NpbmdsZV90ZXN0KHNlbGYuX3BvcnQs
IHNlbGYuX29wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl90ZXN0X2lucHV0LCBzZWxmLl90ZXN0X3R5cGVzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9hcmdzLCBzZWxmLl9kcml2
ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90
ZXN0X2FyZ3MsIHNlbGYuX2RyaXZlciwgc2VsZi5fbmFtZSkKICAgICAgICAgc2VsZi5fZHJpdmVy
LnN0b3AoKQogCiAgICAgZGVmIGdldF90ZXN0X3Jlc3VsdChzZWxmKToKICAgICAgICAgcmV0dXJu
IHNlbGYuX3Rlc3RfcmVzdWx0CiAKIAotY2xhc3MgV2F0Y2hhYmxlVGhyZWFkKHRocmVhZGluZy5U
aHJlYWQpOgotICAgICIiIlRoaXMgY2xhc3MgYWJzdHJhY3RzIGFuIGludGVyZmFjZSB1c2VkIGJ5
Ci0gICAgcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2Zp
bmlzaCBmb3IgdGhyZWFkCi0gICAgbWFuYWdlbWVudC4iIiIKLSAgICBkZWYgX19pbml0X18oc2Vs
Zik6Ci0gICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2Vs
Zi5fY2FuY2VsZWQgPSBGYWxzZQotICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IE5vbmUK
LSAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9uZQotICAgICAgICBzZWxmLl90aHJlYWRf
aWQgPSBOb25lCi0KLSAgICBkZWYgY2FuY2VsKHNlbGYpOgotICAgICAgICAiIiJTZXQgYSBmbGFn
IHRlbGxpbmcgdGhpcyB0aHJlYWQgdG8gcXVpdC4iIiIKLSAgICAgICAgc2VsZi5fY2FuY2VsZWQg
PSBUcnVlCi0KLSAgICBkZWYgY2xlYXJfbmV4dF90aW1lb3V0KHNlbGYpOgotICAgICAgICAiIiJN
YXJrIGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRvIHN0b3Agc2V0dGluZyB0aW1lb3V0cy4i
IiIKLSAgICAgICAgc2VsZi5fdGltZW91dCA9IDAKLQotICAgIGRlZiBleGNlcHRpb25faW5mbyhz
ZWxmKToKLSAgICAgICAgIiIiSWYgcnVuKCkgdGVybWluYXRlZCBvbiBhbiB1bmNhdWdodCBleGNl
cHRpb24sIHJldHVybiBpdCBoZXJlCi0gICAgICAgICgodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykg
dHVwbGUpLgotICAgICAgICBSZXR1cm5zIE5vbmUgaWYgcnVuKCkgdGVybWluYXRlZCBub3JtYWxs
eS4gTWVhbnQgdG8gYmUgY2FsbGVkIGFmdGVyCi0gICAgICAgIGpvaW5pbmcgdGhpcyB0aHJlYWQu
IiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb25faW5mbwotCi0gICAgZGVmIGlkKHNl
bGYpOgotICAgICAgICAiIiJSZXR1cm4gYSB0aHJlYWQgaWRlbnRpZmllci4iIiIKLSAgICAgICAg
cmV0dXJuIHNlbGYuX3RocmVhZF9pZAotCi0gICAgZGVmIG5leHRfdGltZW91dChzZWxmKToKLSAg
ICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlzIHN1cHBvc2VkIHRvIGZpbmlzaCBi
eS4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dAotCi0KLWNsYXNzIFRlc3RT
aGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
LCBvcHRpb25zLCBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVldWUsCi0gICAgICAgICAg
ICAgICAgIHRlc3RfdHlwZXMsIHRlc3RfYXJncyk6CitjbGFzcyBXb3JrZXIob2JqZWN0KToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgY29udGFpbmVyLCBvcHRpb25zLCB3b3JrZXJfbnVt
YmVyKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbGwgdGhlIGxvY2FsIHN0YXRlIGZvciB0aGlz
IER1bXBSZW5kZXJUcmVlIHRocmVhZC4KIAogICAgICAgICBBcmdzOgogICAgICAgICAgIHBvcnQ6
IGludGVyZmFjZSB0byBwb3J0LXNwZWNpZmljIGhvb2tzCisgICAgICAgICAgY29udGFpbmVyOiBj
b250YWluZXIgb2JqZWN0IHRvIHJlY2VpdmUgdGVzdHMgZnJvbQogICAgICAgICAgIG9wdGlvbnM6
IGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZ3VtZW50IGZyb20gb3B0cGFyc2UKLSAgICAgICAgICBm
aWxlbmFtZV9saXN0X3F1ZXVlOiBBIHRocmVhZCBzYWZlIFF1ZXVlIGNsYXNzIHRoYXQgY29udGFp
bnMgbGlzdHMKLSAgICAgICAgICAgICAgb2YgdHVwbGVzIG9mIChmaWxlbmFtZSwgdXJpKSBwYWly
cy4KLSAgICAgICAgICByZXN1bHRfcXVldWU6IEEgdGhyZWFkIHNhZmUgUXVldWUgY2xhc3MgdGhh
dCB3aWxsIGNvbnRhaW4KLSAgICAgICAgICAgICAgc2VyaWFsaXplZCBUZXN0UmVzdWx0IG9iamVj
dHMuCi0gICAgICAgICAgdGVzdF90eXBlczogQSBsaXN0IG9mIFRlc3RUeXBlIG9iamVjdHMgdG8g
cnVuIHRoZSB0ZXN0IG91dHB1dAotICAgICAgICAgICAgICBhZ2FpbnN0LgotICAgICAgICAgIHRl
c3RfYXJnczogQSBUZXN0QXJndW1lbnRzIG9iamVjdCB0byBwYXNzIHRvIGVhY2ggVGVzdFR5cGUu
CisgICAgICAgICAgd29ya2VyX251bWJlcjogbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmcKICAgICAg
ICAgIiIiCi0gICAgICAgIFdhdGNoYWJsZVRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBz
ZWxmLl9jYW5jZWxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2NvbnRhaW5lciA9IGNvbnRhaW5l
cgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0
aW9ucwotICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9x
dWV1ZQotICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUgPSByZXN1bHRfcXVldWUKKyAgICAgICAg
c2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi5fbmFtZSA9
ICd3b3JrZXItJWQnICUgd29ya2VyX251bWJlcgorICAgICAgICBzZWxmLl9iYXRjaF9zaXplID0g
c2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplCisgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAor
CiAgICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBbXQotICAgICAgICBzZWxmLl90ZXN0X3R5
cGVzID0gdGVzdF90eXBlcwotICAgICAgICBzZWxmLl90ZXN0X2FyZ3MgPSB0ZXN0X2FyZ3MKKyAg
ICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IFtdCisgICAgICAgIGZvciBjbHMgaW4gc2VsZi5fdGVz
dF90eXBlX2NsYXNzZXMoKToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKGNs
cyhzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpKQorICAgICAgICBzZWxmLl90ZXN0X2FyZ3Mg
PSBzZWxmLl90ZXN0X2FyZ3Mod29ya2VyX251bWJlcikKICAgICAgICAgc2VsZi5fZHJpdmVyID0g
Tm9uZQotICAgICAgICBzZWxmLl90ZXN0X2dyb3VwX3RpbWluZ19zdGF0cyA9IHt9Ci0gICAgICAg
IHNlbGYuX3Rlc3RfcmVzdWx0cyA9IFtdCi0gICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKLSAg
ICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IDAKLSAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gMAot
ICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2h0dHBf
bG9ja193YWl0X2JlZ2luID0gMAotICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgPSAw
Ci0KLSAgICAgICAgIyBDdXJyZW50IGdyb3VwIG9mIHRlc3RzIHdlJ3JlIHJ1bm5pbmcuCi0gICAg
ICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXAgPSBOb25lCi0gICAgICAgICMgTnVtYmVyIG9mIHRlc3Rz
IGluIHNlbGYuX2N1cnJlbnRfZ3JvdXAuCi0gICAgICAgIHNlbGYuX251bV90ZXN0c19pbl9jdXJy
ZW50X2dyb3VwID0gTm9uZQotICAgICAgICAjIFRpbWUgYXQgd2hpY2ggd2Ugc3RhcnRlZCBydW5u
aW5nIHRlc3RzIGZyb20gc2VsZi5fY3VycmVudF9ncm91cC4KLSAgICAgICAgc2VsZi5fY3VycmVu
dF9ncm91cF9zdGFydF90aW1lID0gTm9uZQotCi0gICAgZGVmIGdldF90ZXN0X2dyb3VwX3RpbWlu
Z19zdGF0cyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyBhIGRpY3Rpb25hcnkgbWFwcGluZyB0
ZXN0IGdyb3VwIHRvIGEgdHVwbGUgb2YKLSAgICAgICAgKG51bWJlciBvZiB0ZXN0cyBpbiB0aGF0
IGdyb3VwLCB0aW1lIHRvIHJ1biB0aGUgdGVzdHMpIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl90
ZXN0X2dyb3VwX3RpbWluZ19zdGF0cwotCi0gICAgZGVmIGdldF90ZXN0X3Jlc3VsdHMoc2VsZik6
Ci0gICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiBhbGwgdGVzdHMgcnVuIG9uIHRoaXMgdGhy
ZWFkLgotCi0gICAgICAgIFRoaXMgaXMgdXNlZCB0byBjYWxjdWxhdGUgcGVyLXRocmVhZCBzdGF0
aXN0aWNzLgotCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9yZXN1bHRz
Ci0KLSAgICBkZWYgZ2V0X3RvdGFsX3RpbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBtYXgoc2Vs
Zi5fc3RvcF90aW1lIC0gc2VsZi5fc3RhcnRfdGltZSAtCi0gICAgICAgICAgICAgICAgICAgc2Vs
Zi5faHR0cF9sb2NrX3dhaXRfdGltZSgpLCAwLjApCi0KLSAgICBkZWYgZ2V0X251bV90ZXN0cyhz
ZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX251bV90ZXN0cwotCi0gICAgZGVmIHJ1bihzZWxm
KToKLSAgICAgICAgIiIiRGVsZWdhdGUgbWFpbiB3b3JrIHRvIGEgaGVscGVyIG1ldGhvZCBhbmQg
d2F0Y2ggZm9yIHVuY2F1Z2h0Ci0gICAgICAgIGV4Y2VwdGlvbnMuIiIiCi0gICAgICAgIHNlbGYu
X2NvdmVyZWRfcnVuKCkKLQotICAgIGRlZiBfY292ZXJlZF9ydW4oc2VsZik6Ci0gICAgICAgICMg
RklYTUU6IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0aW5lIHRvIHdvcmsgYXJvdW5kIGEgYnVnCi0g
ICAgICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8vYml0YnVja2V0Lm9yZy9uZWQvY292ZXJh
Z2VweS9pc3N1ZS84NS4KLSAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkLmdldF9pZGVu
dCgpCi0gICAgICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxm
Ll9udW1fdGVzdHMgPSAwCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyVz
IHN0YXJ0aW5nJyAlIChzZWxmLmdldE5hbWUoKSkpCi0gICAgICAgICAgICBzZWxmLl9ydW4odGVz
dF9ydW5uZXI9Tm9uZSwgcmVzdWx0X3N1bW1hcnk9Tm9uZSkKLSAgICAgICAgICAgIF9sb2cuZGVi
dWcoJyVzIGRvbmUgKCVkIHRlc3RzKScgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuZ2V0X251bV90ZXN0cygpKSkKLSAgICAgICAgZXhjZXB0IEtleWJvYXJk
SW50ZXJydXB0OgotICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2lu
Zm8oKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgaW50ZXJydXB0ZWQiICUgc2VsZi5nZXRO
YW1lKCkpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICMgU2F2ZSB0aGUgZXhjZXB0aW9u
IGZvciBvdXIgY2FsbGVyIHRvIHNlZS4KLSAgICAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZv
ID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IHRpbWUudGlt
ZSgpCi0gICAgICAgICAgICBfbG9nLmVycm9yKCclcyBkeWluZywgZXhjZXB0aW9uIHJhaXNlZCcg
JSBzZWxmLmdldE5hbWUoKSkKLQotICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSB0aW1lLnRpbWUo
KQotCi0gICAgZGVmIHJ1bl9pbl9tYWluX3RocmVhZChzZWxmLCB0ZXN0X3J1bm5lciwgcmVzdWx0
X3N1bW1hcnkpOgotICAgICAgICAiIiJUaGlzIGhvb2sgYWxsb3dzIHVzIHRvIHJ1biB0aGUgdGVz
dHMgZnJvbSB0aGUgbWFpbiB0aHJlYWQgaWYKLSAgICAgICAgLS1udW0tdGVzdC1zaGVsbHM9PTEs
IGluc3RlYWQgb2YgaGF2aW5nIHRvIGFsd2F5cyBydW4gdHdvIG9yIG1vcmUKLSAgICAgICAgdGhy
ZWFkcy4gVGhpcyBhbGxvd3MgdXMgdG8gZGVidWcgdGhlIHRlc3QgaGFybmVzcyB3aXRob3V0IGhh
dmluZyB0bwotICAgICAgICBkbyBtdWx0aS10aHJlYWRlZCBkZWJ1Z2dpbmcuIiIiCi0gICAgICAg
IHNlbGYuX3J1bih0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpCi0KLSAgICBkZWYgY2FuY2Vs
KHNlbGYpOgotICAgICAgICAiIiJDbGVhbiB1cCBodHRwIGxvY2sgYW5kIHNldCBhIGZsYWcgdGVs
bGluZyB0aGlzIHRocmVhZCB0byBxdWl0LiIiIgotICAgICAgICBzZWxmLl9zdG9wX3NlcnZlcnNf
d2l0aF9sb2NrKCkKLSAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLmNhbmNlbChzZWxmKQotCi0gICAg
ZGVmIG5leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0
ZXN0IGlzIHN1cHBvc2VkIHRvIGZpbmlzaCBieS4iIiIKLSAgICAgICAgaWYgc2VsZi5fbmV4dF90
aW1lb3V0OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dCArIHNlbGYuX2h0
dHBfbG9ja193YWl0X3RpbWUoKQotICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0Ci0K
LSAgICBkZWYgX2h0dHBfbG9ja193YWl0X3RpbWUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0
aGUgdGltZSB3aGF0IGh0dHAgbG9ja2luZyB0YWtlcy4iIiIKLSAgICAgICAgaWYgc2VsZi5faHR0
cF9sb2NrX3dhaXRfYmVnaW4gPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGlm
IHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIHRpbWUu
dGltZSgpIC0gc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4KLSAgICAgICAgcmV0dXJuIHNlbGYu
X2h0dHBfbG9ja193YWl0X2VuZCAtIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luCi0KLSAgICBk
ZWYgX3J1bihzZWxmLCB0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJN
YWluIHdvcmsgZW50cnkgcG9pbnQgb2YgdGhlIHRocmVhZC4gQmFzaWNhbGx5IHdlIHB1bGwgdXJs
cyBmcm9tIHRoZQotICAgICAgICBmaWxlbmFtZSBxdWV1ZSBhbmQgcnVuIHRoZSB0ZXN0cyB1bnRp
bCB3ZSBydW4gb3V0IG9mIHVybHMuCi0KLSAgICAgICAgSWYgdGVzdF9ydW5uZXIgaXMgbm90IE5v
bmUsIHRoZW4gd2UgY2FsbCB0ZXN0X3J1bm5lci5VcGRhdGVTdW1tYXJ5KCkKLSAgICAgICAgd2l0
aCB0aGUgcmVzdWx0cyBvZiBlYWNoIHRlc3QuIiIiCi0gICAgICAgIGJhdGNoX3NpemUgPSBzZWxm
Ll9vcHRpb25zLmJhdGNoX3NpemUKLSAgICAgICAgYmF0Y2hfY291bnQgPSAwCi0KLSAgICAgICAg
IyBBcHBlbmQgdGVzdHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4
dCBmaWxlLgotICAgICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5
Ol9QcmVwYXJlTGlzdHNBbmRQcmludE91dHB1dC4KICAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1l
ID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuLnR4dCIpCi0gICAg
ICAgIHRlc3RzX3J1bl9maWxlID0gY29kZWNzLm9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAiYSIs
ICJ1dGYtOCIpCi0KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIHNlbGYuX2Nh
bmNlbGVkOgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Rlc3RpbmcgY2FuY2VsbGVkJykK
LSAgICAgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAg
cmV0dXJuCi0KLSAgICAgICAgICAgIGlmIGxlbihzZWxmLl9maWxlbmFtZV9saXN0KSBpcyAwOgot
ICAgICAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfZ3JvdXAgaXMgbm90IE5vbmU6Ci0gICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzW3NlbGYuX2N1cnJl
bnRfZ3JvdXBdID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX251bV90ZXN0c19p
bl9jdXJyZW50X2dyb3VwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUudGltZSgpIC0g
c2VsZi5fY3VycmVudF9ncm91cF9zdGFydF90aW1lKQotCi0gICAgICAgICAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwLCBzZWxmLl9maWxlbmFtZV9s
aXN0ID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1
ZS5nZXRfbm93YWl0KCkKLSAgICAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQotICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQotICAgICAgICAgICAgICAg
ICAgICB0ZXN0c19ydW5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybgot
Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF9ncm91cCA9PSAidGVzdHNfdG9faHR0
cF9sb2NrIjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmVyc193aXRoX2xv
Y2soKQotICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6Ci0gICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQotCi0gICAgICAgICAg
ICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3JvdXAgPSBsZW4oc2VsZi5fZmlsZW5h
bWVfbGlzdCkKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUg
PSB0aW1lLnRpbWUoKQotCi0gICAgICAgICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZmlsZW5hbWVf
bGlzdC5wb3AoKQotCi0gICAgICAgICAgICAjIFdlIGhhdmUgYSB1cmwsIHJ1biB0ZXN0cy4KLSAg
ICAgICAgICAgIGJhdGNoX2NvdW50ICs9IDEKLSAgICAgICAgICAgIHNlbGYuX251bV90ZXN0cyAr
PSAxCi0gICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3Rfc2luZ2x5KHRlc3RfaW5wdXQpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0KHRlc3Rf
aW5wdXQpCi0KLSAgICAgICAgICAgIGZpbGVuYW1lID0gdGVzdF9pbnB1dC5maWxlbmFtZQotICAg
ICAgICAgICAgdGVzdHNfcnVuX2ZpbGUud3JpdGUoZmlsZW5hbWUgKyAiXG4iKQotICAgICAgICAg
ICAgaWYgcmVzdWx0LmZhaWx1cmVzOgotICAgICAgICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwg
RHVtcFJlbmRlclRyZWUgaWYgd2UgbmVlZCB0by4KLSAgICAgICAgICAgICAgICBpZiBsZW4oWzEg
Zm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBmLnNo
b3VsZF9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKV0pOgotICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQotICAgICAgICAgICAgICAgICAgICAjIFJlc2V0IHRo
ZSBiYXRjaCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgotICAgICAgICAgICAg
ICAgICAgICBiYXRjaF9jb3VudCA9IDAKLSAgICAgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJv
ciBtZXNzYWdlKHMpLgotICAgICAgICAgICAgICAgIGVycm9yX3N0ciA9ICdcbicuam9pbihbJyAg
JyArIGYubWVzc2FnZSgpIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZiBpbiByZXN1bHQuZmFpbHVyZXNdKQotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVz
ICVzIGZhaWxlZDpcbiVzIiAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9zdHIpKQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuZ2V0TmFtZSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2Zp
bGVuYW1lKGZpbGVuYW1lKSkpCi0gICAgICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUucHV0KHJl
c3VsdC5kdW1wcygpKQotCi0gICAgICAgICAgICBpZiBiYXRjaF9zaXplID4gMCBhbmQgYmF0Y2hf
Y291bnQgPj0gYmF0Y2hfc2l6ZToKLSAgICAgICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwg
YW5kIHJlc2V0IGNvdW50LgorICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9IGNvZGVjcy5v
cGVuKHRlc3RzX3J1bl9maWxlbmFtZSwgImEiLCAidXRmLTgiKQorCisgICAgZGVmIGhhbmRsZV9z
dG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHJlY2VpdmVkIC0gbm8gbW9yZSB0ZXN0cyB0byBy
dW4uIiIiCisgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisgICAgICAgIGlm
IHNlbGYuX3Rlc3RzX3J1bl9maWxlOgorICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUu
Y2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBOb25lCisKKyAgICBk
ZWYgX3Rlc3RfYXJncyhzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgIiIiUmV0dXJucyB0
aGUgdHVwbGUgb2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9yIER1bXBSZW5kZXJUcmVlLiIi
IgorICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5UZXN0QXJndW1lbnRzKCkKKyAg
ICAgICAgdGVzdF9hcmdzLnBuZ19wYXRoID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgcG5nX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5f
b3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJwbmdfcmVzdWx0JXMucG5nIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyKQorICAgICAgICAgICAgdGVzdF9hcmdzLnBuZ19w
YXRoID0gcG5nX3BhdGgKKyAgICAgICAgdGVzdF9hcmdzLm5ld19iYXNlbGluZSA9IHNlbGYuX29w
dGlvbnMubmV3X2Jhc2VsaW5lCisgICAgICAgIHRlc3RfYXJncy5yZXNldF9yZXN1bHRzID0gc2Vs
Zi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzCisKKyAgICAgICAgcmV0dXJuIHRlc3RfYXJncworCisg
ICAgZGVmIF90ZXN0X3R5cGVfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgY2xhc3NlcyA9IFt0ZXh0
X2RpZmYuVGVzdFRleHREaWZmXQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3Rz
OgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoaW1hZ2VfZGlmZi5JbWFnZURpZmYpCisgICAg
ICAgIHJldHVybiBjbGFzc2VzCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6
CisgICAgICAgIGZpbGVuYW1lID0gdGVzdF9pbnB1dC5maWxlbmFtZQorICAgICAgICB0ZXN0X2lu
cHV0LnVyaSA9IHNlbGYuX3BvcnQuZmlsZW5hbWVfdG9fdXJpKHRlc3RfaW5wdXQuZmlsZW5hbWUp
CisgICAgICAgIGlmIF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oc2VsZi5fb3B0aW9u
cyk6CisgICAgICAgICAgICB0ZXN0X2lucHV0LmltYWdlX2NoZWNrc3VtID0gc2VsZi5fcG9ydC5l
eHBlY3RlZF9jaGVja3N1bSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorCisgICAgICAgIHRlc3RfaW5w
dXQudXJpID0gc2VsZi5fcG9ydC5maWxlbmFtZV90b191cmkodGVzdF9pbnB1dC5maWxlbmFtZSkK
KyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgKz0gMQorCisgICAgICAgICMgV2UgZ2l2ZSBEUlQg
c29tZSBleHRyYSB0aW1lIHRvIGRldGVjdCBhIHRpbWVvdXQsIGFuZCB0aGVuCisgICAgICAgICMg
Z2l2ZSBvdXIgd2F0Y2hkb2cgdGhyZWFkIGEgc2ltaWxhciBhbW91bnQgdG8gZGV0ZWN0IGEgaHVu
ZworICAgICAgICAjIERSVC4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gY29udmVydCB0aGUgdGVzdCB0
aW1lb3V0IGZyb20gYQorICAgICAgICAjIHN0cmluZyB2YWx1ZSBpbiBtaWxsaXNlY29uZHMgdG8g
YSBmbG9hdCBmb3IgUHl0aG9uLgorICAgICAgICB0ZXN0X3BhZGRpbmcgPSA0MC4wCisgICAgICAg
IGtpbGxfcGFkZGluZyA9IDEuMAorICAgICAgICB0aHJlYWRfdGltZW91dCA9IGZsb2F0KHRlc3Rf
aW5wdXQudGltZW91dCkgLyAxMDAwLjAgKyB0ZXN0X3BhZGRpbmcKKworICAgICAgICBzdGFydCA9
IHRpbWUudGltZSgpCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKKyAgICAg
ICAgICAgIHNlbGYuX2NvbnRhaW5lci5zdGFydGVkX3Rlc3QodGVzdF9pbnB1dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWVvdXQgKyBraWxsX3Bh
ZGRpbmcpCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl9hbm90aGVyX3Ro
cmVhZCh0ZXN0X2lucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyZWFkX3RpbWVvdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzZWxmLl9jb250YWluZXIuc3RhcnRlZF90ZXN0KHRlc3RfaW5wdXQsIHRocmVhZF90aW1lb3V0
KQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQodGVz
dF9pbnB1dCkKKworICAgICAgICBzZWxmLl9jb250YWluZXIuZmluaXNoZWRfdGVzdChyZXN1bHQs
IHRpbWUudGltZSgpIC0gc3RhcnQpCisKKyAgICAgICAgaWYgc2VsZi5fYmF0Y2hfc2l6ZSA+IDAg
YW5kIHNlbGYuX2JhdGNoX2NvdW50ID49IHNlbGYuX2JhdGNoX3NpemU6CisgICAgICAgICAgICAj
IEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50LgorICAgICAgICAgICAgc2VsZi5fa2ls
bF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gMAor
CisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLndyaXRlKHRlc3RfaW5wdXQuZmlsZW5hbWUg
KyAiXG4iKQorICAgICAgICBpZiByZXN1bHQuZmFpbHVyZXM6CisgICAgICAgICAgICAjIENoZWNr
IGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCisgICAgICAgICAgICBpZiBs
ZW4oWzEgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzCisgICAgICAgICAgICAgICAgICAgIGlmIGYu
c2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpXSk6CiAgICAgICAgICAgICAgICAgc2VsZi5f
a2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICBiYXRjaF9jb3VudCA9IDAK
LQotICAgICAgICAgICAgaWYgdGVzdF9ydW5uZXI6Ci0gICAgICAgICAgICAgICAgdGVzdF9ydW5u
ZXIudXBkYXRlX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCi0KLSAgICBkZWYgX3J1bl90ZXN0X3Np
bmdseShzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBiYXRj
aCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgorICAgICAgICAgICAgICAgIHNl
bGYuX2JhdGNoX2NvdW50ID0gMAorICAgICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2Fn
ZShzKS4KKyAgICAgICAgICAgIGVycm9yX3N0ciA9ICdcbicuam9pbihbJyAgJyArIGYubWVzc2Fn
ZSgpIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiBpbiByZXN1bHQu
ZmFpbHVyZXNdKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgZmFpbGVkOlxuJXMiICUg
KHNlbGYuX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1dC5maWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9zdHIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
JXMgJXMgcGFzc2VkIiAlIChzZWxmLl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmlsZW5hbWUpKSkKKwor
ICAgIGRlZiBfcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCwgdGhy
ZWFkX3RpbWVvdXQpOgogICAgICAgICAiIiJSdW4gYSB0ZXN0IGluIGEgc2VwYXJhdGUgdGhyZWFk
LCBlbmZvcmNpbmcgYSBoYXJkIHRpbWUgbGltaXQuCiAKICAgICAgICAgU2luY2Ugd2UgY2FuIG9u
bHkgZGV0ZWN0IHRoZSB0ZXJtaW5hdGlvbiBvZiBhIHRocmVhZCwgbm90IGFueSBpbnRlcm5hbApA
QCAtNDYxLDE5ICszMDksMTYgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVh
ZCk6CiAKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICBBIFRlc3RSZXN1bHQKLQogICAgICAg
ICAiIiIKICAgICAgICAgd29ya2VyID0gU2luZ2xlVGVzdFRocmVhZChzZWxmLl9wb3J0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fdGVzdF9hcmdzKQogCiAgICAgICAgIHdvcmtlci5zdGFydCgpCiAKLSAg
ICAgICAgdGhyZWFkX3RpbWVvdXQgPSBfbWlsbGlzZWNvbmRzX3RvX3NlY29uZHMoCi0gICAgICAg
ICAgICBfcGFkX3RpbWVvdXQoaW50KHRlc3RfaW5wdXQudGltZW91dCkpKQotICAgICAgICB0aHJl
YWQuX25leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgdGhyZWFkX3RpbWVvdXQKICAgICAgICAg
d29ya2VyLmpvaW4odGhyZWFkX3RpbWVvdXQpCiAgICAgICAgIGlmIHdvcmtlci5pc0FsaXZlKCk6
CiAgICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwg
cnVubmluZywgdGhlCkBAIC00OTYsMTEgKzM0MSwxMiBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQo
V2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0Nhbm5vdCBnZXQgcmVz
dWx0cyBvZiB0ZXN0OiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0LmZp
bGVuYW1lKQogICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVz
dF9pbnB1dC5maWxlbmFtZSwgZmFpbHVyZXM9W10sCi0gICAgICAgICAgICAgICAgdGVzdF9ydW5f
dGltZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9MCkKKyAg
ICAgICAgICAgICAgICB0ZXN0X3J1bl90aW1lPTAsIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcz0w
LAorICAgICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzPXt9KQogCiAgICAgICAgIHJldHVybiBy
ZXN1bHQKIAotICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgZGVmIF9y
dW5fdGVzdF9pbl90aGlzX3RocmVhZChzZWxmLCB0ZXN0X2lucHV0KToKICAgICAgICAgIiIiUnVu
IGEgc2luZ2xlIHRlc3QgZmlsZSB1c2luZyBhIHNoYXJlZCBEdW1wUmVuZGVyVHJlZSBwcm9jZXNz
LgogCiAgICAgICAgIEFyZ3M6CkBAIC01MDksMTQgKzM1NSw5IEBAIGNsYXNzIFRlc3RTaGVsbFRo
cmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2Jq
ZWN0LgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fZW5zdXJlX2R1bXBfcmVuZGVyX3RyZWVf
aXNfcnVubmluZygpCi0gICAgICAgIHRocmVhZF90aW1lb3V0ID0gX21pbGxpc2Vjb25kc190b19z
ZWNvbmRzKAotICAgICAgICAgICAgIF9wYWRfdGltZW91dChpbnQodGVzdF9pbnB1dC50aW1lb3V0
KSkpCi0gICAgICAgIHNlbGYuX25leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgdGhyZWFkX3Rp
bWVvdXQKLSAgICAgICAgdGVzdF9yZXN1bHQgPSBfcnVuX3NpbmdsZV90ZXN0KHNlbGYuX3BvcnQs
IHNlbGYuX29wdGlvbnMsIHRlc3RfaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLCBzZWxmLl90ZXN0X2FyZ3MsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXIpCi0gICAgICAgIHNlbGYu
X3Rlc3RfcmVzdWx0cy5hcHBlbmQodGVzdF9yZXN1bHQpCi0gICAgICAgIHJldHVybiB0ZXN0X3Jl
c3VsdAorICAgICAgICByZXR1cm4gX3J1bl9zaW5nbGVfdGVzdChzZWxmLl9wb3J0LCBzZWxmLl9v
cHRpb25zLCB0ZXN0X2lucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX3Rlc3RfdHlwZXMsIHNlbGYuX3Rlc3RfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9kcml2ZXIsIHNlbGYuX25hbWUpCiAKICAgICBkZWYgX2Vuc3VyZV9k
dW1wX3JlbmRlcl90cmVlX2lzX3J1bm5pbmcoc2VsZik6CiAgICAgICAgICIiIlN0YXJ0IHRoZSBz
aGFyZWQgRHVtcFJlbmRlclRyZWUsIGlmIGl0J3Mgbm90IHJ1bm5pbmcuCkBAIC01MzIsMjkgKzM3
Myw2IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMp
CiAgICAgICAgICAgICBzZWxmLl9kcml2ZXIuc3RhcnQoKQogCi0gICAgZGVmIF9zdGFydF9zZXJ2
ZXJzX3dpdGhfbG9jayhzZWxmKToKLSAgICAgICAgIiIiQWNxdWlyZSBodHRwIGxvY2sgYW5kIHN0
YXJ0IHRoZSBzZXJ2ZXJzLiIiIgotICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9
IHRpbWUudGltZSgpCi0gICAgICAgIF9sb2cuZGVidWcoJ0FjcXVpcmUgaHR0cCBsb2NrIC4uLicp
Ci0gICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQotICAgICAgICBfbG9nLmRl
YnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQotICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0
X2h0dHBfc2VydmVyKCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNl
cnZlciAuLi4nKQotICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQot
ICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgPSB0aW1lLnRpbWUoKQotICAgICAgICBz
ZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRydWUKLQotICAgIGRlZiBfc3RvcF9zZXJ2ZXJzX3dpdGhf
bG9jayhzZWxmKToKLSAgICAgICAgIiIiU3RvcCB0aGUgc2VydmVycyBhbmQgcmVsZWFzZSBodHRw
IGxvY2suIiIiCi0gICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgotICAgICAgICAgICAg
X2xvZy5kZWJ1ZygnU3RvcHBpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgICAgIHNlbGYu
X3BvcnQuc3RvcF9odHRwX3NlcnZlcigpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGlu
ZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vi
c29ja2V0X3NlcnZlcigpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCdSZWxlYXNlIGh0dHAgbG9j
ayAuLi4nKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBfbG9jaygpCi0gICAg
ICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IEZhbHNlCi0KICAgICBkZWYgX2tpbGxfZHVt
cF9yZW5kZXJfdHJlZShzZWxmKToKICAgICAgICAgIiIiS2lsbCB0aGUgRHVtcFJlbmRlclRyZWUg
cHJvY2VzcyBpZiBpdCdzIHJ1bm5pbmcuIiIiCiAgICAgICAgIGlmIHNlbGYuX2RyaXZlcjoKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWRfdW5pdHRlc3QucHkKaW5kZXggNjNmODZkOTNkODk0OTVlYTk3YzlmMDFh
YTE3NDkxNjhlYjZhYWI4ZC4uNDg2OTJmM2JiOTUxOGZkNDI5MWUyNWM0MzRlODJkMTAzNGUyMzE2
MyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRfdW5pdHRlc3QucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
ZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRfdW5pdHRlc3QucHkKQEAgLTI4LDIxICsyOCwxMSBAQAog
CiAiIiIiVGVzdHMgY29kZSBwYXRocyBub3QgY292ZXJlZCBieSB0aGUgcmVndWxhciB1bml0IHRl
c3RzLiIiIgogCi1pbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAotaW1wb3J0IGR1bXBfcmVu
ZGVyX3RyZWVfdGhyZWFkCi0KIAogY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAg
ZGVmIHRlc3RfZmluZF90aHJlYWRfc3RhY2tfZm91bmQoc2VsZik6Ci0gICAgICAgIGlkLCBzdGFj
ayA9IHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpWzBdCi0gICAgICAgIGZvdW5kX3N0YWNr
ID0gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuZmluZF90aHJlYWRfc3RhY2soaWQpCi0gICAgICAg
IHNlbGYuYXNzZXJ0Tm90RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCi0KLSAgICBkZWYgdGVzdF9m
aW5kX3RocmVhZF9zdGFja19ub3RfZm91bmQoc2VsZik6Ci0gICAgICAgIGZvdW5kX3N0YWNrID0g
ZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuZmluZF90aHJlYWRfc3RhY2soMCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKKyAgICBwYXNzCiAKIAogaWYgX19uYW1l
X18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2Fn
ZV9icm9rZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODAwYjA1YmExMjkxMjkxNTQ0OTI5ZTQwMTliOTQzNDIz
YTljOGZhZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CkBAIC0wLDAgKzEs
NTY2IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiTW9kdWxlIGZvciBoYW5kbGluZyBtZXNzYWdl
cywgdGhyZWFkcywgcHJvY2Vzc2VzLCBhbmQgY29uY3VycmVuY3kgZm9yIHJ1bi13ZWJraXQtdGVz
dHMuCisKK1RoZSBtb2RlbCB3ZSB1c2UgaXMgdGhhdCBvZiBhIG1lc3NhZ2UgYnJva2VyIC0gaXQg
cHJvdmlkZXMgYSBtZXNzYWdpbmcKK2Fic3RyYWN0aW9uIGFuZCBtZXNzYWdlIGxvb3BzLCBhbmQg
aGFuZGxlcyBsYXVuY2hpbmcgdGhyZWFkcyBhbmQvb3IgcHJvY2Vzc2VzCitkZXBlbmRpbmcgb24g
dGhlIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uLgorCisiIiIKKworaW1wb3J0IGNQaWNrbGUKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBR
dWV1ZQoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0
IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKKworaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
CitpbXBvcnQgdGVzdF9yZXN1bHRzCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fZmls
ZV9fKQorCisKK2RlZiBnZXQocG9ydCwgb3B0aW9ucyk6CisgICAgaWYgb3B0aW9ucy53b3JrZXJz
X2FyZSA9PSAnaW5saW5lJzoKKyAgICAgICAgcmV0dXJuIFNpbmdsZVRocmVhZGVkQnJva2VyKHBv
cnQsIG9wdGlvbnMpCisgICAgaWYgb3B0aW9ucy53b3JrZXJzX2FyZSA9PSAndGhyZWFkcyc6Cisg
ICAgICAgIHJldHVybiBNdWx0aVRocmVhZGVkQnJva2VyKHBvcnQsIG9wdGlvbnMpCisgICAgcmV0
dXJuIE11bHRpUHJvY2Vzc0Jyb2tlcihwb3J0LCBvcHRpb25zKQorCisKK2NsYXNzIF9NZXNzYWdl
KG9iamVjdCk6CisgICAgVEVTVF9MSVNUID0gJ3Rlc3RfbGlzdCcKKyAgICBTVE9QID0gJ3N0b3An
CisgICAgRE9ORSA9ICdkb25lJworICAgIFNUQVJURURfVEVTVCA9ICdzdGFydGVkX3Rlc3QnCisg
ICAgRklOSVNIRURfVEVTVCA9ICdmaW5pc2hlZF90ZXN0JworICAgIEZJTklTSEVEX0xJU1QgPSAn
ZmluaXNoZWRfbGlzdCcKKyAgICBFWENFUFRJT04gPSAnZXhjZXB0aW9uJworCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBsb2FkcyhzdHIpOgorICAgICAgICBvYmogPSBjUGlja2xlLmxvYWRz
KHN0cikKKyAgICAgICAgYXNzZXJ0KGlzaW5zdGFuY2Uob2JqLCBfTWVzc2FnZSkpCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgc3JjLCBkZXN0LCBoZHIsIGJvZHkpOgorICAgICAgICBzZWxmLnNy
YyA9IHNyYworICAgICAgICBzZWxmLmRlc3QgPSBkZXN0CisgICAgICAgIHNlbGYuaGRyID0gaGRy
CisgICAgICAgIHNlbGYuYm9keSA9IGJvZHkKKworICAgIGRlZiBkdW1wcyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuIGNQaWNrbGUuZHVtcHMoc2VsZikKKworCitjbGFzcyBfV29ya2VyU3RhdGUob2Jq
ZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9IE5vbmUK
KyAgICAgICAgc2VsZi5uZXh0X3RpbWVvdXQgPSBOb25lCisgICAgICAgIHNlbGYudGhyZWFkID0g
Tm9uZQorICAgICAgICBzZWxmLndlZGdlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuZG9uZSA9IEZh
bHNlCisKKworY2xhc3MgQnJva2VyKG9iamVjdCk6CisgICAgTUFOQUdFUiA9ICdtYW5hZ2VyJwor
ICAgIEFOWV9XT1JLRVIgPSAnd29ya2VyLVxkKycKKworICAgIElOX01FTU9SWV9SRVBSRVNFTlRB
VElPTiA9ICI8aW5fbWVtb3J5PiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbG9hZHMo
c3RyKToKKyAgICAgICAgYXNzZXJ0IHN0ciA9PSBCcm9rZXIuSU5fTUVNT1JZX1JFUFJFU0VOVEFU
SU9OCisgICAgICAgIGdsb2JhbCBfYnJva2VyCisgICAgICAgIHJldHVybiBfYnJva2VyCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX3BvcnQg
PSBwb3J0CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX21h
bmFnZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3dvcmtlcnMgPSB7fQorICAgICAgICBzZWxmLl9u
dW1fd29ya2VycyA9IGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykKKyAgICAgICAg
c2VsZi5fbWFuYWdlcl9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fd29ya2Vy
X3F1ZXVlID0gUXVldWUuUXVldWUoKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAg
IHBhc3MKKworICAgIGRlZiBzdGFydF93b3JrZXJzKHNlbGYpOgorICAgICAgICAiIiJJbnN0YW50
aWF0ZXMgYW5kIHN0YXJ0cyB0aGUgVGVzdFNoZWxsVGhyZWFkKHMpLiIiIgorICAgICAgICAjIElu
c3RhbnRpYXRlIFRlc3RTaGVsbFRocmVhZHMgYW5kIHN0YXJ0IHRoZW0uCisgICAgICAgIGZvciB3
b3JrZXJfbnVtYmVyIGluIHhyYW5nZShzZWxmLl9udW1fd29ya2Vycyk6CisgICAgICAgICAgICAj
IENyZWF0ZSBzZXBhcmF0ZSBUZXN0VHlwZXMgaW5zdGFuY2VzIGZvciBlYWNoIHRocmVhZC4KKyAg
ICAgICAgICAgIHdvcmtlciA9IF9Xb3JrZXJTdGF0ZSgpCisKKyAgICAgICAgICAgIHdvcmtlci50
aHJlYWQgPSBzZWxmLl9zdGFydF93b3JrZXIod29ya2VyX251bWJlcikKKyAgICAgICAgICAgIHdv
cmtlci5uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgICAgICBzZWxm
Ll93b3JrZXJzW3dvcmtlci5uYW1lXSA9IHdvcmtlcgorCisgICAgZGVmIF9zdGFydF93b3JrZXIo
c2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IK
KworICAgIGRlZiBfYmFpbChzZWxmLCBtc2cpOgorICAgICAgICBfbG9nLmVycm9yKG1zZykKKyAg
ICAgICAgYXNzZXJ0IEZhbHNlLCBtc2cKKworICAgIGRlZiBzdG9wX3dvcmtlcnMoc2VsZik6Cisg
ICAgICAgICMgRklYTUU6IFNob3VsZCB0aGlzIGJlIGJsb2NraW5nPworICAgICAgICBmb3IgaSBp
biB4cmFuZ2UobGVuKHNlbGYuX3dvcmtlcnMpKToKKyAgICAgICAgICAgIHNlbGYucG9zdF9zdG9w
KCkKKworICAgIGRlZiBjYW5jZWxfd29ya2VycyhzZWxmKToKKyAgICAgICAgZm9yIHdvcmtlciBp
biBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgd29ya2VyLnRocmVhZC5jYW5j
ZWwoKQorICAgICAgICBzZWxmLl9wb2xsX21hbmFnZXJfcXVldWUoc2VsZi5fbWFuYWdlci5nZXRO
YW1lKCksIHRpbWVvdXQ9MC4wKQorCisgICAgZGVmIHBvc3RfdGVzdF9saXN0KHNlbGYsIHRlc3Rf
bGlzdCk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c2VsZi5NQU5BR0VSLCBkZXN0PXNlbGYuQU5Z
X1dPUktFUiwKKyAgICAgICAgICAgICAgICAgIGhkcj1fTWVzc2FnZS5URVNUX0xJU1QsIGJvZHk9
dGVzdF9saXN0KQorCisgICAgZGVmIHBvc3Rfc3RhcnRlZF90ZXN0KHNlbGYsIHNyYywgdGVzdF9p
bmZvLCBoYW5nX3RpbWVvdXQpOgorICAgICAgICBzZWxmLl9wdXQoc3JjPXNyYywgZGVzdD1zZWxm
Lk1BTkFHRVIsIGhkcj1fTWVzc2FnZS5TVEFSVEVEX1RFU1QsCisgICAgICAgICAgICAgICAgICBi
b2R5PSh0ZXN0X2luZm8sIGhhbmdfdGltZW91dCkpCisKKyAgICBkZWYgcG9zdF9maW5pc2hlZF9s
aXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6CisgICAg
ICAgIHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0PXNlbGYuTUFOQUdFUiwgaGRyPV9NZXNzYWdlLkZJ
TklTSEVEX0xJU1QsCisgICAgICAgICAgICAgICAgICBib2R5PShsaXN0X25hbWUsIG51bV90ZXN0
cywgZWxhcHNlZF90aW1lKSkKKworICAgIGRlZiBwb3N0X2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc3Jj
LCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0
PXNlbGYuTUFOQUdFUiwgaGRyPV9NZXNzYWdlLkZJTklTSEVEX1RFU1QsCisgICAgICAgICAgICAg
ICAgICBib2R5PShyZXN1bHQsIGVsYXBzZWRfdGltZSkpCisKKyAgICBkZWYgcG9zdF9leGNlcHRp
b24oc2VsZiwgc3JjLCBleGNfaW5mbyk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0
PXNlbGYuTUFOQUdFUiwgaGRyPV9NZXNzYWdlLkVYQ0VQVElPTiwKKyAgICAgICAgICAgICAgICAg
IGJvZHk9ZXhjX2luZm8pCisKKyAgICBkZWYgcG9zdF9zdG9wKHNlbGYpOgorICAgICAgICBzZWxm
Ll9wdXQoc3JjPXNlbGYuTUFOQUdFUiwgZGVzdD1zZWxmLkFOWV9XT1JLRVIsCisgICAgICAgICAg
ICAgICAgICBoZHI9X01lc3NhZ2UuU1RPUCwgYm9keT1Ob25lKQorCisgICAgZGVmIHBvc3RfZG9u
ZShzZWxmLCB3b3JrZXIpOgorICAgICAgICBzZWxmLl9wdXQoc3JjPXdvcmtlciwgZGVzdD1zZWxm
Lk1BTkFHRVIsCisgICAgICAgICAgICAgICAgICBoZHI9X01lc3NhZ2UuRE9ORSwgYm9keT1Ob25l
KQorCisgICAgZGVmIGxvb3Aoc2VsZiwgb2JqKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcigic3ViY2xhc3MgbXVzdCBpbXBsZW1lbnQgQnJva2VyLmxvb3AoKSIpCisKKyAgICBk
ZWYgX3B1dChzZWxmLCBzcmMsIGRlc3QsIGhkciwgYm9keSk6CisgICAgICAgIG1zZyA9IF9NZXNz
YWdlKHNyYywgZGVzdCwgaGRyLCBib2R5KQorICAgICAgICBpZiBtc2cuZGVzdCA9PSBzZWxmLk1B
TkFHRVI6CisgICAgICAgICAgICAjIF9sb2cuZGVidWcoIiVzOiBwb3N0aW5nICclcycgbXNnIHRv
IG1hbmFnZXIgcXVldWUiICUKKyAgICAgICAgICAgICMgICAgICAgICAgICAgKG1zZy5zcmMsIG1z
Zy5oZHIpKQorICAgICAgICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1ZS5wdXQobXNnKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgIyBfbG9nLmRlYnVnKCIlczogcG9zdGluZyAnJXMnIG1zZyB0
byB3b3JrZXIgcXVldWUiICUKKyAgICAgICAgICAgICMgICAgICAgICAgICAgKG1zZy5zcmMsIG1z
Zy5oZHIpKQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlLnB1dChtc2cpCisKKyAgICBk
ZWYgX2dldChzZWxmLCBuYW1lLCBxdWV1ZSwgYmxvY2ssIHRpbWVvdXQpOgorICAgICAgICBpZiBx
dWV1ZSA9PSBzZWxmLl9tYW5hZ2VyX3F1ZXVlOgorICAgICAgICAgICAgcXVldWVfbmFtZSA9ICJt
YW5hZ2VyIHF1ZXVlIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcXVldWVfbmFtZSA9ICJ3
b3JrZXIgcXVldWUiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI19sb2cuZGVidWcoIiVz
IG5hbWUgcmVhZGluZyBmcm9tICVzIHF1ZXVlIiAlIChuYW1lLCBxdWV1ZV9uYW1lKSkKKyAgICAg
ICAgICAgIG1zZyA9IHF1ZXVlLmdldChibG9jaywgdGltZW91dCkKKyAgICAgICAgICAgICNfbG9n
LmRlYnVnKCIlcyBnb3QgJyVzJyBtc2cgZnJvbSAlcyIgJSAobmFtZSwgbXNnLmhkciwgbXNnLnNy
YykpCisgICAgICAgICAgICByZXR1cm4gbXNnCisgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToK
KyAgICAgICAgICAgICNfbG9nLmRlYnVnKCIlcyBmb3VuZCAlcyBlbXB0eSIgJSAobmFtZSwgcXVl
dWVfbmFtZSkpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9wb2xsX21hbmFn
ZXJfcXVldWUoc2VsZiwgbmFtZSwgdGltZW91dCk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAg
ICAgICAgICAjIE5vdGUgdGhhdCBibG9jaz1UcnVlLCB0aW1lb3V0PTAgaXMgZXF1aXZhbGVudCB0
byBibG9jaz1GYWxzZS4KKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2dldChuYW1lLCBzZWxmLl9t
YW5hZ2VyX3F1ZXVlLCBUcnVlLCB0aW1lb3V0KQorICAgICAgICAgICAgaWYgbm90IG1zZzoKKyAg
ICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBtc2cuaGRyID09IF9NZXNzYWdl
LlNUQVJURURfVEVTVDoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfc3RhcnRlZF90ZXN0
KG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5GSU5JU0hFRF9URVNU
OgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9maW5pc2hlZF90ZXN0KG1zZykKKyAgICAg
ICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5GSU5JU0hFRF9MSVNUOgorICAgICAgICAg
ICAgICAgIHNlbGYuX2hhbmRsZV9maW5pc2hlZF9saXN0KG1zZykKKyAgICAgICAgICAgIGVsaWYg
bXNnLmhkciA9PSBfTWVzc2FnZS5ET05FOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9k
b25lKG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5FWENFUFRJT046
CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V4Y2VwdGlvbihtc2cpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2JhaWwoJ3VuZXhwZWN0ZWQgbWVzc2FnZSB0
eXBlIG9uIG1hbmFnZXIgcXVldWU6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBt
c2cuaGRyKQorCisgICAgZGVmIF9wb2xsX3dvcmtlcl9xdWV1ZShzZWxmLCB3b3JrZXIsIHBvbGxf
bWFuYWdlcik6CisgICAgICAgIHdoaWxlIG5vdCB3b3JrZXIuaXNfZG9uZSgpOgorICAgICAgICAg
ICAgbXNnID0gc2VsZi5fZ2V0KHdvcmtlci5nZXROYW1lKCksIHNlbGYuX3dvcmtlcl9xdWV1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgcG9sbF9tYW5hZ2VyLCBOb25lKQorICAg
ICAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgICAgICBpZiBub3QgcG9sbF9tYW5hZ2Vy
OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9iYWlsKCclcyB1bmV4cGVjdGVkbHkgcmFuIG91
dCBvZiBxdWV1ZWQgbWVzc2FnZXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
b3JrZXIuZ2V0TmFtZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlm
IG1zZy5oZHIgPT0gX01lc3NhZ2UuU1RPUDoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVf
c3RvcCh3b3JrZXIpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuVEVTVF9M
SVNUOgorICAgICAgICAgICAgICAgIChsaXN0X25hbWUsIHRlc3RfbGlzdCkgPSBtc2cuYm9keQor
ICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV90ZXN0X2xpc3Qod29ya2VyLCBsaXN0X25hbWUs
IHRlc3RfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGxf
bWFuYWdlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fYmFpbCgn
JXM6IHVuZXhwZWN0ZWQgbWVzc2FnZSB0eXBlIG9uIHdvcmtlciBxdWV1ZTogJXMnICUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXIuZ2V0TmFtZSgpLCBtc2cuaGRyKSkKKworICAg
IGRlZiBfaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBtc2cpOgorICAgICAgICAodGVzdF9pbmZv
LCBoYW5nX3RpbWVvdXQpID0gbXNnLmJvZHkKKyAgICAgICAgd29ya2VyID0gc2VsZi5fd29ya2Vy
c1ttc2cuc3JjXQorICAgICAgICB3b3JrZXIuY3VycmVudF90ZXN0X25hbWUgPSBzZWxmLl9wb3J0
LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbmZvLmZpbGVuYW1lKQorICAgICAgICB3b3Jr
ZXIubmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyBoYW5nX3RpbWVvdXQKKworICAgIGRlZiBf
aGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgbXNnKToKKyAgICAgICAgKHJlc3VsdCwgZWxhcHNl
ZF90aW1lKSA9IG1zZy5ib2R5CisgICAgICAgIHdvcmtlciA9IHNlbGYuX3dvcmtlcnNbbXNnLnNy
Y10KKyAgICAgICAgd29ya2VyLm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAgd29ya2VyLmN1
cnJlbnRfdGVzdCA9IE5vbmUKKworICAgICAgICBpZiB3b3JrZXIud2VkZ2VkOgorICAgICAgICAg
ICAgIyBIbW0uIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4KKyAgICAgICAgICAgIF9sb2cuZXJyb3Io
IiVzIHVud2VkZ2VkIiwgd29ya2VyLmdldE5hbWUoKSkKKworICAgICAgICBzZWxmLl9tYW5hZ2Vy
LmhhbmRsZV9maW5pc2hlZF90ZXN0KG1zZy5zcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKQorCisg
ICAgZGVmIF9oYW5kbGVfZmluaXNoZWRfbGlzdChzZWxmLCBtc2cpOgorICAgICAgICAobGlzdF9u
YW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkgPSBtc2cuYm9keQorICAgICAgICBzZWxmLl9t
YW5hZ2VyLmhhbmRsZV9maW5pc2hlZF9saXN0KG1zZy5zcmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3Rz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkX3Rp
bWUpCisKKyAgICBkZWYgX2hhbmRsZV9leGNlcHRpb24oc2VsZiwgbXNnKToKKyAgICAgICAgZXhj
ZXB0aW9uX2luZm8gPSBtc2cuYm9keQorICAgICAgICBzZWxmLl9tYW5hZ2VyLmhhbmRsZV9leGNl
cHRpb24obXNnLnNyYywgZXhjZXB0aW9uX2luZm8pCisKKyAgICBkZWYgX2hhbmRsZV9zdG9wKHNl
bGYsIHdvcmtlcik6CisgICAgICAgIHdvcmtlci5oYW5kbGVfc3RvcCgpCisKKyAgICBkZWYgX2hh
bmRsZV9kb25lKHNlbGYsIG1zZyk6CisgICAgICAgIHdvcmtlciA9IHNlbGYuX3dvcmtlcnNbbXNn
LnNyY10KKyAgICAgICAgd29ya2VyLmRvbmUgPSBUcnVlCisgICAgICAgICMgX2xvZy5kZWJ1Zygi
JXMgaXMgZG9uZSIgJSB3b3JrZXIubmFtZSkKKyAgICAgICAgc2VsZi5fbWFuYWdlci5oYW5kbGVf
ZG9uZShtc2cuc3JjKQorCisgICAgZGVmIF9oYW5kbGVfdGVzdF9saXN0KHNlbGYsIHdvcmtlciwg
bGlzdF9uYW1lLCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdlcik6CisgICAgICAgIHdvcmtlci5oYW5k
bGVfdGVzdF9saXN0KGxpc3RfbmFtZSwgdGVzdF9saXN0LCBwb2xsX21hbmFnZXIpCisKKyAgICBk
ZWYgX2xvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBTaW5nbGVUaHJlYWRlZEJyb2tlcihCcm9rZXIpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKToKKyAgICAgICAgQnJva2VyLl9f
aW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpCisgICAgICAgICMgRklYTUU6IENvdWxkIHVzZSBm
YWtlIHF1ZXVlcyBoZXJlLgorICAgICAgICBzZWxmLl9tYW5hZ2VyX3F1ZXVlID0gUXVldWUuUXVl
dWUoKQorICAgICAgICBzZWxmLl93b3JrZXJfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisKKyAgICBk
ZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgIyBGSVhNRTog
VXNlIFdvcmtlclRodW5rIGluc3RlYWQgLi4uCisgICAgICAgIHRodW5rID0gX1dvcmtlclRocmVh
ZChzZWxmLCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3b3JrZXJfbnVtYmVyKQorICAgICAgICByZXR1cm4gdGh1bmsKKworICAg
IGRlZiBsb29wKHNlbGYsIG1hbmFnZXIpOgorICAgICAgICBzZWxmLl9tYW5hZ2VyID0gbWFuYWdl
cgorICAgICAgICB3b3JrZXIgPSBzZWxmLl93b3JrZXJzWyd3b3JrZXItMCddCisgICAgICAgIHNl
bGYuX3BvbGxfd29ya2VyX3F1ZXVlKHdvcmtlci50aHJlYWQsIHBvbGxfbWFuYWdlcj1UcnVlKQor
CisgICAgZGVmIF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICBhc3Nl
cnQgRmFsc2UsICJTaW5nbGVUaHJlYWRlZEJyb2tlci5fbG9nX3dlZGdlZF93b3JrZXIoKSBzaG91
bGQgbmV2ZXIgYmUgY2FsbGVkIgorCisKK2NsYXNzIE11bHRpVGhyZWFkZWRCcm9rZXIoU2luZ2xl
VGhyZWFkZWRCcm9rZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKToK
KyAgICAgICAgU2luZ2xlVGhyZWFkZWRCcm9rZXIuX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9u
cykKKworICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAg
ICB0aHVuayA9IF9Xb3JrZXJUaHJlYWQoc2VsZiwgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV29y
a2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX251bWJlcikKKyAgICAg
ICAgdGh1bmsuc3RhcnQoKQorICAgICAgICByZXR1cm4gdGh1bmsKKworICAgIGRlZiBsb29wKHNl
bGYsIG9iaik6CisgICAgICAgIGlmIG9iai5nZXROYW1lKCkgPT0gc2VsZi5NQU5BR0VSOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX2xvb3BfbWFuYWdlcihvYmopCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fbG9vcF93b3JrZXIob2JqKQorCisgICAgZGVmIF9sb29w
X21hbmFnZXIoc2VsZiwgbWFuYWdlcik6CisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBtYW5hZ2Vy
CisgICAgICAgIHNlbGYuX3BvbGxfbWFuYWdlcl9xdWV1ZShtYW5hZ2VyLmdldE5hbWUoKSwgdGlt
ZW91dD0wLjAxKQorICAgICAgICB3aGlsZSBub3Qgc2VsZi5fY2hlY2tfb25fd29ya2VycygpOgor
ICAgICAgICAgICAgc2VsZi5fcG9sbF9tYW5hZ2VyX3F1ZXVlKG1hbmFnZXIuZ2V0TmFtZSgpLCB0
aW1lb3V0PTAuMDEpCisKKyAgICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToK
KyAgICAgICAgICAgIGFzc2VydCB3LndlZGdlZCBvciBub3Qgdy50aHJlYWQuaXNfYWxpdmUoKQor
CisgICAgZGVmIF9sb29wX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAgICAgICB3aGlsZSBub3Qg
d29ya2VyLmlzX2RvbmUoKToKKyAgICAgICAgICAgIHNlbGYuX3BvbGxfd29ya2VyX3F1ZXVlKHdv
cmtlciwgcG9sbF9tYW5hZ2VyPUZhbHNlKQorCisgICAgZGVmIF9jaGVja19vbl93b3JrZXJzKHNl
bGYpOgorICAgICAgICAiUmV0dXJucyB0cnVlIGlmZiBhbGwgdGhlIHdvcmtlcnMgaGF2ZSBlaXRo
ZXIgY29tcGxldGVkIG9yIHdlZGdlZC4iCisgICAgICAgIGRvbmUgPSBUcnVlCisgICAgICAgIHQg
PSB0aW1lLnRpbWUoKQorICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYuX3dvcmtlcnMudmFsdWVz
KCk6CisgICAgICAgICAgICBpZiBub3Qgd29ya2VyLmRvbmUgYW5kIG5vdCB3b3JrZXIud2VkZ2Vk
OgorICAgICAgICAgICAgICAgIG5leHRfdGltZW91dCA9IHdvcmtlci5uZXh0X3RpbWVvdXQKKyAg
ICAgICAgICAgICAgICBpZiAobmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0KToKKyAg
ICAgICAgICAgICAgICAgICAgbG9nX3dlZGdlZF90aHJlYWQod29ya2VyLndvcmtlci5uYW1lKCks
IHdvcmtlci53b3JrZXIuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd29ya2VyLmN1cnJlbnRfdGVzdF9uYW1lKQorICAgICAgICAgICAgICAgICAgICB3b3JrZXIu
d2VkZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg
ICMgX2xvZy5kZWJ1ZygiJXMgaXMgbm90IGRvbmUiICUgd29ya2VyLm5hbWUpCisgICAgICAgICAg
ICAgICAgICAgIGRvbmUgPSBGYWxzZQorCisgICAgICAgIGlmIGRvbmUgYW5kIGFueShbdy53ZWRn
ZWQgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKV0pOgorICAgICAgICAgICAgX2xvZy5l
cnJvcignJykKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1JlbWFpbmluZyB3b3JrZXJzIGFyZSB3
ZWRnZWQsIGJhaWxpbmcgb3V0LicpCisgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQorICAgICAg
ICBlbGlmIGRvbmU6CisgICAgICAgICAgICBfbG9nLmluZm8oJ05vIHdlZGdlZCB0aHJlYWRzJykK
KworICAgICAgICByZXR1cm4gZG9uZQorCisKK2NsYXNzIE11bHRpUHJvY2Vzc0Jyb2tlcihNdWx0
aVRocmVhZGVkQnJva2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6
CisgICAgICAgIEJyb2tlci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKQorICAgICAgICBz
ZWxmLl9tYW5hZ2VyX3F1ZXVlID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKyAgICAgICAgc2Vs
Zi5fd29ya2VyX3F1ZXVlID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKworICAgIGRlZiBfc3Rh
cnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICB0aHVuayA9IF9Xb3JrZXJQ
cm9jZXNzKHNlbGYsIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldvcmtlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3b3JrZXJfbnVtYmVyKQorICAgICAgICB0aHVuay5zdGFydCgp
CisgICAgICAgIHJldHVybiB0aHVuaworCisgICAgZGVmIHBvc3RfZXhjZXB0aW9uKHNlbGYsIHNy
YywgZXhjZXB0aW9uX2luZm8pOgorICAgICAgICAjIEZJWE1FOiBXZSBjYW4ndCBwaWNrbGUgdHJh
Y2ViYWNrIG9iamVjdHMsIHNvIGxvZyB0aGUgdHJhY2ViYWNrIGhlcmUuCisgICAgICAgIG1wX2V4
Y19pbmZvID0gKGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgTm9uZSkKKyAg
ICAgICAgTXVsdGlUaHJlYWRlZEJyb2tlci5wb3N0X2V4Y2VwdGlvbihzZWxmLCBzcmMsIG1wX2V4
Y19pbmZvKQorCisgICAgZGVmIF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAg
ICAgICBpZCA9IHdvcmtlci50aHJlYWQuaWQoKQorICAgICAgICBfbG9nLmVycm9yKCIiKQorICAg
ICAgICBfbG9nLmVycm9yKCIlcyAocGlkICVkKSBpcyB3ZWRnZWQgb24gdGVzdCAlcyIgJQorICAg
ICAgICAgICAgICAgICAgICh3b3JrZXIudGhyZWFkLmdldE5hbWUoKSwgaWQsIHdvcmtlci5jdXJy
ZW50X3Rlc3RfbmFtZSkpCisgICAgICAgIF9sb2cuZXJyb3IoIiIpCisKKworY2xhc3MgX1dvcmtl
clRodW5rKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX2Ns
YXNzLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25l
CisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgorICAgICAgICBzZWxmLl9vcHRpb25zID0g
YnJva2VyLl9vcHRpb25zCisgICAgICAgIHNlbGYuX3BvcnQgPSBicm9rZXIuX3BvcnQKKyAgICAg
ICAgc2VsZi5fY2FuY2VsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisg
ICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKKyAgICAgICAgc2VsZi5faWQgPSAw
CisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCisgICAgICAgIHNl
bGYuX3dvcmtlciA9IHdvcmtlcl9jbGFzcyhzZWxmLl9wb3J0LCBzZWxmLCBzZWxmLl9vcHRpb25z
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX251bWJlcikKKwor
ICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgIyB1c2VkIGR1cmluZyBsb2dfd2VkZ2VkX3dvcmtl
cgorICAgICAgICByZXR1cm4gc2VsZi5faWQKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAg
ICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKKworICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fZG9uZSBvciBzZWxmLl9jYW5jZWxsZWQKKworICAgIGRlZiBoYW5k
bGVfc3RvcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAg
ICAgICBzZWxmLl9yZWxlYXNlX2xvY2soKQorICAgICAgICBzZWxmLl93b3JrZXIuaGFuZGxlX3N0
b3AoKQorICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV90ZXN0X2xp
c3Qoc2VsZiwgbGlzdF9uYW1lLCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdlcik6CisgICAgICAgIGlm
IGxpc3RfbmFtZSA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKKyAgICAgICAgICAgIHNlbGYuX2Fj
cXVpcmVfbG9jaygpCisgICAgICAgIGVsaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAg
ICAgICBzZWxmLl9yZWxlYXNlX2xvY2soKQorCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRp
bWUoKQorICAgICAgICBudW1fdGVzdHMgPSAwCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RfbGlz
dDoKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlci5ydW5fdGVzdCh0ZXN0KQorICAgICAgICAgICAg
bnVtX3Rlc3RzICs9IDEKKworICAgICAgICAgICAgIyBGSVhNRTogTmVlZCB0byBnZXQgcmlkIG9m
IHRoaXMuCisgICAgICAgICAgICBpZiBwb2xsX21hbmFnZXI6CisgICAgICAgICAgICAgICAgc2Vs
Zi5fYnJva2VyLl9wb2xsX21hbmFnZXJfcXVldWUoc2VsZi5nZXROYW1lKCksIHRpbWVvdXQ9MC4w
KQorCisgICAgICAgICAgICBpZiBzZWxmLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCisKKyAg
ICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9yZWxlYXNl
X2xvY2soKQorCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X2ZpbmlzaGVkX2xpc3Qoc2VsZi5n
ZXROYW1lKCksIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6Cisg
ICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydGVkX3Rlc3Qoc2VsZiwgdGVzdF9pbmZvLCBodW5n
X3RocmVhZF90aW1lb3V0KToKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3Rfc3RhcnRlZF90ZXN0
KHNlbGYuZ2V0TmFtZSgpLCB0ZXN0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBodW5nX3RocmVhZF90aW1lb3V0KQorCisgICAgZGVmIGZpbmlzaGVkX3Rlc3Qo
c2VsZiwgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9m
aW5pc2hlZF90ZXN0KHNlbGYuZ2V0TmFtZSgpLCByZXN1bHQsIGVsYXBzZWRfdGltZSkKKworICAg
IGRlZiBfYWNxdWlyZV9sb2NrKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJpbmcg
aHR0cCBsb2NrIC4uLicpCisgICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQor
ICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICBz
ZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRp
bmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNv
Y2tldF9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRydWUKKworICAg
IGRlZiBfcmVsZWFzZV9sb2NrKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHRoZSBzZXJ2ZXJzIGFu
ZCByZWxlYXNlIGh0dHAgbG9jay4iIiIKKyAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6
CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAg
ICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cu
ZGVidWcoJ1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYu
X3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVs
ZWFzZV9odHRwX2xvY2soKQorICAgICAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxz
ZQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5faWQgPSBzZWxmLl9nZXRfaWQo
KQorICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiIgor
ICAgICAgICBfbG9nLmRlYnVnKCclcyBzdGFydGluZycgJSBuYW1lKQorCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5sb29wKHNlbGYpCisgICAgICAgIGV4Y2VwdCBLZXli
b2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBpbnRlcnJ1cHRl
ZCIKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGV4Y2Vw
dGlvbiByYWlzZWQiCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIl
cyBkb25lJXMiICUgKG5hbWUsIGV4Y2VwdGlvbl9tc2cpKQorICAgICAgICAgICAgaWYgZXhjZXB0
aW9uX21zZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5leGNf
aW5mbygpCisgICAgICAgICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfZXhjZXB0aW9uKHNlbGYu
Z2V0TmFtZSgpLCBzZWxmLl9leGNlcHRpb25faW5mbykKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tl
ci5wb3N0X2RvbmUobmFtZSkKKworICAgICAgICBhc3NlcnQgZXhjZXB0aW9uX21zZyBvciBzZWxm
Ll9kb25lIG9yIHNlbGYuX2NhbmNlbGxlZCwgImV4aXRpbmcgdW5leHBlY3RlZGx5IgorCisKK2Ns
YXNzIF9Xb3JrZXJUaHJlYWQoX1dvcmtlclRodW5rLCB0aHJlYWRpbmcuVGhyZWFkKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpOgor
ICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIF9Xb3JrZXJU
aHVuay5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlcikK
KyAgICAgICAgc2VsZi5uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisKKyAgICBk
ZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pZAorCisgICAgZGVmIF9nZXRfaWQo
c2VsZik6CisgICAgICAgIHJldHVybiB0aHJlYWQuZ2V0X2lkZW50KCkKKworICAgIGRlZiBjYW5j
ZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKKworICAgIGRlZiBzdGFy
dChzZWxmKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5zdGFydChzZWxmKQorCisKK2NsYXNz
IF9Xb3JrZXJQcm9jZXNzKF9Xb3JrZXJUaHVuaywgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJl
cik6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLl9faW5pdF9fKHNlbGYpCisgICAg
ICAgIF9Xb3JrZXJUaHVuay5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFzcywgd29y
a2VyX251bWJlcikKKyAgICAgICAgc2VsZi5uYW1lID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVt
YmVyCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgICMgRklYTUU6IGZpZ3VyZSBvdXQgaWYg
dGhpcyBuZWVkcyB0byBiZSBhd2FyZSBvZiBwYXJlbnQvY2hpbGQKKyAgICAgICAgcmV0dXJuIHNl
bGYucGlkCisKKyAgICBkZWYgX2dldF9pZChzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLmdldHBp
ZCgpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBU
cnVlCisgICAgICAgIHNlbGYudGVybWluYXRlKCkKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAg
ICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muc3RhcnQoc2VsZikKKworICAgIGRlZiBnZXRO
YW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisKKworZGVmIGxvZ193ZWRnZWRf
dGhyZWFkKG5hbWUsIGlkLCB0ZXN0X25hbWUpOgorICAgICIiIkxvZyBpbmZvcm1hdGlvbiBhYm91
dCB0aGUgZ2l2ZW4gdGhyZWFkIHN0YXRlLiIiIgorICAgIHN0YWNrID0gX2ZpbmRfdGhyZWFkX3N0
YWNrKGlkKQorICAgIGFzc2VydChzdGFjayBpcyBub3QgTm9uZSkKKyAgICBfbG9nLmVycm9yKCIi
KQorICAgIF9sb2cuZXJyb3IoIiVzICh0aWQgJWQpIGlzIHdlZGdlZCBvbiB0ZXN0ICVzIiAlIChu
YW1lLCBpZCwgdGVzdF9uYW1lKSkKKyAgICBfbG9nX3N0YWNrKHN0YWNrKQorICAgIF9sb2cuZXJy
b3IoIiIpCisKKworZGVmIF9maW5kX3RocmVhZF9zdGFjayhpZCk6CisgICAgIiIiUmV0dXJucyBh
IHN0YWNrIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGR1bXAgYSBzdGFjayB0cmFjZSBmb3IK
KyAgICB0aGUgZ2l2ZW4gdGhyZWFkIGlkIChvciBOb25lIGlmIHRoZSBpZCBpcyBub3QgZm91bmQp
LiIiIgorICAgIGZvciB0aHJlYWRfaWQsIHN0YWNrIGluIHN5cy5fY3VycmVudF9mcmFtZXMoKS5p
dGVtcygpOgorICAgICAgICBpZiB0aHJlYWRfaWQgPT0gaWQ6CisgICAgICAgICAgICByZXR1cm4g
c3RhY2sKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBfbG9nX3N0YWNrKHN0YWNrKToKKyAgICAi
IiJMb2cgYSBzdGFjayB0cmFjZSB0byBsb2cuZXJyb3IoKS4iIiIKKyAgICBmb3IgZmlsZW5hbWUs
IGxpbmVubywgbmFtZSwgbGluZSBpbiB0cmFjZWJhY2suZXh0cmFjdF9zdGFjayhzdGFjayk6Cisg
ICAgICAgIF9sb2cuZXJyb3IoJ0ZpbGU6ICIlcyIsIGxpbmUgJWQsIGluICVzJyAlIChmaWxlbmFt
ZSwgbGluZW5vLCBuYW1lKSkKKyAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgIF9sb2cuZXJy
b3IoJyAgJXMnICUgbGluZS5zdHJpcCgpKQorCisKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2Vy
X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTY2
M2Y4MzRhMmM3MzdjMDU5MDAxNjYwMzg2ZWUxMWMxMTcyMzcyYQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNjUgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IFF1ZXVlCitpbXBvcnQgc3lzCitpbXBvcnQg
dW5pdHRlc3QKKworZnJvbSBtZXNzYWdlX2Jyb2tlciBpbXBvcnQgKgorCisKK2NsYXNzIFRlc3RI
YW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFzdHJlYW0p
OgorICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5f
c3RyZWFtID0gYXN0cmVhbQorCisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAg
c2VsZi5fc3RyZWFtLndyaXRlKHNlbGYuZm9ybWF0KHJlY29yZCkpCisKKworY2xhc3MgVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZmluZF90aHJlYWRfc3RhY2tfZm91bmQo
c2VsZik6CisgICAgICAgICMgRklYTUU6IGltcGxlbWVudAorICAgICAgICByZXR1cm4KKyAgICAg
ICAgaWQsIHN0YWNrID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKClbMF0KKyAgICAgICAg
Zm91bmRfc3RhY2sgPSBmaW5kX3RocmVhZF9zdGFjayhpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRO
b3RFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfdGhyZWFkX3N0
YWNrX25vdF9mb3VuZChzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50CisgICAgICAg
IHJldHVybgorICAgICAgICBmb3VuZF9zdGFjayA9IGZpbmRfdGhyZWFkX3N0YWNrKDApCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCisKKyAgICBkZWYgdGVzdF9s
b2dfd2VkZ2VkX3dvcmtlcihzZWxmKToKKyAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50CisgICAg
ICAgIHJldHVybgorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1h
aW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9jaHJvbWl1bV9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQppbmRleCBkMWMzODNjMTNlYzJmMTNhZjVm
YjFmMTU0MDU3OWM0Yzg4OWZkZDYzLi43ZDcwNGMzYTg5YWY1NGFkMGRhZjA3NDhiNGQ4ODlhNjIy
YWNlNGNkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQpAQCAtNjIsMTUgKzYyLDYgQEAg
Y2xhc3MgQ2hyb21pdW1NYWNQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICdNYWNCdWlsZEluc3RydWN0aW9ucycpCiAgICAgICAgIHJldHVybiByZXN1
bHQKIAotICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgIyBG
SVhNRTogd2UgbmVlZCB0byBydW4gc2luZ2xlLXRocmVhZGVkIGZvciBub3cuIFNlZQotICAgICAg
ICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODU1My4gVW5mb3J0
dW5hdGVseSB0aGlzCi0gICAgICAgICMgcm91dGluZSBpcyBjYWxsZWQgcmlnaHQgYmVmb3JlIHRo
ZSBsb2dnZXIgaXMgY29uZmlndXJlZCwgc28gaWYgd2UKLSAgICAgICAgIyB0cnkgdG8gX2xvZy53
YXJuaW5nKCksIGl0IGdldHMgdGhyb3duIGF3YXkuCi0gICAgICAgIGltcG9ydCBzeXMKLSAgICAg
ICAgc3lzLnN0ZGVyci53cml0ZSgiRGVmYXVsdGluZyB0byBvbmUgY2hpbGQgLSBzZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NTUzXG4iKQotICAgICAgICByZXR1
cm4gMQotCiAgICAgZGVmIGRyaXZlcl9uYW1lKHNlbGYpOgogICAgICAgICAiIiJuYW1lIGZvciB0
aGlzIHBvcnQncyBlcXVpdmFsZW50IG9mIER1bXBSZW5kZXJUcmVlLiIiIgogICAgICAgICBpZiBz
ZWxmLmdldF9vcHRpb24oJ3VzZV9kcnQnKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKaW5kZXggNjk2ZTMzOThlYTRiMjhh
Yzc2MjI1OTA3ZGMzNjJmZmMzZmI4NmY5ZS4uNzJmOTFkODM4MjE1YWY0YmM0NGYxZGMxZjA2NTVk
YWRjN2QzMzZmZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9tYWMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKQEAgLTQ3LDE1ICs0Nyw2IEBAIGNsYXNzIE1hY1BvcnQo
V2ViS2l0UG9ydCk6CiAgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0KCdwb3J0X25hbWUnLCAnbWFj
JyArIHNlbGYudmVyc2lvbigpKQogICAgICAgICBXZWJLaXRQb3J0Ll9faW5pdF9fKHNlbGYsICoq
a3dhcmdzKQogCi0gICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAg
ICAjIEZJWE1FOiBuZXctcnVuLXdlYmtpdC10ZXN0cyBpcyB1bnN0YWJsZSBvbiBNYWMgcnVubmlu
ZyBtb3JlIHRoYW4KLSAgICAgICAgIyBmb3VyIHRocmVhZHMgaW4gcGFyYWxsZWwuCi0gICAgICAg
ICMgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjYyMgotICAg
ICAgICBjaGlsZF9wcm9jZXNzZXMgPSBXZWJLaXRQb3J0LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2Vz
KHNlbGYpCi0gICAgICAgIGlmIGNoaWxkX3Byb2Nlc3NlcyA+IDQ6Ci0gICAgICAgICAgICByZXR1
cm4gNAotICAgICAgICByZXR1cm4gY2hpbGRfcHJvY2Vzc2VzCi0KICAgICBkZWYgYmFzZWxpbmVf
c2VhcmNoX3BhdGgoc2VsZik6CiAgICAgICAgIHBvcnRfbmFtZXMgPSBbXQogICAgICAgICBpZiBz
ZWxmLl9uYW1lID09ICdtYWMtdGlnZXInOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXgg
YjM3ZmExZWJmMmJiMzIxMWQ1MjI5NGI1ZDg4MTVlZmI5NTRlMzZlZi4uNzE1MGVhZmM3ZDMyYTdj
MzljZDkyNGYyOTY2YzMzZjBiMzQwYzA0MCAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBA
IC02Nyw2ICs2Nyw3IEBAIGltcG9ydCB0cmFjZWJhY2sKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1w
b3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBq
c29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvcgogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQg
cHJpbnRpbmcKK2Zyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1lc3NhZ2VfYnJva2VyCiBmcm9t
IGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSBsYXlvdXRfcGFj
a2FnZSBpbXBvcnQgdGVzdF9mYWlsdXJlcwogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQgdGVz
dF9yZXN1bHRzCkBAIC0xNTEsNiArMTUyLDcgQEAgY2xhc3MgUmVzdWx0U3VtbWFyeShvYmplY3Qp
OgogICAgICAgICAgICAgc2VsZi51bmV4cGVjdGVkICs9IDEKIAogCisKIGRlZiBzdW1tYXJpemVf
dW5leHBlY3RlZF9yZXN1bHRzKHBvcnRfb2JqLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlfc3VtbWFyeSk6CiAgICAg
IiIiU3VtbWFyaXplIGFueSB1bmV4cGVjdGVkIHJlc3VsdHMgYXMgYSBkaWN0LgpAQCAtMjQwLDMz
ICsyNDIsMzIgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAjIGluIER1bXBSZW5kZXJUcmVlLgog
ICAgIERFRkFVTFRfVEVTVF9USU1FT1VUX01TID0gNiAqIDEwMDAKIAotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
cG9ydCwgb3B0aW9ucywgcHJpbnRlciwgYnJva2VyKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSB0
ZXN0IHJ1bm5lciBkYXRhIHN0cnVjdHVyZXMuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBw
b3J0OiBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQtc3BlY2lmaWMKICAgICAgICAgICBvcHRp
b25zOiBhIGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMKICAgICAgICAgICBwcmlu
dGVyOiBhIFByaW50ZXIgb2JqZWN0IHRvIHJlY29yZCB1cGRhdGVzIHRvLgorICAgICAgICAgIGJy
b2tlcjogb2JqZWN0IHVzZWQgdG8gY29tbXVuaWNhdGUgdy8gd29ya2Vycy4KICAgICAgICAgIiIi
CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRp
b25zCiAgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmludGVyCisgICAgICAgIHNlbGYuX2Jyb2tl
ciA9IGJyb2tlcgogCiAgICAgICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRvIGluc3Rh
bGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2Vj
dXJlX3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCiAgICAgICAgICMgICAg
ICAgIG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHVzZV90bHM9VHJ1ZSwgcG9ydD05MzIzKQog
Ci0gICAgICAgICMgYSBsaXN0IG9mIFRlc3RUeXBlIG9iamVjdHMKLSAgICAgICAgc2VsZi5fdGVz
dF90eXBlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQotICAgICAgICBpZiBvcHRpb25zLnBp
eGVsX3Rlc3RzOgotICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcy5hcHBlbmQoaW1hZ2VfZGlm
Zi5JbWFnZURpZmYpCi0KICAgICAgICAgIyBhIHNldCBvZiB0ZXN0IGZpbGVzLCBhbmQgdGhlIHNh
bWUgdGVzdHMgYXMgYSBsaXN0CiAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgPSBzZXQoKQogICAg
ICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBOb25lCi0gICAgICAgIHNlbGYuX3Jlc3VsdF9x
dWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKICAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSBGYWxzZQogCisg
ICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBtZXNzYWdlX2Jyb2tlci5Ccm9r
ZXIuTUFOQUdFUgorCiAgICAgZGVmIGNvbGxlY3RfdGVzdHMoc2VsZiwgYXJncywgbGFzdF91bmV4
cGVjdGVkX3Jlc3VsdHMpOgogICAgICAgICAiIiJGaW5kIGFsbCB0aGUgZmlsZXMgdG8gdGVzdC4K
IApAQCAtNDkxLDcgKzQ5Miw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICIiIlJldHVy
bnMgdGhlIGFwcHJvcHJpYXRlIFRlc3RJbnB1dCBvYmplY3QgZm9yIHRoZSBmaWxlLiBNb3N0bHkg
dGhpcwogICAgICAgICBpcyB1c2VkIGZvciBsb29raW5nIHVwIHRoZSB0aW1lb3V0IHZhbHVlIChp
biBtcykgdG8gdXNlIGZvciB0aGUgZ2l2ZW4KICAgICAgICAgdGVzdC4iIiIKLSAgICAgICAgaWYg
c2VsZi5fZXhwZWN0YXRpb25zLmhhc19tb2RpZmllcih0ZXN0X2ZpbGUsIHRlc3RfZXhwZWN0YXRp
b25zLlNMT1cpOgorICAgICAgICBpZiBzZWxmLl90ZXN0X2lzX3Nsb3codGVzdF9maWxlKToKICAg
ICAgICAgICAgIHJldHVybiBUZXN0SW5wdXQodGVzdF9maWxlLCBzZWxmLl9vcHRpb25zLnNsb3df
dGltZV9vdXRfbXMpCiAgICAgICAgIHJldHVybiBUZXN0SW5wdXQodGVzdF9maWxlLCBzZWxmLl9v
cHRpb25zLnRpbWVfb3V0X21zKQogCkBAIC01MDEsMjMgKzUwMiwyMiBAQCBjbGFzcyBUZXN0UnVu
bmVyOgogICAgICAgICBzcGxpdF9wYXRoID0gdGVzdF9maWxlLnNwbGl0KG9zLnNlcCkKICAgICAg
ICAgcmV0dXJuICdodHRwJyBpbiBzcGxpdF9wYXRoIG9yICd3ZWJzb2NrZXQnIGluIHNwbGl0X3Bh
dGgKIAotICAgIGRlZiBfZ2V0X3Rlc3RfZmlsZV9xdWV1ZShzZWxmLCB0ZXN0X2ZpbGVzKToKLSAg
ICAgICAgIiIiQ3JlYXRlIHRoZSB0aHJlYWQgc2FmZSBxdWV1ZSBvZiBsaXN0cyBvZiAodGVzdCBm
aWxlbmFtZXMsIHRlc3QgVVJJcykKLSAgICAgICAgdHVwbGVzLiBFYWNoIFRlc3RTaGVsbFRocmVh
ZCBwdWxscyBhIGxpc3QgZnJvbSB0aGlzIHF1ZXVlIGFuZCBydW5zCi0gICAgICAgIHRob3NlIHRl
c3RzIGluIG9yZGVyIGJlZm9yZSBncmFiYmluZyB0aGUgbmV4dCBhdmFpbGFibGUgbGlzdC4KKyAg
ICBkZWYgX3Rlc3RfaXNfc2xvdyhzZWxmLCB0ZXN0X2ZpbGUpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fZXhwZWN0YXRpb25zLmhhc19tb2RpZmllcih0ZXN0X2ZpbGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zLlNMT1cpCiAK
LSAgICAgICAgU2hhcmQgdGhlIGxpc3RzIGJ5IGRpcmVjdG9yeS4gVGhpcyBoZWxwcyBlbnN1cmUg
dGhhdCB0ZXN0cyB0aGF0IGRlcGVuZAotICAgICAgICBvbiBlYWNoIG90aGVyIChha2EgYmFkIHRl
c3RzISkgY29udGludWUgdG8gcnVuIHRvZ2V0aGVyIGFzIG1vc3QKLSAgICAgICAgY3Jvc3MtdGVz
dHMgZGVwZW5kZW5jaWVzIHRlbmQgdG8gb2NjdXIgd2l0aGluIHRoZSBzYW1lIGRpcmVjdG9yeS4K
KyAgICBkZWYgX3NoYXJkX3Rlc3RzKHNlbGYsIHRlc3RfZmlsZXMsIHNpbmdsZV90aHJlYWRlZCk6
CisgICAgICAgICIiIkdyb3VwcyB0ZXN0cyBpbnRvIGJhdGNoZXMuCisgICAgICAgIFRoaXMgaGVs
cHMgZW5zdXJlIHRoYXQgdGVzdHMgdGhhdCBkZXBlbmQgb24gZWFjaCBvdGhlciAoYWthIGJhZCB0
ZXN0cyEpCisgICAgICAgIGNvbnRpbnVlIHRvIHJ1biB0b2dldGhlciBhcyBtb3N0IGNyb3NzLXRl
c3RzIGRlcGVuZGVuY2llcyB0ZW5kIHRvCisgICAgICAgIG9jY3VyIHdpdGhpbiB0aGUgc2FtZSBk
aXJlY3RvcnkuCiAKICAgICAgICAgUmV0dXJuOgotICAgICAgICAgIFRoZSBRdWV1ZSBvZiBsaXN0
cyBvZiBUZXN0SW5wdXQgb2JqZWN0cy4KKyAgICAgICAgICAgIEEgbGlzdCBvZiBsaXN0cyBvZiBU
ZXN0SW5wdXQgb2JqZWN0cwogICAgICAgICAiIiIKLQogICAgICAgICB0ZXN0X2xpc3RzID0gW10K
ICAgICAgICAgdGVzdHNfdG9faHR0cF9sb2NrID0gW10KLSAgICAgICAgaWYgKHNlbGYuX29wdGlv
bnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsIG9yCi0gICAgICAgICAgICBzZWxmLl9pc19z
aW5nbGVfdGhyZWFkZWQoKSk6CisgICAgICAgIGlmIHNpbmdsZV90aHJlYWRlZDoKICAgICAgICAg
ICAgIGZvciB0ZXN0X2ZpbGUgaW4gdGVzdF9maWxlczoKICAgICAgICAgICAgICAgICB0ZXN0X2lu
cHV0ID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdF9maWxlKQogICAgICAgICAg
ICAgICAgIGlmIHNlbGYuX3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0X2ZpbGUpOgpAQCAtNTU2LDIz
ICs1NTYsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgdGVzdHNfdG9faHR0cF9s
b2NrLnJldmVyc2UoKQogICAgICAgICAgICAgdGVzdF9saXN0cy5pbnNlcnQoMCwgKCJ0ZXN0c190
b19odHRwX2xvY2siLCB0ZXN0c190b19odHRwX2xvY2spKQogCi0gICAgICAgIGZpbGVuYW1lX3F1
ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3RzOgotICAg
ICAgICAgICAgZmlsZW5hbWVfcXVldWUucHV0KGl0ZW0pCi0gICAgICAgIHJldHVybiBmaWxlbmFt
ZV9xdWV1ZQotCi0gICAgZGVmIF9nZXRfdGVzdF9hcmdzKHNlbGYsIGluZGV4KToKLSAgICAgICAg
IiIiUmV0dXJucyB0aGUgdHVwbGUgb2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9yIER1bXBS
ZW5kZXJUcmVlLiIiIgotICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0X3R5cGVfYmFzZS5UZXN0QXJn
dW1lbnRzKCkKLSAgICAgICAgdGVzdF9hcmdzLnBuZ19wYXRoID0gTm9uZQotICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgotICAgICAgICAgICAgcG5nX3BhdGggPSBvcy5wYXRo
LmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJwbmdfcmVzdWx0JXMucG5nIiAlIGluZGV4KQotICAgICAgICAg
ICAgdGVzdF9hcmdzLnBuZ19wYXRoID0gcG5nX3BhdGgKLSAgICAgICAgdGVzdF9hcmdzLm5ld19i
YXNlbGluZSA9IHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lCi0gICAgICAgIHRlc3RfYXJncy5y
ZXNldF9yZXN1bHRzID0gc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzCi0KLSAgICAgICAgcmV0
dXJuIHRlc3RfYXJncworICAgICAgICByZXR1cm4gdGVzdF9saXN0cwogCiAgICAgZGVmIF9jb250
YWluc190ZXN0cyhzZWxmLCBzdWJkaXIpOgogICAgICAgICBmb3IgdGVzdF9maWxlIGluIHNlbGYu
X3Rlc3RfZmlsZXM6CkBAIC01ODAsMzggKzU2NCw4IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBkZWYg
X2luc3RhbnRpYXRlX2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkcyhzZWxmLCB0ZXN0X2ZpbGVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1t
YXJ5KToKLSAgICAgICAgIiIiSW5zdGFudGl0YXRlcyBhbmQgc3RhcnRzIHRoZSBUZXN0U2hlbGxU
aHJlYWQocykuCi0KLSAgICAgICAgUmV0dXJuOgotICAgICAgICAgIFRoZSBsaXN0IG9mIHRocmVh
ZHMuCi0gICAgICAgICIiIgotICAgICAgICBmaWxlbmFtZV9xdWV1ZSA9IHNlbGYuX2dldF90ZXN0
X2ZpbGVfcXVldWUodGVzdF9maWxlcykKLQotICAgICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVs
bFRocmVhZHMgYW5kIHN0YXJ0IHRoZW0uCi0gICAgICAgIHRocmVhZHMgPSBbXQotICAgICAgICBm
b3IgaSBpbiB4cmFuZ2UoaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSk6Ci0gICAg
ICAgICAgICAjIENyZWF0ZSBzZXBhcmF0ZSBUZXN0VHlwZXMgaW5zdGFuY2VzIGZvciBlYWNoIHRo
cmVhZC4KLSAgICAgICAgICAgIHRlc3RfdHlwZXMgPSBbXQotICAgICAgICAgICAgZm9yIHRlc3Rf
dHlwZSBpbiBzZWxmLl90ZXN0X3R5cGVzOgotICAgICAgICAgICAgICAgIHRlc3RfdHlwZXMuYXBw
ZW5kKHRlc3RfdHlwZShzZWxmLl9wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCi0KLSAgICAgICAgICAgIHRl
c3RfYXJncyA9IHNlbGYuX2dldF90ZXN0X2FyZ3MoaSkKLSAgICAgICAgICAgIHRocmVhZCA9IGR1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAotICAgICAg
ICAgICAgICAgIHNlbGYuX29wdGlvbnMsIGZpbGVuYW1lX3F1ZXVlLCBzZWxmLl9yZXN1bHRfcXVl
dWUsCi0gICAgICAgICAgICAgICAgdGVzdF90eXBlcywgdGVzdF9hcmdzKQotICAgICAgICAgICAg
aWYgc2VsZi5faXNfc2luZ2xlX3RocmVhZGVkKCk6Ci0gICAgICAgICAgICAgICAgdGhyZWFkLnJ1
bl9pbl9tYWluX3RocmVhZChzZWxmLCByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgdGhyZWFkLnN0YXJ0KCkKLSAgICAgICAgICAgIHRocmVhZHMuYXBw
ZW5kKHRocmVhZCkKLQotICAgICAgICByZXR1cm4gdGhyZWFkcwotCiAgICAgZGVmIF9pc19zaW5n
bGVfdGhyZWFkZWQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgd2hldGhlciB3ZSBzaG91bGQg
cnVuIGFsbCB0aGUgdGVzdHMgaW4gdGhlIG1haW4gdGhyZWFkLiIiIgorICAgICAgICAiUmV0dXJu
cyB3aGV0aGVyIHRvIHBsdXJhbGl6ZSBsb2cgbWVzc2FnZXMgYWJvdXQgRFJUIGluc3RhbmNlcy4i
IiIKICAgICAgICAgcmV0dXJuIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykgPT0g
MQogCiAgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6
CkBAIC02MjgsNzMgKzU4Miw1NyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgICBp
biB0aGUgZm9ybSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGlt
ZX0KICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0
ZSB3aXRoIHRoZSByZXN1bHRzCiAgICAgICAgICIiIgorICAgICAgICBudW1fd29ya2VycyA9IGlu
dChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykKKworICAgICAgICBzZWxmLl9jdXJyZW50
X2ZpbGVfbGlzdCA9IGZpbGVfbGlzdAorICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1t
YXJ5ID0gcmVzdWx0X3N1bW1hcnkKKyAgICAgICAgYnJva2VyID0gc2VsZi5fYnJva2VyCisKKyAg
ICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMgPSBbXQorICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9
IHt9CisgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0cyA9IHt9CisgICAgICAgIGZvciBpIGluIHhy
YW5nZShudW1fd29ya2Vycyk6CisgICAgICAgICAgICBuYW1lID0gJ3dvcmtlci0lZCcgJSBpCisg
ICAgICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHNbbmFtZV0gPSB7fQorICAgICAgICAgICAgc2Vs
Zi5fd29ya2VyX3N0YXRzW25hbWVdWyduYW1lJ10gPSBuYW1lCisgICAgICAgICAgICBzZWxmLl93
b3JrZXJfc3RhdHNbbmFtZV1bJ251bV90ZXN0cyddID0gMAorICAgICAgICAgICAgc2VsZi5fd29y
a2VyX3N0YXRzW25hbWVdWyd0b3RhbF90aW1lJ10gPSAwCisKKyAgICAgICAgdGVzdF9saXN0cyA9
IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlzdCwKKyAgICAgICAgICAgIG51bV93b3JrZXJzID09
IDEgb3Igc2VsZi5fb3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCisgICAgICAg
IGZvciB0ZXN0X2xpc3QgaW4gdGVzdF9saXN0czoKKyAgICAgICAgICAgIGJyb2tlci5wb3N0X3Rl
c3RfbGlzdCh0ZXN0X2xpc3QpCisKKyAgICAgICAgIyBUZWxsIHRoZSB3b3JrZXJzIHRvIHNodXQg
ZG93biBhZnRlciB0aGV5J3JlIGRvbmUgcnVubmluZyBhbGwgdGhlCisgICAgICAgICMgdGVzdHMu
CisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1fd29ya2Vycyk6CisgICAgICAgICAgICBicm9r
ZXIucG9zdF9zdG9wKCkKKwogICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgdXNlIHdlYmtpdHB5
LnRvb2wuZ3JhbW1hci5wbHVyYWxpemUgaGVyZS4KICAgICAgICAgcGx1cmFsID0gIiIKLSAgICAg
ICAgaWYgbm90IHNlbGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpOgorICAgICAgICBpZiBzZWxmLl9p
c19zaW5nbGVfdGhyZWFkZWQoKToKICAgICAgICAgICAgIHBsdXJhbCA9ICJzIgogICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMlcyAuLi4nICUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSwgcGx1
cmFsKSkKLSAgICAgICAgdGhyZWFkcyA9IHNlbGYuX2luc3RhbnRpYXRlX2R1bXBfcmVuZGVyX3Ry
ZWVfdGhyZWFkcyhmaWxlX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgIHNlbGYu
X3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCiAKLSAgICAgICAg
a2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBzZWxmLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0
aHJlYWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAodGhyZWFkX3RpbWluZ3Ms
IHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpID0gXAotICAgICAgICAgICAg
c2VsZi5fY29sbGVjdF90aW1pbmdfaW5mbyh0aHJlYWRzKQorICAgICAgICBicm9rZXIuc3RhcnRf
d29ya2VycygpCiAKLSAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFk
X3RpbWluZ3MsIHRlc3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3Rf
dGltaW5ncykKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRl
c3RpbmcgLi4uIikKIAotICAgIGRlZiBfd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2goc2VsZiwg
dGhyZWFkcywgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9
IEZhbHNlCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUg
dGhyZWFkcyB3YWl0aW5nIGZvciB0aGVtIHRvIGZpbmlzaC4KLSAgICAgICAgICAgIHNvbWVfdGhy
ZWFkX2lzX2FsaXZlID0gVHJ1ZQotICAgICAgICAgICAgd2hpbGUgc29tZV90aHJlYWRfaXNfYWxp
dmU6Ci0gICAgICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBGYWxzZQotICAgICAg
ICAgICAgICAgIHQgPSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgICAgIGZvciB0aHJlYWQgaW4g
dGhyZWFkczoKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX2luZm8gPSB0aHJlYWQuZXhj
ZXB0aW9uX2luZm8oKQotICAgICAgICAgICAgICAgICAgICBpZiBleGNlcHRpb25faW5mbyBpcyBu
b3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhlIHRocmVhZCdz
IGV4Y2VwdGlvbiBoZXJlIHRvIG1ha2UgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICMgY2xl
YXIgdGhhdCB0ZXN0aW5nIHdhcyBhYm9ydGVkLiBPdGhlcndpc2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAjIHRoZSB0ZXN0cyB0aGF0IGRpZCBub3QgcnVuIHdvdWxkIGJlIGFzc3VtZWQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICMgdG8gaGF2ZSBwYXNzZWQuCi0gICAgICAgICAgICAgICAg
ICAgICAgICByYWlzZSBleGNlcHRpb25faW5mb1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2Vw
dGlvbl9pbmZvWzJdCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgdGhyZWFkLmlzQWxpdmUoKToK
LSAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQotICAg
ICAgICAgICAgICAgICAgICAgICAgbmV4dF90aW1lb3V0ID0gdGhyZWFkLm5leHRfdGltZW91dCgp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90
aW1lb3V0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbG9nX3dlZGdlZF90aHJlYWQo
dGhyZWFkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZC5jbGVhcl9uZXh0X3Rp
bWVvdXQoKQotCi0gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3Vt
bWFyeSkKLQotICAgICAgICAgICAgICAgIGlmIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgotICAgICAg
ICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0KKyAgICAgICAgICAgIGJyb2tlci5sb29w
KHNlbGYpCiAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGJy
b2tlci5jYW5jZWxfd29ya2VycygpCisgICAgICAgICAgICBfbG9nLmluZm8oIkludGVycnVwdGVk
LCBleGl0aW5nIikKICAgICAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gVHJ1ZQotICAg
ICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgICAgIHRocmVhZC5j
YW5jZWwoKQotCi0gICAgICAgIHJldHVybiBrZXlib2FyZF9pbnRlcnJ1cHRlZAotCi0gICAgZGVm
IF9jb2xsZWN0X3RpbWluZ19pbmZvKHNlbGYsIHRocmVhZHMpOgotICAgICAgICB0ZXN0X3RpbWlu
Z3MgPSB7fQotICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9IFtdCi0gICAgICAgIHRo
cmVhZF90aW1pbmdzID0gW10KLQotICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAg
ICAgICAgICB0aHJlYWRfdGltaW5ncy5hcHBlbmQoeyduYW1lJzogdGhyZWFkLmdldE5hbWUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bV90ZXN0cyc6IHRocmVhZC5n
ZXRfbnVtX3Rlc3RzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0b3Rh
bF90aW1lJzogdGhyZWFkLmdldF90b3RhbF90aW1lKCl9KQotICAgICAgICAgICAgdGVzdF90aW1p
bmdzLnVwZGF0ZSh0aHJlYWQuZ2V0X3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzKCkpCi0gICAgICAg
ICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncy5leHRlbmQodGhyZWFkLmdldF90ZXN0X3Jlc3Vs
dHMoKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBVbmV4cGVjdGVkIGV4Y2VwdGlv
bjsgZG9uJ3QgdHJ5IHRvIGNsZWFuIHVwIHdvcmtlcnMuCisgICAgICAgICAgICBfbG9nLmluZm8o
IkV4Y2VwdGlvbiByYWlzZWQsIGV4aXRpbmciKQorICAgICAgICAgICAgcmFpc2UKIAotICAgICAg
ICByZXR1cm4gKHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90
aW1pbmdzKQorICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCBzZWxmLl93b3Jr
ZXJfc3RhdHMudmFsdWVzKCksCisgICAgICAgICAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMsIHNl
bGYuX2FsbF9yZXN1bHRzKQogCiAgICAgZGVmIG5lZWRzX2h0dHAoc2VsZik6CiAgICAgICAgICIi
IlJldHVybnMgd2hldGhlciB0aGUgdGVzdCBydW5uZXIgbmVlZHMgYW4gSFRUUCBzZXJ2ZXIuIiIi
CkBAIC04MjYsMjMgKzc2NCwzNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBfbG9nLmRl
YnVnKCJzdG9wcGluZyBoZWxwZXIiKQogICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaGVscGVyKCkK
IAotICAgIGRlZiB1cGRhdGVfc3VtbWFyeShzZWxmLCByZXN1bHRfc3VtbWFyeSk6CisgICAgZGVm
IGhhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgc3JjKToKKyAgICAgICAgcGFzcworCisgICAgZGVm
IGhhbmRsZV9kb25lKHNlbGYsIHNyYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBoYW5kbGVf
ZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKICAgICAgICAg
IiIiVXBkYXRlIHRoZSBzdW1tYXJ5IGFuZCBwcmludCByZXN1bHRzIHdpdGggYW55IGNvbXBsZXRl
ZCB0ZXN0cy4iIiIKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSB0ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdC5sb2FkcyhzZWxmLl9y
ZXN1bHRfcXVldWUuZ2V0X25vd2FpdCgpKQotICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5
OgotICAgICAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYu
X2V4cGVjdGF0aW9ucy5tYXRjaGVzX2FuX2V4cGVjdGVkX3Jlc3VsdCgKLSAgICAgICAgICAgICAg
ICByZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC50eXBlLCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3Rz
KQotICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuYWRkKHJlc3VsdCwgZXhwZWN0ZWQpCi0gICAg
ICAgICAgICBleHBfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3Ry
aW5nKAotICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSkKLSAgICAgICAgICAgIGdvdF9z
dHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZXhwZWN0YXRpb25fdG9fc3RyaW5nKHJlc3VsdC50eXBl
KQotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4
cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKQotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmlu
dF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgc2VsZi5fcmV0cnlpbmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKyAgICAg
ICAgc2VsZi5fdXBkYXRlX3dvcmtlcl9zdGF0cyhzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKQor
CisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0
ZWRfcmVzdWx0KAorICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lLCByZXN1bHQudHlwZSwgc2Vs
Zi5fb3B0aW9ucy5waXhlbF90ZXN0cykKKyAgICAgICAgZXhwX3N0ciA9IHNlbGYuX2V4cGVjdGF0
aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAgICAgIHJlc3VsdC5maWxlbmFt
ZSkKKyAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19z
dHJpbmcocmVzdWx0LnR5cGUpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGVzdF9yZXN1
bHQocmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cikKKworICAgICAgICBzZWxmLl9j
dXJyZW50X3Jlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVjdGVkKQorICAgICAgICBzZWxm
Ll9wcmludGVyLnByaW50X3Byb2dyZXNzKHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmV0cnlpbmcsIHNlbGYu
X3Rlc3RfZmlsZXNfbGlzdCkKKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfbGlzdChzZWxmLCBz
cmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9n
cm91cF9zdGF0c1tsaXN0X25hbWVdID0gKG51bV90ZXN0cywgZWxhcHNlZF90aW1lKQorCisgICAg
ZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNlcHRpb25faW5mbyk6CisgICAgICAg
IHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2lu
Zm9bMl0KKworICAgIGRlZiBfdXBkYXRlX3dvcmtlcl9zdGF0cyhzZWxmLCBzcmMsIHJlc3VsdCwg
ZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW3NyY11bJ3RvdGFsX3Rp
bWUnXSArPSBlbGFwc2VkX3RpbWUKKyAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW3NyY11bJ251
bV90ZXN0cyddICs9IDEKKyAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkK
IAogICAgIGRlZiBfY2xvYmJlcl9vbGRfcmVzdWx0cyhzZWxmKToKICAgICAgICAgIyBKdXN0IGNs
b2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJlc3VsdHMgZGlyZWN0b3JpZXMgc2luY2UgdGhlIG90aGVy
CkBAIC05NTYsNiArOTA4LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIHAucHJp
bnRfY29uZmlnKCJSdW5uaW5nICVzICVzcyBpbiBwYXJhbGxlbCIgJQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSkpCisgICAgICAgIHAucHJp
bnRfY29uZmlnKCJXb3JrZXJzIGFyZSAlcyIgJSBzZWxmLl9vcHRpb25zLndvcmtlcnNfYXJlKQog
ICAgICAgICBwLnByaW50X2NvbmZpZygiIikKIAogICAgIGRlZiBfcHJpbnRfZXhwZWN0ZWRfcmVz
dWx0c19vZl90eXBlKHNlbGYsIHJlc3VsdF9zdW1tYXJ5LApAQCAtMTM0NSwxMSArMTI5OCwxMyBA
QCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIs
CiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAgICAgICAgIHJldHVybiAwCiAKKyAgICBicm9r
ZXIgPSBtZXNzYWdlX2Jyb2tlci5nZXQocG9ydCwgb3B0aW9ucykKKwogICAgICMgV2Ugd3JhcCBh
bnkgcGFydHMgb2YgdGhlIHJ1biB0aGF0IGFyZSBzbG93IG9yIGxpa2VseSB0byByYWlzZSBleGNl
cHRpb25zCiAgICAgIyBpbiBhIHRyeS9maW5hbGx5IHRvIGVuc3VyZSB0aGF0IHdlIGNsZWFuIHVw
IHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCiAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cyA9
IC0xCiAgICAgdHJ5OgotICAgICAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIocG9ydCwgb3B0
aW9ucywgcHJpbnRlcikKKyAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnQsIG9w
dGlvbnMsIHByaW50ZXIsIGJyb2tlcikKICAgICAgICAgdGVzdF9ydW5uZXIuX3ByaW50X2NvbmZp
ZygpCiAKICAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4u
IikKQEAgLTEzNzgsNiArMTMzMyw3IEBAIGRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgcmVn
dWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAgICAgICAgICAgIF9sb2cuZGVidWcoIlRlc3Rpbmcg
Y29tcGxldGVkLCBFeGl0IHN0YXR1czogJWQiICUKICAgICAgICAgICAgICAgICAgICAgICAgbnVt
X3VuZXhwZWN0ZWRfcmVzdWx0cykKICAgICBmaW5hbGx5OgorICAgICAgICBicm9rZXIuY2xlYW51
cCgpCiAgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAKICAgICByZXR1cm4gbnVtX3VuZXhwZWN0
ZWRfcmVzdWx0cwpAQCAtMTM4Niw4ICsxMzQyLDExIEBAIGRlZiBydW4ocG9ydCwgb3B0aW9ucywg
YXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKIGRlZiBfc2V0X3VwX2Rlcml2ZWRfb3B0
aW9ucyhwb3J0X29iaiwgb3B0aW9ucyk6CiAgICAgIiIiU2V0cyB0aGUgb3B0aW9ucyB2YWx1ZXMg
dGhhdCBkZXBlbmQgb24gb3RoZXIgb3B0aW9ucyB2YWx1ZXMuIiIiCiAKLSAgICBpZiBub3Qgb3B0
aW9ucy5jaGlsZF9wcm9jZXNzZXM6Ci0gICAgICAgICMgRklYTUU6IEludmVzdGlnYXRlIHBlcmYv
Zmxha2luZXNzIGltcGFjdCBvZiB1c2luZyBjcHVfY291bnQgKyAxLgorICAgIGlmIG9wdGlvbnMu
d29ya2Vyc19hcmUgPT0gJ2lubGluZSc6CisgICAgICAgIGlmIG9wdGlvbnMuY2hpbGRfcHJvY2Vz
c2VzIGFuZCBpbnQob3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID4gMToKKyAgICAgICAgICAgIF9s
b2cud2FybmluZygiLS13b3JrZXJzLWFyZT1pbmxpbmUgb3ZlcnJpZGVzIC0tY2hpbGQtcHJvY2Vz
c2VzIikKKyAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgPSAiMSIKKyAgICBlbGlmIG5v
dCBvcHRpb25zLmNoaWxkX3Byb2Nlc3NlczoKICAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNz
ZXMgPSBvcy5lbnZpcm9uLmdldCgiV0VCS0lUX1RFU1RfQ0hJTERfUFJPQ0VTU0VTIiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIocG9ydF9vYmou
ZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCiAKQEAgLTE2MTAsNiArMTU2OSwxMCBAQCBkZWYg
cGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1j
aGlsZC1wcm9jZXNzZXMiLAogICAgICAgICAgICAgaGVscD0iTnVtYmVyIG9mIER1bXBSZW5kZXJU
cmVlcyB0byBydW4gaW4gcGFyYWxsZWwuIiksCiAgICAgICAgICMgRklYTUU6IERpc3BsYXkgZGVm
YXVsdCBudW1iZXIgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgd2lsbCBydW4uCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdvcmtlcnMtYXJlIiwgYWN0aW9uPSJzdG9yZSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0icHJvY2Vzc2VzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSJjb250cm9scyB3b3JrZXIgbW9kZWwuIFZhbGlkIHZhbHVl
cyBhcmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICInaW5saW5lJywgJ3RocmVhZHMn
LCBhbmQgJ3Byb2Nlc3NlcycgKGRlZmF1bHQpLiIpLAogICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbigiLS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwiLAogICAgICAgICAgICAgYWN0aW9u
PSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgIGhlbHA9InJ1biBhbGwg
dGVzdHMgaW4gcGFyYWxsZWwiKSwKQEAgLTE2NzAsMTcgKzE2MzMsNiBAQCBkZWYgcGFyc2VfYXJn
cyhhcmdzPU5vbmUpOgogICAgIHJldHVybiBvcHRpb25zLCBhcmdzCiAKIAotZGVmIF9sb2dfd2Vk
Z2VkX3RocmVhZCh0aHJlYWQpOgotICAgICIiIkxvZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2l2
ZW4gdGhyZWFkIHN0YXRlLiIiIgotICAgIGlkID0gdGhyZWFkLmlkKCkKLSAgICBzdGFjayA9IGR1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmZpbmRfdGhyZWFkX3N0YWNrKGlkKQotICAgIGFzc2VydChz
dGFjayBpcyBub3QgTm9uZSkKLSAgICBfbG9nLmVycm9yKCIiKQotICAgIF9sb2cuZXJyb3IoInRo
cmVhZCAlcyAoJWQpIGlzIHdlZGdlZCIgJSAodGhyZWFkLmdldE5hbWUoKSwgaWQpKQotICAgIGR1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmxvZ19zdGFjayhzdGFjaykKLSAgICBfbG9nLmVycm9yKCIi
KQotCi0KIGRlZiBtYWluKCk6CiAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlX2FyZ3MoKQogICAg
IHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IDU0ZTFkYzA1ZGYwMWM3MDYw
N2NlMzM2ZDVkOTAwMDQyNjE0NDU1NzAuLjM3YWFkM2UxMmZlZjhlNDlhYzNiMDYxZDFlMTllNWU5
YzIwYzQ5MGUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQpA
QCAtNzIsMTIgKzcyLDE0IEBAIGRlZiBwYXNzaW5nX3J1bihleHRyYV9hcmdzPU5vbmUsIHBvcnRf
b2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLAogICAgICAgICBhcmdzLmV4dGVuZChbJy0t
cGxhdGZvcm0nLCAndGVzdCddKQogICAgIGlmIG5vdCByZWNvcmRfcmVzdWx0czoKICAgICAgICAg
YXJncy5hcHBlbmQoJy0tbm8tcmVjb3JkLXJlc3VsdHMnKQorICAgIGlmIG5vdCAnLS1jaGlsZC1w
cm9jZXNzZXMnIGluIGV4dHJhX2FyZ3M6CisgICAgICAgIGFyZ3MuZXh0ZW5kKFsnLS13b3JrZXJz
LWFyZScsICdpbmxpbmUnXSkKICAgICBhcmdzLmV4dGVuZChleHRyYV9hcmdzKQogICAgIGlmIG5v
dCB0ZXN0c19pbmNsdWRlZDoKICAgICAgICAgIyBXZSB1c2UgdGhlIGdsb2IgdG8gdGVzdCB0aGF0
IGdsb2JiaW5nIHdvcmtzLgogICAgICAgICBhcmdzLmV4dGVuZChbJ3Bhc3NlcycsCiAgICAgICAg
ICAgICAgICAgICAgICAnaHR0cC90ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICAnaHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgJ3dlYnNvY2tldC90
ZXN0cycsCiAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvKiddKQogICAg
IG9wdGlvbnMsIHBhcnNlZF9hcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdzKGFyZ3Mp
CiAgICAgaWYgbm90IHBvcnRfb2JqOgpAQCAtOTIsNiArOTQsOCBAQCBkZWYgbG9nZ2luZ19ydW4o
ZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCB0ZXN0c19pbmNsdWRlZD1GYWxzZSk6CiAg
ICAgYXJncyA9IFsnLS1uby1yZWNvcmQtcmVzdWx0cyddCiAgICAgaWYgbm90ICctLXBsYXRmb3Jt
JyBpbiBleHRyYV9hcmdzOgogICAgICAgICBhcmdzLmV4dGVuZChbJy0tcGxhdGZvcm0nLCAndGVz
dCddKQorICAgIGlmIG5vdCAnLS1jaGlsZC1wcm9jZXNzZXMnIGluIGV4dHJhX2FyZ3M6CisgICAg
ICAgIGFyZ3MuZXh0ZW5kKFsnLS13b3JrZXJzLWFyZScsICdpbmxpbmUnXSkKICAgICBhcmdzLmV4
dGVuZChleHRyYV9hcmdzKQogICAgIGlmIG5vdCB0ZXN0c19pbmNsdWRlZDoKICAgICAgICAgYXJn
cy5leHRlbmQoWydwYXNzZXMnLApAQCAtMTE2LDcgKzEyMCw3IEBAIGRlZiBnZXRfdGVzdHNfcnVu
KGV4dHJhX2FyZ3M9Tm9uZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGZsYXR0ZW5fYmF0Y2hlcz1G
YWxzZSk6CiAgICAgICAgICctLXByaW50JywgJ25vdGhpbmcnLAogICAgICAgICAnLS1wbGF0Zm9y
bScsICd0ZXN0JywKICAgICAgICAgJy0tbm8tcmVjb3JkLXJlc3VsdHMnLAotICAgICAgICAnLS1j
aGlsZC1wcm9jZXNzZXMnLCAnMSddCisgICAgICAgICctLXdvcmtlcnMtYXJlJywgJ2lubGluZSdd
CiAgICAgYXJncy5leHRlbmQoZXh0cmFfYXJncykKICAgICBpZiBub3QgdGVzdHNfaW5jbHVkZWQ6
CiAgICAgICAgICMgTm90IGluY2x1ZGluZyBodHRwIHRlc3RzIHNpbmNlIHRoZXkgZ2V0IHJ1biBv
dXQgb2Ygb3JkZXIgKHRoYXQKQEAgLTIxNCw3ICsyMTgsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfa2V5Ym9hcmRfaW50ZXJydXB0KHNlbGYpOgog
ICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIGFsc28gdGVzdHMgcnVubmluZyBhIHRlc3QgbWFya2Vk
IGFzIFNLSVAgaWYKICAgICAgICAgIyB5b3Ugc3BlY2lmeSBpdCBleHBsaWNpdGx5LgotICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgcGFzc2luZ19ydW4sCisgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBsb2dnaW5nX3J1biwKICAg
ICAgICAgICAgIFsnZmFpbHVyZXMvZXhwZWN0ZWQva2V5Ym9hcmQuaHRtbCddLCB0ZXN0c19pbmNs
dWRlZD1UcnVlKQogCiAgICAgZGVmIHRlc3RfbGFzdF9yZXN1bHRzKHNlbGYpOgpAQCAtMjYxLDgg
KzI2NSwxNiBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYg
dGVzdF9ydW5fZm9yY2Uoc2VsZik6CiAgICAgICAgICMgVGhpcyByYWlzZXMgYW4gZXhjZXB0aW9u
IGJlY2F1c2Ugd2UgcnVuCi0gICAgICAgICMgZmFpbHVyZXMvZXhwZWN0ZWQvZXhjZXB0aW9uLmh0
bWwsIHdoaWNoIGlzIG5vcm1hbGx5IFNLSVBwZWQuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLCBbJy0tZm9yY2UnXSkKKyAgICAgICAgIyBmYWlsdXJl
cy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCBhbmQKKyAgICAgICAgIyBmYWlsdXJlcy9leHBlY3Rl
ZC9rZXlib2FyZCwgd2hpY2ggYXJlIG5vcm1hbGx5IFNLSVBwZWQuCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIGxvZ2dpbmdfcnVuKFsnLS1mb3JjZSddKQorICAgICAgICAgICAgdGVzdF9wYXNz
ZWQgPSBGYWxzZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHRlc3Rf
cGFzc2VkID0gVHJ1ZQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAg
ICAgICB0ZXN0X3Bhc3NlZCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RfcGFz
c2VkKQogCiAgICAgZGVmIHRlc3RfcnVuX3BhcnQoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0
IHdlIGFjdHVhbGx5IHNlbGVjdCB0aGUgcmlnaHQgcGFydApAQCAtNDI3LDcgKzQzOSw2IEBAIGNs
YXNzIFJlYmFzZWxpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZmluYWxseToK
ICAgICAgICAgICAgIGNvZGVjcy5vcGVuID0gb3JpZ2luYWxfb3BlbgogCi0KIGNsYXNzIFRlc3RS
dW5uZXJXcmFwcGVyKHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcik6CiAgICAgZGVmIF9nZXRf
dGVzdF9pbnB1dF9mb3JfZmlsZShzZWxmLCB0ZXN0X2ZpbGUpOgogICAgICAgICByZXR1cm4gdGVz
dF9maWxlCkBAIC00MzksNyArNDUwLDcgQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICBtb2NrX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSA9IGxh
bWJkYSBuYW1lOiBuYW1lCiAgICAgICAgIG1vY2tfcG9ydC5maWxlbmFtZV90b191cmkgPSBsYW1i
ZGEgbmFtZTogbmFtZQogCi0gICAgICAgIHJ1bm5lciA9IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1
bm5lcihwb3J0PW1vY2tfcG9ydCwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpKQorICAg
ICAgICBydW5uZXIgPSBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIocG9ydD1tb2NrX3BvcnQs
IG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSwgYnJva2VyPU1vY2soKSkKICAgICAgICAg
ZXhwZWN0ZWRfaHRtbCA9IHUiIiI8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPkxheW91dCBU
ZXN0IFJlc3VsdHMgKHRpbWUpPC90aXRsZT4KQEAgLTQ1MywyMCArNDY0LDEwIEBAIGNsYXNzIFRl
c3RSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgaHRtbCA9IHJ1bm5lci5f
cmVzdWx0c19odG1sKFsidGVzdF9wYXRoIl0sIHt9LCAiVGl0bGUiLCBvdmVycmlkZV90aW1lPSJ0
aW1lIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodG1sLCBleHBlY3RlZF9odG1sKQogCi0g
ICAgZGVmIHF1ZXVlX3RvX2xpc3Qoc2VsZiwgcXVldWUpOgotICAgICAgICBxdWV1ZV9saXN0ID0g
W10KLSAgICAgICAgd2hpbGUoVHJ1ZSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAg
ICAgcXVldWVfbGlzdC5hcHBlbmQocXVldWUuZ2V0X25vd2FpdCgpKQotICAgICAgICAgICAgZXhj
ZXB0IFF1ZXVlLkVtcHR5OgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBx
dWV1ZV9saXN0Ci0KLSAgICBkZWYgdGVzdF9nZXRfdGVzdF9maWxlX3F1ZXVlKHNlbGYpOgorICAg
IGRlZiB0ZXN0X3NoYXJkX3Rlc3RzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBfZ2V0X3Rl
c3RfZmlsZV9xdWV1ZSBpbiBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIgcmVhbGx5CiAgICAg
ICAgICMgcHV0IHRoZSBodHRwIHRlc3RzIGZpcnN0IGluIHRoZSBxdWV1ZS4KLSAgICAgICAgcnVu
bmVyID0gVGVzdFJ1bm5lcldyYXBwZXIocG9ydD1Nb2NrKCksIG9wdGlvbnM9TW9jaygpLCBwcmlu
dGVyPU1vY2soKSkKLSAgICAgICAgcnVubmVyLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9w
YXJhbGxlbCA9IEZhbHNlCisgICAgICAgIHJ1bm5lciA9IFRlc3RSdW5uZXJXcmFwcGVyKHBvcnQ9
TW9jaygpLCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCksIGJyb2tlcj1Nb2NrKCkpCiAK
ICAgICAgICAgdGVzdF9saXN0ID0gWwogICAgICAgICAgICJMYXlvdXRUZXN0cy93ZWJzb2NrZXQv
dGVzdHMvdW5pY29kZS5odG0iLApAQCAtNDg3LDE5ICs0ODgsMTUgQEAgY2xhc3MgVGVzdFJ1bm5l
clRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sJywKICAg
ICAgICAgXSkKIAotICAgICAgICBydW5uZXIuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gMQot
ICAgICAgICB0ZXN0X3F1ZXVlX2Zvcl9zaW5nbGVfdGhyZWFkID0gcnVubmVyLl9nZXRfdGVzdF9m
aWxlX3F1ZXVlKHRlc3RfbGlzdCkKLSAgICAgICAgcnVubmVyLl9vcHRpb25zLmNoaWxkX3Byb2Nl
c3NlcyA9IDIKLSAgICAgICAgdGVzdF9xdWV1ZV9mb3JfbXVsdGlfdGhyZWFkID0gcnVubmVyLl9n
ZXRfdGVzdF9maWxlX3F1ZXVlKHRlc3RfbGlzdCkKLQotICAgICAgICBzaW5nbGVfdGhyZWFkX3Jl
c3VsdHMgPSBzZWxmLnF1ZXVlX3RvX2xpc3QodGVzdF9xdWV1ZV9mb3Jfc2luZ2xlX3RocmVhZCkK
LSAgICAgICAgbXVsdGlfdGhyZWFkX3Jlc3VsdHMgPSBzZWxmLnF1ZXVlX3RvX2xpc3QodGVzdF9x
dWV1ZV9mb3JfbXVsdGlfdGhyZWFkKQorICAgICAgICBzaW5nbGVfdGhyZWFkX3Jlc3VsdHMgPSBy
dW5uZXIuX3NoYXJkX3Rlc3RzKHRlc3RfbGlzdCwgVHJ1ZSkKKyAgICAgICAgbXVsdGlfdGhyZWFk
X3Jlc3VsdHMgPSBydW5uZXIuX3NoYXJkX3Rlc3RzKHRlc3RfbGlzdCwgRmFsc2UpCiAKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9faHR0cF9sb2NrIiwgc2luZ2xlX3RocmVhZF9y
ZXN1bHRzWzBdWzBdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3Rv
X2h0dHBfbG9jaywgc2V0KHNpbmdsZV90aHJlYWRfcmVzdWx0c1swXVsxXSkpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoInRlc3RzX3RvX2h0dHBfbG9jayIsIG11bHRpX3RocmVhZF9yZXN1bHRz
WzBdWzBdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3RvX2h0dHBf
bG9jaywgc2V0KG11bHRpX3RocmVhZF9yZXN1bHRzWzBdWzFdKSkKIAorCiBjbGFzcyBEcnlydW5U
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIEZJWE1FOiBpdCdzIGhhcmQgdG8ga25vdyB3
aGljaCBwbGF0Zm9ybXMgYXJlIHNhZmUgdG8gdGVzdDsgdGhlCiAgICAgIyBjaHJvbWl1bSBwbGF0
Zm9ybXMgcmVxdWlyZSBhIGNocm9taXVtIGNoZWNrb3V0LCBhbmQgdGhlIG1hYyBwbGF0Zm9ybQpA
QCAtNTIwLDQxICs1MTcsNiBAQCBjbGFzcyBEcnlydW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1waXhlbC10ZXN0
cyddKSkKIAogCi1jbGFzcyBUZXN0VGhyZWFkKGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldhdGNo
YWJsZVRocmVhZCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0ZWRfcXVldWUsIHN0b3Bw
aW5nX3F1ZXVlKToKLSAgICAgICAgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxlVGhy
ZWFkLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX3N0YXJ0ZWRfcXVldWUgPSBzdGFydGVk
X3F1ZXVlCi0gICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlID0gc3RvcHBpbmdfcXVldWUKLSAg
ICAgICAgc2VsZi5fdGltZW91dCA9IEZhbHNlCi0gICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUg
PSBRdWV1ZS5RdWV1ZSgpCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICBzZWxmLl9jb3Zl
cmVkX3J1bigpCi0KLSAgICBkZWYgX2NvdmVyZWRfcnVuKHNlbGYpOgotICAgICAgICAjIEZJWE1F
OiB0aGlzIGlzIGEgc2VwYXJhdGUgcm91dGluZSB0byB3b3JrIGFyb3VuZCBhIGJ1ZwotICAgICAg
ICAjIGluIGNvdmVyYWdlOiBzZWUgaHR0cDovL2JpdGJ1Y2tldC5vcmcvbmVkL2NvdmVyYWdlcHkv
aXNzdWUvODUuCi0gICAgICAgIHNlbGYuX3RocmVhZF9pZCA9IHRocmVhZC5nZXRfaWRlbnQoKQot
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9zdGFydGVkX3F1ZXVlLnB1dCgnJykKLSAg
ICAgICAgICAgIG1zZyA9IHNlbGYuX3N0b3BwaW5nX3F1ZXVlLmdldCgpCi0gICAgICAgICAgICBp
ZiBtc2cgPT0gJ0tleWJvYXJkSW50ZXJydXB0JzoKLSAgICAgICAgICAgICAgICByYWlzZSBLZXli
b2FyZEludGVycnVwdAotICAgICAgICAgICAgZWxpZiBtc2cgPT0gJ0V4Y2VwdGlvbic6Ci0gICAg
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCi0gICAgICAgICAgICBlbGlmIG1zZyA9PSAn
VGltZW91dCc6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdGltZW91dCA9IFRydWUKLSAgICAgICAg
ICAgICAgICBzZWxmLl90aW1lb3V0X3F1ZXVlLmdldCgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAg
ICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkKLQotICAgIGRlZiBu
ZXh0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3RpbWVvdXQ6Ci0gICAgICAgICAg
ICBzZWxmLl90aW1lb3V0X3F1ZXVlLnB1dCgnZG9uZScpCi0gICAgICAgICAgICByZXR1cm4gdGlt
ZS50aW1lKCkgLSAxMAotICAgICAgICByZXR1cm4gdGltZS50aW1lKCkKLQotCiBjbGFzcyBUZXN0
SGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhc3RyZWFt
KToKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCkBAIC01NjQsNzAgKzUy
Niw1IEBAIGNsYXNzIFRlc3RIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiAgICAgICAgIHNlbGYu
X3N0cmVhbS53cml0ZShzZWxmLmZvcm1hdChyZWNvcmQpKQogCiAKLWNsYXNzIFdhaXRGb3JUaHJl
YWRzVG9GaW5pc2hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBjbGFzcyBNb2NrVGVzdFJ1
bm5lcihydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIpOgotICAgICAgICBkZWYgX19pbml0X18o
c2VsZik6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6Ci0g
ICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgZGVmIHVwZGF0ZV9zdW1tYXJ5KHNlbGYsIHJlc3Vs
dF9zdW1tYXJ5KToKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiBydW5fb25lX3RocmVhZChz
ZWxmLCBtc2cpOgotICAgICAgICBydW5uZXIgPSBzZWxmLk1vY2tUZXN0UnVubmVyKCkKLSAgICAg
ICAgc3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIHN0b3BwaW5nX3F1ZXVl
ID0gUXVldWUuUXVldWUoKQotICAgICAgICBjaGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0
aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKLSAgICAgICAgY2hpbGRfdGhyZWFkLnN0YXJ0KCkK
LSAgICAgICAgc3RhcnRlZF9tc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQotICAgICAgICBzdG9w
cGluZ19xdWV1ZS5wdXQobXNnKQotICAgICAgICB0aHJlYWRzID0gW2NoaWxkX3RocmVhZF0KLSAg
ICAgICAgcmV0dXJuIHJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2godGhyZWFkcywg
Tm9uZSkKLQotICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgotICAgICAgICBpbnRlcnJ1cHRlZCA9
IHNlbGYucnVuX29uZV90aHJlYWQoJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJy
dXB0ZWQpCi0KLSAgICBkZWYgdGVzdF9pbnRlcnJ1cHQoc2VsZik6Ci0gICAgICAgIGludGVycnVw
dGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnS2V5Ym9hcmRJbnRlcnJ1cHQnKQotICAgICAgICBz
ZWxmLmFzc2VydFRydWUoaW50ZXJydXB0ZWQpCi0KLSAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYp
OgotICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCi0gICAgICAgIG9j
LmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhy
ZWFkKCdUaW1lb3V0JykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKLSAg
ICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQotCi0gICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYp
OgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJ1bl9vbmVfdGhy
ZWFkLCAnRXhjZXB0aW9uJykKLQotCi1jbGFzcyBTdGFuZGFsb25lRnVuY3Rpb25zVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfbG9nX3dlZGdlZF90aHJlYWQoc2VsZik6Ci0g
ICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKLSAgICAgICAgb2MuY2Fw
dHVyZV9vdXRwdXQoKQotICAgICAgICBsb2dnZXIgPSBydW5fd2Via2l0X3Rlc3RzLl9sb2cKLSAg
ICAgICAgYXN0cmVhbSA9IGFycmF5X3N0cmVhbS5BcnJheVN0cmVhbSgpCi0gICAgICAgIGhhbmRs
ZXIgPSBUZXN0SGFuZGxlcihhc3RyZWFtKQotICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5k
bGVyKQotCi0gICAgICAgIHN0YXJ0aW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBz
dG9wcGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAgICAgY2hpbGRfdGhyZWFkID0gVGVz
dFRocmVhZChzdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVldWUpCi0gICAgICAgIGNoaWxkX3Ro
cmVhZC5zdGFydCgpCi0gICAgICAgIG1zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCi0KLSAgICAg
ICAgcnVuX3dlYmtpdF90ZXN0cy5fbG9nX3dlZGdlZF90aHJlYWQoY2hpbGRfdGhyZWFkKQotICAg
ICAgICBzdG9wcGluZ19xdWV1ZS5wdXQoJycpCi0gICAgICAgIGNoaWxkX3RocmVhZC5qb2luKHRp
bWVvdXQ9MS4wKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN0cmVhbS5lbXB0eSgpKQot
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNoaWxkX3RocmVhZC5pc0FsaXZlKCkpCi0gICAgICAg
IG9jLnJlc3RvcmVfb3V0cHV0KCkKLQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAg
IHVuaXR0ZXN0Lm1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74718</attachid>
            <date>2010-11-23 19:03:22 -0800</date>
            <delta_ts>2010-11-24 17:13:49 -0800</delta_ts>
            <desc>sync to r72641 + patch to bug 49779</desc>
            <filename>bug-48820-20101123190320.patch</filename>
            <type>text/plain</type>
            <size>60787</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA2YTU2Zjc5M2I4MzE4YWRiZjZiZjFkNmIyN2E5ZGQ3YzAzY2UwMTAzLi4wZjNkYmYy
ZTA2MTBmYTRjODY4Y2E1MzRkNzY5NDE5ZTZiNzJhYTMyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGFsbCBvZiB0aGUg
TlJXVCBtdWx0aXRocmVhZGluZyBpc3N1ZXMgYnkgbW92aW5nIHRvCisgICAgICAgIG11bHRpcHJv
Y2Vzcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3ByaW50aW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdl
X2Jyb2tlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weToKKwogMjAxMC0xMS0y
MyAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBUb255IENoYW5nLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQppbmRleCAxYmFjN2VmMThlM2UyZWE3YTZkY2Y1
ZmEzNzQwMjY3OGU3YWUyYTJiLi5iNzNkMjFkZGE5ZjU2ZWU0NTZjODczYmIzNDM2Y2NjNGRhNmZh
YjU0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3Jl
bmRlcl90cmVlX3RocmVhZC5weQpAQCAtNDIsMTAgKzQyLDggQEAgaW1wb3J0IGNvZGVjcwogaW1w
b3J0IGNvcHkKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCBRdWV1ZQogaW1wb3J0
IHNpZ25hbAogaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZAogaW1wb3J0IHRocmVhZGluZwogaW1w
b3J0IHRpbWUKIApAQCAtODcsNiArODUsOCBAQCBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9w
dGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKICAgICAiIiIKICAgICBm
YWlsdXJlcyA9IFtdCiAKKyAgICB0ZXN0X25hbWUgPSBwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5h
bWUodGVzdF9pbnB1dC5maWxlbmFtZSkKKwogICAgIGlmIHRlc3Rfb3V0cHV0LmNyYXNoOgogICAg
ICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKSkKICAgICBp
ZiB0ZXN0X291dHB1dC50aW1lb3V0OgpAQCAtMTI4LDIxICsxMjgsNiBAQCBkZWYgX3Byb2Nlc3Nf
b3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2Rp
ZmZzLCB0aW1lX2Zvcl9kaWZmcykKIAogCi1kZWYgX3BhZF90aW1lb3V0KHRpbWVvdXQpOgotICAg
ICIiIlJldHVybnMgYSBzYWZlIG11bHRpcGxlIG9mIHRoZSBwZXItdGVzdCB0aW1lb3V0IHZhbHVl
IHRvIHVzZQotICAgIHRvIGRldGVjdCBodW5nIHRlc3QgdGhyZWFkcy4KLQotICAgICIiIgotICAg
ICMgV2hlbiB3ZSdyZSBydW5uaW5nIG9uZSB0ZXN0IHBlciBEdW1wUmVuZGVyVHJlZSBwcm9jZXNz
LCB3ZSBjYW4KLSAgICAjIGVuZm9yY2UgYSBoYXJkIHRpbWVvdXQuICBUaGUgRHVtcFJlbmRlclRy
ZWUgd2F0Y2hkb2cgdXNlcyAyLjV4Ci0gICAgIyB0aGUgdGltZW91dDsgd2Ugd2FudCB0byBiZSBs
YXJnZXIgdGhhbiB0aGF0LgotICAgIHJldHVybiB0aW1lb3V0ICogMwotCi0KLWRlZiBfbWlsbGlz
ZWNvbmRzX3RvX3NlY29uZHMobXNlY3MpOgotICAgIHJldHVybiBmbG9hdChtc2VjcykgLyAxMDAw
LjAKLQotCiBkZWYgX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bShvcHRpb25zKToKICAg
ICByZXR1cm4gb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgbm90IChvcHRpb25zLm5ld19iYXNlbGlu
ZSBvciBvcHRpb25zLnJlc2V0X3Jlc3VsdHMpCiAKQEAgLTIwOCw4NSArMTkzLDQ0IEBAIGNsYXNz
IFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgIHJldHVybiBzZWxm
Ll90ZXN0X3Jlc3VsdAogCiAKLWNsYXNzIFdhdGNoYWJsZVRocmVhZCh0aHJlYWRpbmcuVGhyZWFk
KToKLSAgICAiIiJUaGlzIGNsYXNzIGFic3RyYWN0cyBhbiBpbnRlcmZhY2UgdXNlZCBieQotICAg
IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2gg
Zm9yIHRocmVhZAotICAgIG1hbmFnZW1lbnQuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgot
ICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX2Nh
bmNlbGVkID0gRmFsc2UKLSAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25lCi0gICAg
ICAgIHNlbGYuX25leHRfdGltZW91dCA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0g
Tm9uZQotCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiU2V0IGEgZmxhZyB0ZWxs
aW5nIHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCi0gICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1
ZQotCi0gICAgZGVmIGNsZWFyX25leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgIiIiTWFyayBh
IGZsYWcgdGVsbGluZyB0aGlzIHRocmVhZCB0byBzdG9wIHNldHRpbmcgdGltZW91dHMuIiIiCi0g
ICAgICAgIHNlbGYuX3RpbWVvdXQgPSAwCi0KLSAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6
Ci0gICAgICAgICIiIklmIHJ1bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9u
LCByZXR1cm4gaXQgaGVyZQotICAgICAgICAoKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIHR1cGxl
KS4KLSAgICAgICAgUmV0dXJucyBOb25lIGlmIHJ1bigpIHRlcm1pbmF0ZWQgbm9ybWFsbHkuIE1l
YW50IHRvIGJlIGNhbGxlZCBhZnRlcgotICAgICAgICBqb2luaW5nIHRoaXMgdGhyZWFkLiIiIgot
ICAgICAgICByZXR1cm4gc2VsZi5fZXhjZXB0aW9uX2luZm8KLQotICAgIGRlZiBpZChzZWxmKToK
LSAgICAgICAgIiIiUmV0dXJuIGEgdGhyZWFkIGlkZW50aWZpZXIuIiIiCi0gICAgICAgIHJldHVy
biBzZWxmLl90aHJlYWRfaWQKLQotICAgIGRlZiBuZXh0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAg
ICIiIlJldHVybiB0aGUgdGltZSB0aGUgdGVzdCBpcyBzdXBwb3NlZCB0byBmaW5pc2ggYnkuIiIi
Ci0gICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVvdXQKLQotCi1jbGFzcyBUZXN0U2hlbGxU
aHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0
aW9ucywgd29ya2VyX251bWJlciwKLSAgICAgICAgICAgICAgICAgZmlsZW5hbWVfbGlzdF9xdWV1
ZSwgcmVzdWx0X3F1ZXVlKToKK2NsYXNzIFdvcmtlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0LCBjb250YWluZXIsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsCisgICAgICAg
ICAgICAgICAgIHdvcmtlcl9uYW1lKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbGwgdGhlIGxv
Y2FsIHN0YXRlIGZvciB0aGlzIER1bXBSZW5kZXJUcmVlIHRocmVhZC4KIAogICAgICAgICBBcmdz
OgogICAgICAgICAgIHBvcnQ6IGludGVyZmFjZSB0byBwb3J0LXNwZWNpZmljIGhvb2tzCisgICAg
ICAgICAgY29udGFpbmVyOiBjb250YWluZXIgb2JqZWN0IHRvIHJlY2VpdmUgdGVzdHMgZnJvbQog
ICAgICAgICAgIG9wdGlvbnM6IGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZ3VtZW50IGZyb20gb3B0
cGFyc2UKICAgICAgICAgICB3b3JrZXJfbnVtYmVyOiBpZGVudGlmaWVyIGZvciBhIHBhcnRpY3Vs
YXIgd29ya2VyIHRocmVhZC4KLSAgICAgICAgICBmaWxlbmFtZV9saXN0X3F1ZXVlOiBBIHRocmVh
ZCBzYWZlIFF1ZXVlIGNsYXNzIHRoYXQgY29udGFpbnMgbGlzdHMKLSAgICAgICAgICAgICAgb2Yg
dHVwbGVzIG9mIChmaWxlbmFtZSwgdXJpKSBwYWlycy4KLSAgICAgICAgICByZXN1bHRfcXVldWU6
IEEgdGhyZWFkIHNhZmUgUXVldWUgY2xhc3MgdGhhdCB3aWxsIGNvbnRhaW4KLSAgICAgICAgICAg
ICAgc2VyaWFsaXplZCBUZXN0UmVzdWx0IG9iamVjdHMuCisgICAgICAgICAgd29ya2VyX25hbWU6
IGZvciBsb2dnaW5nLgogICAgICAgICAiIiIKLSAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLl9faW5p
dF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5f
Y29udGFpbmVyID0gY29udGFpbmVyCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAg
IHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3
b3JrZXJfbnVtYmVyCi0gICAgICAgIHNlbGYuX25hbWUgPSAnd29ya2VyLSVkJyAlIHdvcmtlcl9u
dW1iZXIKLSAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZSA9IGZpbGVuYW1lX2xpc3Rf
cXVldWUKLSAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gcmVzdWx0X3F1ZXVlCi0gICAgICAg
IHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBbXQotICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCi0g
ICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzID0ge30KLSAgICAgICAgc2VsZi5f
dGVzdF9yZXN1bHRzID0gW10KLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0gMAotICAgICAgICBz
ZWxmLl9zdGFydF90aW1lID0gMAotICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSAwCi0gICAgICAg
IHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKLSAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dh
aXRfYmVnaW4gPSAwCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IDAKKyAgICAg
ICAgc2VsZi5fbmFtZSA9IHdvcmtlcl9uYW1lCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBz
ZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKKyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCiAK
KyAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdCA9IFtdCiAgICAgICAgIHNlbGYuX3Rlc3RfdHlw
ZXMgPSBbXQogICAgICAgICBmb3IgY2xzIGluIHNlbGYuX2dldF90ZXN0X3R5cGVfY2xhc3Nlcygp
OgogICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcy5hcHBlbmQoY2xzKHNlbGYuX3BvcnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1
bHRzX2RpcmVjdG9yeSkpCiAgICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHNlbGYuX2dldF90ZXN0
X2FyZ3Mod29ya2VyX251bWJlcikKKyAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQorICAgICAg
ICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
ZXN0c19ydW4udHh0IikKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBjb2RlY3Mub3Bl
bih0ZXN0c19ydW5fZmlsZW5hbWUsICJhIiwgInV0Zi04IikKIAotICAgICAgICAjIEN1cnJlbnQg
Z3JvdXAgb2YgdGVzdHMgd2UncmUgcnVubmluZy4KLSAgICAgICAgc2VsZi5fY3VycmVudF9ncm91
cCA9IE5vbmUKLSAgICAgICAgIyBOdW1iZXIgb2YgdGVzdHMgaW4gc2VsZi5fY3VycmVudF9ncm91
cC4KLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3JvdXAgPSBOb25lCi0gICAg
ICAgICMgVGltZSBhdCB3aGljaCB3ZSBzdGFydGVkIHJ1bm5pbmcgdGVzdHMgZnJvbSBzZWxmLl9j
dXJyZW50X2dyb3VwLgotICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUgPSBO
b25lCisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHJlY2VpdmVk
IC0gbm8gbW9yZSB0ZXN0cyB0byBydW4uIiIiCisgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5k
ZXJfdHJlZSgpCisgICAgICAgIGlmIHNlbGYuX3Rlc3RzX3J1bl9maWxlOgorICAgICAgICAgICAg
c2VsZi5fdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVu
X2ZpbGUgPSBOb25lCiAKICAgICBkZWYgX2dldF90ZXN0X2FyZ3Moc2VsZiwgd29ya2VyX251bWJl
cik6CiAgICAgICAgICIiIlJldHVybnMgdGhlIHR1cGxlIG9mIGFyZ3VtZW50cyBmb3IgdGVzdHMg
YW5kIGZvciBEdW1wUmVuZGVyVHJlZS4iIiIKQEAgLTMwOCwxNjIgKzI1Miw1OSBAQCBjbGFzcyBU
ZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgICAgIGNsYXNzZXMuYXBw
ZW5kKGltYWdlX2RpZmYuSW1hZ2VEaWZmKQogICAgICAgICByZXR1cm4gY2xhc3NlcwogCi0gICAg
ZGVmIGdldF90ZXN0X2dyb3VwX3RpbWluZ19zdGF0cyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJu
cyBhIGRpY3Rpb25hcnkgbWFwcGluZyB0ZXN0IGdyb3VwIHRvIGEgdHVwbGUgb2YKLSAgICAgICAg
KG51bWJlciBvZiB0ZXN0cyBpbiB0aGF0IGdyb3VwLCB0aW1lIHRvIHJ1biB0aGUgdGVzdHMpIiIi
Ci0gICAgICAgIHJldHVybiBzZWxmLl90ZXN0X2dyb3VwX3RpbWluZ19zdGF0cwotCi0gICAgZGVm
IGdldF90ZXN0X3Jlc3VsdHMoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiBh
bGwgdGVzdHMgcnVuIG9uIHRoaXMgdGhyZWFkLgotCi0gICAgICAgIFRoaXMgaXMgdXNlZCB0byBj
YWxjdWxhdGUgcGVyLXRocmVhZCBzdGF0aXN0aWNzLgotCi0gICAgICAgICIiIgotICAgICAgICBy
ZXR1cm4gc2VsZi5fdGVzdF9yZXN1bHRzCi0KLSAgICBkZWYgZ2V0X3RvdGFsX3RpbWUoc2VsZik6
Ci0gICAgICAgIHJldHVybiBtYXgoc2VsZi5fc3RvcF90aW1lIC0gc2VsZi5fc3RhcnRfdGltZSAt
Ci0gICAgICAgICAgICAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfdGltZSgpLCAwLjApCi0K
LSAgICBkZWYgZ2V0X251bV90ZXN0cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX251bV90
ZXN0cwotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgIiIiRGVsZWdhdGUgbWFpbiB3b3Jr
IHRvIGEgaGVscGVyIG1ldGhvZCBhbmQgd2F0Y2ggZm9yIHVuY2F1Z2h0Ci0gICAgICAgIGV4Y2Vw
dGlvbnMuIiIiCi0gICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkKLQotICAgIGRlZiBfY292ZXJl
ZF9ydW4oc2VsZik6Ci0gICAgICAgICMgRklYTUU6IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0aW5l
IHRvIHdvcmsgYXJvdW5kIGEgYnVnCi0gICAgICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8v
Yml0YnVja2V0Lm9yZy9uZWQvY292ZXJhZ2VweS9pc3N1ZS84NS4KLSAgICAgICAgc2VsZi5fdGhy
ZWFkX2lkID0gdGhyZWFkLmdldF9pZGVudCgpCi0gICAgICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSB0
aW1lLnRpbWUoKQotICAgICAgICBzZWxmLl9udW1fdGVzdHMgPSAwCi0gICAgICAgIHRyeToKLSAg
ICAgICAgICAgIF9sb2cuZGVidWcoJyVzIHN0YXJ0aW5nJyAlIChzZWxmLmdldE5hbWUoKSkpCi0g
ICAgICAgICAgICBzZWxmLl9ydW4odGVzdF9ydW5uZXI9Tm9uZSwgcmVzdWx0X3N1bW1hcnk9Tm9u
ZSkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyVzIGRvbmUgKCVkIHRlc3RzKScgJSAoc2VsZi5n
ZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X251bV90ZXN0cygpKSkK
LSAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgc2VsZi5fZXhj
ZXB0aW9uX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMg
aW50ZXJydXB0ZWQiICUgc2VsZi5nZXROYW1lKCkpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAg
ICAgICMgU2F2ZSB0aGUgZXhjZXB0aW9uIGZvciBvdXIgY2FsbGVyIHRvIHNlZS4KLSAgICAgICAg
ICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIHNl
bGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICBfbG9nLmVycm9yKCclcyBk
eWluZywgZXhjZXB0aW9uIHJhaXNlZCcgJSBzZWxmLmdldE5hbWUoKSkKLQotICAgICAgICBzZWxm
Ll9zdG9wX3RpbWUgPSB0aW1lLnRpbWUoKQotCi0gICAgZGVmIHJ1bl9pbl9tYWluX3RocmVhZChz
ZWxmLCB0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJUaGlzIGhvb2sg
YWxsb3dzIHVzIHRvIHJ1biB0aGUgdGVzdHMgZnJvbSB0aGUgbWFpbiB0aHJlYWQgaWYKLSAgICAg
ICAgLS1udW0tdGVzdC1zaGVsbHM9PTEsIGluc3RlYWQgb2YgaGF2aW5nIHRvIGFsd2F5cyBydW4g
dHdvIG9yIG1vcmUKLSAgICAgICAgdGhyZWFkcy4gVGhpcyBhbGxvd3MgdXMgdG8gZGVidWcgdGhl
IHRlc3QgaGFybmVzcyB3aXRob3V0IGhhdmluZyB0bwotICAgICAgICBkbyBtdWx0aS10aHJlYWRl
ZCBkZWJ1Z2dpbmcuIiIiCi0gICAgICAgIHNlbGYuX3J1bih0ZXN0X3J1bm5lciwgcmVzdWx0X3N1
bW1hcnkpCi0KLSAgICBkZWYgY2FuY2VsKHNlbGYpOgotICAgICAgICAiIiJDbGVhbiB1cCBodHRw
IGxvY2sgYW5kIHNldCBhIGZsYWcgdGVsbGluZyB0aGlzIHRocmVhZCB0byBxdWl0LiIiIgotICAg
ICAgICBzZWxmLl9zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKLSAgICAgICAgV2F0Y2hhYmxlVGhy
ZWFkLmNhbmNlbChzZWxmKQotCi0gICAgZGVmIG5leHRfdGltZW91dChzZWxmKToKLSAgICAgICAg
IiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlzIHN1cHBvc2VkIHRvIGZpbmlzaCBieS4iIiIK
LSAgICAgICAgaWYgc2VsZi5fbmV4dF90aW1lb3V0OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYu
X25leHRfdGltZW91dCArIHNlbGYuX2h0dHBfbG9ja193YWl0X3RpbWUoKQotICAgICAgICByZXR1
cm4gc2VsZi5fbmV4dF90aW1lb3V0Ci0KLSAgICBkZWYgX2h0dHBfbG9ja193YWl0X3RpbWUoc2Vs
Zik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgdGltZSB3aGF0IGh0dHAgbG9ja2luZyB0YWtlcy4i
IiIKLSAgICAgICAgaWYgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4gPT0gMDoKLSAgICAgICAg
ICAgIHJldHVybiAwCi0gICAgICAgIGlmIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9PSAwOgot
ICAgICAgICAgICAgcmV0dXJuIHRpbWUudGltZSgpIC0gc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVn
aW4KLSAgICAgICAgcmV0dXJuIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCAtIHNlbGYuX2h0dHBf
bG9ja193YWl0X2JlZ2luCi0KLSAgICBkZWYgX3J1bihzZWxmLCB0ZXN0X3J1bm5lciwgcmVzdWx0
X3N1bW1hcnkpOgotICAgICAgICAiIiJNYWluIHdvcmsgZW50cnkgcG9pbnQgb2YgdGhlIHRocmVh
ZC4gQmFzaWNhbGx5IHdlIHB1bGwgdXJscyBmcm9tIHRoZQotICAgICAgICBmaWxlbmFtZSBxdWV1
ZSBhbmQgcnVuIHRoZSB0ZXN0cyB1bnRpbCB3ZSBydW4gb3V0IG9mIHVybHMuCi0KLSAgICAgICAg
SWYgdGVzdF9ydW5uZXIgaXMgbm90IE5vbmUsIHRoZW4gd2UgY2FsbCB0ZXN0X3J1bm5lci5VcGRh
dGVTdW1tYXJ5KCkKLSAgICAgICAgd2l0aCB0aGUgcmVzdWx0cyBvZiBlYWNoIHRlc3QuIiIiCi0g
ICAgICAgIGJhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKLSAgICAgICAgYmF0
Y2hfY291bnQgPSAwCi0KLSAgICAgICAgIyBBcHBlbmQgdGVzdHMgd2UncmUgcnVubmluZyB0byB0
aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgotICAgICAgICAjIFRoaXMgaXMgY3JlYXRl
ZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJlTGlzdHNBbmRQcmludE91dHB1dC4KLSAg
ICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVz
dWx0c19kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGVzdHNfcnVuLnR4dCIpCi0gICAgICAgIHRlc3RzX3J1bl9maWxlID0gY29kZWNzLm9wZW4o
dGVzdHNfcnVuX2ZpbGVuYW1lLCAiYSIsICJ1dGYtOCIpCi0KLSAgICAgICAgd2hpbGUgVHJ1ZToK
LSAgICAgICAgICAgIGlmIHNlbGYuX2NhbmNlbGVkOgotICAgICAgICAgICAgICAgIF9sb2cuZGVi
dWcoJ1Rlc3RpbmcgY2FuY2VsbGVkJykKLSAgICAgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS5j
bG9zZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgIGlmIGxlbihzZWxm
Ll9maWxlbmFtZV9saXN0KSBpcyAwOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRf
Z3JvdXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBf
dGltaW5nX3N0YXRzW3NlbGYuX2N1cnJlbnRfZ3JvdXBdID0gXAotICAgICAgICAgICAgICAgICAg
ICAgICAgKHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2dyb3VwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWUudGltZSgpIC0gc2VsZi5fY3VycmVudF9ncm91cF9zdGFydF90aW1lKQot
Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50
X2dyb3VwLCBzZWxmLl9maWxlbmFtZV9saXN0ID0gXAotICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZS5nZXRfbm93YWl0KCkKLSAgICAgICAgICAgICAgICBl
eGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVy
c193aXRoX2xvY2soKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVy
X3RyZWUoKQotICAgICAgICAgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS5jbG9zZSgpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVu
dF9ncm91cCA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKLSAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQotICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5f
aGF2ZV9odHRwX2xvY2s6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193
aXRoX2xvY2soKQotCi0gICAgICAgICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRf
Z3JvdXAgPSBsZW4oc2VsZi5fZmlsZW5hbWVfbGlzdCkKLSAgICAgICAgICAgICAgICBzZWxmLl9j
dXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotCi0gICAgICAgICAgICB0ZXN0
X2lucHV0ID0gc2VsZi5fZmlsZW5hbWVfbGlzdC5wb3AoKQotCi0gICAgICAgICAgICAjIFdlIGhh
dmUgYSB1cmwsIHJ1biB0ZXN0cy4KLSAgICAgICAgICAgIGJhdGNoX2NvdW50ICs9IDEKLSAgICAg
ICAgICAgIHNlbGYuX251bV90ZXN0cyArPSAxCi0gICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LnJ1bl9zaW5nbHk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5f
YW5vdGhlcl90aHJlYWQodGVzdF9pbnB1dCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQodGVzdF9pbnB1dCkK
LQotICAgICAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X2lucHV0LmZpbGVuYW1lCi0gICAgICAgICAg
ICB0ZXN0c19ydW5fZmlsZS53cml0ZShmaWxlbmFtZSArICJcbiIpCi0gICAgICAgICAgICBpZiBy
ZXN1bHQuZmFpbHVyZXM6Ci0gICAgICAgICAgICAgICAgIyBDaGVjayBhbmQga2lsbCBEdW1wUmVu
ZGVyVHJlZSBpZiB3ZSBuZWVkIHRvLgotICAgICAgICAgICAgICAgIGlmIGxlbihbMSBmb3IgZiBp
biByZXN1bHQuZmFpbHVyZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYuc2hvdWxkX2tp
bGxfZHVtcF9yZW5kZXJfdHJlZSgpXSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxf
ZHVtcF9yZW5kZXJfdHJlZSgpCi0gICAgICAgICAgICAgICAgICAgICMgUmVzZXQgdGhlIGJhdGNo
IGNvdW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQuCi0gICAgICAgICAgICAgICAgICAg
IGJhdGNoX2NvdW50ID0gMAotICAgICAgICAgICAgICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3Nh
Z2UocykuCi0gICAgICAgICAgICAgICAgZXJyb3Jfc3RyID0gJ1xuJy5qb2luKFsnICAnICsgZi5t
ZXNzYWdlKCkgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIGlu
IHJlc3VsdC5mYWlsdXJlc10pCi0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgZmFp
bGVkOlxuJXMiICUgKHNlbGYuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX3N0cikpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgIF9sb2cuZGVidWcoIiVzICVzIHBhc3NlZCIgJSAoc2VsZi5nZXROYW1lKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUo
ZmlsZW5hbWUpKSkKLSAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZS5wdXQocmVzdWx0LmR1
bXBzKCkpCi0KLSAgICAgICAgICAgIGlmIGJhdGNoX3NpemUgPiAwIGFuZCBiYXRjaF9jb3VudCA+
PSBiYXRjaF9zaXplOgotICAgICAgICAgICAgICAgICMgQm91bmNlIHRoZSBzaGVsbCBhbmQgcmVz
ZXQgY291bnQuCisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgorICAgICAgICBm
aWxlbmFtZSA9IHRlc3RfaW5wdXQuZmlsZW5hbWUKKyAgICAgICAgdGVzdF9pbnB1dC51cmkgPSBz
ZWxmLl9wb3J0LmZpbGVuYW1lX3RvX3VyaSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorICAgICAgICBp
ZiBfc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3VtKHNlbGYuX29wdGlvbnMpOgorICAgICAg
ICAgICAgdGVzdF9pbnB1dC5pbWFnZV9jaGVja3N1bSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hl
Y2tzdW0odGVzdF9pbnB1dC5maWxlbmFtZSkKKworICAgICAgICB0ZXN0X2lucHV0LnVyaSA9IHNl
bGYuX3BvcnQuZmlsZW5hbWVfdG9fdXJpKHRlc3RfaW5wdXQuZmlsZW5hbWUpCisgICAgICAgIHNl
bGYuX2JhdGNoX2NvdW50ICs9IDEKKworICAgICAgICAjIFdlIGdpdmUgRFJUIHNvbWUgZXh0cmEg
dGltZSB0byBkZXRlY3QgYSB0aW1lb3V0LCBhbmQgdGhlbgorICAgICAgICAjIGdpdmUgb3VyIHdh
dGNoZG9nIHRocmVhZCBhIHNpbWlsYXIgYW1vdW50IHRvIGRldGVjdCBhIGh1bmcKKyAgICAgICAg
IyBEUlQuIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIHRlc3QgdGltZW91dCBmcm9t
IGEKKyAgICAgICAgIyBzdHJpbmcgdmFsdWUgaW4gbWlsbGlzZWNvbmRzIHRvIGEgZmxvYXQgZm9y
IFB5dGhvbi4KKyAgICAgICAgdGVzdF9wYWRkaW5nID0gNDAuMAorICAgICAgICBraWxsX3BhZGRp
bmcgPSAxLjAKKyAgICAgICAgdGhyZWFkX3RpbWVvdXQgPSBmbG9hdCh0ZXN0X2lucHV0LnRpbWVv
dXQpIC8gMTAwMC4wICsgdGVzdF9wYWRkaW5nCisKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUo
KQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAgICBzZWxm
Ll9jb250YWluZXIuc3RhcnRlZF90ZXN0KHRlc3RfaW5wdXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1lb3V0ICsga2lsbF9wYWRkaW5nKQorICAg
ICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQodGVzdF9p
bnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRocmVhZF90aW1lb3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY29u
dGFpbmVyLnN0YXJ0ZWRfdGVzdCh0ZXN0X2lucHV0LCB0aHJlYWRfdGltZW91dCkKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X2luX3RoaXNfdGhyZWFkKHRlc3RfaW5wdXQpCisK
KyAgICAgICAgc2VsZi5fY29udGFpbmVyLmZpbmlzaGVkX3Rlc3QocmVzdWx0LCB0aW1lLnRpbWUo
KSAtIHN0YXJ0KQorCisgICAgICAgIGlmIHNlbGYuX2JhdGNoX3NpemUgPiAwIGFuZCBzZWxmLl9i
YXRjaF9jb3VudCA+PSBzZWxmLl9iYXRjaF9zaXplOgorICAgICAgICAgICAgIyBCb3VuY2UgdGhl
IHNoZWxsIGFuZCByZXNldCBjb3VudC4KKyAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5k
ZXJfdHJlZSgpCisgICAgICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKworICAgICAgICBz
ZWxmLl90ZXN0c19ydW5fZmlsZS53cml0ZSh0ZXN0X2lucHV0LmZpbGVuYW1lICsgIlxuIikKKyAg
ICAgICAgaWYgcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgIyBDaGVjayBhbmQga2lsbCBE
dW1wUmVuZGVyVHJlZSBpZiB3ZSBuZWVkIHRvLgorICAgICAgICAgICAgaWYgbGVuKFsxIGZvciBm
IGluIHJlc3VsdC5mYWlsdXJlcworICAgICAgICAgICAgICAgICAgICBpZiBmLnNob3VsZF9raWxs
X2R1bXBfcmVuZGVyX3RyZWUoKV0pOgogICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9y
ZW5kZXJfdHJlZSgpCi0gICAgICAgICAgICAgICAgYmF0Y2hfY291bnQgPSAwCi0KLSAgICAgICAg
ICAgIGlmIHRlc3RfcnVubmVyOgotICAgICAgICAgICAgICAgIHRlc3RfcnVubmVyLnVwZGF0ZV9z
dW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgZGVmIF9ydW5fdGVzdF9pbl9hbm90aGVyX3Ro
cmVhZChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBiYXRj
aCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgorICAgICAgICAgICAgICAgIHNl
bGYuX2JhdGNoX2NvdW50ID0gMAorICAgICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2Fn
ZShzKS4KKyAgICAgICAgICAgIGVycm9yX3N0ciA9ICdcbicuam9pbihbJyAgJyArIGYubWVzc2Fn
ZSgpIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiBpbiByZXN1bHQu
ZmFpbHVyZXNdKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgZmFpbGVkOlxuJXMiICUg
KHNlbGYuX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZl
X3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1dC5maWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9zdHIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
JXMgJXMgcGFzc2VkIiAlIChzZWxmLl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmlsZW5hbWUpKSkKKwor
ICAgIGRlZiBfcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCwgdGhy
ZWFkX3RpbWVvdXQpOgogICAgICAgICAiIiJSdW4gYSB0ZXN0IGluIGEgc2VwYXJhdGUgdGhyZWFk
LCBlbmZvcmNpbmcgYSBoYXJkIHRpbWUgbGltaXQuCiAKICAgICAgICAgU2luY2Ugd2UgY2FuIG9u
bHkgZGV0ZWN0IHRoZSB0ZXJtaW5hdGlvbiBvZiBhIHRocmVhZCwgbm90IGFueSBpbnRlcm5hbApA
QCAtNDg2LDkgKzMyNyw2IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQp
OgogCiAgICAgICAgIHdvcmtlci5zdGFydCgpCiAKLSAgICAgICAgdGhyZWFkX3RpbWVvdXQgPSBf
bWlsbGlzZWNvbmRzX3RvX3NlY29uZHMoCi0gICAgICAgICAgICBfcGFkX3RpbWVvdXQoaW50KHRl
c3RfaW5wdXQudGltZW91dCkpKQotICAgICAgICB0aHJlYWQuX25leHRfdGltZW91dCA9IHRpbWUu
dGltZSgpICsgdGhyZWFkX3RpbWVvdXQKICAgICAgICAgd29ya2VyLmpvaW4odGhyZWFkX3RpbWVv
dXQpCiAgICAgICAgIGlmIHdvcmtlci5pc0FsaXZlKCk6CiAgICAgICAgICAgICAjIElmIGpvaW4o
KSByZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3RpbGwgcnVubmluZywgdGhlCkBAIC01MTEsNyAr
MzQ5LDggQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAg
ICAgICBfbG9nLmVycm9yKCdDYW5ub3QgZ2V0IHJlc3VsdHMgb2YgdGVzdDogJXMnICUKICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5maWxlbmFtZSkKICAgICAgICAgICAgIHJlc3Vs
dCA9IHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3RfaW5wdXQuZmlsZW5hbWUsIGZhaWx1cmVz
PVtdLAotICAgICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9MCwgdG90YWxfdGltZV9mb3JfYWxs
X2RpZmZzPTAsIHRpbWVfZm9yX2RpZmZzPXt9KQorICAgICAgICAgICAgICAgIHRlc3RfcnVuX3Rp
bWU9MCwgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzPTAsCisgICAgICAgICAgICAgICAgdGltZV9m
b3JfZGlmZnM9e30pCiAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCkBAIC01MjQsMTQgKzM2Myw5
IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICBSZXR1
cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fZW5z
dXJlX2R1bXBfcmVuZGVyX3RyZWVfaXNfcnVubmluZygpCi0gICAgICAgIHRocmVhZF90aW1lb3V0
ID0gX21pbGxpc2Vjb25kc190b19zZWNvbmRzKAotICAgICAgICAgICAgIF9wYWRfdGltZW91dChp
bnQodGVzdF9pbnB1dC50aW1lb3V0KSkpCi0gICAgICAgIHNlbGYuX25leHRfdGltZW91dCA9IHRp
bWUudGltZSgpICsgdGhyZWFkX3RpbWVvdXQKLSAgICAgICAgdGVzdF9yZXN1bHQgPSBfcnVuX3Np
bmdsZV90ZXN0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsIHRlc3RfaW5wdXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLCBzZWxmLl90
ZXN0X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9k
cml2ZXIsIHNlbGYuX25hbWUpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVzdWx0cy5hcHBlbmQodGVz
dF9yZXN1bHQpCi0gICAgICAgIHJldHVybiB0ZXN0X3Jlc3VsdAorICAgICAgICByZXR1cm4gX3J1
bl9zaW5nbGVfdGVzdChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zLCB0ZXN0X2lucHV0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMsIHNlbGYuX3Rl
c3RfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kcml2ZXIs
IHNlbGYuX25hbWUpCiAKICAgICBkZWYgX2Vuc3VyZV9kdW1wX3JlbmRlcl90cmVlX2lzX3J1bm5p
bmcoc2VsZik6CiAgICAgICAgICIiIlN0YXJ0IHRoZSBzaGFyZWQgRHVtcFJlbmRlclRyZWUsIGlm
IGl0J3Mgbm90IHJ1bm5pbmcuCkBAIC01NDcsMjkgKzM4MSw2IEBAIGNsYXNzIFRlc3RTaGVsbFRo
cmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMpCiAgICAgICAgICAgICBzZWxmLl9kcml2
ZXIuc3RhcnQoKQogCi0gICAgZGVmIF9zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKLSAg
ICAgICAgIiIiQWNxdWlyZSBodHRwIGxvY2sgYW5kIHN0YXJ0IHRoZSBzZXJ2ZXJzLiIiIgotICAg
ICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9IHRpbWUudGltZSgpCi0gICAgICAgIF9s
b2cuZGVidWcoJ0FjcXVpcmUgaHR0cCBsb2NrIC4uLicpCi0gICAgICAgIHNlbGYuX3BvcnQuYWNx
dWlyZV9odHRwX2xvY2soKQotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZl
ciAuLi4nKQotICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKLSAgICAgICAg
X2xvZy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQotICAgICAgICBzZWxm
Ll9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQotICAgICAgICBzZWxmLl9odHRwX2xvY2tf
d2FpdF9lbmQgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRy
dWUKLQotICAgIGRlZiBfc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKLSAgICAgICAgIiIi
U3RvcCB0aGUgc2VydmVycyBhbmQgcmVsZWFzZSBodHRwIGxvY2suIiIiCi0gICAgICAgIGlmIHNl
bGYuX2hhdmVfaHR0cF9sb2NrOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgSFRU
UCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigp
Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicp
Ci0gICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCi0gICAgICAg
ICAgICBfbG9nLmRlYnVnKCdSZWxlYXNlIGh0dHAgbG9jayAuLi4nKQotICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5yZWxlYXNlX2h0dHBfbG9jaygpCi0gICAgICAgICAgICBzZWxmLl9oYXZlX2h0dHBf
bG9jayA9IEZhbHNlCi0KICAgICBkZWYgX2tpbGxfZHVtcF9yZW5kZXJfdHJlZShzZWxmKToKICAg
ICAgICAgIiIiS2lsbCB0aGUgRHVtcFJlbmRlclRyZWUgcHJvY2VzcyBpZiBpdCdzIHJ1bm5pbmcu
IiIiCiAgICAgICAgIGlmIHNlbGYuX2RyaXZlcjoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2Vy
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvbWVzc2FnZV9icm9rZXIucHkKaW5kZXggMTM5NTFjMDJlZjNkMTcyYTM5ZTczNjljZWIy
MTk3ZjFjYmNiOWI5OC4uNDBjZDVmMzdkYTRmZWViZWQ4YTcyNDEwZjBiNGQzZjM3M2FkMWEyMCAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIucHkKQEAg
LTI4LDI1ICsyOCw1MjQgQEAKIAogIiIiTW9kdWxlIGZvciBoYW5kbGluZyBtZXNzYWdlcywgdGhy
ZWFkcywgcHJvY2Vzc2VzLCBhbmQgY29uY3VycmVuY3kgZm9yIHJ1bi13ZWJraXQtdGVzdHMuCiAK
LVRoZSBtb2RlbCB3ZSB1c2UgaXMgdGhhdCBvZiBhIG1lc3NhZ2UgYnJva2VyIC0gaXQgcHJvdmlk
ZXMgYSBtZXNzYWdpbmcKLWFic3RyYWN0aW9uIGFuZCBtZXNzYWdlIGxvb3BzLCBhbmQgaGFuZGxl
cyBsYXVuY2hpbmcgdGhyZWFkcyBhbmQvb3IgcHJvY2Vzc2VzCi1kZXBlbmRpbmcgb24gdGhlIHJl
cXVlc3RlZCBjb25maWd1cmF0aW9uLgorVGVzdGluZyBpcyBhY2NvbXBsaXNoZWQgYnkgaGF2aW5n
IGEgbWFuYWdlciAoVGVzdFJ1bm5lcikgZ2F0aGVyIGFsbCBvZiB0aGUKK3Rlc3RzIHRvIGJlIHJ1
biwgYW5kIHNlbmRpbmcgbWVzc2FnZXMgdG8gYSBwb29sIG9mIHdvcmtlcnMgKFRlc3RTaGVsbFRo
cmVhZHMpCit0byBydW4gZWFjaCB0ZXN0LiBFYWNoIHdvcmtlciBjb21tdW5pY2F0ZXMgd2l0aCBv
bmUgZHJpdmVyICh1c3VhbGx5CitEdW1wUmVuZGVyVHJlZSkgdG8gcnVuIG9uZSB0ZXN0IGF0IGEg
dGltZSBhbmQgdGhlbiBjb21wYXJlIHRoZSBvdXRwdXQgYWdhaW5zdAord2hhdCB3ZSBleHBlY3Rl
ZCB0byBnZXQuCisKK1RoaXMgbW9kdWxlcyBwcm92aWRlcyBhIG1lc3NhZ2UgYnJva2VyIHRoYXQg
Y29ubmVjdHMgdGhlIG1hbmFnZXIgdG8gdGhlCit3b3JrZXJzOiBpdCBwcm92aWRlcyBhIG1lc3Nh
Z2luZyBhYnN0cmFjdGlvbiBhbmQgbWVzc2FnZSBsb29wcywgYW5kCitoYW5kbGVzIGxhdW5jaGlu
ZyB0aHJlYWRzIGFuZC9vciBwcm9jZXNzZXMgZGVwZW5kaW5nIG9uIHRoZQorcmVxdWVzdGVkIGNv
bmZpZ3VyYXRpb24uCiAiIiIKIAorCitpbXBvcnQgY1BpY2tsZQogaW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBvcworaW1wb3J0IFF1ZXVlCiBpbXBvcnQgc3lz
CitpbXBvcnQgdGhyZWFkCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQogaW1wb3J0IHRy
YWNlYmFjawogCitpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKK2ltcG9ydCB0ZXN0X3Jl
c3VsdHMKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWRlZiBsb2df
d2VkZ2VkX3RocmVhZChpZCk6CitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMpOgorICAgICIiIlJldHVy
biBhbiBpbnN0YW5jZSBvZiBhIFdvcmtlck1lc3NhZ2VCcm9rZXIuIiIiCisgICAgd29ya2VyX21v
ZGVsID0gb3B0aW9ucy53b3JrZXJfbW9kZWwKKyAgICBpZiB3b3JrZXJfbW9kZWwgPT0gJ2lubGlu
ZSc6CisgICAgICAgIHJldHVybiBJbmxpbmVCcm9rZXIocG9ydCwgb3B0aW9ucykKKyAgICBpZiB3
b3JrZXJfbW9kZWwgPT0gJ3RocmVhZHMnOgorICAgICAgICByZXR1cm4gTXVsdGlUaHJlYWRlZEJy
b2tlcihwb3J0LCBvcHRpb25zKQorICAgIGlmIHdvcmtlcl9tb2RlbCA9PSAncHJvY2Vzc2VzJzoK
KyAgICAgICAgcmV0dXJuIE11bHRpUHJvY2Vzc0Jyb2tlcihwb3J0LCBvcHRpb25zKQorICAgIHJh
aXNlIFZhbHVlRXJyb3IoJ3Vuc3VwcG9ydGVkIHZhbHVlIGZvciAtLXdvcmtlci1tb2RlbDogJXMn
ICUgd29ya2VyX21vZGVsKQorCisKK2NsYXNzIF9NZXNzYWdlKG9iamVjdCk6CisgICAgVEVTVF9M
SVNUID0gJ3Rlc3RfbGlzdCcKKyAgICBTVE9QID0gJ3N0b3AnCisgICAgRE9ORSA9ICdkb25lJwor
ICAgIFNUQVJURURfVEVTVCA9ICdzdGFydGVkX3Rlc3QnCisgICAgRklOSVNIRURfVEVTVCA9ICdm
aW5pc2hlZF90ZXN0JworICAgIEZJTklTSEVEX0xJU1QgPSAnZmluaXNoZWRfbGlzdCcKKyAgICBF
WENFUFRJT04gPSAnZXhjZXB0aW9uJworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2Fk
cyhzdHIpOgorICAgICAgICBvYmogPSBjUGlja2xlLmxvYWRzKHN0cikKKyAgICAgICAgYXNzZXJ0
KGlzaW5zdGFuY2Uob2JqLCBfTWVzc2FnZSkpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3Jj
LCBkZXN0LCBoZHIsIGJvZHkpOgorICAgICAgICBzZWxmLnNyYyA9IHNyYworICAgICAgICBzZWxm
LmRlc3QgPSBkZXN0CisgICAgICAgIHNlbGYuaGRyID0gaGRyCisgICAgICAgIHNlbGYuYm9keSA9
IGJvZHkKKworICAgIGRlZiBkdW1wcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGNQaWNrbGUuZHVt
cHMoc2VsZikKKworCitjbGFzcyBfV29ya2VyU3RhdGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgbnVtYmVyLCBuYW1lLCB0aHJlYWQpOgorICAgICAgICBzZWxmLm51bWJlciA9IG51
bWJlcgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhy
ZWFkCisKKyAgICAgICAgc2VsZi5kb25lID0gRmFsc2UKKyAgICAgICAgc2VsZi5uZXh0X3RpbWVv
dXQgPSBOb25lCisgICAgICAgIHNlbGYud2VkZ2VkID0gRmFsc2UKKworCitjbGFzcyBXb3JrZXJN
ZXNzYWdlQnJva2VyKG9iamVjdCk6CisgICAgTUFOQUdFUiA9ICdtYW5hZ2VyJworICAgIEFOWV9X
T1JLRVIgPSAnd29ya2VyLVxkKycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRp
b25zKToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9
IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fbnVtX3dvcmtlcnMgPSBpbnQoc2VsZi5fb3B0aW9ucy5j
aGlsZF9wcm9jZXNzZXMpCisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBOb25lCisKKyAgICAgICAg
IyBUaGlzIG1hcHMgd29ya2VyIG5hbWVzIHRvIHRoZWlyIF9Xb3JrZXJTdGF0ZSB2YWx1ZXMuCisg
ICAgICAgIHNlbGYuX3dvcmtlcnMgPSB7fQorICAgICAgICBzZWxmLl9tYW5hZ2VyX3F1ZXVlID0g
UXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLl93b3JrZXJfcXVldWUgPSBRdWV1ZS5RdWV1ZSgp
CisKKyAgICBkZWYgX3RocmVhZHMoc2VsZik6CisgICAgICAgIHJldHVybiB0dXBsZShbdy50aHJl
YWQgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKV0pCisKKyAgICBkZWYgc3RhcnRfd29y
a2VycyhzZWxmKToKKyAgICAgICAgIiIiU3RhcnRzIHVwIHRoZSBwb29sIG9mIHdvcmtlcnMgZm9y
IHJ1bm5pbmcgdGhlIHRlc3RzLiIiIgorICAgICAgICBmb3Igd29ya2VyX251bWJlciBpbiB4cmFu
Z2Uoc2VsZi5fbnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgd29ya2VyX25hbWUgPSAnd29ya2Vy
LSVkJyAlIHdvcmtlcl9udW1iZXIKKyAgICAgICAgICAgIHRocmVhZCA9IHNlbGYuX3N0YXJ0X3dv
cmtlcih3b3JrZXJfbnVtYmVyLCB3b3JrZXJfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtl
cnNbd29ya2VyX25hbWVdID0gX1dvcmtlclN0YXRlKHdvcmtlcl9udW1iZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
cmVhZCkKKworICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIsIHdvcmtl
cl9uYW1lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1
bl9tZXNzYWdlX2xvb3Aoc2VsZiwgb2JqKToKKyAgICAgICAgIiIiTG9vcCBwcm9jZXNzaW5nIG1l
c3NhZ2VzIHVudGlsIGRvbmUuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IK
KworICAgIGRlZiBjYW5jZWxfd29ya2VycyhzZWxmKToKKyAgICAgICAgZm9yIHdvcmtlciBpbiBz
ZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgd29ya2VyLnRocmVhZC5jYW5jZWwo
KQorICAgICAgICBzZWxmLl9wb2xsX21hbmFnZXJfcXVldWUoc2VsZi5fbWFuYWdlci5nZXROYW1l
KCksIHRpbWVvdXQ9MC4wKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgICIiIlBl
cmZvcm0gYW55IG5lY2Vzc2FyeSBjbGVhbnVwIG9uIHNodXRkb3duLiIiIgorICAgICAgICBwYXNz
CisKKyAgICBkZWYgcG9zdF90ZXN0X2xpc3Qoc2VsZiwgdGVzdF9saXN0KToKKyAgICAgICAgc2Vs
Zi5fcHV0KHNyYz1zZWxmLk1BTkFHRVIsIGRlc3Q9c2VsZi5BTllfV09SS0VSLAorICAgICAgICAg
ICAgICAgICAgaGRyPV9NZXNzYWdlLlRFU1RfTElTVCwgYm9keT10ZXN0X2xpc3QpCisKKyAgICBk
ZWYgcG9zdF9zdGFydGVkX3Rlc3Qoc2VsZiwgc3JjLCB0ZXN0X2luZm8sIGhhbmdfdGltZW91dCk6
CisgICAgICAgIHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0PXNlbGYuTUFOQUdFUiwgaGRyPV9NZXNz
YWdlLlNUQVJURURfVEVTVCwKKyAgICAgICAgICAgICAgICAgIGJvZHk9KHRlc3RfaW5mbywgaGFu
Z190aW1lb3V0KSkKKworICAgIGRlZiBwb3N0X2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc3JjLCBsaXN0
X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz1z
cmMsIGRlc3Q9c2VsZi5NQU5BR0VSLCBoZHI9X01lc3NhZ2UuRklOSVNIRURfTElTVCwKKyAgICAg
ICAgICAgICAgICAgIGJvZHk9KGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpKQor
CisgICAgZGVmIHBvc3RfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90
aW1lKToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz1zcmMsIGRlc3Q9c2VsZi5NQU5BR0VSLCBoZHI9
X01lc3NhZ2UuRklOSVNIRURfVEVTVCwKKyAgICAgICAgICAgICAgICAgIGJvZHk9KHJlc3VsdCwg
ZWxhcHNlZF90aW1lKSkKKworICAgIGRlZiBwb3N0X2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y19p
bmZvKToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz1zcmMsIGRlc3Q9c2VsZi5NQU5BR0VSLCBoZHI9
X01lc3NhZ2UuRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgYm9keT1leGNfaW5mbykKKwor
ICAgIGRlZiBwb3N0X3N0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c2VsZi5NQU5B
R0VSLCBkZXN0PXNlbGYuQU5ZX1dPUktFUiwKKyAgICAgICAgICAgICAgICAgIGhkcj1fTWVzc2Fn
ZS5TVE9QLCBib2R5PU5vbmUpCisKKyAgICBkZWYgcG9zdF9kb25lKHNlbGYsIHdvcmtlcik6Cisg
ICAgICAgIHNlbGYuX3B1dChzcmM9d29ya2VyLCBkZXN0PXNlbGYuTUFOQUdFUiwKKyAgICAgICAg
ICAgICAgICAgIGhkcj1fTWVzc2FnZS5ET05FLCBib2R5PU5vbmUpCisKKyAgICBkZWYgX3B1dChz
ZWxmLCBzcmMsIGRlc3QsIGhkciwgYm9keSk6CisgICAgICAgIG1zZyA9IF9NZXNzYWdlKHNyYywg
ZGVzdCwgaGRyLCBib2R5KQorICAgICAgICBpZiBtc2cuZGVzdCA9PSBzZWxmLk1BTkFHRVI6Cisg
ICAgICAgICAgICAjIF9sb2cuZGVidWcoIiVzOiBwb3N0aW5nICclcycgbXNnIHRvIG1hbmFnZXIg
cXVldWUiICUKKyAgICAgICAgICAgICMgICAgICAgICAgICAgKG1zZy5zcmMsIG1zZy5oZHIpKQor
ICAgICAgICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1ZS5wdXQobXNnKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgIyBfbG9nLmRlYnVnKCIlczogcG9zdGluZyAnJXMnIG1zZyB0byB3b3JrZXIg
cXVldWUiICUKKyAgICAgICAgICAgICMgICAgICAgICAgICAgKG1zZy5zcmMsIG1zZy5oZHIpKQor
ICAgICAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlLnB1dChtc2cpCisKKyAgICBkZWYgX2dldChz
ZWxmLCBuYW1lLCBxdWV1ZSwgYmxvY2ssIHRpbWVvdXQpOgorICAgICAgICBpZiBxdWV1ZSA9PSBz
ZWxmLl9tYW5hZ2VyX3F1ZXVlOgorICAgICAgICAgICAgcXVldWVfbmFtZSA9ICJtYW5hZ2VyIHF1
ZXVlIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcXVldWVfbmFtZSA9ICJ3b3JrZXIgcXVl
dWUiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI19sb2cuZGVidWcoIiVzIG5hbWUgcmVh
ZGluZyBmcm9tICVzIHF1ZXVlIiAlIChuYW1lLCBxdWV1ZV9uYW1lKSkKKyAgICAgICAgICAgIG1z
ZyA9IHF1ZXVlLmdldChibG9jaywgdGltZW91dCkKKyAgICAgICAgICAgICNfbG9nLmRlYnVnKCIl
cyBnb3QgJyVzJyBtc2cgZnJvbSAlcyIgJSAobmFtZSwgbXNnLmhkciwgbXNnLnNyYykpCisgICAg
ICAgICAgICByZXR1cm4gbXNnCisgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAg
ICAgICNfbG9nLmRlYnVnKCIlcyBmb3VuZCAlcyBlbXB0eSIgJSAobmFtZSwgcXVldWVfbmFtZSkp
CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9wb2xsX21hbmFnZXJfcXVldWUo
c2VsZiwgbmFtZSwgdGltZW91dCk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAj
IE5vdGUgdGhhdCBibG9jaz1UcnVlLCB0aW1lb3V0PTAgaXMgZXF1aXZhbGVudCB0byBibG9jaz1G
YWxzZS4KKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2dldChuYW1lLCBzZWxmLl9tYW5hZ2VyX3F1
ZXVlLCBUcnVlLCB0aW1lb3V0KQorICAgICAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAg
ICAgICBicmVhaworCisgICAgICAgICAgICBpZiBtc2cuaGRyID09IF9NZXNzYWdlLlNUQVJURURf
VEVTVDoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfc3RhcnRlZF90ZXN0KG1zZykKKyAg
ICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5GSU5JU0hFRF9URVNUOgorICAgICAg
ICAgICAgICAgIHNlbGYuX2hhbmRsZV9maW5pc2hlZF90ZXN0KG1zZykKKyAgICAgICAgICAgIGVs
aWYgbXNnLmhkciA9PSBfTWVzc2FnZS5GSU5JU0hFRF9MSVNUOgorICAgICAgICAgICAgICAgIHNl
bGYuX2hhbmRsZV9maW5pc2hlZF9saXN0KG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9
PSBfTWVzc2FnZS5ET05FOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9kb25lKG1zZykK
KyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5FWENFUFRJT046CisgICAgICAg
ICAgICAgICAgc2VsZi5faGFuZGxlX2V4Y2VwdGlvbihtc2cpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHNlbGYuX2JhaWwoJ3VuZXhwZWN0ZWQgbWVzc2FnZSB0eXBlIG9uIG1h
bmFnZXIgcXVldWU6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cuaGRyKQor
CisgICAgZGVmIF9wb2xsX3dvcmtlcl9xdWV1ZShzZWxmLCB3b3JrZXIsIHBvbGxfbWFuYWdlcik6
CisgICAgICAgIHdoaWxlIG5vdCB3b3JrZXIuaXNfZG9uZSgpOgorICAgICAgICAgICAgbXNnID0g
c2VsZi5fZ2V0KHdvcmtlci5nZXROYW1lKCksIHNlbGYuX3dvcmtlcl9xdWV1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub3QgcG9sbF9tYW5hZ2VyLCBOb25lKQorICAgICAgICAgICAg
aWYgbm90IG1zZzoKKyAgICAgICAgICAgICAgICBpZiBub3QgcG9sbF9tYW5hZ2VyOgorICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9iYWlsKCclcyB1bmV4cGVjdGVkbHkgcmFuIG91dCBvZiBxdWV1
ZWQgbWVzc2FnZXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIuZ2V0
TmFtZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG1zZy5oZHIg
PT0gX01lc3NhZ2UuU1RPUDoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfc3RvcCh3b3Jr
ZXIpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuVEVTVF9MSVNUOgorICAg
ICAgICAgICAgICAgIChsaXN0X25hbWUsIHRlc3RfbGlzdCkgPSBtc2cuYm9keQorICAgICAgICAg
ICAgICAgIHNlbGYuX2hhbmRsZV90ZXN0X2xpc3Qod29ya2VyLCBsaXN0X25hbWUsIHRlc3RfbGlz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGxfbWFuYWdlcikK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fYmFpbCgnJXM6IHVuZXhw
ZWN0ZWQgbWVzc2FnZSB0eXBlIG9uIHdvcmtlciBxdWV1ZTogJXMnICUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh3b3JrZXIuZ2V0TmFtZSgpLCBtc2cuaGRyKSkKKworICAgIGRlZiBfYmFp
bChzZWxmLCBtc2cpOgorICAgICAgICBfbG9nLmVycm9yKG1zZykKKyAgICAgICAgYXNzZXJ0IEZh
bHNlLCBtc2cKKworICAgIGRlZiBfaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBtc2cpOgorICAg
ICAgICAodGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpID0gbXNnLmJvZHkKKyAgICAgICAgd29ya2Vy
ID0gc2VsZi5fd29ya2Vyc1ttc2cuc3JjXQorICAgICAgICB3b3JrZXIuY3VycmVudF90ZXN0X25h
bWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbmZvLmZpbGVuYW1l
KQorICAgICAgICB3b3JrZXIubmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyBoYW5nX3RpbWVv
dXQKKworICAgIGRlZiBfaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgbXNnKToKKyAgICAgICAg
KHJlc3VsdCwgZWxhcHNlZF90aW1lKSA9IG1zZy5ib2R5CisgICAgICAgIHdvcmtlciA9IHNlbGYu
X3dvcmtlcnNbbXNnLnNyY10KKyAgICAgICAgd29ya2VyLm5leHRfdGltZW91dCA9IE5vbmUKKyAg
ICAgICAgd29ya2VyLmN1cnJlbnRfdGVzdCA9IE5vbmUKKworICAgICAgICBpZiB3b3JrZXIud2Vk
Z2VkOgorICAgICAgICAgICAgIyBIbW0uIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4KKyAgICAgICAg
ICAgIF9sb2cuZXJyb3IoIiVzIHVud2VkZ2VkIiwgd29ya2VyLmdldE5hbWUoKSkKKworICAgICAg
ICBzZWxmLl9tYW5hZ2VyLmhhbmRsZV9maW5pc2hlZF90ZXN0KG1zZy5zcmMsIHJlc3VsdCwgZWxh
cHNlZF90aW1lKQorCisgICAgZGVmIF9oYW5kbGVfZmluaXNoZWRfbGlzdChzZWxmLCBtc2cpOgor
ICAgICAgICAobGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkgPSBtc2cuYm9keQor
ICAgICAgICBzZWxmLl9tYW5hZ2VyLmhhbmRsZV9maW5pc2hlZF9saXN0KG1zZy5zcmMsIGxpc3Rf
bmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX2hhbmRsZV9leGNlcHRpb24oc2VsZiwgbXNn
KToKKyAgICAgICAgZXhjZXB0aW9uX2luZm8gPSBtc2cuYm9keQorICAgICAgICBzZWxmLl9tYW5h
Z2VyLmhhbmRsZV9leGNlcHRpb24obXNnLnNyYywgZXhjZXB0aW9uX2luZm8pCisKKyAgICBkZWYg
X2hhbmRsZV9zdG9wKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHdvcmtlci5oYW5kbGVfc3RvcCgp
CisKKyAgICBkZWYgX2hhbmRsZV9kb25lKHNlbGYsIG1zZyk6CisgICAgICAgIHdvcmtlciA9IHNl
bGYuX3dvcmtlcnNbbXNnLnNyY10KKyAgICAgICAgd29ya2VyLmRvbmUgPSBUcnVlCisgICAgICAg
ICMgX2xvZy5kZWJ1ZygiJXMgaXMgZG9uZSIgJSB3b3JrZXIubmFtZSkKKyAgICAgICAgc2VsZi5f
bWFuYWdlci5oYW5kbGVfZG9uZShtc2cuc3JjKQorCisgICAgZGVmIF9oYW5kbGVfdGVzdF9saXN0
KHNlbGYsIHdvcmtlciwgbGlzdF9uYW1lLCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdlcik6CisgICAg
ICAgIHdvcmtlci5oYW5kbGVfdGVzdF9saXN0KGxpc3RfbmFtZSwgdGVzdF9saXN0LCBwb2xsX21h
bmFnZXIpCisKKyAgICBkZWYgX2xvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtlcik6CisgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBJbmxpbmVCcm9rZXIoV29y
a2VyTWVzc2FnZUJyb2tlcik6CisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251
bWJlciwgd29ya2VyX25hbWUpOgorICAgICAgICAjIEZJWE1FOiBVc2UgV29ya2VyVGh1bmsgaW5z
dGVhZCAuLi4KKyAgICAgICAgdGh1bmsgPSBfV29ya2VyVGhyZWFkKHNlbGYsIGR1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkLldvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtl
cl9udW1iZXIsIHdvcmtlcl9uYW1lKQorICAgICAgICAjIE5vdGU6IERvbid0IHN0YXJ0KCkgdGhl
IHRocmVhZCEgSWYgd2UgZGlkLCBpdCB3b3VsZCBhY3R1YWxseQorICAgICAgICAjIGNyZWF0ZSBh
bm90aGVyIHRocmVhZCBhbmQgc3RhcnQgZXhlY3V0aW5nIGl0LCBhbmQgd2UnZCBubyBsb25nZXIK
KyAgICAgICAgIyBiZSBzaW5nbGUtdGhyZWFkZWQuCisgICAgICAgIHJldHVybiB0aHVuaworCisg
ICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgbWFuYWdlcik6CisgICAgICAgICIiIkxvb3Ag
cHJvY2Vzc2luZyBtZXNzYWdlcyB1bnRpbCBkb25lLiIiIgorICAgICAgICBzZWxmLl9tYW5hZ2Vy
ID0gbWFuYWdlcgorICAgICAgICB3b3JrZXIgPSBzZWxmLl93b3JrZXJzWyd3b3JrZXItMCddCisg
ICAgICAgIHNlbGYuX3BvbGxfd29ya2VyX3F1ZXVlKHdvcmtlci50aHJlYWQsIHBvbGxfbWFuYWdl
cj1UcnVlKQorCisgICAgZGVmIF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB3b3JrZXIpOgorICAg
ICAgICAiIiJMb2cgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHdvcmtlcidzIHN0YXRlLiIi
IgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiSW5saW5lQnJva2VyLl9sb2dfd2VkZ2Vk
X3dvcmtlciBjYWxsZWQuIikKKworCitjbGFzcyBNdWx0aVRocmVhZGVkQnJva2VyKFdvcmtlck1l
c3NhZ2VCcm9rZXIpOgorICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIs
IHdvcmtlcl9uYW1lKToKKyAgICAgICAgdGh1bmsgPSBfV29ya2VyVGhyZWFkKHNlbGYsIGR1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkLldvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lKQorICAgICAgICB0aHVuay5zdGFydCgpCisgICAg
ICAgIHJldHVybiB0aHVuaworCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgb2JqKToK
KyAgICAgICAgaWYgb2JqLmdldE5hbWUoKSA9PSBzZWxmLk1BTkFHRVI6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fbG9vcF9tYW5hZ2VyKG9iaikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl9sb29wX3dvcmtlcihvYmopCisKKyAgICBkZWYgX2xvb3BfbWFuYWdlcihz
ZWxmLCBtYW5hZ2VyKToKKyAgICAgICAgc2VsZi5fbWFuYWdlciA9IG1hbmFnZXIKKyAgICAgICAg
c2VsZi5fcG9sbF9tYW5hZ2VyX3F1ZXVlKG1hbmFnZXIuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMDEp
CisgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9jaGVja19vbl93b3JrZXJzKCk6CisgICAgICAgICAg
ICBzZWxmLl9wb2xsX21hbmFnZXJfcXVldWUobWFuYWdlci5nZXROYW1lKCksIHRpbWVvdXQ9MC4w
MSkKKworICAgICAgICBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAg
ICAgYXNzZXJ0IHcud2VkZ2VkIG9yIG5vdCB3LnRocmVhZC5pc19hbGl2ZSgpCisKKyAgICBkZWYg
X2xvb3Bfd29ya2VyKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHdoaWxlIG5vdCB3b3JrZXIuaXNf
ZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fcG9sbF93b3JrZXJfcXVldWUod29ya2VyLCBwb2xs
X21hbmFnZXI9RmFsc2UpCisKKyAgICBkZWYgX2NoZWNrX29uX3dvcmtlcnMoc2VsZik6CisgICAg
ICAgICJSZXR1cm5zIHRydWUgaWZmIGFsbCB0aGUgd29ya2VycyBoYXZlIGVpdGhlciBjb21wbGV0
ZWQgb3Igd2VkZ2VkLiIKKyAgICAgICAgZG9uZSA9IFRydWUKKyAgICAgICAgdCA9IHRpbWUudGlt
ZSgpCisgICAgICAgIGZvciB3b3JrZXIgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAg
ICAgICAgIGlmIG5vdCB3b3JrZXIuZG9uZSBhbmQgbm90IHdvcmtlci53ZWRnZWQ6CisgICAgICAg
ICAgICAgICAgbmV4dF90aW1lb3V0ID0gd29ya2VyLm5leHRfdGltZW91dAorICAgICAgICAgICAg
ICAgIGlmIG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dDoKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fbG9nX3dlZGdlZF93b3JrZXIod29ya2VyKQorICAgICAgICAgICAgICAgICAg
ICB3b3JrZXIud2VkZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgICMgX2xvZy5kZWJ1ZygiJXMgaXMgbm90IGRvbmUiICUgd29ya2VyLm5hbWUpCisg
ICAgICAgICAgICAgICAgICAgIGRvbmUgPSBGYWxzZQorCisgICAgICAgIGlmIGRvbmUgYW5kIGFu
eShbdy53ZWRnZWQgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKV0pOgorICAgICAgICAg
ICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1JlbWFpbmluZyB3b3Jr
ZXJzIGFyZSB3ZWRnZWQsIGJhaWxpbmcgb3V0LicpCisgICAgICAgICAgICBfbG9nLmVycm9yKCcn
KQorICAgICAgICBlbGlmIGRvbmU6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdObyB3ZWRnZWQg
dGhyZWFkcycpCisKKyAgICAgICAgcmV0dXJuIGRvbmUKKworICAgIGRlZiBfbG9nX3dlZGdlZF93
b3JrZXIoc2VsZiwgd29ya2VyKToKKyAgICAgICAgbG9nX3dlZGdlZF93b3JrZXIod29ya2VyLm5h
bWUsIHdvcmtlci5pZCgpLCB3b3JrZXIuY3VycmVudF90ZXN0X25hbWUpCisKKworY2xhc3MgTXVs
dGlQcm9jZXNzQnJva2VyKE11bHRpVGhyZWFkZWRCcm9rZXIpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwb3J0LCBvcHRpb25zKToKKyAgICAgICAgV29ya2VyTWVzc2FnZUJyb2tlci5fX2luaXRf
XyhzZWxmLCBwb3J0LCBvcHRpb25zKQorICAgICAgICBzZWxmLl9tYW5hZ2VyX3F1ZXVlID0gbXVs
dGlwcm9jZXNzaW5nLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlID0gbXVsdGlw
cm9jZXNzaW5nLlF1ZXVlKCkKKworICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9u
dW1iZXIsIHdvcmtlcl9uYW1lKToKKyAgICAgICAgdGh1bmsgPSBfV29ya2VyUHJvY2VzcyhzZWxm
LCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUpCisgICAgICAgIHRodW5rLnN0YXJ0
KCkKKyAgICAgICAgcmV0dXJuIHRodW5rCisKKyAgICBkZWYgcG9zdF9leGNlcHRpb24oc2VsZiwg
c3JjLCBleGNlcHRpb25faW5mbyk6CisgICAgICAgICMgRklYTUU6IFdlIGNhbid0IHBpY2tsZSB0
cmFjZWJhY2sgb2JqZWN0cywgc28gbG9nIHRoZSB0cmFjZWJhY2sgaGVyZS4KKyAgICAgICAgbXBf
ZXhjX2luZm8gPSAoZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2VwdGlvbl9pbmZvWzFdLCBOb25lKQor
ICAgICAgICBNdWx0aVRocmVhZGVkQnJva2VyLnBvc3RfZXhjZXB0aW9uKHNlbGYsIHNyYywgbXBf
ZXhjX2luZm8pCisKKyAgICBkZWYgX2xvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtlcik6Cisg
ICAgICAgIGlkID0gd29ya2VyLnRocmVhZC5pZCgpCisgICAgICAgIF9sb2cuZXJyb3IoIiIpCisg
ICAgICAgIF9sb2cuZXJyb3IoIiVzIChwaWQgJWQpIGlzIHdlZGdlZCBvbiB0ZXN0ICVzIiAlCisg
ICAgICAgICAgICAgICAgICAgKHdvcmtlci50aHJlYWQuZ2V0TmFtZSgpLCBpZCwgd29ya2VyLmN1
cnJlbnRfdGVzdF9uYW1lKSkKKyAgICAgICAgX2xvZy5lcnJvcigiIikKKworCitjbGFzcyBfV29y
a2VyVGh1bmsob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJf
Y2xhc3MsIHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lKToKKyAgICAgICAgc2VsZi5fZXhjZXB0
aW9uX2luZm8gPSBOb25lCisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgorICAgICAgICBz
ZWxmLl9vcHRpb25zID0gYnJva2VyLl9vcHRpb25zCisgICAgICAgIHNlbGYuX3BvcnQgPSBicm9r
ZXIuX3BvcnQKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5f
ZG9uZSA9IEZhbHNlCisgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKKyAgICAg
ICAgc2VsZi5faWQgPSAwCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVt
YmVyCisgICAgICAgIHNlbGYuX3dvcmtlcl9uYW1lID0gd29ya2VyX25hbWUKKyAgICAgICAgc2Vs
Zi5fd29ya2VyID0gd29ya2VyX2NsYXNzKHNlbGYuX3BvcnQsIHNlbGYsIHNlbGYuX29wdGlvbnMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfbnVtYmVyLCB3b3Jr
ZXJfbmFtZSkKKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgIyB1c2VkIGR1cmluZyBsb2df
d2VkZ2VkX3dvcmtlcgorICAgICAgICByZXR1cm4gc2VsZi5faWQKKworICAgIGRlZiBnZXROYW1l
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fd29ya2VyX25hbWUKKworICAgIGRlZiBjYW5j
ZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKKworICAgIGRlZiBpc19k
b25lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9uZSBvciBzZWxmLl9jYW5jZWxsZWQK
KworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRw
X2xvY2s6CisgICAgICAgICAgICBzZWxmLl9yZWxlYXNlX2xvY2soKQorICAgICAgICBzZWxmLl93
b3JrZXIuaGFuZGxlX3N0b3AoKQorICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorCisgICAgZGVm
IGhhbmRsZV90ZXN0X2xpc3Qoc2VsZiwgbGlzdF9uYW1lLCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdl
cik6CisgICAgICAgIGlmIGxpc3RfbmFtZSA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKKyAgICAg
ICAgICAgIHNlbGYuX2FjcXVpcmVfbG9jaygpCisgICAgICAgIGVsaWYgc2VsZi5faGF2ZV9odHRw
X2xvY2s6CisgICAgICAgICAgICBzZWxmLl9yZWxlYXNlX2xvY2soKQorCisgICAgICAgIHN0YXJ0
X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBudW1fdGVzdHMgPSAwCisgICAgICAgIGZvciB0
ZXN0IGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlci5ydW5fdGVzdCh0ZXN0
KQorICAgICAgICAgICAgbnVtX3Rlc3RzICs9IDEKKworICAgICAgICAgICAgIyBGSVhNRTogTmVl
ZCB0byBnZXQgcmlkIG9mIHRoaXMuCisgICAgICAgICAgICBpZiBwb2xsX21hbmFnZXI6CisgICAg
ICAgICAgICAgICAgc2VsZi5fYnJva2VyLl9wb2xsX21hbmFnZXJfcXVldWUoc2VsZi5nZXROYW1l
KCksIHRpbWVvdXQ9MC4wKQorCisgICAgICAgICAgICBpZiBzZWxmLl9jYW5jZWxsZWQ6CisgICAg
ICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkgLSBz
dGFydF90aW1lCisKKyAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAg
ICBzZWxmLl9yZWxlYXNlX2xvY2soKQorCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X2Zpbmlz
aGVkX2xpc3Qoc2VsZi5nZXROYW1lKCksIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYg
c3RhcnQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydGVkX3Rlc3Qoc2VsZiwg
dGVzdF9pbmZvLCBodW5nX3RocmVhZF90aW1lb3V0KToKKyAgICAgICAgc2VsZi5fYnJva2VyLnBv
c3Rfc3RhcnRlZF90ZXN0KHNlbGYuZ2V0TmFtZSgpLCB0ZXN0X2luZm8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBodW5nX3RocmVhZF90aW1lb3V0KQorCisgICAgZGVm
IGZpbmlzaGVkX3Rlc3Qoc2VsZiwgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxm
Ll9icm9rZXIucG9zdF9maW5pc2hlZF90ZXN0KHNlbGYuZ2V0TmFtZSgpLCByZXN1bHQsIGVsYXBz
ZWRfdGltZSkKKworICAgIGRlZiBfYWNxdWlyZV9sb2NrKHNlbGYpOgorICAgICAgICBfbG9nLmRl
YnVnKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4uLicpCisgICAgICAgIHNlbGYuX3BvcnQuYWNxdWly
ZV9odHRwX2xvY2soKQorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAu
Li4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKKyAgICAgICAgX2xv
Zy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9w
b3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9j
ayA9IFRydWUKKworICAgIGRlZiBfcmVsZWFzZV9sb2NrKHNlbGYpOgorICAgICAgICAiIiJTdG9w
IHRoZSBzZXJ2ZXJzIGFuZCByZWxlYXNlIGh0dHAgbG9jay4iIiIKKyAgICAgICAgaWYgc2VsZi5f
aGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBIVFRQIHNl
cnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKKyAg
ICAgICAgICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKKyAg
ICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgICAg
IHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQorICAgICAgICAgICAgc2VsZi5faGF2ZV9o
dHRwX2xvY2sgPSBGYWxzZQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5faWQg
PSBzZWxmLl9nZXRfaWQoKQorICAgICAgICBleGNlcHRpb25fbXNnID0gIiIKKyAgICAgICAgbmFt
ZSA9IHNlbGYuZ2V0TmFtZSgpCisgICAgICAgIF9sb2cuZGVidWcoJyVzIHN0YXJ0aW5nJyAlIG5h
bWUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdl
X2xvb3Aoc2VsZikKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAg
ICAgZXhjZXB0aW9uX21zZyA9ICIsIGludGVycnVwdGVkIgorICAgICAgICBleGNlcHQ6CisgICAg
ICAgICAgICBleGNlcHRpb25fbXNnID0gIiwgZXhjZXB0aW9uIHJhaXNlZCIKKyAgICAgICAgZmlu
YWxseToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIGRvbmUlcyIgJSAobmFtZSwgZXhjZXB0
aW9uX21zZykpCisgICAgICAgICAgICBpZiBleGNlcHRpb25fbXNnOgorICAgICAgICAgICAgICAg
IHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICBz
ZWxmLl9icm9rZXIucG9zdF9leGNlcHRpb24obmFtZSwgc2VsZi5fZXhjZXB0aW9uX2luZm8pCisg
ICAgICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9kb25lKG5hbWUpCisKKyAgICAgICAgYXNzZXJ0
IGV4Y2VwdGlvbl9tc2cgb3Igc2VsZi5fZG9uZSBvciBzZWxmLl9jYW5jZWxsZWQsICJleGl0aW5n
IHVuZXhwZWN0ZWRseSIKKworCitjbGFzcyBfV29ya2VyVGhyZWFkKF9Xb3JrZXJUaHVuaywgdGhy
ZWFkaW5nLlRocmVhZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX2Ns
YXNzLCB3b3JrZXJfbnVtYmVyLCB3b3JrZXJfbmFtZSk6CisgICAgICAgIHRocmVhZGluZy5UaHJl
YWQuX19pbml0X18oc2VsZikKKyAgICAgICAgX1dvcmtlclRodW5rLl9faW5pdF9fKHNlbGYsIGJy
b2tlciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd29ya2VyX25hbWUpCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLl9pZAorCisgICAgZGVmIF9nZXRfaWQoc2VsZik6CisgICAgICAgIHJldHVybiB0aHJl
YWQuZ2V0X2lkZW50KCkKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2Nh
bmNlbGxlZCA9IFRydWUKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgdGhyZWFkaW5n
LlRocmVhZC5zdGFydChzZWxmKQorCisKK2NsYXNzIF9Xb3JrZXJQcm9jZXNzKF9Xb3JrZXJUaHVu
aywgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9r
ZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUpOgorICAgICAgICBt
dWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQorICAgICAgICBfV29ya2VyVGh1
bmsuX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfbmFtZSkKKworICAgIGRlZiBpZChz
ZWxmKToKKyAgICAgICAgIyBGSVhNRTogZmlndXJlIG91dCBpZiB0aGlzIG5lZWRzIHRvIGJlIGF3
YXJlIG9mIHBhcmVudC9jaGlsZAorICAgICAgICByZXR1cm4gc2VsZi5waWQKKworICAgIGRlZiBf
Z2V0X2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MuZ2V0cGlkKCkKKworICAgIGRlZiBjYW5j
ZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKKyAgICAgICAgc2VsZi50
ZXJtaW5hdGUoKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBtdWx0aXByb2Nlc3Np
bmcuUHJvY2Vzcy5zdGFydChzZWxmKQorCisKK2RlZiBsb2dfd2VkZ2VkX3dvcmtlcihuYW1lLCBp
ZCwgdGVzdF9uYW1lKToKICAgICAiIiJMb2cgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHRo
cmVhZCBzdGF0ZS4iIiIKICAgICBzdGFjayA9IF9maW5kX3RocmVhZF9zdGFjayhpZCkKICAgICBh
c3NlcnQoc3RhY2sgaXMgbm90IE5vbmUpCiAgICAgX2xvZy5lcnJvcigiIikKLSAgICBfbG9nLmVy
cm9yKCJUaHJlYWQgJWQgaXMgd2VkZ2VkIiAlIGlkKQorICAgIF9sb2cuZXJyb3IoIiVzICh0aWQg
JWQpIGlzIHdlZGdlZCBvbiB0ZXN0ICVzIiAlIChuYW1lLCBpZCwgdGVzdF9uYW1lKSkKICAgICBf
bG9nX3N0YWNrKHN0YWNrKQogICAgIF9sb2cuZXJyb3IoIiIpCiAKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3Nh
Z2VfYnJva2VyX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKaW5kZXgg
ZDcwODc0NTViM2NjNTBlODJjN2MzMThjYjM4N2EyZGI5OGYyMTAxNy4uMTNmNDlmZDllZTljZTIy
NDc1ZTBjMjlmN2E2Y2VlNjVlZmNkYmIwYiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5p
dHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKQEAgLTMwLDI1ICszMCwz
NSBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IFF1ZXVlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGhy
ZWFkCitpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZy
b20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBhcnJheV9zdHJlYW0KIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQorZnJvbSB3ZWJraXRweS50b29sIGltcG9y
dCBtb2NrdG9vbAogCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtp
dF90ZXN0cwogCi1pbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIGltcG9ydCBtZXNzYWdl
X2Jyb2tlcgogCiAKLWNsYXNzIFRlc3RUaHJlYWQoZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0
Y2hhYmxlVGhyZWFkKToKK2NsYXNzIFRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0ZWRfcXVldWUsIHN0b3BwaW5nX3F1ZXVlKToKLSAgICAg
ICAgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV2F0Y2hhYmxlVGhyZWFkLl9faW5pdF9fKHNlbGYp
CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5f
dGhyZWFkX2lkID0gTm9uZQogICAgICAgICBzZWxmLl9zdGFydGVkX3F1ZXVlID0gc3RhcnRlZF9x
dWV1ZQogICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1ZSA9IHN0b3BwaW5nX3F1ZXVlCiAgICAg
ICAgIHNlbGYuX3RpbWVvdXQgPSBGYWxzZQogICAgICAgICBzZWxmLl90aW1lb3V0X3F1ZXVlID0g
UXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IE5vbmUKKyAgICAg
ICAgc2VsZi5kb25lID0gRmFsc2UKKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3RocmVhZF9pZAorCisgICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVy
biAnd29ya2VyLTAnCiAKICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICBzZWxmLl9jb3ZlcmVk
X3J1bigpCkBAIC03MCwxMiArODAsNiBAQCBjbGFzcyBUZXN0VGhyZWFkKGR1bXBfcmVuZGVyX3Ry
ZWVfdGhyZWFkLldhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAg
IHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkKIAotICAgIGRlZiBuZXh0X3Rp
bWVvdXQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3RpbWVvdXQ6Ci0gICAgICAgICAgICBzZWxm
Ll90aW1lb3V0X3F1ZXVlLnB1dCgnZG9uZScpCi0gICAgICAgICAgICByZXR1cm4gdGltZS50aW1l
KCkgLSAxMAotICAgICAgICByZXR1cm4gdGltZS50aW1lKCkKLQogCiBjbGFzcyBUZXN0SGFuZGxl
cihsb2dnaW5nLkhhbmRsZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhc3RyZWFtKToKQEAg
LTg2LDQ3ICs5MCw2IEBAIGNsYXNzIFRlc3RIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiAgICAg
ICAgIHNlbGYuX3N0cmVhbS53cml0ZShzZWxmLmZvcm1hdChyZWNvcmQpKQogCiAKLWNsYXNzIFdh
aXRGb3JUaHJlYWRzVG9GaW5pc2hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBjbGFzcyBN
b2NrVGVzdFJ1bm5lcihydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIpOgotICAgICAgICBkZWYg
X19pbml0X18oc2VsZik6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgZGVmIF9fZGVsX18o
c2VsZik6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgZGVmIHVwZGF0ZV9zdW1tYXJ5KHNl
bGYsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiBydW5fb25l
X3RocmVhZChzZWxmLCBtc2cpOgotICAgICAgICBydW5uZXIgPSBzZWxmLk1vY2tUZXN0UnVubmVy
KCkKLSAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIHN0b3Bw
aW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBjaGlsZF90aHJlYWQgPSBUZXN0VGhy
ZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKLSAgICAgICAgY2hpbGRfdGhyZWFk
LnN0YXJ0KCkKLSAgICAgICAgc3RhcnRlZF9tc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQotICAg
ICAgICBzdG9wcGluZ19xdWV1ZS5wdXQobXNnKQotICAgICAgICB0aHJlYWRzID0gW2NoaWxkX3Ro
cmVhZF0KLSAgICAgICAgcmV0dXJuIHJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2go
dGhyZWFkcywgTm9uZSkKLQotICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgotICAgICAgICBpbnRl
cnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2UoaW50ZXJydXB0ZWQpCi0KLSAgICBkZWYgdGVzdF9pbnRlcnJ1cHQoc2VsZik6Ci0gICAgICAg
IGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnS2V5Ym9hcmRJbnRlcnJ1cHQnKQot
ICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50ZXJydXB0ZWQpCi0KLSAgICBkZWYgdGVzdF90aW1l
b3V0KHNlbGYpOgotICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCi0g
ICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1
bl9vbmVfdGhyZWFkKCdUaW1lb3V0JykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1
cHRlZCkKLSAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQotCi0gICAgZGVmIHRlc3RfZXhjZXB0
aW9uKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJ1
bl9vbmVfdGhyZWFkLCAnRXhjZXB0aW9uJykKLQotCiBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICBkZWYgdGVzdF9maW5kX3RocmVhZF9zdGFja19mb3VuZChzZWxmKToKICAgICAg
ICAgaWQsIHN0YWNrID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKClbMF0KQEAgLTEzNyw3
ICsxMDAsNyBAQCBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgZm91bmRf
c3RhY2sgPSBtZXNzYWdlX2Jyb2tlci5fZmluZF90aHJlYWRfc3RhY2soMCkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChmb3VuZF9zdGFjaywgTm9uZSkKIAotICAgIGRlZiB0ZXN0X2xvZ193ZWRn
ZWRfdGhyZWFkKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRfd29ya2VyKHNlbGYpOgog
ICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG9jLmNh
cHR1cmVfb3V0cHV0KCkKICAgICAgICAgbG9nZ2VyID0gbWVzc2FnZV9icm9rZXIuX2xvZwpAQCAt
MTUxLDcgKzExNCw5IEBAIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBj
aGlsZF90aHJlYWQuc3RhcnQoKQogICAgICAgICBtc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQog
Ci0gICAgICAgIG1lc3NhZ2VfYnJva2VyLmxvZ193ZWRnZWRfdGhyZWFkKGNoaWxkX3RocmVhZC5p
ZCgpKQorICAgICAgICBtZXNzYWdlX2Jyb2tlci5sb2dfd2VkZ2VkX3dvcmtlcihjaGlsZF90aHJl
YWQuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZF90aHJlYWQuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3Rlc3RfZmlsZScpCiAgICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgnJykKICAgICAgICAg
Y2hpbGRfdGhyZWFkLmpvaW4odGltZW91dD0xLjApCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5IGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMu
cHkKaW5kZXggZDFjMzgzYzEzZWMyZjEzYWY1ZmIxZjE1NDA1NzljNGM4ODlmZGQ2My4uN2Q3MDRj
M2E4OWFmNTRhZDBkYWYwNzQ4YjRkODg5YTYyMmFjZTRjZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bV9tYWMucHkKQEAgLTYyLDE1ICs2Miw2IEBAIGNsYXNzIENocm9taXVtTWFjUG9ydChjaHJvbWl1
bS5DaHJvbWl1bVBvcnQpOgogICAgICAgICAgICAgICAgICAgICAgICAnTWFjQnVpbGRJbnN0cnVj
dGlvbnMnKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgZGVmYXVsdF9jaGlsZF9w
cm9jZXNzZXMoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IHdlIG5lZWQgdG8gcnVuIHNpbmdsZS10
aHJlYWRlZCBmb3Igbm93LiBTZWUKLSAgICAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzg1NTMuIFVuZm9ydHVuYXRlbHkgdGhpcwotICAgICAgICAjIHJvdXRp
bmUgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSB0aGUgbG9nZ2VyIGlzIGNvbmZpZ3VyZWQsIHNvIGlm
IHdlCi0gICAgICAgICMgdHJ5IHRvIF9sb2cud2FybmluZygpLCBpdCBnZXRzIHRocm93biBhd2F5
LgotICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkRlZmF1bHRp
bmcgdG8gb25lIGNoaWxkIC0gc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zODU1M1xuIikKLSAgICAgICAgcmV0dXJuIDEKLQogICAgIGRlZiBkcml2ZXJfbmFtZShz
ZWxmKToKICAgICAgICAgIiIibmFtZSBmb3IgdGhpcyBwb3J0J3MgZXF1aXZhbGVudCBvZiBEdW1w
UmVuZGVyVHJlZS4iIiIKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd1c2VfZHJ0Jyk6CmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L21hYy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
bWFjLnB5CmluZGV4IDY5NmUzMzk4ZWE0YjI4YWM3NjIyNTkwN2RjMzYyZmZjM2ZiODZmOWUuLjcy
ZjkxZDgzODIxNWFmNGJjNDRmMWRjMWYwNjU1ZGFkYzdkMzM2ZmYgMTAwNjQ0Ci0tLSBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CisrKyBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CkBAIC00
NywxNSArNDcsNiBAQCBjbGFzcyBNYWNQb3J0KFdlYktpdFBvcnQpOgogICAgICAgICBrd2FyZ3Mu
c2V0ZGVmYXVsdCgncG9ydF9uYW1lJywgJ21hYycgKyBzZWxmLnZlcnNpb24oKSkKICAgICAgICAg
V2ViS2l0UG9ydC5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKIAotICAgIGRlZiBkZWZhdWx0X2No
aWxkX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTogbmV3LXJ1bi13ZWJraXQtdGVz
dHMgaXMgdW5zdGFibGUgb24gTWFjIHJ1bm5pbmcgbW9yZSB0aGFuCi0gICAgICAgICMgZm91ciB0
aHJlYWRzIGluIHBhcmFsbGVsLgotICAgICAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzY2MjIKLSAgICAgICAgY2hpbGRfcHJvY2Vzc2VzID0gV2ViS2l0
UG9ydC5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKQotICAgICAgICBpZiBjaGlsZF9wcm9j
ZXNzZXMgPiA0OgotICAgICAgICAgICAgcmV0dXJuIDQKLSAgICAgICAgcmV0dXJuIGNoaWxkX3By
b2Nlc3NlcwotCiAgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgogICAgICAgICBw
b3J0X25hbWVzID0gW10KICAgICAgICAgaWYgc2VsZi5fbmFtZSA9PSAnbWFjLXRpZ2VyJzoKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDFjZWFlZTkyMzY3YzM4MmQ0N2M3MWZiOWNlZTk1
ZTQ3YWJjZTNmZGQuLjc2ZDViZTZjOWM1ZDEyNDU0ZjM5OTdlMTQ1NGU2MDQ2M2M5NjhhNzYgMTAw
NzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNzUsNiArNzUsNyBAQCBmcm9tIGxheW91dF9w
YWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHNfdXBsb2FkZXIKIAogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtIGltcG9ydCB1c2VyCiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkgaW1wb3J0IHNp
bXBsZWpzb24KK2Zyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgZ3JhbW1hcgogCiBpbXBvcnQgcG9y
dAogCkBAIC0yMzksMTcgKzI0MCwxOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICMgaW4gRHVt
cFJlbmRlclRyZWUuCiAgICAgREVGQVVMVF9URVNUX1RJTUVPVVRfTVMgPSA2ICogMTAwMAogCi0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyLCBtZXNzYWdlX2Jyb2tlcik6CiAg
ICAgICAgICIiIkluaXRpYWxpemUgdGVzdCBydW5uZXIgZGF0YSBzdHJ1Y3R1cmVzLgogCiAgICAg
ICAgIEFyZ3M6CiAgICAgICAgICAgcG9ydDogYW4gb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNw
ZWNpZmljCiAgICAgICAgICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBv
cHRpb25zCiAgICAgICAgICAgcHJpbnRlcjogYSBQcmludGVyIG9iamVjdCB0byByZWNvcmQgdXBk
YXRlcyB0by4KKyAgICAgICAgICBtZXNzYWdlX2Jyb2tlcjogb2JqZWN0IHVzZWQgdG8gY29tbXVu
aWNhdGUgd2l0aCB3b3JrZXJzLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fcG9ydCA9IHBv
cnQKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5fcHJpbnRl
ciA9IHByaW50ZXIKKyAgICAgICAgc2VsZi5fbWVzc2FnZV9icm9rZXIgPSBtZXNzYWdlX2Jyb2tl
cgogCiAgICAgICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRvIGluc3RhbGwgcHlPcGVu
U1NMIG9uIGJ1aWxkYm90cy4KICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3NlcnZl
ciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCkBAIC0yNTgsOSArMjYxLDExIEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICMgYSBzZXQgb2YgdGVzdCBmaWxlcywgYW5kIHRoZSBz
YW1lIHRlc3RzIGFzIGEgbGlzdAogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0KCkKICAg
ICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gTm9uZQotICAgICAgICBzZWxmLl9yZXN1bHRf
cXVldWUgPSBRdWV1ZS5RdWV1ZSgpCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gRmFsc2UKIAor
ICAgIGRlZiBnZXROYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gbWVzc2FnZV9icm9rZXIuV29y
a2VyTWVzc2FnZUJyb2tlci5NQU5BR0VSCisKICAgICBkZWYgY29sbGVjdF90ZXN0cyhzZWxmLCBh
cmdzLCBsYXN0X3VuZXhwZWN0ZWRfcmVzdWx0cyk6CiAgICAgICAgICIiIkZpbmQgYWxsIHRoZSBm
aWxlcyB0byB0ZXN0LgogCkBAIC01NjUsMzQgKzU3MCw2IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBk
ZWYgX2luc3RhbnRpYXRlX2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkcyhzZWxmLCB0ZXN0X2ZpbGVz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9z
dW1tYXJ5KToKLSAgICAgICAgIiIiSW5zdGFudGl0YXRlcyBhbmQgc3RhcnRzIHRoZSBUZXN0U2hl
bGxUaHJlYWQocykuCi0KLSAgICAgICAgUmV0dXJuOgotICAgICAgICAgIFRoZSBsaXN0IG9mIHRo
cmVhZHMuCi0gICAgICAgICIiIgotICAgICAgICBudW1fd29ya2VycyA9IHNlbGYuX251bV93b3Jr
ZXJzKCkKLSAgICAgICAgdGVzdF9saXN0cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKHRlc3RfZmlsZXMs
Ci0gICAgICAgICAgICBudW1fd29ya2VycyA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25zLmV4cGVy
aW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKLSAgICAgICAgZmlsZW5hbWVfcXVldWUgPSBRdWV1ZS5R
dWV1ZSgpCi0gICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdHM6Ci0gICAgICAgICAgICBmaWxl
bmFtZV9xdWV1ZS5wdXQoaXRlbSkKLQotICAgICAgICAjIEluc3RhbnRpYXRlIFRlc3RTaGVsbFRo
cmVhZHMgYW5kIHN0YXJ0IHRoZW0uCi0gICAgICAgIHRocmVhZHMgPSBbXQotICAgICAgICBmb3Ig
d29ya2VyX251bWJlciBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgotICAgICAgICAgICAgdGhyZWFk
ID0gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFNoZWxsVGhyZWFkKHNlbGYuX3BvcnQsCi0g
ICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucywgd29ya2VyX251bWJlciwKLSAgICAgICAgICAg
ICAgICBmaWxlbmFtZV9xdWV1ZSwgc2VsZi5fcmVzdWx0X3F1ZXVlKQotICAgICAgICAgICAgaWYg
bnVtX3dvcmtlcnMgPiAxOgotICAgICAgICAgICAgICAgIHRocmVhZC5zdGFydCgpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHRocmVhZC5ydW5faW5fbWFpbl90aHJlYWQoc2Vs
ZiwgcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0aHJlYWQpCi0K
LSAgICAgICAgcmV0dXJuIHRocmVhZHMKLQogICAgIGRlZiBfbnVtX3dvcmtlcnMoc2VsZik6CiAg
ICAgICAgIHJldHVybiBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpCiAKQEAgLTYx
MCw3MiArNTg3LDUyIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgIGluIHRoZSBm
b3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQogICAg
ICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdpdGgg
dGhlIHJlc3VsdHMKICAgICAgICAgIiIiCi0gICAgICAgIHBsdXJhbCA9ICIiCi0gICAgICAgIGlm
IHNlbGYuX251bV93b3JrZXJzKCkgPiAxOgotICAgICAgICAgICAgcGx1cmFsID0gInMiCi0gICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyVzIC4uLicgJQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgp
LCBwbHVyYWwpKQotICAgICAgICB0aHJlYWRzID0gc2VsZi5faW5zdGFudGlhdGVfZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWRzKGZpbGVfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAg
c2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKKyAgICAg
ICAgc2VsZi5fY3VycmVudF9maWxlX2xpc3QgPSBmaWxlX2xpc3QKKyAgICAgICAgc2VsZi5fY3Vy
cmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisKKyAgICAgICAgbnVtX3dvcmtl
cnMgPSBzZWxmLl9udW1fd29ya2VycygpCisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzID0gW10K
KyAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMgPSB7fQorICAgICAgICBzZWxmLl93b3JrZXJfc3Rh
dHMgPSB7fQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAg
ICAgbmFtZSA9ICd3b3JrZXItJWQnICUgaQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRz
W25hbWVdID0ge30KKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0c1tuYW1lXVsnbmFtZSdd
ID0gbmFtZQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW25hbWVdWydudW1fdGVzdHMn
XSA9IDAKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0c1tuYW1lXVsndG90YWxfdGltZSdd
ID0gMAorCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTaGFyZGluZyB0ZXN0
cyAuLi4nKQorICAgICAgICB0ZXN0X2xpc3RzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0
LAorICAgICAgICAgICAgbnVtX3dvcmtlcnMgPiAxIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5leHBl
cmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCisKKyAgICAgICAgbWVzc2FnZV9icm9rZXIgPSBzZWxm
Ll9tZXNzYWdlX2Jyb2tlcgorICAgICAgICBmb3IgdGVzdF9saXN0IGluIHRlc3RfbGlzdHM6Cisg
ICAgICAgICAgICBtZXNzYWdlX2Jyb2tlci5wb3N0X3Rlc3RfbGlzdCh0ZXN0X2xpc3QpCiAKLSAg
ICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBzZWxmLl93YWl0X2Zvcl90aHJlYWRzX3RvX2Zp
bmlzaCh0aHJlYWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAodGhyZWFkX3Rp
bWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpID0gXAotICAgICAg
ICAgICAgc2VsZi5fY29sbGVjdF90aW1pbmdfaW5mbyh0aHJlYWRzKQorICAgICAgICAjIFRlbGwg
dGhlIHdvcmtlcnMgdG8gc2h1dCBkb3duIGFmdGVyIHRoZXkncmUgZG9uZSBydW5uaW5nIGFsbCB0
aGUKKyAgICAgICAgIyB0ZXN0cy4KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG51bV93b3JrZXJz
KToKKyAgICAgICAgICAgIG1lc3NhZ2VfYnJva2VyLnBvc3Rfc3RvcCgpCiAKLSAgICAgICAgcmV0
dXJuIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywK
LSAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nICVzIC4uLicgJQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBncmFtbWFyLnBsdXJhbGl6ZSgnd29ya2VyJywgbnVtX3dvcmtl
cnMpKQorICAgICAgICBtZXNzYWdlX2Jyb2tlci5zdGFydF93b3JrZXJzKCkKIAotICAgIGRlZiBf
d2FpdF9mb3JfdGhyZWFkc190b19maW5pc2goc2VsZiwgdGhyZWFkcywgcmVzdWx0X3N1bW1hcnkp
OgorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGluZyAu
Li4iKQogICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCiAgICAgICAgIHRyeToK
LSAgICAgICAgICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgdGhyZWFkcyB3YWl0aW5nIGZvciB0
aGVtIHRvIGZpbmlzaC4KLSAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQot
ICAgICAgICAgICAgd2hpbGUgc29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAgICAgICAgICAgICAg
c29tZV90aHJlYWRfaXNfYWxpdmUgPSBGYWxzZQotICAgICAgICAgICAgICAgIHQgPSB0aW1lLnRp
bWUoKQotICAgICAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9uX2luZm8gPSB0aHJlYWQuZXhjZXB0aW9uX2luZm8oKQotICAgICAg
ICAgICAgICAgICAgICBpZiBleGNlcHRpb25faW5mbyBpcyBub3QgTm9uZToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2VwdGlvbiBoZXJlIHRvIG1h
a2UgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICMgY2xlYXIgdGhhdCB0ZXN0aW5nIHdhcyBh
Ym9ydGVkLiBPdGhlcndpc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSB0ZXN0cyB0
aGF0IGRpZCBub3QgcnVuIHdvdWxkIGJlIGFzc3VtZWQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICMgdG8gaGF2ZSBwYXNzZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRp
b25faW5mb1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlvbl9pbmZvWzJdCi0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgdGhyZWFkLmlzQWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAg
bmV4dF90aW1lb3V0ID0gdGhyZWFkLm5leHRfdGltZW91dCgpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0KToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlX2Jyb2tlci5sb2dfd2VkZ2VkX3RocmVhZCh0aHJlYWQu
aWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQuY2xlYXJfbmV4dF90aW1l
b3V0KCkKLQotICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX3N1bW1hcnkocmVzdWx0X3N1bW1h
cnkpCi0KLSAgICAgICAgICAgICAgICBpZiBzb21lX3RocmVhZF9pc19hbGl2ZToKLSAgICAgICAg
ICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQotCisgICAgICAgICAgICBtZXNzYWdlX2Jyb2tl
ci5ydW5fbWVzc2FnZV9sb29wKHNlbGYpCiAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVw
dDoKKyAgICAgICAgICAgIF9sb2cuaW5mbygiSW50ZXJydXB0ZWQsIGV4aXRpbmciKQorICAgICAg
ICAgICAgbWVzc2FnZV9icm9rZXIuY2FuY2VsX3dvcmtlcnMoKQogICAgICAgICAgICAga2V5Ym9h
cmRfaW50ZXJydXB0ZWQgPSBUcnVlCi0gICAgICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6
Ci0gICAgICAgICAgICAgICAgdGhyZWFkLmNhbmNlbCgpCi0KLSAgICAgICAgcmV0dXJuIGtleWJv
YXJkX2ludGVycnVwdGVkCi0KLSAgICBkZWYgX2NvbGxlY3RfdGltaW5nX2luZm8oc2VsZiwgdGhy
ZWFkcyk6Ci0gICAgICAgIHRlc3RfdGltaW5ncyA9IHt9Ci0gICAgICAgIGluZGl2aWR1YWxfdGVz
dF90aW1pbmdzID0gW10KLSAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbXQotCi0gICAgICAgIGZv
ciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLmFwcGVuZCh7
J25hbWUnOiB0aHJlYWQuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnbnVtX3Rlc3RzJzogdGhyZWFkLmdldF9udW1fdGVzdHMoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3RvdGFsX3RpbWUnOiB0aHJlYWQuZ2V0X3RvdGFsX3RpbWUo
KX0pCi0gICAgICAgICAgICB0ZXN0X3RpbWluZ3MudXBkYXRlKHRocmVhZC5nZXRfdGVzdF9ncm91
cF90aW1pbmdfc3RhdHMoKSkKLSAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLmV4
dGVuZCh0aHJlYWQuZ2V0X3Rlc3RfcmVzdWx0cygpKQorICAgICAgICBleGNlcHQ6CisgICAgICAg
ICAgICAjIFVuZXhwZWN0ZWQgZXhjZXB0aW9uOyBkb24ndCB0cnkgdG8gY2xlYW4gdXAgd29ya2Vy
cy4KKyAgICAgICAgICAgIF9sb2cuaW5mbygiRXhjZXB0aW9uIHJhaXNlZCwgZXhpdGluZyIpCisg
ICAgICAgICAgICByYWlzZQogCi0gICAgICAgIHJldHVybiAodGhyZWFkX3RpbWluZ3MsIHRlc3Rf
dGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCisgICAgICAgIHJldHVybiAoa2V5Ym9h
cmRfaW50ZXJydXB0ZWQsIHNlbGYuX3dvcmtlcl9zdGF0cy52YWx1ZXMoKSwKKyAgICAgICAgICAg
ICAgICBzZWxmLl9ncm91cF9zdGF0cywgc2VsZi5fYWxsX3Jlc3VsdHMpCiAKICAgICBkZWYgbmVl
ZHNfaHR0cChzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5l
ciBuZWVkcyBhbiBIVFRQIHNlcnZlci4iIiIKQEAgLTgwNywyMyArNzY0LDM3IEBAIGNsYXNzIFRl
c3RSdW5uZXI6CiAgICAgICAgIF9sb2cuZGVidWcoInN0b3BwaW5nIGhlbHBlciIpCiAgICAgICAg
IHNlbGYuX3BvcnQuc3RvcF9oZWxwZXIoKQogCi0gICAgZGVmIHVwZGF0ZV9zdW1tYXJ5KHNlbGYs
IHJlc3VsdF9zdW1tYXJ5KToKKyAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzcmMp
OgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAgICAg
ICAgcGFzcworCisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNyYywgcmVzdWx0
LCBlbGFwc2VkX3RpbWUpOgogICAgICAgICAiIiJVcGRhdGUgdGhlIHN1bW1hcnkgYW5kIHByaW50
IHJlc3VsdHMgd2l0aCBhbnkgY29tcGxldGVkIHRlc3RzLiIiIgotICAgICAgICB3aGlsZSBUcnVl
OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfcmVzdWx0
cy5UZXN0UmVzdWx0LmxvYWRzKHNlbGYuX3Jlc3VsdF9xdWV1ZS5nZXRfbm93YWl0KCkpCi0gICAg
ICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAg
ICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0
ZWRfcmVzdWx0KAotICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSwgcmVzdWx0LnR5cGUs
IHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMpCi0gICAgICAgICAgICByZXN1bHRfc3VtbWFyeS5h
ZGQocmVzdWx0LCBleHBlY3RlZCkKLSAgICAgICAgICAgIGV4cF9zdHIgPSBzZWxmLl9leHBlY3Rh
dGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoCi0gICAgICAgICAgICAgICAgcmVzdWx0LmZp
bGVuYW1lKQotICAgICAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3Rh
dGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUpCi0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQsIGV4cF9zdHIsIGdvdF9zdHIpCi0gICAg
ICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Byb2dyZXNzKHJlc3VsdF9zdW1tYXJ5LCBzZWxm
Ll9yZXRyeWluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fdGVzdF9maWxlc19saXN0KQorICAgICAgICBzZWxmLl91cGRhdGVfd29ya2VyX3N0YXRzKHNy
YywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBl
Y3RhdGlvbnMubWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoCisgICAgICAgICAgICByZXN1bHQu
ZmlsZW5hbWUsIHJlc3VsdC50eXBlLCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQorICAgICAg
ICBleHBfc3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAor
ICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lKQorICAgICAgICBnb3Rfc3RyID0gc2VsZi5fZXhw
ZWN0YXRpb25zLmV4cGVjdGF0aW9uX3RvX3N0cmluZyhyZXN1bHQudHlwZSkKKyAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBn
b3Rfc3RyKQorCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkuYWRkKHJlc3Vs
dCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfcHJvZ3Jlc3Moc2VsZi5f
Y3VycmVudF9yZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9yZXRyeWluZywgc2VsZi5fdGVzdF9maWxlc19saXN0KQorCisgICAgZGVmIGhh
bmRsZV9maW5pc2hlZF9saXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBz
ZWRfdGltZSk6CisgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzW2xpc3RfbmFtZV0gPSAobnVtX3Rl
c3RzLCBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMs
IGV4Y2VwdGlvbl9pbmZvKToKKyAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2Vw
dGlvbl9pbmZvWzFdLCBleGNlcHRpb25faW5mb1syXQorCisgICAgZGVmIF91cGRhdGVfd29ya2Vy
X3N0YXRzKHNlbGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl93
b3JrZXJfc3RhdHNbc3JjXVsndG90YWxfdGltZSddICs9IGVsYXBzZWRfdGltZQorICAgICAgICBz
ZWxmLl93b3JrZXJfc3RhdHNbc3JjXVsnbnVtX3Rlc3RzJ10gKz0gMQorICAgICAgICBzZWxmLl9h
bGxfcmVzdWx0cy5hcHBlbmQocmVzdWx0KQogCiAgICAgZGVmIF9jbG9iYmVyX29sZF9yZXN1bHRz
KHNlbGYpOgogICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBk
aXJlY3RvcmllcyBzaW5jZSB0aGUgb3RoZXIKQEAgLTEzMjYsMTEgKzEyOTcsMTMgQEAgZGVmIHJ1
bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAogICAgICAg
ICBwcmludGVyLmNsZWFudXAoKQogICAgICAgICByZXR1cm4gMAogCisgICAgYnJva2VyID0gbWVz
c2FnZV9icm9rZXIuZ2V0KHBvcnQsIG9wdGlvbnMpCisKICAgICAjIFdlIHdyYXAgYW55IHBhcnRz
IG9mIHRoZSBydW4gdGhhdCBhcmUgc2xvdyBvciBsaWtlbHkgdG8gcmFpc2UgZXhjZXB0aW9ucwog
ICAgICMgaW4gYSB0cnkvZmluYWxseSB0byBlbnN1cmUgdGhhdCB3ZSBjbGVhbiB1cCB0aGUgbG9n
Z2luZyBjb25maWd1cmF0aW9uLgogICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSAtMQogICAg
IHRyeToKLSAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnQsIG9wdGlvbnMsIHBy
aW50ZXIpCisgICAgICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihwb3J0LCBvcHRpb25zLCBw
cmludGVyLCBicm9rZXIpCiAgICAgICAgIHRlc3RfcnVubmVyLl9wcmludF9jb25maWcoKQogCiAg
ICAgICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJDb2xsZWN0aW5nIHRlc3RzIC4uLiIpCkBAIC0x
MzU5LDYgKzEzMzIsNyBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0
cHV0PXN5cy5zdGRlcnIsCiAgICAgICAgICAgICBfbG9nLmRlYnVnKCJUZXN0aW5nIGNvbXBsZXRl
ZCwgRXhpdCBzdGF0dXM6ICVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgIG51bV91bmV4cGVj
dGVkX3Jlc3VsdHMpCiAgICAgZmluYWxseToKKyAgICAgICAgYnJva2VyLmNsZWFudXAoKQogICAg
ICAgICBwcmludGVyLmNsZWFudXAoKQogCiAgICAgcmV0dXJuIG51bV91bmV4cGVjdGVkX3Jlc3Vs
dHMKQEAgLTE1OTUsOSArMTU2OSw4IEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAg
ICAgICAgICBoZWxwPSJOdW1iZXIgb2YgRHVtcFJlbmRlclRyZWVzIHRvIHJ1biBpbiBwYXJhbGxl
bC4iKSwKICAgICAgICAgIyBGSVhNRTogRGlzcGxheSBkZWZhdWx0IG51bWJlciBvZiBjaGlsZCBw
cm9jZXNzZXMgdGhhdCB3aWxsIHJ1bi4KICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0t
d29ya2VyLW1vZGVsIiwgYWN0aW9uPSJzdG9yZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ9InRocmVhZHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSJjb250cm9scyB3b3JrZXIgbW9kZWwuIFZhbGlkIHZhbHVlcyBhcmUgIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiJ2lubGluZScgYW5kICd0aHJlYWRzJyAoZGVmYXVsdCkuIiksCisg
ICAgICAgICAgICBkZWZhdWx0PSJwcm9jZXNzZXMiLCBoZWxwPSJjb250cm9scyB3b3JrZXIgbW9k
ZWwuIFZhbGlkIHZhbHVlcyBhcmUgIgorICAgICAgICAgICAgIidpbmxpbmUnLCAndGhyZWFkcycs
IGFuZCAncHJvY2Vzc2VzJyAoZGVmYXVsdCkuIiksCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCItLWV4cGVyaW1lbnRhbC1mdWxseS1wYXJhbGxlbCIsCiAgICAgICAgICAgICBhY3Rpb249
InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgaGVscD0icnVuIGFsbCB0
ZXN0cyBpbiBwYXJhbGxlbCIpLApAQCAtMTY1MywxMyArMTYyNiw3IEBAIGRlZiBwYXJzZV9hcmdz
KGFyZ3M9Tm9uZSk6CiAgICAgICAgICAgICAgICAgICAgb2xkX3J1bl93ZWJraXRfdGVzdHNfY29t
cGF0KQogICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIob3B0aW9uX2xp
c3Q9b3B0aW9uX2xpc3QpCiAKLSAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJz
ZV9hcmdzKGFyZ3MpCi0KLSAgICBpZiBvcHRpb25zLndvcmtlcl9tb2RlbCBub3QgaW4gKCdpbmxp
bmUnLCAndGhyZWFkcycpOgotICAgICAgICBvcHRpb25fcGFyc2VyLmVycm9yKCJ1bnN1cHBvcnRl
ZCB2YWx1ZSBmb3IgLS13b3JrZXItbW9kZWw6ICVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9ucy53b3JrZXJfbW9kZWwpCi0KLSAgICByZXR1cm4gb3B0aW9ucywgYXJncwor
ICAgIHJldHVybiBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKIAogCiBkZWYgbWFpbigp
OgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggMDlhMGM3
MTkzM2EwNGM4NDA1NzUzOGNlODg5Y2I5MGEzN2U3MzE4NC4uMzM0ZTY2OTQ4NzFmMjI5YWNiMzYw
OTIyNWQ1ZTJmMTFiZGU4ZjVjZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3Vu
aXR0ZXN0LnB5CkBAIC0yMjYsNyArMjI2LDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgIGRlZiB0ZXN0X2tleWJvYXJkX2ludGVycnVwdChzZWxmKToKICAgICAgICAg
IyBOb3RlIHRoYXQgdGhpcyBhbHNvIHRlc3RzIHJ1bm5pbmcgYSB0ZXN0IG1hcmtlZCBhcyBTS0lQ
IGlmCiAgICAgICAgICMgeW91IHNwZWNpZnkgaXQgZXhwbGljaXRseS4KLSAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIHBhc3NpbmdfcnVuLAorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgbG9nZ2luZ19ydW4sCiAgICAgICAgICAg
ICBbJ2ZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJkLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1
ZSkKIAogICAgIGRlZiB0ZXN0X2xhc3RfcmVzdWx0cyhzZWxmKToKQEAgLTI3Myw4ICsyNzMsMTYg
QEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfcnVu
X2ZvcmNlKHNlbGYpOgogICAgICAgICAjIFRoaXMgcmFpc2VzIGFuIGV4Y2VwdGlvbiBiZWNhdXNl
IHdlIHJ1bgotICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sLCB3aGlj
aCBpcyBub3JtYWxseSBTS0lQcGVkLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy
cm9yLCBsb2dnaW5nX3J1biwgWyctLWZvcmNlJ10pCisgICAgICAgICMgZmFpbHVyZXMvZXhwZWN0
ZWQvZXhjZXB0aW9uLmh0bWwgYW5kCisgICAgICAgICMgZmFpbHVyZXMvZXhwZWN0ZWQva2V5Ym9h
cmQsIHdoaWNoIGFyZSBub3JtYWxseSBTS0lQcGVkLgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBsb2dnaW5nX3J1bihbJy0tZm9yY2UnXSkKKyAgICAgICAgICAgIHRlc3RfcGFzc2VkID0gRmFs
c2UKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICB0ZXN0X3Bhc3NlZCA9
IFRydWUKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgdGVz
dF9wYXNzZWQgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X3Bhc3NlZCkKIAog
ICAgIGRlZiB0ZXN0X3J1bl9wYXJ0KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCB3ZSBhY3R1
YWxseSBzZWxlY3QgdGhlIHJpZ2h0IHBhcnQKQEAgLTM3OCwxMSArMzg2LDEwIEBAIGNsYXNzIE1h
aW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Np
bmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAndGhyZWFkcyddKSkKIAogICAgIGRlZiB0ZXN0X3dv
cmtlcl9tb2RlbF9fcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhT
eXN0ZW1FeGl0LCBsb2dnaW5nX3J1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWyctLXdv
cmtlci1tb2RlbCcsICdwcm9jZXNzZXMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3Np
bmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAncHJvY2Vzc2VzJ10pKQogCiAgICAgZGVmIHRlc3Rf
d29ya2VyX21vZGVsX191bmtub3duKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhT
eXN0ZW1FeGl0LCBsb2dnaW5nX3J1biwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVF
cnJvciwgbG9nZ2luZ19ydW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS13b3JrZXIt
bW9kZWwnLCAndW5rbm93biddKQogCiBNYWluVGVzdCA9IHNraXBfaWYoTWFpblRlc3QsIHN5cy5w
bGF0Zm9ybSA9PSAnY3lnd2luJyBhbmQgY29tcGFyZV92ZXJzaW9uKHN5cywgJzIuNicpWzBdIDwg
MCwgJ25ldy1ydW4td2Via2l0LXRlc3RzIHRlc3RzIGhhbmcgb24gQ3lnd2luIFB5dGhvbiAyLjUu
MicpCkBAIC00NjYsNyArNDczLDggQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICBtb2NrX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSA9IGxhbWJk
YSBuYW1lOiBuYW1lCiAgICAgICAgIG1vY2tfcG9ydC5maWxlbmFtZV90b191cmkgPSBsYW1iZGEg
bmFtZTogbmFtZQogCi0gICAgICAgIHJ1bm5lciA9IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5l
cihwb3J0PW1vY2tfcG9ydCwgb3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpKQorICAgICAg
ICBydW5uZXIgPSBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIocG9ydD1tb2NrX3BvcnQsIG9w
dGlvbnM9TW9jaygpLAorICAgICAgICAgICAgcHJpbnRlcj1Nb2NrKCksIG1lc3NhZ2VfYnJva2Vy
PU1vY2soKSkKICAgICAgICAgZXhwZWN0ZWRfaHRtbCA9IHUiIiI8aHRtbD4KICAgPGhlYWQ+CiAg
ICAgPHRpdGxlPkxheW91dCBUZXN0IFJlc3VsdHMgKHRpbWUpPC90aXRsZT4KQEAgLTQ4Myw3ICs0
OTEsOCBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVm
IHRlc3Rfc2hhcmRfdGVzdHMoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IF9zaGFyZF90ZXN0
cyBpbiBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIgcmVhbGx5CiAgICAgICAgICMgcHV0IHRo
ZSBodHRwIHRlc3RzIGZpcnN0IGluIHRoZSBxdWV1ZS4KLSAgICAgICAgcnVubmVyID0gVGVzdFJ1
bm5lcldyYXBwZXIocG9ydD1Nb2NrKCksIG9wdGlvbnM9TW9jaygpLCBwcmludGVyPU1vY2soKSkK
KyAgICAgICAgcnVubmVyID0gVGVzdFJ1bm5lcldyYXBwZXIocG9ydD1Nb2NrKCksIG9wdGlvbnM9
TW9jaygpLCBwcmludGVyPU1vY2soKSwKKyAgICAgICAgICAgIG1lc3NhZ2VfYnJva2VyPU1vY2so
KSkKIAogICAgICAgICB0ZXN0X2xpc3QgPSBbCiAgICAgICAgICAgIkxheW91dFRlc3RzL3dlYnNv
Y2tldC90ZXN0cy91bmljb2RlLmh0bSIsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74816</attachid>
            <date>2010-11-24 17:13:53 -0800</date>
            <delta_ts>2010-12-01 20:02:51 -0800</delta_ts>
            <desc>sync to r72708</desc>
            <filename>bug-48820-20101124171351.patch</filename>
            <type>text/plain</type>
            <size>55508</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxYWMyNGQwMjcwMDM1MGY2OGI2ZTNmZjk1MTJkMTQ5YjFiOWEzNjQ4Li4xMzYxZTg3
ZjNlMjA3ZjQzMzUxYjkyMzZmZjIyMDYyZThmYTAzM2VlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGFsbCBvZiB0aGUg
TlJXVCBtdWx0aXRocmVhZGluZyBpc3N1ZXMgYnkgbW92aW5nIHRvCisgICAgICAgIG11bHRpcHJv
Y2Vzcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
X3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL3ByaW50aW5nLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdl
X2Jyb2tlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weToKKwogMjAxMC0xMS0y
NCAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBUb255IENoYW5nLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQppbmRleCBmZGI4ZGE2Y2M4MGI3M2VlN2RmYjdk
NjFkOWRiYmNiYmFiYmNiNDc4Li4wMTIyMzkzNTdiYjU1NTkwYTc0NTY4YzMxNjg5OTczNzYyYjU0
MjU4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3Jl
bmRlcl90cmVlX3RocmVhZC5weQpAQCAtNDIsMTAgKzQyLDggQEAgaW1wb3J0IGNvZGVjcwogaW1w
b3J0IGNvcHkKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCBRdWV1ZQogaW1wb3J0
IHNpZ25hbAogaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZAogaW1wb3J0IHRocmVhZGluZwogaW1w
b3J0IHRpbWUKIApAQCAtODcsNiArODUsOCBAQCBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9w
dGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKICAgICAiIiIKICAgICBm
YWlsdXJlcyA9IFtdCiAKKyAgICB0ZXN0X25hbWUgPSBwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5h
bWUodGVzdF9pbnB1dC5maWxlbmFtZSkKKwogICAgIGlmIHRlc3Rfb3V0cHV0LmNyYXNoOgogICAg
ICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKSkKICAgICBp
ZiB0ZXN0X291dHB1dC50aW1lb3V0OgpAQCAtMTI4LDIxICsxMjgsNiBAQCBkZWYgX3Byb2Nlc3Nf
b3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2Rp
ZmZzLCB0aW1lX2Zvcl9kaWZmcykKIAogCi1kZWYgX3BhZF90aW1lb3V0KHRpbWVvdXQpOgotICAg
ICIiIlJldHVybnMgYSBzYWZlIG11bHRpcGxlIG9mIHRoZSBwZXItdGVzdCB0aW1lb3V0IHZhbHVl
IHRvIHVzZQotICAgIHRvIGRldGVjdCBodW5nIHRlc3QgdGhyZWFkcy4KLQotICAgICIiIgotICAg
ICMgV2hlbiB3ZSdyZSBydW5uaW5nIG9uZSB0ZXN0IHBlciBEdW1wUmVuZGVyVHJlZSBwcm9jZXNz
LCB3ZSBjYW4KLSAgICAjIGVuZm9yY2UgYSBoYXJkIHRpbWVvdXQuICBUaGUgRHVtcFJlbmRlclRy
ZWUgd2F0Y2hkb2cgdXNlcyAyLjV4Ci0gICAgIyB0aGUgdGltZW91dDsgd2Ugd2FudCB0byBiZSBs
YXJnZXIgdGhhbiB0aGF0LgotICAgIHJldHVybiB0aW1lb3V0ICogMwotCi0KLWRlZiBfbWlsbGlz
ZWNvbmRzX3RvX3NlY29uZHMobXNlY3MpOgotICAgIHJldHVybiBmbG9hdChtc2VjcykgLyAxMDAw
LjAKLQotCiBkZWYgX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bShvcHRpb25zKToKICAg
ICByZXR1cm4gb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgbm90IChvcHRpb25zLm5ld19iYXNlbGlu
ZSBvciBvcHRpb25zLnJlc2V0X3Jlc3VsdHMpCiAKQEAgLTIwNiw4NiArMTkxLDQ0IEBAIGNsYXNz
IFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgIHJldHVybiBzZWxm
Ll90ZXN0X3Jlc3VsdAogCiAKLWNsYXNzIFdhdGNoYWJsZVRocmVhZCh0aHJlYWRpbmcuVGhyZWFk
KToKLSAgICAiIiJUaGlzIGNsYXNzIGFic3RyYWN0cyBhbiBpbnRlcmZhY2UgdXNlZCBieQotICAg
IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2gg
Zm9yIHRocmVhZAotICAgIG1hbmFnZW1lbnQuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgot
ICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX2Nh
bmNlbGVkID0gRmFsc2UKLSAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25lCi0gICAg
ICAgIHNlbGYuX25leHRfdGltZW91dCA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0g
Tm9uZQotCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiU2V0IGEgZmxhZyB0ZWxs
aW5nIHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCi0gICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1
ZQotCi0gICAgZGVmIGNsZWFyX25leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgIiIiTWFyayBh
IGZsYWcgdGVsbGluZyB0aGlzIHRocmVhZCB0byBzdG9wIHNldHRpbmcgdGltZW91dHMuIiIiCi0g
ICAgICAgIHNlbGYuX3RpbWVvdXQgPSAwCi0KLSAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6
Ci0gICAgICAgICIiIklmIHJ1bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9u
LCByZXR1cm4gaXQgaGVyZQotICAgICAgICAoKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIHR1cGxl
KS4KLSAgICAgICAgUmV0dXJucyBOb25lIGlmIHJ1bigpIHRlcm1pbmF0ZWQgbm9ybWFsbHkuIE1l
YW50IHRvIGJlIGNhbGxlZCBhZnRlcgotICAgICAgICBqb2luaW5nIHRoaXMgdGhyZWFkLiIiIgot
ICAgICAgICByZXR1cm4gc2VsZi5fZXhjZXB0aW9uX2luZm8KLQotICAgIGRlZiBpZChzZWxmKToK
LSAgICAgICAgIiIiUmV0dXJuIGEgdGhyZWFkIGlkZW50aWZpZXIuIiIiCi0gICAgICAgIHJldHVy
biBzZWxmLl90aHJlYWRfaWQKLQotICAgIGRlZiBuZXh0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAg
ICIiIlJldHVybiB0aGUgdGltZSB0aGUgdGVzdCBpcyBzdXBwb3NlZCB0byBmaW5pc2ggYnkuIiIi
Ci0gICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVvdXQKLQotCi1jbGFzcyBUZXN0U2hlbGxU
aHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0
aW9ucywgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUsCi0gICAgICAgICAgICAgICAgIGZpbGVu
YW1lX2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1ZSk6CitjbGFzcyBXb3JrZXIob2JqZWN0KToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgY29udGFpbmVyLCBvcHRpb25zLCB3b3JrZXJfbnVt
YmVyLAorICAgICAgICAgICAgICAgICB3b3JrZXJfbmFtZSk6CiAgICAgICAgICIiIkluaXRpYWxp
emUgYWxsIHRoZSBsb2NhbCBzdGF0ZSBmb3IgdGhpcyBEdW1wUmVuZGVyVHJlZSB0aHJlYWQuCiAK
ICAgICAgICAgQXJnczoKICAgICAgICAgICBwb3J0OiBpbnRlcmZhY2UgdG8gcG9ydC1zcGVjaWZp
YyBob29rcworICAgICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyIG9iamVjdCB0byByZWNlaXZl
IHRlc3RzIGZyb20KICAgICAgICAgICBvcHRpb25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmd1
bWVudCBmcm9tIG9wdHBhcnNlCiAgICAgICAgICAgd29ya2VyX251bWJlcjogaWRlbnRpZmllciBm
b3IgYSBwYXJ0aWN1bGFyIHdvcmtlciB0aHJlYWQuCiAgICAgICAgICAgd29ya2VyX25hbWU6IGZv
ciBsb2dnaW5nLgotICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWU6IEEgdGhyZWFkIHNhZmUg
UXVldWUgY2xhc3MgdGhhdCBjb250YWlucyBsaXN0cwotICAgICAgICAgICAgICBvZiB0dXBsZXMg
b2YgKGZpbGVuYW1lLCB1cmkpIHBhaXJzLgotICAgICAgICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJl
YWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29udGFpbgotICAgICAgICAgICAgICBzZXJp
YWxpemVkIFRlc3RSZXN1bHQgb2JqZWN0cy4KICAgICAgICAgIiIiCi0gICAgICAgIFdhdGNoYWJs
ZVRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCisg
ICAgICAgIHNlbGYuX2NvbnRhaW5lciA9IGNvbnRhaW5lcgogICAgICAgICBzZWxmLl9wb3J0ID0g
cG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxmLl93b3Jr
ZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgogICAgICAgICBzZWxmLl9uYW1lID0gd29ya2VyX25h
bWUKLSAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZSA9IGZpbGVuYW1lX2xpc3RfcXVl
dWUKLSAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gcmVzdWx0X3F1ZXVlCi0gICAgICAgIHNl
bGYuX2ZpbGVuYW1lX2xpc3QgPSBbXQotICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCi0gICAg
ICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzID0ge30KLSAgICAgICAgc2VsZi5fdGVz
dF9yZXN1bHRzID0gW10KLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0gMAotICAgICAgICBzZWxm
Ll9zdGFydF90aW1lID0gMAotICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSAwCi0gICAgICAgIHNl
bGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKLSAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRf
YmVnaW4gPSAwCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IDAKKyAgICAgICAg
c2VsZi5fYmF0Y2hfc2l6ZSA9IHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZQorICAgICAgICBzZWxm
Ll9iYXRjaF9jb3VudCA9IDAKIAorICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0ID0gW10KICAg
ICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IFtdCiAgICAgICAgIGZvciBjbHMgaW4gc2VsZi5fZ2V0
X3Rlc3RfdHlwZV9jbGFzc2VzKCk6CiAgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLmFwcGVu
ZChjbHMoc2VsZi5fcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKICAgICAgICAgc2VsZi5fdGVzdF9h
cmdzID0gc2VsZi5fZ2V0X3Rlc3RfYXJncyh3b3JrZXJfbnVtYmVyKQorICAgICAgICBzZWxmLl9k
cml2ZXIgPSBOb25lCisgICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IG9zLnBhdGguam9pbihz
ZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInRlc3RzX3J1bi50eHQiKQorICAgICAgICBzZWxmLl90ZXN0c19y
dW5fZmlsZSA9IGNvZGVjcy5vcGVuKHRlc3RzX3J1bl9maWxlbmFtZSwgImEiLCAidXRmLTgiKQog
Ci0gICAgICAgICMgQ3VycmVudCBncm91cCBvZiB0ZXN0cyB3ZSdyZSBydW5uaW5nLgotICAgICAg
ICBzZWxmLl9jdXJyZW50X2dyb3VwID0gTm9uZQotICAgICAgICAjIE51bWJlciBvZiB0ZXN0cyBp
biBzZWxmLl9jdXJyZW50X2dyb3VwLgotICAgICAgICBzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVu
dF9ncm91cCA9IE5vbmUKLSAgICAgICAgIyBUaW1lIGF0IHdoaWNoIHdlIHN0YXJ0ZWQgcnVubmlu
ZyB0ZXN0cyBmcm9tIHNlbGYuX2N1cnJlbnRfZ3JvdXAuCi0gICAgICAgIHNlbGYuX2N1cnJlbnRf
Z3JvdXBfc3RhcnRfdGltZSA9IE5vbmUKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZik6CisgICAg
ICAgICIiIlN0b3AgcmVjZWl2ZWQgLSBubyBtb3JlIHRlc3RzIHRvIHJ1bi4iIiIKKyAgICAgICAg
c2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAgICAgaWYgc2VsZi5fdGVzdHNfcnVu
X2ZpbGU6CisgICAgICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZS5jbG9zZSgpCisgICAgICAg
ICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9IE5vbmUKIAogICAgIGRlZiBfZ2V0X3Rlc3RfYXJn
cyhzZWxmLCB3b3JrZXJfbnVtYmVyKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgdHVwbGUgb2Yg
YXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9yIER1bXBSZW5kZXJUcmVlLiIiIgpAQCAtMzAxLDE2
MiArMjQ0LDU5IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAg
ICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoaW1hZ2VfZGlmZi5JbWFnZURpZmYpCiAgICAgICAgIHJl
dHVybiBjbGFzc2VzCiAKLSAgICBkZWYgZ2V0X3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzKHNlbGYp
OgotICAgICAgICAiIiJSZXR1cm5zIGEgZGljdGlvbmFyeSBtYXBwaW5nIHRlc3QgZ3JvdXAgdG8g
YSB0dXBsZSBvZgotICAgICAgICAobnVtYmVyIG9mIHRlc3RzIGluIHRoYXQgZ3JvdXAsIHRpbWUg
dG8gcnVuIHRoZSB0ZXN0cykiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfZ3JvdXBfdGlt
aW5nX3N0YXRzCi0KLSAgICBkZWYgZ2V0X3Rlc3RfcmVzdWx0cyhzZWxmKToKLSAgICAgICAgIiIi
UmV0dXJuIHRoZSBsaXN0IG9mIGFsbCB0ZXN0cyBydW4gb24gdGhpcyB0aHJlYWQuCi0KLSAgICAg
ICAgVGhpcyBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBwZXItdGhyZWFkIHN0YXRpc3RpY3MuCi0KLSAg
ICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3Jlc3VsdHMKLQotICAgIGRlZiBn
ZXRfdG90YWxfdGltZShzZWxmKToKLSAgICAgICAgcmV0dXJuIG1heChzZWxmLl9zdG9wX3RpbWUg
LSBzZWxmLl9zdGFydF90aW1lIC0KLSAgICAgICAgICAgICAgICAgICBzZWxmLl9odHRwX2xvY2tf
d2FpdF90aW1lKCksIDAuMCkKLQotICAgIGRlZiBnZXRfbnVtX3Rlc3RzKHNlbGYpOgotICAgICAg
ICByZXR1cm4gc2VsZi5fbnVtX3Rlc3RzCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICAi
IiJEZWxlZ2F0ZSBtYWluIHdvcmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFuZCB3YXRjaCBmb3IgdW5j
YXVnaHQKLSAgICAgICAgZXhjZXB0aW9ucy4iIiIKLSAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4o
KQotCi0gICAgZGVmIF9jb3ZlcmVkX3J1bihzZWxmKToKLSAgICAgICAgIyBGSVhNRTogdGhpcyBp
cyBhIHNlcGFyYXRlIHJvdXRpbmUgdG8gd29yayBhcm91bmQgYSBidWcKLSAgICAgICAgIyBpbiBj
b3ZlcmFnZTogc2VlIGh0dHA6Ly9iaXRidWNrZXQub3JnL25lZC9jb3ZlcmFnZXB5L2lzc3VlLzg1
LgotICAgICAgICBzZWxmLl90aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKLSAgICAgICAg
c2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuX251bV90ZXN0cyA9
IDAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJXMgc3RhcnRpbmcnICUg
KHNlbGYuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgIHNlbGYuX3J1bih0ZXN0X3J1bm5lcj1Ob25l
LCByZXN1bHRfc3VtbWFyeT1Ob25lKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJXMgZG9uZSAo
JWQgdGVzdHMpJyAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5nZXRfbnVtX3Rlc3RzKCkpKQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0g
ICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygpCi0gICAgICAg
ICAgICBfbG9nLmRlYnVnKCIlcyBpbnRlcnJ1cHRlZCIgJSBzZWxmLmdldE5hbWUoKSkKLSAgICAg
ICAgZXhjZXB0OgotICAgICAgICAgICAgIyBTYXZlIHRoZSBleGNlcHRpb24gZm9yIG91ciBjYWxs
ZXIgdG8gc2VlLgotICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMuZXhjX2lu
Zm8oKQotICAgICAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJyVzIGR5aW5nLCBleGNlcHRpb24gcmFpc2VkJyAlIHNlbGYuZ2V0TmFt
ZSgpKQotCi0gICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCi0KLSAgICBkZWYg
cnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSk6Ci0g
ICAgICAgICIiIlRoaXMgaG9vayBhbGxvd3MgdXMgdG8gcnVuIHRoZSB0ZXN0cyBmcm9tIHRoZSBt
YWluIHRocmVhZCBpZgotICAgICAgICAtLW51bS10ZXN0LXNoZWxscz09MSwgaW5zdGVhZCBvZiBo
YXZpbmcgdG8gYWx3YXlzIHJ1biB0d28gb3IgbW9yZQotICAgICAgICB0aHJlYWRzLiBUaGlzIGFs
bG93cyB1cyB0byBkZWJ1ZyB0aGUgdGVzdCBoYXJuZXNzIHdpdGhvdXQgaGF2aW5nIHRvCi0gICAg
ICAgIGRvIG11bHRpLXRocmVhZGVkIGRlYnVnZ2luZy4iIiIKLSAgICAgICAgc2VsZi5fcnVuKHRl
c3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSkKLQotICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAg
ICAgICIiIkNsZWFuIHVwIGh0dHAgbG9jayBhbmQgc2V0IGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhy
ZWFkIHRvIHF1aXQuIiIiCi0gICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQot
ICAgICAgICBXYXRjaGFibGVUaHJlYWQuY2FuY2VsKHNlbGYpCi0KLSAgICBkZWYgbmV4dF90aW1l
b3V0KHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHRpbWUgdGhlIHRlc3QgaXMgc3VwcG9z
ZWQgdG8gZmluaXNoIGJ5LiIiIgotICAgICAgICBpZiBzZWxmLl9uZXh0X3RpbWVvdXQ6Ci0gICAg
ICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0ICsgc2VsZi5faHR0cF9sb2NrX3dhaXRf
dGltZSgpCi0gICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVvdXQKLQotICAgIGRlZiBfaHR0
cF9sb2NrX3dhaXRfdGltZShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIHdoYXQg
aHR0cCBsb2NraW5nIHRha2VzLiIiIgotICAgICAgICBpZiBzZWxmLl9odHRwX2xvY2tfd2FpdF9i
ZWdpbiA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgaWYgc2VsZi5faHR0cF9s
b2NrX3dhaXRfZW5kID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gdGltZS50aW1lKCkgLSBzZWxm
Ll9odHRwX2xvY2tfd2FpdF9iZWdpbgotICAgICAgICByZXR1cm4gc2VsZi5faHR0cF9sb2NrX3dh
aXRfZW5kIC0gc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4KLQotICAgIGRlZiBfcnVuKHNlbGYs
IHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgICIiIk1haW4gd29yayBlbnRy
eSBwb2ludCBvZiB0aGUgdGhyZWFkLiBCYXNpY2FsbHkgd2UgcHVsbCB1cmxzIGZyb20gdGhlCi0g
ICAgICAgIGZpbGVuYW1lIHF1ZXVlIGFuZCBydW4gdGhlIHRlc3RzIHVudGlsIHdlIHJ1biBvdXQg
b2YgdXJscy4KLQotICAgICAgICBJZiB0ZXN0X3J1bm5lciBpcyBub3QgTm9uZSwgdGhlbiB3ZSBj
YWxsIHRlc3RfcnVubmVyLlVwZGF0ZVN1bW1hcnkoKQotICAgICAgICB3aXRoIHRoZSByZXN1bHRz
IG9mIGVhY2ggdGVzdC4iIiIKLSAgICAgICAgYmF0Y2hfc2l6ZSA9IHNlbGYuX29wdGlvbnMuYmF0
Y2hfc2l6ZQotICAgICAgICBiYXRjaF9jb3VudCA9IDAKLQotICAgICAgICAjIEFwcGVuZCB0ZXN0
cyB3ZSdyZSBydW5uaW5nIHRvIHRoZSBleGlzdGluZyB0ZXN0c19ydW4udHh0IGZpbGUuCi0gICAg
ICAgICMgVGhpcyBpcyBjcmVhdGVkIGluIHJ1bl93ZWJraXRfdGVzdHMucHk6X1ByZXBhcmVMaXN0
c0FuZFByaW50T3V0cHV0LgotICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBvcy5wYXRoLmpv
aW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0c19ydW4udHh0IikKLSAgICAgICAgdGVzdHNfcnVu
X2ZpbGUgPSBjb2RlY3Mub3Blbih0ZXN0c19ydW5fZmlsZW5hbWUsICJhIiwgInV0Zi04IikKLQot
ICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgaWYgc2VsZi5fY2FuY2VsZWQ6Ci0gICAg
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGVzdGluZyBjYW5jZWxsZWQnKQotICAgICAgICAgICAg
ICAgIHRlc3RzX3J1bl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICByZXR1cm4KLQotICAg
ICAgICAgICAgaWYgbGVuKHNlbGYuX2ZpbGVuYW1lX2xpc3QpIGlzIDA6Ci0gICAgICAgICAgICAg
ICAgaWYgc2VsZi5fY3VycmVudF9ncm91cCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fdGVzdF9ncm91cF90aW1pbmdfc3RhdHNbc2VsZi5fY3VycmVudF9ncm91cF0gPSBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3Jv
dXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGltZS50aW1lKCkgLSBzZWxmLl9jdXJyZW50
X2dyb3VwX3N0YXJ0X3RpbWUpCi0KLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAg
ICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXAsIHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBcCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlLmdldF9ub3dhaXQo
KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0gICAgICAgICAgICAgICAgICAgIHNl
bGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCi0gICAgICAgICAgICAgICAgICAgIHRlc3RzX3J1
bl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAg
ICAgICBpZiBzZWxmLl9jdXJyZW50X2dyb3VwID09ICJ0ZXN0c190b19odHRwX2xvY2siOgotICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0gICAgICAg
ICAgICAgICAgZWxpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKLSAgICAgICAgICAgICAgICAgICAg
c2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0KLSAgICAgICAgICAgICAgICBzZWxmLl9u
dW1fdGVzdHNfaW5fY3VycmVudF9ncm91cCA9IGxlbihzZWxmLl9maWxlbmFtZV9saXN0KQotICAg
ICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXBfc3RhcnRfdGltZSA9IHRpbWUudGltZSgp
Ci0KLSAgICAgICAgICAgIHRlc3RfaW5wdXQgPSBzZWxmLl9maWxlbmFtZV9saXN0LnBvcCgpCi0K
LSAgICAgICAgICAgICMgV2UgaGF2ZSBhIHVybCwgcnVuIHRlc3RzLgotICAgICAgICAgICAgYmF0
Y2hfY291bnQgKz0gMQotICAgICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzICs9IDEKLSAgICAgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBzZWxmLl9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZCh0ZXN0X2lucHV0KQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl90aGlz
X3RocmVhZCh0ZXN0X2lucHV0KQotCi0gICAgICAgICAgICBmaWxlbmFtZSA9IHRlc3RfaW5wdXQu
ZmlsZW5hbWUKLSAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLndyaXRlKGZpbGVuYW1lICsgIlxu
IikKLSAgICAgICAgICAgIGlmIHJlc3VsdC5mYWlsdXJlczoKLSAgICAgICAgICAgICAgICAjIENo
ZWNrIGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCi0gICAgICAgICAgICAg
ICAgaWYgbGVuKFsxIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlcwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgZi5zaG91bGRfa2lsbF9kdW1wX3JlbmRlcl90cmVlKCldKToKLSAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICAg
ICAgIyBSZXNldCB0aGUgYmF0Y2ggY291bnQgc2luY2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4K
LSAgICAgICAgICAgICAgICAgICAgYmF0Y2hfY291bnQgPSAwCi0gICAgICAgICAgICAgICAgIyBQ
cmludCB0aGUgZXJyb3IgbWVzc2FnZShzKS4KLSAgICAgICAgICAgICAgICBlcnJvcl9zdHIgPSAn
XG4nLmpvaW4oWycgICcgKyBmLm1lc3NhZ2UoKSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGYgaW4gcmVzdWx0LmZhaWx1cmVzXSkKLSAgICAgICAgICAgICAgICBf
bG9nLmRlYnVnKCIlcyAlcyBmYWlsZWQ6XG4lcyIgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmls
ZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jfc3RyKSkKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChz
ZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQucmVs
YXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSkpKQotICAgICAgICAgICAgc2VsZi5fcmVzdWx0
X3F1ZXVlLnB1dChyZXN1bHQuZHVtcHMoKSkKLQotICAgICAgICAgICAgaWYgYmF0Y2hfc2l6ZSA+
IDAgYW5kIGJhdGNoX2NvdW50ID49IGJhdGNoX3NpemU6Ci0gICAgICAgICAgICAgICAgIyBCb3Vu
Y2UgdGhlIHNoZWxsIGFuZCByZXNldCBjb3VudC4KKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVz
dF9pbnB1dCk6CisgICAgICAgIGZpbGVuYW1lID0gdGVzdF9pbnB1dC5maWxlbmFtZQorICAgICAg
ICB0ZXN0X2lucHV0LnVyaSA9IHNlbGYuX3BvcnQuZmlsZW5hbWVfdG9fdXJpKHRlc3RfaW5wdXQu
ZmlsZW5hbWUpCisgICAgICAgIGlmIF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oc2Vs
Zi5fb3B0aW9ucyk6CisgICAgICAgICAgICB0ZXN0X2lucHV0LmltYWdlX2NoZWNrc3VtID0gc2Vs
Zi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorCisgICAgICAg
IHRlc3RfaW5wdXQudXJpID0gc2VsZi5fcG9ydC5maWxlbmFtZV90b191cmkodGVzdF9pbnB1dC5m
aWxlbmFtZSkKKyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgKz0gMQorCisgICAgICAgICMgV2Ug
Z2l2ZSBEUlQgc29tZSBleHRyYSB0aW1lIHRvIGRldGVjdCBhIHRpbWVvdXQsIGFuZCB0aGVuCisg
ICAgICAgICMgZ2l2ZSBvdXIgd2F0Y2hkb2cgdGhyZWFkIGEgc2ltaWxhciBhbW91bnQgdG8gZGV0
ZWN0IGEgaHVuZworICAgICAgICAjIERSVC4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gY29udmVydCB0
aGUgdGVzdCB0aW1lb3V0IGZyb20gYQorICAgICAgICAjIHN0cmluZyB2YWx1ZSBpbiBtaWxsaXNl
Y29uZHMgdG8gYSBmbG9hdCBmb3IgUHl0aG9uLgorICAgICAgICB0ZXN0X3BhZGRpbmcgPSA0MC4w
CisgICAgICAgIGtpbGxfcGFkZGluZyA9IDEuMAorICAgICAgICB0aHJlYWRfdGltZW91dCA9IGZs
b2F0KHRlc3RfaW5wdXQudGltZW91dCkgLyAxMDAwLjAgKyB0ZXN0X3BhZGRpbmcKKworICAgICAg
ICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3Npbmds
eToKKyAgICAgICAgICAgIHNlbGYuX2NvbnRhaW5lci5zdGFydGVkX3Rlc3QodGVzdF9pbnB1dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWVvdXQg
KyBraWxsX3BhZGRpbmcpCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl9h
bm90aGVyX3RocmVhZCh0ZXN0X2lucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3RpbWVvdXQpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBzZWxmLl9jb250YWluZXIuc3RhcnRlZF90ZXN0KHRlc3RfaW5wdXQsIHRocmVh
ZF90aW1lb3V0KQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5fdGhpc190
aHJlYWQodGVzdF9pbnB1dCkKKworICAgICAgICBzZWxmLl9jb250YWluZXIuZmluaXNoZWRfdGVz
dChyZXN1bHQsIHRpbWUudGltZSgpIC0gc3RhcnQpCisKKyAgICAgICAgaWYgc2VsZi5fYmF0Y2hf
c2l6ZSA+IDAgYW5kIHNlbGYuX2JhdGNoX2NvdW50ID49IHNlbGYuX2JhdGNoX3NpemU6CisgICAg
ICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50LgorICAgICAgICAgICAg
c2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAgICAgICAgIHNlbGYuX2JhdGNoX2Nv
dW50ID0gMAorCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLndyaXRlKHRlc3RfaW5wdXQu
ZmlsZW5hbWUgKyAiXG4iKQorICAgICAgICBpZiByZXN1bHQuZmFpbHVyZXM6CisgICAgICAgICAg
ICAjIENoZWNrIGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCisgICAgICAg
ICAgICBpZiBsZW4oWzEgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzCisgICAgICAgICAgICAgICAg
ICAgIGlmIGYuc2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpXSk6CiAgICAgICAgICAgICAg
ICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICBiYXRjaF9j
b3VudCA9IDAKLQotICAgICAgICAgICAgaWYgdGVzdF9ydW5uZXI6Ci0gICAgICAgICAgICAgICAg
dGVzdF9ydW5uZXIudXBkYXRlX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCi0KLSAgICBkZWYgX3J1
bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQpOgorICAgICAgICAgICAg
ICAgICMgUmVzZXQgdGhlIGJhdGNoIGNvdW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQu
CisgICAgICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisgICAgICAgICAgICAjIFBy
aW50IHRoZSBlcnJvciBtZXNzYWdlKHMpLgorICAgICAgICAgICAgZXJyb3Jfc3RyID0gJ1xuJy5q
b2luKFsnICAnICsgZi5tZXNzYWdlKCkgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmIGluIHJlc3VsdC5mYWlsdXJlc10pCisgICAgICAgICAgICBfbG9nLmRlYnVnKCIl
cyAlcyBmYWlsZWQ6XG4lcyIgJSAoc2VsZi5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX3N0cikpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuX25hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9p
bnB1dC5maWxlbmFtZSkpKQorCisgICAgZGVmIF9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZChz
ZWxmLCB0ZXN0X2lucHV0LCB0aHJlYWRfdGltZW91dCk6CiAgICAgICAgICIiIlJ1biBhIHRlc3Qg
aW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGVuZm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4KIAogICAg
ICAgICBTaW5jZSB3ZSBjYW4gb25seSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEgdGhyZWFk
LCBub3QgYW55IGludGVybmFsCkBAIC00NzksOSArMzE5LDYgQEAgY2xhc3MgVGVzdFNoZWxsVGhy
ZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAKICAgICAgICAgd29ya2VyLnN0YXJ0KCkKIAotICAgICAg
ICB0aHJlYWRfdGltZW91dCA9IF9taWxsaXNlY29uZHNfdG9fc2Vjb25kcygKLSAgICAgICAgICAg
IF9wYWRfdGltZW91dChpbnQodGVzdF9pbnB1dC50aW1lb3V0KSkpCi0gICAgICAgIHRocmVhZC5f
bmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyB0aHJlYWRfdGltZW91dAogICAgICAgICB3b3Jr
ZXIuam9pbih0aHJlYWRfdGltZW91dCkKICAgICAgICAgaWYgd29ya2VyLmlzQWxpdmUoKToKICAg
ICAgICAgICAgICMgSWYgam9pbigpIHJldHVybmVkIHdpdGggdGhlIHRocmVhZCBzdGlsbCBydW5u
aW5nLCB0aGUKQEAgLTUwNCw3ICszNDEsOCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hh
YmxlVGhyZWFkKToKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0Nhbm5vdCBnZXQgcmVzdWx0cyBv
ZiB0ZXN0OiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0LmZpbGVuYW1l
KQogICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbnB1
dC5maWxlbmFtZSwgZmFpbHVyZXM9W10sCi0gICAgICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0w
LCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30pCisgICAgICAg
ICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwKKyAg
ICAgICAgICAgICAgICB0aW1lX2Zvcl9kaWZmcz17fSkKIAogICAgICAgICByZXR1cm4gcmVzdWx0
CiAKQEAgLTUxNywxNCArMzU1LDkgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRo
cmVhZCk6CiAgICAgICAgIFJldHVybnM6IGEgVGVzdFJlc3VsdCBvYmplY3QuCiAgICAgICAgICIi
IgogICAgICAgICBzZWxmLl9lbnN1cmVfZHVtcF9yZW5kZXJfdHJlZV9pc19ydW5uaW5nKCkKLSAg
ICAgICAgdGhyZWFkX3RpbWVvdXQgPSBfbWlsbGlzZWNvbmRzX3RvX3NlY29uZHMoCi0gICAgICAg
ICAgICAgX3BhZF90aW1lb3V0KGludCh0ZXN0X2lucHV0LnRpbWVvdXQpKSkKLSAgICAgICAgc2Vs
Zi5fbmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyB0aHJlYWRfdGltZW91dAotICAgICAgICB0
ZXN0X3Jlc3VsdCA9IF9ydW5fc2luZ2xlX3Rlc3Qoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywg
dGVzdF9pbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3Rlc3RfdHlwZXMsIHNlbGYuX3Rlc3RfYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX2RyaXZlciwgc2VsZi5fbmFtZSkKLSAgICAgICAgc2VsZi5fdGVz
dF9yZXN1bHRzLmFwcGVuZCh0ZXN0X3Jlc3VsdCkKLSAgICAgICAgcmV0dXJuIHRlc3RfcmVzdWx0
CisgICAgICAgIHJldHVybiBfcnVuX3NpbmdsZV90ZXN0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlv
bnMsIHRlc3RfaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
dGVzdF90eXBlcywgc2VsZi5fdGVzdF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX2RyaXZlciwgc2VsZi5fbmFtZSkKIAogICAgIGRlZiBfZW5zdXJlX2R1bXBf
cmVuZGVyX3RyZWVfaXNfcnVubmluZyhzZWxmKToKICAgICAgICAgIiIiU3RhcnQgdGhlIHNoYXJl
ZCBEdW1wUmVuZGVyVHJlZSwgaWYgaXQncyBub3QgcnVubmluZy4KQEAgLTUzOSwyOSArMzcyLDYg
QEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgICBz
ZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fd29ya2VyX251bWJl
cikKICAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCiAKLSAgICBkZWYgX3N0YXJ0X3Nl
cnZlcnNfd2l0aF9sb2NrKHNlbGYpOgotICAgICAgICAiIiJBY3F1aXJlIGh0dHAgbG9jayBhbmQg
c3RhcnQgdGhlIHNlcnZlcnMuIiIiCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2lu
ID0gdGltZS50aW1lKCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnQWNxdWlyZSBodHRwIGxvY2sgLi4u
JykKLSAgICAgICAgc2VsZi5fcG9ydC5hY3F1aXJlX2h0dHBfbG9jaygpCi0gICAgICAgIF9sb2cu
ZGVidWcoJ1N0YXJ0aW5nIEhUVFAgc2VydmVyIC4uLicpCi0gICAgICAgIHNlbGYuX3BvcnQuc3Rh
cnRfaHR0cF9zZXJ2ZXIoKQotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBXZWJTb2NrZXQg
c2VydmVyIC4uLicpCi0gICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigp
Ci0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IHRpbWUudGltZSgpCi0gICAgICAg
IHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gVHJ1ZQotCi0gICAgZGVmIF9zdG9wX3NlcnZlcnNfd2l0
aF9sb2NrKHNlbGYpOgotICAgICAgICAiIiJTdG9wIHRoZSBzZXJ2ZXJzIGFuZCByZWxlYXNlIGh0
dHAgbG9jay4iIiIKLSAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6Ci0gICAgICAgICAg
ICBfbG9nLmRlYnVnKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQotICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0b3Bw
aW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93
ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1JlbGVhc2UgaHR0cCBs
b2NrIC4uLicpCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGVhc2VfaHR0cF9sb2NrKCkKLSAg
ICAgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKLQogICAgIGRlZiBfa2lsbF9k
dW1wX3JlbmRlcl90cmVlKHNlbGYpOgogICAgICAgICAiIiJLaWxsIHRoZSBEdW1wUmVuZGVyVHJl
ZSBwcm9jZXNzIGlmIGl0J3MgcnVubmluZy4iIiIKICAgICAgICAgaWYgc2VsZi5fZHJpdmVyOgpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weQppbmRleCBl
NTIwYTljYWE2Yjc2ODJlYmZkZDJhOThiYjIxN2ViODVkNzI1MWJjLi44MWNmZDRjNTU3YzNiNmQx
N2JiMTlkMTM0ZWFiYmY1MTU2N2I4MWJlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9tZXNzYWdlX2Jyb2tlci5weQpAQCAtNDAsOCArNDAsMTUgQEAgaGFuZGxlcyBsYXVuY2hp
bmcgdGhyZWFkcyBhbmQvb3IgcHJvY2Vzc2VzIGRlcGVuZGluZyBvbiB0aGUKIHJlcXVlc3RlZCBj
b25maWd1cmF0aW9uLgogIiIiCiAKKworaW1wb3J0IGNQaWNrbGUKIGltcG9ydCBsb2dnaW5nCitp
bXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBRdWV1ZQogaW1wb3J0IHN5
cworaW1wb3J0IHRocmVhZAoraW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIGltcG9ydCB0
cmFjZWJhY2sKIApAQCAtNTcsMTI1ICs2NCw0ODcgQEAgZGVmIGdldChwb3J0LCBvcHRpb25zKToK
ICAgICAgICAgcmV0dXJuIElubGluZUJyb2tlcihwb3J0LCBvcHRpb25zKQogICAgIGlmIHdvcmtl
cl9tb2RlbCA9PSAndGhyZWFkcyc6CiAgICAgICAgIHJldHVybiBNdWx0aVRocmVhZGVkQnJva2Vy
KHBvcnQsIG9wdGlvbnMpCisgICAgaWYgd29ya2VyX21vZGVsID09ICdwcm9jZXNzZXMnOgorICAg
ICAgICByZXR1cm4gTXVsdGlQcm9jZXNzQnJva2VyKHBvcnQsIG9wdGlvbnMpCiAgICAgcmFpc2Ug
VmFsdWVFcnJvcigndW5zdXBwb3J0ZWQgdmFsdWUgZm9yIC0td29ya2VyLW1vZGVsOiAlcycgJSB3
b3JrZXJfbW9kZWwpCiAKIAorY2xhc3MgX01lc3NhZ2Uob2JqZWN0KToKKyAgICBURVNUX0xJU1Qg
PSAndGVzdF9saXN0JworICAgIFNUT1AgPSAnc3RvcCcKKyAgICBET05FID0gJ2RvbmUnCisgICAg
U1RBUlRFRF9URVNUID0gJ3N0YXJ0ZWRfdGVzdCcKKyAgICBGSU5JU0hFRF9URVNUID0gJ2Zpbmlz
aGVkX3Rlc3QnCisgICAgRklOSVNIRURfTElTVCA9ICdmaW5pc2hlZF9saXN0JworICAgIEVYQ0VQ
VElPTiA9ICdleGNlcHRpb24nCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvYWRzKHN0
cik6CisgICAgICAgIG9iaiA9IGNQaWNrbGUubG9hZHMoc3RyKQorICAgICAgICBhc3NlcnQoaXNp
bnN0YW5jZShvYmosIF9NZXNzYWdlKSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmMsIGRl
c3QsIGhkciwgYm9keSk6CisgICAgICAgIHNlbGYuc3JjID0gc3JjCisgICAgICAgIHNlbGYuZGVz
dCA9IGRlc3QKKyAgICAgICAgc2VsZi5oZHIgPSBoZHIKKyAgICAgICAgc2VsZi5ib2R5ID0gYm9k
eQorCisgICAgZGVmIGR1bXBzKHNlbGYpOgorICAgICAgICByZXR1cm4gY1BpY2tsZS5kdW1wcyhz
ZWxmKQorCisKIGNsYXNzIF9Xb3JrZXJTdGF0ZShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBuYW1lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtYmVyLCBuYW1lLCB0aHJlYWQp
OgorICAgICAgICBzZWxmLm51bWJlciA9IG51bWJlcgogICAgICAgICBzZWxmLm5hbWUgPSBuYW1l
Ci0gICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorICAgICAgICBzZWxmLnRocmVhZCA9IHRocmVh
ZAorCisgICAgICAgIHNlbGYuZG9uZSA9IEZhbHNlCisgICAgICAgIHNlbGYubmV4dF90aW1lb3V0
ID0gTm9uZQorICAgICAgICBzZWxmLndlZGdlZCA9IEZhbHNlCiAKIAogY2xhc3MgV29ya2VyTWVz
c2FnZUJyb2tlcihvYmplY3QpOgorICAgIE1BTkFHRVIgPSAnbWFuYWdlcicKKyAgICBBTllfV09S
S0VSID0gJ3dvcmtlci1cZCsnCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9u
cyk6CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBv
cHRpb25zCiAgICAgICAgIHNlbGYuX251bV93b3JrZXJzID0gaW50KHNlbGYuX29wdGlvbnMuY2hp
bGRfcHJvY2Vzc2VzKQorICAgICAgICBzZWxmLl9tYW5hZ2VyID0gTm9uZQogCiAgICAgICAgICMg
VGhpcyBtYXBzIHdvcmtlciBuYW1lcyB0byB0aGVpciBfV29ya2VyU3RhdGUgdmFsdWVzLgogICAg
ICAgICBzZWxmLl93b3JrZXJzID0ge30KKyAgICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1ZSA9IFF1
ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlID0gUXVldWUuUXVldWUoKQog
CiAgICAgZGVmIF90aHJlYWRzKHNlbGYpOgogICAgICAgICByZXR1cm4gdHVwbGUoW3cudGhyZWFk
IGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCldKQogCi0gICAgZGVmIHN0YXJ0X3dvcmtl
cnMoc2VsZiwgdGVzdF9ydW5uZXIpOgotICAgICAgICAiIiJTdGFydHMgdXAgdGhlIHBvb2wgb2Yg
d29ya2VycyBmb3IgcnVubmluZyB0aGUgdGVzdHMuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAg
ICAgIHRlc3RfcnVubmVyOiBhIGhhbmRsZSB0byB0aGUgbWFuYWdlci9UZXN0UnVubmVyIG9iamVj
dAotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIgPSB0ZXN0X3J1bm5lcgor
ICAgIGRlZiBzdGFydF93b3JrZXJzKHNlbGYpOgorICAgICAgICAiIiJTdGFydHMgdXAgdGhlIHBv
b2wgb2Ygd29ya2VycyBmb3IgcnVubmluZyB0aGUgdGVzdHMuIiIiCiAgICAgICAgIGZvciB3b3Jr
ZXJfbnVtYmVyIGluIHhyYW5nZShzZWxmLl9udW1fd29ya2Vycyk6Ci0gICAgICAgICAgICB3b3Jr
ZXIgPSBfV29ya2VyU3RhdGUoJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyKQotICAgICAgICAg
ICAgd29ya2VyLnRocmVhZCA9IHNlbGYuX3N0YXJ0X3dvcmtlcih3b3JrZXJfbnVtYmVyLCB3b3Jr
ZXIubmFtZSkKLSAgICAgICAgICAgIHNlbGYuX3dvcmtlcnNbd29ya2VyLm5hbWVdID0gd29ya2Vy
Ci0gICAgICAgIHJldHVybiBzZWxmLl90aHJlYWRzKCkKKyAgICAgICAgICAgIHdvcmtlcl9uYW1l
ID0gJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyCisgICAgICAgICAgICB0aHJlYWQgPSBzZWxm
Ll9zdGFydF93b3JrZXIod29ya2VyX251bWJlciwgd29ya2VyX25hbWUpCisgICAgICAgICAgICBz
ZWxmLl93b3JrZXJzW3dvcmtlcl9uYW1lXSA9IF9Xb3JrZXJTdGF0ZSh3b3JrZXJfbnVtYmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29y
a2VyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJlYWQpCiAKICAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVt
YmVyLCB3b3JrZXJfbmFtZSk6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAot
ICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYpOgorICAgIGRlZiBydW5fbWVzc2FnZV9sb29w
KHNlbGYsIG9iaik6CiAgICAgICAgICIiIkxvb3AgcHJvY2Vzc2luZyBtZXNzYWdlcyB1bnRpbCBk
b25lLiIiIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKICAgICBkZWYgY2Fu
Y2VsX3dvcmtlcnMoc2VsZik6Ci0gICAgICAgICIiIkNhbmNlbC9pbnRlcnJ1cHQgYW55IHdvcmtl
cnMgdGhhdCBhcmUgc3RpbGwgYWxpdmUuIiIiCi0gICAgICAgIHBhc3MKKyAgICAgICAgZm9yIHdv
cmtlciBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgd29ya2VyLnRocmVh
ZC5jYW5jZWwoKQorICAgICAgICBzZWxmLl9wb2xsX21hbmFnZXJfcXVldWUoc2VsZi5fbWFuYWdl
ci5nZXROYW1lKCksIHRpbWVvdXQ9MC4wKQogCiAgICAgZGVmIGNsZWFudXAoc2VsZik6CiAgICAg
ICAgICIiIlBlcmZvcm0gYW55IG5lY2Vzc2FyeSBjbGVhbnVwIG9uIHNodXRkb3duLiIiIgogICAg
ICAgICBwYXNzCiAKKyAgICBkZWYgcG9zdF90ZXN0X2xpc3Qoc2VsZiwgdGVzdF9saXN0KToKKyAg
ICAgICAgc2VsZi5fcHV0KHNyYz1zZWxmLk1BTkFHRVIsIGRlc3Q9c2VsZi5BTllfV09SS0VSLAor
ICAgICAgICAgICAgICAgICAgaGRyPV9NZXNzYWdlLlRFU1RfTElTVCwgYm9keT10ZXN0X2xpc3Qp
CisKKyAgICBkZWYgcG9zdF9zdGFydGVkX3Rlc3Qoc2VsZiwgc3JjLCB0ZXN0X2luZm8sIGhhbmdf
dGltZW91dCk6CisgICAgICAgIHNlbGYuX3B1dChzcmM9c3JjLCBkZXN0PXNlbGYuTUFOQUdFUiwg
aGRyPV9NZXNzYWdlLlNUQVJURURfVEVTVCwKKyAgICAgICAgICAgICAgICAgIGJvZHk9KHRlc3Rf
aW5mbywgaGFuZ190aW1lb3V0KSkKKworICAgIGRlZiBwb3N0X2ZpbmlzaGVkX2xpc3Qoc2VsZiwg
c3JjLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5f
cHV0KHNyYz1zcmMsIGRlc3Q9c2VsZi5NQU5BR0VSLCBoZHI9X01lc3NhZ2UuRklOSVNIRURfTElT
VCwKKyAgICAgICAgICAgICAgICAgIGJvZHk9KGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2Vk
X3RpbWUpKQorCisgICAgZGVmIHBvc3RfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3VsdCwg
ZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz1zcmMsIGRlc3Q9c2VsZi5NQU5B
R0VSLCBoZHI9X01lc3NhZ2UuRklOSVNIRURfVEVTVCwKKyAgICAgICAgICAgICAgICAgIGJvZHk9
KHJlc3VsdCwgZWxhcHNlZF90aW1lKSkKKworICAgIGRlZiBwb3N0X2V4Y2VwdGlvbihzZWxmLCBz
cmMsIGV4Y19pbmZvKToKKyAgICAgICAgc2VsZi5fcHV0KHNyYz1zcmMsIGRlc3Q9c2VsZi5NQU5B
R0VSLCBoZHI9X01lc3NhZ2UuRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgYm9keT1leGNf
aW5mbykKKworICAgIGRlZiBwb3N0X3N0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuX3B1dChzcmM9
c2VsZi5NQU5BR0VSLCBkZXN0PXNlbGYuQU5ZX1dPUktFUiwKKyAgICAgICAgICAgICAgICAgIGhk
cj1fTWVzc2FnZS5TVE9QLCBib2R5PU5vbmUpCisKKyAgICBkZWYgcG9zdF9kb25lKHNlbGYsIHdv
cmtlcik6CisgICAgICAgIHNlbGYuX3B1dChzcmM9d29ya2VyLCBkZXN0PXNlbGYuTUFOQUdFUiwK
KyAgICAgICAgICAgICAgICAgIGhkcj1fTWVzc2FnZS5ET05FLCBib2R5PU5vbmUpCisKKyAgICBk
ZWYgX3B1dChzZWxmLCBzcmMsIGRlc3QsIGhkciwgYm9keSk6CisgICAgICAgIG1zZyA9IF9NZXNz
YWdlKHNyYywgZGVzdCwgaGRyLCBib2R5KQorICAgICAgICBpZiBtc2cuZGVzdCA9PSBzZWxmLk1B
TkFHRVI6CisgICAgICAgICAgICAjIF9sb2cuZGVidWcoIiVzOiBwb3N0aW5nICclcycgbXNnIHRv
IG1hbmFnZXIgcXVldWUiICUKKyAgICAgICAgICAgICMgICAgICAgICAgICAgKG1zZy5zcmMsIG1z
Zy5oZHIpKQorICAgICAgICAgICAgc2VsZi5fbWFuYWdlcl9xdWV1ZS5wdXQobXNnKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgIyBfbG9nLmRlYnVnKCIlczogcG9zdGluZyAnJXMnIG1zZyB0
byB3b3JrZXIgcXVldWUiICUKKyAgICAgICAgICAgICMgICAgICAgICAgICAgKG1zZy5zcmMsIG1z
Zy5oZHIpKQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlLnB1dChtc2cpCisKKyAgICBk
ZWYgX2dldChzZWxmLCBuYW1lLCBxdWV1ZSwgYmxvY2ssIHRpbWVvdXQpOgorICAgICAgICBpZiBx
dWV1ZSA9PSBzZWxmLl9tYW5hZ2VyX3F1ZXVlOgorICAgICAgICAgICAgcXVldWVfbmFtZSA9ICJt
YW5hZ2VyIHF1ZXVlIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcXVldWVfbmFtZSA9ICJ3
b3JrZXIgcXVldWUiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI19sb2cuZGVidWcoIiVz
IG5hbWUgcmVhZGluZyBmcm9tICVzIHF1ZXVlIiAlIChuYW1lLCBxdWV1ZV9uYW1lKSkKKyAgICAg
ICAgICAgIG1zZyA9IHF1ZXVlLmdldChibG9jaywgdGltZW91dCkKKyAgICAgICAgICAgICNfbG9n
LmRlYnVnKCIlcyBnb3QgJyVzJyBtc2cgZnJvbSAlcyIgJSAobmFtZSwgbXNnLmhkciwgbXNnLnNy
YykpCisgICAgICAgICAgICByZXR1cm4gbXNnCisgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToK
KyAgICAgICAgICAgICNfbG9nLmRlYnVnKCIlcyBmb3VuZCAlcyBlbXB0eSIgJSAobmFtZSwgcXVl
dWVfbmFtZSkpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9wb2xsX21hbmFn
ZXJfcXVldWUoc2VsZiwgbmFtZSwgdGltZW91dCk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAg
ICAgICAgICAjIE5vdGUgdGhhdCBibG9jaz1UcnVlLCB0aW1lb3V0PTAgaXMgZXF1aXZhbGVudCB0
byBibG9jaz1GYWxzZS4KKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2dldChuYW1lLCBzZWxmLl9t
YW5hZ2VyX3F1ZXVlLCBUcnVlLCB0aW1lb3V0KQorICAgICAgICAgICAgaWYgbm90IG1zZzoKKyAg
ICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBtc2cuaGRyID09IF9NZXNzYWdl
LlNUQVJURURfVEVTVDoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfc3RhcnRlZF90ZXN0
KG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5GSU5JU0hFRF9URVNU
OgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9maW5pc2hlZF90ZXN0KG1zZykKKyAgICAg
ICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5GSU5JU0hFRF9MSVNUOgorICAgICAgICAg
ICAgICAgIHNlbGYuX2hhbmRsZV9maW5pc2hlZF9saXN0KG1zZykKKyAgICAgICAgICAgIGVsaWYg
bXNnLmhkciA9PSBfTWVzc2FnZS5ET05FOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9k
b25lKG1zZykKKyAgICAgICAgICAgIGVsaWYgbXNnLmhkciA9PSBfTWVzc2FnZS5FWENFUFRJT046
CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V4Y2VwdGlvbihtc2cpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2JhaWwoJ3VuZXhwZWN0ZWQgbWVzc2FnZSB0
eXBlIG9uIG1hbmFnZXIgcXVldWU6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBt
c2cuaGRyKQorCisgICAgZGVmIF9wb2xsX3dvcmtlcl9xdWV1ZShzZWxmLCB3b3JrZXIsIHBvbGxf
bWFuYWdlcik6CisgICAgICAgIHdoaWxlIG5vdCB3b3JrZXIuaXNfZG9uZSgpOgorICAgICAgICAg
ICAgbXNnID0gc2VsZi5fZ2V0KHdvcmtlci5nZXROYW1lKCksIHNlbGYuX3dvcmtlcl9xdWV1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgcG9sbF9tYW5hZ2VyLCBOb25lKQorICAg
ICAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgICAgICBpZiBub3QgcG9sbF9tYW5hZ2Vy
OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9iYWlsKCclcyB1bmV4cGVjdGVkbHkgcmFuIG91
dCBvZiBxdWV1ZWQgbWVzc2FnZXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
b3JrZXIuZ2V0TmFtZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlm
IG1zZy5oZHIgPT0gX01lc3NhZ2UuU1RPUDoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVf
c3RvcCh3b3JrZXIpCisgICAgICAgICAgICBlbGlmIG1zZy5oZHIgPT0gX01lc3NhZ2UuVEVTVF9M
SVNUOgorICAgICAgICAgICAgICAgIChsaXN0X25hbWUsIHRlc3RfbGlzdCkgPSBtc2cuYm9keQor
ICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV90ZXN0X2xpc3Qod29ya2VyLCBsaXN0X25hbWUs
IHRlc3RfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGxf
bWFuYWdlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fYmFpbCgn
JXM6IHVuZXhwZWN0ZWQgbWVzc2FnZSB0eXBlIG9uIHdvcmtlciBxdWV1ZTogJXMnICUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXIuZ2V0TmFtZSgpLCBtc2cuaGRyKSkKKworICAg
IGRlZiBfYmFpbChzZWxmLCBtc2cpOgorICAgICAgICBfbG9nLmVycm9yKG1zZykKKyAgICAgICAg
YXNzZXJ0IEZhbHNlLCBtc2cKKworICAgIGRlZiBfaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBt
c2cpOgorICAgICAgICAodGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpID0gbXNnLmJvZHkKKyAgICAg
ICAgd29ya2VyID0gc2VsZi5fd29ya2Vyc1ttc2cuc3JjXQorICAgICAgICB3b3JrZXIuY3VycmVu
dF90ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbmZv
LmZpbGVuYW1lKQorICAgICAgICB3b3JrZXIubmV4dF90aW1lb3V0ID0gdGltZS50aW1lKCkgKyBo
YW5nX3RpbWVvdXQKKworICAgIGRlZiBfaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgbXNnKToK
KyAgICAgICAgKHJlc3VsdCwgZWxhcHNlZF90aW1lKSA9IG1zZy5ib2R5CisgICAgICAgIHdvcmtl
ciA9IHNlbGYuX3dvcmtlcnNbbXNnLnNyY10KKyAgICAgICAgd29ya2VyLm5leHRfdGltZW91dCA9
IE5vbmUKKyAgICAgICAgd29ya2VyLmN1cnJlbnRfdGVzdCA9IE5vbmUKKworICAgICAgICBpZiB3
b3JrZXIud2VkZ2VkOgorICAgICAgICAgICAgIyBIbW0uIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4K
KyAgICAgICAgICAgIF9sb2cuZXJyb3IoIiVzIHVud2VkZ2VkIiwgd29ya2VyLmdldE5hbWUoKSkK
KworICAgICAgICBzZWxmLl9tYW5hZ2VyLmhhbmRsZV9maW5pc2hlZF90ZXN0KG1zZy5zcmMsIHJl
c3VsdCwgZWxhcHNlZF90aW1lKQorCisgICAgZGVmIF9oYW5kbGVfZmluaXNoZWRfbGlzdChzZWxm
LCBtc2cpOgorICAgICAgICAobGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkgPSBt
c2cuYm9keQorICAgICAgICBzZWxmLl9tYW5hZ2VyLmhhbmRsZV9maW5pc2hlZF9saXN0KG1zZy5z
cmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX2hhbmRsZV9leGNlcHRpb24o
c2VsZiwgbXNnKToKKyAgICAgICAgZXhjZXB0aW9uX2luZm8gPSBtc2cuYm9keQorICAgICAgICBz
ZWxmLl9tYW5hZ2VyLmhhbmRsZV9leGNlcHRpb24obXNnLnNyYywgZXhjZXB0aW9uX2luZm8pCisK
KyAgICBkZWYgX2hhbmRsZV9zdG9wKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHdvcmtlci5oYW5k
bGVfc3RvcCgpCisKKyAgICBkZWYgX2hhbmRsZV9kb25lKHNlbGYsIG1zZyk6CisgICAgICAgIHdv
cmtlciA9IHNlbGYuX3dvcmtlcnNbbXNnLnNyY10KKyAgICAgICAgd29ya2VyLmRvbmUgPSBUcnVl
CisgICAgICAgICMgX2xvZy5kZWJ1ZygiJXMgaXMgZG9uZSIgJSB3b3JrZXIubmFtZSkKKyAgICAg
ICAgc2VsZi5fbWFuYWdlci5oYW5kbGVfZG9uZShtc2cuc3JjKQorCisgICAgZGVmIF9oYW5kbGVf
dGVzdF9saXN0KHNlbGYsIHdvcmtlciwgbGlzdF9uYW1lLCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdl
cik6CisgICAgICAgIHdvcmtlci5oYW5kbGVfdGVzdF9saXN0KGxpc3RfbmFtZSwgdGVzdF9saXN0
LCBwb2xsX21hbmFnZXIpCisKKyAgICBkZWYgX2xvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtl
cik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKwogCiBjbGFzcyBJbmxpbmVC
cm9rZXIoV29ya2VyTWVzc2FnZUJyb2tlcik6CiAgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwg
d29ya2VyX251bWJlciwgd29ya2VyX25hbWUpOgotICAgICAgICAjIEZJWE1FOiBSZXBsYWNlIHdp
dGggc29tZXRoaW5nIHRoYXQgaXNuJ3QgYSB0aHJlYWQuCi0gICAgICAgIHRocmVhZCA9IGR1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTaGVsbFRocmVhZChzZWxmLl9wb3J0LAotICAgICAgICAg
ICAgc2VsZi5fb3B0aW9ucywgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUsCi0gICAgICAgICAg
ICBzZWxmLl90ZXN0X3J1bm5lci5fY3VycmVudF9maWxlbmFtZV9xdWV1ZSwKLSAgICAgICAgICAg
IHNlbGYuX3Rlc3RfcnVubmVyLl9yZXN1bHRfcXVldWUpCisgICAgICAgICMgRklYTUU6IFVzZSBX
b3JrZXJUaHVuayBpbnN0ZWFkIC4uLgorICAgICAgICB0aHVuayA9IF9Xb3JrZXJUaHJlYWQoc2Vs
ZiwgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuV29ya2VyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUpCiAgICAgICAgICMgTm90ZTogRG9u
J3Qgc3RhcnQoKSB0aGUgdGhyZWFkISBJZiB3ZSBkaWQsIGl0IHdvdWxkIGFjdHVhbGx5CiAgICAg
ICAgICMgY3JlYXRlIGFub3RoZXIgdGhyZWFkIGFuZCBzdGFydCBleGVjdXRpbmcgaXQsIGFuZCB3
ZSdkIG5vIGxvbmdlcgogICAgICAgICAjIGJlIHNpbmdsZS10aHJlYWRlZC4KLSAgICAgICAgcmV0
dXJuIHRocmVhZAorICAgICAgICByZXR1cm4gdGh1bmsKIAotICAgIGRlZiBydW5fbWVzc2FnZV9s
b29wKHNlbGYpOgotICAgICAgICB0aHJlYWQgPSBzZWxmLl90aHJlYWRzKClbMF0KLSAgICAgICAg
dGhyZWFkLnJ1bl9pbl9tYWluX3RocmVhZChzZWxmLl90ZXN0X3J1bm5lciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci5fY3VycmVudF9yZXN1bHRf
c3VtbWFyeSkKLSAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIudXBkYXRlKCkKKyAgICBkZWYgcnVu
X21lc3NhZ2VfbG9vcChzZWxmLCBtYW5hZ2VyKToKKyAgICAgICAgIiIiTG9vcCBwcm9jZXNzaW5n
IG1lc3NhZ2VzIHVudGlsIGRvbmUuIiIiCisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBtYW5hZ2Vy
CisgICAgICAgIHdvcmtlciA9IHNlbGYuX3dvcmtlcnNbJ3dvcmtlci0wJ10KKyAgICAgICAgc2Vs
Zi5fcG9sbF93b3JrZXJfcXVldWUod29ya2VyLnRocmVhZCwgcG9sbF9tYW5hZ2VyPVRydWUpCisK
KyAgICBkZWYgX2xvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtlcik6CisgICAgICAgICIiIkxv
ZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2l2ZW4gd29ya2VyJ3Mgc3RhdGUuIiIiCisgICAgICAg
IHJhaXNlIEFzc2VydGlvbkVycm9yKCJJbmxpbmVCcm9rZXIuX2xvZ193ZWRnZWRfd29ya2VyIGNh
bGxlZC4iKQogCiAKIGNsYXNzIE11bHRpVGhyZWFkZWRCcm9rZXIoV29ya2VyTWVzc2FnZUJyb2tl
cik6CiAgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwgd29ya2VyX25h
bWUpOgotICAgICAgICB0aHJlYWQgPSBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5UZXN0U2hlbGxU
aHJlYWQoc2VsZi5fcG9ydCwKLSAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsIHdvcmtlcl9udW1i
ZXIsIHdvcmtlcl9uYW1lLAotICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIuX2N1cnJlbnRf
ZmlsZW5hbWVfcXVldWUsCi0gICAgICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci5fcmVzdWx0X3F1
ZXVlKQotICAgICAgICB0aHJlYWQuc3RhcnQoKQotICAgICAgICByZXR1cm4gdGhyZWFkCi0KLSAg
ICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmKToKLSAgICAgICAgdGhyZWFkcyA9IHNlbGYuX3Ro
cmVhZHMoKQotCi0gICAgICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgdGhyZWFkcyB3YWl0aW5n
IGZvciB0aGVtIHRvIGZpbmlzaC4KLSAgICAgICAgc29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVl
Ci0gICAgICAgIHdoaWxlIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgotICAgICAgICAgICAgc29tZV90
aHJlYWRfaXNfYWxpdmUgPSBGYWxzZQotICAgICAgICAgICAgdCA9IHRpbWUudGltZSgpCi0gICAg
ICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9u
X2luZm8gPSB0aHJlYWQuZXhjZXB0aW9uX2luZm8oKQotICAgICAgICAgICAgICAgIGlmIGV4Y2Vw
dGlvbl9pbmZvIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAjIFJlLXJhaXNlIHRo
ZSB0aHJlYWQncyBleGNlcHRpb24gaGVyZSB0byBtYWtlIGl0Ci0gICAgICAgICAgICAgICAgICAg
ICMgY2xlYXIgdGhhdCB0ZXN0aW5nIHdhcyBhYm9ydGVkLiBPdGhlcndpc2UsCi0gICAgICAgICAg
ICAgICAgICAgICMgdGhlIHRlc3RzIHRoYXQgZGlkIG5vdCBydW4gd291bGQgYmUgYXNzdW1lZAot
ICAgICAgICAgICAgICAgICAgICAjIHRvIGhhdmUgcGFzc2VkLgotICAgICAgICAgICAgICAgICAg
ICByYWlzZSBleGNlcHRpb25faW5mb1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlvbl9p
bmZvWzJdCi0KLSAgICAgICAgICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgotICAgICAgICAg
ICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUKLSAgICAgICAgICAgICAgICAg
ICAgbmV4dF90aW1lb3V0ID0gdGhyZWFkLm5leHRfdGltZW91dCgpCi0gICAgICAgICAgICAgICAg
ICAgIGlmIG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxvZ193ZWRnZWRfd29ya2VyKHRocmVhZC5nZXROYW1lKCksIHRocmVhZC5pZCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmNsZWFyX25leHRfdGltZW91dCgpCi0K
LSAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLnVwZGF0ZSgpCi0KLSAgICAgICAgICAgIGlm
IHNvbWVfdGhyZWFkX2lzX2FsaXZlOgotICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkK
LQotICAgIGRlZiBjYW5jZWxfd29ya2VycyhzZWxmKToKLSAgICAgICAgdGhyZWFkcyA9IHNlbGYu
X3RocmVhZHMoKQotICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICB0
aHJlYWQuY2FuY2VsKCkKKyAgICAgICAgdGh1bmsgPSBfV29ya2VyVGhyZWFkKHNlbGYsIGR1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkLldvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lKQorICAgICAgICB0aHVuay5zdGFydCgpCisgICAg
ICAgIHJldHVybiB0aHVuaworCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgb2JqKToK
KyAgICAgICAgaWYgb2JqLmdldE5hbWUoKSA9PSBzZWxmLk1BTkFHRVI6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fbG9vcF9tYW5hZ2VyKG9iaikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl9sb29wX3dvcmtlcihvYmopCisKKyAgICBkZWYgX2xvb3BfbWFuYWdlcihz
ZWxmLCBtYW5hZ2VyKToKKyAgICAgICAgc2VsZi5fbWFuYWdlciA9IG1hbmFnZXIKKyAgICAgICAg
c2VsZi5fcG9sbF9tYW5hZ2VyX3F1ZXVlKG1hbmFnZXIuZ2V0TmFtZSgpLCB0aW1lb3V0PTAuMDEp
CisgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9jaGVja19vbl93b3JrZXJzKCk6CisgICAgICAgICAg
ICBzZWxmLl9wb2xsX21hbmFnZXJfcXVldWUobWFuYWdlci5nZXROYW1lKCksIHRpbWVvdXQ9MC4w
MSkKKworICAgICAgICBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAg
ICAgYXNzZXJ0IHcud2VkZ2VkIG9yIG5vdCB3LnRocmVhZC5pc19hbGl2ZSgpCisKKyAgICBkZWYg
X2xvb3Bfd29ya2VyKHNlbGYsIHdvcmtlcik6CisgICAgICAgIHdoaWxlIG5vdCB3b3JrZXIuaXNf
ZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fcG9sbF93b3JrZXJfcXVldWUod29ya2VyLCBwb2xs
X21hbmFnZXI9RmFsc2UpCisKKyAgICBkZWYgX2NoZWNrX29uX3dvcmtlcnMoc2VsZik6CisgICAg
ICAgICJSZXR1cm5zIHRydWUgaWZmIGFsbCB0aGUgd29ya2VycyBoYXZlIGVpdGhlciBjb21wbGV0
ZWQgb3Igd2VkZ2VkLiIKKyAgICAgICAgZG9uZSA9IFRydWUKKyAgICAgICAgdCA9IHRpbWUudGlt
ZSgpCisgICAgICAgIGZvciB3b3JrZXIgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAg
ICAgICAgIGlmIG5vdCB3b3JrZXIuZG9uZSBhbmQgbm90IHdvcmtlci53ZWRnZWQ6CisgICAgICAg
ICAgICAgICAgbmV4dF90aW1lb3V0ID0gd29ya2VyLm5leHRfdGltZW91dAorICAgICAgICAgICAg
ICAgIGlmIG5leHRfdGltZW91dCBhbmQgdCA+IG5leHRfdGltZW91dDoKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fbG9nX3dlZGdlZF93b3JrZXIod29ya2VyKQorICAgICAgICAgICAgICAgICAg
ICB3b3JrZXIud2VkZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgICMgX2xvZy5kZWJ1ZygiJXMgaXMgbm90IGRvbmUiICUgd29ya2VyLm5hbWUpCisg
ICAgICAgICAgICAgICAgICAgIGRvbmUgPSBGYWxzZQorCisgICAgICAgIGlmIGRvbmUgYW5kIGFu
eShbdy53ZWRnZWQgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKV0pOgorICAgICAgICAg
ICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1JlbWFpbmluZyB3b3Jr
ZXJzIGFyZSB3ZWRnZWQsIGJhaWxpbmcgb3V0LicpCisgICAgICAgICAgICBfbG9nLmVycm9yKCcn
KQorICAgICAgICBlbGlmIGRvbmU6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdObyB3ZWRnZWQg
dGhyZWFkcycpCisKKyAgICAgICAgcmV0dXJuIGRvbmUKKworICAgIGRlZiBfbG9nX3dlZGdlZF93
b3JrZXIoc2VsZiwgd29ya2VyKToKKyAgICAgICAgbG9nX3dlZGdlZF93b3JrZXIod29ya2VyLm5h
bWUsIHdvcmtlci5pZCgpLCB3b3JrZXIuY3VycmVudF90ZXN0X25hbWUpCisKKworY2xhc3MgTXVs
dGlQcm9jZXNzQnJva2VyKE11bHRpVGhyZWFkZWRCcm9rZXIpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwb3J0LCBvcHRpb25zKToKKyAgICAgICAgV29ya2VyTWVzc2FnZUJyb2tlci5fX2luaXRf
XyhzZWxmLCBwb3J0LCBvcHRpb25zKQorICAgICAgICBzZWxmLl9tYW5hZ2VyX3F1ZXVlID0gbXVs
dGlwcm9jZXNzaW5nLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fd29ya2VyX3F1ZXVlID0gbXVsdGlw
cm9jZXNzaW5nLlF1ZXVlKCkKIAorICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9u
dW1iZXIsIHdvcmtlcl9uYW1lKToKKyAgICAgICAgdGh1bmsgPSBfV29ya2VyUHJvY2VzcyhzZWxm
LCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUpCisgICAgICAgIHRodW5rLnN0YXJ0
KCkKKyAgICAgICAgcmV0dXJuIHRodW5rCisKKyAgICBkZWYgcG9zdF9leGNlcHRpb24oc2VsZiwg
c3JjLCBleGNlcHRpb25faW5mbyk6CisgICAgICAgICMgRklYTUU6IFdlIGNhbid0IHBpY2tsZSB0
cmFjZWJhY2sgb2JqZWN0cywgc28gbG9nIHRoZSB0cmFjZWJhY2sgaGVyZS4KKyAgICAgICAgbXBf
ZXhjX2luZm8gPSAoZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2VwdGlvbl9pbmZvWzFdLCBOb25lKQor
ICAgICAgICBNdWx0aVRocmVhZGVkQnJva2VyLnBvc3RfZXhjZXB0aW9uKHNlbGYsIHNyYywgbXBf
ZXhjX2luZm8pCisKKyAgICBkZWYgX2xvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtlcik6Cisg
ICAgICAgIGlkID0gd29ya2VyLnRocmVhZC5pZCgpCisgICAgICAgIF9sb2cuZXJyb3IoIiIpCisg
ICAgICAgIF9sb2cuZXJyb3IoIiVzIChwaWQgJWQpIGlzIHdlZGdlZCBvbiB0ZXN0ICVzIiAlCisg
ICAgICAgICAgICAgICAgICAgKHdvcmtlci50aHJlYWQuZ2V0TmFtZSgpLCBpZCwgd29ya2VyLmN1
cnJlbnRfdGVzdF9uYW1lKSkKKyAgICAgICAgX2xvZy5lcnJvcigiIikKKworCitjbGFzcyBfV29y
a2VyVGh1bmsob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJf
Y2xhc3MsIHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lKToKKyAgICAgICAgc2VsZi5fZXhjZXB0
aW9uX2luZm8gPSBOb25lCisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgorICAgICAgICBz
ZWxmLl9vcHRpb25zID0gYnJva2VyLl9vcHRpb25zCisgICAgICAgIHNlbGYuX3BvcnQgPSBicm9r
ZXIuX3BvcnQKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5f
ZG9uZSA9IEZhbHNlCisgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKKyAgICAg
ICAgc2VsZi5faWQgPSAwCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVt
YmVyCisgICAgICAgIHNlbGYuX3dvcmtlcl9uYW1lID0gd29ya2VyX25hbWUKKyAgICAgICAgc2Vs
Zi5fd29ya2VyID0gd29ya2VyX2NsYXNzKHNlbGYuX3BvcnQsIHNlbGYsIHNlbGYuX29wdGlvbnMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfbnVtYmVyLCB3b3Jr
ZXJfbmFtZSkKKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgIyB1c2VkIGR1cmluZyBsb2df
d2VkZ2VkX3dvcmtlcgorICAgICAgICByZXR1cm4gc2VsZi5faWQKKworICAgIGRlZiBnZXROYW1l
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fd29ya2VyX25hbWUKKworICAgIGRlZiBjYW5j
ZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKKworICAgIGRlZiBpc19k
b25lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9uZSBvciBzZWxmLl9jYW5jZWxsZWQK
KworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRw
X2xvY2s6CisgICAgICAgICAgICBzZWxmLl9yZWxlYXNlX2xvY2soKQorICAgICAgICBzZWxmLl93
b3JrZXIuaGFuZGxlX3N0b3AoKQorICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorCisgICAgZGVm
IGhhbmRsZV90ZXN0X2xpc3Qoc2VsZiwgbGlzdF9uYW1lLCB0ZXN0X2xpc3QsIHBvbGxfbWFuYWdl
cik6CisgICAgICAgIGlmIGxpc3RfbmFtZSA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKKyAgICAg
ICAgICAgIHNlbGYuX2FjcXVpcmVfbG9jaygpCisgICAgICAgIGVsaWYgc2VsZi5faGF2ZV9odHRw
X2xvY2s6CisgICAgICAgICAgICBzZWxmLl9yZWxlYXNlX2xvY2soKQorCisgICAgICAgIHN0YXJ0
X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBudW1fdGVzdHMgPSAwCisgICAgICAgIGZvciB0
ZXN0IGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlci5ydW5fdGVzdCh0ZXN0
KQorICAgICAgICAgICAgbnVtX3Rlc3RzICs9IDEKKworICAgICAgICAgICAgIyBGSVhNRTogTmVl
ZCB0byBnZXQgcmlkIG9mIHRoaXMuCisgICAgICAgICAgICBpZiBwb2xsX21hbmFnZXI6CisgICAg
ICAgICAgICAgICAgc2VsZi5fYnJva2VyLl9wb2xsX21hbmFnZXJfcXVldWUoc2VsZi5nZXROYW1l
KCksIHRpbWVvdXQ9MC4wKQorCisgICAgICAgICAgICBpZiBzZWxmLl9jYW5jZWxsZWQ6CisgICAg
ICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxhcHNlZF90aW1lID0gdGltZS50aW1lKCkgLSBz
dGFydF90aW1lCisKKyAgICAgICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAg
ICBzZWxmLl9yZWxlYXNlX2xvY2soKQorCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X2Zpbmlz
aGVkX2xpc3Qoc2VsZi5nZXROYW1lKCksIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYg
c3RhcnQoc2VsZik6CisgICAgICAgIHBhc3MKIAotZGVmIGxvZ193ZWRnZWRfd29ya2VyKG5hbWUs
IGlkKToKLSAgICAiIiJMb2cgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHdvcmtlciBzdGF0
ZS4iIiIKKyAgICBkZWYgc3RhcnRlZF90ZXN0KHNlbGYsIHRlc3RfaW5mbywgaHVuZ190aHJlYWRf
dGltZW91dCk6CisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X3N0YXJ0ZWRfdGVzdChzZWxmLmdl
dE5hbWUoKSwgdGVzdF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaHVuZ190aHJlYWRfdGltZW91dCkKKworICAgIGRlZiBmaW5pc2hlZF90ZXN0KHNlbGYsIHJl
c3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfZmluaXNoZWRf
dGVzdChzZWxmLmdldE5hbWUoKSwgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICBkZWYgX2Fj
cXVpcmVfbG9jayhzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1ZygnQWNxdWlyaW5nIGh0dHAgbG9j
ayAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKKyAgICAgICAg
X2xvZy5kZWJ1ZygnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgc2VsZi5fcG9y
dC5zdGFydF9odHRwX3NlcnZlcigpCisgICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIFdlYlNv
Y2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2Vy
dmVyKCkKKyAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBUcnVlCisKKyAgICBkZWYgX3Jl
bGVhc2VfbG9jayhzZWxmKToKKyAgICAgICAgIiIiU3RvcCB0aGUgc2VydmVycyBhbmQgcmVsZWFz
ZSBodHRwIGxvY2suIiIiCisgICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnU3RvcHBpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAg
IHNlbGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCdT
dG9wcGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0
b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGVhc2VfaHR0
cF9sb2NrKCkKKyAgICAgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKKworICAg
IGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYuX2lkID0gc2VsZi5fZ2V0X2lkKCkKKyAgICAg
ICAgZXhjZXB0aW9uX21zZyA9ICIiCisgICAgICAgIG5hbWUgPSBzZWxmLmdldE5hbWUoKQorICAg
ICAgICBfbG9nLmRlYnVnKCclcyBzdGFydGluZycgJSBuYW1lKQorCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKHNlbGYpCisgICAgICAgIGV4
Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBp
bnRlcnJ1cHRlZCIKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9
ICIsIGV4Y2VwdGlvbiByYWlzZWQiCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfbG9n
LmRlYnVnKCIlcyBkb25lJXMiICUgKG5hbWUsIGV4Y2VwdGlvbl9tc2cpKQorICAgICAgICAgICAg
aWYgZXhjZXB0aW9uX21zZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9
IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfZXhjZXB0
aW9uKG5hbWUsIHNlbGYuX2V4Y2VwdGlvbl9pbmZvKQorICAgICAgICAgICAgc2VsZi5fYnJva2Vy
LnBvc3RfZG9uZShuYW1lKQorCisgICAgICAgIGFzc2VydCBleGNlcHRpb25fbXNnIG9yIHNlbGYu
X2RvbmUgb3Igc2VsZi5fY2FuY2VsbGVkLCAiZXhpdGluZyB1bmV4cGVjdGVkbHkiCisKKworY2xh
c3MgX1dvcmtlclRocmVhZChfV29ya2VyVGh1bmssIHRocmVhZGluZy5UaHJlYWQpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFzcywgd29ya2VyX251bWJlciwgd29y
a2VyX25hbWUpOgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAg
ICAgIF9Xb3JrZXJUaHVuay5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9jbGFzcywgd29y
a2VyX251bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9uYW1lKQor
CisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faWQKKworICAgIGRlZiBf
Z2V0X2lkKHNlbGYpOgorICAgICAgICByZXR1cm4gdGhyZWFkLmdldF9pZGVudCgpCisKKyAgICBk
ZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBUcnVlCisKKyAgICBk
ZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuc3RhcnQoc2VsZikKKwor
CitjbGFzcyBfV29ya2VyUHJvY2VzcyhfV29ya2VyVGh1bmssIG11bHRpcHJvY2Vzc2luZy5Qcm9j
ZXNzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtl
cl9udW1iZXIsIHdvcmtlcl9uYW1lKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Mu
X19pbml0X18oc2VsZikKKyAgICAgICAgX1dvcmtlclRodW5rLl9faW5pdF9fKHNlbGYsIGJyb2tl
ciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd29ya2VyX25hbWUpCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgICMgRklYTUU6
IGZpZ3VyZSBvdXQgaWYgdGhpcyBuZWVkcyB0byBiZSBhd2FyZSBvZiBwYXJlbnQvY2hpbGQKKyAg
ICAgICAgcmV0dXJuIHNlbGYucGlkCisKKyAgICBkZWYgX2dldF9pZChzZWxmKToKKyAgICAgICAg
cmV0dXJuIG9zLmdldHBpZCgpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxm
Ll9jYW5jZWxsZWQgPSBUcnVlCisgICAgICAgIHNlbGYudGVybWluYXRlKCkKKworICAgIGRlZiBz
dGFydChzZWxmKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muc3RhcnQoc2VsZikK
KworCitkZWYgbG9nX3dlZGdlZF93b3JrZXIobmFtZSwgaWQsIHRlc3RfbmFtZSk6CisgICAgIiIi
TG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0aHJlYWQgc3RhdGUuIiIiCiAgICAgc3Rh
Y2sgPSBfZmluZF90aHJlYWRfc3RhY2soaWQpCiAgICAgYXNzZXJ0KHN0YWNrIGlzIG5vdCBOb25l
KQogICAgIF9sb2cuZXJyb3IoIiIpCi0gICAgX2xvZy5lcnJvcigiJXMgKHRpZCAlZCkgaXMgd2Vk
Z2VkIiAlIChuYW1lLCBpZCkpCisgICAgX2xvZy5lcnJvcigiJXMgKHRpZCAlZCkgaXMgd2VkZ2Vk
IG9uIHRlc3QgJXMiICUgKG5hbWUsIGlkLCB0ZXN0X25hbWUpKQogICAgIF9sb2dfc3RhY2soc3Rh
Y2spCiAgICAgX2xvZy5lcnJvcigiIikKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5p
dHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weQppbmRleCA2ZjA0ZmQzNTUxOGEw
NGViZDY5MTlmZjhhOTc2MTNjZjRjNWJlMWY0Li4xM2Y0OWZkOWVlOWNlMjI0NzVlMGMyOWY3YTZj
ZWU2NWVmY2RiYjBiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weQorKysg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weQpAQCAtNTIsMTIgKzUyLDEzIEBAIGNsYXNzIFRl
c3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAgIHNlbGYuX3RpbWVvdXQgPSBGYWxz
ZQogICAgICAgICBzZWxmLl90aW1lb3V0X3F1ZXVlID0gUXVldWUuUXVldWUoKQogICAgICAgICBz
ZWxmLl9leGNlcHRpb25faW5mbyA9IE5vbmUKKyAgICAgICAgc2VsZi5kb25lID0gRmFsc2UKIAog
ICAgIGRlZiBpZChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3RocmVhZF9pZAogCiAgICAg
ZGVmIGdldE5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAid29ya2VyLTAiCisgICAgICAgIHJl
dHVybiAnd29ya2VyLTAnCiAKICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICBzZWxmLl9jb3Zl
cmVkX3J1bigpCkBAIC03OSwxNyArODAsNiBAQCBjbGFzcyBUZXN0VGhyZWFkKHRocmVhZGluZy5U
aHJlYWQpOgogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5m
byA9IHN5cy5leGNfaW5mbygpCiAKLSAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9leGNlcHRpb25faW5mbwotCi0gICAgZGVmIG5leHRfdGltZW91dChz
ZWxmKToKLSAgICAgICAgaWYgc2VsZi5fdGltZW91dDoKLSAgICAgICAgICAgIHNlbGYuX3RpbWVv
dXRfcXVldWUucHV0KCdkb25lJykKLSAgICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUoKSAtIDEw
Ci0gICAgICAgIHJldHVybiB0aW1lLnRpbWUoKQotCi0gICAgZGVmIGNsZWFyX25leHRfdGltZW91
dChzZWxmKToKLSAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9uZQogCiBjbGFzcyBUZXN0
SGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhc3RyZWFt
KToKQEAgLTEwMCw1MSArOTAsNiBAQCBjbGFzcyBUZXN0SGFuZGxlcihsb2dnaW5nLkhhbmRsZXIp
OgogICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoc2VsZi5mb3JtYXQocmVjb3JkKSkKIAogCi1j
bGFzcyBNdWx0aVRocmVhZGVkQnJva2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgY2xh
c3MgTW9ja1Rlc3RSdW5uZXIob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgot
ICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICAg
ICAgcGFzcwotCi0gICAgICAgIGRlZiB1cGRhdGUoc2VsZik6Ci0gICAgICAgICAgICBwYXNzCi0K
LSAgICBkZWYgcnVuX29uZV90aHJlYWQoc2VsZiwgbXNnKToKLSAgICAgICAgcnVubmVyID0gc2Vs
Zi5Nb2NrVGVzdFJ1bm5lcigpCi0gICAgICAgIHBvcnQgPSBOb25lCi0gICAgICAgIG9wdGlvbnMg
PSBtb2NrdG9vbC5Nb2NrT3B0aW9ucyhjaGlsZF9wcm9jZXNzZXM9JzEnKQotICAgICAgICBzdGFy
dGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1
ZS5RdWV1ZSgpCi0gICAgICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyLk11bHRpVGhyZWFkZWRC
cm9rZXIocG9ydCwgb3B0aW9ucykKLSAgICAgICAgYnJva2VyLl90ZXN0X3J1bm5lciA9IHJ1bm5l
cgotICAgICAgICBjaGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9w
cGluZ19xdWV1ZSkKLSAgICAgICAgYnJva2VyLl93b3JrZXJzWyd3b3JrZXItMCddID0gbWVzc2Fn
ZV9icm9rZXIuX1dvcmtlclN0YXRlKCd3b3JrZXItMCcpCi0gICAgICAgIGJyb2tlci5fd29ya2Vy
c1snd29ya2VyLTAnXS50aHJlYWQgPSBjaGlsZF90aHJlYWQKLSAgICAgICAgY2hpbGRfdGhyZWFk
LnN0YXJ0KCkKLSAgICAgICAgc3RhcnRlZF9tc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQotICAg
ICAgICBzdG9wcGluZ19xdWV1ZS5wdXQobXNnKQotICAgICAgICByZXR1cm4gYnJva2VyLnJ1bl9t
ZXNzYWdlX2xvb3AoKQotCi0gICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIGludGVy
cnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShpbnRlcnJ1cHRlZCkKLQotICAgIGRlZiB0ZXN0X2ludGVycnVwdChzZWxmKToKLSAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIHNlbGYucnVuX29uZV90aHJlYWQs
ICdLZXlib2FyZEludGVycnVwdCcpCi0KLSAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgotICAg
ICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCi0gICAgICAgIG9jLmNhcHR1
cmVfb3V0cHV0KCkKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCdU
aW1lb3V0JykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKLSAgICAgICAg
b2MucmVzdG9yZV9vdXRwdXQoKQotCi0gICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJ1bl9vbmVfdGhyZWFkLCAn
RXhjZXB0aW9uJykKLQotCiBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYg
dGVzdF9maW5kX3RocmVhZF9zdGFja19mb3VuZChzZWxmKToKICAgICAgICAgaWQsIHN0YWNrID0g
c3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKClbMF0KQEAgLTE3MCw3ICsxMTUsOCBAQCBjbGFz
cyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgbXNnID0gc3RhcnRpbmdfcXVldWUu
Z2V0KCkKIAogICAgICAgICBtZXNzYWdlX2Jyb2tlci5sb2dfd2VkZ2VkX3dvcmtlcihjaGlsZF90
aHJlYWQuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGlsZF90aHJlYWQuaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hpbGRfdGhyZWFkLmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICd0ZXN0X2ZpbGUnKQogICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQoJycpCiAg
ICAgICAgIGNoaWxkX3RocmVhZC5qb2luKHRpbWVvdXQ9MS4wKQogCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21p
dW1fbWFjLnB5CmluZGV4IGQxYzM4M2MxM2VjMmYxM2FmNWZiMWYxNTQwNTc5YzRjODg5ZmRkNjMu
LjdkNzA0YzNhODlhZjU0YWQwZGFmMDc0OGI0ZDg4OWE2MjJhY2U0Y2QgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFj
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
Y2hyb21pdW1fbWFjLnB5CkBAIC02MiwxNSArNjIsNiBAQCBjbGFzcyBDaHJvbWl1bU1hY1BvcnQo
Y2hyb21pdW0uQ2hyb21pdW1Qb3J0KToKICAgICAgICAgICAgICAgICAgICAgICAgJ01hY0J1aWxk
SW5zdHJ1Y3Rpb25zJykKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIGRlZmF1bHRf
Y2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIHRvIHJ1biBz
aW5nbGUtdGhyZWFkZWQgZm9yIG5vdy4gU2VlCi0gICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NTUzLiBVbmZvcnR1bmF0ZWx5IHRoaXMKLSAgICAgICAg
IyByb3V0aW5lIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGxvZ2dlciBpcyBjb25maWd1cmVk
LCBzbyBpZiB3ZQotICAgICAgICAjIHRyeSB0byBfbG9nLndhcm5pbmcoKSwgaXQgZ2V0cyB0aHJv
d24gYXdheS4KLSAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJE
ZWZhdWx0aW5nIHRvIG9uZSBjaGlsZCAtIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mzg1NTNcbiIpCi0gICAgICAgIHJldHVybiAxCi0KICAgICBkZWYgZHJpdmVy
X25hbWUoc2VsZik6CiAgICAgICAgICIiIm5hbWUgZm9yIHRoaXMgcG9ydCdzIGVxdWl2YWxlbnQg
b2YgRHVtcFJlbmRlclRyZWUuIiIiCiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigndXNlX2Ry
dCcpOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L21hYy5weQppbmRleCA2OTZlMzM5OGVhNGIyOGFjNzYyMjU5MDdkYzM2MmZmYzNmYjg2
ZjllLi43MmY5MWQ4MzgyMTVhZjRiYzQ0ZjFkYzFmMDY1NWRhZGM3ZDMzNmZmIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5w
eQpAQCAtNDcsMTUgKzQ3LDYgQEAgY2xhc3MgTWFjUG9ydChXZWJLaXRQb3J0KToKICAgICAgICAg
a3dhcmdzLnNldGRlZmF1bHQoJ3BvcnRfbmFtZScsICdtYWMnICsgc2VsZi52ZXJzaW9uKCkpCiAg
ICAgICAgIFdlYktpdFBvcnQuX19pbml0X18oc2VsZiwgKiprd2FyZ3MpCiAKLSAgICBkZWYgZGVm
YXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IG5ldy1ydW4td2Vi
a2l0LXRlc3RzIGlzIHVuc3RhYmxlIG9uIE1hYyBydW5uaW5nIG1vcmUgdGhhbgotICAgICAgICAj
IGZvdXIgdGhyZWFkcyBpbiBwYXJhbGxlbC4KLSAgICAgICAgIyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NjIyCi0gICAgICAgIGNoaWxkX3Byb2Nlc3NlcyA9
IFdlYktpdFBvcnQuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZikKLSAgICAgICAgaWYgY2hp
bGRfcHJvY2Vzc2VzID4gNDoKLSAgICAgICAgICAgIHJldHVybiA0Ci0gICAgICAgIHJldHVybiBj
aGlsZF9wcm9jZXNzZXMKLQogICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKICAg
ICAgICAgcG9ydF9uYW1lcyA9IFtdCiAgICAgICAgIGlmIHNlbGYuX25hbWUgPT0gJ21hYy10aWdl
cic6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRleCA2NDNlMjA0OTNjOGEzYmY0MGFiMDhl
ZjQ0YjlkZTcwOTExYjQzZTc5Li42NGFlOWU3MzE1NjgwMmY5MjZlYTMxYWRiY2QzNzRjZDQxMjRh
MjEzIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTI2MSw5ICsyNjEsMTEgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKICAgICAgICAgIyBhIHNldCBvZiB0ZXN0IGZpbGVzLCBhbmQgdGhlIHNh
bWUgdGVzdHMgYXMgYSBsaXN0CiAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXMgPSBzZXQoKQogICAg
ICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBOb25lCi0gICAgICAgIHNlbGYuX3Jlc3VsdF9x
dWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKICAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSBGYWxzZQogCisg
ICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBtZXNzYWdlX2Jyb2tlci5Xb3Jr
ZXJNZXNzYWdlQnJva2VyLk1BTkFHRVIKKwogICAgIGRlZiBjb2xsZWN0X3Rlc3RzKHNlbGYsIGFy
Z3MsIGxhc3RfdW5leHBlY3RlZF9yZXN1bHRzKToKICAgICAgICAgIiIiRmluZCBhbGwgdGhlIGZp
bGVzIHRvIHRlc3QuCiAKQEAgLTU4NSwyNiArNTg3LDQxIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAg
ICAgICAgICAgICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGlt
ZTp0ZXN0X3J1bl90aW1lfQogICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2Jq
ZWN0IHRvIHBvcHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKICAgICAgICAgIiIiCisgICAgICAgIHNl
bGYuX2N1cnJlbnRfZmlsZV9saXN0ID0gZmlsZV9saXN0CisgICAgICAgIHNlbGYuX2N1cnJlbnRf
cmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQogCi0gICAgICAgIHNlbGYuX3ByaW50ZXIu
cHJpbnRfdXBkYXRlKCdTaGFyZGluZyB0ZXN0cyAuLi4nKQogICAgICAgICBudW1fd29ya2VycyA9
IHNlbGYuX251bV93b3JrZXJzKCkKKyAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMgPSBbXQorICAg
ICAgICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0cyA9
IHt9CisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1fd29ya2Vycyk6CisgICAgICAgICAgICBu
YW1lID0gJ3dvcmtlci0lZCcgJSBpCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHNbbmFt
ZV0gPSB7fQorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW25hbWVdWyduYW1lJ10gPSBu
YW1lCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHNbbmFtZV1bJ251bV90ZXN0cyddID0g
MAorICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW25hbWVdWyd0b3RhbF90aW1lJ10gPSAw
CisKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1NoYXJkaW5nIHRlc3RzIC4u
LicpCiAgICAgICAgIHRlc3RfbGlzdHMgPSBzZWxmLl9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsCiAg
ICAgICAgICAgICBudW1fd29ya2VycyA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25zLmV4cGVyaW1l
bnRhbF9mdWxseV9wYXJhbGxlbCkKLSAgICAgICAgZmlsZW5hbWVfcXVldWUgPSBRdWV1ZS5RdWV1
ZSgpCi0gICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdHM6Ci0gICAgICAgICAgICBmaWxlbmFt
ZV9xdWV1ZS5wdXQoaXRlbSkKKworICAgICAgICBtZXNzYWdlX2Jyb2tlciA9IHNlbGYuX21lc3Nh
Z2VfYnJva2VyCisgICAgICAgIGZvciB0ZXN0X2xpc3QgaW4gdGVzdF9saXN0czoKKyAgICAgICAg
ICAgIG1lc3NhZ2VfYnJva2VyLnBvc3RfdGVzdF9saXN0KHRlc3RfbGlzdCkKKworICAgICAgICAj
IFRlbGwgdGhlIHdvcmtlcnMgdG8gc2h1dCBkb3duIGFmdGVyIHRoZXkncmUgZG9uZSBydW5uaW5n
IGFsbCB0aGUKKyAgICAgICAgIyB0ZXN0cy4KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG51bV93
b3JrZXJzKToKKyAgICAgICAgICAgIG1lc3NhZ2VfYnJva2VyLnBvc3Rfc3RvcCgpCiAKICAgICAg
ICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nICVzIC4uLicgJQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyLnBsdXJhbGl6ZSgnd29ya2VyJywg
bnVtX3dvcmtlcnMpKQotICAgICAgICBtZXNzYWdlX2Jyb2tlciA9IHNlbGYuX21lc3NhZ2VfYnJv
a2VyCi0gICAgICAgIHNlbGYuX2N1cnJlbnRfZmlsZW5hbWVfcXVldWUgPSBmaWxlbmFtZV9xdWV1
ZQotICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gcmVzdWx0X3N1bW1hcnkK
LSAgICAgICAgdGhyZWFkcyA9IG1lc3NhZ2VfYnJva2VyLnN0YXJ0X3dvcmtlcnMoc2VsZikKKyAg
ICAgICAgbWVzc2FnZV9icm9rZXIuc3RhcnRfd29ya2VycygpCiAKICAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKICAgICAgICAga2V5Ym9h
cmRfaW50ZXJydXB0ZWQgPSBGYWxzZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtZXNzYWdl
X2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgICAgIG1lc3NhZ2VfYnJva2VyLnJ1
bl9tZXNzYWdlX2xvb3Aoc2VsZikKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0Ogog
ICAgICAgICAgICAgX2xvZy5pbmZvKCJJbnRlcnJ1cHRlZCwgZXhpdGluZyIpCiAgICAgICAgICAg
ICBtZXNzYWdlX2Jyb2tlci5jYW5jZWxfd29ya2VycygpCkBAIC02MTQsMjggKzYzMSw4IEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICBfbG9nLmluZm8oIkV4Y2VwdGlvbiByYWlzZWQs
IGV4aXRpbmciKQogICAgICAgICAgICAgcmFpc2UKIAotICAgICAgICB0aHJlYWRfdGltaW5ncywg
dGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9IFwKLSAgICAgICAgICAgIHNl
bGYuX2NvbGxlY3RfdGltaW5nX2luZm8odGhyZWFkcykKLQotICAgICAgICByZXR1cm4gKGtleWJv
YXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLAotICAgICAgICAg
ICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQotCi0gICAgZGVmIHVwZGF0ZShzZWxmKToK
LSAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5
KQotCi0gICAgZGVmIF9jb2xsZWN0X3RpbWluZ19pbmZvKHNlbGYsIHRocmVhZHMpOgotICAgICAg
ICB0ZXN0X3RpbWluZ3MgPSB7fQotICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9IFtd
Ci0gICAgICAgIHRocmVhZF90aW1pbmdzID0gW10KLQotICAgICAgICBmb3IgdGhyZWFkIGluIHRo
cmVhZHM6Ci0gICAgICAgICAgICB0aHJlYWRfdGltaW5ncy5hcHBlbmQoeyduYW1lJzogdGhyZWFk
LmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bV90ZXN0
cyc6IHRocmVhZC5nZXRfbnVtX3Rlc3RzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd0b3RhbF90aW1lJzogdGhyZWFkLmdldF90b3RhbF90aW1lKCl9KQotICAgICAgICAg
ICAgdGVzdF90aW1pbmdzLnVwZGF0ZSh0aHJlYWQuZ2V0X3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRz
KCkpCi0gICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncy5leHRlbmQodGhyZWFkLmdl
dF90ZXN0X3Jlc3VsdHMoKSkKLQotICAgICAgICByZXR1cm4gKHRocmVhZF90aW1pbmdzLCB0ZXN0
X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQorICAgICAgICByZXR1cm4gKGtleWJv
YXJkX2ludGVycnVwdGVkLCBzZWxmLl93b3JrZXJfc3RhdHMudmFsdWVzKCksCisgICAgICAgICAg
ICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMsIHNlbGYuX2FsbF9yZXN1bHRzKQogCiAgICAgZGVmIG5l
ZWRzX2h0dHAoc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgdGVzdCBydW5u
ZXIgbmVlZHMgYW4gSFRUUCBzZXJ2ZXIuIiIiCkBAIC03NjcsMjMgKzc2NCwzNyBAQCBjbGFzcyBU
ZXN0UnVubmVyOgogICAgICAgICBfbG9nLmRlYnVnKCJzdG9wcGluZyBoZWxwZXIiKQogICAgICAg
ICBzZWxmLl9wb3J0LnN0b3BfaGVscGVyKCkKIAotICAgIGRlZiB1cGRhdGVfc3VtbWFyeShzZWxm
LCByZXN1bHRfc3VtbWFyeSk6CisgICAgZGVmIGhhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgc3Jj
KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGhhbmRsZV9kb25lKHNlbGYsIHNyYyk6CisgICAg
ICAgIHBhc3MKKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3Vs
dCwgZWxhcHNlZF90aW1lKToKICAgICAgICAgIiIiVXBkYXRlIHRoZSBzdW1tYXJ5IGFuZCBwcmlu
dCByZXN1bHRzIHdpdGggYW55IGNvbXBsZXRlZCB0ZXN0cy4iIiIKLSAgICAgICAgd2hpbGUgVHJ1
ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X3Jlc3Vs
dHMuVGVzdFJlc3VsdC5sb2FkcyhzZWxmLl9yZXN1bHRfcXVldWUuZ2V0X25vd2FpdCgpKQotICAg
ICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgotICAgICAgICAgICAgICAgIHJldHVybgotCi0g
ICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5tYXRjaGVzX2FuX2V4cGVj
dGVkX3Jlc3VsdCgKLSAgICAgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC50eXBl
LCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQotICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnku
YWRkKHJlc3VsdCwgZXhwZWN0ZWQpCi0gICAgICAgICAgICBleHBfc3RyID0gc2VsZi5fZXhwZWN0
YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAotICAgICAgICAgICAgICAgIHJlc3VsdC5m
aWxlbmFtZSkKLSAgICAgICAgICAgIGdvdF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZXhwZWN0
YXRpb25fdG9fc3RyaW5nKHJlc3VsdC50eXBlKQotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKQotICAg
ICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgc2Vs
Zi5fcmV0cnlpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX3Rlc3RfZmlsZXNfbGlzdCkKKyAgICAgICAgc2VsZi5fdXBkYXRlX3dvcmtlcl9zdGF0cyhz
cmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKQorCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhw
ZWN0YXRpb25zLm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KAorICAgICAgICAgICAgcmVzdWx0
LmZpbGVuYW1lLCByZXN1bHQudHlwZSwgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cykKKyAgICAg
ICAgZXhwX3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygK
KyAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSkKKyAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4
cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUpCisgICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwg
Z290X3N0cikKKworICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5LmFkZChyZXN1
bHQsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Byb2dyZXNzKHNlbGYu
X2N1cnJlbnRfcmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fcmV0cnlpbmcsIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKworICAgIGRlZiBo
YW5kbGVfZmluaXNoZWRfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFw
c2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9ncm91cF9zdGF0c1tsaXN0X25hbWVdID0gKG51bV90
ZXN0cywgZWxhcHNlZF90aW1lKQorCisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3Jj
LCBleGNlcHRpb25faW5mbyk6CisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNl
cHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KKworICAgIGRlZiBfdXBkYXRlX3dvcmtl
cl9zdGF0cyhzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5f
d29ya2VyX3N0YXRzW3NyY11bJ3RvdGFsX3RpbWUnXSArPSBlbGFwc2VkX3RpbWUKKyAgICAgICAg
c2VsZi5fd29ya2VyX3N0YXRzW3NyY11bJ251bV90ZXN0cyddICs9IDEKKyAgICAgICAgc2VsZi5f
YWxsX3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKIAogICAgIGRlZiBfY2xvYmJlcl9vbGRfcmVzdWx0
cyhzZWxmKToKICAgICAgICAgIyBKdXN0IGNsb2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJlc3VsdHMg
ZGlyZWN0b3JpZXMgc2luY2UgdGhlIG90aGVyCkBAIC0xNTYwLDggKzE1NzEsOCBAQCBkZWYgcGFy
c2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICAgICAgaGVscD0iTnVtYmVyIG9mIER1bXBSZW5k
ZXJUcmVlcyB0byBydW4gaW4gcGFyYWxsZWwuIiksCiAgICAgICAgICMgRklYTUU6IERpc3BsYXkg
ZGVmYXVsdCBudW1iZXIgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgd2lsbCBydW4uCiAgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdvcmtlci1tb2RlbCIsIGFjdGlvbj0ic3RvcmUiLAot
ICAgICAgICAgICAgZGVmYXVsdD0idGhyZWFkcyIsIGhlbHA9KCJjb250cm9scyB3b3JrZXIgbW9k
ZWwuIFZhbGlkIHZhbHVlcyBhcmUgIgotICAgICAgICAgICAgIidpbmxpbmUnIGFuZCAndGhyZWFk
cycgKGRlZmF1bHQpLiIpKSwKKyAgICAgICAgICAgIGRlZmF1bHQ9InByb2Nlc3NlcyIsIGhlbHA9
ImNvbnRyb2xzIHdvcmtlciBtb2RlbC4gVmFsaWQgdmFsdWVzIGFyZSAiCisgICAgICAgICAgICAi
J2lubGluZScsICd0aHJlYWRzJywgYW5kICdwcm9jZXNzZXMnIChkZWZhdWx0KS4iKSwKICAgICAg
ICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFsbGVsIiwK
ICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAg
ICAgICBoZWxwPSJydW4gYWxsIHRlc3RzIGluIHBhcmFsbGVsIiksCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3Vu
aXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0c191bml0dGVzdC5weQppbmRleCAyMGE0YWMwZWFkYTc5NTY1MDU5OWY5MTAw
YjFhMzBmMTNmZWE2MjcwLi4wZmRjOWQ1YWY4Njg4N2IwNjJlZDBlZjk4Y2I2NmJlMmYxZWU3ODFk
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTI3Myw4
ICsyNzMsMTYgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVm
IHRlc3RfcnVuX2ZvcmNlKHNlbGYpOgogICAgICAgICAjIFRoaXMgcmFpc2VzIGFuIGV4Y2VwdGlv
biBiZWNhdXNlIHdlIHJ1bgotICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5o
dG1sLCB3aGljaCBpcyBub3JtYWxseSBTS0lQcGVkLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwgWyctLWZvcmNlJ10pCisgICAgICAgICMgZmFpbHVy
ZXMvZXhwZWN0ZWQvZXhjZXB0aW9uLmh0bWwgYW5kCisgICAgICAgICMgZmFpbHVyZXMvZXhwZWN0
ZWQva2V5Ym9hcmQsIHdoaWNoIGFyZSBub3JtYWxseSBTS0lQcGVkLgorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBsb2dnaW5nX3J1bihbJy0tZm9yY2UnXSkKKyAgICAgICAgICAgIHRlc3RfcGFz
c2VkID0gRmFsc2UKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICB0ZXN0
X3Bhc3NlZCA9IFRydWUKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAg
ICAgICAgdGVzdF9wYXNzZWQgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X3Bh
c3NlZCkKIAogICAgIGRlZiB0ZXN0X3J1bl9wYXJ0KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhh
dCB3ZSBhY3R1YWxseSBzZWxlY3QgdGhlIHJpZ2h0IHBhcnQKQEAgLTM3OCw4ICszODYsNyBAQCBj
bGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywgJ3RocmVhZHMnXSkpCiAKICAgICBkZWYg
dGVzdF93b3JrZXJfbW9kZWxfX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IFsnLS13b3JrZXItbW9kZWwnLCAncHJvY2Vzc2VzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShwYXNzaW5nX3J1bihbJy0td29ya2VyLW1vZGVsJywgJ3Byb2Nlc3NlcyddKSkKIAogICAgIGRl
ZiB0ZXN0X3dvcmtlcl9tb2RlbF9fdW5rbm93bihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sCkBAIC00ODQsOCArNDkxLDggQEAgY2xhc3Mg
VGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3NoYXJkX3Rl
c3RzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBfc2hhcmRfdGVzdHMgaW4gcnVuX3dlYmtp
dF90ZXN0cy5UZXN0UnVubmVyIHJlYWxseQogICAgICAgICAjIHB1dCB0aGUgaHR0cCB0ZXN0cyBm
aXJzdCBpbiB0aGUgcXVldWUuCi0gICAgICAgIHJ1bm5lciA9IFRlc3RSdW5uZXJXcmFwcGVyKHBv
cnQ9TW9jaygpLCBvcHRpb25zPU1vY2soKSwKLSAgICAgICAgICAgIHByaW50ZXI9TW9jaygpLCBt
ZXNzYWdlX2Jyb2tlcj1Nb2NrKCkpCisgICAgICAgIHJ1bm5lciA9IFRlc3RSdW5uZXJXcmFwcGVy
KHBvcnQ9TW9jaygpLCBvcHRpb25zPU1vY2soKSwgcHJpbnRlcj1Nb2NrKCksCisgICAgICAgICAg
ICBtZXNzYWdlX2Jyb2tlcj1Nb2NrKCkpCiAKICAgICAgICAgdGVzdF9saXN0ID0gWwogICAgICAg
ICAgICJMYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdW5pY29kZS5odG0iLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75348</attachid>
            <date>2010-12-01 20:02:54 -0800</date>
            <delta_ts>2010-12-02 03:01:40 -0800</delta_ts>
            <desc>sync to r73080, clean up broker abstraction a bunch, clean up dump_render_tree_thread to track bug 50367</desc>
            <filename>bug-48820-20101201200253.patch</filename>
            <type>text/plain</type>
            <size>77333</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwZThlYTZlNTdiM2Y4YzQ2M2ZkMDE3MTA3YjRhZTkzZDY0ODNkOGE0Li5lZTkyOGZi
YTEwZmZhZjAxZGE3OTMyYzJjNTVlMzY0NDEzNjdhMzFmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjEgQEAK
IDIwMTAtMTItMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbnJ3dCAtIGNoZWNrcG9p
bnQgbXVsdGlwcm9jZXNzIHdvcmsKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2Vf
YnJva2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5OgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5w
eToKKworMjAxMC0xMi0wMSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKwog
ICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgogCiAgICAgICAgIG5ldy1ydW4td2Via2l0
LXRlc3RzOiBhZGQgYSAtLWRyeS1ydW4gLyAtbiBmbGFnCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRl
cl90cmVlX3RocmVhZC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CmluZGV4IGZkYjhk
YTZjYzgwYjczZWU3ZGZiN2Q2MWQ5ZGJiY2JiYWJiY2I0NzguLmMzMTM1OTkwNmY3ZmQyMGNmNDMw
MjYwYzc3Nzg1NzM3ZmU4N2U4ZGEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CkBAIC00MiwxMCArNDIsOCBAQCBp
bXBvcnQgY29kZWNzCiBpbXBvcnQgY29weQogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwotaW1w
b3J0IFF1ZXVlCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3lzCi1pbXBvcnQgdGhyZWFkCiBpbXBv
cnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogCkBAIC01NCw2ICs1Miw3IEBAIGZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IGltYWdlX2RpZmYKIGZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRlc3RfdHlwZV9iYXNlCiBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVzIGltcG9ydCB0ZXh0X2RpZmYKIAoraW1wb3J0
IG1lc3NhZ2VfYnJva2VyCiBpbXBvcnQgdGVzdF9mYWlsdXJlcwogaW1wb3J0IHRlc3Rfb3V0cHV0
CiBpbXBvcnQgdGVzdF9yZXN1bHRzCkBAIC02MiwyMTcgKzYxLDIyIEBAIF9sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLiIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQiKQogCiAKLWRlZiBf
ZXhwZWN0ZWRfdGVzdF9vdXRwdXQocG9ydCwgZmlsZW5hbWUpOgotICAgICIiIlJldHVybnMgYW4g
ZXhwZWN0ZWQgVGVzdE91dHB1dCBvYmplY3QuIiIiCi0gICAgcmV0dXJuIHRlc3Rfb3V0cHV0LlRl
c3RPdXRwdXQocG9ydC5leHBlY3RlZF90ZXh0KGZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3J0LmV4cGVjdGVkX2ltYWdlKGZpbGVuYW1lKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LmV4cGVjdGVkX2NoZWNrc3VtKGZpbGVuYW1l
KSkKLQotZGVmIF9wcm9jZXNzX291dHB1dChwb3J0LCBvcHRpb25zLCB0ZXN0X2lucHV0LCB0ZXN0
X3R5cGVzLCB0ZXN0X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0LCB3b3Jr
ZXJfbmFtZSk6Ci0gICAgIiIiUmVjZWl2ZXMgdGhlIG91dHB1dCBmcm9tIGEgRHVtcFJlbmRlclRy
ZWUgcHJvY2Vzcywgc3ViamVjdHMgaXQgdG8gYQotICAgIG51bWJlciBvZiB0ZXN0cywgYW5kIHJl
dHVybnMgYSBsaXN0IG9mIGZhaWx1cmUgdHlwZXMgdGhlIHRlc3QgcHJvZHVjZWQuCi0KLSAgICBB
cmdzOgotICAgICAgcG9ydDogcG9ydC1zcGVjaWZpYyBob29rcwotICAgICAgb3B0aW9uczogY29t
bWFuZCBsaW5lIG9wdGlvbnMgYXJndW1lbnQgZnJvbSBvcHRwYXJzZQotICAgICAgcHJvYzogYW4g
YWN0aXZlIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MKLSAgICAgIHRlc3RfaW5wdXQ6IE9iamVjdCBj
b250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lIGFuZCB0aW1lb3V0Ci0gICAgICB0ZXN0X3R5cGVz
OiBsaXN0IG9mIHRlc3QgdHlwZXMgdG8gc3ViamVjdCB0aGUgb3V0cHV0IHRvCi0gICAgICB0ZXN0
X2FyZ3M6IGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gZWFjaCB0ZXN0Ci0gICAgICB0ZXN0X291
dHB1dDogYSBUZXN0T3V0cHV0IG9iamVjdCBjb250YWluaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHRl
c3QKLSAgICAgIHdvcmtlcl9uYW1lOiB3b3JrZXIgbmFtZSBmb3IgbG9nZ2luZwotCi0gICAgUmV0
dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdAotICAgICIiIgotICAgIGZhaWx1cmVzID0gW10KLQot
ICAgIGlmIHRlc3Rfb3V0cHV0LmNyYXNoOgotICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9m
YWlsdXJlcy5GYWlsdXJlQ3Jhc2goKSkKLSAgICBpZiB0ZXN0X291dHB1dC50aW1lb3V0OgotICAg
ICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQotCi0g
ICAgdGVzdF9uYW1lID0gcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmls
ZW5hbWUpCi0gICAgaWYgdGVzdF9vdXRwdXQuY3Jhc2g6Ci0gICAgICAgIF9sb2cuZGVidWcoIiVz
IFN0YWNrdHJhY2UgZm9yICVzOlxuJXMiICUgKHdvcmtlcl9uYW1lLCB0ZXN0X25hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0
LmVycm9yKSkKLSAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5yZXN1bHRz
X2RpcmVjdG9yeSwgdGVzdF9uYW1lKQotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguc3BsaXRl
eHQoZmlsZW5hbWUpWzBdICsgIi1zdGFjay50eHQiCi0gICAgICAgIHBvcnQubWF5YmVfbWFrZV9k
aXJlY3Rvcnkob3MucGF0aC5zcGxpdChmaWxlbmFtZSlbMF0pCi0gICAgICAgIHdpdGggY29kZWNz
Lm9wZW4oZmlsZW5hbWUsICJ3YiIsICJ1dGYtOCIpIGFzIGZpbGU6Ci0gICAgICAgICAgICBmaWxl
LndyaXRlKHRlc3Rfb3V0cHV0LmVycm9yKQotICAgIGVsaWYgdGVzdF9vdXRwdXQuZXJyb3I6Ci0g
ICAgICAgIF9sb2cuZGVidWcoIiVzICVzIG91dHB1dCBzdGRlcnIgbGluZXM6XG4lcyIgJSAod29y
a2VyX25hbWUsIHRlc3RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dC5lcnJvcikpCi0KLSAgICBleHBlY3RlZF90
ZXN0X291dHB1dCA9IF9leHBlY3RlZF90ZXN0X291dHB1dChwb3J0LCB0ZXN0X2lucHV0LmZpbGVu
YW1lKQotCi0gICAgIyBDaGVjayB0aGUgb3V0cHV0IGFuZCBzYXZlIHRoZSByZXN1bHRzLgotICAg
IHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgIHRpbWVfZm9yX2RpZmZzID0ge30KLSAgICBm
b3IgdGVzdF90eXBlIGluIHRlc3RfdHlwZXM6Ci0gICAgICAgIHN0YXJ0X2RpZmZfdGltZSA9IHRp
bWUudGltZSgpCi0gICAgICAgIG5ld19mYWlsdXJlcyA9IHRlc3RfdHlwZS5jb21wYXJlX291dHB1
dChwb3J0LCB0ZXN0X2lucHV0LmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdF9hcmdzLCB0ZXN0X291dHB1dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3Rlc3Rfb3V0cHV0
KQotICAgICAgICAjIERvbid0IGFkZCBhbnkgbW9yZSBmYWlsdXJlcyBpZiB3ZSBhbHJlYWR5IGhh
dmUgYSBjcmFzaCwgc28gd2UgZG9uJ3QKLSAgICAgICAgIyBkb3VibGUtcmVwb3J0IHRob3NlIHRl
c3RzLiBXZSBkbyBkb3VibGUtcmVwb3J0IGZvciB0aW1lb3V0cyBzaW5jZQotICAgICAgICAjIHdl
IHN0aWxsIHdhbnQgdG8gc2VlIHRoZSB0ZXh0IGFuZCBpbWFnZSBvdXRwdXQuCi0gICAgICAgIGlm
IG5vdCB0ZXN0X291dHB1dC5jcmFzaDoKLSAgICAgICAgICAgIGZhaWx1cmVzLmV4dGVuZChuZXdf
ZmFpbHVyZXMpCi0gICAgICAgIHRpbWVfZm9yX2RpZmZzW3Rlc3RfdHlwZS5fX2NsYXNzX18uX19u
YW1lX19dID0gKAotICAgICAgICAgICAgdGltZS50aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUpCi0K
LSAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZf
dGltZQotICAgIHJldHVybiB0ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdCh0ZXN0X2lucHV0LmZpbGVu
YW1lLCBmYWlsdXJlcywgdGVzdF9vdXRwdXQudGVzdF90aW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZz
KQotCi0KLWRlZiBfcGFkX3RpbWVvdXQodGltZW91dCk6Ci0gICAgIiIiUmV0dXJucyBhIHNhZmUg
bXVsdGlwbGUgb2YgdGhlIHBlci10ZXN0IHRpbWVvdXQgdmFsdWUgdG8gdXNlCi0gICAgdG8gZGV0
ZWN0IGh1bmcgdGVzdCB0aHJlYWRzLgotCi0gICAgIiIiCi0gICAgIyBXaGVuIHdlJ3JlIHJ1bm5p
bmcgb25lIHRlc3QgcGVyIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MsIHdlIGNhbgotICAgICMgZW5m
b3JjZSBhIGhhcmQgdGltZW91dC4gIFRoZSBEdW1wUmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIu
NXgKLSAgICAjIHRoZSB0aW1lb3V0OyB3ZSB3YW50IHRvIGJlIGxhcmdlciB0aGFuIHRoYXQuCi0g
ICAgcmV0dXJuIHRpbWVvdXQgKiAzCi0KLQotZGVmIF9taWxsaXNlY29uZHNfdG9fc2Vjb25kcyht
c2Vjcyk6Ci0gICAgcmV0dXJuIGZsb2F0KG1zZWNzKSAvIDEwMDAuMAotCi0KLWRlZiBfc2hvdWxk
X2ZldGNoX2V4cGVjdGVkX2NoZWNrc3VtKG9wdGlvbnMpOgotICAgIHJldHVybiBvcHRpb25zLnBp
eGVsX3Rlc3RzIGFuZCBub3QgKG9wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIG9wdGlvbnMucmVzZXRf
cmVzdWx0cykKLQotCi1kZWYgX3J1bl9zaW5nbGVfdGVzdChwb3J0LCBvcHRpb25zLCB0ZXN0X2lu
cHV0LCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsIGRyaXZlciwgd29ya2VyX25hbWUpOgotICAgICMg
RklYTUU6IFB1bGwgdGhpcyBpbnRvIFRlc3RTaGVsbFRocmVhZC5fcnVuKCkuCi0KLSAgICAjIFRo
ZSBpbWFnZSBoYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUK
LSAgICAjIGNoZWNrc3VtcyBtYXRjaCwgc28gaXQgc2hvdWxkIGJlIHNldCB0byBhIGJsYW5rIHZh
bHVlIGlmIHdlCi0gICAgIyBhcmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNlbGluZS4gIChPdGhlcndp
c2UsIGFuIGltYWdlIGZyb20gYQotICAgICMgcHJldmlvdXMgcnVuIHdpbGwgYmUgY29waWVkIGlu
dG8gdGhlIGJhc2VsaW5lLiIiIgotICAgIGlmIF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tz
dW0ob3B0aW9ucyk6Ci0gICAgICAgIHRlc3RfaW5wdXQuaW1hZ2VfaGFzaCA9IHBvcnQuZXhwZWN0
ZWRfY2hlY2tzdW0odGVzdF9pbnB1dC5maWxlbmFtZSkKLSAgICB0ZXN0X291dHB1dCA9IGRyaXZl
ci5ydW5fdGVzdCh0ZXN0X2lucHV0KQotICAgIHJldHVybiBfcHJvY2Vzc19vdXRwdXQocG9ydCwg
b3B0aW9ucywgdGVzdF9pbnB1dCwgdGVzdF90eXBlcywgdGVzdF9hcmdzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQsIHdvcmtlcl9uYW1lKQotCi0KLWNsYXNzIFNpbmds
ZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6Ci0gICAgIiIiVGhyZWFkIHdyYXBwZXIgZm9y
IHJ1bm5pbmcgYSBzaW5nbGUgdGVzdCBmaWxlLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lLAotICAgICAgICAgICAg
ICAgICB0ZXN0X2lucHV0LCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MpOgotICAgICAgICAiIiIKLSAg
ICAgICAgQXJnczoKLSAgICAgICAgICBwb3J0OiBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQtc3Bl
Y2lmaWMgaG9va3MKLSAgICAgICAgICBvcHRpb25zOiBjb21tYW5kIGxpbmUgYXJndW1lbnQgb2Jq
ZWN0IGZyb20gb3B0cGFyc2UKLSAgICAgICAgICB3b3JrZXJfbnVtYmVyOiB3b3JrZXIgbnVtYmVy
IGZvciB0ZXN0cwotICAgICAgICAgIHdvcmtlcl9uYW1lOiBmb3IgbG9nZ2luZwotICAgICAgICAg
IHRlc3RfaW5wdXQ6IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lIGFuZCB0aW1l
b3V0Ci0gICAgICAgICAgdGVzdF90eXBlczogQSBsaXN0IG9mIFRlc3RUeXBlIG9iamVjdHMgdG8g
cnVuIHRoZSB0ZXN0IG91dHB1dAotICAgICAgICAgICAgICBhZ2FpbnN0LgotICAgICAgICAgIHRl
c3RfYXJnczogQSBUZXN0QXJndW1lbnRzIG9iamVjdCB0byBwYXNzIHRvIGVhY2ggVGVzdFR5cGUu
Ci0gICAgICAgICIiIgotCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikK
LSAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKLSAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlv
bnMKLSAgICAgICAgc2VsZi5fdGVzdF9pbnB1dCA9IHRlc3RfaW5wdXQKLSAgICAgICAgc2VsZi5f
dGVzdF90eXBlcyA9IHRlc3RfdHlwZXMKLSAgICAgICAgc2VsZi5fdGVzdF9hcmdzID0gdGVzdF9h
cmdzCi0gICAgICAgIHNlbGYuX2RyaXZlciA9IE5vbmUKK2NsYXNzIFdvcmtlcihvYmplY3QpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICBz
dXBlcihXb3JrZXIsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fYnJva2VyID0gYnJv
a2VyCiAgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCi0gICAgICAg
IHNlbGYuX25hbWUgPSB3b3JrZXJfbmFtZQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAg
c2VsZi5fY292ZXJlZF9ydW4oKQotCi0gICAgZGVmIF9jb3ZlcmVkX3J1bihzZWxmKToKLSAgICAg
ICAgIyBGSVhNRTogdGhpcyBpcyBhIHNlcGFyYXRlIHJvdXRpbmUgdG8gd29yayBhcm91bmQgYSBi
dWcKLSAgICAgICAgIyBpbiBjb3ZlcmFnZTogc2VlIGh0dHA6Ly9iaXRidWNrZXQub3JnL25lZC9j
b3ZlcmFnZXB5L2lzc3VlLzg1LgotICAgICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNy
ZWF0ZV9kcml2ZXIoc2VsZi5fd29ya2VyX251bWJlcikKLSAgICAgICAgc2VsZi5fZHJpdmVyLnN0
YXJ0KCkKLSAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHQgPSBfcnVuX3NpbmdsZV90ZXN0KHNlbGYu
X3BvcnQsIHNlbGYuX29wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl90ZXN0X2lucHV0LCBzZWxmLl90ZXN0X3R5cGVzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9hcmdzLCBzZWxm
Ll9kcml2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9uYW1lKQotICAgICAgICBzZWxmLl9kcml2ZXIuc3RvcCgpCi0KLSAgICBkZWYgZ2V0X3Rl
c3RfcmVzdWx0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9yZXN1bHQKLQotCi1j
bGFzcyBXYXRjaGFibGVUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6Ci0gICAgIiIiVGhpcyBjbGFz
cyBhYnN0cmFjdHMgYW4gaW50ZXJmYWNlIHVzZWQgYnkKLSAgICBydW5fd2Via2l0X3Rlc3RzLlRl
c3RSdW5uZXIuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoIGZvciB0aHJlYWQKLSAgICBtYW5h
Z2VtZW50LiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgdGhyZWFkaW5nLlRo
cmVhZC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCi0gICAg
ICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gTm9uZQotICAgICAgICBzZWxmLl9uZXh0X3RpbWVv
dXQgPSBOb25lCi0gICAgICAgIHNlbGYuX3RocmVhZF9pZCA9IE5vbmUKLQotICAgIGRlZiBjYW5j
ZWwoc2VsZik6Ci0gICAgICAgICIiIlNldCBhIGZsYWcgdGVsbGluZyB0aGlzIHRocmVhZCB0byBx
dWl0LiIiIgotICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRydWUKLQotICAgIGRlZiBjbGVhcl9u
ZXh0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgICIiIk1hcmsgYSBmbGFnIHRlbGxpbmcgdGhpcyB0
aHJlYWQgdG8gc3RvcCBzZXR0aW5nIHRpbWVvdXRzLiIiIgotICAgICAgICBzZWxmLl90aW1lb3V0
ID0gMAotCi0gICAgZGVmIGV4Y2VwdGlvbl9pbmZvKHNlbGYpOgotICAgICAgICAiIiJJZiBydW4o
KSB0ZXJtaW5hdGVkIG9uIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiwgcmV0dXJuIGl0IGhlcmUKLSAg
ICAgICAgKCh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKSB0dXBsZSkuCi0gICAgICAgIFJldHVybnMg
Tm9uZSBpZiBydW4oKSB0ZXJtaW5hdGVkIG5vcm1hbGx5LiBNZWFudCB0byBiZSBjYWxsZWQgYWZ0
ZXIKLSAgICAgICAgam9pbmluZyB0aGlzIHRocmVhZC4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYu
X2V4Y2VwdGlvbl9pbmZvCi0KLSAgICBkZWYgaWQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBh
IHRocmVhZCBpZGVudGlmaWVyLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fdGhyZWFkX2lkCi0K
LSAgICBkZWYgbmV4dF90aW1lb3V0KHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHRpbWUg
dGhlIHRlc3QgaXMgc3VwcG9zZWQgdG8gZmluaXNoIGJ5LiIiIgotICAgICAgICByZXR1cm4gc2Vs
Zi5fbmV4dF90aW1lb3V0Ci0KKyAgICAgICAgc2VsZi5fbmFtZSA9ICd3b3JrZXIvJWQnICUgd29y
a2VyX251bWJlcgogCi1jbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgd29ya2VyX251bWJlciwgd29ya2Vy
X25hbWUsCi0gICAgICAgICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1
ZSk6Ci0gICAgICAgICIiIkluaXRpYWxpemUgYWxsIHRoZSBsb2NhbCBzdGF0ZSBmb3IgdGhpcyBE
dW1wUmVuZGVyVHJlZSB0aHJlYWQuCisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IEZhbHNlCisg
ICAgICAgIHNlbGYuX2RvbmUgPSBGYWxzZQogCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgcG9y
dDogaW50ZXJmYWNlIHRvIHBvcnQtc3BlY2lmaWMgaG9va3MKLSAgICAgICAgICBvcHRpb25zOiBj
b21tYW5kIGxpbmUgb3B0aW9ucyBhcmd1bWVudCBmcm9tIG9wdHBhcnNlCi0gICAgICAgICAgd29y
a2VyX251bWJlcjogaWRlbnRpZmllciBmb3IgYSBwYXJ0aWN1bGFyIHdvcmtlciB0aHJlYWQuCi0g
ICAgICAgICAgd29ya2VyX25hbWU6IGZvciBsb2dnaW5nLgotICAgICAgICAgIGZpbGVuYW1lX2xp
c3RfcXVldWU6IEEgdGhyZWFkIHNhZmUgUXVldWUgY2xhc3MgdGhhdCBjb250YWlucyBsaXN0cwot
ICAgICAgICAgICAgICBvZiB0dXBsZXMgb2YgKGZpbGVuYW1lLCB1cmkpIHBhaXJzLgotICAgICAg
ICAgIHJlc3VsdF9xdWV1ZTogQSB0aHJlYWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29u
dGFpbgotICAgICAgICAgICAgICBzZXJpYWxpemVkIFRlc3RSZXN1bHQgb2JqZWN0cy4KLSAgICAg
ICAgIiIiCi0gICAgICAgIFdhdGNoYWJsZVRocmVhZC5fX2luaXRfXyhzZWxmKQotICAgICAgICBz
ZWxmLl9wb3J0ID0gcG9ydAotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAgICAg
ICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLl9uYW1l
ID0gd29ya2VyX25hbWUKLSAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZSA9IGZpbGVu
YW1lX2xpc3RfcXVldWUKLSAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gcmVzdWx0X3F1ZXVl
Ci0gICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBbXQorICAgICAgICBzZWxmLl9wb3J0ID0g
YnJva2VyLl9wb3J0CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBicm9rZXIuX29wdGlvbnMKKyAg
ICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBz
ZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKICAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQotICAg
ICAgICBzZWxmLl90ZXN0X2dyb3VwX3RpbWluZ19zdGF0cyA9IHt9Ci0gICAgICAgIHNlbGYuX3Rl
c3RfcmVzdWx0cyA9IFtdCi0gICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKLSAgICAgICAgc2Vs
Zi5fc3RhcnRfdGltZSA9IDAKLSAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gMAogICAgICAgICBz
ZWxmLl9oYXZlX2h0dHBfbG9jayA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0
X2JlZ2luID0gMAotICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgPSAwCiAKICAgICAg
ICAgc2VsZi5fdGVzdF90eXBlcyA9IFtdCiAgICAgICAgIGZvciBjbHMgaW4gc2VsZi5fZ2V0X3Rl
c3RfdHlwZV9jbGFzc2VzKCk6CkBAIC0yODAsMTIgKzg0LDExIEBAIGNsYXNzIFRlc3RTaGVsbFRo
cmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpKQogICAgICAgICBzZWxmLl90
ZXN0X2FyZ3MgPSBzZWxmLl9nZXRfdGVzdF9hcmdzKHdvcmtlcl9udW1iZXIpCiAKLSAgICAgICAg
IyBDdXJyZW50IGdyb3VwIG9mIHRlc3RzIHdlJ3JlIHJ1bm5pbmcuCi0gICAgICAgIHNlbGYuX2N1
cnJlbnRfZ3JvdXAgPSBOb25lCi0gICAgICAgICMgTnVtYmVyIG9mIHRlc3RzIGluIHNlbGYuX2N1
cnJlbnRfZ3JvdXAuCi0gICAgICAgIHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2dyb3VwID0g
Tm9uZQotICAgICAgICAjIFRpbWUgYXQgd2hpY2ggd2Ugc3RhcnRlZCBydW5uaW5nIHRlc3RzIGZy
b20gc2VsZi5fY3VycmVudF9ncm91cC4KLSAgICAgICAgc2VsZi5fY3VycmVudF9ncm91cF9zdGFy
dF90aW1lID0gTm9uZQorICAgICAgICAjIEFwcGVuZCB0ZXN0cyB3ZSdyZSBydW5uaW5nIHRvIHRo
ZSBleGlzdGluZyB0ZXN0c19ydW4udHh0IGZpbGUuCisgICAgICAgICMgVGhpcyBpcyBjcmVhdGVk
IGluIHJ1bl93ZWJraXRfdGVzdHMucHk6X1ByZXBhcmVMaXN0c0FuZFByaW50T3V0cHV0LgorICAg
ICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1
bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ0ZXN0c19ydW4udHh0IikKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBjb2RlY3Mu
b3Blbih0ZXN0c19ydW5fZmlsZW5hbWUsICJhIiwgInV0Zi04IikKIAogICAgIGRlZiBfZ2V0X3Rl
c3RfYXJncyhzZWxmLCB3b3JrZXJfbnVtYmVyKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgdHVw
bGUgb2YgYXJndW1lbnRzIGZvciB0ZXN0cyBhbmQgZm9yIER1bXBSZW5kZXJUcmVlLiIiIgpAQCAt
MzAxLDE2MiArMTA0LDExOCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFk
KToKICAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKGltYWdlX2RpZmYuSW1hZ2VEaWZmKQogICAg
ICAgICByZXR1cm4gY2xhc3NlcwogCi0gICAgZGVmIGdldF90ZXN0X2dyb3VwX3RpbWluZ19zdGF0
cyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyBhIGRpY3Rpb25hcnkgbWFwcGluZyB0ZXN0IGdy
b3VwIHRvIGEgdHVwbGUgb2YKLSAgICAgICAgKG51bWJlciBvZiB0ZXN0cyBpbiB0aGF0IGdyb3Vw
LCB0aW1lIHRvIHJ1biB0aGUgdGVzdHMpIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl90ZXN0X2dy
b3VwX3RpbWluZ19zdGF0cwotCi0gICAgZGVmIGdldF90ZXN0X3Jlc3VsdHMoc2VsZik6Ci0gICAg
ICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiBhbGwgdGVzdHMgcnVuIG9uIHRoaXMgdGhyZWFkLgor
ICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6CisgICAgICAgIHBhc3MKIAotICAgICAgICBU
aGlzIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHBlci10aHJlYWQgc3RhdGlzdGljcy4KLQotICAgICAg
ICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfcmVzdWx0cworICAgIGRlZiBjYW5jZWwo
c2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKIAotICAgIGRlZiBnZXRfdG90
YWxfdGltZShzZWxmKToKLSAgICAgICAgcmV0dXJuIG1heChzZWxmLl9zdG9wX3RpbWUgLSBzZWxm
Ll9zdGFydF90aW1lIC0KLSAgICAgICAgICAgICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF90
aW1lKCksIDAuMCkKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25h
bWUKIAotICAgIGRlZiBnZXRfbnVtX3Rlc3RzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5f
bnVtX3Rlc3RzCisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9k
b25lIG9yIHNlbGYuX2NhbmNlbGxlZAogCiAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgIiIi
RGVsZWdhdGUgbWFpbiB3b3JrIHRvIGEgaGVscGVyIG1ldGhvZCBhbmQgd2F0Y2ggZm9yIHVuY2F1
Z2h0Ci0gICAgICAgIGV4Y2VwdGlvbnMuIiIiCi0gICAgICAgIHNlbGYuX2NvdmVyZWRfcnVuKCkK
LQotICAgIGRlZiBfY292ZXJlZF9ydW4oc2VsZik6Ci0gICAgICAgICMgRklYTUU6IHRoaXMgaXMg
YSBzZXBhcmF0ZSByb3V0aW5lIHRvIHdvcmsgYXJvdW5kIGEgYnVnCi0gICAgICAgICMgaW4gY292
ZXJhZ2U6IHNlZSBodHRwOi8vYml0YnVja2V0Lm9yZy9uZWQvY292ZXJhZ2VweS9pc3N1ZS84NS4K
LSAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkLmdldF9pZGVudCgpCi0gICAgICAgIHNl
bGYuX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLl9udW1fdGVzdHMgPSAw
CisgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiIgorICAgICAgICBfbG9nLmRlYnVnKCclcyBzdGFy
dGluZycgJSBzZWxmLl9uYW1lKQorCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIF9sb2cuZGVi
dWcoJyVzIHN0YXJ0aW5nJyAlIChzZWxmLmdldE5hbWUoKSkpCi0gICAgICAgICAgICBzZWxmLl9y
dW4odGVzdF9ydW5uZXI9Tm9uZSwgcmVzdWx0X3N1bW1hcnk9Tm9uZSkKLSAgICAgICAgICAgIF9s
b2cuZGVidWcoJyVzIGRvbmUgKCVkIHRlc3RzKScgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuZ2V0X251bV90ZXN0cygpKSkKKyAgICAgICAgICAgIHNlbGYu
X2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKHNlbGYsIG1lc3NhZ2VfYnJva2VyLkFOWV9XT1JLRVIp
CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5pc19kb25lKCk6CisgICAgICAgICAgICAgICAgcmFp
c2UgQXNzZXJ0aW9uRXJyb3IoIiVzOiByYW4gb3V0IG9mIG1lc3NhZ2VzIGluIHdvcmtlciBxdWV1
ZS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzZWxmLl9uYW1lKQor
CiAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgIHNlbGYuX2V4
Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIiVz
IGludGVycnVwdGVkIiAlIHNlbGYuZ2V0TmFtZSgpKQorICAgICAgICAgICAgZXhjZXB0aW9uX21z
ZyA9ICIsIGludGVycnVwdGVkIgogICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAjIFNhdmUg
dGhlIGV4Y2VwdGlvbiBmb3Igb3VyIGNhbGxlciB0byBzZWUuCi0gICAgICAgICAgICBzZWxmLl9l
eGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgICAgICBzZWxmLl9zdG9wX3Rp
bWUgPSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgX2xvZy5lcnJvcignJXMgZHlpbmcsIGV4Y2Vw
dGlvbiByYWlzZWQnICUgc2VsZi5nZXROYW1lKCkpCi0KLSAgICAgICAgc2VsZi5fc3RvcF90aW1l
ID0gdGltZS50aW1lKCkKLQotICAgIGRlZiBydW5faW5fbWFpbl90aHJlYWQoc2VsZiwgdGVzdF9y
dW5uZXIsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIiIiVGhpcyBob29rIGFsbG93cyB1cyB0
byBydW4gdGhlIHRlc3RzIGZyb20gdGhlIG1haW4gdGhyZWFkIGlmCi0gICAgICAgIC0tbnVtLXRl
c3Qtc2hlbGxzPT0xLCBpbnN0ZWFkIG9mIGhhdmluZyB0byBhbHdheXMgcnVuIHR3byBvciBtb3Jl
Ci0gICAgICAgIHRocmVhZHMuIFRoaXMgYWxsb3dzIHVzIHRvIGRlYnVnIHRoZSB0ZXN0IGhhcm5l
c3Mgd2l0aG91dCBoYXZpbmcgdG8KLSAgICAgICAgZG8gbXVsdGktdGhyZWFkZWQgZGVidWdnaW5n
LiIiIgotICAgICAgICBzZWxmLl9ydW4odGVzdF9ydW5uZXIsIHJlc3VsdF9zdW1tYXJ5KQotCi0g
ICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiQ2xlYW4gdXAgaHR0cCBsb2NrIGFuZCBz
ZXQgYSBmbGFnIHRlbGxpbmcgdGhpcyB0aHJlYWQgdG8gcXVpdC4iIiIKLSAgICAgICAgc2VsZi5f
c3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0gICAgICAgIFdhdGNoYWJsZVRocmVhZC5jYW5jZWwo
c2VsZikKLQotICAgIGRlZiBuZXh0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0
aGUgdGltZSB0aGUgdGVzdCBpcyBzdXBwb3NlZCB0byBmaW5pc2ggYnkuIiIiCi0gICAgICAgIGlm
IHNlbGYuX25leHRfdGltZW91dDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVv
dXQgKyBzZWxmLl9odHRwX2xvY2tfd2FpdF90aW1lKCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX25l
eHRfdGltZW91dAotCi0gICAgZGVmIF9odHRwX2xvY2tfd2FpdF90aW1lKHNlbGYpOgotICAgICAg
ICAiIiJSZXR1cm4gdGhlIHRpbWUgd2hhdCBodHRwIGxvY2tpbmcgdGFrZXMuIiIiCi0gICAgICAg
IGlmIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luID09IDA6Ci0gICAgICAgICAgICByZXR1cm4g
MAotICAgICAgICBpZiBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgPT0gMDoKLSAgICAgICAgICAg
IHJldHVybiB0aW1lLnRpbWUoKSAtIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luCi0gICAgICAg
IHJldHVybiBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgLSBzZWxmLl9odHRwX2xvY2tfd2FpdF9i
ZWdpbgotCi0gICAgZGVmIF9ydW4oc2VsZiwgdGVzdF9ydW5uZXIsIHJlc3VsdF9zdW1tYXJ5KToK
LSAgICAgICAgIiIiTWFpbiB3b3JrIGVudHJ5IHBvaW50IG9mIHRoZSB0aHJlYWQuIEJhc2ljYWxs
eSB3ZSBwdWxsIHVybHMgZnJvbSB0aGUKLSAgICAgICAgZmlsZW5hbWUgcXVldWUgYW5kIHJ1biB0
aGUgdGVzdHMgdW50aWwgd2UgcnVuIG91dCBvZiB1cmxzLgotCi0gICAgICAgIElmIHRlc3RfcnVu
bmVyIGlzIG5vdCBOb25lLCB0aGVuIHdlIGNhbGwgdGVzdF9ydW5uZXIuVXBkYXRlU3VtbWFyeSgp
Ci0gICAgICAgIHdpdGggdGhlIHJlc3VsdHMgb2YgZWFjaCB0ZXN0LiIiIgotICAgICAgICBiYXRj
aF9zaXplID0gc2VsZi5fb3B0aW9ucy5iYXRjaF9zaXplCi0gICAgICAgIGJhdGNoX2NvdW50ID0g
MAotCi0gICAgICAgICMgQXBwZW5kIHRlc3RzIHdlJ3JlIHJ1bm5pbmcgdG8gdGhlIGV4aXN0aW5n
IHRlc3RzX3J1bi50eHQgZmlsZS4KLSAgICAgICAgIyBUaGlzIGlzIGNyZWF0ZWQgaW4gcnVuX3dl
YmtpdF90ZXN0cy5weTpfUHJlcGFyZUxpc3RzQW5kUHJpbnRPdXRwdXQuCi0gICAgICAgIHRlc3Rz
X3J1bl9maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0
b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RzX3J1
bi50eHQiKQotICAgICAgICB0ZXN0c19ydW5fZmlsZSA9IGNvZGVjcy5vcGVuKHRlc3RzX3J1bl9m
aWxlbmFtZSwgImEiLCAidXRmLTgiKQotCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAg
ICBpZiBzZWxmLl9jYW5jZWxlZDoKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUZXN0aW5n
IGNhbmNlbGxlZCcpCi0gICAgICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQotICAg
ICAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICAgICBpZiBsZW4oc2VsZi5fZmlsZW5hbWVf
bGlzdCkgaXMgMDoKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X2dyb3VwIGlzIG5v
dCBOb25lOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2dyb3VwX3RpbWluZ19zdGF0
c1tzZWxmLl9jdXJyZW50X2dyb3VwXSA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChzZWxm
Ll9udW1fdGVzdHNfaW5fY3VycmVudF9ncm91cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lLnRpbWUoKSAtIHNlbGYuX2N1cnJlbnRfZ3JvdXBfc3RhcnRfdGltZSkKLQotICAgICAgICAg
ICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9ncm91cCwgc2Vs
Zi5fZmlsZW5hbWVfbGlzdCA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVu
YW1lX2xpc3RfcXVldWUuZ2V0X25vd2FpdCgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFF1ZXVl
LkVtcHR5OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdG9wX3NlcnZlcnNfd2l0aF9sb2Nr
KCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAg
ICAgICAgICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4KLQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfZ3JvdXAgPT0g
InRlc3RzX3RvX2h0dHBfbG9jayI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0X3Nl
cnZlcnNfd2l0aF9sb2NrKCkKLSAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2hhdmVfaHR0cF9s
b2NrOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkK
LQotICAgICAgICAgICAgICAgIHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2dyb3VwID0gbGVu
KHNlbGYuX2ZpbGVuYW1lX2xpc3QpCi0gICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9ncm91
cF9zdGFydF90aW1lID0gdGltZS50aW1lKCkKLQotICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNl
bGYuX2ZpbGVuYW1lX2xpc3QucG9wKCkKLQotICAgICAgICAgICAgIyBXZSBoYXZlIGEgdXJsLCBy
dW4gdGVzdHMuCi0gICAgICAgICAgICBiYXRjaF9jb3VudCArPSAxCi0gICAgICAgICAgICBzZWxm
Ll9udW1fdGVzdHMgKz0gMQotICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5
OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhy
ZWFkKHRlc3RfaW5wdXQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHNlbGYuX3J1bl90ZXN0X2luX3RoaXNfdGhyZWFkKHRlc3RfaW5wdXQpCi0KLSAgICAgICAg
ICAgIGZpbGVuYW1lID0gdGVzdF9pbnB1dC5maWxlbmFtZQotICAgICAgICAgICAgdGVzdHNfcnVu
X2ZpbGUud3JpdGUoZmlsZW5hbWUgKyAiXG4iKQotICAgICAgICAgICAgaWYgcmVzdWx0LmZhaWx1
cmVzOgotICAgICAgICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgRHVtcFJlbmRlclRyZWUgaWYg
d2UgbmVlZCB0by4KLSAgICAgICAgICAgICAgICBpZiBsZW4oWzEgZm9yIGYgaW4gcmVzdWx0LmZh
aWx1cmVzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBmLnNob3VsZF9raWxsX2R1bXBfcmVu
ZGVyX3RyZWUoKV0pOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVy
X3RyZWUoKQotICAgICAgICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBiYXRjaCBjb3VudCBzaW5j
ZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgotICAgICAgICAgICAgICAgICAgICBiYXRjaF9jb3Vu
dCA9IDAKLSAgICAgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBtZXNzYWdlKHMpLgotICAg
ICAgICAgICAgICAgIGVycm9yX3N0ciA9ICdcbicuam9pbihbJyAgJyArIGYubWVzc2FnZSgpIGZv
cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiBpbiByZXN1bHQuZmFp
bHVyZXNdKQotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIGZhaWxlZDpcbiVzIiAl
IChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZShmaWxlbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9zdHIpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBfbG9n
LmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSkp
Ci0gICAgICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUucHV0KHJlc3VsdC5kdW1wcygpKQotCi0g
ICAgICAgICAgICBpZiBiYXRjaF9zaXplID4gMCBhbmQgYmF0Y2hfY291bnQgPj0gYmF0Y2hfc2l6
ZToKLSAgICAgICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50Lgot
ICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCi0gICAgICAgICAg
ICAgICAgYmF0Y2hfY291bnQgPSAwCi0KLSAgICAgICAgICAgIGlmIHRlc3RfcnVubmVyOgotICAg
ICAgICAgICAgICAgIHRlc3RfcnVubmVyLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQor
ICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGV4Y2VwdGlvbiByYWlzZWQiCisgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBkb25lJXMiICUgKHNlbGYuX25h
bWUsIGV4Y2VwdGlvbl9tc2cpKQorICAgICAgICAgICAgaWYgZXhjZXB0aW9uX21zZzoKKyAgICAg
ICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgIyBG
SVhNRTogRXh0cmFjdCB0aGUgc3RhY2sgdHJhY2UgaW50byBhIHN0cmluZz8KKyAgICAgICAgICAg
ICAgICBzZWxmLl9wb3N0KCdleGNlcHRpb24nLCBleGNfaW5mb1swXSwgZXhjX2luZm9bMV0sIE5v
bmUpCisgICAgICAgICAgICBzZWxmLl9wb3N0KCdkb25lJykKKyAgICAgICAgICAgIHNlbGYuX2Ns
ZWFudXAoKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBzZWxmLl9raWxsX2R1
bXBfcmVuZGVyX3RyZWUoKQorICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBfbG9jazoKKyAgICAg
ICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAgICAgICBpZiBzZWxmLl90
ZXN0c19ydW5fZmlsZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNsb3NlKCkK
KyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisgICAgZGVmIGhhbmRs
ZV90ZXN0X2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6CisgICAgICAgIGlm
IGxpc3RfbmFtZSA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKKyAgICAgICAgICAgIHNlbGYuX3N0
YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKCkKKworICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1l
KCkKKyAgICAgICAgbnVtX3Rlc3RzID0gMAorICAgICAgICBmb3IgdGVzdF9pbnB1dCBpbiB0ZXN0
X2xpc3Q6CisgICAgICAgICAgICBzZWxmLl9ydW5fdGVzdCh0ZXN0X2lucHV0KQorICAgICAgICAg
ICAgc2VsZi55aWVsZF90b19icm9rZXIoKQorICAgICAgICAgICAgaWYgc2VsZi5fY2FuY2VsbGVk
OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBudW1fdGVzdHMgKz0gMQorCisg
ICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQogCi0gICAgZGVm
IF9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAgICAg
aWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9zdG9wX3NlcnZlcnNf
d2l0aF9sb2NrKCkKKworICAgICAgICBzZWxmLl9wb3N0KCdmaW5pc2hlZF9saXN0JywgbGlzdF9u
YW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxm
LCBzcmMpOgorICAgICAgICAiIiJTdG9wIHJlY2VpdmVkIC0gbm8gbW9yZSB0ZXN0cyB0byBydW4u
IiIiCisgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisKKyAgICBkZWYgX3Bvc3Qoc2VsZiwgbWVz
c2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdzKToKKyAgICAgICAgc2VsZi5fYnJva2VyLnB1dF9tZXNz
YWdlKHNlbGYuX25hbWUsIG1lc3NhZ2VfYnJva2VyLk1BTkFHRVIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlX25hbWUsIG1lc3NhZ2VfYXJncykKKworICAgIGRlZiBf
cnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgICAgIHNlbGYuX3NldF91cF90ZXN0KHRl
c3RfaW5wdXQpCisKKyAgICAgICAgIyBXZSBjYWxjdWxhdGUgaG93IGxvbmcgd2UgZXhwZWN0IHRo
ZSB0ZXN0IHRvIHRha2UuCisgICAgICAgICMKKyAgICAgICAgIyBUaGUgRHVtcFJlbmRlclRyZWUg
d2F0Y2hkb2cgdXNlcyAyLjV4IHRoZSB0aW1lb3V0OyB3ZSB3YW50IHRvIGJlCisgICAgICAgICMg
bGFyZ2VyIHRoYW4gdGhhdC4gV2UgYWxzbyBhZGQgYSBsaXR0bGUgbW9yZSBwYWRkaW5nIGlmIHdl
J3JlCisgICAgICAgICMgcnVubmluZyB0ZXN0cyBpbiBhIHNlcGFyYXRlIHRocmVhZC4KKyAgICAg
ICAgIworICAgICAgICAjIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIHRlc3QgdGlt
ZW91dCBmcm9tIGEKKyAgICAgICAgIyBzdHJpbmcgdmFsdWUgaW4gbWlsbGlzZWNvbmRzIHRvIGEg
ZmxvYXQgZm9yIFB5dGhvbi4KKyAgICAgICAgZHJpdmVyX3RpbWVvdXQgPSAzLjAgKiBmbG9hdCh0
ZXN0X2lucHV0LnRpbWVvdXQpIC8gMTAwMC4wCisgICAgICAgIHRocmVhZF9wYWRkaW5nID0gMS4w
CisgICAgICAgIHRocmVhZF90aW1lb3V0ID0gZHJpdmVyX3RpbWVvdXQgKyB0aHJlYWRfcGFkZGlu
ZworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAgICB0ZXN0
X3RpbWVvdXQgPSB0aHJlYWRfdGltZW91dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGVz
dF90aW1lb3V0ID0gZHJpdmVyX3RpbWVvdXQKKworICAgICAgICBzZWxmLl9wb3N0KCdzdGFydGVk
X3Rlc3QnLCB0ZXN0X2lucHV0LCB0ZXN0X3RpbWVvdXQpCisgICAgICAgIHN0YXJ0ID0gdGltZS50
aW1lKCkKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAg
ICByZXN1bHQgPSBzZWxmLl9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZCh0ZXN0X2lucHV0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhy
ZWFkX3RpbWVvdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9y
dW5fdGVzdF9pbl90aGlzX3RocmVhZCh0ZXN0X2lucHV0KQorCisgICAgICAgIHNlbGYuX3RlYXJf
ZG93bl90ZXN0KHRlc3RfaW5wdXQsIHJlc3VsdCwgdGltZS50aW1lKCkgLSBzdGFydCkKKworICAg
IGRlZiBfc2V0X3VwX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgICAgIHRlc3RfaW5wdXQu
dXJpID0gc2VsZi5fcG9ydC5maWxlbmFtZV90b191cmkodGVzdF9pbnB1dC5maWxlbmFtZSkKKyAg
ICAgICAgaWYgc2VsZi5fc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3VtKCk6CisgICAgICAg
ICAgICB0ZXN0X2lucHV0LmltYWdlX2NoZWNrc3VtID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVj
a3N1bSgKKyAgICAgICAgICAgICAgICB0ZXN0X2lucHV0LmZpbGVuYW1lKQorCisgICAgZGVmIF9z
aG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oc2VsZik6CisgICAgICAgIHJldHVybiAoc2Vs
Zi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgbm90CisgICAgICAgICAgICAgICAgKHNlbGYuX29w
dGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cykpCisKKyAg
ICBkZWYgX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQsIHRocmVh
ZF90aW1lb3V0KToKICAgICAgICAgIiIiUnVuIGEgdGVzdCBpbiBhIHNlcGFyYXRlIHRocmVhZCwg
ZW5mb3JjaW5nIGEgaGFyZCB0aW1lIGxpbWl0LgogCiAgICAgICAgIFNpbmNlIHdlIGNhbiBvbmx5
IGRldGVjdCB0aGUgdGVybWluYXRpb24gb2YgYSB0aHJlYWQsIG5vdCBhbnkgaW50ZXJuYWwKQEAg
LTQ2OSwyMSArMjI4LDIwIEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQp
OgogICAgICAgICBSZXR1cm5zOgogICAgICAgICAgIEEgVGVzdFJlc3VsdAogICAgICAgICAiIiIK
LSAgICAgICAgd29ya2VyID0gU2luZ2xlVGVzdFRocmVhZChzZWxmLl9wb3J0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RfaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fdGVzdF90eXBlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90
ZXN0X2FyZ3MpCi0KLSAgICAgICAgd29ya2VyLnN0YXJ0KCkKLQotICAgICAgICB0aHJlYWRfdGlt
ZW91dCA9IF9taWxsaXNlY29uZHNfdG9fc2Vjb25kcygKLSAgICAgICAgICAgIF9wYWRfdGltZW91
dChpbnQodGVzdF9pbnB1dC50aW1lb3V0KSkpCi0gICAgICAgIHRocmVhZC5fbmV4dF90aW1lb3V0
ID0gdGltZS50aW1lKCkgKyB0aHJlYWRfdGltZW91dAotICAgICAgICB3b3JrZXIuam9pbih0aHJl
YWRfdGltZW91dCkKLSAgICAgICAgaWYgd29ya2VyLmlzQWxpdmUoKToKKyAgICAgICAgd29ya2Vy
ID0gc2VsZgorICAgICAgICByZXN1bHQgPSBOb25lCisKKyAgICAgICAgZHJpdmVyID0gd29ya2Vy
Ll9wb3J0LmNyZWF0ZV9kcml2ZXIod29ya2VyLl93b3JrZXJfbnVtYmVyKQorICAgICAgICBkcml2
ZXIuc3RhcnQoKQorCisgICAgICAgIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQodGhyZWFkaW5nLlRo
cmVhZCk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHdvcmtlci5fcnVuX3NpbmdsZV90ZXN0KGRyaXZlciwgdGVzdF9pbnB1dCkKKworICAgICAg
ICB0aHJlYWQgPSBTaW5nbGVUZXN0VGhyZWFkKCkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAg
ICAgICAgdGhyZWFkLmpvaW4odGhyZWFkX3RpbWVvdXQpCisgICAgICAgIGlmIHRocmVhZC5pc0Fs
aXZlKCk6CiAgICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQg
c3RpbGwgcnVubmluZywgdGhlCiAgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGlzIGNvbXBs
ZXRlbHkgaHVuZyBhbmQgdGhlcmUncyBub3RoaW5nCiAgICAgICAgICAgICAjIG1vcmUgd2UgY2Fu
IGRvIHdpdGggaXQuICBXZSBoYXZlIHRvIGtpbGwgYWxsIHRoZQpAQCAtNDkzLDE2ICsyNTEsMTAg
QEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgICAj
IHRoYXQgdHJhZGVvZmYgaW4gb3JkZXIgdG8gYXZvaWQgbG9zaW5nIHRoZSByZXN0IG9mIHRoaXMK
ICAgICAgICAgICAgICMgdGhyZWFkJ3MgcmVzdWx0cy4KICAgICAgICAgICAgIF9sb2cuZXJyb3Io
J1Rlc3QgdGhyZWFkIGh1bmc6IGtpbGxpbmcgYWxsIER1bXBSZW5kZXJUcmVlcycpCi0gICAgICAg
ICAgICBpZiB3b3JrZXIuX2RyaXZlcjoKLSAgICAgICAgICAgICAgICB3b3JrZXIuX2RyaXZlci5z
dG9wKCkKIAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXN1bHQgPSB3b3JrZXIuZ2V0X3Rl
c3RfcmVzdWx0KCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgotICAgICAgICAg
ICAgIyBUaGlzIGdldHMgcmFpc2VkIGlmIHRoZSB3b3JrZXIgdGhyZWFkIGhhcyBhbHJlYWR5IGV4
aXRlZC4KLSAgICAgICAgICAgIGZhaWx1cmVzID0gW10KLSAgICAgICAgICAgIF9sb2cuZXJyb3Io
J0Nhbm5vdCBnZXQgcmVzdWx0cyBvZiB0ZXN0OiAlcycgJQotICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0X2lucHV0LmZpbGVuYW1lKQorICAgICAgICBkcml2ZXIuc3RvcCgpCisKKyAgICAgICAg
aWYgbm90IHJlc3VsdDoKICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfcmVzdWx0cy5UZXN0UmVz
dWx0KHRlc3RfaW5wdXQuZmlsZW5hbWUsIGZhaWx1cmVzPVtdLAogICAgICAgICAgICAgICAgIHRl
c3RfcnVuX3RpbWU9MCwgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzPTAsIHRpbWVfZm9yX2RpZmZz
PXt9KQogCkBAIC01MTYsMzkgKzI2OCwxMjEgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNo
YWJsZVRocmVhZCk6CiAKICAgICAgICAgUmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVjdC4KICAg
ICAgICAgIiIiCi0gICAgICAgIHNlbGYuX2Vuc3VyZV9kdW1wX3JlbmRlcl90cmVlX2lzX3J1bm5p
bmcoKQotICAgICAgICB0aHJlYWRfdGltZW91dCA9IF9taWxsaXNlY29uZHNfdG9fc2Vjb25kcygK
LSAgICAgICAgICAgICBfcGFkX3RpbWVvdXQoaW50KHRlc3RfaW5wdXQudGltZW91dCkpKQotICAg
ICAgICBzZWxmLl9uZXh0X3RpbWVvdXQgPSB0aW1lLnRpbWUoKSArIHRocmVhZF90aW1lb3V0Ci0g
ICAgICAgIHRlc3RfcmVzdWx0ID0gX3J1bl9zaW5nbGVfdGVzdChzZWxmLl9wb3J0LCBzZWxmLl9v
cHRpb25zLCB0ZXN0X2lucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fdGVzdF90eXBlcywgc2VsZi5fdGVzdF9hcmdzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZHJpdmVyLCBzZWxmLl9uYW1lKQotICAgICAgICBz
ZWxmLl90ZXN0X3Jlc3VsdHMuYXBwZW5kKHRlc3RfcmVzdWx0KQotICAgICAgICByZXR1cm4gdGVz
dF9yZXN1bHQKLQotICAgIGRlZiBfZW5zdXJlX2R1bXBfcmVuZGVyX3RyZWVfaXNfcnVubmluZyhz
ZWxmKToKLSAgICAgICAgIiIiU3RhcnQgdGhlIHNoYXJlZCBEdW1wUmVuZGVyVHJlZSwgaWYgaXQn
cyBub3QgcnVubmluZy4KLQotICAgICAgICBUaGlzIGlzIG5vdCBmb3IgdXNlIHdoZW4gcnVubmlu
ZyB0ZXN0cyBzaW5nbHksIHNpbmNlIHRob3NlIGVhY2ggc3RhcnQKLSAgICAgICAgYSBzZXBhcmF0
ZSBEdW1wUmVuZGVyVHJlZSBpbiB0aGVpciBvd24gdGhyZWFkLgotCi0gICAgICAgICIiIgogICAg
ICAgICAjIHBvbGwoKSBpcyBub3QgdGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVl
IHRvOgogICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3CiAgICAg
ICAgIGlmIG5vdCBzZWxmLl9kcml2ZXIgb3Igc2VsZi5fZHJpdmVyLnBvbGwoKSBpcyBub3QgTm9u
ZToKICAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZlcihz
ZWxmLl93b3JrZXJfbnVtYmVyKQogICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnN0YXJ0KCkKIAor
ICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3NpbmdsZV90ZXN0KHRlc3RfaW5wdXQsIHNlbGYuX2Ry
aXZlcikKKworICAgIGRlZiBfcnVuX3NpbmdsZV90ZXN0KHNlbGYsIHRlc3RfaW5wdXQsIGRyaXZl
cik6CisgICAgICAgICMgVGhlIGltYWdlIGhhc2ggaXMgdXNlZCB0byBhdm9pZCBkb2luZyBhbiBp
bWFnZSBkdW1wIGlmIHRoZQorICAgICAgICAjIGNoZWNrc3VtcyBtYXRjaCwgc28gaXQgc2hvdWxk
IGJlIHNldCB0byBhIGJsYW5rIHZhbHVlIGlmIHdlCisgICAgICAgICMgYXJlIGdlbmVyYXRpbmcg
YSBuZXcgYmFzZWxpbmUuICAoT3RoZXJ3aXNlLCBhbiBpbWFnZSBmcm9tIGEKKyAgICAgICAgIyBw
cmV2aW91cyBydW4gd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgYmFzZWxpbmUuIiIiCisgICAgICAg
IGlmIHNlbGYuX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bSgpOgorICAgICAgICAgICAg
dGVzdF9pbnB1dC5pbWFnZV9oYXNoID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bSgKKyAg
ICAgICAgICAgICAgICB0ZXN0X2lucHV0LmZpbGVuYW1lKQorICAgICAgICB0ZXN0X291dHB1dCA9
IGRyaXZlci5ydW5fdGVzdCh0ZXN0X2lucHV0KQorICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2Vz
c19vdXRwdXQodGVzdF9pbnB1dC5maWxlbmFtZSwgdGVzdF9vdXRwdXQpCisKKyAgICBkZWYgX3By
b2Nlc3Nfb3V0cHV0KHNlbGYsIHRlc3RfZmlsZW5hbWUsIHRlc3Rfb3V0cHV0KToKKyAgICAgICAg
IiIiUmVjZWl2ZXMgdGhlIG91dHB1dCBmcm9tIGEgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcywgc3Vi
amVjdHMgaXQgdG8gYQorICAgICAgICBudW1iZXIgb2YgdGVzdHMsIGFuZCByZXR1cm5zIGEgbGlz
dCBvZiBmYWlsdXJlIHR5cGVzIHRoZSB0ZXN0IHByb2R1Y2VkLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgIHRlc3RfZmlsZW5hbWU6IGZ1bGwgcGF0aCB0byB0aGUgdGVzdCBpbiBxdWVzdGlvbi4K
KyAgICAgICAgdGVzdF9vdXRwdXQ6IGEgVGVzdE91dHB1dCBvYmplY3QgY29udGFpbmluZyB0aGUg
b3V0cHV0IG9mIHRoZSB0ZXN0CisKKyAgICAgICAgUmV0dXJuczogYSBUZXN0UmVzdWx0IG9iamVj
dAorICAgICAgICAiIiIKKyAgICAgICAgZmFpbHVyZXMgPSBbXQorCisgICAgICAgIGlmIHRlc3Rf
b3V0cHV0LmNyYXNoOgorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMu
RmFpbHVyZUNyYXNoKCkpCisgICAgICAgIGlmIHRlc3Rfb3V0cHV0LnRpbWVvdXQ6CisgICAgICAg
ICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlVGltZW91dCgpKQorCisg
ICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0
X2ZpbGVuYW1lKQorICAgICAgICBpZiB0ZXN0X291dHB1dC5jcmFzaDoKKyAgICAgICAgICAgIF9s
b2cuZGVidWcoIiVzIFN0YWNrdHJhY2UgZm9yICVzOlxuJXMiICUKKyAgICAgICAgICAgICAgICAg
ICAgICAgKHNlbGYuX25hbWUsIHRlc3RfbmFtZSwgdGVzdF9vdXRwdXQuZXJyb3IpKQorICAgICAg
ICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVj
dG9yeSwgdGVzdF9uYW1lKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0
KGZpbGVuYW1lKVswXSArICItc3RhY2sudHh0IgorICAgICAgICAgICAgc2VsZi5fcG9ydC5tYXli
ZV9tYWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKVswXSkKKyAgICAgICAgICAg
IHdpdGggY29kZWNzLm9wZW4oZmlsZW5hbWUsICJ3YiIsICJ1dGYtOCIpIGFzIGZpbGU6CisgICAg
ICAgICAgICAgICAgZmlsZS53cml0ZSh0ZXN0X291dHB1dC5lcnJvcikKKyAgICAgICAgZWxpZiB0
ZXN0X291dHB1dC5lcnJvcjoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIG91dHB1dCBz
dGRlcnIgbGluZXM6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fbmFtZSwg
dGVzdF9uYW1lLCB0ZXN0X291dHB1dC5lcnJvcikpCisKKyAgICAgICAgZXhwZWN0ZWRfdGVzdF9v
dXRwdXQgPSBzZWxmLl9leHBlY3RlZF90ZXN0X291dHB1dCh0ZXN0X2ZpbGVuYW1lKQorCisgICAg
ICAgICMgQ2hlY2sgdGhlIG91dHB1dCBhbmQgc2F2ZSB0aGUgcmVzdWx0cy4KKyAgICAgICAgc3Rh
cnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHRpbWVfZm9yX2RpZmZzID0ge30KKyAgICAg
ICAgZm9yIHRlc3RfdHlwZSBpbiBzZWxmLl90ZXN0X3R5cGVzOgorICAgICAgICAgICAgc3RhcnRf
ZGlmZl90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIG5ld19mYWlsdXJlcyA9IHRlc3Rf
dHlwZS5jb21wYXJlX291dHB1dChzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZmlsZW5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9hcmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rf
b3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdGVkX3Rlc3Rfb3V0cHV0KQorICAgICAgICAgICAgIyBEb24ndCBhZGQgYW55IG1v
cmUgZmFpbHVyZXMgaWYgd2UgYWxyZWFkeSBoYXZlIGEgY3Jhc2gsIHNvIHdlCisgICAgICAgICAg
ICAjIGRvbid0IGRvdWJsZS1yZXBvcnQgdGhvc2UgdGVzdHMuIFdlIGRvIGRvdWJsZS1yZXBvcnQg
Zm9yIHRpbWVvdXRzCisgICAgICAgICAgICAjIHNpbmNlIHdlIHN0aWxsIHdhbnQgdG8gc2VlIHRo
ZSB0ZXh0IGFuZCBpbWFnZSBvdXRwdXQuCisgICAgICAgICAgICBpZiBub3QgdGVzdF9vdXRwdXQu
Y3Jhc2g6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKG5ld19mYWlsdXJlcykKKyAg
ICAgICAgICAgIHRpbWVfZm9yX2RpZmZzW3Rlc3RfdHlwZS5fX2NsYXNzX18uX19uYW1lX19dID0g
KAorICAgICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90aW1lKQorCisgICAg
ICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcyA9IHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90
aW1lCisgICAgICAgIHJldHVybiB0ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdCh0ZXN0X2ZpbGVuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dC50ZXN0X3RpbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zvcl9h
bGxfZGlmZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX2Zv
cl9kaWZmcykKKworICAgIGRlZiBfZXhwZWN0ZWRfdGVzdF9vdXRwdXQoc2VsZiwgZmlsZW5hbWUp
OgorICAgICAgICAiIiJSZXR1cm5zIGFuIGV4cGVjdGVkIFRlc3RPdXRwdXQgb2JqZWN0LiIiIgor
ICAgICAgICByZXR1cm4gdGVzdF9vdXRwdXQuVGVzdE91dHB1dChzZWxmLl9wb3J0LmV4cGVjdGVk
X3RleHQoZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5leHBlY3RlZF9pbWFnZShmaWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKGZpbGVuYW1lKSkKKwor
ICAgIGRlZiBfdGVhcl9kb3duX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCwgcmVzdWx0LCBlbGFwc2Vk
X3RpbWUpOgorICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCArPSAxCisgICAgICAgIHNlbGYuX3Rl
c3RzX3J1bl9maWxlLndyaXRlKHRlc3RfaW5wdXQuZmlsZW5hbWUgKyAiXG4iKQorICAgICAgICB0
ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1dC5m
aWxlbmFtZSkKKworICAgICAgICBpZiByZXN1bHQuZmFpbHVyZXM6CisgICAgICAgICAgICAjIENo
ZWNrIGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCisgICAgICAgICAgICBp
ZiBhbnkoW2Yuc2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpIGZvciBmIGluIHJlc3VsdC5m
YWlsdXJlc10pOgorICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgp
CisgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2ggY291bnQgc2luY2UgdGhlIHNoZWxs
IGp1c3QgYm91bmNlZC4KKyAgICAgICAgICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKwor
ICAgICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2FnZShzKS4KKyAgICAgICAgICAgIF9s
b2cuZGVidWcoIiVzICVzIGZhaWxlZDoiICUgKHNlbGYuX25hbWUsIHRlc3RfbmFtZSkpCisgICAg
ICAgICAgICBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygiJXMgICVzIiAlIChzZWxmLl9uYW1lLCBmLm1lc3NhZ2UoKSkpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNlbGYuX25hbWUsIHRl
c3RfbmFtZSkpCisKKyAgICAgICAgc2VsZi5fcG9zdCgnZmluaXNoZWRfdGVzdCcsIHJlc3VsdCwg
ZWxhcHNlZF90aW1lKQorCisgICAgICAgIGlmIHNlbGYuX2JhdGNoX3NpemUgPiAwIGFuZCBzZWxm
Ll9iYXRjaF9jb3VudCA+PSBzZWxmLl9iYXRjaF9zaXplOgorICAgICAgICAgICAgIyBCb3VuY2Ug
dGhlIHNoZWxsIGFuZCByZXNldCBjb3VudC4KKyAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9y
ZW5kZXJfdHJlZSgpCisgICAgICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKwogICAgIGRl
ZiBfc3RhcnRfc2VydmVyc193aXRoX2xvY2soc2VsZik6Ci0gICAgICAgICIiIkFjcXVpcmUgaHR0
cCBsb2NrIGFuZCBzdGFydCB0aGUgc2VydmVycy4iIiIKLSAgICAgICAgc2VsZi5faHR0cF9sb2Nr
X3dhaXRfYmVnaW4gPSB0aW1lLnRpbWUoKQotICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJlIGh0
dHAgbG9jayAuLi4nKQorICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4u
LicpCiAgICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQogICAgICAgICBfbG9n
LmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQogICAgICAgICBzZWxmLl9wb3J0LnN0
YXJ0X2h0dHBfc2VydmVyKCkKICAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0
IHNlcnZlciAuLi4nKQogICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIo
KQotICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgPSB0aW1lLnRpbWUoKQogICAgICAg
ICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRydWUKIAogICAgIGRlZiBfc3RvcF9zZXJ2ZXJzX3dp
dGhfbG9jayhzZWxmKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9i
cm9rZXIucHkKaW5kZXggZTUyMGE5Y2FhNmI3NjgyZWJmZGQyYTk4YmIyMTdlYjg1ZDcyNTFiYy4u
NjRjNmVkYzJiODQ1NDY0NjBkZjgwOTg3YzZiOTJhNmQ2M2ZiMTA3MCAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVz
c2FnZV9icm9rZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIucHkKQEAgLTI2LDcgKzI2LDcgQEAK
ICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLSIiIk1vZHVsZSBmb3IgaGFuZGxpbmcg
bWVzc2FnZXMsIHRocmVhZHMsIHByb2Nlc3NlcywgYW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Vi
a2l0LXRlc3RzLgorIiIiTW9kdWxlIGZvciBoYW5kbGluZyBtZXNzYWdlcyBhbmQgY29uY3VycmVu
Y3kgZm9yIHJ1bi13ZWJraXQtdGVzdHMuCiAKIFRlc3RpbmcgaXMgYWNjb21wbGlzaGVkIGJ5IGhh
dmluZyBhIG1hbmFnZXIgKFRlc3RSdW5uZXIpIGdhdGhlciBhbGwgb2YgdGhlCiB0ZXN0cyB0byBi
ZSBydW4sIGFuZCBzZW5kaW5nIG1lc3NhZ2VzIHRvIGEgcG9vbCBvZiB3b3JrZXJzIChUZXN0U2hl
bGxUaHJlYWRzKQpAQCAtNDAsOCArNDAsMTQgQEAgaGFuZGxlcyBsYXVuY2hpbmcgdGhyZWFkcyBh
bmQvb3IgcHJvY2Vzc2VzIGRlcGVuZGluZyBvbiB0aGUKIHJlcXVlc3RlZCBjb25maWd1cmF0aW9u
LgogIiIiCiAKK2ltcG9ydCBjUGlja2xlCiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRpcHJv
Y2Vzc2luZworaW1wb3J0IG9zCitpbXBvcnQgUXVldWUKIGltcG9ydCBzeXMKK2ltcG9ydCB0aHJl
YWQKK2ltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNrCiAKQEAg
LTQ5LDE0OSArNTUsMjQ0IEBAIGltcG9ydCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZAogCiBfbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKK01BTkFHRVIgPSAnbWFuYWdlcicKK0FO
WV9XT1JLRVIgPSAnd29ya2VyJworCiAKIGRlZiBnZXQocG9ydCwgb3B0aW9ucyk6CiAgICAgIiIi
UmV0dXJuIGFuIGluc3RhbmNlIG9mIGEgV29ya2VyTWVzc2FnZUJyb2tlci4iIiIKICAgICB3b3Jr
ZXJfbW9kZWwgPSBvcHRpb25zLndvcmtlcl9tb2RlbAogICAgIGlmIHdvcmtlcl9tb2RlbCA9PSAn
aW5saW5lJzoKLSAgICAgICAgcmV0dXJuIElubGluZUJyb2tlcihwb3J0LCBvcHRpb25zKQorICAg
ICAgICByZXR1cm4gX0lubGluZUJyb2tlcihwb3J0LCBvcHRpb25zKQogICAgIGlmIHdvcmtlcl9t
b2RlbCA9PSAndGhyZWFkcyc6Ci0gICAgICAgIHJldHVybiBNdWx0aVRocmVhZGVkQnJva2VyKHBv
cnQsIG9wdGlvbnMpCisgICAgICAgIHJldHVybiBfTXVsdGlUaHJlYWRlZEJyb2tlcihwb3J0LCBv
cHRpb25zKQorICAgIGlmIHdvcmtlcl9tb2RlbCA9PSAncHJvY2Vzc2VzJzoKKyAgICAgICAgcmV0
dXJuIF9NdWx0aVByb2Nlc3NCcm9rZXIocG9ydCwgb3B0aW9ucykKICAgICByYWlzZSBWYWx1ZUVy
cm9yKCd1bnN1cHBvcnRlZCB2YWx1ZSBmb3IgLS13b3JrZXItbW9kZWw6ICVzJyAlIHdvcmtlcl9t
b2RlbCkKIAogCi1jbGFzcyBfV29ya2VyU3RhdGUob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgbmFtZSk6Ci0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi50aHJl
YWQgPSBOb25lCitjbGFzcyBfTWVzc2FnZShvYmplY3QpOgorICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgbG9hZHMoc3RyKToKKyAgICAgICAgb2JqID0gY1BpY2tsZS5sb2FkcyhzdHIpCisgICAg
ICAgIGFzc2VydChpc2luc3RhbmNlKG9iaiwgX01lc3NhZ2UpKQorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHNyYywgZGVzdCwgaGRyLCBib2R5KToKKyAgICAgICAgc2VsZi5zcmMgPSBzcmMKKyAg
ICAgICAgc2VsZi5kZXN0ID0gZGVzdAorICAgICAgICBzZWxmLmhkciA9IGhkcgorICAgICAgICBz
ZWxmLmJvZHkgPSBib2R5CisKKyAgICBkZWYgZHVtcHMoc2VsZik6CisgICAgICAgIHJldHVybiBj
UGlja2xlLmR1bXBzKHNlbGYpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJl
dHVybiAoIl9NZXNzYWdlKHNyYz0nJXMnLCBkZXN0PSclcycsIGhkcj0nJXMnKSIgJQorICAgICAg
ICAgICAgICAgIChzZWxmLnNyYywgc2VsZi5kZXN0LCBzZWxmLmhkcikpCisKIAorY2xhc3MgX1Rp
bWVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhbGxiYWNrLCBkZWxheSk6Cisg
ICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjaworICAgICAgICBzZWxmLmRlbGF5ID0gZGVs
YXkKKyAgICAgICAgc2VsZi5kZWFkbGluZSA9IHRpbWUudGltZSgpICsgZGVsYXkKIAotY2xhc3Mg
V29ya2VyTWVzc2FnZUJyb2tlcihvYmplY3QpOgorCitjbGFzcyBfV29ya2VyTWVzc2FnZUJyb2tl
cihvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKToKICAgICAg
ICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKLSAg
ICAgICAgc2VsZi5fbnVtX3dvcmtlcnMgPSBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNz
ZXMpCiAKLSAgICAgICAgIyBUaGlzIG1hcHMgd29ya2VyIG5hbWVzIHRvIHRoZWlyIF9Xb3JrZXJT
dGF0ZSB2YWx1ZXMuCi0gICAgICAgIHNlbGYuX3dvcmtlcnMgPSB7fQorICAgICAgICBzZWxmLl90
aW1lcnMgPSB7fQorICAgICAgICBzZWxmLl90aW1lcnNbTUFOQUdFUl0gPSBOb25lCisgICAgICAg
IHNlbGYuX3RpbWVyc1tBTllfV09SS0VSXSA9IE5vbmUKKyAgICAgICAgc2VsZi5fcXVldWVzID0g
e30KIAotICAgIGRlZiBfdGhyZWFkcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHR1cGxlKFt3LnRo
cmVhZCBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpXSkKKyAgICBkZWYgc3RhcnRfd29y
a2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yCiAKLSAgICBkZWYgc3RhcnRfd29ya2VycyhzZWxmLCB0ZXN0X3J1bm5lcik6Ci0gICAgICAg
ICIiIlN0YXJ0cyB1cCB0aGUgcG9vbCBvZiB3b3JrZXJzIGZvciBydW5uaW5nIHRoZSB0ZXN0cy4K
KyAgICBkZWYgY2FuY2VsX3dvcmtlcihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcgogCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICB0ZXN0X3J1bm5lcjogYSBoYW5k
bGUgdG8gdGhlIG1hbmFnZXIvVGVzdFJ1bm5lciBvYmplY3QKLSAgICAgICAgIiIiCi0gICAgICAg
IHNlbGYuX3Rlc3RfcnVubmVyID0gdGVzdF9ydW5uZXIKLSAgICAgICAgZm9yIHdvcmtlcl9udW1i
ZXIgaW4geHJhbmdlKHNlbGYuX251bV93b3JrZXJzKToKLSAgICAgICAgICAgIHdvcmtlciA9IF9X
b3JrZXJTdGF0ZSgnd29ya2VyLSVkJyAlIHdvcmtlcl9udW1iZXIpCi0gICAgICAgICAgICB3b3Jr
ZXIudGhyZWFkID0gc2VsZi5fc3RhcnRfd29ya2VyKHdvcmtlcl9udW1iZXIsIHdvcmtlci5uYW1l
KQotICAgICAgICAgICAgc2VsZi5fd29ya2Vyc1t3b3JrZXIubmFtZV0gPSB3b3JrZXIKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX3RocmVhZHMoKQorICAgIGRlZiBhZGRfdGltZXIoc2VsZiwgcXVldWVf
bmFtZSwgY2FsbGJhY2ssIGRlbGF5X3NlY3MpOgorICAgICAgICBhc3NlcnQoc2VsZi5fdGltZXJz
W3F1ZXVlX25hbWVdIGlzIE5vbmUpCisgICAgICAgIHNlbGYuX3RpbWVyc1txdWV1ZV9uYW1lXSA9
IF9UaW1lcihjYWxsYmFjaywgZGVsYXlfc2VjcykKKworICAgIGRlZiBwdXRfbWVzc2FnZShzZWxm
LCBzcmMsIGRlc3QsIG1lc3NhZ2VfbmFtZSwgYm9keT10dXBsZSgpKToKKyAgICAgICAgbXNnID0g
X01lc3NhZ2Uoc3JjLCBkZXN0LCBtZXNzYWdlX25hbWUsIGJvZHkpCisgICAgICAgIHNlbGYuX3F1
ZXVlc1tkZXN0XS5wdXQobXNnKQorCisgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgcmVh
ZGVyLCBxdWV1ZV9uYW1lKToKKyAgICAgICAgZGlkX3dvcmssIGRvbmUsIGRlbGF5ID0gc2VsZi5f
Y2hlY2tfdGltZXIocXVldWVfbmFtZSkKKyAgICAgICAgd2hpbGUgbm90IGRvbmUgYW5kIG5vdCBy
ZWFkZXIuaXNfZG9uZSgpIGFuZCBkZWxheSBpcyBOb25lIG9yIGRlbGF5ID4gMDoKKyAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLl9xdWV1ZXNbcXVldWVfbmFtZV0u
Z2V0KGJsb2NrPVRydWUsIHRpbWVvdXQ9ZGVsYXkpCisgICAgICAgICAgICAgICAgc2VsZi5fZGlz
cGF0Y2hfbWVzc2FnZShtc2csIHJlYWRlcikKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0
eToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkaWRfd29yaywgZG9uZSwgZGVs
YXkgPSBzZWxmLl9jaGVja190aW1lcihxdWV1ZV9uYW1lKQorCisgICAgZGVmIF9jaGVja190aW1l
cihzZWxmLCBxdWV1ZV9uYW1lKToKKyAgICAgICAgdCA9IHNlbGYuX3RpbWVyc1txdWV1ZV9uYW1l
XQorICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICBpZiB0OgorICAgICAgICAgICAg
aWYgdC5kZWFkbGluZSA8IG5vdzoKKyAgICAgICAgICAgICAgICBzZWxmLl90aW1lcnNbcXVldWVf
bmFtZV0gPSBOb25lCisgICAgICAgICAgICAgICAgZG9uZSA9IHQuY2FsbGJhY2soKQorICAgICAg
ICAgICAgICAgIGlmIHNlbGYuX3RpbWVyc1txdWV1ZV9uYW1lXToKKyAgICAgICAgICAgICAgICAg
ICAgZGVsYXkgPSBzZWxmLl90aW1lcnNbcXVldWVfbmFtZV0uZGVhZGxpbmUgLSB0aW1lLnRpbWUo
KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRlbGF5ID0gTm9u
ZQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlLCBkb25lLCBkZWxheQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UsIEZhbHNlLCB0LmRlYWRsaW5lIC0g
bm93CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIEZhbHNlLCBOb25l
CisKKyAgICBkZWYgX2RyYWluX3F1ZXVlKHNlbGYsIHJlYWRlciwgcXVldWVfbmFtZSk6CisgICAg
ICAgIGFjdHVhbGx5X2RpZF93b3JrID0gRmFsc2UKKyAgICAgICAgZGlkX3dvcmsgPSBUcnVlCisg
ICAgICAgIHdoaWxlIGRpZF93b3JrOgorICAgICAgICAgICAgZGlkX3dvcmssIGRvbmUsIGRlbGF5
ID0gc2VsZi5fY2hlY2tfdGltZXIocXVldWVfbmFtZSkKKyAgICAgICAgICAgIGFjdHVhbGx5X2Rp
ZF93b3JrID0gYWN0dWFsbHlfZGlkX3dvcmsgb3IgZGlkX3dvcmsKKyAgICAgICAgICAgIGlmIG5v
dCBkb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbXNnID0g
c2VsZi5fcXVldWVzW3F1ZXVlX25hbWVdLmdldChibG9jaz1GYWxzZSkKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fZGlzcGF0Y2hfbWVzc2FnZShtc2csIHJlYWRlcikKKyAgICAgICAgICAgICAg
ICAgICAgZGlkX3dvcmsgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGFjdHVhbGx5X2RpZF93
b3JrID0gYWN0dWFsbHlfZGlkX3dvcmsgb3IgZGlkX3dvcmsKKyAgICAgICAgICAgICAgICBleGNl
cHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJu
IGFjdHVhbGx5X2RpZF93b3JrCisKKyAgICBkZWYgX2Rpc3BhdGNoX21lc3NhZ2Uoc2VsZiwgbXNn
LCByZWFkZXIpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihyZWFkZXIsICdoYW5kbGVfJyArIG1z
Zy5oZHIpOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCisgICAgICAgICAgICAg
ICAiJXM6IHJlY2VpdmVkIG1lc3NhZ2UgJyVzJyBpdCBjb3VsZG4ndCBoYW5kbGUiICUKKyAgICAg
ICAgICAgICAgIChyZWFkZXIubmFtZSgpLCBtc2cuaGRyKSkKKworICAgICAgICBvcHRhcmdzID0g
bXNnLmJvZHkKKyAgICAgICAgZm4gPSBnZXRhdHRyKHJlYWRlciwgJ2hhbmRsZV8nICsgbXNnLmhk
cikKKyAgICAgICAgZm4obXNnLnNyYywgKm9wdGFyZ3MpCisKKworY2xhc3MgX0lubGluZUJyb2tl
cihfV29ya2VyTWVzc2FnZUJyb2tlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9w
dGlvbnMpOgorICAgICAgICBzdXBlcihfSW5saW5lQnJva2VyLCBzZWxmKS5fX2luaXRfXyhwb3J0
LCBvcHRpb25zKQorICAgICAgICAjIEZJWE1FOiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRocmVh
ZHNhZmUgcXVldWVzIGhlcmUuCisgICAgICAgIHNlbGYuX3F1ZXVlc1tNQU5BR0VSXSA9IFF1ZXVl
LlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fcXVldWVzW0FOWV9XT1JLRVJdID0gUXVldWUuUXVldWUo
KQogCi0gICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlciwgd29ya2VyX25h
bWUpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgY2xhc3MgX1dvcmtl
cihkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIpOgorICAgICAgICBkZWYgX19pbml0X18o
c2VsZiwgYnJva2VyLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgICAgIHN1cGVyKF9JbmxpbmVC
cm9rZXIuX1dvcmtlciwgc2VsZikuX19pbml0X18oYnJva2VyLCB3b3JrZXJfbnVtYmVyKQogCi0g
ICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZik6Ci0gICAgICAgICIiIkxvb3AgcHJvY2Vzc2lu
ZyBtZXNzYWdlcyB1bnRpbCBkb25lLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yCisgICAgICAgICAgICAjIFRoaXMgaXMgc2V0IGluIHJ1bl9tYW5hZ2VyX21lc3NhZ2VfbG9v
cCgpCisgICAgICAgICAgICBzZWxmLm1hbmFnZXIgPSBOb25lCiAKLSAgICBkZWYgY2FuY2VsX3dv
cmtlcnMoc2VsZik6Ci0gICAgICAgICIiIkNhbmNlbC9pbnRlcnJ1cHQgYW55IHdvcmtlcnMgdGhh
dCBhcmUgc3RpbGwgYWxpdmUuIiIiCi0gICAgICAgIHBhc3MKKyAgICAgICAgZGVmIHlpZWxkX3Rv
X2Jyb2tlcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5fZHJhaW5fcXVldWUoc2Vs
Zi5fYnJva2VyLm1hbmFnZXIsIE1BTkFHRVIpCiAKLSAgICBkZWYgY2xlYW51cChzZWxmKToKLSAg
ICAgICAgIiIiUGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGNsZWFudXAgb24gc2h1dGRvd24uIiIiCisg
ICAgZGVmIHN0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgc2VsZi5f
aW5saW5lX3dvcmtlciA9IHNlbGYuX1dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyKQorICAgICAg
ICByZXR1cm4gc2VsZi5faW5saW5lX3dvcmtlci5uYW1lKCkKKworICAgIGRlZiBydW5fbWVzc2Fn
ZV9sb29wKHNlbGYsIG1hbmFnZXIsIHF1ZXVlX25hbWUpOgorICAgICAgICAiIiJMb29wIHByb2Nl
c3NpbmcgbWVzc2FnZXMgdW50aWwgZG9uZS4iIiIKKyAgICAgICAgc2VsZi5tYW5hZ2VyID0gbWFu
YWdlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkaWRfd29yayA9IFRydWUKKyAgICAgICAg
ICAgIHdoaWxlIGRpZF93b3JrOgorICAgICAgICAgICAgICAgIGRpZF93b3JrID0gc2VsZi5fZHJh
aW5fcXVldWUoc2VsZi5faW5saW5lX3dvcmtlciwgQU5ZX1dPUktFUikKKyAgICAgICAgICAgICAg
ICBkaWRfd29yayA9IGRpZF93b3JrIG9yIHNlbGYuX2RyYWluX3F1ZXVlKHNlbGYubWFuYWdlciwg
TUFOQUdFUikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubWFuYWdlciA9IE5v
bmUKKworICAgIGRlZiBjYW5jZWxfd29ya2VyKHNlbGYsIHdvcmtlcl9uYW1lKToKICAgICAgICAg
cGFzcwogCisgICAgZGVmIGpvaW5fd29ya2VyKHNlbGYsIHdvcmtlcl9uYW1lKToKKyAgICAgICAg
YXNzZXJ0IHNlbGYubWFuYWdlciBpcyBOb25lCiAKLWNsYXNzIElubGluZUJyb2tlcihXb3JrZXJN
ZXNzYWdlQnJva2VyKToKLSAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVy
LCB3b3JrZXJfbmFtZSk6Ci0gICAgICAgICMgRklYTUU6IFJlcGxhY2Ugd2l0aCBzb21ldGhpbmcg
dGhhdCBpc24ndCBhIHRocmVhZC4KLSAgICAgICAgdGhyZWFkID0gZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWQuVGVzdFNoZWxsVGhyZWFkKHNlbGYuX3BvcnQsCi0gICAgICAgICAgICBzZWxmLl9vcHRp
b25zLCB3b3JrZXJfbnVtYmVyLCB3b3JrZXJfbmFtZSwKLSAgICAgICAgICAgIHNlbGYuX3Rlc3Rf
cnVubmVyLl9jdXJyZW50X2ZpbGVuYW1lX3F1ZXVlLAotICAgICAgICAgICAgc2VsZi5fdGVzdF9y
dW5uZXIuX3Jlc3VsdF9xdWV1ZSkKLSAgICAgICAgIyBOb3RlOiBEb24ndCBzdGFydCgpIHRoZSB0
aHJlYWQhIElmIHdlIGRpZCwgaXQgd291bGQgYWN0dWFsbHkKLSAgICAgICAgIyBjcmVhdGUgYW5v
dGhlciB0aHJlYWQgYW5kIHN0YXJ0IGV4ZWN1dGluZyBpdCwgYW5kIHdlJ2Qgbm8gbG9uZ2VyCi0g
ICAgICAgICMgYmUgc2luZ2xlLXRocmVhZGVkLgotICAgICAgICByZXR1cm4gdGhyZWFkCi0KLSAg
ICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmKToKLSAgICAgICAgdGhyZWFkID0gc2VsZi5fdGhy
ZWFkcygpWzBdCi0gICAgICAgIHRocmVhZC5ydW5faW5fbWFpbl90aHJlYWQoc2VsZi5fdGVzdF9y
dW5uZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5u
ZXIuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLnVw
ZGF0ZSgpCi0KLQotY2xhc3MgTXVsdGlUaHJlYWRlZEJyb2tlcihXb3JrZXJNZXNzYWdlQnJva2Vy
KToKLSAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyLCB3b3JrZXJfbmFt
ZSk6Ci0gICAgICAgIHRocmVhZCA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTaGVsbFRo
cmVhZChzZWxmLl9wb3J0LAotICAgICAgICAgICAgc2VsZi5fb3B0aW9ucywgd29ya2VyX251bWJl
ciwgd29ya2VyX25hbWUsCi0gICAgICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci5fY3VycmVudF9m
aWxlbmFtZV9xdWV1ZSwKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLl9yZXN1bHRfcXVl
dWUpCi0gICAgICAgIHRocmVhZC5zdGFydCgpCi0gICAgICAgIHJldHVybiB0aHJlYWQKLQotICAg
IGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYpOgotICAgICAgICB0aHJlYWRzID0gc2VsZi5fdGhy
ZWFkcygpCi0KLSAgICAgICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdhaXRpbmcg
Zm9yIHRoZW0gdG8gZmluaXNoLgotICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRydWUK
LSAgICAgICAgd2hpbGUgc29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAgICAgICAgICBzb21lX3Ro
cmVhZF9pc19hbGl2ZSA9IEZhbHNlCi0gICAgICAgICAgICB0ID0gdGltZS50aW1lKCkKLSAgICAg
ICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICBleGNlcHRpb25f
aW5mbyA9IHRocmVhZC5leGNlcHRpb25faW5mbygpCi0gICAgICAgICAgICAgICAgaWYgZXhjZXB0
aW9uX2luZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICMgUmUtcmFpc2UgdGhl
IHRocmVhZCdzIGV4Y2VwdGlvbiBoZXJlIHRvIG1ha2UgaXQKLSAgICAgICAgICAgICAgICAgICAg
IyBjbGVhciB0aGF0IHRlc3Rpbmcgd2FzIGFib3J0ZWQuIE90aGVyd2lzZSwKLSAgICAgICAgICAg
ICAgICAgICAgIyB0aGUgdGVzdHMgdGhhdCBkaWQgbm90IHJ1biB3b3VsZCBiZSBhc3N1bWVkCi0g
ICAgICAgICAgICAgICAgICAgICMgdG8gaGF2ZSBwYXNzZWQuCi0gICAgICAgICAgICAgICAgICAg
IHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2lu
Zm9bMl0KLQotICAgICAgICAgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6Ci0gICAgICAgICAg
ICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQotICAgICAgICAgICAgICAgICAg
ICBuZXh0X3RpbWVvdXQgPSB0aHJlYWQubmV4dF90aW1lb3V0KCkKLSAgICAgICAgICAgICAgICAg
ICAgaWYgbmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgbG9nX3dlZGdlZF93b3JrZXIodGhyZWFkLmdldE5hbWUoKSwgdGhyZWFkLmlkKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQuY2xlYXJfbmV4dF90aW1lb3V0KCkKLQot
ICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIudXBkYXRlKCkKLQotICAgICAgICAgICAgaWYg
c29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQot
Ci0gICAgZGVmIGNhbmNlbF93b3JrZXJzKHNlbGYpOgotICAgICAgICB0aHJlYWRzID0gc2VsZi5f
dGhyZWFkcygpCi0gICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgIHRo
cmVhZC5jYW5jZWwoKQotCi0KLWRlZiBsb2dfd2VkZ2VkX3dvcmtlcihuYW1lLCBpZCk6Ci0gICAg
IiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB3b3JrZXIgc3RhdGUuIiIiCi0gICAg
c3RhY2sgPSBfZmluZF90aHJlYWRfc3RhY2soaWQpCi0gICAgYXNzZXJ0KHN0YWNrIGlzIG5vdCBO
b25lKQotICAgIF9sb2cuZXJyb3IoIiIpCi0gICAgX2xvZy5lcnJvcigiJXMgKHRpZCAlZCkgaXMg
d2VkZ2VkIiAlIChuYW1lLCBpZCkpCi0gICAgX2xvZ19zdGFjayhzdGFjaykKLSAgICBfbG9nLmVy
cm9yKCIiKQotCi0KLWRlZiBfZmluZF90aHJlYWRfc3RhY2soaWQpOgotICAgICIiIlJldHVybnMg
YSBzdGFjayBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBkdW1wIGEgc3RhY2sgdHJhY2UgZm9y
Ci0gICAgdGhlIGdpdmVuIHRocmVhZCBpZCAob3IgTm9uZSBpZiB0aGUgaWQgaXMgbm90IGZvdW5k
KS4iIiIKLSAgICBmb3IgdGhyZWFkX2lkLCBzdGFjayBpbiBzeXMuX2N1cnJlbnRfZnJhbWVzKCku
aXRlbXMoKToKLSAgICAgICAgaWYgdGhyZWFkX2lkID09IGlkOgotICAgICAgICAgICAgcmV0dXJu
IHN0YWNrCi0gICAgcmV0dXJuIE5vbmUKLQotCi1kZWYgX2xvZ19zdGFjayhzdGFjayk6Ci0gICAg
IiIiTG9nIGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCkuIiIiCi0gICAgZm9yIGZpbGVuYW1l
LCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgot
ICAgICAgICBfbG9nLmVycm9yKCdGaWxlOiAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5h
bWUsIGxpbmVubywgbmFtZSkpCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICBfbG9nLmVy
cm9yKCcgICVzJyAlIGxpbmUuc3RyaXAoKSkKKyAgICBkZWYgd29ya2VyX2lzX2FsaXZlKHNlbGYs
IHdvcmtlcl9uYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWFuYWdlciBpcyBub3QgTm9uZQor
CisgICAgZGVmIGxvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtlcl9uYW1lLCB0ZXN0X25hbWUp
OgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiX0lubGluZUJyb2tlci5sb2dfd2VkZ2Vk
X3dvcmtlcigpIGNhbGxlZCIpCisKKworY2xhc3MgX011bHRpVGhyZWFkZWRCcm9rZXIoX1dvcmtl
ck1lc3NhZ2VCcm9rZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKToK
KyAgICAgICAgc3VwZXIoX011bHRpVGhyZWFkZWRCcm9rZXIsIHNlbGYpLl9faW5pdF9fKHBvcnQs
IG9wdGlvbnMpCisgICAgICAgIHNlbGYuX3F1ZXVlc1tNQU5BR0VSXSA9IFF1ZXVlLlF1ZXVlKCkK
KyAgICAgICAgc2VsZi5fcXVldWVzW0FOWV9XT1JLRVJdID0gUXVldWUuUXVldWUoKQorICAgICAg
ICBzZWxmLl9jaGlsZHJlbiA9IHt9CisKKyAgICBjbGFzcyBfV29ya2VyKGR1bXBfcmVuZGVyX3Ry
ZWVfdGhyZWFkLldvcmtlciwgdGhyZWFkaW5nLlRocmVhZCk6CisgICAgICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBicm9rZXIsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICAgICAgc3VwZXIoX011bHRp
VGhyZWFkZWRCcm9rZXIuX1dvcmtlciwgc2VsZikuX19pbml0X18oYnJva2VyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29y
a2VyX251bWJlcikKKyAgICAgICAgICAgIHNlbGYudGlkID0gIjxub25lPiIKKworICAgICAgICBk
ZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgc2VsZi50aWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkK
KyAgICAgICAgICAgIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldvcmtlci5ydW4oc2VsZikKKwor
ICAgIGRlZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6CisgICAgICAgIHdvcmtl
ciA9IHNlbGYuX1dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyKQorICAgICAgICBuYW1lID0gd29y
a2VyLm5hbWUoKQorICAgICAgICBzZWxmLl9jaGlsZHJlbltuYW1lXSA9IHdvcmtlcgorICAgICAg
ICB3b3JrZXIuc3RhcnQoKQorICAgICAgICByZXR1cm4gbmFtZQorCisgICAgZGVmIGNhbmNlbF93
b3JrZXIoc2VsZiwgd29ya2VyX25hbWUpOgorICAgICAgICBzZWxmLl9jaGlsZHJlblt3b3JrZXJf
bmFtZV0uY2FuY2VsKCkKKworICAgIGRlZiBqb2luX3dvcmtlcihzZWxmLCB3b3JrZXJfbmFtZSwg
dGltZW91dCk6CisgICAgICAgIHNlbGYuX2NoaWxkcmVuW3dvcmtlcl9uYW1lXS5qb2luKHRpbWVv
dXQpCisKKyAgICBkZWYgd29ya2VyX2lzX2FsaXZlKHNlbGYsIHdvcmtlcl9uYW1lKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2NoaWxkcmVuW3dvcmtlcl9uYW1lXS5pc19hbGl2ZSgpCisKKyAgICBk
ZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgd29ya2VyX25hbWUsIHRlc3RfbmFtZSk6CisgICAg
ICAgIHRocmVhZCA9IHNlbGYuX2NoaWxkcmVuW3dvcmtlcl9uYW1lXQorICAgICAgICBzdGFjayA9
IHNlbGYuX2ZpbmRfdGhyZWFkX3N0YWNrKHRocmVhZC5pZCgpKQorICAgICAgICBhc3NlcnQoc3Rh
Y2sgaXMgbm90IE5vbmUpCisgICAgICAgIF9sb2cuZXJyb3IoIiVzICh0aWQgJWQpIGlzIHdlZGdl
ZCBvbiB0ZXN0ICVzIiAlCisgICAgICAgICAgICAgICAgICAgKHdvcmtlcl9uYW1lLCB0aHJlYWQu
aWQoKSwgdGVzdF9uYW1lKSkKKyAgICAgICAgc2VsZi5fbG9nX3N0YWNrKHN0YWNrKQorCisgICAg
ZGVmIF9maW5kX3RocmVhZF9zdGFjayhzZWxmLCBpZCk6CisgICAgICAgICIiIlJldHVybnMgYSBz
dGFjayBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBkdW1wIGEgc3RhY2sgdHJhY2UgZm9yCisg
ICAgICAgIHRoZSBnaXZlbiB0aHJlYWQgaWQgKG9yIE5vbmUgaWYgdGhlIGlkIGlzIG5vdCBmb3Vu
ZCkuIiIiCisgICAgICAgIGZvciB0aHJlYWRfaWQsIHN0YWNrIGluIHN5cy5fY3VycmVudF9mcmFt
ZXMoKS5pdGVtcygpOgorICAgICAgICAgICAgaWYgdGhyZWFkX2lkID09IGlkOgorICAgICAgICAg
ICAgICAgIHJldHVybiBzdGFjaworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9sb2df
c3RhY2soc2VsZiwgc3RhY2spOgorICAgICAgICAiIiJMb2cgYSBzdGFjayB0cmFjZSB0byBsb2cu
ZXJyb3IoKS4iIiIKKyAgICAgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4g
dHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgorICAgICAgICAgICAgX2xvZy5lcnJvcign
RmlsZTogIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpKQor
ICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcgICVzJyAl
IGxpbmUuc3RyaXAoKSkKKworCitjbGFzcyBfTXVsdGlQcm9jZXNzQnJva2VyKF9NdWx0aVRocmVh
ZGVkQnJva2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAg
ICAgIHN1cGVyKF9NdWx0aVByb2Nlc3NCcm9rZXIsIHNlbGYpLl9faW5pdF9fKHBvcnQsIG9wdGlv
bnMpCisgICAgICAgIHNlbGYuX3F1ZXVlc1tNQU5BR0VSXSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1
ZSgpCisgICAgICAgIHNlbGYuX3F1ZXVlc1tBTllfV09SS0VSXSA9IG11bHRpcHJvY2Vzc2luZy5R
dWV1ZSgpCisKKyAgICBjbGFzcyBfV29ya2VyKGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldvcmtl
ciwgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwg
YnJva2VyLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgICAgIHN1cGVyKF9NdWx0aVByb2Nlc3NC
cm9rZXIuX1dvcmtlciwgc2VsZikuX19pbml0X18oYnJva2VyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfbnVtYmVy
KQorCisgICAgICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgICAgICBzZWxmLnRlcm1pbmF0
ZSgpCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgd29ya2VyX25hbWUsIHRlc3Rf
bmFtZSk6CisgICAgICAgIHByb2MgPSBzZWxmLl9jaGlsZHJlblt3b3JrZXJfbmFtZV0KKyAgICAg
ICAgX2xvZy5lcnJvcigiJXMgKHBpZCAlZCkgaXMgd2VkZ2VkIG9uIHRlc3QgJXMiICUKKyAgICAg
ICAgICAgICAgICAgICAod29ya2VyX25hbWUsIHByb2MucGlkLCB0ZXN0X25hbWUpKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVz
dC5weQppbmRleCA2ZjA0ZmQzNTUxOGEwNGViZDY5MTlmZjhhOTc2MTNjZjRjNWJlMWY0Li5mOWUy
MGVmY2VjOTZjMjk3NDUxZWVhMzMxZWUwZTVjYTIxNzg2OWVlIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdl
X2Jyb2tlcl91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weQpAQCAt
NTIsMTIgKzUyLDEzIEBAIGNsYXNzIFRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAg
ICAgIHNlbGYuX3RpbWVvdXQgPSBGYWxzZQogICAgICAgICBzZWxmLl90aW1lb3V0X3F1ZXVlID0g
UXVldWUuUXVldWUoKQogICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IE5vbmUKKyAgICAg
ICAgc2VsZi5kb25lID0gRmFsc2UKIAogICAgIGRlZiBpZChzZWxmKToKICAgICAgICAgcmV0dXJu
IHNlbGYuX3RocmVhZF9pZAogCiAgICAgZGVmIGdldE5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVy
biAid29ya2VyLTAiCisgICAgICAgIHJldHVybiAnd29ya2VyLTAnCiAKICAgICBkZWYgcnVuKHNl
bGYpOgogICAgICAgICBzZWxmLl9jb3ZlcmVkX3J1bigpCkBAIC03OSwxNyArODAsNiBAQCBjbGFz
cyBUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICBleGNlcHQ6CiAgICAgICAg
ICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5leGNfaW5mbygpCiAKLSAgICBkZWYgZXhj
ZXB0aW9uX2luZm8oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb25faW5mbwot
Ci0gICAgZGVmIG5leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fdGltZW91dDoK
LSAgICAgICAgICAgIHNlbGYuX3RpbWVvdXRfcXVldWUucHV0KCdkb25lJykKLSAgICAgICAgICAg
IHJldHVybiB0aW1lLnRpbWUoKSAtIDEwCi0gICAgICAgIHJldHVybiB0aW1lLnRpbWUoKQotCi0g
ICAgZGVmIGNsZWFyX25leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgc2VsZi5fbmV4dF90aW1l
b3V0ID0gTm9uZQogCiBjbGFzcyBUZXN0SGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgogICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBhc3RyZWFtKToKQEAgLTEwMCw2MiArOTAsMjYgQEAgY2xhc3MgVGVz
dEhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAgICAgICAgc2VsZi5fc3RyZWFtLndyaXRlKHNl
bGYuZm9ybWF0KHJlY29yZCkpCiAKIAotY2xhc3MgTXVsdGlUaHJlYWRlZEJyb2tlclRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgotICAgIGNsYXNzIE1vY2tUZXN0UnVubmVyKG9iamVjdCk6Ci0gICAg
ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBkZWYg
X19kZWxfXyhzZWxmKToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBkZWYgdXBkYXRlKHNl
bGYpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHJ1bl9vbmVfdGhyZWFkKHNlbGYsIG1z
Zyk6Ci0gICAgICAgIHJ1bm5lciA9IHNlbGYuTW9ja1Rlc3RSdW5uZXIoKQotICAgICAgICBwb3J0
ID0gTm9uZQotICAgICAgICBvcHRpb25zID0gbW9ja3Rvb2wuTW9ja09wdGlvbnMoY2hpbGRfcHJv
Y2Vzc2VzPScxJykKLSAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAg
ICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBicm9rZXIgPSBtZXNz
YWdlX2Jyb2tlci5NdWx0aVRocmVhZGVkQnJva2VyKHBvcnQsIG9wdGlvbnMpCi0gICAgICAgIGJy
b2tlci5fdGVzdF9ydW5uZXIgPSBydW5uZXIKLSAgICAgICAgY2hpbGRfdGhyZWFkID0gVGVzdFRo
cmVhZChzdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVldWUpCi0gICAgICAgIGJyb2tlci5fd29y
a2Vyc1snd29ya2VyLTAnXSA9IG1lc3NhZ2VfYnJva2VyLl9Xb3JrZXJTdGF0ZSgnd29ya2VyLTAn
KQotICAgICAgICBicm9rZXIuX3dvcmtlcnNbJ3dvcmtlci0wJ10udGhyZWFkID0gY2hpbGRfdGhy
ZWFkCi0gICAgICAgIGNoaWxkX3RocmVhZC5zdGFydCgpCi0gICAgICAgIHN0YXJ0ZWRfbXNnID0g
c3RhcnRpbmdfcXVldWUuZ2V0KCkKLSAgICAgICAgc3RvcHBpbmdfcXVldWUucHV0KG1zZykKLSAg
ICAgICAgcmV0dXJuIGJyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKLQotICAgIGRlZiB0ZXN0X2Jh
c2ljKHNlbGYpOgotICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJycp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0ZWQpCi0KLSAgICBkZWYgdGVzdF9p
bnRlcnJ1cHQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJy
dXB0LCBzZWxmLnJ1bl9vbmVfdGhyZWFkLCAnS2V5Ym9hcmRJbnRlcnJ1cHQnKQorY2xhc3MgVGVz
dE11bHRpVGhyZWFkZWRCcm9rZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBtYWtlX2Jy
b2tlcihzZWxmKToKKyAgICAgICAgb3B0aW9ucyA9IG1vY2t0b29sLk1vY2tPcHRpb25zKGNoaWxk
X3Byb2Nlc3Nlcz0xKQorICAgICAgICBicm9rZXIgPSBtZXNzYWdlX2Jyb2tlci5fTXVsdGlUaHJl
YWRlZEJyb2tlcihwb3J0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9b3B0aW9ucykKKyAgICAgICAgcmV0dXJuIGJyb2tl
cgogCi0gICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKLSAgICAgICAgb2MgPSBvdXRwdXRjYXB0
dXJlLk91dHB1dENhcHR1cmUoKQotICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAg
IGludGVycnVwdGVkID0gc2VsZi5ydW5fb25lX3RocmVhZCgnVGltZW91dCcpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0ZWQpCi0gICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkK
LQotICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoVmFsdWVFcnJvciwgc2VsZi5ydW5fb25lX3RocmVhZCwgJ0V4Y2VwdGlvbicpCi0KLQotY2xh
c3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZmluZF90aHJlYWRfc3Rh
Y2tfZm91bmQoc2VsZik6CisgICAgICAgIGJyb2tlciA9IHNlbGYubWFrZV9icm9rZXIoKQogICAg
ICAgICBpZCwgc3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKVswXQotICAgICAg
ICBmb3VuZF9zdGFjayA9IG1lc3NhZ2VfYnJva2VyLl9maW5kX3RocmVhZF9zdGFjayhpZCkKKyAg
ICAgICAgZm91bmRfc3RhY2sgPSBicm9rZXIuX2ZpbmRfdGhyZWFkX3N0YWNrKGlkKQogICAgICAg
ICBzZWxmLmFzc2VydE5vdEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQogCiAgICAgZGVmIHRlc3Rf
ZmluZF90aHJlYWRfc3RhY2tfbm90X2ZvdW5kKHNlbGYpOgotICAgICAgICBmb3VuZF9zdGFjayA9
IG1lc3NhZ2VfYnJva2VyLl9maW5kX3RocmVhZF9zdGFjaygwKQorICAgICAgICBicm9rZXIgPSBz
ZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgZm91bmRfc3RhY2sgPSBicm9rZXIuX2ZpbmRfdGhy
ZWFkX3N0YWNrKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUp
CiAKICAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmKToKKyAgICAgICAgYnJva2Vy
ID0gc2VsZi5tYWtlX2Jyb2tlcigpCiAgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRD
YXB0dXJlKCkKICAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQogICAgICAgICBsb2dnZXIgPSBt
ZXNzYWdlX2Jyb2tlci5fbG9nCkBAIC0xNjMsMTQgKzExNywxMyBAQCBjbGFzcyBUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKICAgICAgICAgaGFuZGxlciA9IFRlc3RIYW5kbGVyKGFzdHJlYW0pCiAg
ICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCiAKKyAgICAgICAgIyBGSVhNRTogY2xl
YW4gdGhpcyB1cC4KICAgICAgICAgc3RhcnRpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCiAgICAg
ICAgIHN0b3BwaW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQogICAgICAgICBjaGlsZF90aHJlYWQg
PSBUZXN0VGhyZWFkKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGluZ19xdWV1ZSkKICAgICAgICAgY2hp
bGRfdGhyZWFkLnN0YXJ0KCkKLSAgICAgICAgbXNnID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKLQot
ICAgICAgICBtZXNzYWdlX2Jyb2tlci5sb2dfd2VkZ2VkX3dvcmtlcihjaGlsZF90aHJlYWQuZ2V0
TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZF90
aHJlYWQuaWQoKSkKKyAgICAgICAgYnJva2VyLl9jaGlsZHJlblsnd29ya2VyLTAnXSA9IGNoaWxk
X3RocmVhZAorICAgICAgICBicm9rZXIubG9nX3dlZGdlZF93b3JrZXIoJ3dvcmtlci0wJywgJ3Rl
c3RfZmlsZScpCiAgICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgnJykKICAgICAgICAgY2hpbGRf
dGhyZWFkLmpvaW4odGltZW91dD0xLjApCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fbWFjLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKaW5k
ZXggZDFjMzgzYzEzZWMyZjEzYWY1ZmIxZjE1NDA1NzljNGM4ODlmZGQ2My4uN2Q3MDRjM2E4OWFm
NTRhZDBkYWYwNzQ4YjRkODg5YTYyMmFjZTRjZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMu
cHkKQEAgLTYyLDE1ICs2Miw2IEBAIGNsYXNzIENocm9taXVtTWFjUG9ydChjaHJvbWl1bS5DaHJv
bWl1bVBvcnQpOgogICAgICAgICAgICAgICAgICAgICAgICAnTWFjQnVpbGRJbnN0cnVjdGlvbnMn
KQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNz
ZXMoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IHdlIG5lZWQgdG8gcnVuIHNpbmdsZS10aHJlYWRl
ZCBmb3Igbm93LiBTZWUKLSAgICAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzg1NTMuIFVuZm9ydHVuYXRlbHkgdGhpcwotICAgICAgICAjIHJvdXRpbmUgaXMg
Y2FsbGVkIHJpZ2h0IGJlZm9yZSB0aGUgbG9nZ2VyIGlzIGNvbmZpZ3VyZWQsIHNvIGlmIHdlCi0g
ICAgICAgICMgdHJ5IHRvIF9sb2cud2FybmluZygpLCBpdCBnZXRzIHRocm93biBhd2F5LgotICAg
ICAgICBpbXBvcnQgc3lzCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkRlZmF1bHRpbmcgdG8g
b25lIGNoaWxkIC0gc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
ODU1M1xuIikKLSAgICAgICAgcmV0dXJuIDEKLQogICAgIGRlZiBkcml2ZXJfbmFtZShzZWxmKToK
ICAgICAgICAgIiIibmFtZSBmb3IgdGhpcyBwb3J0J3MgZXF1aXZhbGVudCBvZiBEdW1wUmVuZGVy
VHJlZS4iIiIKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd1c2VfZHJ0Jyk6CmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5
CmluZGV4IDY5NmUzMzk4ZWE0YjI4YWM3NjIyNTkwN2RjMzYyZmZjM2ZiODZmOWUuLjcyZjkxZDgz
ODIxNWFmNGJjNDRmMWRjMWYwNjU1ZGFkYzdkMzM2ZmYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CkBAIC00NywxNSAr
NDcsNiBAQCBjbGFzcyBNYWNQb3J0KFdlYktpdFBvcnQpOgogICAgICAgICBrd2FyZ3Muc2V0ZGVm
YXVsdCgncG9ydF9uYW1lJywgJ21hYycgKyBzZWxmLnZlcnNpb24oKSkKICAgICAgICAgV2ViS2l0
UG9ydC5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKIAotICAgIGRlZiBkZWZhdWx0X2NoaWxkX3By
b2Nlc3NlcyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTogbmV3LXJ1bi13ZWJraXQtdGVzdHMgaXMg
dW5zdGFibGUgb24gTWFjIHJ1bm5pbmcgbW9yZSB0aGFuCi0gICAgICAgICMgZm91ciB0aHJlYWRz
IGluIHBhcmFsbGVsLgotICAgICAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzY2MjIKLSAgICAgICAgY2hpbGRfcHJvY2Vzc2VzID0gV2ViS2l0UG9ydC5k
ZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKQotICAgICAgICBpZiBjaGlsZF9wcm9jZXNzZXMg
PiA0OgotICAgICAgICAgICAgcmV0dXJuIDQKLSAgICAgICAgcmV0dXJuIGNoaWxkX3Byb2Nlc3Nl
cwotCiAgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgogICAgICAgICBwb3J0X25h
bWVzID0gW10KICAgICAgICAgaWYgc2VsZi5fbmFtZSA9PSAnbWFjLXRpZ2VyJzoKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzLnB5CmluZGV4IGY0ZTkyYTY4Njk4ZDRiMDY5MDMxZDZiYjFiMzc4ODJkYmFm
MWZhZjUuLmY4ZjhiZTQzNzAwYTg4OWNhNGYwMDJiMGJjMzdiNTZjZGE0NDc4ZGIgMTAwNzU1Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNjQsNyArNjQsNiBAQCBpbXBvcnQgc3lzCiBpbXBvcnQg
dGltZQogaW1wb3J0IHRyYWNlYmFjawogCi1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBkdW1w
X3JlbmRlcl90cmVlX3RocmVhZAogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQganNvbl9sYXlv
dXRfcmVzdWx0c19nZW5lcmF0b3IKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1lc3NhZ2Vf
YnJva2VyCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBwcmludGluZwpAQCAtMTM1LDcgKzEz
NCw3IEBAIGNsYXNzIFJlc3VsdFN1bW1hcnkob2JqZWN0KToKICAgICAgICAgIiIiQWRkIGEgVGVz
dFJlc3VsdCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBiaW4uCiAKICAgICAgICAgQXJnczoKLSAgICAg
ICAgICByZXN1bHQ6IFRlc3RSZXN1bHQgZnJvbSBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC4KKyAg
ICAgICAgICByZXN1bHQ6IFRlc3RSZXN1bHQKICAgICAgICAgICBleHBlY3RlZDogd2hldGhlciB0
aGUgcmVzdWx0IHdhcyB3aGF0IHdlIGV4cGVjdGVkIGl0IHRvIGJlLgogICAgICAgICAiIiIKIApA
QCAtMjI4LDYgKzIyNywyMiBAQCBkZWYgc3VtbWFyaXplX3VuZXhwZWN0ZWRfcmVzdWx0cyhwb3J0
X29iaiwgZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwKICAgICByZXR1cm4gcmVzdWx0cwog
CiAKK2NsYXNzIFdvcmtlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBu
dW1iZXIpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYubnVtYmVyID0g
bnVtYmVyCisgICAgICAgIHNlbGYuZG9uZSA9IEZhbHNlCisgICAgICAgIHNlbGYubmV4dF90aW1l
b3V0ID0gTm9uZQorICAgICAgICBzZWxmLndlZGdlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuc3Rh
dHMgPSB7fQorICAgICAgICBzZWxmLnN0YXRzWyduYW1lJ10gPSBuYW1lCisgICAgICAgIHNlbGYu
c3RhdHNbJ251bV90ZXN0cyddID0gMAorICAgICAgICBzZWxmLnN0YXRzWyd0b3RhbF90aW1lJ10g
PSAwCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiV29ya2VyKCIg
KyBzdHIoc2VsZi5fX2RpY3RfXykgKyAiKSIKKworCiBjbGFzcyBUZXN0UnVubmVyOgogICAgICIi
IkEgY2xhc3MgZm9yIG1hbmFnaW5nIHJ1bm5pbmcgYSBzZXJpZXMgb2YgdGVzdHMgb24gYSBzZXJp
ZXMgb2YgbGF5b3V0CiAgICAgdGVzdCBmaWxlcy4iIiIKQEAgLTI0MCwxOSArMjU1LDIyIEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgIyBpbiBEdW1wUmVuZGVyVHJlZS4KICAgICBERUZBVUxUX1RF
U1RfVElNRU9VVF9NUyA9IDYgKiAxMDAwCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwg
b3B0aW9ucywgcHJpbnRlciwgbWVzc2FnZV9icm9rZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSB0ZXN0IHJ1
bm5lciBkYXRhIHN0cnVjdHVyZXMuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBwb3J0OiBh
biBvYmplY3QgaW1wbGVtZW50aW5nIHBvcnQtc3BlY2lmaWMKICAgICAgICAgICBvcHRpb25zOiBh
IGRpY3Rpb25hcnkgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMKICAgICAgICAgICBwcmludGVyOiBh
IFByaW50ZXIgb2JqZWN0IHRvIHJlY29yZCB1cGRhdGVzIHRvLgotICAgICAgICAgIG1lc3NhZ2Vf
YnJva2VyOiBvYmplY3QgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHdvcmtlcnMuCisgICAgICAg
ICAgYnJva2VyOiBvYmplY3QgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHdvcmtlcnMuCiAgICAg
ICAgICIiIgorICAgICAgICBzZWxmLl9uYW1lID0gbWVzc2FnZV9icm9rZXIuTUFOQUdFUgogICAg
ICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwog
ICAgICAgICBzZWxmLl9wcmludGVyID0gcHJpbnRlcgotICAgICAgICBzZWxmLl9tZXNzYWdlX2Jy
b2tlciA9IG1lc3NhZ2VfYnJva2VyCisgICAgICAgIHNlbGYuX21lc3NhZ2VfYnJva2VyID0gTm9u
ZQorICAgICAgICBzZWxmLlVQREFURV9JTlRFUlZBTCA9IDAuMDEKKyAgICAgICAgc2VsZi5fd29y
a2VyX2NsaWVudHMgPSBbXQogCiAgICAgICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRv
IGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KICAgICAgICAgIyBzZWxmLl93ZWJzb2Nr
ZXRfc2VjdXJlX3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCkBAIC0yNjEs
OSArMjc5LDE0IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICMgYSBzZXQgb2YgdGVzdCBm
aWxlcywgYW5kIHRoZSBzYW1lIHRlc3RzIGFzIGEgbGlzdAogICAgICAgICBzZWxmLl90ZXN0X2Zp
bGVzID0gc2V0KCkKICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gTm9uZQotICAgICAg
ICBzZWxmLl9yZXN1bHRfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCiAgICAgICAgIHNlbGYuX3JldHJ5
aW5nID0gRmFsc2UKIAorICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFs
c2UKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCiAg
ICAgZGVmIGNvbGxlY3RfdGVzdHMoc2VsZiwgYXJncywgbGFzdF91bmV4cGVjdGVkX3Jlc3VsdHMp
OgogICAgICAgICAiIiJGaW5kIGFsbCB0aGUgZmlsZXMgdG8gdGVzdC4KIApAQCAtNTg1LDYyICs2
MDgsOTcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgaW4gdGhlIGZvcm0ge2Zp
bGVuYW1lOmZpbGVuYW1lLCB0ZXN0X3J1bl90aW1lOnRlc3RfcnVuX3RpbWV9CiAgICAgICAgICAg
ICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVz
dWx0cwogICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY3VycmVudF9maWxlX2xpc3QgPSBmaWxl
X2xpc3QKKyAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1t
YXJ5CiAKLSAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1NoYXJkaW5nIHRlc3Rz
IC4uLicpCiAgICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMoKQorICAgICAg
ICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzID0ge30K
KyAgICAgICAgc2VsZi5fd29ya2VycyA9IHt9CisKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmlu
dF91cGRhdGUoJ1NoYXJkaW5nIHRlc3RzIC4uLicpCiAgICAgICAgIHRlc3RfbGlzdHMgPSBzZWxm
Ll9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsCiAgICAgICAgICAgICBudW1fd29ya2VycyA+IDEgYW5k
IG5vdCBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKLSAgICAgICAg
ZmlsZW5hbWVfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIGZvciBpdGVtIGluIHRlc3Rf
bGlzdHM6Ci0gICAgICAgICAgICBmaWxlbmFtZV9xdWV1ZS5wdXQoaXRlbSkKKworICAgICAgICBi
cm9rZXIgPSBtZXNzYWdlX2Jyb2tlci5nZXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucykKKyAg
ICAgICAgc2VsZi5fbWVzc2FnZV9icm9rZXIgPSBicm9rZXIKKyAgICAgICAgZm9yIHRlc3RfbGlz
dCBpbiB0ZXN0X2xpc3RzOgorICAgICAgICAgICAgc2VsZi5fcG9zdCgndGVzdF9saXN0JywgdGVz
dF9saXN0KQorCisgICAgICAgICMgVGVsbCB0aGUgd29ya2VycyB0byBzaHV0IGRvd24gYWZ0ZXIg
dGhleSdyZSBkb25lIHJ1bm5pbmcgYWxsIHRoZQorICAgICAgICAjIHRlc3RzLgorICAgICAgICBm
b3IgaSBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgc2VsZi5fcG9zdCgnc3Rv
cCcpCiAKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nICVzIC4u
LicgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyLnBsdXJhbGl6
ZSgnd29ya2VyJywgbnVtX3dvcmtlcnMpKQotICAgICAgICBtZXNzYWdlX2Jyb2tlciA9IHNlbGYu
X21lc3NhZ2VfYnJva2VyCi0gICAgICAgIHNlbGYuX2N1cnJlbnRfZmlsZW5hbWVfcXVldWUgPSBm
aWxlbmFtZV9xdWV1ZQotICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5ID0gcmVz
dWx0X3N1bW1hcnkKLQotICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5kcnlfcnVuOgotICAg
ICAgICAgICAgdGhyZWFkcyA9IG1lc3NhZ2VfYnJva2VyLnN0YXJ0X3dvcmtlcnMoc2VsZikKLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIHRocmVhZHMgPSB7fQorICAgICAgICBmb3Igd29ya2Vy
X251bWJlciBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgd29ya2VyX25hbWUg
PSBicm9rZXIuc3RhcnRfd29ya2VyKHdvcmtlcl9udW1iZXIpCisgICAgICAgICAgICB3ID0gV29y
a2VyKHdvcmtlcl9uYW1lLCB3b3JrZXJfbnVtYmVyKQorICAgICAgICAgICAgc2VsZi5fd29ya2Vy
c1t3b3JrZXJfbmFtZV0gPSB3CiAKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUo
IlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBG
YWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5kcnlfcnVuOgotICAgICAgICAgICAg
dHJ5OgotICAgICAgICAgICAgICAgIG1lc3NhZ2VfYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQot
ICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgIF9s
b2cuaW5mbygiSW50ZXJydXB0ZWQsIGV4aXRpbmciKQotICAgICAgICAgICAgICAgIG1lc3NhZ2Vf
YnJva2VyLmNhbmNlbF93b3JrZXJzKCkKLSAgICAgICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1
cHRlZCA9IFRydWUKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAjIFVuZXhw
ZWN0ZWQgZXhjZXB0aW9uOyBkb24ndCB0cnkgdG8gY2xlYW4gdXAgd29ya2Vycy4KLSAgICAgICAg
ICAgICAgICBfbG9nLmluZm8oIkV4Y2VwdGlvbiByYWlzZWQsIGV4aXRpbmciKQotICAgICAgICAg
ICAgICAgIHJhaXNlCi0KLSAgICAgICAgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgaW5k
aXZpZHVhbF90ZXN0X3RpbWluZ3MgPSBcCi0gICAgICAgICAgICBzZWxmLl9jb2xsZWN0X3RpbWlu
Z19pbmZvKHRocmVhZHMpCi0KLSAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwg
dGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICBpbmRpdmlkdWFs
X3Rlc3RfdGltaW5ncykKLQotICAgIGRlZiB1cGRhdGUoc2VsZik6Ci0gICAgICAgIHNlbGYudXBk
YXRlX3N1bW1hcnkoc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSkKLQotICAgIGRlZiBfY29s
bGVjdF90aW1pbmdfaW5mbyhzZWxmLCB0aHJlYWRzKToKLSAgICAgICAgdGVzdF90aW1pbmdzID0g
e30KLSAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSBbXQotICAgICAgICB0aHJlYWRf
dGltaW5ncyA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRp
b25zLmRyeV9ydW46CisgICAgICAgICAgICAgICAgZG9uZSA9IHNlbGYuX2NoZWNrX29uX3dvcmtl
cnMoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkb25lOgorICAgICAgICAgICAgICAgICAgICBi
cm9rZXIucnVuX21lc3NhZ2VfbG9vcChzZWxmLCBtZXNzYWdlX2Jyb2tlci5NQU5BR0VSKQorCisg
ICAgICAgICAgICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAg
ICAgICAgICAgICAgaWYgbm90IHcud2VkZ2VkIGFuZCBicm9rZXIud29ya2VyX2lzX2FsaXZlKHcu
bmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXIuam9pbl93b3JrZXIody5uYW1l
LCAwLjUpCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbm90IGJyb2tlci53b3JrZXJf
aXNfYWxpdmUody5uYW1lKQorCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAg
ICAgICAgICAgIF9sb2cuaW5mbygiSW50ZXJydXB0ZWQsIGV4aXRpbmciKQorICAgICAgICAgICAg
Zm9yIHdvcmtlcl9uYW1lIGluIHNlbGYuX3dvcmtlcnMua2V5cygpOgorICAgICAgICAgICAgICAg
IGJyb2tlci5jYW5jZWxfd29ya2VyKHdvcmtlcl9uYW1lKQorICAgICAgICAgICAga2V5Ym9hcmRf
aW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgVW5leHBl
Y3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0byBjbGVhbiB1cCB3b3JrZXJzLgorICAgICAgICAg
ICAgX2xvZy5pbmZvKCJFeGNlcHRpb24gcmFpc2VkLCBleGl0aW5nIikKKyAgICAgICAgICAgIHNl
bGYuX21lc3NhZ2VfYnJva2VyID0gTm9uZQorICAgICAgICAgICAgcmFpc2UKIAotICAgICAgICBm
b3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICB0aHJlYWRfdGltaW5ncy5hcHBlbmQo
eyduYW1lJzogdGhyZWFkLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ251bV90ZXN0cyc6IHRocmVhZC5nZXRfbnVtX3Rlc3RzKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICd0b3RhbF90aW1lJzogdGhyZWFkLmdldF90b3RhbF90aW1l
KCl9KQotICAgICAgICAgICAgdGVzdF90aW1pbmdzLnVwZGF0ZSh0aHJlYWQuZ2V0X3Rlc3RfZ3Jv
dXBfdGltaW5nX3N0YXRzKCkpCi0gICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncy5l
eHRlbmQodGhyZWFkLmdldF90ZXN0X3Jlc3VsdHMoKSkKKyAgICAgICAgc2VsZi5fbWVzc2FnZV9i
cm9rZXIgPSBOb25lCisgICAgICAgIHRocmVhZF90aW1pbmdzID0gW3cuc3RhdHMgZm9yIHcgaW4g
c2VsZi5fd29ya2Vycy52YWx1ZXMoKV0KKyAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRlcnJ1
cHRlZCwgdGhyZWFkX3RpbWluZ3MsCisgICAgICAgICAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHMs
IHNlbGYuX2FsbF9yZXN1bHRzKQorCisgICAgZGVmIF9wb3N0KHNlbGYsIG1lc3NhZ2VfbmFtZSwg
Km1lc3NhZ2VfYXJncyk6CisgICAgICAgIHNlbGYuX21lc3NhZ2VfYnJva2VyLnB1dF9tZXNzYWdl
KHNlbGYuX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2VfYnJva2VyLkFOWV9XT1JLRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncykKKworICAgIGRlZiBfY2hlY2tf
b25fd29ya2VycyhzZWxmKToKKyAgICAgICAgIlJldHVybnMgdHJ1ZSBpZmYgYWxsIHRoZSB3b3Jr
ZXJzIGhhdmUgZWl0aGVyIGNvbXBsZXRlZCBvciB3ZWRnZWQuIgorICAgICAgICBkb25lID0gVHJ1
ZQorICAgICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgYnJva2VyID0gc2VsZi5fbWVzc2Fn
ZV9icm9rZXIKKyAgICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAg
ICAgICAgIGlmIG5vdCB3LmRvbmUgYW5kIG5vdCB3LndlZGdlZDoKKyAgICAgICAgICAgICAgICBu
ZXh0X3RpbWVvdXQgPSB3Lm5leHRfdGltZW91dAorICAgICAgICAgICAgICAgIFdFREdFX1BBRERJ
TkcgPSA0MC4wCisgICAgICAgICAgICAgICAgaWYgbmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90
aW1lb3V0ICsgV0VER0VfUEFERElORzoKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcign
JykKKyAgICAgICAgICAgICAgICAgICAgYnJva2VyLmxvZ193ZWRnZWRfd29ya2VyKHcubmFtZSwg
dy5jdXJyZW50X3Rlc3RfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykK
KyAgICAgICAgICAgICAgICAgICAgdy53ZWRnZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IEZhbHNlCiAKLSAgICAgICAgcmV0dXJuICh0
aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAg
ICAgICAgaWYgZG9uZToKKyAgICAgICAgICAgIGlmIGFueShbdy53ZWRnZWQgZm9yIHdjIGluIHNl
bGYuX3dvcmtlcnNdKToKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQorICAgICAgICAg
ICAgICAgIF9sb2cuZXJyb3IoJ1JlbWFpbmluZyB3b3JrZXJzIGFyZSB3ZWRnZWQsIGJhaWxpbmcg
b3V0LicpCisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnTm8gd2VkZ2VkIHRocmVhZHMnKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgYnJva2VyLmFkZF90aW1lcihzZWxmLm5hbWUoKSwgc2VsZi5f
Y2hlY2tfb25fd29ya2VycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5VUERB
VEVfSU5URVJWQUwpCisgICAgICAgIHJldHVybiBkb25lCiAKICAgICBkZWYgbmVlZHNfaHR0cChz
ZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5lciBuZWVkcyBh
biBIVFRQIHNlcnZlci4iIiIKQEAgLTc3NCwyMyArODMyLDUxIEBAIGNsYXNzIFRlc3RSdW5uZXI6
CiAgICAgICAgIF9sb2cuZGVidWcoInN0b3BwaW5nIGhlbHBlciIpCiAgICAgICAgIHNlbGYuX3Bv
cnQuc3RvcF9oZWxwZXIoKQogCi0gICAgZGVmIHVwZGF0ZV9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9z
dW1tYXJ5KToKKyAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzcmMsIHRlc3RfaW5m
bywgaGFuZ190aW1lb3V0KToKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtlcnNbc3JjXQorICAgICAg
ICB3LmN1cnJlbnRfdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1l
KAorICAgICAgICAgICAgdGVzdF9pbmZvLmZpbGVuYW1lKQorICAgICAgICB3Lm5leHRfdGltZW91
dCA9IHRpbWUudGltZSgpICsgaGFuZ190aW1lb3V0CisKKyAgICBkZWYgaGFuZGxlX2RvbmUoc2Vs
Ziwgc3JjKToKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtlcnNbc3JjXQorICAgICAgICB3LmRvbmUg
PSBUcnVlCisgICAgICAgIHBhc3MKKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfdGVzdChzZWxm
LCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKICAgICAgICAgIiIiVXBkYXRlIHRoZSBzdW1t
YXJ5IGFuZCBwcmludCByZXN1bHRzIHdpdGggYW55IGNvbXBsZXRlZCB0ZXN0cy4iIiIKLSAgICAg
ICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSB0ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdC5sb2FkcyhzZWxmLl9yZXN1bHRfcXVldWUuZ2V0X25v
d2FpdCgpKQotICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgotICAgICAgICAgICAgICAg
IHJldHVybgotCi0gICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5tYXRj
aGVzX2FuX2V4cGVjdGVkX3Jlc3VsdCgKLSAgICAgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUs
IHJlc3VsdC50eXBlLCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQotICAgICAgICAgICAgcmVz
dWx0X3N1bW1hcnkuYWRkKHJlc3VsdCwgZXhwZWN0ZWQpCi0gICAgICAgICAgICBleHBfc3RyID0g
c2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAotICAgICAgICAgICAg
ICAgIHJlc3VsdC5maWxlbmFtZSkKLSAgICAgICAgICAgIGdvdF9zdHIgPSBzZWxmLl9leHBlY3Rh
dGlvbnMuZXhwZWN0YXRpb25fdG9fc3RyaW5nKHJlc3VsdC50eXBlKQotICAgICAgICAgICAgc2Vs
Zi5fcHJpbnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBn
b3Rfc3RyKQotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9wcm9ncmVzcyhyZXN1bHRf
c3VtbWFyeSwgc2VsZi5fcmV0cnlpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtl
cnNbc3JjXQorICAgICAgICB3Lm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAgdy5jdXJyZW50
X3Rlc3QgPSBOb25lCisKKyAgICAgICAgaWYgdy53ZWRnZWQ6CisgICAgICAgICAgICAjIEhtbS4g
VGhpcyBzaG91bGRuJ3QgaGFwcGVuIGlmIHdlIGhhdmUgb3VyIHRpbWVvdXRzCisgICAgICAgICAg
ICAjIHR1bmVkIHByb3Blcmx5LgorICAgICAgICAgICAgX2xvZy5lcnJvcigiJXMgdW53ZWRnZWQi
LCB3Lm5hbWUpCisKKyAgICAgICAgc2VsZi5fdXBkYXRlX3dvcmtlcl9zdGF0cyhzcmMsIHJlc3Vs
dCwgZWxhcHNlZF90aW1lKQorCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25z
Lm1hdGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KAorICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1l
LCByZXN1bHQudHlwZSwgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cykKKyAgICAgICAgZXhwX3N0
ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAg
ICAgIHJlc3VsdC5maWxlbmFtZSkKKyAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9u
cy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUpCisgICAgICAgIHNlbGYuX3ByaW50
ZXIucHJpbnRfdGVzdF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cikK
KworICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVj
dGVkKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Byb2dyZXNzKHNlbGYuX2N1cnJlbnRf
cmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fcmV0cnlpbmcsIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKworICAgIGRlZiBoYW5kbGVfZmlu
aXNoZWRfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUp
OgorICAgICAgICBzZWxmLl9ncm91cF9zdGF0c1tsaXN0X25hbWVdID0gKG51bV90ZXN0cywgZWxh
cHNlZF90aW1lKQorCisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNlcHRp
b25faW5mbyk6CisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5m
b1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KKworICAgIGRlZiBfdXBkYXRlX3dvcmtlcl9zdGF0cyhz
ZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fd29ya2Vyc1tz
cmNdLnN0YXRzWyd0b3RhbF90aW1lJ10gKz0gZWxhcHNlZF90aW1lCisgICAgICAgIHNlbGYuX3dv
cmtlcnNbc3JjXS5zdGF0c1snbnVtX3Rlc3RzJ10gKz0gMQorICAgICAgICBzZWxmLl9hbGxfcmVz
dWx0cy5hcHBlbmQocmVzdWx0KQogCiAgICAgZGVmIF9jbG9iYmVyX29sZF9yZXN1bHRzKHNlbGYp
OgogICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBkaXJlY3Rv
cmllcyBzaW5jZSB0aGUgb3RoZXIKQEAgLTk3MCw4ICsxMDU2LDcgQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKICAgICBkZWYgX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3Moc2VsZiwgaW5kaXZp
ZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICAgICAiIiJQcmludHMgYWdncmVnYXRlIHN0YXRpc3Rp
Y3MgKGUuZy4gbWVkaWFuLCBtZWFuLCBldGMuKSBmb3IgYWxsIHRlc3RzLgogICAgICAgICBBcmdz
OgotICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBMaXN0IG9mIGR1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkLlRlc3RTdGF0cwotICAgICAgICAgICAgICBmb3IgYWxsIHRlc3RzLgorICAg
ICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBMaXN0IG9mIFRlc3RSZXN1bHRzIGZvciBh
bGwgdGVzdHMuCiAgICAgICAgICIiIgogICAgICAgICB0ZXN0X3R5cGVzID0gW10gICMgVW5pdCB0
ZXN0cyBkb24ndCBhY3R1YWxseSBwcm9kdWNlIGFueSB0aW1pbmdzLgogICAgICAgICBpZiBpbmRp
dmlkdWFsX3Rlc3RfdGltaW5nczoKQEAgLTEwMDYsNyArMTA5MSw3IEBAIGNsYXNzIFRlc3RSdW5u
ZXI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpOgog
ICAgICAgICAiIiJQcmludHMgdGhlIHJ1biB0aW1lcyBmb3Igc2xvdywgdGltZW91dCBhbmQgY3Jh
c2ggdGVzdHMuCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWlu
Z3M6IExpc3Qgb2YgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFN0YXRzCisgICAgICAgICAg
aW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6IExpc3Qgb2YgVGVzdFN0YXRzCiAgICAgICAgICAgICAg
IGZvciBhbGwgdGVzdHMuCiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0
IGZvciB0ZXN0IHJ1bgogICAgICAgICAiIiIKQEAgLTEyOTUsMTMgKzEzODAsMTEgQEAgZGVmIHJ1
bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAogICAgICAg
ICBwcmludGVyLmNsZWFudXAoKQogICAgICAgICByZXR1cm4gMAogCi0gICAgYnJva2VyID0gbWVz
c2FnZV9icm9rZXIuZ2V0KHBvcnQsIG9wdGlvbnMpCi0KICAgICAjIFdlIHdyYXAgYW55IHBhcnRz
IG9mIHRoZSBydW4gdGhhdCBhcmUgc2xvdyBvciBsaWtlbHkgdG8gcmFpc2UgZXhjZXB0aW9ucwog
ICAgICMgaW4gYSB0cnkvZmluYWxseSB0byBlbnN1cmUgdGhhdCB3ZSBjbGVhbiB1cCB0aGUgbG9n
Z2luZyBjb25maWd1cmF0aW9uLgogICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSAtMQogICAg
IHRyeToKLSAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnQsIG9wdGlvbnMsIHBy
aW50ZXIsIGJyb2tlcikKKyAgICAgICAgdGVzdF9ydW5uZXIgPSBUZXN0UnVubmVyKHBvcnQsIG9w
dGlvbnMsIHByaW50ZXIpCiAgICAgICAgIHRlc3RfcnVubmVyLl9wcmludF9jb25maWcoKQogCiAg
ICAgICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJDb2xsZWN0aW5nIHRlc3RzIC4uLiIpCkBAIC0x
MzMwLDcgKzE0MTMsNiBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0
cHV0PXN5cy5zdGRlcnIsCiAgICAgICAgICAgICBfbG9nLmRlYnVnKCJUZXN0aW5nIGNvbXBsZXRl
ZCwgRXhpdCBzdGF0dXM6ICVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgIG51bV91bmV4cGVj
dGVkX3Jlc3VsdHMpCiAgICAgZmluYWxseToKLSAgICAgICAgYnJva2VyLmNsZWFudXAoKQogICAg
ICAgICBwcmludGVyLmNsZWFudXAoKQogCiAgICAgcmV0dXJuIG51bV91bmV4cGVjdGVkX3Jlc3Vs
dHMKQEAgLTE1NzAsOCArMTY1Miw4IEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAg
ICAgICAgICBoZWxwPSJOdW1iZXIgb2YgRHVtcFJlbmRlclRyZWVzIHRvIHJ1biBpbiBwYXJhbGxl
bC4iKSwKICAgICAgICAgIyBGSVhNRTogRGlzcGxheSBkZWZhdWx0IG51bWJlciBvZiBjaGlsZCBw
cm9jZXNzZXMgdGhhdCB3aWxsIHJ1bi4KICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0t
d29ya2VyLW1vZGVsIiwgYWN0aW9uPSJzdG9yZSIsCi0gICAgICAgICAgICBkZWZhdWx0PSJ0aHJl
YWRzIiwgaGVscD0oImNvbnRyb2xzIHdvcmtlciBtb2RlbC4gVmFsaWQgdmFsdWVzIGFyZSAiCi0g
ICAgICAgICAgICAiJ2lubGluZScgYW5kICd0aHJlYWRzJyAoZGVmYXVsdCkuIikpLAorICAgICAg
ICAgICAgZGVmYXVsdD0icHJvY2Vzc2VzIiwgaGVscD0iY29udHJvbHMgd29ya2VyIG1vZGVsLiBW
YWxpZCB2YWx1ZXMgYXJlICIKKyAgICAgICAgICAgICInaW5saW5lJywgJ3RocmVhZHMnLCBhbmQg
J3Byb2Nlc3NlcycgKGRlZmF1bHQpLiIpLAogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigi
LS1leHBlcmltZW50YWwtZnVsbHktcGFyYWxsZWwiLAogICAgICAgICAgICAgYWN0aW9uPSJzdG9y
ZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgIGhlbHA9InJ1biBhbGwgdGVzdHMg
aW4gcGFyYWxsZWwiKSwKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5
CmluZGV4IDZiYjc0MWE1N2M5MWMwYjBlMjY0Y2ZkZTdkNjQxMGNiZjU4Mzk2NmEuLmQzYTg2MDAx
ZGQ1YjQxYjZhOTdhZjQwMmY2YjAyNzQ5YjYzY2EzZDYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3Qu
cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weQpAQCAtMTg3LDcgKzE4Nyw4IEBAIGNsYXNzIE1haW5UZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9iYXRjaF9zaXplKHNlbGYpOgogICAg
ICAgICBiYXRjaF90ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1iYXRjaC1zaXplJywgJzIn
XSkKICAgICAgICAgZm9yIGJhdGNoIGluIGJhdGNoX3Rlc3RzX3J1bjoKLSAgICAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShsZW4oYmF0Y2gpIDw9IDIsICclcyBoYWQgdG9vIG1hbnkgdGVzdHMnICUg
JywgJy5qb2luKGJhdGNoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oYmF0Y2gp
IDw9IDIsICclcyBoYWQgdG9vIG1hbnkgdGVzdHMnICUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnLCcuam9pbihiYXRjaCkpCiAKICAgICBkZWYgdGVzdF9jaGlsZF9wcm9jZXNzXzEoc2Vs
Zik6CiAgICAgICAgIChyZXMsIGJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRwdXQsIHVzZXIp
ID0gbG9nZ2luZ19ydW4oCkBAIC0yNzAsMzggKzI3MSw2MCBAQCBjbGFzcyBNYWluVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcnVuX2NodW5rKHNlbGYpOgogICAgICAgICAj
IFRlc3QgdGhhdCB3ZSBhY3R1YWxseSBzZWxlY3QgdGhlIHJpZ2h0IGNodW5rCiAgICAgICAgIGFs
bF90ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQotICAgICAg
ICBjaHVua190ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1ydW4tY2h1bmsnLCAnMTo0J10s
IGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBjaHVua190ZXN0c19ydW4gPSBnZXRfdGVz
dHNfcnVuKFsnLS1ydW4tY2h1bmsnLCAnMTo0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxhdHRlbl9iYXRjaGVzPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGFsbF90ZXN0c19ydW5bNDo4XSwgY2h1bmtfdGVzdHNfcnVuKQogCi0gICAgICAgICMg
VGVzdCB0aGF0IHdlIHdyYXAgYXJvdW5kIGlmIHRoZSBudW1iZXIgb2YgdGVzdHMgaXMgbm90IGV2
ZW5seSBkaXZpc2libGUgYnkgdGhlIGNodW5rIHNpemUKLSAgICAgICAgdGVzdHNfdG9fcnVuID0g
WydwYXNzZXMvZXJyb3IuaHRtbCcsICdwYXNzZXMvaW1hZ2UuaHRtbCcsICdwYXNzZXMvcGxhdGZv
cm1faW1hZ2UuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJ10KLSAgICAgICAgY2h1bmtfdGVzdHNf
cnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tcnVuLWNodW5rJywgJzE6MyddICsgdGVzdHNfdG9fcnVu
LCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoWydwYXNzZXMvdGV4dC5odG1sJywgJ3Bhc3Nlcy9lcnJvci5odG1sJywg
J3Bhc3Nlcy9pbWFnZS5odG1sJ10sIGNodW5rX3Rlc3RzX3J1bikKKyAgICAgICAgIyBUZXN0IHRo
YXQgd2Ugd3JhcCBhcm91bmQgaWYgdGhlIG51bWJlciBvZiB0ZXN0cyBpcyBub3QgZXZlbmx5Cisg
ICAgICAgICMgZGl2aXNpYmxlIGJ5IHRoZSBjaHVuayBzaXplLgorICAgICAgICB0ZXN0c190b19y
dW4gPSBbJ3Bhc3Nlcy9lcnJvci5odG1sJywgJ3Bhc3Nlcy9pbWFnZS5odG1sJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICdwYXNzZXMvcGxhdGZvcm1faW1hZ2UuaHRtbCcsICdwYXNzZXMvdGV4
dC5odG1sJ10KKyAgICAgICAgY2h1bmtfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tcnVu
LWNodW5rJywgJzE6MyddICsgdGVzdHNfdG9fcnVuLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKFsncGFzc2VzL3RleHQuaHRtbCcsICdwYXNzZXMvZXJyb3IuaHRtbCcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3Nlcy9pbWFnZS5odG1sJ10sIGNodW5rX3Rl
c3RzX3J1bikKIAogICAgIGRlZiB0ZXN0X3J1bl9mb3JjZShzZWxmKToKICAgICAgICAgIyBUaGlz
IHJhaXNlcyBhbiBleGNlcHRpb24gYmVjYXVzZSB3ZSBydW4KLSAgICAgICAgIyBmYWlsdXJlcy9l
eHBlY3RlZC9leGNlcHRpb24uaHRtbCwgd2hpY2ggaXMgbm9ybWFsbHkgU0tJUHBlZC4KLSAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sIFsnLS1mb3JjZSdd
KQorICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sIGFuZAorICAgICAg
ICAjIGZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJkLCB3aGljaCBhcmUgbm9ybWFsbHkgU0tJUHBl
ZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9nZ2luZ19ydW4oWyctLWZvcmNlJ10pCisg
ICAgICAgICAgICB0ZXN0X3Bhc3NlZCA9IEZhbHNlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9y
OgorICAgICAgICAgICAgdGVzdF9wYXNzZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBLZXlib2Fy
ZEludGVycnVwdDoKKyAgICAgICAgICAgIHRlc3RfcGFzc2VkID0gVHJ1ZQorICAgICAgICBzZWxm
LmFzc2VydFRydWUodGVzdF9wYXNzZWQpCiAKICAgICBkZWYgdGVzdF9ydW5fcGFydChzZWxmKToK
ICAgICAgICAgIyBUZXN0IHRoYXQgd2UgYWN0dWFsbHkgc2VsZWN0IHRoZSByaWdodCBwYXJ0Ci0g
ICAgICAgIHRlc3RzX3RvX3J1biA9IFsncGFzc2VzL2Vycm9yLmh0bWwnLCAncGFzc2VzL2ltYWdl
Lmh0bWwnLCAncGFzc2VzL3BsYXRmb3JtX2ltYWdlLmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCdd
Ci0gICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXJ1bi1wYXJ0JywgJzE6Midd
ICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1
ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNzZXMvZXJyb3IuaHRtbCcsICdwYXNz
ZXMvaW1hZ2UuaHRtbCddLCB0ZXN0c19ydW4pCi0KLSAgICAgICAgIyBUZXN0IHRoYXQgd2Ugd3Jh
cCBhcm91bmQgaWYgdGhlIG51bWJlciBvZiB0ZXN0cyBpcyBub3QgZXZlbmx5IGRpdmlzaWJsZSBi
eSB0aGUgY2h1bmsgc2l6ZQotICAgICAgICAjIChoZXJlIHdlIGVuZCB1cCB3aXRoIDMgcGFydHMs
IGVhY2ggd2l0aCAyIHRlc3RzLCBhbmQgd2Ugb25seSBoYXZlIDQgdGVzdHMgdG90YWwsIHNvIHRo
ZQorICAgICAgICB0ZXN0c190b19ydW4gPSBbJ3Bhc3Nlcy9lcnJvci5odG1sJywgJ3Bhc3Nlcy9p
bWFnZS5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvcGxhdGZvcm1faW1h
Z2UuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJ10KKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rl
c3RzX3J1bihbJy0tcnVuLXBhcnQnLCAnMToyJ10gKyB0ZXN0c190b19ydW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0
Y2hlcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy9lcnJvci5odG1s
JywgJ3Bhc3Nlcy9pbWFnZS5odG1sJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
c19ydW4pCisKKyAgICAgICAgIyBUZXN0IHRoYXQgd2Ugd3JhcCBhcm91bmQgaWYgdGhlIG51bWJl
ciBvZiB0ZXN0cyBpcyBub3QgZXZlbmx5CisgICAgICAgICMgZGl2aXNpYmxlIGJ5IHRoZSBjaHVu
ayBzaXplIChoZXJlIHdlIGVuZCB1cCB3aXRoIDMgcGFydHMsIGVhY2gKKyAgICAgICAgIyB3aXRo
IDIgdGVzdHMsIGFuZCB3ZSBvbmx5IGhhdmUgNCB0ZXN0cyB0b3RhbCwgc28gdGhlCiAgICAgICAg
ICMgbGFzdCBwYXJ0IHJlcGVhdHMgdGhlIGZpcnN0IHR3byB0ZXN0cykuCi0gICAgICAgIGNodW5r
X3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXJ1bi1wYXJ0JywgJzM6MyddICsgdGVzdHNf
dG9fcnVuLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNzZXMvZXJyb3IuaHRtbCcsICdwYXNzZXMvaW1hZ2Uu
aHRtbCddLCBjaHVua190ZXN0c19ydW4pCisgICAgICAgIGNodW5rX3Rlc3RzX3J1biA9IGdldF90
ZXN0c19ydW4oWyctLXJ1bi1wYXJ0JywgJzM6MyddICsgdGVzdHNfdG9fcnVuLAorICAgICAgICAg
ICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL2Vycm9yLmh0bWwnLCAncGFzc2VzL2ltYWdlLmh0bWwn
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfdGVzdHNfcnVuKQogCiAgICAgZGVm
IHRlc3RfcnVuX3NpbmdseShzZWxmKToKICAgICAgICAgYmF0Y2hfdGVzdHNfcnVuID0gZ2V0X3Rl
c3RzX3J1bihbJy0tcnVuLXNpbmdseSddKQogICAgICAgICBmb3IgYmF0Y2ggaW4gYmF0Y2hfdGVz
dHNfcnVuOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGJhdGNoKSwgMSwgJyVz
IGhhZCB0b28gbWFueSB0ZXN0cycgJSAnLCAnLmpvaW4oYmF0Y2gpKQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMobGVuKGJhdGNoKSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICclcyBoYWQgdG9vIG1hbnkgdGVzdHMnICUgJywgJy5qb2luKGJhdGNoKSkKIAogICAgIGRl
ZiB0ZXN0X3NpbmdsZV9maWxlKHNlbGYpOgotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNf
cnVuKFsncGFzc2VzL3RleHQuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2Jh
dGNoZXM9VHJ1ZSkKKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ3Bhc3Nlcy90
ZXh0Lmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoWydwYXNzZXMvdGV4dC5odG1sJ10sIHRlc3RzX3J1bikKIAogICAgIGRlZiB0ZXN0X3Rlc3Rf
bGlzdChzZWxmKToKQEAgLTMwOSw3ICszMzIsOCBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIHRtcGZpbGUgPSBmaWxlKGZpbGVuYW1lLCBtb2RlPSd3KycpCiAg
ICAgICAgIHRtcGZpbGUud3JpdGUoJ3Bhc3Nlcy90ZXh0Lmh0bWwnKQogICAgICAgICB0bXBmaWxl
LmNsb3NlKCkKLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tdGVzdC1saXN0
PSVzJyAlIGZpbGVuYW1lXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRy
dWUpCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXRlc3QtbGlzdD0lcycg
JSBmaWxlbmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKFsncGFzc2VzL3RleHQuaHRtbCddLCB0ZXN0c19ydW4pCiAgICAgICAgIG9zLnJlbW92ZShm
aWxlbmFtZSkKICAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS10
ZXN0LWxpc3Q9JXMnICUgZmlsZW5hbWVdLApAQCAtMzczLDggKzM5Nyw4IEBAIGNsYXNzIE1haW5U
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgdGVzdF9wb3J0ID0gZ2V0X3BvcnRfZm9y
X3J1bihiYXNlX2FyZ3MgKyBbJy0tdG9sZXJhbmNlJywgJzAnXSkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgwLCB0ZXN0X3BvcnQudG9sZXJhbmNlX3VzZWRfZm9yX2RpZmZfaW1hZ2UpCiAKLSAg
ICAgICAgIyBPdGhlcndpc2UgdGhlIHBvcnQncyBkZWZhdWx0IHRvbGVyYW5jZSBiZWhhdmlvciAo
aW5jbHVkaW5nIGlnbm9yaW5nIGl0KQotICAgICAgICAjIHNob3VsZCBiZSB1c2VkLgorICAgICAg
ICAjIE90aGVyd2lzZSB0aGUgcG9ydCdzIGRlZmF1bHQgdG9sZXJhbmNlIGJlaGF2aW9yIChpbmNs
dWRpbmcgaWdub3JpbmcKKyAgICAgICAgIyBpdCkgc2hvdWxkIGJlIHVzZWQuCiAgICAgICAgIHRl
c3RfcG9ydCA9IGdldF9wb3J0X2Zvcl9ydW4oYmFzZV9hcmdzKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKE5vbmUsIHRlc3RfcG9ydC50b2xlcmFuY2VfdXNlZF9mb3JfZGlmZl9pbWFnZSkKIApA
QCAtMzg1LDggKzQwOSw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAndGhy
ZWFkcyddKSkKIAogICAgIGRlZiB0ZXN0X3dvcmtlcl9tb2RlbF9fcHJvY2Vzc2VzKHNlbGYpOgot
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyctLXdvcmtlci1tb2RlbCcsICdwcm9jZXNzZXMnXSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS13b3JrZXItbW9kZWwnLCAncHJv
Y2Vzc2VzJ10pKQogCiAgICAgZGVmIHRlc3Rfd29ya2VyX21vZGVsX191bmtub3duKHNlbGYpOgog
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nX3J1biwKQEAgLTQx
NCw4ICs0MzcsOCBAQCBjbGFzcyBSZWJhc2VsaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgICAgICBiYXNlbGluZSA9IGZpbGUgKyAiLWV4cGVjdGVkIiArIGV4dAogICAgICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGFueShmLmZpbmQoYmFzZWxpbmUpICE9IC0xIGZvciBmIGluIGZp
bGVfbGlzdCkpCiAKLSAgICAjIEZJWE1FOiBBZGQgdGVzdHMgdG8gZW5zdXJlIHRoYXQgd2UncmUg
Km5vdCogd3JpdGluZyBiYXNlbGluZXMgd2hlbiB3ZSdyZSBub3QKLSAgICAjIHN1cHBvc2VkIHRv
IGJlLgorICAgICMgRklYTUU6IEFkZCB0ZXN0cyB0byBlbnN1cmUgdGhhdCB3ZSdyZSAqbm90KiB3
cml0aW5nIGJhc2VsaW5lcyB3aGVuCisgICAgIyB3ZSdyZSBub3Qgc3VwcG9zZWQgdG8gYmUuCiAK
ICAgICBkZWYgZGlzYWJsZWRfdGVzdF9yZXNldF9yZXN1bHRzKHNlbGYpOgogICAgICAgICAjIEZJ
WE1FOiBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgdW50aWwgd2UgY2FuIHJld3JpdGUgaXQgdG8gdXNl
IGEKQEAgLTQ3NCw3ICs0OTcsNyBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIG1vY2tfcG9ydC5maWxlbmFtZV90b191cmkgPSBsYW1iZGEgbmFtZTog
bmFtZQogCiAgICAgICAgIHJ1bm5lciA9IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcihwb3J0
PW1vY2tfcG9ydCwgb3B0aW9ucz1Nb2NrKCksCi0gICAgICAgICAgICBwcmludGVyPU1vY2soKSwg
bWVzc2FnZV9icm9rZXI9TW9jaygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJpbnRlcj1Nb2NrKCkpCiAgICAgICAgIGV4cGVjdGVkX2h0bWwgPSB1IiIi
PGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5MYXlvdXQgVGVzdCBSZXN1bHRzICh0aW1lKTwv
dGl0bGU+CkBAIC00ODUsMTQgKzUwOCwxNCBAQCBjbGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiA8L3A+CiA8L2JvZHk+PC9odG1sPgogIiIiCi0gICAgICAgIGh0bWwgPSBy
dW5uZXIuX3Jlc3VsdHNfaHRtbChbInRlc3RfcGF0aCJdLCB7fSwgIlRpdGxlIiwgb3ZlcnJpZGVf
dGltZT0idGltZSIpCisgICAgICAgIGh0bWwgPSBydW5uZXIuX3Jlc3VsdHNfaHRtbChbInRlc3Rf
cGF0aCJdLCB7fSwgIlRpdGxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG92ZXJyaWRlX3RpbWU9InRpbWUiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0bWwsIGV4
cGVjdGVkX2h0bWwpCiAKICAgICBkZWYgdGVzdF9zaGFyZF90ZXN0cyhzZWxmKToKICAgICAgICAg
IyBUZXN0IHRoYXQgX3NoYXJkX3Rlc3RzIGluIHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciBy
ZWFsbHkKICAgICAgICAgIyBwdXQgdGhlIGh0dHAgdGVzdHMgZmlyc3QgaW4gdGhlIHF1ZXVlLgot
ICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1N
b2NrKCksCi0gICAgICAgICAgICBwcmludGVyPU1vY2soKSwgbWVzc2FnZV9icm9rZXI9TW9jaygp
KQorICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9u
cz1Nb2NrKCksIHByaW50ZXI9TW9jaygpKQogCiAgICAgICAgIHRlc3RfbGlzdCA9IFsKICAgICAg
ICAgICAiTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNvZGUuaHRtIiwKQEAgLTUxOCw5
ICs1NDEsMTEgQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICBtdWx0aV90aHJlYWRfcmVzdWx0cyA9IHJ1bm5lci5fc2hhcmRfdGVzdHModGVzdF9saXN0
LCBUcnVlKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRlc3RzX3RvX2h0dHBfbG9jayIs
IHNpbmdsZV90aHJlYWRfcmVzdWx0c1swXVswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChl
eHBlY3RlZF90ZXN0c190b19odHRwX2xvY2ssIHNldChzaW5nbGVfdGhyZWFkX3Jlc3VsdHNbMF1b
MV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3RvX2h0dHBfbG9j
aywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoc2luZ2xlX3RocmVhZF9yZXN1bHRzWzBd
WzFdKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNfdG9faHR0cF9sb2NrIiwgbXVs
dGlfdGhyZWFkX3Jlc3VsdHNbMF1bMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0
ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQobXVsdGlfdGhyZWFkX3Jlc3VsdHNbMF1bMV0pKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3RzX3RvX2h0dHBfbG9jaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBzZXQobXVsdGlfdGhyZWFkX3Jlc3VsdHNbMF1bMV0pKQog
CiAKIGNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75364</attachid>
            <date>2010-12-02 03:01:44 -0800</date>
            <delta_ts>2010-12-07 20:45:22 -0800</delta_ts>
            <desc>Patch - merge to r73080 plus the chain of bugs from 50367 .. 50381</desc>
            <filename>bug-48820-20101202030143.patch</filename>
            <type>text/plain</type>
            <size>87953</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwZThlYTZlNTdiM2Y4YzQ2M2ZkMDE3MTA3YjRhZTkzZDY0ODNkOGE0Li4wNzA5ZGVk
YmQ5NjZkNTg0YzcwN2IyNDJkMGU3MDA4YzVhMjlmZjNkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIyIEBA
CisyMDEwLTEyLTAyICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIG5yd3QgbXVsdGlwcm9j
ZXNzaW5nIC0gYWRkIGluIGFjdHVhbCBtdWx0aXByb2Nlc3NpbmcgY29kZQorCisgICAgICAgIFRo
aXMgcGF0Y2ggZGVwZW5kcyBvbiBidWcgNTAzNzUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMzgxCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdl
X2Jyb2tlcl91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L21hYy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKKzIwMTAtMTItMDEg
IERpcmsgUHJhbmtlICA8ZHByYW5la0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbmV3LXJ1bi13ZWJraXQtdGVzdHM6IGFjdHVh
bGx5IGltcGxlbWVudCBtZXNzYWdpbmcgYmV0d2VlbgorICAgICAgICB0aHJlYWRzLgorICAgICAg
ICAgIAorICAgICAgICBUaGlzIHBhdGNoIGRlcGVuZHMgb24gYnVnIDUwMzc0LgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDM3NQorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWQucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRl
c3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5OgorCisyMDEwLTEyLTAxICBEaXJrIFByYW5rZSAgPGRw
cmFua2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIG5yd3QgbXVsdGlwcm9jZXNzaW5nIC0gbW92ZSBsb2dpYyBiYWNrIGludG8g
cnVuX3dlYmtpdF90ZXN0cworCisgICAgICAgIFRoaXMgY2hhbmdlIG1vdmVzIGEgYnVuY2ggb2Yg
bG9naWMgdGhhdCBJIGhhZCBwdXQgaW50bworICAgICAgICBtZXNzYWdlX2Jyb2tlciBiYWNrIGlu
dG8gcnVuX3dlYmtpdF90ZXN0cywgaW4gYSBzbGlnaHRseQorICAgICAgICBkaWZmZXJlbnQgZm9y
bWF0LiBXb3JrZXJNZXNzYWdlQnJva2VyIG5lZWRlZCB0byBiZWNvbWUgbGVzcyBhd2FyZSBvZgor
ICAgICAgICB0aGUgbG9naWMgdGhlIFRlc3RSdW5uZXIgY2xhc3MgdXNlcywgYW5kIG1vcmUgZ2Vu
ZXJpYy4KKyAgICAgICAgRXZlbnR1YWxseSB0aGUgTWVzc2FnZUJyb2tlciB3aWxsIG9ubHkgZG8g
Z2VuZXJpYyBtZXNzYWdpbmcgYW5kCisgICAgICAgIHRocmVhZC9wcm9jZXNzLXBvb2xpbmcsIGFu
ZCAoYWxtb3N0KSBhbGwgb2YgdGhlCisgICAgICAgIHJ1bi13ZWJraXQtdGVzdHMtc3BlY2lmaWMg
bG9naWMgd2lsbCBiZSBtb3ZlZCB0bworICAgICAgICBydW5fd2Via2l0X3Rlc3RzLnB5IGFuZCBk
dW1wX3JlbmRlcl90cmVlX3RocmVhZC5weS4KKyAgICAgICAgCisgICAgICAgIFRoZSBiaWdnZXN0
IGNoYW5nZXMgYXJlIHRoYXQgdGhlIEJyb2tlciBjYW4gbm93IHN0YXJ0IGEgc2luZ2xlCisgICAg
ICAgIHdvcmtlciwgYnV0IHRoZSByZXNwb25zaWJpbGl0eSBmb3Igc3RhcnRpbmcgYWxsIG9mIHRo
ZW0gaXMgcHVzaGVkCisgICAgICAgIGJhY2sgdG8gdGhlIFRlc3RSdW5uZXIgKE1hbmFnZXIpLCBh
bmQgdGhlIGxvZ2ljIGZvciBjaGVja2luZyBpZgorICAgICAgICB0aGUgdGhyZWFkcyBhcmUgZG9u
ZSBvciB3ZWRnZWQgaXMgbW92ZWQgYmFjayB0byBUZXN0UnVubmVyLiBXZQorICAgICAgICBhbHNv
IHJlbW92ZSBXb3JrZXJNZXNzYWdlQnJva2VyLmNsZWFudXAgKG5vdCBuZWVkZWQpIGFuZAorICAg
ICAgICBjYW5jZWxfd29ya2VycyAodGhleSBoYXZlIHRvIGJlIGNhbmNlbGxlZCBpbmRpdmlkdWFs
bHkpLgorICAgICAgICAKKyAgICAgICAgVGhlICBtZXNzYWdlX2Jyb2tlciBpcyBub3cgZW5jYXBz
dWxhdGVkIGluc2lkZQorICAgICAgICBUZXN0UnVubmVyLl9ydW5fdGVzdHMoKTsgaXQgb25seSBu
ZWVkcyB0byBleGlzdCB3aGlsZSBhY3R1YWxseQorICAgICAgICBydW5uaW5nIHRoZSB0ZXN0cy4K
KworICAgICAgICBBbHNvLCBkZWxldGUgYSBidW5jaCBvZiB0ZXN0cyBpbiBtZXNzYWdlX2Jyb2tl
cl91bml0dGVzdCB0aGF0IG5vCisgICAgICAgIGxvbmdlciBtYWtlIG11Y2ggc2Vuc2UuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBkZXBlbmRzIG9uIGJ1ZyA1MDM3Mi4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAzNzQKKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVf
dGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5Ogor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90
ZXN0c191bml0dGVzdC5weToKKworMjAxMC0xMi0wMSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBuZXctcnVuLXdlYmtpdC10ZXN0czogbWlub3IgY2xlYW51cCBmb3IgbXVsdGlwcm9jZXNz
aW5nIHdvcmsKKworICAgICAgICBUaGlzIGNoYW5nZToKKyAgICAgICAgKiBtb3ZlcyB3b3JrZXIg
bmFtaW5nIGludG8gVGVzdFNoZWxsVGhyZWFkLCBlbGltaW5hdGluZyBhCisgICAgICAgICAgcGFy
YW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciBhbmQgcHV0dGluZyB0aGUgcmVzcG9uc2liaWxpdHkg
aW4KKyAgICAgICAgICB0aGUgY29ycmVjdCBwbGFjZS4KKyAgICAgICAgKiBlbGltaW5hdGVzIHRo
ZSBfV29ya2VyU3RhdGUoKSBjbGFzcyBpbiBtZXNzYWdlX2Jyb2tlciwgYmVjYXVzZQorICAgICAg
ICAgIGl0IHR1cm5zIG91dCB0aGF0IHN0YXRlIHJlYWxseSBuZWVkcyB0byBiZSBpbiBydW5fd2Vi
a2l0X3Rlc3RzCisgICAgICAgICogcmVuYW1lcyB0aGUgQnJva2VyIGNsYXNzZXMgdG8gYmUgbW9k
dWxlLXByaXZhdGUuCisgICAgICAgICogZml4ZXMgYSBidW5jaCBvZiBtaW5vciBjb21tZW50aW5n
IGFuZCB3aGl0ZXNwYWNlIGlzc3VlcyB0bworICAgICAgICAgIG1ha2Ugc3Vic2VxdWVudCBwYXRj
aGVzIGEgYml0IGNsZWFyZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkZXBlbmRzIG9uIGJ1ZyA1
MDM2Ny4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTAzNzIKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3Nh
Z2VfYnJva2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weToKKworMjAxMC0xMi0wMSAg
RGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpcyBhIGJ1bmNoIG9mIGNs
ZWFudXAgLyByZWZhY3RvcmluZyBvZiB0aGUgZmlsZQorICAgICAgICBiZWxvdy4gSXQgbW92ZXMg
YSBidW5jaCBvZiBmcmVlIGZ1bmN0aW9ucyB0byBtZXRob2RzIG9uIHRoZQorICAgICAgICBUZXN0
U2hlbGxUaHJlYWQgY2xhc3MsIGFuZCByZXN0cnVjdHVyZXMgb3RoZXIgbWV0aG9kcyB0byBiZQor
ICAgICAgICBjbG9zZXIgdG8gdGhlIHN0cnVjdHVyZSB3ZSdsbCBuZWVkIGZvciB0aGUgbXVsdGlw
cm9jZXNzaW5nCisgICAgICAgIHJld3JpdGUuCisKKyAgICAgICAgSXQgYWxzbyBtYWtlcyB0aGUg
bG9naWMgb2YgLS1ydW4tc2luZ2x5IGEgKmxvdCogZWFzaWVyIHRvIGZvbGxvdworICAgICAgICBi
eSBuZXN0bGluZyBhbGwgb2YgdGhlIHNlcGFyYXRlLXRocmVhZCBsb2dpYyBpbnRvIGEgc2luZ2xl
CisgICAgICAgIHJvdXRpbmUuCisKKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIG5vIHNlbWFudGlj
IGNoYW5nZXMgaW4gdGhpcyBwYXRjaCwganVzdCBjbGVhbnVwLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDM2NworCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWQucHk6CisKIDIwMTAtMTItMDEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKaW5kZXgg
ZmRiOGRhNmNjODBiNzNlZTdkZmI3ZDYxZDlkYmJjYmJhYmJjYjQ3OC4uMzc1NDgyN2FlYTU1MGU2
YWU1Nzg5NGZkZjIzNmNjYmVjZDE4OWZkZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90
aHJlYWQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKQEAgLTQyLDEwICs0Miw4
IEBAIGltcG9ydCBjb2RlY3MKIGltcG9ydCBjb3B5CiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9z
Ci1pbXBvcnQgUXVldWUKIGltcG9ydCBzaWduYWwKIGltcG9ydCBzeXMKLWltcG9ydCB0aHJlYWQK
IGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiAKQEAgLTU0LDYgKzUyLDcgQEAgZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgaW1hZ2VfZGlmZgogZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgdGVzdF90eXBlX2Jhc2UKIGZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRleHRfZGlmZgogCitp
bXBvcnQgbWVzc2FnZV9icm9rZXIKIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBpbXBvcnQgdGVzdF9v
dXRwdXQKIGltcG9ydCB0ZXN0X3Jlc3VsdHMKQEAgLTYyLDIxNyArNjEsMjIgQEAgX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UuIgog
ICAgICAgICAgICAgICAgICAgICAgICAgICJkdW1wX3JlbmRlcl90cmVlX3RocmVhZCIpCiAKIAot
ZGVmIF9leHBlY3RlZF90ZXN0X291dHB1dChwb3J0LCBmaWxlbmFtZSk6Ci0gICAgIiIiUmV0dXJu
cyBhbiBleHBlY3RlZCBUZXN0T3V0cHV0IG9iamVjdC4iIiIKLSAgICByZXR1cm4gdGVzdF9vdXRw
dXQuVGVzdE91dHB1dChwb3J0LmV4cGVjdGVkX3RleHQoZmlsZW5hbWUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvcnQuZXhwZWN0ZWRfaW1hZ2UoZmlsZW5hbWUpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuZXhwZWN0ZWRfY2hlY2tzdW0oZmls
ZW5hbWUpKQotCi1kZWYgX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQs
IHRlc3RfdHlwZXMsIHRlc3RfYXJncywKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQs
IHdvcmtlcl9uYW1lKToKLSAgICAiIiJSZWNlaXZlcyB0aGUgb3V0cHV0IGZyb20gYSBEdW1wUmVu
ZGVyVHJlZSBwcm9jZXNzLCBzdWJqZWN0cyBpdCB0byBhCi0gICAgbnVtYmVyIG9mIHRlc3RzLCBh
bmQgcmV0dXJucyBhIGxpc3Qgb2YgZmFpbHVyZSB0eXBlcyB0aGUgdGVzdCBwcm9kdWNlZC4KLQot
ICAgIEFyZ3M6Ci0gICAgICBwb3J0OiBwb3J0LXNwZWNpZmljIGhvb2tzCi0gICAgICBvcHRpb25z
OiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmd1bWVudCBmcm9tIG9wdHBhcnNlCi0gICAgICBwcm9j
OiBhbiBhY3RpdmUgRHVtcFJlbmRlclRyZWUgcHJvY2VzcwotICAgICAgdGVzdF9pbnB1dDogT2Jq
ZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5kIHRpbWVvdXQKLSAgICAgIHRlc3Rf
dHlwZXM6IGxpc3Qgb2YgdGVzdCB0eXBlcyB0byBzdWJqZWN0IHRoZSBvdXRwdXQgdG8KLSAgICAg
IHRlc3RfYXJnczogYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBlYWNoIHRlc3QKLSAgICAgIHRl
c3Rfb3V0cHV0OiBhIFRlc3RPdXRwdXQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG91dHB1dCBvZiB0
aGUgdGVzdAotICAgICAgd29ya2VyX25hbWU6IHdvcmtlciBuYW1lIGZvciBsb2dnaW5nCi0KLSAg
ICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0Ci0gICAgIiIiCi0gICAgZmFpbHVyZXMgPSBb
XQotCi0gICAgaWYgdGVzdF9vdXRwdXQuY3Jhc2g6Ci0gICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0
ZXN0X2ZhaWx1cmVzLkZhaWx1cmVDcmFzaCgpKQotICAgIGlmIHRlc3Rfb3V0cHV0LnRpbWVvdXQ6
Ci0gICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCkp
Ci0KLSAgICB0ZXN0X25hbWUgPSBwb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1
dC5maWxlbmFtZSkKLSAgICBpZiB0ZXN0X291dHB1dC5jcmFzaDoKLSAgICAgICAgX2xvZy5kZWJ1
ZygiJXMgU3RhY2t0cmFjZSBmb3IgJXM6XG4lcyIgJSAod29ya2VyX25hbWUsIHRlc3RfbmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9v
dXRwdXQuZXJyb3IpKQotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5LCB0ZXN0X25hbWUpCi0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5z
cGxpdGV4dChmaWxlbmFtZSlbMF0gKyAiLXN0YWNrLnR4dCIKLSAgICAgICAgcG9ydC5tYXliZV9t
YWtlX2RpcmVjdG9yeShvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKVswXSkKLSAgICAgICAgd2l0aCBj
b2RlY3Mub3BlbihmaWxlbmFtZSwgIndiIiwgInV0Zi04IikgYXMgZmlsZToKLSAgICAgICAgICAg
IGZpbGUud3JpdGUodGVzdF9vdXRwdXQuZXJyb3IpCi0gICAgZWxpZiB0ZXN0X291dHB1dC5lcnJv
cjoKLSAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgb3V0cHV0IHN0ZGVyciBsaW5lczpcbiVzIiAl
ICh3b3JrZXJfbmFtZSwgdGVzdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfb3V0cHV0LmVycm9yKSkKLQotICAgIGV4cGVj
dGVkX3Rlc3Rfb3V0cHV0ID0gX2V4cGVjdGVkX3Rlc3Rfb3V0cHV0KHBvcnQsIHRlc3RfaW5wdXQu
ZmlsZW5hbWUpCi0KLSAgICAjIENoZWNrIHRoZSBvdXRwdXQgYW5kIHNhdmUgdGhlIHJlc3VsdHMu
Ci0gICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgdGltZV9mb3JfZGlmZnMgPSB7fQot
ICAgIGZvciB0ZXN0X3R5cGUgaW4gdGVzdF90eXBlczoKLSAgICAgICAgc3RhcnRfZGlmZl90aW1l
ID0gdGltZS50aW1lKCkKLSAgICAgICAgbmV3X2ZhaWx1cmVzID0gdGVzdF90eXBlLmNvbXBhcmVf
b3V0cHV0KHBvcnQsIHRlc3RfaW5wdXQuZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2FyZ3MsIHRlc3Rfb3V0cHV0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGVzdF9v
dXRwdXQpCi0gICAgICAgICMgRG9uJ3QgYWRkIGFueSBtb3JlIGZhaWx1cmVzIGlmIHdlIGFscmVh
ZHkgaGF2ZSBhIGNyYXNoLCBzbyB3ZSBkb24ndAotICAgICAgICAjIGRvdWJsZS1yZXBvcnQgdGhv
c2UgdGVzdHMuIFdlIGRvIGRvdWJsZS1yZXBvcnQgZm9yIHRpbWVvdXRzIHNpbmNlCi0gICAgICAg
ICMgd2Ugc3RpbGwgd2FudCB0byBzZWUgdGhlIHRleHQgYW5kIGltYWdlIG91dHB1dC4KLSAgICAg
ICAgaWYgbm90IHRlc3Rfb3V0cHV0LmNyYXNoOgotICAgICAgICAgICAgZmFpbHVyZXMuZXh0ZW5k
KG5ld19mYWlsdXJlcykKLSAgICAgICAgdGltZV9mb3JfZGlmZnNbdGVzdF90eXBlLl9fY2xhc3Nf
Xy5fX25hbWVfX10gPSAoCi0gICAgICAgICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGlt
ZSkKLQotICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcyA9IHRpbWUudGltZSgpIC0gc3RhcnRf
ZGlmZl90aW1lCi0gICAgcmV0dXJuIHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3RfaW5wdXQu
ZmlsZW5hbWUsIGZhaWx1cmVzLCB0ZXN0X291dHB1dC50ZXN0X3RpbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcywgdGltZV9mb3Jf
ZGlmZnMpCi0KLQotZGVmIF9wYWRfdGltZW91dCh0aW1lb3V0KToKLSAgICAiIiJSZXR1cm5zIGEg
c2FmZSBtdWx0aXBsZSBvZiB0aGUgcGVyLXRlc3QgdGltZW91dCB2YWx1ZSB0byB1c2UKLSAgICB0
byBkZXRlY3QgaHVuZyB0ZXN0IHRocmVhZHMuCi0KLSAgICAiIiIKLSAgICAjIFdoZW4gd2UncmUg
cnVubmluZyBvbmUgdGVzdCBwZXIgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcywgd2UgY2FuCi0gICAg
IyBlbmZvcmNlIGEgaGFyZCB0aW1lb3V0LiAgVGhlIER1bXBSZW5kZXJUcmVlIHdhdGNoZG9nIHVz
ZXMgMi41eAotICAgICMgdGhlIHRpbWVvdXQ7IHdlIHdhbnQgdG8gYmUgbGFyZ2VyIHRoYW4gdGhh
dC4KLSAgICByZXR1cm4gdGltZW91dCAqIDMKLQotCi1kZWYgX21pbGxpc2Vjb25kc190b19zZWNv
bmRzKG1zZWNzKToKLSAgICByZXR1cm4gZmxvYXQobXNlY3MpIC8gMTAwMC4wCi0KLQotZGVmIF9z
aG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0ob3B0aW9ucyk6Ci0gICAgcmV0dXJuIG9wdGlv
bnMucGl4ZWxfdGVzdHMgYW5kIG5vdCAob3B0aW9ucy5uZXdfYmFzZWxpbmUgb3Igb3B0aW9ucy5y
ZXNldF9yZXN1bHRzKQotCi0KLWRlZiBfcnVuX3NpbmdsZV90ZXN0KHBvcnQsIG9wdGlvbnMsIHRl
c3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywgZHJpdmVyLCB3b3JrZXJfbmFtZSk6Ci0g
ICAgIyBGSVhNRTogUHVsbCB0aGlzIGludG8gVGVzdFNoZWxsVGhyZWFkLl9ydW4oKS4KLQotICAg
ICMgVGhlIGltYWdlIGhhc2ggaXMgdXNlZCB0byBhdm9pZCBkb2luZyBhbiBpbWFnZSBkdW1wIGlm
IHRoZQotICAgICMgY2hlY2tzdW1zIG1hdGNoLCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEgYmxh
bmsgdmFsdWUgaWYgd2UKLSAgICAjIGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAgKE90
aGVyd2lzZSwgYW4gaW1hZ2UgZnJvbSBhCi0gICAgIyBwcmV2aW91cyBydW4gd2lsbCBiZSBjb3Bp
ZWQgaW50byB0aGUgYmFzZWxpbmUuIiIiCi0gICAgaWYgX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9j
aGVja3N1bShvcHRpb25zKToKLSAgICAgICAgdGVzdF9pbnB1dC5pbWFnZV9oYXNoID0gcG9ydC5l
eHBlY3RlZF9jaGVja3N1bSh0ZXN0X2lucHV0LmZpbGVuYW1lKQotICAgIHRlc3Rfb3V0cHV0ID0g
ZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5wdXQpCi0gICAgcmV0dXJuIF9wcm9jZXNzX291dHB1dChw
b3J0LCBvcHRpb25zLCB0ZXN0X2lucHV0LCB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dCwgd29ya2VyX25hbWUpCi0KLQotY2xhc3Mg
U2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKLSAgICAiIiJUaHJlYWQgd3JhcHBl
ciBmb3IgcnVubmluZyBhIHNpbmdsZSB0ZXN0IGZpbGUuIiIiCi0KLSAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydCwgb3B0aW9ucywgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUsCi0gICAgICAg
ICAgICAgICAgIHRlc3RfaW5wdXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncyk6Ci0gICAgICAgICIi
IgotICAgICAgICBBcmdzOgotICAgICAgICAgIHBvcnQ6IG9iamVjdCBpbXBsZW1lbnRpbmcgcG9y
dC1zcGVjaWZpYyBob29rcwotICAgICAgICAgIG9wdGlvbnM6IGNvbW1hbmQgbGluZSBhcmd1bWVu
dCBvYmplY3QgZnJvbSBvcHRwYXJzZQotICAgICAgICAgIHdvcmtlcl9udW1iZXI6IHdvcmtlciBu
dW1iZXIgZm9yIHRlc3RzCi0gICAgICAgICAgd29ya2VyX25hbWU6IGZvciBsb2dnaW5nCi0gICAg
ICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5hbWUgYW5k
IHRpbWVvdXQKLSAgICAgICAgICB0ZXN0X3R5cGVzOiBBIGxpc3Qgb2YgVGVzdFR5cGUgb2JqZWN0
cyB0byBydW4gdGhlIHRlc3Qgb3V0cHV0Ci0gICAgICAgICAgICAgIGFnYWluc3QuCi0gICAgICAg
ICAgdGVzdF9hcmdzOiBBIFRlc3RBcmd1bWVudHMgb2JqZWN0IHRvIHBhc3MgdG8gZWFjaCBUZXN0
VHlwZS4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhz
ZWxmKQotICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotICAgICAgICBzZWxmLl9vcHRpb25zID0g
b3B0aW9ucwotICAgICAgICBzZWxmLl90ZXN0X2lucHV0ID0gdGVzdF9pbnB1dAotICAgICAgICBz
ZWxmLl90ZXN0X3R5cGVzID0gdGVzdF90eXBlcwotICAgICAgICBzZWxmLl90ZXN0X2FyZ3MgPSB0
ZXN0X2FyZ3MKLSAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9uZQorY2xhc3MgV29ya2VyKG9iamVj
dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX251bWJlcik6CisgICAg
ICAgIHN1cGVyKFdvcmtlciwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLl9icm9rZXIg
PSBicm9rZXIKICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKLSAg
ICAgICAgc2VsZi5fbmFtZSA9IHdvcmtlcl9uYW1lCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAg
ICAgICBzZWxmLl9jb3ZlcmVkX3J1bigpCi0KLSAgICBkZWYgX2NvdmVyZWRfcnVuKHNlbGYpOgot
ICAgICAgICAjIEZJWE1FOiB0aGlzIGlzIGEgc2VwYXJhdGUgcm91dGluZSB0byB3b3JrIGFyb3Vu
ZCBhIGJ1ZwotICAgICAgICAjIGluIGNvdmVyYWdlOiBzZWUgaHR0cDovL2JpdGJ1Y2tldC5vcmcv
bmVkL2NvdmVyYWdlcHkvaXNzdWUvODUuCi0gICAgICAgIHNlbGYuX2RyaXZlciA9IHNlbGYuX3Bv
cnQuY3JlYXRlX2RyaXZlcihzZWxmLl93b3JrZXJfbnVtYmVyKQotICAgICAgICBzZWxmLl9kcml2
ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLl90ZXN0X3Jlc3VsdCA9IF9ydW5fc2luZ2xlX3Rlc3Qo
c2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfaW5wdXQsIHNlbGYuX3Rlc3RfdHlwZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2FyZ3Ms
IHNlbGYuX2RyaXZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX25hbWUpCi0gICAgICAgIHNlbGYuX2RyaXZlci5zdG9wKCkKLQotICAgIGRlZiBn
ZXRfdGVzdF9yZXN1bHQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3Jlc3VsdAot
Ci0KLWNsYXNzIFdhdGNoYWJsZVRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKLSAgICAiIiJUaGlz
IGNsYXNzIGFic3RyYWN0cyBhbiBpbnRlcmZhY2UgdXNlZCBieQotICAgIHJ1bl93ZWJraXRfdGVz
dHMuVGVzdFJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2ggZm9yIHRocmVhZAotICAg
IG1hbmFnZW1lbnQuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICB0aHJlYWRp
bmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UK
LSAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25lCi0gICAgICAgIHNlbGYuX25leHRf
dGltZW91dCA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gTm9uZQotCi0gICAgZGVm
IGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiU2V0IGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFk
IHRvIHF1aXQuIiIiCi0gICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQorICAgICAgICBzZWxm
Ll9uYW1lID0gJ3dvcmtlci8lZCcgJSB3b3JrZXJfbnVtYmVyCiAKLSAgICBkZWYgY2xlYXJfbmV4
dF90aW1lb3V0KHNlbGYpOgotICAgICAgICAiIiJNYXJrIGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhy
ZWFkIHRvIHN0b3Agc2V0dGluZyB0aW1lb3V0cy4iIiIKLSAgICAgICAgc2VsZi5fdGltZW91dCA9
IDAKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZG9uZSA9
IEZhbHNlCiAKLSAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6Ci0gICAgICAgICIiIklmIHJ1
bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9uLCByZXR1cm4gaXQgaGVyZQot
ICAgICAgICAoKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIHR1cGxlKS4KLSAgICAgICAgUmV0dXJu
cyBOb25lIGlmIHJ1bigpIHRlcm1pbmF0ZWQgbm9ybWFsbHkuIE1lYW50IHRvIGJlIGNhbGxlZCBh
ZnRlcgotICAgICAgICBqb2luaW5nIHRoaXMgdGhyZWFkLiIiIgotICAgICAgICByZXR1cm4gc2Vs
Zi5fZXhjZXB0aW9uX2luZm8KLQotICAgIGRlZiBpZChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJu
IGEgdGhyZWFkIGlkZW50aWZpZXIuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl90aHJlYWRfaWQK
LQotICAgIGRlZiBuZXh0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgdGlt
ZSB0aGUgdGVzdCBpcyBzdXBwb3NlZCB0byBmaW5pc2ggYnkuIiIiCi0gICAgICAgIHJldHVybiBz
ZWxmLl9uZXh0X3RpbWVvdXQKLQotCi1jbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhy
ZWFkKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgd29ya2VyX251bWJl
ciwgd29ya2VyX25hbWUsCi0gICAgICAgICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJl
c3VsdF9xdWV1ZSk6Ci0gICAgICAgICIiIkluaXRpYWxpemUgYWxsIHRoZSBsb2NhbCBzdGF0ZSBm
b3IgdGhpcyBEdW1wUmVuZGVyVHJlZSB0aHJlYWQuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAg
ICBwb3J0OiBpbnRlcmZhY2UgdG8gcG9ydC1zcGVjaWZpYyBob29rcwotICAgICAgICAgIG9wdGlv
bnM6IGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZ3VtZW50IGZyb20gb3B0cGFyc2UKLSAgICAgICAg
ICB3b3JrZXJfbnVtYmVyOiBpZGVudGlmaWVyIGZvciBhIHBhcnRpY3VsYXIgd29ya2VyIHRocmVh
ZC4KLSAgICAgICAgICB3b3JrZXJfbmFtZTogZm9yIGxvZ2dpbmcuCi0gICAgICAgICAgZmlsZW5h
bWVfbGlzdF9xdWV1ZTogQSB0aHJlYWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IGNvbnRhaW5zIGxp
c3RzCi0gICAgICAgICAgICAgIG9mIHR1cGxlcyBvZiAoZmlsZW5hbWUsIHVyaSkgcGFpcnMuCi0g
ICAgICAgICAgcmVzdWx0X3F1ZXVlOiBBIHRocmVhZCBzYWZlIFF1ZXVlIGNsYXNzIHRoYXQgd2ls
bCBjb250YWluCi0gICAgICAgICAgICAgIHNlcmlhbGl6ZWQgVGVzdFJlc3VsdCBvYmplY3RzLgot
ICAgICAgICAiIiIKLSAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0gICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0g
ICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVtYmVyCi0gICAgICAgIHNlbGYu
X25hbWUgPSB3b3JrZXJfbmFtZQotICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlID0g
ZmlsZW5hbWVfbGlzdF9xdWV1ZQotICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUgPSByZXN1bHRf
cXVldWUKLSAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdCA9IFtdCisgICAgICAgIHNlbGYuX3Bv
cnQgPSBicm9rZXIuX3BvcnQKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IGJyb2tlci5fb3B0aW9u
cworICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5fYmF0Y2hfc2l6
ZSA9IHNlbGYuX29wdGlvbnMuYmF0Y2hfc2l6ZQogICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25l
Ci0gICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzID0ge30KLSAgICAgICAgc2Vs
Zi5fdGVzdF9yZXN1bHRzID0gW10KLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0gMAotICAgICAg
ICBzZWxmLl9zdGFydF90aW1lID0gMAotICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSAwCiAgICAg
ICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gRmFsc2UKLSAgICAgICAgc2VsZi5faHR0cF9sb2Nr
X3dhaXRfYmVnaW4gPSAwCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IDAKIAog
ICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gW10KICAgICAgICAgZm9yIGNscyBpbiBzZWxmLl9n
ZXRfdGVzdF90eXBlX2NsYXNzZXMoKToKQEAgLTI4MCwxOSArODQsMTcgQEAgY2xhc3MgVGVzdFNo
ZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCiAgICAgICAgIHNl
bGYuX3Rlc3RfYXJncyA9IHNlbGYuX2dldF90ZXN0X2FyZ3Mod29ya2VyX251bWJlcikKIAotICAg
ICAgICAjIEN1cnJlbnQgZ3JvdXAgb2YgdGVzdHMgd2UncmUgcnVubmluZy4KLSAgICAgICAgc2Vs
Zi5fY3VycmVudF9ncm91cCA9IE5vbmUKLSAgICAgICAgIyBOdW1iZXIgb2YgdGVzdHMgaW4gc2Vs
Zi5fY3VycmVudF9ncm91cC4KLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3Jv
dXAgPSBOb25lCi0gICAgICAgICMgVGltZSBhdCB3aGljaCB3ZSBzdGFydGVkIHJ1bm5pbmcgdGVz
dHMgZnJvbSBzZWxmLl9jdXJyZW50X2dyb3VwLgotICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3Vw
X3N0YXJ0X3RpbWUgPSBOb25lCisgICAgICAgICMgQXBwZW5kIHRlc3RzIHdlJ3JlIHJ1bm5pbmcg
dG8gdGhlIGV4aXN0aW5nIHRlc3RzX3J1bi50eHQgZmlsZS4KKyAgICAgICAgIyBUaGlzIGlzIGNy
ZWF0ZWQgaW4gcnVuX3dlYmtpdF90ZXN0cy5weTpfUHJlcGFyZUxpc3RzQW5kUHJpbnRPdXRwdXQu
CisgICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25z
LnJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInRlc3RzX3J1bi50eHQiKQorICAgICAgICBzZWxmLl90ZXN0c19ydW5fZmlsZSA9IGNv
ZGVjcy5vcGVuKHRlc3RzX3J1bl9maWxlbmFtZSwgImEiLCAidXRmLTgiKQogCiAgICAgZGVmIF9n
ZXRfdGVzdF9hcmdzKHNlbGYsIHdvcmtlcl9udW1iZXIpOgogICAgICAgICAiIiJSZXR1cm5zIHRo
ZSB0dXBsZSBvZiBhcmd1bWVudHMgZm9yIHRlc3RzIGFuZCBmb3IgRHVtcFJlbmRlclRyZWUuIiIi
CiAgICAgICAgIHRlc3RfYXJncyA9IHRlc3RfdHlwZV9iYXNlLlRlc3RBcmd1bWVudHMoKQogICAg
ICAgICB0ZXN0X2FyZ3MubmV3X2Jhc2VsaW5lID0gc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUK
ICAgICAgICAgdGVzdF9hcmdzLnJlc2V0X3Jlc3VsdHMgPSBzZWxmLl9vcHRpb25zLnJlc2V0X3Jl
c3VsdHMKLQogICAgICAgICByZXR1cm4gdGVzdF9hcmdzCiAKICAgICBkZWYgX2dldF90ZXN0X3R5
cGVfY2xhc3NlcyhzZWxmKToKQEAgLTMwMSwxNjIgKzEwMywxMjEgQEAgY2xhc3MgVGVzdFNoZWxs
VGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZChpbWFn
ZV9kaWZmLkltYWdlRGlmZikKICAgICAgICAgcmV0dXJuIGNsYXNzZXMKIAotICAgIGRlZiBnZXRf
dGVzdF9ncm91cF90aW1pbmdfc3RhdHMoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgYSBkaWN0
aW9uYXJ5IG1hcHBpbmcgdGVzdCBncm91cCB0byBhIHR1cGxlIG9mCi0gICAgICAgIChudW1iZXIg
b2YgdGVzdHMgaW4gdGhhdCBncm91cCwgdGltZSB0byBydW4gdGhlIHRlc3RzKSIiIgotICAgICAg
ICByZXR1cm4gc2VsZi5fdGVzdF9ncm91cF90aW1pbmdfc3RhdHMKLQotICAgIGRlZiBnZXRfdGVz
dF9yZXN1bHRzKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHRlc3Rz
IHJ1biBvbiB0aGlzIHRocmVhZC4KLQotICAgICAgICBUaGlzIGlzIHVzZWQgdG8gY2FsY3VsYXRl
IHBlci10aHJlYWQgc3RhdGlzdGljcy4KLQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3Rlc3RfcmVzdWx0cworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgICIiIkF0dGVt
cHQgdG8gYWJvcnQgcHJvY2Vzc2luZyAoYmVzdCBlZmZvcnQpLiIiIgorICAgICAgICBzZWxmLl9j
YW5jZWxsZWQgPSBUcnVlCiAKLSAgICBkZWYgZ2V0X3RvdGFsX3RpbWUoc2VsZik6Ci0gICAgICAg
IHJldHVybiBtYXgoc2VsZi5fc3RvcF90aW1lIC0gc2VsZi5fc3RhcnRfdGltZSAtCi0gICAgICAg
ICAgICAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfdGltZSgpLCAwLjApCisgICAgZGVmIGlz
X2RvbmUoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyB1c2VkIGZvciBhc3NlcnRpb24gY2hlY2tp
bmcgaW4gdGhlIG1hbmFnZXIuCisgICAgICAgIHJldHVybiBzZWxmLl9kb25lIG9yIHNlbGYuX2Nh
bmNlbGxlZAogCi0gICAgZGVmIGdldF9udW1fdGVzdHMoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLl9udW1fdGVzdHMKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X25hbWUKIAogICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgICIiIkRlbGVnYXRlIG1haW4gd29y
ayB0byBhIGhlbHBlciBtZXRob2QgYW5kIHdhdGNoIGZvciB1bmNhdWdodAotICAgICAgICBleGNl
cHRpb25zLiIiIgotICAgICAgICBzZWxmLl9jb3ZlcmVkX3J1bigpCi0KLSAgICBkZWYgX2NvdmVy
ZWRfcnVuKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB0aGlzIGlzIGEgc2VwYXJhdGUgcm91dGlu
ZSB0byB3b3JrIGFyb3VuZCBhIGJ1ZwotICAgICAgICAjIGluIGNvdmVyYWdlOiBzZWUgaHR0cDov
L2JpdGJ1Y2tldC5vcmcvbmVkL2NvdmVyYWdlcHkvaXNzdWUvODUuCi0gICAgICAgIHNlbGYuX3Ro
cmVhZF9pZCA9IHRocmVhZC5nZXRfaWRlbnQoKQotICAgICAgICBzZWxmLl9zdGFydF90aW1lID0g
dGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0gMAorICAgICAgICBleGNlcHRp
b25fbXNnID0gIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygnJXMgc3RhcnRpbmcnICUgc2VsZi5fbmFt
ZSkKKwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCclcyBzdGFydGluZycg
JSAoc2VsZi5nZXROYW1lKCkpKQotICAgICAgICAgICAgc2VsZi5fcnVuKHRlc3RfcnVubmVyPU5v
bmUsIHJlc3VsdF9zdW1tYXJ5PU5vbmUpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCclcyBkb25l
ICglZCB0ZXN0cyknICUgKHNlbGYuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLmdldF9udW1fdGVzdHMoKSkpCisgICAgICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3Nh
Z2VfbG9vcChzZWxmLCBtZXNzYWdlX2Jyb2tlci5BTllfV09SS0VSKQorICAgICAgICAgICAgaWYg
bm90IHNlbGYuaXNfZG9uZSgpOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9y
KCIlczogcmFuIG91dCBvZiBtZXNzYWdlcyBpbiB3b3JrZXIgcXVldWUuIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5fbmFtZSkKICAgICAgICAgZXhjZXB0IEtl
eWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBzeXMu
ZXhjX2luZm8oKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgaW50ZXJydXB0ZWQiICUgc2Vs
Zi5nZXROYW1lKCkpCisgICAgICAgICAgICBleGNlcHRpb25fbXNnID0gIiwgaW50ZXJydXB0ZWQi
CiAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICMgU2F2ZSB0aGUgZXhjZXB0aW9uIGZvciBv
dXIgY2FsbGVyIHRvIHNlZS4KLSAgICAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lz
LmV4Y19pbmZvKCkKLSAgICAgICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCi0g
ICAgICAgICAgICBfbG9nLmVycm9yKCclcyBkeWluZywgZXhjZXB0aW9uIHJhaXNlZCcgJSBzZWxm
LmdldE5hbWUoKSkKLQotICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSB0aW1lLnRpbWUoKQotCi0g
ICAgZGVmIHJ1bl9pbl9tYWluX3RocmVhZChzZWxmLCB0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1h
cnkpOgotICAgICAgICAiIiJUaGlzIGhvb2sgYWxsb3dzIHVzIHRvIHJ1biB0aGUgdGVzdHMgZnJv
bSB0aGUgbWFpbiB0aHJlYWQgaWYKLSAgICAgICAgLS1udW0tdGVzdC1zaGVsbHM9PTEsIGluc3Rl
YWQgb2YgaGF2aW5nIHRvIGFsd2F5cyBydW4gdHdvIG9yIG1vcmUKLSAgICAgICAgdGhyZWFkcy4g
VGhpcyBhbGxvd3MgdXMgdG8gZGVidWcgdGhlIHRlc3QgaGFybmVzcyB3aXRob3V0IGhhdmluZyB0
bwotICAgICAgICBkbyBtdWx0aS10aHJlYWRlZCBkZWJ1Z2dpbmcuIiIiCi0gICAgICAgIHNlbGYu
X3J1bih0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpCi0KLSAgICBkZWYgY2FuY2VsKHNlbGYp
OgotICAgICAgICAiIiJDbGVhbiB1cCBodHRwIGxvY2sgYW5kIHNldCBhIGZsYWcgdGVsbGluZyB0
aGlzIHRocmVhZCB0byBxdWl0LiIiIgotICAgICAgICBzZWxmLl9zdG9wX3NlcnZlcnNfd2l0aF9s
b2NrKCkKLSAgICAgICAgV2F0Y2hhYmxlVGhyZWFkLmNhbmNlbChzZWxmKQotCi0gICAgZGVmIG5l
eHRfdGltZW91dChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlz
IHN1cHBvc2VkIHRvIGZpbmlzaCBieS4iIiIKLSAgICAgICAgaWYgc2VsZi5fbmV4dF90aW1lb3V0
OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dCArIHNlbGYuX2h0dHBfbG9j
a193YWl0X3RpbWUoKQotICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0Ci0KLSAgICBk
ZWYgX2h0dHBfbG9ja193YWl0X3RpbWUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgdGlt
ZSB3aGF0IGh0dHAgbG9ja2luZyB0YWtlcy4iIiIKLSAgICAgICAgaWYgc2VsZi5faHR0cF9sb2Nr
X3dhaXRfYmVnaW4gPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGlmIHNlbGYu
X2h0dHBfbG9ja193YWl0X2VuZCA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIHRpbWUudGltZSgp
IC0gc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4KLSAgICAgICAgcmV0dXJuIHNlbGYuX2h0dHBf
bG9ja193YWl0X2VuZCAtIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luCi0KLSAgICBkZWYgX3J1
bihzZWxmLCB0ZXN0X3J1bm5lciwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJNYWluIHdv
cmsgZW50cnkgcG9pbnQgb2YgdGhlIHRocmVhZC4gQmFzaWNhbGx5IHdlIHB1bGwgdXJscyBmcm9t
IHRoZQotICAgICAgICBmaWxlbmFtZSBxdWV1ZSBhbmQgcnVuIHRoZSB0ZXN0cyB1bnRpbCB3ZSBy
dW4gb3V0IG9mIHVybHMuCi0KLSAgICAgICAgSWYgdGVzdF9ydW5uZXIgaXMgbm90IE5vbmUsIHRo
ZW4gd2UgY2FsbCB0ZXN0X3J1bm5lci5VcGRhdGVTdW1tYXJ5KCkKLSAgICAgICAgd2l0aCB0aGUg
cmVzdWx0cyBvZiBlYWNoIHRlc3QuIiIiCi0gICAgICAgIGJhdGNoX3NpemUgPSBzZWxmLl9vcHRp
b25zLmJhdGNoX3NpemUKLSAgICAgICAgYmF0Y2hfY291bnQgPSAwCi0KLSAgICAgICAgIyBBcHBl
bmQgdGVzdHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxl
LgotICAgICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVw
YXJlTGlzdHNBbmRQcmludE91dHB1dC4KLSAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gb3Mu
cGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuLnR4dCIpCi0gICAgICAgIHRl
c3RzX3J1bl9maWxlID0gY29kZWNzLm9wZW4odGVzdHNfcnVuX2ZpbGVuYW1lLCAiYSIsICJ1dGYt
OCIpCi0KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIHNlbGYuX2NhbmNlbGVk
OgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Rlc3RpbmcgY2FuY2VsbGVkJykKLSAgICAg
ICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJu
Ci0KLSAgICAgICAgICAgIGlmIGxlbihzZWxmLl9maWxlbmFtZV9saXN0KSBpcyAwOgotICAgICAg
ICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfZ3JvdXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzW3NlbGYuX2N1cnJlbnRfZ3Jv
dXBdID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX251bV90ZXN0c19pbl9jdXJy
ZW50X2dyb3VwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc2VsZi5f
Y3VycmVudF9ncm91cF9zdGFydF90aW1lKQotCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwLCBzZWxmLl9maWxlbmFtZV9saXN0ID0g
XAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZS5nZXRf
bm93YWl0KCkKLSAgICAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAg
ICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQotICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQotICAgICAgICAgICAgICAgICAgICB0
ZXN0c19ydW5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybgotCi0gICAg
ICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF9ncm91cCA9PSAidGVzdHNfdG9faHR0cF9sb2Nr
IjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQot
ICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6Ci0gICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQotCi0gICAgICAgICAgICAgICAg
c2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3JvdXAgPSBsZW4oc2VsZi5fZmlsZW5hbWVfbGlz
dCkKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUgPSB0aW1l
LnRpbWUoKQotCi0gICAgICAgICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZmlsZW5hbWVfbGlzdC5w
b3AoKQotCi0gICAgICAgICAgICAjIFdlIGhhdmUgYSB1cmwsIHJ1biB0ZXN0cy4KLSAgICAgICAg
ICAgIGJhdGNoX2NvdW50ICs9IDEKLSAgICAgICAgICAgIHNlbGYuX251bV90ZXN0cyArPSAxCi0g
ICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQodGVzdF9pbnB1dCkKLSAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3Rf
aW5fdGhpc190aHJlYWQodGVzdF9pbnB1dCkKLQotICAgICAgICAgICAgZmlsZW5hbWUgPSB0ZXN0
X2lucHV0LmZpbGVuYW1lCi0gICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS53cml0ZShmaWxlbmFt
ZSArICJcbiIpCi0gICAgICAgICAgICBpZiByZXN1bHQuZmFpbHVyZXM6Ci0gICAgICAgICAgICAg
ICAgIyBDaGVjayBhbmQga2lsbCBEdW1wUmVuZGVyVHJlZSBpZiB3ZSBuZWVkIHRvLgotICAgICAg
ICAgICAgICAgIGlmIGxlbihbMSBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIGYuc2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpXSk6Ci0gICAg
ICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCi0gICAgICAgICAg
ICAgICAgICAgICMgUmVzZXQgdGhlIGJhdGNoIGNvdW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJv
dW5jZWQuCi0gICAgICAgICAgICAgICAgICAgIGJhdGNoX2NvdW50ID0gMAotICAgICAgICAgICAg
ICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCi0gICAgICAgICAgICAgICAgZXJyb3Jf
c3RyID0gJ1xuJy5qb2luKFsnICAnICsgZi5tZXNzYWdlKCkgZm9yCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmIGluIHJlc3VsdC5mYWlsdXJlc10pCi0gICAgICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgZmFpbGVkOlxuJXMiICUgKHNlbGYuZ2V0TmFtZSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVu
YW1lKGZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX3N0cikpCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIHBhc3Nl
ZCIgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9w
b3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpKSkKLSAgICAgICAgICAgIHNlbGYu
X3Jlc3VsdF9xdWV1ZS5wdXQocmVzdWx0LmR1bXBzKCkpCi0KLSAgICAgICAgICAgIGlmIGJhdGNo
X3NpemUgPiAwIGFuZCBiYXRjaF9jb3VudCA+PSBiYXRjaF9zaXplOgotICAgICAgICAgICAgICAg
ICMgQm91bmNlIHRoZSBzaGVsbCBhbmQgcmVzZXQgY291bnQuCi0gICAgICAgICAgICAgICAgc2Vs
Zi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICBiYXRjaF9jb3VudCA9
IDAKLQotICAgICAgICAgICAgaWYgdGVzdF9ydW5uZXI6Ci0gICAgICAgICAgICAgICAgdGVzdF9y
dW5uZXIudXBkYXRlX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCisgICAgICAgICAgICBleGNlcHRp
b25fbXNnID0gIiwgZXhjZXB0aW9uIHJhaXNlZCIKKyAgICAgICAgZmluYWxseToKKyAgICAgICAg
ICAgIF9sb2cuZGVidWcoIiVzIGRvbmUlcyIgJSAoc2VsZi5fbmFtZSwgZXhjZXB0aW9uX21zZykp
CisgICAgICAgICAgICBpZiBleGNlcHRpb25fbXNnOgorICAgICAgICAgICAgICAgIGV4Y19pbmZv
ID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBFeHRyYWN0IHRoZSBz
dGFjayB0cmFjZSBpbnRvIGEgc3RyaW5nPworICAgICAgICAgICAgICAgIHNlbGYuX3Bvc3QoJ2V4
Y2VwdGlvbicsIGV4Y19pbmZvWzBdLCBleGNfaW5mb1sxXSwgTm9uZSkKKyAgICAgICAgICAgIHNl
bGYuX3Bvc3QoJ2RvbmUnKQorICAgICAgICAgICAgc2VsZi5fY2xlYW51cCgpCisKKyAgICBkZWYg
X2NsZWFudXAoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisg
ICAgICAgIGlmIHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fc3RvcF9z
ZXJ2ZXJzX3dpdGhfbG9jaygpCisgICAgICAgIGlmIHNlbGYuX3Rlc3RzX3J1bl9maWxlOgorICAg
ICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5f
dGVzdHNfcnVuX2ZpbGUgPSBOb25lCisKKyAgICBkZWYgaGFuZGxlX3Rlc3RfbGlzdChzZWxmLCBz
cmMsIGxpc3RfbmFtZSwgdGVzdF9saXN0KToKKyAgICAgICAgaWYgbGlzdF9uYW1lID09ICJ0ZXN0
c190b19odHRwX2xvY2siOgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmVyc193aXRoX2xv
Y2soKQorCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBudW1fdGVz
dHMgPSAwCisgICAgICAgIGZvciB0ZXN0X2lucHV0IGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAg
IHNlbGYuX3J1bl90ZXN0KHRlc3RfaW5wdXQpCisgICAgICAgICAgICBzZWxmLnlpZWxkX3RvX2Jy
b2tlcigpCisgICAgICAgICAgICBpZiBzZWxmLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgICAgIG51bV90ZXN0cyArPSAxCisKKyAgICAgICAgZWxhcHNlZF90aW1l
ID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCiAKLSAgICBkZWYgX3J1bl90ZXN0X2luX2Fub3Ro
ZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQpOgorICAgICAgICBpZiBzZWxmLl9oYXZlX2h0dHBf
bG9jazoKKyAgICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRoX2xvY2soKQorCisgICAg
ICAgIHNlbGYuX3Bvc3QoJ2ZpbmlzaGVkX2xpc3QnLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxh
cHNlZF90aW1lKQorCisgICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKKyAgICAgICAgIiIi
U3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGlzIGlmIHRoZXkgYXJlIG5vdCBydW5uaW5nIGlu
IGEKKyAgICAgICAgZGVkaWNhdGVkIHRocmVhZCBvciBwcm9jZXNzLiIiIgorICAgICAgICBwYXNz
CisKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToKKyAgICAgICAgIiIiU3RvcCByZWNl
aXZlZCAtIG5vIG1vcmUgdGVzdHMgdG8gcnVuLiIiIgorICAgICAgICBzZWxmLl9kb25lID0gVHJ1
ZQorCisgICAgZGVmIF9wb3N0KHNlbGYsIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncyk6Cisg
ICAgICAgIHNlbGYuX2Jyb2tlci5wdXRfbWVzc2FnZShzZWxmLl9uYW1lLCBtZXNzYWdlX2Jyb2tl
ci5NQU5BR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9uYW1l
LCBtZXNzYWdlX2FyZ3MpCisKKyAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgor
ICAgICAgICBzZWxmLl9zZXRfdXBfdGVzdCh0ZXN0X2lucHV0KQorCisgICAgICAgICMgV2UgY2Fs
Y3VsYXRlIGhvdyBsb25nIHdlIGV4cGVjdCB0aGUgdGVzdCB0byB0YWtlLgorICAgICAgICAjCisg
ICAgICAgICMgVGhlIER1bXBSZW5kZXJUcmVlIHdhdGNoZG9nIHVzZXMgMi41eCB0aGUgdGltZW91
dDsgd2Ugd2FudCB0byBiZQorICAgICAgICAjIGxhcmdlciB0aGFuIHRoYXQuIFdlIGFsc28gYWRk
IGEgbGl0dGxlIG1vcmUgcGFkZGluZyBpZiB3ZSdyZQorICAgICAgICAjIHJ1bm5pbmcgdGVzdHMg
aW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICAgICMKKyAgICAgICAgIyBOb3RlIHRoYXQgd2Ug
bmVlZCB0byBjb252ZXJ0IHRoZSB0ZXN0IHRpbWVvdXQgZnJvbSBhCisgICAgICAgICMgc3RyaW5n
IHZhbHVlIGluIG1pbGxpc2Vjb25kcyB0byBhIGZsb2F0IGZvciBQeXRob24uCisgICAgICAgIGRy
aXZlcl90aW1lb3V0ID0gMy4wICogZmxvYXQodGVzdF9pbnB1dC50aW1lb3V0KSAvIDEwMDAuMAor
ICAgICAgICB0aHJlYWRfcGFkZGluZyA9IDEuMAorICAgICAgICB0aHJlYWRfdGltZW91dCA9IGRy
aXZlcl90aW1lb3V0ICsgdGhyZWFkX3BhZGRpbmcKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5y
dW5fc2luZ2x5OgorICAgICAgICAgICAgdGVzdF90aW1lb3V0ID0gdGhyZWFkX3RpbWVvdXQKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlc3RfdGltZW91dCA9IGRyaXZlcl90aW1lb3V0CisK
KyAgICAgICAgc2VsZi5fcG9zdCgnc3RhcnRlZF90ZXN0JywgdGVzdF9pbnB1dCwgdGVzdF90aW1l
b3V0KQorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisKKyAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy5ydW5fc2luZ2x5OgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5f
YW5vdGhlcl90aHJlYWQodGVzdF9pbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1lb3V0KQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQodGVzdF9p
bnB1dCkKKworICAgICAgICBzZWxmLl90ZWFyX2Rvd25fdGVzdCh0ZXN0X2lucHV0LCByZXN1bHQs
IHRpbWUudGltZSgpIC0gc3RhcnQpCisKKyAgICBkZWYgX3NldF91cF90ZXN0KHNlbGYsIHRlc3Rf
aW5wdXQpOgorICAgICAgICB0ZXN0X2lucHV0LnVyaSA9IHNlbGYuX3BvcnQuZmlsZW5hbWVfdG9f
dXJpKHRlc3RfaW5wdXQuZmlsZW5hbWUpCisgICAgICAgIGlmIHNlbGYuX3Nob3VsZF9mZXRjaF9l
eHBlY3RlZF9jaGVja3N1bSgpOgorICAgICAgICAgICAgdGVzdF9pbnB1dC5pbWFnZV9jaGVja3N1
bSA9IHNlbGYuX3BvcnQuZXhwZWN0ZWRfY2hlY2tzdW0oCisgICAgICAgICAgICAgICAgdGVzdF9p
bnB1dC5maWxlbmFtZSkKKworICAgIGRlZiBfc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3Vt
KHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIG5v
dAorICAgICAgICAgICAgICAgIChzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZSBvciBzZWxmLl9v
cHRpb25zLnJlc2V0X3Jlc3VsdHMpKQorCisgICAgZGVmIF9ydW5fdGVzdF9pbl9hbm90aGVyX3Ro
cmVhZChzZWxmLCB0ZXN0X2lucHV0LCB0aHJlYWRfdGltZW91dCk6CiAgICAgICAgICIiIlJ1biBh
IHRlc3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGVuZm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4K
IAogICAgICAgICBTaW5jZSB3ZSBjYW4gb25seSBkZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEg
dGhyZWFkLCBub3QgYW55IGludGVybmFsCkBAIC00NjksMjEgKzIzMCwyMCBAQCBjbGFzcyBUZXN0
U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgUmV0dXJuczoKICAgICAgICAg
ICBBIFRlc3RSZXN1bHQKICAgICAgICAgIiIiCi0gICAgICAgIHdvcmtlciA9IFNpbmdsZVRlc3RU
aHJlYWQoc2VsZi5fcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9vcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dvcmtl
cl9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9hcmdzKQotCi0gICAgICAgIHdvcmtlci5z
dGFydCgpCi0KLSAgICAgICAgdGhyZWFkX3RpbWVvdXQgPSBfbWlsbGlzZWNvbmRzX3RvX3NlY29u
ZHMoCi0gICAgICAgICAgICBfcGFkX3RpbWVvdXQoaW50KHRlc3RfaW5wdXQudGltZW91dCkpKQot
ICAgICAgICB0aHJlYWQuX25leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgdGhyZWFkX3RpbWVv
dXQKLSAgICAgICAgd29ya2VyLmpvaW4odGhyZWFkX3RpbWVvdXQpCi0gICAgICAgIGlmIHdvcmtl
ci5pc0FsaXZlKCk6CisgICAgICAgIHdvcmtlciA9IHNlbGYKKyAgICAgICAgcmVzdWx0ID0gTm9u
ZQorCisgICAgICAgIGRyaXZlciA9IHdvcmtlci5fcG9ydC5jcmVhdGVfZHJpdmVyKHdvcmtlci5f
d29ya2VyX251bWJlcikKKyAgICAgICAgZHJpdmVyLnN0YXJ0KCkKKworICAgICAgICBjbGFzcyBT
aW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgICAgICAgICAgZGVmIHJ1bihz
ZWxmKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB3b3JrZXIuX3J1bl9zaW5nbGVfdGVzdChk
cml2ZXIsIHRlc3RfaW5wdXQpCisKKyAgICAgICAgdGhyZWFkID0gU2luZ2xlVGVzdFRocmVhZCgp
CisgICAgICAgIHRocmVhZC5zdGFydCgpCisgICAgICAgIHRocmVhZC5qb2luKHRocmVhZF90aW1l
b3V0KQorICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgogICAgICAgICAgICAgIyBJZiBqb2lu
KCkgcmV0dXJuZWQgd2l0aCB0aGUgdGhyZWFkIHN0aWxsIHJ1bm5pbmcsIHRoZQogICAgICAgICAg
ICAgIyBEdW1wUmVuZGVyVHJlZSBpcyBjb21wbGV0ZWx5IGh1bmcgYW5kIHRoZXJlJ3Mgbm90aGlu
ZwogICAgICAgICAgICAgIyBtb3JlIHdlIGNhbiBkbyB3aXRoIGl0LiAgV2UgaGF2ZSB0byBraWxs
IGFsbCB0aGUKQEAgLTQ5MywxNiArMjUzLDEwIEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRj
aGFibGVUaHJlYWQpOgogICAgICAgICAgICAgIyB0aGF0IHRyYWRlb2ZmIGluIG9yZGVyIHRvIGF2
b2lkIGxvc2luZyB0aGUgcmVzdCBvZiB0aGlzCiAgICAgICAgICAgICAjIHRocmVhZCdzIHJlc3Vs
dHMuCiAgICAgICAgICAgICBfbG9nLmVycm9yKCdUZXN0IHRocmVhZCBodW5nOiBraWxsaW5nIGFs
bCBEdW1wUmVuZGVyVHJlZXMnKQotICAgICAgICAgICAgaWYgd29ya2VyLl9kcml2ZXI6Ci0gICAg
ICAgICAgICAgICAgd29ya2VyLl9kcml2ZXIuc3RvcCgpCiAKLSAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgcmVzdWx0ID0gd29ya2VyLmdldF90ZXN0X3Jlc3VsdCgpCi0gICAgICAgIGV4Y2VwdCBB
dHRyaWJ1dGVFcnJvciwgZToKLSAgICAgICAgICAgICMgVGhpcyBnZXRzIHJhaXNlZCBpZiB0aGUg
d29ya2VyIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQuCi0gICAgICAgICAgICBmYWlsdXJlcyA9
IFtdCi0gICAgICAgICAgICBfbG9nLmVycm9yKCdDYW5ub3QgZ2V0IHJlc3VsdHMgb2YgdGVzdDog
JXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5maWxlbmFtZSkKKyAgICAg
ICAgZHJpdmVyLnN0b3AoKQorCisgICAgICAgIGlmIG5vdCByZXN1bHQ6CiAgICAgICAgICAgICBy
ZXN1bHQgPSB0ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdCh0ZXN0X2lucHV0LmZpbGVuYW1lLCBmYWls
dXJlcz1bXSwKICAgICAgICAgICAgICAgICB0ZXN0X3J1bl90aW1lPTAsIHRvdGFsX3RpbWVfZm9y
X2FsbF9kaWZmcz0wLCB0aW1lX2Zvcl9kaWZmcz17fSkKIApAQCAtNTE2LDQxICsyNzAsMTMwIEBA
IGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogCiAgICAgICAgIFJldHVy
bnM6IGEgVGVzdFJlc3VsdCBvYmplY3QuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl9lbnN1
cmVfZHVtcF9yZW5kZXJfdHJlZV9pc19ydW5uaW5nKCkKLSAgICAgICAgdGhyZWFkX3RpbWVvdXQg
PSBfbWlsbGlzZWNvbmRzX3RvX3NlY29uZHMoCi0gICAgICAgICAgICAgX3BhZF90aW1lb3V0KGlu
dCh0ZXN0X2lucHV0LnRpbWVvdXQpKSkKLSAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gdGlt
ZS50aW1lKCkgKyB0aHJlYWRfdGltZW91dAotICAgICAgICB0ZXN0X3Jlc3VsdCA9IF9ydW5fc2lu
Z2xlX3Rlc3Qoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywgdGVzdF9pbnB1dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMsIHNlbGYuX3Rl
c3RfYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Ry
aXZlciwgc2VsZi5fbmFtZSkKLSAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHRzLmFwcGVuZCh0ZXN0
X3Jlc3VsdCkKLSAgICAgICAgcmV0dXJuIHRlc3RfcmVzdWx0Ci0KLSAgICBkZWYgX2Vuc3VyZV9k
dW1wX3JlbmRlcl90cmVlX2lzX3J1bm5pbmcoc2VsZik6Ci0gICAgICAgICIiIlN0YXJ0IHRoZSBz
aGFyZWQgRHVtcFJlbmRlclRyZWUsIGlmIGl0J3Mgbm90IHJ1bm5pbmcuCi0KLSAgICAgICAgVGhp
cyBpcyBub3QgZm9yIHVzZSB3aGVuIHJ1bm5pbmcgdGVzdHMgc2luZ2x5LCBzaW5jZSB0aG9zZSBl
YWNoIHN0YXJ0Ci0gICAgICAgIGEgc2VwYXJhdGUgRHVtcFJlbmRlclRyZWUgaW4gdGhlaXIgb3du
IHRocmVhZC4KLQotICAgICAgICAiIiIKICAgICAgICAgIyBwb2xsKCkgaXMgbm90IHRocmVhZHNh
ZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKICAgICAgICAgIyBodHRwOi8vYnVncy5w
eXRob24ub3JnL2lzc3VlMTczMTcxNwogICAgICAgICBpZiBub3Qgc2VsZi5fZHJpdmVyIG9yIHNl
bGYuX2RyaXZlci5wb2xsKCkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLl9kcml2ZXIg
PSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fd29ya2VyX251bWJlcikKICAgICAgICAg
ICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fc2luZ2xl
X3Rlc3QodGVzdF9pbnB1dCwgc2VsZi5fZHJpdmVyKQorCisgICAgZGVmIF9ydW5fc2luZ2xlX3Rl
c3Qoc2VsZiwgdGVzdF9pbnB1dCwgZHJpdmVyKToKKyAgICAgICAgIyBUaGUgaW1hZ2UgaGFzaCBp
cyB1c2VkIHRvIGF2b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAgaWYgdGhlCisgICAgICAgICMgY2hl
Y2tzdW1zIG1hdGNoLCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEgYmxhbmsgdmFsdWUgaWYgd2UK
KyAgICAgICAgIyBhcmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNlbGluZS4gIChPdGhlcndpc2UsIGFu
IGltYWdlIGZyb20gYQorICAgICAgICAjIHByZXZpb3VzIHJ1biB3aWxsIGJlIGNvcGllZCBpbnRv
IHRoZSBiYXNlbGluZS4iIiIKKyAgICAgICAgaWYgc2VsZi5fc2hvdWxkX2ZldGNoX2V4cGVjdGVk
X2NoZWNrc3VtKCk6CisgICAgICAgICAgICB0ZXN0X2lucHV0LmltYWdlX2hhc2ggPSBzZWxmLl9w
b3J0LmV4cGVjdGVkX2NoZWNrc3VtKAorICAgICAgICAgICAgICAgIHRlc3RfaW5wdXQuZmlsZW5h
bWUpCisgICAgICAgIHRlc3Rfb3V0cHV0ID0gZHJpdmVyLnJ1bl90ZXN0KHRlc3RfaW5wdXQpCisg
ICAgICAgIHJldHVybiBzZWxmLl9wcm9jZXNzX291dHB1dCh0ZXN0X2lucHV0LmZpbGVuYW1lLCB0
ZXN0X291dHB1dCkKKworICAgIGRlZiBfcHJvY2Vzc19vdXRwdXQoc2VsZiwgdGVzdF9maWxlbmFt
ZSwgdGVzdF9vdXRwdXQpOgorICAgICAgICAiIiJSZWNlaXZlcyB0aGUgb3V0cHV0IGZyb20gYSBE
dW1wUmVuZGVyVHJlZSBwcm9jZXNzLCBzdWJqZWN0cyBpdCB0byBhCisgICAgICAgIG51bWJlciBv
ZiB0ZXN0cywgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZhaWx1cmUgdHlwZXMgdGhlIHRlc3QgcHJv
ZHVjZWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgdGVzdF9maWxlbmFtZTogZnVsbCBwYXRo
IHRvIHRoZSB0ZXN0IGluIHF1ZXN0aW9uLgorICAgICAgICB0ZXN0X291dHB1dDogYSBUZXN0T3V0
cHV0IG9iamVjdCBjb250YWluaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHRlc3QKKworICAgICAgICBS
ZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0CisgICAgICAgICIiIgorICAgICAgICBmYWlsdXJl
cyA9IFtdCisKKyAgICAgICAgaWYgdGVzdF9vdXRwdXQuY3Jhc2g6CisgICAgICAgICAgICBmYWls
dXJlcy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKSkKKyAgICAgICAgaWYgdGVz
dF9vdXRwdXQudGltZW91dDoKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1
cmVzLkZhaWx1cmVUaW1lb3V0KCkpCisKKyAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfZmlsZW5hbWUpCisgICAgICAgIGlmIHRlc3Rfb3V0
cHV0LmNyYXNoOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgU3RhY2t0cmFjZSBmb3IgJXM6
XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lLCB0
ZXN0X291dHB1dC5lcnJvcikpCisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihz
ZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCB0ZXN0X25hbWUpCisgICAgICAgICAgICBm
aWxlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdICsgIi1zdGFjay50eHQiCisg
ICAgICAgICAgICBzZWxmLl9wb3J0Lm1heWJlX21ha2VfZGlyZWN0b3J5KG9zLnBhdGguc3BsaXQo
ZmlsZW5hbWUpWzBdKQorICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihmaWxlbmFtZSwgIndi
IiwgInV0Zi04IikgYXMgZmlsZToKKyAgICAgICAgICAgICAgICBmaWxlLndyaXRlKHRlc3Rfb3V0
cHV0LmVycm9yKQorICAgICAgICBlbGlmIHRlc3Rfb3V0cHV0LmVycm9yOgorICAgICAgICAgICAg
X2xvZy5kZWJ1ZygiJXMgJXMgb3V0cHV0IHN0ZGVyciBsaW5lczpcbiVzIiAlCisgICAgICAgICAg
ICAgICAgICAgICAgIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUsIHRlc3Rfb3V0cHV0LmVycm9yKSkK
KworICAgICAgICBleHBlY3RlZF90ZXN0X291dHB1dCA9IHNlbGYuX2V4cGVjdGVkX3Rlc3Rfb3V0
cHV0KHRlc3RfZmlsZW5hbWUpCisKKyAgICAgICAgIyBDaGVjayB0aGUgb3V0cHV0IGFuZCBzYXZl
IHRoZSByZXN1bHRzLgorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAg
dGltZV9mb3JfZGlmZnMgPSB7fQorICAgICAgICBmb3IgdGVzdF90eXBlIGluIHNlbGYuX3Rlc3Rf
dHlwZXM6CisgICAgICAgICAgICBzdGFydF9kaWZmX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAg
ICAgICAgbmV3X2ZhaWx1cmVzID0gdGVzdF90eXBlLmNvbXBhcmVfb3V0cHV0KHNlbGYuX3BvcnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLl90ZXN0X2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdF9vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQpCisgICAg
ICAgICAgICAjIERvbid0IGFkZCBhbnkgbW9yZSBmYWlsdXJlcyBpZiB3ZSBhbHJlYWR5IGhhdmUg
YSBjcmFzaCwgc28gd2UKKyAgICAgICAgICAgICMgZG9uJ3QgZG91YmxlLXJlcG9ydCB0aG9zZSB0
ZXN0cy4gV2UgZG8gZG91YmxlLXJlcG9ydCBmb3IgdGltZW91dHMKKyAgICAgICAgICAgICMgc2lu
Y2Ugd2Ugc3RpbGwgd2FudCB0byBzZWUgdGhlIHRleHQgYW5kIGltYWdlIG91dHB1dC4KKyAgICAg
ICAgICAgIGlmIG5vdCB0ZXN0X291dHB1dC5jcmFzaDoKKyAgICAgICAgICAgICAgICBmYWlsdXJl
cy5leHRlbmQobmV3X2ZhaWx1cmVzKQorICAgICAgICAgICAgdGltZV9mb3JfZGlmZnNbdGVzdF90
eXBlLl9fY2xhc3NfXy5fX25hbWVfX10gPSAoCisgICAgICAgICAgICAgICAgdGltZS50aW1lKCkg
LSBzdGFydF9kaWZmX3RpbWUpCisKKyAgICAgICAgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZzID0g
dGltZS50aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUKKyAgICAgICAgcmV0dXJuIHRlc3RfcmVzdWx0
cy5UZXN0UmVzdWx0KHRlc3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWlsdXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3Rfb3V0cHV0LnRlc3RfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzKQorCisgICAgZGVmIF9leHBlY3RlZF90
ZXN0X291dHB1dChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIlJldHVybnMgYW4gZXhwZWN0
ZWQgVGVzdE91dHB1dCBvYmplY3QuIiIiCisgICAgICAgIHJldHVybiB0ZXN0X291dHB1dC5UZXN0
T3V0cHV0KHNlbGYuX3BvcnQuZXhwZWN0ZWRfdGV4dChmaWxlbmFtZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmV4cGVjdGVkX2ltYWdlKGZpbGVuYW1l
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuZXhwZWN0
ZWRfY2hlY2tzdW0oZmlsZW5hbWUpKQorCisgICAgZGVmIF90ZWFyX2Rvd25fdGVzdChzZWxmLCB0
ZXN0X2lucHV0LCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CisgICAgICAgIHNlbGYuX2JhdGNoX2Nv
dW50ICs9IDEKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUud3JpdGUodGVzdF9pbnB1dC5m
aWxlbmFtZSArICJcbiIpCisgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVf
dGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorCisgICAgICAgIGlmIHJlc3VsdC5m
YWlsdXJlczoKKyAgICAgICAgICAgICMgQ2hlY2sgYW5kIGtpbGwgRHVtcFJlbmRlclRyZWUgaWYg
d2UgbmVlZCB0by4KKyAgICAgICAgICAgIGlmIGFueShbZi5zaG91bGRfa2lsbF9kdW1wX3JlbmRl
cl90cmVlKCkgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzXSk6CisgICAgICAgICAgICAgICAgc2Vs
Zi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBi
YXRjaCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVzdCBib3VuY2VkLgorICAgICAgICAgICAgICAg
IHNlbGYuX2JhdGNoX2NvdW50ID0gMAorCisgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBt
ZXNzYWdlKHMpLgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgZmFpbGVkOiIgJSAoc2Vs
Zi5fbmFtZSwgdGVzdF9uYW1lKSkKKyAgICAgICAgICAgIGZvciBmIGluIHJlc3VsdC5mYWlsdXJl
czoKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAgJXMiICUgKHNlbGYuX25hbWUsIGYu
bWVzc2FnZSgpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVz
IHBhc3NlZCIgJSAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lKSkKKworICAgICAgICBzZWxmLl9wb3N0
KCdmaW5pc2hlZF90ZXN0JywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICAgICAgaWYgc2Vs
Zi5fYmF0Y2hfc2l6ZSA+IDAgYW5kIHNlbGYuX2JhdGNoX2NvdW50ID49IHNlbGYuX2JhdGNoX3Np
emU6CisgICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50LgorICAg
ICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKKyAgICAgICAgICAgIHNlbGYu
X2JhdGNoX2NvdW50ID0gMAogCiAgICAgZGVmIF9zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxm
KToKLSAgICAgICAgIiIiQWNxdWlyZSBodHRwIGxvY2sgYW5kIHN0YXJ0IHRoZSBzZXJ2ZXJzLiIi
IgotICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9IHRpbWUudGltZSgpCi0gICAg
ICAgIF9sb2cuZGVidWcoJ0FjcXVpcmUgaHR0cCBsb2NrIC4uLicpCisgICAgICAgIF9sb2cuZGVi
dWcoJ0FjcXVpcmluZyBodHRwIGxvY2sgLi4uJykKICAgICAgICAgc2VsZi5fcG9ydC5hY3F1aXJl
X2h0dHBfbG9jaygpCiAgICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIEhUVFAgc2VydmVyIC4u
LicpCiAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQogICAgICAgICBfbG9n
LmRlYnVnKCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCiAgICAgICAgIHNlbGYuX3Bv
cnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0
X2VuZCA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX2hhdmVfaHR0cF9sb2NrID0gVHJ1ZQog
CisgICAgZGVmIF9odHRwX2xvY2tfd2FpdF90aW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4g
dGhlIHRpbWUgd2hhdCBodHRwIGxvY2tpbmcgdGFrZXMuIiIiCisgICAgICAgIGlmIHNlbGYuX2h0
dHBfbG9ja193YWl0X2JlZ2luID09IDA6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBp
ZiBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiB0aW1l
LnRpbWUoKSAtIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luCisgICAgICAgIHJldHVybiBzZWxm
Ll9odHRwX2xvY2tfd2FpdF9lbmQgLSBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbgorCiAgICAg
ZGVmIF9zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgogICAgICAgICAiIiJTdG9wIHRoZSBz
ZXJ2ZXJzIGFuZCByZWxlYXNlIGh0dHAgbG9jay4iIiIKICAgICAgICAgaWYgc2VsZi5faGF2ZV9o
dHRwX2xvY2s6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlci5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2Vy
LnB5CmluZGV4IGU1MjBhOWNhYTZiNzY4MmViZmRkMmE5OGJiMjE3ZWI4NWQ3MjUxYmMuLmVmYzMx
ZTJlY2I0ZjMxNjNiODJkY2UwMzI2MDM4NzU5NjY1OGNhZWEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2Vf
YnJva2VyLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5CkBAIC0yNiw3ICsyNiw3IEBACiAjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0iIiJNb2R1bGUgZm9yIGhhbmRsaW5nIG1lc3Nh
Z2VzLCB0aHJlYWRzLCBwcm9jZXNzZXMsIGFuZCBjb25jdXJyZW5jeSBmb3IgcnVuLXdlYmtpdC10
ZXN0cy4KKyIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2FnZXMgYW5kIGNvbmN1cnJlbmN5IGZv
ciBydW4td2Via2l0LXRlc3RzLgogCiBUZXN0aW5nIGlzIGFjY29tcGxpc2hlZCBieSBoYXZpbmcg
YSBtYW5hZ2VyIChUZXN0UnVubmVyKSBnYXRoZXIgYWxsIG9mIHRoZQogdGVzdHMgdG8gYmUgcnVu
LCBhbmQgc2VuZGluZyBtZXNzYWdlcyB0byBhIHBvb2wgb2Ygd29ya2VycyAoVGVzdFNoZWxsVGhy
ZWFkcykKQEAgLTQwLDggKzQwLDE0IEBAIGhhbmRsZXMgbGF1bmNoaW5nIHRocmVhZHMgYW5kL29y
IHByb2Nlc3NlcyBkZXBlbmRpbmcgb24gdGhlCiByZXF1ZXN0ZWQgY29uZmlndXJhdGlvbi4KICIi
IgogCitpbXBvcnQgY1BpY2tsZQogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3Np
bmcKK2ltcG9ydCBvcworaW1wb3J0IFF1ZXVlCiBpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkCitp
bXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHRyYWNlYmFjawogCkBAIC00OSwx
NDkgKzU1LDMyNiBAQCBpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKIAogX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCitNQU5BR0VSID0gJ21hbmFnZXInCitBTllfV09S
S0VSID0gJ3dvcmtlcicKKwogCiBkZWYgZ2V0KHBvcnQsIG9wdGlvbnMpOgogICAgICIiIlJldHVy
biBhbiBpbnN0YW5jZSBvZiBhIFdvcmtlck1lc3NhZ2VCcm9rZXIuIiIiCiAgICAgd29ya2VyX21v
ZGVsID0gb3B0aW9ucy53b3JrZXJfbW9kZWwKICAgICBpZiB3b3JrZXJfbW9kZWwgPT0gJ2lubGlu
ZSc6Ci0gICAgICAgIHJldHVybiBJbmxpbmVCcm9rZXIocG9ydCwgb3B0aW9ucykKKyAgICAgICAg
cmV0dXJuIF9JbmxpbmVCcm9rZXIocG9ydCwgb3B0aW9ucykKICAgICBpZiB3b3JrZXJfbW9kZWwg
PT0gJ3RocmVhZHMnOgotICAgICAgICByZXR1cm4gTXVsdGlUaHJlYWRlZEJyb2tlcihwb3J0LCBv
cHRpb25zKQorICAgICAgICByZXR1cm4gX011bHRpVGhyZWFkZWRCcm9rZXIocG9ydCwgb3B0aW9u
cykKKyAgICBpZiB3b3JrZXJfbW9kZWwgPT0gJ3Byb2Nlc3Nlcyc6CisgICAgICAgIHJldHVybiBf
TXVsdGlQcm9jZXNzQnJva2VyKHBvcnQsIG9wdGlvbnMpCiAgICAgcmFpc2UgVmFsdWVFcnJvcign
dW5zdXBwb3J0ZWQgdmFsdWUgZm9yIC0td29ya2VyLW1vZGVsOiAlcycgJSB3b3JrZXJfbW9kZWwp
CiAKIAotY2xhc3MgX1dvcmtlclN0YXRlKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IG5hbWUpOgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYudGhyZWFkID0g
Tm9uZQorY2xhc3MgX01lc3NhZ2Uob2JqZWN0KToKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IGxvYWRzKHN0cik6CisgICAgICAgIG9iaiA9IGNQaWNrbGUubG9hZHMoc3RyKQorICAgICAgICBh
c3NlcnQoaXNpbnN0YW5jZShvYmosIF9NZXNzYWdlKSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBzcmMsIGRlc3QsIGhkciwgYm9keSk6CisgICAgICAgIHNlbGYuc3JjID0gc3JjCisgICAgICAg
IHNlbGYuZGVzdCA9IGRlc3QKKyAgICAgICAgc2VsZi5oZHIgPSBoZHIKKyAgICAgICAgc2VsZi5i
b2R5ID0gYm9keQorCisgICAgZGVmIGR1bXBzKHNlbGYpOgorICAgICAgICByZXR1cm4gY1BpY2ts
ZS5kdW1wcyhzZWxmKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4g
KCJfTWVzc2FnZShzcmM9JyVzJywgZGVzdD0nJXMnLCBoZHI9JyVzJykiICUKKyAgICAgICAgICAg
ICAgICAoc2VsZi5zcmMsIHNlbGYuZGVzdCwgc2VsZi5oZHIpKQogCiAKLWNsYXNzIFdvcmtlck1l
c3NhZ2VCcm9rZXIob2JqZWN0KToKK2NsYXNzIF9UaW1lcihvYmplY3QpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBjYWxsYmFjaywgZGVsYXkpOgorICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2Fs
bGJhY2sKKyAgICAgICAgc2VsZi5kZWxheSA9IGRlbGF5CisgICAgICAgIHNlbGYuZGVhZGxpbmUg
PSB0aW1lLnRpbWUoKSArIGRlbGF5CisKKworY2xhc3MgX1dvcmtlck1lc3NhZ2VCcm9rZXIob2Jq
ZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CiAgICAgICAgIHNl
bGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAg
IHNlbGYuX251bV93b3JrZXJzID0gaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQog
Ci0gICAgICAgICMgVGhpcyBtYXBzIHdvcmtlciBuYW1lcyB0byB0aGVpciBfV29ya2VyU3RhdGUg
dmFsdWVzLgotICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKyAgICAgICAgc2VsZi5fdGltZXJz
ID0ge30KKyAgICAgICAgc2VsZi5fdGltZXJzW01BTkFHRVJdID0gTm9uZQorICAgICAgICBzZWxm
Ll90aW1lcnNbQU5ZX1dPUktFUl0gPSBOb25lCisgICAgICAgIHNlbGYuX3F1ZXVlcyA9IHt9CisK
KyAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICAiIiJT
dGFydCBhIHdvcmtlciB3aXRoIHRoZSBnaXZlbiBpbmRleCBudW1iZXIuCiAKLSAgICBkZWYgX3Ro
cmVhZHMoc2VsZik6Ci0gICAgICAgIHJldHVybiB0dXBsZShbdy50aHJlYWQgZm9yIHcgaW4gc2Vs
Zi5fd29ya2Vycy52YWx1ZXMoKV0pCisgICAgICAgIFJldHVybnMgdGhlIGFjdHVhbCBUZXN0U2hl
bGxUaHJlYWQgb2JqZWN0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAK
LSAgICBkZWYgc3RhcnRfd29ya2VycyhzZWxmLCB0ZXN0X3J1bm5lcik6Ci0gICAgICAgICIiIlN0
YXJ0cyB1cCB0aGUgcG9vbCBvZiB3b3JrZXJzIGZvciBydW5uaW5nIHRoZSB0ZXN0cy4KKyAgICBk
ZWYgY2FuY2VsX3dvcmtlcihzZWxmLCB3b3JrZXJfbmFtZSk6CisgICAgICAgICIiIkF0dGVtcHQg
dG8gY2FuY2VsIGEgd29ya2VyIChiZXN0LWVmZm9ydCkuIFRoZSB3b3JrZXIgbWF5IHN0aWxsIGJl
CisgICAgICAgIHJ1bm5pbmcgYWZ0ZXIgdGhpcyBjYWxsIHJldHVybnMuIiIiCisgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAotICAgICAgICBBcmdzOgotICAgICAgICAgICAgdGVz
dF9ydW5uZXI6IGEgaGFuZGxlIHRvIHRoZSBtYW5hZ2VyL1Rlc3RSdW5uZXIgb2JqZWN0Ci0gICAg
ICAgICIiIgotICAgICAgICBzZWxmLl90ZXN0X3J1bm5lciA9IHRlc3RfcnVubmVyCi0gICAgICAg
IGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShzZWxmLl9udW1fd29ya2Vycyk6Ci0gICAgICAg
ICAgICB3b3JrZXIgPSBfV29ya2VyU3RhdGUoJ3dvcmtlci0lZCcgJSB3b3JrZXJfbnVtYmVyKQot
ICAgICAgICAgICAgd29ya2VyLnRocmVhZCA9IHNlbGYuX3N0YXJ0X3dvcmtlcih3b3JrZXJfbnVt
YmVyLCB3b3JrZXIubmFtZSkKLSAgICAgICAgICAgIHNlbGYuX3dvcmtlcnNbd29ya2VyLm5hbWVd
ID0gd29ya2VyCi0gICAgICAgIHJldHVybiBzZWxmLl90aHJlYWRzKCkKKyAgICBkZWYgam9pbl93
b3JrZXIoc2VsZiwgd29ya2VyX25hbWUsIHRpbWVvdXQpOgorICAgICAgICAiIiJXYWl0IHVudGls
IHdvcmtlciBleGl0cyBvciB0aW1lb3V0IG9jY3Vycy4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcgogCi0gICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJl
ciwgd29ya2VyX25hbWUpOgorICAgIGRlZiB3b3JrZXJfaXNfYWxpdmUoc2VsZiwgd29ya2VyX25h
bWUpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0aGUgd29ya2VyIGlzIHN0aWxsIHJ1bm5p
bmcuIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAotICAgIGRlZiBydW5f
bWVzc2FnZV9sb29wKHNlbGYpOgotICAgICAgICAiIiJMb29wIHByb2Nlc3NpbmcgbWVzc2FnZXMg
dW50aWwgZG9uZS4iIiIKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgd29ya2VyX25h
bWUpOgorICAgICAgICAiIiJMb2cgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHdvcmtlcidz
IHN0YXRlLiIiIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKLSAgICBkZWYg
Y2FuY2VsX3dvcmtlcnMoc2VsZik6Ci0gICAgICAgICIiIkNhbmNlbC9pbnRlcnJ1cHQgYW55IHdv
cmtlcnMgdGhhdCBhcmUgc3RpbGwgYWxpdmUuIiIiCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBj
bGVhbnVwKHNlbGYpOgotICAgICAgICAiIiJQZXJmb3JtIGFueSBuZWNlc3NhcnkgY2xlYW51cCBv
biBzaHV0ZG93bi4iIiIKLSAgICAgICAgcGFzcwotCi0KLWNsYXNzIElubGluZUJyb2tlcihXb3Jr
ZXJNZXNzYWdlQnJva2VyKToKLSAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVt
YmVyLCB3b3JrZXJfbmFtZSk6Ci0gICAgICAgICMgRklYTUU6IFJlcGxhY2Ugd2l0aCBzb21ldGhp
bmcgdGhhdCBpc24ndCBhIHRocmVhZC4KLSAgICAgICAgdGhyZWFkID0gZHVtcF9yZW5kZXJfdHJl
ZV90aHJlYWQuVGVzdFNoZWxsVGhyZWFkKHNlbGYuX3BvcnQsCi0gICAgICAgICAgICBzZWxmLl9v
cHRpb25zLCB3b3JrZXJfbnVtYmVyLCB3b3JrZXJfbmFtZSwKLSAgICAgICAgICAgIHNlbGYuX3Rl
c3RfcnVubmVyLl9jdXJyZW50X2ZpbGVuYW1lX3F1ZXVlLAotICAgICAgICAgICAgc2VsZi5fdGVz
dF9ydW5uZXIuX3Jlc3VsdF9xdWV1ZSkKLSAgICAgICAgIyBOb3RlOiBEb24ndCBzdGFydCgpIHRo
ZSB0aHJlYWQhIElmIHdlIGRpZCwgaXQgd291bGQgYWN0dWFsbHkKLSAgICAgICAgIyBjcmVhdGUg
YW5vdGhlciB0aHJlYWQgYW5kIHN0YXJ0IGV4ZWN1dGluZyBpdCwgYW5kIHdlJ2Qgbm8gbG9uZ2Vy
Ci0gICAgICAgICMgYmUgc2luZ2xlLXRocmVhZGVkLgotICAgICAgICByZXR1cm4gdGhyZWFkCi0K
LSAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmKToKLSAgICAgICAgdGhyZWFkID0gc2VsZi5f
dGhyZWFkcygpWzBdCi0gICAgICAgIHRocmVhZC5ydW5faW5fbWFpbl90aHJlYWQoc2VsZi5fdGVz
dF9ydW5uZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9y
dW5uZXIuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkpCi0gICAgICAgIHNlbGYuX3Rlc3RfcnVubmVy
LnVwZGF0ZSgpCi0KLQotY2xhc3MgTXVsdGlUaHJlYWRlZEJyb2tlcihXb3JrZXJNZXNzYWdlQnJv
a2VyKToKLSAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyLCB3b3JrZXJf
bmFtZSk6Ci0gICAgICAgIHRocmVhZCA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTaGVs
bFRocmVhZChzZWxmLl9wb3J0LAotICAgICAgICAgICAgc2VsZi5fb3B0aW9ucywgd29ya2VyX251
bWJlciwgd29ya2VyX25hbWUsCi0gICAgICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci5fY3VycmVu
dF9maWxlbmFtZV9xdWV1ZSwKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLl9yZXN1bHRf
cXVldWUpCi0gICAgICAgIHRocmVhZC5zdGFydCgpCi0gICAgICAgIHJldHVybiB0aHJlYWQKLQot
ICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYpOgotICAgICAgICB0aHJlYWRzID0gc2VsZi5f
dGhyZWFkcygpCi0KLSAgICAgICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdhaXRp
bmcgZm9yIHRoZW0gdG8gZmluaXNoLgotICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IFRy
dWUKLSAgICAgICAgd2hpbGUgc29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAgICAgICAgICBzb21l
X3RocmVhZF9pc19hbGl2ZSA9IEZhbHNlCi0gICAgICAgICAgICB0ID0gdGltZS50aW1lKCkKLSAg
ICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICBleGNlcHRp
b25faW5mbyA9IHRocmVhZC5leGNlcHRpb25faW5mbygpCi0gICAgICAgICAgICAgICAgaWYgZXhj
ZXB0aW9uX2luZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICMgUmUtcmFpc2Ug
dGhlIHRocmVhZCdzIGV4Y2VwdGlvbiBoZXJlIHRvIG1ha2UgaXQKLSAgICAgICAgICAgICAgICAg
ICAgIyBjbGVhciB0aGF0IHRlc3Rpbmcgd2FzIGFib3J0ZWQuIE90aGVyd2lzZSwKLSAgICAgICAg
ICAgICAgICAgICAgIyB0aGUgdGVzdHMgdGhhdCBkaWQgbm90IHJ1biB3b3VsZCBiZSBhc3N1bWVk
Ci0gICAgICAgICAgICAgICAgICAgICMgdG8gaGF2ZSBwYXNzZWQuCi0gICAgICAgICAgICAgICAg
ICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9u
X2luZm9bMl0KLQotICAgICAgICAgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6Ci0gICAgICAg
ICAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQotICAgICAgICAgICAgICAg
ICAgICBuZXh0X3RpbWVvdXQgPSB0aHJlYWQubmV4dF90aW1lb3V0KCkKLSAgICAgICAgICAgICAg
ICAgICAgaWYgbmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0OgotICAgICAgICAgICAg
ICAgICAgICAgICAgbG9nX3dlZGdlZF93b3JrZXIodGhyZWFkLmdldE5hbWUoKSwgdGhyZWFkLmlk
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQuY2xlYXJfbmV4dF90aW1lb3V0KCkK
LQotICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIudXBkYXRlKCkKLQotICAgICAgICAgICAg
aWYgc29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAx
KQotCi0gICAgZGVmIGNhbmNlbF93b3JrZXJzKHNlbGYpOgotICAgICAgICB0aHJlYWRzID0gc2Vs
Zi5fdGhyZWFkcygpCi0gICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAg
IHRocmVhZC5jYW5jZWwoKQotCi0KLWRlZiBsb2dfd2VkZ2VkX3dvcmtlcihuYW1lLCBpZCk6Ci0g
ICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB3b3JrZXIgc3RhdGUuIiIiCi0g
ICAgc3RhY2sgPSBfZmluZF90aHJlYWRfc3RhY2soaWQpCi0gICAgYXNzZXJ0KHN0YWNrIGlzIG5v
dCBOb25lKQotICAgIF9sb2cuZXJyb3IoIiIpCi0gICAgX2xvZy5lcnJvcigiJXMgKHRpZCAlZCkg
aXMgd2VkZ2VkIiAlIChuYW1lLCBpZCkpCi0gICAgX2xvZ19zdGFjayhzdGFjaykKLSAgICBfbG9n
LmVycm9yKCIiKQotCi0KLWRlZiBfZmluZF90aHJlYWRfc3RhY2soaWQpOgotICAgICIiIlJldHVy
bnMgYSBzdGFjayBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBkdW1wIGEgc3RhY2sgdHJhY2Ug
Zm9yCi0gICAgdGhlIGdpdmVuIHRocmVhZCBpZCAob3IgTm9uZSBpZiB0aGUgaWQgaXMgbm90IGZv
dW5kKS4iIiIKLSAgICBmb3IgdGhyZWFkX2lkLCBzdGFjayBpbiBzeXMuX2N1cnJlbnRfZnJhbWVz
KCkuaXRlbXMoKToKLSAgICAgICAgaWYgdGhyZWFkX2lkID09IGlkOgotICAgICAgICAgICAgcmV0
dXJuIHN0YWNrCi0gICAgcmV0dXJuIE5vbmUKLQotCi1kZWYgX2xvZ19zdGFjayhzdGFjayk6Ci0g
ICAgIiIiTG9nIGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCkuIiIiCi0gICAgZm9yIGZpbGVu
YW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2sp
OgotICAgICAgICBfbG9nLmVycm9yKCdGaWxlOiAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmls
ZW5hbWUsIGxpbmVubywgbmFtZSkpCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICBfbG9n
LmVycm9yKCcgICVzJyAlIGxpbmUuc3RyaXAoKSkKKyAgICBkZWYgYWRkX3RpbWVyKHNlbGYsIHF1
ZXVlX25hbWUsIGNhbGxiYWNrLCBkZWxheV9zZWNzKToKKyAgICAgICAgIiIiQWRkIGEgdGltZXIg
dGhhdCB3aWxsIGZpcmUgZHVyaW5nIHJ1bl9tZXNzYWdlX2xvb3AocXVldWVfbmFtZSkuCisKKyAg
ICAgICAgVGltZXIgY2FsbGJhY2tzIHRha2Ugbm8gYXJndW1lbnRzLCBhbmQgc2hvdWxkIHJldHVy
biBUcnVlIGlmZgorICAgICAgICBydW5fbWVzc2FnZV9sb29wIHNob3VsZCBleGl0LiBDdXJyZW50
bHkgdGhlIGNvZGUgb25seSBzdXBwb3J0cyBvbmUKKyAgICAgICAgdGltZXIgcGVyIHF1ZXVlX25h
bWUsIGJ1dCBhIHRpbWVyIGNhbiBiZSBhZGRlZCBmcm9tIGluc2lkZSB0aGUKKyAgICAgICAgY2Fs
bCBiYWNrLCBpbiBvcmRlciB0byBjcmVhdGUgcGVyaW9kaWMgdGltZXJzLiIiIgorICAgICAgICBh
c3NlcnQoc2VsZi5fdGltZXJzW3F1ZXVlX25hbWVdIGlzIE5vbmUpCisgICAgICAgIHNlbGYuX3Rp
bWVyc1txdWV1ZV9uYW1lXSA9IF9UaW1lcihjYWxsYmFjaywgZGVsYXlfc2VjcykKKworICAgIGRl
ZiBwdXRfbWVzc2FnZShzZWxmLCBzcmMsIGRlc3QsIG1lc3NhZ2VfbmFtZSwgYm9keT1Ob25lKToK
KyAgICAgICAgIiIiUG9zdCBhIG1lc3NhZ2UgdG8gdGhlIHF1ZXVlIG5hbWVkICdkZXN0Jy4iIiIK
KyAgICAgICAgYm9keSA9IGJvZHkgb3IgdHVwbGUoKQorICAgICAgICBtc2cgPSBfTWVzc2FnZShz
cmMsIGRlc3QsIG1lc3NhZ2VfbmFtZSwgYm9keSkKKyAgICAgICAgc2VsZi5fcXVldWVzW2Rlc3Rd
LnB1dChtc2cpCisKKyAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCByZWFkZXIsIHF1ZXVl
X25hbWUpOgorICAgICAgICAiIiJMb29wIHByb2Nlc3NpbmcgbWVzc2FnZXMgdW50aWwgZG9uZS4K
KworICAgICAgICBUaGUgbG9vcCBpcyBkb25lIHdoZW4gZWl0aGVyIHJlYWRlci5pc19kb25lKCkg
cmV0dXJucyBUcnVlIG9yIGEKKyAgICAgICAgdGltZXIgZmlyZXMgYW5kIHJldHVybnMgVHJ1ZS4i
IiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9jaGVja190
aW1lcihzZWxmLCBxdWV1ZV9uYW1lLCBub3cpOgorICAgICAgICAiIiJDaGVjayBpZiBhbnkgdGlt
ZXJzIG5lZWQgdG8gZmlyZSwgYW5kIGZpcmUgdGhlbS4KKworICAgICAgICBSZXR1cm5zIGEgdHVw
bGUgb2YgKHdoZXRoZXIgYSB0aW1lciBmaXJlZCwgd2hldGhlciBhIHRpbWVyCisgICAgICAgICAg
ICByZXR1cm5lZCBUcnVlIHRvIGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIGJhaWwgb3V0IG9mIHRo
ZSBhCisgICAgICAgICAgICBtZXNzYWdlIGxvb3AgaWYgbmVjZXNzYXJ5KS4iIiIKKyAgICAgICAg
IyBUaGUgZmlyc3QgcmV0dXJuIHZhbHVlIGlzIG5lZWRlZCBieSBJbmxpbmVCcm9rZXIuX2RyYWlu
X3F1ZXVlKCksCisgICAgICAgICMgdGhlIHNlY29uZCBieSBNdWx0aVRocmVhZGVkQnJva2VyLnJ1
bl9tZXNzYWdlX2xvb3AoKS4KKyAgICAgICAgaWYgc2VsZi5fdGltZXJfZXhwaXJlZChxdWV1ZV9u
YW1lLCBub3cpOgorICAgICAgICAgICAgZGVsYXkgPSBzZWxmLl90aW1lcl9kZWxheShxdWV1ZV9u
YW1lLCBub3cpCisgICAgICAgICAgICB0ID0gc2VsZi5fdGltZXJzW3F1ZXVlX25hbWVdCisgICAg
ICAgICAgICBzZWxmLl90aW1lcnNbcXVldWVfbmFtZV0gPSBOb25lCisgICAgICAgICAgICBkb25l
ID0gdC5jYWxsYmFjaygpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgZG9uZQorICAgICAgICBy
ZXR1cm4gRmFsc2UsIEZhbHNlCisKKyAgICBkZWYgX3RpbWVyX2RlbGF5KHNlbGYsIHF1ZXVlX25h
bWUsIG5vdyk6CisgICAgICAgICIiIiJSZXR1cm4gdGhlIHRpbWUgKGluIHNlY3MpIGZyb20gJ25v
dycgdW50aWwgdGhlIHF1ZXVlIHRpbWVyIGZpcmVzLgorCisgICAgICAgIFRoZSByZXR1cm4gdmFs
dWUgbWF5IGJlIG5lZ2F0aXZlLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHRpbWVyIGhhcworICAgICAg
ICBleHBpcmVkLCBvciBOb25lLCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIG5vIHRpbWVyIG9u
IHRoZSBxdWV1ZQorICAgICAgICAoZGVsYXkgZm9yZXZlcikuIiIiCisgICAgICAgIHQgPSBzZWxm
Ll90aW1lcnNbcXVldWVfbmFtZV0KKyAgICAgICAgaWYgdDoKKyAgICAgICAgICAgIHJldHVybiB0
LmRlYWRsaW5lIC0gbm93CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3RpbWVyX2V4
cGlyZWQoc2VsZiwgcXVldWVfbmFtZSwgbm93KToKKyAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIg
dGhlIHF1ZXVlIGhhcyBhIHRpbWVyIHdob3NlIGRlYWRsaW5lIGlzIGVhcmxpZXIgdGhhbiBub3cu
IiIiCisgICAgICAgIHQgPSBzZWxmLl90aW1lcnNbcXVldWVfbmFtZV0KKyAgICAgICAgcmV0dXJu
ICh0IGlzIG5vdCBOb25lKSBhbmQgbm93ID49IHQuZGVhZGxpbmUKKworICAgIGRlZiBfZGlzcGF0
Y2hfbWVzc2FnZShzZWxmLCBtc2csIHJlYWRlcik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHJl
YWRlciwgJ2hhbmRsZV8nICsgbXNnLmhkcik6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25F
cnJvcigKKyAgICAgICAgICAgICAgICIlczogcmVjZWl2ZWQgbWVzc2FnZSAnJXMnIGl0IGNvdWxk
bid0IGhhbmRsZSIgJQorICAgICAgICAgICAgICAgKHJlYWRlci5uYW1lKCksIG1zZy5oZHIpKQor
CisgICAgICAgIG9wdGFyZ3MgPSBtc2cuYm9keQorICAgICAgICBmbiA9IGdldGF0dHIocmVhZGVy
LCAnaGFuZGxlXycgKyBtc2cuaGRyKQorICAgICAgICBmbihtc2cuc3JjLCAqb3B0YXJncykKKwor
CitjbGFzcyBfSW5saW5lQnJva2VyKF9Xb3JrZXJNZXNzYWdlQnJva2VyKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAgIHN1cGVyKF9JbmxpbmVCcm9rZXIs
IHNlbGYpLl9faW5pdF9fKHBvcnQsIG9wdGlvbnMpCisgICAgICAgICMgRklYTUU6IFdlIGRvbid0
IGFjdHVhbGx5IG5lZWQgdGhyZWFkc2FmZSBxdWV1ZXMgaGVyZS4KKyAgICAgICAgc2VsZi5fcXVl
dWVzW01BTkFHRVJdID0gUXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLl9xdWV1ZXNbQU5ZX1dP
UktFUl0gPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHNlbGYuX21hbmFnZXIgPSBOb25lCisKKyAg
ICBjbGFzcyBfV29ya2VyKGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLldvcmtlcik6CisgICAgICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICAgICAg
c3VwZXIoX0lubGluZUJyb2tlci5fV29ya2VyLCBzZWxmKS5fX2luaXRfXyhicm9rZXIsIHdvcmtl
cl9udW1iZXIpCisgICAgICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisKKyAgICAgICAgZGVm
IGlzX2FsaXZlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FsaXZlCisKKyAgICAg
ICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2FsaXZlID0gVHJ1ZQorICAgICAg
ICAgICAgc3VwZXIoX0lubGluZUJyb2tlci5Xb3JrZXIsIHNlbGYpLnJ1bigpCisgICAgICAgICAg
ICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisKKyAgICAgICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxm
KToKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5fZHJhaW5fcXVldWUoc2VsZi5fYnJva2VyLl9t
YW5hZ2VyLCBNQU5BR0VSKQorCisgICAgZGVmIHN0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVt
YmVyKToKKyAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IHNlbGYuX1dvcmtlcihzZWxmLCB3
b3JrZXJfbnVtYmVyKQorICAgICAgICByZXR1cm4gc2VsZi5faW5saW5lX3dvcmtlci5uYW1lKCkK
KworICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIG1hbmFnZXIsIHF1ZXVlX25hbWUpOgor
ICAgICAgICAiIiJMb29wIHByb2Nlc3NpbmcgbWVzc2FnZXMgdW50aWwgZG9uZS4iIiIKKyAgICAg
ICAgc2VsZi5fbWFuYWdlciA9IG1hbmFnZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGlk
X3dvcmsgPSBUcnVlCisgICAgICAgICAgICB3aGlsZSBkaWRfd29yazoKKyAgICAgICAgICAgICAg
ICBkaWRfd29yayA9IHNlbGYuX2RyYWluX3F1ZXVlKHNlbGYuX2lubGluZV93b3JrZXIsIEFOWV9X
T1JLRVIpCisgICAgICAgICAgICAgICAgZGlkX3dvcmsgPSBkaWRfd29yayBvciBzZWxmLl9kcmFp
bl9xdWV1ZShtYW5hZ2VyLCBNQU5BR0VSKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg
c2VsZi5fbWFuYWdlciA9IE5vbmUKKworICAgIGRlZiBjYW5jZWxfd29ya2VyKHNlbGYsIHdvcmtl
cl9uYW1lKToKKyAgICAgICAgYXNzZXJ0IHdvcmtlcl9uYW1lID09IHNlbGYuX2lubGluZV93b3Jr
ZXIubmFtZSgpCisgICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIuY2FuY2VsKCkKKworICAgIGRl
ZiB3b3JrZXJfaXNfYWxpdmUoc2VsZiwgd29ya2VyX25hbWUpOgorICAgICAgICBhc3NlcnQgd29y
a2VyX25hbWUgPT0gc2VsZi5faW5saW5lX3dvcmtlci5uYW1lKCkKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2lubGluZV93b3JrZXIuaXNfYWxpdmUoKQorCisgICAgZGVmIGpvaW5fd29ya2VyKHNlbGYs
IHdvcmtlcl9uYW1lLCB0aW1lb3V0KToKKyAgICAgICAgYXNzZXJ0IHdvcmtlcl9uYW1lID09IHNl
bGYuX2lubGluZV93b3JrZXIubmFtZSgpCisgICAgICAgIGFzc2VydCBzZWxmLl9pbmxpbmVfd29y
a2VyLmlzX2RvbmUoKQorCisgICAgZGVmIGxvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtlcl9u
YW1lLCB0ZXN0X25hbWUpOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiX0lubGluZUJy
b2tlci5sb2dfd2VkZ2VkX3dvcmtlcigpIGNhbGxlZCIpCisKKyAgICBkZWYgX2RyYWluX3F1ZXVl
KHNlbGYsIHJlYWRlciwgcXVldWVfbmFtZSk6CisgICAgICAgICIiIkxvb3AgdW50aWwgd2UgcnVu
IG91dCBvZiBzdHVmZiB0byBkbyB3L28gYmxvY2tpbmcuCisKKyAgICAgICAgVGhpcyBtZWFucyB0
aGVyZSBhcmUgbm8gbWVzc2FnZXMgdG8gcHJvY2VzcyBhbmQgbm8gdGltZXJzIGFyZSBmaXJpbmcu
CisgICAgICAgIFRoZSBtZXRob2Qgd2lsbCBrZWVwIHByb2Nlc3NpbmcgbWVzc2FnZXMgYW5kIGZp
cmluZyB0aW1lcnMgcmVnYXJkbGVzcworICAgICAgICBvZiB3aGF0IHRoZSB0aW1lcnMgcmV0dXJu
IG9yIHdoYXQgcmVhZGVyLmlzX2RvbmUoKSByZXR1cm5zLgorCisgICAgICAgIFJldHVybnMgd2hl
dGhlciBvciBub3Qgd2UgZGlkIGFueXRoaW5nIGF0IGFsbC4iIiIKKyAgICAgICAgIyBGSVhNRTog
U2hvdWxkIHdlIGV4aXQgZWFybHkgaWYgdGltZXJzIHJldHVybiBkb25lIG9yIHJlYWRlci5pc19k
b25lKCkKKyAgICAgICAgIyBpcyBUcnVlPworCisgICAgICAgIGRpZF93b3JrID0gRmFsc2UKKyAg
ICAgICAgZGlkX3dvcmtfb25fdGhpc19ydW4gPSBUcnVlCisgICAgICAgIHdoaWxlIGRpZF93b3Jr
X29uX3RoaXNfcnVuOgorICAgICAgICAgICAgIyBQZXIgdGhlIGFib3ZlLCB3ZSBpZ25vcmUgdGhl
ICdkb25lJyB2YWx1ZSBmcm9tIGNoZWNrX3RpbWVyKCkKKyAgICAgICAgICAgIGRpZF93b3JrX29u
X3RoaXNfcnVuLCBfID0gc2VsZi5fY2hlY2tfdGltZXIocXVldWVfbmFtZSwgdGltZS50aW1lKCkp
CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5fcXVldWVzW3F1
ZXVlX25hbWVdLmdldChibG9jaz1GYWxzZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9kaXNwYXRj
aF9tZXNzYWdlKG1zZywgcmVhZGVyKQorICAgICAgICAgICAgICAgIGRpZF93b3JrX29uX3RoaXNf
cnVuID0gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAg
ICAgIHBhc3MKKworICAgICAgICAgICAgaWYgZGlkX3dvcmtfb25fdGhpc19ydW46CisgICAgICAg
ICAgICAgICAgZGlkX3dvcmsgPSBUcnVlCisKKyAgICAgICAgcmV0dXJuIGRpZF93b3JrCisKKwor
Y2xhc3MgX011bHRpVGhyZWFkZWRCcm9rZXIoX1dvcmtlck1lc3NhZ2VCcm9rZXIpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKToKKyAgICAgICAgc3VwZXIoX011bHRpVGhy
ZWFkZWRCcm9rZXIsIHNlbGYpLl9faW5pdF9fKHBvcnQsIG9wdGlvbnMpCisgICAgICAgIHNlbGYu
X3F1ZXVlc1tNQU5BR0VSXSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fcXVldWVzW0FO
WV9XT1JLRVJdID0gUXVldWUuUXVldWUoKQorCisgICAgICAgICMgTWFwcGluZyBvZiB3b3JrZXIg
bmFtZXMgdG8gY2hpbGQgdGhyZWFkcy9wcm9jZXNzZXMsIHdoaWNoIHdlCisgICAgICAgICMgZ2Vu
ZXJpY2FsbHkgY2FsbCBjaGlsZHJlbi4KKyAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSB7fQorCisg
ICAgY2xhc3MgX1dvcmtlcihkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIsIHRocmVhZGlu
Zy5UaHJlYWQpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfbnVt
YmVyKToKKyAgICAgICAgICAgIHN1cGVyKF9NdWx0aVRocmVhZGVkQnJva2VyLl9Xb3JrZXIsIHNl
bGYpLl9faW5pdF9fKGJyb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9udW1iZXIpCisgICAgICAgICAgICBz
ZWxmLnRpZCA9ICI8bm9uZT4iCisKKyAgICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAg
IHNlbGYudGlkID0gdGhyZWFkLmdldF9pZGVudCgpCisgICAgICAgICAgICBkdW1wX3JlbmRlcl90
cmVlX3RocmVhZC5Xb3JrZXIucnVuKHNlbGYpCisKKyAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYs
IHdvcmtlcl9udW1iZXIpOgorICAgICAgICB3b3JrZXIgPSBzZWxmLl9Xb3JrZXIoc2VsZiwgd29y
a2VyX251bWJlcikKKyAgICAgICAgbmFtZSA9IHdvcmtlci5uYW1lKCkKKyAgICAgICAgc2VsZi5f
Y2hpbGRyZW5bbmFtZV0gPSB3b3JrZXIKKyAgICAgICAgd29ya2VyLnN0YXJ0KCkKKyAgICAgICAg
cmV0dXJuIG5hbWUKKworICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIHJlYWRlciwgcXVl
dWVfbmFtZSk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIEhlcmUgd2UgZG9u
J3QgY2FyZSBpZiB3ZSBkbyB3b3JrIGluIHRoZSB0aW1lci4KKyAgICAgICAgICAgIG5vdyA9IHRp
bWUudGltZSgpCisgICAgICAgICAgICBfLCBkb25lID0gc2VsZi5fY2hlY2tfdGltZXIocXVldWVf
bmFtZSwgbm93KQorICAgICAgICAgICAgaWYgZG9uZSBvciByZWFkZXIuaXNfZG9uZSgpOgorICAg
ICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAjIFJlLWNoZWNrIHRoZSB0aW1lLCBp
biBjYXNlIHRoZSB0aW1lciBoYWQgYSBzbG93IGNhbGxiYWNrLgorICAgICAgICAgICAgbm93ID0g
dGltZS50aW1lKCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl90aW1lcl9leHBpcmVkKHF1ZXVl
X25hbWUsIG5vdyk6CisgICAgICAgICAgICAgICAgZGVsYXkgPSBzZWxmLl90aW1lcl9kZWxheShx
dWV1ZV9uYW1lLCBub3cpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAg
ICBtc2cgPSBzZWxmLl9xdWV1ZXNbcXVldWVfbmFtZV0uZ2V0KGJsb2NrPVRydWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1k
ZWxheSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGlzcGF0Y2hfbWVzc2FnZShtc2csIHJl
YWRlcikKKyAgICAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAg
ICAgICAgIHBhc3MKKworICAgIGRlZiBjYW5jZWxfd29ya2VyKHNlbGYsIHdvcmtlcl9uYW1lKToK
KyAgICAgICAgc2VsZi5fY2hpbGRyZW5bd29ya2VyX25hbWVdLmNhbmNlbCgpCisKKyAgICBkZWYg
am9pbl93b3JrZXIoc2VsZiwgd29ya2VyX25hbWUsIHRpbWVvdXQpOgorICAgICAgICBzZWxmLl9j
aGlsZHJlblt3b3JrZXJfbmFtZV0uam9pbih0aW1lb3V0KQorCisgICAgZGVmIHdvcmtlcl9pc19h
bGl2ZShzZWxmLCB3b3JrZXJfbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9jaGlsZHJlblt3
b3JrZXJfbmFtZV0uaXNfYWxpdmUoKQorCisgICAgZGVmIGxvZ193ZWRnZWRfd29ya2VyKHNlbGYs
IHdvcmtlcl9uYW1lLCB0ZXN0X25hbWUpOgorICAgICAgICB0aHJlYWQgPSBzZWxmLl9jaGlsZHJl
blt3b3JrZXJfbmFtZV0KKyAgICAgICAgc3RhY2sgPSBzZWxmLl9maW5kX3RocmVhZF9zdGFjayh0
aHJlYWQuaWQoKSkKKyAgICAgICAgYXNzZXJ0KHN0YWNrIGlzIG5vdCBOb25lKQorICAgICAgICBf
bG9nLmVycm9yKCIlcyAodGlkICVkKSBpcyB3ZWRnZWQgb24gdGVzdCAlcyIgJQorICAgICAgICAg
ICAgICAgICAgICh3b3JrZXJfbmFtZSwgdGhyZWFkLmlkKCksIHRlc3RfbmFtZSkpCisgICAgICAg
IHNlbGYuX2xvZ19zdGFjayhzdGFjaykKKworICAgIGRlZiBfZmluZF90aHJlYWRfc3RhY2soc2Vs
ZiwgaWQpOgorICAgICAgICAiIiJSZXR1cm5zIGEgc3RhY2sgb2JqZWN0IHRoYXQgY2FuIGJlIHVz
ZWQgdG8gZHVtcCBhIHN0YWNrIHRyYWNlIGZvcgorICAgICAgICB0aGUgZ2l2ZW4gdGhyZWFkIGlk
IChvciBOb25lIGlmIHRoZSBpZCBpcyBub3QgZm91bmQpLiIiIgorICAgICAgICBmb3IgdGhyZWFk
X2lkLCBzdGFjayBpbiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKToKKyAgICAgICAgICAg
IGlmIHRocmVhZF9pZCA9PSBpZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sKKyAgICAg
ICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfbG9nX3N0YWNrKHNlbGYsIHN0YWNrKToKKyAgICAg
ICAgIiIiTG9nIGEgc3RhY2sgdHJhY2UgdG8gbG9nLmVycm9yKCkuIiIiCisgICAgICAgIGZvciBm
aWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKHN0
YWNrKToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZpbGU6ICIlcyIsIGxpbmUgJWQsIGluICVz
JyAlIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKSkKKyAgICAgICAgICAgIGlmIGxpbmU6CisgICAg
ICAgICAgICAgICAgX2xvZy5lcnJvcignICAlcycgJSBsaW5lLnN0cmlwKCkpCisKKworY2xhc3Mg
X011bHRpUHJvY2Vzc0Jyb2tlcihfTXVsdGlUaHJlYWRlZEJyb2tlcik6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBzdXBlcihfTXVsdGlQcm9jZXNzQnJv
a2VyLCBzZWxmKS5fX2luaXRfXyhwb3J0LCBvcHRpb25zKQorICAgICAgICBzZWxmLl9xdWV1ZXNb
TUFOQUdFUl0gPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQorICAgICAgICBzZWxmLl9xdWV1ZXNb
QU5ZX1dPUktFUl0gPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQorCisgICAgY2xhc3MgX1dvcmtl
cihkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5Xb3JrZXIsIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNz
KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX251bWJlcik6Cisg
ICAgICAgICAgICBzdXBlcihfTXVsdGlQcm9jZXNzQnJva2VyLl9Xb3JrZXIsIHNlbGYpLl9faW5p
dF9fKGJyb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd29ya2VyX251bWJlcikKKworICAgICAgICBkZWYgY2FuY2VsKHNl
bGYpOgorICAgICAgICAgICAgc2VsZi50ZXJtaW5hdGUoKQorCisgICAgZGVmIGxvZ193ZWRnZWRf
d29ya2VyKHNlbGYsIHdvcmtlcl9uYW1lLCB0ZXN0X25hbWUpOgorICAgICAgICBwcm9jID0gc2Vs
Zi5fY2hpbGRyZW5bd29ya2VyX25hbWVdCisgICAgICAgIF9sb2cuZXJyb3IoIiVzIChwaWQgJWQp
IGlzIHdlZGdlZCBvbiB0ZXN0ICVzIiAlCisgICAgICAgICAgICAgICAgICAgKHdvcmtlcl9uYW1l
LCBwcm9jLnBpZCwgdGVzdF9uYW1lKSkKKyAgICAgICAgX2xvZy5lcnJvcigiIikKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3Qu
cHkKaW5kZXggNmYwNGZkMzU1MThhMDRlYmQ2OTE5ZmY4YTk3NjEzY2Y0YzViZTFmNC4uNjk1MmZm
NTA5OTRlMmZlZGMwNmU1ZDRkZmRiNWRhMTY1NmM4MDk0NCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9i
cm9rZXJfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXJfdW5pdHRlc3QucHkKQEAgLTQy
LDEzOSArNDIsNjAgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJr
aXRfdGVzdHMKIAogaW1wb3J0IG1lc3NhZ2VfYnJva2VyCiAKKyMgRklYTUU6IEJveSBkbyB3ZSBu
ZWVkIGEgbG90IG1vcmUgdGVzdHMgaGVyZSAuLi4KIAotY2xhc3MgVGVzdFRocmVhZCh0aHJlYWRp
bmcuVGhyZWFkKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRlZF9xdWV1ZSwgc3RvcHBp
bmdfcXVldWUpOgotICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0gICAg
ICAgIHNlbGYuX3RocmVhZF9pZCA9IE5vbmUKLSAgICAgICAgc2VsZi5fc3RhcnRlZF9xdWV1ZSA9
IHN0YXJ0ZWRfcXVldWUKLSAgICAgICAgc2VsZi5fc3RvcHBpbmdfcXVldWUgPSBzdG9wcGluZ19x
dWV1ZQotICAgICAgICBzZWxmLl90aW1lb3V0ID0gRmFsc2UKLSAgICAgICAgc2VsZi5fdGltZW91
dF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBO
b25lCi0KLSAgICBkZWYgaWQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl90aHJlYWRfaWQK
LQotICAgIGRlZiBnZXROYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIndvcmtlci0wIgotCi0g
ICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQotCi0gICAgZGVm
IF9jb3ZlcmVkX3J1bihzZWxmKToKLSAgICAgICAgIyBGSVhNRTogdGhpcyBpcyBhIHNlcGFyYXRl
IHJvdXRpbmUgdG8gd29yayBhcm91bmQgYSBidWcKLSAgICAgICAgIyBpbiBjb3ZlcmFnZTogc2Vl
IGh0dHA6Ly9iaXRidWNrZXQub3JnL25lZC9jb3ZlcmFnZXB5L2lzc3VlLzg1LgotICAgICAgICBz
ZWxmLl90aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKLSAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgc2VsZi5fc3RhcnRlZF9xdWV1ZS5wdXQoJycpCi0gICAgICAgICAgICBtc2cgPSBzZWxm
Ll9zdG9wcGluZ19xdWV1ZS5nZXQoKQotICAgICAgICAgICAgaWYgbXNnID09ICdLZXlib2FyZElu
dGVycnVwdCc6Ci0gICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAg
ICAgICAgIGVsaWYgbXNnID09ICdFeGNlcHRpb24nOgotICAgICAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoKQotICAgICAgICAgICAgZWxpZiBtc2cgPT0gJ1RpbWVvdXQnOgotICAgICAgICAg
ICAgICAgIHNlbGYuX3RpbWVvdXQgPSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5fdGltZW91
dF9xdWV1ZS5nZXQoKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLl9leGNlcHRp
b25faW5mbyA9IHN5cy5leGNfaW5mbygpCi0KLSAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6
Ci0gICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb25faW5mbwotCi0gICAgZGVmIG5leHRfdGlt
ZW91dChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fdGltZW91dDoKLSAgICAgICAgICAgIHNlbGYu
X3RpbWVvdXRfcXVldWUucHV0KCdkb25lJykKLSAgICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUo
KSAtIDEwCi0gICAgICAgIHJldHVybiB0aW1lLnRpbWUoKQotCi0gICAgZGVmIGNsZWFyX25leHRf
dGltZW91dChzZWxmKToKLSAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9uZQotCi1jbGFz
cyBUZXN0SGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBh
c3RyZWFtKToKLSAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCi0gICAgICAg
IHNlbGYuX3N0cmVhbSA9IGFzdHJlYW0KLQotICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6Ci0g
ICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZShzZWxmLmZvcm1hdChyZWNvcmQpKQotCi0KLWNsYXNz
IE11bHRpVGhyZWFkZWRCcm9rZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBjbGFzcyBN
b2NrVGVzdFJ1bm5lcihvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAg
ICAgICAgICBwYXNzCi0KLSAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgICAgICBw
YXNzCi0KLSAgICAgICAgZGVmIHVwZGF0ZShzZWxmKToKLSAgICAgICAgICAgIHBhc3MKLQotICAg
IGRlZiBydW5fb25lX3RocmVhZChzZWxmLCBtc2cpOgotICAgICAgICBydW5uZXIgPSBzZWxmLk1v
Y2tUZXN0UnVubmVyKCkKLSAgICAgICAgcG9ydCA9IE5vbmUKLSAgICAgICAgb3B0aW9ucyA9IG1v
Y2t0b29sLk1vY2tPcHRpb25zKGNoaWxkX3Byb2Nlc3Nlcz0nMScpCi0gICAgICAgIHN0YXJ0aW5n
X3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBzdG9wcGluZ19xdWV1ZSA9IFF1ZXVlLlF1
ZXVlKCkKLSAgICAgICAgYnJva2VyID0gbWVzc2FnZV9icm9rZXIuTXVsdGlUaHJlYWRlZEJyb2tl
cihwb3J0LCBvcHRpb25zKQotICAgICAgICBicm9rZXIuX3Rlc3RfcnVubmVyID0gcnVubmVyCi0g
ICAgICAgIGNoaWxkX3RocmVhZCA9IFRlc3RUaHJlYWQoc3RhcnRpbmdfcXVldWUsIHN0b3BwaW5n
X3F1ZXVlKQotICAgICAgICBicm9rZXIuX3dvcmtlcnNbJ3dvcmtlci0wJ10gPSBtZXNzYWdlX2Jy
b2tlci5fV29ya2VyU3RhdGUoJ3dvcmtlci0wJykKLSAgICAgICAgYnJva2VyLl93b3JrZXJzWyd3
b3JrZXItMCddLnRocmVhZCA9IGNoaWxkX3RocmVhZAotICAgICAgICBjaGlsZF90aHJlYWQuc3Rh
cnQoKQotICAgICAgICBzdGFydGVkX21zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCi0gICAgICAg
IHN0b3BwaW5nX3F1ZXVlLnB1dChtc2cpCi0gICAgICAgIHJldHVybiBicm9rZXIucnVuX21lc3Nh
Z2VfbG9vcCgpCiAKLSAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgaW50ZXJydXB0
ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcnKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlu
dGVycnVwdGVkKQorY2xhc3MgVGVzdFRocmVhZFN0YWNrcyh1bml0dGVzdC5UZXN0Q2FzZSk6Cisg
ICAgY2xhc3MgVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgICAgICBkZWYgX19pbml0X18o
c2VsZiwgc3RhcnRlZF9xdWV1ZSwgc3RvcHBpbmdfcXVldWUpOgorICAgICAgICAgICAgdGhyZWFk
aW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgc2VsZi5faWQgPSBOb25lCisg
ICAgICAgICAgICBzZWxmLl9zdGFydGVkX3F1ZXVlID0gc3RhcnRlZF9xdWV1ZQorICAgICAgICAg
ICAgc2VsZi5fc3RvcHBpbmdfcXVldWUgPSBzdG9wcGluZ19xdWV1ZQogCi0gICAgZGVmIHRlc3Rf
aW50ZXJydXB0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVy
cnVwdCwgc2VsZi5ydW5fb25lX3RocmVhZCwgJ0tleWJvYXJkSW50ZXJydXB0JykKKyAgICAgICAg
ZGVmIGlkKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lkCiAKLSAgICBkZWYgdGVz
dF90aW1lb3V0KHNlbGYpOgotICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVy
ZSgpCi0gICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBz
ZWxmLnJ1bl9vbmVfdGhyZWFkKCdUaW1lb3V0JykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShp
bnRlcnJ1cHRlZCkKLSAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQorICAgICAgICBkZWYgbmFt
ZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAnd29ya2VyLzAnCiAKLSAgICBkZWYgdGVzdF9l
eGNlcHRpb24oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNl
bGYucnVuX29uZV90aHJlYWQsICdFeGNlcHRpb24nKQorICAgICAgICBkZWYgcnVuKHNlbGYpOgor
ICAgICAgICAgICAgc2VsZi5faWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKKyAgICAgICAgICAgIHNl
bGYuX3N0YXJ0ZWRfcXVldWUucHV0KCcnKQorICAgICAgICAgICAgbXNnID0gc2VsZi5fc3RvcHBp
bmdfcXVldWUuZ2V0KCkKIAorICAgIGRlZiBtYWtlX2Jyb2tlcihzZWxmKToKKyAgICAgICAgb3B0
aW9ucyA9IG1vY2t0b29sLk1vY2tPcHRpb25zKCkKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2VfYnJv
a2VyLl9NdWx0aVRocmVhZGVkQnJva2VyKHBvcnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9b3B0aW9ucykKIAotY2xhc3Mg
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZmluZF90aHJlYWRfc3RhY2tf
Zm91bmQoc2VsZik6CisgICAgICAgIGJyb2tlciA9IHNlbGYubWFrZV9icm9rZXIoKQogICAgICAg
ICBpZCwgc3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKVswXQotICAgICAgICBm
b3VuZF9zdGFjayA9IG1lc3NhZ2VfYnJva2VyLl9maW5kX3RocmVhZF9zdGFjayhpZCkKKyAgICAg
ICAgZm91bmRfc3RhY2sgPSBicm9rZXIuX2ZpbmRfdGhyZWFkX3N0YWNrKGlkKQogICAgICAgICBz
ZWxmLmFzc2VydE5vdEVxdWFsKGZvdW5kX3N0YWNrLCBOb25lKQogCiAgICAgZGVmIHRlc3RfZmlu
ZF90aHJlYWRfc3RhY2tfbm90X2ZvdW5kKHNlbGYpOgotICAgICAgICBmb3VuZF9zdGFjayA9IG1l
c3NhZ2VfYnJva2VyLl9maW5kX3RocmVhZF9zdGFjaygwKQorICAgICAgICBicm9rZXIgPSBzZWxm
Lm1ha2VfYnJva2VyKCkKKyAgICAgICAgZm91bmRfc3RhY2sgPSBicm9rZXIuX2ZpbmRfdGhyZWFk
X3N0YWNrKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmRfc3RhY2ssIE5vbmUpCiAK
ICAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmKToKKyAgICAgICAgYnJva2VyID0g
c2VsZi5tYWtlX2Jyb2tlcigpCiAgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0
dXJlKCkKICAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQotICAgICAgICBsb2dnZXIgPSBtZXNz
YWdlX2Jyb2tlci5fbG9nCi0gICAgICAgIGFzdHJlYW0gPSBhcnJheV9zdHJlYW0uQXJyYXlTdHJl
YW0oKQotICAgICAgICBoYW5kbGVyID0gVGVzdEhhbmRsZXIoYXN0cmVhbSkKLSAgICAgICAgbG9n
Z2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKIAogICAgICAgICBzdGFydGluZ19xdWV1ZSA9IFF1ZXVl
LlF1ZXVlKCkKICAgICAgICAgc3RvcHBpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAg
IGNoaWxkX3RocmVhZCA9IFRlc3RUaHJlYWQoc3RhcnRpbmdfcXVldWUsIHN0b3BwaW5nX3F1ZXVl
KQorICAgICAgICBjaGlsZF90aHJlYWQgPSBUZXN0VGhyZWFkU3RhY2tzLlRocmVhZChzdGFydGlu
Z19xdWV1ZSwgc3RvcHBpbmdfcXVldWUpCiAgICAgICAgIGNoaWxkX3RocmVhZC5zdGFydCgpCisg
ICAgICAgIGJyb2tlci5fY2hpbGRyZW5bY2hpbGRfdGhyZWFkLm5hbWUoKV0gPSBjaGlsZF90aHJl
YWQKICAgICAgICAgbXNnID0gc3RhcnRpbmdfcXVldWUuZ2V0KCkKIAotICAgICAgICBtZXNzYWdl
X2Jyb2tlci5sb2dfd2VkZ2VkX3dvcmtlcihjaGlsZF90aHJlYWQuZ2V0TmFtZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZF90aHJlYWQuaWQoKSkKKyAg
ICAgICAgYnJva2VyLmxvZ193ZWRnZWRfd29ya2VyKGNoaWxkX3RocmVhZC5uYW1lKCksICd0ZXN0
X25hbWUnKQogICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQoJycpCiAgICAgICAgIGNoaWxkX3Ro
cmVhZC5qb2luKHRpbWVvdXQ9MS4wKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN0cmVh
bS5lbXB0eSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNoaWxkX3RocmVhZC5pc0FsaXZl
KCkpCiAgICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21h
Yy5weQppbmRleCBkMWMzODNjMTNlYzJmMTNhZjVmYjFmMTU0MDU3OWM0Yzg4OWZkZDYzLi43ZDcw
NGMzYTg5YWY1NGFkMGRhZjA3NDhiNGQ4ODlhNjIyYWNlNGNkIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9t
aXVtX21hYy5weQpAQCAtNjIsMTUgKzYyLDYgQEAgY2xhc3MgQ2hyb21pdW1NYWNQb3J0KGNocm9t
aXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgICAgICAgICAgICAgICAgICdNYWNCdWlsZEluc3Ry
dWN0aW9ucycpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAotICAgIGRlZiBkZWZhdWx0X2NoaWxk
X3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTogd2UgbmVlZCB0byBydW4gc2luZ2xl
LXRocmVhZGVkIGZvciBub3cuIFNlZQotICAgICAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zODU1My4gVW5mb3J0dW5hdGVseSB0aGlzCi0gICAgICAgICMgcm91
dGluZSBpcyBjYWxsZWQgcmlnaHQgYmVmb3JlIHRoZSBsb2dnZXIgaXMgY29uZmlndXJlZCwgc28g
aWYgd2UKLSAgICAgICAgIyB0cnkgdG8gX2xvZy53YXJuaW5nKCksIGl0IGdldHMgdGhyb3duIGF3
YXkuCi0gICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRGVmYXVs
dGluZyB0byBvbmUgY2hpbGQgLSBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM4NTUzXG4iKQotICAgICAgICByZXR1cm4gMQotCiAgICAgZGVmIGRyaXZlcl9uYW1l
KHNlbGYpOgogICAgICAgICAiIiJuYW1lIGZvciB0aGlzIHBvcnQncyBlcXVpdmFsZW50IG9mIER1
bXBSZW5kZXJUcmVlLiIiIgogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3VzZV9kcnQnKToK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvbWFjLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9tYWMucHkKaW5kZXggNjk2ZTMzOThlYTRiMjhhYzc2MjI1OTA3ZGMzNjJmZmMzZmI4NmY5ZS4u
NzJmOTFkODM4MjE1YWY0YmM0NGYxZGMxZjA2NTVkYWRjN2QzMzZmZiAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKQEAg
LTQ3LDE1ICs0Nyw2IEBAIGNsYXNzIE1hY1BvcnQoV2ViS2l0UG9ydCk6CiAgICAgICAgIGt3YXJn
cy5zZXRkZWZhdWx0KCdwb3J0X25hbWUnLCAnbWFjJyArIHNlbGYudmVyc2lvbigpKQogICAgICAg
ICBXZWJLaXRQb3J0Ll9faW5pdF9fKHNlbGYsICoqa3dhcmdzKQogCi0gICAgZGVmIGRlZmF1bHRf
Y2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBuZXctcnVuLXdlYmtpdC10
ZXN0cyBpcyB1bnN0YWJsZSBvbiBNYWMgcnVubmluZyBtb3JlIHRoYW4KLSAgICAgICAgIyBmb3Vy
IHRocmVhZHMgaW4gcGFyYWxsZWwuCi0gICAgICAgICMgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNjYyMgotICAgICAgICBjaGlsZF9wcm9jZXNzZXMgPSBXZWJL
aXRQb3J0LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpCi0gICAgICAgIGlmIGNoaWxkX3By
b2Nlc3NlcyA+IDQ6Ci0gICAgICAgICAgICByZXR1cm4gNAotICAgICAgICByZXR1cm4gY2hpbGRf
cHJvY2Vzc2VzCi0KICAgICBkZWYgYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CiAgICAgICAg
IHBvcnRfbmFtZXMgPSBbXQogICAgICAgICBpZiBzZWxmLl9uYW1lID09ICdtYWMtdGlnZXInOgpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggZjRlOTJhNjg2OThkNGIwNjkwMzFkNmJiMWIz
Nzg4MmRiYWYxZmFmNS4uNWY1YTI0NmEzODAxOTVmMjM0NDkwYWNiYzE4NTY0YjhkNjRmZjU3ZiAx
MDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC02NCw3ICs2NCw2IEBAIGltcG9ydCBzeXMK
IGltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNrCiAKLWZyb20gbGF5b3V0X3BhY2thZ2UgaW1w
b3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCiBmcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCBq
c29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvcgogZnJvbSBsYXlvdXRfcGFja2FnZSBpbXBvcnQg
bWVzc2FnZV9icm9rZXIKIGZyb20gbGF5b3V0X3BhY2thZ2UgaW1wb3J0IHByaW50aW5nCkBAIC0x
MzUsNyArMTM0LDcgQEAgY2xhc3MgUmVzdWx0U3VtbWFyeShvYmplY3QpOgogICAgICAgICAiIiJB
ZGQgYSBUZXN0UmVzdWx0IGludG8gdGhlIGFwcHJvcHJpYXRlIGJpbi4KIAogICAgICAgICBBcmdz
OgotICAgICAgICAgIHJlc3VsdDogVGVzdFJlc3VsdCBmcm9tIGR1bXBfcmVuZGVyX3RyZWVfdGhy
ZWFkLgorICAgICAgICAgIHJlc3VsdDogVGVzdFJlc3VsdAogICAgICAgICAgIGV4cGVjdGVkOiB3
aGV0aGVyIHRoZSByZXN1bHQgd2FzIHdoYXQgd2UgZXhwZWN0ZWQgaXQgdG8gYmUuCiAgICAgICAg
ICIiIgogCkBAIC0yMjgsNiArMjI3LDI1IEBAIGRlZiBzdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1
bHRzKHBvcnRfb2JqLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LAogICAgIHJldHVybiBy
ZXN1bHRzCiAKIAorIyBGSVhNRTogVGhpcyBuYW1lIGlzIHNvbWV3aGF0IG1pc2xlYWRpbmcgYmVj
YXVzZSB0aGUgYWN0dWFsIHdvcmtlcnMgaGF2ZQorIyB0aGVpciBvd24gaW50ZXJuYWwgc3RhdGUg
aW4gVGVzdFNoZWxsVGhyZWFkLiBIb3dldmVyLCBhIGJldHRlciBuYW1lIGZvcgorIyB0aGlzIGhh
cyB5ZXQgdG8gYmUgZm91bmQuCitjbGFzcyBfV29ya2VyU3RhdGUob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbmFtZSwgbnVtYmVyKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQor
ICAgICAgICBzZWxmLm51bWJlciA9IG51bWJlcgorICAgICAgICBzZWxmLmRvbmUgPSBGYWxzZQor
ICAgICAgICBzZWxmLm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAgc2VsZi53ZWRnZWQgPSBG
YWxzZQorICAgICAgICBzZWxmLnN0YXRzID0ge30KKyAgICAgICAgc2VsZi5zdGF0c1snbmFtZSdd
ID0gbmFtZQorICAgICAgICBzZWxmLnN0YXRzWydudW1fdGVzdHMnXSA9IDAKKyAgICAgICAgc2Vs
Zi5zdGF0c1sndG90YWxfdGltZSddID0gMAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gIl9Xb3JrZXJTdGF0ZSgiICsgc3RyKHNlbGYuX19kaWN0X18pICsgIikiCisK
KwogY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAiIiJBIGNsYXNzIGZvciBtYW5hZ2luZyBydW5uaW5n
IGEgc2VyaWVzIG9mIHRlc3RzIG9uIGEgc2VyaWVzIG9mIGxheW91dAogICAgIHRlc3QgZmlsZXMu
IiIiCkBAIC0yNDAsMTkgKzI1OCwyNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICMgaW4gRHVt
cFJlbmRlclRyZWUuCiAgICAgREVGQVVMVF9URVNUX1RJTUVPVVRfTVMgPSA2ICogMTAwMAogCi0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIsIG1lc3NhZ2VfYnJv
a2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6CiAg
ICAgICAgICIiIkluaXRpYWxpemUgdGVzdCBydW5uZXIgZGF0YSBzdHJ1Y3R1cmVzLgogCiAgICAg
ICAgIEFyZ3M6CiAgICAgICAgICAgcG9ydDogYW4gb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNw
ZWNpZmljCiAgICAgICAgICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBv
cHRpb25zCiAgICAgICAgICAgcHJpbnRlcjogYSBQcmludGVyIG9iamVjdCB0byByZWNvcmQgdXBk
YXRlcyB0by4KLSAgICAgICAgICBtZXNzYWdlX2Jyb2tlcjogb2JqZWN0IHVzZWQgdG8gY29tbXVu
aWNhdGUgd2l0aCB3b3JrZXJzLgogICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fbmFtZSA9IG1l
c3NhZ2VfYnJva2VyLk1BTkFHRVIKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAg
c2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5fcHJpbnRlciA9IHByaW50ZXIK
LSAgICAgICAgc2VsZi5fbWVzc2FnZV9icm9rZXIgPSBtZXNzYWdlX2Jyb2tlcgorICAgICAgICBz
ZWxmLl9tZXNzYWdlX2Jyb2tlciA9IE5vbmUKKyAgICAgICAgc2VsZi5VUERBVEVfSU5URVJWQUwg
PSAwLjAxCisKKyAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBhY3R1YWxseSBhIGNvbGxlY3Rpb24g
b2YgV29ya2VyU3RhdGUgb2JqZWN0cyB0aGF0CisgICAgICAgICMgcmVwcmVzZW50IHRoZSBzdGF0
ZSBvZiB0aGUgd29ya2VycyAod2hpY2ggbWF5IGJlIHNlcGFyYXRlIHRocmVhZHMKKyAgICAgICAg
IyBvciBwcm9jZXNzZXMuIFRoaXMgaXMgYSBiaXQgYXdrd2FyZCBidXQgYSBiZXR0ZXIgbmFtZSBo
YXMgeWV0IHRvCisgICAgICAgICMgcHJlc2VudCBpdHNlbGYuCisgICAgICAgIHNlbGYuX3dvcmtl
cnMgPSB7fQogCiAgICAgICAgICMgZGlzYWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRvIGluc3RhbGwg
cHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4KICAgICAgICAgIyBzZWxmLl93ZWJzb2NrZXRfc2VjdXJl
X3NlcnZlciA9IHdlYnNvY2tldF9zZXJ2ZXIuUHlXZWJTb2NrZXQoCkBAIC0yNjEsOSArMjg2LDE0
IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICMgYSBzZXQgb2YgdGVzdCBmaWxlcywgYW5k
IHRoZSBzYW1lIHRlc3RzIGFzIGEgbGlzdAogICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzID0gc2V0
KCkKICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gTm9uZQotICAgICAgICBzZWxmLl9y
ZXN1bHRfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gRmFs
c2UKIAorICAgIGRlZiBpc19kb25lKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
IGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCiAgICAgZGVmIGNv
bGxlY3RfdGVzdHMoc2VsZiwgYXJncywgbGFzdF91bmV4cGVjdGVkX3Jlc3VsdHMpOgogICAgICAg
ICAiIiJGaW5kIGFsbCB0aGUgZmlsZXMgdG8gdGVzdC4KIApAQCAtNTg1LDYyICs2MTUsOTggQEAg
Y2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgaW4gdGhlIGZvcm0ge2ZpbGVuYW1lOmZp
bGVuYW1lLCB0ZXN0X3J1bl90aW1lOnRlc3RfcnVuX3RpbWV9CiAgICAgICAgICAgICByZXN1bHRf
c3VtbWFyeTogc3VtbWFyeSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cwogICAg
ICAgICAiIiIKKyAgICAgICAgbnVtX3dvcmtlcnMgPSBzZWxmLl9udW1fd29ya2VycygpCisKKyAg
ICAgICAgc2VsZi5fY3VycmVudF9maWxlX2xpc3QgPSBmaWxlX2xpc3QKKyAgICAgICAgc2VsZi5f
Y3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisKKyAgICAgICAgc2VsZi5f
YWxsX3Jlc3VsdHMgPSBbXQorICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9CisgICAgICAg
IHNlbGYuX3dvcmtlcnMgPSB7fQogCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRl
KCdTaGFyZGluZyB0ZXN0cyAuLi4nKQotICAgICAgICBudW1fd29ya2VycyA9IHNlbGYuX251bV93
b3JrZXJzKCkKICAgICAgICAgdGVzdF9saXN0cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlz
dCwKICAgICAgICAgICAgIG51bV93b3JrZXJzID4gMSBhbmQgbm90IHNlbGYuX29wdGlvbnMuZXhw
ZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQotICAgICAgICBmaWxlbmFtZV9xdWV1ZSA9IFF1ZXVl
LlF1ZXVlKCkKLSAgICAgICAgZm9yIGl0ZW0gaW4gdGVzdF9saXN0czoKLSAgICAgICAgICAgIGZp
bGVuYW1lX3F1ZXVlLnB1dChpdGVtKQorCisgICAgICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2Vy
LmdldChzZWxmLl9wb3J0LCBzZWxmLl9vcHRpb25zKQorICAgICAgICBzZWxmLl9tZXNzYWdlX2Jy
b2tlciA9IGJyb2tlcgorICAgICAgICBmb3IgdGVzdF9saXN0IGluIHRlc3RfbGlzdHM6CisgICAg
ICAgICAgICBzZWxmLl9wb3N0KCd0ZXN0X2xpc3QnLCB0ZXN0X2xpc3QpCisKKyAgICAgICAgIyBU
ZWxsIHRoZSB3b3JrZXJzIHRvIHNodXQgZG93biBhZnRlciB0aGV5J3JlIGRvbmUgcnVubmluZyBh
bGwgdGhlCisgICAgICAgICMgdGVzdHMuCisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1fd29y
a2Vycyk6CisgICAgICAgICAgICBzZWxmLl9wb3N0KCdzdG9wJykKIAogICAgICAgICBzZWxmLl9w
cmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMgLi4uJyAlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdyYW1tYXIucGx1cmFsaXplKCd3b3JrZXInLCBudW1fd29ya2Vy
cykpCi0gICAgICAgIG1lc3NhZ2VfYnJva2VyID0gc2VsZi5fbWVzc2FnZV9icm9rZXIKLSAgICAg
ICAgc2VsZi5fY3VycmVudF9maWxlbmFtZV9xdWV1ZSA9IGZpbGVuYW1lX3F1ZXVlCi0gICAgICAg
IHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQotCi0gICAgICAg
IGlmIG5vdCBzZWxmLl9vcHRpb25zLmRyeV9ydW46Ci0gICAgICAgICAgICB0aHJlYWRzID0gbWVz
c2FnZV9icm9rZXIuc3RhcnRfd29ya2VycyhzZWxmKQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgdGhyZWFkcyA9IHt9CisgICAgICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShudW1f
d29ya2Vycyk6CisgICAgICAgICAgICB3b3JrZXJfbmFtZSA9IGJyb2tlci5zdGFydF93b3JrZXIo
d29ya2VyX251bWJlcikKKyAgICAgICAgICAgIHcgPSBfV29ya2VyU3RhdGUod29ya2VyX25hbWUs
IHdvcmtlcl9udW1iZXIpCisgICAgICAgICAgICBzZWxmLl93b3JrZXJzW3dvcmtlcl9uYW1lXSA9
IHcKIAogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiU3RhcnRpbmcgdGVzdGlu
ZyAuLi4iKQogICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCi0gICAgICAgIGlm
IG5vdCBzZWxmLl9vcHRpb25zLmRyeV9ydW46Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAgICAgbWVzc2FnZV9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCi0gICAgICAgICAgICBleGNl
cHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICAgICAgX2xvZy5pbmZvKCJJbnRlcnJ1
cHRlZCwgZXhpdGluZyIpCi0gICAgICAgICAgICAgICAgbWVzc2FnZV9icm9rZXIuY2FuY2VsX3dv
cmtlcnMoKQotICAgICAgICAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gVHJ1ZQotICAg
ICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICMgVW5leHBlY3RlZCBleGNlcHRpb247
IGRvbid0IHRyeSB0byBjbGVhbiB1cCB3b3JrZXJzLgotICAgICAgICAgICAgICAgIF9sb2cuaW5m
bygiRXhjZXB0aW9uIHJhaXNlZCwgZXhpdGluZyIpCi0gICAgICAgICAgICAgICAgcmFpc2UKLQot
ICAgICAgICB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGlt
aW5ncyA9IFwKLSAgICAgICAgICAgIHNlbGYuX2NvbGxlY3RfdGltaW5nX2luZm8odGhyZWFkcykK
LQotICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywg
dGVzdF90aW1pbmdzLAotICAgICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQot
Ci0gICAgZGVmIHVwZGF0ZShzZWxmKToKLSAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShzZWxm
Ll9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5KQotCi0gICAgZGVmIF9jb2xsZWN0X3RpbWluZ19pbmZv
KHNlbGYsIHRocmVhZHMpOgotICAgICAgICB0ZXN0X3RpbWluZ3MgPSB7fQotICAgICAgICBpbmRp
dmlkdWFsX3Rlc3RfdGltaW5ncyA9IFtdCi0gICAgICAgIHRocmVhZF90aW1pbmdzID0gW10KKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuZHJ5X3J1bjoKKyAg
ICAgICAgICAgICAgICBkb25lID0gc2VsZi5fY2hlY2tfb25fd29ya2VycygpCisgICAgICAgICAg
ICAgICAgaWYgbm90IGRvbmU6CisgICAgICAgICAgICAgICAgICAgIGJyb2tlci5ydW5fbWVzc2Fn
ZV9sb29wKHNlbGYsIG1lc3NhZ2VfYnJva2VyLk1BTkFHRVIpCisKKyAgICAgICAgICAgICAgICBm
b3IgdyBpbiBzZWxmLl93b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBu
b3Qgdy53ZWRnZWQgYW5kIGJyb2tlci53b3JrZXJfaXNfYWxpdmUody5uYW1lKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyb2tlci5qb2luX3dvcmtlcih3Lm5hbWUsIDAuNSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFzc2VydCBub3QgYnJva2VyLndvcmtlcl9pc19hbGl2ZSh3Lm5hbWUp
CisKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgX2xvZy5p
bmZvKCJJbnRlcnJ1cHRlZCwgZXhpdGluZyIpCisgICAgICAgICAgICBmb3Igd29ya2VyX25hbWUg
aW4gc2VsZi5fd29ya2Vycy5rZXlzKCk6CisgICAgICAgICAgICAgICAgYnJva2VyLmNhbmNlbF93
b3JrZXIod29ya2VyX25hbWUpCisgICAgICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IFRy
dWUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBVbmV4cGVjdGVkIGV4Y2VwdGlvbjsg
ZG9uJ3QgdHJ5IHRvIGNsZWFuIHVwIHdvcmtlcnMuCisgICAgICAgICAgICBfbG9nLmluZm8oIkV4
Y2VwdGlvbiByYWlzZWQsIGV4aXRpbmciKQorICAgICAgICAgICAgc2VsZi5fbWVzc2FnZV9icm9r
ZXIgPSBOb25lCisgICAgICAgICAgICByYWlzZQogCi0gICAgICAgIGZvciB0aHJlYWQgaW4gdGhy
ZWFkczoKLSAgICAgICAgICAgIHRocmVhZF90aW1pbmdzLmFwcGVuZCh7J25hbWUnOiB0aHJlYWQu
Z2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtX3Rlc3Rz
JzogdGhyZWFkLmdldF9udW1fdGVzdHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3RvdGFsX3RpbWUnOiB0aHJlYWQuZ2V0X3RvdGFsX3RpbWUoKX0pCi0gICAgICAgICAg
ICB0ZXN0X3RpbWluZ3MudXBkYXRlKHRocmVhZC5nZXRfdGVzdF9ncm91cF90aW1pbmdfc3RhdHMo
KSkKLSAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLmV4dGVuZCh0aHJlYWQuZ2V0
X3Rlc3RfcmVzdWx0cygpKQorICAgICAgICBzZWxmLl9tZXNzYWdlX2Jyb2tlciA9IE5vbmUKKyAg
ICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbdy5zdGF0cyBmb3IgdyBpbiBzZWxmLl93b3JrZXJzLnZh
bHVlcygpXQorICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRfdGlt
aW5ncywKKyAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9zdGF0cywgc2VsZi5fYWxsX3Jlc3Vs
dHMpCisKKyAgICBkZWYgX3Bvc3Qoc2VsZiwgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdzKToK
KyAgICAgICAgc2VsZi5fbWVzc2FnZV9icm9rZXIucHV0X21lc3NhZ2Uoc2VsZi5fbmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9icm9rZXIuQU5Z
X1dPUktFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZV9uYW1lLCAqbWVzc2FnZV9hcmdzKQorCisgICAgZGVmIF9jaGVja19vbl93b3JrZXJzKHNlbGYp
OgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIGFsbCB0aGUgd29ya2VycyBoYXZlIGVpdGhl
ciBjb21wbGV0ZWQgb3Igd2VkZ2VkLiIiIgorICAgICAgICBkb25lID0gVHJ1ZQorICAgICAgICB0
ID0gdGltZS50aW1lKCkKKyAgICAgICAgYnJva2VyID0gc2VsZi5fbWVzc2FnZV9icm9rZXIKKyAg
ICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIG5v
dCB3LmRvbmUgYW5kIG5vdCB3LndlZGdlZDoKKyAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQg
PSB3Lm5leHRfdGltZW91dAorICAgICAgICAgICAgICAgIFdFREdFX1BBRERJTkcgPSA0MC4wCisg
ICAgICAgICAgICAgICAgaWYgbmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0ICsgV0VE
R0VfUEFERElORzoKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAg
ICAgICAgICAgICAgYnJva2VyLmxvZ193ZWRnZWRfd29ya2VyKHcubmFtZSwgdy5jdXJyZW50X3Rl
c3RfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAg
ICAgICAgICAgdy53ZWRnZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICAgICAgZG9uZSA9IEZhbHNlCiAKLSAgICAgICAgcmV0dXJuICh0aHJlYWRfdGltaW5n
cywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgaWYgZG9u
ZToKKyAgICAgICAgICAgIGlmIGFueShbdy53ZWRnZWQgZm9yIHdjIGluIHNlbGYuX3dvcmtlcnNd
KToKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQorICAgICAgICAgICAgICAgIF9sb2cu
ZXJyb3IoJ1JlbWFpbmluZyB3b3JrZXJzIGFyZSB3ZWRnZWQsIGJhaWxpbmcgb3V0LicpCisgICAg
ICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnTm8gd2VkZ2VkIHRocmVhZHMnKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgYnJva2VyLmFkZF90aW1lcihzZWxmLm5hbWUoKSwgc2VsZi5fY2hlY2tfb25fd29y
a2VycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5VUERBVEVfSU5URVJWQUwp
CisgICAgICAgIHJldHVybiBkb25lCiAKICAgICBkZWYgbmVlZHNfaHR0cChzZWxmKToKICAgICAg
ICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5lciBuZWVkcyBhbiBIVFRQIHNlcnZl
ci4iIiIKQEAgLTc3NCwyMyArODQwLDUxIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIF9s
b2cuZGVidWcoInN0b3BwaW5nIGhlbHBlciIpCiAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9oZWxw
ZXIoKQogCi0gICAgZGVmIHVwZGF0ZV9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKKyAg
ICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzcmMsIHRlc3RfaW5mbywgaGFuZ190aW1l
b3V0KToKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtlcnNbc3JjXQorICAgICAgICB3LmN1cnJlbnRf
dGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKAorICAgICAgICAg
ICAgdGVzdF9pbmZvLmZpbGVuYW1lKQorICAgICAgICB3Lm5leHRfdGltZW91dCA9IHRpbWUudGlt
ZSgpICsgaGFuZ190aW1lb3V0CisKKyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjKToKKyAg
ICAgICAgdyA9IHNlbGYuX3dvcmtlcnNbc3JjXQorICAgICAgICB3LmRvbmUgPSBUcnVlCisgICAg
ICAgIHBhc3MKKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3Vs
dCwgZWxhcHNlZF90aW1lKToKICAgICAgICAgIiIiVXBkYXRlIHRoZSBzdW1tYXJ5IGFuZCBwcmlu
dCByZXN1bHRzIHdpdGggYW55IGNvbXBsZXRlZCB0ZXN0cy4iIiIKLSAgICAgICAgd2hpbGUgVHJ1
ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X3Jlc3Vs
dHMuVGVzdFJlc3VsdC5sb2FkcyhzZWxmLl9yZXN1bHRfcXVldWUuZ2V0X25vd2FpdCgpKQotICAg
ICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgotICAgICAgICAgICAgICAgIHJldHVybgotCi0g
ICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9ucy5tYXRjaGVzX2FuX2V4cGVj
dGVkX3Jlc3VsdCgKLSAgICAgICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUsIHJlc3VsdC50eXBl
LCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQotICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnku
YWRkKHJlc3VsdCwgZXhwZWN0ZWQpCi0gICAgICAgICAgICBleHBfc3RyID0gc2VsZi5fZXhwZWN0
YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAotICAgICAgICAgICAgICAgIHJlc3VsdC5m
aWxlbmFtZSkKLSAgICAgICAgICAgIGdvdF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZXhwZWN0
YXRpb25fdG9fc3RyaW5nKHJlc3VsdC50eXBlKQotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5w
cmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyKQotICAg
ICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF9wcm9ncmVzcyhyZXN1bHRfc3VtbWFyeSwgc2Vs
Zi5fcmV0cnlpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX3Rlc3RfZmlsZXNfbGlzdCkKKyAgICAgICAgdyA9IHNlbGYuX3dvcmtlcnNbc3JjXQorICAg
ICAgICB3Lm5leHRfdGltZW91dCA9IE5vbmUKKyAgICAgICAgdy5jdXJyZW50X3Rlc3QgPSBOb25l
CisKKyAgICAgICAgaWYgdy53ZWRnZWQ6CisgICAgICAgICAgICAjIEhtbS4gVGhpcyBzaG91bGRu
J3QgaGFwcGVuIGlmIHdlIGhhdmUgb3VyIHRpbWVvdXRzCisgICAgICAgICAgICAjIHR1bmVkIHBy
b3Blcmx5LgorICAgICAgICAgICAgX2xvZy5lcnJvcigiJXMgdW53ZWRnZWQiLCB3Lm5hbWUpCisK
KyAgICAgICAgc2VsZi5fdXBkYXRlX3dvcmtlcl9zdGF0cyhzcmMsIHJlc3VsdCwgZWxhcHNlZF90
aW1lKQorCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLm1hdGNoZXNfYW5f
ZXhwZWN0ZWRfcmVzdWx0KAorICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lLCByZXN1bHQudHlw
ZSwgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cykKKyAgICAgICAgZXhwX3N0ciA9IHNlbGYuX2V4
cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZygKKyAgICAgICAgICAgIHJlc3VsdC5m
aWxlbmFtZSkKKyAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlv
bl90b19zdHJpbmcocmVzdWx0LnR5cGUpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGVz
dF9yZXN1bHQocmVzdWx0LCBleHBlY3RlZCwgZXhwX3N0ciwgZ290X3N0cikKKworICAgICAgICBz
ZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVjdGVkKQorICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3Byb2dyZXNzKHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1h
cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmV0cnlpbmcs
IHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCkKKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfbGlzdChz
ZWxmLCBzcmMsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBz
ZWxmLl9ncm91cF9zdGF0c1tsaXN0X25hbWVdID0gKG51bV90ZXN0cywgZWxhcHNlZF90aW1lKQor
CisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNlcHRpb25faW5mbyk6Cisg
ICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0
aW9uX2luZm9bMl0KKworICAgIGRlZiBfdXBkYXRlX3dvcmtlcl9zdGF0cyhzZWxmLCBzcmMsIHJl
c3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fd29ya2Vyc1tzcmNdLnN0YXRzWyd0
b3RhbF90aW1lJ10gKz0gZWxhcHNlZF90aW1lCisgICAgICAgIHNlbGYuX3dvcmtlcnNbc3JjXS5z
dGF0c1snbnVtX3Rlc3RzJ10gKz0gMQorICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cy5hcHBlbmQo
cmVzdWx0KQogCiAgICAgZGVmIF9jbG9iYmVyX29sZF9yZXN1bHRzKHNlbGYpOgogICAgICAgICAj
IEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRlc3QgcmVzdWx0cyBkaXJlY3RvcmllcyBzaW5jZSB0
aGUgb3RoZXIKQEAgLTk3MCw4ICsxMDY0LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICBkZWYg
X3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3Moc2VsZiwgaW5kaXZpZHVhbF90ZXN0X3Rp
bWluZ3MpOgogICAgICAgICAiIiJQcmludHMgYWdncmVnYXRlIHN0YXRpc3RpY3MgKGUuZy4gbWVk
aWFuLCBtZWFuLCBldGMuKSBmb3IgYWxsIHRlc3RzLgogICAgICAgICBBcmdzOgotICAgICAgICAg
IGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBMaXN0IG9mIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFk
LlRlc3RTdGF0cwotICAgICAgICAgICAgICBmb3IgYWxsIHRlc3RzLgorICAgICAgICAgIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzOiBMaXN0IG9mIFRlc3RSZXN1bHRzIGZvciBhbGwgdGVzdHMuCiAg
ICAgICAgICIiIgogICAgICAgICB0ZXN0X3R5cGVzID0gW10gICMgVW5pdCB0ZXN0cyBkb24ndCBh
Y3R1YWxseSBwcm9kdWNlIGFueSB0aW1pbmdzLgogICAgICAgICBpZiBpbmRpdmlkdWFsX3Rlc3Rf
dGltaW5nczoKQEAgLTEwMDYsOCArMTA5OSw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJQ
cmludHMgdGhlIHJ1biB0aW1lcyBmb3Igc2xvdywgdGltZW91dCBhbmQgY3Jhc2ggdGVzdHMuCiAg
ICAgICAgIEFyZ3M6Ci0gICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6IExpc3Qgb2Yg
ZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFN0YXRzCi0gICAgICAgICAgICAgIGZvciBhbGwg
dGVzdHMuCisgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6IExpc3Qgb2YgVGVzdFN0
YXRzIGZvciBhbGwgdGVzdHMuCiAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2Jq
ZWN0IGZvciB0ZXN0IHJ1bgogICAgICAgICAiIiIKICAgICAgICAgIyBSZXZlcnNlLXNvcnQgYnkg
dGhlIHRpbWUgc3BlbnQgaW4gRHVtcFJlbmRlclRyZWUuCkBAIC0xMjk1LDEzICsxMzg3LDExIEBA
IGRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwK
ICAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkKICAgICAgICAgcmV0dXJuIDAKIAotICAgIGJyb2tl
ciA9IG1lc3NhZ2VfYnJva2VyLmdldChwb3J0LCBvcHRpb25zKQotCiAgICAgIyBXZSB3cmFwIGFu
eSBwYXJ0cyBvZiB0aGUgcnVuIHRoYXQgYXJlIHNsb3cgb3IgbGlrZWx5IHRvIHJhaXNlIGV4Y2Vw
dGlvbnMKICAgICAjIGluIGEgdHJ5L2ZpbmFsbHkgdG8gZW5zdXJlIHRoYXQgd2UgY2xlYW4gdXAg
dGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4KICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzID0g
LTEKICAgICB0cnk6Ci0gICAgICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihwb3J0LCBvcHRp
b25zLCBwcmludGVyLCBicm9rZXIpCisgICAgICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihw
b3J0LCBvcHRpb25zLCBwcmludGVyKQogICAgICAgICB0ZXN0X3J1bm5lci5fcHJpbnRfY29uZmln
KCkKIAogICAgICAgICBwcmludGVyLnByaW50X3VwZGF0ZSgiQ29sbGVjdGluZyB0ZXN0cyAuLi4i
KQpAQCAtMTMzMCw3ICsxNDIwLDYgQEAgZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1
bGFyX291dHB1dD1zeXMuc3RkZXJyLAogICAgICAgICAgICAgX2xvZy5kZWJ1ZygiVGVzdGluZyBj
b21wbGV0ZWQsIEV4aXQgc3RhdHVzOiAlZCIgJQogICAgICAgICAgICAgICAgICAgICAgICBudW1f
dW5leHBlY3RlZF9yZXN1bHRzKQogICAgIGZpbmFsbHk6Ci0gICAgICAgIGJyb2tlci5jbGVhbnVw
KCkKICAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkKIAogICAgIHJldHVybiBudW1fdW5leHBlY3Rl
ZF9yZXN1bHRzCkBAIC0xNTcwLDggKzE2NTksOCBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUp
OgogICAgICAgICAgICAgaGVscD0iTnVtYmVyIG9mIER1bXBSZW5kZXJUcmVlcyB0byBydW4gaW4g
cGFyYWxsZWwuIiksCiAgICAgICAgICMgRklYTUU6IERpc3BsYXkgZGVmYXVsdCBudW1iZXIgb2Yg
Y2hpbGQgcHJvY2Vzc2VzIHRoYXQgd2lsbCBydW4uCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCItLXdvcmtlci1tb2RlbCIsIGFjdGlvbj0ic3RvcmUiLAotICAgICAgICAgICAgZGVmYXVs
dD0idGhyZWFkcyIsIGhlbHA9KCJjb250cm9scyB3b3JrZXIgbW9kZWwuIFZhbGlkIHZhbHVlcyBh
cmUgIgotICAgICAgICAgICAgIidpbmxpbmUnIGFuZCAndGhyZWFkcycgKGRlZmF1bHQpLiIpKSwK
KyAgICAgICAgICAgIGRlZmF1bHQ9InByb2Nlc3NlcyIsIGhlbHA9KCJjb250cm9scyB3b3JrZXIg
bW9kZWwuIFZhbGlkIHZhbHVlcyAiCisgICAgICAgICAgICAiYXJlICdpbmxpbmUnLCAndGhyZWFk
cycsIGFuZCAncHJvY2Vzc2VzJyAoZGVmYXVsdDogJWRlZmF1bHQpLiIpKSwKICAgICAgICAgb3B0
cGFyc2UubWFrZV9vcHRpb24oIi0tZXhwZXJpbWVudGFsLWZ1bGx5LXBhcmFsbGVsIiwKICAgICAg
ICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICBo
ZWxwPSJydW4gYWxsIHRlc3RzIGluIHBhcmFsbGVsIiksCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c191bml0dGVzdC5weQppbmRleCA2YmI3NDFhNTdjOTFjMGIwZTI2NGNmZGU3ZDY0MTBj
YmY1ODM5NjZhLi5hZmQ3MDEyYTBlYTE0OWM5ZjVmZDVmMDZjMjliYTgxOTMzNTg5M2QxIDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Vi
a2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTE4Nyw3ICsxODcs
OCBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfYmF0
Y2hfc2l6ZShzZWxmKToKICAgICAgICAgYmF0Y2hfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihb
Jy0tYmF0Y2gtc2l6ZScsICcyJ10pCiAgICAgICAgIGZvciBiYXRjaCBpbiBiYXRjaF90ZXN0c19y
dW46Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGJhdGNoKSA8PSAyLCAnJXMgaGFk
IHRvbyBtYW55IHRlc3RzJyAlICcsICcuam9pbihiYXRjaCkpCisgICAgICAgICAgICBzZWxmLmFz
c2VydFRydWUobGVuKGJhdGNoKSA8PSAyLCAnJXMgaGFkIHRvbyBtYW55IHRlc3RzJyAlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJywnLmpvaW4oYmF0Y2gpKQogCiAgICAgZGVmIHRlc3Rf
Y2hpbGRfcHJvY2Vzc18xKHNlbGYpOgogICAgICAgICAocmVzLCBidWlsZGJvdF9vdXRwdXQsIHJl
Z3VsYXJfb3V0cHV0LCB1c2VyKSA9IGxvZ2dpbmdfcnVuKApAQCAtMjcwLDM4ICsyNzEsNTkgQEAg
Y2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3J1bl9jaHVu
ayhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgd2UgYWN0dWFsbHkgc2VsZWN0IHRoZSByaWdo
dCBjaHVuawogICAgICAgICBhbGxfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihmbGF0dGVuX2Jh
dGNoZXM9VHJ1ZSkKLSAgICAgICAgY2h1bmtfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0t
cnVuLWNodW5rJywgJzE6NCddLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgY2h1bmtf
dGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tcnVuLWNodW5rJywgJzE6NCddLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhbGxfdGVzdHNfcnVuWzQ6OF0sIGNodW5rX3Rlc3Rz
X3J1bikKIAotICAgICAgICAjIFRlc3QgdGhhdCB3ZSB3cmFwIGFyb3VuZCBpZiB0aGUgbnVtYmVy
IG9mIHRlc3RzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5IHRoZSBjaHVuayBzaXplCi0gICAg
ICAgIHRlc3RzX3RvX3J1biA9IFsncGFzc2VzL2Vycm9yLmh0bWwnLCAncGFzc2VzL2ltYWdlLmh0
bWwnLCAncGFzc2VzL3BsYXRmb3JtX2ltYWdlLmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCddCi0g
ICAgICAgIGNodW5rX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXJ1bi1jaHVuaycsICcx
OjMnXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVz
PVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL3RleHQuaHRtbCcsICdw
YXNzZXMvZXJyb3IuaHRtbCcsICdwYXNzZXMvaW1hZ2UuaHRtbCddLCBjaHVua190ZXN0c19ydW4p
CisgICAgICAgICMgVGVzdCB0aGF0IHdlIHdyYXAgYXJvdW5kIGlmIHRoZSBudW1iZXIgb2YgdGVz
dHMgaXMgbm90IGV2ZW5seQorICAgICAgICAjIGRpdmlzaWJsZSBieSB0aGUgY2h1bmsgc2l6ZS4K
KyAgICAgICAgdGVzdHNfdG9fcnVuID0gWydwYXNzZXMvZXJyb3IuaHRtbCcsICdwYXNzZXMvaW1h
Z2UuaHRtbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAncGFzc2VzL3BsYXRmb3JtX2ltYWdl
Lmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCddCisgICAgICAgIGNodW5rX3Rlc3RzX3J1biA9IGdl
dF90ZXN0c19ydW4oWyctLXJ1bi1jaHVuaycsICcxOjMnXSArIHRlc3RzX3RvX3J1biwKKyAgICAg
ICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy90ZXh0Lmh0bWwnLCAncGFzc2VzL2Vycm9yLmh0
bWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3Nlcy9pbWFnZS5odG1sJ10sIGNo
dW5rX3Rlc3RzX3J1bikKIAogICAgIGRlZiB0ZXN0X3J1bl9mb3JjZShzZWxmKToKICAgICAgICAg
IyBUaGlzIHJhaXNlcyBhbiBleGNlcHRpb24gYmVjYXVzZSB3ZSBydW4KLSAgICAgICAgIyBmYWls
dXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCwgd2hpY2ggaXMgbm9ybWFsbHkgU0tJUHBlZC4K
LSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sIFsnLS1m
b3JjZSddKQorICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sIGFuZAor
ICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJkLCB3aGljaCBhcmUgbm9ybWFsbHkg
U0tJUHBlZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9nZ2luZ19ydW4oWyctLWZvcmNl
J10pCisgICAgICAgICAgICB0ZXN0X3Bhc3NlZCA9IEZhbHNlCisgICAgICAgIGV4Y2VwdCBWYWx1
ZUVycm9yOgorICAgICAgICAgICAgdGVzdF9wYXNzZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBL
ZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHRlc3RfcGFzc2VkID0gVHJ1ZQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUodGVzdF9wYXNzZWQpCiAKICAgICBkZWYgdGVzdF9ydW5fcGFydChz
ZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgd2UgYWN0dWFsbHkgc2VsZWN0IHRoZSByaWdodCBw
YXJ0Ci0gICAgICAgIHRlc3RzX3RvX3J1biA9IFsncGFzc2VzL2Vycm9yLmh0bWwnLCAncGFzc2Vz
L2ltYWdlLmh0bWwnLCAncGFzc2VzL3BsYXRmb3JtX2ltYWdlLmh0bWwnLCAncGFzc2VzL3RleHQu
aHRtbCddCi0gICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXJ1bi1wYXJ0Jywg
JzE6MiddICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNo
ZXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNzZXMvZXJyb3IuaHRtbCcs
ICdwYXNzZXMvaW1hZ2UuaHRtbCddLCB0ZXN0c19ydW4pCi0KLSAgICAgICAgIyBUZXN0IHRoYXQg
d2Ugd3JhcCBhcm91bmQgaWYgdGhlIG51bWJlciBvZiB0ZXN0cyBpcyBub3QgZXZlbmx5IGRpdmlz
aWJsZSBieSB0aGUgY2h1bmsgc2l6ZQotICAgICAgICAjIChoZXJlIHdlIGVuZCB1cCB3aXRoIDMg
cGFydHMsIGVhY2ggd2l0aCAyIHRlc3RzLCBhbmQgd2Ugb25seSBoYXZlIDQgdGVzdHMgdG90YWws
IHNvIHRoZQorICAgICAgICB0ZXN0c190b19ydW4gPSBbJ3Bhc3Nlcy9lcnJvci5odG1sJywgJ3Bh
c3Nlcy9pbWFnZS5odG1sJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvcGxhdGZv
cm1faW1hZ2UuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJ10KKyAgICAgICAgdGVzdHNfcnVuID0g
Z2V0X3Rlc3RzX3J1bihbJy0tcnVuLXBhcnQnLCAnMToyJ10gKyB0ZXN0c190b19ydW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRl
bl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL2Vycm9y
Lmh0bWwnLCAncGFzc2VzL2ltYWdlLmh0bWwnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
dGVzdHNfcnVuKQorCisgICAgICAgICMgVGVzdCB0aGF0IHdlIHdyYXAgYXJvdW5kIGlmIHRoZSBu
dW1iZXIgb2YgdGVzdHMgaXMgbm90IGV2ZW5seQorICAgICAgICAjIGRpdmlzaWJsZSBieSB0aGUg
Y2h1bmsgc2l6ZSAoaGVyZSB3ZSBlbmQgdXAgd2l0aCAzIHBhcnRzLCBlYWNoCisgICAgICAgICMg
d2l0aCAyIHRlc3RzLCBhbmQgd2Ugb25seSBoYXZlIDQgdGVzdHMgdG90YWwsIHNvIHRoZQogICAg
ICAgICAjIGxhc3QgcGFydCByZXBlYXRzIHRoZSBmaXJzdCB0d28gdGVzdHMpLgotICAgICAgICBj
aHVua190ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1ydW4tcGFydCcsICczOjMnXSArIHRl
c3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFsncGFzc2VzL2Vycm9yLmh0bWwnLCAncGFzc2VzL2lt
YWdlLmh0bWwnXSwgY2h1bmtfdGVzdHNfcnVuKQorICAgICAgICBjaHVua190ZXN0c19ydW4gPSBn
ZXRfdGVzdHNfcnVuKFsnLS1ydW4tcGFydCcsICczOjMnXSArIHRlc3RzX3RvX3J1biwKKyAgICAg
ICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nlcy9lcnJvci5odG1sJywgJ3Bhc3Nlcy9pbWFnZS5o
dG1sJ10sCisgICAgICAgICAgICBjaHVua190ZXN0c19ydW4pCiAKICAgICBkZWYgdGVzdF9ydW5f
c2luZ2x5KHNlbGYpOgogICAgICAgICBiYXRjaF90ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsn
LS1ydW4tc2luZ2x5J10pCiAgICAgICAgIGZvciBiYXRjaCBpbiBiYXRjaF90ZXN0c19ydW46Ci0g
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYmF0Y2gpLCAxLCAnJXMgaGFkIHRvbyBt
YW55IHRlc3RzJyAlICcsICcuam9pbihiYXRjaCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhsZW4oYmF0Y2gpLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzIGhh
ZCB0b28gbWFueSB0ZXN0cycgJSAnLCAnLmpvaW4oYmF0Y2gpKQogCiAgICAgZGVmIHRlc3Rfc2lu
Z2xlX2ZpbGUoc2VsZik6Ci0gICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWydwYXNz
ZXMvdGV4dC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVl
KQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsncGFzc2VzL3RleHQuaHRtbCdd
LCB0ZXN0c19pbmNsdWRlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbJ3Bhc3Nl
cy90ZXh0Lmh0bWwnXSwgdGVzdHNfcnVuKQogCiAgICAgZGVmIHRlc3RfdGVzdF9saXN0KHNlbGYp
OgpAQCAtMzA5LDcgKzMzMSw4IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgdG1wZmlsZSA9IGZpbGUoZmlsZW5hbWUsIG1vZGU9J3crJykKICAgICAgICAgdG1w
ZmlsZS53cml0ZSgncGFzc2VzL3RleHQuaHRtbCcpCiAgICAgICAgIHRtcGZpbGUuY2xvc2UoKQot
ICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS10ZXN0LWxpc3Q9JXMnICUgZmls
ZW5hbWVdLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAg
ICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tdGVzdC1saXN0PSVzJyAlIGZpbGVuYW1l
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVl
LCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWydwYXNz
ZXMvdGV4dC5odG1sJ10sIHRlc3RzX3J1bikKICAgICAgICAgb3MucmVtb3ZlKGZpbGVuYW1lKQog
ICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLXRlc3QtbGlzdD0l
cycgJSBmaWxlbmFtZV0sCkBAIC0zNzMsOCArMzk2LDggQEAgY2xhc3MgTWFpblRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICB0ZXN0X3BvcnQgPSBnZXRfcG9ydF9mb3JfcnVuKGJhc2Vf
YXJncyArIFsnLS10b2xlcmFuY2UnLCAnMCddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAs
IHRlc3RfcG9ydC50b2xlcmFuY2VfdXNlZF9mb3JfZGlmZl9pbWFnZSkKIAotICAgICAgICAjIE90
aGVyd2lzZSB0aGUgcG9ydCdzIGRlZmF1bHQgdG9sZXJhbmNlIGJlaGF2aW9yIChpbmNsdWRpbmcg
aWdub3JpbmcgaXQpCi0gICAgICAgICMgc2hvdWxkIGJlIHVzZWQuCisgICAgICAgICMgT3RoZXJ3
aXNlIHRoZSBwb3J0J3MgZGVmYXVsdCB0b2xlcmFuY2UgYmVoYXZpb3IgKGluY2x1ZGluZyBpZ25v
cmluZworICAgICAgICAjIGl0KSBzaG91bGQgYmUgdXNlZC4KICAgICAgICAgdGVzdF9wb3J0ID0g
Z2V0X3BvcnRfZm9yX3J1bihiYXNlX2FyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9u
ZSwgdGVzdF9wb3J0LnRvbGVyYW5jZV91c2VkX2Zvcl9kaWZmX2ltYWdlKQogCkBAIC0zODUsOCAr
NDA4LDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxm
LmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICd0aHJlYWRzJ10pKQog
CiAgICAgZGVmIHRlc3Rfd29ya2VyX21vZGVsX19wcm9jZXNzZXMoc2VsZik6Ci0gICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBbJy0td29ya2VyLW1vZGVsJywgJ3Byb2Nlc3NlcyddKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXdvcmtlci1tb2RlbCcsICdwcm9jZXNzZXMnXSkp
CiAKICAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxfX3Vua25vd24oc2VsZik6CiAgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmdfcnVuLApAQCAtNDE0LDggKzQzNiw4
IEBAIGNsYXNzIFJlYmFzZWxpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAg
IGJhc2VsaW5lID0gZmlsZSArICItZXhwZWN0ZWQiICsgZXh0CiAgICAgICAgICAgICBzZWxmLmFz
c2VydFRydWUoYW55KGYuZmluZChiYXNlbGluZSkgIT0gLTEgZm9yIGYgaW4gZmlsZV9saXN0KSkK
IAotICAgICMgRklYTUU6IEFkZCB0ZXN0cyB0byBlbnN1cmUgdGhhdCB3ZSdyZSAqbm90KiB3cml0
aW5nIGJhc2VsaW5lcyB3aGVuIHdlJ3JlIG5vdAotICAgICMgc3VwcG9zZWQgdG8gYmUuCisgICAg
IyBGSVhNRTogQWRkIHRlc3RzIHRvIGVuc3VyZSB0aGF0IHdlJ3JlICpub3QqIHdyaXRpbmcgYmFz
ZWxpbmVzIHdoZW4KKyAgICAjIHdlJ3JlIG5vdCBzdXBwb3NlZCB0byBiZS4KIAogICAgIGRlZiBk
aXNhYmxlZF90ZXN0X3Jlc2V0X3Jlc3VsdHMoc2VsZik6CiAgICAgICAgICMgRklYTUU6IFRoaXMg
dGVzdCBpcyBkaXNhYmxlZCB1bnRpbCB3ZSBjYW4gcmV3cml0ZSBpdCB0byB1c2UgYQpAQCAtNDc0
LDcgKzQ5Niw3IEBAIGNsYXNzIFRlc3RSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgbW9ja19wb3J0LmZpbGVuYW1lX3RvX3VyaSA9IGxhbWJkYSBuYW1lOiBuYW1lCiAKICAg
ICAgICAgcnVubmVyID0gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKHBvcnQ9bW9ja19wb3J0
LCBvcHRpb25zPU1vY2soKSwKLSAgICAgICAgICAgIHByaW50ZXI9TW9jaygpLCBtZXNzYWdlX2Jy
b2tlcj1Nb2NrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmludGVyPU1vY2soKSkKICAgICAgICAgZXhwZWN0ZWRfaHRtbCA9IHUiIiI8aHRtbD4KICAg
PGhlYWQ+CiAgICAgPHRpdGxlPkxheW91dCBUZXN0IFJlc3VsdHMgKHRpbWUpPC90aXRsZT4KQEAg
LTQ4NSwxNCArNTA3LDE1IEBAIGNsYXNzIFRlc3RSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKIDwvcD4KIDwvYm9keT48L2h0bWw+CiAiIiIKLSAgICAgICAgaHRtbCA9IHJ1bm5lci5fcmVz
dWx0c19odG1sKFsidGVzdF9wYXRoIl0sIHt9LCAiVGl0bGUiLCBvdmVycmlkZV90aW1lPSJ0aW1l
IikKKyAgICAgICAgaHRtbCA9IHJ1bm5lci5fcmVzdWx0c19odG1sKFsidGVzdF9wYXRoIl0sIHt9
LCAiVGl0bGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVf
dGltZT0idGltZSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHRtbCwgZXhwZWN0ZWRfaHRt
bCkKIAogICAgIGRlZiB0ZXN0X3NoYXJkX3Rlc3RzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhh
dCBfc2hhcmRfdGVzdHMgaW4gcnVuX3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyIHJlYWxseQogICAg
ICAgICAjIHB1dCB0aGUgaHR0cCB0ZXN0cyBmaXJzdCBpbiB0aGUgcXVldWUuCiAgICAgICAgIHJ1
bm5lciA9IFRlc3RSdW5uZXJXcmFwcGVyKHBvcnQ9TW9jaygpLCBvcHRpb25zPU1vY2soKSwKLSAg
ICAgICAgICAgIHByaW50ZXI9TW9jaygpLCBtZXNzYWdlX2Jyb2tlcj1Nb2NrKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZXI9TW9jaygpKQogCiAgICAgICAgIHRl
c3RfbGlzdCA9IFsKICAgICAgICAgICAiTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VuaWNv
ZGUuaHRtIiwKQEAgLTUxOCw5ICs1NDEsMTEgQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICBtdWx0aV90aHJlYWRfcmVzdWx0cyA9IHJ1bm5lci5fc2hh
cmRfdGVzdHModGVzdF9saXN0LCBUcnVlKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRl
c3RzX3RvX2h0dHBfbG9jayIsIHNpbmdsZV90aHJlYWRfcmVzdWx0c1swXVswXSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF90ZXN0c190b19odHRwX2xvY2ssIHNldChzaW5nbGVf
dGhyZWFkX3Jlc3VsdHNbMF1bMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVk
X3Rlc3RzX3RvX2h0dHBfbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoc2luZ2xl
X3RocmVhZF9yZXN1bHRzWzBdWzFdKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGVzdHNf
dG9faHR0cF9sb2NrIiwgbXVsdGlfdGhyZWFkX3Jlc3VsdHNbMF1bMF0pCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGVzdHNfdG9faHR0cF9sb2NrLCBzZXQobXVsdGlfdGhyZWFk
X3Jlc3VsdHNbMF1bMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Rlc3Rz
X3RvX2h0dHBfbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQobXVsdGlfdGhyZWFk
X3Jlc3VsdHNbMF1bMV0pKQogCiAKIGNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2Up
Ogo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75867</attachid>
            <date>2010-12-07 20:45:26 -0800</date>
            <delta_ts>2010-12-07 20:45:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48820-20101207204525.patch</filename>
            <type>text/plain</type>
            <size>103694</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA5Y2FiYzA4YjIyZjc3NGI0NzIxMmNmNzAyYmE5ZGMwNTBiNTA4MGQzLi40YzVhMDdh
Yzg0NGIyYjVmYjM3NWM3OWVkNmYyMGE1ODVkM2M5NDM4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTItMDcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbnJ3dCBtdWx0aXByb2Nl
c3NpbmcKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDg4MjAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL21lc3NhZ2VfYnJva2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9tYWMucHk6CisKKwogMjAxMC0xMi0w
NyAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE9qYW4gVmFmYWkuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1
bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CmluZGV4IGZkYjhkYTZjYzgwYjczZWU3ZGZiN2Q2MWQ5
ZGJiY2JiYWJiY2I0NzguLjExMzUwOTk1YmRlODg5ZjlhNjkzYjdmMzEzOTA1Y2NiMjVjNTEzYWUg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xh
eW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkLnB5CkBAIC00MiwxOCArNDIsMTcgQEAgaW1wb3J0IGNvZGVjcwogaW1wb3J0
IGNvcHkKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCBRdWV1ZQogaW1wb3J0IHNp
Z25hbAogaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0
IHRpbWUKLQoraW1wb3J0IHRyYWNlYmFjawogCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50
ZXN0X3R5cGVzIGltcG9ydCBpbWFnZV9kaWZmCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50
ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFzZQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMudGVzdF90eXBlcyBpbXBvcnQgdGV4dF9kaWZmCiAKK2ltcG9ydCBtZXNzYWdlX2Jyb2tlcgog
aW1wb3J0IHRlc3RfZmFpbHVyZXMKIGltcG9ydCB0ZXN0X291dHB1dAogaW1wb3J0IHRlc3RfcmVz
dWx0cwpAQCAtNjIsMjM3ICs2MSw0MSBAQCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtp
dHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS4iCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgImR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkIikKIAogCi1kZWYgX2V4cGVjdGVkX3Rlc3Rfb3V0
cHV0KHBvcnQsIGZpbGVuYW1lKToKLSAgICAiIiJSZXR1cm5zIGFuIGV4cGVjdGVkIFRlc3RPdXRw
dXQgb2JqZWN0LiIiIgotICAgIHJldHVybiB0ZXN0X291dHB1dC5UZXN0T3V0cHV0KHBvcnQuZXhw
ZWN0ZWRfdGV4dChmaWxlbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9ydC5leHBlY3RlZF9pbWFnZShmaWxlbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9ydC5leHBlY3RlZF9jaGVja3N1bShmaWxlbmFtZSkpCi0KLWRlZiBfcHJvY2Vz
c19vdXRwdXQocG9ydCwgb3B0aW9ucywgdGVzdF9pbnB1dCwgdGVzdF90eXBlcywgdGVzdF9hcmdz
LAotICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dCwgd29ya2VyX25hbWUpOgotICAgICIi
IlJlY2VpdmVzIHRoZSBvdXRwdXQgZnJvbSBhIER1bXBSZW5kZXJUcmVlIHByb2Nlc3MsIHN1Ympl
Y3RzIGl0IHRvIGEKLSAgICBudW1iZXIgb2YgdGVzdHMsIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBm
YWlsdXJlIHR5cGVzIHRoZSB0ZXN0IHByb2R1Y2VkLgotCi0gICAgQXJnczoKLSAgICAgIHBvcnQ6
IHBvcnQtc3BlY2lmaWMgaG9va3MKLSAgICAgIG9wdGlvbnM6IGNvbW1hbmQgbGluZSBvcHRpb25z
IGFyZ3VtZW50IGZyb20gb3B0cGFyc2UKLSAgICAgIHByb2M6IGFuIGFjdGl2ZSBEdW1wUmVuZGVy
VHJlZSBwcm9jZXNzCi0gICAgICB0ZXN0X2lucHV0OiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVz
dCBmaWxlbmFtZSBhbmQgdGltZW91dAotICAgICAgdGVzdF90eXBlczogbGlzdCBvZiB0ZXN0IHR5
cGVzIHRvIHN1YmplY3QgdGhlIG91dHB1dCB0bwotICAgICAgdGVzdF9hcmdzOiBhcmd1bWVudHMg
dG8gYmUgcGFzc2VkIHRvIGVhY2ggdGVzdAotICAgICAgdGVzdF9vdXRwdXQ6IGEgVGVzdE91dHB1
dCBvYmplY3QgY29udGFpbmluZyB0aGUgb3V0cHV0IG9mIHRoZSB0ZXN0Ci0gICAgICB3b3JrZXJf
bmFtZTogd29ya2VyIG5hbWUgZm9yIGxvZ2dpbmcKLQotICAgIFJldHVybnM6IGEgVGVzdFJlc3Vs
dCBvYmplY3QKLSAgICAiIiIKLSAgICBmYWlsdXJlcyA9IFtdCi0KLSAgICBpZiB0ZXN0X291dHB1
dC5jcmFzaDoKLSAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUNy
YXNoKCkpCi0gICAgaWYgdGVzdF9vdXRwdXQudGltZW91dDoKLSAgICAgICAgZmFpbHVyZXMuYXBw
ZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZVRpbWVvdXQoKSkKLQotICAgIHRlc3RfbmFtZSA9IHBv
cnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKQotICAgIGlmIHRl
c3Rfb3V0cHV0LmNyYXNoOgotICAgICAgICBfbG9nLmRlYnVnKCIlcyBTdGFja3RyYWNlIGZvciAl
czpcbiVzIiAlICh3b3JrZXJfbmFtZSwgdGVzdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1dC5lcnJvcikpCi0gICAgICAg
IGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksIHRlc3Rf
bmFtZSkKLSAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSAr
ICItc3RhY2sudHh0IgotICAgICAgICBwb3J0Lm1heWJlX21ha2VfZGlyZWN0b3J5KG9zLnBhdGgu
c3BsaXQoZmlsZW5hbWUpWzBdKQotICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGVuYW1lLCAi
d2IiLCAidXRmLTgiKSBhcyBmaWxlOgotICAgICAgICAgICAgZmlsZS53cml0ZSh0ZXN0X291dHB1
dC5lcnJvcikKLSAgICBlbGlmIHRlc3Rfb3V0cHV0LmVycm9yOgotICAgICAgICBfbG9nLmRlYnVn
KCIlcyAlcyBvdXRwdXQgc3RkZXJyIGxpbmVzOlxuJXMiICUgKHdvcmtlcl9uYW1lLCB0ZXN0X25h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdF9vdXRwdXQuZXJyb3IpKQotCi0gICAgZXhwZWN0ZWRfdGVzdF9vdXRwdXQgPSBfZXhw
ZWN0ZWRfdGVzdF9vdXRwdXQocG9ydCwgdGVzdF9pbnB1dC5maWxlbmFtZSkKLQotICAgICMgQ2hl
Y2sgdGhlIG91dHB1dCBhbmQgc2F2ZSB0aGUgcmVzdWx0cy4KLSAgICBzdGFydF90aW1lID0gdGlt
ZS50aW1lKCkKLSAgICB0aW1lX2Zvcl9kaWZmcyA9IHt9Ci0gICAgZm9yIHRlc3RfdHlwZSBpbiB0
ZXN0X3R5cGVzOgotICAgICAgICBzdGFydF9kaWZmX3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAg
ICBuZXdfZmFpbHVyZXMgPSB0ZXN0X3R5cGUuY29tcGFyZV9vdXRwdXQocG9ydCwgdGVzdF9pbnB1
dC5maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3RfYXJncywgdGVzdF9vdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXN0X291dHB1dCkKLSAgICAgICAgIyBEb24n
dCBhZGQgYW55IG1vcmUgZmFpbHVyZXMgaWYgd2UgYWxyZWFkeSBoYXZlIGEgY3Jhc2gsIHNvIHdl
IGRvbid0Ci0gICAgICAgICMgZG91YmxlLXJlcG9ydCB0aG9zZSB0ZXN0cy4gV2UgZG8gZG91Ymxl
LXJlcG9ydCBmb3IgdGltZW91dHMgc2luY2UKLSAgICAgICAgIyB3ZSBzdGlsbCB3YW50IHRvIHNl
ZSB0aGUgdGV4dCBhbmQgaW1hZ2Ugb3V0cHV0LgotICAgICAgICBpZiBub3QgdGVzdF9vdXRwdXQu
Y3Jhc2g6Ci0gICAgICAgICAgICBmYWlsdXJlcy5leHRlbmQobmV3X2ZhaWx1cmVzKQotICAgICAg
ICB0aW1lX2Zvcl9kaWZmc1t0ZXN0X3R5cGUuX19jbGFzc19fLl9fbmFtZV9fXSA9ICgKLSAgICAg
ICAgICAgIHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90aW1lKQotCi0gICAgdG90YWxfdGltZV9m
b3JfYWxsX2RpZmZzID0gdGltZS50aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUKLSAgICByZXR1cm4g
dGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbnB1dC5maWxlbmFtZSwgZmFpbHVyZXMsIHRl
c3Rfb3V0cHV0LnRlc3RfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG90YWxfdGltZV9mb3JfYWxsX2RpZmZzLCB0aW1lX2Zvcl9kaWZmcykKLQotCi1kZWYgX3BhZF90
aW1lb3V0KHRpbWVvdXQpOgotICAgICIiIlJldHVybnMgYSBzYWZlIG11bHRpcGxlIG9mIHRoZSBw
ZXItdGVzdCB0aW1lb3V0IHZhbHVlIHRvIHVzZQotICAgIHRvIGRldGVjdCBodW5nIHRlc3QgdGhy
ZWFkcy4KLQotICAgICIiIgotICAgICMgV2hlbiB3ZSdyZSBydW5uaW5nIG9uZSB0ZXN0IHBlciBE
dW1wUmVuZGVyVHJlZSBwcm9jZXNzLCB3ZSBjYW4KLSAgICAjIGVuZm9yY2UgYSBoYXJkIHRpbWVv
dXQuICBUaGUgRHVtcFJlbmRlclRyZWUgd2F0Y2hkb2cgdXNlcyAyLjV4Ci0gICAgIyB0aGUgdGlt
ZW91dDsgd2Ugd2FudCB0byBiZSBsYXJnZXIgdGhhbiB0aGF0LgotICAgIHJldHVybiB0aW1lb3V0
ICogMwotCi0KLWRlZiBfbWlsbGlzZWNvbmRzX3RvX3NlY29uZHMobXNlY3MpOgotICAgIHJldHVy
biBmbG9hdChtc2VjcykgLyAxMDAwLjAKLQotCi1kZWYgX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9j
aGVja3N1bShvcHRpb25zKToKLSAgICByZXR1cm4gb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgbm90
IChvcHRpb25zLm5ld19iYXNlbGluZSBvciBvcHRpb25zLnJlc2V0X3Jlc3VsdHMpCi0KLQotZGVm
IF9ydW5fc2luZ2xlX3Rlc3QocG9ydCwgb3B0aW9ucywgdGVzdF9pbnB1dCwgdGVzdF90eXBlcywg
dGVzdF9hcmdzLCBkcml2ZXIsIHdvcmtlcl9uYW1lKToKLSAgICAjIEZJWE1FOiBQdWxsIHRoaXMg
aW50byBUZXN0U2hlbGxUaHJlYWQuX3J1bigpLgotCi0gICAgIyBUaGUgaW1hZ2UgaGFzaCBpcyB1
c2VkIHRvIGF2b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAgaWYgdGhlCi0gICAgIyBjaGVja3N1bXMg
bWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFuayB2YWx1ZSBpZiB3ZQotICAgICMg
YXJlIGdlbmVyYXRpbmcgYSBuZXcgYmFzZWxpbmUuICAoT3RoZXJ3aXNlLCBhbiBpbWFnZSBmcm9t
IGEKLSAgICAjIHByZXZpb3VzIHJ1biB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSBiYXNlbGluZS4i
IiIKLSAgICBpZiBfc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3VtKG9wdGlvbnMpOgotICAg
ICAgICB0ZXN0X2lucHV0LmltYWdlX2hhc2ggPSBwb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHRlc3Rf
aW5wdXQuZmlsZW5hbWUpCi0gICAgdGVzdF9vdXRwdXQgPSBkcml2ZXIucnVuX3Rlc3QodGVzdF9p
bnB1dCkKLSAgICByZXR1cm4gX3Byb2Nlc3Nfb3V0cHV0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5w
dXQsIHRlc3RfdHlwZXMsIHRlc3RfYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3Rfb3V0cHV0LCB3b3JrZXJfbmFtZSkKLQotCi1jbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVh
ZGluZy5UaHJlYWQpOgotICAgICIiIlRocmVhZCB3cmFwcGVyIGZvciBydW5uaW5nIGEgc2luZ2xl
IHRlc3QgZmlsZS4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCB3
b3JrZXJfbnVtYmVyLCB3b3JrZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAgdGVzdF9pbnB1dCwg
dGVzdF90eXBlcywgdGVzdF9hcmdzKToKLSAgICAgICAgIiIiCi0gICAgICAgIEFyZ3M6Ci0gICAg
ICAgICAgcG9ydDogb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmljIGhvb2tzCi0gICAg
ICAgICAgb3B0aW9uczogY29tbWFuZCBsaW5lIGFyZ3VtZW50IG9iamVjdCBmcm9tIG9wdHBhcnNl
Ci0gICAgICAgICAgd29ya2VyX251bWJlcjogd29ya2VyIG51bWJlciBmb3IgdGVzdHMKLSAgICAg
ICAgICB3b3JrZXJfbmFtZTogZm9yIGxvZ2dpbmcKLSAgICAgICAgICB0ZXN0X2lucHV0OiBPYmpl
Y3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSBhbmQgdGltZW91dAotICAgICAgICAgIHRl
c3RfdHlwZXM6IEEgbGlzdCBvZiBUZXN0VHlwZSBvYmplY3RzIHRvIHJ1biB0aGUgdGVzdCBvdXRw
dXQKLSAgICAgICAgICAgICAgYWdhaW5zdC4KLSAgICAgICAgICB0ZXN0X2FyZ3M6IEEgVGVzdEFy
Z3VtZW50cyBvYmplY3QgdG8gcGFzcyB0byBlYWNoIFRlc3RUeXBlLgotICAgICAgICAiIiIKLQot
ICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX3Bv
cnQgPSBwb3J0Ci0gICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHNlbGYu
X3Rlc3RfaW5wdXQgPSB0ZXN0X2lucHV0Ci0gICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0
X3R5cGVzCi0gICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHRlc3RfYXJncwotICAgICAgICBzZWxm
Ll9kcml2ZXIgPSBOb25lCitjbGFzcyBXb3JrZXIobWVzc2FnZV9icm9rZXIuQ2xpZW50SW50ZXJm
YWNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfbnVtYmVyKToKKyAg
ICAgICAgc2VsZi5fYnJva2VyID0gYnJva2VyCiAgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIg
PSB3b3JrZXJfbnVtYmVyCi0gICAgICAgIHNlbGYuX25hbWUgPSB3b3JrZXJfbmFtZQorICAgICAg
ICBzZWxmLl9uYW1lID0gJ3dvcmtlci8lZCcgJSB3b3JrZXJfbnVtYmVyCiAKLSAgICBkZWYgcnVu
KHNlbGYpOgotICAgICAgICBzZWxmLl9jb3ZlcmVkX3J1bigpCi0KLSAgICBkZWYgX2NvdmVyZWRf
cnVuKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB0aGlzIGlzIGEgc2VwYXJhdGUgcm91dGluZSB0
byB3b3JrIGFyb3VuZCBhIGJ1ZwotICAgICAgICAjIGluIGNvdmVyYWdlOiBzZWUgaHR0cDovL2Jp
dGJ1Y2tldC5vcmcvbmVkL2NvdmVyYWdlcHkvaXNzdWUvODUuCi0gICAgICAgIHNlbGYuX2RyaXZl
ciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZlcihzZWxmLl93b3JrZXJfbnVtYmVyKQotICAgICAg
ICBzZWxmLl9kcml2ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLl90ZXN0X3Jlc3VsdCA9IF9ydW5f
c2luZ2xlX3Rlc3Qoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfaW5wdXQsIHNlbGYuX3Rlc3Rf
dHlwZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
Ll90ZXN0X2FyZ3MsIHNlbGYuX2RyaXZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX25hbWUpCi0gICAgICAgIHNlbGYuX2RyaXZlci5zdG9wKCkK
LQotICAgIGRlZiBnZXRfdGVzdF9yZXN1bHQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl90
ZXN0X3Jlc3VsdAotCi0KLWNsYXNzIFdhdGNoYWJsZVRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToK
LSAgICAiIiJUaGlzIGNsYXNzIGFic3RyYWN0cyBhbiBpbnRlcmZhY2UgdXNlZCBieQotICAgIHJ1
bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2ggZm9y
IHRocmVhZAotICAgIG1hbmFnZW1lbnQuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAg
ICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCiAgICAgICAgIHNlbGYuX2NhbmNl
bGVkID0gRmFsc2UKLSAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBOb25lCi0gICAgICAg
IHNlbGYuX25leHRfdGltZW91dCA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gTm9u
ZQotCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiU2V0IGEgZmxhZyB0ZWxsaW5n
IHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCi0gICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQot
Ci0gICAgZGVmIGNsZWFyX25leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgIiIiTWFyayBhIGZs
YWcgdGVsbGluZyB0aGlzIHRocmVhZCB0byBzdG9wIHNldHRpbmcgdGltZW91dHMuIiIiCi0gICAg
ICAgIHNlbGYuX3RpbWVvdXQgPSAwCi0KLSAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6Ci0g
ICAgICAgICIiIklmIHJ1bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9uLCBy
ZXR1cm4gaXQgaGVyZQotICAgICAgICAoKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIHR1cGxlKS4K
LSAgICAgICAgUmV0dXJucyBOb25lIGlmIHJ1bigpIHRlcm1pbmF0ZWQgbm9ybWFsbHkuIE1lYW50
IHRvIGJlIGNhbGxlZCBhZnRlcgotICAgICAgICBqb2luaW5nIHRoaXMgdGhyZWFkLiIiIgotICAg
ICAgICByZXR1cm4gc2VsZi5fZXhjZXB0aW9uX2luZm8KLQotICAgIGRlZiBpZChzZWxmKToKLSAg
ICAgICAgIiIiUmV0dXJuIGEgdGhyZWFkIGlkZW50aWZpZXIuIiIiCi0gICAgICAgIHJldHVybiBz
ZWxmLl90aHJlYWRfaWQKLQotICAgIGRlZiBuZXh0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgICIi
IlJldHVybiB0aGUgdGltZSB0aGUgdGVzdCBpcyBzdXBwb3NlZCB0byBmaW5pc2ggYnkuIiIiCi0g
ICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVvdXQKLQorICAgICAgICBzZWxmLl9kb25lID0g
RmFsc2UKIAotY2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1l
LAotICAgICAgICAgICAgICAgICBmaWxlbmFtZV9saXN0X3F1ZXVlLCByZXN1bHRfcXVldWUpOgot
ICAgICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoaXMgRHVtcFJl
bmRlclRyZWUgdGhyZWFkLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgcG9ydDogaW50ZXJm
YWNlIHRvIHBvcnQtc3BlY2lmaWMgaG9va3MKLSAgICAgICAgICBvcHRpb25zOiBjb21tYW5kIGxp
bmUgb3B0aW9ucyBhcmd1bWVudCBmcm9tIG9wdHBhcnNlCi0gICAgICAgICAgd29ya2VyX251bWJl
cjogaWRlbnRpZmllciBmb3IgYSBwYXJ0aWN1bGFyIHdvcmtlciB0aHJlYWQuCi0gICAgICAgICAg
d29ya2VyX25hbWU6IGZvciBsb2dnaW5nLgotICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWU6
IEEgdGhyZWFkIHNhZmUgUXVldWUgY2xhc3MgdGhhdCBjb250YWlucyBsaXN0cwotICAgICAgICAg
ICAgICBvZiB0dXBsZXMgb2YgKGZpbGVuYW1lLCB1cmkpIHBhaXJzLgotICAgICAgICAgIHJlc3Vs
dF9xdWV1ZTogQSB0aHJlYWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0IHdpbGwgY29udGFpbgotICAg
ICAgICAgICAgICBzZXJpYWxpemVkIFRlc3RSZXN1bHQgb2JqZWN0cy4KLSAgICAgICAgIiIiCi0g
ICAgICAgIFdhdGNoYWJsZVRocmVhZC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydAotICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLl93
b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAgICAgICBzZWxmLl9uYW1lID0gd29ya2Vy
X25hbWUKLSAgICAgICAgc2VsZi5fZmlsZW5hbWVfbGlzdF9xdWV1ZSA9IGZpbGVuYW1lX2xpc3Rf
cXVldWUKLSAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gcmVzdWx0X3F1ZXVlCi0gICAgICAg
IHNlbGYuX2ZpbGVuYW1lX2xpc3QgPSBbXQorICAgICAgICBzZWxmLl9wb3J0ID0gYnJva2VyLnBv
cnQoKQorICAgICAgICBzZWxmLl9vcHRpb25zID0gYnJva2VyLm9wdGlvbnMoKQorICAgICAgICBz
ZWxmLl9iYXRjaF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSA9IHNlbGYuX29w
dGlvbnMuYmF0Y2hfc2l6ZQogICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCi0gICAgICAgIHNl
bGYuX3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzID0ge30KLSAgICAgICAgc2VsZi5fdGVzdF9yZXN1
bHRzID0gW10KLSAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0gMAotICAgICAgICBzZWxmLl9zdGFy
dF90aW1lID0gMAotICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSAwCiAgICAgICAgIHNlbGYuX2hh
dmVfaHR0cF9sb2NrID0gRmFsc2UKLSAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4g
PSAwCi0gICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IDAKLQogICAgICAgICBzZWxm
Ll90ZXN0X3R5cGVzID0gW10KICAgICAgICAgZm9yIGNscyBpbiBzZWxmLl9nZXRfdGVzdF90eXBl
X2NsYXNzZXMoKToKICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKGNscyhzZWxm
Ll9wb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29w
dGlvbnMucmVzdWx0c19kaXJlY3RvcnkpKQogICAgICAgICBzZWxmLl90ZXN0X2FyZ3MgPSBzZWxm
Ll9nZXRfdGVzdF9hcmdzKHdvcmtlcl9udW1iZXIpCiAKLSAgICAgICAgIyBDdXJyZW50IGdyb3Vw
IG9mIHRlc3RzIHdlJ3JlIHJ1bm5pbmcuCi0gICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXAgPSBO
b25lCi0gICAgICAgICMgTnVtYmVyIG9mIHRlc3RzIGluIHNlbGYuX2N1cnJlbnRfZ3JvdXAuCi0g
ICAgICAgIHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2dyb3VwID0gTm9uZQotICAgICAgICAj
IFRpbWUgYXQgd2hpY2ggd2Ugc3RhcnRlZCBydW5uaW5nIHRlc3RzIGZyb20gc2VsZi5fY3VycmVu
dF9ncm91cC4KLSAgICAgICAgc2VsZi5fY3VycmVudF9ncm91cF9zdGFydF90aW1lID0gTm9uZQor
ICAgICAgICAjIEFwcGVuZCB0ZXN0cyB3ZSdyZSBydW5uaW5nIHRvIHRoZSBleGlzdGluZyB0ZXN0
c19ydW4udHh0IGZpbGUuCisgICAgICAgICMgVGhpcyBpcyBjcmVhdGVkIGluIHJ1bl93ZWJraXRf
dGVzdHMucHk6X1ByZXBhcmVMaXN0c0FuZFByaW50T3V0cHV0LgorICAgICAgICB0ZXN0c19ydW5f
ZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0c19ydW4udHh0
IikKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBjb2RlY3Mub3Blbih0ZXN0c19ydW5f
ZmlsZW5hbWUsICJhIiwgInV0Zi04IikKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAg
ICBzZWxmLl9jbGVhbnVwKCkKIAogICAgIGRlZiBfZ2V0X3Rlc3RfYXJncyhzZWxmLCB3b3JrZXJf
bnVtYmVyKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgdHVwbGUgb2YgYXJndW1lbnRzIGZvciB0
ZXN0cyBhbmQgZm9yIER1bXBSZW5kZXJUcmVlLiIiIgogICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0
X3R5cGVfYmFzZS5UZXN0QXJndW1lbnRzKCkKICAgICAgICAgdGVzdF9hcmdzLm5ld19iYXNlbGlu
ZSA9IHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lCiAgICAgICAgIHRlc3RfYXJncy5yZXNldF9y
ZXN1bHRzID0gc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzCi0KICAgICAgICAgcmV0dXJuIHRl
c3RfYXJncwogCiAgICAgZGVmIF9nZXRfdGVzdF90eXBlX2NsYXNzZXMoc2VsZik6CkBAIC0zMDEs
MTYyICsxMDQsMTIyIEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgog
ICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoaW1hZ2VfZGlmZi5JbWFnZURpZmYpCiAgICAgICAg
IHJldHVybiBjbGFzc2VzCiAKLSAgICBkZWYgZ2V0X3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzKHNl
bGYpOgotICAgICAgICAiIiJSZXR1cm5zIGEgZGljdGlvbmFyeSBtYXBwaW5nIHRlc3QgZ3JvdXAg
dG8gYSB0dXBsZSBvZgotICAgICAgICAobnVtYmVyIG9mIHRlc3RzIGluIHRoYXQgZ3JvdXAsIHRp
bWUgdG8gcnVuIHRoZSB0ZXN0cykiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfZ3JvdXBf
dGltaW5nX3N0YXRzCi0KLSAgICBkZWYgZ2V0X3Rlc3RfcmVzdWx0cyhzZWxmKToKLSAgICAgICAg
IiIiUmV0dXJuIHRoZSBsaXN0IG9mIGFsbCB0ZXN0cyBydW4gb24gdGhpcyB0aHJlYWQuCi0KLSAg
ICAgICAgVGhpcyBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBwZXItdGhyZWFkIHN0YXRpc3RpY3MuCi0K
LSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3Jlc3VsdHMKKyAgICBkZWYg
Y2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJBdHRlbXB0IHRvIGFib3J0IHByb2Nlc3NpbmcgKGJl
c3QgZWZmb3J0KS4iIiIKKyAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCiAKLSAgICBkZWYg
Z2V0X3RvdGFsX3RpbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBtYXgoc2VsZi5fc3RvcF90aW1l
IC0gc2VsZi5fc3RhcnRfdGltZSAtCi0gICAgICAgICAgICAgICAgICAgc2VsZi5faHR0cF9sb2Nr
X3dhaXRfdGltZSgpLCAwLjApCisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAgICMgVGhp
cyBpcyB1c2VkIGZvciBhc3NlcnRpb24gY2hlY2tpbmcgaW4gdGhlIG1hbmFnZXIuCisgICAgICAg
IHJldHVybiBzZWxmLl9kb25lIG9yIHNlbGYuX2NhbmNlbGVkCiAKLSAgICBkZWYgZ2V0X251bV90
ZXN0cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX251bV90ZXN0cworICAgIGRlZiBuYW1l
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQogCiAgICAgZGVmIHJ1bihzZWxmKToK
LSAgICAgICAgIiIiRGVsZWdhdGUgbWFpbiB3b3JrIHRvIGEgaGVscGVyIG1ldGhvZCBhbmQgd2F0
Y2ggZm9yIHVuY2F1Z2h0Ci0gICAgICAgIGV4Y2VwdGlvbnMuIiIiCi0gICAgICAgIHNlbGYuX2Nv
dmVyZWRfcnVuKCkKLQotICAgIGRlZiBfY292ZXJlZF9ydW4oc2VsZik6Ci0gICAgICAgICMgRklY
TUU6IHRoaXMgaXMgYSBzZXBhcmF0ZSByb3V0aW5lIHRvIHdvcmsgYXJvdW5kIGEgYnVnCi0gICAg
ICAgICMgaW4gY292ZXJhZ2U6IHNlZSBodHRwOi8vYml0YnVja2V0Lm9yZy9uZWQvY292ZXJhZ2Vw
eS9pc3N1ZS84NS4KLSAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkLmdldF9pZGVudCgp
Ci0gICAgICAgIHNlbGYuX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLl9u
dW1fdGVzdHMgPSAwCisgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiIgorICAgICAgICBfbG9nLmRl
YnVnKCclcyBzdGFydGluZycgJSBzZWxmLl9uYW1lKQorCiAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgIF9sb2cuZGVidWcoJyVzIHN0YXJ0aW5nJyAlIChzZWxmLmdldE5hbWUoKSkpCi0gICAgICAg
ICAgICBzZWxmLl9ydW4odGVzdF9ydW5uZXI9Tm9uZSwgcmVzdWx0X3N1bW1hcnk9Tm9uZSkKLSAg
ICAgICAgICAgIF9sb2cuZGVidWcoJyVzIGRvbmUgKCVkIHRlc3RzKScgJSAoc2VsZi5nZXROYW1l
KCksCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X251bV90ZXN0cygpKSkKKyAgICAg
ICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgICAgIGlmIG5v
dCBzZWxmLmlzX2RvbmUoKToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigi
JXM6IHJhbiBvdXQgb2YgbWVzc2FnZXMgaW4gd29ya2VyIHF1ZXVlLiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYuX25hbWUpCiAgICAgICAgIGV4Y2VwdCBLZXli
b2FyZEludGVycnVwdDoKLSAgICAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4
Y19pbmZvKCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIGludGVycnVwdGVkIiAlIHNlbGYu
Z2V0TmFtZSgpKQorICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGludGVycnVwdGVkIgog
ICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAjIFNhdmUgdGhlIGV4Y2VwdGlvbiBmb3Igb3Vy
IGNhbGxlciB0byBzZWUuCi0gICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5l
eGNfaW5mbygpCi0gICAgICAgICAgICBzZWxmLl9zdG9wX3RpbWUgPSB0aW1lLnRpbWUoKQotICAg
ICAgICAgICAgX2xvZy5lcnJvcignJXMgZHlpbmcsIGV4Y2VwdGlvbiByYWlzZWQnICUgc2VsZi5n
ZXROYW1lKCkpCi0KLSAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gdGltZS50aW1lKCkKLQotICAg
IGRlZiBydW5faW5fbWFpbl90aHJlYWQoc2VsZiwgdGVzdF9ydW5uZXIsIHJlc3VsdF9zdW1tYXJ5
KToKLSAgICAgICAgIiIiVGhpcyBob29rIGFsbG93cyB1cyB0byBydW4gdGhlIHRlc3RzIGZyb20g
dGhlIG1haW4gdGhyZWFkIGlmCi0gICAgICAgIC0tbnVtLXRlc3Qtc2hlbGxzPT0xLCBpbnN0ZWFk
IG9mIGhhdmluZyB0byBhbHdheXMgcnVuIHR3byBvciBtb3JlCi0gICAgICAgIHRocmVhZHMuIFRo
aXMgYWxsb3dzIHVzIHRvIGRlYnVnIHRoZSB0ZXN0IGhhcm5lc3Mgd2l0aG91dCBoYXZpbmcgdG8K
LSAgICAgICAgZG8gbXVsdGktdGhyZWFkZWQgZGVidWdnaW5nLiIiIgotICAgICAgICBzZWxmLl9y
dW4odGVzdF9ydW5uZXIsIHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgZGVmIGNhbmNlbChzZWxmKToK
LSAgICAgICAgIiIiQ2xlYW4gdXAgaHR0cCBsb2NrIGFuZCBzZXQgYSBmbGFnIHRlbGxpbmcgdGhp
cyB0aHJlYWQgdG8gcXVpdC4iIiIKLSAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9j
aygpCi0gICAgICAgIFdhdGNoYWJsZVRocmVhZC5jYW5jZWwoc2VsZikKLQotICAgIGRlZiBuZXh0
X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgdGltZSB0aGUgdGVzdCBpcyBz
dXBwb3NlZCB0byBmaW5pc2ggYnkuIiIiCi0gICAgICAgIGlmIHNlbGYuX25leHRfdGltZW91dDoK
LSAgICAgICAgICAgIHJldHVybiBzZWxmLl9uZXh0X3RpbWVvdXQgKyBzZWxmLl9odHRwX2xvY2tf
d2FpdF90aW1lKCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dAotCi0gICAgZGVm
IF9odHRwX2xvY2tfd2FpdF90aW1lKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHRpbWUg
d2hhdCBodHRwIGxvY2tpbmcgdGFrZXMuIiIiCi0gICAgICAgIGlmIHNlbGYuX2h0dHBfbG9ja193
YWl0X2JlZ2luID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBpZiBzZWxmLl9o
dHRwX2xvY2tfd2FpdF9lbmQgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUoKSAt
IHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luCi0gICAgICAgIHJldHVybiBzZWxmLl9odHRwX2xv
Y2tfd2FpdF9lbmQgLSBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbgotCi0gICAgZGVmIF9ydW4o
c2VsZiwgdGVzdF9ydW5uZXIsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIiIiTWFpbiB3b3Jr
IGVudHJ5IHBvaW50IG9mIHRoZSB0aHJlYWQuIEJhc2ljYWxseSB3ZSBwdWxsIHVybHMgZnJvbSB0
aGUKLSAgICAgICAgZmlsZW5hbWUgcXVldWUgYW5kIHJ1biB0aGUgdGVzdHMgdW50aWwgd2UgcnVu
IG91dCBvZiB1cmxzLgotCi0gICAgICAgIElmIHRlc3RfcnVubmVyIGlzIG5vdCBOb25lLCB0aGVu
IHdlIGNhbGwgdGVzdF9ydW5uZXIuVXBkYXRlU3VtbWFyeSgpCi0gICAgICAgIHdpdGggdGhlIHJl
c3VsdHMgb2YgZWFjaCB0ZXN0LiIiIgotICAgICAgICBiYXRjaF9zaXplID0gc2VsZi5fb3B0aW9u
cy5iYXRjaF9zaXplCi0gICAgICAgIGJhdGNoX2NvdW50ID0gMAotCi0gICAgICAgICMgQXBwZW5k
IHRlc3RzIHdlJ3JlIHJ1bm5pbmcgdG8gdGhlIGV4aXN0aW5nIHRlc3RzX3J1bi50eHQgZmlsZS4K
LSAgICAgICAgIyBUaGlzIGlzIGNyZWF0ZWQgaW4gcnVuX3dlYmtpdF90ZXN0cy5weTpfUHJlcGFy
ZUxpc3RzQW5kUHJpbnRPdXRwdXQuCi0gICAgICAgIHRlc3RzX3J1bl9maWxlbmFtZSA9IG9zLnBh
dGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RzX3J1bi50eHQiKQotICAgICAgICB0ZXN0
c19ydW5fZmlsZSA9IGNvZGVjcy5vcGVuKHRlc3RzX3J1bl9maWxlbmFtZSwgImEiLCAidXRmLTgi
KQotCi0gICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBleGNlcHRpb25fbXNnID0gIiwg
ZXhjZXB0aW9uIHJhaXNlZCIKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9sb2cuZGVi
dWcoIiVzIGRvbmUlcyIgJSAoc2VsZi5fbmFtZSwgZXhjZXB0aW9uX21zZykpCisgICAgICAgICAg
ICBpZiBleGNlcHRpb25fbXNnOgorICAgICAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19p
bmZvKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dfdHJhY2ViYWNrKGV4Y19pbmZvWzJdKQor
ICAgICAgICAgICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHNlbmQgYSBtZXNzYWdl
IHdpdGggYSB0cmFjZWJhY2suCisgICAgICAgICAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVz
c2FnZSgnZXhjZXB0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChleGNfaW5mb1swXSwgZXhjX2luZm9bMV0sIE5vbmUpKQorICAgICAgICAgICAgc2VsZi5f
YnJva2VyLnBvc3RfbWVzc2FnZSgnZG9uZScpCisgICAgICAgICAgICBzZWxmLl9jbGVhbnVwKCkK
KworICAgIGRlZiBfbG9nX3RyYWNlYmFjayhzZWxmLCB0Yik6CisgICAgICAgIHN0YWNrID0gdHJh
Y2ViYWNrLmV4dHJhY3RfdGIodGIpCisgICAgICAgIGZvciBmcmFtZV9zdHIgaW4gdHJhY2ViYWNr
LmZvcm1hdF9saXN0KHN0YWNrKToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZyYW1lX3N0ci5z
cGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAg
ICBfbG9nLmVycm9yKCIgICVzIiAlIGxpbmUpCisKKyAgICBkZWYgX2NsZWFudXAoc2VsZik6Cisg
ICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisgICAgICAgIGlmIHNlbGYuX2hh
dmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygp
CisgICAgICAgIGlmIHNlbGYuX3Rlc3RzX3J1bl9maWxlOgorICAgICAgICAgICAgc2VsZi5fdGVz
dHNfcnVuX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBO
b25lCisKKyAgICBkZWYgaGFuZGxlX3Rlc3RfbGlzdChzZWxmLCBzcmMsIGxpc3RfbmFtZSwgdGVz
dF9saXN0KToKKyAgICAgICAgaWYgbGlzdF9uYW1lID09ICJ0ZXN0c190b19odHRwX2xvY2siOgor
ICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQorCisgICAgICAgIHN0
YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBudW1fdGVzdHMgPSAwCisgICAgICAgIGZv
ciB0ZXN0X2lucHV0IGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0KHRl
c3RfaW5wdXQpCisgICAgICAgICAgICBzZWxmLl9icm9rZXIueWllbGRfdG9fYnJva2VyKCkKICAg
ICAgICAgICAgIGlmIHNlbGYuX2NhbmNlbGVkOgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWco
J1Rlc3RpbmcgY2FuY2VsbGVkJykKLSAgICAgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS5jbG9z
ZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgIGlmIGxlbihzZWxmLl9m
aWxlbmFtZV9saXN0KSBpcyAwOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfZ3Jv
dXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfZ3JvdXBfdGlt
aW5nX3N0YXRzW3NlbGYuX2N1cnJlbnRfZ3JvdXBdID0gXAotICAgICAgICAgICAgICAgICAgICAg
ICAgKHNlbGYuX251bV90ZXN0c19pbl9jdXJyZW50X2dyb3VwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWUudGltZSgpIC0gc2VsZi5fY3VycmVudF9ncm91cF9zdGFydF90aW1lKQotCi0g
ICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2dy
b3VwLCBzZWxmLl9maWxlbmFtZV9saXN0ID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fZmlsZW5hbWVfbGlzdF9xdWV1ZS5nZXRfbm93YWl0KCkKLSAgICAgICAgICAgICAgICBleGNl
cHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193
aXRoX2xvY2soKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVyX3Ry
ZWUoKQotICAgICAgICAgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS5jbG9zZSgpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF9n
cm91cCA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5f
c3RhcnRfc2VydmVyc193aXRoX2xvY2soKQotICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5faGF2
ZV9odHRwX2xvY2s6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyc193aXRo
X2xvY2soKQotCi0gICAgICAgICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3Jv
dXAgPSBsZW4oc2VsZi5fZmlsZW5hbWVfbGlzdCkKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJy
ZW50X2dyb3VwX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotCi0gICAgICAgICAgICB0ZXN0X2lu
cHV0ID0gc2VsZi5fZmlsZW5hbWVfbGlzdC5wb3AoKQotCi0gICAgICAgICAgICAjIFdlIGhhdmUg
YSB1cmwsIHJ1biB0ZXN0cy4KLSAgICAgICAgICAgIGJhdGNoX2NvdW50ICs9IDEKLSAgICAgICAg
ICAgIHNlbGYuX251bV90ZXN0cyArPSAxCi0gICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1
bl9zaW5nbHk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5fYW5v
dGhlcl90aHJlYWQodGVzdF9pbnB1dCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQodGVzdF9pbnB1dCkKLQot
ICAgICAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X2lucHV0LmZpbGVuYW1lCi0gICAgICAgICAgICB0
ZXN0c19ydW5fZmlsZS53cml0ZShmaWxlbmFtZSArICJcbiIpCi0gICAgICAgICAgICBpZiByZXN1
bHQuZmFpbHVyZXM6Ci0gICAgICAgICAgICAgICAgIyBDaGVjayBhbmQga2lsbCBEdW1wUmVuZGVy
VHJlZSBpZiB3ZSBuZWVkIHRvLgotICAgICAgICAgICAgICAgIGlmIGxlbihbMSBmb3IgZiBpbiBy
ZXN1bHQuZmFpbHVyZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYuc2hvdWxkX2tpbGxf
ZHVtcF9yZW5kZXJfdHJlZSgpXSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVt
cF9yZW5kZXJfdHJlZSgpCi0gICAgICAgICAgICAgICAgICAgICMgUmVzZXQgdGhlIGJhdGNoIGNv
dW50IHNpbmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQuCi0gICAgICAgICAgICAgICAgICAgIGJh
dGNoX2NvdW50ID0gMAotICAgICAgICAgICAgICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3NhZ2Uo
cykuCi0gICAgICAgICAgICAgICAgZXJyb3Jfc3RyID0gJ1xuJy5qb2luKFsnICAnICsgZi5tZXNz
YWdlKCkgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIGluIHJl
c3VsdC5mYWlsdXJlc10pCi0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgZmFpbGVk
OlxuJXMiICUgKHNlbGYuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX3N0cikpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIF9sb2cuZGVidWcoIiVzICVzIHBhc3NlZCIgJSAoc2VsZi5nZXROYW1lKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZmls
ZW5hbWUpKSkKLSAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZS5wdXQocmVzdWx0LmR1bXBz
KCkpCi0KLSAgICAgICAgICAgIGlmIGJhdGNoX3NpemUgPiAwIGFuZCBiYXRjaF9jb3VudCA+PSBi
YXRjaF9zaXplOgotICAgICAgICAgICAgICAgICMgQm91bmNlIHRoZSBzaGVsbCBhbmQgcmVzZXQg
Y291bnQuCi0gICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAg
ICAgICAgICAgICAgICBiYXRjaF9jb3VudCA9IDAKKyAgICAgICAgICAgICAgICBicmVhaworICAg
ICAgICAgICAgbnVtX3Rlc3RzICs9IDEKIAotICAgICAgICAgICAgaWYgdGVzdF9ydW5uZXI6Ci0g
ICAgICAgICAgICAgICAgdGVzdF9ydW5uZXIudXBkYXRlX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkp
CisgICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQogCi0gICAg
ZGVmIF9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAg
ICAgaWYgc2VsZi5faGF2ZV9odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9zdG9wX3NlcnZl
cnNfd2l0aF9sb2NrKCkKKworICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCdmaW5p
c2hlZF9saXN0JywgbGlzdF9uYW1lLCBudW1fdGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxhcHNlZF90aW1lKQorCisgICAgZGVmIGhhbmRsZV9zdG9wKHNlbGYsIHNy
Yyk6CisgICAgICAgICIiIlN0b3AgcmVjZWl2ZWQgLSBubyBtb3JlIHRlc3RzIHRvIHJ1bi4iIiIK
KyAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKworICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVz
dF9pbnB1dCk6CisgICAgICAgIHNlbGYuX3NldF91cF90ZXN0KHRlc3RfaW5wdXQpCisKKyAgICAg
ICAgIyBXZSBjYWxjdWxhdGUgaG93IGxvbmcgd2UgZXhwZWN0IHRoZSB0ZXN0IHRvIHRha2UuCisg
ICAgICAgICMKKyAgICAgICAgIyBUaGUgRHVtcFJlbmRlclRyZWUgd2F0Y2hkb2cgdXNlcyAyLjV4
IHRoZSB0aW1lb3V0OyB3ZSB3YW50IHRvIGJlCisgICAgICAgICMgbGFyZ2VyIHRoYW4gdGhhdC4g
V2UgYWxzbyBhZGQgYSBsaXR0bGUgbW9yZSBwYWRkaW5nIGlmIHdlJ3JlCisgICAgICAgICMgcnVu
bmluZyB0ZXN0cyBpbiBhIHNlcGFyYXRlIHRocmVhZC4KKyAgICAgICAgIworICAgICAgICAjIE5v
dGUgdGhhdCB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIHRlc3QgdGltZW91dCBmcm9tIGEKKyAgICAg
ICAgIyBzdHJpbmcgdmFsdWUgaW4gbWlsbGlzZWNvbmRzIHRvIGEgZmxvYXQgZm9yIFB5dGhvbi4K
KyAgICAgICAgZHJpdmVyX3RpbWVvdXRfc2VjID0gMy4wICogZmxvYXQodGVzdF9pbnB1dC50aW1l
b3V0KSAvIDEwMDAuMAorICAgICAgICB0aHJlYWRfcGFkZGluZ19zZWMgPSAxLjAKKyAgICAgICAg
dGhyZWFkX3RpbWVvdXRfc2VjID0gZHJpdmVyX3RpbWVvdXRfc2VjICsgdGhyZWFkX3BhZGRpbmdf
c2VjCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKKyAgICAgICAgICAgIHRl
c3RfdGltZW91dF9zZWMgPSB0aHJlYWRfdGltZW91dF9zZWMKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHRlc3RfdGltZW91dF9zZWMgPSBkcml2ZXJfdGltZW91dF9zZWMKKworICAgICAgICBz
dGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3N0
YXJ0ZWRfdGVzdCcsIHRlc3RfaW5wdXQsIHRlc3RfdGltZW91dF9zZWMpCisKKyAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5OgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVu
X3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQodGVzdF9pbnB1dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZF90aW1lb3V0X3NlYykKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X2luX3RoaXNf
dGhyZWFkKHRlc3RfaW5wdXQpCisKKyAgICAgICAgc2VsZi5fdGVhcl9kb3duX3Rlc3QodGVzdF9p
bnB1dCwgcmVzdWx0LCB0aW1lLnRpbWUoKSAtIHN0YXJ0KQorCisgICAgZGVmIF9zZXRfdXBfdGVz
dChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAgICAgdGVzdF9pbnB1dC51cmkgPSBzZWxmLl9wb3J0
LmZpbGVuYW1lX3RvX3VyaSh0ZXN0X2lucHV0LmZpbGVuYW1lKQorICAgICAgICBpZiBzZWxmLl9z
aG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oKToKKyAgICAgICAgICAgIHRlc3RfaW5wdXQu
aW1hZ2VfY2hlY2tzdW0gPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKAorICAgICAgICAg
ICAgICAgIHRlc3RfaW5wdXQuZmlsZW5hbWUpCisKKyAgICBkZWYgX3Nob3VsZF9mZXRjaF9leHBl
Y3RlZF9jaGVja3N1bShzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9vcHRpb25zLnBpeGVs
X3Rlc3RzIGFuZCBub3QKKyAgICAgICAgICAgICAgICAoc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxp
bmUgb3Igc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzKSkKKworICAgIGRlZiBfcnVuX3Rlc3Rf
aW5fYW5vdGhlcl90aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCwgdGhyZWFkX3RpbWVvdXRfc2VjKToK
ICAgICAgICAgIiIiUnVuIGEgdGVzdCBpbiBhIHNlcGFyYXRlIHRocmVhZCwgZW5mb3JjaW5nIGEg
aGFyZCB0aW1lIGxpbWl0LgogCiAgICAgICAgIFNpbmNlIHdlIGNhbiBvbmx5IGRldGVjdCB0aGUg
dGVybWluYXRpb24gb2YgYSB0aHJlYWQsIG5vdCBhbnkgaW50ZXJuYWwKQEAgLTQ2NSwyNSArMjI4
LDI0IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogCiAgICAgICAg
IEFyZ3M6CiAgICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3Qg
ZmlsZW5hbWUgYW5kIHRpbWVvdXQKLQorICAgICAgICAgIHRocmVhZF90aW1lb3V0X3NlYzogdGlt
ZSB0byB3YWl0IGJlZm9yZSBraWxsaW5nIHRoZSBkcml2ZXIgcHJvY2Vzcy4KICAgICAgICAgUmV0
dXJuczoKICAgICAgICAgICBBIFRlc3RSZXN1bHQKICAgICAgICAgIiIiCi0gICAgICAgIHdvcmtl
ciA9IFNpbmdsZVRlc3RUaHJlYWQoc2VsZi5fcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3dvcmtlcl9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2lu
cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9hcmdzKQotCi0g
ICAgICAgIHdvcmtlci5zdGFydCgpCi0KLSAgICAgICAgdGhyZWFkX3RpbWVvdXQgPSBfbWlsbGlz
ZWNvbmRzX3RvX3NlY29uZHMoCi0gICAgICAgICAgICBfcGFkX3RpbWVvdXQoaW50KHRlc3RfaW5w
dXQudGltZW91dCkpKQotICAgICAgICB0aHJlYWQuX25leHRfdGltZW91dCA9IHRpbWUudGltZSgp
ICsgdGhyZWFkX3RpbWVvdXQKLSAgICAgICAgd29ya2VyLmpvaW4odGhyZWFkX3RpbWVvdXQpCi0g
ICAgICAgIGlmIHdvcmtlci5pc0FsaXZlKCk6CisgICAgICAgIHdvcmtlciA9IHNlbGYKKyAgICAg
ICAgcmVzdWx0ID0gTm9uZQorCisgICAgICAgIGRyaXZlciA9IHdvcmtlci5fcG9ydC5jcmVhdGVf
ZHJpdmVyKHdvcmtlci5fd29ya2VyX251bWJlcikKKyAgICAgICAgZHJpdmVyLnN0YXJ0KCkKKwor
ICAgICAgICBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgICAg
ICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB3b3JrZXIuX3J1
bl9zaW5nbGVfdGVzdCh0ZXN0X2lucHV0LCBkcml2ZXIpCisKKyAgICAgICAgdGhyZWFkID0gU2lu
Z2xlVGVzdFRocmVhZCgpCisgICAgICAgIHRocmVhZC5zdGFydCgpCisgICAgICAgIHRocmVhZC5q
b2luKHRocmVhZF90aW1lb3V0X3NlYykKKyAgICAgICAgaWYgdGhyZWFkLmlzQWxpdmUoKToKICAg
ICAgICAgICAgICMgSWYgam9pbigpIHJldHVybmVkIHdpdGggdGhlIHRocmVhZCBzdGlsbCBydW5u
aW5nLCB0aGUKICAgICAgICAgICAgICMgRHVtcFJlbmRlclRyZWUgaXMgY29tcGxldGVseSBodW5n
IGFuZCB0aGVyZSdzIG5vdGhpbmcKICAgICAgICAgICAgICMgbW9yZSB3ZSBjYW4gZG8gd2l0aCBp
dC4gIFdlIGhhdmUgdG8ga2lsbCBhbGwgdGhlCkBAIC00OTMsMTYgKzI1NSwxMCBAQCBjbGFzcyBU
ZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgICAgICMgdGhhdCB0cmFk
ZW9mZiBpbiBvcmRlciB0byBhdm9pZCBsb3NpbmcgdGhlIHJlc3Qgb2YgdGhpcwogICAgICAgICAg
ICAgIyB0aHJlYWQncyByZXN1bHRzLgogICAgICAgICAgICAgX2xvZy5lcnJvcignVGVzdCB0aHJl
YWQgaHVuZzoga2lsbGluZyBhbGwgRHVtcFJlbmRlclRyZWVzJykKLSAgICAgICAgICAgIGlmIHdv
cmtlci5fZHJpdmVyOgotICAgICAgICAgICAgICAgIHdvcmtlci5fZHJpdmVyLnN0b3AoKQogCi0g
ICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlc3VsdCA9IHdvcmtlci5nZXRfdGVzdF9yZXN1bHQo
KQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6Ci0gICAgICAgICAgICAjIFRoaXMg
Z2V0cyByYWlzZWQgaWYgdGhlIHdvcmtlciB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLgotICAg
ICAgICAgICAgZmFpbHVyZXMgPSBbXQotICAgICAgICAgICAgX2xvZy5lcnJvcignQ2Fubm90IGdl
dCByZXN1bHRzIG9mIHRlc3Q6ICVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgIHRlc3RfaW5w
dXQuZmlsZW5hbWUpCisgICAgICAgIGRyaXZlci5zdG9wKCkKKworICAgICAgICBpZiBub3QgcmVz
dWx0OgogICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9p
bnB1dC5maWxlbmFtZSwgZmFpbHVyZXM9W10sCiAgICAgICAgICAgICAgICAgdGVzdF9ydW5fdGlt
ZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30pCiAKQEAg
LTUxNiwzOSArMjcyLDEyMCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFk
KToKIAogICAgICAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgogICAgICAgICAiIiIK
LSAgICAgICAgc2VsZi5fZW5zdXJlX2R1bXBfcmVuZGVyX3RyZWVfaXNfcnVubmluZygpCi0gICAg
ICAgIHRocmVhZF90aW1lb3V0ID0gX21pbGxpc2Vjb25kc190b19zZWNvbmRzKAotICAgICAgICAg
ICAgIF9wYWRfdGltZW91dChpbnQodGVzdF9pbnB1dC50aW1lb3V0KSkpCi0gICAgICAgIHNlbGYu
X25leHRfdGltZW91dCA9IHRpbWUudGltZSgpICsgdGhyZWFkX3RpbWVvdXQKLSAgICAgICAgdGVz
dF9yZXN1bHQgPSBfcnVuX3NpbmdsZV90ZXN0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsIHRl
c3RfaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90
ZXN0X3R5cGVzLCBzZWxmLl90ZXN0X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9kcml2ZXIsIHNlbGYuX25hbWUpCi0gICAgICAgIHNlbGYuX3Rlc3Rf
cmVzdWx0cy5hcHBlbmQodGVzdF9yZXN1bHQpCi0gICAgICAgIHJldHVybiB0ZXN0X3Jlc3VsdAot
Ci0gICAgZGVmIF9lbnN1cmVfZHVtcF9yZW5kZXJfdHJlZV9pc19ydW5uaW5nKHNlbGYpOgotICAg
ICAgICAiIiJTdGFydCB0aGUgc2hhcmVkIER1bXBSZW5kZXJUcmVlLCBpZiBpdCdzIG5vdCBydW5u
aW5nLgotCi0gICAgICAgIFRoaXMgaXMgbm90IGZvciB1c2Ugd2hlbiBydW5uaW5nIHRlc3RzIHNp
bmdseSwgc2luY2UgdGhvc2UgZWFjaCBzdGFydAotICAgICAgICBhIHNlcGFyYXRlIER1bXBSZW5k
ZXJUcmVlIGluIHRoZWlyIG93biB0aHJlYWQuCi0KLSAgICAgICAgIiIiCiAgICAgICAgICMgcG9s
bCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86CiAgICAg
ICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcKICAgICAgICAgaWYgbm90
IHNlbGYuX2RyaXZlciBvciBzZWxmLl9kcml2ZXIucG9sbCgpIGlzIG5vdCBOb25lOgogICAgICAg
ICAgICAgc2VsZi5fZHJpdmVyID0gc2VsZi5fcG9ydC5jcmVhdGVfZHJpdmVyKHNlbGYuX3dvcmtl
cl9udW1iZXIpCiAgICAgICAgICAgICBzZWxmLl9kcml2ZXIuc3RhcnQoKQorICAgICAgICByZXR1
cm4gc2VsZi5fcnVuX3NpbmdsZV90ZXN0KHRlc3RfaW5wdXQsIHNlbGYuX2RyaXZlcikKKworICAg
IGRlZiBfcnVuX3NpbmdsZV90ZXN0KHNlbGYsIHRlc3RfaW5wdXQsIGRyaXZlcik6CisgICAgICAg
ICMgVGhlIGltYWdlIGhhc2ggaXMgdXNlZCB0byBhdm9pZCBkb2luZyBhbiBpbWFnZSBkdW1wIGlm
IHRoZQorICAgICAgICAjIGNoZWNrc3VtcyBtYXRjaCwgc28gaXQgc2hvdWxkIGJlIHNldCB0byBh
IGJsYW5rIHZhbHVlIGlmIHdlCisgICAgICAgICMgYXJlIGdlbmVyYXRpbmcgYSBuZXcgYmFzZWxp
bmUuICAoT3RoZXJ3aXNlLCBhbiBpbWFnZSBmcm9tIGEKKyAgICAgICAgIyBwcmV2aW91cyBydW4g
d2lsbCBiZSBjb3BpZWQgaW50byB0aGUgYmFzZWxpbmUuIiIiCisgICAgICAgIGlmIHNlbGYuX3No
b3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bSgpOgorICAgICAgICAgICAgdGVzdF9pbnB1dC5p
bWFnZV9oYXNoID0gc2VsZi5fcG9ydC5leHBlY3RlZF9jaGVja3N1bSgKKyAgICAgICAgICAgICAg
ICB0ZXN0X2lucHV0LmZpbGVuYW1lKQorICAgICAgICB0ZXN0X291dHB1dCA9IGRyaXZlci5ydW5f
dGVzdCh0ZXN0X2lucHV0KQorICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2Vzc19vdXRwdXQodGVz
dF9pbnB1dCwgdGVzdF9vdXRwdXQpCisKKyAgICBkZWYgX3Byb2Nlc3Nfb3V0cHV0KHNlbGYsIHRl
c3RfaW5wdXQsIHRlc3Rfb3V0cHV0KToKKyAgICAgICAgIiIiUmVjZWl2ZXMgdGhlIG91dHB1dCBm
cm9tIGEgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcywgc3ViamVjdHMgaXQgdG8gYQorICAgICAgICBu
dW1iZXIgb2YgdGVzdHMsIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBmYWlsdXJlIHR5cGVzIHRoZSB0
ZXN0IHByb2R1Y2VkLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgIHRlc3RfaW5wdXQ6IGEgVGVz
dElucHV0IG9iamVjdAorICAgICAgICB0ZXN0X291dHB1dDogYSBUZXN0T3V0cHV0IG9iamVjdCBj
b250YWluaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHRlc3QKKworICAgICAgICBSZXR1cm5zOiBhIFRl
c3RSZXN1bHQgb2JqZWN0CisgICAgICAgICIiIgorICAgICAgICBmYWlsdXJlcyA9IFtdCisgICAg
ICAgIHRlc3RfZmlsZW5hbWUgPSB0ZXN0X2lucHV0LmZpbGVuYW1lCisKKyAgICAgICAgaWYgdGVz
dF9vdXRwdXQuY3Jhc2g6CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodGVzdF9mYWlsdXJl
cy5GYWlsdXJlQ3Jhc2goKSkKKyAgICAgICAgaWYgdGVzdF9vdXRwdXQudGltZW91dDoKKyAgICAg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVUaW1lb3V0KCkpCisK
KyAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRl
c3RfZmlsZW5hbWUpCisgICAgICAgIGlmIHRlc3Rfb3V0cHV0LmNyYXNoOgorICAgICAgICAgICAg
X2xvZy5kZWJ1ZygiJXMgU3RhY2t0cmFjZSBmb3IgJXM6XG4lcyIgJQorICAgICAgICAgICAgICAg
ICAgICAgICAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lLCB0ZXN0X291dHB1dC5lcnJvcikpCisgICAg
ICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGly
ZWN0b3J5LCB0ZXN0X25hbWUpCisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguc3BsaXRl
eHQoZmlsZW5hbWUpWzBdICsgIi1zdGFjay50eHQiCisgICAgICAgICAgICBzZWxmLl9wb3J0Lm1h
eWJlX21ha2VfZGlyZWN0b3J5KG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpWzBdKQorICAgICAgICAg
ICAgd2l0aCBjb2RlY3Mub3BlbihmaWxlbmFtZSwgIndiIiwgInV0Zi04IikgYXMgZmlsZToKKyAg
ICAgICAgICAgICAgICBmaWxlLndyaXRlKHRlc3Rfb3V0cHV0LmVycm9yKQorICAgICAgICBlbGlm
IHRlc3Rfb3V0cHV0LmVycm9yOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgb3V0cHV0
IHN0ZGVyciBsaW5lczpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9uYW1l
LCB0ZXN0X25hbWUsIHRlc3Rfb3V0cHV0LmVycm9yKSkKKworICAgICAgICBleHBlY3RlZF90ZXN0
X291dHB1dCA9IHNlbGYuX2V4cGVjdGVkX3Rlc3Rfb3V0cHV0KHRlc3RfZmlsZW5hbWUpCisKKyAg
ICAgICAgIyBDaGVjayB0aGUgb3V0cHV0IGFuZCBzYXZlIHRoZSByZXN1bHRzLgorICAgICAgICBz
dGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgdGltZV9mb3JfZGlmZnMgPSB7fQorICAg
ICAgICBmb3IgdGVzdF90eXBlIGluIHNlbGYuX3Rlc3RfdHlwZXM6CisgICAgICAgICAgICBzdGFy
dF9kaWZmX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgbmV3X2ZhaWx1cmVzID0gdGVz
dF90eXBlLmNvbXBhcmVfb3V0cHV0KHNlbGYuX3BvcnQsIHRlc3RfaW5wdXQuZmlsZW5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
dGVzdF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3Rfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cGVjdGVkX3Rlc3Rfb3V0cHV0KQorICAgICAgICAgICAgIyBEb24n
dCBhZGQgYW55IG1vcmUgZmFpbHVyZXMgaWYgd2UgYWxyZWFkeSBoYXZlIGEgY3Jhc2gsIHNvIHdl
CisgICAgICAgICAgICAjIGRvbid0IGRvdWJsZS1yZXBvcnQgdGhvc2UgdGVzdHMuIFdlIGRvIGRv
dWJsZS1yZXBvcnQgZm9yIHRpbWVvdXRzCisgICAgICAgICAgICAjIHNpbmNlIHdlIHN0aWxsIHdh
bnQgdG8gc2VlIHRoZSB0ZXh0IGFuZCBpbWFnZSBvdXRwdXQuCisgICAgICAgICAgICBpZiBub3Qg
dGVzdF9vdXRwdXQuY3Jhc2g6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKG5ld19m
YWlsdXJlcykKKyAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzW3Rlc3RfdHlwZS5fX2NsYXNzX18u
X19uYW1lX19dID0gKAorICAgICAgICAgICAgICAgIHRpbWUudGltZSgpIC0gc3RhcnRfZGlmZl90
aW1lKQorCisgICAgICAgIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcyA9IHRpbWUudGltZSgpIC0g
c3RhcnRfZGlmZl90aW1lCisgICAgICAgIHJldHVybiB0ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdCh0
ZXN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFp
bHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X291dHB1
dC50ZXN0X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Rh
bF90aW1lX2Zvcl9hbGxfZGlmZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aW1lX2Zvcl9kaWZmcykKKworICAgIGRlZiBfZXhwZWN0ZWRfdGVzdF9vdXRwdXQoc2Vs
ZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiJSZXR1cm5zIGFuIGV4cGVjdGVkIFRlc3RPdXRwdXQg
b2JqZWN0LiIiIgorICAgICAgICByZXR1cm4gdGVzdF9vdXRwdXQuVGVzdE91dHB1dChzZWxmLl9w
b3J0LmV4cGVjdGVkX3RleHQoZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9pbWFnZShmaWxlbmFtZSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKGZp
bGVuYW1lKSkKKworICAgIGRlZiBfdGVhcl9kb3duX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCwgcmVz
dWx0LCBlbGFwc2VkX3RpbWUpOgorICAgICAgICBzZWxmLl9iYXRjaF9jb3VudCArPSAxCisgICAg
ICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLndyaXRlKHRlc3RfaW5wdXQuZmlsZW5hbWUgKyAiXG4i
KQorICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUo
dGVzdF9pbnB1dC5maWxlbmFtZSkKKworICAgICAgICBpZiByZXN1bHQuZmFpbHVyZXM6CisgICAg
ICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCisg
ICAgICAgICAgICBpZiBhbnkoW2Yuc2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpIGZvciBm
IGluIHJlc3VsdC5mYWlsdXJlc10pOgorICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9y
ZW5kZXJfdHJlZSgpCisgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0Y2ggY291bnQgc2lu
Y2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KKyAgICAgICAgICAgICAgICBzZWxmLl9iYXRjaF9j
b3VudCA9IDAKKworICAgICAgICAgICAgIyBQcmludCB0aGUgZXJyb3IgbWVzc2FnZShzKS4KKyAg
ICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIGZhaWxlZDoiICUgKHNlbGYuX25hbWUsIHRlc3Rf
bmFtZSkpCisgICAgICAgICAgICBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXM6CisgICAgICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygiJXMgICVzIiAlIChzZWxmLl9uYW1lLCBmLm1lc3NhZ2UoKSkpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQiICUgKHNl
bGYuX25hbWUsIHRlc3RfbmFtZSkpCisKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2Fn
ZSgnZmluaXNoZWRfdGVzdCcsIHJlc3VsdCwgZWxhcHNlZF90aW1lKQorCisgICAgICAgIGlmIHNl
bGYuX2JhdGNoX3NpemUgPiAwIGFuZCBzZWxmLl9iYXRjaF9jb3VudCA+PSBzZWxmLl9iYXRjaF9z
aXplOgorICAgICAgICAgICAgIyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNldCBjb3VudC4KKyAg
ICAgICAgICAgIHNlbGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCisgICAgICAgICAgICBzZWxm
Ll9iYXRjaF9jb3VudCA9IDAKIAogICAgIGRlZiBfc3RhcnRfc2VydmVyc193aXRoX2xvY2soc2Vs
Zik6Ci0gICAgICAgICIiIkFjcXVpcmUgaHR0cCBsb2NrIGFuZCBzdGFydCB0aGUgc2VydmVycy4i
IiIKLSAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4gPSB0aW1lLnRpbWUoKQotICAg
ICAgICBfbG9nLmRlYnVnKCdBY3F1aXJlIGh0dHAgbG9jayAuLi4nKQorICAgICAgICBfbG9nLmRl
YnVnKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4uLicpCiAgICAgICAgIHNlbGYuX3BvcnQuYWNxdWly
ZV9odHRwX2xvY2soKQogICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAu
Li4nKQogICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKICAgICAgICAgX2xv
Zy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQogICAgICAgICBzZWxmLl9w
b3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQotICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2Fp
dF9lbmQgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLl9oYXZlX2h0dHBfbG9jayA9IFRydWUK
IAogICAgIGRlZiBfc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmKToKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21l
c3NhZ2VfYnJva2VyLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIucHkKaW5kZXggZTUyMGE5Y2FhNmI3Njgy
ZWJmZGQyYTk4YmIyMTdlYjg1ZDcyNTFiYy4uZmQ0YWQxNmZlZWUxOTNmOWE0OGMyNjQ5NmQ4OGY1
MzczZDhlYTRiNiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9icm9rZXIucHkKKysrIGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvbWVzc2FnZV9i
cm9rZXIucHkKQEAgLTI2LDcgKzI2LDcgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAKLSIiIk1vZHVsZSBmb3IgaGFuZGxpbmcgbWVzc2FnZXMsIHRocmVhZHMsIHByb2Nlc3Nlcywg
YW5kIGNvbmN1cnJlbmN5IGZvciBydW4td2Via2l0LXRlc3RzLgorIiIiTW9kdWxlIGZvciBoYW5k
bGluZyBtZXNzYWdlcyBhbmQgY29uY3VycmVuY3kgZm9yIHJ1bi13ZWJraXQtdGVzdHMuCiAKIFRl
c3RpbmcgaXMgYWNjb21wbGlzaGVkIGJ5IGhhdmluZyBhIG1hbmFnZXIgKFRlc3RSdW5uZXIpIGdh
dGhlciBhbGwgb2YgdGhlCiB0ZXN0cyB0byBiZSBydW4sIGFuZCBzZW5kaW5nIG1lc3NhZ2VzIHRv
IGEgcG9vbCBvZiB3b3JrZXJzIChUZXN0U2hlbGxUaHJlYWRzKQpAQCAtMzQsMTY0ICszNCw2ODgg
QEAgdG8gcnVuIGVhY2ggdGVzdC4gRWFjaCB3b3JrZXIgY29tbXVuaWNhdGVzIHdpdGggb25lIGRy
aXZlciAodXN1YWxseQogRHVtcFJlbmRlclRyZWUpIHRvIHJ1biBvbmUgdGVzdCBhdCBhIHRpbWUg
YW5kIHRoZW4gY29tcGFyZSB0aGUgb3V0cHV0IGFnYWluc3QKIHdoYXQgd2UgZXhwZWN0ZWQgdG8g
Z2V0LgogCi1UaGlzIG1vZHVsZXMgcHJvdmlkZXMgYSBtZXNzYWdlIGJyb2tlciB0aGF0IGNvbm5l
Y3RzIHRoZSBtYW5hZ2VyIHRvIHRoZQorVGhpcyBtb2R1bGVzIGltcGxlbWVudHMgYSBtZXNzYWdl
IGJyb2tlciB0aGF0IGNvbm5lY3RzIHRoZSBtYW5hZ2VyIHRvIHRoZQogd29ya2VyczogaXQgcHJv
dmlkZXMgYSBtZXNzYWdpbmcgYWJzdHJhY3Rpb24gYW5kIG1lc3NhZ2UgbG9vcHMsIGFuZAotaGFu
ZGxlcyBsYXVuY2hpbmcgdGhyZWFkcyBhbmQvb3IgcHJvY2Vzc2VzIGRlcGVuZGluZyBvbiB0aGUK
LXJlcXVlc3RlZCBjb25maWd1cmF0aW9uLgoraGFuZGxlcyBsYXVuY2hpbmcgdGhyZWFkcyBhbmQv
b3IgcHJvY2Vzc2VzIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdGVkCitjb25maWd1cmF0aW9uLgor
CitCb3RoIE1hbmFnZXJzIGFuZCBXb3JrZXJzIGFyZSByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhl
IG1ldGhvZHMgaW4gdGhlCitCcm9rZXJDbGllbnQgaW50ZXJmYWNlIC8gYWJzdHJhY3QgYmFzZSBj
bGFzcyBpbiBvcmRlciB0byB0aGUgbWVzc2FnZQorYnJva2VyIHRvIHByb3Blcmx5IGNvbW11bmlj
YXRlIHdpdGggdGhlbS4KKworRXZlcnl0aGluZyBzdGFydHMgYnkgY2FsbGluZyBnZXQoKSB0byBv
YnRhaW4gYW4gaW5pdGlhbCByZWZlcmVuY2UgdG8gYSBicm9rZXIuCitUaGUgYnJva2VyIGlzIG1l
ZGlhdGVkIGJ5IGEgQ29ubmVjdGlvbiBvYmplY3QgdGhhdCBwcm92aWRlcyBzb21lIHN5bnRhY3Rp
Yworc3VnYXIgdG8gcmVwcmVzZW50IHRoZSBNYW5hZ2VyIGFuZCBXb3JrZXIgZW5kcG9pbnRzLiBU
eXBpY2FsbHkgdGhlCittYW5hZ2VyIHRoZW4gY2FsbHMgc3RhcnRfd29ya2VyKCkgcmVwZWF0ZWRs
eSB0byBsYXVuY2ggd29ya2VycyAod2hpY2ggYXJlCit1c3VhbGx5IHJ1biBpbiBzZXBhcmF0ZSB0
aHJlYWRzIG9yIHByb2Nlc3NlcyBhcyBjb250cm9sbGVkIGJ5IHRoZQorLS13b3JrZXItbW9kZWwg
cnVudGltZSBmbGFnKSwgb3B0aW9uYWxseSBzZXRzIHVwIHNvbWUgdGltZXJzLCBhbmQgdGhlbgor
aW52b2tlcyBydW5fbWVzc2FnZV9sb29wKCkuCiAiIiIKIAorIyBGSVhNRTogVGhpcyBwYWNrYWdl
IHNob3VsZCBwcm9iYWJseSBhdCBsZWFzdCBiZSBzcGxpdCBpbnRvIHR3byBzZXBhcmF0ZQorIyBj
bGFzc2VzIHRvIHNlcGFyYXRlIG91dCB0aGUgIndvcmtlciBwb29sIiBjb25jZXB0IGFuZCB0aGUg
YWN0dWFsCisjIG1lc3NhZ2UgYnJva2VyIGxvZ2ljLCB3aGljaCBkb2Vzbid0IHJlYWxseSBjYXJl
IGhvdyB0aGUgd29ya2VycyBhcmUKKyMgaW1wbGVtZW50ZWQuCisKK2ltcG9ydCBjUGlja2xlCiBp
bXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IG9wdHBhcnNlCitp
bXBvcnQgb3MKK2ltcG9ydCBRdWV1ZQogaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZAoraW1wb3J0
IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIGltcG9ydCB0cmFjZWJhY2sKIAotaW1wb3J0IGR1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkCi0KIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykK
IAorIworIyBUb3BpYyBuYW1lcyBmb3IgdGhlIG1lc3NhZ2UgcXVldWVzLgorIworTUFOQUdFUl9U
T1BJQyA9ICdtYW5hZ2VyJworQU5ZX1dPUktFUl9UT1BJQyA9ICd3b3JrZXInCisKKworIworIyBG
SVhNRTogYWRkIGNvZGUgdG8gYWxsb3cgdGhpcyB0byBydW4gdy9vIG11bHRpcHJvY2Vzc2luZyBv
biAyLjUuCisjCisKK2RlZiBydW50aW1lX29wdGlvbnMoKToKKyAgICAiIiJSZXR1cm4gYSBsaXN0
IG9mIG9wdHBhcnNlLk9wdGlvbiBvYmplY3RzIGZvciBhbnkgcnVudGltZSB2YWx1ZXMgdXNlZAor
ICAgIGJ5IHRoaXMgbWV0aG9kLiIiIgorICAgIG9wdGlvbnMgPSBbCisgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCItLXdvcmtlci1tb2RlbCIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAg
ICAgaGVscD0oImNvbnRyb2xzIHdvcmtlciBtb2RlbC4gVmFsaWQgdmFsdWVzIGFyZSAiCisgICAg
ICAgICAgICAiJ2lubGluZScsICd0aHJlYWRzJywgYW5kICdwcm9jZXNzZXMnLiIpKSwKKyAgICBd
CisgICAgcmV0dXJuIG9wdGlvbnMKKworCitkZWYgZ2V0KHBvcnQsIG9wdGlvbnMsIG1hbmFnZXIs
IHdvcmtlcl9jbGFzcyk6CisgICAgIiIiUmV0dXJuIGEgY29ubmVjdGlvbiB0byBhIG1hbmFnZXIv
d29ya2VyIG1lc3NhZ2UgYnJva2VyCisKKyAgICBBcmdzOgorICAgICAgICBwb3J0IC0gaGFuZGxl
IHRvIGxheW91dF90ZXN0cy9wb3J0IG9iamVjdCBmb3IgcG9ydC1zcGVjaWZpYyBzdHVmZgorICAg
ICAgICBvcHRpb25zIC0gb3B0cGFyc2UgYXJndW1lbnQgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25z
CisgICAgICAgIG1hbmFnZXIgLSBvYmplY3QgdG8gZGlzcGF0Y2ggcmVwbGllcyB0bworICAgICAg
ICB3b3JrZXJfY2xhc3MgLSB0eXBlIG9mIHdvcmtlcnMgdG8gY3JlYXRlLiBUaGlzIGNsYXNzIG11
c3QgaW1wbGVtZW50CisgICAgICAgICAgICB0aGUgbWV0aG9kcyBpbiB0aGUgQ2xpZW50SW50ZXJm
YWNlLgorICAgIFJldHVybnM6CisgICAgICAgIEEgaGFuZGxlIHRvIGFuIG9iamVjdCB0aGF0IHdp
bGwgdGFsayB0byBhIG1lc3NhZ2UgYnJva2VyIGNvbmZpZ3VyZWQKKyAgICAgICAgZm9yIHRoZSBu
b3JtYWwgbWFuYWdlci93b3JrZXIgY29tbXVuaWNhdGlvbi4KKyAgICAiIiIKKyAgICBicm9rZXIg
PSBfZ2V0X2Jyb2tlcihwb3J0LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgQU5ZX1dPUktFUl9UT1BJQywgTUFOQUdFUl9UT1BJQykKKyAg
ICByZXR1cm4gX01hbmFnZXJDb25uZWN0aW9uKGJyb2tlciwgbWFuYWdlcikKKworCitjbGFzcyBD
bGllbnRJbnRlcmZhY2Uob2JqZWN0KToKKyAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIC8gaW50
ZXJmYWNlIHRoYXQgYWxsIG1lc3NhZ2UgYnJva2VyIGNsaWVudHMgbXVzdAorICAgIGltcGxlbWVu
dC4gSW4gYWRkaXRpb24gdG8gdGhlIG1ldGhvZHMgYmVsb3csIGJ5IGNvbnZlbnRpb24gY2xpZW50
cworICAgIGltcGxlbWVudCByb3V0aW5lcyBvZiB0aGUgc2lnbmF0dXJlIHR5cGUKKworICAgICAg
ICBoYW5kbGVfTUVTU0FHRV9OQU1FKHNlbGYsIHNyYywgLi4uKToKKworICAgIHdoZXJlIE1FU1NB
R0VfTkFNRSBtYXRjaGVzIHRoZSBzdHJpbmcgcGFzc2VkIHRvIHBvc3RfbWVzc2FnZSgpLCBhbmQK
KyAgICBzcmMgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSBzZW5kZXIuIElmIHRoZSBtZXNzYWdl
IGNvbnRhaW5zIHZhbHVlcyBpbgorICAgIHRoZSBtZXNzYWdlIGJvZHksIHRob3NlIHdpbGwgYmUg
cHJvdmlkZWQgYXMgb3B0cGFyYW1zLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tl
cl9jb25uZWN0aW9uLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcgorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIChpZiBw
b3NzaWJsZSkgdG8gbm90aWZ5IHRoZSB3b3JrZXIgdGhhdCBpdCBoYXMgYmVlbiBhYm9ydGVkLgor
CisgICAgICAgIE9ubHkgd29ya2VycyBuZWVkIGltcGxlbWVudCB0aGlzIG1ldGhvZC4gV29ya2Vy
cyBjYW5ub3QgcmVseSBvbiB0aGlzCisgICAgICAgIG1ldGhvZCBhbHdheXMgYmVpbmcgY2FsbGVk
LiBGb3IgZXhhbXBsZSwgd29ya2VycyBydW5uaW5nIGluIHRoZWlyCisgICAgICAgIG93biBwcm9j
ZXNzZXMgbWF5IGJlIGtpbGxlZCBkaXJlY3RseSBpbnN0ZWFkIG9mIGludm9raW5nIHRoaXMgbWV0
aG9kCisgICAgICAgIGFuZCB3YWl0aW5nIGZvciB0aGUgdGhlIHdvcmtlciB0byBleGl0LiIiIgor
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgaXNfZG9uZShzZWxm
KToKKyAgICAgICAgIiIiQ2FsbGVkIGZyb20gaW5zaWRlIHJ1bl9tZXNzYWdlX2xvb3AoKSB0byBp
bmRpY2F0ZSB3aGV0aGVyIHRvIGV4aXQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVk
RXJyb3IKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBuYW1lIHRo
YXQgaWRlbnRpZmllcyB0aGUgd29ya2VyIG9yIG1hbmFnZXIuIiIiCisgICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICIiIk9ubHkg
d29ya2VycyBuZWVkIGltcGxlbWVudCB0aGlzIG1ldGhvZC4iIiIKKyAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIF9NYW5hZ2VyQ29ubmVjdGlvbihvYmplY3QpOgor
ICAgICIiIlRoaXMgY2xhc3MgaGFuZGxlcyBhIGNvbm5lY3Rpb24gdG8gYSBtZXNzYWdlIGJyb2tl
ciB0aGF0IGlzIHNldCB1cAorICAgIHRvIHNlbmQgbWVzc2FnZXMgdG8gYSBXb3JrZXIgcXVldWUg
YXMgYSBNYW5hZ2VyLiBJdCBpcyBwcm92aWRlZCBhcyBhCisgICAgY29udmVuaWVuY2UgYW5kIHRv
IGVuY2Fwc3VsYXRlIHRoZSBnZW5lcmljIG1lc3NhZ2UgYnJva2VyLiIiIgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGJyb2tlciwgbWFuYWdlcik6CisgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJy
b2tlcgorICAgICAgICBzZWxmLl9tYW5hZ2VyID0gbWFuYWdlcgorCisgICAgZGVmIF9fZ2V0YXR0
cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAjIFRoaXMgbWV0aG9kIGNhdXNlcyBhbnkgbWV0aG9k
IHdlIGRvbid0IGRpcmVjdGx5IGltcGxlbWVudAorICAgICAgICAjIHRvIHRoZSBicm9rZXIuCisg
ICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX2Jyb2tlciwgbmFtZSkKIAotZGVmIGdldChwb3J0
LCBvcHRpb25zKToKLSAgICAiIiJSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgYSBXb3JrZXJNZXNzYWdl
QnJva2VyLiIiIgorICAgIGRlZiBwb3N0X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZV9uYW1lLCAqbWVz
c2FnZV9hcmdzKToKKyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZShzZWxmLl9tYW5h
Z2VyLm5hbWUoKSwgQU5ZX1dPUktFUl9UT1BJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlX25hbWUsIG1lc3NhZ2VfYXJncykKKworICAgIGRlZiBhZGRfdGltZXIo
c2VsZiwgY2FsbGJhY2ssIGRlbGF5X3NlY3MpOgorICAgICAgICBzZWxmLl9icm9rZXIuYWRkX3Rp
bWVyKE1BTkFHRVJfVE9QSUMsIGNhbGxiYWNrLCBkZWxheV9zZWNzKQorCisgICAgZGVmIHJ1bl9t
ZXNzYWdlX2xvb3Aoc2VsZik6CisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29w
KE1BTkFHRVJfVE9QSUMsIHNlbGYuX21hbmFnZXIpCisKKyAgICBkZWYgc3RhcnRfd29ya2VyKHNl
bGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fYnJva2VyLnN0YXJ0X3dv
cmtlcih3b3JrZXJfbnVtYmVyKQorCisKK2RlZiBfZ2V0X2Jyb2tlcihwb3J0LCBvcHRpb25zLCBt
YW5hZ2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl90b3BpYywKKyAgICAgICAgICAgICAgICB3b3Jr
ZXJfcmVwbHlfdG9waWMpOgogICAgIHdvcmtlcl9tb2RlbCA9IG9wdGlvbnMud29ya2VyX21vZGVs
Ci0gICAgaWYgd29ya2VyX21vZGVsID09ICdpbmxpbmUnOgotICAgICAgICByZXR1cm4gSW5saW5l
QnJva2VyKHBvcnQsIG9wdGlvbnMpCi0gICAgaWYgd29ya2VyX21vZGVsID09ICd0aHJlYWRzJzoK
LSAgICAgICAgcmV0dXJuIE11bHRpVGhyZWFkZWRCcm9rZXIocG9ydCwgb3B0aW9ucykKLSAgICBy
YWlzZSBWYWx1ZUVycm9yKCd1bnN1cHBvcnRlZCB2YWx1ZSBmb3IgLS13b3JrZXItbW9kZWw6ICVz
JyAlIHdvcmtlcl9tb2RlbCkKKyAgICBicm9rZXJfdHlwZXMgPSB7CisgICAgICAgICdpbmxpbmUn
OiBfSW5saW5lQnJva2VyLAorICAgICAgICAndGhyZWFkcyc6IF9NdWx0aVRocmVhZGVkQnJva2Vy
LAorICAgICAgICAncHJvY2Vzc2VzJzogX011bHRpUHJvY2Vzc0Jyb2tlciwKKyAgICB9CisgICAg
dHJ5OgorICAgICAgICBicm9rZXJfY2xhc3MgPSBicm9rZXJfdHlwZXNbd29ya2VyX21vZGVsXQor
ICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5zdXBwb3J0
ZWQgdmFsdWUgZm9yIC0td29ya2VyLW1vZGVsOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAg
ICAgIHdvcmtlcl9tb2RlbCkKKyAgICByZXR1cm4gYnJva2VyX2NsYXNzKHBvcnQsIG9wdGlvbnMs
IHdvcmtlcl9jbGFzcywgd29ya2VyX3RvcGljLAorICAgICAgICAgICAgICAgICAgICAgICAgd29y
a2VyX3JlcGx5X3RvcGljKQorCisKK2NsYXNzIF9NZXNzYWdlKG9iamVjdCk6CisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBsb2FkcyhzdHIpOgorICAgICAgICBvYmogPSBjUGlja2xlLmxvYWRz
KHN0cikKKyAgICAgICAgYXNzZXJ0KGlzaW5zdGFuY2Uob2JqLCBfTWVzc2FnZSkpCisgICAgICAg
IHJldHVybiBvYmoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmMsIHRvcGljX25hbWUsIG1l
c3NhZ2VfbmFtZSwgbWVzc2FnZV9ib2R5KToKKyAgICAgICAgc2VsZi5zcmMgPSBzcmMKKyAgICAg
ICAgc2VsZi50b3BpY19uYW1lID0gdG9waWNfbmFtZQorICAgICAgICBzZWxmLm5hbWUgPSBtZXNz
YWdlX25hbWUKKyAgICAgICAgc2VsZi5ib2R5ID0gbWVzc2FnZV9ib2R5CisKKyAgICBkZWYgZHVt
cHMoc2VsZik6CisgICAgICAgIHJldHVybiBjUGlja2xlLmR1bXBzKHNlbGYpCisKKyAgICBkZWYg
X19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoIl9NZXNzYWdlKGZyb209JyVzJywgdG9w
aWNfbmFtZT0nJXMnLCBtZXNzYWdlX25hbWU9JyVzJykiICUKKyAgICAgICAgICAgICAgICAoc2Vs
Zi5zcmMsIHNlbGYudG9waWNfbmFtZSwgc2VsZi5uYW1lKSkKKworCitjbGFzcyBfVGltZXIob2Jq
ZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FsbGJhY2ssIGRlbGF5KToKKyAgICAgICAg
c2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICAgICAgIHNlbGYuZGVsYXkgPSBkZWxheQorICAg
ICAgICBzZWxmLmRlYWRsaW5lID0gdGltZS50aW1lKCkgKyBkZWxheQorCisKK2NsYXNzIF9Ub3Bp
YyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWV1ZSk6CisgICAgICAgIHNlbGYu
cXVldWUgPSBxdWV1ZQorICAgICAgICBzZWxmLnRpbWVyID0gTm9uZQorCisKKyMgQWxsIFdvcmtl
ck1lc3NhZ2VCcm9rZXIgaW1wbGVtZW50YXRpb25zIG11c3QgcHJvdmlkZSBhIGNvbm5lY3Rpb24g
Y2xhc3MKKyMgdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIGluIG9yZGVyIHRvIG1hbmFn
ZSBtdWx0aXBsZSB3b3JrZXJzCisjIGNvcnJlY3RseS4KK2NsYXNzIF9Xb3JrZXJDb25uZWN0aW9u
SW50ZXJmYWNlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2Vy
X2NsYXNzLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgIiIiUmV0dXJuIGEgd29ya2VyIG9iamVj
dC4KKworICAgICAgICBDYWxsZWQgb25seSBvbiB0aGUgbWFuYWdlciBzaWRlIG9mIHRoZSBtZXNz
YWdlIGJyb2tlci4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCisgICAg
ZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiQmVzdC1lZmZvcnQgYXR0ZW1wdCB0byBub3Rp
ZnkgdGhlIHdvcmtlciBpdCBoYXMgYmVlbiBjYW5jZWxsZWQuCiAKLWNsYXNzIF9Xb3JrZXJTdGF0
ZShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgc2VsZi5u
YW1lID0gbmFtZQotICAgICAgICBzZWxmLnRocmVhZCA9IE5vbmUKKyAgICAgICAgQ2FsbGVkIG9u
IHRoZSBtYW5hZ2VyIHNpZGUgb2YgdGhlIGJyb2tlciwgdGhpcyBzaG91bGQgYmUgYQorICAgICAg
ICBwYXNzLXRocm91Z2ggdG8gdGhlIHdvcmtlciB3aGVyZSBwb3NzaWJsZS4iIiIKKyAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCisgICAgIyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8g
aXNfYWxpdmUgd2hlbiB3ZSdyZSBvbiAyLjYgb3IgbmV3ZXIgZXZlcnl3aGVyZS4KKyAgICBkZWYg
aXNBbGl2ZShzZWxmKToKKyAgICAgICAgIiIiIlJldHVybiB3aGV0aGVyIHRoZSB3b3JrZXIgaXMg
c3RpbGwgcnVubmluZy4KIAotY2xhc3MgV29ya2VyTWVzc2FnZUJyb2tlcihvYmplY3QpOgotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zKToKLSAgICAgICAgc2VsZi5fcG9ydCA9
IHBvcnQKLSAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKLSAgICAgICAgc2VsZi5fbnVt
X3dvcmtlcnMgPSBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpCisgICAgICAgIENh
bGxlZCBvbmx5IG9uIHRoZSBtYW5hZ2VyIHNpZGUgb2YgdGhlIGJyb2tlci4iIiIKKyAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCi0gICAgICAgICMgVGhpcyBtYXBzIHdvcmtlciBu
YW1lcyB0byB0aGVpciBfV29ya2VyU3RhdGUgdmFsdWVzLgotICAgICAgICBzZWxmLl93b3JrZXJz
ID0ge30KKyAgICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgIiIiQmxvY2sgdGlt
ZW91dCBzZWNvbmRzIG9yIHVudGlsIHRoZSB3b3JrZXIgaGFzIGV4aXRlZC4KIAotICAgIGRlZiBf
dGhyZWFkcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHR1cGxlKFt3LnRocmVhZCBmb3IgdyBpbiBz
ZWxmLl93b3JrZXJzLnZhbHVlcygpXSkKKyAgICAgICAgQ2FsbGVkIG9ubHkgb24gdGhlIG1hbmFn
ZXIgc2lkZSBvZiB0aGUgYnJva2VyLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yCiAKLSAgICBkZWYgc3RhcnRfd29ya2VycyhzZWxmLCB0ZXN0X3J1bm5lcik6Ci0gICAgICAg
ICIiIlN0YXJ0cyB1cCB0aGUgcG9vbCBvZiB3b3JrZXJzIGZvciBydW5uaW5nIHRoZSB0ZXN0cy4K
KyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHN0cmluZyBpZGVudGlm
eWluZyB0aGUgd29ya2VyIGluIHF1ZXN0aW9uLgogCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAg
ICB0ZXN0X3J1bm5lcjogYSBoYW5kbGUgdG8gdGhlIG1hbmFnZXIvVGVzdFJ1bm5lciBvYmplY3QK
LSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyID0gdGVzdF9ydW5uZXIKLSAg
ICAgICAgZm9yIHdvcmtlcl9udW1iZXIgaW4geHJhbmdlKHNlbGYuX251bV93b3JrZXJzKToKLSAg
ICAgICAgICAgIHdvcmtlciA9IF9Xb3JrZXJTdGF0ZSgnd29ya2VyLSVkJyAlIHdvcmtlcl9udW1i
ZXIpCi0gICAgICAgICAgICB3b3JrZXIudGhyZWFkID0gc2VsZi5fc3RhcnRfd29ya2VyKHdvcmtl
cl9udW1iZXIsIHdvcmtlci5uYW1lKQotICAgICAgICAgICAgc2VsZi5fd29ya2Vyc1t3b3JrZXIu
bmFtZV0gPSB3b3JrZXIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3RocmVhZHMoKQorICAgICAgICBD
YWxsZWQgb24gYm90aCB0aGUgbWFuYWdlciBhbmQgd29ya2VyIHNpZGVzIG9mIHRoZSBicm9rZXIs
IHRoaXMKKyAgICAgICAgc2hvdWxkIGJlIGEgcGFzcy10aHJvdWdoIHRvIHRoZSB3b3JrZXIgY2xp
ZW50IHdoZXJlIHBvc3NpYmxlLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
CisKKyAgICBkZWYgb3B0aW9ucyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBvcHRpb25z
IG9iamVjdCBwYXNzZWQgdG8gZ2V0KCkuCisKKyAgICAgICAgQ2FsbGVkIG9ubHkgYnkgdGhlIHdv
cmtlci4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHBv
cnQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcG9ydCBvYmplY3QgcGFzc2VkIHRvIGdl
dCgpLgorCisgICAgICAgIENhbGxlZCBvbmx5IGJ5IHRoZSB3b3JrZXIuIiIiCisgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBwb3N0X21lc3NhZ2Uoc2VsZiwgbWVz
c2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdzKToKKyAgICAgICAgIiIiUG9zdCBhIG1lc3NhZ2UgdG8g
dGhlIHdvcmtlcl9yZXBseV9xdWV1ZS4KIAotICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIHdv
cmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lKToKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVk
IGJ5IHRoZSB3b3JrZXIuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKwor
ICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICIiIkludm9rZSB0aGUgd29ya2VyJ3MgbWFpbiBl
bnRyeSBwb2ludC4KKworICAgICAgICBDYWxsZWQgb24gdGhlIHdvcmtlciBzaWRlIG9mIHRoZSBi
cm9rZXIsIHRoaXMgaXMgdXN1YWxseSBhCisgICAgICAgIHdyYXBwZXIgYXJvdW5kIHRoZSB3b3Jr
ZXIgY2xpZW50J3MgcnVuKCkgbWV0aG9kLiIiIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yCiAKICAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmKToKLSAgICAgICAgIiIiTG9v
cCBwcm9jZXNzaW5nIG1lc3NhZ2VzIHVudGlsIGRvbmUuIiIiCisgICAgICAgICIiIlJ1biB0aGUg
d29ya2VyJ3MgbWVzc2FnZS90aW1lciBsb29wLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGNh
bGxlZCBieSB0aGUgd29ya2VyLiIiIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
CiAKLSAgICBkZWYgY2FuY2VsX3dvcmtlcnMoc2VsZik6Ci0gICAgICAgICIiIkNhbmNlbC9pbnRl
cnJ1cHQgYW55IHdvcmtlcnMgdGhhdCBhcmUgc3RpbGwgYWxpdmUuIiIiCi0gICAgICAgIHBhc3MK
KyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgICIiIlN0YXJ0IHRoZSB3b3JrZXIgcnVubmlu
ZywgaWYgcG9zc2libGUuIERvIG5vdCBibG9jayB0aGUgY2FsbGVyLiIiIgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKLSAgICBkZWYgY2xlYW51cChzZWxmKToKLSAgICAgICAg
IiIiUGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGNsZWFudXAgb24gc2h1dGRvd24uIiIiCi0gICAgICAg
IHBhc3MKKyAgICBkZWYgeWllbGRfdG9fYnJva2VyKHNlbGYpOgorICAgICAgICAiIiIiQ2F1c2Vz
IHRoZSB3b3JrZXIgdG8geWllbGQgY29udHJvbCBmbG93IGJhY2sgdG8gdGhlIGJyb2tlci4KKwor
ICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgcmVzcG9uc2l2ZW5lc3MgaWYgdGhl
IHdvcmtlciBpcworICAgICAgICBwcm9jZXNzaW5nIHNsb3cgbWVzc2FnZXMgKGZvciBleGFtcGxl
LCAndGVzdF9saXN0JykgYW5kIHRoZXJlCisgICAgICAgIGlzIG9ubHkgb25lIHRocmVhZCAoaS5l
LiwgaW5saW5lIG1vZGUpIGluIHRoZSBtZXNzYWdlIGJyb2tlci4iIiIKKyAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcgogCiAKLWNsYXNzIElubGluZUJyb2tlcihXb3JrZXJNZXNzYWdl
QnJva2VyKToKLSAgICBkZWYgX3N0YXJ0X3dvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyLCB3b3Jr
ZXJfbmFtZSk6Ci0gICAgICAgICMgRklYTUU6IFJlcGxhY2Ugd2l0aCBzb21ldGhpbmcgdGhhdCBp
c24ndCBhIHRocmVhZC4KLSAgICAgICAgdGhyZWFkID0gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQu
VGVzdFNoZWxsVGhyZWFkKHNlbGYuX3BvcnQsCi0gICAgICAgICAgICBzZWxmLl9vcHRpb25zLCB3
b3JrZXJfbnVtYmVyLCB3b3JrZXJfbmFtZSwKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVy
Ll9jdXJyZW50X2ZpbGVuYW1lX3F1ZXVlLAotICAgICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIu
X3Jlc3VsdF9xdWV1ZSkKLSAgICAgICAgIyBOb3RlOiBEb24ndCBzdGFydCgpIHRoZSB0aHJlYWQh
IElmIHdlIGRpZCwgaXQgd291bGQgYWN0dWFsbHkKLSAgICAgICAgIyBjcmVhdGUgYW5vdGhlciB0
aHJlYWQgYW5kIHN0YXJ0IGV4ZWN1dGluZyBpdCwgYW5kIHdlJ2Qgbm8gbG9uZ2VyCi0gICAgICAg
ICMgYmUgc2luZ2xlLXRocmVhZGVkLgotICAgICAgICByZXR1cm4gdGhyZWFkCitjbGFzcyBfV29y
a2VyTWVzc2FnZUJyb2tlcihvYmplY3QpOgorICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9y
IGEgbWVzc2FnZSBicm9rZXIgdHVuZWQgZm9yIHRoZSBsYXlvdXQgdGVzdHMuCisKKyAgICBUaGlz
IGNsYXNzIGltcGxlbWVudHMgYSBtb3N0bHkgZ2VuZXJpYyBtZXNzYWdlIGJyb2tlciB3aXRoIGEg
ZmV3IHR3ZWFrcworICAgIHR1bmVkIGZvciBtYW5hZ2VyL3dvcmtlci1zdHlsZSBtZXNzYWdpbmcu
IFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZQorICAgIGluc3RhbnRpYXRlZCBkaXJlY3RseTsgaW5z
dGVhZCwgaXQgc2hvdWxkIGJlIHN1YmNsYXNzZWQgdG8gcHJvdmlkZQorICAgIGltcGxlbWVudGF0
aW9ucyBvZiBhIF9Xb3JrZXJDb25uZWN0aW9uSW50ZXJmYWNlIG9iamVjdCBmb3IKKyAgICBfV09S
S0VSX0NPTk5FQ1RJT05fQ0xBU1MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwg
b3B0aW9ucywgd29ya2VyX2NsYXNzLCB3b3JrZXJfcnVuX3RvcGljLAorICAgICAgICAgICAgICAg
ICB3b3JrZXJfcmVwbHlfdG9waWMpOgorICAgICAgICAiIiJSZXR1cm4gYSBtZXNzYWdlIGJyb2tl
ciBmb3IgbWFuYWdlci93b3JrZXIgY29tbXVuaWNhdGlvbi4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgICAgcG9ydDogaGFuZGxlIHRvIHBvcnQtc3BlY2lmaWMgbG9naWMKKyAgICAgICAgICAg
IG9wdGlvbnM6IGEgcnVudGltZSBvcHRpb24gY2xhc3MgZnJvbSBvcHRwYXJzZQorICAgICAgICAg
ICAgd29ya2VyX2NsYXNzOiBUaGUgdHlwZSBvZiB3b3JrZXIgb2JqZWN0cyB0byBpbnN0YW50aWF0
ZQorICAgICAgICAgICAgd29ya2VyX3J1bl90b3BpYzogVGhlIHRvcGljIG5hbWUgd29ya2VycyBz
aG91bGQgbGlzdGVuIGZvcgorICAgICAgICAgICAgd29ya2VyX3JlcGx5X3RvcGljOiBUaGUgdG9w
aWMgbmFtZSB3b3JrZXJzIHNob3VsZCBwb3N0IHJlcGxpZXMgdG8KKyAgICAgICAgIiIiCisgICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisg
ICAgICAgIHNlbGYuX3dvcmtlcl9jbGFzcyA9IHdvcmtlcl9jbGFzcworICAgICAgICBzZWxmLl93
b3JrZXJfcnVuX3RvcGljID0gd29ya2VyX3J1bl90b3BpYworICAgICAgICBzZWxmLl93b3JrZXJf
cmVwbHlfdG9waWMgPSB3b3JrZXJfcmVwbHlfdG9waWMKKworICAgICAgICBzZWxmLl90b3BpY3Mg
PSB7fQorICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IHt9CisgICAgICAgIHNlbGYuYWRkX3RvcGlj
KHdvcmtlcl9ydW5fdG9waWMpCisgICAgICAgIHNlbGYuYWRkX3RvcGljKHdvcmtlcl9yZXBseV90
b3BpYykKKworICAgIGRlZiBhZGRfdG9waWMoc2VsZiwgdG9waWNfbmFtZSk6CisgICAgICAgIGlm
IHRvcGljX25hbWUgbm90IGluIHNlbGYuX3RvcGljczoKKyAgICAgICAgICAgIHNlbGYuX3RvcGlj
c1t0b3BpY19uYW1lXSA9IF9Ub3BpYyhRdWV1ZS5RdWV1ZSgpKQorCisgICAgZGVmIF9maW5kX3Rv
cGljKHNlbGYsIHRvcGljX25hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5fdG9waWNzW3RvcGlj
X25hbWVdCisKKyAgICAjIFN1YmNsYXNzZXMgbXVzdCBvdmVycmlkZSB0aGlzIHZhbHVlLgorICAg
IF9XT1JLRVJfQ09OTkVDVElPTl9DTEFTUyA9IF9Xb3JrZXJDb25uZWN0aW9uSW50ZXJmYWNlCisK
KyAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICAiIiJT
dGFydCBhIHdvcmtlciB3aXRoIHRoZSBnaXZlbiBpbmRleCBudW1iZXIsIGFuZCByZXR1cm4gaXRz
IG5hbWUuIiIiCisgICAgICAgIHdvcmtlciA9IHNlbGYuX1dPUktFUl9DT05ORUNUSU9OX0NMQVNT
KHNlbGYsIHNlbGYuX3dvcmtlcl9jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd29ya2VyX251bWJlcikKKyAgICAgICAgbmFtZSA9IHdvcmtlci5u
YW1lKCkKKyAgICAgICAgd29ya2VyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW5bbmFt
ZV0gPSB3b3JrZXIKKyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgIGRlZiBjYW5jZWxfd29ya2Vy
KHNlbGYsIHdvcmtlcl9uYW1lKToKKyAgICAgICAgIiIiQXR0ZW1wdCB0byBjYW5jZWwgYSB3b3Jr
ZXIgKGJlc3QtZWZmb3J0KS4gVGhlIHdvcmtlciBtYXkgc3RpbGwgYmUKKyAgICAgICAgcnVubmlu
ZyBhZnRlciB0aGlzIGNhbGwgcmV0dXJucy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NoaWxk
cmVuW3dvcmtlcl9uYW1lXS5jYW5jZWwoKQorCisgICAgZGVmIGpvaW5fd29ya2VyKHNlbGYsIHdv
cmtlcl9uYW1lLCB0aW1lb3V0KToKKyAgICAgICAgIiIiV2FpdCB1bnRpbCB3b3JrZXIgZXhpdHMg
b3IgdGltZW91dCBvY2N1cnMuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9jaGlsZHJlblt3b3Jr
ZXJfbmFtZV0uam9pbih0aW1lb3V0KQorCisgICAgZGVmIHdvcmtlcl9pc19hbGl2ZShzZWxmLCB3
b3JrZXJfbmFtZSk6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSB3b3JrZXIgaXMgc3Rp
bGwgcnVubmluZy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NoaWxkcmVuW3dvcmtlcl9uYW1l
XS5pc0FsaXZlKCkKKworICAgIGRlZiBsb2dfd2VkZ2VkX3dvcmtlcihzZWxmLCB3b3JrZXJfbmFt
ZSwgdGVzdF9uYW1lKToKKyAgICAgICAgIiIiTG9nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZl
biB3b3JrZXIncyBzdGF0ZS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgor
CisgICAgZGVmIGFkZF90aW1lcihzZWxmLCB0b3BpY19uYW1lLCBjYWxsYmFjaywgZGVsYXlfc2Vj
cyk6CisgICAgICAgICIiIkFkZCBhIHRpbWVyIHRoYXQgd2lsbCBmaXJlIGxhdGVyIGR1cmluZyBy
dW5fYWxsX3BlbmRpbmcoKSBvcgorICAgICAgICBydW5fbWVzc2FnZV9sb29wKCkuCisKKyAgICAg
ICAgVGltZXIgY2FsbGJhY2tzIHRha2Ugbm8gYXJndW1lbnRzLCBhbmQgc2hvdWxkIHJldHVybiBU
cnVlIGlmZgorICAgICAgICBsb29wKCkgc2hvdWxkIGV4aXQuIEN1cnJlbnRseSB0aGUgY29kZSBv
bmx5IHN1cHBvcnRzIG9uZQorICAgICAgICB0aW1lciBwZXIgdG9waWMsIGJ1dCwgaW4gb3JkZXIg
dG8gc3VwcG9ydCBwZXJpb2RpYyBldmVudHMsCisgICAgICAgIGEgdGltZXIgY2FuIGJlIGFkZGVk
IGZyb20gaW5zaWRlIHRoZSBjYWxsIGJhY2suIiIiCisgICAgICAgIHRvcGljID0gc2VsZi5fZmlu
ZF90b3BpYyh0b3BpY19uYW1lKQorICAgICAgICBhc3NlcnQodG9waWMudGltZXIgaXMgTm9uZSkK
KyAgICAgICAgdG9waWMudGltZXIgPSBfVGltZXIoY2FsbGJhY2ssIGRlbGF5X3NlY3MpCisKKyAg
ICBkZWYgcG9zdF9tZXNzYWdlKHNlbGYsIHNyYywgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCBi
b2R5PU5vbmUpOgorICAgICAgICAiIiJQb3N0IGEgbWVzc2FnZSB0byB0aGUgYXBwcm9wcmlhdGUg
dG9waWMgcXVldWUuIiIiCisgICAgICAgIGJvZHkgPSBib2R5IG9yIHR1cGxlKCkKKyAgICAgICAg
bWVzc2FnZSA9IF9NZXNzYWdlKHNyYywgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCBib2R5KQor
ICAgICAgICB0b3BpYyA9IHNlbGYuX2ZpbmRfdG9waWModG9waWNfbmFtZSkKKyAgICAgICAgdG9w
aWMucXVldWUucHV0KF9NZXNzYWdlLmR1bXBzKG1lc3NhZ2UpKQorCisgICAgZGVmIHJ1bl9tZXNz
YWdlX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgcmVhZGVyKToKKyAgICAgICAgIiIiTG9vcCBwcm9j
ZXNzaW5nIG1lc3NhZ2VzIGFuZCB0aW1lcnMgdW50aWwgZG9uZS4KKworICAgICAgICAiZG9uZSIg
bWVhbnMgdGhhdCByZWFkZXIuaXNfZG9uZSgpIHJldHVybnMgVHJ1ZSBvciBhIHRpbWVyIGluZGlj
YXRlcworICAgICAgICB0aGF0IHdlJ3JlIGRvbmUuIiIiCisgICAgICAgIHRvcGljID0gc2VsZi5f
ZmluZF90b3BpYyh0b3BpY19uYW1lKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAg
IyBIZXJlIHdlIGRvbid0IGNhcmUgaWYgd2UgZG8gd29yayBpbiB0aGUgdGltZXIuCisgICAgICAg
ICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgXywgZG9uZSA9IHNlbGYuX2NoZWNr
X3RpbWVyKHRvcGljLCBub3cpCisgICAgICAgICAgICBpZiBkb25lIG9yIHJlYWRlci5pc19kb25l
KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICMgUmUtY2hlY2sgdGhl
IHRpbWUsIGluIGNhc2UgdGhlIHRpbWVyIGhhZCBhIHNsb3cgY2FsbGJhY2suCisgICAgICAgICAg
ICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX3RpbWVyX2V4cGly
ZWQodG9waWMsIG5vdyk6CisgICAgICAgICAgICAgICAgZGVsYXkgPSBzZWxmLl90aW1lcl9kZWxh
eSh0b3BpYywgbm93KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAg
cyA9IHRvcGljLnF1ZXVlLmdldChibG9jaz1UcnVlLCB0aW1lb3V0PWRlbGF5KQorICAgICAgICAg
ICAgICAgICAgICBtc2cgPSBfTWVzc2FnZS5sb2FkcyhzKQorICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9kaXNwYXRjaF9tZXNzYWdlKG1zZywgcmVhZGVyKQorICAgICAgICAgICAgICAgIGV4Y2Vw
dCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHJ1bl9h
bGxfcGVuZGluZyhzZWxmLCB0b3BpY19uYW1lLCByZWFkZXIpOgorICAgICAgICAiIiJMb29wIHVu
dGlsIHdlIHJ1biBvdXQgb2Ygc3R1ZmYgdG8gZG8gdy9vIGJsb2NraW5nLgorCisgICAgICAgIFRo
aXMgbWVhbnMgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzIHRvIHByb2Nlc3MgYW5kIG5vIHRpbWVycyBh
cmUgZmlyaW5nCisgICAgICAgIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbmFt
ZS4KKworICAgICAgICBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHdlIGRpZCBhbnl0aGluZyBhdCBh
bGwuIiIiCisgICAgICAgIHRvcGljID0gc2VsZi5fZmluZF90b3BpYyh0b3BpY19uYW1lKQorICAg
ICAgICBkaWRfd29ya19vbl90aGlzX3J1biA9IFRydWUKKyAgICAgICAgZG9uZSA9IHJlYWRlci5p
c19kb25lKCkKKyAgICAgICAgd2hpbGUgZGlkX3dvcmtfb25fdGhpc19ydW4gYW5kIG5vdCBkb25l
OgorICAgICAgICAgICAgZGlkX3dvcmtfb25fdGhpc19ydW4sIGRvbmUgPSBzZWxmLl9jaGVja190
aW1lcih0b3BpYywgdGltZS50aW1lKCkpCisgICAgICAgICAgICBkb25lID0gZG9uZSBvciByZWFk
ZXIuaXNfZG9uZSgpCisgICAgICAgICAgICBpZiBkb25lOgorICAgICAgICAgICAgICAgIGJyZWFr
CisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzID0gdG9waWMucXVldWUuZ2V0
KGJsb2NrPUZhbHNlKQorICAgICAgICAgICAgICAgIG1zZyA9IF9NZXNzYWdlLmxvYWRzKHMpCisg
ICAgICAgICAgICAgICAgc2VsZi5fZGlzcGF0Y2hfbWVzc2FnZShtc2csIHJlYWRlcikKKyAgICAg
ICAgICAgICAgICBkaWRfd29ya19vbl90aGlzX3J1biA9IFRydWUKKyAgICAgICAgICAgICAgICBk
b25lID0gcmVhZGVyLmlzX2RvbmUoKQorICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5Ogor
ICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gZG9uZQorCisgICAgZGVmIF9j
aGVja190aW1lcihzZWxmLCB0b3BpYywgbm93KToKKyAgICAgICAgIiIiQ2hlY2sgaWYgYW55IHRp
bWVycyBuZWVkIHRvIGZpcmUsIGFuZCBmaXJlIHRoZW0uCisKKyAgICAgICAgUmV0dXJucyBhIHR1
cGxlIG9mICh3aGV0aGVyIGEgdGltZXIgZmlyZWQsIHdoZXRoZXIgYSB0aW1lcgorICAgICAgICAg
ICAgcmV0dXJuZWQgVHJ1ZSB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCBiYWlsIG91dCBvZiB0
aGUgYQorICAgICAgICAgICAgbWVzc2FnZSBsb29wIGlmIG5lY2Vzc2FyeSkuIiIiCisgICAgICAg
IGlmIHNlbGYuX3RpbWVyX2V4cGlyZWQodG9waWMsIG5vdyk6CisgICAgICAgICAgICB0ID0gdG9w
aWMudGltZXIKKyAgICAgICAgICAgIHRvcGljLnRpbWVyID0gTm9uZQorICAgICAgICAgICAgZG9u
ZSA9IHQuY2FsbGJhY2soKQorICAgICAgICAgICAgcmV0dXJuIFRydWUsIGRvbmUKKyAgICAgICAg
cmV0dXJuIEZhbHNlLCBGYWxzZQorCisgICAgZGVmIF90aW1lcl9kZWxheShzZWxmLCB0b3BpYywg
bm93KToKKyAgICAgICAgIiIiIlJldHVybiB0aGUgdGltZSAoaW4gc2VjcykgZnJvbSAnbm93JyB1
bnRpbCB0aGUgdGltZXIgZmlyZXMuCisKKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBtYXkgYmUg
bmVnYXRpdmUsIGluZGljYXRpbmcgdGhhdCB0aGUgdGltZXIgaGFzCisgICAgICAgIGV4cGlyZWQs
IG9yIE5vbmUsIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbm8gdGltZXIgb24gdGhlIHRvcGlj
CisgICAgICAgIChkZWxheSBmb3JldmVyKS4iIiIKKyAgICAgICAgdCA9IHRvcGljLnRpbWVyCisg
ICAgICAgIGlmIHQ6CisgICAgICAgICAgICByZXR1cm4gdC5kZWFkbGluZSAtIG5vdworICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgZGVmIF90aW1lcl9leHBpcmVkKHNlbGYsIHRvcGljLCBub3cp
OgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0aGUgdG9waWMgaGFzIGEgdGltZXIgd2hvc2Ug
ZGVhZGxpbmUgaGFzIHBhc3NlZC4iIiIKKyAgICAgICAgdCA9IHRvcGljLnRpbWVyCisgICAgICAg
IHJldHVybiAodCBpcyBub3QgTm9uZSkgYW5kIG5vdyA+PSB0LmRlYWRsaW5lCisKKyAgICBkZWYg
X2Rpc3BhdGNoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgcmVhZGVyKToKKyAgICAgICAgaWYgbm90
IGhhc2F0dHIocmVhZGVyLCAnaGFuZGxlXycgKyBtZXNzYWdlLm5hbWUpOgorICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICIlczogcmVjZWl2ZWQgbWVzc2FnZSAn
JXMnIGl0IGNvdWxkbid0IGhhbmRsZSIgJQorICAgICAgICAgICAgICAgKHJlYWRlci5uYW1lKCks
IG1lc3NhZ2UubmFtZSkpCisgICAgICAgIG9wdGFyZ3MgPSBtZXNzYWdlLmJvZHkKKyAgICAgICAg
bWVzc2FnZV9oYW5kbGVyID0gZ2V0YXR0cihyZWFkZXIsICdoYW5kbGVfJyArIG1lc3NhZ2UubmFt
ZSkKKyAgICAgICAgbWVzc2FnZV9oYW5kbGVyKG1lc3NhZ2Uuc3JjLCAqb3B0YXJncykKKworCitj
bGFzcyBfSW5saW5lV29ya2VyQ29ubmVjdGlvbihfV29ya2VyQ29ubmVjdGlvbkludGVyZmFjZSk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29ya2VyX2NsYXNzLCB3b3JrZXJfbnVt
YmVyKToKKyAgICAgICAgc2VsZi5fYnJva2VyID0gYnJva2VyCisgICAgICAgIHNlbGYuX3BvcnQg
PSBicm9rZXIuX3BvcnQKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IGJyb2tlci5fb3B0aW9ucwor
ICAgICAgICBzZWxmLl93b3JrZXIgPSB3b3JrZXJfY2xhc3Moc2VsZiwgd29ya2VyX251bWJlcikK
KworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl93b3JrZXIuY2Fu
Y2VsKCkKKworICAgIGRlZiBpc0FsaXZlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYnJv
a2VyLl9tYW5hZ2VyCisKKyAgICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgYXNz
ZXJ0IG5vdCBzZWxmLmlzQWxpdmUoKQorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLl93b3JrZXIubmFtZSgpCisKKyAgICBkZWYgb3B0aW9ucyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2Jyb2tlci5fb3B0aW9ucworCisgICAgZGVmIHBvcnQoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9icm9rZXIuX3BvcnQKKworICAgIGRlZiBwb3N0X21lc3NhZ2Uo
c2VsZiwgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdzKToKKyAgICAgICAgc2VsZi5fYnJva2Vy
LnBvc3RfbWVzc2FnZShzZWxmLm5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX2Jyb2tlci5fd29ya2VyX3JlcGx5X3RvcGljLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9uYW1lLCBtZXNzYWdlX2FyZ3MpCisKKyAgICBk
ZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLl93b3JrZXIucnVuKCkKIAogICAgIGRlZiBydW5f
bWVzc2FnZV9sb29wKHNlbGYpOgotICAgICAgICB0aHJlYWQgPSBzZWxmLl90aHJlYWRzKClbMF0K
LSAgICAgICAgdGhyZWFkLnJ1bl9pbl9tYWluX3RocmVhZChzZWxmLl90ZXN0X3J1bm5lciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3J1bm5lci5fY3VycmVu
dF9yZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIudXBkYXRlKCkKKyAg
ICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3Aoc2VsZi5fYnJva2VyLl93b3JrZXJf
cnVuX3RvcGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3dvcmtlcikKIAorICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgcGFzcwogCi1jbGFzcyBN
dWx0aVRocmVhZGVkQnJva2VyKFdvcmtlck1lc3NhZ2VCcm9rZXIpOgotICAgIGRlZiBfc3RhcnRf
d29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIsIHdvcmtlcl9uYW1lKToKLSAgICAgICAgdGhyZWFk
ID0gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFNoZWxsVGhyZWFkKHNlbGYuX3BvcnQsCi0g
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLCB3b3JrZXJfbnVtYmVyLCB3b3JrZXJfbmFtZSwKLSAg
ICAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyLl9jdXJyZW50X2ZpbGVuYW1lX3F1ZXVlLAotICAg
ICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXIuX3Jlc3VsdF9xdWV1ZSkKLSAgICAgICAgdGhyZWFk
LnN0YXJ0KCkKLSAgICAgICAgcmV0dXJuIHRocmVhZAorICAgIGRlZiB5aWVsZF90b19icm9rZXIo
c2VsZik6CisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoc2VsZi5fYnJva2Vy
Ll93b3JrZXJfcmVwbHlfdG9waWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fYnJva2VyLl9tYW5hZ2VyKQorCisKK2NsYXNzIF9JbmxpbmVCcm9rZXIoX1dv
cmtlck1lc3NhZ2VCcm9rZXIpOgorICAgIF9XT1JLRVJfQ09OTkVDVElPTl9DTEFTUyA9IF9Jbmxp
bmVXb3JrZXJDb25uZWN0aW9uCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9u
cywgd29ya2VyX2NsYXNzLCB3b3JrZXJfcnVuX3RvcGljLAorICAgICAgICAgICAgICAgICB3b3Jr
ZXJfcmVwbHlfdG9waWMpOgorICAgICAgICBfV29ya2VyTWVzc2FnZUJyb2tlci5fX2luaXRfXyhz
ZWxmLCBwb3J0LCBvcHRpb25zLCB3b3JrZXJfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdvcmtlcl9ydW5fdG9waWMsIHdvcmtlcl9yZXBseV90b3BpYykKKwor
ICAgICAgICAjIFRoZSBtYW5hZ2VyIGlzIG9ubHkgdmFsaWQgd2hlbiB0aGUgaW5saW5lZCB3b3Jr
ZXIgaXMgInJ1bm5pbmciLAorICAgICAgICAjIG1lYW5pbmcgdGhhdCB3ZSBhcmUgc2VydmljaW5n
IGl0cyBtZXNzYWdlIHF1ZXVlLiBXZSBuZWVkIHRoaXMKKyAgICAgICAgIyB2YXJpYWJsZSBzbyB5
aWVsZF90b19icm9rZXIoKSB3aWxsIHdvcmsgcHJvcGVybHkuCisgICAgICAgIHNlbGYuX21hbmFn
ZXIgPSBOb25lCisKKyAgICBkZWYgbG9nX3dlZGdlZF93b3JrZXIoc2VsZiwgd29ya2VyX25hbWUs
IHRlc3RfbmFtZSk6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJfSW5saW5lQnJva2Vy
LmxvZ193ZWRnZWRfd29ya2VyKCkgY2FsbGVkIikKKworICAgIGRlZiBydW5fbWVzc2FnZV9sb29w
KHNlbGYsIHRvcGljX25hbWUsIHJlYWRlcik6CisgICAgICAgICMgV2UgbmVlZCBzcGVjaWFsIGxv
Z2ljIGluIHRoZSBpbmxpbmUgY2FzZSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdAorICAgICAgICAj
IHRoZSBtYW5hZ2VyIGFuZCB3b3JrZXJzIGFjdHVhbGx5IGJvdGggZ2V0IHRvIHJ1biBwcm9wZXJs
eS4gVGhlcmUncworICAgICAgICAjIHByb2JhYmx5IGEgZmV3IHdheXMgd2UgY291bGQgYWNjb21w
bGlzaCB0aGlzLCBidXQgZm9yIG5vdyB3ZQorICAgICAgICAjIGhhdmUgdGhlIG1hbmFnZXIgcnVu
KCkgdGhlIHdvcmtlciBpbmxpbmUgdG8gY29tcGxldGlvbiwgYW5kIHRoZW4KKyAgICAgICAgIyBy
dW4gYW55IHBlbmRpbmcgZXZlbnRzIG9uIHRoZSBtYW5hZ2VyIHRvcGljLiBXZSBjb3VudCBvbiB0
aGUKKyAgICAgICAgIyB3b3JrZXIgY2FsbGluZyB5aWVsZF90b19icm9rZXIoKSBwZXJpb2RpY2Fs
bHkgaW4gb3JkZXIgdG8gbWFrZQorICAgICAgICAjIHN1cmUgdGhlIG1hbmFnZXIgZG9lc24ndCBn
ZXQgc3RhcnZlZC4KKyAgICAgICAgaWYgdG9waWNfbmFtZSA9PSBzZWxmLl93b3JrZXJfcmVwbHlf
dG9waWM6CisgICAgICAgICAgICAjIE1hbmFnZXIuIERvIGFzIGp1c3QgZGVzY3JpYmVkLgorICAg
ICAgICAgICAgY2hpbGRyZW4gPSBzZWxmLl9jaGlsZHJlbi52YWx1ZXMoKQorICAgICAgICAgICAg
aWYgY2hpbGRyZW46CisgICAgICAgICAgICAgICAgc2VsZi5fbWFuYWdlciA9IHJlYWRlcgorICAg
ICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5bMF0ucnVuKCkK
KyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYW5h
Z2VyID0gTm9uZQorCisgICAgICAgICAgICB0b3BpYyA9IHNlbGYuX2ZpbmRfdG9waWModG9waWNf
bmFtZSkKKyAgICAgICAgICAgIHdoaWxlIHRvcGljLnRpbWVyIG9yIG5vdCB0b3BpYy5xdWV1ZS5l
bXB0eSgpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucnVuX2FsbF9wZW5kaW5nKHRvcGljX25h
bWUsIHJlYWRlcik6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAg
ICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgIGlmIHRvcGljLnRpbWVyIGFuZCB0
b3BpYy50aW1lci5kZWFkbGluZSA+IG5vdzoKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVl
cCh0b3BpYy50aW1lci5kZWFkbGluZSAtIG5vdykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICMgVGhpcyBpcyBhIHdvcmtlci4gSW4gdGhlIGlubGluZSBjYXNlLCBhIHdvcmtlciBuZXZlciBi
bG9ja3MsCisgICAgICAgICAgICAjIHNvIHdlIGNhbiBydW4gdGhlIHJlZ3VsYXIgbG9vcCBjb2Rl
LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBGSVhNRTogV2UgZG9uJ3QgYWN0dWFsbHkg
ZW5mb3JjZSB0aGlzLCBzbyBhIGJ1Z2d5IHdvcmtlciBjb3VsZAorICAgICAgICAgICAgIyBkZWFk
bG9jayB0aGUgcHJvY2Vzcy4KKworICAgICAgICAgICAgIyBFbnN1cmUgdGhpcyBpcyBiZWluZyBj
YWxsZWQgb25seSBmcm9tIGluc2lkZSB0aGUgbWFuYWdlciBsb29wLgorICAgICAgICAgICAgYXNz
ZXJ0IHNlbGYuX21hbmFnZXIgaXMgbm90IE5vbmUKKworICAgICAgICAgICAgX1dvcmtlck1lc3Nh
Z2VCcm9rZXIucnVuX21lc3NhZ2VfbG9vcChzZWxmLCB0b3BpY19uYW1lLCByZWFkZXIpCisKKwor
Y2xhc3MgX1RocmVhZGVkV29ya2VyQ29ubmVjdGlvbihfV29ya2VyQ29ubmVjdGlvbkludGVyZmFj
ZSwgdGhyZWFkaW5nLlRocmVhZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgd29y
a2VyX2NsYXNzLCB3b3JrZXJfbnVtYmVyKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2lu
aXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9icm9rZXIgPSBicm9rZXIKKyAgICAgICAgc2VsZi5f
cG9ydCA9IGJyb2tlci5fcG9ydAorICAgICAgICBzZWxmLl9vcHRpb25zID0gYnJva2VyLl9vcHRp
b25zCisgICAgICAgIHNlbGYuX3dvcmtlciA9IHdvcmtlcl9jbGFzcyhzZWxmLCB3b3JrZXJfbnVt
YmVyKQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgc2VsZi5fd29ya2VyLmNhbmNl
bCgpCisKKyAgICBkZWYgaXNBbGl2ZShzZWxmKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5p
c0FsaXZlKHNlbGYpCisKKyAgICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgdGhy
ZWFkaW5nLlRocmVhZC5qb2luKHNlbGYsIHRpbWVvdXQpCisKKyAgICBkZWYgbmFtZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3dvcmtlci5uYW1lKCkKKworICAgIGRlZiBvcHRpb25zKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fYnJva2VyLl9vcHRpb25zCisKKyAgICBkZWYgcG9y
dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Jyb2tlci5fcG9ydAorCisgICAgZGVmIHBv
c3RfbWVzc2FnZShzZWxmLCBtZXNzYWdlX25hbWUsICptZXNzYWdlX2FyZ3MpOgorICAgICAgICBz
ZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKHNlbGYubmFtZSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fYnJva2VyLl93b3JrZXJfcmVwbHlfdG9waWMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX25hbWUsIG1lc3NhZ2VfYXJn
cykKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICMgRklYTUU6IHdlIGNhbiByZW1vdmUg
dGhpcyBvbmNlIGV2ZXJ5b25lIGlzIG9uIDIuNi4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2Vs
ZiwgJ2lkZW50Jyk6CisgICAgICAgICAgICBzZWxmLmlkZW50ID0gdGhyZWFkLmdldF9pZGVudCgp
CisgICAgICAgIHNlbGYuX3dvcmtlci5ydW4oKQogCiAgICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Ao
c2VsZik6Ci0gICAgICAgIHRocmVhZHMgPSBzZWxmLl90aHJlYWRzKCkKLQotICAgICAgICAjIExv
b3AgdGhyb3VnaCBhbGwgdGhlIHRocmVhZHMgd2FpdGluZyBmb3IgdGhlbSB0byBmaW5pc2guCi0g
ICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQotICAgICAgICB3aGlsZSBzb21lX3Ro
cmVhZF9pc19hbGl2ZToKLSAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gRmFsc2UK
LSAgICAgICAgICAgIHQgPSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgZm9yIHRocmVhZCBpbiB0
aHJlYWRzOgotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9pbmZvID0gdGhyZWFkLmV4Y2VwdGlv
bl9pbmZvKCkKLSAgICAgICAgICAgICAgICBpZiBleGNlcHRpb25faW5mbyBpcyBub3QgTm9uZToK
LSAgICAgICAgICAgICAgICAgICAgIyBSZS1yYWlzZSB0aGUgdGhyZWFkJ3MgZXhjZXB0aW9uIGhl
cmUgdG8gbWFrZSBpdAotICAgICAgICAgICAgICAgICAgICAjIGNsZWFyIHRoYXQgdGVzdGluZyB3
YXMgYWJvcnRlZC4gT3RoZXJ3aXNlLAotICAgICAgICAgICAgICAgICAgICAjIHRoZSB0ZXN0cyB0
aGF0IGRpZCBub3QgcnVuIHdvdWxkIGJlIGFzc3VtZWQKLSAgICAgICAgICAgICAgICAgICAgIyB0
byBoYXZlIHBhc3NlZC4KLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm9b
MF0sIGV4Y2VwdGlvbl9pbmZvWzFdLCBleGNlcHRpb25faW5mb1syXQotCi0gICAgICAgICAgICAg
ICAgaWYgdGhyZWFkLmlzQWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgc29tZV90aHJlYWRf
aXNfYWxpdmUgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIG5leHRfdGltZW91dCA9IHRocmVh
ZC5uZXh0X3RpbWVvdXQoKQotICAgICAgICAgICAgICAgICAgICBpZiBuZXh0X3RpbWVvdXQgYW5k
IHQgPiBuZXh0X3RpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dfd2VkZ2VkX3dv
cmtlcih0aHJlYWQuZ2V0TmFtZSgpLCB0aHJlYWQuaWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRocmVhZC5jbGVhcl9uZXh0X3RpbWVvdXQoKQotCi0gICAgICAgICAgICBzZWxmLl90ZXN0
X3J1bm5lci51cGRhdGUoKQotCi0gICAgICAgICAgICBpZiBzb21lX3RocmVhZF9pc19hbGl2ZToK
LSAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0KLSAgICBkZWYgY2FuY2VsX3dvcmtl
cnMoc2VsZik6Ci0gICAgICAgIHRocmVhZHMgPSBzZWxmLl90aHJlYWRzKCkKLSAgICAgICAgZm9y
IHRocmVhZCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgdGhyZWFkLmNhbmNlbCgpCi0KLQotZGVm
IGxvZ193ZWRnZWRfd29ya2VyKG5hbWUsIGlkKToKLSAgICAiIiJMb2cgaW5mb3JtYXRpb24gYWJv
dXQgdGhlIGdpdmVuIHdvcmtlciBzdGF0ZS4iIiIKLSAgICBzdGFjayA9IF9maW5kX3RocmVhZF9z
dGFjayhpZCkKLSAgICBhc3NlcnQoc3RhY2sgaXMgbm90IE5vbmUpCi0gICAgX2xvZy5lcnJvcigi
IikKLSAgICBfbG9nLmVycm9yKCIlcyAodGlkICVkKSBpcyB3ZWRnZWQiICUgKG5hbWUsIGlkKSkK
LSAgICBfbG9nX3N0YWNrKHN0YWNrKQotICAgIF9sb2cuZXJyb3IoIiIpCi0KLQotZGVmIF9maW5k
X3RocmVhZF9zdGFjayhpZCk6Ci0gICAgIiIiUmV0dXJucyBhIHN0YWNrIG9iamVjdCB0aGF0IGNh
biBiZSB1c2VkIHRvIGR1bXAgYSBzdGFjayB0cmFjZSBmb3IKLSAgICB0aGUgZ2l2ZW4gdGhyZWFk
IGlkIChvciBOb25lIGlmIHRoZSBpZCBpcyBub3QgZm91bmQpLiIiIgotICAgIGZvciB0aHJlYWRf
aWQsIHN0YWNrIGluIHN5cy5fY3VycmVudF9mcmFtZXMoKS5pdGVtcygpOgotICAgICAgICBpZiB0
aHJlYWRfaWQgPT0gaWQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RhY2sKLSAgICByZXR1cm4gTm9u
ZQotCi0KLWRlZiBfbG9nX3N0YWNrKHN0YWNrKToKLSAgICAiIiJMb2cgYSBzdGFjayB0cmFjZSB0
byBsb2cuZXJyb3IoKS4iIiIKLSAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBp
biB0cmFjZWJhY2suZXh0cmFjdF9zdGFjayhzdGFjayk6Ci0gICAgICAgIF9sb2cuZXJyb3IoJ0Zp
bGU6ICIlcyIsIGxpbmUgJWQsIGluICVzJyAlIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKSkKLSAg
ICAgICAgaWYgbGluZToKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJyAgJXMnICUgbGluZS5zdHJp
cCgpKQorICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcChzZWxmLl9icm9rZXIu
X3dvcmtlcl9ydW5fdG9waWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fd29ya2VyKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICB0aHJlYWRp
bmcuVGhyZWFkLnN0YXJ0KHNlbGYpCisKKyAgICBkZWYgeWllbGRfdG9fYnJva2VyKHNlbGYpOgor
ICAgICAgICAjIFRoZXJlJ3Mgbm8gbmVlZCB0byB5aWVsZCB3aXRoIHRocmVhZHMuCisgICAgICAg
IHBhc3MKKworCitjbGFzcyBfTXVsdGlUaHJlYWRlZEJyb2tlcihfV29ya2VyTWVzc2FnZUJyb2tl
cik6CisgICAgX1dPUktFUl9DT05ORUNUSU9OX0NMQVNTID0gX1RocmVhZGVkV29ya2VyQ29ubmVj
dGlvbgorCisgICAgZGVmIGxvZ193ZWRnZWRfd29ya2VyKHNlbGYsIHdvcmtlcl9uYW1lLCB0ZXN0
X25hbWUpOgorICAgICAgICB0aHJlYWQgPSBzZWxmLl9jaGlsZHJlblt3b3JrZXJfbmFtZV0KKyAg
ICAgICAgdGlkID0gdGhyZWFkLmlkZW50CisgICAgICAgIHN0YWNrID0gc2VsZi5fZmluZF90aHJl
YWRfc3RhY2sodGlkKQorICAgICAgICBhc3NlcnQoc3RhY2sgaXMgbm90IE5vbmUpCisgICAgICAg
IF9sb2cuZXJyb3IoIiVzICh0aWQgJWQpIGlzIHdlZGdlZCBvbiB0ZXN0ICVzIiAlCisgICAgICAg
ICAgICAgICAgICAgKHdvcmtlcl9uYW1lLCB0aWQsIHRlc3RfbmFtZSkpCisgICAgICAgIHNlbGYu
X2xvZ19zdGFjayhzdGFjaykKKworICAgIGRlZiBfZmluZF90aHJlYWRfc3RhY2soc2VsZiwgdGlk
KToKKyAgICAgICAgIiIiUmV0dXJucyBhIHN0YWNrIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRv
IGR1bXAgYSBzdGFjayB0cmFjZSBmb3IKKyAgICAgICAgdGhlIGdpdmVuIHRocmVhZCBpZCAob3Ig
Tm9uZSBpZiB0aGUgaWQgaXMgbm90IGZvdW5kKS4iIiIKKyAgICAgICAgZm9yIHRocmVhZF9pZCwg
c3RhY2sgaW4gc3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKCk6CisgICAgICAgICAgICBpZiB0
aHJlYWRfaWQgPT0gdGlkOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGFjaworICAgICAgICBy
ZXR1cm4gTm9uZQorCisgICAgZGVmIF9sb2dfc3RhY2soc2VsZiwgc3RhY2spOgorICAgICAgICAi
IiJMb2cgYSBzdGFjayB0cmFjZSB0byBsb2cuZXJyb3IoKS4iIiIKKyAgICAgICAgZm9yIGZpbGVu
YW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3RhY2sp
OgorICAgICAgICAgICAgX2xvZy5lcnJvcignRmlsZTogIiVzIiwgbGluZSAlZCwgaW4gJXMnICUg
KGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpKQorICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAg
ICAgICAgICBfbG9nLmVycm9yKCcgICVzJyAlIGxpbmUuc3RyaXAoKSkKKworCisjCisjIEZJWE1F
OiBTaG91bGQgd2UgdXNlIG11bHRpcGxlIGluaGVyaXRhbmNlIGhlcmUgdG8gc2hhcmUgYWxsIHRo
ZSBjb2RlCisjIHdpdGggX011bHRpVGhyZWFkZWRCcm9rZXI/IFRoZXJlIGlzIGEgbG90IG9mIGR1
cGxpY2F0aW9uIG90aGVyd2lzZS4KKyMKKworY2xhc3MgX011bHRpUHJvY2Vzc0Jyb2tlcihfV29y
a2VyTWVzc2FnZUJyb2tlcik6CisgICAgY2xhc3MgX011bHRpUHJvY2Vzc1dvcmtlckNvbm5lY3Rp
b24obXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwg
YnJva2VyLCB3b3JrZXJfY2xhc3MsIHdvcmtlcl9udW1iZXIpOgorICAgICAgICAgICAgbXVsdGlw
cm9jZXNzaW5nLlByb2Nlc3MuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tl
ciA9IGJyb2tlcgorICAgICAgICAgICAgc2VsZi5fcG9ydCA9IGJyb2tlci5fcG9ydAorICAgICAg
ICAgICAgc2VsZi5fb3B0aW9ucyA9IGJyb2tlci5fb3B0aW9ucworICAgICAgICAgICAgc2VsZi5f
d29ya2VyID0gd29ya2VyX2NsYXNzKHNlbGYsIHdvcmtlcl9udW1iZXIpCisKKyAgICAgICAgZGVm
IGNhbmNlbChzZWxmKToKKyAgICAgICAgICAgIHNlbGYudGVybWluYXRlKCkKKworICAgICAgICBk
ZWYgaXNBbGl2ZShzZWxmKToKKyAgICAgICAgICAgICMgRklYTUU6IFJlbmFtZSB3aGVuIGV2ZXJ5
b25lIGlzIG9uIDIuNgorICAgICAgICAgICAgc2VsZi5pc19hbGl2ZSgpCisKKyAgICAgICAgZGVm
IGpvaW4oc2VsZiwgdGltZW91dCk6CisgICAgICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vz
cy5qb2luKHNlbGYsIHRpbWVvdXQpCisKKyAgICAgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5fd29ya2VyLm5hbWUoKQorCisgICAgICAgIGRlZiBvcHRpb25zKHNl
bGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Jyb2tlci5fb3B0aW9ucworCisgICAgICAg
IGRlZiBwb3J0KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Jyb2tlci5fcG9ydAor
CisgICAgICAgIGRlZiBwb3N0X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9h
cmdzKToKKyAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2Uoc2VsZi5uYW1lKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5fd29y
a2VyX3JlcGx5X3RvcGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlX25hbWUsIG1lc3NhZ2VfYXJncykKKworICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAg
ICAgICAgICAgc2VsZi5fd29ya2VyLnJ1bigpCisKKyAgICAgICAgZGVmIHJ1bl9tZXNzYWdlX2xv
b3Aoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcChzZWxm
Ll9icm9rZXIuX3dvcmtlcl9ydW5fdG9waWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl93b3JrZXIpCisKKyAgICAgICAgZGVmIHlpZWxkX3RvX2Jyb2tl
cihzZWxmKToKKyAgICAgICAgICAgICMgVGhlcmUncyBubyBuZWVkIHRvIHlpZWxkIHdpdGggbXVs
dGlwbGUgcHJvY2Vzc2VzLgorICAgICAgICAgICAgcGFzcworCisgICAgX1dPUktFUl9DT05ORUNU
SU9OX0NMQVNTID0gX011bHRpUHJvY2Vzc1dvcmtlckNvbm5lY3Rpb24KKworICAgIGRlZiBhZGRf
dG9waWMoc2VsZiwgdG9waWNfbmFtZSk6CisgICAgICAgIGlmIG5vdCB0b3BpY19uYW1lIGluIHNl
bGYuX3RvcGljczoKKyAgICAgICAgICAgIHNlbGYuX3RvcGljc1t0b3BpY19uYW1lXSA9IF9Ub3Bp
YyhtdWx0aXByb2Nlc3NpbmcuUXVldWUoKSkKKworICAgIGRlZiBsb2dfd2VkZ2VkX3dvcmtlcihz
ZWxmLCB3b3JrZXJfbmFtZSwgdGVzdF9uYW1lKToKKyAgICAgICAgcHJvYyA9IHNlbGYuX2NoaWxk
cmVuW3dvcmtlcl9uYW1lXQorICAgICAgICBfbG9nLmVycm9yKCIlcyAocGlkICVkKSBpcyB3ZWRn
ZWQgb24gdGVzdCAlcyIgJQorICAgICAgICAgICAgICAgICAgICh3b3JrZXJfbmFtZSwgcHJvYy5w
aWQsIHRlc3RfbmFtZSkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9tZXNzYWdlX2Jyb2tlcl91bml0dGVzdC5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5CmluZGV4IDZmMDRmZDM1NTE4YTA0ZWJkNjkxOWZm
OGE5NzYxM2NmNGM1YmUxZjQuLmZlNzI5ZjU1MDY2OTU4Y2Q0MDg4NDM1YjA2NGNhZWExZmFiMzg0
ZTAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL21lc3NhZ2VfYnJva2VyX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL21lc3NhZ2Vf
YnJva2VyX3VuaXR0ZXN0LnB5CkBAIC0yNywxNTYgKzI3LDMzOCBAQAogIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
CiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IG9wdHBhcnNl
CiBpbXBvcnQgUXVldWUKIGltcG9ydCBzeXMKLWltcG9ydCB0aHJlYWQKLWltcG9ydCB0aHJlYWRp
bmcKLWltcG9ydCB0aW1lCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHdl
YmtpdHB5LmNvbW1vbiBpbXBvcnQgYXJyYXlfc3RyZWFtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKLWZyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgbW9j
a3Rvb2wKLQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHJ1bl93ZWJraXRfdGVz
dHMKLQotaW1wb3J0IG1lc3NhZ2VfYnJva2VyCi0KLQotY2xhc3MgVGVzdFRocmVhZCh0aHJlYWRp
bmcuVGhyZWFkKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRlZF9xdWV1ZSwgc3RvcHBp
bmdfcXVldWUpOgotICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCi0gICAg
ICAgIHNlbGYuX3RocmVhZF9pZCA9IE5vbmUKLSAgICAgICAgc2VsZi5fc3RhcnRlZF9xdWV1ZSA9
IHN0YXJ0ZWRfcXVldWUKLSAgICAgICAgc2VsZi5fc3RvcHBpbmdfcXVldWUgPSBzdG9wcGluZ19x
dWV1ZQotICAgICAgICBzZWxmLl90aW1lb3V0ID0gRmFsc2UKLSAgICAgICAgc2VsZi5fdGltZW91
dF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2luZm8gPSBO
b25lCi0KLSAgICBkZWYgaWQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl90aHJlYWRfaWQK
LQotICAgIGRlZiBnZXROYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIndvcmtlci0wIgotCi0g
ICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5fY292ZXJlZF9ydW4oKQotCi0gICAgZGVm
IF9jb3ZlcmVkX3J1bihzZWxmKToKLSAgICAgICAgIyBGSVhNRTogdGhpcyBpcyBhIHNlcGFyYXRl
IHJvdXRpbmUgdG8gd29yayBhcm91bmQgYSBidWcKLSAgICAgICAgIyBpbiBjb3ZlcmFnZTogc2Vl
IGh0dHA6Ly9iaXRidWNrZXQub3JnL25lZC9jb3ZlcmFnZXB5L2lzc3VlLzg1LgotICAgICAgICBz
ZWxmLl90aHJlYWRfaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKLSAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgc2VsZi5fc3RhcnRlZF9xdWV1ZS5wdXQoJycpCi0gICAgICAgICAgICBtc2cgPSBzZWxm
Ll9zdG9wcGluZ19xdWV1ZS5nZXQoKQotICAgICAgICAgICAgaWYgbXNnID09ICdLZXlib2FyZElu
dGVycnVwdCc6Ci0gICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAg
ICAgICAgIGVsaWYgbXNnID09ICdFeGNlcHRpb24nOgotICAgICAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoKQotICAgICAgICAgICAgZWxpZiBtc2cgPT0gJ1RpbWVvdXQnOgotICAgICAgICAg
ICAgICAgIHNlbGYuX3RpbWVvdXQgPSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5fdGltZW91
dF9xdWV1ZS5nZXQoKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLl9leGNlcHRp
b25faW5mbyA9IHN5cy5leGNfaW5mbygpCi0KLSAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6
Ci0gICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb25faW5mbwotCi0gICAgZGVmIG5leHRfdGlt
ZW91dChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fdGltZW91dDoKLSAgICAgICAgICAgIHNlbGYu
X3RpbWVvdXRfcXVldWUucHV0KCdkb25lJykKLSAgICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUo
KSAtIDEwCi0gICAgICAgIHJldHVybiB0aW1lLnRpbWUoKQotCi0gICAgZGVmIGNsZWFyX25leHRf
dGltZW91dChzZWxmKToKLSAgICAgICAgc2VsZi5fbmV4dF90aW1lb3V0ID0gTm9uZQotCi1jbGFz
cyBUZXN0SGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBh
c3RyZWFtKToKLSAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCi0gICAgICAg
IHNlbGYuX3N0cmVhbSA9IGFzdHJlYW0KLQotICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6Ci0g
ICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZShzZWxmLmZvcm1hdChyZWNvcmQpKQotCi0KLWNsYXNz
IE11bHRpVGhyZWFkZWRCcm9rZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBjbGFzcyBN
b2NrVGVzdFJ1bm5lcihvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAg
ICAgICAgICBwYXNzCi0KLSAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgICAgICBw
YXNzCi0KLSAgICAgICAgZGVmIHVwZGF0ZShzZWxmKToKLSAgICAgICAgICAgIHBhc3MKLQotICAg
IGRlZiBydW5fb25lX3RocmVhZChzZWxmLCBtc2cpOgotICAgICAgICBydW5uZXIgPSBzZWxmLk1v
Y2tUZXN0UnVubmVyKCkKLSAgICAgICAgcG9ydCA9IE5vbmUKLSAgICAgICAgb3B0aW9ucyA9IG1v
Y2t0b29sLk1vY2tPcHRpb25zKGNoaWxkX3Byb2Nlc3Nlcz0nMScpCi0gICAgICAgIHN0YXJ0aW5n
X3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBzdG9wcGluZ19xdWV1ZSA9IFF1ZXVlLlF1
ZXVlKCkKLSAgICAgICAgYnJva2VyID0gbWVzc2FnZV9icm9rZXIuTXVsdGlUaHJlYWRlZEJyb2tl
cihwb3J0LCBvcHRpb25zKQotICAgICAgICBicm9rZXIuX3Rlc3RfcnVubmVyID0gcnVubmVyCi0g
ICAgICAgIGNoaWxkX3RocmVhZCA9IFRlc3RUaHJlYWQoc3RhcnRpbmdfcXVldWUsIHN0b3BwaW5n
X3F1ZXVlKQotICAgICAgICBicm9rZXIuX3dvcmtlcnNbJ3dvcmtlci0wJ10gPSBtZXNzYWdlX2Jy
b2tlci5fV29ya2VyU3RhdGUoJ3dvcmtlci0wJykKLSAgICAgICAgYnJva2VyLl93b3JrZXJzWyd3
b3JrZXItMCddLnRocmVhZCA9IGNoaWxkX3RocmVhZAotICAgICAgICBjaGlsZF90aHJlYWQuc3Rh
cnQoKQotICAgICAgICBzdGFydGVkX21zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCi0gICAgICAg
IHN0b3BwaW5nX3F1ZXVlLnB1dChtc2cpCi0gICAgICAgIHJldHVybiBicm9rZXIucnVuX21lc3Nh
Z2VfbG9vcCgpCi0KLSAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgaW50ZXJydXB0
ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCcnKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlu
dGVycnVwdGVkKQotCi0gICAgZGVmIHRlc3RfaW50ZXJydXB0KHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgc2VsZi5ydW5fb25lX3RocmVhZCwgJ0tl
eWJvYXJkSW50ZXJydXB0JykKLQotICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisKK2ltcG9y
dCBtZXNzYWdlX2Jyb2tlcjIgYXMgbWVzc2FnZV9icm9rZXIKKworCitkZWYgbWFrZV93b3JrZXJf
Y2xhc3Moc3RhcnRpbmdfcXVldWU9Tm9uZSwgc3RvcHBpbmdfcXVldWU9Tm9uZSwgbXNnPSdkb25l
Jyk6CisgICAgY2xhc3MgVGVzdFdvcmtlcihtZXNzYWdlX2Jyb2tlci5DbGllbnRJbnRlcmZhY2Up
OgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCB3b3JrZXJfbnVtYmVyKToKKyAg
ICAgICAgICAgIHNlbGYuX2Jyb2tlciA9IGJyb2tlcgorICAgICAgICAgICAgc2VsZi5fcG9ydCA9
IGJyb2tlci5wb3J0KCkKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBicm9rZXIub3B0aW9u
cygpCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAg
ICAgICAgICAgc2VsZi5fbmFtZSA9ICdUZXN0V29ya2VyLyVkJyAlIHdvcmtlcl9udW1iZXIKKyAg
ICAgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX3N0b3Bw
ZWQgPSBGYWxzZQorCisgICAgICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgICAgICBzZWxm
Ll9jYW5jZWxlZCA9IFRydWUKKworICAgICAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToK
KyAgICAgICAgICAgIHNlbGYuX3N0b3BwZWQgPSBUcnVlCisKKyAgICAgICAgZGVmIGhhbmRsZV90
ZXN0KHNlbGYsIHNyYywgYW5faW50LCBhX3N0cik6CisgICAgICAgICAgICBhc3NlcnQgYW5faW50
ID09IDEKKyAgICAgICAgICAgIGFzc2VydCBhX3N0ciA9PSAiaGVsbG8sIHdvcmxkIgorICAgICAg
ICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdCcsIDIsICdoaSwgZXZlcnlib2R5
JykKKworICAgICAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9zdG9wcGVkIG9yIHNlbGYuX2NhbmNlbGVkCisKKyAgICAgICAgZGVmIG5hbWUoc2VsZik6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgICAgIGRlZiBydW4oc2VsZik6Cisg
ICAgICAgICAgICBpZiBzdGFydGluZ19xdWV1ZToKKyAgICAgICAgICAgICAgICBzdGFydGluZ19x
dWV1ZS5wdXQoJycpCisgICAgICAgICAgICBpZiBzdG9wcGluZ19xdWV1ZToKKyAgICAgICAgICAg
ICAgICBzdG9wcGluZ19xdWV1ZS5nZXQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgICAgICAgICBzZWxm
Ll9icm9rZXIueWllbGRfdG9fYnJva2VyKCkKKyAgICAgICAgICAgICAgICBpZiBtc2c6CisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UobXNnKQorICAgICAgICAg
ICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLl9icm9rZXIucG9z
dF9tZXNzYWdlKCdleGNlcHRpb24nLCAodHlwZShlKSwgc3RyKGUpLCBOb25lKSkKKworICAgIHJl
dHVybiBUZXN0V29ya2VyCisKKworZGVmIGdldF9vcHRpb25zKHdvcmtlcl9tb2RlbCk6CisgICAg
b3B0aW9uX2xpc3QgPSBtZXNzYWdlX2Jyb2tlci5ydW50aW1lX29wdGlvbnMoKQorICAgIHBhcnNl
ciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKKyAgICBv
cHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1bJy0td29ya2VyLW1vZGVsJywg
d29ya2VyX21vZGVsXSkKKyAgICByZXR1cm4gb3B0aW9ucworCisKK2RlZiBtYWtlX2Jyb2tlciht
YW5hZ2VyLCB3b3JrZXJfbW9kZWwsIHN0YXJ0aW5nX3F1ZXVlPU5vbmUsCisgICAgICAgICAgICAg
ICAgc3RvcHBpbmdfcXVldWU9Tm9uZSk6CisgICAgb3B0aW9ucyA9IGdldF9vcHRpb25zKHdvcmtl
cl9tb2RlbCkKKyAgICB3b3JrZXJfY2xhc3MgPSBtYWtlX3dvcmtlcl9jbGFzcyhzdGFydGluZ19x
dWV1ZSwgc3RvcHBpbmdfcXVldWUpCisgICAgcmV0dXJuIG1lc3NhZ2VfYnJva2VyLmdldChOb25l
LCBvcHRpb25zLCBtYW5hZ2VyLCB3b3JrZXJfY2xhc3MpCisKKworY2xhc3MgRnVuY3Rpb25UZXN0
cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZ2V0X19pbmxpbmUoc2VsZik6Cisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX2Jyb2tlcihzZWxmLCAnaW5saW5lJykgaXMgbm90
IE5vbmUpCisKKyAgICBkZWYgdGVzdF9nZXRfX3RocmVhZHMoc2VsZik6CisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShtYWtlX2Jyb2tlcihzZWxmLCAndGhyZWFkcycpIGlzIG5vdCBOb25lKQorCisg
ICAgZGVmIHRlc3RfZ2V0X19wcm9jZXNzZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShtYWtlX2Jyb2tlcihzZWxmLCAncHJvY2Vzc2VzJykgaXMgbm90IE5vbmUpCisKKyAgICBkZWYg
dGVzdF9nZXRfX3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVl
RXJyb3IsIG1ha2VfYnJva2VyLCBzZWxmLCAndW5rbm93bicpCisKKworY2xhc3MgX1dvcmtlck1l
c3NhZ2VCcm9rZXJUZXN0c01peGluKG9iamVjdCk6CisgICAgIiIiTWl4aW4gY2xhc3MgdGhhdCBp
bXBsZW1lbnRzIGEgc2VyaWVzIG9mIHRlc3RzIHRvIGVuZm9yY2UgdGhlCisgICAgY29udHJhY3Qg
YWxsIF9Xb3JrZXJNZXNzYWdlQnJva2VyIGltcGxlbWVudGF0aW9ucyBtdXN0IGZvbGxvdy4iIiIK
KworICAgICMKKyAgICAjIE1ldGhvZHMgdG8gaW1wbGVtZW50IHRoZSBNYW5hZ2VyIHNpZGUgb2Yg
dGhlIENsaWVudEludGVyZmFjZQorICAgICMKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAg
cmV0dXJuICdUZXN0ZXInCisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2RvbmUKKworICAgICMKKyAgICAjIEhhbmRsZXJzIGZvciB0aGUgbWVzc2FnZXMgdGhl
IFRlc3RXb3JrZXIgbWF5IHNlbmQuCisgICAgIworICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBz
cmMpOgorICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV90ZXN0KHNl
bGYsIHNyYywgYW5faW50LCBhX3N0cik6CisgICAgICAgIHNlbGYuX2FuX2ludCA9IGFuX2ludAor
ICAgICAgICBzZWxmLl9hX3N0ciA9IGFfc3RyCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihz
ZWxmLCBzcmMsIGV4Y19pbmZvKToKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjX2luZm8K
KyAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKworICAgICMKKyAgICAjIFRlc3RpbmcgaGVscGVy
IG1ldGhvZHMKKyAgICAjCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9hbl9p
bnQgPSBOb25lCisgICAgICAgIHNlbGYuX2Ffc3RyID0gTm9uZQorICAgICAgICBzZWxmLl9icm9r
ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2RvbmUgPSBGYWxzZQorICAgICAgICBzZWxmLl9leGNl
cHRpb24gPSBOb25lCisgICAgICAgIHNlbGYuX3dvcmtlcl9tb2RlbCA9IE5vbmUKKyAgICAgICAg
c2VsZi5fdGltZXJfdmFsID0gMAorICAgICAgICBzZWxmLl90aW1lcl9tYXhfdmFsID0gMQorCisg
ICAgZGVmIG1ha2VfYnJva2VyKHNlbGYsIHN0YXJ0aW5nX3F1ZXVlPU5vbmUsIHN0b3BwaW5nX3F1
ZXVlPU5vbmUpOgorICAgICAgICBzZWxmLl9icm9rZXIgPSBtYWtlX2Jyb2tlcihzZWxmLCBzZWxm
Ll93b3JrZXJfbW9kZWwsIHN0YXJ0aW5nX3F1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdG9wcGluZ19xdWV1ZSkKKworICAgIGRlZiBjYWxsYmFjayhzZWxmKToKKyAg
ICAgICAgc2VsZi5fdGltZXJfdmFsICs9IDEKKyAgICAgICAgc2VsZi5fYnJva2VyLmFkZF90aW1l
cihzZWxmLmNhbGxiYWNrLCAwLjAwNSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RpbWVyX3ZhbCA+
PSBzZWxmLl90aW1lcl9tYXhfdmFsCisKKyAgICAjCisgICAgIyBBY3R1YWwgdW5pdCB0ZXN0cwor
ICAgICMKKyAgICBkZWYgdGVzdF9hZGRfdGltZXJfX2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxm
Lm1ha2VfYnJva2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90aW1lcl92YWws
IDApCisgICAgICAgIHNlbGYuX2Jyb2tlci5hZGRfdGltZXIoc2VsZi5jYWxsYmFjaywgMC4wMDUp
CisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLl90aW1lcl92YWwsIDEpCisKKyAgICBkZWYgdGVzdF9hZGRfdGltZXJf
X2V4cGlyZWQoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHNlbGYuX3RpbWVyX3ZhbCwgMCkKKyAgICAgICAgc2VsZi5fYnJva2VyLmFk
ZF90aW1lcihzZWxmLmNhbGxiYWNrLCAwKQorICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3Nh
Z2VfbG9vcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGltZXJfdmFsLCAxKQor
CisgICAgZGVmIHRlc3RfYWRkX3RpbWVyX190b29fbWFueV90aW1lcnMoc2VsZik6CisgICAgICAg
IHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3RpbWVy
X3ZhbCwgMCkKKyAgICAgICAgc2VsZi5fYnJva2VyLmFkZF90aW1lcihzZWxmLmNhbGxiYWNrLCAx
KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5fYnJva2Vy
LmFkZF90aW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxsYmFjaywgMikK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90aW1lcl92YWwsIDApCisKKyAgICBkZWYg
dGVzdF9hZGRfdGltZXJfX3BlcmlvZGljKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2VfYnJva2Vy
KCkKKyAgICAgICAgc2VsZi5fdGltZXJfbWF4X3ZhbCA9IDIKKyAgICAgICAgc2VsZi5fYnJva2Vy
LmFkZF90aW1lcihzZWxmLmNhbGxiYWNrLCAwLjAwNSkKKyAgICAgICAgc2VsZi5fYnJva2VyLnJ1
bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3RpbWVyX3Zh
bCwgMikKKworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX2Jy
b2tlcigpCisgICAgICAgIHdvcmtlcl9uYW1lID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigw
KQorICAgICAgICBzZWxmLl9icm9rZXIuY2FuY2VsX3dvcmtlcih3b3JrZXJfbmFtZSkKKyAgICAg
ICAgc2VsZi5fYnJva2VyLmpvaW5fd29ya2VyKHdvcmtlcl9uYW1lLCAwLjUpCisgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2Uoc2VsZi5fYnJva2VyLndvcmtlcl9pc19hbGl2ZSh3b3JrZXJfbmFtZSkp
CisKKyAgICBkZWYgdGVzdF9kb25lKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkK
KyAgICAgICAgd29ya2VyX25hbWUgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDApCisgICAg
ICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Rlc3QnLCAxLCAnaGVsbG8sIHdvcmxkJykK
KyAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisgICAgICAgIHNlbGYu
X2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgc2VsZi5fYnJva2VyLmpvaW5fd29y
a2VyKHdvcmtlcl9uYW1lLCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5fYnJv
a2VyLndvcmtlcl9pc19hbGl2ZSh3b3JrZXJfbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShzZWxmLmlzX2RvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9hbl9pbnQs
IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYV9zdHIsICdoaSwgZXZlcnlib2R5
JykKKworICAgIGRlZiB0ZXN0X2xvZ193ZWRnZWRfd29ya2VyKHNlbGYpOgorICAgICAgICBzdGFy
dGluZ19xdWV1ZSA9IHNlbGYucXVldWUoKQorICAgICAgICBzdG9wcGluZ19xdWV1ZSA9IHNlbGYu
cXVldWUoKQorICAgICAgICBzZWxmLm1ha2VfYnJva2VyKHN0YXJ0aW5nX3F1ZXVlLCBzdG9wcGlu
Z19xdWV1ZSkKICAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQogICAg
ICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIGludGVycnVwdGVkID0gc2VsZi5ydW5f
b25lX3RocmVhZCgnVGltZW91dCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0
ZWQpCisgICAgICAgIHdvcmtlcl9uYW1lID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigwKQor
ICAgICAgICBzdGFydGluZ19xdWV1ZS5nZXQoKQorICAgICAgICBzZWxmLl9icm9rZXIubG9nX3dl
ZGdlZF93b3JrZXIod29ya2VyX25hbWUsICd0ZXN0X25hbWUnKQorICAgICAgICBzdG9wcGluZ19x
dWV1ZS5wdXQoJycpCisgICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQor
ICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIHNlbGYuX2Jy
b2tlci5qb2luX3dvcmtlcih3b3JrZXJfbmFtZSwgMC41KQogICAgICAgICBvYy5yZXN0b3JlX291
dHB1dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5fYnJva2VyLndvcmtlcl9pc19h
bGl2ZSh3b3JrZXJfbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2RvbmUo
KSkKKworICAgIGRlZiB0ZXN0X3Vua25vd25fbWVzc2FnZShzZWxmKToKKyAgICAgICAgc2VsZi5t
YWtlX2Jyb2tlcigpCisgICAgICAgIHdvcmtlcl9uYW1lID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dv
cmtlcigwKQorICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd1bmtub3duJykKKyAg
ICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICBzZWxmLl9icm9r
ZXIuam9pbl93b3JrZXIod29ya2VyX25hbWUsIDAuNSkKKworICAgICAgICBzZWxmLmFzc2VydFRy
dWUoc2VsZi5pc19kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5fYnJva2Vy
Lndvcmtlcl9pc19hbGl2ZSh3b3JrZXJfbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KHNlbGYuX2V4Y2VwdGlvblswXSwgVmFsdWVFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoc2VsZi5fZXhjZXB0aW9uWzFdLAorICAgICAgICAgICAgIlRlc3RXb3JrZXIvMDogcmVjZWl2
ZWQgbWVzc2FnZSAndW5rbm93bicgaXQgY291bGRuJ3QgaGFuZGxlIikKKworCitjbGFzcyBJbmxp
bmVCcm9rZXJUZXN0cyhfV29ya2VyTWVzc2FnZUJyb2tlclRlc3RzTWl4aW4sIHVuaXR0ZXN0LlRl
c3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIF9Xb3JrZXJNZXNzYWdlQnJv
a2VyVGVzdHNNaXhpbi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLl93b3JrZXJfbW9kZWwgPSAn
aW5saW5lJworCisgICAgZGVmIHRlc3RfbG9nX3dlZGdlZF93b3JrZXIoc2VsZik6CisgICAgICAg
IHNlbGYubWFrZV9icm9rZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25F
cnJvciwgc2VsZi5fYnJva2VyLmxvZ193ZWRnZWRfd29ya2VyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBOb25lLCBOb25lKQogCi0gICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJ1bl9vbmVfdGhyZWFkLCAn
RXhjZXB0aW9uJykKIAorY2xhc3MgTXVsdGlQcm9jZXNzQnJva2VyVGVzdHMoX1dvcmtlck1lc3Nh
Z2VCcm9rZXJUZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNl
bGYpOgorICAgICAgICBfV29ya2VyTWVzc2FnZUJyb2tlclRlc3RzTWl4aW4uc2V0VXAoc2VsZikK
KyAgICAgICAgc2VsZi5fd29ya2VyX21vZGVsID0gJ3Byb2Nlc3NlcycKKworICAgIGRlZiBxdWV1
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisKKworY2xh
c3MgVGhyZWFkZWRCcm9rZXJUZXN0cyhfV29ya2VyTWVzc2FnZUJyb2tlclRlc3RzTWl4aW4sIHVu
aXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgcXVldWUoc2VsZik6CisgICAgICAgIHJldHVybiBR
dWV1ZS5RdWV1ZSgpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIF9Xb3JrZXJNZXNz
YWdlQnJva2VyVGVzdHNNaXhpbi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLl93b3JrZXJfbW9k
ZWwgPSAndGhyZWFkcycKIAotY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVm
IHRlc3RfZmluZF90aHJlYWRfc3RhY2tfZm91bmQoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9i
cm9rZXIoKQogICAgICAgICBpZCwgc3RhY2sgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMo
KVswXQotICAgICAgICBmb3VuZF9zdGFjayA9IG1lc3NhZ2VfYnJva2VyLl9maW5kX3RocmVhZF9z
dGFjayhpZCkKKyAgICAgICAgZm91bmRfc3RhY2sgPSBzZWxmLl9icm9rZXIuX2ZpbmRfdGhyZWFk
X3N0YWNrKGlkKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZvdW5kX3N0YWNrLCBOb25l
KQogCiAgICAgZGVmIHRlc3RfZmluZF90aHJlYWRfc3RhY2tfbm90X2ZvdW5kKHNlbGYpOgotICAg
ICAgICBmb3VuZF9zdGFjayA9IG1lc3NhZ2VfYnJva2VyLl9maW5kX3RocmVhZF9zdGFjaygwKQor
ICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKKyAgICAgICAgZm91bmRfc3RhY2sgPSBzZWxmLl9i
cm9rZXIuX2ZpbmRfdGhyZWFkX3N0YWNrKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91
bmRfc3RhY2ssIE5vbmUpCiAKLSAgICBkZWYgdGVzdF9sb2dfd2VkZ2VkX3dvcmtlcihzZWxmKToK
LSAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQotICAgICAgICBvYy5j
YXB0dXJlX291dHB1dCgpCi0gICAgICAgIGxvZ2dlciA9IG1lc3NhZ2VfYnJva2VyLl9sb2cKLSAg
ICAgICAgYXN0cmVhbSA9IGFycmF5X3N0cmVhbS5BcnJheVN0cmVhbSgpCi0gICAgICAgIGhhbmRs
ZXIgPSBUZXN0SGFuZGxlcihhc3RyZWFtKQotICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5k
bGVyKQotCi0gICAgICAgIHN0YXJ0aW5nX3F1ZXVlID0gUXVldWUuUXVldWUoKQotICAgICAgICBz
dG9wcGluZ19xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKLSAgICAgICAgY2hpbGRfdGhyZWFkID0gVGVz
dFRocmVhZChzdGFydGluZ19xdWV1ZSwgc3RvcHBpbmdfcXVldWUpCi0gICAgICAgIGNoaWxkX3Ro
cmVhZC5zdGFydCgpCi0gICAgICAgIG1zZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCi0KLSAgICAg
ICAgbWVzc2FnZV9icm9rZXIubG9nX3dlZGdlZF93b3JrZXIoY2hpbGRfdGhyZWFkLmdldE5hbWUo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRfdGhyZWFk
LmlkKCkpCi0gICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dCgnJykKLSAgICAgICAgY2hpbGRfdGhy
ZWFkLmpvaW4odGltZW91dD0xLjApCiAKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyZWFt
LmVtcHR5KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2hpbGRfdGhyZWFkLmlzQWxpdmUo
KSkKLSAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQorY2xhc3MgTWVzc2FnZVRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X19ub19ib2R5KHNlbGYpOgorICAgICAgICBtc2cg
PSBtZXNzYWdlX2Jyb2tlci5fTWVzc2FnZSgnc3JjJywgJ3RvcGljX25hbWUnLCAnbWVzc2FnZV9u
YW1lJywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkKKyAgICAgICAg
cyA9IG1zZy5kdW1wcygpCisgICAgICAgIG5ld19tc2cgPSBtZXNzYWdlX2Jyb2tlci5fTWVzc2Fn
ZS5sb2FkcyhzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cubmFtZSwgJ21lc3Nh
Z2VfbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy5ib2R5LCBOb25lKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cudG9waWNfbmFtZSwgJ3RvcGljX25hbWUn
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19tc2cuc3JjLCAnc3JjJykKKworICAgIGRl
ZiB0ZXN0X19ib2R5KHNlbGYpOgorICAgICAgICBtc2cgPSBtZXNzYWdlX2Jyb2tlci5fTWVzc2Fn
ZSgnc3JjJywgJ3RvcGljX25hbWUnLCAnbWVzc2FnZV9uYW1lJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCdib2R5JywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShyZXByKG1zZykpCisgICAgICAgIHMgPSBtc2cuZHVtcHMoKQorICAgICAgICBuZXdfbXNnID0g
bWVzc2FnZV9icm9rZXIuX01lc3NhZ2UubG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChuZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KG5ld19tc2cuYm9keSwgKCdib2R5JywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3
X21zZy50b3BpY19uYW1lLCAndG9waWNfbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bmV3X21zZy5zcmMsICdzcmMnKQorCisKK2NsYXNzIEludGVyZmFjZVRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgorICAgICMgVGhlc2UgdGVzdHMgbW9zdGx5IGV4aXN0IHRvIHBhY2lmeSBjb3ZlcmFn
ZS4KKworICAgICMgRklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMg
YW5kIGFsc28gdmVyaWZ5CisgICAgIyB0aGF0IGNsYXNzZXMgZG8gaW1wbGVtZW50IGV2ZXJ5IGFi
c3RyYWN0IG1ldGhvZCBpbiBhbiBpbnRlcmZhY2UuCisKKyAgICBkZWYgdGVzdF93b3JrZXJjb25u
ZWN0aW9uaW50ZXJmYWNlX2lzX2Fic3RyYWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB3
ZSBjYW4ndCBjcmVhdGUgYW4gaW5zdGFuY2UgZGlyZWN0bHkuCisgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2VfYnJva2VyLl9Xb3JrZXJDb25uZWN0aW9uSW50ZXJmYWNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBicm9rZXI9Tm9uZSwgd29ya2VyX2NsYXNzPU5vbmUsIHdvcmtlcl9udW1iZXI9
Tm9uZSkKKworICAgICAgICBjbGFzcyBXb3JrZXJDb25uZWN0aW9uKG1lc3NhZ2VfYnJva2VyLl9X
b3JrZXJDb25uZWN0aW9uSW50ZXJmYWNlKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxm
LCAqb3B0YXJncyk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVGVzdCB0aGF0
IGFsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgaGF2ZSB0aGUKKyAg
ICAgICAgIyBzaWduYXR1cmUgd2UgZXhwZWN0LgorICAgICAgICBvYmogPSBXb3JrZXJDb25uZWN0
aW9uKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2Jq
LmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwg
b2JqLmlzQWxpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJy
b3IsIG9iai5qb2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1l
bnRlZEVycm9yLCBvYmoubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVt
ZW50ZWRFcnJvciwgb2JqLnBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxl
bWVudGVkRXJyb3IsIG9iai5vcHRpb25zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJ
bXBsZW1lbnRlZEVycm9yLCBvYmoucG9zdF9tZXNzYWdlLCBOb25lLCBOb25lKQorICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoucnVuKQorICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoucnVuX21lc3NhZ2VfbG9v
cCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLnN0
YXJ0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmou
eWllbGRfdG9fYnJva2VyKQorCisgICAgZGVmIHRlc3RfYnJva2VyY2xpZW50aW50ZXJmYWNlX2lz
X2Fic3RyYWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB3ZSBjYW4ndCBjcmVhdGUgYW4g
aW5zdGFuY2UgZGlyZWN0bHkuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVu
dGVkRXJyb3IsCisgICAgICAgICAgICBtZXNzYWdlX2Jyb2tlci5DbGllbnRJbnRlcmZhY2UsCisg
ICAgICAgICAgICBicm9rZXJfY29ubmVjdGlvbj1Ob25lLCB3b3JrZXJfbnVtYmVyPU5vbmUpCisK
KyAgICAgICAgY2xhc3MgV29ya2VyQ2xpZW50KG1lc3NhZ2VfYnJva2VyLkNsaWVudEludGVyZmFj
ZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKm9wdGFyZ3MpOgorICAgICAgICAg
ICAgICAgIHBhc3MKKworICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdGhlIGJhc2UgY2xhc3MgbWV0
aG9kcyBhcmUgYWJzdHJhY3QgYW5kIGhhdmUgdGhlCisgICAgICAgICMgc2lnbmF0dXJlIHdlIGV4
cGVjdC4KKyAgICAgICAgb2JqID0gV29ya2VyQ2xpZW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgb2JqLm5hbWUpCisgICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG9iai5pc19kb25lKQorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBvYmoucnVuKQorCisgICAgZGVmIHRl
c3RfbG9nX3dlZGdlZF93b3JrZXIoc2VsZik6CisgICAgICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJv
a2VyLl9Xb3JrZXJNZXNzYWdlQnJva2VyKE5vbmUsIE5vbmUsIE5vbmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUpCisgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGJyb2tlci5sb2dfd2Vk
Z2VkX3dvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSkKIAogCiBp
ZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGJjNWE5YWEzZTRkMjU1
YzFmNzQ5MjEyOWQwNGNkMjY2NGM4NzYyMDguLmIwZmIwMzRmNmIyZmUxMzMxOGUxNjc2YmQ5Yzkw
MDA3ZjZiMTIyNmEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTEyNyw2ICsxMjcsMTAgQEAgY2xhc3MgUG9y
dChvYmplY3QpOgogICAgICAgICBwb3J0LiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0
aXZlLmNwdV9jb3VudCgpCiAKKyAgICBkZWYgZGVmYXVsdF93b3JrZXJfbW9kZWwoc2VsZik6Cisg
ICAgICAgICIiIlJldHVybiB0aGUgY29uY3VycmVuY3kgbW9kZWwgdGhlIHBvcnQgc2hvdWxkIHVz
ZS4iIiIKKyAgICAgICAgcmV0dXJuICdwcm9jZXNzZXMnCisKICAgICBkZWYgYmFzZWxpbmVfcGF0
aChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJl
Y3RvcnkgdG8gc3RvcmUgbmV3IGJhc2VsaW5lcwogICAgICAgICBpbiBmb3IgdGhpcyBwb3J0LiIi
IgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9jaHJvbWl1bV9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQppbmRleCBiMDIzYzk0MWNlYWRlZmNjNDQwNTRi
OGUyMjRmNTllMzRmMWRiODRhLi5hZGFlYWM0ODBjM2IzYjIyM2RkN2MyMjQwMzQ0NWNlNTNlNjBk
ZjdkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtX21hYy5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX21hYy5weQpAQCAtNjgsMTUgKzY4LDYgQEAgY2xh
c3MgQ2hyb21pdW1NYWNQb3J0KGNocm9taXVtLkNocm9taXVtUG9ydCk6CiAgICAgICAgICAgICAg
ICAgICAgICAgICdNYWNCdWlsZEluc3RydWN0aW9ucycpCiAgICAgICAgIHJldHVybiByZXN1bHQK
IAotICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgIyBGSVhN
RTogd2UgbmVlZCB0byBydW4gc2luZ2xlLXRocmVhZGVkIGZvciBub3cuIFNlZQotICAgICAgICAj
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODU1My4gVW5mb3J0dW5h
dGVseSB0aGlzCi0gICAgICAgICMgcm91dGluZSBpcyBjYWxsZWQgcmlnaHQgYmVmb3JlIHRoZSBs
b2dnZXIgaXMgY29uZmlndXJlZCwgc28gaWYgd2UKLSAgICAgICAgIyB0cnkgdG8gX2xvZy53YXJu
aW5nKCksIGl0IGdldHMgdGhyb3duIGF3YXkuCi0gICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAg
c3lzLnN0ZGVyci53cml0ZSgiRGVmYXVsdGluZyB0byBvbmUgY2hpbGQgLSBzZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NTUzXG4iKQotICAgICAgICByZXR1cm4g
MQotCiAgICAgZGVmIGRyaXZlcl9uYW1lKHNlbGYpOgogICAgICAgICAiIiJuYW1lIGZvciB0aGlz
IHBvcnQncyBlcXVpdmFsZW50IG9mIER1bXBSZW5kZXJUcmVlLiIiIgogICAgICAgICBpZiBzZWxm
LmdldF9vcHRpb24oJ3VzZV9kcnQnKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKaW5kZXggNjk2ZTMzOThlYTRiMjhhYzc2
MjI1OTA3ZGMzNjJmZmMzZmI4NmY5ZS4uNzJmOTFkODM4MjE1YWY0YmM0NGYxZGMxZjA2NTVkYWRj
N2QzMzZmZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9tYWMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9tYWMucHkKQEAgLTQ3LDE1ICs0Nyw2IEBAIGNsYXNzIE1hY1BvcnQoV2Vi
S2l0UG9ydCk6CiAgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0KCdwb3J0X25hbWUnLCAnbWFjJyAr
IHNlbGYudmVyc2lvbigpKQogICAgICAgICBXZWJLaXRQb3J0Ll9faW5pdF9fKHNlbGYsICoqa3dh
cmdzKQogCi0gICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICAj
IEZJWE1FOiBuZXctcnVuLXdlYmtpdC10ZXN0cyBpcyB1bnN0YWJsZSBvbiBNYWMgcnVubmluZyBt
b3JlIHRoYW4KLSAgICAgICAgIyBmb3VyIHRocmVhZHMgaW4gcGFyYWxsZWwuCi0gICAgICAgICMg
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjYyMgotICAgICAg
ICBjaGlsZF9wcm9jZXNzZXMgPSBXZWJLaXRQb3J0LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNl
bGYpCi0gICAgICAgIGlmIGNoaWxkX3Byb2Nlc3NlcyA+IDQ6Ci0gICAgICAgICAgICByZXR1cm4g
NAotICAgICAgICByZXR1cm4gY2hpbGRfcHJvY2Vzc2VzCi0KICAgICBkZWYgYmFzZWxpbmVfc2Vh
cmNoX3BhdGgoc2VsZik6CiAgICAgICAgIHBvcnRfbmFtZXMgPSBbXQogICAgICAgICBpZiBzZWxm
Ll9uYW1lID09ICdtYWMtdGlnZXInOgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggZjNi
MWRhMDY0NmQ1N2Y4NjkxY2IwNmFlNjUwNzg0MWU2ZmJjZTU0ZS4uYjc3ZWZlMTAzYTdlYjQxOTFj
M2M2NGJiZDNkNTljNWI0NjliZDYyOCAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0x
MzUsNyArMTM1LDcgQEAgY2xhc3MgUmVzdWx0U3VtbWFyeShvYmplY3QpOgogICAgICAgICAiIiJB
ZGQgYSBUZXN0UmVzdWx0IGludG8gdGhlIGFwcHJvcHJpYXRlIGJpbi4KIAogICAgICAgICBBcmdz
OgotICAgICAgICAgIHJlc3VsdDogVGVzdFJlc3VsdCBmcm9tIGR1bXBfcmVuZGVyX3RyZWVfdGhy
ZWFkLgorICAgICAgICAgIHJlc3VsdDogVGVzdFJlc3VsdAogICAgICAgICAgIGV4cGVjdGVkOiB3
aGV0aGVyIHRoZSByZXN1bHQgd2FzIHdoYXQgd2UgZXhwZWN0ZWQgaXQgdG8gYmUuCiAgICAgICAg
ICIiIgogCkBAIC0yMjgsNiArMjI4LDI0IEBAIGRlZiBzdW1tYXJpemVfdW5leHBlY3RlZF9yZXN1
bHRzKHBvcnRfb2JqLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LAogICAgIHJldHVybiBy
ZXN1bHRzCiAKIAorY2xhc3MgX1dvcmtlclN0YXRlKG9iamVjdCk6CisgICAgIiIiQSBjbGFzcyBm
b3IgdGhlIFRlc3RSdW5uZXIvbWFuYWdlciB0byB1c2UgdG8gdHJhY2sgdGhlIGN1cnJlbnQgc3Rh
dGUKKyAgICBvZiB0aGUgd29ya2Vycy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwg
bnVtYmVyKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLm51bWJlciA9
IG51bWJlcgorICAgICAgICBzZWxmLmRvbmUgPSBGYWxzZQorICAgICAgICBzZWxmLm5leHRfdGlt
ZW91dCA9IE5vbmUKKyAgICAgICAgc2VsZi53ZWRnZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnN0
YXRzID0ge30KKyAgICAgICAgc2VsZi5zdGF0c1snbmFtZSddID0gbmFtZQorICAgICAgICBzZWxm
LnN0YXRzWydudW1fdGVzdHMnXSA9IDAKKyAgICAgICAgc2VsZi5zdGF0c1sndG90YWxfdGltZSdd
ID0gMAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIl9Xb3JrZXJT
dGF0ZSgiICsgc3RyKHNlbGYuX19kaWN0X18pICsgIikiCisKKwogY2xhc3MgVGVzdFJ1bm5lcjoK
ICAgICAiIiJBIGNsYXNzIGZvciBtYW5hZ2luZyBydW5uaW5nIGEgc2VyaWVzIG9mIHRlc3RzIG9u
IGEgc2VyaWVzIG9mIGxheW91dAogICAgIHRlc3QgZmlsZXMuIiIiCkBAIC0yNDAsMTkgKzI1OCwy
MyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICMgaW4gRHVtcFJlbmRlclRyZWUuCiAgICAgREVG
QVVMVF9URVNUX1RJTUVPVVRfTVMgPSA2ICogMTAwMAogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnQsIG9wdGlvbnMsIHByaW50ZXIsIG1lc3NhZ2VfYnJva2VyKToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlcik6CiAgICAgICAgICIiIkluaXRpYWxpemUg
dGVzdCBydW5uZXIgZGF0YSBzdHJ1Y3R1cmVzLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAg
cG9ydDogYW4gb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmljCiAgICAgICAgICAgb3B0
aW9uczogYSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zCiAgICAgICAgICAgcHJp
bnRlcjogYSBQcmludGVyIG9iamVjdCB0byByZWNvcmQgdXBkYXRlcyB0by4KLSAgICAgICAgICBt
ZXNzYWdlX2Jyb2tlcjogb2JqZWN0IHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB3b3JrZXJzLgog
ICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fbmFtZSA9ICdUZXN0UnVubmVyJwogICAgICAgICBz
ZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAg
ICBzZWxmLl9wcmludGVyID0gcHJpbnRlcgotICAgICAgICBzZWxmLl9tZXNzYWdlX2Jyb2tlciA9
IG1lc3NhZ2VfYnJva2VyCisgICAgICAgIHNlbGYuX21lc3NhZ2VfYnJva2VyID0gTm9uZQorICAg
ICAgICBzZWxmLlVQREFURV9JTlRFUlZBTCA9IDAuMDEKKworICAgICAgICAjIFRoaXMgbWFwcyB3
b3JrZXIgbmFtZXMgdG8gdGhlIHN0YXRlIHdlIGFyZSB0cmFja2luZyBmb3IgZWFjaCBvZiB0aGVt
LgorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KIAogICAgICAgICAjIGRpc2FibGUgd3NzIHNl
cnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCiAgICAgICAgICMg
c2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29j
a2V0KApAQCAtMjYxLDkgKzI4MywxNCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAjIGEg
c2V0IG9mIHRlc3QgZmlsZXMsIGFuZCB0aGUgc2FtZSB0ZXN0cyBhcyBhIGxpc3QKICAgICAgICAg
c2VsZi5fdGVzdF9maWxlcyA9IHNldCgpCiAgICAgICAgIHNlbGYuX3Rlc3RfZmlsZXNfbGlzdCA9
IE5vbmUKLSAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gUXVldWUuUXVldWUoKQogICAgICAg
ICBzZWxmLl9yZXRyeWluZyA9IEZhbHNlCiAKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX25hbWUKKwogICAgIGRlZiBjb2xsZWN0X3Rlc3RzKHNlbGYsIGFyZ3MsIGxhc3RfdW5leHBl
Y3RlZF9yZXN1bHRzKToKICAgICAgICAgIiIiRmluZCBhbGwgdGhlIGZpbGVzIHRvIHRlc3QuCiAK
QEAgLTU4NSw2MiArNjEyLDk0IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgIGlu
IHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1l
fQogICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRl
IHdpdGggdGhlIHJlc3VsdHMKICAgICAgICAgIiIiCisgICAgICAgIG51bV93b3JrZXJzID0gc2Vs
Zi5fbnVtX3dvcmtlcnMoKQorCisgICAgICAgIHNlbGYuX2N1cnJlbnRfZmlsZV9saXN0ID0gZmls
ZV9saXN0CisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3Vt
bWFyeQorCisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzID0gW10KKyAgICAgICAgc2VsZi5fZ3Jv
dXBfc3RhdHMgPSB7fQorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KIAogICAgICAgICBzZWxm
Ll9wcmludGVyLnByaW50X3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4uJykKLSAgICAgICAgbnVt
X3dvcmtlcnMgPSBzZWxmLl9udW1fd29ya2VycygpCiAgICAgICAgIHRlc3RfbGlzdHMgPSBzZWxm
Ll9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsCiAgICAgICAgICAgICBudW1fd29ya2VycyA+IDEgYW5k
IG5vdCBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKLSAgICAgICAg
ZmlsZW5hbWVfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCi0gICAgICAgIGZvciBpdGVtIGluIHRlc3Rf
bGlzdHM6Ci0gICAgICAgICAgICBmaWxlbmFtZV9xdWV1ZS5wdXQoaXRlbSkKKworICAgICAgICBi
cm9rZXIgPSBtZXNzYWdlX2Jyb2tlci5nZXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywgc2Vs
ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBfcmVuZGVyX3RyZWVf
dGhyZWFkLldvcmtlcikKKyAgICAgICAgc2VsZi5fbWVzc2FnZV9icm9rZXIgPSBicm9rZXIKKyAg
ICAgICAgZm9yIHRlc3RfbGlzdCBpbiB0ZXN0X2xpc3RzOgorICAgICAgICAgICAgYnJva2VyLnBv
c3RfbWVzc2FnZSgndGVzdF9saXN0JywgdGVzdF9saXN0WzBdLCB0ZXN0X2xpc3RbMV0pCisKKyAg
ICAgICAgIyBUZWxsIHRoZSB3b3JrZXJzIHRvIHNodXQgZG93biBhZnRlciB0aGV5J3JlIGRvbmUg
cnVubmluZyBhbGwgdGhlCisgICAgICAgICMgdGVzdHMuCisgICAgICAgIGZvciBpIGluIHhyYW5n
ZShudW1fd29ya2Vycyk6CisgICAgICAgICAgICBicm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykK
IAogICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMgLi4uJyAl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIucGx1cmFsaXplKCd3
b3JrZXInLCBudW1fd29ya2VycykpCi0gICAgICAgIG1lc3NhZ2VfYnJva2VyID0gc2VsZi5fbWVz
c2FnZV9icm9rZXIKLSAgICAgICAgc2VsZi5fY3VycmVudF9maWxlbmFtZV9xdWV1ZSA9IGZpbGVu
YW1lX3F1ZXVlCi0gICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRf
c3VtbWFyeQotCi0gICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmRyeV9ydW46Ci0gICAgICAg
ICAgICB0aHJlYWRzID0gbWVzc2FnZV9icm9rZXIuc3RhcnRfd29ya2VycyhzZWxmKQotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgdGhyZWFkcyA9IHt9CisgICAgICAgIGZvciB3b3JrZXJfbnVt
YmVyIGluIHhyYW5nZShudW1fd29ya2Vycyk6CisgICAgICAgICAgICB3b3JrZXJfbmFtZSA9IGJy
b2tlci5zdGFydF93b3JrZXIod29ya2VyX251bWJlcikKKyAgICAgICAgICAgIHcgPSBfV29ya2Vy
U3RhdGUod29ya2VyX25hbWUsIHdvcmtlcl9udW1iZXIpCisgICAgICAgICAgICBzZWxmLl93b3Jr
ZXJzW3dvcmtlcl9uYW1lXSA9IHcKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogCiAgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0ZXN0aW5nIC4uLiIpCiAg
ICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UKLSAgICAgICAgaWYgbm90IHNlbGYu
X29wdGlvbnMuZHJ5X3J1bjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtZXNz
YWdlX2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlib2Fy
ZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICBfbG9nLmluZm8oIkludGVycnVwdGVkLCBleGl0
aW5nIikKLSAgICAgICAgICAgICAgICBtZXNzYWdlX2Jyb2tlci5jYW5jZWxfd29ya2VycygpCi0g
ICAgICAgICAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVlCi0gICAgICAgICAgICBl
eGNlcHQ6Ci0gICAgICAgICAgICAgICAgIyBVbmV4cGVjdGVkIGV4Y2VwdGlvbjsgZG9uJ3QgdHJ5
IHRvIGNsZWFuIHVwIHdvcmtlcnMuCi0gICAgICAgICAgICAgICAgX2xvZy5pbmZvKCJFeGNlcHRp
b24gcmFpc2VkLCBleGl0aW5nIikKLSAgICAgICAgICAgICAgICByYWlzZQotCi0gICAgICAgIHRo
cmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzID0gXAot
ICAgICAgICAgICAgc2VsZi5fY29sbGVjdF90aW1pbmdfaW5mbyh0aHJlYWRzKQotCi0gICAgICAg
IHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWlu
Z3MsCi0gICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCi0KLSAgICBkZWYg
dXBkYXRlKHNlbGYpOgotICAgICAgICBzZWxmLnVwZGF0ZV9zdW1tYXJ5KHNlbGYuX2N1cnJlbnRf
cmVzdWx0X3N1bW1hcnkpCi0KLSAgICBkZWYgX2NvbGxlY3RfdGltaW5nX2luZm8oc2VsZiwgdGhy
ZWFkcyk6Ci0gICAgICAgIHRlc3RfdGltaW5ncyA9IHt9Ci0gICAgICAgIGluZGl2aWR1YWxfdGVz
dF90aW1pbmdzID0gW10KLSAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbXQorICAgICAgICB0cnk6
CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5kcnlfcnVuOgorICAgICAgICAgICAg
ICAgIGRvbmUgPSBzZWxmLl9jaGVja19vbl93b3JrZXJzKCkKKyAgICAgICAgICAgICAgICBpZiBu
b3QgZG9uZToKKyAgICAgICAgICAgICAgICAgICAgYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQor
CisgICAgICAgICAgICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAg
ICAgICAgICAgICAgICAgaWYgbm90IHcud2VkZ2VkIGFuZCBicm9rZXIud29ya2VyX2lzX2FsaXZl
KHcubmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXIuam9pbl93b3JrZXIody5u
YW1lLCAwLjUpCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbm90IGJyb2tlci53b3Jr
ZXJfaXNfYWxpdmUody5uYW1lKQorCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoK
KyAgICAgICAgICAgIF9sb2cuaW5mbygiSW50ZXJydXB0ZWQsIGV4aXRpbmciKQorICAgICAgICAg
ICAgZm9yIHdvcmtlcl9uYW1lIGluIHNlbGYuX3dvcmtlcnMua2V5cygpOgorICAgICAgICAgICAg
ICAgIGJyb2tlci5jYW5jZWxfd29ya2VyKHdvcmtlcl9uYW1lKQorICAgICAgICAgICAga2V5Ym9h
cmRfaW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgVW5l
eHBlY3RlZCBleGNlcHRpb247IGRvbid0IHRyeSB0byBjbGVhbiB1cCB3b3JrZXJzLgorICAgICAg
ICAgICAgX2xvZy5pbmZvKCJFeGNlcHRpb24gcmFpc2VkLCBleGl0aW5nIikKKyAgICAgICAgICAg
IHNlbGYuX21lc3NhZ2VfYnJva2VyID0gTm9uZQorICAgICAgICAgICAgcmFpc2UKIAotICAgICAg
ICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICB0aHJlYWRfdGltaW5ncy5hcHBl
bmQoeyduYW1lJzogdGhyZWFkLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ251bV90ZXN0cyc6IHRocmVhZC5nZXRfbnVtX3Rlc3RzKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICd0b3RhbF90aW1lJzogdGhyZWFkLmdldF90b3RhbF90
aW1lKCl9KQotICAgICAgICAgICAgdGVzdF90aW1pbmdzLnVwZGF0ZSh0aHJlYWQuZ2V0X3Rlc3Rf
Z3JvdXBfdGltaW5nX3N0YXRzKCkpCi0gICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5n
cy5leHRlbmQodGhyZWFkLmdldF90ZXN0X3Jlc3VsdHMoKSkKKyAgICAgICAgc2VsZi5fbWVzc2Fn
ZV9icm9rZXIgPSBOb25lCisgICAgICAgIHRocmVhZF90aW1pbmdzID0gW3cuc3RhdHMgZm9yIHcg
aW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKV0KKyAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRl
cnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsCisgICAgICAgICAgICAgICAgc2VsZi5fZ3JvdXBfc3Rh
dHMsIHNlbGYuX2FsbF9yZXN1bHRzKQorCisgICAgZGVmIF9jaGVja19vbl93b3JrZXJzKHNlbGYp
OgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIGFsbCB0aGUgd29ya2VycyBoYXZlIGVpdGhl
ciBjb21wbGV0ZWQgb3Igd2VkZ2VkLiIiIgorICAgICAgICBkb25lID0gVHJ1ZQorICAgICAgICB0
ID0gdGltZS50aW1lKCkKKyAgICAgICAgYnJva2VyID0gc2VsZi5fbWVzc2FnZV9icm9rZXIKKyAg
ICAgICAgZm9yIHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIG5v
dCB3LmRvbmUgYW5kIG5vdCB3LndlZGdlZDoKKyAgICAgICAgICAgICAgICBuZXh0X3RpbWVvdXQg
PSB3Lm5leHRfdGltZW91dAorICAgICAgICAgICAgICAgIFdFREdFX1BBRERJTkcgPSA0MC4wCisg
ICAgICAgICAgICAgICAgaWYgbmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0ICsgV0VE
R0VfUEFERElORzoKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAg
ICAgICAgICAgICAgYnJva2VyLmxvZ193ZWRnZWRfd29ya2VyKHcubmFtZSwgdy5jdXJyZW50X3Rl
c3RfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAg
ICAgICAgICAgdy53ZWRnZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICAgICAgZG9uZSA9IEZhbHNlCiAKLSAgICAgICAgcmV0dXJuICh0aHJlYWRfdGltaW5n
cywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgaWYgZG9u
ZToKKyAgICAgICAgICAgIGlmIGFueShbdy53ZWRnZWQgZm9yIHdjIGluIHNlbGYuX3dvcmtlcnNd
KToKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCcnKQorICAgICAgICAgICAgICAgIF9sb2cu
ZXJyb3IoJ1JlbWFpbmluZyB3b3JrZXJzIGFyZSB3ZWRnZWQsIGJhaWxpbmcgb3V0LicpCisgICAg
ICAgICAgICAgICAgX2xvZy5lcnJvcignJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnTm8gd2VkZ2VkIHRocmVhZHMnKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgYnJva2VyLmFkZF90aW1lcihzZWxmLl9jaGVja19vbl93b3JrZXJzLCBzZWxmLlVQ
REFURV9JTlRFUlZBTCkKKyAgICAgICAgcmV0dXJuIGRvbmUKIAogICAgIGRlZiBuZWVkc19odHRw
KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHRlc3QgcnVubmVyIG5lZWRz
IGFuIEhUVFAgc2VydmVyLiIiIgpAQCAtNzc0LDIzICs4MzMsNTEgQEAgY2xhc3MgVGVzdFJ1bm5l
cjoKICAgICAgICAgX2xvZy5kZWJ1Zygic3RvcHBpbmcgaGVscGVyIikKICAgICAgICAgc2VsZi5f
cG9ydC5zdG9wX2hlbHBlcigpCiAKLSAgICBkZWYgdXBkYXRlX3N1bW1hcnkoc2VsZiwgcmVzdWx0
X3N1bW1hcnkpOgorICAgIGRlZiBoYW5kbGVfc3RhcnRlZF90ZXN0KHNlbGYsIHNyYywgdGVzdF9p
bmZvLCBoYW5nX3RpbWVvdXQpOgorICAgICAgICB3ID0gc2VsZi5fd29ya2Vyc1tzcmNdCisgICAg
ICAgIHcuY3VycmVudF90ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5h
bWUoCisgICAgICAgICAgICB0ZXN0X2luZm8uZmlsZW5hbWUpCisgICAgICAgIHcubmV4dF90aW1l
b3V0ID0gdGltZS50aW1lKCkgKyBoYW5nX3RpbWVvdXQKKworICAgIGRlZiBoYW5kbGVfZG9uZShz
ZWxmLCBzcmMpOgorICAgICAgICB3ID0gc2VsZi5fd29ya2Vyc1tzcmNdCisgICAgICAgIHcuZG9u
ZSA9IFRydWUKKyAgICAgICAgcGFzcworCisgICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNl
bGYsIHNyYywgcmVzdWx0LCBlbGFwc2VkX3RpbWUpOgogICAgICAgICAiIiJVcGRhdGUgdGhlIHN1
bW1hcnkgYW5kIHByaW50IHJlc3VsdHMgd2l0aCBhbnkgY29tcGxldGVkIHRlc3RzLiIiIgotICAg
ICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHRlc3RfcmVzdWx0cy5UZXN0UmVzdWx0LmxvYWRzKHNlbGYuX3Jlc3VsdF9xdWV1ZS5nZXRf
bm93YWl0KCkpCi0gICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuCi0KLSAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZXhwZWN0YXRpb25zLm1h
dGNoZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KAotICAgICAgICAgICAgICAgIHJlc3VsdC5maWxlbmFt
ZSwgcmVzdWx0LnR5cGUsIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMpCi0gICAgICAgICAgICBy
ZXN1bHRfc3VtbWFyeS5hZGQocmVzdWx0LCBleHBlY3RlZCkKLSAgICAgICAgICAgIGV4cF9zdHIg
PSBzZWxmLl9leHBlY3RhdGlvbnMuZ2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoCi0gICAgICAgICAg
ICAgICAgcmVzdWx0LmZpbGVuYW1lKQotICAgICAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVj
dGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJpbmcocmVzdWx0LnR5cGUpCi0gICAgICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3Rlc3RfcmVzdWx0KHJlc3VsdCwgZXhwZWN0ZWQsIGV4cF9zdHIs
IGdvdF9zdHIpCi0gICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3Byb2dyZXNzKHJlc3Vs
dF9zdW1tYXJ5LCBzZWxmLl9yZXRyeWluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0KQorICAgICAgICB3ID0gc2VsZi5fd29y
a2Vyc1tzcmNdCisgICAgICAgIHcubmV4dF90aW1lb3V0ID0gTm9uZQorICAgICAgICB3LmN1cnJl
bnRfdGVzdCA9IE5vbmUKKworICAgICAgICBpZiB3LndlZGdlZDoKKyAgICAgICAgICAgICMgSG1t
LiBUaGlzIHNob3VsZG4ndCBoYXBwZW4gaWYgd2UgaGF2ZSBvdXIgdGltZW91dHMKKyAgICAgICAg
ICAgICMgdHVuZWQgcHJvcGVybHkuCisgICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB1bndlZGdl
ZCIsIHcubmFtZSkKKworICAgICAgICBzZWxmLl91cGRhdGVfd29ya2VyX3N0YXRzKHNyYywgcmVz
dWx0LCBlbGFwc2VkX3RpbWUpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3RhdGlv
bnMubWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoCisgICAgICAgICAgICByZXN1bHQuZmlsZW5h
bWUsIHJlc3VsdC50eXBlLCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQorICAgICAgICBleHBf
c3RyID0gc2VsZi5fZXhwZWN0YXRpb25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKAorICAgICAg
ICAgICAgcmVzdWx0LmZpbGVuYW1lKQorICAgICAgICBnb3Rfc3RyID0gc2VsZi5fZXhwZWN0YXRp
b25zLmV4cGVjdGF0aW9uX3RvX3N0cmluZyhyZXN1bHQudHlwZSkKKyAgICAgICAgc2VsZi5fcHJp
bnRlci5wcmludF90ZXN0X3Jlc3VsdChyZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3Ry
KQorCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkuYWRkKHJlc3VsdCwgZXhw
ZWN0ZWQpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfcHJvZ3Jlc3Moc2VsZi5fY3VycmVu
dF9yZXN1bHRfc3VtbWFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9yZXRyeWluZywgc2VsZi5fdGVzdF9maWxlc19saXN0KQorCisgICAgZGVmIGhhbmRsZV9m
aW5pc2hlZF9saXN0KHNlbGYsIHNyYywgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGlt
ZSk6CisgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzW2xpc3RfbmFtZV0gPSAobnVtX3Rlc3RzLCBl
bGFwc2VkX3RpbWUpCisKKyAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y2Vw
dGlvbl9pbmZvKToKKyAgICAgICAgcmFpc2UgZXhjZXB0aW9uX2luZm8KKworICAgIGRlZiBfdXBk
YXRlX3dvcmtlcl9zdGF0cyhzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICAg
ICAgc2VsZi5fd29ya2Vyc1tzcmNdLnN0YXRzWyd0b3RhbF90aW1lJ10gKz0gZWxhcHNlZF90aW1l
CisgICAgICAgIHNlbGYuX3dvcmtlcnNbc3JjXS5zdGF0c1snbnVtX3Rlc3RzJ10gKz0gMQorICAg
ICAgICBzZWxmLl9hbGxfcmVzdWx0cy5hcHBlbmQocmVzdWx0KQogCiAgICAgZGVmIF9jbG9iYmVy
X29sZF9yZXN1bHRzKHNlbGYpOgogICAgICAgICAjIEp1c3QgY2xvYmJlciB0aGUgYWN0dWFsIHRl
c3QgcmVzdWx0cyBkaXJlY3RvcmllcyBzaW5jZSB0aGUgb3RoZXIKQEAgLTk3MCw4ICsxMDU3LDcg
QEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICBkZWYgX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRp
c3RpY3Moc2VsZiwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICAgICAiIiJQcmludHMg
YWdncmVnYXRlIHN0YXRpc3RpY3MgKGUuZy4gbWVkaWFuLCBtZWFuLCBldGMuKSBmb3IgYWxsIHRl
c3RzLgogICAgICAgICBBcmdzOgotICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBM
aXN0IG9mIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLlRlc3RTdGF0cwotICAgICAgICAgICAgICBm
b3IgYWxsIHRlc3RzLgorICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzOiBMaXN0IG9m
IFRlc3RSZXN1bHRzIGZvciBhbGwgdGVzdHMuCiAgICAgICAgICIiIgogICAgICAgICB0ZXN0X3R5
cGVzID0gW10gICMgVW5pdCB0ZXN0cyBkb24ndCBhY3R1YWxseSBwcm9kdWNlIGFueSB0aW1pbmdz
LgogICAgICAgICBpZiBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczoKQEAgLTEwMDYsOCArMTA5Miw3
IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJQcmludHMgdGhlIHJ1biB0aW1lcyBmb3Igc2xv
dywgdGltZW91dCBhbmQgY3Jhc2ggdGVzdHMuCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgaW5k
aXZpZHVhbF90ZXN0X3RpbWluZ3M6IExpc3Qgb2YgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVz
dFN0YXRzCi0gICAgICAgICAgICAgIGZvciBhbGwgdGVzdHMuCisgICAgICAgICAgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3M6IExpc3Qgb2YgVGVzdFN0YXRzIGZvciBhbGwgdGVzdHMuCiAgICAgICAg
ICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IGZvciB0ZXN0IHJ1bgogICAgICAgICAi
IiIKICAgICAgICAgIyBSZXZlcnNlLXNvcnQgYnkgdGhlIHRpbWUgc3BlbnQgaW4gRHVtcFJlbmRl
clRyZWUuCkBAIC0xMjk1LDEzICsxMzgwLDExIEBAIGRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJn
cywgcmVndWxhcl9vdXRwdXQ9c3lzLnN0ZGVyciwKICAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkK
ICAgICAgICAgcmV0dXJuIDAKIAotICAgIGJyb2tlciA9IG1lc3NhZ2VfYnJva2VyLmdldChwb3J0
LCBvcHRpb25zKQotCiAgICAgIyBXZSB3cmFwIGFueSBwYXJ0cyBvZiB0aGUgcnVuIHRoYXQgYXJl
IHNsb3cgb3IgbGlrZWx5IHRvIHJhaXNlIGV4Y2VwdGlvbnMKICAgICAjIGluIGEgdHJ5L2ZpbmFs
bHkgdG8gZW5zdXJlIHRoYXQgd2UgY2xlYW4gdXAgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4K
ICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzID0gLTEKICAgICB0cnk6Ci0gICAgICAgIHRlc3Rf
cnVubmVyID0gVGVzdFJ1bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVyLCBicm9rZXIpCisgICAg
ICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVyKQogICAg
ICAgICB0ZXN0X3J1bm5lci5fcHJpbnRfY29uZmlnKCkKIAogICAgICAgICBwcmludGVyLnByaW50
X3VwZGF0ZSgiQ29sbGVjdGluZyB0ZXN0cyAuLi4iKQpAQCAtMTMzMCw3ICsxNDEzLDYgQEAgZGVm
IHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCByZWd1bGFyX291dHB1dD1zeXMuc3RkZXJyLAogICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4aXQgc3RhdHVzOiAlZCIg
JQogICAgICAgICAgICAgICAgICAgICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzKQogICAgIGZp
bmFsbHk6Ci0gICAgICAgIGJyb2tlci5jbGVhbnVwKCkKICAgICAgICAgcHJpbnRlci5jbGVhbnVw
KCkKIAogICAgIHJldHVybiBudW1fdW5leHBlY3RlZF9yZXN1bHRzCkBAIC0xMzM4LDYgKzE0MjAs
OCBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRl
cnIsCiAKIGRlZiBfc2V0X3VwX2Rlcml2ZWRfb3B0aW9ucyhwb3J0X29iaiwgb3B0aW9ucyk6CiAg
ICAgIiIiU2V0cyB0aGUgb3B0aW9ucyB2YWx1ZXMgdGhhdCBkZXBlbmQgb24gb3RoZXIgb3B0aW9u
cyB2YWx1ZXMuIiIiCisgICAgaWYgb3B0aW9ucy53b3JrZXJfbW9kZWwgaXMgTm9uZToKKyAgICAg
ICAgb3B0aW9ucy53b3JrZXJfbW9kZWwgPSBwb3J0X29iai5kZWZhdWx0X3dvcmtlcl9tb2RlbCgp
CiAKICAgICBpZiBvcHRpb25zLndvcmtlcl9tb2RlbCA9PSAnaW5saW5lJzoKICAgICAgICAgaWYg
b3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMgYW5kIGludChvcHRpb25zLmNoaWxkX3Byb2Nlc3Nlcykg
PiAxOgpAQCAtMTQzNCw3ICsxNTE4LDEwIEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAg
ICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXVzZS1kcnQiLCBhY3Rpb249InN0b3JlX3Ry
dWUiLAogICAgICAgICAgICAgZGVmYXVsdD1UcnVlLAogICAgICAgICAgICAgaGVscD0iKERFUFJF
Q0FURUQpIiksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWFjY2VsZXJhdGVkLWNv
bXBvc2l0aW5nIiwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbm8tdXNlLWRydCIs
IGFjdGlvbj0ic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgZGVmYXVsdD1UcnVlLCBkZXN0PSJ1
c2VfZHJ0IiwKKyAgICAgICAgICAgIGhlbHA9IihERVBSRUNBVEVEKSIpLAorICAgICAgICAgb3B0
cGFyc2UubWFrZV9vcHRpb24oIi0tYWNjZWxlcmF0ZWQtY29tcG9zaXRpbmciLAogICAgICAgICAg
ICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKICAgICAgICAgICAgIGhlbHA9IlVzZSBoYXJkd2FyZS1h
Y2NlbGF0ZWQgY29tcG9zaXRpbmcgZm9yIHJlbmRlcmluZyIpLAogICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbigiLS1uby1hY2NlbGVyYXRlZC1jb21wb3NpdGluZyIsCkBAIC0xNDUwLDYgKzE1
MzcsOCBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICAgICAgaGVscD0iRG9u
J3QgdXNlIGhhcmR3YXJlLWFjY2VsZXJhdGVkIDJEIENhbnZhcyBjYWxscyIpLAogICAgIF0KIAor
ICAgIG1lc3NhZ2VfYnJva2VyX29wdGlvbnMgPSBtZXNzYWdlX2Jyb2tlci5ydW50aW1lX29wdGlv
bnMoKQorCiAgICAgIyBNaXNzaW5nIE1hYy1zcGVjaWZpYyBvbGQtcnVuLXdlYmtpdC10ZXN0cyBv
cHRpb25zOgogICAgICMgRklYTUU6IE5lZWQ6IC1nLCAtLWd1YXJkIGZvciBndWFyZCBtYWxsb2Mg
c3VwcG9ydCBvbiBNYWMuCiAgICAgIyBGSVhNRTogTmVlZDogLWwgLS1sZWFrcyAgICBFbmFibGUg
bGVha3MgY2hlY2tpbmcuCkBAIC0xNTY5LDkgKzE2NTgsNyBAQCBkZWYgcGFyc2VfYXJncyhhcmdz
PU5vbmUpOgogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1jaGlsZC1wcm9jZXNzZXMi
LAogICAgICAgICAgICAgaGVscD0iTnVtYmVyIG9mIER1bXBSZW5kZXJUcmVlcyB0byBydW4gaW4g
cGFyYWxsZWwuIiksCiAgICAgICAgICMgRklYTUU6IERpc3BsYXkgZGVmYXVsdCBudW1iZXIgb2Yg
Y2hpbGQgcHJvY2Vzc2VzIHRoYXQgd2lsbCBydW4uCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0
aW9uKCItLXdvcmtlci1tb2RlbCIsIGFjdGlvbj0ic3RvcmUiLAotICAgICAgICAgICAgZGVmYXVs
dD0idGhyZWFkcyIsIGhlbHA9KCJjb250cm9scyB3b3JrZXIgbW9kZWwuIFZhbGlkIHZhbHVlcyBh
cmUgIgotICAgICAgICAgICAgIidpbmxpbmUnIGFuZCAndGhyZWFkcycgKGRlZmF1bHQpLiIpKSwK
KyAgICAgICAgIyBGSVhNRTogRGlzcGxheSBkZWZhdWx0IHRocmVhZGluZyBtb2RlbCAod2lsbCBi
ZSBwb3J0LXNwZWNpZmljKS4KICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZXhwZXJp
bWVudGFsLWZ1bGx5LXBhcmFsbGVsIiwKICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIs
IGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICBoZWxwPSJydW4gYWxsIHRlc3RzIGluIHBhcmFs
bGVsIiksCkBAIC0xNjIyLDYgKzE3MDksNyBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgog
ICAgIF0KIAogICAgIG9wdGlvbl9saXN0ID0gKGNvbmZpZ3VyYXRpb25fb3B0aW9ucyArIHByaW50
X29wdGlvbnMgKworICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfYnJva2VyX29wdGlvbnMgKwog
ICAgICAgICAgICAgICAgICAgIGNocm9taXVtX29wdGlvbnMgKyByZXN1bHRzX29wdGlvbnMgKyB0
ZXN0X29wdGlvbnMgKwogICAgICAgICAgICAgICAgICAgIG1pc2Nfb3B0aW9ucyArIHJlc3VsdHNf
anNvbl9vcHRpb25zICsKICAgICAgICAgICAgICAgICAgICBvbGRfcnVuX3dlYmtpdF90ZXN0c19j
b21wYXQpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQppbmRleCA2
YmI3NDFhNTdjOTFjMGIwZTI2NGNmZGU3ZDY0MTBjYmY1ODM5NjZhLi5lNmJlNTNmMDBhZTcyZTRl
NTE0ZmUxZWM3N2U0N2FhNjQ3YzEwY2M2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVz
dHNfdW5pdHRlc3QucHkKQEAgLTQ3LDYgKzQ3LDcgQEAgZnJvbSB3ZWJraXRweS5jb21tb24gaW1w
b3J0IGFycmF5X3N0cmVhbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRw
dXRjYXB0dXJlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHVzZXIKIGZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Citmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCB0ZXN0CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQg
cnVuX3dlYmtpdF90ZXN0cwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2th
Z2UgaW1wb3J0IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkCiBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0LnRlc3QgaW1wb3J0IFRlc3RQb3J0LCBUZXN0RHJpdmVyCkBAIC0xODYsNiArMTg3
LDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rf
YmF0Y2hfc2l6ZShzZWxmKToKICAgICAgICAgYmF0Y2hfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1
bihbJy0tYmF0Y2gtc2l6ZScsICcyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihi
YXRjaF90ZXN0c19ydW4pLCA5KQogICAgICAgICBmb3IgYmF0Y2ggaW4gYmF0Y2hfdGVzdHNfcnVu
OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihiYXRjaCkgPD0gMiwgJyVzIGhhZCB0
b28gbWFueSB0ZXN0cycgJSAnLCAnLmpvaW4oYmF0Y2gpKQogCkBAIC0yODAsOCArMjgyLDE2IEBA
IGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3J1bl9m
b3JjZShzZWxmKToKICAgICAgICAgIyBUaGlzIHJhaXNlcyBhbiBleGNlcHRpb24gYmVjYXVzZSB3
ZSBydW4KLSAgICAgICAgIyBmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCwgd2hpY2gg
aXMgbm9ybWFsbHkgU0tJUHBlZC4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
ciwgbG9nZ2luZ19ydW4sIFsnLS1mb3JjZSddKQorICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVk
L2V4Y2VwdGlvbi5odG1sIGFuZAorICAgICAgICAjIGZhaWx1cmVzL2V4cGVjdGVkL2tleWJvYXJk
LCB3aGljaCBhcmUgbm9ybWFsbHkgU0tJUHBlZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
bG9nZ2luZ19ydW4oWyctLWZvcmNlJ10pCisgICAgICAgICAgICB0ZXN0X3Bhc3NlZCA9IEZhbHNl
CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgdGVzdF9wYXNzZWQgPSBU
cnVlCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHRlc3Rf
cGFzc2VkID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdF9wYXNzZWQpCiAKICAg
ICBkZWYgdGVzdF9ydW5fcGFydChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgd2UgYWN0dWFs
bHkgc2VsZWN0IHRoZSByaWdodCBwYXJ0CkBAIC0yOTcsNiArMzA3LDcgQEAgY2xhc3MgTWFpblRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfcnVuX3NpbmdseShzZWxmKToK
ICAgICAgICAgYmF0Y2hfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tcnVuLXNpbmdseSdd
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiYXRjaF90ZXN0c19ydW4pLCAxNCkKICAg
ICAgICAgZm9yIGJhdGNoIGluIGJhdGNoX3Rlc3RzX3J1bjoKICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKGxlbihiYXRjaCksIDEsICclcyBoYWQgdG9vIG1hbnkgdGVzdHMnICUgJywgJy5q
b2luKGJhdGNoKSkKIApAQCAtMzg1LDEzICszOTYsMjQgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXdv
cmtlci1tb2RlbCcsICd0aHJlYWRzJ10pKQogCiAgICAgZGVmIHRlc3Rfd29ya2VyX21vZGVsX19w
cm9jZXNzZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxv
Z2dpbmdfcnVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0td29ya2VyLW1vZGVsJywg
J3Byb2Nlc3NlcyddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4sIFsnLS13
b3JrZXItbW9kZWwnLCAncHJvY2Vzc2VzJ10pCiAKICAgICBkZWYgdGVzdF93b3JrZXJfbW9kZWxf
X3Vua25vd24oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxv
Z2dpbmdfcnVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbJy0td29ya2VyLW1vZGVsJywg
J3Vua25vd24nXSkKIAorICAgIGRlZiB0ZXN0X3dvcmtlcl9tb2RlbF9fcG9ydF9vdmVycmlkZShz
ZWxmKToKKyAgICAgICAgY2xhc3MgT3ZlcnJpZGVQb3J0KHRlc3QuVGVzdFBvcnQpOgorICAgICAg
ICAgICAgZGVmIGRlZmF1bHRfd29ya2VyX21vZGVsKHNlbGYpOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnSU5WQUxJRCcKKworICAgICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1bl93ZWJr
aXRfdGVzdHMucGFyc2VfYXJncygKKyAgICAgICAgICAgIFsnLS1wcmludCcsICdub3RoaW5nJywg
Jy0tcGxhdGZvcm0nLCAndGVzdCcsICctLW5vc2hvdy1yZXN1bHRzJ10pCisgICAgICAgIHBvcnRf
b2JqID0gT3ZlcnJpZGVQb3J0KG9wdGlvbnM9b3B0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvciwgcnVuX3dlYmtpdF90ZXN0cy5ydW4sIHBvcnRfb2JqLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCBwYXJzZWRfYXJncykKKworCiBNYWluVGVzdCA9
IHNraXBfaWYoTWFpblRlc3QsIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJyBhbmQgY29tcGFyZV92
ZXJzaW9uKHN5cywgJzIuNicpWzBdIDwgMCwgJ25ldy1ydW4td2Via2l0LXRlc3RzIHRlc3RzIGhh
bmcgb24gQ3lnd2luIFB5dGhvbiAyLjUuMicpCiAKIApAQCAtNDc0LDcgKzQ5Niw3IEBAIGNsYXNz
IFRlc3RSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgbW9ja19wb3J0LmZp
bGVuYW1lX3RvX3VyaSA9IGxhbWJkYSBuYW1lOiBuYW1lCiAKICAgICAgICAgcnVubmVyID0gcnVu
X3dlYmtpdF90ZXN0cy5UZXN0UnVubmVyKHBvcnQ9bW9ja19wb3J0LCBvcHRpb25zPU1vY2soKSwK
LSAgICAgICAgICAgIHByaW50ZXI9TW9jaygpLCBtZXNzYWdlX2Jyb2tlcj1Nb2NrKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVyPU1vY2soKSkK
ICAgICAgICAgZXhwZWN0ZWRfaHRtbCA9IHUiIiI8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxl
PkxheW91dCBUZXN0IFJlc3VsdHMgKHRpbWUpPC90aXRsZT4KQEAgLTQ5Miw3ICs1MTQsNyBAQCBj
bGFzcyBUZXN0UnVubmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICMgVGVzdCB0
aGF0IF9zaGFyZF90ZXN0cyBpbiBydW5fd2Via2l0X3Rlc3RzLlRlc3RSdW5uZXIgcmVhbGx5CiAg
ICAgICAgICMgcHV0IHRoZSBodHRwIHRlc3RzIGZpcnN0IGluIHRoZSBxdWV1ZS4KICAgICAgICAg
cnVubmVyID0gVGVzdFJ1bm5lcldyYXBwZXIocG9ydD1Nb2NrKCksIG9wdGlvbnM9TW9jaygpLAot
ICAgICAgICAgICAgcHJpbnRlcj1Nb2NrKCksIG1lc3NhZ2VfYnJva2VyPU1vY2soKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlcj1Nb2NrKCkpCiAKICAgICAgICAg
dGVzdF9saXN0ID0gWwogICAgICAgICAgICJMYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdW5p
Y29kZS5odG0iLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>