<?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>78185</bug_id>
          
          <creation_ts>2012-02-08 17:06:14 -0800</creation_ts>
          <short_desc>test-webkitpy should support parallel execution of tests</short_desc>
          <delta_ts>2012-06-26 19:53:00 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76765</dependson>
    
    <dependson>77807</dependson>
    
    <dependson>78171</dependson>
    
    <dependson>78181</dependson>
    
    <dependson>78187</dependson>
          <blocked>76022</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>552651</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-08 17:06:14 -0800</bug_when>
    <thetext>assuming it&apos;s relatively easy. Currently the tests run in ~53 seconds or thereabouts on a mac pro (and we aren&apos;t running some of the integration tests even then); running them in parallel should give us a near-linear speedup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552798</commentid>
    <comment_count>1</comment_count>
      <attachid>126231</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-08 20:19:31 -0800</bug_when>
    <thetext>Created attachment 126231
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552804</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-08 20:25:32 -0800</bug_when>
    <thetext>Okay, I have a preliminary version of the patch that adds roughly ~100 lines of code and shards tests by the individual test_method. I suspect once I clean things up a bit I can probably get this down to 50-75 LOC.

Running with 8 or 16 tests in parallel, total test time is about ~10 seconds. It looks like there&apos;s ~3 seconds of purely serial work to actually get all of the tests (this is expensive since we have to load all of the test files and parse them in order to shard by method). There are also several tests that take multiple seconds to complete, so we&apos;re not getting it down much further w/o speeding up individual tests. That said, we can probably get this down to ~5-6 seconds without very much work. That&apos;s a pretty good speedup from ~53 seconds.

Running tests individually, we have at least two tests that are flaky and depend on previous tests being run; that should be easy to fix.

Also, perhaps unsurprisingly, it looks like tests that actually use multiprocessing get confused and fail. I would need to look into that further.

