<?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>10906</bug_id>
          
          <creation_ts>2006-09-17 13:40:03 -0700</creation_ts>
          <short_desc>Parallelize run-webkit-tests</short_desc>
          <delta_ts>2010-04-08 00:46:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>10912</dependson>
    
    <dependson>24704</dependson>
    
    <dependson>25101</dependson>
    
    <dependson>25128</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dev+webkit</cc>
    
    <cc>dpranke</cc>
    
    <cc>emacemac7</cc>
    
    <cc>eric</cc>
    
    <cc>galpeter</cc>
    
    <cc>hamaji</cc>
    
    <cc>jacob.refstrup</cc>
    
    <cc>levin</cc>
    
    <cc>mrowe</cc>
    
    <cc>ossy</cc>
    
    <cc>pknight</cc>
    
    <cc>webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>55763</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-09-17 13:40:03 -0700</bug_when>
    <thetext>Make run-webkit-tests run one DumpRenderTree instance per processor. Make this the default, but add an option to disable it or limit the number of instances.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55804</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-18 00:29:19 -0700</bug_when>
    <thetext>This will require us to fix all the inter-test dependancies.  (which is a good thing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55805</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-18 01:01:50 -0700</bug_when>
    <thetext>This will likely require using threading in the run-webkit-tests perl script:
http://www.mathematik.uni-ulm.de/help/perl5/doc/perlthrtut.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48384</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-10-31 09:14:42 -0800</bug_when>
    <thetext>From an IRC discussion, some of difficulties that needs to be fixed:
- several Apache instances;
- sharing of icon database, cookies and disk cache;
- changing the display profile.

Anything else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85744</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-07-10 21:52:28 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; From an IRC discussion, some of difficulties that needs to be fixed:
&gt; - several Apache instances;
&gt; - sharing of icon database, cookies and disk cache;
&gt; - changing the display profile.
&gt; 
&gt; Anything else?

I expect that we would implement this by running multiple instances of DRT.  Instead of say multiple threads in one DRT.  I assume we&apos;re all on the same page about that part. :)

One running Apache should be enough to serve for all of these DRT instances, no?

Icon DB, Cookies, Cache, etc. need to find some way to not be shared, yes.

The changing the display profile should ideally be broken out into a separate tool, which knows how to set and reset the display profile.  run-webkit-tests could then launch that tool.  (Or just launch DRT with a specific set/reset arg).

This was probably all said over IRC... but I&apos;ve said it here just in case my comments are helpful. :)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85751</commentid>
    <comment_count>5</comment_count>
    <who name="Jacob Refstrup">jacob.refstrup</who>
    <bug_when>2008-07-10 22:35:54 -0700</bug_when>
    <thetext>My initial thoughts for a design were as follows:

- The main test loop starts with doing an openDumpTool(); just prior to that we would 
    - if total number of outstanding tests was greater than threshold then wait for an one to finish
    - then fork another test (essentially just forking the perl program)
    - when test is done don&apos;t update the $tests{result} hash but rather exit with an error code
       and have the parent use that error code to update $tests{result}.
 
Pros:
- relatively simple

Cons:
- extra (perl) process per test

Other ideas:
- perhaps use real threads (rather than processes) to avoid overhead;  not sure how the SIGPIPE handler would work then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85752</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-07-10 22:38:15 -0700</bug_when>
    <thetext>An extra perl process per test sounds like a large amount of overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85754</commentid>
    <comment_count>7</comment_count>
    <who name="Jacob Refstrup">jacob.refstrup</who>
    <bug_when>2008-07-10 22:55:38 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; An extra perl process per test sounds like a large amount of overhead.
&gt; 

It does... Hm. 

Looking more closely at the current run-webkit-tests I realize that it attempts to keep the current DRT open by default for 1000 tests. So perhaps the best way of doing it is to keep N instances of DRT open for 1000 tests. That will leave one perl process coordinating everything (which is fine) but there&apos;s some logic needed to figure out which pipe was broken (in case of one of the DRTs crashing) and we need some select logic to wait for the output to be available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85755</commentid>
    <comment_count>8</comment_count>
    <who name="Jacob Refstrup">jacob.refstrup</who>
    <bug_when>2008-07-11 00:36:17 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; This will require us to fix all the inter-test dependancies.  (which is a good
&gt; thing)
&gt; 

Are the some examples of inter-test dependencies that I could check out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85756</commentid>
    <comment_count>9</comment_count>
    <who name="Jacob Refstrup">jacob.refstrup</who>
    <bug_when>2008-07-11 00:40:48 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Looking more closely at the current run-webkit-tests I realize that it attempts
&gt; to keep the current DRT open by default for 1000 tests. So perhaps the best way
&gt; of doing it is to keep N instances of DRT open for 1000 tests. That will leave
&gt; one perl process coordinating everything (which is fine) but there&apos;s some logic
&gt; needed to figure out which pipe was broken (in case of one of the DRTs
&gt; crashing) and we need some select logic to wait for the output to be available.
&gt; 

It looks like if we simply keep track of all the DRT instances and their file-handles and PIDs then we can use waitpid(-1,WNOHANG) in the SIGPIPE handler to figure out which DRT instance failed.

The prologue and epilogue stuff will require some serialization -- but right now it looks like it&apos;s only windows that use them; and it&apos;d be a great start if just MacOSX and linux could use parallel DRTs.   

I&apos;ll start putting something together...
- Jacob</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85759</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-07-11 01:03:25 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Are the some examples of inter-test dependencies that I could check out?

You can try running the tests with --singly and/or --reverse options, which results in a bunch of failures. I am not aware of any interdependencies that are not caught by this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85760</commentid>
    <comment_count>11</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-07-11 01:14:58 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; Are the some examples of inter-test dependencies that I could check out?
&gt; 
&gt; You can try running the tests with --singly and/or --reverse options, which
&gt; results in a bunch of failures. I am not aware of any interdependencies that
&gt; are not caught by this.
&gt; 

Or --random, if you are very adventurous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112851</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-09 10:15:24 -0700</bug_when>
    <thetext>*** Bug 24460 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114600</commentid>
    <comment_count>13</comment_count>
      <attachid>28811</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-20 16:53:39 -0700</bug_when>
    <thetext>Created attachment 28811
Just my work in progress on this bug.

This attachment isn&apos;t ready for review.

It has several issues that I need to fix but I think it is headed in a nice direction and gives a feel for my current direction on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116904</commentid>
    <comment_count>14</comment_count>
      <attachid>29339</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-04-08 10:47:11 -0700</bug_when>
    <thetext>Created attachment 29339
New work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165131</commentid>
    <comment_count>15</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-11-19 15:53:15 -0800</bug_when>
    <thetext>Unassigning from myself as I won&apos;t have time to work on this in the foreseeable future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204913</commentid>
    <comment_count>16</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-26 19:04:06 -0700</bug_when>
    <thetext>We might want to consider marking this as WONTFIX and just switching to new-run-webkit-tests, since that does support running in parallel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210054</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-08 00:46:01 -0700</bug_when>
    <thetext>Yup.  We&apos;re very close to having new-run-webkit-tests ready for prime-time.  Closing this as WONTFIX.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28811</attachid>
            <date>2009-03-20 16:53:39 -0700</date>
            <delta_ts>2009-04-08 10:47:11 -0700</delta_ts>
            <desc>Just my work in progress on this bug.</desc>
            <filename>wip.txt</filename>
            <type>text/plain</type>
            <size>20436</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