If we shard tests by file (instead of method), the speedups are only about 2x, since run_webkit_tests_integrationtest.py is by far the long pole. Clearly we could speed up the individual tests in this file regardless of whether we want to run things in parallel or not, and that would be good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552805</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-08 20:26:36 -0800</bug_when>
    <thetext>(I would say that the results are encouraging but not conclusive as to whether this is worth it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553781</commentid>
    <comment_count>4</comment_count>
      <attachid>126445</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-09 20:49:00 -0800</bug_when>
    <thetext>Created attachment 126445
dramatically cleaned up patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553783</commentid>
    <comment_count>5</comment_count>
      <attachid>126445</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-09 20:53:44 -0800</bug_when>
    <thetext>Comment on attachment 126445
dramatically cleaned up patch

here&apos;s a cleaned up patch adding parallel support, as a delta from attachment 126446 on bug 77687</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563287</commentid>
    <comment_count>6</comment_count>
      <attachid>128514</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-23 11:23:07 -0800</bug_when>
    <thetext>Created attachment 128514
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564838</commentid>
    <comment_count>7</comment_count>
      <attachid>128842</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-24 20:10:06 -0800</bug_when>
    <thetext>Created attachment 128842
Work in progress (includes rollup of work in 77687)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658279</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-26 19:53:00 -0700</bug_when>
    <thetext>closing ... I will file new bugs as I have patches for review. The rollup in bug 76022 contains the real code, so we&apos;re not losing anything here.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126231</attachid>
            <date>2012-02-08 20:19:31 -0800</date>
            <delta_ts>2012-02-09 20:48:57 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-78185-20120208201929.patch</filename>
            <type>text/plain</type>
            <size>12819</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MTMyCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2Vy
X3dvcmtlcl9icm9rZXIucHkKaW5kZXggNTI5MTEzMzg3NjNmMTU4Y2UyOGMzZTVjOTAxMDFlMDdj
N2UwNWZiOC4uYmZiYTQyNmUxODAwYjVkOTYyZTZiNDdlODQxZDhmMGVkNGVmOThjMyAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFu
YWdlcl93b3JrZXJfYnJva2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQpAQCAtMjU5LDcgKzI1
OSw3IEBAIGNsYXNzIEFic3RyYWN0V29ya2VyKEJyb2tlckNsaWVudCk6CiAgICAgZGVmIHN0b3Bf
aGFuZGxpbmdfbWVzc2FnZXMoc2VsZik6CiAgICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCiAKLSAg
ICBkZWYgcnVuKHNlbGYpOgorICAgIGRlZiBydW4oc2VsZiwgcG9ydD1Ob25lKToKICAgICAgICAg
IiIiQ2FsbGJhY2sgZm9yIHRoZSB3b3JrZXIgdG8gc3RhcnQgZXhlY3V0aW5nLiBUeXBpY2FsbHkg
ZG9lcyBhbnkKICAgICAgICAgcmVtYWluaW5nIGluaXRpYWxpemF0aW9uIGFuZCB0aGVuIGNhbGxz
IGJyb2tlcl9jb25uZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3AoKS4iIiIKICAgICAgICAgZXhjZXB0
aW9uX21zZyA9ICcnCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtl
cl9icm9rZXJfdW5pdHRlc3QucHkKaW5kZXggMjI4NjA0NTQyZGM0MWMzODkwZDBlNTk1NTIyMGMx
YmEzYjI2NWFjOS4uYTI0OTU5Y2Y3Njc5MTYwNjdkNTQ3ZWYwNDkyZDEwY2YwYWQ2ODAwOCAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0
dGVzdC5weQpAQCAtMTg3LDcgKzE4Nyw3IEBAIGNsYXNzIF9UZXN0c01peGluKG9iamVjdCk6CiAK
IAogIyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NTIw
LgotaWYgbXVsdGlwcm9jZXNzaW5nIGFuZCBzeXMucGxhdGZvcm0gbm90IGluICgnY3lnd2luJywg
J3dpbjMyJyk6CitpZiBGYWxzZSBhbmQgbXVsdGlwcm9jZXNzaW5nIGFuZCBzeXMucGxhdGZvcm0g
bm90IGluICgnY3lnd2luJywgJ3dpbjMyJyk6CiAKICAgICBjbGFzcyBNdWx0aVByb2Nlc3NCcm9r
ZXJUZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBkZWYgc2V0
VXAoc2VsZik6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5Cmlu
ZGV4IGU4NzJkNThjZjQwNDY3NWZjZjQzMmFkMDg2M2Y0YTkwOGRjNTlhYjMuLjY5Y2JlOGYwY2Y3
NmQzNDljMjBhMDgwNDNhMDVjZTM2YWQwMjllOTggMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVz
dHNfaW50ZWdyYXRpb250ZXN0LnB5CkBAIC01OSw3ICs1OSw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJv
cjoKIAogIyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXggdGVzdC13ZWJraXRweSB0byB3
b3JrIHByb3Blcmx5IG9uIGN5Z3dpbgogIyAoYnVnIDYzODQ2KS4KLVNIT1VMRF9URVNUX1BST0NF
U1NFUyA9IG11bHRpcHJvY2Vzc2luZyBhbmQgc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ2N5Z3dpbics
ICd3aW4zMicpCitTSE9VTERfVEVTVF9QUk9DRVNTRVMgPSBGYWxzZSBhbmQgbXVsdGlwcm9jZXNz
aW5nIGFuZCBzeXMucGxhdGZvcm0gbm90IGluICgnY3lnd2luJywgJ3dpbjMyJykKIAogZnJvbSB3
ZWJraXRweS5jb21tb24gaW1wb3J0IGFycmF5X3N0cmVhbQogZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtIGltcG9ydCBvdXRwdXRjYXB0dXJlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rlc3QvbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5
CmluZGV4IDU2ZjMzMjY4YWI5MzFlMWRlNzIwZDNkYjI5ZDA1ZDkxOGRiYTc4NTYuLmZjNjE3Y2I2
Y2EzOWFmNGI3NzM1YTRjYjMyNmIxMDMwNzEwZTM4NjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVz
dC9tYWluLnB5CkBAIC0zNSw2ICszNSw3IEBAIGltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCB1bml0
dGVzdAogCiAjIE5PVEU6IFdlIGludGVudGlvbmFsbHkgZG8gbm90IGRlcGVuZCBvbiBhbnl0aGlu
ZyBlbHNlIGluIHdlYmtpdHB5IGhlcmUgdG8gYXZvaWQgYnJlYWtpbmcgdGVzdC13ZWJraXRweS4K
K2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCBtYW5hZ2VyX3dv
cmtlcl9icm9rZXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCkBAIC0x
MDAsNiArMTAxLDggQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J291dHB1dCB4VW5pdC1zdHlsZSBYTUwgb3V0cHV0JykKICAgICAgICAgcGFy
c2VyLmFkZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nY291bnQnLCBkZWZhdWx0
PTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3ZlcmJvc2Ugb3V0cHV0IChzcGVj
aWZ5IG9uY2UgZm9yIGluZGl2aWR1YWwgdGVzdCByZXN1bHRzLCB0d2ljZSBmb3IgZGVidWcgbWVz
c2FnZXMpJykKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1qJywgJy0tam9icycsIGFjdGlv
bj0nc3RvcmUnLCB0eXBlPSdpbnQnLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J251bWJlciBvZiB3b3JrZXJzIHRvIHJ1biBpbiBwYXJhbGxlbCcpCiAKICAg
ICAgICAgIyBGSVhNRTogV2UgbmVlZCB0byB1bmlmeSB0aGVzZSB0d28gdHlwZXMgb2YgdGVzdHMg
YW5kIG1ha2UgdGhlbSBjb25zaXN0ZW50LgogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLS1z
a2lwLWludGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNl
LApAQCAtMTM2LDggKzEzOSwxMCBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy54bWw6CiAgICAgICAgICAgICBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHku
YXV0b2luc3RhbGxlZC54bWxydW5uZXIgaW1wb3J0IFhNTFRlc3RSdW5uZXIKICAgICAgICAgICAg
IHNlbGYucnVubmVyID0gWE1MVGVzdFJ1bm5lcihvdXRwdXQ9J3Rlc3Qtd2Via2l0cHkteG1sLXJl
cG9ydHMnKQorICAgICAgICBlbGlmIHNlbGYuX29wdGlvbnMuam9icyBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIHNlbGYucnVubmVyID0gUGFyYWxsZWxSdW5uZXIoc2VsZi5zdGRlcnIsIHZlcmJv
c2l0eT1zZWxmLl92ZXJib3NpdHksIHRpbWluZz1zZWxmLl9vcHRpb25zLnRpbWluZywgam9icz1z
ZWxmLl9vcHRpb25zLmpvYnMsIHN0YXJ0PXRpbWUudGltZSgpKQogICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgc2VsZi5ydW5uZXIgPSBUZXN0UnVubmVyKHNlbGYuc3RkZXJyLCB2ZXJib3NpdHk9
c2VsZi5fdmVyYm9zaXR5LCB0aW1pbmc9c2VsZi5fb3B0aW9ucy50aW1pbmcpCisgICAgICAgICAg
ICBzZWxmLnJ1bm5lciA9IFRlc3RSdW5uZXIoc2VsZi5zdGRlcnIsIHZlcmJvc2l0eT1zZWxmLl92
ZXJib3NpdHksIHRpbWluZz1zZWxmLl9vcHRpb25zLnRpbWluZywgc3RhcnQ9dGltZS50aW1lKCkp
CiAKICAgICBkZWYgY29uZmlndXJlX2xvZ2dpbmcoc2VsZik6CiAgICAgICAgICIiIkNvbmZpZ3Vy
ZSB0aGUgcm9vdCBsb2dnZXIuCkBAIC0zNTEsMTAgKzM1NiwxMyBAQCBjbGFzcyBUZXN0ZXIob2Jq
ZWN0KToKICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuYWxsOgogICAgICAgICAgICAgdGVz
dHMgPSBzZWxmLl9za2lwX21vZHVsZXModGVzdHMpCiAKLSAgICAgICAgc3VpdGVzID0gW3NlbGYu
X3N1aXRlX2Zyb21fbmFtZSh0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0c10KICAgICAgICAgX2xvZy5k
ZWJ1ZygiUnVubmluZyB0aGUgdGVzdHMuIikKLSAgICAgICAgdGVzdF9zdWl0ZSA9IHVuaXR0ZXN0
LlRlc3RTdWl0ZShzdWl0ZXMpCi0gICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5ydW4odGVzdF9z
dWl0ZSkKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5qb2JzIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYucnVubmVyLnJ1bl9pbl9wYXJhbGxlbCh0ZXN0cykKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHN1aXRlcyA9IFtzZWxmLl9zdWl0ZV9mcm9tX25hbWUodGVzdCkg
Zm9yIHRlc3QgaW4gdGVzdHNdCisgICAgICAgICAgICB0ZXN0X3N1aXRlID0gdW5pdHRlc3QuVGVz
dFN1aXRlKHN1aXRlcykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5ydW4odGVzdF9z
dWl0ZSkKIAogICAgIGRlZiBfbG9nX2V4Y2VwdGlvbihzZWxmKToKICAgICAgICAgcyA9IFN0cmlu
Z0lPLlN0cmluZ0lPKCkKQEAgLTM4MCwyMSArMzg4LDI1IEBAIGNsYXNzIFRlc3RMb2FkZXIodW5p
dHRlc3QuVGVzdExvYWRlcik6CiAKIAogY2xhc3MgVGVzdFJ1bm5lcih1bml0dGVzdC5UZXh0VGVz
dFJ1bm5lcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgdmVyYm9zaXR5LCB0aW1p
bmcpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0sIHZlcmJvc2l0eSwgdGltaW5nLCBz
dGFydCk6CiAgICAgICAgIHN1cGVyKFRlc3RSdW5uZXIsIHNlbGYpLl9faW5pdF9fKHN0cmVhbSwg
MSwgdmVyYm9zaXR5KQogICAgICAgICBzZWxmLnRpbWluZyA9IHRpbWluZworICAgICAgICBzZWxm
LnN0YXJ0ID0gc3RhcnQKIAogICAgIGRlZiBydW4oc2VsZiwgdGVzdCk6CiAgICAgICAgIHJlc3Vs
dCA9IFRlc3RSZXN1bHQoc2VsZi5zdHJlYW0sIHNlbGYudmVyYm9zaXR5LCBzZWxmLnRpbWluZywg
dGVzdC5jb3VudFRlc3RDYXNlcygpKQotICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAg
ICAgIHRlc3QocmVzdWx0KQogICAgICAgICBzdG9wID0gdGltZS50aW1lKCkKKyAgICAgICAgc2Vs
Zi5zdW1tYXJpemUocmVzdWx0LCBzdG9wIC0gc2VsZi5zdGFydCkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdAorCisgICAgZGVmIHN1bW1hcml6ZShzZWxmLCByZXN1bHQsIHRvdGFsX3Rlc3RfdGltZSk6
CiAgICAgICAgIGlmIHNlbGYudmVyYm9zaXR5ID09IDE6CiAgICAgICAgICAgICByZXN1bHQuZXJh
c2UoKQogICAgICAgICBlbGlmIHJlc3VsdC5zaG93QWxsIG9yIHJlc3VsdC5udW1fZmFpbGVkOgog
ICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigpCiAKLSAgICAgICAgdG90YWxfZGVsYXkg
PSAnJS4zZiBzZWNvbmRzJyAlIChzdG9wIC0gc3RhcnQpCisgICAgICAgIHRvdGFsX2RlbGF5ID0g
JyUuM2Ygc2Vjb25kcycgJSAodG90YWxfdGVzdF90aW1lKQogICAgICAgICBpZiByZXN1bHQubnVt
X3J1biA+IDEgYW5kIHJlc3VsdC5udW1fZmFpbGVkOgogICAgICAgICAgICAgc2VsZi5zdHJlYW0u
d3JpdGVsbignJWQgdGVzdHMgcmFuIGluICVzOyAlZCBmYWlsZWQuJyAlIChyZXN1bHQubnVtX3J1
biwgdG90YWxfZGVsYXksIHJlc3VsdC5udW1fZmFpbGVkKSkKICAgICAgICAgZWxpZiByZXN1bHQu
bnVtX3J1biA+IDE6CkBAIC00MDMsNyArNDE1LDYgQEAgY2xhc3MgVGVzdFJ1bm5lcih1bml0dGVz
dC5UZXh0VGVzdFJ1bm5lcik6CiAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCcxIHRl
c3QgcmFuIGluICVzOyBpdCBmYWlsZWQuJyAlICh0b3RhbF9kZWxheSkpCiAgICAgICAgIGVsc2U6
CiAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCcxIHRlc3QgcmFuIGluICVzOyBpdCBw
YXNzZWQuJyAlICh0b3RhbF9kZWxheSkpCi0gICAgICAgIHJldHVybiByZXN1bHQKIAogCiBjbGFz
cyBUZXN0UmVzdWx0KHVuaXR0ZXN0Ll9UZXh0VGVzdFJlc3VsdCk6CkBAIC00MjMsMTMgKzQzNCwx
MiBAQCBjbGFzcyBUZXN0UmVzdWx0KHVuaXR0ZXN0Ll9UZXh0VGVzdFJlc3VsdCk6CiAgICAgICAg
IG0gPSBzZWxmLmRlc2NSZWdleHAubWF0Y2goc3RyKHRlc3QpKQogICAgICAgICByZXR1cm4gIiVz
LiVzIiAlIChtLmdyb3VwKDIpLCBtLmdyb3VwKDEpKQogCi0gICAgZGVmIF93cml0ZV9zdGF0dXMo
c2VsZiwgdGVzdCk6CisgICAgZGVmIF93cml0ZV9zdGF0dXMoc2VsZiwgdGVzdF9uYW1lKToKICAg
ICAgICAgcGVyY2VudF9jb21wbGV0ZSA9IDEwMCAqIChzZWxmLm51bV9ydW4pIC8gc2VsZi5udW1f
dGVzdHMKICAgICAgICAgbnVtX3JlbWFpbmluZyA9IHNlbGYubnVtX3Rlc3RzIC0gc2VsZi5udW1f
cnVuCiAgICAgICAgIHNlbGYuZXJhc2UoKQotICAgICAgICBzZWxmLl9idWZmZXIgPSAnJTJkJSU6
ICVkIHBhc3NlZCAlZCBmYWlsZWQgJWQgbGVmdCAoJXMgLi4uKScgJSAoCi0gICAgICAgICAgICBw
ZXJjZW50X2NvbXBsZXRlLCBzZWxmLm51bV9wYXNzZWQsIHNlbGYubnVtX2ZhaWxlZCwgbnVtX3Jl
bWFpbmluZywKLSAgICAgICAgICAgIHNlbGYuZ2V0RGVzY3JpcHRpb24odGVzdCkpCisgICAgICAg
IHNlbGYuX2J1ZmZlciA9ICclMmQlJTogJWQgcGFzc2VkICVkIGZhaWxlZCAlZCBsZWZ0JyAlICgK
KyAgICAgICAgICAgIHBlcmNlbnRfY29tcGxldGUsIHNlbGYubnVtX3Bhc3NlZCwgc2VsZi5udW1f
ZmFpbGVkLCBudW1fcmVtYWluaW5nKQogICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShzZWxmLl9i
dWZmZXIpCiAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKIApAQCAtNDQwLDEyICs0NTAsMTMg
QEAgY2xhc3MgVGVzdFJlc3VsdCh1bml0dGVzdC5fVGV4dFRlc3RSZXN1bHQpOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdcYicgKiBsZW4oc2VsZi5fYnVmZmVyKSkKICAgICAgICAgICAg
IHNlbGYuc3RyZWFtLl9idWZmZXIgPSAnJwogCi0gICAgZGVmIF93cml0ZV9yZXN1bHQoc2VsZiwg
dGVzdCwgZXJyPU5vbmUpOgorICAgIGRlZiBfd3JpdGVfcmVzdWx0KHNlbGYsIHRlc3RfbmFtZSwg
dGVzdF90aW1lLCBlcnI9Tm9uZSk6CisgICAgICAgIHNlbGYubnVtX3J1biArPSAxCiAgICAgICAg
IHNlbGYuZXJhc2UoKQogICAgICAgICBpZiBzZWxmLnRpbWluZyBhbmQgZXJyOgotICAgICAgICAg
ICAgbXNnID0gJyBmYWlsZWQgJS4zZnMnICUgKHRpbWUudGltZSgpIC0gc2VsZi5zdGFydCkKKyAg
ICAgICAgICAgIG1zZyA9ICcgZmFpbGVkICUuM2ZzJyAlIHRlc3RfdGltZQogICAgICAgICBlbGlm
IHNlbGYudGltaW5nOgotICAgICAgICAgICAgbXNnID0gJyBwYXNzZWQgJS4zZnMnICUgKHRpbWUu
dGltZSgpIC0gc2VsZi5zdGFydCkKKyAgICAgICAgICAgIG1zZyA9ICcgcGFzc2VkICUuM2ZzJyAl
IHRlc3RfdGltZQogICAgICAgICBlbGlmIGVycjoKICAgICAgICAgICAgIG1zZyA9ICcgZmFpbGVk
JwogICAgICAgICBlbHNlOgpAQCAtNDUzLDMyICs0NjQsMTMwIEBAIGNsYXNzIFRlc3RSZXN1bHQo
dW5pdHRlc3QuX1RleHRUZXN0UmVzdWx0KToKIAogICAgICAgICBpZiBlcnI6CiAgICAgICAgICAg
ICBzZWxmLmVyYXNlKCkKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNob3dBbGw6Ci0gICAgICAg
ICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoc2VsZi5nZXREZXNjcmlwdGlvbih0ZXN0KSkKLSAg
ICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4obXNnKQorICAgICAgICAgICAgc2VsZi5zdHJl
YW0ud3JpdGVsbih0ZXN0X25hbWUgKyBtc2cpCiAgICAgICAgICAgICBmb3IgbGluZSBpbiBlcnIu
c3BsaXRsaW5lcygpOgogICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oJyAgICAn
ICsgbGluZSkKICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oKQogICAgICAgICBlbGlm
IHNlbGYuc2hvd0FsbDoKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4obXNnKQorICAg
ICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbih0ZXN0X25hbWUgKyBtc2cpCisgICAgICAgIGVs
aWYgc2VsZi5kb3RzOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc3RhdHVzKHRlc3RfbmFtZSkK
IAogICAgIGRlZiBzdGFydFRlc3Qoc2VsZiwgdGVzdCk6Ci0gICAgICAgIHNlbGYubnVtX3J1biAr
PSAxCiAgICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndy
aXRlKHNlbGYuZ2V0RGVzY3JpcHRpb24odGVzdCkpCiAgICAgICAgICAgICBzZWxmLl9idWZmZXIg
PSAnIC4uLiAnCiAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShzZWxmLl9idWZmZXIpCi0g
ICAgICAgIGVsaWYgc2VsZi5kb3RzOgotICAgICAgICAgICAgc2VsZi5fd3JpdGVfc3RhdHVzKHRl
c3QpCiAgICAgICAgIHNlbGYuc3RhcnQgPSB0aW1lLnRpbWUoKQogCiAgICAgZGVmIGFkZFN1Y2Nl
c3Moc2VsZiwgdGVzdCk6CiAgICAgICAgIHNlbGYubnVtX3Bhc3NlZCArPSAxCi0gICAgICAgIHNl
bGYuX3dyaXRlX3Jlc3VsdCh0ZXN0KQorICAgICAgICBzZWxmLl93cml0ZV9yZXN1bHQoc2VsZi5n
ZXREZXNjcmlwdGlvbih0ZXN0KSwgdGltZS50aW1lKCkgLSBzZWxmLnN0YXJ0KQogCiAgICAgZGVm
IGFkZEVycm9yKHNlbGYsIHRlc3QsIGVycik6CiAgICAgICAgIHNlbGYubnVtX2ZhaWxlZCArPSAx
Ci0gICAgICAgIHNlbGYuX3dyaXRlX3Jlc3VsdCh0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJp
bmcoZXJyLCB0ZXN0KSkKKyAgICAgICAgc2VsZi5fd3JpdGVfcmVzdWx0KHNlbGYuZ2V0RGVzY3Jp
cHRpb24odGVzdCksIHRpbWUudGltZSgpIC0gc2VsZi5zdGFydCwgc2VsZi5fZXhjX2luZm9fdG9f
c3RyaW5nKGVyciwgdGVzdCkpCiAKICAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCB0ZXN0LCBlcnIp
OgogICAgICAgICBzZWxmLmFkZEVycm9yKHRlc3QsIGVycikKKworCitjbGFzcyBQYXJhbGxlbFJ1
bm5lcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQnJva2VyQ2xpZW50KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgc3RyZWFtLCB2ZXJib3NpdHksIHRpbWluZywgam9icywgc3RhcnQpOgorICAgICAg
ICBzdXBlcihQYXJhbGxlbFJ1bm5lciwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLnJ1
bm5lciA9IFRlc3RSdW5uZXIoc3RyZWFtLCB2ZXJib3NpdHksIHRpbWluZywgc3RhcnQpCisgICAg
ICAgIHNlbGYud29ya2VycyA9IHt9CisgICAgICAgIHNlbGYuam9icyA9IGpvYnMKKyAgICAgICAg
c2VsZi5yZXN1bHQgPSBOb25lCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
ICdtYW5hZ2VyJworCisgICAgZGVmIGFsbF90ZXN0X25hbWVzKHNlbGYsIHRlc3QpOgorICAgICAg
ICBuYW1lcyA9IFtdCisgICAgICAgIGlmIGhhc2F0dHIodGVzdCwgJ190ZXN0cycpOgorICAgICAg
ICAgICAgZm9yIHQgaW4gdGVzdC5fdGVzdHM6CisgICAgICAgICAgICAgICAgbmFtZXMuZXh0ZW5k
KHNlbGYuYWxsX3Rlc3RfbmFtZXModCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1l
cy5hcHBlbmQoc3RyKHRlc3QpKQorICAgICAgICByZXR1cm4gbmFtZXMKKworICAgIGRlZiBydW5f
aW5fcGFyYWxsZWwoc2VsZiwgdGVzdHMpOgorICAgICAgICBpZiBzZWxmLmpvYnM6CisgICAgICAg
ICAgICB3b3JrZXJfbW9kZWwgPSAncHJvY2Vzc2VzJworICAgICAgICAgICAgbnVtX3dvcmtlcnMg
PSBzZWxmLmpvYnMKKyAgICAgICAgICAgIGlmIHNlbGYuam9icyA+IDE6CisgICAgICAgICAgICAg
ICAgX2xvZy5pbmZvKCdydW5uaW5nICVkIHRlc3RzIGluIHBhcmFsbGVsJyAlIG51bV93b3JrZXJz
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ3J1bm5pbmcg
dGVzdHMgaW4gYSBzaW5nbGUgc3VicHJvY2VzcycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICB3b3JrZXJfbW9kZWwgPSAnaW5saW5lJworICAgICAgICAgICAgbnVtX3dvcmtlcnMgPSAxCisg
ICAgICAgICAgICBfbG9nLmluZm8oJ3J1bm5pbmcgdGVzdHMgaW5saW5lJykKKworICAgICAgICBi
cm9rZXIgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHdvcmtlcl9tb2RlbCwgc2VsZiwgUGFy
YWxsZWxXb3JrZXIpCisgICAgICAgIG51bV90ZXN0cyA9IDAKKyAgICAgICAgbG9hZGVyID0gVGVz
dExvYWRlcigpCisgICAgICAgIGFsbF90ZXN0cyA9IFtdCisgICAgICAgIGZvciB0IGluIHRlc3Rz
OgorICAgICAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUodCwgTm9uZSkK
KyAgICAgICAgICAgIGFsbF90ZXN0cy5leHRlbmQoc2VsZi5hbGxfdGVzdF9uYW1lcyhzdWl0ZSkp
CisKKyAgICAgICAgc2VsZi5yZXN1bHQgPSBUZXN0UmVzdWx0KHNlbGYucnVubmVyLnN0cmVhbSwg
c2VsZi5ydW5uZXIudmVyYm9zaXR5LCBzZWxmLnJ1bm5lci50aW1pbmcsIGxlbihhbGxfdGVzdHMp
KQorICAgICAgICBhbGxfdGVzdHMgPSBtYXAoc2VsZi5yZXN1bHQuZ2V0RGVzY3JpcHRpb24sIGFs
bF90ZXN0cykKKworICAgICAgICAjIEZJWE1FOiBnZXQgcHJvcGVyIG51bV93b3JrZXJzIHZhbHVl
CisgICAgICAgIG1pZGRsZSA9IHRpbWUudGltZSgpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uo
bnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgd29ya2VyID0gYnJva2VyLnN0YXJ0X3dvcmtlcihp
bnQoaSkgKyAxLCAnLicpCisgICAgICAgICAgICBzZWxmLndvcmtlcnNbd29ya2VyLm5hbWVdID0g
d29ya2VyCisKKyAgICAgICAgZm9yIHQgaW4gYWxsX3Rlc3RzOgorICAgICAgICAgICAgYnJva2Vy
LnBvc3RfbWVzc2FnZSgndGVzdF9zdWl0ZScsIHQpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uo
bnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisK
KyAgICAgICAgYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQorICAgICAgICBzdG9wID0gdGltZS50
aW1lKCkKKyAgICAgICAgc2VsZi5ydW5uZXIuc3VtbWFyaXplKHNlbGYucmVzdWx0LCBzdG9wIC0g
c2VsZi5ydW5uZXIuc3RhcnQpCisgICAgICAgIF9sb2cuaW5mbygnc2VyaWFsIHBhcnQ6ICUuM2Yg
c2Vjb25kcycgJSAobWlkZGxlIC0gc2VsZi5ydW5uZXIuc3RhcnQpKQorCisgICAgICAgIHJldHVy
biBzZWxmLnJlc3VsdAorCisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAgIHJldHVybiBu
b3Qgc2VsZi53b3JrZXJzCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc3Jj
LCB0ZXN0X25hbWUsIHRlc3RfdGltZSwgZXJyKToKKyAgICAgICAgc2VsZi5yZXN1bHQuX3dyaXRl
X3Jlc3VsdCh0ZXN0X25hbWUsIHRlc3RfdGltZSwgZXJyKQorCisgICAgZGVmIGhhbmRsZV9kb25l
KHNlbGYsIHNyYyk6CisgICAgICAgIGRlbCBzZWxmLndvcmtlcnNbc3JjXQorCisKK2NsYXNzIFBh
cmFsbGVsV29ya2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6CisgICAg
ZGVmIHJ1bihzZWxmLCBwb3J0PU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdXBl
cihQYXJhbGxlbFdvcmtlciwgc2VsZikucnVuKHBvcnQpCisgICAgICAgIGZpbmFsbHk6CisgICAg
ICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2RvbmUnKQorCisg
ICAgZGVmIGhhbmRsZV90ZXN0X3N1aXRlKHNlbGYsIHNyYywgdGVzdF9zdWl0ZV9uYW1lKToKKyAg
ICAgICAgbG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRU
ZXN0c0Zyb21OYW1lKHRlc3Rfc3VpdGVfbmFtZSwgTm9uZSkKKyAgICAgICAgcmVzdWx0ID0gV29y
a2VyVGVzdFJlc3VsdChzZWxmLl93b3JrZXJfY29ubmVjdGlvbikKKyAgICAgICAgc3VpdGUucnVu
KHJlc3VsdCkKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmLCBzcmMpOgorICAgICAgICBzZWxm
LnN0b3BfaGFuZGxpbmdfbWVzc2FnZXMoKQorCisKK2NsYXNzIFdvcmtlclRlc3RSZXN1bHQoVGVz
dFJlc3VsdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtlcl9jb25uZWN0aW9uKToKKyAg
ICAgICAgc2VsZi5fc3RkZXJyX2J1ZmZlciA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAg
c3VwZXIoV29ya2VyVGVzdFJlc3VsdCwgc2VsZikuX19pbml0X18oc2VsZi5fc3RkZXJyX2J1ZmZl
ciwgMCwgVHJ1ZSwgMCkKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24gPSB3b3JrZXJf
Y29ubmVjdGlvbgorCisgICAgZGVmIF93cml0ZV9yZXN1bHQoc2VsZiwgdGVzdF9uYW1lLCB0ZXN0
X3RpbWUsIGVycj1Ob25lKToKKyAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9t
ZXNzYWdlKCdmaW5pc2hlZF90ZXN0JywgdGVzdF9uYW1lLCB0ZXN0X3RpbWUsIGVycikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126445</attachid>
            <date>2012-02-09 20:49:00 -0800</date>
            <delta_ts>2012-02-23 11:23:03 -0800</delta_ts>
            <desc>dramatically cleaned up patch</desc>
            <filename>bug-78185-20120209204859.patch</filename>
            <type>text/plain</type>
            <size>5459</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3Mjk1CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rlc3QvbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5
CmluZGV4IGU4YzdmNzYzMTViYjRhMmFlZDM2ODUyZmJlOGQzY2VlMTZjN2VjYTEuLmRmMzc0YmRm
MDUxMzUwOTE2MGZmYWYzZWYxNWY3ZDdhY2E5OGQ3OGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVz
dC9tYWluLnB5CkBAIC05Miw2ICs5Miw5IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogCiAgICAg
ZGVmIHBhcnNlX2FyZ3Moc2VsZiwgYXJndj1Ob25lKToKICAgICAgICAgcGFyc2VyID0gb3B0cGFy
c2UuT3B0aW9uUGFyc2VyKHVzYWdlPSd1c2FnZTogJXByb2cgW29wdGlvbnNdIFthcmdzLi4uXScp
CisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctaicsICctLWpvYnMnLCBhY3Rpb249J3N0b3Jl
JywgdHlwZT1pbnQsIGRlZmF1bHQ9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
bnVtYmVyIG9mIHRlc3RzIHRvIHJ1biBpbiBwYXJhbGxlbCAoZGVmYXVsdCAlZGVmYXVsdCknKQor
CiAgICAgICAgIGdyb3VwID0gb3B0cGFyc2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnT3B0aW9ucyBm
b3IgY29udHJvbGxpbmcgd2hhdCBpcyBwcmludGVkJykKICAgICAgICAgZ3JvdXAuYWRkX29wdGlv
bignLXEnLCAnLS1xdWlldCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIHF1aWV0bHkgKGVycm9ycywgd2Fybmlu
Z3MsIGFuZCBwcm9ncmVzcyBvbmx5KScpLApAQCAtNDA4LDYgKzQxMSw4IEBAIGNsYXNzIFRlc3RS
dW5uZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkJyb2tlckNsaWVudCk6CiAgICAgICAgIHNlbGYu
b3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KICAgICAgICAg
c2VsZi5zdGFydCA9IHN0YXJ0CisgICAgICAgIHNlbGYucmVzdWx0ID0gTm9uZQorICAgICAgICBz
ZWxmLndvcmtlcnMgPSB7fQogICAgICAgICBzZWxmLm51bV90ZXN0cyA9IE5vbmUKICAgICAgICAg
c2VsZi5fYnVmZmVyID0gJycKIApAQCAtNDE2LDI0ICs0MjEsNjAgQEAgY2xhc3MgVGVzdFJ1bm5l
cihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQnJva2VyQ2xpZW50KToKIAogICAgIGRlZiBydW4oc2Vs
ZiwgdGVzdF9uYW1lcyk6CiAgICAgICAgIHNlbGYubnVtX3Rlc3RzID0gbGVuKHRlc3RfbmFtZXMp
CisKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLmpvYnMgPiAxOgorICAgICAgICAgICAgd29ya2Vy
X21vZGVsID0gJ3Byb2Nlc3NlcycKKyAgICAgICAgICAgIF9sb2cuaW5mbygnUnVubmluZyB1cCB0
byAlZCB0ZXN0cyBpbiBwYXJhbGxlbC4nICUgc2VsZi5vcHRpb25zLmpvYnMpCisgICAgICAgICAg
ICBydW5uZXIgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3b3JrZXJfbW9kZWwg
PSAnaW5saW5lJworICAgICAgICAgICAgX2xvZy5pbmZvKCdSdW5uaW5nIHRlc3RzIGlubGluZS4n
KQorICAgICAgICAgICAgcnVubmVyID0gc2VsZgorCisgICAgICAgIGJyb2tlciA9IG1hbmFnZXJf
d29ya2VyX2Jyb2tlci5nZXQod29ya2VyX21vZGVsLCBzZWxmLCBXb3JrZXIpCiAgICAgICAgIGxv
YWRlciA9IFRlc3RMb2FkZXIoKQotICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0
KCkKKyAgICAgICAgc2VsZi5yZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKworICAgICAg
ICBmb3IgaSBpbiByYW5nZShzZWxmLm9wdGlvbnMuam9icyk6CisgICAgICAgICAgICB3b3JrZXIg
PSBicm9rZXIuc3RhcnRfd29ya2VyKGludChpKSArIDEsIHBvcnQ9cnVubmVyKQorICAgICAgICAg
ICAgc2VsZi53b3JrZXJzW3dvcmtlci5uYW1lXSA9IHdvcmtlcgorCisgICAgICAgIGZvciB0IGlu
IHRlc3RfbmFtZXM6CisgICAgICAgICAgICBicm9rZXIucG9zdF9tZXNzYWdlKCd0ZXN0JywgdCkK
KworICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLm9wdGlvbnMuam9icyk6CisgICAgICAgICAg
ICBicm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykKKworICAgICAgICB0cnk6CisgICAgICAgICAg
ICBicm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVy
cnVwdDoKKyAgICAgICAgICAgIGZvciB3b3JrZXIgaW4gc2VsZi53b3JrZXJzLnZhbHVlcygpOgor
ICAgICAgICAgICAgICAgIHdvcmtlci5jYW5jZWwoKQorICAgICAgICAgICAgcmFpc2UKIAogICAg
ICAgICBzdG9wID0gdGltZS50aW1lKCkKLSAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiB0ZXN0X25h
bWVzOgotICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgICAgICAg
ICAgc2VsZi5zdHJlYW0ud3JpdGUodGVzdF9uYW1lKQotICAgICAgICAgICAgbnVtX2ZhaWx1cmVz
ID0gbGVuKHJlc3VsdC5mYWlsdXJlcykKLSAgICAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkK
LSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSh0ZXN0X25hbWUsIE5vbmUpLnJ1
bihyZXN1bHQpCi0gICAgICAgICAgICBzdG9wID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIGVy
ciA9IE5vbmUKLSAgICAgICAgICAgIGlmIGxlbihyZXN1bHQuZmFpbHVyZXMpID4gbnVtX2ZhaWx1
cmVzOgotICAgICAgICAgICAgICAgIGVyciA9IHJlc3VsdC5mYWlsdXJlc1tudW1fZmFpbHVyZXNd
WzFdCi0gICAgICAgICAgICBzZWxmLl93cml0ZV9yZXN1bHQocmVzdWx0LCB0ZXN0X25hbWUsIHN0
b3AgLSBzdGFydCwgZXJyKQotCi0gICAgICAgIHNlbGYuX3dyaXRlX3N1bW1hcnkocmVzdWx0LCBz
dG9wIC0gc2VsZi5zdGFydCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBzZWxmLl93
cml0ZV9zdW1tYXJ5KHNlbGYucmVzdWx0LCBzdG9wIC0gc2VsZi5zdGFydCkKKyAgICAgICAgcmV0
dXJuIHNlbGYucmVzdWx0CisKKyAgICBkZWYgaXNfZG9uZShzZWxmKToKKyAgICAgICAgcmV0dXJu
IG5vdCBzZWxmLndvcmtlcnMKKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCBz
cmMsIHRlc3RfbmFtZSwgdGVzdF90aW1lLCBlcnIpOgorICAgICAgICBzZWxmLnJlc3VsdC50ZXN0
c1J1biArPSAxCisgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgIHNlbGYucmVzdWx0LmZhaWx1
cmVzLmFwcGVuZCgodGVzdF9uYW1lLCBlcnIpKQorICAgICAgICBzZWxmLl93cml0ZV9yZXN1bHQo
c2VsZi5yZXN1bHQsIHRlc3RfbmFtZSwgdGVzdF90aW1lLCBlcnIpCisKKyAgICBkZWYgaGFuZGxl
X2RvbmUoc2VsZiwgc3JjKToKKyAgICAgICAgX2xvZy5kZWJ1ZygnJXMgZG9uZScgJSBzcmMpCisg
ICAgICAgIGRlbCBzZWxmLndvcmtlcnNbc3JjXQorCisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24o
c2VsZiwgc291cmNlLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBzdGFjayk6Cisg
ICAgICAgIF9sb2cuZXJyb3IoIiVzIHJhaXNlZCAlcygnJXMnKToiICUgKAorICAgICAgICAgICAg
ICAgICAgIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fdmFsdWUuX19jbGFz
c19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgIHN0cihleGNlcHRpb25fdmFsdWUpKSkK
KyAgICAgICAgcmFpc2UgZXhjZXB0aW9uX3R5cGUoZXhjZXB0aW9uX3ZhbHVlKQogCiAgICAgZGVm
IF9lcmFzZShzZWxmKToKICAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgpAQCAtNDcwLDYgKzUxMSw4
IEBAIGNsYXNzIFRlc3RSdW5uZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkJyb2tlckNsaWVudCk6
CiAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJyAgICAnICsgbGluZSArICdcbicp
CiAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnXG4nKQogICAgICAgICBlbGlmIHNlbGYu
b3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLmpvYnMgPiAxOgor
ICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHRlc3RfbmFtZSkKICAgICAgICAgICAg
IHNlbGYuc3RyZWFtLndyaXRlKG1zZyArICdcbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICBzZWxmLl93cml0ZV9zdGF0dXMoc2VsZi5udW1fdGVzdHMsIHJlc3VsdC50ZXN0c1J1biwgbGVu
KHJlc3VsdC5mYWlsdXJlcykpCkBAIC00OTEsMyArNTM0LDI5IEBAIGNsYXNzIFRlc3RSdW5uZXIo
bWFuYWdlcl93b3JrZXJfYnJva2VyLkJyb2tlckNsaWVudCk6CiAgICAgICAgICAgICBzZWxmLnN0
cmVhbS53cml0ZSgnMSB0ZXN0IHJhbiBpbiAlczsgaXQgZmFpbGVkLlxuJyAlICh0b3RhbF9kZWxh
eSkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnMSB0ZXN0
IHJhbiBpbiAlczsgaXQgcGFzc2VkLlxuJyAlICh0b3RhbF9kZWxheSkpCisKKworY2xhc3MgV29y
a2VyKG1hbmFnZXJfd29ya2VyX2Jyb2tlci5BYnN0cmFjdFdvcmtlcik6CisgICAgZGVmIHJ1bihz
ZWxmLCBydW5uZXI9Tm9uZSk6CisgICAgICAgIHNlbGYucnVubmVyID0gcnVubmVyCisgICAgICAg
IHNlbGYubG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYucmVzdWx0ID0gdW5pdHRl
c3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1cGVyKFdvcmtlciwg
c2VsZikucnVuKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9j
b25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZG9uZScpCisKKyAgICBkZWYgaGFuZGxlX3Rlc3Qoc2Vs
Ziwgc3JjLCB0ZXN0X25hbWUpOgorICAgICAgICBpZiBzZWxmLnJ1bm5lciBhbmQgc2VsZi5ydW5u
ZXIub3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgc2VsZi5ydW5uZXIuc3RyZWFtLndyaXRl
KHRlc3RfbmFtZSArICcgLi4uICcpCisgICAgICAgIG51bV9mYWlsdXJlcyA9IGxlbihzZWxmLnJl
c3VsdC5mYWlsdXJlcykKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxm
LmxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSh0ZXN0X25hbWUsIE5vbmUpLnJ1bihzZWxmLnJlc3Vs
dCkKKyAgICAgICAgc3RvcCA9IHRpbWUudGltZSgpCisgICAgICAgIGVyciA9IE5vbmUKKyAgICAg
ICAgaWYgbGVuKHNlbGYucmVzdWx0LmZhaWx1cmVzKSA+IG51bV9mYWlsdXJlczoKKyAgICAgICAg
ICAgIGVyciA9IHNlbGYucmVzdWx0LmZhaWx1cmVzW251bV9mYWlsdXJlc11bMV0KKyAgICAgICAg
c2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdmaW5pc2hlZF90ZXN0JywgdGVz
dF9uYW1lLCBzdG9wIC0gc3RhcnQsIGVycikKKworICAgIGRlZiBoYW5kbGVfc3RvcChzZWxmLCBz
cmMpOgorICAgICAgICBzZWxmLnN0b3BfaGFuZGxpbmdfbWVzc2FnZXMoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128514</attachid>
            <date>2012-02-23 11:23:07 -0800</date>
            <delta_ts>2012-02-24 20:10:03 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-78185-20120223112305.patch</filename>
            <type>text/plain</type>
            <size>15600</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NTE1CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weQppbmRleCBjNjNm
ZjM1NTVhZTE4ZTcwMTMwMjE5MGI3YmFiN2U5ZGVlN2E4N2FkLi4xN2U2MzFkN2I0ZjFjNzUwMjVl
YTU4OTU5MDE5YWU2NzFlNWQ1NzM3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHkKQEAgLTE1Miw3ICsx
NTIsNyBAQCBjbGFzcyBFeGVjdXRpdmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAg
b3V0cHV0ID0gZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChjb21tYW5kX2xpbmUoJ2Vj
aG8nLCB1bmljb2RlX3Rvcl9pbnB1dCksIHF1aWV0PVRydWUsIGRlY29kZV9vdXRwdXQ9RmFsc2Up
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG91dHB1dCwgZW5jb2RlZF90b3IpCiAKLSAgICBk
ZWYgdGVzdF9raWxsX3Byb2Nlc3Moc2VsZik6CisgICAgZGVmIHNlcmlhbF90ZXN0X2tpbGxfcHJv
Y2VzcyhzZWxmKToKICAgICAgICAgZXhlY3V0aXZlID0gRXhlY3V0aXZlKCkKICAgICAgICAgcHJv
Y2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4obmV2ZXJfZW5kaW5nX2NvbW1hbmQoKSwgc3Rkb3V0PXN1
YnByb2Nlc3MuUElQRSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jZXNzLnBvbGwoKSwg
Tm9uZSkgICMgUHJvY2VzcyBpcyBydW5uaW5nCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2Vy
X3dvcmtlcl9icm9rZXIucHkKaW5kZXggNzBjNDNhNmQ0MTVkMzQwNjViMTRhNzNlM2UxZGVmNzgx
ZmZhMjNmZi4uOTgzN2YwM2Y5OWVmYTkzYzkxNzA3MGI4MjQ1N2U4NzIwMDEzYzE5ZCAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFu
YWdlcl93b3JrZXJfYnJva2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQpAQCAtMTYwLDE4ICsx
NjAsMTggQEAgY2xhc3MgX0Jyb2tlcihvYmplY3QpOgogICAgICAgICBxdWV1ZSA9IHNlbGYuX2dl
dF9xdWV1ZV9mb3JfdG9waWModG9waWNfbmFtZSkKICAgICAgICAgcXVldWUucHV0KF9NZXNzYWdl
LmR1bXBzKG1lc3NhZ2UpKQogCi0gICAgZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgdG9waWNf
bmFtZSwgY2xpZW50LCBkZWxheV9zZWNzPU5vbmUpOgorICAgIGRlZiBydW5fbWVzc2FnZV9sb29w
KHNlbGYsIHRvcGljX25hbWUsIGNsaWVudCwgZGVsYXlfc2Vjcz1Ob25lLCBpZGxlcj1Ob25lKToK
ICAgICAgICAgIiIiTG9vcCBwcm9jZXNzaW5nIG1lc3NhZ2VzIHVudGlsIGNsaWVudC5pc19kb25l
KCkgb3IgZGVsYXkgcGFzc2VzLgogCiAgICAgICAgIFRvIHJ1biBpbmRlZmluaXRlbHksIHNldCBk
ZWxheV9zZWNzIHRvIE5vbmUuIiIiCiAgICAgICAgIGFzc2VydCBkZWxheV9zZWNzIGlzIE5vbmUg
b3IgZGVsYXlfc2VjcyA+IDAKLSAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9waWNfbmFtZSwgY2xp
ZW50LCBibG9jaz1UcnVlLCBkZWxheV9zZWNzPWRlbGF5X3NlY3MpCisgICAgICAgIHNlbGYuX3J1
bl9sb29wKHRvcGljX25hbWUsIGNsaWVudCwgYmxvY2s9VHJ1ZSwgZGVsYXlfc2Vjcz1kZWxheV9z
ZWNzLCBpZGxlcj1pZGxlcikKIAogICAgIGRlZiBydW5fYWxsX3BlbmRpbmcoc2VsZiwgdG9waWNf
bmFtZSwgY2xpZW50KToKICAgICAgICAgIiIiUHJvY2VzcyBtZXNzYWdlcyB1bnRpbCBjbGllbnQu
aXNfZG9uZSgpIG9yIGNhbGxlciB3b3VsZCBibG9jay4iIiIKLSAgICAgICAgc2VsZi5fcnVuX2xv
b3AodG9waWNfbmFtZSwgY2xpZW50LCBibG9jaz1GYWxzZSwgZGVsYXlfc2Vjcz1Ob25lKQorICAg
ICAgICBzZWxmLl9ydW5fbG9vcCh0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrPUZhbHNlLCBkZWxh
eV9zZWNzPU5vbmUsIGlkbGVyPU5vbmUpCiAKLSAgICBkZWYgX3J1bl9sb29wKHNlbGYsIHRvcGlj
X25hbWUsIGNsaWVudCwgYmxvY2ssIGRlbGF5X3NlY3MpOgorICAgIGRlZiBfcnVuX2xvb3Aoc2Vs
ZiwgdG9waWNfbmFtZSwgY2xpZW50LCBibG9jaywgZGVsYXlfc2VjcywgaWRsZXIpOgogICAgICAg
ICBxdWV1ZSA9IHNlbGYuX2dldF9xdWV1ZV9mb3JfdG9waWModG9waWNfbmFtZSkKICAgICAgICAg
d2hpbGUgbm90IGNsaWVudC5pc19kb25lKCk6CiAgICAgICAgICAgICB0cnk6CkBAIC0xODAsNiAr
MTgwLDggQEAgY2xhc3MgX0Jyb2tlcihvYmplY3QpOgogICAgICAgICAgICAgICAgIHJldHVybgog
ICAgICAgICAgICAgbXNnID0gX01lc3NhZ2UubG9hZHMocykKICAgICAgICAgICAgIHNlbGYuX2Rp
c3BhdGNoX21lc3NhZ2UobXNnLCBjbGllbnQpCisgICAgICAgICAgICBpZiBpZGxlcjoKKyAgICAg
ICAgICAgICAgICBpZGxlcigpCiAKICAgICBkZWYgX2Rpc3BhdGNoX21lc3NhZ2Uoc2VsZiwgbWVz
c2FnZSwgY2xpZW50KToKICAgICAgICAgaWYgbm90IGhhc2F0dHIoY2xpZW50LCAnaGFuZGxlXycg
KyBtZXNzYWdlLm5hbWUpOgpAQCAtMjcwLDEyICsyNzIsMTQgQEAgY2xhc3MgQWJzdHJhY3RXb3Jr
ZXIoQnJva2VyQ2xpZW50KToKICAgICBkZWYgc3RvcF9oYW5kbGluZ19tZXNzYWdlcyhzZWxmKToK
ICAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKIAorICAgIGRlZiBzZXRfaW5saW5lX2FyZ3VtZW50
cyhzZWxmLCB3b3JrZXJfYXJndW1lbnRzKToKKyAgICAgICAgcGFzcworCiAgICAgZGVmIHJ1bihz
ZWxmKToKICAgICAgICAgIiIiQ2FsbGJhY2sgZm9yIHRoZSB3b3JrZXIgdG8gc3RhcnQgZXhlY3V0
aW5nLiBUeXBpY2FsbHkgZG9lcyBhbnkKICAgICAgICAgcmVtYWluaW5nIGluaXRpYWxpemF0aW9u
IGFuZCB0aGVuIGNhbGxzIGJyb2tlcl9jb25uZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3AoKS4iIiIK
ICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIiCiAgICAgICAgIF9sb2cuZGVidWcoIiVzIHN0YXJ0
aW5nIiAlIHNlbGYuX25hbWUpCi0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fd29y
a2VyX2Nvbm5lY3Rpb24ucnVuX21lc3NhZ2VfbG9vcCgpCiAgICAgICAgICAgICBpZiBub3Qgc2Vs
Zi5pc19kb25lKCk6CkBAIC0zNTQsNiArMzU4LDkgQEAgY2xhc3MgX1dvcmtlckNvbm5lY3Rpb24o
X0Jyb2tlckNvbm5lY3Rpb24pOgogICAgICAgICBzZWxmLl9jbGllbnQgPSB3b3JrZXJfY2xhc3Mo
c2VsZiwgd29ya2VyX2FyZ3VtZW50cykKICAgICAgICAgX0Jyb2tlckNvbm5lY3Rpb24uX19pbml0
X18oc2VsZiwgYnJva2VyLCBzZWxmLl9jbGllbnQsIEFOWV9XT1JLRVJfVE9QSUMsIE1BTkFHRVJf
VE9QSUMpCiAKKyAgICBkZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCBkZWxheV9zZWNzPU5vbmUp
OgorICAgICAgICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcChzZWxmLl9ydW5fdG9waWMs
IHNlbGYuX2NsaWVudCwgZGVsYXlfc2VjcywgaWRsZXI9c2VsZi55aWVsZF90b19icm9rZXIpCisK
ICAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2NsaWVudC5uYW1lKCkK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
b25maWdfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2NvbmZpZ191bml0dGVzdC5weQppbmRleCA1MWE3Nzk4NTAwNTY5MDEwMDg5OTBhMjU1MzI3
N2ZhYzE3YmYxZmU0Li4wOGI5YWYxNmMwZmY1YWUwM2JlNjk1ODJiYjc0MGI5YTZmYzQyODQ5IDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2NvbmZp
Z191bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2NvbmZpZ191bml0dGVzdC5weQpAQCAtNDAsNiArNDAsOSBAQCBpbXBvcnQgY29uZmlnCiAK
IAogY2xhc3MgQ29uZmlnVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNl
bGYpOgorICAgICAgICBjb25maWcuY2xlYXJfY2FjaGVkX2NvbmZpZ3VyYXRpb24oKQorCiAgICAg
ZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBjb25maWcuY2xlYXJfY2FjaGVkX2NvbmZpZ3Vy
YXRpb24oKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5Cmlu
ZGV4IDY2ODc2Y2M4Yzg4MDMwZmE1ODkxMjk1YjQ0ZmY4YTAxYTU5ZjM1Y2MuLjNhNGE3MmZkODYy
Yjg1OWY3YjRiOTliNzE1N2FhNTUzNjRlODRmMjEgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVz
dHNfaW50ZWdyYXRpb250ZXN0LnB5CkBAIC0yODEsMjIgKzI4MSwyMCBAQCBjbGFzcyBNYWluVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSwgU3RyZWFtVGVzdGluZ01peGluKToKICAgICAgICAgZm9yIGJh
dGNoIGluIGJhdGNoX3Rlc3RzX3J1bjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4o
YmF0Y2gpIDw9IDIsICclcyBoYWQgdG9vIG1hbnkgdGVzdHMnICUgJywgJy5qb2luKGJhdGNoKSkK
IAotICAgIGRlZiB0ZXN0X2NoaWxkX3Byb2Nlc3NfMShzZWxmKToKKyAgICBkZWYgc2VyaWFsX3Rl
c3RfY2hpbGRfcHJvY2Vzc18xKHNlbGYpOgogICAgICAgICBpZiBTSE9VTERfVEVTVF9QUk9DRVNT
RVM6CiAgICAgICAgICAgICBfLCBfLCByZWd1bGFyX291dHB1dCwgXyA9IGxvZ2dpbmdfcnVuKAog
ICAgICAgICAgICAgICAgIFsnLS1wcmludCcsICdjb25maWcnLCAnLS13b3JrZXItbW9kZWwnLCAn
cHJvY2Vzc2VzJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzEnXSkKICAgICAgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShhbnkoWydSdW5uaW5nIDEgJyBpbiBsaW5lIGZvciBsaW5lIGluIHJlZ3VsYXJf
b3V0cHV0LmJ1Zmxpc3RdKSkKIAotICAgIGRlZiB0ZXN0X2NoaWxkX3Byb2Nlc3Nlc18yKHNlbGYp
OgorICAgIGRlZiBzZXJpYWxfdGVzdF9jaGlsZF9wcm9jZXNzZXNfMihzZWxmKToKICAgICAgICAg
IyBUaGlzIHRlc3Qgc2VlbXMgdG8gZmFpbCBvbiB3aW4zMi4KLSAgICAgICAgaWYgc3lzLnBsYXRm
b3JtID09ICd3aW4zMic6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgU0hPVUxEX1RF
U1RfUFJPQ0VTU0VTOgogICAgICAgICAgICAgXywgXywgcmVndWxhcl9vdXRwdXQsIF8gPSBsb2dn
aW5nX3J1bigKICAgICAgICAgICAgICAgICBbJy0tcHJpbnQnLCAnY29uZmlnJywgJy0td29ya2Vy
LW1vZGVsJywgJ3Byb2Nlc3NlcycsICctLWNoaWxkLXByb2Nlc3NlcycsICcyJ10pCiAgICAgICAg
ICAgICBzZWxmLmFzc2VydFRydWUoYW55KFsnUnVubmluZyAyICcgaW4gbGluZSBmb3IgbGluZSBp
biByZWd1bGFyX291dHB1dC5idWZsaXN0XSkpCiAKLSAgICBkZWYgdGVzdF9jaGlsZF9wcm9jZXNz
ZXNfbWluKHNlbGYpOgorICAgIGRlZiBzZXJpYWxfdGVzdF9jaGlsZF9wcm9jZXNzZXNfbWluKHNl
bGYpOgogICAgICAgICBpZiBTSE9VTERfVEVTVF9QUk9DRVNTRVM6CiAgICAgICAgICAgICBfLCBf
LCByZWd1bGFyX291dHB1dCwgXyA9IGxvZ2dpbmdfcnVuKAogICAgICAgICAgICAgICAgIFsnLS1w
cmludCcsICdjb25maWcnLCAnLS13b3JrZXItbW9kZWwnLCAncHJvY2Vzc2VzJywgJy0tY2hpbGQt
cHJvY2Vzc2VzJywgJzInLCAncGFzc2VzJ10sCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rlc3QvbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5
CmluZGV4IDE0YzAwMTJmMzQ1MGYzYjM2ZGI4MmU4OGYxYTJkOGJmMjY3ZjZjZTIuLjk0YjFkMDkw
MjFiNzBkZGY1OTliZWRmZWVlNmFiOWU0N2Q2MjVmNWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVz
dC9tYWluLnB5CkBAIC05NCw2ICs5NCw5IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogCiAgICAg
ZGVmIHBhcnNlX2FyZ3Moc2VsZiwgYXJndj1Ob25lKToKICAgICAgICAgcGFyc2VyID0gb3B0cGFy
c2UuT3B0aW9uUGFyc2VyKHVzYWdlPSd1c2FnZTogJXByb2cgW29wdGlvbnNdIFthcmdzLi4uXScp
CisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctaicsICctLWpvYnMnLCBhY3Rpb249J3N0b3Jl
JywgdHlwZT1pbnQsIGRlZmF1bHQ9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
bnVtYmVyIG9mIHRlc3RzIHRvIHJ1biBpbiBwYXJhbGxlbCAoZGVmYXVsdCAlZGVmYXVsdCknKQor
CiAgICAgICAgIGdyb3VwID0gb3B0cGFyc2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnT3B0aW9ucyBm
b3IgY29udHJvbGxpbmcgd2hhdCBpcyBwcmludGVkJykKICAgICAgICAgZ3JvdXAuYWRkX29wdGlv
bignLXEnLCAnLS1xdWlldCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIHF1aWV0bHkgKGVycm9ycywgd2Fybmlu
Z3MsIGFuZCBwcm9ncmVzcyBvbmx5KScpLApAQCAtMTI2LDYgKzEyOSw3IEBAIGNsYXNzIFRlc3Rl
cihvYmplY3QpOgogCiAgICAgICAgIHNlbGYubG9hZGVyID0gVGVzdExvYWRlcigpCiAgICAgICAg
IHNlbGYubG9hZGVyLnJ1bl9yZWFsX2ludGVncmF0aW9uX3Rlc3RzID0gb3B0aW9ucy5ydW5fcmVh
bF9pbnRlZ3JhdGlvbnRlc3RzIG9yIG9wdGlvbnMuYWxsCisgICAgICAgIHNlbGYubG9hZGVyLnJ1
bl9zZXJpYWxfdGVzdHMgPSAob3B0aW9ucy5qb2JzID09IDEpIG9yIG9wdGlvbnMuYWxsCiAgICAg
ICAgIGlmIHNlbGYub3B0aW9ucy54bWw6CiAgICAgICAgICAgICBmcm9tIHdlYmtpdHB5LnRoaXJk
cGFydHkuYXV0b2luc3RhbGxlZC54bWxydW5uZXIgaW1wb3J0IFhNTFRlc3RSdW5uZXIKICAgICAg
ICAgICAgIHNlbGYucnVubmVyID0gWE1MVGVzdFJ1bm5lcihvdXRwdXQ9J3Rlc3Qtd2Via2l0cHkt
eG1sLXJlcG9ydHMnKQpAQCAtMzkxLDYgKzM5NSw3IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgog
Y2xhc3MgVGVzdExvYWRlcih1bml0dGVzdC5UZXN0TG9hZGVyKToKICAgICBkZWYgX19pbml0X18o
c2VsZik6CiAgICAgICAgIHNlbGYucnVuX3JlYWxfaW50ZWdyYXRpb25fdGVzdHMgPSBGYWxzZQor
ICAgICAgICBzZWxmLnJ1bl9zZXJpYWxfdGVzdHMgPSBUcnVlCiAgICAgICAgIHN1cGVyKFRlc3RM
b2FkZXIsIHNlbGYpLl9faW5pdF9fKCkKIAogICAgIGRlZiBnZXRUZXN0Q2FzZU5hbWVzKHNlbGYs
IHRlc3RDYXNlQ2xhc3MpOgpAQCAtMzk4LDcgKzQwMyw4IEBAIGNsYXNzIFRlc3RMb2FkZXIodW5p
dHRlc3QuVGVzdExvYWRlcik6CiAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihnZXRhdHRyKHRl
c3RDYXNlQ2xhc3MsIGF0dHJuYW1lKSwgJ19fY2FsbF9fJyk6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCiAgICAgICAgICAgICByZXR1cm4gKChhdHRybmFtZS5zdGFydHN3aXRoKCd0ZXN0
JykpIG9yCi0gICAgICAgICAgICAgICAgICAgIChzZWxmLnJ1bl9yZWFsX2ludGVncmF0aW9uX3Rl
c3RzIGFuZCBhdHRybmFtZS5zdGFydHN3aXRoKCdpbnRlZ3JhdGlvbl90ZXN0XycpKSkKKyAgICAg
ICAgICAgICAgICAgICAgKHNlbGYucnVuX3JlYWxfaW50ZWdyYXRpb25fdGVzdHMgYW5kIGF0dHJu
YW1lLnN0YXJ0c3dpdGgoJ2ludGVncmF0aW9uX3Rlc3RfJykpIG9yCisgICAgICAgICAgICAgICAg
ICAgIChzZWxmLnJ1bl9zZXJpYWxfdGVzdHMgYW5kIGF0dHJuYW1lLnN0YXJ0c3dpdGgoJ3Nlcmlh
bF90ZXN0XycpKSkKICAgICAgICAgdGVzdEZuTmFtZXMgPSBmaWx0ZXIoaXNUZXN0TWV0aG9kLCBk
aXIodGVzdENhc2VDbGFzcykpCiAgICAgICAgIHRlc3RGbk5hbWVzLnNvcnQoKQogICAgICAgICBy
ZXR1cm4gdGVzdEZuTmFtZXMKQEAgLTQwOSw2ICs0MTUsOCBAQCBjbGFzcyBUZXN0UnVubmVyKG1h
bmFnZXJfd29ya2VyX2Jyb2tlci5Ccm9rZXJDbGllbnQpOgogICAgICAgICBzZWxmLm9wdGlvbnMg
PSBvcHRpb25zCiAgICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCiAgICAgICAgIHNlbGYuc3Rh
cnQgPSBzdGFydAorICAgICAgICBzZWxmLnJlc3VsdCA9IE5vbmUKKyAgICAgICAgc2VsZi53b3Jr
ZXJzID0ge30KICAgICAgICAgc2VsZi5udW1fdGVzdHMgPSBOb25lCiAgICAgICAgIHNlbGYuX2J1
ZmZlciA9ICcnCiAKQEAgLTQxNiwyOSArNDI0LDc3IEBAIGNsYXNzIFRlc3RSdW5uZXIobWFuYWdl
cl93b3JrZXJfYnJva2VyLkJyb2tlckNsaWVudCk6CiAgICAgICAgIHJldHVybiAnbWFuYWdlcicK
IAogICAgIGRlZiBydW4oc2VsZiwgdGVzdF9uYW1lcyk6CisgICAgICAgIHBhcmFsbGVsID0gdGlt
ZS50aW1lKCkKICAgICAgICAgc2VsZi5udW1fdGVzdHMgPSBsZW4odGVzdF9uYW1lcykKKworICAg
ICAgICBpZiBzZWxmLm9wdGlvbnMuam9icyA+IDE6CisgICAgICAgICAgICB3b3JrZXJfbW9kZWwg
PSAncHJvY2Vzc2VzJworICAgICAgICAgICAgX2xvZy5pbmZvKCdSdW5uaW5nIHVwIHRvICVkIHRl
c3RzIGluIHBhcmFsbGVsLicgJSBzZWxmLm9wdGlvbnMuam9icykKKyAgICAgICAgICAgIHJ1bm5l
ciA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdvcmtlcl9tb2RlbCA9ICdpbmxp
bmUnCisgICAgICAgICAgICBfbG9nLmluZm8oJ1J1bm5pbmcgdGVzdHMgaW5saW5lLicpCisgICAg
ICAgICAgICBydW5uZXIgPSBzZWxmCisKKyAgICAgICAgYnJva2VyID0gbWFuYWdlcl93b3JrZXJf
YnJva2VyLmdldCh3b3JrZXJfbW9kZWwsIHNlbGYsIFdvcmtlcikKICAgICAgICAgbG9hZGVyID0g
VGVzdExvYWRlcigpCi0gICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAg
ICAgICBzZWxmLnJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisgICAgICAgIGZvciBp
IGluIHJhbmdlKHNlbGYub3B0aW9ucy5qb2JzKToKKyAgICAgICAgICAgIHdvcmtlciA9IGJyb2tl
ci5zdGFydF93b3JrZXIoaW50KGkpICsgMSkKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy5q
b2JzID09IDE6CisgICAgICAgICAgICAgICAgd29ya2VyLnNldF9pbmxpbmVfYXJndW1lbnRzKHJ1
bm5lcikKKyAgICAgICAgICAgIHNlbGYud29ya2Vyc1t3b3JrZXIubmFtZSgpXSA9IHdvcmtlcgor
CisgICAgICAgIGZvciB0IGluIHRlc3RfbmFtZXM6CisgICAgICAgICAgICBicm9rZXIucG9zdF9t
ZXNzYWdlKCd0ZXN0JywgdCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLm9wdGlvbnMu
am9icyk6CisgICAgICAgICAgICBicm9rZXIucG9zdF9tZXNzYWdlKCdzdG9wJykKKworICAgICAg
ICB0cnk6CisgICAgICAgICAgICBicm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCisgICAgICAgIGV4
Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGZvciB3b3JrZXIgaW4gc2VsZi53
b3JrZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHdvcmtlci5jYW5jZWwoKQorICAgICAg
ICAgICAgcmFpc2UKIAogICAgICAgICBzdG9wID0gdGltZS50aW1lKCkKLSAgICAgICAgZm9yIHRl
c3RfbmFtZSBpbiB0ZXN0X25hbWVzOgotICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLnZlcmJv
c2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUodGVzdF9uYW1lKQotICAgICAg
ICAgICAgbnVtX2ZhaWx1cmVzID0gbGVuKHJlc3VsdC5mYWlsdXJlcykKLSAgICAgICAgICAgIG51
bV9lcnJvcnMgPSBsZW4ocmVzdWx0LmVycm9ycykKLSAgICAgICAgICAgIHN0YXJ0ID0gdGltZS50
aW1lKCkKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSh0ZXN0X25hbWUsIE5v
bmUpLnJ1bihyZXN1bHQpCi0gICAgICAgICAgICBzdG9wID0gdGltZS50aW1lKCkKLSAgICAgICAg
ICAgIGVyciA9IE5vbmUKLSAgICAgICAgICAgIGZhaWx1cmUgPSBOb25lCi0gICAgICAgICAgICBp
ZiBsZW4ocmVzdWx0LmZhaWx1cmVzKSA+IG51bV9mYWlsdXJlczoKLSAgICAgICAgICAgICAgICBm
YWlsdXJlID0gcmVzdWx0LmZhaWx1cmVzW251bV9mYWlsdXJlc11bMV0KLSAgICAgICAgICAgIGVs
aWYgbGVuKHJlc3VsdC5lcnJvcnMpID4gbnVtX2Vycm9yczoKLSAgICAgICAgICAgICAgICBlcnIg
PSByZXN1bHQuZXJyb3JzW251bV9lcnJvcnNdWzFdCi0gICAgICAgICAgICBzZWxmLl93cml0ZV9y
ZXN1bHQocmVzdWx0LCB0ZXN0X25hbWUsIHN0b3AgLSBzdGFydCwgZmFpbHVyZSwgZXJyKQotCi0g
ICAgICAgIHNlbGYuX3dyaXRlX3N1bW1hcnkocmVzdWx0LCBzdG9wIC0gc2VsZi5zdGFydCkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBzZWxmLl93cml0ZV9zdW1tYXJ5KHNlbGYucmVz
dWx0LCBzdG9wIC0gc2VsZi5zdGFydCkKKyAgICAgICAgdG90YWxfdGltZSA9IHN0b3AgLSBzZWxm
LnN0YXJ0CisgICAgICAgIHBhcmFsbGVsX3RpbWUgPSBzdG9wIC0gcGFyYWxsZWwKKyAgICAgICAg
c2VyaWFsX3RpbWUgPSB0b3RhbF90aW1lIC0gcGFyYWxsZWxfdGltZQorICAgICAgICBpZiBzZWxm
Lm9wdGlvbnMuam9icyA+IDE6CisgICAgICAgICAgICBfbG9nLmluZm8oJyUuM2ZzIHdhcyBzcGVu
dCBydW5uaW5nIHNpbmdsZS10aHJlYWRlZCAoJWQlJSknICUKKyAgICAgICAgICAgICAgICAgICAg
KHNlcmlhbF90aW1lLCBpbnQoc2VyaWFsX3RpbWUgKiAxMDAgLyB0b3RhbF90aW1lKSkpCisgICAg
ICAgIHJldHVybiBzZWxmLnJlc3VsdAorCisgICAgZGVmIGlzX2RvbmUoc2VsZik6CisgICAgICAg
IHJldHVybiBub3Qgc2VsZi53b3JrZXJzCisKKyAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChz
ZWxmLCBzcmMsIHRlc3RfbmFtZSwgc3RhcnQpOgorICAgICAgICBpZiBzZWxmLm9wdGlvbnMudmVy
Ym9zZToKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHRlc3RfbmFtZSkKKworICAgIGRl
ZiBoYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHRlc3RfbmFtZSwgdGVzdF90aW1lLCBm
YWlsdXJlLCBlcnIpOgorICAgICAgICBzZWxmLnJlc3VsdC50ZXN0c1J1biArPSAxCisgICAgICAg
IGlmIGZhaWx1cmU6CisgICAgICAgICAgICBzZWxmLnJlc3VsdC5mYWlsdXJlcy5hcHBlbmQoKHRl
c3RfbmFtZSwgZmFpbHVyZSkpCisgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgIHNlbGYucmVz
dWx0LmVycm9ycy5hcHBlbmQoKHRlc3RfbmFtZSwgZXJyKSkKKyAgICAgICAgc2VsZi5fd3JpdGVf
cmVzdWx0KHNlbGYucmVzdWx0LCB0ZXN0X25hbWUsIHRlc3RfdGltZSwgZmFpbHVyZSwgZXJyKQor
CisgICAgZGVmIGhhbmRsZV9kb25lKHNlbGYsIHNyYyk6CisgICAgICAgIHNlbGYuX2VyYXNlKCkK
KyAgICAgICAgX2xvZy5kZWJ1ZygnJXMgZG9uZSBhZnRlciAlLjNmcycgJSAoc3JjLCB0aW1lLnRp
bWUoKSAtIHNlbGYuc3RhcnQpKQorICAgICAgICBkZWwgc2VsZi53b3JrZXJzW3NyY10KKworICAg
IGRlZiBoYW5kbGVfZXhjZXB0aW9uKHNlbGYsIHNvdXJjZSwgZXhjZXB0aW9uX3R5cGUsIGV4Y2Vw
dGlvbl92YWx1ZSwgc3RhY2spOgorICAgICAgICBfbG9nLmVycm9yKCIlcyByYWlzZWQgJXMoJyVz
Jyk6IiAlICgKKyAgICAgICAgICAgICAgICAgICBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uX3ZhbHVlLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICBz
dHIoZXhjZXB0aW9uX3ZhbHVlKSkpCisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl90eXBlKGV4Y2Vw
dGlvbl92YWx1ZSkKIAogICAgIGRlZiBfZXJhc2Uoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX2J1
ZmZlcjoKQEAgLTQ3MCwxMSArNTI2LDE3IEBAIGNsYXNzIFRlc3RSdW5uZXIobWFuYWdlcl93b3Jr
ZXJfYnJva2VyLkJyb2tlckNsaWVudCk6CiAgICAgICAgIGlmIGVyciBvciBmYWlsdXJlOgogICAg
ICAgICAgICAgaWYgbm90IHNlbGYub3B0aW9ucy52ZXJib3NlOgogICAgICAgICAgICAgICAgIHNl
bGYuX2VyYXNlKCkKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHRlc3RfbmFtZSArIG1z
ZyArICdcbicpCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBlcnIuc3BsaXRsaW5lcygpOgotICAg
ICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCcgICAgJyArIGxpbmUgKyAnXG4nKQorICAg
ICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUodGVzdF9uYW1lICsgbXNnICsgJzpcbicpCisgICAg
ICAgICAgICBpZiBmYWlsdXJlOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZhaWx1cmUu
c3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnICAg
ICcgKyBsaW5lICsgJ1xuJykKKyAgICAgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgICAgICBm
b3IgbGluZSBpbiBlcnIuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0
cmVhbS53cml0ZSgnICAgICcgKyBsaW5lICsgJ1xuJykKICAgICAgICAgICAgIHNlbGYuc3RyZWFt
LndyaXRlKCdcbicpCiAgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLnZlcmJvc2U6CisgICAgICAg
ICAgICBpZiBzZWxmLm9wdGlvbnMuam9icyA+IDE6CisgICAgICAgICAgICAgICAgc2VsZi5zdHJl
YW0ud3JpdGUodGVzdF9uYW1lKQogICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUobXNnICsg
J1xuJykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3N0YXR1cyhzZWxm
Lm51bV90ZXN0cywgcmVzdWx0LnRlc3RzUnVuLCBsZW4ocmVzdWx0LmZhaWx1cmVzKSwgbGVuKHJl
c3VsdC5lcnJvcnMpKQpAQCAtNDg4LDExICs1NTAsNTEgQEAgY2xhc3MgVGVzdFJ1bm5lcihtYW5h
Z2VyX3dvcmtlcl9icm9rZXIuQnJva2VyQ2xpZW50KToKICAgICAgICAgdG90YWxfZGVsYXkgPSAn
JS4zZiBzZWNvbmRzJyAlICh0b3RhbF90ZXN0X3RpbWUpCiAgICAgICAgIHJ1biA9IHJlc3VsdC50
ZXN0c1J1bgogICAgICAgICBmYWlsZWQgPSBsZW4ocmVzdWx0LmZhaWx1cmVzKQotICAgICAgICBp
ZiBydW4gPiAxIGFuZCBmYWlsZWQ6CisgICAgICAgIGVycmVkID0gbGVuKHJlc3VsdC5lcnJvcnMp
CisgICAgICAgIGlmIHJ1biA+IDEgYW5kIGZhaWxlZCBhbmQgZXJyZWQ6CisgICAgICAgICAgICBz
ZWxmLnN0cmVhbS53cml0ZSgnJWQgdGVzdHMgcmFuIGluICVzOyAlZCBmYWlsZWQsICVkIGVycm9y
ZWQgb3V0LlxuJyAlIChydW4sIHRvdGFsX2RlbGF5LCBmYWlsZWQsIGVycmVkKSkKKyAgICAgICAg
ZWxpZiBydW4gPiAxIGFuZCBmYWlsZWQ6CiAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgn
JWQgdGVzdHMgcmFuIGluICVzOyAlZCBmYWlsZWQuXG4nICUgKHJ1biwgdG90YWxfZGVsYXksIGZh
aWxlZCkpCisgICAgICAgIGVsaWYgcnVuID4gMSBhbmQgZXJyZWQ6CisgICAgICAgICAgICBzZWxm
LnN0cmVhbS53cml0ZSgnJWQgdGVzdHMgcmFuIGluICVzOyAlZCBlcnJvcmVkIG91dC5cbicgJSAo
cnVuLCB0b3RhbF9kZWxheSwgZXJyZWQpKQogICAgICAgICBlbGlmIHJ1biA+IDE6CiAgICAgICAg
ICAgICBzZWxmLnN0cmVhbS53cml0ZSgnJWQgdGVzdHMgcmFuIGluICVzOyBhbGwgcGFzc2VkLlxu
JyAlIChydW4sIHRvdGFsX2RlbGF5KSkKICAgICAgICAgZWxpZiBmYWlsZWQ6CiAgICAgICAgICAg
ICBzZWxmLnN0cmVhbS53cml0ZSgnMSB0ZXN0IHJhbiBpbiAlczsgaXQgZmFpbGVkLlxuJyAlICh0
b3RhbF9kZWxheSkpCisgICAgICAgIGVsaWYgZXJyZWQ6CisgICAgICAgICAgICBzZWxmLnN0cmVh
bS53cml0ZSgnMSB0ZXN0IHJhbiBpbiAlczsgaXQgZXJyb3JlZCBvdXQuXG4nICUgKHRvdGFsX2Rl
bGF5KSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCcxIHRl
c3QgcmFuIGluICVzOyBpdCBwYXNzZWQuXG4nICUgKHRvdGFsX2RlbGF5KSkKKworCitjbGFzcyBX
b3JrZXIobWFuYWdlcl93b3JrZXJfYnJva2VyLkFic3RyYWN0V29ya2VyKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgd29ya2VyX2Nvbm5lY3Rpb24sIHdvcmtlcl9udW1iZXIpOgorICAgICAgICBz
dXBlcihXb3JrZXIsIHNlbGYpLl9faW5pdF9fKHdvcmtlcl9jb25uZWN0aW9uLCB3b3JrZXJfbnVt
YmVyKQorICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgorICAgICAg
ICBzZWxmLl9uYW1lID0gJ3dvcmtlci8lZCcgJSB3b3JrZXJfbnVtYmVyCisKKyAgICBkZWYgcnVu
KHNlbGYpOgorICAgICAgICBzZWxmLmxvYWRlciA9IFRlc3RMb2FkZXIoKQorICAgICAgICBzZWxm
LnJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBzdXBlcihXb3JrZXIsIHNlbGYpLnJ1bigpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2RvbmUnKQorCisgICAgZGVm
IGhhbmRsZV90ZXN0KHNlbGYsIHNyYywgdGVzdF9uYW1lKToKKyAgICAgICAgc3RhcnQgPSB0aW1l
LnRpbWUoKQorICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3N0
YXJ0ZWRfdGVzdCcsIHRlc3RfbmFtZSwgc3RhcnQpCisgICAgICAgIG51bV9mYWlsdXJlcyA9IGxl
bihzZWxmLnJlc3VsdC5mYWlsdXJlcykKKyAgICAgICAgbnVtX2Vycm9ycyA9IGxlbihzZWxmLnJl
c3VsdC5lcnJvcnMpCisgICAgICAgIHNlbGYubG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKHRlc3Rf
bmFtZSwgTm9uZSkucnVuKHNlbGYucmVzdWx0KQorICAgICAgICBzdG9wID0gdGltZS50aW1lKCkK
KyAgICAgICAgZXJyID0gTm9uZQorICAgICAgICBmYWlsdXJlID0gTm9uZQorICAgICAgICBpZiBs
ZW4oc2VsZi5yZXN1bHQuZXJyb3JzKSA+IG51bV9lcnJvcnM6CisgICAgICAgICAgICBlcnIgPSBz
ZWxmLnJlc3VsdC5lcnJvcnNbbnVtX2Vycm9yc11bMV0KKyAgICAgICAgaWYgbGVuKHNlbGYucmVz
dWx0LmZhaWx1cmVzKSA+IG51bV9mYWlsdXJlczoKKyAgICAgICAgICAgIGZhaWx1cmUgPSBzZWxm
LnJlc3VsdC5mYWlsdXJlc1tudW1fZmFpbHVyZXNdWzFdCisgICAgICAgIHNlbGYuX3dvcmtlcl9j
b25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZmluaXNoZWRfdGVzdCcsIHRlc3RfbmFtZSwgc3RvcCAt
IHN0YXJ0LCBmYWlsdXJlLCBlcnIpCisKKyAgICBkZWYgaGFuZGxlX3N0b3Aoc2VsZiwgc3JjKToK
KyAgICAgICAgc2VsZi5zdG9wX2hhbmRsaW5nX21lc3NhZ2VzKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128842</attachid>
            <date>2012-02-24 20:10:06 -0800</date>
            <delta_ts>2012-06-26 17:04:35 -0700</delta_ts>
            <desc>Work in progress (includes rollup of work in 77687)</desc>
            <filename>bug-78185-20120224201005.patch</filename>
            <type>text/plain</type>
            <size>42065</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NTE1CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3Rl
c3Qtd2Via2l0cHkgYi9Ub29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkKaW5kZXggNDI5OGZlYWUy
MzczYTdiOGEzN2M0MGZiOWM4ZDA1NzQ2NWJkOTU2YS4uZTk1YTMwZGJkM2FiOGI5NjNlNzViOGI4
MzE1ZjUzNjA3MDA2OWYyNCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQpAQCAtMzcsMTggKzM3LDIzIEBAIGlt
cG9ydCBzeXMKIGZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCB2ZXJzaW9uX2NoZWNrCiBmcm9t
IHdlYmtpdHB5LnRlc3QgaW1wb3J0IG1haW4KIAotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
InRlc3Qtd2Via2l0cHkiKQotCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAK
IGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgd2Via2l0X3Jvb3QgPSBvcy5wYXRoLmRp
cm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19m
aWxlX18pKSkpCiAKLSAgICAjIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgdGVzdCBlYWNoIHBh
Y2thZ2Ugc2VwYXJhdGVseSB0byBhdm9pZCBuYW1pbmcgY29uZmxpY3RzLgotICAgIGRpcnMgPSBb
Ci0gICAgICAgIG9zLnBhdGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1NjcmlwdHMnKSwK
LSAgICAgICAgb3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnU291cmNlJywgJ1dlYktpdDInLCAn
U2NyaXB0cycpLAotICAgIF0KKyAgICB0ZXN0ZXIgPSBtYWluLlRlc3RlcihzeXMuc3RkZXJyKQor
ICAgIG9wdGlvbnMsIGFyZ3MgPSB0ZXN0ZXIucGFyc2VfYXJncyhzeXMuYXJndlsxOl0pCisgICAg
dGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQorICAgIHRlc3Rlci5jb25maWd1cmVfbG9nZ2luZygp
CisKKyAgICB0aGlyZHBhcnR5ID0gb3MucGF0aC5qb2luKCd3ZWJraXRweScsICd0aGlyZHBhcnR5
JykKKyAgICB0ZXN0ZXIuYWRkX3RyZWUob3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9vbHMn
LCAnU2NyaXB0cycpLCAnd2Via2l0cHknLAorICAgICAgICAgICAgICAgICAgICBbb3MucGF0aC5q
b2luKHRoaXJkcGFydHksICdhdXRvaW5zdGFsbGVkJyksCisgICAgICAgICAgICAgICAgICAgICBv
cy5wYXRoLmpvaW4odGhpcmRwYXJ0eSwgJ3NpbXBsZWpzb24nKSwKKyAgICAgICAgICAgICAgICAg
ICAgIG9zLnBhdGguam9pbih0aGlyZHBhcnR5LCAnQmVhdXRpZnVsU291cC5weScpLAorICAgICAg
ICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRoaXJkcGFydHksICdtb2NrLnB5JyldKQorICAg
IHRlc3Rlci5hZGRfdHJlZShvcy5wYXRoLmpvaW4od2Via2l0X3Jvb3QsICdTb3VyY2UnLCAnV2Vi
S2l0MicsICdTY3JpcHRzJyksICd3ZWJraXQyJykKIAogICAgICMgRklYTUU6IERvIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byB0ZXN0IFF1ZXVlU3RhdHVzU2VydmVyIG9uIFdpbmRvd3MgYXMgd2VsbD8K
ICAgICBhcHBlbmdpbmVfc2RrX3BhdGggPSAnL3Vzci9sb2NhbC9nb29nbGVfYXBwZW5naW5lJwpA
QCAtNTksMTcgKzY0LDEyIEBAIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgICAgIGZy
b20gZ29vZ2xlLmFwcGVuZ2luZS5kaXN0IGltcG9ydCB1c2VfbGlicmFyeQogICAgICAgICB1c2Vf
bGlicmFyeSgnZGphbmdvJywgJzEuMicpCiAgICAgICAgIGRldl9hcHBzZXJ2ZXIuZml4X3N5c19w
YXRoKCkKLSAgICAgICAgZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9v
bHMnLCAnUXVldWVTdGF0dXNTZXJ2ZXInKSkKKyAgICAgICAgdGVzdGVyLmFkZF90cmVlKG9zLnBh
dGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1F1ZXVlU3RhdHVzU2VydmVyJyksICcnKQog
ICAgIGVsc2U6CiAgICAgICAgIF9sb2cuaW5mbygnU2tpcHBpbmcgUXVldWVTdGF0dXNTZXJ2ZXIg
dGVzdHM7IHRoZSBHb29nbGUgQXBwRW5naW5lIFB5dGhvbiBTREsgaXMgbm90IGluc3RhbGxlZC4n
KQogCi0gICAgbWFpbi5UZXN0ZXIuY2xlYW5fcGFja2FnZXMoZGlycykKLQotICAgIHRlc3RlciA9
IG1haW4uVGVzdGVyKCkKLSAgICBvcHRpb25zLCBhcmdzID0gdGVzdGVyLnBhcnNlX2FyZ3Moc3lz
LmFyZ3YpCi0gICAgdGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQotCi0gICAgIyBNYWtlIHN1cmUg
UFlUSE9OUEFUSCBpcyBzZXQgdXAgY29ycmVjdGx5IHNvIHRoYXQgYWxsIG9mIHRoZSBpbXBvcnRz
IHdpbGwgd29yay4KLSAgICBzeXMucGF0aCA9IFtkIGZvciBkIGluIGRpcnMgaWYgZCBub3QgaW4g
c3lzLnBhdGhdICsgc3lzLnBhdGgKLQotICAgIHN5cy5leGl0KG5vdCB0ZXN0ZXIucnVuKGRpcnMs
IGFyZ3MpKQorICAgIHRyeToKKyAgICAgICAgc3lzLmV4aXQobm90IHRlc3Rlci5ydW4oYXJncykp
CisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBzeXMuc3RkZXJyLndyaXRl
KCdJbnRlcnJ1cHRlZCwgZXhpdGluZ1xuJykKKyAgICAgICAgc3lzLmV4aXQoMSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRl
c3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3Vu
aXR0ZXN0LnB5CmluZGV4IGM2M2ZmMzU1NWFlMThlNzAxMzAyMTkwYjdiYWI3ZTlkZWU3YTg3YWQu
LjE3ZTYzMWQ3YjRmMWM3NTAyNWVhNTg5NTkwMTlhZTY3MWU1ZDU3MzcgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0
dGVzdC5weQpAQCAtMTUyLDcgKzE1Miw3IEBAIGNsYXNzIEV4ZWN1dGl2ZVRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICBvdXRwdXQgPSBleGVjdXRpdmUucnVuX2FuZF90aHJvd19pZl9m
YWlsKGNvbW1hbmRfbGluZSgnZWNobycsIHVuaWNvZGVfdG9yX2lucHV0KSwgcXVpZXQ9VHJ1ZSwg
ZGVjb2RlX291dHB1dD1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3V0cHV0LCBl
bmNvZGVkX3RvcikKIAotICAgIGRlZiB0ZXN0X2tpbGxfcHJvY2VzcyhzZWxmKToKKyAgICBkZWYg
c2VyaWFsX3Rlc3Rfa2lsbF9wcm9jZXNzKHNlbGYpOgogICAgICAgICBleGVjdXRpdmUgPSBFeGVj
dXRpdmUoKQogICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihuZXZlcl9lbmRpbmdf
Y29tbWFuZCgpLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHByb2Nlc3MucG9sbCgpLCBOb25lKSAgIyBQcm9jZXNzIGlzIHJ1bm5pbmcKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFn
ZXJfd29ya2VyX2Jyb2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQppbmRleCA3MGM0M2E2ZDQxNWQz
NDA2NWIxNGE3M2UzZTFkZWY3ODFmZmEyM2ZmLi45ODM3ZjAzZjk5ZWZhOTNjOTE3MDcwYjgyNDU3
ZTg3MjAwMTNjMTlkIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJv
a2VyLnB5CkBAIC0xNjAsMTggKzE2MCwxOCBAQCBjbGFzcyBfQnJva2VyKG9iamVjdCk6CiAgICAg
ICAgIHF1ZXVlID0gc2VsZi5fZ2V0X3F1ZXVlX2Zvcl90b3BpYyh0b3BpY19uYW1lKQogICAgICAg
ICBxdWV1ZS5wdXQoX01lc3NhZ2UuZHVtcHMobWVzc2FnZSkpCiAKLSAgICBkZWYgcnVuX21lc3Nh
Z2VfbG9vcChzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQsIGRlbGF5X3NlY3M9Tm9uZSk6CisgICAg
ZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBkZWxheV9zZWNz
PU5vbmUsIGlkbGVyPU5vbmUpOgogICAgICAgICAiIiJMb29wIHByb2Nlc3NpbmcgbWVzc2FnZXMg
dW50aWwgY2xpZW50LmlzX2RvbmUoKSBvciBkZWxheSBwYXNzZXMuCiAKICAgICAgICAgVG8gcnVu
IGluZGVmaW5pdGVseSwgc2V0IGRlbGF5X3NlY3MgdG8gTm9uZS4iIiIKICAgICAgICAgYXNzZXJ0
IGRlbGF5X3NlY3MgaXMgTm9uZSBvciBkZWxheV9zZWNzID4gMAotICAgICAgICBzZWxmLl9ydW5f
bG9vcCh0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrPVRydWUsIGRlbGF5X3NlY3M9ZGVsYXlfc2Vj
cykKKyAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9waWNfbmFtZSwgY2xpZW50LCBibG9jaz1UcnVl
LCBkZWxheV9zZWNzPWRlbGF5X3NlY3MsIGlkbGVyPWlkbGVyKQogCiAgICAgZGVmIHJ1bl9hbGxf
cGVuZGluZyhzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQpOgogICAgICAgICAiIiJQcm9jZXNzIG1l
c3NhZ2VzIHVudGlsIGNsaWVudC5pc19kb25lKCkgb3IgY2FsbGVyIHdvdWxkIGJsb2NrLiIiIgot
ICAgICAgICBzZWxmLl9ydW5fbG9vcCh0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrPUZhbHNlLCBk
ZWxheV9zZWNzPU5vbmUpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHRvcGljX25hbWUsIGNsaWVu
dCwgYmxvY2s9RmFsc2UsIGRlbGF5X3NlY3M9Tm9uZSwgaWRsZXI9Tm9uZSkKIAotICAgIGRlZiBf
cnVuX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBibG9jaywgZGVsYXlfc2Vjcyk6Cisg
ICAgZGVmIF9ydW5fbG9vcChzZWxmLCB0b3BpY19uYW1lLCBjbGllbnQsIGJsb2NrLCBkZWxheV9z
ZWNzLCBpZGxlcik6CiAgICAgICAgIHF1ZXVlID0gc2VsZi5fZ2V0X3F1ZXVlX2Zvcl90b3BpYyh0
b3BpY19uYW1lKQogICAgICAgICB3aGlsZSBub3QgY2xpZW50LmlzX2RvbmUoKToKICAgICAgICAg
ICAgIHRyeToKQEAgLTE4MCw2ICsxODAsOCBAQCBjbGFzcyBfQnJva2VyKG9iamVjdCk6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBtc2cgPSBfTWVzc2FnZS5sb2FkcyhzKQog
ICAgICAgICAgICAgc2VsZi5fZGlzcGF0Y2hfbWVzc2FnZShtc2csIGNsaWVudCkKKyAgICAgICAg
ICAgIGlmIGlkbGVyOgorICAgICAgICAgICAgICAgIGlkbGVyKCkKIAogICAgIGRlZiBfZGlzcGF0
Y2hfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBjbGllbnQpOgogICAgICAgICBpZiBub3QgaGFzYXR0
cihjbGllbnQsICdoYW5kbGVfJyArIG1lc3NhZ2UubmFtZSk6CkBAIC0yNzAsMTIgKzI3MiwxNCBA
QCBjbGFzcyBBYnN0cmFjdFdvcmtlcihCcm9rZXJDbGllbnQpOgogICAgIGRlZiBzdG9wX2hhbmRs
aW5nX21lc3NhZ2VzKHNlbGYpOgogICAgICAgICBzZWxmLl9kb25lID0gVHJ1ZQogCisgICAgZGVm
IHNldF9pbmxpbmVfYXJndW1lbnRzKHNlbGYsIHdvcmtlcl9hcmd1bWVudHMpOgorICAgICAgICBw
YXNzCisKICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAiIiJDYWxsYmFjayBmb3IgdGhlIHdv
cmtlciB0byBzdGFydCBleGVjdXRpbmcuIFR5cGljYWxseSBkb2VzIGFueQogICAgICAgICByZW1h
aW5pbmcgaW5pdGlhbGl6YXRpb24gYW5kIHRoZW4gY2FsbHMgYnJva2VyX2Nvbm5lY3Rpb24ucnVu
X21lc3NhZ2VfbG9vcCgpLiIiIgogICAgICAgICBleGNlcHRpb25fbXNnID0gIiIKICAgICAgICAg
X2xvZy5kZWJ1ZygiJXMgc3RhcnRpbmciICUgc2VsZi5fbmFtZSkKLQogICAgICAgICB0cnk6CiAg
ICAgICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKCkKICAg
ICAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2RvbmUoKToKQEAgLTM1NCw2ICszNTgsOSBAQCBjbGFz
cyBfV29ya2VyQ29ubmVjdGlvbihfQnJva2VyQ29ubmVjdGlvbik6CiAgICAgICAgIHNlbGYuX2Ns
aWVudCA9IHdvcmtlcl9jbGFzcyhzZWxmLCB3b3JrZXJfYXJndW1lbnRzKQogICAgICAgICBfQnJv
a2VyQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBicm9rZXIsIHNlbGYuX2NsaWVudCwgQU5ZX1dP
UktFUl9UT1BJQywgTUFOQUdFUl9UT1BJQykKIAorICAgIGRlZiBydW5fbWVzc2FnZV9sb29wKHNl
bGYsIGRlbGF5X3NlY3M9Tm9uZSk6CisgICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fbWVzc2FnZV9s
b29wKHNlbGYuX3J1bl90b3BpYywgc2VsZi5fY2xpZW50LCBkZWxheV9zZWNzLCBpZGxlcj1zZWxm
LnlpZWxkX3RvX2Jyb2tlcikKKwogICAgIGRlZiBuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4g
c2VsZi5fY2xpZW50Lm5hbWUoKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRp
b250ZXN0LnB5CmluZGV4IDY2ODc2Y2M4Yzg4MDMwZmE1ODkxMjk1YjQ0ZmY4YTAxYTU5ZjM1Y2Mu
LjNhNGE3MmZkODYyYjg1OWY3YjRiOTliNzE1N2FhNTUzNjRlODRmMjEgMTAwNzU1Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdy
YXRpb250ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CkBAIC0yODEsMjIgKzI4MSwyMCBAQCBj
bGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgU3RyZWFtVGVzdGluZ01peGluKToKICAg
ICAgICAgZm9yIGJhdGNoIGluIGJhdGNoX3Rlc3RzX3J1bjoKICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShsZW4oYmF0Y2gpIDw9IDIsICclcyBoYWQgdG9vIG1hbnkgdGVzdHMnICUgJywgJy5q
b2luKGJhdGNoKSkKIAotICAgIGRlZiB0ZXN0X2NoaWxkX3Byb2Nlc3NfMShzZWxmKToKKyAgICBk
ZWYgc2VyaWFsX3Rlc3RfY2hpbGRfcHJvY2Vzc18xKHNlbGYpOgogICAgICAgICBpZiBTSE9VTERf
VEVTVF9QUk9DRVNTRVM6CiAgICAgICAgICAgICBfLCBfLCByZWd1bGFyX291dHB1dCwgXyA9IGxv
Z2dpbmdfcnVuKAogICAgICAgICAgICAgICAgIFsnLS1wcmludCcsICdjb25maWcnLCAnLS13b3Jr
ZXItbW9kZWwnLCAncHJvY2Vzc2VzJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzEnXSkKICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoWydSdW5uaW5nIDEgJyBpbiBsaW5lIGZvciBsaW5l
IGluIHJlZ3VsYXJfb3V0cHV0LmJ1Zmxpc3RdKSkKIAotICAgIGRlZiB0ZXN0X2NoaWxkX3Byb2Nl
c3Nlc18yKHNlbGYpOgorICAgIGRlZiBzZXJpYWxfdGVzdF9jaGlsZF9wcm9jZXNzZXNfMihzZWxm
KToKICAgICAgICAgIyBUaGlzIHRlc3Qgc2VlbXMgdG8gZmFpbCBvbiB3aW4zMi4KLSAgICAgICAg
aWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAg
aWYgU0hPVUxEX1RFU1RfUFJPQ0VTU0VTOgogICAgICAgICAgICAgXywgXywgcmVndWxhcl9vdXRw
dXQsIF8gPSBsb2dnaW5nX3J1bigKICAgICAgICAgICAgICAgICBbJy0tcHJpbnQnLCAnY29uZmln
JywgJy0td29ya2VyLW1vZGVsJywgJ3Byb2Nlc3NlcycsICctLWNoaWxkLXByb2Nlc3NlcycsICcy
J10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KFsnUnVubmluZyAyICcgaW4gbGlu
ZSBmb3IgbGluZSBpbiByZWd1bGFyX291dHB1dC5idWZsaXN0XSkpCiAKLSAgICBkZWYgdGVzdF9j
aGlsZF9wcm9jZXNzZXNfbWluKHNlbGYpOgorICAgIGRlZiBzZXJpYWxfdGVzdF9jaGlsZF9wcm9j
ZXNzZXNfbWluKHNlbGYpOgogICAgICAgICBpZiBTSE9VTERfVEVTVF9QUk9DRVNTRVM6CiAgICAg
ICAgICAgICBfLCBfLCByZWd1bGFyX291dHB1dCwgXyA9IGxvZ2dpbmdfcnVuKAogICAgICAgICAg
ICAgICAgIFsnLS1wcmludCcsICdjb25maWcnLCAnLS13b3JrZXItbW9kZWwnLCAncHJvY2Vzc2Vz
JywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzInLCAncGFzc2VzJ10sCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGVzdC9tYWluLnB5CmluZGV4IDc2ZGFjMGUzYjQ1ZGUyODg4YWMzOTliOGY5ODhjZDkxMTFlMTE2
OTYuLjk0YjFkMDkwMjFiNzBkZGY1OTliZWRmZWVlNmFiOWU0N2Q2MjVmNWMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGVzdC9tYWluLnB5CkBAIC0xLDMgKzEsNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEw
IENocmlzIEplcmRvbmVrIChjamVyZG9uZWtAd2Via2l0Lm9yZykKICMKICMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC0yNSw4MiArMjYsMTM5IEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9wdHBhcnNlCiBpbXBv
cnQgb3MKK2ltcG9ydCBwZGIKK2ltcG9ydCByZQogaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgc3lz
CitpbXBvcnQgdGltZQogaW1wb3J0IHRyYWNlYmFjawogaW1wb3J0IHVuaXR0ZXN0CiAKICMgTk9U
RTogV2UgaW50ZW50aW9uYWxseSBkbyBub3QgZGVwZW5kIG9uIGFueXRoaW5nIGVsc2UgaW4gd2Vi
a2l0cHkgaGVyZSB0byBhdm9pZCBicmVha2luZyB0ZXN0LXdlYmtpdHB5LgorZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMgaW1wb3J0IG1hbmFnZXJfd29ya2VyX2Jyb2tlcgog
CiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAotY2xhc3MgVGVzdGVyKG9i
amVjdCk6Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjbGVhbl9wYWNrYWdlcyhkaXJzKToK
LSAgICAgICAgIiIiRGVsZXRlIGFsbCAucHljIGZpbGVzIHVuZGVyIGRpcnMgdGhhdCBoYXZlIG5v
IC5weSBmaWxlLiIiIgotICAgICAgICBmb3IgZGlyX3RvX2NsZWFuIGluIGRpcnM6Ci0gICAgICAg
ICAgICBfbG9nLmRlYnVnKCJDbGVhbmluZyBvcnBoYW5lZCAqLnB5YyBmaWxlcyBmcm9tOiAlcyIg
JSBkaXJfdG9fY2xlYW4pCi0gICAgICAgICAgICBmb3IgZGlyX3BhdGgsIGRpcl9uYW1lcywgZmls
ZV9uYW1lcyBpbiBvcy53YWxrKGRpcl90b19jbGVhbik6Ci0gICAgICAgICAgICAgICAgZm9yIGZp
bGVfbmFtZSBpbiBmaWxlX25hbWVzOgotICAgICAgICAgICAgICAgICAgICBpZiBmaWxlX25hbWUu
ZW5kc3dpdGgoIi5weWMiKSBhbmQgZmlsZV9uYW1lWzotMV0gbm90IGluIGZpbGVfbmFtZXM6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgs
IGZpbGVfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuaW5mbygiRGVsZXRpbmcg
b3JwaGFuICoucHljIGZpbGU6ICVzIiAlIGZpbGVfcGF0aCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9zLnJlbW92ZShmaWxlX3BhdGgpCitURVNUX0RFU0NSSVBUSU9OX1JFR0VYUCA9IHJlLmNv
bXBpbGUoIihcdyspIFwoKFtcdy5dKylcKSIpCiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0g
ICAgICAgIHNlbGYuX3ZlcmJvc2l0eSA9IDEKIAotICAgIGRlZiBwYXJzZV9hcmdzKHNlbGYsIGFy
Z3YpOgorZGVmIF90ZXN0X25hbWUodGVzdCk6CisgICAgbSA9IFRFU1RfREVTQ1JJUFRJT05fUkVH
RVhQLm1hdGNoKHN0cih0ZXN0KSkKKyAgICByZXR1cm4gIiVzLiVzIiAlIChtLmdyb3VwKDIpLCBt
Lmdyb3VwKDEpKQorCisKK2NsYXNzIFRlc3RUcmVlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHRvcF9kaXJlY3RvcnksIHN0YXJ0aW5nX3N1YmRpcmVjdG9yeSwgaWdub3JlX2xpc3Qp
OgorICAgICAgICBzZWxmLnRvcF9kaXJlY3RvcnkgPSBvcy5wYXRoLnJlYWxwYXRoKHRvcF9kaXJl
Y3RvcnkpCisgICAgICAgIHNlbGYuc2VhcmNoX2RpcmVjdG9yeSA9IHNlbGYudG9wX2RpcmVjdG9y
eQorICAgICAgICBzZWxmLmlnbm9yZV9saXN0ID0gW29zLnBhdGguam9pbihzZWxmLnRvcF9kaXJl
Y3RvcnksIHgpIGZvciB4IGluIGlnbm9yZV9saXN0XQorICAgICAgICBzZWxmLnRvcF9wYWNrYWdl
ID0gJycKKyAgICAgICAgaWYgc3RhcnRpbmdfc3ViZGlyZWN0b3J5OgorICAgICAgICAgICAgc2Vs
Zi50b3BfcGFja2FnZSA9IHN0YXJ0aW5nX3N1YmRpcmVjdG9yeS5yZXBsYWNlKG9zLnNlcCwgJy4n
KSArICcuJworICAgICAgICAgICAgc2VsZi5zZWFyY2hfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2lu
KHNlbGYudG9wX2RpcmVjdG9yeSwgc3RhcnRpbmdfc3ViZGlyZWN0b3J5KQorCisgICAgZGVmIGNs
ZWFuKHNlbGYpOgorICAgICAgICAiIiJEZWxldGUgYWxsIC5weWMgZmlsZXMgaW4gdGhlIHRyZWUg
dGhhdCBoYXZlIG5vIG1hdGNoaW5nIC5weSBmaWxlLiIiIgorICAgICAgICBfbG9nLmRlYnVnKCJD
bGVhbmluZyBvcnBoYW5lZCAqLnB5YyBmaWxlcyBmcm9tOiAlcyIgJSBzZWxmLnNlYXJjaF9kaXJl
Y3RvcnkpCisgICAgICAgIGZvciBkaXJfcGF0aCwgZGlyX25hbWVzLCBmaWxlX25hbWVzIGluIG9z
LndhbGsoc2VsZi5zZWFyY2hfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICMgRklYTUU6IFNob3Vs
ZCB3ZSBiZSBjbGVhbmluZyB0aGUgaWdub3JlZCBzdWJkaXJlY3RvcmllcyBhcyB3ZWxsPworICAg
ICAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBmaWxlX25hbWVzOgorICAgICAgICAgICAgICAgIGlm
IGZpbGVfbmFtZS5lbmRzd2l0aCgiLnB5YyIpIGFuZCBmaWxlX25hbWVbOi0xXSBub3QgaW4gZmls
ZV9uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGRp
cl9wYXRoLCBmaWxlX25hbWUpCisgICAgICAgICAgICAgICAgICAgIF9sb2cuaW5mbygiRGVsZXRp
bmcgb3JwaGFuICoucHljIGZpbGU6ICVzIiAlIGZpbGVfcGF0aCkKKyAgICAgICAgICAgICAgICAg
ICAgb3MucmVtb3ZlKGZpbGVfcGF0aCkKKworICAgIGRlZiBmaW5kX21vZHVsZXMoc2VsZiwgZGly
X3RvX3NlYXJjaCwgc3VmZml4ZXMpOgorICAgICAgICBtb2R1bGVzID0gW10KKyAgICAgICAgZm9y
IGRpcl9wYXRoLCBfLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhkaXJfdG9fc2VhcmNoKToKKyAgICAg
ICAgICAgIGRpcl9wYXRoID0gb3MucGF0aC5qb2luKGRpcl9wYXRoLCAnJykKKyAgICAgICAgICAg
IHBhY2thZ2UgPSBkaXJfcGF0aC5yZXBsYWNlKHNlbGYudG9wX2RpcmVjdG9yeSArIG9zLnNlcCwg
JycpLnJlcGxhY2Uob3Muc2VwLCAnLicpCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlbmFtZXM6
CisgICAgICAgICAgICAgICAgaWYgYW55KGYuZW5kc3dpdGgoc3VmZml4KSBmb3Igc3VmZml4IGlu
IHN1ZmZpeGVzKToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQocGFja2FnZSAr
IGYucmVwbGFjZSgnLnB5JywgJycpKQorICAgICAgICByZXR1cm4gbW9kdWxlcworCisKK2NsYXNz
IExvYWRlckVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RlcihvYmpl
Y3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0pOgorICAgICAgICBzZWxmLnRyZWVz
ID0gW10KKyAgICAgICAgc2VsZi5sb2FkZXIgPSBOb25lCisgICAgICAgIHNlbGYucnVubmVyID0g
Tm9uZQorICAgICAgICBzZWxmLmxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgICAgICBzZWxm
LnN0cmVhbSA9IHN0cmVhbQorCisgICAgZGVmIHBhcnNlX2FyZ3Moc2VsZiwgYXJndj1Ob25lKToK
ICAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPSd1c2FnZTogJXBy
b2cgW29wdGlvbnNdIFthcmdzLi4uXScpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYScs
ICctLWFsbCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J3J1biBhbGwgdGhlIHRlc3RzJyksCi0gICAgICAgIHBhcnNl
ci5hZGRfb3B0aW9uKCctYycsICctLWNvdmVyYWdlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVm
YXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZ2VuZXJhdGUgY29k
ZSBjb3ZlcmFnZSBpbmZvIChyZXF1aXJlcyBodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY292
ZXJhZ2UpJyksCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcScsICctLXF1aWV0JywgYWN0
aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0ncnVuIHF1aWV0bHkgKGVycm9ycywgd2FybmluZ3MsIGFuZCBwcm9ncmVzcyBvbmx5
KScpLAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zaWxlbnQnLCBhY3Rpb249
J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdydW4gc2lsZW50bHkgKGVycm9ycyBhbmQgd2FybmluZ3Mgb25seSknKSwKLSAgICAgICAg
cGFyc2VyLmFkZF9vcHRpb24oJy14JywgJy0teG1sJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVm
YXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nb3V0cHV0IHhVbml0
LXN0eWxlIFhNTCBvdXRwdXQnKQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXYnLCAnLS12
ZXJib3NlJywgYWN0aW9uPSdjb3VudCcsIGRlZmF1bHQ9MCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0ndmVyYm9zZSBvdXRwdXQgKHNwZWNpZnkgb25jZSBmb3IgaW5kaXZpZHVhbCB0
ZXN0IHJlc3VsdHMsIHR3aWNlIGZvciBkZWJ1ZyBtZXNzYWdlcyknKQotICAgICAgICBwYXJzZXIu
YWRkX29wdGlvbignLS1za2lwLWludGVncmF0aW9udGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUn
LCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkbyBub3Qg
cnVuIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0cycpCi0KLSAgICAgICAgcGFyc2VyLmVwaWxvZyA9ICgn
W2FyZ3MuLi5dIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgbW9kdWxlcywgdGVzdF9jbGFzc2VzLCBv
ciBpbmRpdmlkdWFsIHRlc3RzLiAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0lmIG5vIGFy
Z3MgYXJlIGdpdmVuLCBhbGwgdGhlIHRlc3RzIHdpbGwgYmUgcnVuLicpCi0KLSAgICAgICAgc2Vs
Zi5wcm9nTmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoYXJndlswXSkKLSAgICAgICAgcmV0dXJuIHBh
cnNlci5wYXJzZV9hcmdzKGFyZ3ZbMTpdKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWon
LCAnLS1qb2JzJywgYWN0aW9uPSdzdG9yZScsIHR5cGU9aW50LCBkZWZhdWx0PTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9J251bWJlciBvZiB0ZXN0cyB0byBydW4gaW4gcGFyYWxs
ZWwgKGRlZmF1bHQgJWRlZmF1bHQpJykKKworICAgICAgICBncm91cCA9IG9wdHBhcnNlLk9wdGlv
bkdyb3VwKHBhcnNlciwgJ09wdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHdoYXQgaXMgcHJpbnRlZCcp
CisgICAgICAgIGdyb3VwLmFkZF9vcHRpb24oJy1xJywgJy0tcXVpZXQnLCBhY3Rpb249J3N0b3Jl
X3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1
biBxdWlldGx5IChlcnJvcnMsIHdhcm5pbmdzLCBhbmQgcHJvZ3Jlc3Mgb25seSknKSwKKyAgICAg
ICAgZ3JvdXAuYWRkX29wdGlvbignLXQnLCAnLS10aW1pbmcnLCBhY3Rpb249J3N0b3JlX3RydWUn
LCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2Rpc3BsYXkg
cGVyLXRlc3QgdGltaW5nIGluZm8nKSwKKyAgICAgICAgZ3JvdXAuYWRkX29wdGlvbignLXYnLCAn
LS12ZXJib3NlJywgYWN0aW9uPSdjb3VudCcsIGRlZmF1bHQ9MCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSd2ZXJib3NlIG91dHB1dCAoc3BlY2lmeSBvbmNlIGZvciBpbmRpdmlkdWFs
IHRlc3QgcmVzdWx0cywgdHdpY2UgZm9yIGRlYnVnIG1lc3NhZ2VzKScpCisgICAgICAgIGdyb3Vw
LmFkZF9vcHRpb24oJy14JywgJy0teG1sJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1G
YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdvdXRwdXQgeFVuaXQtc3R5bGUg
WE1MIG91dHB1dCBpbnRvICRQV0QvdGVzdC13ZWJraXRweS14bWwtcmVwb3J0cy8nKQorICAgICAg
ICBncm91cC5hZGRfb3B0aW9uKCctYycsICctLWNvdmVyYWdlJywgYWN0aW9uPSdzdG9yZV90cnVl
JywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdnZW5lcmF0
ZSBjb2RlIGNvdmVyYWdlIHJlcG9ydCAoYXV0b2luc3RhbGxzIGh0dHA6Ly9weXBpLnB5dGhvbi5v
cmcvcHlwaS9jb3ZlcmFnZSknKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cChncm91
cCkKKworICAgICAgICAjIEZJWE1FOiBXZSBuZWVkIHRvIHVuaWZ5IHRoZXNlIHR3byB0eXBlcyBv
ZiB0ZXN0cyBhbmQgbWFrZSB0aGVtIGNvbnNpc3RlbnQuCisgICAgICAgIGdyb3VwID0gb3B0cGFy
c2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnT3B0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hpY2ggdGVz
dHMgYXJlIHJ1bicpCisgICAgICAgIGdyb3VwLmFkZF9vcHRpb24oJy0tc2tpcC1pbnRlZ3JhdGlv
bnRlc3RzJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSdkbyBub3QgcnVuIHRoZSAiaW50ZWdyYXRpb24iIChzbG93ZXIp
IHRlc3RzJykKKyAgICAgICAgZ3JvdXAuYWRkX29wdGlvbignLWknLCAnLS1ydW4tcmVhbC1pbnRl
Z3JhdGlvbnRlc3RzJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSdhbHNvIHJ1biB0aGUgInJlYWwiIGludGVncmF0aW9u
IHRlc3RzIChub3JtYWxseSBza2lwcGVkKScpCisgICAgICAgIGdyb3VwLmFkZF9vcHRpb24oJy1h
JywgJy0tYWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSdydW4gYWxsIHRoZSB0ZXN0cywgaW5jbHVkaW5nIHRob3Nl
IG5vcm1hbGx5IHNraXBwZWQnKSwKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoZ3Jv
dXApCisKKyAgICAgICAgcGFyc2VyLmVwaWxvZyA9ICgnW2FyZ3MuLi5dIGlzIGFuIG9wdGlvbmFs
IGxpc3Qgb2YgbW9kdWxlcywgdGVzdF9jbGFzc2VzLCBvciBpbmRpdmlkdWFsIHRlc3RzIHRvIHJ1
biBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IHNldC4nKQorCisgICAgICAgIHJldHVybiBwYXJzZXIu
cGFyc2VfYXJncyhhcmd2KQogCiAgICAgZGVmIGNvbmZpZ3VyZShzZWxmLCBvcHRpb25zKToKLSAg
ICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKLQotICAgICAgICBpZiBvcHRpb25zLnNpbGVu
dDoKLSAgICAgICAgICAgIHNlbGYuX3ZlcmJvc2l0eSA9IDAKLSAgICAgICAgICAgIHNlbGYuX2Nv
bmZpZ3VyZV9sb2dnaW5nKGxvZ2dpbmcuV0FSTklORykKLSAgICAgICAgZWxpZiBvcHRpb25zLnF1
aWV0OgotICAgICAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gMQotICAgICAgICAgICAgc2VsZi5f
Y29uZmlndXJlX2xvZ2dpbmcobG9nZ2luZy5XQVJOSU5HKQotICAgICAgICBlbGlmIG9wdGlvbnMu
dmVyYm9zZSA9PSAwOgotICAgICAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gMQotICAgICAgICAg
ICAgc2VsZi5fY29uZmlndXJlX2xvZ2dpbmcobG9nZ2luZy5JTkZPKQotICAgICAgICBlbGlmIG9w
dGlvbnMudmVyYm9zZSA9PSAxOgotICAgICAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gMgotICAg
ICAgICAgICAgc2VsZi5fY29uZmlndXJlX2xvZ2dpbmcobG9nZ2luZy5JTkZPKQotICAgICAgICBl
bGlmIG9wdGlvbnMudmVyYm9zZSA9PSAyOgotICAgICAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0g
MgotICAgICAgICAgICAgc2VsZi5fY29uZmlndXJlX2xvZ2dpbmcobG9nZ2luZy5ERUJVRykKLQot
ICAgIGRlZiBfY29uZmlndXJlX2xvZ2dpbmcoc2VsZiwgbG9nX2xldmVsKToKKyAgICAgICAgc2Vs
Zi5vcHRpb25zID0gb3B0aW9ucworCisgICAgICAgIHNlbGYubG9hZGVyID0gVGVzdExvYWRlcigp
CisgICAgICAgIHNlbGYubG9hZGVyLnJ1bl9yZWFsX2ludGVncmF0aW9uX3Rlc3RzID0gb3B0aW9u
cy5ydW5fcmVhbF9pbnRlZ3JhdGlvbnRlc3RzIG9yIG9wdGlvbnMuYWxsCisgICAgICAgIHNlbGYu
bG9hZGVyLnJ1bl9zZXJpYWxfdGVzdHMgPSAob3B0aW9ucy5qb2JzID09IDEpIG9yIG9wdGlvbnMu
YWxsCisgICAgICAgIGlmIHNlbGYub3B0aW9ucy54bWw6CisgICAgICAgICAgICBmcm9tIHdlYmtp
dHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC54bWxydW5uZXIgaW1wb3J0IFhNTFRlc3RSdW5u
ZXIKKyAgICAgICAgICAgIHNlbGYucnVubmVyID0gWE1MVGVzdFJ1bm5lcihvdXRwdXQ9J3Rlc3Qt
d2Via2l0cHkteG1sLXJlcG9ydHMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5y
dW5uZXIgPSBUZXN0UnVubmVyKHNlbGYuc3RyZWFtLCBvcHRpb25zLCBzdGFydD10aW1lLnRpbWUo
KSkKKworICAgIGRlZiBjb25maWd1cmVfbG9nZ2luZyhzZWxmKToKICAgICAgICAgIiIiQ29uZmln
dXJlIHRoZSByb290IGxvZ2dlci4KIAogICAgICAgICBDb25maWd1cmUgdGhlIHJvb3QgbG9nZ2Vy
IG5vdCB0byBsb2cgYW55IG1lc3NhZ2VzIGZyb20gd2Via2l0cHkgLS0KICAgICAgICAgZXhjZXB0
IGZvciBtZXNzYWdlcyBmcm9tIHRoZSBhdXRvaW5zdGFsbCBtb2R1bGUuICBBbHNvIHNldCB0aGUK
ICAgICAgICAgbG9nZ2luZyBsZXZlbCBhcyBkZXNjcmliZWQgYmVsb3cuCiAgICAgICAgICIiIgot
ICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRlcnIpCisgICAg
ICAgIG1lc3NhZ2VzID0gW10KKworICAgICAgICBpZiBzZWxmLm9wdGlvbnMudGltaW5nIGFuZCBu
b3Qgc2VsZi5vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBzZWxmLm9wdGlvbnMudmVyYm9z
ZSA9IDEKKyAgICAgICAgICAgIG1lc3NhZ2VzLmFwcGVuZCgobG9nZ2luZy5JTkZPLCAnLS10aW1p
bmcgaW1wbGllcyAtLXZlcmJvc2UnKSkKKworICAgICAgICBzZWxmLmxvZ19sZXZlbCA9IGxvZ2dp
bmcuSU5GTworICAgICAgICBpZiBzZWxmLm9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIGlm
IHNlbGYub3B0aW9ucy5xdWlldDoKKyAgICAgICAgICAgICAgICBtZXNzYWdlcy5hcHBlbmQoKGxv
Z2dpbmcuV0FSTklORywgJy0tdmVyYm9zZSBvdmVycmlkZXMgLS1xdWlldCcpKQorICAgICAgICAg
ICAgaWYgc2VsZi5vcHRpb25zLnZlcmJvc2UgPiAxOgorICAgICAgICAgICAgICAgIHNlbGYubG9n
X2xldmVsID0gbG9nZ2luZy5ERUJVRworICAgICAgICBlbGlmIHNlbGYub3B0aW9ucy5xdWlldDoK
KyAgICAgICAgICAgIHNlbGYubG9nX2xldmVsID0gbG9nZ2luZy5XQVJOSU5HCisKKyAgICAgICAg
aGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzZWxmLnN0cmVhbSkKICAgICAgICAgIyBX
ZSBjb25zdHJhaW4gdGhlIGxldmVsIG9uIHRoZSBoYW5kbGVyIHJhdGhlciB0aGFuIG9uIHRoZSBy
b290CiAgICAgICAgICMgbG9nZ2VyIGl0c2VsZi4gIFRoaXMgaXMgcHJvYmFibHkgYmV0dGVyIGJl
Y2F1c2UgdGhlIGhhbmRsZXIgaXMKICAgICAgICAgIyBjb25maWd1cmVkIGFuZCBrbm93biBvbmx5
IHRvIHRoaXMgbW9kdWxlLCB3aGVyZWFzIHRoZSByb290IGxvZ2dlcgpAQCAtMTA4LDcgKzE2Niw3
IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICAjIE1vZGlmeWluZyB0aGUgaGFuZGxl
ciwgdGhlbiwgaXMgbGVzcyBpbnRydXNpdmUgYW5kIGxlc3MgbGlrZWx5IHRvCiAgICAgICAgICMg
aW50ZXJmZXJlIHdpdGggbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVyIG1vZHVsZXMgKGUuZy4g
aW4gdW5pdAogICAgICAgICAjIHRlc3RzKS4KLSAgICAgICAgaGFuZGxlci5zZXRMZXZlbChsb2df
bGV2ZWwpCisgICAgICAgIGhhbmRsZXIuc2V0TGV2ZWwoc2VsZi5sb2dfbGV2ZWwpCiAgICAgICAg
IGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCIlKG1lc3NhZ2UpcyIpCiAgICAgICAgIGhh
bmRsZXIuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKIApAQCAtMTM2LDExMiArMTk0LDQwNyBAQCBj
bGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgdGVzdGluZ19maWx0ZXIgPSBsb2dnaW5nLkZp
bHRlcigpCiAgICAgICAgIHRlc3RpbmdfZmlsdGVyLmZpbHRlciA9IGZpbHRlcgogCisgICAgICAg
IGZvciBsZXZlbCwgbXNnIGluIG1lc3NhZ2VzOgorICAgICAgICAgICAgX2xvZy5sb2cobGV2ZWws
IG1zZykKKwogICAgICAgICAjIERpc3BsYXkgYSBtZXNzYWdlIHNvIGRldmVsb3BlcnMgYXJlIG5v
dCBteXN0aWZpZWQgYXMgdG8gd2h5CiAgICAgICAgICMgbG9nZ2luZyBkb2VzIG5vdCB3b3JrIGlu
IHRoZSB1bml0IHRlc3RzLgogICAgICAgICBfbG9nLmluZm8oIlN1cHByZXNzaW5nIG1vc3Qgd2Vi
a2l0cHkgbG9nZ2luZyB3aGlsZSBydW5uaW5nIHVuaXQgdGVzdHMuIikKICAgICAgICAgaGFuZGxl
ci5hZGRGaWx0ZXIodGVzdGluZ19maWx0ZXIpCiAKLSAgICBkZWYgcnVuKHNlbGYsIGRpcnMsIGFy
Z3MpOgotICAgICAgICBhcmdzID0gYXJncyBvciBzZWxmLl9maW5kX21vZHVsZXMoZGlycykKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0cyhkaXJzLCBhcmdzKQotCi0gICAgZGVmIF9maW5k
X21vZHVsZXMoc2VsZiwgZGlycyk6Ci0gICAgICAgIG1vZHVsZXMgPSBbXQotICAgICAgICBmb3Ig
ZGlyX3RvX3NlYXJjaCBpbiBkaXJzOgotICAgICAgICAgICAgbW9kdWxlcy5leHRlbmQoc2VsZi5f
ZmluZF9tb2R1bGVzX3VuZGVyKGRpcl90b19zZWFyY2gsICdfdW5pdHRlc3QucHknKSkKLSAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnNraXBfaW50ZWdyYXRpb250ZXN0czoKLSAgICAg
ICAgICAgICAgICBtb2R1bGVzLmV4dGVuZChzZWxmLl9maW5kX21vZHVsZXNfdW5kZXIoZGlyX3Rv
X3NlYXJjaCwgJ19pbnRlZ3JhdGlvbnRlc3QucHknKSkKLSAgICAgICAgbW9kdWxlcy5zb3J0KCkK
LQotICAgICAgICBmb3IgbW9kdWxlIGluIG1vZHVsZXM6Ci0gICAgICAgICAgICBfbG9nLmRlYnVn
KCJGb3VuZDogJXMiICUgbW9kdWxlKQotCi0gICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93
IHRvIG1vdmUgdGhpcyB0byB0ZXN0LXdlYmtpdHB5IGluIG9yZGVyIHRvIHRvIG1ha2UgdGhpcyBm
aWxlIG1vcmUgZ2VuZXJpYy4KLSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuYWxsOgotICAg
ICAgICAgICAgc2xvd190ZXN0cyA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5zY21f
dW5pdHRlc3QnLCkKLSAgICAgICAgICAgIHNlbGYuX2V4Y2x1ZGUobW9kdWxlcywgc2xvd190ZXN0
cywgJ2FyZSByZWFsbHksIHJlYWxseSBzbG93JywgMzE4MTgpCi0KLSAgICAgICAgICAgIGlmIHN5
cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICAgICAgICAgIHdpbjMyX2JsYWNrbGlzdCA9
ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3dlYmtpdHB5LmNvbW1vbi5jb25maWcnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnd2Via2l0cHkudG9vbCcpCi0gICAgICAgICAgICAgICAgc2VsZi5fZXhj
bHVkZShtb2R1bGVzLCB3aW4zMl9ibGFja2xpc3QsICdmYWlsIGhvcnJpYmx5IG9uIHdpbjMyJywg
NTQ1MjYpCi0KKyAgICBkZWYgYWRkX3RyZWUoc2VsZiwgdG9wX2RpcmVjdG9yeSwgc3RhcnRpbmdf
c3ViZGlyZWN0b3J5PU5vbmUsIGlnbm9yZV9saXN0PU5vbmUpOgorICAgICAgICBzZWxmLnRyZWVz
LmFwcGVuZChUZXN0VHJlZSh0b3BfZGlyZWN0b3J5LCBzdGFydGluZ19zdWJkaXJlY3RvcnksIGln
bm9yZV9saXN0IG9yIFtdKSkKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIHNl
bGYuX2NsZWFuX3RyZWVzKCkKKyAgICAgICAgc2VsZi5fZml4X3BhdGgoKQorCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGNvdiA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy5j
b3ZlcmFnZToKKyAgICAgICAgICAgICAgICBjb3YgPSBzZWxmLl9jb3ZlcmFnZV9vYmplY3QoKQor
ICAgICAgICAgICAgICAgIGNvdi5zdGFydCgpCisKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIkxv
YWRpbmcgdGhlIHRlc3RzLi4uIikKKyAgICAgICAgICAgIGlmIGFyZ3M6CisgICAgICAgICAgICAg
ICAgdGVzdHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAg
ICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYuX2ZpbmRfdGVzdHNfZm9yKGFyZykpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgRklYTUU6IENvbnNpZGVyIHJ1bm5pbmcg
ZWFjaCB0cmVlIHNlcGFyYXRlbHkgdG8gYXZvaWQgbmFtZXNwYWNlIGNsYXNoZXMuCisgICAgICAg
ICAgICAgICAgdGVzdHMgPSBzZWxmLl9kZWZhdWx0X3Rlc3RzKCkKKworICAgICAgICAgICAgcmVz
dWx0ID0gc2VsZi5fcnVuX3Rlc3RzKHRlc3RzKQorICAgICAgICAgICAgaWYgY292OgorICAgICAg
ICAgICAgICAgIGNvdi5zdG9wKCkKKyAgICAgICAgICAgICAgICBjb3YucmVwb3J0KHNob3dfbWlz
c2luZz1GYWxzZSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQud2FzU3VjY2Vzc2Z1bAorCisg
ICAgICAgIGV4Y2VwdCBMb2FkZXJFcnJvciwgZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQor
CisgICAgZGVmIF9maXhfcGF0aChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgUFlUSE9OUEFU
SCBpcyBzZXQgdXAgY29ycmVjdGx5LgorICAgICAgICBzeXMucGF0aCA9IFt0cmVlLnRvcF9kaXJl
Y3RvcnkgZm9yIHRyZWUgaW4gc2VsZi50cmVlcyBpZiB0cmVlLnRvcF9kaXJlY3Rvcnkgbm90IGlu
IHN5cy5wYXRoXSArIHN5cy5wYXRoCisKKyAgICBkZWYgX2NsZWFuX3RyZWVzKHNlbGYpOgorICAg
ICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAgICAgICAgdHJlZS5jbGVhbigpCisK
KyAgICBkZWYgX2NvdmVyYWdlX29iamVjdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5jb3ZlcmFnZSBhcyBj
b3ZlcmFnZQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGU6CisgICAgICAgICAgICBfbG9n
LmVycm9yKCJGYWlsZWQgdG8gaW1wb3J0ICdjb3ZlcmFnZSc7IGNhbid0IGdlbmVyYXRlIGNvdmVy
YWdlIG51bWJlcnMuIikKKyAgICAgICAgICAgIHJhaXNlIExvYWRlckVycm9yKCkKKworICAgICAg
ICBpbmNsdWRlID0gW29zLnBhdGguam9pbih0cmVlLnNlYXJjaF9kaXJlY3RvcnksICcqJykgZm9y
IHRyZWUgaW4gc2VsZi50cmVlc10KKyAgICAgICAgb21pdCA9IFtdCisgICAgICAgIGZvciB0cmVl
IGluIHNlbGYudHJlZXM6CisgICAgICAgICAgICBmb3IgcGF0aCBpbiB0cmVlLmlnbm9yZV9saXN0
OgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICAg
ICAgICAgIG9taXQuYXBwZW5kKG9zLnBhdGguam9pbihwYXRoLCAnKicpKQorICAgICAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG9taXQuYXBwZW5kKHBhdGgpCisgICAgICAg
IHJldHVybiBjb3ZlcmFnZS5jb3ZlcmFnZShpbmNsdWRlPWluY2x1ZGUsIG9taXQ9b21pdCkKKwor
ICAgIGRlZiBfZmluZF9tb2R1bGVzKHNlbGYsIHRyZWUsIGRpcl90b19zZWFyY2gpOgorICAgICAg
ICBzdWZmaXhlcyA9ICgnX3VuaXR0ZXN0LnB5JywgJ19pbnRlZ3JhdGlvbnRlc3QucHknKQorICAg
ICAgICBpZiBzZWxmLm9wdGlvbnMuc2tpcF9pbnRlZ3JhdGlvbnRlc3RzOgorICAgICAgICAgICAg
c3VmZml4ZXMgPSAoJ191bml0dGVzdC5weScsKQorICAgICAgICByZXR1cm4gdHJlZS5maW5kX21v
ZHVsZXMoZGlyX3RvX3NlYXJjaCwgc3VmZml4ZXMpCisKKyAgICBkZWYgX2RlZmF1bHRfdGVzdHMo
c2VsZik6CisgICAgICAgIHRlc3RzID0gW10KKyAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50cmVl
czoKKyAgICAgICAgICAgIHRlc3RzLmV4dGVuZChzZWxmLl9maW5kX21vZHVsZXModHJlZSwgdHJl
ZS5zZWFyY2hfZGlyZWN0b3J5KSkKKyAgICAgICAgcmV0dXJuIHRlc3RzCisKKyAgICBkZWYgX3Nr
aXBfbW9kdWxlcyhzZWxmLCBtb2R1bGVzKToKKyAgICAgICAgIyBGSVhNRTogVGhlc2Ugc2hvdWxk
IGJlIHJlcGxhY2VkIHcvIEBzbG93IGFuZCBAc2tpcF9pZiBkZWNvcmF0b3JzCisgICAgICAgIHNs
b3dfdGVzdHMgPSAoJ3dlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uc2NtX3VuaXR0ZXN0Jywp
CisgICAgICAgIHNlbGYuX2V4Y2x1ZGUobW9kdWxlcywgc2xvd190ZXN0cywgJ2FyZSByZWFsbHks
IHJlYWxseSBzbG93JywgMzE4MTgpCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4z
Mic6CisgICAgICAgICAgICB3aW4zMl9ibGFja2xpc3QgPSAoJ3dlYmtpdHB5LmNvbW1vbi5jaGVj
a291dCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3ZWJraXRweS5jb21tb24u
Y29uZmlnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LnRvb2wn
KQorICAgICAgICAgICAgc2VsZi5fZXhjbHVkZShtb2R1bGVzLCB3aW4zMl9ibGFja2xpc3QsICdm
YWlsIGhvcnJpYmx5IG9uIHdpbjMyJywgNTQ1MjYpCiAgICAgICAgIHJldHVybiBtb2R1bGVzCiAK
ICAgICBkZWYgX2V4Y2x1ZGUoc2VsZiwgbW9kdWxlcywgbW9kdWxlX3ByZWZpeGVzLCByZWFzb24s
IGJ1Z2lkKToKLSAgICAgICAgX2xvZy5pbmZvKCdTa2lwcGluZyB0ZXN0cyBpbiB0aGUgZm9sbG93
aW5nIG1vZHVsZXMgb3IgcGFja2FnZXMgYmVjYXVzZSB0aGV5ICVzOicgJSByZWFzb24pCisgICAg
ICAgIHNraXBwZWRfYW55ID0gRmFsc2UKICAgICAgICAgZm9yIHByZWZpeCBpbiBtb2R1bGVfcHJl
Zml4ZXM6Ci0gICAgICAgICAgICBfbG9nLmluZm8oJyAgICAlcycgJSBwcmVmaXgpCiAgICAgICAg
ICAgICBtb2R1bGVzX3RvX2V4Y2x1ZGUgPSBmaWx0ZXIobGFtYmRhIG06IG0uc3RhcnRzd2l0aChw
cmVmaXgpLCBtb2R1bGVzKQotICAgICAgICAgICAgZm9yIG0gaW4gbW9kdWxlc190b19leGNsdWRl
OgotICAgICAgICAgICAgICAgIGlmIGxlbihtb2R1bGVzX3RvX2V4Y2x1ZGUpID4gMToKKyAgICAg
ICAgICAgIGlmIG1vZHVsZXNfdG9fZXhjbHVkZToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2tp
cHBlZF9hbnk6CisgICAgICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnU2tpcHBpbmcgdGVzdHMg
aW4gdGhlIGZvbGxvd2luZyBtb2R1bGVzIG9yIHBhY2thZ2VzIGJlY2F1c2UgdGhleSAlczonICUg
cmVhc29uKQorICAgICAgICAgICAgICAgICAgICBza2lwcGVkX2FueSA9IFRydWUKKyAgICAgICAg
ICAgICAgICBfbG9nLmluZm8oJyAgICAlcycgJSBwcmVmaXgpCisgICAgICAgICAgICAgICAgZm9y
IG0gaW4gbW9kdWxlc190b19leGNsdWRlOgogICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVn
KCcgICAgICAgICVzJyAlIG0pCiAgICAgICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUobSkKLSAg
ICAgICAgX2xvZy5pbmZvKCcgICAgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0lZDsgdXNlIC0tYWxsIHRvIGluY2x1ZGUpJyAlIGJ1Z2lkKQotICAgICAgICBfbG9nLmlu
Zm8oJycpCi0KLSAgICBkZWYgX2ZpbmRfbW9kdWxlc191bmRlcihzZWxmLCBkaXJfdG9fc2VhcmNo
LCBzdWZmaXgpOgogCi0gICAgICAgIGRlZiB0b19wYWNrYWdlKGRpcl9wYXRoKToKLSAgICAgICAg
ICAgIHJldHVybiBkaXJfcGF0aC5yZXBsYWNlKGRpcl90b19zZWFyY2ggKyBvcy5zZXAsICcnKS5y
ZXBsYWNlKG9zLnNlcCwgJy4nKQorICAgICAgICBpZiBza2lwcGVkX2FueToKKyAgICAgICAgICAg
IF9sb2cuaW5mbygnICAgIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
JWQ7IHVzZSAtLWFsbCB0byBpbmNsdWRlKScgJSBidWdpZCkKKyAgICAgICAgICAgIF9sb2cuaW5m
bygnJykKIAotICAgICAgICBkZWYgdG9fbW9kdWxlKGZpbGVuYW1lLCBwYWNrYWdlKToKLSAgICAg
ICAgICAgIHJldHVybiBwYWNrYWdlICsgJy4nICsgZmlsZW5hbWUucmVwbGFjZSgnLnB5JywgJycp
Ci0KLSAgICAgICAgbW9kdWxlcyA9IFtdCi0gICAgICAgIGZvciBkaXJfcGF0aCwgXywgZmlsZW5h
bWVzIGluIG9zLndhbGsoZGlyX3RvX3NlYXJjaCk6Ci0gICAgICAgICAgICBwYWNrYWdlID0gdG9f
cGFja2FnZShkaXJfcGF0aCkKLSAgICAgICAgICAgIG1vZHVsZXMuZXh0ZW5kKHRvX21vZHVsZShm
LCBwYWNrYWdlKSBmb3IgZiBpbiBmaWxlbmFtZXMgaWYgZi5lbmRzd2l0aChzdWZmaXgpKQotICAg
ICAgICByZXR1cm4gbW9kdWxlcwotCi0gICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgZGlycywgYXJn
cyk6Ci0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJhZ2U6CisgICAgZGVmIF9maW5kX3Rl
c3RzX2ZvcihzZWxmLCBuYW1lKToKKyAgICAgICAgKHRyZWUsIHN0YXJ0aW5nX2RpcmVjdG9yeSkg
PSBzZWxmLl9maW5kX3RyZWUobmFtZSkKKyAgICAgICAgaWYgdHJlZSBhbmQgbm90IG9zLnBhdGgu
aXNmaWxlKHN0YXJ0aW5nX2RpcmVjdG9yeSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmlu
ZF9tb2R1bGVzKHRyZWUsIHN0YXJ0aW5nX2RpcmVjdG9yeSkKKyAgICAgICAgZWxpZiBvcy5wYXRo
LmV4aXN0cyhuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBbc2VsZi5fdGVzdF9mcm9tX3BhdGgo
bmFtZSldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW25hbWVdCisKKyAgICBk
ZWYgX3Rlc3RfZnJvbV9wYXRoKHNlbGYsIG5hbWUpOgorICAgICAgICAjIEZpcnN0LCBjaGVjayB0
byBzZWUgaWYgd2UgY2FuIHJlc29sdmUgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGN3ZC4KKyAg
ICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5yZWFscGF0aChuYW1lKQorICAgICAgICBmb3IgdHJl
ZSBpbiBzZWxmLnRyZWVzOgorICAgICAgICAgICAgIyBGSVhNRTogRG8gd2UgbmVlZCB0byB3b3Jy
eSBhYm91dCBjYXNlLWluc2Vuc2l0aXZpdHkgaGVyZT8KKyAgICAgICAgICAgIGlmIGZ1bGxfcGF0
aC5zdGFydHN3aXRoKHRyZWUudG9wX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZ1bGxfcGF0aC5yZXBsYWNlKHRyZWUudG9wX2RpcmVjdG9yeSArIG9zLnNlcCwgJycpLnJlcGxh
Y2UoJy5weScsICcnKS5yZXBsYWNlKG9zLnNlcCwgJy4nKQorCisgICAgICAgIGVyciA9ICclcyBp
cyBub3QgaW4gb25lIG9mIHRoZSBXZWJLaXQgcHl0aG9uIHRyZWVzJyAlIG5hbWUKKyAgICAgICAg
X2xvZy5mYXRhbChlcnIpCisgICAgICAgIHJhaXNlIExvYWRlckVycm9yKGVycikKKworICAgIGRl
ZiBfc3VpdGVfZnJvbV9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBzZWxmLl9pc19tb2R1
bGUobmFtZSk6CisgICAgICAgICAgICAjIGltcG9ydCBtb2R1bGVzIGV4cGxpY2l0bHkgYmVmb3Jl
IGxvYWRpbmcgdGhlaXIgdGVzdHMgYmVjYXVzZQorICAgICAgICAgICAgIyBsb2FkVGVzdHNGcm9t
TmFtZSgpIHByb2R1Y2VzIGxvdXN5IGVycm9yIG1lc3NhZ2VzIGZvciBiYWQgbW9kdWxlcy4KICAg
ICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0
eS5hdXRvaW5zdGFsbGVkLmNvdmVyYWdlIGFzIGNvdmVyYWdlCisgICAgICAgICAgICAgICAgX19p
bXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgotICAgICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBpbXBvcnQgJ2NvdmVyYWdlJzsgY2FuJ3Qg
Z2VuZXJhdGUgY292ZXJhZ2UgbnVtYmVycy4iKQotICAgICAgICAgICAgICAgIHJldHVybiBGYWxz
ZQotICAgICAgICAgICAgY292ID0gY292ZXJhZ2UuY292ZXJhZ2UoKQotICAgICAgICAgICAgY292
LnN0YXJ0KCkKLQotICAgICAgICBfbG9nLmRlYnVnKCJMb2FkaW5nIHRoZSB0ZXN0cy4uLiIpCi0K
LSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIKLSAgICAgICAgc3Vp
dGVzID0gW10KLSAgICAgICAgZm9yIG5hbWUgaW4gYXJnczoKLSAgICAgICAgICAgIGlmIHNlbGYu
X2lzX21vZHVsZShkaXJzLCBuYW1lKToKLSAgICAgICAgICAgICAgICAjIGltcG9ydCBtb2R1bGVz
IGV4cGxpY2l0bHkgYmVmb3JlIGxvYWRpbmcgdGhlaXIgdGVzdHMgYmVjYXVzZQotICAgICAgICAg
ICAgICAgICMgbG9hZFRlc3RzRnJvbU5hbWUoKSBwcm9kdWNlcyBsb3VzeSBlcnJvciBtZXNzYWdl
cyBmb3IgYmFkIG1vZHVsZXMuCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAg
ICAgICBfX2ltcG9ydF9fKG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9y
LCBlOgotICAgICAgICAgICAgICAgICAgICBfbG9nLmZhdGFsKCdGYWlsZWQgdG8gaW1wb3J0ICVz
OicgJSBuYW1lKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2dfZXhjZXB0aW9uKCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBzdWl0ZXMuYXBwZW5k
KGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZShuYW1lLCBOb25lKSkKLQotICAgICAgICB0ZXN0X3N1
aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKHN1aXRlcykKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9u
cy54bWw6Ci0gICAgICAgICAgICBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxl
ZC54bWxydW5uZXIgaW1wb3J0IFhNTFRlc3RSdW5uZXIKLSAgICAgICAgICAgIHRlc3RfcnVubmVy
ID0gWE1MVGVzdFJ1bm5lcihvdXRwdXQ9J3Rlc3Qtd2Via2l0cHkteG1sLXJlcG9ydHMnKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgdGVzdF9ydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1
bm5lcih2ZXJib3NpdHk9c2VsZi5fdmVyYm9zaXR5KQotCi0gICAgICAgIF9sb2cuZGVidWcoIlJ1
bm5pbmcgdGhlIHRlc3RzLiIpCi0gICAgICAgIHJlc3VsdCA9IHRlc3RfcnVubmVyLnJ1bih0ZXN0
X3N1aXRlKQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgotICAgICAgICAgICAg
Y292LnN0b3AoKQotICAgICAgICAgICAgY292LnNhdmUoKQotICAgICAgICAgICAgY292LnJlcG9y
dChzaG93X21pc3Npbmc9RmFsc2UpCi0gICAgICAgIHJldHVybiByZXN1bHQud2FzU3VjY2Vzc2Z1
bCgpCi0KLSAgICBkZWYgX2lzX21vZHVsZShzZWxmLCBkaXJzLCBuYW1lKToKKyAgICAgICAgICAg
ICAgICBfbG9nLmZhdGFsKCdGYWlsZWQgdG8gaW1wb3J0ICVzOicgJSBuYW1lKQorICAgICAgICAg
ICAgICAgIHNlbGYuX2xvZ19leGNlcHRpb24oKQorICAgICAgICAgICAgICAgIHJhaXNlIExvYWRl
ckVycm9yKCkKKyAgICAgICAgcmV0dXJuIHNlbGYubG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKG5h
bWUsIE5vbmUpCisKKyAgICBkZWYgX2ZpbmRfdHJlZShzZWxmLCBuYW1lKToKKyAgICAgICAgIyBJ
cyB0aGUgbmFtZSBhIHN1YmRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5n
IGRpcmVjdG9yeSBhbmQgaW4gYSB0cmVlPworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhuYW1l
KToKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGgucmVhbHBhdGgobmFtZSkKKyAgICAg
ICAgICAgIGZvciB0cmVlIGluIHNlbGYudHJlZXM6CisgICAgICAgICAgICAgICAgaWYgZnVsbF9w
YXRoLnN0YXJ0c3dpdGgodHJlZS50b3BfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICh0cmVlLCBmdWxsX3BhdGgpCisKKyAgICAgICAgIyBJcyB0aGUgbmFtZSBhIHN1YmRp
cmVjdG9yeSBvZiBhIHRyZWU/CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKG5hbWUpOgor
ICAgICAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50cmVlczoKKyAgICAgICAgICAgICAgICBmdWxs
X3BhdGggPSBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbih0cmVlLnRvcF9kaXJlY3Rvcnks
IG5hbWUpKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnVsbF9wYXRoKToKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICh0cmVlLCBvcy5wYXRoLmpvaW4odHJlZS50b3BfZGly
ZWN0b3J5LCBuYW1lKSkKKworICAgICAgICAjIElzIHRoZSBuYW1lIGEgcGFja2FnZT8KKyAgICAg
ICAgcmVscGF0aCA9IG5hbWUucmVwbGFjZSgnLicsIG9zLnNlcCkKKyAgICAgICAgZm9yIHRyZWUg
aW4gc2VsZi50cmVlczoKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbih0cmVl
LnRvcF9kaXJlY3RvcnksIHJlbHBhdGgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZ1
bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICh0cmVlLCBmdWxsX3BhdGgpCisKKyAg
ICAgICAgcmV0dXJuIChOb25lLCBOb25lKQorCisgICAgZGVmIF9pc19tb2R1bGUoc2VsZiwgbmFt
ZSk6CiAgICAgICAgIHJlbHBhdGggPSBuYW1lLnJlcGxhY2UoJy4nLCBvcy5zZXApICsgJy5weScK
LSAgICAgICAgcmV0dXJuIGFueShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZCwgcmVscGF0
aCkpIGZvciBkIGluIGRpcnMpCisgICAgICAgIHJldHVybiBhbnkob3MucGF0aC5leGlzdHMob3Mu
cGF0aC5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgcmVscGF0aCkpIGZvciB0cmVlIGluIHNlbGYu
dHJlZXMpCisKKyAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCB0ZXN0cyk6CisgICAgICAgICMgU29y
dCBhbmQgZGVkdXBsaWNhdGUgYWxsIG9mIHRoZSB0ZXN0cworICAgICAgICB0ZXN0cyA9IHNvcnRl
ZChbdGVzdCBmb3IgdGVzdCBpbiBzZXQodGVzdHMpXSkKKworICAgICAgICBmb3IgdGVzdCBpbiB0
ZXN0czoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIkZvdW5kOiAlcyIgJSB0ZXN0KQorCisgICAg
ICAgIGlmIG5vdCBzZWxmLm9wdGlvbnMuYWxsOgorICAgICAgICAgICAgdGVzdHMgPSBzZWxmLl9z
a2lwX21vZHVsZXModGVzdHMpCisKKyAgICAgICAgZGVmIGFsbF90ZXN0X25hbWVzKHN1aXRlKToK
KyAgICAgICAgICAgIG5hbWVzID0gW10KKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc3VpdGUsICdf
dGVzdHMnKToKKyAgICAgICAgICAgICAgICBmb3IgdCBpbiBzdWl0ZS5fdGVzdHM6CisgICAgICAg
ICAgICAgICAgICAgIG5hbWVzLmV4dGVuZChhbGxfdGVzdF9uYW1lcyh0KSkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKF90ZXN0X25hbWUoc3VpdGUpKQor
ICAgICAgICAgICAgcmV0dXJuIG5hbWVzCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0
U3VpdGUoW3NlbGYuX3N1aXRlX2Zyb21fbmFtZSh0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0c10pCisg
ICAgICAgIGlmIHNlbGYub3B0aW9ucy54bWw6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ydW5u
ZXIucnVuKHN1aXRlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnVu
bmVyLnJ1bihhbGxfdGVzdF9uYW1lcyhzdWl0ZSkpCiAKICAgICBkZWYgX2xvZ19leGNlcHRpb24o
c2VsZik6CiAgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgIHRyYWNlYmFj
ay5wcmludF9leGMoZmlsZT1zKQogICAgICAgICBmb3IgbCBpbiBzLmJ1Zmxpc3Q6CiAgICAgICAg
ICAgICBfbG9nLmVycm9yKCcgICcgKyBsLnJzdHJpcCgpKQorCisKK2NsYXNzIFRlc3RMb2FkZXIo
dW5pdHRlc3QuVGVzdExvYWRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBz
ZWxmLnJ1bl9yZWFsX2ludGVncmF0aW9uX3Rlc3RzID0gRmFsc2UKKyAgICAgICAgc2VsZi5ydW5f
c2VyaWFsX3Rlc3RzID0gVHJ1ZQorICAgICAgICBzdXBlcihUZXN0TG9hZGVyLCBzZWxmKS5fX2lu
aXRfXygpCisKKyAgICBkZWYgZ2V0VGVzdENhc2VOYW1lcyhzZWxmLCB0ZXN0Q2FzZUNsYXNzKToK
KyAgICAgICAgZGVmIGlzVGVzdE1ldGhvZChhdHRybmFtZSwgdGVzdENhc2VDbGFzcz10ZXN0Q2Fz
ZUNsYXNzKToKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGdldGF0dHIodGVzdENhc2VDbGFz
cywgYXR0cm5hbWUpLCAnX19jYWxsX18nKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KyAgICAgICAgICAgIHJldHVybiAoKGF0dHJuYW1lLnN0YXJ0c3dpdGgoJ3Rlc3QnKSkgb3IKKyAg
ICAgICAgICAgICAgICAgICAgKHNlbGYucnVuX3JlYWxfaW50ZWdyYXRpb25fdGVzdHMgYW5kIGF0
dHJuYW1lLnN0YXJ0c3dpdGgoJ2ludGVncmF0aW9uX3Rlc3RfJykpIG9yCisgICAgICAgICAgICAg
ICAgICAgIChzZWxmLnJ1bl9zZXJpYWxfdGVzdHMgYW5kIGF0dHJuYW1lLnN0YXJ0c3dpdGgoJ3Nl
cmlhbF90ZXN0XycpKSkKKyAgICAgICAgdGVzdEZuTmFtZXMgPSBmaWx0ZXIoaXNUZXN0TWV0aG9k
LCBkaXIodGVzdENhc2VDbGFzcykpCisgICAgICAgIHRlc3RGbk5hbWVzLnNvcnQoKQorICAgICAg
ICByZXR1cm4gdGVzdEZuTmFtZXMKKworCitjbGFzcyBUZXN0UnVubmVyKG1hbmFnZXJfd29ya2Vy
X2Jyb2tlci5Ccm9rZXJDbGllbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0sIG9w
dGlvbnMsIHN0YXJ0KToKKyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucworICAgICAgICBz
ZWxmLnN0cmVhbSA9IHN0cmVhbQorICAgICAgICBzZWxmLnN0YXJ0ID0gc3RhcnQKKyAgICAgICAg
c2VsZi5yZXN1bHQgPSBOb25lCisgICAgICAgIHNlbGYud29ya2VycyA9IHt9CisgICAgICAgIHNl
bGYubnVtX3Rlc3RzID0gTm9uZQorICAgICAgICBzZWxmLl9idWZmZXIgPSAnJworCisgICAgZGVm
IG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAnbWFuYWdlcicKKworICAgIGRlZiBydW4oc2Vs
ZiwgdGVzdF9uYW1lcyk6CisgICAgICAgIHBhcmFsbGVsID0gdGltZS50aW1lKCkKKyAgICAgICAg
c2VsZi5udW1fdGVzdHMgPSBsZW4odGVzdF9uYW1lcykKKworICAgICAgICBpZiBzZWxmLm9wdGlv
bnMuam9icyA+IDE6CisgICAgICAgICAgICB3b3JrZXJfbW9kZWwgPSAncHJvY2Vzc2VzJworICAg
ICAgICAgICAgX2xvZy5pbmZvKCdSdW5uaW5nIHVwIHRvICVkIHRlc3RzIGluIHBhcmFsbGVsLicg
JSBzZWxmLm9wdGlvbnMuam9icykKKyAgICAgICAgICAgIHJ1bm5lciA9IE5vbmUKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHdvcmtlcl9tb2RlbCA9ICdpbmxpbmUnCisgICAgICAgICAgICBf
bG9nLmluZm8oJ1J1bm5pbmcgdGVzdHMgaW5saW5lLicpCisgICAgICAgICAgICBydW5uZXIgPSBz
ZWxmCisKKyAgICAgICAgYnJva2VyID0gbWFuYWdlcl93b3JrZXJfYnJva2VyLmdldCh3b3JrZXJf
bW9kZWwsIHNlbGYsIFdvcmtlcikKKyAgICAgICAgbG9hZGVyID0gVGVzdExvYWRlcigpCisgICAg
ICAgIHNlbGYucmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgZm9yIGkg
aW4gcmFuZ2Uoc2VsZi5vcHRpb25zLmpvYnMpOgorICAgICAgICAgICAgd29ya2VyID0gYnJva2Vy
LnN0YXJ0X3dvcmtlcihpbnQoaSkgKyAxKQorICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25zLmpv
YnMgPT0gMToKKyAgICAgICAgICAgICAgICB3b3JrZXIuc2V0X2lubGluZV9hcmd1bWVudHMocnVu
bmVyKQorICAgICAgICAgICAgc2VsZi53b3JrZXJzW3dvcmtlci5uYW1lKCldID0gd29ya2VyCisK
KyAgICAgICAgZm9yIHQgaW4gdGVzdF9uYW1lczoKKyAgICAgICAgICAgIGJyb2tlci5wb3N0X21l
c3NhZ2UoJ3Rlc3QnLCB0KQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYub3B0aW9ucy5q
b2JzKToKKyAgICAgICAgICAgIGJyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQorCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIGJyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKKyAgICAgICAgZXhj
ZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLndv
cmtlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgd29ya2VyLmNhbmNlbCgpCisgICAgICAg
ICAgICByYWlzZQorCisgICAgICAgIHN0b3AgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl93
cml0ZV9zdW1tYXJ5KHNlbGYucmVzdWx0LCBzdG9wIC0gc2VsZi5zdGFydCkKKyAgICAgICAgdG90
YWxfdGltZSA9IHN0b3AgLSBzZWxmLnN0YXJ0CisgICAgICAgIHBhcmFsbGVsX3RpbWUgPSBzdG9w
IC0gcGFyYWxsZWwKKyAgICAgICAgc2VyaWFsX3RpbWUgPSB0b3RhbF90aW1lIC0gcGFyYWxsZWxf
dGltZQorICAgICAgICBpZiBzZWxmLm9wdGlvbnMuam9icyA+IDE6CisgICAgICAgICAgICBfbG9n
LmluZm8oJyUuM2ZzIHdhcyBzcGVudCBydW5uaW5nIHNpbmdsZS10aHJlYWRlZCAoJWQlJSknICUK
KyAgICAgICAgICAgICAgICAgICAgKHNlcmlhbF90aW1lLCBpbnQoc2VyaWFsX3RpbWUgKiAxMDAg
LyB0b3RhbF90aW1lKSkpCisgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdAorCisgICAgZGVmIGlz
X2RvbmUoc2VsZik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi53b3JrZXJzCisKKyAgICBkZWYg
aGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzcmMsIHRlc3RfbmFtZSwgc3RhcnQpOgorICAgICAg
ICBpZiBzZWxmLm9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRl
KHRlc3RfbmFtZSkKKworICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHRl
c3RfbmFtZSwgdGVzdF90aW1lLCBmYWlsdXJlLCBlcnIpOgorICAgICAgICBzZWxmLnJlc3VsdC50
ZXN0c1J1biArPSAxCisgICAgICAgIGlmIGZhaWx1cmU6CisgICAgICAgICAgICBzZWxmLnJlc3Vs
dC5mYWlsdXJlcy5hcHBlbmQoKHRlc3RfbmFtZSwgZmFpbHVyZSkpCisgICAgICAgIGlmIGVycjoK
KyAgICAgICAgICAgIHNlbGYucmVzdWx0LmVycm9ycy5hcHBlbmQoKHRlc3RfbmFtZSwgZXJyKSkK
KyAgICAgICAgc2VsZi5fd3JpdGVfcmVzdWx0KHNlbGYucmVzdWx0LCB0ZXN0X25hbWUsIHRlc3Rf
dGltZSwgZmFpbHVyZSwgZXJyKQorCisgICAgZGVmIGhhbmRsZV9kb25lKHNlbGYsIHNyYyk6Cisg
ICAgICAgIHNlbGYuX2VyYXNlKCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnJXMgZG9uZSBhZnRlciAl
LjNmcycgJSAoc3JjLCB0aW1lLnRpbWUoKSAtIHNlbGYuc3RhcnQpKQorICAgICAgICBkZWwgc2Vs
Zi53b3JrZXJzW3NyY10KKworICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKHNlbGYsIHNvdXJjZSwg
ZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgc3RhY2spOgorICAgICAgICBfbG9nLmVy
cm9yKCIlcyByYWlzZWQgJXMoJyVzJyk6IiAlICgKKyAgICAgICAgICAgICAgICAgICBzb3VyY2Us
CisgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX3ZhbHVlLl9fY2xhc3NfXy5fX25hbWVfXywK
KyAgICAgICAgICAgICAgICAgICBzdHIoZXhjZXB0aW9uX3ZhbHVlKSkpCisgICAgICAgIHJhaXNl
IGV4Y2VwdGlvbl90eXBlKGV4Y2VwdGlvbl92YWx1ZSkKKworICAgIGRlZiBfZXJhc2Uoc2VsZik6
CisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRl
KCdcYicgKiBsZW4oc2VsZi5fYnVmZmVyKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyAnICogbGVuKHNlbGYuX2J1ZmZlcikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdcYicgKiBsZW4oc2VsZi5fYnVmZmVyKSkKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9
ICcnCisKKyAgICBkZWYgX3dyaXRlX3N0YXR1cyhzZWxmLCB0b3RhbCwgbnVtX3J1biwgbnVtX2Zh
aWx1cmVzLCBudW1fZXJyb3JzKToKKyAgICAgICAgbnVtX3Bhc3NlcyA9IG51bV9ydW4gLSAobnVt
X2ZhaWx1cmVzIC0gbnVtX2Vycm9ycykKKyAgICAgICAgbnVtX3JlbWFpbmluZyA9IHRvdGFsIC0g
bnVtX3J1bgorICAgICAgICBwZXJjZW50ID0gMTAwICogbnVtX3J1biAvIHRvdGFsCisKKyAgICAg
ICAgc2VsZi5fZXJhc2UoKQorICAgICAgICBzZWxmLl9idWZmZXIgPSAnJTJkJSU6ICVkIHBhc3Nl
ZCAlZCBmYWlsZWQgJWQgZXJyZWQgJWQgbGVmdCcgJSAocGVyY2VudCwgbnVtX3Bhc3NlcywgbnVt
X2ZhaWx1cmVzLCBudW1fZXJyb3JzLCBudW1fcmVtYWluaW5nKQorICAgICAgICBzZWxmLnN0cmVh
bS53cml0ZShzZWxmLl9idWZmZXIpCisgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKKworICAg
IGRlZiBfd3JpdGVfcmVzdWx0KHNlbGYsIHJlc3VsdCwgdGVzdF9uYW1lLCB0ZXN0X3RpbWUsIGZh
aWx1cmU9Tm9uZSwgZXJyPU5vbmUpOgorICAgICAgICBpZiBmYWlsdXJlOgorICAgICAgICAgICAg
bXNnID0gJyBmYWlsZWQnCisgICAgICAgIGVsaWYgZXJyOgorICAgICAgICAgICAgbXNnID0gJyBl
cnJlZCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9ICcgcGFzc2VkJworICAgICAg
ICBpZiBzZWxmLm9wdGlvbnMudGltaW5nOgorICAgICAgICAgICAgbXNnICs9ICcgJS41ZnMnICUg
dGVzdF90aW1lCisKKyAgICAgICAgaWYgZXJyIG9yIGZhaWx1cmU6CisgICAgICAgICAgICBpZiBu
b3Qgc2VsZi5vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZXJhc2UoKQor
ICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUodGVzdF9uYW1lICsgbXNnICsgJzpcbicpCisg
ICAgICAgICAgICBpZiBmYWlsdXJlOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZhaWx1
cmUuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgn
ICAgICcgKyBsaW5lICsgJ1xuJykKKyAgICAgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgICAg
ICBmb3IgbGluZSBpbiBlcnIuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBzZWxm
LnN0cmVhbS53cml0ZSgnICAgICcgKyBsaW5lICsgJ1xuJykKKyAgICAgICAgICAgIHNlbGYuc3Ry
ZWFtLndyaXRlKCdcbicpCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLnZlcmJvc2U6CisgICAg
ICAgICAgICBpZiBzZWxmLm9wdGlvbnMuam9icyA+IDE6CisgICAgICAgICAgICAgICAgc2VsZi5z
dHJlYW0ud3JpdGUodGVzdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUobXNn
ICsgJ1xuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3N0YXR1cyhz
ZWxmLm51bV90ZXN0cywgcmVzdWx0LnRlc3RzUnVuLCBsZW4ocmVzdWx0LmZhaWx1cmVzKSwgbGVu
KHJlc3VsdC5lcnJvcnMpKQorCisgICAgZGVmIF93cml0ZV9zdW1tYXJ5KHNlbGYsIHJlc3VsdCwg
dG90YWxfdGVzdF90aW1lKToKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLnZlcmJvc2U6CisgICAg
ICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnXG4nKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgc2VsZi5fZXJhc2UoKQorCisgICAgICAgIHRvdGFsX2RlbGF5ID0gJyUuM2Ygc2Vjb25kcycg
JSAodG90YWxfdGVzdF90aW1lKQorICAgICAgICBydW4gPSByZXN1bHQudGVzdHNSdW4KKyAgICAg
ICAgZmFpbGVkID0gbGVuKHJlc3VsdC5mYWlsdXJlcykKKyAgICAgICAgZXJyZWQgPSBsZW4ocmVz
dWx0LmVycm9ycykKKyAgICAgICAgaWYgcnVuID4gMSBhbmQgZmFpbGVkIGFuZCBlcnJlZDoKKyAg
ICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCclZCB0ZXN0cyByYW4gaW4gJXM7ICVkIGZhaWxl
ZCwgJWQgZXJyb3JlZCBvdXQuXG4nICUgKHJ1biwgdG90YWxfZGVsYXksIGZhaWxlZCwgZXJyZWQp
KQorICAgICAgICBlbGlmIHJ1biA+IDEgYW5kIGZhaWxlZDoKKyAgICAgICAgICAgIHNlbGYuc3Ry
ZWFtLndyaXRlKCclZCB0ZXN0cyByYW4gaW4gJXM7ICVkIGZhaWxlZC5cbicgJSAocnVuLCB0b3Rh
bF9kZWxheSwgZmFpbGVkKSkKKyAgICAgICAgZWxpZiBydW4gPiAxIGFuZCBlcnJlZDoKKyAgICAg
ICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCclZCB0ZXN0cyByYW4gaW4gJXM7ICVkIGVycm9yZWQg
b3V0LlxuJyAlIChydW4sIHRvdGFsX2RlbGF5LCBlcnJlZCkpCisgICAgICAgIGVsaWYgcnVuID4g
MToKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCclZCB0ZXN0cyByYW4gaW4gJXM7IGFs
bCBwYXNzZWQuXG4nICUgKHJ1biwgdG90YWxfZGVsYXkpKQorICAgICAgICBlbGlmIGZhaWxlZDoK
KyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCcxIHRlc3QgcmFuIGluICVzOyBpdCBmYWls
ZWQuXG4nICUgKHRvdGFsX2RlbGF5KSkKKyAgICAgICAgZWxpZiBlcnJlZDoKKyAgICAgICAgICAg
IHNlbGYuc3RyZWFtLndyaXRlKCcxIHRlc3QgcmFuIGluICVzOyBpdCBlcnJvcmVkIG91dC5cbicg
JSAodG90YWxfZGVsYXkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0u
d3JpdGUoJzEgdGVzdCByYW4gaW4gJXM7IGl0IHBhc3NlZC5cbicgJSAodG90YWxfZGVsYXkpKQor
CisKK2NsYXNzIFdvcmtlcihtYW5hZ2VyX3dvcmtlcl9icm9rZXIuQWJzdHJhY3RXb3JrZXIpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJfY29ubmVjdGlvbiwgd29ya2VyX251bWJlcik6
CisgICAgICAgIHN1cGVyKFdvcmtlciwgc2VsZikuX19pbml0X18od29ya2VyX2Nvbm5lY3Rpb24s
IHdvcmtlcl9udW1iZXIpCisgICAgICAgIHNlbGYuX3dvcmtlcl9udW1iZXIgPSB3b3JrZXJfbnVt
YmVyCisgICAgICAgIHNlbGYuX25hbWUgPSAnd29ya2VyLyVkJyAlIHdvcmtlcl9udW1iZXIKKwor
ICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYubG9hZGVyID0gVGVzdExvYWRlcigpCisg
ICAgICAgIHNlbGYucmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHN1cGVyKFdvcmtlciwgc2VsZikucnVuKCkKKyAgICAgICAgZmluYWxseToK
KyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZG9uZScp
CisKKyAgICBkZWYgaGFuZGxlX3Rlc3Qoc2VsZiwgc3JjLCB0ZXN0X25hbWUpOgorICAgICAgICBz
dGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnBvc3Rf
bWVzc2FnZSgnc3RhcnRlZF90ZXN0JywgdGVzdF9uYW1lLCBzdGFydCkKKyAgICAgICAgbnVtX2Zh
aWx1cmVzID0gbGVuKHNlbGYucmVzdWx0LmZhaWx1cmVzKQorICAgICAgICBudW1fZXJyb3JzID0g
bGVuKHNlbGYucmVzdWx0LmVycm9ycykKKyAgICAgICAgc2VsZi5sb2FkZXIubG9hZFRlc3RzRnJv
bU5hbWUodGVzdF9uYW1lLCBOb25lKS5ydW4oc2VsZi5yZXN1bHQpCisgICAgICAgIHN0b3AgPSB0
aW1lLnRpbWUoKQorICAgICAgICBlcnIgPSBOb25lCisgICAgICAgIGZhaWx1cmUgPSBOb25lCisg
ICAgICAgIGlmIGxlbihzZWxmLnJlc3VsdC5lcnJvcnMpID4gbnVtX2Vycm9yczoKKyAgICAgICAg
ICAgIGVyciA9IHNlbGYucmVzdWx0LmVycm9yc1tudW1fZXJyb3JzXVsxXQorICAgICAgICBpZiBs
ZW4oc2VsZi5yZXN1bHQuZmFpbHVyZXMpID4gbnVtX2ZhaWx1cmVzOgorICAgICAgICAgICAgZmFp
bHVyZSA9IHNlbGYucmVzdWx0LmZhaWx1cmVzW251bV9mYWlsdXJlc11bMV0KKyAgICAgICAgc2Vs
Zi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdmaW5pc2hlZF90ZXN0JywgdGVzdF9u
YW1lLCBzdG9wIC0gc3RhcnQsIGZhaWx1cmUsIGVycikKKworICAgIGRlZiBoYW5kbGVfc3RvcChz
ZWxmLCBzcmMpOgorICAgICAgICBzZWxmLnN0b3BfaGFuZGxpbmdfbWVzc2FnZXMoKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW5fdW5pdHRlc3QucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNDA1
ODg5NzNhZWFhZGUzZDAyYzZiZjAyNWNkYTgzMjk2ZGQwZjRlCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW5fdW5pdHRlc3QucHkKQEAgLTAsMCArMSw5
NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9z
CitpbXBvcnQgcGRiCitpbXBvcnQgY1N0cmluZ0lPIGFzIFN0cmluZ0lPCitpbXBvcnQgc3lzCitp
bXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS50ZXN0Lm1haW4gaW1wb3J0IFRlc3Rlcgor
CisKK2NsYXNzIER1bW15UmVzdWx0KG9iamVjdCk6CisgICAgd2FzU3VjY2Vzc2Z1bCA9IFRydWUK
KworCitjbGFzcyBEdW1teVJ1bm5lcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBz
dHJlYW0sICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisg
ICAgICAgIHBhc3MKKworICAgIGRlZiBydW4oc2VsZiwgc3VpdGUpOgorICAgICAgICBzZWxmLnN0
cmVhbS53cml0ZSgnUmFuICVkIHRlc3RzLicgJSBzdWl0ZS5jb3VudFRlc3RDYXNlcygpKQorICAg
ICAgICByZXR1cm4gRHVtbXlSZXN1bHQoKQorCit3ZWJraXRfcm9vdCA9IG9zLnBhdGguZGlybmFt
ZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRo
LmRpcm5hbWUoX19maWxlX18pKSkpKQorCisKK2NsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKKyAgICBkZWYgY21kKHNlbGYsIGFyZ3MsIGN3ZD1Ob25lLCBzdGRlcnI9Tm9uZSwgcmV0
PVRydWUsIG51bV90ZXN0cz1Ob25lKToKKyAgICAgICAgb2xkY3dkID0gb3MuZ2V0Y3dkKCkKKyAg
ICAgICAgaWYgbm90IGN3ZDoKKyAgICAgICAgICAgIGN3ZCA9ICcvc3JjL3drJworICAgICAgICB0
cnk6CisgICAgICAgICAgICBvcy5jaGRpcihjd2QpCisgICAgICAgICAgICBlcnIgPSBTdHJpbmdJ
Ty5TdHJpbmdJTygpCisgICAgICAgICAgICB0ZXN0ZXIgPSBUZXN0ZXIoZXJyKQorICAgICAgICAg
ICAgb3B0aW9ucywgYXJncyA9IHRlc3Rlci5wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgICAgICB0
ZXN0ZXIuY29uZmlndXJlKG9wdGlvbnMpCisgICAgICAgICAgICB0ZXN0ZXIuYWRkX3RyZWUob3Mu
cGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9vbHMnLCAnU2NyaXB0cycpLCAnd2Via2l0cHknKQor
ICAgICAgICAgICAgdGVzdGVyLnJ1bm5lciA9IER1bW15UnVubmVyKGVycikKKyAgICAgICAgICAg
IHJldHVybmNvZGUgPSB0ZXN0ZXIucnVuKGFyZ3MpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBvcy5jaGRpcihvbGRjd2QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIHJl
dHVybmNvZGUpCisgICAgICAgIGFjdHVhbF9lcnIgPSBlcnIuZ2V0dmFsdWUoKQorICAgICAgICBp
ZiBzdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVh
bF9lcnIsIHN0ZGVycikKKyAgICAgICAgaWYgbnVtX3Rlc3RzIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKCgnUmFuICVkIHRlc3QnICUgbnVtX3Rlc3RzKSBpbiBhY3R1
YWxfZXJyLCBhY3R1YWxfZXJyKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfcGFja2FnZShz
ZWxmKToKKyAgICAgICAgc2VsZi5jbWQoWyd3ZWJraXRweS5jb21tb24ud2F0Y2hsaXN0J10sIG51
bV90ZXN0cz0zNykKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X21vZHVsZShzZWxmKToKKyAg
ICAgICAgc2VsZi5jbWQoWyd3ZWJraXRweS5jb21tb24ud2F0Y2hsaXN0LndhdGNobGlzdF91bml0
dGVzdCddLCBudW1fdGVzdHM9MTApCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9jbGFzcyhz
ZWxmKToKKyAgICAgICAgc2VsZi5jbWQoWyd3ZWJraXRweS5jb21tb24ud2F0Y2hsaXN0LndhdGNo
bGlzdF91bml0dGVzdC5XYXRjaExpc3RUZXN0J10sIG51bV90ZXN0cz0xMCkKKworICAgIGRlZiBp
bnRlZ3JhdGlvbl90ZXN0X21ldGhvZChzZWxmKToKKyAgICAgICAgc2VsZi5jbWQoWyd3ZWJraXRw
eS5jb21tb24ud2F0Y2hsaXN0LndhdGNobGlzdF91bml0dGVzdC5XYXRjaExpc3RUZXN0LnRlc3Rf
ZmlsZW5hbWVfZGVmaW5pdGlvbiddLCBudW1fdGVzdHM9MSkKKworICAgIGRlZiBpbnRlZ3JhdGlv
bl90ZXN0X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgc2VsZi5jbWQoWyd3ZWJraXRweS9jb21t
b24vd2F0Y2hsaXN0J10sIG51bV90ZXN0cz0zNykKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0
X2N3ZChzZWxmKToKKyAgICAgICAgc2VsZi5jbWQoWycuJ10sIGN3ZD0nL3NyYy93ay9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi93YXRjaGxpc3QnLCBudW1fdGVzdHM9MzcpCisKKyAgICBk
ZWYgaW50ZWdyYXRpb25fdGVzdF9jd2Qoc2VsZik6CisgICAgICAgIHNlbGYuY21kKFsnd2F0Y2hs
aXN0J10sIGN3ZD0nL3NyYy93ay9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbicsIG51bV90
ZXN0cz0zNykKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2ZpbGVfaW5fY3dkKHNlbGYpOgor
ICAgICAgICBzZWxmLmNtZChbJ3dhdGNobGlzdC93YXRjaGxpc3RfdW5pdHRlc3QucHknXSwgY3dk
PScvc3JjL3drL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uJywgbnVtX3Rlc3RzPTEwKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>