aW5kZXggOTRhOGQ4Mi4uMmQ1ODQ0NCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
KysrIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0wMy0yMCAg
RGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI0NzA0CisKKyAgICAgICAgQWxsb3cgdGhlIGxvY2FsIGNhY2hlIGRpcmVjdG9y
eSB0byBiZSBzZXQgdXNpbmcgYSBkZWZhdWx0cyBrZXkuCisKKyAgICAgICAgKiBNaXNjL1dlYktp
dE5TU3RyaW5nRXh0cmFzLmg6CisgICAgICAgICogTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5t
OgorICAgICAgICAoK1tOU1N0cmluZyBfd2Via2l0X2xvY2FsQ2FjaGVEaXJlY3RvcnlXaXRoQnVu
ZGxlSWRlbnRpZmllcjpdKToKKyAgICAgICAgKiBXZWJLaXQuZXhwOgorCiAyMDA5LTAzLTE3ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVs
ZSBQZXRlcnNvbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4
dHJhcy5oIGIvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLmgKaW5kZXggNDcw
NTZjNi4uZjI1MjQzMCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5n
RXh0cmFzLmgKKysrIGIvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLmgKQEAg
LTI4LDYgKzI4LDggQEAKIAogI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KIAorZXh0ZXJuIE5TU3Ry
aW5nICpXZWJLaXRMb2NhbENhY2hlRGVmYXVsdHNLZXk7CisKIEBpbnRlcmZhY2UgTlNTdHJpbmcg
KFdlYktpdEV4dHJhcykKIAogLSAodm9pZClfd2ViX2RyYXdBdFBvaW50OihOU1BvaW50KXBvaW50
IGZvbnQ6KE5TRm9udCAqKWZvbnQgdGV4dENvbG9yOihOU0NvbG9yICopdGV4dENvbG9yOwpkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm0gYi9XZWJLaXQv
bWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubQppbmRleCBmMzA3N2QzLi45MGM5ZDk2IDEw
MDY0NAotLS0gYS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubQorKysgYi9X
ZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubQpAQCAtMzcsNiArMzcsOCBAQAog
I2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgogI2ltcG9ydCA8c3lzL3BhcmFtLmg+CiAKK05TU3Ry
aW5nICpXZWJLaXRMb2NhbENhY2hlRGVmYXVsdHNLZXkgPSBAIldlYktpdExvY2FsQ2FjaGUiOwor
CiBAaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKFdlYktpdEV4dHJhcykKIAogc3RhdGljIEJPT0wg
Y2FuVXNlRmFzdFJlbmRlcmVyKGNvbnN0IFVuaUNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbGVuZ3Ro
KQpAQCAtMjk1LDIwICsyOTcsMjQgQEAgc3RhdGljIEJPT0wgY2FuVXNlRmFzdFJlbmRlcmVyKGNv
bnN0IFVuaUNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQogCiArIChOU1N0cmluZyAqKV93
ZWJraXRfbG9jYWxDYWNoZURpcmVjdG9yeVdpdGhCdW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyop
YnVuZGxlSWRlbnRpZmllcgogewotICAgIE5TU3RyaW5nKiBjYWNoZURpciA9IG5pbDsKLSAgICAK
KyAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdOworICAgIE5TU3RyaW5nICpjYWNoZURpciA9IFtkZWZhdWx0cyBvYmplY3RG
b3JLZXk6V2ViS2l0TG9jYWxDYWNoZURlZmF1bHRzS2V5XTsKKworICAgIGlmICghY2FjaGVEaXIg
fHwgIVtjYWNoZURpciBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7CiAjaWZkZWYg
QlVJTERJTkdfT05fVElHRVIKLSAgICBjYWNoZURpciA9IFtOU0hvbWVEaXJlY3RvcnkoKSBzdHJp
bmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJMaWJyYXJ5L0NhY2hlcyJdOworICAgICAgICBj
YWNoZURpciA9IFtOU0hvbWVEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25l
bnQ6QCJMaWJyYXJ5L0NhY2hlcyJdOwogI2Vsc2UKLSAgICBjaGFyIGNhY2hlRGlyZWN0b3J5W01B
WFBBVEhMRU5dOwotICAgIHNpemVfdCBjYWNoZURpcmVjdG9yeUxlbiA9IGNvbmZzdHIoX0NTX0RB
UldJTl9VU0VSX0NBQ0hFX0RJUiwgY2FjaGVEaXJlY3RvcnksIE1BWFBBVEhMRU4pOworICAgICAg
ICBjaGFyIGNhY2hlRGlyZWN0b3J5W01BWFBBVEhMRU5dOworICAgICAgICBzaXplX3QgY2FjaGVE
aXJlY3RvcnlMZW4gPSBjb25mc3RyKF9DU19EQVJXSU5fVVNFUl9DQUNIRV9ESVIsIGNhY2hlRGly
ZWN0b3J5LCBNQVhQQVRITEVOKTsKICAgICAKLSAgICBpZiAoY2FjaGVEaXJlY3RvcnlMZW4pCi0g
ICAgICAgIGNhY2hlRGlyID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzdHJpbmdX
aXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOmNhY2hlRGlyZWN0b3J5IGxlbmd0aDpjYWNoZURp
cmVjdG9yeUxlbiAtIDFdOworICAgICAgICBpZiAoY2FjaGVEaXJlY3RvcnlMZW4pCisgICAgICAg
ICAgICBjYWNoZURpciA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gc3RyaW5nV2l0
aEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbjpjYWNoZURpcmVjdG9yeSBsZW5ndGg6Y2FjaGVEaXJl
Y3RvcnlMZW4gLSAxXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FjaGVEaXIgPSBuaWw7
CiAjZW5kaWYKKyAgICB9CiAKICAgICByZXR1cm4gW2NhY2hlRGlyIHN0cmluZ0J5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDpidW5kbGVJZGVudGlmaWVyXTsKIH0KIAotCiBAZW5kCmRpZmYgLS1naXQg
YS9XZWJLaXQvbWFjL1dlYktpdC5leHAgYi9XZWJLaXQvbWFjL1dlYktpdC5leHAKaW5kZXggZDE2
Njg5NC4uMTkwNTAxZCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJLaXQuZXhwCisrKyBiL1dl
YktpdC9tYWMvV2ViS2l0LmV4cApAQCAtODIsNiArODIsNyBAQCBfV2ViS2l0RXJyb3JEb21haW4K
IF9XZWJLaXRFcnJvck1JTUVUeXBlS2V5CiBfV2ViS2l0RXJyb3JQbHVnSW5OYW1lS2V5CiBfV2Vi
S2l0RXJyb3JQbHVnSW5QYWdlVVJMU3RyaW5nS2V5CitfV2ViS2l0TG9jYWxDYWNoZURlZmF1bHRz
S2V5CiBfV2ViTG9jYWxpemVkU3RyaW5nCiBfV2ViUGx1Z0luQXR0cmlidXRlc0tleQogX1dlYlBs
dWdJbkJhc2VVUkxLZXkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktp
dFRvb2xzL0NoYW5nZUxvZwppbmRleCA0MjI3NzYwLi5jZTE5NDQ5IDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMDktMDMtMjAgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDcwNAorCisgICAgICAgIE1ha2UgcGF0aHMg
d2hlcmUgZGF0YSBpcyBzYXZlZCBiZSBzY29wZWQgdG8gdGhlIH4gZGlyZWN0b3J5LAorICAgICAg
ICBzbyB0aGF0IG9uZSBjYW4gcnVuIGluZGVwZW5kZW50IGluc3RhbmNlcyBieSBzZXR0aW5nIENG
RklYRURfVVNFUl9IT01FLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tOgorICAgICAgICAobGlicmFyeVBhdGgpOgorICAgICAgICAoc2V0RGVmYXVsdHNU
b0NvbnNpc3RlbnRWYWx1ZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKGR1bXBGcmFtZUFzUERGKToK
KwogMjAwOS0wMy0xNyAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IDU5MjBiYTIuLjgzMWQ5NDkgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQorKysgYi9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KQEAgLTY0LDYg
KzY0LDcgQEAKICNpbXBvcnQgPFdlYktpdC9XZWJIaXN0b3J5Lmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViSW5zcGVjdG9yLmg+
CisjaW1wb3J0IDxXZWJLaXQvV2ViS2l0TlNTdHJpbmdFeHRyYXMuaD4KICNpbXBvcnQgPFdlYktp
dC9XZWJQbHVnaW5EYXRhYmFzZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlByZWZlcmVuY2VzLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg+CkBAIC0zMDYsNiArMzA3
LDExIEBAIHZvaWQgdGVzdFN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nKCkK
ICAgICBbcG9vbCByZWxlYXNlXTsKIH0KIAorc3RhdGljIE5TU3RyaW5nICpsaWJyYXJ5UGF0aCgp
Cit7CisgICAgcmV0dXJuIFtAIn4vTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlIiBzdHJpbmdCeUV4cGFuZGluZ1RpbGRlSW5QYXRoXTsKK30KKwogc3RhdGljIHZvaWQg
c2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXNGb3JUZXN0aW5nKCkKIHsKICAgICAvLyBHaXZl
IHNvbWUgY2xlYXIgdG8gdW5kb2N1bWVudGVkIGRlZmF1bHRzIHZhbHVlcwpAQCAtMzMyLDkgKzMz
OCwxMCBAQCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlc0ZvclRlc3Rp
bmcoKQogICAgIGlmIChpbml0aWFsVmFsdWUpCiAgICAgICAgIENGUHJlZmVyZW5jZXNTZXRWYWx1
ZShDRlNUUigiQXBwbGVTY3JvbGxCYXJWYXJpYW50IiksIGluaXRpYWxWYWx1ZS5nZXQoKSwga0NG
UHJlZmVyZW5jZXNBbnlBcHBsaWNhdGlvbiwga0NGUHJlZmVyZW5jZXNDdXJyZW50VXNlciwga0NG
UHJlZmVyZW5jZXNBbnlIb3N0KTsKIAotICAgIE5TU3RyaW5nICpsaWJyYXJ5UGF0aCA9IFtAIn4v
TGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0L0R1bXBSZW5kZXJUcmVlIiBzdHJpbmdCeUV4cGFu
ZGluZ1RpbGRlSW5QYXRoXTsKLSAgICBbZGVmYXVsdHMgc2V0T2JqZWN0OltsaWJyYXJ5UGF0aCBz
dHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJEYXRhYmFzZXMiXSBmb3JLZXk6V2ViRGF0
YWJhc2VEaXJlY3RvcnlEZWZhdWx0c0tleV07Ci0gICAgCisgICAgTlNTdHJpbmcgKnBhdGggPSBs
aWJyYXJ5UGF0aCgpOworICAgIFtkZWZhdWx0cyBzZXRPYmplY3Q6W3BhdGggc3RyaW5nQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OkAiRGF0YWJhc2VzIl0gZm9yS2V5OldlYkRhdGFiYXNlRGlyZWN0
b3J5RGVmYXVsdHNLZXldOworICAgIFtkZWZhdWx0cyBzZXRPYmplY3Q6W3BhdGggc3RyaW5nQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiTG9jYWxDYWNoZSJdIGZvcktleTpXZWJLaXRMb2NhbENh
Y2hlRGVmYXVsdHNLZXldOworCiAgICAgV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW1dl
YlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdOwogCiAgICAgW3ByZWZlcmVuY2VzIHNl
dFN0YW5kYXJkRm9udEZhbWlseTpAIlRpbWVzIl07CkBAIC02MzUsNyArNjQyLDcgQEAgc3RhdGlj
IE5TRGF0YSAqZHVtcEZyYW1lQXNQREYoV2ViRnJhbWUgKmZyYW1lKQogICAgIC8vIGxpa2V3aXNl
ICtbTlNWaWV3IGRhdGFXaXRoUERGSW5zaWRlUmVjdDpdIGFsc28gcHJpbnRzIHRvIGEgc2luZ2xl
IGNvbnRpbnVvdXMgcGFnZQogICAgIC8vIFRoZSBnb2FsIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8g
dGVzdCAicmVhbCIgcHJpbnRpbmcgYWNyb3NzIG11bHRpcGxlIHBhZ2VzLgogICAgIC8vIEZJWE1F
OiBJdCdzIHBvc3NpYmxlIHRoZXJlIG1pZ2h0IGJlIHByaW50aW5nIFNQSSB0byBsZXQgdXMgcHJp
bnQgYSBtdWx0aS1wYWdlIFBERiB0byBhbiBOU0RhdGEgb2JqZWN0Ci0gICAgTlNTdHJpbmcgKnBh
dGggPSBAIi90bXAvdGVzdC5wZGYiOworICAgIE5TU3RyaW5nICpwYXRoID0gW2xpYnJhcnlQYXRo
KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAidG1wL3Rlc3QucGRmIl07CiAKICAg
ICBOU011dGFibGVEaWN0aW9uYXJ5ICpwcmludEluZm9EaWN0ID0gW05TTXV0YWJsZURpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhEaWN0aW9uYXJ5OltbTlNQcmludEluZm8gc2hhcmVkUHJpbnRJbmZv
XSBkaWN0aW9uYXJ5XV07CiAgICAgW3ByaW50SW5mb0RpY3Qgc2V0T2JqZWN0Ok5TUHJpbnRTYXZl
Sm9iIGZvcktleTpOU1ByaW50Sm9iRGlzcG9zaXRpb25dOwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy9ydW4td2Via2l0LXRlc3RzIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Vi
a2l0LXRlc3RzCmluZGV4IGNkYmU4ZTQuLjAzNGViM2MgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvcnVuLXdlYmtpdC10ZXN0cworKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13
ZWJraXQtdGVzdHMKQEAgLTU3LDYgKzU3LDcgQEAgdXNlIEZpbGU6OlNwZWM7CiB1c2UgRmlsZTo6
U3BlYzo6RnVuY3Rpb25zOwogdXNlIEZpbmRCaW47CiB1c2UgR2V0b3B0OjpMb25nOwordXNlIElP
OjpIYW5kbGU7CiB1c2UgSVBDOjpPcGVuMjsKIHVzZSBJUEM6Ok9wZW4zOwogdXNlIFRpbWU6Okhp
UmVzIHF3KHRpbWUgdXNsZWVwKTsKQEAgLTkwLDcgKzkxLDcgQEAgc3ViIHRvVVJMKCQpOwogc3Vi
IHRvV2luZG93c1BhdGgoJCk7CiBzdWIgY2xvc2VDeWdwYXRocygpOwogc3ViIHZhbGlkYXRlU2tp
cHBlZEFyZygkJDskKTsKLXN1YiBodG1sRm9yUmVzdWx0c1NlY3Rpb24oXEAkJik7CitzdWIgaHRt
bEZvclJlc3VsdHNTZWN0aW9uKFxAJCYkKTsKIHN1YiBkZWxldGVFeHBlY3RlZEFuZEFjdHVhbFJl
c3VsdHMoJCk7CiBzdWIgcmVjb3JkQWN0dWFsUmVzdWx0c0FuZERpZmYoJCQpOwogc3ViIGJ1aWxk
UGxhdGZvcm1IaWVyYXJjaHkoKTsKQEAgLTEyNyw2ICsxMjgsNyBAQCBteSAkdXNlVmFsZ3JpbmQg
PSAwOwogbXkgJHN0cmljdFRlc3RpbmcgPSAwOwogbXkgJGdlbmVyYXRlTmV3UmVzdWx0cyA9IGlz
QXBwbGVNYWNXZWJLaXQoKSA/IDEgOiAwOwogbXkgJHN0cmlwRWRpdGluZ0NhbGxiYWNrcyA9IGlz
Q3lnd2luKCk7CitteSAkcGFyYWxsZWxSdW5zID0gMTsKIG15ICRydW5TYW1wbGUgPSAxOwogbXkg
JHJvb3Q7CiBteSAkcmV2ZXJzZVRlc3RzID0gMDsKQEAgLTE3Miw2ICsxNzQsOCBAQCBteSAkcHJv
Z3JhbU5hbWUgPSBiYXNlbmFtZSgkMCk7CiBteSAkbGF1bmNoU2FmYXJpRGVmYXVsdCA9ICRsYXVu
Y2hTYWZhcmkgPyAibGF1bmNoIiA6ICJkbyBub3QgbGF1bmNoIjsKIG15ICRodHRwRGVmYXVsdCA9
ICR0ZXN0SFRUUCA/ICJydW4iIDogImRvIG5vdCBydW4iOwogbXkgJHNhbXBsZURlZmF1bHQgPSAk
cnVuU2FtcGxlID8gInJ1biIgOiAiZG8gbm90IHJ1biI7CitteSAkZXBpbG9nID0gMTsKK215ICRw
cm9sb2cgPSAxOwogCiAjIEZJWE1FOiAiLS1zdHJpY3QiIHNob3VsZCBiZSByZW5hbWVkIHRvIHF0
LW1hYy1jb21wYXJpc29uLCBvciBzb21ldGhpbmcgYWxvbmcgdGhvc2UgbGluZXMuCiBteSAkdXNh
Z2UgPSA8PEVPRjsKQEAgLTE3OSw2ICsxODMsNyBAQCBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRp
b25zXSBbdGVzdGRpcnx0ZXN0cGF0aCAuLi5dCiAgIC0tYWRkLXBsYXRmb3JtLWV4Y2VwdGlvbnMg
ICAgICAgUHV0IG5ldyByZXN1bHRzIGZvciBub24tcGxhdGZvcm0tc3BlY2lmaWMgZmFpbGluZyB0
ZXN0cyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyByZXN1bHRzIGRpcmVjdG9yeQogICAtLWNv
bXBsZXgtdGV4dCAgICAgICAgICAgICAgICAgIFVzZSB0aGUgY29tcGxleCB0ZXh0IGNvZGUgcGF0
aCBmb3IgYWxsIHRleHQgKE1hYyBPUyBYIGFuZCBXaW5kb3dzIG9ubHkpCiAgIC1jfC0tY29uZmln
dXJhdGlvbiBjb25maWcgICAgICAgU2V0IER1bXBSZW5kZXJUcmVlIGJ1aWxkIGNvbmZpZ3VyYXRp
b24KKyAgLS1bbm8tXWVwaWxvZyAgICAgICAgICAgICAgICAgICBQcmludCBlcGlsb2cgaW5mb3Jt
YXRpb24gKGhvdyBsb25nIHRlc3RzIHRvb2ssIGhvdyBtYW55IHBhc3NlZCwgZmFpbGVkLCBldGMu
KSAgKGRlZmF1bHQ6ICRlcGlsb2cpCiAgIC1nfC0tZ3VhcmQtbWFsbG9jICAgICAgICAgICAgICAg
RW5hYmxlIG1hbGxvYyBndWFyZAogICAtLWhlbHAgICAgICAgICAgICAgICAgICAgICAgICAgIFNo
b3cgdGhpcyBoZWxwIG1lc3NhZ2UKICAgLS1bbm8tXWh0dHAgICAgICAgICAgICAgICAgICAgICBS
dW4gKG9yIGRvIG5vdCBydW4pIGh0dHAgdGVzdHMgKGRlZmF1bHQ6ICRodHRwRGVmYXVsdCkKQEAg
LTE5MCw2ICsxOTUsNyBAQCBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXSBbdGVzdGRpcnx0
ZXN0cGF0aCAuLi5dCiAgIC0tdG9sZXJhbmNlIHQgICAgICAgICAgICAgICAgICAgSWdub3JlIGlt
YWdlIGRpZmZlcmVuY2VzIGxlc3MgdGhhbiB0aGlzIHBlcmNlbnRhZ2UgKGRlZmF1bHQ6ICR0b2xl
cmFuY2UpCiAgIC0tcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGUgdGhlIGRl
dGVjdGVkIHBsYXRmb3JtIHRvIHVzZSBmb3IgdGVzdHMgYW5kIHJlc3VsdHMgKGRlZmF1bHQ6ICRw
bGF0Zm9ybSkKICAgLS1wb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWIgc2VydmVyIHBv
cnQgdG8gdXNlIHdpdGggaHR0cCB0ZXN0cworICAtLVtuby1dcHJvbG9nICAgICAgICAgICAgICAg
ICAgIFByaW50IHByb2xvZyBpbmZvcm1hdGlvbiAod2hlcmUgdGVzdHMgYXJlIHJ1biBmcm9tIGFu
ZCBob3cgbWFueSkgKGRlZmF1bHQ6ICRwcm9sb2cpCiAgIC1xfC0tcXVpZXQgICAgICAgICAgICAg
ICAgICAgICAgTGVzcyB2ZXJib3NlIG91dHB1dAogICAtLXJlc2V0LXJlc3VsdHMgICAgICAgICAg
ICAgICAgIFJlc2V0IEFMTCByZXN1bHRzIChpbmNsdWRpbmcgcGl4ZWwgdGVzdHMgaWYgLS1waXhl
bC10ZXN0cyBpcyBzZXQpCiAgIC1vfC0tcmVzdWx0cy1kaXJlY3RvcnkgICAgICAgICAgT3V0cHV0
IHJlc3VsdHMgZGlyZWN0b3J5IChkZWZhdWx0OiAkdGVzdFJlc3VsdHNEaXJlY3RvcnkpCkBAIC0y
MTIsMTggKzIxOCwyMSBAQCBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXSBbdGVzdGRpcnx0
ZXN0cGF0aCAuLi5dCiBFT0YKIAogc2V0Q29uZmlndXJhdGlvbigpOwotCitteSBAb3JpZ2luYWxB
UkdWID0gQEFSR1Y7CiBteSAkZ2V0T3B0aW9uc1Jlc3VsdCA9IEdldE9wdGlvbnMoCiAgICAgJ2Nv
bXBsZXgtdGV4dCcgPT4gXCRjb21wbGV4VGV4dCwKKyAgICAnZXBpbG9nIScgPT4gXCRlcGlsb2cs
CiAgICAgJ2d1YXJkLW1hbGxvY3xnJyA9PiBcJGd1YXJkTWFsbG9jLAogICAgICdoZWxwJyA9PiBc
JHNob3dIZWxwLAogICAgICdodHRwIScgPT4gXCR0ZXN0SFRUUCwKICAgICAnaWdub3JlLXRlc3Rz
fGk9cycgPT4gXCRpZ25vcmVUZXN0cywKICAgICAnbGF1bmNoLXNhZmFyaSEnID0+IFwkbGF1bmNo
U2FmYXJpLAogICAgICdsZWFrc3xsJyA9PiBcJHNob3VsZENoZWNrTGVha3MsCisgICAgJ3BhcmFs
bGVsfG06MScgPT4gXCRwYXJhbGxlbFJ1bnMsCiAgICAgJ3BpeGVsLXRlc3RzfHAnID0+IFwkcGl4
ZWxUZXN0cywKICAgICAncGxhdGZvcm09cycgPT4gXCRwbGF0Zm9ybSwKICAgICAncG9ydD1pJyA9
PiBcJGh0dHBkUG9ydCwKKyAgICAncHJvbG9nIScgPT4gXCRwcm9sb2csCiAgICAgJ3F1aWV0fHEn
ID0+IFwkcXVpZXQsCiAgICAgJ3Jlc2V0LXJlc3VsdHMnID0+IFwkcmVzZXRSZXN1bHRzLAogICAg
ICduZXctdGVzdC1yZXN1bHRzIScgPT4gXCRnZW5lcmF0ZU5ld1Jlc3VsdHMsCkBAIC0yODcsMTUg
KzI5NiwzOSBAQCBpZiAoIWRlZmluZWQoJHJvb3QpKSB7CiAgICAgfQogfQogCi1teSAkZHVtcFRv
b2xOYW1lID0gIkR1bXBSZW5kZXJUcmVlIjsKLSRkdW1wVG9vbE5hbWUgLj0gIl9kZWJ1ZyIgaWYg
aXNDeWd3aW4oKSAmJiAkY29uZmlndXJhdGlvbiBuZSAiUmVsZWFzZSI7CisKK215ICRkdW1wVG9v
bE5hbWVCYXNlID0gIkR1bXBSZW5kZXJUcmVlIjsKKyRkdW1wVG9vbE5hbWVCYXNlIC49ICJfZGVi
dWciIGlmIGlzQ3lnd2luKCkgJiYgJGNvbmZpZ3VyYXRpb24gbmUgIlJlbGVhc2UiOworbXkgJGR1
bXBUb29sTmFtZSA9ICRkdW1wVG9vbE5hbWVCYXNlOword2hpbGUgKC1lICIkcHJvZHVjdERpci8k
ZHVtcFRvb2xOYW1lIikgeworICAgICRkdW1wVG9vbE5hbWUgLj0gcmFuZCgpOworfQogbXkgJGR1
bXBUb29sID0gIiRwcm9kdWN0RGlyLyRkdW1wVG9vbE5hbWUiOworc3ltbGluayAiJHByb2R1Y3RE
aXIvJGR1bXBUb29sTmFtZUJhc2UiLCAkZHVtcFRvb2w7CisKIGRpZSAiY2FuJ3QgZmluZCBleGVj
dXRhYmxlICRkdW1wVG9vbE5hbWUgKGxvb2tlZCBpbiAkcHJvZHVjdERpcilcbiIgdW5sZXNzIC14
ICRkdW1wVG9vbDsKIAogbXkgJGltYWdlRGlmZlRvb2wgPSAiJHByb2R1Y3REaXIvSW1hZ2VEaWZm
IjsKICRpbWFnZURpZmZUb29sIC49ICJfZGVidWciIGlmIGlzQ3lnd2luKCkgJiYgJGNvbmZpZ3Vy
YXRpb24gbmUgIlJlbGVhc2UiOwogZGllICJjYW4ndCBmaW5kIGV4ZWN1dGFibGUgJGltYWdlRGlm
ZlRvb2wgKGxvb2tlZCBpbiAkcHJvZHVjdERpcilcbiIgaWYgJHBpeGVsVGVzdHMgJiYgIS14ICRp
bWFnZURpZmZUb29sOwogCitpZiAoJHBhcmFsbGVsUnVucyA+IDEpIHsKKyAgICBteSAkaW5jb21w
YXRpYmxlT3B0aW9ucyA9ICIiOworICAgICRpbmNvbXBhdGlibGVPcHRpb25zIC49ICIgdW5zdXBw
b3J0ZWQgb3MiIGlmICFpc0RhcndpbigpOworICAgICRpbmNvbXBhdGlibGVPcHRpb25zIC49ICIg
cGl4ZWwtdGVzdHMiIGlmICRwaXhlbFRlc3RzOworICAgICRpbmNvbXBhdGlibGVPcHRpb25zIC49
ICIgbGVha3MiIGlmICRzaG91bGRDaGVja0xlYWtzOworICAgICRpbmNvbXBhdGlibGVPcHRpb25z
IC49ICIgbGVha3MiIGlmICRzaG91bGRDaGVja0xlYWtzOworICAgICRpbmNvbXBhdGlibGVPcHRp
b25zIC49ICIgc2xvd2VzdCIgaWYgJHJlcG9ydDEwU2xvd2VzdDsKKyAgICAkaW5jb21wYXRpYmxl
T3B0aW9ucyAuPSAiIHJhbmRvbSIgaWYgJHJhbmRvbWl6ZVRlc3RzOworICAgICRpbmNvbXBhdGli
bGVPcHRpb25zIC49ICIgcmV2ZXJzZSIgaWYgJHJldmVyc2VUZXN0czsKKyAgICAkaW5jb21wYXRp
YmxlT3B0aW9ucyAuPSAiIHRlc3RzIGxpc3RlZCIgaWYgQEFSR1Y7CisgICAgCisgICAgaWYgKCRp
bmNvbXBhdGlibGVPcHRpb25zKSB7CisJcHJpbnQgIioqIFR1cm5pbmcgb2ZmIHBhcmFsbGVsIG1v
ZGUgZHVlIHRvIGluY29tcGF0aWJsZSBvcHRpb25zOiAiIC4gJGluY29tcGF0aWJsZU9wdGlvbnMg
LiAiICoqXG4iOworCSRwYXJhbGxlbFJ1bnMgPSAxOworICAgIH0KK30KKwogY2hlY2tGcmFtZXdv
cmtzKCkgdW5sZXNzIGlzQ3lnd2luKCk7CiAKIG15ICRsYXlvdXRUZXN0c05hbWUgPSAiTGF5b3V0
VGVzdHMiOwpAQCAtMzA5LDcgKzM0Miw5IEBAICRleHBlY3RlZERpcmVjdG9yeSA9ICRFTlZ7Ildl
YktpdEV4cGVjdGVkVGVzdFJlc3VsdHNEaXJlY3RvcnkifSBpZiAkRU5WeyJXZWJLaXRFCiAKIG15
ICR0ZXN0UmVzdWx0cyA9IGNhdGZpbGUoJHRlc3RSZXN1bHRzRGlyZWN0b3J5LCAicmVzdWx0cy5o
dG1sIik7CiAKLXByaW50ICJSdW5uaW5nIHRlc3RzIGZyb20gJHRlc3REaXJlY3RvcnlcbiI7Citp
ZiAoJHByb2xvZykgeworICAgIHByaW50ICJSdW5uaW5nIHRlc3RzIGZyb20gJHRlc3REaXJlY3Rv
cnlcbiI7Cit9CiBpZiAoJHBpeGVsVGVzdHMpIHsKICAgICBwcmludCAiRW5hYmxpbmcgcGl4ZWwg
dGVzdHMgd2l0aCBhIHRvbGVyYW5jZSBvZiAkdG9sZXJhbmNlJVxuIjsKICAgICBpZiAoaXNEYXJ3
aW4oKSkgewpAQCAtNDIwLDYgKzQ1NSwxMjkgQEAgbXkgJGZpbGVGaWx0ZXIgPSBzdWIgewogICAg
IH0KIH07CiAKK3N1YiBjcmVhdGVOZXdUZXN0UnVubmVyKCRcJFxAKQoreworICAgIG15ICgkbmVz
dGVkUnVuQXJncywgJHRlc3RSdW5uZXJUb3RhbENvdW50LCAkdGVzdERpcmVjdG9yaWVzKSA9IEBf
OworICAgIGlmICghQHskdGVzdERpcmVjdG9yaWVzfSkgeworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICArKyR7JHRlc3RSdW5uZXJUb3RhbENvdW50fTsKKyAgICBteSAkY3VycmVudFJ1
bkFyZ3MgPSAkbmVzdGVkUnVuQXJncyAuICIgLS1yZXN1bHRzLWRpcmVjdG9yeT0iIC4gY2F0ZGly
KCR0ZXN0UmVzdWx0c0RpcmVjdG9yeSwgInRlc3QiIC4gJHskdGVzdFJ1bm5lclRvdGFsQ291bnR9
KTsKKyAgICAkY3VycmVudFJ1bkFyZ3MgLj0gIiAiIC4gJHskdGVzdERpcmVjdG9yaWVzfVswXTsK
KyAgICBzaGlmdChAeyR0ZXN0RGlyZWN0b3JpZXN9KTsKKworICAgIG15ICRURVNUT1VUID0gSU86
OkhhbmRsZS0+bmV3OworICAgIG15ICRwaWQgPSBvcGVuMigkVEVTVE9VVCwgMCwgc291cmNlRGly
KCkgLiAiL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC10ZXN0cyIuICRjdXJyZW50UnVu
QXJncyk7CisgICAgc2V0RmlsZUhhbmRsZU5vbkJsb2NraW5nKCRURVNUT1VULCAxKTsKKyAgICBy
ZXR1cm4geworICAgICAgICAicGlkIiA9PiAkcGlkLAorICAgICAgICAib3V0IiA9PiAkVEVTVE9V
VCwKKyAgICB9OworfQorCiskfCA9IDE7CisKK2lmICgkcGFyYWxsZWxSdW5zID4gMSkgeworICAg
IG15ICRvdmVyYWxsU3RhcnRUaW1lID0gdGltZTsKKyAgICBteSBAdGVzdERpcmVjdG9yaWVzOwor
ICAgIG15IEBhbGxGaWxlcyA9IDwkdGVzdERpcmVjdG9yeS8qPjsKKyAgICBmb3IgKG15ICRpID0g
MDsgJGkgPCBAYWxsRmlsZXM7ICsrJGkpIHsKKwlteSAkZmlsZSA9ICRhbGxGaWxlc1skaV07Cisg
ICAgICAgIGlmICgtZCAkZmlsZSkgeworICAgICAgICAgICAgJEZpbGU6OkZpbmQ6OmRpciA9ICRm
aWxlOworCSAgICBpZiAoJGRpcmVjdG9yeUZpbHRlci0+KCRmaWxlKSkgeworCQlpZiAoJGZpbGUg
PX5tL0xheW91dFRlc3RzXC9mYXN0JC8gfHwgJGZpbGUgPX5tL0xheW91dFRlc3RzXC9zdmckLyB8
fCAkZmlsZSA9fm0vTGF5b3V0VGVzdHNcL3RhYmxlcyQvKSB7CisJCSAgICBwdXNoKEBhbGxGaWxl
cywgPCRmaWxlLyo+KTsKKwkJfSBlbHNlIHsKKwkJICAgIHB1c2ggQHRlc3REaXJlY3Rvcmllcywg
JGZpbGU7CisJCX0KKwkgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbXkgJXNsb3dUZXN0
cyA9ICgKKyAgICAgICAgIkxheW91dFRlc3RzL2h0dHAiID0+IDEsCisgICAgICAgICJMYXlvdXRU
ZXN0cy9kb20iID0+IDIsCisgICAgKTsKKworICAgIHN1YiBnZXRUZXN0RGlyU2NvcmUoJCkKKyAg
ICB7CisgICAgICAgIG15ICgkdGVzdERpcmVjdG9yeSkgPSBAXzsKKyAgICAgICAgJHRlc3REaXJl
Y3RvcnkgPX4gcy8oLiopKExheW91dFRlc3RzXC8uKikvJDIvOworICAgICAgICBteSAkc2NvcmUg
PSAkc2xvd1Rlc3RzeyR0ZXN0RGlyZWN0b3J5fTsKKyAgICAgICAgJHNjb3JlID0gMTAwMCBpZiAh
JHNjb3JlOworICAgICAgICByZXR1cm4gJHNjb3JlOworICAgIH0KKworICAgIHN1YiBzbG93ZXN0
VGVzdFN1aXRlc0ZpcnN0CisgICAgeworICAgICAgICBteSAkZmlyc3RTY29yZSA9IGdldFRlc3RE
aXJTY29yZSgkYSk7CisgICAgICAgIG15ICRzZWNvbmRTY29yZSA9IGdldFRlc3REaXJTY29yZSgk
Yik7CisgICAgICAgIG15ICRyZXN1bHQgPSAkZmlyc3RTY29yZSA8PT4gJHNlY29uZFNjb3JlOwor
ICAgICAgICAkcmVzdWx0ID0gJGEgY21wICRiIGlmICEkcmVzdWx0OworICAgICAgICByZXR1cm4g
JHJlc3VsdDsKKyAgICB9CisKKyAgICBAdGVzdERpcmVjdG9yaWVzID0gc29ydCBzbG93ZXN0VGVz
dFN1aXRlc0ZpcnN0IEB0ZXN0RGlyZWN0b3JpZXM7CisgICAgICAgIAorICAgIHJtdHJlZSAkdGVz
dFJlc3VsdHNEaXJlY3Rvcnk7CisgICAgbWtkaXIgJHRlc3RSZXN1bHRzRGlyZWN0b3J5OworICAg
IGZvciAobXkgJGkgPSAwOyAkaSA8IEBvcmlnaW5hbEFSR1Y7ICsrJGkpIHsKKwlpZiAoJG9yaWdp
bmFsQVJHVlskaV0gPX4gbS9eLS0obm8tKT8ocGFyYWxsZWx8c2xvd2VzdHxyb290fGxhdW5jaC1z
YWZhcml8cHJvbG9nfGVwaWxvZykvKSB7CisgICAgICAgICAgICBzcGxpY2UoQG9yaWdpbmFsQVJH
ViwgJGksIDEpOworICAgICAgICAgfQorICAgIH0KKyAgICBteSAkbmVzdGVkUnVuQXJncyA9ICIg
LS1yb290PSIgLiBwcm9kdWN0RGlyKCkgLiAiIC0tbm8tcHJvbG9nIC0tbm8tZXBpbG9nIC0tbm8t
bGF1bmNoLXNhZmFyaSAiIC4gam9pbigiICIsIEBvcmlnaW5hbEFSR1YpOyAjIC0tcmFuZG9tLW5h
bWUiOworICAgIG15ICR0ZXN0UnVubmVyVG90YWxDb3VudCA9IDA7CisKKyAgICBteSBAcnVubmVy
T3V0cHV0czsKKyAgICBteSBAYWN0aXZlUnVubmVyczsKKyAgICBkbyB7CisgICAgICAgIGZvciAo
bXkgJGkgPSAwOyAkaSA8IEBhY3RpdmVSdW5uZXJzOyArKyRpKSB7CisgICAgICAgICAgICBpZiAo
d2FpdHBpZCgkYWN0aXZlUnVubmVyc1skaV17InBpZCJ9LCBXTk9IQU5HKSkgeworICAgICAgICAg
ICAgICAgICRhY3RpdmVSdW5uZXJzWyRpXXsicnVubmVyT3V0cHV0In17ImFjdGl2ZSJ9ID0gMDsK
KyAgICAgICAgICAgICAgICBzcGxpY2UoQGFjdGl2ZVJ1bm5lcnMsICRpLCAxKTsKKyAgICAgICAg
ICAgICAgICAtLSRpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgd2hpbGUg
KEBhY3RpdmVSdW5uZXJzIDwgJHBhcmFsbGVsUnVucykgeworICAgICAgICAgICAgbXkgJHRlc3RS
dW5uZXIgPSBjcmVhdGVOZXdUZXN0UnVubmVyKCRuZXN0ZWRSdW5BcmdzLCAkdGVzdFJ1bm5lclRv
dGFsQ291bnQsIEB0ZXN0RGlyZWN0b3JpZXMpOworICAgICAgICAgICAgaWYgKCR0ZXN0UnVubmVy
KSB7CisgICAgICAgICAgICAgICAgbXkgJHJ1bm5lck91dHB1dCA9IHsKKyAgICAgICAgICAgICAg
ICAgICAgImFjdGl2ZSIgPT4gMSwKKyAgICAgICAgICAgICAgICAgICAgInBpZCIgPT4gJCR0ZXN0
UnVubmVyeyJwaWQifSwKKyAgICAgICAgICAgICAgICAgICAgIm91dCIgPT4gJCR0ZXN0UnVubmVy
eyJvdXQifSwKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIG15ICRhY3RpdmVS
dW5uZXIgPSB7CisgICAgICAgICAgICAgICAgICAgICJwaWQiID0+ICQkdGVzdFJ1bm5lcnsicGlk
In0sCisgICAgICAgICAgICAgICAgICAgICJydW5uZXJPdXRwdXQiID0+ICRydW5uZXJPdXRwdXQs
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBwdXNoIEBhY3RpdmVSdW5uZXJz
LCAkYWN0aXZlUnVubmVyOworICAgICAgICAgICAgICAgIHB1c2ggQHJ1bm5lck91dHB1dHMsICRy
dW5uZXJPdXRwdXQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3Q7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBteSAkZGF0YTsKKyAgICAgICAg
bXkgJG4gPSByZWFkKCRydW5uZXJPdXRwdXRzWzBdeyJvdXQifSwgJGRhdGEsIDEwMCk7CisgICAg
ICAgIGlmIChkZWZpbmVkKCRuKSAmJiAkbikgeworICAgICAgICAgICAgcHJpbnQgJGRhdGE7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoJHJ1bm5lck91dHB1dHNbMF17ImFjdGl2
ZSJ9KSB7CisgICAgICAgICAgICAgICAgdXNsZWVwKDEwMDAwMCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGNsb3NlKCRydW5uZXJPdXRwdXRzWzBdeyJvdXQifSk7Cisg
ICAgICAgICAgICAgICAgc2hpZnQoQHJ1bm5lck91dHB1dHMpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSB3aGlsZShAYWN0aXZlUnVubmVycyB8fCBAcnVubmVyT3V0cHV0cyk7Cisg
ICAgcHJpbnRmICJcbiUwLjJmcyB0b3RhbCB0ZXN0aW5nIHRpbWVcbiIsICh0aW1lIC0gJG92ZXJh
bGxTdGFydFRpbWUpIC4gIiI7CisgICAgZXhpdCAwOworfQorCiBmb3IgbXkgJHRlc3QgKEBBUkdW
KSB7CiAgICAgJHRlc3QgPX4gcy9eKCRsYXlvdXRUZXN0c05hbWV8JHRlc3REaXJlY3RvcnkpXC8v
LzsKICAgICBteSAkZnVsbFBhdGggPSBjYXRmaWxlKCR0ZXN0RGlyZWN0b3J5LCAkdGVzdCk7CkBA
IC00NzMsOCArNjMxLDYgQEAgcHVzaCBAdG9vbEFyZ3MsICItIjsKIG15IEBkaWZmVG9vbEFyZ3Mg
PSAoKTsKIHB1c2ggQGRpZmZUb29sQXJncywgIi0tdG9sZXJhbmNlIiwgJHRvbGVyYW5jZTsKIAot
JHwgPSAxOwotCiBteSAkaW1hZ2VEaWZmVG9vbFBJRDsKIGlmICgkcGl4ZWxUZXN0cykgewogICAg
IGxvY2FsICVFTlY7CkBAIC00OTUsNyArNjUxLDkgQEAgbXkgJGlzSHR0cGRPcGVuID0gMDsKIHN1
YiBjYXRjaF9waXBlIHsgJGR1bXBUb29sQ3Jhc2hlZCA9IDE7IH0KICRTSUd7IlBJUEUifSA9ICJj
YXRjaF9waXBlIjsKIAotcHJpbnQgIlRlc3RpbmcgIiwgc2NhbGFyIEB0ZXN0cywgIiB0ZXN0IGNh
c2VzLlxuIjsKK2lmICgkcHJvbG9nKSB7CisgICAgcHJpbnQgIlRlc3RpbmcgIiwgc2NhbGFyIEB0
ZXN0cywgIiB0ZXN0IGNhc2VzLlxuIjsKK30KIG15ICRvdmVyYWxsU3RhcnRUaW1lID0gdGltZTsK
IAogbXkgJWV4cGVjdGVkUmVzdWx0UGF0aHM7CkBAIC05MTIsNiArMTA3MCwxMSBAQCBmb3IgbXkg
JHRlc3QgKEB0ZXN0cykgewogCiAgICAgY291bnRGaW5pc2hlZFRlc3QoJHRlc3QsICRiYXNlLCAk
cmVzdWx0LCAkaXNUZXh0KTsKIH0KK2lmICghJGVwaWxvZykgeworICAgIHByaW50ICJcbiI7Cisg
ICAgY2xvc2UgU1RET1VUOworICAgIG9wZW4oU1RET1VULCAiPi9kZXYvbnVsbCIpOworfQogcHJp
bnRmICJcbiUwLjJmcyB0b3RhbCB0ZXN0aW5nIHRpbWVcbiIsICh0aW1lIC0gJG92ZXJhbGxTdGFy
dFRpbWUpIC4gIiI7CiAKICEkaXNEdW1wVG9vbE9wZW4gfHwgZGllICJGYWlsZWQgdG8gY2xvc2Ug
JGR1bXBUb29sTmFtZS5cbiI7CkBAIC0xMDAwLDExICsxMTYzLDExIEBAIHByaW50IEhUTUwgIjx0
aXRsZT5MYXlvdXQgVGVzdCBSZXN1bHRzPC90aXRsZT5cbiI7CiBwcmludCBIVE1MICI8L2hlYWQ+
XG4iOwogcHJpbnQgSFRNTCAiPGJvZHk+XG4iOwogCi1wcmludCBIVE1MIGh0bWxGb3JSZXN1bHRz
U2VjdGlvbihAeyR0ZXN0c3ttaXNtYXRjaH19LCAiVGVzdHMgd2hlcmUgcmVzdWx0cyBkaWQgbm90
IG1hdGNoIGV4cGVjdGVkIHJlc3VsdHMiLCBcJmxpbmtzRm9yTWlzbWF0Y2hUZXN0KTsKLXByaW50
IEhUTUwgaHRtbEZvclJlc3VsdHNTZWN0aW9uKEB7JHRlc3Rze3RpbWVkb3V0fX0sICJUZXN0cyB0
aGF0IHRpbWVkIG91dCIsIFwmbGlua3NGb3JFcnJvclRlc3QpOwotcHJpbnQgSFRNTCBodG1sRm9y
UmVzdWx0c1NlY3Rpb24oQHskdGVzdHN7Y3Jhc2h9fSwgIlRlc3RzIHRoYXQgY2F1c2VkIHRoZSBE
dW1wUmVuZGVyVHJlZSB0b29sIHRvIGNyYXNoIiwgXCZsaW5rc0ZvckVycm9yVGVzdCk7Ci1wcmlu
dCBIVE1MIGh0bWxGb3JSZXN1bHRzU2VjdGlvbihAeyR0ZXN0c3tlcnJvcn19LCAiVGVzdHMgdGhh
dCBoYWQgc3RkZXJyIG91dHB1dCIsIFwmbGlua3NGb3JFcnJvclRlc3QpOwotcHJpbnQgSFRNTCBo
dG1sRm9yUmVzdWx0c1NlY3Rpb24oQHskdGVzdHN7bmV3fX0sICJUZXN0cyB0aGF0IGhhZCBubyBl
eHBlY3RlZCByZXN1bHRzIChwcm9iYWJseSBuZXcpIiwgXCZsaW5rc0Zvck5ld1Rlc3QpOworcHJp
bnQgSFRNTCBodG1sRm9yUmVzdWx0c1NlY3Rpb24oQHskdGVzdHN7bWlzbWF0Y2h9fSwgIlRlc3Rz
IHdoZXJlIHJlc3VsdHMgZGlkIG5vdCBtYXRjaCBleHBlY3RlZCByZXN1bHRzIiwgXCZsaW5rc0Zv
ck1pc21hdGNoVGVzdCwgJHRlc3RSZXN1bHRzRGlyZWN0b3J5KTsKK3ByaW50IEhUTUwgaHRtbEZv
clJlc3VsdHNTZWN0aW9uKEB7JHRlc3Rze3RpbWVkb3V0fX0sICJUZXN0cyB0aGF0IHRpbWVkIG91
dCIsIFwmbGlua3NGb3JFcnJvclRlc3QsICR0ZXN0UmVzdWx0c0RpcmVjdG9yeSk7CitwcmludCBI
VE1MIGh0bWxGb3JSZXN1bHRzU2VjdGlvbihAeyR0ZXN0c3tjcmFzaH19LCAiVGVzdHMgdGhhdCBj
YXVzZWQgdGhlIER1bXBSZW5kZXJUcmVlIHRvb2wgdG8gY3Jhc2giLCBcJmxpbmtzRm9yRXJyb3JU
ZXN0LCAkdGVzdFJlc3VsdHNEaXJlY3RvcnkpOworcHJpbnQgSFRNTCBodG1sRm9yUmVzdWx0c1Nl
Y3Rpb24oQHskdGVzdHN7ZXJyb3J9fSwgIlRlc3RzIHRoYXQgaGFkIHN0ZGVyciBvdXRwdXQiLCBc
JmxpbmtzRm9yRXJyb3JUZXN0LCAkdGVzdFJlc3VsdHNEaXJlY3RvcnkpOworcHJpbnQgSFRNTCBo
dG1sRm9yUmVzdWx0c1NlY3Rpb24oQHskdGVzdHN7bmV3fX0sICJUZXN0cyB0aGF0IGhhZCBubyBl
eHBlY3RlZCByZXN1bHRzIChwcm9iYWJseSBuZXcpIiwgXCZsaW5rc0Zvck5ld1Rlc3QsICR0ZXN0
UmVzdWx0c0RpcmVjdG9yeSk7CiAKIHByaW50IEhUTUwgIjwvYm9keT5cbiI7CiBwcmludCBIVE1M
ICI8L2h0bWw+XG4iOwpAQCAtMTIyNiw3ICsxMzg5LDExIEBAIHN1YiBvcGVuRHVtcFRvb2woKQog
ICAgICRFTlZ7RFlMRF9GUkFNRVdPUktfUEFUSH0gPSAkcHJvZHVjdERpcjsKICAgICAkRU5We1hN
TF9DQVRBTE9HX0ZJTEVTfSA9ICIiOyAjIHdvcmsgYXJvdW5kIG1pc3NpbmcgL2V0Yy9jYXRhbG9n
IDxyZGFyOi8vcHJvYmxlbS80MjkyOTk1PgogICAgICRFTlZ7RFlMRF9JTlNFUlRfTElCUkFSSUVT
fSA9ICIvdXNyL2xpYi9saWJnbWFsbG9jLmR5bGliIiBpZiAkZ3VhcmRNYWxsb2M7Ci0gICAgCisg
ICAgaWYgKGlzRGFyd2luKCkpICB7CisJIyBEaXJlY3QgYWxsIGNhY2hlcyBmcm9tIER1bXBSZW5k
ZXJUcmVlIHRvIHRoZSByZXN1bHRzIGRpcmVjdG9yeS4KKwkkRU5WeyJDRkZJWEVEX1VTRVJfSE9N
RSJ9ID0gJHRlc3RSZXN1bHRzRGlyZWN0b3J5IC4gIi9ob21lIjsKKyAgICB9CisKICAgICBpZiAo
aXNDeWd3aW4oKSkgewogICAgICAgICAkRU5We0hPTUVEUklWRX0gPSAkaG9tZURyaXZlOwogICAg
ICAgICAkRU5We0hPTUVQQVRIfSA9ICRob21lUGF0aDsKQEAgLTE1ODAsMjUgKzE3NDcsMzYgQEAg
c3ViIHZhbGlkYXRlU2tpcHBlZEFyZygkJDskKQogICAgICR0cmVhdFNraXBwZWQgPSAkdmFsdWU7
CiB9CiAKLXN1YiBodG1sRm9yUmVzdWx0c1NlY3Rpb24oXEAkJikKK3N1YiBodG1sRm9yUmVzdWx0
c1NlY3Rpb24oXEAkJiQpCiB7Ci0gICAgbXkgKCR0ZXN0cywgJGRlc2NyaXB0aW9uLCAkbGlua0dl
dHRlcikgPSBAXzsKKyAgICBteSAoJHRlc3RzLCAkZGVzY3JpcHRpb24sICRsaW5rR2V0dGVyLCAk
cmVzdWx0c0RpcmVjdG9yeSkgPSBAXzsKIAogICAgIG15IEBodG1sID0gKCk7CiAgICAgcmV0dXJu
IGpvaW4oIlxuIiwgQGh0bWwpIHVubGVzcyBAeyR0ZXN0c307CiAKICAgICBwdXNoIEBodG1sLCAi
PHA+JGRlc2NyaXB0aW9uOjwvcD4iOwogICAgIHB1c2ggQGh0bWwsICI8dGFibGU+IjsKKworICAg
IG15IEByZXN1bHRzSHRtbCA9ICgpOwogICAgIGZvcmVhY2ggbXkgJHRlc3QgKEB7JHRlc3RzfSkg
ewotICAgICAgICBwdXNoIEBodG1sLCAiPHRyPiI7Ci0gICAgICAgIHB1c2ggQGh0bWwsICI8dGQ+
PGEgaHJlZj1cIiIgLiB0b1VSTCgiJHRlc3REaXJlY3RvcnkvJHRlc3QiKSAuICJcIj4kdGVzdDwv
YT48L3RkPiI7CisgICAgICAgIHB1c2ggQHJlc3VsdHNIdG1sLCAiPHRyPiI7CisgICAgICAgIHB1
c2ggQHJlc3VsdHNIdG1sLCAiPHRkPjxhIGhyZWY9XCIiIC4gdG9VUkwoIiR0ZXN0RGlyZWN0b3J5
LyR0ZXN0IikgLiAiXCIgdGFyZ2V0PVwiX3RvcFwiPiR0ZXN0PC9hPjwvdGQ+IjsKICAgICAgICAg
Zm9yZWFjaCBteSAkbGluayAoQHsmeyRsaW5rR2V0dGVyfSgkdGVzdCl9KSB7Ci0gICAgICAgICAg
ICBwdXNoIEBodG1sLCAiPHRkPjxhIGhyZWY9XCIkbGluay0+e2hyZWZ9XCI+JGxpbmstPnt0ZXh0
fTwvYT48L3RkPiI7CisgICAgICAgICAgICBwdXNoIEByZXN1bHRzSHRtbCwgIjx0ZD48YSBocmVm
PVwiJGxpbmstPntocmVmfVwiPiRsaW5rLT57dGV4dH08L2E+PC90ZD4iOwogICAgICAgICB9Ci0g
ICAgICAgIHB1c2ggQGh0bWwsICI8L3RyPiI7CisgICAgICAgIHB1c2ggQHJlc3VsdHNIdG1sLCAi
PC90cj4iOwogICAgIH0KKyAgICBAaHRtbCA9IChAaHRtbCwgQHJlc3VsdHNIdG1sKTsKKwogICAg
IHB1c2ggQGh0bWwsICI8L3RhYmxlPiI7CiAKKyAgICBteSAkcmVzdWx0c0ZpbGVQb3N0Zml4ID0g
JGRlc2NyaXB0aW9uOworICAgICRyZXN1bHRzRmlsZVBvc3RmaXggPX4gcy9bIFwoXCldLy0vZzsg
CisgICAgbXkgJHRlc3RSZXN1bHRzU2VjdGlvbiA9IGNhdGZpbGUoJHJlc3VsdHNEaXJlY3Rvcnks
ICJyZXN1bHRzLXNlY3Rpb24tJHJlc3VsdHNGaWxlUG9zdGZpeC5odG1sIik7CisgICAgb3BlbiBS
RVNVTFRTLCAiPiIsICR0ZXN0UmVzdWx0c1NlY3Rpb24gb3IgZGllOworICAgIHByaW50IFJFU1VM
VFMgam9pbigiXG4iLCBAcmVzdWx0c0h0bWwpOworICAgIGNsb3NlIFJFU1VMVFM7CisKICAgICBy
ZXR1cm4gam9pbigiXG4iLCBAaHRtbCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29339</attachid>
            <date>2009-04-08 10:47:11 -0700</date>
            <delta_ts>2009-04-08 10:47:11 -0700</delta_ts>
            <desc>New work in progress.</desc>
            <filename>wip.txt</filename>
            <type>text/plain</type>
            <size>67719</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5oIGIvV2Vi
S2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLmgKaW5kZXggNDcwNTZjNi4uZjI1MjQz
MCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLmgKKysr
IGIvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLmgKQEAgLTI4LDYgKzI4LDgg
QEAKIAogI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KIAorZXh0ZXJuIE5TU3RyaW5nICpXZWJLaXRM
b2NhbENhY2hlRGVmYXVsdHNLZXk7CisKIEBpbnRlcmZhY2UgTlNTdHJpbmcgKFdlYktpdEV4dHJh
cykKIAogLSAodm9pZClfd2ViX2RyYXdBdFBvaW50OihOU1BvaW50KXBvaW50IGZvbnQ6KE5TRm9u
dCAqKWZvbnQgdGV4dENvbG9yOihOU0NvbG9yICopdGV4dENvbG9yOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm0gYi9XZWJLaXQvbWFjL01pc2MvV2Vi
S2l0TlNTdHJpbmdFeHRyYXMubQppbmRleCBmMzA3N2QzLi45MGM5ZDk2IDEwMDY0NAotLS0gYS9X
ZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubQorKysgYi9XZWJLaXQvbWFjL01p
c2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubQpAQCAtMzcsNiArMzcsOCBAQAogI2ltcG9ydCA8dW5p
Y29kZS91Y2hhci5oPgogI2ltcG9ydCA8c3lzL3BhcmFtLmg+CiAKK05TU3RyaW5nICpXZWJLaXRM
b2NhbENhY2hlRGVmYXVsdHNLZXkgPSBAIldlYktpdExvY2FsQ2FjaGUiOworCiBAaW1wbGVtZW50
YXRpb24gTlNTdHJpbmcgKFdlYktpdEV4dHJhcykKIAogc3RhdGljIEJPT0wgY2FuVXNlRmFzdFJl
bmRlcmVyKGNvbnN0IFVuaUNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQpAQCAtMjk1LDIw
ICsyOTcsMjQgQEAgc3RhdGljIEJPT0wgY2FuVXNlRmFzdFJlbmRlcmVyKGNvbnN0IFVuaUNoYXIg
KmJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQogCiArIChOU1N0cmluZyAqKV93ZWJraXRfbG9jYWxD
YWNoZURpcmVjdG9yeVdpdGhCdW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyopYnVuZGxlSWRlbnRp
ZmllcgogewotICAgIE5TU3RyaW5nKiBjYWNoZURpciA9IG5pbDsKLSAgICAKKyAgICBOU1VzZXJE
ZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
OworICAgIE5TU3RyaW5nICpjYWNoZURpciA9IFtkZWZhdWx0cyBvYmplY3RGb3JLZXk6V2ViS2l0
TG9jYWxDYWNoZURlZmF1bHRzS2V5XTsKKworICAgIGlmICghY2FjaGVEaXIgfHwgIVtjYWNoZURp
ciBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7CiAjaWZkZWYgQlVJTERJTkdfT05f
VElHRVIKLSAgICBjYWNoZURpciA9IFtOU0hvbWVEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6QCJMaWJyYXJ5L0NhY2hlcyJdOworICAgICAgICBjYWNoZURpciA9IFtO
U0hvbWVEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJMaWJyYXJ5
L0NhY2hlcyJdOwogI2Vsc2UKLSAgICBjaGFyIGNhY2hlRGlyZWN0b3J5W01BWFBBVEhMRU5dOwot
ICAgIHNpemVfdCBjYWNoZURpcmVjdG9yeUxlbiA9IGNvbmZzdHIoX0NTX0RBUldJTl9VU0VSX0NB
Q0hFX0RJUiwgY2FjaGVEaXJlY3RvcnksIE1BWFBBVEhMRU4pOworICAgICAgICBjaGFyIGNhY2hl
RGlyZWN0b3J5W01BWFBBVEhMRU5dOworICAgICAgICBzaXplX3QgY2FjaGVEaXJlY3RvcnlMZW4g
PSBjb25mc3RyKF9DU19EQVJXSU5fVVNFUl9DQUNIRV9ESVIsIGNhY2hlRGlyZWN0b3J5LCBNQVhQ
QVRITEVOKTsKICAgICAKLSAgICBpZiAoY2FjaGVEaXJlY3RvcnlMZW4pCi0gICAgICAgIGNhY2hl
RGlyID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uOmNhY2hlRGlyZWN0b3J5IGxlbmd0aDpjYWNoZURpcmVjdG9yeUxlbiAt
IDFdOworICAgICAgICBpZiAoY2FjaGVEaXJlY3RvcnlMZW4pCisgICAgICAgICAgICBjYWNoZURp
ciA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gc3RyaW5nV2l0aEZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbjpjYWNoZURpcmVjdG9yeSBsZW5ndGg6Y2FjaGVEaXJlY3RvcnlMZW4gLSAx
XTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FjaGVEaXIgPSBuaWw7CiAjZW5kaWYKKyAg
ICB9CiAKICAgICByZXR1cm4gW2NhY2hlRGlyIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpidW5kbGVJZGVudGlmaWVyXTsKIH0KIAotCiBAZW5kCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFj
L1dlYktpdC5leHAgYi9XZWJLaXQvbWFjL1dlYktpdC5leHAKaW5kZXggZDE2Njg5NC4uMTkwNTAx
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJLaXQuZXhwCisrKyBiL1dlYktpdC9tYWMvV2Vi
S2l0LmV4cApAQCAtODIsNiArODIsNyBAQCBfV2ViS2l0RXJyb3JEb21haW4KIF9XZWJLaXRFcnJv
ck1JTUVUeXBlS2V5CiBfV2ViS2l0RXJyb3JQbHVnSW5OYW1lS2V5CiBfV2ViS2l0RXJyb3JQbHVn
SW5QYWdlVVJMU3RyaW5nS2V5CitfV2ViS2l0TG9jYWxDYWNoZURlZmF1bHRzS2V5CiBfV2ViTG9j
YWxpemVkU3RyaW5nCiBfV2ViUGx1Z0luQXR0cmlidXRlc0tleQogX1dlYlBsdWdJbkJhc2VVUkxL
ZXkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVy
VHJlZS5tbSBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bQppbmRleCBjMzRkOTVmLi5jZWQ0Yzg5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCkBAIC02NCw2ICs2NCw3IEBACiAjaW1wb3J0IDxX
ZWJLaXQvV2ViSGlzdG9yeS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkhpc3RvcnlJdGVtUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkluc3BlY3Rvci5oPgorI2ltcG9ydCA8V2ViS2l0L1dl
YktpdE5TU3RyaW5nRXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViUGx1Z2luRGF0YWJhc2Uu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJQcmVmZXJlbmNlcy5oPgogI2ltcG9ydCA8V2ViS2l0L1dl
YlByZWZlcmVuY2VzUHJpdmF0ZS5oPgpAQCAtMzQwLDYgKzM0MSwxMSBAQCB2b2lkIHRlc3RTdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZygpCiAgICAgW3Bvb2wgcmVsZWFzZV07
CiB9CiAKK3N0YXRpYyBOU1N0cmluZyAqbGlicmFyeVBhdGgoKQoreworICAgIHJldHVybiBbQCJ+
L0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9EdW1wUmVuZGVyVHJlZSIgc3RyaW5nQnlFeHBh
bmRpbmdUaWxkZUluUGF0aF07Cit9CisKIHN0YXRpYyB2b2lkIHNldERlZmF1bHRzVG9Db25zaXN0
ZW50VmFsdWVzRm9yVGVzdGluZygpCiB7CiAgICAgLy8gR2l2ZSBzb21lIGNsZWFyIHRvIHVuZG9j
dW1lbnRlZCBkZWZhdWx0cyB2YWx1ZXMKQEAgLTM2Niw5ICszNzIsMTYgQEAgc3RhdGljIHZvaWQg
c2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXNGb3JUZXN0aW5nKCkKICAgICBpZiAoaW5pdGlh
bFZhbHVlKQogICAgICAgICBDRlByZWZlcmVuY2VzU2V0VmFsdWUoQ0ZTVFIoIkFwcGxlU2Nyb2xs
QmFyVmFyaWFudCIpLCBpbml0aWFsVmFsdWUuZ2V0KCksIGtDRlByZWZlcmVuY2VzQW55QXBwbGlj
YXRpb24sIGtDRlByZWZlcmVuY2VzQ3VycmVudFVzZXIsIGtDRlByZWZlcmVuY2VzQW55SG9zdCk7
CiAKLSAgICBOU1N0cmluZyAqbGlicmFyeVBhdGggPSBbQCJ+L0xpYnJhcnkvQXBwbGljYXRpb24g
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZSIgc3RyaW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF07Ci0g
ICAgW2RlZmF1bHRzIHNldE9iamVjdDpbbGlicmFyeVBhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OkAiRGF0YWJhc2VzIl0gZm9yS2V5OldlYkRhdGFiYXNlRGlyZWN0b3J5RGVmYXVs
dHNLZXldOwotICAgIAorICAgIE5TU3RyaW5nICpwYXRoID0gbGlicmFyeVBhdGgoKTsKKyAgICBb
ZGVmYXVsdHMgc2V0T2JqZWN0OltwYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpA
IkRhdGFiYXNlcyJdIGZvcktleTpXZWJEYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKKyAg
ICBbZGVmYXVsdHMgc2V0T2JqZWN0OltwYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpAIkxvY2FsQ2FjaGUiXSBmb3JLZXk6V2ViS2l0TG9jYWxDYWNoZURlZmF1bHRzS2V5XTsKKyAg
ICBOU1VSTENhY2hlICpzaGFyZWRDYWNoZSA9CisgICAgICAgIFtbTlNVUkxDYWNoZSBhbGxvY10g
aW5pdFdpdGhNZW1vcnlDYXBhY2l0eToxMDI0ICogMTAyNAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaXNrQ2FwYWNpdHk6MAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGlza1BhdGg6W3BhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50OkAiVVJMQ2FjaGUiXV07CisgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6
c2hhcmVkQ2FjaGVdOworICAgIFtzaGFyZWRDYWNoZSByZWxlYXNlXTsKKwogICAgIFdlYlByZWZl
cmVuY2VzICpwcmVmZXJlbmNlcyA9IFtXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2Vz
XTsKIAogICAgIFtwcmVmZXJlbmNlcyBzZXRTdGFuZGFyZEZvbnRGYW1pbHk6QCJUaW1lcyJdOwpA
QCAtNjY5LDcgKzY4Miw3IEBAIHN0YXRpYyBOU0RhdGEgKmR1bXBGcmFtZUFzUERGKFdlYkZyYW1l
ICpmcmFtZSkKICAgICAvLyBsaWtld2lzZSArW05TVmlldyBkYXRhV2l0aFBERkluc2lkZVJlY3Q6
XSBhbHNvIHByaW50cyB0byBhIHNpbmdsZSBjb250aW51b3VzIHBhZ2UKICAgICAvLyBUaGUgZ29h
bCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIHRlc3QgInJlYWwiIHByaW50aW5nIGFjcm9zcyBtdWx0
aXBsZSBwYWdlcy4KICAgICAvLyBGSVhNRTogSXQncyBwb3NzaWJsZSB0aGVyZSBtaWdodCBiZSBw
cmludGluZyBTUEkgdG8gbGV0IHVzIHByaW50IGEgbXVsdGktcGFnZSBQREYgdG8gYW4gTlNEYXRh
IG9iamVjdAotICAgIE5TU3RyaW5nICpwYXRoID0gQCIvdG1wL3Rlc3QucGRmIjsKKyAgICBOU1N0
cmluZyAqcGF0aCA9IFtsaWJyYXJ5UGF0aCgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpAInRtcC90ZXN0LnBkZiJdOwogCiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqcHJpbnRJbmZv
RGljdCA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTpbW05T
UHJpbnRJbmZvIHNoYXJlZFByaW50SW5mb10gZGljdGlvbmFyeV1dOwogICAgIFtwcmludEluZm9E
aWN0IHNldE9iamVjdDpOU1ByaW50U2F2ZUpvYiBmb3JLZXk6TlNQcmludEpvYkRpc3Bvc2l0aW9u
XTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvRXhlY0FwcFdpdGhFbnYucG0gYi9X
ZWJLaXRUb29scy9TY3JpcHRzL0V4ZWNBcHBXaXRoRW52LnBtCm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAuLmI5YjYxMDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL0V4ZWNBcHBXaXRoRW52LnBtCkBAIC0wLDAgKzEsNTYgQEAKKyMhL3Vzci9iaW4vcGVy
bAorCisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0
aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBUaGUgcmVhc29uIHRoaXMgc2NyaXB0IGV4aXN0IGlz
IGJlY2F1c2UgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGFub3RoZXIKKyMgd2F5IHRvIGxhdW5j
aCBhIHByb2dyYW0gZnJvbSBhIHBlcmwgdGhyZWFkIHdpdGggYSBnaXZlbiBlbnZpcm9ubWVudC4K
Kworc3ViIHVuZXNjYXBlRW52VmFyKCQpCit7CisgICAgbXkgKCRlbnZWYXIpID0gQF87CisKKyAg
ICAjIFJlcGxhY2UgQC4gd2l0aCAuCisgICAgJGVudlZhciA9fiBzL1xAKC4pLyQxL2c7CisgICAg
cmV0dXJuICRlbnZWYXI7Cit9CisKK215ICgkdW5zcGxpdEVudlZhciwgQGFwcCkgPSBAQVJHVjsK
KworJUVOViA9ICgpOworCisjIFNwbGl0IG9uIHVuZXNjYXBlZCBAIChGSVhNRSBkb2VzIGVzY2Fw
ZWQgQCkuCitteSBAZW52VmFycyA9IHNwbGl0KC8oPzwhXEApKD86XEBcQCkqXEAoPyFcQCkvLCAk
dW5zcGxpdEVudlZhcik7Citmb3IgbXkgJGVudlZhciAoQGVudlZhcnMpIHsKKyAgICAjIFNwbGl0
IG9uIHVuZXNjYXBlZCA9CisgICAgbXkgKCR2YXJpYWJsZSwgJHZhbHVlKSA9IHNwbGl0KC8oPzwh
XEApKD86XEBcQCkqPS8sICRlbnZWYXIpOworICAgICRFTlZ7dW5lc2NhcGVFbnZWYXIoJHZhcmlh
YmxlKX0gPSB1bmVzY2FwZUVudlZhcigkdmFsdWUpOworfQorCitleGVjKEBhcHApOworCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL1dvcmtDcmV3LnBtIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9Xb3JrQ3Jldy5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTk0
NWI4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9Xb3JrQ3Jldy5wbQpA
QCAtMCwwICsxLDE2MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgVGhpcyBwYWNrYWdlIGhlbHBz
IGluIGNyZWF0aW5nIGEgbnVtYmVyIG9mIHdvcmtlciB0aHJlYWRzIHRvIGRvIAorIyB0aGUgc2Ft
ZSBvcGVyYXRpb24gb24gZGlmZmVyZW50IGRhdGEuIEFsbCByZXN1bHRzIGFyZSByZXR1cm5lZCBp
biB0aGUKKyMgb3JkZXIgdGhhdCB0aGUgaXRlbXMgYXJlIHF1ZXVlZC4KKworcGFja2FnZSBXb3Jr
Q3JldzsKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIHRocmVhZHM7Cit1c2Ug
VGhyZWFkOjpRdWV1ZTsKK3VzZSBUaW1lOjpIaVJlcyBxdyh1c2xlZXApOworCitzdWIgbmV3Cit7
CisgICAgbXkgJHNlbGYgPSB7fTsKKyAgICBteSAkd29ya0l0ZW1zIDogc2hhcmVkID0gbmV3IFRo
cmVhZDo6UXVldWU7CisgICAgJHNlbGYtPnsibV93b3JrSXRlbXMifSA9ICR3b3JrSXRlbXM7CisK
KyAgICBteSBAdGhyZWFkRG9pbmdXb3JrSXRlbSA6IHNoYXJlZCA9ICgpOworICAgICRzZWxmLT57
Im1fdGhyZWFkRG9pbmdXb3JrSXRlbSJ9ID0gXEB0aHJlYWREb2luZ1dvcmtJdGVtOworCisgICAg
JHNlbGYtPnsibV90aHJlYWRSZXN1bHRRdWV1ZXMifSA9ICgpOworICAgICRzZWxmLT57Im1fdGhy
ZWFkQ29udHJvbGxlcnMifSA9ICgpOworICAgICRzZWxmLT57Im1fY3VycmVudFdvcmtJdGVtIn0g
PSAwOworCisgICAgcmV0dXJuIGJsZXNzKCRzZWxmKTsKK30KKworc3ViIGVucXVldWVXb3JrKCQk
KQoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgKCR3b3JrSXRlbSkgPSBAXzsKKwor
ICAgIG15ICR0aHJlYWREb2luZ1dvcmtJdGVtID0gJHNlbGYtPnsibV90aHJlYWREb2luZ1dvcmtJ
dGVtIn07CisgICAgcHVzaCBAeyR0aHJlYWREb2luZ1dvcmtJdGVtfSwgLTE7CisKKyAgICBteSBA
d29ya0l0ZW1EYXRhIDogc2hhcmVkID0gKCQjeyR0aHJlYWREb2luZ1dvcmtJdGVtfSwgJHdvcmtJ
dGVtKTsKKyAgICAkc2VsZi0+eyJtX3dvcmtJdGVtcyJ9LT5lbnF1ZXVlKFxAd29ya0l0ZW1EYXRh
KTsKK30KKworc3ViIHN0YXJ0V29ya2VyVGhyZWFkcworeworICAgIG15ICRzZWxmID0gc2hpZnQ7
CisgICAgbXkgKCRjb3VudCwgJGZ1bmN0aW9uLCBAYXJndW1lbnRzKSA9IEBfOworCisjICAgICRj
b3VudCA9IDE7CisKKyAgICBmb3IgKG15ICR3b3JrZXJOdW1iZXIgPSAwOyAkd29ya2VyTnVtYmVy
IDwgJGNvdW50OyAkd29ya2VyTnVtYmVyKyspIHsKKyAgICAgICAgbXkgJHJlc3VsdFF1ZXVlID0g
bmV3IFRocmVhZDo6UXVldWU7CisgICAgICAgIHB1c2ggQHskc2VsZi0+eyJtX3RocmVhZFJlc3Vs
dFF1ZXVlcyJ9fSwgJHJlc3VsdFF1ZXVlOworCisjICAgICAgICBydW5Xb3JrZXJUaHJlYWQoJHdv
cmtlck51bWJlciwgJHNlbGYtPnsibV93b3JrSXRlbXMifSwgJHNlbGYtPnsibV90aHJlYWREb2lu
Z1dvcmtJdGVtIn0sICRyZXN1bHRRdWV1ZSwgJGZ1bmN0aW9uLCBcQGFyZ3VtZW50cyk7CisgICAg
ICAgIG15ICR0aHJlYWRDb250cm9sbGVyID0gdGhyZWFkcy0+Y3JlYXRlKFwmcnVuV29ya2VyVGhy
ZWFkLCAkd29ya2VyTnVtYmVyLCAkc2VsZi0+eyJtX3dvcmtJdGVtcyJ9LCAkc2VsZi0+eyJtX3Ro
cmVhZERvaW5nV29ya0l0ZW0ifSwgJHJlc3VsdFF1ZXVlLCAkZnVuY3Rpb24sIFxAYXJndW1lbnRz
KTsKKyAgICAgICAgcHVzaCBAeyRzZWxmLT57Im1fdGhyZWFkQ29udHJvbGxlcnMifX0sICR0aHJl
YWRDb250cm9sbGVyOworICAgIH0KK30KKworc3ViIHdvcmtJdGVtUmVzdWx0KCkKK3sKKyAgICBt
eSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICR0aHJlYWREb2luZ1dvcmtJdGVtID0gJHNlbGYtPnsi
bV90aHJlYWREb2luZ1dvcmtJdGVtIn07CisgICAgaWYgKCRzZWxmLT57Im1fY3VycmVudFdvcmtJ
dGVtIn0gPiAkI3skdGhyZWFkRG9pbmdXb3JrSXRlbX0pIHsKKyAgICAgICAgIyBBbGwgd29yayBp
dGVtcyBhcmUgZG9uZS4gIFdhaXQgZm9yIGFsbCB3b3JrZXIgdGhyZWFkcyB0byBleGl0LgorICAg
ICAgICBmb3JlYWNoIG15ICR0aHJlYWRDb250cm9sbGVyIChAeyRzZWxmLT57Im1fdGhyZWFkQ29u
dHJvbGxlcnMifX0pIHsKKyAgICAgICAgICAgICR0aHJlYWRDb250cm9sbGVyLT5qb2luKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVuZGVmOworICAgIH0KKyAgICBteSAkd29ya2VyTnVt
YmVyID0gLTE7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgJHdvcmtlck51bWJlciA9ICR7JHRo
cmVhZERvaW5nV29ya0l0ZW19WyRzZWxmLT57Im1fY3VycmVudFdvcmtJdGVtIn1dOworICAgICAg
ICBsYXN0IGlmICgkd29ya2VyTnVtYmVyICE9IC0xKTsKKyAgICAgICAgdXNsZWVwKDEwMDAgKiAx
MDApOworICAgIH0KKyAgICBteSAkd29ya0l0ZW1PdXRwdXQgPSAkeyRzZWxmLT57Im1fdGhyZWFk
UmVzdWx0UXVldWVzIn19WyR3b3JrZXJOdW1iZXJdLT5kZXF1ZXVlKCk7CisgICAgaWYgKCFkZWZp
bmVkICR3b3JrSXRlbU91dHB1dCkgeworICAgICAgICAkc2VsZi0+eyJtX2N1cnJlbnRXb3JrSXRl
bSJ9Kys7CisgICAgICAgIHJldHVybiAkd29ya0l0ZW1PdXRwdXQ7CisgICAgfQorICAgIHJldHVy
biBAeyR3b3JrSXRlbU91dHB1dH1bMV07Cit9CisKKyMgTG9jYWwgZGF0YSBmb3Igd29ya2Vycy4K
K215ICR3b3JrSXRlbVF1ZXVlID0gMDsKK215ICR0aHJlYWREb2luZ1dvcmtJdGVtID0gMDsKK215
ICRjdXJyZW50V29ya0l0ZW0gPSAwOworbXkgJHdvcmtlck51bWJlciA9IDA7CitteSAkcmVzdWx0
UXVldWUgPSAwOworCitzdWIgd29ya2VyTnVtYmVyKCkKK3sKKyAgICByZXR1cm4gJHdvcmtlck51
bWJlcjsKK30KKworc3ViIG5leHRXb3JrSXRlbSgpCit7CisgICAgaWYgKCRjdXJyZW50V29ya0l0
ZW0gPj0gMCkgeworICAgICAgICAkcmVzdWx0UXVldWUtPmVucXVldWUodW5kZWYpOworICAgIH0K
KyAgICBteSAkd29ya0l0ZW1EYXRhID0gJHdvcmtJdGVtUXVldWUtPmRlcXVldWVfbmI7CisgICAg
cmV0dXJuICR3b3JrSXRlbURhdGEgaWYgIWRlZmluZWQgJHdvcmtJdGVtRGF0YTsKKyAgICBteSBA
ZGF0YSA9IEB7JHdvcmtJdGVtRGF0YX07CisgICAgJGN1cnJlbnRXb3JrSXRlbSA9ICRkYXRhWzBd
OworICAgICR7JHRocmVhZERvaW5nV29ya0l0ZW19WyRjdXJyZW50V29ya0l0ZW1dID0gJHdvcmtl
ck51bWJlcjsKKyAgICByZXR1cm4gJGRhdGFbMV07Cit9CisKK3N1YiBhZGRXb3JrSXRlbVJlc3Vs
dCgkKQoreworICAgIG15ICgkcmVzdWx0KSA9IEBfOworICAgIG15IEByZXN1bHREYXRhIDogc2hh
cmVkID0gKCRjdXJyZW50V29ya0l0ZW0sICRyZXN1bHQpOworICAgICRyZXN1bHRRdWV1ZS0+ZW5x
dWV1ZShcQHJlc3VsdERhdGEpOworfQorCitzdWIgcnVuV29ya2VyVGhyZWFkKCQpCit7CisgICAg
bXkgKCRsb2NhbFdvcmtlck51bWJlciwgJGxvY2FsV29ya0l0ZW1RdWV1ZSwgJGxvY2FsVGhyZWFk
RG9pbmdXb3JrSXRlbSwgJGxvY2FsUmVzdWx0UXVldWUsICRkb1dvcmssICRkZXN0cm95LCAkYXJn
dW1lbnRzKSA9IEBfOworICAgICR3b3JrZXJOdW1iZXIgPSAkbG9jYWxXb3JrZXJOdW1iZXI7Cisg
ICAgJHdvcmtJdGVtUXVldWUgPSAkbG9jYWxXb3JrSXRlbVF1ZXVlOworICAgICR0aHJlYWREb2lu
Z1dvcmtJdGVtID0gJGxvY2FsVGhyZWFkRG9pbmdXb3JrSXRlbTsKKyAgICAkcmVzdWx0UXVldWUg
PSAkbG9jYWxSZXN1bHRRdWV1ZTsKKyAgICAkY3VycmVudFdvcmtJdGVtID0gLTE7CisgICAgd2hp
bGUgKDEpIHsKKyAgICAgICAgbXkgJHdvcmtJdGVtID0gbmV4dFdvcmtJdGVtKCk7CisgICAgICAg
IGlmICghZGVmaW5lZCAkd29ya0l0ZW0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgICZ7JGRvV29ya30oJHdvcmtJdGVtLCBAeyRhcmd1bWVudHN9KTsKKyAgICB9
CisgICAgJnskZGVzdHJveX0oQHskYXJndW1lbnRzfSk7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdGVzdHMgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3J1bi13ZWJraXQtdGVzdHMKaW5kZXggMzRjZTk2YS4uZjdmNzBkOCAxMDA3NTUKLS0tIGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXRlc3RzCisrKyBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvcnVuLXdlYmtpdC10ZXN0cwpAQCAtNTcsNiArNTcsNyBAQCB1c2UgRmlsZTo6U3BlYzsKIHVz
ZSBGaWxlOjpTcGVjOjpGdW5jdGlvbnM7CiB1c2UgRmluZEJpbjsKIHVzZSBHZXRvcHQ6Okxvbmc7
Cit1c2UgSU86OkhhbmRsZTsKIHVzZSBJUEM6Ok9wZW4yOwogdXNlIElQQzo6T3BlbjM7CiB1c2Ug
VGltZTo6SGlSZXMgcXcodGltZSB1c2xlZXApOwpAQCAtNjUsMTEgKzY2LDE3IEBAIHVzZSBMaXN0
OjpVdGlsICdzaHVmZmxlJzsKIAogdXNlIGxpYiAkRmluZEJpbjo6QmluOwogdXNlIHdlYmtpdGRp
cnM7Cit1c2UgV29ya0NyZXc7CiB1c2UgUE9TSVg7CiAKK3N1YiBjbGVhbnVwVGVzdHMoKTsKK3N1
YiBhZGRXb3JrSXRlbVJlc3VsdCgkKTsKK3N1YiBydW5UZXN0cygkKTsKK3N1YiBlc2NhcGVFbnZW
YXIoJCk7CiBzdWIgb3BlbkR1bXBUb29sKCk7CiBzdWIgY2xvc2VEdW1wVG9vbCgpOwogc3ViIGR1
bXBUb29sRGlkQ3Jhc2goKTsKK3N1YiBvcGVuRGlmZlRvb2woKTsKIHN1YiBjbG9zZUhUVFBEKCk7
CiBzdWIgY291bnRBbmRQcmludExlYWtzKCQkJCk7CiBzdWIgZmlsZU5hbWVXaXRoTnVtYmVyKCQk
KTsKQEAgLTgyLDYgKzg5LDcgQEAgc3ViIHNwbGl0cGF0aCgkKTsKIHN1YiBzdHJpcEV4dGVuc2lv
bigkKTsKIHN1YiBpc1RleHRPbmx5VGVzdCgkKTsKIHN1YiBleHBlY3RlZERpcmVjdG9yeUZvclRl
c3QoJDskOyQpOworc3ViIGNoZWNrTGVha3MoJCk7CiBzdWIgY291bnRGaW5pc2hlZFRlc3QoJCQk
JCk7CiBzdWIgdGVzdENyYXNoZWRPclRpbWVkT3V0KCQkJCQkKTsKIHN1YiBzYW1wbGVEdW1wVG9v
bCgpOwpAQCAtMTI3LDYgKzEzNSw3IEBAIG15ICR2ZXJib3NlID0gMDsKIG15ICR1c2VWYWxncmlu
ZCA9IDA7CiBteSAkc3RyaWN0VGVzdGluZyA9IDA7CiBteSAkZ2VuZXJhdGVOZXdSZXN1bHRzID0g
aXNBcHBsZU1hY1dlYktpdCgpID8gMSA6IDA7CitteSAkcGFyYWxsZWxSdW5zID0gMTsKIG15ICRz
dHJpcEVkaXRpbmdDYWxsYmFja3MgPSBpc0N5Z3dpbigpOwogbXkgJHJ1blNhbXBsZSA9IDE7CiBt
eSAkcm9vdDsKQEAgLTIyMiw2ICsyMzEsNyBAQCBteSAkZ2V0T3B0aW9uc1Jlc3VsdCA9IEdldE9w
dGlvbnMoCiAgICAgJ2lnbm9yZS10ZXN0c3xpPXMnID0+IFwkaWdub3JlVGVzdHMsCiAgICAgJ2xh
dW5jaC1zYWZhcmkhJyA9PiBcJGxhdW5jaFNhZmFyaSwKICAgICAnbGVha3N8bCcgPT4gXCRzaG91
bGRDaGVja0xlYWtzLAorICAgICdwYXJhbGxlbHxqOjEnID0+IFwkcGFyYWxsZWxSdW5zLAogICAg
ICdwaXhlbC10ZXN0c3xwJyA9PiBcJHBpeGVsVGVzdHMsCiAgICAgJ3BsYXRmb3JtPXMnID0+IFwk
cGxhdGZvcm0sCiAgICAgJ3BvcnQ9aScgPT4gXCRodHRwZFBvcnQsCkBAIC0yOTMsNiArMzAzLDE3
IEBAICRkdW1wVG9vbE5hbWUgLj0gIl9kZWJ1ZyIgaWYgaXNDeWd3aW4oKSAmJiAkY29uZmlndXJh
dGlvbiBuZSAiUmVsZWFzZSI7CiBteSAkZHVtcFRvb2wgPSAiJHByb2R1Y3REaXIvJGR1bXBUb29s
TmFtZSI7CiBkaWUgImNhbid0IGZpbmQgZXhlY3V0YWJsZSAkZHVtcFRvb2xOYW1lIChsb29rZWQg
aW4gJHByb2R1Y3REaXIpXG4iIHVubGVzcyAteCAkZHVtcFRvb2w7CiAKK2lmICgkcGFyYWxsZWxS
dW5zID4gMSkgeworICAgIG15ICRpbmNvbXBhdGlibGVPcHRpb25zID0gIiI7CisgICAgJGluY29t
cGF0aWJsZU9wdGlvbnMgLj0gIiB1bnN1cHBvcnRlZCBvcyIgaWYgIWlzRGFyd2luKCk7CisgICAg
JGluY29tcGF0aWJsZU9wdGlvbnMgLj0gIiBwaXhlbC10ZXN0cyIgaWYgJHBpeGVsVGVzdHM7CisK
KyAgICBpZiAoJGluY29tcGF0aWJsZU9wdGlvbnMpIHsKKyAgICAgICAgcHJpbnQgIioqIFR1cm5p
bmcgb2ZmIHBhcmFsbGVsIG1vZGUgZHVlIHRvIGluY29tcGF0aWJsZSBvcHRpb25zOiAiIC4gJGlu
Y29tcGF0aWJsZU9wdGlvbnMgLiAiICoqXG4iOworICAgICAgICAkcGFyYWxsZWxSdW5zID0gMTsK
KyAgICB9Cit9CisKIG15ICRpbWFnZURpZmZUb29sID0gIiRwcm9kdWN0RGlyL0ltYWdlRGlmZiI7
CiAkaW1hZ2VEaWZmVG9vbCAuPSAiX2RlYnVnIiBpZiBpc0N5Z3dpbigpICYmICRjb25maWd1cmF0
aW9uIG5lICJSZWxlYXNlIjsKIGRpZSAiY2FuJ3QgZmluZCBleGVjdXRhYmxlICRpbWFnZURpZmZU
b29sIChsb29rZWQgaW4gJHByb2R1Y3REaXIpXG4iIGlmICRwaXhlbFRlc3RzICYmICEteCAkaW1h
Z2VEaWZmVG9vbDsKQEAgLTQ1Nyw0OTEgKzQ3OCwxMzggQEAgZGllICJubyB0ZXN0cyB0byBydW5c
biIgaWYgIUB0ZXN0czsKIAogQHRlc3RzID0gc29ydCBwYXRoY21wIEB0ZXN0czsKIAotbXkgJWNv
dW50czsKLW15ICV0ZXN0czsKLW15ICVpbWFnZXNQcmVzZW50OwotbXkgJWltYWdlRGlmZmVyZW5j
ZXM7Ci1teSAlZHVyYXRpb25zOwotbXkgJGNvdW50ID0gMDsKLW15ICRsZWFrc091dHB1dEZpbGVO
dW1iZXIgPSAxOwotbXkgJHRvdGFsTGVha3MgPSAwOwotCi1teSBAdG9vbEFyZ3MgPSAoKTsKLXB1
c2ggQHRvb2xBcmdzLCAiLS1waXhlbC10ZXN0cyIgaWYgJHBpeGVsVGVzdHM7Ci1wdXNoIEB0b29s
QXJncywgIi0tdGhyZWFkZWQiIGlmICR0aHJlYWRlZDsKLXB1c2ggQHRvb2xBcmdzLCAiLS1jb21w
bGV4LXRleHQiIGlmICRjb21wbGV4VGV4dDsKLXB1c2ggQHRvb2xBcmdzLCAiLSI7Ci0KLW15IEBk
aWZmVG9vbEFyZ3MgPSAoKTsKLXB1c2ggQGRpZmZUb29sQXJncywgIi0tdG9sZXJhbmNlIiwgJHRv
bGVyYW5jZTsKLQotJHwgPSAxOwotCi1teSAkaW1hZ2VEaWZmVG9vbFBJRDsKLWlmICgkcGl4ZWxU
ZXN0cykgewotICAgIGxvY2FsICVFTlY7Ci0gICAgJEVOVntNYWxsb2NTdGFja0xvZ2dpbmd9ID0g
MSBpZiAkc2hvdWxkQ2hlY2tMZWFrczsKLSAgICAkaW1hZ2VEaWZmVG9vbFBJRCA9IG9wZW4yKFwq
RElGRklOLCBcKkRJRkZPVVQsICRpbWFnZURpZmZUb29sLCBAZGlmZlRvb2xBcmdzKSBvciBkaWUg
InVuYWJsZSB0byBvcGVuICRpbWFnZURpZmZUb29sXG4iOwotICAgICRFTlZ7TWFsbG9jU3RhY2tM
b2dnaW5nfSA9IDAgaWYgJHNob3VsZENoZWNrTGVha3M7Ci19Ci0KLW15ICRkdW1wVG9vbFBJRDsK
LW15ICRpc0R1bXBUb29sT3BlbiA9IDA7Ci1teSAkZHVtcFRvb2xDcmFzaGVkID0gMDsKLQotbXkg
JGF0TGluZVN0YXJ0ID0gMTsKLW15ICRsYXN0RGlyZWN0b3J5ID0gIiI7Ci0KLW15ICRpc0h0dHBk
T3BlbiA9IDA7Ci0KLXN1YiBjYXRjaF9waXBlIHsgJGR1bXBUb29sQ3Jhc2hlZCA9IDE7IH0KLSRT
SUd7IlBJUEUifSA9ICJjYXRjaF9waXBlIjsKLQotcHJpbnQgIlRlc3RpbmcgIiwgc2NhbGFyIEB0
ZXN0cywgIiB0ZXN0IGNhc2VzLlxuIjsKLW15ICRvdmVyYWxsU3RhcnRUaW1lID0gdGltZTsKLQot
bXkgJWV4cGVjdGVkUmVzdWx0UGF0aHM7Ci0KICMgUmV2ZXJzZSB0aGUgdGVzdHMKIEB0ZXN0cyA9
IHJldmVyc2UgQHRlc3RzIGlmICRyZXZlcnNlVGVzdHM7CiAKICMgU2h1ZmZsZSB0aGUgYXJyYXkK
IEB0ZXN0cyA9IHNodWZmbGUoQHRlc3RzKSBpZiAkcmFuZG9taXplVGVzdHM7Ci0KK215IEB0ZXN0
R3JvdXBzID0gKCk7CitteSBAY3VycmVudFRlc3RzIDogc2hhcmVkID0gKCk7CitteSAkcHJldmlv
dXNEaXIgPSAiIjsKK3B1c2ggQHRlc3RzLCAiL0xheW91dFRlc3RzL0VORF9PRl9URVNUU19UT0tF
Ti9hIjsKIGZvciBteSAkdGVzdCAoQHRlc3RzKSB7Ci0gICAgbmV4dCBpZiAkdGVzdCBlcSAncmVz
dWx0cy5odG1sJzsKLQotICAgIG15ICRuZXdEdW1wVG9vbCA9IG5vdCAkaXNEdW1wVG9vbE9wZW47
Ci0gICAgb3BlbkR1bXBUb29sKCk7Ci0KLSAgICBteSAkYmFzZSA9IHN0cmlwRXh0ZW5zaW9uKCR0
ZXN0KTsKLSAgICBteSAkZXhwZWN0ZWRFeHRlbnNpb24gPSAiLnR4dCI7Ci0gICAgCi0gICAgbXkg
JGRpciA9ICRiYXNlOwotICAgICRkaXIgPX4gc3wvW14vXSskfHw7Ci0KLSAgICBpZiAoJG5ld0R1
bXBUb29sIHx8ICRkaXIgbmUgJGxhc3REaXJlY3RvcnkpIHsKLSAgICAgICAgZm9yZWFjaCBteSAk
bG9ndWUgKGVwaWxvZ3Vlc0FuZFByb2xvZ3VlcygkbmV3RHVtcFRvb2wgPyAiIiA6ICRsYXN0RGly
ZWN0b3J5LCAkZGlyKSkgewotICAgICAgICAgICAgaWYgKGlzQ3lnd2luKCkpIHsKLSAgICAgICAg
ICAgICAgICAkbG9ndWUgPSB0b1dpbmRvd3NQYXRoKCRsb2d1ZSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICRsb2d1ZSA9IGNhbm9ucGF0aCgkbG9ndWUpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKCR2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAgcHJp
bnQgInJ1bm5pbmcgZXBpbG9ndWUgb3IgcHJvbG9ndWUgJGxvZ3VlXG4iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcHJpbnQgT1VUICIkbG9ndWVcbiI7Ci0gICAgICAgICAgICAjIFRocm93
IGF3YXkgb3V0cHV0IGZyb20gRHVtcFJlbmRlclRyZWUuCi0gICAgICAgICAgICAjIE9uY2UgZm9y
IHRoZSB0ZXN0IG91dHB1dCBhbmQgb25jZSBmb3IgcGl4ZWwgcmVzdWx0cyAoZW1wdHkpCi0gICAg
ICAgICAgICB3aGlsZSAoPElOPikgewotICAgICAgICAgICAgICAgIGxhc3QgaWYgLyNFT0YvOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKDxJTj4pIHsKLSAgICAgICAgICAgICAg
ICBsYXN0IGlmIC8jRU9GLzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIG15IEBwYXRo
cyA9IHNwbGl0KCIvIiwgJHRlc3QpOworICAgICMgU3BsaXQgdGhlIGZhc3QgYW5kIGRvbSBkaXJl
Y3Rvcmllcy4KKyAgICBpZiAoJCNwYXRocyA+IDEgJiYgKCRwYXRoc1swXSBlcSAiZmFzdCIgfHwg
JHBhdGhzWzBdIGVxICJkb20iKSkgeworICAgICAgICAkcGF0aHNbMF0gPSAiJHBhdGhzWzBdLyRw
YXRoc1sxXSI7CiAgICAgfQotCi0gICAgaWYgKCR2ZXJib3NlKSB7Ci0gICAgICAgIHByaW50ICJy
dW5uaW5nICR0ZXN0IC0+ICI7Ci0gICAgICAgICRhdExpbmVTdGFydCA9IDA7Ci0gICAgfSBlbHNp
ZiAoISRxdWlldCkgewotICAgICAgICBpZiAoJGRpciBuZSAkbGFzdERpcmVjdG9yeSkgewotICAg
ICAgICAgICAgcHJpbnQgIlxuIiB1bmxlc3MgJGF0TGluZVN0YXJ0OwotICAgICAgICAgICAgcHJp
bnQgIiRkaXIgIjsKLSAgICAgICAgfQotICAgICAgICBwcmludCAiLiI7Ci0gICAgICAgICRhdExp
bmVTdGFydCA9IDA7CisgICAgaWYgKCQjcGF0aHMgPiAyICYmICRwYXRoc1swXSBlcSAiaHR0cCIp
IHsKKyAgICAgICAgJHBhdGhzWzBdID0gIiRwYXRoc1swXS8kcGF0aHNbMV0vJHBhdGhzWzJdIjsK
ICAgICB9Ci0KLSAgICAkbGFzdERpcmVjdG9yeSA9ICRkaXI7Ci0KLSAgICBteSAkcmVzdWx0Owot
Ci0gICAgbXkgJHN0YXJ0VGltZSA9IHRpbWUgaWYgJHJlcG9ydDEwU2xvd2VzdDsKLQotICAgICMg
VHJ5IHRvIHJlYWQgZXhwZWN0ZWQgaGFzaCBmaWxlIGZvciBwaXhlbCB0ZXN0cwotICAgIG15ICRz
dWZmaXhFeHBlY3RlZEhhc2ggPSAiIjsKLSAgICBpZiAoJHBpeGVsVGVzdHMgJiYgISRyZXNldFJl
c3VsdHMpIHsKLSAgICAgICAgbXkgJGV4cGVjdGVkUGl4ZWxEaXIgPSBleHBlY3RlZERpcmVjdG9y
eUZvclRlc3QoJGJhc2UsIDAsICJwbmciKTsKLSAgICAgICAgaWYgKG9wZW4gRVhQRUNURURIQVNI
LCAiJGV4cGVjdGVkUGl4ZWxEaXIvJGJhc2UtJGV4cGVjdGVkVGFnLmNoZWNrc3VtIikgewotICAg
ICAgICAgICAgbXkgJGV4cGVjdGVkSGFzaCA9IDxFWFBFQ1RFREhBU0g+OwotICAgICAgICAgICAg
Y2hvbXAoJGV4cGVjdGVkSGFzaCk7Ci0gICAgICAgICAgICBjbG9zZSBFWFBFQ1RFREhBU0g7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgICMgRm9ybWF0IGV4cGVjdGVkIGhhc2ggaW50byBhIHN1
ZmZpeCBzdHJpbmcgdGhhdCBpcyBhcHBlbmRlZCB0byB0aGUgcGF0aCAvIFVSTCBwYXNzZWQgdG8g
RFJUCi0gICAgICAgICAgICAkc3VmZml4RXhwZWN0ZWRIYXNoID0gIickZXhwZWN0ZWRIYXNoIjsK
KyAgICBpZiAoISgkcHJldmlvdXNEaXIgZXEgJHBhdGhzWzBdKSkgeworICAgICAgICBpZiAoQGN1
cnJlbnRUZXN0cykgeworICAgICAgICAgICAgbXkgQGN1cnJlbnRUZXN0c0NvcHkgOiBzaGFyZWQg
PSBAY3VycmVudFRlc3RzOworICAgICAgICAgICAgcHVzaCBAdGVzdEdyb3VwcywgXEBjdXJyZW50
VGVzdHNDb3B5OworICAgICAgICAgICAgQGN1cnJlbnRUZXN0cyA9ICgpOwogICAgICAgICB9Cisg
ICAgICAgICRwcmV2aW91c0RpciA9ICRwYXRoc1swXTsKICAgICB9CisgICAgcHVzaCBAY3VycmVu
dFRlc3RzLCAkdGVzdDsKK30KK3BvcCBAdGVzdHM7CiAKLSAgICBpZiAoJHRlc3QgIX4gL15odHRw
XC8vKSB7Ci0gICAgICAgIG15ICR0ZXN0UGF0aCA9ICIkdGVzdERpcmVjdG9yeS8kdGVzdCI7Ci0g
ICAgICAgIGlmIChpc0N5Z3dpbigpKSB7Ci0gICAgICAgICAgICAkdGVzdFBhdGggPSB0b1dpbmRv
d3NQYXRoKCR0ZXN0UGF0aCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkdGVzdFBh
dGggPSBjYW5vbnBhdGgoJHRlc3RQYXRoKTsKLSAgICAgICAgfQotICAgICAgICBwcmludCBPVVQg
IiR0ZXN0UGF0aCRzdWZmaXhFeHBlY3RlZEhhc2hcbiI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
b3BlbkhUVFBESWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKCR0ZXN0ICF+IC9eaHR0cFwvdGVzdHNc
L2xvY2FsXC8vICYmICR0ZXN0ICF+IC9eaHR0cFwvdGVzdHNcL3NzbFwvLyAmJiAkdGVzdCAhfiAv
Xmh0dHBcL3Rlc3RzXC93bWxcLy8gJiYgJHRlc3QgIX4gL15odHRwXC90ZXN0c1wvbWVkaWFcLy8p
IHsKLSAgICAgICAgICAgIG15ICRwYXRoID0gY2Fub25wYXRoKCR0ZXN0KTsKLSAgICAgICAgICAg
ICRwYXRoID1+IHMvXmh0dHBcL3Rlc3RzXC8vLzsKLSAgICAgICAgICAgIHByaW50IE9VVCAiaHR0
cDovLzEyNy4wLjAuMTokaHR0cGRQb3J0LyRwYXRoJHN1ZmZpeEV4cGVjdGVkSGFzaFxuIjsKLSAg
ICAgICAgfSBlbHNpZiAoJHRlc3QgPX4gL15odHRwXC90ZXN0c1wvc3NsXC8vKSB7Ci0gICAgICAg
ICAgICBteSAkcGF0aCA9IGNhbm9ucGF0aCgkdGVzdCk7Ci0gICAgICAgICAgICAkcGF0aCA9fiBz
L15odHRwXC90ZXN0c1wvLy87Ci0gICAgICAgICAgICBwcmludCBPVVQgImh0dHBzOi8vMTI3LjAu
MC4xOiRodHRwZFNTTFBvcnQvJHBhdGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4iOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgbXkgJHRlc3RQYXRoID0gIiR0ZXN0RGlyZWN0b3J5LyR0ZXN0
IjsKLSAgICAgICAgICAgIGlmIChpc0N5Z3dpbigpKSB7Ci0gICAgICAgICAgICAgICAgJHRlc3RQ
YXRoID0gdG9XaW5kb3dzUGF0aCgkdGVzdFBhdGgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAkdGVzdFBhdGggPSBjYW5vbnBhdGgoJHRlc3RQYXRoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHByaW50IE9VVCAiJHRlc3RQYXRoJHN1ZmZpeEV4cGVjdGVkSGFz
aFxuIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgICMgRHVtcFJlbmRlclRyZWUgaXMgZXhwZWN0
ZWQgdG8gZHVtcCB0d28gImJsb2NrcyIgdG8gc3Rkb3V0IGZvciBlYWNoIHRlc3QuCi0gICAgIyBF
YWNoIGJsb2NrIGlzIHRlcm1pbmF0ZWQgYnkgYSAjRU9GIG9uIGEgbGluZSBieSBpdHNlbGYuCi0g
ICAgIyBUaGUgZmlyc3QgYmxvY2sgaXMgdGhlIG91dHB1dCBvZiB0aGUgdGVzdCAoaW4gdGV4dCwg
UmVuZGVyVHJlZSBvciBvdGhlciBmb3JtYXRzKS4KLSAgICAjIFRoZSBzZWNvbmQgYmxvY2sgaXMg
Zm9yIG9wdGlvbmFsIHBpeGVsIGRhdGEgaW4gUE5HIGZvcm1hdCwgYW5kIG1heSBiZSBlbXB0eSBp
ZgotICAgICMgcGl4ZWwgdGVzdHMgYXJlIG5vdCBiZWluZyBydW4sIG9yIHRoZSB0ZXN0IGRvZXMg
bm90IGR1bXAgcGl4ZWxzIChlLmcuIHRleHQgdGVzdHMpLgotICAgIAotICAgIG15ICRhY3R1YWxS
ZWFkID0gcmVhZEZyb21EdW1wVG9vbFdpdGhUaW1lcihJTik7Ci0gICAgbXkgJGVycm9yUmVhZCA9
IHJlYWRGcm9tRHVtcFRvb2xXaXRoVGltZXIoRVJST1IsICRhY3R1YWxSZWFkLT57c3RhdHVzfSBl
cSAidGltZWRPdXQiKTsKLQotICAgIG15ICRhY3R1YWwgPSAkYWN0dWFsUmVhZC0+e291dHB1dH07
Ci0gICAgbXkgJGVycm9yID0gJGVycm9yUmVhZC0+e291dHB1dH07Ci0KLSAgICAkZXhwZWN0ZWRF
eHRlbnNpb24gPSAkYWN0dWFsUmVhZC0+e2V4dGVuc2lvbn07Ci0gICAgbXkgJGV4cGVjdGVkRmls
ZU5hbWUgPSAiJGJhc2UtJGV4cGVjdGVkVGFnLiRleHBlY3RlZEV4dGVuc2lvbiI7Ci0KLSAgICBt
eSAkaXNUZXh0ID0gaXNUZXh0T25seVRlc3QoJGFjdHVhbCk7Ci0KLSAgICBteSAkZXhwZWN0ZWRE
aXIgPSBleHBlY3RlZERpcmVjdG9yeUZvclRlc3QoJGJhc2UsICRpc1RleHQsICRleHBlY3RlZEV4
dGVuc2lvbik7Ci0gICAgJGV4cGVjdGVkUmVzdWx0UGF0aHN7JGJhc2V9ID0gIiRleHBlY3RlZERp
ci8kZXhwZWN0ZWRGaWxlTmFtZSI7Ci0KLSAgICB1bmxlc3MgKCRhY3R1YWxSZWFkLT57c3RhdHVz
fSBlcSAic3VjY2VzcyIgJiYgJGVycm9yUmVhZC0+e3N0YXR1c30gZXEgInN1Y2Nlc3MiKSB7Ci0g
ICAgICAgIG15ICRjcmFzaGVkID0gJGFjdHVhbFJlYWQtPntzdGF0dXN9IGVxICJjcmFzaGVkIiB8
fCAkZXJyb3JSZWFkLT57c3RhdHVzfSBlcSAiY3Jhc2hlZCI7Ci0gICAgICAgIHRlc3RDcmFzaGVk
T3JUaW1lZE91dCgkdGVzdCwgJGJhc2UsICRjcmFzaGVkLCAkYWN0dWFsLCAkZXJyb3IpOwotICAg
ICAgICBjb3VudEZpbmlzaGVkVGVzdCgkdGVzdCwgJGJhc2UsICRjcmFzaGVkID8gImNyYXNoIiA6
ICJ0aW1lZG91dCIsIDApOwotICAgICAgICBuZXh0OwotICAgICB9Ci0KLSAgICAkZHVyYXRpb25z
eyR0ZXN0fSA9IHRpbWUgLSAkc3RhcnRUaW1lIGlmICRyZXBvcnQxMFNsb3dlc3Q7Ci0KLSAgICBt
eSAkZXhwZWN0ZWQ7Ci0KLSAgICBpZiAoISRyZXNldFJlc3VsdHMgJiYgb3BlbiBFWFBFQ1RFRCwg
IjwiLCAiJGV4cGVjdGVkRGlyLyRleHBlY3RlZEZpbGVOYW1lIikgewotICAgICAgICAkZXhwZWN0
ZWQgPSAiIjsKLSAgICAgICAgd2hpbGUgKDxFWFBFQ1RFRD4pIHsKLSAgICAgICAgICAgIG5leHQg
aWYgJHN0cmlwRWRpdGluZ0NhbGxiYWNrcyAmJiAkXyA9fiAvXkVESVRJTkcgREVMRUdBVEU6LzsK
LSAgICAgICAgICAgICRleHBlY3RlZCAuPSAkXzsKLSAgICAgICAgfQotICAgICAgICBjbG9zZSBF
WFBFQ1RFRDsKLSAgICB9Ci0gICAgbXkgJGV4cGVjdGVkTWFjOwotICAgIGlmICghaXNBcHBsZU1h
Y1dlYktpdCgpICYmICRzdHJpY3RUZXN0aW5nICYmICEkaXNUZXh0KSB7Ci0gICAgICBpZiAoISRy
ZXNldFJlc3VsdHMgJiYgb3BlbiBFWFBFQ1RFRCwgIjwiLCAiJHRlc3REaXJlY3RvcnkvcGxhdGZv
cm0vbWFjLyRleHBlY3RlZEZpbGVOYW1lIikgewotICAgICAgICAkZXhwZWN0ZWRNYWMgPSAiIjsK
LSAgICAgICAgd2hpbGUgKDxFWFBFQ1RFRD4pIHsKLSAgICAgICAgICAkZXhwZWN0ZWRNYWMgLj0g
JF87Ci0gICAgICAgIH0KLSAgICAgICAgY2xvc2UgRVhQRUNURUQ7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKCRzaG91bGRDaGVja0xlYWtzICYmICR0ZXN0c1BlckR1bXBUb29sID09IDEpIHsK
LSAgICAgICAgcHJpbnQgIiAgICAgICAgJHRlc3QgLT4gIjsKLSAgICB9Ci0KLSAgICBteSAkYWN0
dWFsUE5HID0gIiI7Ci0gICAgbXkgJGRpZmZQTkcgPSAiIjsKLSAgICBteSAkZGlmZlBlcmNlbnRh
Z2UgPSAiIjsKLSAgICBteSAkZGlmZlJlc3VsdCA9ICJwYXNzZWQiOwotCi0gICAgbXkgJGFjdHVh
bEhhc2ggPSAiIjsKLSAgICBteSAkZXhwZWN0ZWRIYXNoID0gIiI7Ci0gICAgbXkgJGFjdHVhbFBO
R1NpemUgPSAwOwotCi0gICAgd2hpbGUgKDxJTj4pIHsKLSAgICAgICAgbGFzdCBpZiAvI0VPRi87
Ci0gICAgICAgIGlmICgvQWN0dWFsSGFzaDogKFthLWYwLTldezMyfSkvKSB7Ci0gICAgICAgICAg
ICAkYWN0dWFsSGFzaCA9ICQxOwotICAgICAgICB9IGVsc2lmICgvRXhwZWN0ZWRIYXNoOiAoW2Et
ZjAtOV17MzJ9KS8pIHsKLSAgICAgICAgICAgICRleHBlY3RlZEhhc2ggPSAkMTsKLSAgICAgICAg
fSBlbHNpZiAoL0NvbnRlbnQtTGVuZ3RoOiAoXGQrKVxzKi8pIHsKLSAgICAgICAgICAgICRhY3R1
YWxQTkdTaXplID0gJDE7Ci0gICAgICAgICAgICByZWFkKElOLCAkYWN0dWFsUE5HLCAkYWN0dWFs
UE5HU2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoJHZlcmJvc2UgJiYgJHBpeGVs
VGVzdHMgJiYgISRyZXNldFJlc3VsdHMgJiYgJGFjdHVhbFBOR1NpemUpIHsKLSAgICAgICAgaWYg
KCRhY3R1YWxIYXNoIGVxICIiICYmICRleHBlY3RlZEhhc2ggZXEgIiIpIHsKLSAgICAgICAgICAg
IHByaW50RmFpbHVyZU1lc3NhZ2VGb3JUZXN0KCR0ZXN0LCAiV0FSTklORzogYWN0dWFsICYgZXhw
ZWN0ZWQgcGl4ZWwgaGFzaGVzIGFyZSBtaXNzaW5nISIpOwotICAgICAgICB9IGVsc2lmICgkYWN0
dWFsSGFzaCBlcSAiIikgewotICAgICAgICAgICAgcHJpbnRGYWlsdXJlTWVzc2FnZUZvclRlc3Qo
JHRlc3QsICJXQVJOSU5HOiBhY3R1YWwgcGl4ZWwgaGFzaCBpcyBtaXNzaW5nISIpOwotICAgICAg
ICB9IGVsc2lmICgkZXhwZWN0ZWRIYXNoIGVxICIiKSB7Ci0gICAgICAgICAgICBwcmludEZhaWx1
cmVNZXNzYWdlRm9yVGVzdCgkdGVzdCwgIldBUk5JTkc6IGV4cGVjdGVkIHBpeGVsIGhhc2ggaXMg
bWlzc2luZyEiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgkYWN0dWFsUE5HU2l6ZSA+
IDApIHsKLSAgICAgICAgbXkgJGV4cGVjdGVkUGl4ZWxEaXIgPSBleHBlY3RlZERpcmVjdG9yeUZv
clRlc3QoJGJhc2UsIDAsICJwbmciKTsKLQotICAgICAgICBpZiAoISRyZXNldFJlc3VsdHMgJiYg
KCRleHBlY3RlZEhhc2ggbmUgJGFjdHVhbEhhc2ggfHwgKCRhY3R1YWxIYXNoIGVxICIiICYmICRl
eHBlY3RlZEhhc2ggZXEgIiIpKSkgewotICAgICAgICAgICAgaWYgKC1mICIkZXhwZWN0ZWRQaXhl
bERpci8kYmFzZS0kZXhwZWN0ZWRUYWcucG5nIikgewotICAgICAgICAgICAgICAgIG15ICRleHBl
Y3RlZFBOR1NpemUgPSAtcyAiJGV4cGVjdGVkUGl4ZWxEaXIvJGJhc2UtJGV4cGVjdGVkVGFnLnBu
ZyI7Ci0gICAgICAgICAgICAgICAgbXkgJGV4cGVjdGVkUE5HID0gIiI7Ci0gICAgICAgICAgICAg
ICAgb3BlbiBFWFBFQ1RFRFBORywgIiRleHBlY3RlZFBpeGVsRGlyLyRiYXNlLSRleHBlY3RlZFRh
Zy5wbmciOwotICAgICAgICAgICAgICAgIHJlYWQoRVhQRUNURURQTkcsICRleHBlY3RlZFBORywg
JGV4cGVjdGVkUE5HU2l6ZSk7Ci0KLSAgICAgICAgICAgICAgICBwcmludCBESUZGT1VUICJDb250
ZW50LUxlbmd0aDogJGFjdHVhbFBOR1NpemVcbiI7Ci0gICAgICAgICAgICAgICAgcHJpbnQgRElG
Rk9VVCAkYWN0dWFsUE5HOwotCi0gICAgICAgICAgICAgICAgcHJpbnQgRElGRk9VVCAiQ29udGVu
dC1MZW5ndGg6ICRleHBlY3RlZFBOR1NpemVcbiI7Ci0gICAgICAgICAgICAgICAgcHJpbnQgRElG
Rk9VVCAkZXhwZWN0ZWRQTkc7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoPERJRkZJTj4pIHsK
LSAgICAgICAgICAgICAgICAgICAgbGFzdCBpZiAvXmVycm9yLyB8fCAvXmRpZmY6LzsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKC9Db250ZW50LUxlbmd0aDogKFxkKylccyovKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZWFkKERJRkZJTiwgJGRpZmZQTkcsICQxKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICgvXmRp
ZmY6ICguKyklIChwYXNzZWR8ZmFpbGVkKS8pIHsKLSAgICAgICAgICAgICAgICAgICAgJGRpZmZQ
ZXJjZW50YWdlID0gJDE7Ci0gICAgICAgICAgICAgICAgICAgICRpbWFnZURpZmZlcmVuY2VzeyRi
YXNlfSA9ICRkaWZmUGVyY2VudGFnZTsKLSAgICAgICAgICAgICAgICAgICAgJGRpZmZSZXN1bHQg
PSAkMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCRkaWZmUGVyY2VudGFnZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50
RmFpbHVyZU1lc3NhZ2VGb3JUZXN0KCR0ZXN0LCAicGl4ZWwgaGFzaCBmYWlsZWQgKGJ1dCBwaXhl
bCB0ZXN0IHN0aWxsIHBhc3NlcykiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2lmICgkdmVyYm9zZSkgewotICAgICAgICAgICAgICAgIHByaW50RmFpbHVyZU1lc3NhZ2VG
b3JUZXN0KCR0ZXN0LCAiV0FSTklORzogZXhwZWN0ZWQgaW1hZ2UgaXMgbWlzc2luZyEiKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkcmVzZXRSZXN1bHRzIHx8ICEt
ZiAiJGV4cGVjdGVkUGl4ZWxEaXIvJGJhc2UtJGV4cGVjdGVkVGFnLnBuZyIpIHsKLSAgICAgICAg
ICAgIG1rcGF0aCBjYXRmaWxlKCRleHBlY3RlZFBpeGVsRGlyLCBkaXJuYW1lKCRiYXNlKSkgaWYg
JHRlc3REaXJlY3RvcnkgbmUgJGV4cGVjdGVkUGl4ZWxEaXI7Ci0gICAgICAgICAgICB3cml0ZVRv
RmlsZSgiJGV4cGVjdGVkUGl4ZWxEaXIvJGJhc2UtJGV4cGVjdGVkVGFnLnBuZyIsICRhY3R1YWxQ
TkcpOwotICAgICAgICB9CitpZiAoISRyZXZlcnNlVGVzdHMgJiYgISRyYW5kb21pemVUZXN0cykg
eworICAgIG15ICVzbG93VGVzdHMgPSAoCisgICAgICAgICJodHRwIiA9PiAxLAorICAgICAgICAi
ZmFzdCIgPT4gMiwKKyAgICAgICAgImRvbSIgPT4gMywKKyAgICAgICAgKTsKIAotICAgICAgICBp
ZiAoJGFjdHVhbEhhc2ggbmUgIiIgJiYgKCRyZXNldFJlc3VsdHMgfHwgIS1mICIkZXhwZWN0ZWRQ
aXhlbERpci8kYmFzZS0kZXhwZWN0ZWRUYWcuY2hlY2tzdW0iKSkgewotICAgICAgICAgICAgd3Jp
dGVUb0ZpbGUoIiRleHBlY3RlZFBpeGVsRGlyLyRiYXNlLSRleHBlY3RlZFRhZy5jaGVja3N1bSIs
ICRhY3R1YWxIYXNoKTsKLSAgICAgICAgfQorICAgIHN1YiBnZXRUZXN0RGlyU2NvcmUoJCkKKyAg
ICB7CisgICAgICAgIG15ICgkdGVzdERpcmVjdG9yeSkgPSBAXzsKKyAgICAgICAgJHRlc3REaXJl
Y3RvcnkgPX4gcy9eKC4qPylcLy4qLyQxLzsKKyAgICAgICAgbXkgJHNjb3JlID0gJHNsb3dUZXN0
c3skdGVzdERpcmVjdG9yeX07CisgICAgICAgICRzY29yZSA9IDEwMDAgaWYgISRzY29yZTsKKyAg
ICAgICAgcmV0dXJuICRzY29yZTsKICAgICB9CiAKLSAgICBpZiAoIWlzQXBwbGVNYWNXZWJLaXQo
KSAmJiAkc3RyaWN0VGVzdGluZyAmJiAhJGlzVGV4dCkgewotICAgICAgaWYgKGRlZmluZWQgJGV4
cGVjdGVkTWFjKSB7Ci0gICAgICAgIG15ICRzaW1wbGlmaWVkX2FjdHVhbDsKLSAgICAgICAgJHNp
bXBsaWZpZWRfYWN0dWFsID0gJGFjdHVhbDsKLSAgICAgICAgJHNpbXBsaWZpZWRfYWN0dWFsID1+
IHMvYXQgXCgtP1swLTldKywtP1swLTldK1wpICovL2c7Ci0gICAgICAgICRzaW1wbGlmaWVkX2Fj
dHVhbCA9fiBzL3NpemUgLT9bMC05XSt4LT9bMC05XSsgKi8vZzsKLSAgICAgICAgJHNpbXBsaWZp
ZWRfYWN0dWFsID1+IHMvdGV4dCBydW4gd2lkdGggLT9bMC05XSs6IC8vZzsKLSAgICAgICAgJHNp
bXBsaWZpZWRfYWN0dWFsID1+IHMvdGV4dCBydW4gd2lkdGggLT9bMC05XSsgW2EtekEtWiBdKzog
Ly9nOwotICAgICAgICAkc2ltcGxpZmllZF9hY3R1YWwgPX4gcy9SZW5kZXJCdXR0b24ge0JVVFRP
Tn0gLiovUmVuZGVyQnV0dG9uIHtCVVRUT059L2c7Ci0gICAgICAgICRzaW1wbGlmaWVkX2FjdHVh
bCA9fiBzL1JlbmRlckltYWdlIHtJTlBVVH0gLiovUmVuZGVySW1hZ2Uge0lOUFVUfS9nOwotICAg
ICAgICAkc2ltcGxpZmllZF9hY3R1YWwgPX4gcy9SZW5kZXJCbG9jayB7SU5QVVR9IC4qL1JlbmRl
ckJsb2NrIHtJTlBVVH0vZzsKLSAgICAgICAgJHNpbXBsaWZpZWRfYWN0dWFsID1+IHMvUmVuZGVy
VGV4dENvbnRyb2wge0lOUFVUfSAuKi9SZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9L2c7Ci0gICAg
ICAgICRzaW1wbGlmaWVkX2FjdHVhbCA9fiBzL1woWzAtOV0rcHgvcHgvZzsKLSAgICAgICAgJHNp
bXBsaWZpZWRfYWN0dWFsID1+IHMvICoiICpcbiArIiAqLyAvZzsKLSAgICAgICAgJHNpbXBsaWZp
ZWRfYWN0dWFsID1+IHMvIiArJC8iL2c7Ci0KLSAgICAgICAgJHNpbXBsaWZpZWRfYWN0dWFsID1+
IHMvLSAvLS9nOwotICAgICAgICAkc2ltcGxpZmllZF9hY3R1YWwgPX4gcy9cbiggKikiXHMrL1xu
JDEiL2c7Ci0gICAgICAgICRzaW1wbGlmaWVkX2FjdHVhbCA9fiBzL1xzKyJcbi8iXG4vZzsKLSAg
ICAgICAgCi0gICAgICAgICRleHBlY3RlZE1hYyA9fiBzL2F0IFwoLT9bMC05XSssLT9bMC05XStc
KSAqLy9nOwotICAgICAgICAkZXhwZWN0ZWRNYWMgPX4gcy9zaXplIC0/WzAtOV0reC0/WzAtOV0r
ICovL2c7Ci0gICAgICAgICRleHBlY3RlZE1hYyA9fiBzL3RleHQgcnVuIHdpZHRoIC0/WzAtOV0r
OiAvL2c7Ci0gICAgICAgICRleHBlY3RlZE1hYyA9fiBzL3RleHQgcnVuIHdpZHRoIC0/WzAtOV0r
IFthLXpBLVogXSs6IC8vZzsKLSAgICAgICAgJGV4cGVjdGVkTWFjID1+IHMvUmVuZGVyQnV0dG9u
IHtCVVRUT059IC4qL1JlbmRlckJ1dHRvbiB7QlVUVE9OfS9nOwotICAgICAgICAkZXhwZWN0ZWRN
YWMgPX4gcy9SZW5kZXJJbWFnZSB7SU5QVVR9IC4qL1JlbmRlckltYWdlIHtJTlBVVH0vZzsKLSAg
ICAgICAgJGV4cGVjdGVkTWFjID1+IHMvUmVuZGVyQmxvY2sge0lOUFVUfSAuKi9SZW5kZXJCbG9j
ayB7SU5QVVR9L2c7Ci0gICAgICAgICRleHBlY3RlZE1hYyA9fiBzL1JlbmRlclRleHRDb250cm9s
IHtJTlBVVH0gLiovUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfS9nOwotICAgICAgICAkZXhwZWN0
ZWRNYWMgPX4gcy9cKFswLTldK3B4L3B4L2c7Ci0gICAgICAgICRleHBlY3RlZE1hYyA9fiBzLyAq
IiAqXG4gKyIgKi8gL2c7Ci0gICAgICAgICRleHBlY3RlZE1hYyA9fiBzLyIgKyQvIi9nOwotCi0g
ICAgICAgICRleHBlY3RlZE1hYyA9fiBzLy0gLy0vZzsKLSAgICAgICAgJGV4cGVjdGVkTWFjID1+
IHMvXG4oICopIlxzKy9cbiQxIi9nOwotICAgICAgICAkZXhwZWN0ZWRNYWMgPX4gcy9ccysiXG4v
IlxuL2c7Ci0gICAgICAgIAotICAgICAgICBpZiAoJHNpbXBsaWZpZWRfYWN0dWFsIG5lICRleHBl
Y3RlZE1hYykgewotICAgICAgICAgIHdyaXRlVG9GaWxlKCIvdG1wL2FjdHVhbC50eHQiLCAkc2lt
cGxpZmllZF9hY3R1YWwpOwotICAgICAgICAgIHdyaXRlVG9GaWxlKCIvdG1wL2V4cGVjdGVkLnR4
dCIsICRleHBlY3RlZE1hYyk7Ci0gICAgICAgICAgc3lzdGVtICJkaWZmIC11IFwiL3RtcC9leHBl
Y3RlZC50eHRcIiBcIi90bXAvYWN0dWFsLnR4dFwiID4gXCIvdG1wL3NpbXBsaWZpZWQuZGlmZlwi
IjsKLQotICAgICAgICAgICRkaWZmUmVzdWx0ID0gImZhaWxlZCI7Ci0gICAgICAgICAgaWYgKCR2
ZXJib3NlKSB7Ci0gICAgICAgICAgICBwcmludCAiXG4iOwotICAgICAgICAgICAgc3lzdGVtICJj
YXQgL3RtcC9zaW1wbGlmaWVkLmRpZmYiOwotICAgICAgICAgICAgcHJpbnQgImZhaWxlZCEhISEh
IjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KKyAgICBzdWIgc2xvd2VzdFRlc3RT
dWl0ZXNGaXJzdCgkJCkKKyAgICB7CisgICAgICAgIG15ICgkYSwgJGIpID0gQF87CisgICAgICAg
IG15ICRmaXJzdFNjb3JlID0gZ2V0VGVzdERpclNjb3JlKCR7JGF9WzBdKTsKKyAgICAgICAgbXkg
JHNlY29uZFNjb3JlID0gZ2V0VGVzdERpclNjb3JlKCR7JGJ9WzBdKTsKKyAgICAgICAgcmV0dXJu
ICRmaXJzdFNjb3JlIDw9PiAkc2Vjb25kU2NvcmU7CiAgICAgfQorICAgIEB0ZXN0R3JvdXBzID0g
c29ydCBzbG93ZXN0VGVzdFN1aXRlc0ZpcnN0IEB0ZXN0R3JvdXBzOworfQogCi0gICAgaWYgKGR1
bXBUb29sRGlkQ3Jhc2goKSkgewotICAgICAgICAkcmVzdWx0ID0gImNyYXNoIjsKLSAgICAgICAg
dGVzdENyYXNoZWRPclRpbWVkT3V0KCR0ZXN0LCAkYmFzZSwgMSwgJGFjdHVhbCwgJGVycm9yKTsK
LSAgICB9IGVsc2lmICghZGVmaW5lZCAkZXhwZWN0ZWQpIHsKLSAgICAgICAgaWYgKCR2ZXJib3Nl
KSB7Ci0gICAgICAgICAgICBwcmludCAibmV3ICIgLiAoJHJlc2V0UmVzdWx0cyA/ICJyZXN1bHQi
IDogInRlc3QiKSAuIlxuIjsKLSAgICAgICAgICAgICRhdExpbmVTdGFydCA9IDE7Ci0gICAgICAg
IH0KLSAgICAgICAgJHJlc3VsdCA9ICJuZXciOwotCi0gICAgICAgIGlmICgkZ2VuZXJhdGVOZXdS
ZXN1bHRzIHx8ICRyZXNldFJlc3VsdHMpIHsKLSAgICAgICAgICAgIG1rcGF0aCBjYXRmaWxlKCRl
eHBlY3RlZERpciwgZGlybmFtZSgkYmFzZSkpIGlmICR0ZXN0RGlyZWN0b3J5IG5lICRleHBlY3Rl
ZERpcjsKLSAgICAgICAgICAgIHdyaXRlVG9GaWxlKCIkZXhwZWN0ZWREaXIvJGV4cGVjdGVkRmls
ZU5hbWUiLCAkYWN0dWFsKTsKLSAgICAgICAgfQotICAgICAgICBkZWxldGVFeHBlY3RlZEFuZEFj
dHVhbFJlc3VsdHMoJGJhc2UpOwotICAgICAgICBpZiAoJGdlbmVyYXRlTmV3UmVzdWx0cyAmJiAh
JHJlc2V0UmVzdWx0cykgewotICAgICAgICAgICAgIyBBbHdheXMgcHJpbnQgdGhlIGZpbGUgbmFt
ZSBmb3IgbmV3IHRlc3RzLCBhcyB0aGV5IHdpbGwgcHJvYmFibHkgbmVlZCBzb21lIG1hbnVhbCBp
bnNwZWN0aW9uLgotICAgICAgICAgICAgIyBpbiB2ZXJib3NlIG1vZGUgd2UgYWxyZWFkeSBwcmlu
dGVkIHRoZSB0ZXN0IGNhc2UsIHNvIG5vIG5lZWQgdG8gZG8gaXQgYWdhaW4uCi0gICAgICAgICAg
ICB1bmxlc3MgKCR2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnQgIlxuIiB1bmxlc3Mg
JGF0TGluZVN0YXJ0OwotICAgICAgICAgICAgICAgIHByaW50ICIkdGVzdCAtPiAiOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbXkgJHJlc3VsdHNEaXIgPSBjYXRkaXIoJGV4cGVjdGVkRGly
LCBkaXJuYW1lKCRiYXNlKSk7Ci0gICAgICAgICAgICBwcmludCAibmV3IChyZXN1bHRzIGdlbmVy
YXRlZCBpbiAkcmVzdWx0c0RpcilcbiI7Ci0gICAgICAgICAgICAkYXRMaW5lU3RhcnQgPSAxOwot
ICAgICAgICB9Ci0gICAgfSBlbHNpZiAoJGFjdHVhbCBlcSAkZXhwZWN0ZWQgJiYgJGRpZmZSZXN1
bHQgZXEgInBhc3NlZCIpIHsKLSAgICAgICAgaWYgKCR2ZXJib3NlKSB7Ci0gICAgICAgICAgICBw
cmludCAic3VjY2VlZGVkXG4iOwotICAgICAgICAgICAgJGF0TGluZVN0YXJ0ID0gMTsKLSAgICAg
ICAgfQotICAgICAgICAkcmVzdWx0ID0gIm1hdGNoIjsKLSAgICAgICAgZGVsZXRlRXhwZWN0ZWRB
bmRBY3R1YWxSZXN1bHRzKCRiYXNlKTsKLSAgICB9IGVsc2UgewotICAgICAgICAkcmVzdWx0ID0g
Im1pc21hdGNoIjsKLQotICAgICAgICBteSAkbWVzc2FnZSA9ICRhY3R1YWwgZXEgJGV4cGVjdGVk
ID8gInBpeGVsIHRlc3QgZmFpbGVkIiA6ICJmYWlsZWQiOwotCi0gICAgICAgIGlmICgkYWN0dWFs
IG5lICRleHBlY3RlZCAmJiAkYWRkUGxhdGZvcm1FeGNlcHRpb25zKSB7Ci0gICAgICAgICAgICBt
eSAkdGVzdEJhc2UgPSBjYXRmaWxlKCR0ZXN0RGlyZWN0b3J5LCAkYmFzZSk7Ci0gICAgICAgICAg
ICBteSAkZXhwZWN0ZWRCYXNlID0gY2F0ZmlsZSgkZXhwZWN0ZWREaXIsICRiYXNlKTsKLSAgICAg
ICAgICAgIG15ICR0ZXN0SXNNYXhpbWFsbHlQbGF0Zm9ybVNwZWNpZmljID0gJHRlc3RCYXNlID1+
IG18XlxRJHBsYXRmb3JtVGVzdERpcmVjdG9yeVxFL3w7Ci0gICAgICAgICAgICBteSAkZXhwZWN0
ZWRSZXN1bHRJc01heGltYWxseVBsYXRmb3JtU3BlY2lmaWMgPSAkZXhwZWN0ZWRCYXNlID1+IG18
XlxRJHBsYXRmb3JtVGVzdERpcmVjdG9yeVxFL3w7Ci0gICAgICAgICAgICBpZiAoISR0ZXN0SXNN
YXhpbWFsbHlQbGF0Zm9ybVNwZWNpZmljICYmICEkZXhwZWN0ZWRSZXN1bHRJc01heGltYWxseVBs
YXRmb3JtU3BlY2lmaWMpIHsKLSAgICAgICAgICAgICAgICBta3BhdGggY2F0ZmlsZSgkcGxhdGZv
cm1UZXN0RGlyZWN0b3J5LCBkaXJuYW1lKCRiYXNlKSk7Ci0gICAgICAgICAgICAgICAgbXkgJGV4
cGVjdGVkRmlsZSA9IGNhdGZpbGUoJHBsYXRmb3JtVGVzdERpcmVjdG9yeSwgIiRleHBlY3RlZEZp
bGVOYW1lIik7Ci0gICAgICAgICAgICAgICAgd3JpdGVUb0ZpbGUoIiRleHBlY3RlZEZpbGUiLCAk
YWN0dWFsKTsKLSAgICAgICAgICAgICAgICAkbWVzc2FnZSAuPSAiIChyZXN1bHRzIGdlbmVyYXRl
ZCBpbiAkcGxhdGZvcm1UZXN0RGlyZWN0b3J5KSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBwcmludEZhaWx1cmVNZXNzYWdlRm9yVGVzdCgkdGVzdCwgJG1lc3NhZ2UpOwor
IyBBZGQgdGVzdHMgdG8gd29yayBxdWV1ZS4KK215ICR3b3JrQ3JldyA9IFdvcmtDcmV3LT5uZXco
KTsKK2ZvciBteSAkdGVzdEdyb3VwIChAdGVzdEdyb3VwcykgeworICAgICR3b3JrQ3Jldy0+ZW5x
dWV1ZVdvcmsoJHRlc3RHcm91cCk7Cit9CiAKLSAgICAgICAgbXkgJGRpciA9ICIkdGVzdFJlc3Vs
dHNEaXJlY3RvcnkvJGJhc2UiOwotICAgICAgICAkZGlyID1+IHN8LyhbXi9dKykkfHwgb3IgZGll
ICJGYWlsZWQgdG8gZmluZCB0ZXN0IG5hbWUgZnJvbSBiYXNlXG4iOwotICAgICAgICBteSAkdGVz
dE5hbWUgPSAkMTsKLSAgICAgICAgbWtwYXRoICRkaXI7CitwcmludCAiVGVzdGluZyAiLCBzY2Fs
YXIgQHRlc3RzLCAiIHRlc3QgY2FzZXMuXG4iOworbXkgJG92ZXJhbGxTdGFydFRpbWUgPSB0aW1l
OworJHwgPSAxOwogCi0gICAgICAgIGRlbGV0ZUV4cGVjdGVkQW5kQWN0dWFsUmVzdWx0cygkYmFz
ZSk7Ci0gICAgICAgIHJlY29yZEFjdHVhbFJlc3VsdHNBbmREaWZmKCRiYXNlLCAkYWN0dWFsKTsK
K215IEB0b29sQXJncyA9ICgpOworcHVzaCBAdG9vbEFyZ3MsICItLXBpeGVsLXRlc3RzIiBpZiAk
cGl4ZWxUZXN0czsKK3B1c2ggQHRvb2xBcmdzLCAiLS10aHJlYWRlZCIgaWYgJHRocmVhZGVkOwor
cHVzaCBAdG9vbEFyZ3MsICItLWNvbXBsZXgtdGV4dCIgaWYgJGNvbXBsZXhUZXh0OworcHVzaCBA
dG9vbEFyZ3MsICItIjsKIAotICAgICAgICBpZiAoJHBpeGVsVGVzdHMgJiYgJGRpZmZQTkcgJiYg
JGRpZmZQTkcgbmUgIiIpIHsKLSAgICAgICAgICAgICRpbWFnZXNQcmVzZW50eyRiYXNlfSA9IDE7
CitteSBAZGlmZlRvb2xBcmdzID0gKCk7CitwdXNoIEBkaWZmVG9vbEFyZ3MsICItLXRvbGVyYW5j
ZSIsICR0b2xlcmFuY2U7CiAKLSAgICAgICAgICAgIHdyaXRlVG9GaWxlKCIkdGVzdFJlc3VsdHNE
aXJlY3RvcnkvJGJhc2UtJGFjdHVhbFRhZy5wbmciLCAkYWN0dWFsUE5HKTsKLSAgICAgICAgICAg
IHdyaXRlVG9GaWxlKCIkdGVzdFJlc3VsdHNEaXJlY3RvcnkvJGJhc2UtJGRpZmZzVGFnLnBuZyIs
ICRkaWZmUE5HKTsKKyMgVGVzdHMgcmVzdWx0cyB3aGljaCBhcmUgc2hhcmVkIGFjcm9zcyB0aHJl
YWRzLgorbXkgJGNvdW50IDogc2hhcmVkID0gMDsKK215ICRsZWFrc091dHB1dEZpbGVOdW1iZXIg
OiBzaGFyZWQgPSAxOworbXkgJHRvdGFsTGVha3MgOiBzaGFyZWQgPSAwOworbXkgJGlzSHR0cGRP
cGVuIDogc2hhcmVkID0gMDsKK215ICVjb3VudHMgOiBzaGFyZWQ7CitteSAlaW1hZ2VzUHJlc2Vu
dCA6IHNoYXJlZDsKK215ICVpbWFnZURpZmZlcmVuY2VzIDogc2hhcmVkOworbXkgJWR1cmF0aW9u
cyA6IHNoYXJlZDsKK215ICVleHBlY3RlZFJlc3VsdFBhdGhzIDogc2hhcmVkOworbXkgJXRlc3Rz
IDogc2hhcmVkOworIyBUaGUgYXJyYXkgZW50cmllcyBtdXN0IGJlIGluaXRpYWxpemVkIGR1ZSB0
byB0aGUgYXNzb2NpYXRpdmUgYXJyYXkgYmVpbmcgc2hhcmVkLgorZm9yIG15ICR0eXBlICgibWF0
Y2giLCAibWlzbWF0Y2giLCAibmV3IiwgInRpbWVkb3V0IiwgImNyYXNoIiwgImVycm9yIikgewor
ICAgIG15IEBsaXN0IDogc2hhcmVkID0gKCk7CisgICAgJHRlc3RzeyR0eXBlfSA9IFxAbGlzdDsK
K30KIAotICAgICAgICAgICAgbXkgJGV4cGVjdGVkUGl4ZWxEaXIgPSBleHBlY3RlZERpcmVjdG9y
eUZvclRlc3QoJGJhc2UsIDAsICJwbmciKTsKLSAgICAgICAgICAgIGNvcHkoIiRleHBlY3RlZFBp
eGVsRGlyLyRiYXNlLSRleHBlY3RlZFRhZy5wbmciLCAiJHRlc3RSZXN1bHRzRGlyZWN0b3J5LyRi
YXNlLSRleHBlY3RlZFRhZy5wbmciKTsKLQotICAgICAgICAgICAgb3BlbiBESUZGSFRNTCwgIj4k
dGVzdFJlc3VsdHNEaXJlY3RvcnkvJGJhc2UtJGRpZmZzVGFnLmh0bWwiIG9yIGRpZTsKLSAgICAg
ICAgICAgIHByaW50IERJRkZIVE1MICI8aHRtbD5cbiI7Ci0gICAgICAgICAgICBwcmludCBESUZG
SFRNTCAiPGhlYWQ+XG4iOwotICAgICAgICAgICAgcHJpbnQgRElGRkhUTUwgIjx0aXRsZT4kYmFz
ZSBJbWFnZSBDb21wYXJlPC90aXRsZT5cbiI7Ci0gICAgICAgICAgICBwcmludCBESUZGSFRNTCAi
PHNjcmlwdCBsYW5ndWFnZT1cIkphdmFzY3JpcHRcIiB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+
XG4iOwotICAgICAgICAgICAgcHJpbnQgRElGRkhUTUwgInZhciBjdXJyZW50SW1hZ2UgPSAwO1xu
IjsKLSAgICAgICAgICAgIHByaW50IERJRkZIVE1MICJ2YXIgaW1hZ2VOYW1lcyA9IG5ldyBBcnJh
eShcIkFjdHVhbFwiLCBcIkV4cGVjdGVkXCIpO1xuIjsKLSAgICAgICAgICAgIHByaW50IERJRkZI
VE1MICJ2YXIgaW1hZ2VQYXRocyA9IG5ldyBBcnJheShcIiR0ZXN0TmFtZS0kYWN0dWFsVGFnLnBu
Z1wiLCBcIiR0ZXN0TmFtZS0kZXhwZWN0ZWRUYWcucG5nXCIpO1xuIjsKLSAgICAgICAgICAgIGlm
ICgtZiAiJHRlc3REaXJlY3RvcnkvJGJhc2UtdzNjLnBuZyIpIHsKLSAgICAgICAgICAgICAgICBj
b3B5KCIkdGVzdERpcmVjdG9yeS8kYmFzZS13M2MucG5nIiwgIiR0ZXN0UmVzdWx0c0RpcmVjdG9y
eS8kYmFzZS13M2MucG5nIik7Ci0gICAgICAgICAgICAgICAgcHJpbnQgRElGRkhUTUwgImltYWdl
TmFtZXMucHVzaChcIlczQ1wiKTtcbiI7Ci0gICAgICAgICAgICAgICAgcHJpbnQgRElGRkhUTUwg
ImltYWdlUGF0aHMucHVzaChcIiR0ZXN0TmFtZS13M2MucG5nXCIpO1xuIjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHByaW50IERJRkZIVE1MICJmdW5jdGlvbiBhbmltYXRlSW1hZ2UoKSB7
XG4iOwotICAgICAgICAgICAgcHJpbnQgRElGRkhUTUwgIiAgICB2YXIgaW1hZ2UgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChcImFuaW1hdGVkSW1hZ2VcIik7XG4iOwotICAgICAgICAgICAgcHJp
bnQgRElGRkhUTUwgIiAgICB2YXIgaW1hZ2VUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
XCJpbWFnZVRleHRcIik7XG4iOwotICAgICAgICAgICAgcHJpbnQgRElGRkhUTUwgIiAgICBpbWFn
ZS5zcmMgPSBpbWFnZVBhdGhzW2N1cnJlbnRJbWFnZV07XG4iOwotICAgICAgICAgICAgcHJpbnQg
RElGRkhUTUwgIiAgICBpbWFnZVRleHQuaW5uZXJIVE1MID0gaW1hZ2VOYW1lc1tjdXJyZW50SW1h
Z2VdICsgXCIgSW1hZ2VcIjtcbiI7Ci0gICAgICAgICAgICBwcmludCBESUZGSFRNTCAiICAgIGN1
cnJlbnRJbWFnZSA9IChjdXJyZW50SW1hZ2UgKyAxKSAlIGltYWdlTmFtZXMubGVuZ3RoO1xuIjsK
LSAgICAgICAgICAgIHByaW50IERJRkZIVE1MICIgICAgc2V0VGltZW91dCgnYW5pbWF0ZUltYWdl
KCknLDIwMDApO1xuIjsKLSAgICAgICAgICAgIHByaW50IERJRkZIVE1MICJ9XG4iOwotICAgICAg
ICAgICAgcHJpbnQgRElGRkhUTUwgIjwvc2NyaXB0PlxuIjsKLSAgICAgICAgICAgIHByaW50IERJ
RkZIVE1MICI8L2hlYWQ+XG4iOwotICAgICAgICAgICAgcHJpbnQgRElGRkhUTUwgIjxib2R5IG9u
TG9hZD1cImFuaW1hdGVJbWFnZSgpO1wiPlxuIjsKLSAgICAgICAgICAgIHByaW50IERJRkZIVE1M
ICI8dGFibGU+XG4iOwotICAgICAgICAgICAgaWYgKCRkaWZmUGVyY2VudGFnZSkgewotICAgICAg
ICAgICAgICAgIHByaW50IERJRkZIVE1MICI8dHI+XG4iOwotICAgICAgICAgICAgICAgIHByaW50
IERJRkZIVE1MICI8dGQ+RGlmZmVyZW5jZSBiZXR3ZWVuIGltYWdlczogPGEgaHJlZj1cIiR0ZXN0
TmFtZS0kZGlmZnNUYWcucG5nXCI+JGRpZmZQZXJjZW50YWdlJTwvYT48L3RkPlxuIjsKLSAgICAg
ICAgICAgICAgICBwcmludCBESUZGSFRNTCAiPC90cj5cbiI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwcmludCBESUZGSFRNTCAiPHRyPlxuIjsKLSAgICAgICAgICAgIHByaW50IERJRkZI
VE1MICI8dGQ+PGEgaHJlZj1cIiIgLiB0b1VSTCgiJHRlc3REaXJlY3RvcnkvJHRlc3QiKSAuICJc
Ij50ZXN0IGZpbGU8L2E+PC90ZD5cbiI7Ci0gICAgICAgICAgICBwcmludCBESUZGSFRNTCAiPC90
cj5cbiI7Ci0gICAgICAgICAgICBwcmludCBESUZGSFRNTCAiPHRyPlxuIjsKLSAgICAgICAgICAg
IHByaW50IERJRkZIVE1MICI8dGQgaWQ9XCJpbWFnZVRleHRcIiBzdHlsZT1cInRleHQtd2VpZ2h0
OiBib2xkO1wiPkFjdHVhbCBJbWFnZTwvdGQ+XG4iOwotICAgICAgICAgICAgcHJpbnQgRElGRkhU
TUwgIjwvdHI+XG4iOwotICAgICAgICAgICAgcHJpbnQgRElGRkhUTUwgIjx0cj5cbiI7Ci0gICAg
ICAgICAgICBwcmludCBESUZGSFRNTCAiPHRkPjxpbWcgc3JjPVwiJHRlc3ROYW1lLSRhY3R1YWxU
YWcucG5nXCIgaWQ9XCJhbmltYXRlZEltYWdlXCI+PC90ZD5cbiI7Ci0gICAgICAgICAgICBwcmlu
dCBESUZGSFRNTCAiPC90cj5cbiI7Ci0gICAgICAgICAgICBwcmludCBESUZGSFRNTCAiPC90YWJs
ZT5cbiI7Ci0gICAgICAgICAgICBwcmludCBESUZGSFRNTCAiPC9ib2R5PlxuIjsKLSAgICAgICAg
ICAgIHByaW50IERJRkZIVE1MICI8L2h0bWw+XG4iOwotICAgICAgICB9Ci0gICAgfQorIyBHbG9i
YWwgdmFyaWFibGVzIHRoYXQgYXJlIG1vZGlmaWVkIGJ5IHRoZSB3b3JrZXIgdGhyZWFkcy4KK215
ICRtYWluVGhyZWFkID0gMTsKK215ICRhdExpbmVTdGFydCA9IDE7CitteSAkbGFzdERpcmVjdG9y
eSA9ICIiOworbXkgJGR1bXBUb29sUElEOworbXkgJGlzRHVtcFRvb2xPcGVuID0gMDsKK215ICRk
dW1wVG9vbENyYXNoZWQgPSAwOworbXkgJERVTVBUT09MT1VUOworbXkgJERVTVBUT09MSU47Citt
eSAkRFVNUFRPT0xFUlJPUjsKK215ICRpc0RpZmZUb29sT3BlbiA9IDA7CitteSAkaW1hZ2VEaWZm
VG9vbFBJRDsKIAotICAgIGlmICgkZXJyb3IpIHsKLSAgICAgICAgbXkgJGRpciA9ICIkdGVzdFJl
c3VsdHNEaXJlY3RvcnkvJGJhc2UiOwotICAgICAgICAkZGlyID1+IHN8LyhbXi9dKykkfHwgb3Ig
ZGllICJGYWlsZWQgdG8gZmluZCB0ZXN0IG5hbWUgZnJvbSBiYXNlXG4iOwotICAgICAgICBta3Bh
dGggJGRpcjsKLSAgICAgICAgCi0gICAgICAgIHdyaXRlVG9GaWxlKCIkdGVzdFJlc3VsdHNEaXJl
Y3RvcnkvJGJhc2UtJGVycm9yVGFnLnR4dCIsICRlcnJvcik7Ci0gICAgICAgIAotICAgICAgICAk
Y291bnRze2Vycm9yfSsrOwotICAgICAgICBwdXNoIEB7JHRlc3Rze2Vycm9yfX0sICR0ZXN0Owor
JHdvcmtDcmV3LT5zdGFydFdvcmtlclRocmVhZHMoJHBhcmFsbGVsUnVucywgXCZydW5UZXN0cywg
XCZjbGVhbnVwVGVzdHMpOword2hpbGUgKDEpIHsKKyAgICBteSAkb3V0cHV0ID0gJHdvcmtDcmV3
LT53b3JrSXRlbVJlc3VsdCgpOworICAgIGlmICghZGVmaW5lZCAkb3V0cHV0KSB7CisgICAgICAg
ICRvdXRwdXQgPSAkd29ya0NyZXctPndvcmtJdGVtUmVzdWx0KCk7CisgICAgICAgIGxhc3QgaWYg
IWRlZmluZWQgJG91dHB1dDsKICAgICB9Ci0KLSAgICBjb3VudEZpbmlzaGVkVGVzdCgkdGVzdCwg
JGJhc2UsICRyZXN1bHQsICRpc1RleHQpOworICAgIHByaW50ICIkb3V0cHV0IjsKIH0KLXByaW50
ZiAiXG4lMC4yZnMgdG90YWwgdGVzdGluZyB0aW1lXG4iLCAodGltZSAtICRvdmVyYWxsU3RhcnRU
aW1lKSAuICIiOwogCi0hJGlzRHVtcFRvb2xPcGVuIHx8IGRpZSAiRmFpbGVkIHRvIGNsb3NlICRk
dW1wVG9vbE5hbWUuXG4iOworcHJpbnRmICJcbiUwLjJmcyB0b3RhbCB0ZXN0aW5nIHRpbWVcbiIs
ICh0aW1lIC0gJG92ZXJhbGxTdGFydFRpbWUpIC4gIiI7CiAKIGNsb3NlSFRUUEQoKTsKIAotIyBC
ZWNhdXNlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIHNjcmlwdCBhcmUgcnVubmluZyBjb25j
dXJyZW50bHkgd2UgY2Fubm90IAorIyBCZWNhdXNlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlz
IHNjcmlwdCBhcmUgcnVubmluZyBjb25jdXJyZW50bHkgd2UgY2Fubm90CiAjIHNhZmVseSBkZWxl
dGUgdGhpcyBzeW1saW5rLgogIyBzeXN0ZW0gInJtIC90bXAvTGF5b3V0VGVzdHMiOwogCi0jIEZJ
WE1FOiBEbyB3ZSByZWFsbHkgd2FudCB0byBjaGVjayB0aGUgaW1hZ2UtY29tcGFyaXNvbiB0b29s
IGZvciBsZWFrcyBldmVyeSB0aW1lPwotaWYgKCRzaG91bGRDaGVja0xlYWtzICYmICRwaXhlbFRl
c3RzKSB7Ci0gICAgJHRvdGFsTGVha3MgKz0gY291bnRBbmRQcmludExlYWtzKCJJbWFnZURpZmYi
LCAkaW1hZ2VEaWZmVG9vbFBJRCwgIiR0ZXN0UmVzdWx0c0RpcmVjdG9yeS9JbWFnZURpZmYtbGVh
a3MudHh0Iik7Ci19Ci0KIGlmICgkdG90YWxMZWFrcykgewogICAgIGlmICgkbWVyZ2VEZXB0aCkg
ewogICAgICAgICBwYXJzZUxlYWtzYW5kUHJpbnRVbmlxdWVMZWFrcygpOwotICAgIH0KLSAgICBl
bHNlIHsgCisgICAgfSBlbHNlIHsKICAgICAgICAgcHJpbnQgIlxuV0FSTklORzogJHRvdGFsTGVh
a3MgdG90YWwgbGVha3MgZm91bmQhXG4iOwogICAgICAgICBwcmludCAiU2VlIGFib3ZlIGZvciBp
bmRpdmlkdWFsIGxlYWtzIHJlc3VsdHMuXG4iIGlmICgkbGVha3NPdXRwdXRGaWxlTnVtYmVyID4g
Mik7CiAgICAgfQogfQogCi1jbG9zZSBJTjsKLWNsb3NlIE9VVDsKLWNsb3NlIEVSUk9SOwogCiBp
ZiAoJHJlcG9ydDEwU2xvd2VzdCkgewogICAgIHByaW50ICJcblxuVGhlIDEwIHNsb3dlc3QgdGVz
dHM6XG5cbiI7CkBAIC05NjcsNyArNjM1LDYgQEAgaWYgKCRyZXNldFJlc3VsdHMgfHwgKCRjb3Vu
dHN7bWF0Y2h9ICYmICRjb3VudHN7bWF0Y2h9ID09ICRjb3VudCkpIHsKICAgICBleGl0OwogfQog
Ci0KIG15ICV0ZXh0ID0gKAogICAgIG1hdGNoID0+ICJzdWNjZWVkZWQiLAogICAgIG1pc21hdGNo
ID0+ICJoYWQgaW5jb3JyZWN0IGxheW91dCIsCkBAIC0xMDI2LDExICs2OTMsNDU3IEBAIGNsb3Nl
Q3lncGF0aHMoKSBpZiBpc0N5Z3dpbigpOwogCiBleGl0IDE7CiAKK3N1YiBhZGRXb3JrSXRlbVJl
c3VsdCgkKQoreworICAgIG15ICgkb3V0cHV0KSA9IEBfOworCisgICAgaWYgKCRtYWluVGhyZWFk
KSB7CisgICAgICAgIHByaW50ICRvdXRwdXQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
V29ya0NyZXc6OmFkZFdvcmtJdGVtUmVzdWx0KCRvdXRwdXQpOworfQorCitzdWIgY2xlYW51cFRl
c3RzKCkKK3sKKyAgICBjaGVja0xlYWtzKCJBZnRlckFsbFRlc3RzIiAuIFdvcmtDcmV3Ojp3b3Jr
ZXJOdW1iZXIoKSk7CisgICAgY2xvc2VEdW1wVG9vbCgpOworCisgICAgISRpc0R1bXBUb29sT3Bl
biB8fCBkaWUgIkZhaWxlZCB0byBjbG9zZSAkZHVtcFRvb2xOYW1lLlxuIjsKKworICAgICMgRklY
TUU6IERvIHdlIHJlYWxseSB3YW50IHRvIGNoZWNrIHRoZSBpbWFnZS1jb21wYXJpc29uIHRvb2wg
Zm9yIGxlYWtzIGV2ZXJ5IHRpbWU/CisgICAgaWYgKCRpc0RpZmZUb29sT3BlbiAmJiAkc2hvdWxk
Q2hlY2tMZWFrcykgeworICAgICAgICAkdG90YWxMZWFrcyArPSBjb3VudEFuZFByaW50TGVha3Mo
IkltYWdlRGlmZiIsICRpbWFnZURpZmZUb29sUElELCAiJHRlc3RSZXN1bHRzRGlyZWN0b3J5L0lt
YWdlRGlmZi1sZWFrcyIuIFdvcmtDcmV3Ojp3b3JrZXJOdW1iZXIoKSAuICIudHh0Iik7CisgICAg
fQorfQorCitzdWIgcnVuVGVzdHMoJCkKK3sKKyAgICBteSAoJGN1cnJlbnRUZXN0cykgPSBAXzsK
KyAgICAkbWFpblRocmVhZCA9IDA7CisKKyAgICBzdWIgY2F0Y2hfcGlwZSB7ICRkdW1wVG9vbENy
YXNoZWQgPSAxOyB9CisgICAgJFNJR3siUElQRSJ9ID0gImNhdGNoX3BpcGUiOworCisgICAgJGF0
TGluZVN0YXJ0ID0gMTsKKyAgICAkbGFzdERpcmVjdG9yeSA9ICIiOworCisgICAgZm9yIG15ICR0
ZXN0IChAeyRjdXJyZW50VGVzdHN9KSB7CisgICAgICAgIG5leHQgaWYgJHRlc3QgZXEgJ3Jlc3Vs
dHMuaHRtbCc7CisKKyAgICAgICAgbXkgJG5ld0R1bXBUb29sID0gbm90ICRpc0R1bXBUb29sT3Bl
bjsKKyAgICAgICAgb3BlbkR1bXBUb29sKCk7CisKKyAgICAgICAgbXkgJGJhc2UgPSBzdHJpcEV4
dGVuc2lvbigkdGVzdCk7CisgICAgICAgIG15ICRleHBlY3RlZEV4dGVuc2lvbiA9ICIudHh0IjsK
KworICAgICAgICBteSAkZGlyID0gJGJhc2U7CisgICAgICAgICRkaXIgPX4gc3wvW14vXSskfHw7
CisKKyAgICAgICAgaWYgKCRuZXdEdW1wVG9vbCB8fCAkZGlyIG5lICRsYXN0RGlyZWN0b3J5KSB7
CisgICAgICAgICAgICBmb3JlYWNoIG15ICRsb2d1ZSAoZXBpbG9ndWVzQW5kUHJvbG9ndWVzKCRu
ZXdEdW1wVG9vbCA/ICIiIDogJGxhc3REaXJlY3RvcnksICRkaXIpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzQ3lnd2luKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgJGxvZ3VlID0gdG9XaW5k
b3dzUGF0aCgkbG9ndWUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICRsb2d1ZSA9IGNhbm9ucGF0aCgkbG9ndWUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoJHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkV29y
a0l0ZW1SZXN1bHQoInJ1bm5pbmcgZXBpbG9ndWUgb3IgcHJvbG9ndWUgJGxvZ3VlXG4iKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnQgJERVTVBUT09MT1VUICIkbG9n
dWVcbiI7CisgICAgICAgICAgICAgICAgIyBUaHJvdyBhd2F5IG91dHB1dCBmcm9tIER1bXBSZW5k
ZXJUcmVlLgorICAgICAgICAgICAgICAgICMgT25jZSBmb3IgdGhlIHRlc3Qgb3V0cHV0IGFuZCBv
bmNlIGZvciBwaXhlbCByZXN1bHRzIChlbXB0eSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoPCRE
VU1QVE9PTElOPikgeworICAgICAgICAgICAgICAgICAgICBsYXN0IGlmIC8jRU9GLzsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2hpbGUgKDwkRFVNUFRPT0xJTj4pIHsKKyAg
ICAgICAgICAgICAgICAgICAgbGFzdCBpZiAvI0VPRi87CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCR2ZXJib3NlKSB7CisgICAgICAg
ICAgICBhZGRXb3JrSXRlbVJlc3VsdCgicnVubmluZyAkdGVzdCAtPiAiKTsKKyAgICAgICAgICAg
ICRhdExpbmVTdGFydCA9IDA7CisgICAgICAgIH0gZWxzaWYgKCEkcXVpZXQpIHsKKyAgICAgICAg
ICAgIGlmICgkZGlyIG5lICRsYXN0RGlyZWN0b3J5KSB7CisgICAgICAgICAgICAgICAgYWRkV29y
a0l0ZW1SZXN1bHQoIlxuIikgdW5sZXNzICRhdExpbmVTdGFydDsKKyAgICAgICAgICAgICAgICBh
ZGRXb3JrSXRlbVJlc3VsdCgiJGRpciAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFk
ZFdvcmtJdGVtUmVzdWx0KCIuIik7CisgICAgICAgICAgICAkYXRMaW5lU3RhcnQgPSAwOworICAg
ICAgICB9CisKKyAgICAgICAgJGxhc3REaXJlY3RvcnkgPSAkZGlyOworCisgICAgICAgIG15ICRy
ZXN1bHQ7CisKKyAgICAgICAgbXkgJHN0YXJ0VGltZSA9IHRpbWUgaWYgJHJlcG9ydDEwU2xvd2Vz
dDsKKworICAgICAgICAjIFRyeSB0byByZWFkIGV4cGVjdGVkIGhhc2ggZmlsZSBmb3IgcGl4ZWwg
dGVzdHMKKyAgICAgICAgbXkgJHN1ZmZpeEV4cGVjdGVkSGFzaCA9ICIiOworICAgICAgICBpZiAo
JHBpeGVsVGVzdHMgJiYgISRyZXNldFJlc3VsdHMpIHsKKyAgICAgICAgICAgIG15ICRleHBlY3Rl
ZFBpeGVsRGlyID0gZXhwZWN0ZWREaXJlY3RvcnlGb3JUZXN0KCRiYXNlLCAwLCAicG5nIik7Cisg
ICAgICAgICAgICBpZiAob3BlbiBFWFBFQ1RFREhBU0gsICIkZXhwZWN0ZWRQaXhlbERpci8kYmFz
ZS0kZXhwZWN0ZWRUYWcuY2hlY2tzdW0iKSB7CisgICAgICAgICAgICAgICAgbXkgJGV4cGVjdGVk
SGFzaCA9IDxFWFBFQ1RFREhBU0g+OworICAgICAgICAgICAgICAgIGNob21wKCRleHBlY3RlZEhh
c2gpOworICAgICAgICAgICAgICAgIGNsb3NlIEVYUEVDVEVESEFTSDsKKworICAgICAgICAgICAg
ICAgICMgRm9ybWF0IGV4cGVjdGVkIGhhc2ggaW50byBhIHN1ZmZpeCBzdHJpbmcgdGhhdCBpcyBh
cHBlbmRlZCB0byB0aGUgcGF0aCAvIFVSTCBwYXNzZWQgdG8gRFJUCisgICAgICAgICAgICAgICAg
JHN1ZmZpeEV4cGVjdGVkSGFzaCA9ICInJGV4cGVjdGVkSGFzaCI7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoJHRlc3QgIX4gL15odHRwXC8vKSB7CisgICAgICAgICAg
ICBteSAkdGVzdFBhdGggPSAiJHRlc3REaXJlY3RvcnkvJHRlc3QiOworICAgICAgICAgICAgaWYg
KGlzQ3lnd2luKCkpIHsKKyAgICAgICAgICAgICAgICAkdGVzdFBhdGggPSB0b1dpbmRvd3NQYXRo
KCR0ZXN0UGF0aCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICR0ZXN0
UGF0aCA9IGNhbm9ucGF0aCgkdGVzdFBhdGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cHJpbnQgJERVTVBUT09MT1VUICIkdGVzdFBhdGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4iOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3BlbkhUVFBESWZOZWVkZWQoKTsKKyAgICAgICAg
ICAgIGlmICgkdGVzdCAhfiAvXmh0dHBcL3Rlc3RzXC9sb2NhbFwvLyAmJiAkdGVzdCAhfiAvXmh0
dHBcL3Rlc3RzXC9zc2xcLy8gJiYgJHRlc3QgIX4gL15odHRwXC90ZXN0c1wvd21sXC8vICYmICR0
ZXN0ICF+IC9eaHR0cFwvdGVzdHNcL21lZGlhXC8vKSB7CisgICAgICAgICAgICAgICAgbXkgJHBh
dGggPSBjYW5vbnBhdGgoJHRlc3QpOworICAgICAgICAgICAgICAgICRwYXRoID1+IHMvXmh0dHBc
L3Rlc3RzXC8vLzsKKyAgICAgICAgICAgICAgICBwcmludCAkRFVNUFRPT0xPVVQgImh0dHA6Ly8x
MjcuMC4wLjE6JGh0dHBkUG9ydC8kcGF0aCRzdWZmaXhFeHBlY3RlZEhhc2hcbiI7CisgICAgICAg
ICAgICB9IGVsc2lmICgkdGVzdCA9fiAvXmh0dHBcL3Rlc3RzXC9zc2xcLy8pIHsKKyAgICAgICAg
ICAgICAgICBteSAkcGF0aCA9IGNhbm9ucGF0aCgkdGVzdCk7CisgICAgICAgICAgICAgICAgJHBh
dGggPX4gcy9eaHR0cFwvdGVzdHNcLy8vOworICAgICAgICAgICAgICAgIHByaW50ICREVU1QVE9P
TE9VVCAiaHR0cHM6Ly8xMjcuMC4wLjE6JGh0dHBkU1NMUG9ydC8kcGF0aCRzdWZmaXhFeHBlY3Rl
ZEhhc2hcbiI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG15ICR0ZXN0
UGF0aCA9ICIkdGVzdERpcmVjdG9yeS8kdGVzdCI7CisgICAgICAgICAgICAgICAgaWYgKGlzQ3ln
d2luKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgJHRlc3RQYXRoID0gdG9XaW5kb3dzUGF0aCgk
dGVzdFBhdGgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICR0ZXN0UGF0aCA9IGNhbm9ucGF0aCgkdGVzdFBhdGgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBwcmludCAkRFVNUFRPT0xPVVQgIiR0ZXN0UGF0aCRzdWZmaXhFeHBlY3Rl
ZEhhc2hcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAjIER1bXBSZW5k
ZXJUcmVlIGlzIGV4cGVjdGVkIHRvIGR1bXAgdHdvICJibG9ja3MiIHRvIHN0ZG91dCBmb3IgZWFj
aCB0ZXN0LgorICAgICAgICAjIEVhY2ggYmxvY2sgaXMgdGVybWluYXRlZCBieSBhICNFT0Ygb24g
YSBsaW5lIGJ5IGl0c2VsZi4KKyAgICAgICAgIyBUaGUgZmlyc3QgYmxvY2sgaXMgdGhlIG91dHB1
dCBvZiB0aGUgdGVzdCAoaW4gdGV4dCwgUmVuZGVyVHJlZSBvciBvdGhlciBmb3JtYXRzKS4KKyAg
ICAgICAgIyBUaGUgc2Vjb25kIGJsb2NrIGlzIGZvciBvcHRpb25hbCBwaXhlbCBkYXRhIGluIFBO
RyBmb3JtYXQsIGFuZCBtYXkgYmUgZW1wdHkgaWYKKyAgICAgICAgIyBwaXhlbCB0ZXN0cyBhcmUg
bm90IGJlaW5nIHJ1biwgb3IgdGhlIHRlc3QgZG9lcyBub3QgZHVtcCBwaXhlbHMgKGUuZy4gdGV4
dCB0ZXN0cykuCisKKyAgICAgICAgbXkgJGFjdHVhbFJlYWQgPSByZWFkRnJvbUR1bXBUb29sV2l0
aFRpbWVyKCREVU1QVE9PTElOKTsKKyAgICAgICAgbXkgJGVycm9yUmVhZCA9IHJlYWRGcm9tRHVt
cFRvb2xXaXRoVGltZXIoJERVTVBUT09MRVJST1IsICRhY3R1YWxSZWFkLT57c3RhdHVzfSBlcSAi
dGltZWRPdXQiKTsKKworICAgICAgICBteSAkYWN0dWFsID0gJGFjdHVhbFJlYWQtPntvdXRwdXR9
OworICAgICAgICBteSAkZXJyb3IgPSAkZXJyb3JSZWFkLT57b3V0cHV0fTsKKworICAgICAgICAk
ZXhwZWN0ZWRFeHRlbnNpb24gPSAkYWN0dWFsUmVhZC0+e2V4dGVuc2lvbn07CisgICAgICAgIG15
ICRleHBlY3RlZEZpbGVOYW1lID0gIiRiYXNlLSRleHBlY3RlZFRhZy4kZXhwZWN0ZWRFeHRlbnNp
b24iOworCisgICAgICAgIG15ICRpc1RleHQgPSBpc1RleHRPbmx5VGVzdCgkYWN0dWFsKTsKKwor
ICAgICAgICBteSAkZXhwZWN0ZWREaXIgPSBleHBlY3RlZERpcmVjdG9yeUZvclRlc3QoJGJhc2Us
ICRpc1RleHQsICRleHBlY3RlZEV4dGVuc2lvbik7CisgICAgICAgICRleHBlY3RlZFJlc3VsdFBh
dGhzeyRiYXNlfSA9ICIkZXhwZWN0ZWREaXIvJGV4cGVjdGVkRmlsZU5hbWUiOworCisgICAgICAg
IHVubGVzcyAoJGFjdHVhbFJlYWQtPntzdGF0dXN9IGVxICJzdWNjZXNzIiAmJiAkZXJyb3JSZWFk
LT57c3RhdHVzfSBlcSAic3VjY2VzcyIpIHsKKyAgICAgICAgICAgIG15ICRjcmFzaGVkID0gJGFj
dHVhbFJlYWQtPntzdGF0dXN9IGVxICJjcmFzaGVkIiB8fCAkZXJyb3JSZWFkLT57c3RhdHVzfSBl
cSAiY3Jhc2hlZCI7CisgICAgICAgICAgICB0ZXN0Q3Jhc2hlZE9yVGltZWRPdXQoJHRlc3QsICRi
YXNlLCAkY3Jhc2hlZCwgJGFjdHVhbCwgJGVycm9yKTsKKyAgICAgICAgICAgIGNvdW50RmluaXNo
ZWRUZXN0KCR0ZXN0LCAkYmFzZSwgJGNyYXNoZWQgPyAiY3Jhc2giIDogInRpbWVkb3V0IiwgMCk7
CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgJGR1cmF0aW9uc3skdGVz
dH0gPSB0aW1lIC0gJHN0YXJ0VGltZSBpZiAkcmVwb3J0MTBTbG93ZXN0OworCisgICAgICAgIG15
ICRleHBlY3RlZDsKKworICAgICAgICBpZiAoISRyZXNldFJlc3VsdHMgJiYgb3BlbiBFWFBFQ1RF
RCwgIjwiLCAiJGV4cGVjdGVkRGlyLyRleHBlY3RlZEZpbGVOYW1lIikgeworICAgICAgICAgICAg
JGV4cGVjdGVkID0gIiI7CisgICAgICAgICAgICB3aGlsZSAoPEVYUEVDVEVEPikgeworICAgICAg
ICAgICAgICAgIG5leHQgaWYgJHN0cmlwRWRpdGluZ0NhbGxiYWNrcyAmJiAkXyA9fiAvXkVESVRJ
TkcgREVMRUdBVEU6LzsKKyAgICAgICAgICAgICAgICAkZXhwZWN0ZWQgLj0gJF87CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjbG9zZSBFWFBFQ1RFRDsKKyAgICAgICAgfQorICAgICAgICBt
eSAkZXhwZWN0ZWRNYWM7CisgICAgICAgIGlmICghaXNBcHBsZU1hY1dlYktpdCgpICYmICRzdHJp
Y3RUZXN0aW5nICYmICEkaXNUZXh0KSB7CisgICAgICAgICAgICBpZiAoISRyZXNldFJlc3VsdHMg
JiYgb3BlbiBFWFBFQ1RFRCwgIjwiLCAiJHRlc3REaXJlY3RvcnkvcGxhdGZvcm0vbWFjLyRleHBl
Y3RlZEZpbGVOYW1lIikgeworICAgICAgICAgICAgICAgICRleHBlY3RlZE1hYyA9ICIiOworICAg
ICAgICAgICAgICAgIHdoaWxlICg8RVhQRUNURUQ+KSB7CisgICAgICAgICAgICAgICAgICAgICRl
eHBlY3RlZE1hYyAuPSAkXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2xv
c2UgRVhQRUNURUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoJHNo
b3VsZENoZWNrTGVha3MgJiYgJHRlc3RzUGVyRHVtcFRvb2wgPT0gMSkgeworICAgICAgICAgICAg
YWRkV29ya0l0ZW1SZXN1bHQoIiAgICAgICAgJHRlc3QgLT4gIik7CisgICAgICAgIH0KKworICAg
ICAgICBteSAkYWN0dWFsUE5HID0gIiI7CisgICAgICAgIG15ICRkaWZmUE5HID0gIiI7CisgICAg
ICAgIG15ICRkaWZmUGVyY2VudGFnZSA9ICIiOworICAgICAgICBteSAkZGlmZlJlc3VsdCA9ICJw
YXNzZWQiOworCisgICAgICAgIG15ICRhY3R1YWxIYXNoID0gIiI7CisgICAgICAgIG15ICRleHBl
Y3RlZEhhc2ggPSAiIjsKKyAgICAgICAgbXkgJGFjdHVhbFBOR1NpemUgPSAwOworCisgICAgICAg
IHdoaWxlICg8JERVTVBUT09MSU4+KSB7CisgICAgICAgICAgICBsYXN0IGlmIC8jRU9GLzsKKyAg
ICAgICAgICAgIGlmICgvQWN0dWFsSGFzaDogKFthLWYwLTldezMyfSkvKSB7CisgICAgICAgICAg
ICAgICAgJGFjdHVhbEhhc2ggPSAkMTsKKyAgICAgICAgICAgIH0gZWxzaWYgKC9FeHBlY3RlZEhh
c2g6IChbYS1mMC05XXszMn0pLykgeworICAgICAgICAgICAgICAgICRleHBlY3RlZEhhc2ggPSAk
MTsKKyAgICAgICAgICAgIH0gZWxzaWYgKC9Db250ZW50LUxlbmd0aDogKFxkKylccyovKSB7Cisg
ICAgICAgICAgICAgICAgJGFjdHVhbFBOR1NpemUgPSAkMTsKKyAgICAgICAgICAgICAgICByZWFk
KCREVU1QVE9PTElOLCAkYWN0dWFsUE5HLCAkYWN0dWFsUE5HU2l6ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoJHZlcmJvc2UgJiYgJHBpeGVsVGVzdHMgJiYgISRy
ZXNldFJlc3VsdHMgJiYgJGFjdHVhbFBOR1NpemUpIHsKKyAgICAgICAgICAgIGlmICgkYWN0dWFs
SGFzaCBlcSAiIiAmJiAkZXhwZWN0ZWRIYXNoIGVxICIiKSB7CisgICAgICAgICAgICAgICAgcHJp
bnRGYWlsdXJlTWVzc2FnZUZvclRlc3QoJHRlc3QsICJXQVJOSU5HOiBhY3R1YWwgJiBleHBlY3Rl
ZCBwaXhlbCBoYXNoZXMgYXJlIG1pc3NpbmchIik7CisgICAgICAgICAgICB9IGVsc2lmICgkYWN0
dWFsSGFzaCBlcSAiIikgeworICAgICAgICAgICAgICAgIHByaW50RmFpbHVyZU1lc3NhZ2VGb3JU
ZXN0KCR0ZXN0LCAiV0FSTklORzogYWN0dWFsIHBpeGVsIGhhc2ggaXMgbWlzc2luZyEiKTsKKyAg
ICAgICAgICAgIH0gZWxzaWYgKCRleHBlY3RlZEhhc2ggZXEgIiIpIHsKKyAgICAgICAgICAgICAg
ICBwcmludEZhaWx1cmVNZXNzYWdlRm9yVGVzdCgkdGVzdCwgIldBUk5JTkc6IGV4cGVjdGVkIHBp
eGVsIGhhc2ggaXMgbWlzc2luZyEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmICgkYWN0dWFsUE5HU2l6ZSA+IDApIHsKKyAgICAgICAgICAgIG15ICRleHBlY3RlZFBp
eGVsRGlyID0gZXhwZWN0ZWREaXJlY3RvcnlGb3JUZXN0KCRiYXNlLCAwLCAicG5nIik7CisKKyAg
ICAgICAgICAgIGlmICghJHJlc2V0UmVzdWx0cyAmJiAoJGV4cGVjdGVkSGFzaCBuZSAkYWN0dWFs
SGFzaCB8fCAoJGFjdHVhbEhhc2ggZXEgIiIgJiYgJGV4cGVjdGVkSGFzaCBlcSAiIikpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKC1mICIkZXhwZWN0ZWRQaXhlbERpci8kYmFzZS0kZXhwZWN0ZWRU
YWcucG5nIikgeworICAgICAgICAgICAgICAgICAgICBteSAkZXhwZWN0ZWRQTkdTaXplID0gLXMg
IiRleHBlY3RlZFBpeGVsRGlyLyRiYXNlLSRleHBlY3RlZFRhZy5wbmciOworICAgICAgICAgICAg
ICAgICAgICBteSAkZXhwZWN0ZWRQTkcgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgb3BlbiBF
WFBFQ1RFRFBORywgIiRleHBlY3RlZFBpeGVsRGlyLyRiYXNlLSRleHBlY3RlZFRhZy5wbmciOwor
ICAgICAgICAgICAgICAgICAgICByZWFkKEVYUEVDVEVEUE5HLCAkZXhwZWN0ZWRQTkcsICRleHBl
Y3RlZFBOR1NpemUpOworCisgICAgICAgICAgICAgICAgICAgIG9wZW5EaWZmVG9vbCgpOworICAg
ICAgICAgICAgICAgICAgICBwcmludCBESUZGT1VUICJDb250ZW50LUxlbmd0aDogJGFjdHVhbFBO
R1NpemVcbiI7CisgICAgICAgICAgICAgICAgICAgIHByaW50IERJRkZPVVQgJGFjdHVhbFBORzsK
KworICAgICAgICAgICAgICAgICAgICBwcmludCBESUZGT1VUICJDb250ZW50LUxlbmd0aDogJGV4
cGVjdGVkUE5HU2l6ZVxuIjsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgRElGRk9VVCAkZXhw
ZWN0ZWRQTkc7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDxESUZGSU4+KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0IGlmIC9eZXJyb3IvIHx8IC9eZGlmZjovOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKC9Db250ZW50LUxlbmd0aDogKFxkKylccyovKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVhZChESUZGSU4sICRkaWZmUE5HLCAkMSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAoL15kaWZmOiAoLispJSAocGFzc2VkfGZhaWxlZCkvKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAkZGlmZlBlcmNlbnRhZ2UgPSAkMTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICRpbWFnZURpZmZlcmVuY2VzeyRiYXNlfSA9ICRkaWZmUGVyY2VudGFnZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICRkaWZmUmVzdWx0ID0gJDI7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRkaWZmUGVyY2Vu
dGFnZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludEZhaWx1cmVNZXNzYWdl
Rm9yVGVzdCgkdGVzdCwgInBpeGVsIGhhc2ggZmFpbGVkIChidXQgcGl4ZWwgdGVzdCBzdGlsbCBw
YXNzZXMpIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2lm
ICgkdmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBwcmludEZhaWx1cmVNZXNzYWdlRm9y
VGVzdCgkdGVzdCwgIldBUk5JTkc6IGV4cGVjdGVkIGltYWdlIGlzIG1pc3NpbmchIik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJHJlc2V0UmVz
dWx0cyB8fCAhLWYgIiRleHBlY3RlZFBpeGVsRGlyLyRiYXNlLSRleHBlY3RlZFRhZy5wbmciKSB7
CisgICAgICAgICAgICAgICAgbWtwYXRoIGNhdGZpbGUoJGV4cGVjdGVkUGl4ZWxEaXIsIGRpcm5h
bWUoJGJhc2UpKSBpZiAkdGVzdERpcmVjdG9yeSBuZSAkZXhwZWN0ZWRQaXhlbERpcjsKKyAgICAg
ICAgICAgICAgICB3cml0ZVRvRmlsZSgiJGV4cGVjdGVkUGl4ZWxEaXIvJGJhc2UtJGV4cGVjdGVk
VGFnLnBuZyIsICRhY3R1YWxQTkcpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
JGFjdHVhbEhhc2ggbmUgIiIgJiYgKCRyZXNldFJlc3VsdHMgfHwgIS1mICIkZXhwZWN0ZWRQaXhl
bERpci8kYmFzZS0kZXhwZWN0ZWRUYWcuY2hlY2tzdW0iKSkgeworICAgICAgICAgICAgICAgIHdy
aXRlVG9GaWxlKCIkZXhwZWN0ZWRQaXhlbERpci8kYmFzZS0kZXhwZWN0ZWRUYWcuY2hlY2tzdW0i
LCAkYWN0dWFsSGFzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IWlzQXBwbGVNYWNXZWJLaXQoKSAmJiAkc3RyaWN0VGVzdGluZyAmJiAhJGlzVGV4dCkgeworICAg
ICAgICAgICAgaWYgKGRlZmluZWQgJGV4cGVjdGVkTWFjKSB7CisgICAgICAgICAgICAgICAgbXkg
JHNpbXBsaWZpZWRfYWN0dWFsOworICAgICAgICAgICAgICAgICRzaW1wbGlmaWVkX2FjdHVhbCA9
ICRhY3R1YWw7CisgICAgICAgICAgICAgICAgJHNpbXBsaWZpZWRfYWN0dWFsID1+IHMvYXQgXCgt
P1swLTldKywtP1swLTldK1wpICovL2c7CisgICAgICAgICAgICAgICAgJHNpbXBsaWZpZWRfYWN0
dWFsID1+IHMvc2l6ZSAtP1swLTldK3gtP1swLTldKyAqLy9nOworICAgICAgICAgICAgICAgICRz
aW1wbGlmaWVkX2FjdHVhbCA9fiBzL3RleHQgcnVuIHdpZHRoIC0/WzAtOV0rOiAvL2c7CisgICAg
ICAgICAgICAgICAgJHNpbXBsaWZpZWRfYWN0dWFsID1+IHMvdGV4dCBydW4gd2lkdGggLT9bMC05
XSsgW2EtekEtWiBdKzogLy9nOworICAgICAgICAgICAgICAgICRzaW1wbGlmaWVkX2FjdHVhbCA9
fiBzL1JlbmRlckJ1dHRvbiB7QlVUVE9OfSAuKi9SZW5kZXJCdXR0b24ge0JVVFRPTn0vZzsKKyAg
ICAgICAgICAgICAgICAkc2ltcGxpZmllZF9hY3R1YWwgPX4gcy9SZW5kZXJJbWFnZSB7SU5QVVR9
IC4qL1JlbmRlckltYWdlIHtJTlBVVH0vZzsKKyAgICAgICAgICAgICAgICAkc2ltcGxpZmllZF9h
Y3R1YWwgPX4gcy9SZW5kZXJCbG9jayB7SU5QVVR9IC4qL1JlbmRlckJsb2NrIHtJTlBVVH0vZzsK
KyAgICAgICAgICAgICAgICAkc2ltcGxpZmllZF9hY3R1YWwgPX4gcy9SZW5kZXJUZXh0Q29udHJv
bCB7SU5QVVR9IC4qL1JlbmRlclRleHRDb250cm9sIHtJTlBVVH0vZzsKKyAgICAgICAgICAgICAg
ICAkc2ltcGxpZmllZF9hY3R1YWwgPX4gcy9cKFswLTldK3B4L3B4L2c7CisgICAgICAgICAgICAg
ICAgJHNpbXBsaWZpZWRfYWN0dWFsID1+IHMvICoiICpcbiArIiAqLyAvZzsKKyAgICAgICAgICAg
ICAgICAkc2ltcGxpZmllZF9hY3R1YWwgPX4gcy8iICskLyIvZzsKKworICAgICAgICAgICAgICAg
ICRzaW1wbGlmaWVkX2FjdHVhbCA9fiBzLy0gLy0vZzsKKyAgICAgICAgICAgICAgICAkc2ltcGxp
ZmllZF9hY3R1YWwgPX4gcy9cbiggKikiXHMrL1xuJDEiL2c7CisgICAgICAgICAgICAgICAgJHNp
bXBsaWZpZWRfYWN0dWFsID1+IHMvXHMrIlxuLyJcbi9nOworCisgICAgICAgICAgICAgICAgJGV4
cGVjdGVkTWFjID1+IHMvYXQgXCgtP1swLTldKywtP1swLTldK1wpICovL2c7CisgICAgICAgICAg
ICAgICAgJGV4cGVjdGVkTWFjID1+IHMvc2l6ZSAtP1swLTldK3gtP1swLTldKyAqLy9nOworICAg
ICAgICAgICAgICAgICRleHBlY3RlZE1hYyA9fiBzL3RleHQgcnVuIHdpZHRoIC0/WzAtOV0rOiAv
L2c7CisgICAgICAgICAgICAgICAgJGV4cGVjdGVkTWFjID1+IHMvdGV4dCBydW4gd2lkdGggLT9b
MC05XSsgW2EtekEtWiBdKzogLy9nOworICAgICAgICAgICAgICAgICRleHBlY3RlZE1hYyA9fiBz
L1JlbmRlckJ1dHRvbiB7QlVUVE9OfSAuKi9SZW5kZXJCdXR0b24ge0JVVFRPTn0vZzsKKyAgICAg
ICAgICAgICAgICAkZXhwZWN0ZWRNYWMgPX4gcy9SZW5kZXJJbWFnZSB7SU5QVVR9IC4qL1JlbmRl
ckltYWdlIHtJTlBVVH0vZzsKKyAgICAgICAgICAgICAgICAkZXhwZWN0ZWRNYWMgPX4gcy9SZW5k
ZXJCbG9jayB7SU5QVVR9IC4qL1JlbmRlckJsb2NrIHtJTlBVVH0vZzsKKyAgICAgICAgICAgICAg
ICAkZXhwZWN0ZWRNYWMgPX4gcy9SZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IC4qL1JlbmRlclRl
eHRDb250cm9sIHtJTlBVVH0vZzsKKyAgICAgICAgICAgICAgICAkZXhwZWN0ZWRNYWMgPX4gcy9c
KFswLTldK3B4L3B4L2c7CisgICAgICAgICAgICAgICAgJGV4cGVjdGVkTWFjID1+IHMvICoiICpc
biArIiAqLyAvZzsKKyAgICAgICAgICAgICAgICAkZXhwZWN0ZWRNYWMgPX4gcy8iICskLyIvZzsK
KworICAgICAgICAgICAgICAgICRleHBlY3RlZE1hYyA9fiBzLy0gLy0vZzsKKyAgICAgICAgICAg
ICAgICAkZXhwZWN0ZWRNYWMgPX4gcy9cbiggKikiXHMrL1xuJDEiL2c7CisgICAgICAgICAgICAg
ICAgJGV4cGVjdGVkTWFjID1+IHMvXHMrIlxuLyJcbi9nOworCisgICAgICAgICAgICAgICAgaWYg
KCRzaW1wbGlmaWVkX2FjdHVhbCBuZSAkZXhwZWN0ZWRNYWMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgd3JpdGVUb0ZpbGUoIi90bXAvYWN0dWFsLnR4dCIsICRzaW1wbGlmaWVkX2FjdHVhbCk7Cisg
ICAgICAgICAgICAgICAgICAgIHdyaXRlVG9GaWxlKCIvdG1wL2V4cGVjdGVkLnR4dCIsICRleHBl
Y3RlZE1hYyk7CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSAiZGlmZiAtdSBcIi90bXAvZXhw
ZWN0ZWQudHh0XCIgXCIvdG1wL2FjdHVhbC50eHRcIiA+IFwiL3RtcC9zaW1wbGlmaWVkLmRpZmZc
IiI7CisKKyAgICAgICAgICAgICAgICAgICAgJGRpZmZSZXN1bHQgPSAiZmFpbGVkIjsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCR2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRXb3JrSXRlbVJlc3VsdCgiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFdvcmtJ
dGVtUmVzdWx0KGBjYXQgL3RtcC9zaW1wbGlmaWVkLmRpZmZgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZFdvcmtJdGVtUmVzdWx0KCJmYWlsZWQhISEhISIpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGR1bXBUb29sRGlkQ3Jhc2goKSkgeworICAgICAgICAgICAgJHJlc3VsdCA9ICJj
cmFzaCI7CisgICAgICAgICAgICB0ZXN0Q3Jhc2hlZE9yVGltZWRPdXQoJHRlc3QsICRiYXNlLCAx
LCAkYWN0dWFsLCAkZXJyb3IpOworICAgICAgICB9IGVsc2lmICghZGVmaW5lZCAkZXhwZWN0ZWQp
IHsKKyAgICAgICAgICAgIGlmICgkdmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGFkZFdvcmtJ
dGVtUmVzdWx0KCJuZXcgIiAuICgkcmVzZXRSZXN1bHRzID8gInJlc3VsdCIgOiAidGVzdCIpIC4i
XG4iKTsKKyAgICAgICAgICAgICAgICAkYXRMaW5lU3RhcnQgPSAxOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgJHJlc3VsdCA9ICJuZXciOworCisgICAgICAgICAgICBpZiAoJGdlbmVyYXRl
TmV3UmVzdWx0cyB8fCAkcmVzZXRSZXN1bHRzKSB7CisgICAgICAgICAgICAgICAgbWtwYXRoIGNh
dGZpbGUoJGV4cGVjdGVkRGlyLCBkaXJuYW1lKCRiYXNlKSkgaWYgJHRlc3REaXJlY3RvcnkgbmUg
JGV4cGVjdGVkRGlyOworICAgICAgICAgICAgICAgIHdyaXRlVG9GaWxlKCIkZXhwZWN0ZWREaXIv
JGV4cGVjdGVkRmlsZU5hbWUiLCAkYWN0dWFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGRlbGV0ZUV4cGVjdGVkQW5kQWN0dWFsUmVzdWx0cygkYmFzZSk7CisgICAgICAgICAgICBpZiAo
JGdlbmVyYXRlTmV3UmVzdWx0cyAmJiAhJHJlc2V0UmVzdWx0cykgeworICAgICAgICAgICAgICAg
ICMgQWx3YXlzIHByaW50IHRoZSBmaWxlIG5hbWUgZm9yIG5ldyB0ZXN0cywgYXMgdGhleSB3aWxs
IHByb2JhYmx5IG5lZWQgc29tZSBtYW51YWwgaW5zcGVjdGlvbi4KKyAgICAgICAgICAgICAgICAj
IGluIHZlcmJvc2UgbW9kZSB3ZSBhbHJlYWR5IHByaW50ZWQgdGhlIHRlc3QgY2FzZSwgc28gbm8g
bmVlZCB0byBkbyBpdCBhZ2Fpbi4KKyAgICAgICAgICAgICAgICB1bmxlc3MgKCR2ZXJib3NlKSB7
CisgICAgICAgICAgICAgICAgICAgIGFkZFdvcmtJdGVtUmVzdWx0KCJcbiIpIHVubGVzcyAkYXRM
aW5lU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIGFkZFdvcmtJdGVtUmVzdWx0KCIkdGVzdCAt
PiAiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbXkgJHJlc3VsdHNEaXIg
PSBjYXRkaXIoJGV4cGVjdGVkRGlyLCBkaXJuYW1lKCRiYXNlKSk7CisgICAgICAgICAgICAgICAg
YWRkV29ya0l0ZW1SZXN1bHQoIm5ldyAocmVzdWx0cyBnZW5lcmF0ZWQgaW4gJHJlc3VsdHNEaXIp
XG4iKTsKKyAgICAgICAgICAgICAgICAkYXRMaW5lU3RhcnQgPSAxOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2lmICgkYWN0dWFsIGVxICRleHBlY3RlZCAmJiAkZGlmZlJlc3VsdCBlcSAi
cGFzc2VkIikgeworICAgICAgICAgICAgaWYgKCR2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAg
YWRkV29ya0l0ZW1SZXN1bHQoInN1Y2NlZWRlZFxuIik7CisgICAgICAgICAgICAgICAgJGF0TGlu
ZVN0YXJ0ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICRyZXN1bHQgPSAibWF0Y2gi
OworICAgICAgICAgICAgZGVsZXRlRXhwZWN0ZWRBbmRBY3R1YWxSZXN1bHRzKCRiYXNlKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRyZXN1bHQgPSAibWlzbWF0Y2giOworCisgICAg
ICAgICAgICBteSAkbWVzc2FnZSA9ICRhY3R1YWwgZXEgJGV4cGVjdGVkID8gInBpeGVsIHRlc3Qg
ZmFpbGVkIiA6ICJmYWlsZWQiOworCisgICAgICAgICAgICBpZiAoJGFjdHVhbCBuZSAkZXhwZWN0
ZWQgJiYgJGFkZFBsYXRmb3JtRXhjZXB0aW9ucykgeworICAgICAgICAgICAgICAgIG15ICR0ZXN0
QmFzZSA9IGNhdGZpbGUoJHRlc3REaXJlY3RvcnksICRiYXNlKTsKKyAgICAgICAgICAgICAgICBt
eSAkZXhwZWN0ZWRCYXNlID0gY2F0ZmlsZSgkZXhwZWN0ZWREaXIsICRiYXNlKTsKKyAgICAgICAg
ICAgICAgICBteSAkdGVzdElzTWF4aW1hbGx5UGxhdGZvcm1TcGVjaWZpYyA9ICR0ZXN0QmFzZSA9
fiBtfF5cUSRwbGF0Zm9ybVRlc3REaXJlY3RvcnlcRS98OworICAgICAgICAgICAgICAgIG15ICRl
eHBlY3RlZFJlc3VsdElzTWF4aW1hbGx5UGxhdGZvcm1TcGVjaWZpYyA9ICRleHBlY3RlZEJhc2Ug
PX4gbXxeXFEkcGxhdGZvcm1UZXN0RGlyZWN0b3J5XEUvfDsKKyAgICAgICAgICAgICAgICBpZiAo
ISR0ZXN0SXNNYXhpbWFsbHlQbGF0Zm9ybVNwZWNpZmljICYmICEkZXhwZWN0ZWRSZXN1bHRJc01h
eGltYWxseVBsYXRmb3JtU3BlY2lmaWMpIHsKKyAgICAgICAgICAgICAgICAgICAgbWtwYXRoIGNh
dGZpbGUoJHBsYXRmb3JtVGVzdERpcmVjdG9yeSwgZGlybmFtZSgkYmFzZSkpOworICAgICAgICAg
ICAgICAgICAgICBteSAkZXhwZWN0ZWRGaWxlID0gY2F0ZmlsZSgkcGxhdGZvcm1UZXN0RGlyZWN0
b3J5LCAiJGV4cGVjdGVkRmlsZU5hbWUiKTsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVUb0Zp
bGUoIiRleHBlY3RlZEZpbGUiLCAkYWN0dWFsKTsKKyAgICAgICAgICAgICAgICAgICAgJG1lc3Nh
Z2UgLj0gIiAocmVzdWx0cyBnZW5lcmF0ZWQgaW4gJHBsYXRmb3JtVGVzdERpcmVjdG9yeSkiOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJpbnRGYWls
dXJlTWVzc2FnZUZvclRlc3QoJHRlc3QsICRtZXNzYWdlKTsKKworICAgICAgICAgICAgbXkgJGRp
ciA9ICIkdGVzdFJlc3VsdHNEaXJlY3RvcnkvJGJhc2UiOworICAgICAgICAgICAgJGRpciA9fiBz
fC8oW14vXSspJHx8IG9yIGRpZSAiRmFpbGVkIHRvIGZpbmQgdGVzdCBuYW1lIGZyb20gYmFzZVxu
IjsKKyAgICAgICAgICAgIG15ICR0ZXN0TmFtZSA9ICQxOworICAgICAgICAgICAgbWtwYXRoICRk
aXI7CisKKyAgICAgICAgICAgIGRlbGV0ZUV4cGVjdGVkQW5kQWN0dWFsUmVzdWx0cygkYmFzZSk7
CisgICAgICAgICAgICByZWNvcmRBY3R1YWxSZXN1bHRzQW5kRGlmZigkYmFzZSwgJGFjdHVhbCk7
CisKKyAgICAgICAgICAgIGlmICgkcGl4ZWxUZXN0cyAmJiAkZGlmZlBORyAmJiAkZGlmZlBORyBu
ZSAiIikgeworICAgICAgICAgICAgICAgICRpbWFnZXNQcmVzZW50eyRiYXNlfSA9IDE7CisKKyAg
ICAgICAgICAgICAgICB3cml0ZVRvRmlsZSgiJHRlc3RSZXN1bHRzRGlyZWN0b3J5LyRiYXNlLSRh
Y3R1YWxUYWcucG5nIiwgJGFjdHVhbFBORyk7CisgICAgICAgICAgICAgICAgd3JpdGVUb0ZpbGUo
IiR0ZXN0UmVzdWx0c0RpcmVjdG9yeS8kYmFzZS0kZGlmZnNUYWcucG5nIiwgJGRpZmZQTkcpOwor
CisgICAgICAgICAgICAgICAgbXkgJGV4cGVjdGVkUGl4ZWxEaXIgPSBleHBlY3RlZERpcmVjdG9y
eUZvclRlc3QoJGJhc2UsIDAsICJwbmciKTsKKyAgICAgICAgICAgICAgICBjb3B5KCIkZXhwZWN0
ZWRQaXhlbERpci8kYmFzZS0kZXhwZWN0ZWRUYWcucG5nIiwgIiR0ZXN0UmVzdWx0c0RpcmVjdG9y
eS8kYmFzZS0kZXhwZWN0ZWRUYWcucG5nIik7CisKKyAgICAgICAgICAgICAgICBvcGVuIERJRkZI
VE1MLCAiPiR0ZXN0UmVzdWx0c0RpcmVjdG9yeS8kYmFzZS0kZGlmZnNUYWcuaHRtbCIgb3IgZGll
OworICAgICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICI8aHRtbD5cbiI7CisgICAgICAgICAg
ICAgICAgcHJpbnQgRElGRkhUTUwgIjxoZWFkPlxuIjsKKyAgICAgICAgICAgICAgICBwcmludCBE
SUZGSFRNTCAiPHRpdGxlPiRiYXNlIEltYWdlIENvbXBhcmU8L3RpdGxlPlxuIjsKKyAgICAgICAg
ICAgICAgICBwcmludCBESUZGSFRNTCAiPHNjcmlwdCBsYW5ndWFnZT1cIkphdmFzY3JpcHRcIiB0
eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+XG4iOworICAgICAgICAgICAgICAgIHByaW50IERJRkZI
VE1MICJ2YXIgY3VycmVudEltYWdlID0gMDtcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgRElG
RkhUTUwgInZhciBpbWFnZU5hbWVzID0gbmV3IEFycmF5KFwiQWN0dWFsXCIsIFwiRXhwZWN0ZWRc
Iik7XG4iOworICAgICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICJ2YXIgaW1hZ2VQYXRocyA9
IG5ldyBBcnJheShcIiR0ZXN0TmFtZS0kYWN0dWFsVGFnLnBuZ1wiLCBcIiR0ZXN0TmFtZS0kZXhw
ZWN0ZWRUYWcucG5nXCIpO1xuIjsKKyAgICAgICAgICAgICAgICBpZiAoLWYgIiR0ZXN0RGlyZWN0
b3J5LyRiYXNlLXczYy5wbmciKSB7CisgICAgICAgICAgICAgICAgICAgIGNvcHkoIiR0ZXN0RGly
ZWN0b3J5LyRiYXNlLXczYy5wbmciLCAiJHRlc3RSZXN1bHRzRGlyZWN0b3J5LyRiYXNlLXczYy5w
bmciKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgRElGRkhUTUwgImltYWdlTmFtZXMucHVz
aChcIlczQ1wiKTtcbiI7CisgICAgICAgICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICJpbWFn
ZVBhdGhzLnB1c2goXCIkdGVzdE5hbWUtdzNjLnBuZ1wiKTtcbiI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICJmdW5jdGlvbiBhbmltYXRlSW1hZ2Uo
KSB7XG4iOworICAgICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICIgICAgdmFyIGltYWdlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhbmltYXRlZEltYWdlXCIpO1xuIjsKKyAgICAgICAg
ICAgICAgICBwcmludCBESUZGSFRNTCAiICAgIHZhciBpbWFnZVRleHQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChcImltYWdlVGV4dFwiKTtcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgRElG
RkhUTUwgIiAgICBpbWFnZS5zcmMgPSBpbWFnZVBhdGhzW2N1cnJlbnRJbWFnZV07XG4iOworICAg
ICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICIgICAgaW1hZ2VUZXh0LmlubmVySFRNTCA9IGlt
YWdlTmFtZXNbY3VycmVudEltYWdlXSArIFwiIEltYWdlXCI7XG4iOworICAgICAgICAgICAgICAg
IHByaW50IERJRkZIVE1MICIgICAgY3VycmVudEltYWdlID0gKGN1cnJlbnRJbWFnZSArIDEpICUg
aW1hZ2VOYW1lcy5sZW5ndGg7XG4iOworICAgICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICIg
ICAgc2V0VGltZW91dCgnYW5pbWF0ZUltYWdlKCknLDIwMDApO1xuIjsKKyAgICAgICAgICAgICAg
ICBwcmludCBESUZGSFRNTCAifVxuIjsKKyAgICAgICAgICAgICAgICBwcmludCBESUZGSFRNTCAi
PC9zY3JpcHQ+XG4iOworICAgICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICI8L2hlYWQ+XG4i
OworICAgICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICI8Ym9keSBvbkxvYWQ9XCJhbmltYXRl
SW1hZ2UoKTtcIj5cbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgRElGRkhUTUwgIjx0YWJsZT5c
biI7CisgICAgICAgICAgICAgICAgaWYgKCRkaWZmUGVyY2VudGFnZSkgeworICAgICAgICAgICAg
ICAgICAgICBwcmludCBESUZGSFRNTCAiPHRyPlxuIjsKKyAgICAgICAgICAgICAgICAgICAgcHJp
bnQgRElGRkhUTUwgIjx0ZD5EaWZmZXJlbmNlIGJldHdlZW4gaW1hZ2VzOiA8YSBocmVmPVwiJHRl
c3ROYW1lLSRkaWZmc1RhZy5wbmdcIj4kZGlmZlBlcmNlbnRhZ2UlPC9hPjwvdGQ+XG4iOworICAg
ICAgICAgICAgICAgICAgICBwcmludCBESUZGSFRNTCAiPC90cj5cbiI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICI8dHI+XG4iOworICAgICAgICAg
ICAgICAgIHByaW50IERJRkZIVE1MICI8dGQ+PGEgaHJlZj1cIiIgLiB0b1VSTCgiJHRlc3REaXJl
Y3RvcnkvJHRlc3QiKSAuICJcIj50ZXN0IGZpbGU8L2E+PC90ZD5cbiI7CisgICAgICAgICAgICAg
ICAgcHJpbnQgRElGRkhUTUwgIjwvdHI+XG4iOworICAgICAgICAgICAgICAgIHByaW50IERJRkZI
VE1MICI8dHI+XG4iOworICAgICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICI8dGQgaWQ9XCJp
bWFnZVRleHRcIiBzdHlsZT1cInRleHQtd2VpZ2h0OiBib2xkO1wiPkFjdHVhbCBJbWFnZTwvdGQ+
XG4iOworICAgICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICI8L3RyPlxuIjsKKyAgICAgICAg
ICAgICAgICBwcmludCBESUZGSFRNTCAiPHRyPlxuIjsKKyAgICAgICAgICAgICAgICBwcmludCBE
SUZGSFRNTCAiPHRkPjxpbWcgc3JjPVwiJHRlc3ROYW1lLSRhY3R1YWxUYWcucG5nXCIgaWQ9XCJh
bmltYXRlZEltYWdlXCI+PC90ZD5cbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgRElGRkhUTUwg
IjwvdHI+XG4iOworICAgICAgICAgICAgICAgIHByaW50IERJRkZIVE1MICI8L3RhYmxlPlxuIjsK
KyAgICAgICAgICAgICAgICBwcmludCBESUZGSFRNTCAiPC9ib2R5PlxuIjsKKyAgICAgICAgICAg
ICAgICBwcmludCBESUZGSFRNTCAiPC9odG1sPlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmICgkZXJyb3IpIHsKKyAgICAgICAgICAgIG15ICRkaXIgPSAiJHRlc3RS
ZXN1bHRzRGlyZWN0b3J5LyRiYXNlIjsKKyAgICAgICAgICAgICRkaXIgPX4gc3wvKFteL10rKSR8
fCBvciBkaWUgIkZhaWxlZCB0byBmaW5kIHRlc3QgbmFtZSBmcm9tIGJhc2VcbiI7CisgICAgICAg
ICAgICBta3BhdGggJGRpcjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd3JpdGVUb0ZpbGUo
IiR0ZXN0UmVzdWx0c0RpcmVjdG9yeS8kYmFzZS0kZXJyb3JUYWcudHh0IiwgJGVycm9yKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbG9jayAlY291bnRzOworICAgICAgICAgICAgJGNvdW50
c3tlcnJvcn0rKzsKKyAgICAgICAgICAgIHB1c2ggQHskdGVzdHN7ZXJyb3J9fSwgJHRlc3Q7Cisg
ICAgICAgIH0KKworICAgICAgICBjb3VudEZpbmlzaGVkVGVzdCgkdGVzdCwgJGJhc2UsICRyZXN1
bHQsICRpc1RleHQpOworICAgIH0KKyAgICBhZGRXb3JrSXRlbVJlc3VsdCgiXG4iKSB1bmxlc3Mg
JGF0TGluZVN0YXJ0OworfQorCiBzdWIgY291bnRBbmRQcmludExlYWtzKCQkJCkKIHsKICAgICBt
eSAoJGR1bXBUb29sTmFtZSwgJGR1bXBUb29sUElELCAkbGVha3NGaWxlUGF0aCkgPSBAXzsKIAot
ICAgIHByaW50ICJcbiIgdW5sZXNzICRhdExpbmVTdGFydDsKKyAgICBhZGRXb3JrSXRlbVJlc3Vs
dCgiXG4iKSB1bmxlc3MgJGF0TGluZVN0YXJ0OwogICAgICRhdExpbmVTdGFydCA9IDE7CiAKICAg
ICAjIFdlIGFyZSBleGNsdWRpbmcgdGhlIGZvbGxvd2luZyByZXBvcnRlZCBsZWFrcyBzbyB0aGV5
IGRvbid0IGdldCBpbiBvdXIgd2F5IHdoZW4gbG9va2luZyBmb3IgV2ViS2l0IGxlYWtzOgpAQCAt
MTA4OSw3ICsxMjAyLDcgQEAgc3ViIGNvdW50QW5kUHJpbnRMZWFrcygkJCQpCiAgICAgbXkgJGV4
Y2x1ZGVTdHJpbmcgPSAiLS1leGNsdWRlLWNhbGxzdGFjayAnIiAuIChqb2luICInIC0tZXhjbHVk
ZS1jYWxsc3RhY2sgJyIsIEBjYWxsU3RhY2tzVG9FeGNsdWRlKSAuICInIjsKICAgICAkZXhjbHVk
ZVN0cmluZyAuPSAiIC0tZXhjbHVkZS10eXBlICciIC4gKGpvaW4gIicgLS1leGNsdWRlLXR5cGUg
JyIsIEB0eXBlc1RvRXhjbHVkZSkgLiAiJyIgaWYgQHR5cGVzVG9FeGNsdWRlOwogCi0gICAgcHJp
bnQgIiA/IGNoZWNraW5nIGZvciBsZWFrcyBpbiAkZHVtcFRvb2xOYW1lXG4iOworICAgIGFkZFdv
cmtJdGVtUmVzdWx0KCIgPyBjaGVja2luZyBmb3IgbGVha3MgaW4gJGR1bXBUb29sTmFtZVxuIik7
CiAgICAgbXkgJGxlYWtzT3V0cHV0ID0gYCRsZWFrc1Rvb2wgJGV4Y2x1ZGVTdHJpbmcgJGR1bXBU
b29sUElEYDsKICAgICBteSAoJGNvdW50LCAkYnl0ZXMpID0gJGxlYWtzT3V0cHV0ID1+IC9Qcm9j
ZXNzICRkdW1wVG9vbFBJRDogKFxkKykgbGVha3M/IGZvciAoXGQrKSB0b3RhbC87CiAgICAgbXkg
KCRleGNsdWRlZCkgPSAkbGVha3NPdXRwdXQgPX4gLyhcZCspIGxlYWtzPyBleGNsdWRlZC87CkBA
IC0xMDk4LDcgKzEyMTEsNyBAQCBzdWIgY291bnRBbmRQcmludExlYWtzKCQkJCkKICAgICAkYWRq
dXN0ZWRDb3VudCAtPSAkZXhjbHVkZWQgaWYgJGV4Y2x1ZGVkOwogCiAgICAgaWYgKCEkYWRqdXN0
ZWRDb3VudCkgewotICAgICAgICBwcmludCAiIC0gbm8gbGVha3MgZm91bmRcbiI7CisgICAgICAg
IGFkZFdvcmtJdGVtUmVzdWx0KCIgLSBubyBsZWFrcyBmb3VuZFxuIik7CiAgICAgICAgIHVubGlu
ayAkbGVha3NGaWxlUGF0aDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfSBlbHNlIHsKQEAgLTEx
MDcsOSArMTIyMCw5IEBAIHN1YiBjb3VudEFuZFByaW50TGVha3MoJCQkKQogICAgICAgICBta3Bh
dGggJGRpcjsKIAogICAgICAgICBpZiAoJGV4Y2x1ZGVkKSB7Ci0gICAgICAgICAgICBwcmludCAi
ICsgJGFkanVzdGVkQ291bnQgbGVha3MgKCRieXRlcyBieXRlcyBpbmNsdWRpbmcgJGV4Y2x1ZGVk
IGV4Y2x1ZGVkIGxlYWtzKSB3ZXJlIGZvdW5kLCBkZXRhaWxzIGluICRsZWFrc0ZpbGVQYXRoXG4i
OworICAgICAgICAgICAgYWRkV29ya0l0ZW1SZXN1bHQoIiArICRhZGp1c3RlZENvdW50IGxlYWtz
ICgkYnl0ZXMgYnl0ZXMgaW5jbHVkaW5nICRleGNsdWRlZCBleGNsdWRlZCBsZWFrcykgd2VyZSBm
b3VuZCwgZGV0YWlscyBpbiAkbGVha3NGaWxlUGF0aFxuIik7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBwcmludCAiICsgJGNvdW50IGxlYWtzICgkYnl0ZXMgYnl0ZXMpIHdlcmUgZm91
bmQsIGRldGFpbHMgaW4gJGxlYWtzRmlsZVBhdGhcbiI7CisgICAgICAgICAgICBhZGRXb3JrSXRl
bVJlc3VsdCgiICsgJGNvdW50IGxlYWtzICgkYnl0ZXMgYnl0ZXMpIHdlcmUgZm91bmQsIGRldGFp
bHMgaW4gJGxlYWtzRmlsZVBhdGhcbiIpOwogICAgICAgICB9CiAKICAgICAgICAgd3JpdGVUb0Zp
bGUoJGxlYWtzRmlsZVBhdGgsICRsZWFrc091dHB1dCk7CkBAIC0xMTkxLDExICsxMzA0LDQ3IEBA
IHN1YiBzbG93ZXN0Y21wKCQkKQogICAgIHJldHVybiBwYXRoY21wKCR0ZXN0YSwgJHRlc3RiKTsK
IH0KIAorc3ViIGVzY2FwZUVudlZhcigkKQoreworICAgIG15ICgkZW52VmFyKSA9IEBfOworCisg
ICAgIyBSZXBsYWNlIEAgb3IgPSB3aXRoIEBAIG9yIEA9CisgICAgJGVudlZhciA9fiBzLyhcQHw9
KS9cQCQxL2c7CisgICAgcmV0dXJuICRlbnZWYXI7Cit9CisKK3N1YiBsYXVuY2hXaXRoQ3VycmVu
dEVudihAKQoreworICAgIG15IChAYXJncykgPSBAXzsKKworICAgIG15ICRhbGxFbnZWYXJzID0g
IiI7CisgICAgZm9yIG15ICR2YXIgKGtleXMgJUVOVikgeworICAgICAgICAkYWxsRW52VmFycyAu
PSAiQCIgaWYgJGFsbEVudlZhcnM7CisgICAgICAgICRhbGxFbnZWYXJzIC49IGVzY2FwZUVudlZh
cigkdmFyKSAuICI9IiAuIGVzY2FwZUVudlZhcigkRU5WeyR2YXJ9KTsKKyAgICB9CisgICAgdW5z
aGlmdCBAYXJncywgJGFsbEVudlZhcnM7CisgICAgbXkgJHJlbGF0aXZlU2NyaXB0c1BhdGggPSBy
ZWxhdGl2ZVNjcmlwdHNEaXIoKTsKKyAgICB1bnNoaWZ0IEBhcmdzLCAiJHJlbGF0aXZlU2NyaXB0
c1BhdGgvRXhlY0FwcFdpdGhFbnYucG0iOworICAgIHJldHVybiBAYXJnczsKK30KKworc3ViIG9w
ZW5EaWZmVG9vbCgpCit7CisgICAgcmV0dXJuIGlmICRpc0RpZmZUb29sT3BlbjsKKyAgICByZXR1
cm4gaWYgISRwaXhlbFRlc3RzOworCisgICAgbG9jYWwgJUVOVjsKKyAgICAkRU5We01hbGxvY1N0
YWNrTG9nZ2luZ30gPSAxIGlmICRzaG91bGRDaGVja0xlYWtzOworICAgICRpbWFnZURpZmZUb29s
UElEID0gb3BlbjIoXCpESUZGSU4sIFwqRElGRk9VVCwgJGltYWdlRGlmZlRvb2wsIGxhdW5jaFdp
dGhDdXJyZW50RW52KEBkaWZmVG9vbEFyZ3MpKSBvciBkaWUgInVuYWJsZSB0byBvcGVuICRpbWFn
ZURpZmZUb29sXG4iOworICAgICRFTlZ7TWFsbG9jU3RhY2tMb2dnaW5nfSA9IDAgaWYgJHNob3Vs
ZENoZWNrTGVha3M7CisgICAgJGlzRGlmZlRvb2xPcGVuID0gMTsKK30KKwogc3ViIG9wZW5EdW1w
VG9vbCgpCiB7CiAgICAgcmV0dXJuIGlmICRpc0R1bXBUb29sT3BlbjsKIAotICAgICMgU2F2ZSBz
b21lIHJlcXVpcmVzIHZhcmlhYmxlcyBmb3IgdGhlIGxpbnV4IGVudmlyb25tZW50Li4uCisgICAg
IyBTYXZlIHNvbWUgcmVxdWlyZWQgdmFyaWFibGVzIGZvciB0aGUgbGludXggZW52aXJvbm1lbnQu
CiAgICAgbXkgJGhvbWVEaXIgPSAkRU5WeydIT01FJ307CiAgICAgbXkgJGxpYnJhcnlQYXRoID0g
JEVOVnsnTERfTElCUkFSWV9QQVRIJ307CiAgICAgbXkgJGR5bGRMaWJyYXJ5UGF0aCA9ICRFTlZ7
J0RZTERfTElCUkFSWV9QQVRIJ307CkBAIC0xMjI4LDYgKzEzNzcsNyBAQCBzdWIgb3BlbkR1bXBU
b29sKCkKICAgICAkRU5We0RZTERfRlJBTUVXT1JLX1BBVEh9ID0gJHByb2R1Y3REaXI7CiAgICAg
JEVOVntYTUxfQ0FUQUxPR19GSUxFU30gPSAiIjsgIyB3b3JrIGFyb3VuZCBtaXNzaW5nIC9ldGMv
Y2F0YWxvZyA8cmRhcjovL3Byb2JsZW0vNDI5Mjk5NT4KICAgICAkRU5We0RZTERfSU5TRVJUX0xJ
QlJBUklFU30gPSAiL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYiIgaWYgJGd1YXJkTWFsbG9jOwor
ICAgICRFTlZ7Q0ZGSVhFRF9VU0VSX0hPTUV9ID0gJHRlc3RSZXN1bHRzRGlyZWN0b3J5IC4gIi9o
b21lIiAuIFdvcmtDcmV3Ojp3b3JrZXJOdW1iZXIoKTsKICAgICAKICAgICBpZiAoaXNDeWd3aW4o
KSkgewogICAgICAgICAkRU5We0hPTUVEUklWRX0gPSAkaG9tZURyaXZlOwpAQCAtMTI0OCw3ICsx
Mzk4LDEyIEBAIHN1YiBvcGVuRHVtcFRvb2woKQogICAgIH0gCiAgICAgCiAgICAgJEVOVntNYWxs
b2NTdGFja0xvZ2dpbmd9ID0gMSBpZiAkc2hvdWxkQ2hlY2tMZWFrczsKLSAgICAkZHVtcFRvb2xQ
SUQgPSBvcGVuMyhcKk9VVCwgXCpJTiwgXCpFUlJPUiwgQGFyZ3MpIG9yIGRpZSAiRmFpbGVkIHRv
IHN0YXJ0IHRvb2w6ICRkdW1wVG9vbFxuIjsKKyAgICAKKyAgICAkRFVNUFRPT0xPVVQgPSBJTzo6
SGFuZGxlLT5uZXcoKTsKKyAgICAkRFVNUFRPT0xJTiA9IElPOjpIYW5kbGUtPm5ldygpOworICAg
ICREVU1QVE9PTEVSUk9SID0gSU86OkhhbmRsZS0+bmV3KCk7CisKKyAgICAkZHVtcFRvb2xQSUQg
PSBvcGVuMygkRFVNUFRPT0xPVVQsICREVU1QVE9PTElOLCAkRFVNUFRPT0xFUlJPUiwgbGF1bmNo
V2l0aEN1cnJlbnRFbnYoQGFyZ3MpKSBvciBkaWUgIkZhaWxlZCB0byBzdGFydCB0b29sOiAkZHVt
cFRvb2xcbiI7CiAgICAgJEVOVntNYWxsb2NTdGFja0xvZ2dpbmd9ID0gMCBpZiAkc2hvdWxkQ2hl
Y2tMZWFrczsKICAgICAkaXNEdW1wVG9vbE9wZW4gPSAxOwogICAgICRkdW1wVG9vbENyYXNoZWQg
PSAwOwpAQCAtMTI1OCwxNyArMTQxMywxNyBAQCBzdWIgY2xvc2VEdW1wVG9vbCgpCiB7CiAgICAg
cmV0dXJuIGlmICEkaXNEdW1wVG9vbE9wZW47CiAKLSAgICBjbG9zZSBJTjsKLSAgICBjbG9zZSBP
VVQ7CisgICAgY2xvc2UgJERVTVBUT09MSU47CisgICAgY2xvc2UgJERVTVBUT09MT1VUOwogICAg
IHdhaXRwaWQgJGR1bXBUb29sUElELCAwOwogICAgIAogICAgICMgY2hlY2sgZm9yIFdlYkNvcmUg
Y291bnRlciBsZWFrcy4KICAgICBpZiAoJHNob3VsZENoZWNrTGVha3MpIHsKLSAgICAgICAgd2hp
bGUgKDxFUlJPUj4pIHsKLSAgICAgICAgICAgIHByaW50OworICAgICAgICB3aGlsZSAoPCREVU1Q
VE9PTEVSUk9SPikgeworICAgICAgICAgICAgYWRkV29ya0l0ZW1SZXN1bHQoJF8pOwogICAgICAg
ICB9CiAgICAgfQotICAgIGNsb3NlIEVSUk9SOworICAgIGNsb3NlICREVU1QVE9PTEVSUk9SOwog
ICAgICRpc0R1bXBUb29sT3BlbiA9IDA7CiB9CiAKQEAgLTEyOTMsNiArMTQ0OCw3IEBAIHN1YiBk
dW1wVG9vbERpZENyYXNoKCkKIAogc3ViIG9wZW5IVFRQRElmTmVlZGVkKCkKIHsKKyAgICBsb2Nr
ICRpc0h0dHBkT3BlbjsKICAgICByZXR1cm4gaWYgJGlzSHR0cGRPcGVuOwogCiAgICAgbWtkaXIg
Ii90bXAvV2ViS2l0IjsKQEAgLTEzMDEsNyArMTQ1Nyw3IEBAIHN1YiBvcGVuSFRUUERJZk5lZWRl
ZCgpCiAgICAgICAgIG15ICRvbGRQaWQgPSBgY2F0IC90bXAvV2ViS2l0L2h0dHBkLnBpZGA7CiAg
ICAgICAgIGNob21wICRvbGRQaWQ7CiAgICAgICAgIGlmICgwICE9IGtpbGwgMCwgJG9sZFBpZCkg
ewotICAgICAgICAgICAgcHJpbnQgIlxuaHR0cGQgaXMgYWxyZWFkeSBydW5uaW5nOiBwaWQgJG9s
ZFBpZCwga2lsbGluZy4uLlxuIjsKKyAgICAgICAgICAgIGFkZFdvcmtJdGVtUmVzdWx0KCJcbmh0
dHBkIGlzIGFscmVhZHkgcnVubmluZzogcGlkICRvbGRQaWQsIGtpbGxpbmcuLi5cbiIpOwogICAg
ICAgICAgICAga2lsbCAxNSwgJG9sZFBpZDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbXkg
JHJldHJ5Q291bnQgPSAyMDsKQEAgLTE0MDcsNyArMTU2Myw3IEBAIHN1YiBwcm9jZXNzSWdub3Jl
VGVzdHMoJCQpIHsKICAgICAgICAgfSBlbHNpZiAoLWYgJHBhdGggLiAkZGlzYWJsZWRTdWZmaXgp
IHsKICAgICAgICAgICAgICMgVGhlIHRlc3QgaXMgZGlzYWJsZWQsIHNvIGRvIG5vdGhpbmcuCiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludCAiJGxpc3ROYW1lIGxpc3QgY29udGFp
bmVkICckaXRlbScsIGJ1dCBubyBmaWxlIG9mIHRoYXQgbmFtZSBjb3VsZCBiZSBmb3VuZFxuIjsK
KyAgICAgICAgICAgIGFkZFdvcmtJdGVtUmVzdWx0KCIkbGlzdE5hbWUgbGlzdCBjb250YWluZWQg
JyRpdGVtJywgYnV0IG5vIGZpbGUgb2YgdGhhdCBuYW1lIGNvdWxkIGJlIGZvdW5kXG4iKTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTE0NTAsMjkgKzE2MDYsNDAgQEAgc3ViIGV4cGVjdGVkRGly
ZWN0b3J5Rm9yVGVzdCgkOyQ7JCkKICAgICByZXR1cm4gJGlzVGV4dCA/ICRleHBlY3RlZERpcmVj
dG9yeSA6ICRwbGF0Zm9ybVJlc3VsdEhpZXJhcmNoeVskI3BsYXRmb3JtUmVzdWx0SGllcmFyY2h5
XTsKIH0KIAotc3ViIGNvdW50RmluaXNoZWRUZXN0KCQkJCQpIHsKLSAgICBteSAoJHRlc3QsICRi
YXNlLCAkcmVzdWx0LCAkaXNUZXh0KSA9IEBfOworc3ViIGNoZWNrTGVha3MoJCkKK3sKKyAgICBy
ZXR1cm4gaWYgISRzaG91bGRDaGVja0xlYWtzOworICAgIHJldHVybiBpZiAhJGlzRHVtcFRvb2xP
cGVuOworICAgIG15ICgkYmFzZSkgPSBAXzsKIAotICAgIGlmICgoJGNvdW50ICsgMSkgJSAkdGVz
dHNQZXJEdW1wVG9vbCA9PSAwIHx8ICRjb3VudCA9PSAkI3Rlc3RzKSB7Ci0gICAgICAgIGlmICgk
c2hvdWxkQ2hlY2tMZWFrcykgewotICAgICAgICAgICAgbXkgJGZpbGVOYW1lOwotICAgICAgICAg
ICAgaWYgKCR0ZXN0c1BlckR1bXBUb29sID09IDEpIHsKLSAgICAgICAgICAgICAgICAkZmlsZU5h
bWUgPSAiJHRlc3RSZXN1bHRzRGlyZWN0b3J5LyRiYXNlLWxlYWtzLnR4dCI7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICRmaWxlTmFtZSA9ICIkdGVzdFJlc3VsdHNEaXJl
Y3RvcnkvIiAuIGZpbGVOYW1lV2l0aE51bWJlcigkZHVtcFRvb2xOYW1lLCAkbGVha3NPdXRwdXRG
aWxlTnVtYmVyKSAuICItbGVha3MudHh0IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG15
ICRsZWFrQ291bnQgPSBjb3VudEFuZFByaW50TGVha3MoJGR1bXBUb29sTmFtZSwgJGR1bXBUb29s
UElELCAkZmlsZU5hbWUpOwotICAgICAgICAgICAgJHRvdGFsTGVha3MgKz0gJGxlYWtDb3VudDsK
LSAgICAgICAgICAgICRsZWFrc091dHB1dEZpbGVOdW1iZXIrKyBpZiAoJGxlYWtDb3VudCk7Cisg
ICAgbXkgJGZpbGVOYW1lID0gIiR0ZXN0UmVzdWx0c0RpcmVjdG9yeS8kYmFzZS1sZWFrcy50eHQi
OworICAgIG15ICRsZWFrQ291bnQgPSBjb3VudEFuZFByaW50TGVha3MoJGR1bXBUb29sTmFtZSwg
JGR1bXBUb29sUElELCAkZmlsZU5hbWUpOworICAgICR0b3RhbExlYWtzICs9ICRsZWFrQ291bnQ7
CisgICAgaWYgKCRsZWFrQ291bnQpIHsKKyAgICAgICAgbG9jayAkbGVha3NPdXRwdXRGaWxlTnVt
YmVyOworICAgICAgICBpZiAoJHRlc3RzUGVyRHVtcFRvb2wgIT0gMSkgeworICAgICAgICAgICAg
bXkgJG5ld0ZpbGVOYW1lID0gIiR0ZXN0UmVzdWx0c0RpcmVjdG9yeS8iIC4gZmlsZU5hbWVXaXRo
TnVtYmVyKCRkdW1wVG9vbE5hbWUsICRsZWFrc091dHB1dEZpbGVOdW1iZXIpIC4gIi1sZWFrcy50
eHQiOworICAgICAgICAgICAgcmVuYW1lICRmaWxlTmFtZSwgJG5ld0ZpbGVOYW1lOwogICAgICAg
ICB9CisgICAgICAgICRsZWFrc091dHB1dEZpbGVOdW1iZXIrKzsKKyAgICB9Cit9CisKK3N1YiBj
b3VudEZpbmlzaGVkVGVzdCgkJCQkKQoreworICAgIG15ICgkdGVzdCwgJGJhc2UsICRyZXN1bHQs
ICRpc1RleHQpID0gQF87CiAKKyAgICBpZiAoKCRjb3VudCArIDEpICUgJHRlc3RzUGVyRHVtcFRv
b2wgPT0gMCkgeworICAgICAgICBjaGVja0xlYWtzKCRiYXNlKTsKICAgICAgICAgY2xvc2VEdW1w
VG9vbCgpOwogICAgIH0KLSAgICAKKworICAgIGxvY2sgJWNvdW50czsKICAgICAkY291bnQrKzsK
ICAgICAkY291bnRzeyRyZXN1bHR9Kys7Ci0gICAgcHVzaCBAeyR0ZXN0c3skcmVzdWx0fX0sICR0
ZXN0OworCiAgICAgJHRlc3RUeXBleyR0ZXN0fSA9ICRpc1RleHQ7CisgICAgcHVzaCBAeyR0ZXN0
c3skcmVzdWx0fX0sICR0ZXN0OwogfQogCiBzdWIgdGVzdENyYXNoZWRPclRpbWVkT3V0KCQkJCQk
KQpAQCAtMTUwNSwxMCArMTY3MiwxMCBAQCBzdWIgcHJpbnRGYWlsdXJlTWVzc2FnZUZvclRlc3Qo
JCQpCiAgICAgbXkgKCR0ZXN0LCAkZGVzY3JpcHRpb24pID0gQF87CiAKICAgICB1bmxlc3MgKCR2
ZXJib3NlKSB7Ci0gICAgICAgIHByaW50ICJcbiIgdW5sZXNzICRhdExpbmVTdGFydDsKLSAgICAg
ICAgcHJpbnQgIiR0ZXN0IC0+ICI7CisgICAgICAgIGFkZFdvcmtJdGVtUmVzdWx0KCJcbiIpIHVu
bGVzcyAkYXRMaW5lU3RhcnQ7CisgICAgICAgIGFkZFdvcmtJdGVtUmVzdWx0KCIkdGVzdCAtPiAi
KTsKICAgICB9Ci0gICAgcHJpbnQgIiRkZXNjcmlwdGlvblxuIjsKKyAgICBhZGRXb3JrSXRlbVJl
c3VsdCgiJGRlc2NyaXB0aW9uXG4iKTsKICAgICAkYXRMaW5lU3RhcnQgPSAxOwogfQogCkBAIC0x
Nzg3LDkgKzE5NTQsOSBAQCBzdWIgcGFyc2VMZWFrc2FuZFByaW50VW5pcXVlTGVha3MoKSB7CiAg
ICAgICAgICR0b3RhbEJ5dGVzID0gJDEgaWYgJGxpbmUgPX4gL150b3RhbFw6XHMoLiopXHNcKC87
CiAgICAgfQogICAgIAotICAgIHByaW50ICJcbldBUk5JTkc6ICR0b3RhbExlYWtzIHRvdGFsIGxl
YWtzIGZvdW5kIGZvciBhIHRvdGFsIG9mICR0b3RhbEJ5dGVzIVxuIjsKLSAgICBwcmludCAiV0FS
TklORzogJHVuaXF1ZUxlYWtDb3VudCB1bmlxdWUgbGVha3MgZm91bmQhXG4iOwotICAgIHByaW50
ICJTZWUgYWJvdmUgZm9yIGluZGl2aWR1YWwgbGVha3MgcmVzdWx0cy5cbiIgaWYgKCRsZWFrc091
dHB1dEZpbGVOdW1iZXIgPiAyKTsKKyAgICBhZGRXb3JrSXRlbVJlc3VsdCgiXG5XQVJOSU5HOiAk
dG90YWxMZWFrcyB0b3RhbCBsZWFrcyBmb3VuZCBmb3IgYSB0b3RhbCBvZiAkdG90YWxCeXRlcyFc
biIpOworICAgIGFkZFdvcmtJdGVtUmVzdWx0KCJXQVJOSU5HOiAkdW5pcXVlTGVha0NvdW50IHVu
aXF1ZSBsZWFrcyBmb3VuZCFcbiIpOworICAgIGFkZFdvcmtJdGVtUmVzdWx0KCJTZWUgYWJvdmUg
Zm9yIGluZGl2aWR1YWwgbGVha3MgcmVzdWx0cy5cbiIpIGlmICgkbGVha3NPdXRwdXRGaWxlTnVt
YmVyID4gMik7CiAgICAgCiB9CiAKQEAgLTE4MTIsNyArMTk3OSw3IEBAIHN1YiByZWFkRnJvbUR1
bXBUb29sV2l0aFRpbWVyKCo7JCkKIAogICAgIHNldEZpbGVIYW5kbGVOb25CbG9ja2luZygkZmgs
IDEpOwogCi0gICAgbXkgJG1heGltdW1TZWNvbmRzV2l0aG91dE91dHB1dCA9IDE1OworICAgIG15
ICRtYXhpbXVtU2Vjb25kc1dpdGhvdXRPdXRwdXQgPSAyMDsKICAgICAkbWF4aW11bVNlY29uZHNX
aXRob3V0T3V0cHV0ICo9IDEwIGlmICRndWFyZE1hbGxvYzsKICAgICBteSAkbWljcm9zZWNvbmRz
VG9XYWl0QmVmb3JlUmVhZGluZ0FnYWluID0gMTAwMDsKIApAQCAtMTg5NCw1ICsyMDYxLDYgQEAg
c3ViIHNhbXBsZUR1bXBUb29sKCkKICAgICAtZCAkb3V0cHV0RGlyZWN0b3J5IG9yIG1rZGlyICRv
dXRwdXREaXJlY3Rvcnk7CiAKICAgICBteSAkb3V0cHV0RmlsZSA9ICIkb3V0cHV0RGlyZWN0b3J5
L0hhbmdSZXBvcnQudHh0IjsKLSAgICBzeXN0ZW0gIi91c3IvYmluL3NhbXBsZSIsICRkdW1wVG9v
bFBJRCwgcXcoMTAgMTAgLWZpbGUpLCAkb3V0cHV0RmlsZTsKKyAgICBteSAkc2FtcGxlQ29tbWFu
ZCA9ICIvdXNyL2Jpbi9zYW1wbGUgJGR1bXBUb29sUElEICIgLiBxdygxMCAxMCAtZmlsZSkgLiAi
ICRvdXRwdXRGaWxlIjsKKyAgICBhZGRXb3JrSXRlbVJlc3VsdChgJHNhbXBsZUNvbW1hbmRgKTsK
IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>