<?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>92626</bug_id>
          
          <creation_ts>2012-07-30 04:06:30 -0700</creation_ts>
          <short_desc>[GTK] Add a non-subprocess jhbuild environment and use it for run-gtk-tests</short_desc>
          <delta_ts>2012-07-30 10:17:53 -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>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>681845</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-07-30 04:06:30 -0700</bug_when>
    <thetext>Instead of shelling out to enter the jhbuild environment, there should be a mode where we directly enter a jhbuild environment within a python script. Then we can use it for run-gtk-tests and get rid of Tools/Scripts/gtk/run-api-tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681919</commentid>
    <comment_count>1</comment_count>
      <attachid>155272</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-07-30 05:43:22 -0700</bug_when>
    <thetext>Created attachment 155272
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681936</commentid>
    <comment_count>2</comment_count>
      <attachid>155276</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-07-30 06:00:59 -0700</bug_when>
    <thetext>Created attachment 155276
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682059</commentid>
    <comment_count>3</comment_count>
      <attachid>155276</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-30 08:56:18 -0700</bug_when>
    <thetext>Comment on attachment 155276
Patch

Rejecting attachment 155276 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
ing file Tools/GNUmakefile.am
patching file Tools/Scripts/run-gtk-tests
patching file Tools/gtk/run-api-tests
rm &apos;Tools/gtk/run-api-tests&apos;
patching file Tools/jhbuild/jhbuild-wrapper
Hunk #4 FAILED at 125.
1 out of 4 hunks FAILED -- saving rejects to file Tools/jhbuild/jhbuild-wrapper.rej
patching file Tools/jhbuild/jhbuildutils.py

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Gustavo No...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/13400096</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682128</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-07-30 10:17:53 -0700</bug_when>
    <thetext>Committed r124039: &lt;http://trac.webkit.org/changeset/124039&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155272</attachid>
            <date>2012-07-30 05:43:22 -0700</date>
            <delta_ts>2012-07-30 06:00:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92626-20120730144305.patch</filename>
            <type>text/plain</type>
            <size>36645</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzOTc4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTExMGNhODBjOWU2NzVlMzhlYjRkZjg4NjcwYzYxYTAw
Mjc2NTg1NS4uMjRlNTgwYzM1NTYyODA4ZGQzY2U3NTRkZjMwYTVlZWE0ZDY2YjI2MSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIx
IEBACisyMDEyLTA3LTMwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXSBBZGQgYSBub24tc3VicHJvY2VzcyBqaGJ1aWxkIGVudmlyb25tZW50
IGFuZCB1c2UgaXQgZm9yIHJ1bi1ndGstdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNjI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBhbHdheXMgc2hlbGxpbmcgb3V0IHRvIGVu
dGVyIGEgamhidWlsZCBlbnZpcm9ubWVudCwgYWRkIGEgUHl0aG9uCisgICAgICAgIGhvb2sgZm9y
IGVudGVyaW5nIGEgamhidWlsZCBlbnZpcm9ubWVudCBkaXJlY3RseS4gVGhpcyBhdm9pZHMgcmVx
dWlyaW5nIGEKKyAgICAgICAgc2NyaXB0IHRvIGJlIHdyYXBwZWQgaW4gamhidWlsZC4KKworICAg
ICAgICAqIFNjcmlwdHMvcnVuLWd0ay10ZXN0czogTW92ZSBtb3N0IG9mIHRoZSBsb2dpYyBmcm9t
IHJ1bi1hcGktdGVzdHMgaGVyZQorICAgICAgICB3aXRoIGFkZGl0aW9uYWwgY29kZSBmb3IgZW50
ZXJpbmcgYSBqaGJ1aWxkIGVudmlyb25tZW50IGRpcmVjdGx5LgorICAgICAgICAqIGd0ay9ydW4t
YXBpLXRlc3RzOiBSZW1vdmVkLgorICAgICAgICAqIGpoYnVpbGQvamhidWlsZC13cmFwcGVyOiBV
c2UgdGhlIG5ldyBoZWxwZXIgbWV0aG9kcyBkZWZpbmVkIGluIGpoYnVpbGR1dGlscy5weS4KKyAg
ICAgICAgKiBqaGJ1aWxkL2poYnVpbGR1dGlscy5weTogQWRkIHNvbWUgbmV3IGhlbHBlciBtZXRo
b2RzIGhlcmUgaW5jbHVkaW5nCisgICAgICAgIGEgbWV0aG9kIHdoaWNoIGNhbiB0cmFuc2Zvcm0g
dGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaW50byBhIGpoYnVpbGQtaWZpZWQgb25lLgorCiAyMDEy
LTA3LTI5ICBNaWtlIFdlc3QgIDxta3dzdEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRXh0ZW5k
IGBhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlYCBwbHVnaW5zIHRvIGJldHRlciBz
dXBwb3J0IG11bHRpcGxlIGZyYW1lcy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWd0
ay10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cwppbmRleCAzYTA3ZTllNmNiYWM2
YWUwZTMzZDJhODI3ODdiYjhjYjM2YzBmZDQzLi40ZjFkNGMxNWZkMmEwZTM4M2Q1YjE2ZGM0YzVj
ZGY5MTQ5ZmE0NzY5IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKKysr
IGIvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorIyBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KICMKICMgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogIyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAs
MTggKzIwLDMyMCBAQAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBvcwogaW1wb3J0IHN5cwot
Ci1hcGlfdGVzdHNfY29tbWFuZCA9IFtdCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCByZQorZnJv
bSBzaWduYWwgaW1wb3J0IGFsYXJtLCBzaWduYWwsIFNJR0FMUk0sIFNJR0tJTEwKK2Zyb20gZ2ku
cmVwb3NpdG9yeSBpbXBvcnQgR2lvLCBHTGliCiAKIHRvcF9sZXZlbF9kaXJlY3RvcnkgPSBvcy5w
YXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAiLi4i
LCAiLi4iKSkKLXJ1bl9hcGlfdGVzdHNfcGF0aCA9IG9zLnBhdGguam9pbih0b3BfbGV2ZWxfZGly
ZWN0b3J5LCAnVG9vbHMnLCAnZ3RrJywgJ3J1bi1hcGktdGVzdHMnKQorc3lzLnBhdGguYXBwZW5k
KG9zLnBhdGguam9pbih0b3BfbGV2ZWxfZGlyZWN0b3J5LCAiVG9vbHMiLCAiamhidWlsZCIpKQor
c3lzLnBhdGguYXBwZW5kKG9zLnBhdGguam9pbih0b3BfbGV2ZWxfZGlyZWN0b3J5LCAiVG9vbHMi
LCAiZ3RrIikpCitpbXBvcnQgY29tbW9uCitpbXBvcnQgamhidWlsZHV0aWxzCisKK2NsYXNzIFNr
aXBwZWRUZXN0OgorICAgIEVOVElSRV9TVUlURSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB0ZXN0LCB0ZXN0X2Nhc2UsIHJlYXNvbiwgYnVnPU5vbmUpOgorICAgICAgICBzZWxmLnRl
c3QgPSB0ZXN0CisgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCisgICAgICAgIHNl
bGYucmVhc29uID0gcmVhc29uCisgICAgICAgIHNlbGYuYnVnID0gYnVnCisKKyAgICBkZWYgX19z
dHJfXyhzZWxmKToKKyAgICAgICAgc2tpcHBlZF90ZXN0X3N0ciA9ICIlcyIgJSBzZWxmLnRlc3QK
KworICAgICAgICBpZiBub3Qoc2VsZi5za2lwX2VudGlyZV9zdWl0ZSgpKToKKyAgICAgICAgICAg
IHNraXBwZWRfdGVzdF9zdHIgKz0gIiBbJXNdIiAlIHNlbGYudGVzdF9jYXNlCisKKyAgICAgICAg
c2tpcHBlZF90ZXN0X3N0ciArPSAiOiAlcyAiICUgc2VsZi5yZWFzb24KKyAgICAgICAgaWYgc2Vs
Zi5idWcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBza2lwcGVkX3Rlc3Rfc3RyICs9ICIoaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPSVkKSIgJSBzZWxmLmJ1ZworICAg
ICAgICByZXR1cm4gc2tpcHBlZF90ZXN0X3N0cgorCisgICAgZGVmIHNraXBfZW50aXJlX3N1aXRl
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50ZXN0X2Nhc2UgPT0gU2tpcHBlZFRlc3QuRU5U
SVJFX1NVSVRFCisKK2NsYXNzIFRlc3RUaW1lb3V0KEV4Y2VwdGlvbik6CisgICAgcGFzcworCitj
bGFzcyBUZXN0UnVubmVyOgorICAgIFRFU1RfRElSUyA9IFsgInVuaXR0ZXN0cyIsICJXZWJLaXQy
QVBJVGVzdHMiLCAiVGVzdFdlYktpdEFQSSIgXQorCisgICAgU0tJUFBFRCA9IFsKKyAgICAgICAg
U2tpcHBlZFRlc3QoInVuaXR0ZXN0cy90ZXN0ZG93bmxvYWQiLCAiL3dlYmtpdC9kb3dubG9hZC9u
b3QtZm91bmQiLCAiVGVzdCBmYWlscyBpbiBHVEsgTGludXggNjQtYml0IFJlbGVhc2UgYm90Iiwg
ODIzMjkpLAorICAgICAgICBTa2lwcGVkVGVzdCgidW5pdHRlc3RzL3Rlc3R3ZWJ2aWV3IiwgIi93
ZWJraXQvd2Vidmlldy9pY29uLXVyaSIsICJUZXN0IHRpbWVzIG91dCBpbiBHVEsgTGludXggNjQt
Yml0IFJlbGVhc2UgYm90IiwgODIzMjgpLAorICAgICAgICBTa2lwcGVkVGVzdCgidW5pdHRlc3Rz
L3Rlc3R3ZWJyZXNvdXJjZSIsICIvd2Via2l0L3dlYnJlc291cmNlL3N1Yl9yZXNvdXJjZV9sb2Fk
aW5nIiwgIlRlc3QgZmFpbHMgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzMw
KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoInVuaXR0ZXN0cy90ZXN0d2ViaW5zcGVjdG9yIiwgIi93
ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3NlLWFuZC1pbnNwZWN0IiwgIlRlc3QgaXMgZmxha3kgaW4g
R1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlIGJvdCIsIDgyODY5KSwKKyAgICAgICAgU2tpcHBlZFRl
c3QoIldlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViVmlldyIsICIvd2Via2l0Mi9XZWJLaXRX
ZWJWaWV3L21vdXNlLXRhcmdldCIsICJUZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQg
UmVsZWFzZSBib3QiLCA4Mjg2NiksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyQVBJVGVz
dHMvVGVzdFJlc291cmNlcyIsICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L3Jlc291cmNlcyIsICJU
ZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLCA4Mjg2OCksCisg
ICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9s
bGVyIiwgIi93ZWJraXQyL1dlYktpdEZpbmRDb250cm9sbGVyL25leHQiLCAiVGVzdCBmYWlscyAi
LCA5MTA4MyksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktp
dEZpbmRDb250cm9sbGVyIiwgIi93ZWJraXQyL1dlYktpdEZpbmRDb250cm9sbGVyL3ByZXZpb3Vz
IiwgIlRlc3QgZmFpbHMiLCA5MTA4MyksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyQVBJ
VGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyIiwgIi93ZWJraXQyL1dlYktpdEZpbmRDb250
cm9sbGVyL2hpZGUiLCAiVGVzdCAgYWx3YXlzIGZhaWxzIGluIFh2ZmIiLCA4OTgxMCksCisgICAg
ICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuV0tD
b25uZWN0aW9uIiwgIlRlc3RzIGZhaWwgYW5kIHRpbWUgb3V0IG91dCIsIDg0OTU5KSwKKyAgICAg
ICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5SZXN0
b3JlU2Vzc2lvblN0YXRlQ29udGFpbmluZ0Zvcm1EYXRhIiwgIlNlc3Npb24gU3RhdGUgaXMgbm90
IGltcGxlbWVudGVkIGluIEdUSysgcG9ydCIsIDg0OTYwKSwKKyAgICAgICAgU2tpcHBlZFRlc3Qo
IlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5TcGFjZWJhclNjcm9sbGluZyIs
ICJUZXN0IGZhaWxzIiwgODQ5NjEpLAorICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLk5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZv
ckltYWdlcyIsICJUZXN0IGlzIGZsYWt5IiwgODUwNjYpLAorICAgICAgICBTa2lwcGVkVGVzdCgi
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLk5ld0ZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dEZyYW1lcyIsICJUZXN0IGZhaWxzIiwgODUwMzcpLAorICAgICAgICBTa2lwcGVk
VGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLk1vdXNlTW92ZUFmdGVy
Q3Jhc2giLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIlRl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5DYW5IYW5kbGVSZXF1ZXN0IiwgIlRl
c3QgZmFpbHMiLCA4ODQ1MyksCisgICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXQyIiwgIldlYktpdDIuV0tQYWdlR2V0U2NhbGVGYWN0b3JOb3RaZXJvIiwgIlRlc3Qg
ZmFpbHMgYW5kIHRpbWVzIG91dCIsIDg4NDU1KSwKKyAgICBdCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgb3B0aW9ucywgdGVzdHM9W10pOgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9u
cworICAgICAgICBzZWxmLl9wcm9ncmFtc19wYXRoID0gY29tbW9uLmJ1aWxkX3BhdGgoIlByb2dy
YW1zIikKKyAgICAgICAgc2VsZi5fdGVzdHMgPSBzZWxmLl9nZXRfdGVzdHModGVzdHMpCisgICAg
ICAgIHNlbGYuX3NraXBwZWRfdGVzdHMgPSBUZXN0UnVubmVyLlNLSVBQRUQKKworICAgICAgICAj
IFRoZXNlIFNQSSBkYWVtb25zIG5lZWQgdG8gYmUgYWN0aXZlIGZvciB0aGUgYWNjZXNzaWJpbGl0
eSB0ZXN0cyB0byB3b3JrLgorICAgICAgICBzZWxmLl9zcGlfcmVnaXN0cnlkID0gTm9uZQorICAg
ICAgICBzZWxmLl9zcGlfYnVzX2xhdW5jaGVyID0gTm9uZQorCisgICAgZGVmIF9nZXRfdGVzdHMo
c2VsZiwgdGVzdHMpOgorICAgICAgICBpZiB0ZXN0czoKKyAgICAgICAgICAgIHJldHVybiB0ZXN0
cworCisgICAgICAgIHRlc3RzID0gW10KKyAgICAgICAgZm9yIHRlc3RfZGlyIGluIHNlbGYuVEVT
VF9ESVJTOgorICAgICAgICAgICAgYWJzb2x1dGVfdGVzdF9kaXIgPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5fcHJvZ3JhbXNfcGF0aCwgdGVzdF9kaXIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5p
c2RpcihhYnNvbHV0ZV90ZXN0X2Rpcik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgICAgIGZvciB0ZXN0X2ZpbGUgaW4gb3MubGlzdGRpcihhYnNvbHV0ZV90ZXN0X2Rpcik6Cisg
ICAgICAgICAgICAgICAgaWYgbm90IHRlc3RfZmlsZS5sb3dlcigpLnN0YXJ0c3dpdGgoInRlc3Qi
KToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB0ZXN0X3Bh
dGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcHJvZ3JhbXNfcGF0aCwgdGVzdF9kaXIsIHRlc3RfZmls
ZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh0ZXN0X3BhdGgpIGFuZCBvcy5h
Y2Nlc3ModGVzdF9wYXRoLCBvcy5YX09LKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMuYXBw
ZW5kKHRlc3RfcGF0aCkKKyAgICAgICAgcmV0dXJuIHRlc3RzCisKKyAgICBkZWYgX2xvb2t1cF9h
dHNwaTJfYmluYXJ5KHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgZXhlY19wcmVmaXggPSBjb21t
b24ucGtnX2NvbmZpZ19maWxlX3ZhcmlhYmxlKCdhdHNwaS0yJywgJ2V4ZWNfcHJlZml4JykKKyAg
ICAgICAgaWYgbm90IGV4ZWNfcHJlZml4OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAg
ICAgZm9yIHBhdGggaW4gWydsaWJleGVjJywgJ2xpYi9hdC1zcGkyLWNvcmUnLCAnbGliMzIvYXQt
c3BpMi1jb3JlJywgJ2xpYjY0L2F0LXNwaTItY29yZSddOgorICAgICAgICAgICAgZmlsZXBhdGgg
PSBvcy5wYXRoLmpvaW4oZXhlY19wcmVmaXgsIHBhdGgsIGZpbGVuYW1lKQorICAgICAgICAgICAg
aWYgb3MucGF0aC5pc2ZpbGUoZmlsZXBhdGgpOgorICAgICAgICAgICAgICAgIHJldHVybiBmaWxl
cGF0aAorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3N0YXJ0X2FjY2Vzc2liaWxp
dHlfZGFlbW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNwaV9idXNf
bGF1bmNoZXJfcGF0aCA9IHNlbGYuX2xvb2t1cF9hdHNwaTJfYmluYXJ5KCdhdC1zcGktYnVzLWxh
dW5jaGVyJykKKyAgICAgICAgc3BpX3JlZ2lzdHJ5ZF9wYXRoID0gc2VsZi5fbG9va3VwX2F0c3Bp
Ml9iaW5hcnkoJ2F0LXNwaTItcmVnaXN0cnlkJykKKyAgICAgICAgaWYgbm90IHNwaV9idXNfbGF1
bmNoZXJfcGF0aCBvciBub3Qgc3BpX3JlZ2lzdHJ5ZF9wYXRoOgorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fYWxseV9idXNfbGF1bmNo
ZXIgPSBzdWJwcm9jZXNzLlBvcGVuKFtzcGlfYnVzX2xhdW5jaGVyX3BhdGhdLCBlbnY9c2VsZi5f
dGVzdF9lbnYpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUo
IkZhaWxlZCB0byBsYXVuY2ggdGhlIGFjY2Vzc2liaWxpdHkgYnVzXG4iKQorICAgICAgICAgICAg
c3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAj
IFdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgU1BJIGJ1cyBpcyBsYXVuY2hlZCBiZWZvcmUgdHJ5
aW5nIHRvIHN0YXJ0IHRoZSBTUEkKKyAgICAgICAgIyByZWdpc3RyeSwgc28gd2Ugc3BpbiBhIG1h
aW4gbG9vcCB1bnRpbCB0aGUgYnVzIG5hbWUgYXBwZWFycyBvbiBEQnVzLgorICAgICAgICBsb29w
ID0gR0xpYi5NYWluTG9vcCgpCisgICAgICAgIEdpby5idXNfd2F0Y2hfbmFtZShHaW8uQnVzVHlw
ZS5TRVNTSU9OLCAnb3JnLmExMXkuQnVzJywgR2lvLkJ1c05hbWVXYXRjaGVyRmxhZ3MuTk9ORSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSAqYXJnczogbG9vcC5xdWl0KCksIE5v
bmUpCisgICAgICAgIGxvb3AucnVuKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxm
Ll9zcGlfcmVnaXN0cnlkID0gc3VicHJvY2Vzcy5Qb3Blbihbc3BpX3JlZ2lzdHJ5ZF9wYXRoXSwg
ZW52PXNlbGYuX3Rlc3RfZW52KQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzeXMuc3Rk
ZXJyLndyaXRlKCJGYWlsZWQgdG8gbGF1bmNoIHRoZSBhY2Nlc3NpYmlsaXR5IHJlZ2lzdHJ5XG4i
KQorICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9zZXR1cF90ZXN0aW5nX2Vudmly
b25tZW50KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2VudiA9IG9zLmVudmlyb24KKyAgICAg
ICAgc2VsZi5fdGVzdF9lbnZbIkRJU1BMQVkiXSA9IHNlbGYuX29wdGlvbnMuZGlzcGxheQorICAg
ICAgICBzZWxmLl90ZXN0X2VudlsiV0VCS0lUX0lOU1BFQ1RPUl9QQVRIIl0gPSBvcy5wYXRoLmFi
c3BhdGgob3MucGF0aC5qb2luKHNlbGYuX3Byb2dyYW1zX3BhdGgsICdyZXNvdXJjZXMnLCAnaW5z
cGVjdG9yJykpCisgICAgICAgIHNlbGYuX3Rlc3RfZW52WydHU0VUVElOR1NfQkFDS0VORCddID0g
J21lbW9yeScKKyAgICAgICAgc2VsZi5fdGVzdF9lbnZbIlRFU1RfV0VCS0lUX0FQSV9XRUJLSVQy
X1JFU09VUkNFU19QQVRIIl0gPSBjb21tb24udG9wX2xldmVsX3BhdGgoIlRvb2xzIiwgIlRlc3RX
ZWJLaXRBUEkiLCAiVGVzdHMiLCAiV2ViS2l0MiIpCisgICAgICAgIHNlbGYuX3Rlc3RfZW52WyJU
RVNUX1dFQktJVF9BUElfV0VCS0lUMl9JTkpFQ1RFRF9CVU5ETEVfUEFUSCJdID0gY29tbW9uLmJ1
aWxkX3BhdGgoIkxpYnJhcmllcyIpCisgICAgICAgIHNlbGYuX3Rlc3RfZW52WyJXRUJLSVRfRVhF
Q19QQVRIIl0gPSBzZWxmLl9wcm9ncmFtc19wYXRoCisKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgc2VsZi5feHZmYiA9IHN1YnByb2Nlc3MuUG9wZW4oWyJYdmZiIiwgc2VsZi5fb3B0aW9ucy5k
aXNwbGF5LCAiLXNjcmVlbiIsICIwIiwgIjgwMHg2MDB4MjQiLCAiLW5vbGlzdGVuIiwgInRjcCJd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnBy
b2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgZXhjZXB0IEV4Y2Vw
dGlvbiBhcyBlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIHJ1biBY
dmZiOiAlc1xuIiAlIGUpCisgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICMgSWYgd2UgY2Fubm90IHN0YXJ0IHRoZSBhY2Nl
c3NpYmlsaXR5IGRhZW1vbnMsIHdlIGNhbiBqdXN0IHNraXAgdGhlIGFjY2Vzc2liaWxpdHkgdGVz
dHMuCisgICAgICAgIGlmIG5vdCBzZWxmLl9zdGFydF9hY2Nlc3NpYmlsaXR5X2RhZW1vbnMoKToK
KyAgICAgICAgICAgIHByaW50ICJDb3VsZCBub3Qgc3RhcnQgYWNjZXNzaWJpbGl0eSBidXMsIHNv
IHNraXBwaW5nIFRlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5IgorICAgICAgICAgICAgc2VsZi5fc2tp
cHBlZF90ZXN0cy5hcHBlbmQoU2tpcHBlZFRlc3QoIldlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0
QWNjZXNzaWJpbGl0eSIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIkNvdWxkIG5vdCBzdGFy
dCBhY2Nlc3NpYmlsaXR5IGJ1cyIpKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF90
ZWFyX2Rvd25fdGVzdGluZ19lbnZpcm9ubWVudChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fc3Bp
X3JlZ2lzdHJ5ZDoKKyAgICAgICAgICAgIHNlbGYuX3NwaV9yZWdpc3RyeWQudGVybWluYXRlKCkK
KyAgICAgICAgaWYgc2VsZi5fc3BpX2J1c19sYXVuY2hlcjoKKyAgICAgICAgICAgIHNlbGYuX3Nw
aV9idXNfbGF1bmNoZXIudGVybWluYXRlKCkKKyAgICAgICAgc2VsZi5feHZmYi50ZXJtaW5hdGUo
KQorCisgICAgZGVmIF90ZXN0X2Nhc2VzX3RvX3NraXAoc2VsZiwgdGVzdF9wcm9ncmFtKToKKyAg
ICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwcGVkX2FjdGlvbiAhPSAnc2tpcCc6CisgICAgICAg
ICAgICByZXR1cm4gW10KKworICAgICAgICB0ZXN0X2Nhc2VzID0gW10KKyAgICAgICAgZm9yIHNr
aXBwZWQgaW4gc2VsZi5fc2tpcHBlZF90ZXN0czoKKyAgICAgICAgICAgIGlmIHRlc3RfcHJvZ3Jh
bS5lbmRzd2l0aChza2lwcGVkLnRlc3QpIGFuZCBub3Qgc2tpcHBlZC5za2lwX2VudGlyZV9zdWl0
ZSgpOgorICAgICAgICAgICAgICAgIHRlc3RfY2FzZXMuYXBwZW5kKHNraXBwZWQudGVzdF9jYXNl
KQorICAgICAgICByZXR1cm4gdGVzdF9jYXNlcworCisgICAgZGVmIF9zaG91bGRfcnVuX3Rlc3Rf
cHJvZ3JhbShzZWxmLCB0ZXN0X3Byb2dyYW0pOgorICAgICAgICAjIFRoaXMgaXMgbm90IGFmZmVj
dGVkIGJ5IHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBzaW5jZSBwcm9ncmFtcyBhcmUgc2tp
cHBlZCBmb3IKKyAgICAgICAgIyBwcm9ibGVtcyBpbiB0aGUgaGFybmVzcywgc3VjaCBhcyBmYWls
aW5nIHRvIHN0YXJ0IHRoZSBhY2Nlc3NpYmlsaXR5IGJ1cy4KKyAgICAgICAgZm9yIHNraXBwZWQg
aW4gc2VsZi5fc2tpcHBlZF90ZXN0czoKKyAgICAgICAgICAgIGlmIHRlc3RfcHJvZ3JhbS5lbmRz
d2l0aChza2lwcGVkLnRlc3QpIGFuZCBza2lwcGVkLnNraXBfZW50aXJlX3N1aXRlKCk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYg
X2dldF9jaGlsZF9waWRfZnJvbV90ZXN0X291dHB1dChzZWxmLCBvdXRwdXQpOgorICAgICAgICBp
ZiBub3Qgb3V0cHV0OgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIG1hdGNoID0gcmUu
c2VhcmNoKHInXChwaWQ9KD9QPGNoaWxkX3BpZD5bMC05XSspXCknLCBvdXRwdXQpCisgICAgICAg
IGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICByZXR1cm4gaW50
KG1hdGNoLmdyb3VwKCdjaGlsZF9waWQnKSkKKworICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYs
IHBpZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmtpbGwocGlkLCBTSUdLSUxMKQor
ICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICMgUHJvY2VzcyBhbHJlYWR5IGRp
ZWQuCisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX3J1bl90ZXN0X2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCwgdGltZW91dD0tMSk6CisgICAgICAgIGRlZiBhbGFybV9oYW5kbGVyKHNpZ251bSwg
ZnJhbWUpOgorICAgICAgICAgICAgcmFpc2UgVGVzdFRpbWVvdXQKKworICAgICAgICBwID0gc3Vi
cHJvY2Vzcy5Qb3Blbihjb21tYW5kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9c2VsZi5f
dGVzdF9lbnYpCisgICAgICAgIGlmIHRpbWVvdXQgPiAwOgorICAgICAgICAgICAgc2lnbmFsKFNJ
R0FMUk0sIGFsYXJtX2hhbmRsZXIpCisgICAgICAgICAgICBhbGFybSh0aW1lb3V0KQorCisgICAg
ICAgIHN0ZG91dCA9ICIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ZG91dCA9IHAuY29t
bXVuaWNhdGUoKVswXQorICAgICAgICAgICAgaWYgdGltZW91dCA+IDA6CisgICAgICAgICAgICAg
ICAgYWxhcm0oMCkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc3Rkb3V0KQorICAgICAg
ICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIGV4Y2VwdCBUZXN0VGltZW91dDoKKyAg
ICAgICAgICAgIHNlbGYuX2tpbGxfcHJvY2VzcyhwLnBpZCkKKyAgICAgICAgICAgIGNoaWxkX3Bp
ZCA9IHNlbGYuX2dldF9jaGlsZF9waWRfZnJvbV90ZXN0X291dHB1dChzdGRvdXQpCisgICAgICAg
ICAgICBpZiBjaGlsZF9waWQgPiAwOgorICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfcHJvY2Vz
cyhjaGlsZF9waWQpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiBub3QgcC5y
ZXR1cm5jb2RlCisKKyAgICBkZWYgX3J1bl90ZXN0X2dsaWIoc2VsZiwgdGVzdF9wcm9ncmFtKToK
KyAgICAgICAgdGVzdGVyX2NvbW1hbmQgPSBbJ2d0ZXN0ZXInXQorICAgICAgICBpZiBzZWxmLl9v
cHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICB0ZXN0ZXJfY29tbWFuZC5hcHBlbmQoJy0tdmVy
Ym9zZScpCisgICAgICAgIGZvciB0ZXN0X2Nhc2UgaW4gc2VsZi5fdGVzdF9jYXNlc190b19za2lw
KHRlc3RfcHJvZ3JhbSk6CisgICAgICAgICAgICB0ZXN0ZXJfY29tbWFuZC5leHRlbmQoWyctcycs
IHRlc3RfY2FzZV0pCisgICAgICAgIHRlc3Rlcl9jb21tYW5kLmFwcGVuZCh0ZXN0X3Byb2dyYW0p
CisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0X2NvbW1hbmQodGVzdGVyX2NvbW1hbmQs
IHNlbGYuX29wdGlvbnMudGltZW91dCkKKworICAgIGRlZiBfcnVuX3Rlc3RfZ29vZ2xlKHNlbGYs
IHRlc3RfcHJvZ3JhbSk6CisgICAgICAgIHRlc3Rlcl9jb21tYW5kID0gW3Rlc3RfcHJvZ3JhbV0K
KyAgICAgICAgc2tpcHBlZF90ZXN0c19jYXNlcyA9IHNlbGYuX3Rlc3RfY2FzZXNfdG9fc2tpcCh0
ZXN0X3Byb2dyYW0pCisgICAgICAgIGlmIHNraXBwZWRfdGVzdHNfY2FzZXM6CisgICAgICAgICAg
ICB0ZXN0ZXJfY29tbWFuZC5hcHBlbmQoIi0tZ3Rlc3RfZmlsdGVyPS0lcyIgJSAiOiIuam9pbihz
a2lwcGVkX3Rlc3RzX2Nhc2VzKSkKKworICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RfY29t
bWFuZCh0ZXN0ZXJfY29tbWFuZCwgc2VsZi5fb3B0aW9ucy50aW1lb3V0KQorCisgICAgZGVmIF9y
dW5fdGVzdChzZWxmLCB0ZXN0X3Byb2dyYW0pOgorICAgICAgICBpZiAidW5pdHRlc3RzIiBpbiB0
ZXN0X3Byb2dyYW0gb3IgIldlYktpdDJBUElUZXN0cyIgaW4gdGVzdF9wcm9ncmFtOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0X2dsaWIodGVzdF9wcm9ncmFtKQorCisgICAgICAg
IGlmICJUZXN0V2ViS2l0QVBJIiBpbiB0ZXN0X3Byb2dyYW06CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5fcnVuX3Rlc3RfZ29vZ2xlKHRlc3RfcHJvZ3JhbSkKKworICAgICAgICByZXR1cm4gRmFs
c2UKKworICAgIGRlZiBydW5fdGVzdHMoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0
czoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkVSUk9SOiB0ZXN0cyBub3QgZm91bmQg
aW4gJXMuXG4iICUgKHNlbGYuX3Byb2dyYW1zX3BhdGgpKQorICAgICAgICAgICAgc3lzLnN0ZGVy
ci5mbHVzaCgpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9z
ZXR1cF90ZXN0aW5nX2Vudmlyb25tZW50KCk6CisgICAgICAgICAgICByZXR1cm4gMQorCisgICAg
ICAgICMgUmVtb3ZlIHNraXBwZWQgdGVzdHMgbm93IGluc3RlYWQgb2Ygd2hlbiB3ZSBmaW5kIHRo
ZW0sIGJlY2F1c2UKKyAgICAgICAgIyBzb21lIHRlc3RzIG1pZ2h0IGJlIHNraXBwZWQgd2hpbGUg
c2V0dGluZyB1cCB0aGUgdGVzdCBlbnZpcm9ubWVudC4KKyAgICAgICAgc2VsZi5fdGVzdHMgPSBb
dGVzdCBmb3IgdGVzdCBpbiBzZWxmLl90ZXN0cyBpZiBzZWxmLl9zaG91bGRfcnVuX3Rlc3RfcHJv
Z3JhbSh0ZXN0KV0KKworICAgICAgICBmYWlsZWRfdGVzdHMgPSBbXQorICAgICAgICB0aW1lZF9v
dXRfdGVzdHMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgdGVzdCBpbiBzZWxm
Ll90ZXN0czoKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gVHJ1ZQorICAgICAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHNlbGYuX3J1bl90ZXN0KHRlc3Qp
CisgICAgICAgICAgICAgICAgZXhjZXB0IFRlc3RUaW1lb3V0OgorICAgICAgICAgICAgICAgICAg
ICBzeXMuc3Rkb3V0LndyaXRlKCJURVNUOiAlczogVElNRU9VVFxuIiAlIHRlc3QpCisgICAgICAg
ICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICB0aW1l
ZF9vdXRfdGVzdHMuYXBwZW5kKHRlc3QpCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgc3VjY2Vz
czoKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkX3Rlc3RzLmFwcGVuZCh0ZXN0KQorICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fdGVhcl9kb3duX3Rlc3RpbmdfZW52aXJvbm1l
bnQoKQorCisgICAgICAgIGlmIGZhaWxlZF90ZXN0czoKKyAgICAgICAgICAgIG5hbWVzID0gW3Rl
c3QucmVwbGFjZShzZWxmLl9wcm9ncmFtc19wYXRoLCAnJywgMSkgZm9yIHRlc3QgaW4gZmFpbGVk
X3Rlc3RzXQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiVGVzdHMgZmFpbGVkOiAlc1xu
IiAlICIsICIuam9pbihuYW1lcykpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKwor
ICAgICAgICBpZiB0aW1lZF9vdXRfdGVzdHM6CisgICAgICAgICAgICBuYW1lcyA9IFt0ZXN0LnJl
cGxhY2Uoc2VsZi5fcHJvZ3JhbXNfcGF0aCwgJycsIDEpIGZvciB0ZXN0IGluIHRpbWVkX291dF90
ZXN0c10KKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlRlc3RzIHRoYXQgdGltZWQgb3V0
OiAlc1xuIiAlICIsICIuam9pbihuYW1lcykpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNo
KCkKKworICAgICAgICBpZiBzZWxmLl9za2lwcGVkX3Rlc3RzIGFuZCBzZWxmLl9vcHRpb25zLnNr
aXBwZWRfYWN0aW9uID09ICdza2lwJzoKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlRl
c3RzIHNraXBwZWQ6XG4lc1xuIiAlICJcbiIuam9pbihbc3RyKHNraXBwZWQpIGZvciBza2lwcGVk
IGluIHNlbGYuX3NraXBwZWRfdGVzdHNdKSkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2go
KQorCisgICAgICAgIHJldHVybiBsZW4oZmFpbGVkX3Rlc3RzKQogCi1pZiBvcy5wYXRoLmV4aXN0
cyhvcy5wYXRoLmpvaW4odG9wX2xldmVsX2RpcmVjdG9yeSwgJ1dlYktpdEJ1aWxkJywgJ0RlcGVu
ZGVuY2llcycpKToKLSAgICBqaGJ1aWxkX3dyYXBwZXJfcGF0aCA9IG9zLnBhdGguam9pbih0b3Bf
bGV2ZWxfZGlyZWN0b3J5LCAnVG9vbHMnLCAnamhidWlsZCcsICdqaGJ1aWxkLXdyYXBwZXInKQot
ICAgIGFwaV90ZXN0c19jb21tYW5kID0gW2poYnVpbGRfd3JhcHBlcl9wYXRoLCAnLS1ndGsnLCAn
cnVuJywgcnVuX2FwaV90ZXN0c19wYXRoXQotZWxzZToKLSAgICBhcGlfdGVzdHNfY29tbWFuZCA9
IFtydW5fYXBpX3Rlc3RzX3BhdGhdCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGlm
IG5vdCBqaGJ1aWxkdXRpbHMuZW50ZXJfamhidWlsZF9lbnZpcm9ubWVudF9pZl9hdmFpbGFibGUo
Imd0ayIpOgorICAgICAgICBwcmludCAiKioqIgorICAgICAgICBwcmludCAiKioqIFdhcm5pbmc6
IGpoYnVpbGQgZW52aXJvbm1lbnQgbm90IHByZXNlbnQuIFJ1biB1cGRhdGUtd2Via2l0Z3RrLWxp
YnMgYmVmb3JlIGJ1aWxkLXdlYmtpdCB0byBlbnN1cmUgcHJvcGVyIHRlc3RpbmcuIgorICAgICAg
ICBwcmludCAiKioqIgogCi1hcGlfdGVzdHNfY29tbWFuZC5leHRlbmQoc3lzLmFyZ3ZbMTpdKQot
c3lzLmV4aXQoc3VicHJvY2Vzcy5Qb3BlbihhcGlfdGVzdHNfY29tbWFuZCkud2FpdCgpKQorICAg
IG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9J3VzYWdlOiAlcHJv
ZyBbb3B0aW9uc10gW3Rlc3QuLi5dJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1y
JywgJy0tcmVsZWFzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3Rv
cmVfdHJ1ZScsIGRlc3Q9J3JlbGVhc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwPSdSdW4gaW4gUmVsZWFzZScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctZCcs
ICctLWRlYnVnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90
cnVlJywgZGVzdD0nZGVidWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdS
dW4gaW4gRGVidWcnKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXYnLCAnLS12ZXJi
b3NlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywg
ZGVzdD0ndmVyYm9zZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBn
dGVzdGVyIGluIHZlcmJvc2UgbW9kZScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCct
LWRpc3BsYXknLCBhY3Rpb249J3N0b3JlJywgZGVzdD0nZGlzcGxheScsIGRlZmF1bHQ9Jzo1NScs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0Rpc3BsYXkgdG8gcnVuIFh2ZmIn
KQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1za2lwcGVkJywgYWN0aW9uPSdzdG9y
ZScsIGRlc3Q9J3NraXBwZWRfYWN0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hvaWNlcz1bJ3NraXAnLCAnaWdub3JlJywgJ29ubHknXSwgZGVmYXVsdD0nc2tpcCcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J3NraXB8aWdub3JlfG9ubHknLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTcGVjaWZpZXMgaG93IHRvIHRyZWF0IHRo
ZSBza2lwcGVkIHRlc3RzJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy10JywgJy0t
dGltZW91dCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmUnLCB0
eXBlPSdpbnQnLCBkZXN0PSd0aW1lb3V0JywgZGVmYXVsdD0xMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nVGltZSBpbiBzZWNvbmRzIHVudGlsIGEgdGVzdCB0aW1lcyBvdXQn
KQorICAgIG9wdGlvbnMsIGFyZ3MgPSBvcHRpb25fcGFyc2VyLnBhcnNlX2FyZ3MoKQogCisgICAg
c3lzLmV4aXQoVGVzdFJ1bm5lcihvcHRpb25zLCBhcmdzKS5ydW5fdGVzdHMoKSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL2d0ay9ydW4tYXBpLXRlc3RzIGIvVG9vbHMvZ3RrL3J1bi1hcGktdGVzdHMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGE2MDFhNzY2YzAwZGM0NzEwMDQ3ZWU5ZjlhMWE2
M2YwNjE0YzhkNjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvVG9vbHMvZ3RrL3J1bi1hcGktdGVzdHMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBA
QAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBJ
Z2FsaWEgUy5MLgotIwotIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0jIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
IyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotIyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotaW1wb3J0IGNv
bW1vbgotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IG9w
dHBhcnNlCi1pbXBvcnQgcmUKLWZyb20gc2lnbmFsIGltcG9ydCBhbGFybSwgc2lnbmFsLCBTSUdB
TFJNLCBTSUdLSUxMCi1mcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdpbywgR0xpYgotCi1jbGFz
cyBTa2lwcGVkVGVzdDoKLSAgICBFTlRJUkVfU1VJVEUgPSBOb25lCi0KLSAgICBkZWYgX19pbml0
X18oc2VsZiwgdGVzdCwgdGVzdF9jYXNlLCByZWFzb24sIGJ1Zz1Ob25lKToKLSAgICAgICAgc2Vs
Zi50ZXN0ID0gdGVzdAotICAgICAgICBzZWxmLnRlc3RfY2FzZSA9IHRlc3RfY2FzZQotICAgICAg
ICBzZWxmLnJlYXNvbiA9IHJlYXNvbgotICAgICAgICBzZWxmLmJ1ZyA9IGJ1ZwotCi0gICAgZGVm
IF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHNraXBwZWRfdGVzdF9zdHIgPSAiJXMiICUgc2VsZi50
ZXN0Ci0KLSAgICAgICAgaWYgbm90KHNlbGYuc2tpcF9lbnRpcmVfc3VpdGUoKSk6Ci0gICAgICAg
ICAgICBza2lwcGVkX3Rlc3Rfc3RyICs9ICIgWyVzXSIgJSBzZWxmLnRlc3RfY2FzZQotCi0gICAg
ICAgIHNraXBwZWRfdGVzdF9zdHIgKz0gIjogJXMgIiAlIHNlbGYucmVhc29uCi0gICAgICAgIGlm
IHNlbGYuYnVnIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2tpcHBlZF90ZXN0X3N0ciArPSAi
KGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0lZCkiICUgc2VsZi5idWcK
LSAgICAgICAgcmV0dXJuIHNraXBwZWRfdGVzdF9zdHIKLQotICAgIGRlZiBza2lwX2VudGlyZV9z
dWl0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYudGVzdF9jYXNlID09IFNraXBwZWRUZXN0
LkVOVElSRV9TVUlURQotCi1jbGFzcyBUZXN0VGltZW91dChFeGNlcHRpb24pOgotICAgIHBhc3MK
LQotY2xhc3MgVGVzdFJ1bm5lcjoKLSAgICBURVNUX0RJUlMgPSBbICJ1bml0dGVzdHMiLCAiV2Vi
S2l0MkFQSVRlc3RzIiwgIlRlc3RXZWJLaXRBUEkiIF0KLQotICAgIFNLSVBQRUQgPSBbCi0gICAg
ICAgIFNraXBwZWRUZXN0KCJ1bml0dGVzdHMvdGVzdGRvd25sb2FkIiwgIi93ZWJraXQvZG93bmxv
YWQvbm90LWZvdW5kIiwgIlRlc3QgZmFpbHMgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJv
dCIsIDgyMzI5KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoInVuaXR0ZXN0cy90ZXN0d2VidmlldyIs
ICIvd2Via2l0L3dlYnZpZXcvaWNvbi11cmkiLCAiVGVzdCB0aW1lcyBvdXQgaW4gR1RLIExpbnV4
IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI4KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoInVuaXR0
ZXN0cy90ZXN0d2VicmVzb3VyY2UiLCAiL3dlYmtpdC93ZWJyZXNvdXJjZS9zdWJfcmVzb3VyY2Vf
bG9hZGluZyIsICJUZXN0IGZhaWxzIGluIEdUSyBMaW51eCA2NC1iaXQgUmVsZWFzZSBib3QiLCA4
MjMzMCksCi0gICAgICAgIFNraXBwZWRUZXN0KCJ1bml0dGVzdHMvdGVzdHdlYmluc3BlY3RvciIs
ICIvd2Via2l0L3dlYmluc3BlY3Rvci9jbG9zZS1hbmQtaW5zcGVjdCIsICJUZXN0IGlzIGZsYWt5
IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLCA4Mjg2OSksCi0gICAgICAgIFNraXBw
ZWRUZXN0KCJXZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXciLCAiL3dlYmtpdDIvV2Vi
S2l0V2ViVmlldy9tb3VzZS10YXJnZXQiLCAiVGVzdCBpcyBmbGFreSBpbiBHVEsgTGludXggMzIt
Yml0IFJlbGVhc2UgYm90IiwgODI4NjYpLAotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MkFQ
SVRlc3RzL1Rlc3RSZXNvdXJjZXMiLCAiL3dlYmtpdDIvV2ViS2l0V2ViVmlldy9yZXNvdXJjZXMi
LCAiVGVzdCBpcyBmbGFreSBpbiBHVEsgTGludXggMzItYml0IFJlbGVhc2UgYm90IiwgODI4Njgp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRGaW5kQ29u
dHJvbGxlciIsICIvd2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci9uZXh0IiwgIlRlc3QgZmFp
bHMgIiwgOTEwODMpLAotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MkFQSVRlc3RzL1Rlc3RX
ZWJLaXRGaW5kQ29udHJvbGxlciIsICIvd2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci9wcmV2
aW91cyIsICJUZXN0IGZhaWxzIiwgOTEwODMpLAotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0
MkFQSVRlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlciIsICIvd2Via2l0Mi9XZWJLaXRGaW5k
Q29udHJvbGxlci9oaWRlIiwgIlRlc3QgIGFsd2F5cyBmYWlscyBpbiBYdmZiIiwgODk4MTApLAot
ICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQy
LldLQ29ubmVjdGlvbiIsICJUZXN0cyBmYWlsIGFuZCB0aW1lIG91dCBvdXQiLCA4NDk1OSksCi0g
ICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIu
UmVzdG9yZVNlc3Npb25TdGF0ZUNvbnRhaW5pbmdGb3JtRGF0YSIsICJTZXNzaW9uIFN0YXRlIGlz
IG5vdCBpbXBsZW1lbnRlZCBpbiBHVEsrIHBvcnQiLCA4NDk2MCksCi0gICAgICAgIFNraXBwZWRU
ZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuU3BhY2ViYXJTY3JvbGxp
bmciLCAiVGVzdCBmYWlscyIsIDg0OTYxKSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlv
dXRGb3JJbWFnZXMiLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKLSAgICAgICAgU2tpcHBlZFRl
c3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGcmFtZXMiLCAiVGVzdCBmYWlscyIsIDg1MDM3KSwKLSAgICAgICAgU2tp
cHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5Nb3VzZU1vdmVB
ZnRlckNyYXNoIiwgIlRlc3QgaXMgZmxha3kiLCA4NTA2NiksCi0gICAgICAgIFNraXBwZWRUZXN0
KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuQ2FuSGFuZGxlUmVxdWVzdCIs
ICJUZXN0IGZhaWxzIiwgODg0NTMpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLldLUGFnZUdldFNjYWxlRmFjdG9yTm90WmVybyIsICJU
ZXN0IGZhaWxzIGFuZCB0aW1lcyBvdXQiLCA4ODQ1NSksCi0gICAgXQotCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIG9wdGlvbnMsIHRlc3RzPVtdKToKLSAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9w
dGlvbnMKLSAgICAgICAgc2VsZi5fcHJvZ3JhbXNfcGF0aCA9IGNvbW1vbi5idWlsZF9wYXRoKCJQ
cm9ncmFtcyIpCi0gICAgICAgIHNlbGYuX3Rlc3RzID0gc2VsZi5fZ2V0X3Rlc3RzKHRlc3RzKQot
ICAgICAgICBzZWxmLl9za2lwcGVkX3Rlc3RzID0gVGVzdFJ1bm5lci5TS0lQUEVECi0KLSAgICAg
ICAgIyBUaGVzZSBTUEkgZGFlbW9ucyBuZWVkIHRvIGJlIGFjdGl2ZSBmb3IgdGhlIGFjY2Vzc2li
aWxpdHkgdGVzdHMgdG8gd29yay4KLSAgICAgICAgc2VsZi5fc3BpX3JlZ2lzdHJ5ZCA9IE5vbmUK
LSAgICAgICAgc2VsZi5fc3BpX2J1c19sYXVuY2hlciA9IE5vbmUKLQotICAgIGRlZiBfZ2V0X3Rl
c3RzKHNlbGYsIHRlc3RzKToKLSAgICAgICAgaWYgdGVzdHM6Ci0gICAgICAgICAgICByZXR1cm4g
dGVzdHMKLQotICAgICAgICB0ZXN0cyA9IFtdCi0gICAgICAgIGZvciB0ZXN0X2RpciBpbiBzZWxm
LlRFU1RfRElSUzoKLSAgICAgICAgICAgIGFic29sdXRlX3Rlc3RfZGlyID0gb3MucGF0aC5qb2lu
KHNlbGYuX3Byb2dyYW1zX3BhdGgsIHRlc3RfZGlyKQotICAgICAgICAgICAgaWYgbm90IG9zLnBh
dGguaXNkaXIoYWJzb2x1dGVfdGVzdF9kaXIpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0g
ICAgICAgICAgICBmb3IgdGVzdF9maWxlIGluIG9zLmxpc3RkaXIoYWJzb2x1dGVfdGVzdF9kaXIp
OgotICAgICAgICAgICAgICAgIGlmIG5vdCB0ZXN0X2ZpbGUubG93ZXIoKS5zdGFydHN3aXRoKCJ0
ZXN0Iik6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgdGVz
dF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3Byb2dyYW1zX3BhdGgsIHRlc3RfZGlyLCB0ZXN0
X2ZpbGUpCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUodGVzdF9wYXRoKSBhbmQg
b3MuYWNjZXNzKHRlc3RfcGF0aCwgb3MuWF9PSyk6Ci0gICAgICAgICAgICAgICAgICAgIHRlc3Rz
LmFwcGVuZCh0ZXN0X3BhdGgpCi0gICAgICAgIHJldHVybiB0ZXN0cwotCi0gICAgZGVmIF9sb29r
dXBfYXRzcGkyX2JpbmFyeShzZWxmLCBmaWxlbmFtZSk6Ci0gICAgICAgIGV4ZWNfcHJlZml4ID0g
Y29tbW9uLnBrZ19jb25maWdfZmlsZV92YXJpYWJsZSgnYXRzcGktMicsICdleGVjX3ByZWZpeCcp
Ci0gICAgICAgIGlmIG5vdCBleGVjX3ByZWZpeDoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0g
ICAgICAgIGZvciBwYXRoIGluIFsnbGliZXhlYycsICdsaWIvYXQtc3BpMi1jb3JlJywgJ2xpYjMy
L2F0LXNwaTItY29yZScsICdsaWI2NC9hdC1zcGkyLWNvcmUnXToKLSAgICAgICAgICAgIGZpbGVw
YXRoID0gb3MucGF0aC5qb2luKGV4ZWNfcHJlZml4LCBwYXRoLCBmaWxlbmFtZSkKLSAgICAgICAg
ICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVwYXRoKToKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmlsZXBhdGgKLQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIF9zdGFydF9hY2Nlc3Np
YmlsaXR5X2RhZW1vbnMoc2VsZik6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBzcGlf
YnVzX2xhdW5jaGVyX3BhdGggPSBzZWxmLl9sb29rdXBfYXRzcGkyX2JpbmFyeSgnYXQtc3BpLWJ1
cy1sYXVuY2hlcicpCi0gICAgICAgIHNwaV9yZWdpc3RyeWRfcGF0aCA9IHNlbGYuX2xvb2t1cF9h
dHNwaTJfYmluYXJ5KCdhdC1zcGkyLXJlZ2lzdHJ5ZCcpCi0gICAgICAgIGlmIG5vdCBzcGlfYnVz
X2xhdW5jaGVyX3BhdGggb3Igbm90IHNwaV9yZWdpc3RyeWRfcGF0aDoKLSAgICAgICAgICAgIHJl
dHVybiBGYWxzZQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2FsbHlfYnVzX2xh
dW5jaGVyID0gc3VicHJvY2Vzcy5Qb3Blbihbc3BpX2J1c19sYXVuY2hlcl9wYXRoXSwgZW52PXNl
bGYuX3Rlc3RfZW52KQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndy
aXRlKCJGYWlsZWQgdG8gbGF1bmNoIHRoZSBhY2Nlc3NpYmlsaXR5IGJ1c1xuIikKLSAgICAgICAg
ICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAg
ICAgIyBXZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIFNQSSBidXMgaXMgbGF1bmNoZWQgYmVmb3Jl
IHRyeWluZyB0byBzdGFydCB0aGUgU1BJCi0gICAgICAgICMgcmVnaXN0cnksIHNvIHdlIHNwaW4g
YSBtYWluIGxvb3AgdW50aWwgdGhlIGJ1cyBuYW1lIGFwcGVhcnMgb24gREJ1cy4KLSAgICAgICAg
bG9vcCA9IEdMaWIuTWFpbkxvb3AoKQotICAgICAgICBHaW8uYnVzX3dhdGNoX25hbWUoR2lvLkJ1
c1R5cGUuU0VTU0lPTiwgJ29yZy5hMTF5LkJ1cycsIEdpby5CdXNOYW1lV2F0Y2hlckZsYWdzLk5P
TkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgKmFyZ3M6IGxvb3AucXVpdCgp
LCBOb25lKQotICAgICAgICBsb29wLnJ1bigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAg
c2VsZi5fc3BpX3JlZ2lzdHJ5ZCA9IHN1YnByb2Nlc3MuUG9wZW4oW3NwaV9yZWdpc3RyeWRfcGF0
aF0sIGVudj1zZWxmLl90ZXN0X2VudikKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc3lz
LnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIGxhdW5jaCB0aGUgYWNjZXNzaWJpbGl0eSByZWdpc3Ry
eVxuIikKLSAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCi0KLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfc2V0dXBfdGVzdGluZ19l
bnZpcm9ubWVudChzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF9lbnYgPSBvcy5lbnZpcm9uCi0g
ICAgICAgIHNlbGYuX3Rlc3RfZW52WyJESVNQTEFZIl0gPSBzZWxmLl9vcHRpb25zLmRpc3BsYXkK
LSAgICAgICAgc2VsZi5fdGVzdF9lbnZbIldFQktJVF9JTlNQRUNUT1JfUEFUSCJdID0gb3MucGF0
aC5hYnNwYXRoKG9zLnBhdGguam9pbihzZWxmLl9wcm9ncmFtc19wYXRoLCAncmVzb3VyY2VzJywg
J2luc3BlY3RvcicpKQotICAgICAgICBzZWxmLl90ZXN0X2VudlsnR1NFVFRJTkdTX0JBQ0tFTkQn
XSA9ICdtZW1vcnknCi0gICAgICAgIHNlbGYuX3Rlc3RfZW52WyJURVNUX1dFQktJVF9BUElfV0VC
S0lUMl9SRVNPVVJDRVNfUEFUSCJdID0gY29tbW9uLnRvcF9sZXZlbF9wYXRoKCJUb29scyIsICJU
ZXN0V2ViS2l0QVBJIiwgIlRlc3RzIiwgIldlYktpdDIiKQotICAgICAgICBzZWxmLl90ZXN0X2Vu
dlsiVEVTVF9XRUJLSVRfQVBJX1dFQktJVDJfSU5KRUNURURfQlVORExFX1BBVEgiXSA9IGNvbW1v
bi5idWlsZF9wYXRoKCJMaWJyYXJpZXMiKQotICAgICAgICBzZWxmLl90ZXN0X2VudlsiV0VCS0lU
X0VYRUNfUEFUSCJdID0gc2VsZi5fcHJvZ3JhbXNfcGF0aAotCi0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgIHNlbGYuX3h2ZmIgPSBzdWJwcm9jZXNzLlBvcGVuKFsiWHZmYiIsIHNlbGYuX29wdGlv
bnMuZGlzcGxheSwgIi1zY3JlZW4iLCAiMCIsICI4MDB4NjAweDI0IiwgIi1ub2xpc3RlbiIsICJ0
Y3AiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1z
dWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgIGV4Y2VwdCBF
eGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0byBy
dW4gWHZmYjogJXNcbiIgJSBlKQotICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAg
ICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICAjIElmIHdlIGNhbm5vdCBzdGFydCB0aGUg
YWNjZXNzaWJpbGl0eSBkYWVtb25zLCB3ZSBjYW4ganVzdCBza2lwIHRoZSBhY2Nlc3NpYmlsaXR5
IHRlc3RzLgotICAgICAgICBpZiBub3Qgc2VsZi5fc3RhcnRfYWNjZXNzaWJpbGl0eV9kYWVtb25z
KCk6Ci0gICAgICAgICAgICBwcmludCAiQ291bGQgbm90IHN0YXJ0IGFjY2Vzc2liaWxpdHkgYnVz
LCBzbyBza2lwcGluZyBUZXN0V2ViS2l0QWNjZXNzaWJpbGl0eSIKLSAgICAgICAgICAgIHNlbGYu
X3NraXBwZWRfdGVzdHMuYXBwZW5kKFNraXBwZWRUZXN0KCJXZWJLaXQyQVBJVGVzdHMvVGVzdFdl
YktpdEFjY2Vzc2liaWxpdHkiLCBTa2lwcGVkVGVzdC5FTlRJUkVfU1VJVEUsICJDb3VsZCBub3Qg
c3RhcnQgYWNjZXNzaWJpbGl0eSBidXMiKSkKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRl
ZiBfdGVhcl9kb3duX3Rlc3RpbmdfZW52aXJvbm1lbnQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYu
X3NwaV9yZWdpc3RyeWQ6Ci0gICAgICAgICAgICBzZWxmLl9zcGlfcmVnaXN0cnlkLnRlcm1pbmF0
ZSgpCi0gICAgICAgIGlmIHNlbGYuX3NwaV9idXNfbGF1bmNoZXI6Ci0gICAgICAgICAgICBzZWxm
Ll9zcGlfYnVzX2xhdW5jaGVyLnRlcm1pbmF0ZSgpCi0gICAgICAgIHNlbGYuX3h2ZmIudGVybWlu
YXRlKCkKLQotICAgIGRlZiBfdGVzdF9jYXNlc190b19za2lwKHNlbGYsIHRlc3RfcHJvZ3JhbSk6
Ci0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMuc2tpcHBlZF9hY3Rpb24gIT0gJ3NraXAnOgotICAg
ICAgICAgICAgcmV0dXJuIFtdCi0KLSAgICAgICAgdGVzdF9jYXNlcyA9IFtdCi0gICAgICAgIGZv
ciBza2lwcGVkIGluIHNlbGYuX3NraXBwZWRfdGVzdHM6Ci0gICAgICAgICAgICBpZiB0ZXN0X3By
b2dyYW0uZW5kc3dpdGgoc2tpcHBlZC50ZXN0KSBhbmQgbm90IHNraXBwZWQuc2tpcF9lbnRpcmVf
c3VpdGUoKToKLSAgICAgICAgICAgICAgICB0ZXN0X2Nhc2VzLmFwcGVuZChza2lwcGVkLnRlc3Rf
Y2FzZSkKLSAgICAgICAgcmV0dXJuIHRlc3RfY2FzZXMKLQotICAgIGRlZiBfc2hvdWxkX3J1bl90
ZXN0X3Byb2dyYW0oc2VsZiwgdGVzdF9wcm9ncmFtKToKLSAgICAgICAgIyBUaGlzIGlzIG5vdCBh
ZmZlY3RlZCBieSB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cywgc2luY2UgcHJvZ3JhbXMgYXJl
IHNraXBwZWQgZm9yCi0gICAgICAgICMgcHJvYmxlbXMgaW4gdGhlIGhhcm5lc3MsIHN1Y2ggYXMg
ZmFpbGluZyB0byBzdGFydCB0aGUgYWNjZXNzaWJpbGl0eSBidXMuCi0gICAgICAgIGZvciBza2lw
cGVkIGluIHNlbGYuX3NraXBwZWRfdGVzdHM6Ci0gICAgICAgICAgICBpZiB0ZXN0X3Byb2dyYW0u
ZW5kc3dpdGgoc2tpcHBlZC50ZXN0KSBhbmQgc2tpcHBlZC5za2lwX2VudGlyZV9zdWl0ZSgpOgot
ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAg
ZGVmIF9nZXRfY2hpbGRfcGlkX2Zyb21fdGVzdF9vdXRwdXQoc2VsZiwgb3V0cHV0KToKLSAgICAg
ICAgaWYgbm90IG91dHB1dDoKLSAgICAgICAgICAgIHJldHVybiAtMQotICAgICAgICBtYXRjaCA9
IHJlLnNlYXJjaChyJ1wocGlkPSg/UDxjaGlsZF9waWQ+WzAtOV0rKVwpJywgb3V0cHV0KQotICAg
ICAgICBpZiBub3QgbWF0Y2g6Ci0gICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgcmV0dXJu
IGludChtYXRjaC5ncm91cCgnY2hpbGRfcGlkJykpCi0KLSAgICBkZWYgX2tpbGxfcHJvY2Vzcyhz
ZWxmLCBwaWQpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5raWxsKHBpZCwgU0lHS0lM
TCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAjIFByb2Nlc3MgYWxyZWFk
eSBkaWVkLgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIF9ydW5fdGVzdF9jb21tYW5kKHNl
bGYsIGNvbW1hbmQsIHRpbWVvdXQ9LTEpOgotICAgICAgICBkZWYgYWxhcm1faGFuZGxlcihzaWdu
dW0sIGZyYW1lKToKLSAgICAgICAgICAgIHJhaXNlIFRlc3RUaW1lb3V0Ci0KLSAgICAgICAgcCA9
IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PXNl
bGYuX3Rlc3RfZW52KQotICAgICAgICBpZiB0aW1lb3V0ID4gMDoKLSAgICAgICAgICAgIHNpZ25h
bChTSUdBTFJNLCBhbGFybV9oYW5kbGVyKQotICAgICAgICAgICAgYWxhcm0odGltZW91dCkKLQot
ICAgICAgICBzdGRvdXQgPSAiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzdGRvdXQgPSBw
LmNvbW11bmljYXRlKClbMF0KLSAgICAgICAgICAgIGlmIHRpbWVvdXQgPiAwOgotICAgICAgICAg
ICAgICAgIGFsYXJtKDApCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHN0ZG91dCkKLSAg
ICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBleGNlcHQgVGVzdFRpbWVvdXQ6
Ci0gICAgICAgICAgICBzZWxmLl9raWxsX3Byb2Nlc3MocC5waWQpCi0gICAgICAgICAgICBjaGls
ZF9waWQgPSBzZWxmLl9nZXRfY2hpbGRfcGlkX2Zyb21fdGVzdF9vdXRwdXQoc3Rkb3V0KQotICAg
ICAgICAgICAgaWYgY2hpbGRfcGlkID4gMDoKLSAgICAgICAgICAgICAgICBzZWxmLl9raWxsX3By
b2Nlc3MoY2hpbGRfcGlkKQotICAgICAgICAgICAgcmFpc2UKLQotICAgICAgICByZXR1cm4gbm90
IHAucmV0dXJuY29kZQotCi0gICAgZGVmIF9ydW5fdGVzdF9nbGliKHNlbGYsIHRlc3RfcHJvZ3Jh
bSk6Ci0gICAgICAgIHRlc3Rlcl9jb21tYW5kID0gWydndGVzdGVyJ10KLSAgICAgICAgaWYgc2Vs
Zi5fb3B0aW9ucy52ZXJib3NlOgotICAgICAgICAgICAgdGVzdGVyX2NvbW1hbmQuYXBwZW5kKCct
LXZlcmJvc2UnKQotICAgICAgICBmb3IgdGVzdF9jYXNlIGluIHNlbGYuX3Rlc3RfY2FzZXNfdG9f
c2tpcCh0ZXN0X3Byb2dyYW0pOgotICAgICAgICAgICAgdGVzdGVyX2NvbW1hbmQuZXh0ZW5kKFsn
LXMnLCB0ZXN0X2Nhc2VdKQotICAgICAgICB0ZXN0ZXJfY29tbWFuZC5hcHBlbmQodGVzdF9wcm9n
cmFtKQotCi0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9jb21tYW5kKHRlc3Rlcl9jb21t
YW5kLCBzZWxmLl9vcHRpb25zLnRpbWVvdXQpCi0KLSAgICBkZWYgX3J1bl90ZXN0X2dvb2dsZShz
ZWxmLCB0ZXN0X3Byb2dyYW0pOgotICAgICAgICB0ZXN0ZXJfY29tbWFuZCA9IFt0ZXN0X3Byb2dy
YW1dCi0gICAgICAgIHNraXBwZWRfdGVzdHNfY2FzZXMgPSBzZWxmLl90ZXN0X2Nhc2VzX3RvX3Nr
aXAodGVzdF9wcm9ncmFtKQotICAgICAgICBpZiBza2lwcGVkX3Rlc3RzX2Nhc2VzOgotICAgICAg
ICAgICAgdGVzdGVyX2NvbW1hbmQuYXBwZW5kKCItLWd0ZXN0X2ZpbHRlcj0tJXMiICUgIjoiLmpv
aW4oc2tpcHBlZF90ZXN0c19jYXNlcykpCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0
X2NvbW1hbmQodGVzdGVyX2NvbW1hbmQsIHNlbGYuX29wdGlvbnMudGltZW91dCkKLQotICAgIGRl
ZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9wcm9ncmFtKToKLSAgICAgICAgaWYgInVuaXR0ZXN0cyIg
aW4gdGVzdF9wcm9ncmFtIG9yICJXZWJLaXQyQVBJVGVzdHMiIGluIHRlc3RfcHJvZ3JhbToKLSAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9nbGliKHRlc3RfcHJvZ3JhbSkKLQotICAg
ICAgICBpZiAiVGVzdFdlYktpdEFQSSIgaW4gdGVzdF9wcm9ncmFtOgotICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX3J1bl90ZXN0X2dvb2dsZSh0ZXN0X3Byb2dyYW0pCi0KLSAgICAgICAgcmV0dXJu
IEZhbHNlCi0KLSAgICBkZWYgcnVuX3Rlc3RzKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5f
dGVzdHM6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJFUlJPUjogdGVzdHMgbm90IGZv
dW5kIGluICVzLlxuIiAlIChzZWxmLl9wcm9ncmFtc19wYXRoKSkKLSAgICAgICAgICAgIHN5cy5z
dGRlcnIuZmx1c2goKQotICAgICAgICAgICAgcmV0dXJuIDEKLQotICAgICAgICBpZiBub3Qgc2Vs
Zi5fc2V0dXBfdGVzdGluZ19lbnZpcm9ubWVudCgpOgotICAgICAgICAgICAgcmV0dXJuIDEKLQot
ICAgICAgICAjIFJlbW92ZSBza2lwcGVkIHRlc3RzIG5vdyBpbnN0ZWFkIG9mIHdoZW4gd2UgZmlu
ZCB0aGVtLCBiZWNhdXNlCi0gICAgICAgICMgc29tZSB0ZXN0cyBtaWdodCBiZSBza2lwcGVkIHdo
aWxlIHNldHRpbmcgdXAgdGhlIHRlc3QgZW52aXJvbm1lbnQuCi0gICAgICAgIHNlbGYuX3Rlc3Rz
ID0gW3Rlc3QgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdHMgaWYgc2VsZi5fc2hvdWxkX3J1bl90ZXN0
X3Byb2dyYW0odGVzdCldCi0KLSAgICAgICAgZmFpbGVkX3Rlc3RzID0gW10KLSAgICAgICAgdGlt
ZWRfb3V0X3Rlc3RzID0gW10KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZm9yIHRlc3QgaW4g
c2VsZi5fdGVzdHM6Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKLSAgICAgICAgICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzZWxmLl9ydW5fdGVzdCh0
ZXN0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBUZXN0VGltZW91dDoKLSAgICAgICAgICAgICAg
ICAgICAgc3lzLnN0ZG91dC53cml0ZSgiVEVTVDogJXM6IFRJTUVPVVRcbiIgJSB0ZXN0KQotICAg
ICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgICAgICAgICAg
dGltZWRfb3V0X3Rlc3RzLmFwcGVuZCh0ZXN0KQotCi0gICAgICAgICAgICAgICAgaWYgbm90IHN1
Y2Nlc3M6Ci0gICAgICAgICAgICAgICAgICAgIGZhaWxlZF90ZXN0cy5hcHBlbmQodGVzdCkKLSAg
ICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX3RlYXJfZG93bl90ZXN0aW5nX2Vudmly
b25tZW50KCkKLQotICAgICAgICBpZiBmYWlsZWRfdGVzdHM6Ci0gICAgICAgICAgICBuYW1lcyA9
IFt0ZXN0LnJlcGxhY2Uoc2VsZi5fcHJvZ3JhbXNfcGF0aCwgJycsIDEpIGZvciB0ZXN0IGluIGZh
aWxlZF90ZXN0c10KLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlRlc3RzIGZhaWxlZDog
JXNcbiIgJSAiLCAiLmpvaW4obmFtZXMpKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgp
Ci0KLSAgICAgICAgaWYgdGltZWRfb3V0X3Rlc3RzOgotICAgICAgICAgICAgbmFtZXMgPSBbdGVz
dC5yZXBsYWNlKHNlbGYuX3Byb2dyYW1zX3BhdGgsICcnLCAxKSBmb3IgdGVzdCBpbiB0aW1lZF9v
dXRfdGVzdHNdCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyB0aGF0IHRpbWVk
IG91dDogJXNcbiIgJSAiLCAiLmpvaW4obmFtZXMpKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5m
bHVzaCgpCi0KLSAgICAgICAgaWYgc2VsZi5fc2tpcHBlZF90ZXN0cyBhbmQgc2VsZi5fb3B0aW9u
cy5za2lwcGVkX2FjdGlvbiA9PSAnc2tpcCc6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRl
KCJUZXN0cyBza2lwcGVkOlxuJXNcbiIgJSAiXG4iLmpvaW4oW3N0cihza2lwcGVkKSBmb3Igc2tp
cHBlZCBpbiBzZWxmLl9za2lwcGVkX3Rlc3RzXSkpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZs
dXNoKCkKLQotICAgICAgICByZXR1cm4gbGVuKGZhaWxlZF90ZXN0cykKLQotaWYgX19uYW1lX18g
PT0gIl9fbWFpbl9fIjoKLSAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2Vy
KHVzYWdlPSd1c2FnZTogJXByb2cgW29wdGlvbnNdIFt0ZXN0Li4uXScpCi0gICAgb3B0aW9uX3Bh
cnNlci5hZGRfb3B0aW9uKCctcicsICctLXJlbGVhc2UnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdyZWxlYXNlJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0nUnVuIGluIFJlbGVhc2UnKQotICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbignLWQnLCAnLS1kZWJ1ZycsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2RlYnVnJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nUnVuIGluIERlYnVnJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9v
cHRpb24oJy12JywgJy0tdmVyYm9zZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFj
dGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J3ZlcmJvc2UnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSdSdW4gZ3Rlc3RlciBpbiB2ZXJib3NlIG1vZGUnKQotICAgIG9wdGlvbl9w
YXJzZXIuYWRkX29wdGlvbignLS1kaXNwbGF5JywgYWN0aW9uPSdzdG9yZScsIGRlc3Q9J2Rpc3Bs
YXknLCBkZWZhdWx0PSc6NTUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdE
aXNwbGF5IHRvIHJ1biBYdmZiJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tc2tp
cHBlZCcsIGFjdGlvbj0nc3RvcmUnLCBkZXN0PSdza2lwcGVkX2FjdGlvbicsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNob2ljZXM9Wydza2lwJywgJ2lnbm9yZScsICdvbmx5J10sIGRl
ZmF1bHQ9J3NraXAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSdza2lw
fGlnbm9yZXxvbmx5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3BlY2lm
aWVzIGhvdyB0byB0cmVhdCB0aGUgc2tpcHBlZCB0ZXN0cycpCi0gICAgb3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKCctdCcsICctLXRpbWVvdXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhY3Rpb249J3N0b3JlJywgdHlwZT0naW50JywgZGVzdD0ndGltZW91dCcsIGRlZmF1bHQ9MTAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RpbWUgaW4gc2Vjb25kcyB1bnRp
bCBhIHRlc3QgdGltZXMgb3V0JykKLSAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5w
YXJzZV9hcmdzKCkKLQotICAgIHN5cy5leGl0KFRlc3RSdW5uZXIob3B0aW9ucywgYXJncykucnVu
X3Rlc3RzKCkpCmRpZmYgLS1naXQgYS9Ub29scy9qaGJ1aWxkL2poYnVpbGQtd3JhcHBlciBiL1Rv
b2xzL2poYnVpbGQvamhidWlsZC13cmFwcGVyCmluZGV4IGY5NzUxZTRlNDc1YjY0Yzk2ZGVjOTQz
OTkyM2RhYzdlMGY1MzNkMDcuLmNhZjU1ZGM4ZDc2NTJlZDRhMjQ2MGU1Y2QzZjg2NmY0MDQzOWFk
YjMgMTAwNzU1Ci0tLSBhL1Rvb2xzL2poYnVpbGQvamhidWlsZC13cmFwcGVyCisrKyBiL1Rvb2xz
L2poYnVpbGQvamhidWlsZC13cmFwcGVyCkBAIC0xNywzOCArMTcsMjAgQEAKICMgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQogIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKIAoraW1wb3J0IGpoYnVpbGR1dGlscwogaW1wb3J0
IG9zCiBpbXBvcnQgc2hsZXgKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiAKLQotdG9w
X2xldmVsX2RpciA9IE5vbmUKLQotCi1kZWYgdG9wX2xldmVsX3BhdGgoKmFyZ3MpOgotICAgIGds
b2JhbCB0b3BfbGV2ZWxfZGlyCi0gICAgaWYgbm90IHRvcF9sZXZlbF9kaXI6Ci0gICAgICAgIHRv
cF9sZXZlbF9kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4u
JywgJy4uJykKLSAgICByZXR1cm4gb3MucGF0aC5qb2luKCoodG9wX2xldmVsX2RpciwpICsgYXJn
cykKLQotCiBqaGJ1aWxkX3JldmlzaW9uID0gJzFlZWRjNDIzZjc1YzYwNTIyNGI0MzA1NzllNGMz
MDMyOTIxOTk1MDcnCiAKLWlmIG9zLmVudmlyb24uaGFzX2tleSgnV0VCS0lUT1VUUFVURElSJyk6
Ci0gICAgZGVwZW5kZW5jaWVzX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9z
LmVudmlyb25bJ1dFQktJVE9VVFBVVERJUiddLCAnRGVwZW5kZW5jaWVzJykpCi1lbHNlOgotICAg
IGRlcGVuZGVuY2llc19wYXRoID0gb3MucGF0aC5hYnNwYXRoKHRvcF9sZXZlbF9wYXRoKCdXZWJL
aXRCdWlsZCcsICdEZXBlbmRlbmNpZXMnKSkKLQorZGVwZW5kZW5jaWVzX3BhdGggPSBqaGJ1aWxk
dXRpbHMuZ2V0X2RlcGVuZGVuY2llc19wYXRoKCkKIGluc3RhbGxhdGlvbl9wcmVmaXggPSBvcy5w
YXRoLmFic3BhdGgob3MucGF0aC5qb2luKGRlcGVuZGVuY2llc19wYXRoLCAnUm9vdCcpKQogc291
cmNlX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKGRlcGVuZGVuY2llc19wYXRo
LCAnU291cmNlJykpCiBqaGJ1aWxkX3NvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHNvdXJjZV9w
YXRoLCAnamhidWlsZCcpCiBqaGJ1aWxkX3BhdGggPSBvcy5wYXRoLmpvaW4oaW5zdGFsbGF0aW9u
X3ByZWZpeCwgJ2JpbicsICdqaGJ1aWxkJykKIAotCi1wbGF0Zm9ybSA9IE5vbmU7Ci0KLQogZGVm
IGpoYnVpbGRfaW5zdGFsbGVkKCk6CiAgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKGpoYnVpbGRf
cGF0aCkKIApAQCAtMTA4LDggKzkwLDggQEAgZGVmIGluc3RhbGxfamhidWlsZCgpOgogICAgICAg
ICByYWlzZSBFeGNlcHRpb24oJ2poYnVpbGQgY29uZmlndXJlIGZhaWxlZCB3aXRoIHJldHVybiBj
b2RlOiAlaScgJSBwcm9jZXNzLnJldHVybmNvZGUpCiAKIAotZGVmIHVwZGF0ZV93ZWJraXRfbGli
c19qaGJ1aWxkKCk6Ci0gICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW3RvcF9sZXZlbF9w
YXRoKCdUb29scycsICdTY3JpcHRzJywgJ3VwZGF0ZS13ZWJraXQtbGlicy1qaGJ1aWxkJyksICct
LScgKyBwbGF0Zm9ybV0pCitkZWYgdXBkYXRlX3dlYmtpdF9saWJzX2poYnVpbGQocGxhdGZvcm0p
OgorICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKFtqaGJ1aWxkdXRpbHMudG9wX2xldmVs
X3BhdGgoJ1Rvb2xzJywgJ1NjcmlwdHMnLCAndXBkYXRlLXdlYmtpdC1saWJzLWpoYnVpbGQnKSwg
Jy0tJyArIHBsYXRmb3JtXSkKICAgICBwcm9jZXNzLndhaXQoKQogICAgIGlmIHByb2Nlc3MucmV0
dXJuY29kZSAhPSAwOgogICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2poYnVpbGQgY29uZmlndXJl
IGZhaWxlZCB3aXRoIHJldHVybiBjb2RlOiAlaScgJSBwcm9jZXNzLnJldHVybmNvZGUpCkBAIC0x
MjMsMTIgKzEwNSwxMiBAQCBkZWYgZGV0ZXJtaW5lX3BsYXRmb3JtKCk6CiAgICAgcmFpc2UgVmFs
dWVFcnJvcignTm8gcGxhdGZvcm0gc3BlY2lmaWVkIGZvciBqaGJ1aWxkLXdyYXBwZXIuJykKIAog
Ci1kZWYgZW5zdXJlX2poYnVpbGQoKToKK2RlZiBlbnN1cmVfamhidWlsZChwbGF0Zm9ybSk6CiAg
ICAgaWYgbm90IGpoYnVpbGRfY2xvbmVkKCk6CiAgICAgICAgIGNsb25lX2poYnVpbGQoKQogICAg
ICAgICB1cGRhdGVfamhidWlsZCgpCiAgICAgICAgIGluc3RhbGxfamhidWlsZCgpCi0gICAgICAg
IHVwZGF0ZV93ZWJraXRfbGlic19qaGJ1aWxkKCkKKyAgICAgICAgdXBkYXRlX3dlYmtpdF9saWJz
X2poYnVpbGQocGxhdGZvcm0pCiAgICAgZWxpZiBub3QgamhidWlsZF9pbnN0YWxsZWQoKSBcCiAg
ICAgICAgICAgICBvciBub3QgamhidWlsZF9hdF9leHBlY3RlZF9yZXZpc2lvbigpOgogICAgICAg
ICB1cGRhdGVfamhidWlsZCgpCkBAIC0xNDMsOCArMTI1LDggQEAgdHJ5OgogICAgIHBsYXRmb3Jt
ID0gZGV0ZXJtaW5lX3BsYXRmb3JtKCkKIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgc3lz
LmV4aXQoZSkKLWVuc3VyZV9qaGJ1aWxkKCkKK2Vuc3VyZV9qaGJ1aWxkKHBsYXRmb3JtKQogCi1w
cm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbamhidWlsZF9wYXRoLCAnLS1uby1pbnRlcmFjdCcs
ICctZicsIHRvcF9sZXZlbF9wYXRoKCdUb29scycsIHBsYXRmb3JtLCAnamhidWlsZHJjJyldICsg
c3lzLmFyZ3ZbMjpdKQorcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW2poYnVpbGRfcGF0aCwg
Jy0tbm8taW50ZXJhY3QnLCAnLWYnLCBqaGJ1aWxkdXRpbHMuZ2V0X2NvbmZpZ19maWxlX2Zvcl9w
bGF0Zm9ybShwbGF0Zm9ybSldICsgc3lzLmFyZ3ZbMjpdKQogcHJvY2Vzcy53YWl0KCkKIHN5cy5l
eGl0KHByb2Nlc3MucmV0dXJuY29kZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL2poYnVpbGQvamhidWls
ZHV0aWxzLnB5IGIvVG9vbHMvamhidWlsZC9qaGJ1aWxkdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTJl
YjQ0MTk0ZTU1YjQ3N2I3MjNjMWFjMGU0ZmJhYWJiNDhjZGNjOAotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL2poYnVpbGQvamhidWlsZHV0aWxzLnB5CkBAIC0wLDAgKzEsNDcgQEAKK2ltcG9ydCBn
bG9iCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworCit0b3BfbGV2ZWxfZGlyID0gTm9uZQor
CisKK2RlZiB0b3BfbGV2ZWxfcGF0aCgqYXJncyk6CisgICAgZ2xvYmFsIHRvcF9sZXZlbF9kaXIK
KyAgICBpZiBub3QgdG9wX2xldmVsX2RpcjoKKyAgICAgICAgdG9wX2xldmVsX2RpciA9IG9zLnBh
dGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nLCAnLi4nKQorICAgIHJldHVy
biBvcy5wYXRoLmpvaW4oKih0b3BfbGV2ZWxfZGlyLCkgKyBhcmdzKQorCisKK2RlZiBnZXRfZGVw
ZW5kZW5jaWVzX3BhdGgoKToKKyAgICBpZiAnV0VCS0lUT1VUUFVURElSJyBpbiBvcy5lbnZpcm9u
OgorICAgICAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5lbnZpcm9u
WydXRUJLSVRPVVRQVVRESVInXSwgJ0RlcGVuZGVuY2llcycpKQorICAgIGVsc2U6CisgICAgICAg
IHJldHVybiBvcy5wYXRoLmFic3BhdGgodG9wX2xldmVsX3BhdGgoJ1dlYktpdEJ1aWxkJywgJ0Rl
cGVuZGVuY2llcycpKQorCisKK2RlZiBnZXRfY29uZmlnX2ZpbGVfZm9yX3BsYXRmb3JtKHBsYXRm
b3JtKToKKyAgICByZXR1cm4gdG9wX2xldmVsX3BhdGgoJ1Rvb2xzJywgcGxhdGZvcm0sICdqaGJ1
aWxkcmMnKQorCisKK2RlZiBlbnRlcl9qaGJ1aWxkX2Vudmlyb25tZW50X2lmX2F2YWlsYWJsZShw
bGF0Zm9ybSk6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGdldF9kZXBlbmRlbmNpZXNfcGF0
aCgpKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIFdlIGRvbid0IGtub3cgdGhlIFB5
dGhvbiB2ZXJzaW9uLCBzbyB3ZSBqdXN0IGFzc3VtZSB0aGF0IHdlIGNhbiBzYWZlbHkgdGFrZSB0
aGUgZmlyc3Qgb25lIGluIHRoZSBsaXN0LgorICAgIHNpdGVfcGFja2FnZXNfcGF0aCA9IGdsb2Iu
Z2xvYihvcy5wYXRoLmpvaW4oZ2V0X2RlcGVuZGVuY2llc19wYXRoKCksICJSb290IiwgImxpYiIs
ICIqIiwgInNpdGUtcGFja2FnZXMiKSkKKyAgICBpZiBub3QgbGVuKHNpdGVfcGFja2FnZXNfcGF0
aCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgc2l0ZV9wYWNrYWdlc19wYXRoID0gc2l0
ZV9wYWNrYWdlc19wYXRoWzBdCisgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHNpdGVfcGFja2FnZXNf
cGF0aCkKKworICAgIGltcG9ydCBqaGJ1aWxkLmNvbmZpZworICAgIGZyb20gamhidWlsZC5lcnJv
cnMgaW1wb3J0IEZhdGFsRXJyb3IKKworICAgIHRyeToKKyAgICAgICAgY29uZmlnID0gamhidWls
ZC5jb25maWcuQ29uZmlnKGdldF9jb25maWdfZmlsZV9mb3JfcGxhdGZvcm0ocGxhdGZvcm0pKQor
ICAgIGV4Y2VwdCBGYXRhbEVycm9yLCBleGNlcHRpb246CisgICAgICAgIHN5cy5zdGRlcnIud3Jp
dGUoJ0NvdWxkIG5vdCBsb2FkIGpoYnVpbGQgY29uZmlnIGZpbGU6ICVzXG4nICUgZXhjZXB0aW9u
LmFyZ3NbMF0pCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcmV0dXJuIFRydWUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155276</attachid>
            <date>2012-07-30 06:00:59 -0700</date>
            <delta_ts>2012-07-30 08:56:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92626-20120730150042.patch</filename>
            <type>text/plain</type>
            <size>37177</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzOTc4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTExMGNhODBjOWU2NzVlMzhlYjRkZjg4NjcwYzYxYTAw
Mjc2NTg1NS4uNzBlNWQwMWJjNDI0ZmUwZWI0NzAxYTc4NzBiODA4NDdiZmMyODAzYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDEyLTA3LTMwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXSBBZGQgYSBub24tc3VicHJvY2VzcyBqaGJ1aWxkIGVudmlyb25tZW50
IGFuZCB1c2UgaXQgZm9yIHJ1bi1ndGstdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNjI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBhbHdheXMgc2hlbGxpbmcgb3V0IHRvIGVu
dGVyIGEgamhidWlsZCBlbnZpcm9ubWVudCwgYWRkIGEgUHl0aG9uCisgICAgICAgIGhvb2sgZm9y
IGVudGVyaW5nIGEgamhidWlsZCBlbnZpcm9ubWVudCBkaXJlY3RseS4gVGhpcyBhdm9pZHMgcmVx
dWlyaW5nIGEKKyAgICAgICAgc2NyaXB0IHRvIGJlIHdyYXBwZWQgaW4gamhidWlsZC4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBSZW1vdmUgZ3RrL3J1bi1hcGktdGVzdHMgZnJvbSB0aGUg
ZGlzdHJpYnV0aW9uIGxpc3QuCisgICAgICAgICogU2NyaXB0cy9ydW4tZ3RrLXRlc3RzOiBNb3Zl
IG1vc3Qgb2YgdGhlIGxvZ2ljIGZyb20gcnVuLWFwaS10ZXN0cyBoZXJlCisgICAgICAgIHdpdGgg
YWRkaXRpb25hbCBjb2RlIGZvciBlbnRlcmluZyBhIGpoYnVpbGQgZW52aXJvbm1lbnQgZGlyZWN0
bHkuCisgICAgICAgICogZ3RrL3J1bi1hcGktdGVzdHM6IFJlbW92ZWQuCisgICAgICAgICogamhi
dWlsZC9qaGJ1aWxkLXdyYXBwZXI6IFVzZSB0aGUgbmV3IGhlbHBlciBtZXRob2RzIGRlZmluZWQg
aW4gamhidWlsZHV0aWxzLnB5LgorICAgICAgICAqIGpoYnVpbGQvamhidWlsZHV0aWxzLnB5OiBB
ZGQgc29tZSBuZXcgaGVscGVyIG1ldGhvZHMgaGVyZSBpbmNsdWRpbmcKKyAgICAgICAgYSBtZXRo
b2Qgd2hpY2ggY2FuIHRyYW5zZm9ybSB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpbnRvIGEgamhi
dWlsZC1pZmllZCBvbmUuCisKIDIwMTItMDctMjkgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBFeHRlbmQgYGFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2Nh
cGVgIHBsdWdpbnMgdG8gYmV0dGVyIHN1cHBvcnQgbXVsdGlwbGUgZnJhbWVzLgpkaWZmIC0tZ2l0
IGEvVG9vbHMvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9HTlVtYWtlZmlsZS5hbQppbmRleCBkYWI5
NGIyMDViZDgwMWI5ODUyZTg5Zjk5YWNjZGM4NjNkOTUyYmJiLi5kZjlhNzFmMThmOTU4MDdlZjRm
ZDZmN2Q3YzI3ZDMxMWZhMzIxYWMyIDEwMDY0NAotLS0gYS9Ub29scy9HTlVtYWtlZmlsZS5hbQor
KysgYi9Ub29scy9HTlVtYWtlZmlsZS5hbQpAQCAtMjU1LDcgKzI1NSw2IEBAIEVYVFJBX0RJU1Qg
Kz0gXAogCVRvb2xzL2d0ay9jb21tb24ucHkgXAogCVRvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2Mg
XAogCVRvb2xzL2d0ay9ndGtkb2MucHkgXAotCVRvb2xzL2d0ay9ydW4tYXBpLXRlc3RzIFwKIAlU
b29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtIFwKIAlUb29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMg
XAogCVRvb2xzL1NjcmlwdHMvd2Via2l0LWJ1aWxkLWRpcmVjdG9yeSBcCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMK
aW5kZXggM2EwN2U5ZTZjYmFjNmFlMGUzM2QyYTgyNzg3YmI4Y2IzNmMwZmQ0My4uNGYxZDRjMTVm
ZDJhMGUzODNkNWIxNmRjNGM1Y2RmOTE0OWZhNDc2OSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0
cy9ydW4tZ3RrLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cwpAQCAtMSw2
ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KKyMgQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIElnYWxpYSBTLkwuCiAjCiAj
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIwLDE4ICsyMCwzMjAgQEAKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBv
cnQgb3MKIGltcG9ydCBzeXMKLQotYXBpX3Rlc3RzX2NvbW1hbmQgPSBbXQoraW1wb3J0IG9wdHBh
cnNlCitpbXBvcnQgcmUKK2Zyb20gc2lnbmFsIGltcG9ydCBhbGFybSwgc2lnbmFsLCBTSUdBTFJN
LCBTSUdLSUxMCitmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdpbywgR0xpYgogCiB0b3BfbGV2
ZWxfZGlyZWN0b3J5ID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJu
YW1lKF9fZmlsZV9fKSwgIi4uIiwgIi4uIikpCi1ydW5fYXBpX3Rlc3RzX3BhdGggPSBvcy5wYXRo
LmpvaW4odG9wX2xldmVsX2RpcmVjdG9yeSwgJ1Rvb2xzJywgJ2d0aycsICdydW4tYXBpLXRlc3Rz
JykKK3N5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4odG9wX2xldmVsX2RpcmVjdG9yeSwgIlRv
b2xzIiwgImpoYnVpbGQiKSkKK3N5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4odG9wX2xldmVs
X2RpcmVjdG9yeSwgIlRvb2xzIiwgImd0ayIpKQoraW1wb3J0IGNvbW1vbgoraW1wb3J0IGpoYnVp
bGR1dGlscworCitjbGFzcyBTa2lwcGVkVGVzdDoKKyAgICBFTlRJUkVfU1VJVEUgPSBOb25lCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdCwgdGVzdF9jYXNlLCByZWFzb24sIGJ1Zz1Ob25l
KToKKyAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAorICAgICAgICBzZWxmLnRlc3RfY2FzZSA9IHRl
c3RfY2FzZQorICAgICAgICBzZWxmLnJlYXNvbiA9IHJlYXNvbgorICAgICAgICBzZWxmLmJ1ZyA9
IGJ1ZworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHNraXBwZWRfdGVzdF9zdHIg
PSAiJXMiICUgc2VsZi50ZXN0CisKKyAgICAgICAgaWYgbm90KHNlbGYuc2tpcF9lbnRpcmVfc3Vp
dGUoKSk6CisgICAgICAgICAgICBza2lwcGVkX3Rlc3Rfc3RyICs9ICIgWyVzXSIgJSBzZWxmLnRl
c3RfY2FzZQorCisgICAgICAgIHNraXBwZWRfdGVzdF9zdHIgKz0gIjogJXMgIiAlIHNlbGYucmVh
c29uCisgICAgICAgIGlmIHNlbGYuYnVnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2tpcHBl
ZF90ZXN0X3N0ciArPSAiKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0l
ZCkiICUgc2VsZi5idWcKKyAgICAgICAgcmV0dXJuIHNraXBwZWRfdGVzdF9zdHIKKworICAgIGRl
ZiBza2lwX2VudGlyZV9zdWl0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVzdF9jYXNl
ID09IFNraXBwZWRUZXN0LkVOVElSRV9TVUlURQorCitjbGFzcyBUZXN0VGltZW91dChFeGNlcHRp
b24pOgorICAgIHBhc3MKKworY2xhc3MgVGVzdFJ1bm5lcjoKKyAgICBURVNUX0RJUlMgPSBbICJ1
bml0dGVzdHMiLCAiV2ViS2l0MkFQSVRlc3RzIiwgIlRlc3RXZWJLaXRBUEkiIF0KKworICAgIFNL
SVBQRUQgPSBbCisgICAgICAgIFNraXBwZWRUZXN0KCJ1bml0dGVzdHMvdGVzdGRvd25sb2FkIiwg
Ii93ZWJraXQvZG93bmxvYWQvbm90LWZvdW5kIiwgIlRlc3QgZmFpbHMgaW4gR1RLIExpbnV4IDY0
LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI5KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoInVuaXR0ZXN0
cy90ZXN0d2VidmlldyIsICIvd2Via2l0L3dlYnZpZXcvaWNvbi11cmkiLCAiVGVzdCB0aW1lcyBv
dXQgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI4KSwKKyAgICAgICAgU2tp
cHBlZFRlc3QoInVuaXR0ZXN0cy90ZXN0d2VicmVzb3VyY2UiLCAiL3dlYmtpdC93ZWJyZXNvdXJj
ZS9zdWJfcmVzb3VyY2VfbG9hZGluZyIsICJUZXN0IGZhaWxzIGluIEdUSyBMaW51eCA2NC1iaXQg
UmVsZWFzZSBib3QiLCA4MjMzMCksCisgICAgICAgIFNraXBwZWRUZXN0KCJ1bml0dGVzdHMvdGVz
dHdlYmluc3BlY3RvciIsICIvd2Via2l0L3dlYmluc3BlY3Rvci9jbG9zZS1hbmQtaW5zcGVjdCIs
ICJUZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLCA4Mjg2OSks
CisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXci
LCAiL3dlYmtpdDIvV2ViS2l0V2ViVmlldy9tb3VzZS10YXJnZXQiLCAiVGVzdCBpcyBmbGFreSBp
biBHVEsgTGludXggMzItYml0IFJlbGVhc2UgYm90IiwgODI4NjYpLAorICAgICAgICBTa2lwcGVk
VGVzdCgiV2ViS2l0MkFQSVRlc3RzL1Rlc3RSZXNvdXJjZXMiLCAiL3dlYmtpdDIvV2ViS2l0V2Vi
Vmlldy9yZXNvdXJjZXMiLCAiVGVzdCBpcyBmbGFreSBpbiBHVEsgTGludXggMzItYml0IFJlbGVh
c2UgYm90IiwgODI4NjgpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MkFQSVRlc3RzL1Rl
c3RXZWJLaXRGaW5kQ29udHJvbGxlciIsICIvd2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci9u
ZXh0IiwgIlRlc3QgZmFpbHMgIiwgOTEwODMpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0
MkFQSVRlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlciIsICIvd2Via2l0Mi9XZWJLaXRGaW5k
Q29udHJvbGxlci9wcmV2aW91cyIsICJUZXN0IGZhaWxzIiwgOTEwODMpLAorICAgICAgICBTa2lw
cGVkVGVzdCgiV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlciIsICIvd2Vi
a2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci9oaWRlIiwgIlRlc3QgIGFsd2F5cyBmYWlscyBpbiBY
dmZiIiwgODk4MTApLAorICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0MiIsICJXZWJLaXQyLldLQ29ubmVjdGlvbiIsICJUZXN0cyBmYWlsIGFuZCB0aW1lIG91dCBv
dXQiLCA4NDk1OSksCisgICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXQyIiwgIldlYktpdDIuUmVzdG9yZVNlc3Npb25TdGF0ZUNvbnRhaW5pbmdGb3JtRGF0YSIsICJT
ZXNzaW9uIFN0YXRlIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBHVEsrIHBvcnQiLCA4NDk2MCksCisg
ICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIu
U3BhY2ViYXJTY3JvbGxpbmciLCAiVGVzdCBmYWlscyIsIDg0OTYxKSwKKyAgICAgICAgU2tpcHBl
ZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMiLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKKyAg
ICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5O
ZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGcmFtZXMiLCAiVGVzdCBmYWlscyIsIDg1MDM3
KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2Vi
S2l0Mi5Nb3VzZU1vdmVBZnRlckNyYXNoIiwgIlRlc3QgaXMgZmxha3kiLCA4NTA2NiksCisgICAg
ICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuQ2Fu
SGFuZGxlUmVxdWVzdCIsICJUZXN0IGZhaWxzIiwgODg0NTMpLAorICAgICAgICBTa2lwcGVkVGVz
dCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLldLUGFnZUdldFNjYWxlRmFj
dG9yTm90WmVybyIsICJUZXN0IGZhaWxzIGFuZCB0aW1lcyBvdXQiLCA4ODQ1NSksCisgICAgXQor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHRlc3RzPVtdKToKKyAgICAgICAgc2Vs
Zi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fcHJvZ3JhbXNfcGF0aCA9IGNvbW1v
bi5idWlsZF9wYXRoKCJQcm9ncmFtcyIpCisgICAgICAgIHNlbGYuX3Rlc3RzID0gc2VsZi5fZ2V0
X3Rlc3RzKHRlc3RzKQorICAgICAgICBzZWxmLl9za2lwcGVkX3Rlc3RzID0gVGVzdFJ1bm5lci5T
S0lQUEVECisKKyAgICAgICAgIyBUaGVzZSBTUEkgZGFlbW9ucyBuZWVkIHRvIGJlIGFjdGl2ZSBm
b3IgdGhlIGFjY2Vzc2liaWxpdHkgdGVzdHMgdG8gd29yay4KKyAgICAgICAgc2VsZi5fc3BpX3Jl
Z2lzdHJ5ZCA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3BpX2J1c19sYXVuY2hlciA9IE5vbmUKKwor
ICAgIGRlZiBfZ2V0X3Rlc3RzKHNlbGYsIHRlc3RzKToKKyAgICAgICAgaWYgdGVzdHM6CisgICAg
ICAgICAgICByZXR1cm4gdGVzdHMKKworICAgICAgICB0ZXN0cyA9IFtdCisgICAgICAgIGZvciB0
ZXN0X2RpciBpbiBzZWxmLlRFU1RfRElSUzoKKyAgICAgICAgICAgIGFic29sdXRlX3Rlc3RfZGly
ID0gb3MucGF0aC5qb2luKHNlbGYuX3Byb2dyYW1zX3BhdGgsIHRlc3RfZGlyKQorICAgICAgICAg
ICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYWJzb2x1dGVfdGVzdF9kaXIpOgorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgdGVzdF9maWxlIGluIG9zLmxpc3RkaXIoYWJz
b2x1dGVfdGVzdF9kaXIpOgorICAgICAgICAgICAgICAgIGlmIG5vdCB0ZXN0X2ZpbGUubG93ZXIo
KS5zdGFydHN3aXRoKCJ0ZXN0Iik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAg
ICAgICAgICAgICAgdGVzdF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3Byb2dyYW1zX3BhdGgs
IHRlc3RfZGlyLCB0ZXN0X2ZpbGUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUo
dGVzdF9wYXRoKSBhbmQgb3MuYWNjZXNzKHRlc3RfcGF0aCwgb3MuWF9PSyk6CisgICAgICAgICAg
ICAgICAgICAgIHRlc3RzLmFwcGVuZCh0ZXN0X3BhdGgpCisgICAgICAgIHJldHVybiB0ZXN0cwor
CisgICAgZGVmIF9sb29rdXBfYXRzcGkyX2JpbmFyeShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAg
IGV4ZWNfcHJlZml4ID0gY29tbW9uLnBrZ19jb25maWdfZmlsZV92YXJpYWJsZSgnYXRzcGktMics
ICdleGVjX3ByZWZpeCcpCisgICAgICAgIGlmIG5vdCBleGVjX3ByZWZpeDoKKyAgICAgICAgICAg
IHJldHVybiBOb25lCisgICAgICAgIGZvciBwYXRoIGluIFsnbGliZXhlYycsICdsaWIvYXQtc3Bp
Mi1jb3JlJywgJ2xpYjMyL2F0LXNwaTItY29yZScsICdsaWI2NC9hdC1zcGkyLWNvcmUnXToKKyAg
ICAgICAgICAgIGZpbGVwYXRoID0gb3MucGF0aC5qb2luKGV4ZWNfcHJlZml4LCBwYXRoLCBmaWxl
bmFtZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVwYXRoKToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmlsZXBhdGgKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVm
IF9zdGFydF9hY2Nlc3NpYmlsaXR5X2RhZW1vbnMoc2VsZik6CisgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICBzcGlfYnVzX2xhdW5jaGVyX3BhdGggPSBzZWxmLl9sb29rdXBfYXRzcGkyX2Jp
bmFyeSgnYXQtc3BpLWJ1cy1sYXVuY2hlcicpCisgICAgICAgIHNwaV9yZWdpc3RyeWRfcGF0aCA9
IHNlbGYuX2xvb2t1cF9hdHNwaTJfYmluYXJ5KCdhdC1zcGkyLXJlZ2lzdHJ5ZCcpCisgICAgICAg
IGlmIG5vdCBzcGlfYnVzX2xhdW5jaGVyX3BhdGggb3Igbm90IHNwaV9yZWdpc3RyeWRfcGF0aDoK
KyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNl
bGYuX2FsbHlfYnVzX2xhdW5jaGVyID0gc3VicHJvY2Vzcy5Qb3Blbihbc3BpX2J1c19sYXVuY2hl
cl9wYXRoXSwgZW52PXNlbGYuX3Rlc3RfZW52KQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAg
ICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gbGF1bmNoIHRoZSBhY2Nlc3NpYmlsaXR5IGJ1
c1xuIikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIFNQSSBidXMgaXMg
bGF1bmNoZWQgYmVmb3JlIHRyeWluZyB0byBzdGFydCB0aGUgU1BJCisgICAgICAgICMgcmVnaXN0
cnksIHNvIHdlIHNwaW4gYSBtYWluIGxvb3AgdW50aWwgdGhlIGJ1cyBuYW1lIGFwcGVhcnMgb24g
REJ1cy4KKyAgICAgICAgbG9vcCA9IEdMaWIuTWFpbkxvb3AoKQorICAgICAgICBHaW8uYnVzX3dh
dGNoX25hbWUoR2lvLkJ1c1R5cGUuU0VTU0lPTiwgJ29yZy5hMTF5LkJ1cycsIEdpby5CdXNOYW1l
V2F0Y2hlckZsYWdzLk5PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgKmFy
Z3M6IGxvb3AucXVpdCgpLCBOb25lKQorICAgICAgICBsb29wLnJ1bigpCisKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgc2VsZi5fc3BpX3JlZ2lzdHJ5ZCA9IHN1YnByb2Nlc3MuUG9wZW4oW3Nw
aV9yZWdpc3RyeWRfcGF0aF0sIGVudj1zZWxmLl90ZXN0X2VudikKKyAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIGxhdW5jaCB0aGUgYWNjZXNz
aWJpbGl0eSByZWdpc3RyeVxuIikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBf
c2V0dXBfdGVzdGluZ19lbnZpcm9ubWVudChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9lbnYg
PSBvcy5lbnZpcm9uCisgICAgICAgIHNlbGYuX3Rlc3RfZW52WyJESVNQTEFZIl0gPSBzZWxmLl9v
cHRpb25zLmRpc3BsYXkKKyAgICAgICAgc2VsZi5fdGVzdF9lbnZbIldFQktJVF9JTlNQRUNUT1Jf
UEFUSCJdID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihzZWxmLl9wcm9ncmFtc19wYXRo
LCAncmVzb3VyY2VzJywgJ2luc3BlY3RvcicpKQorICAgICAgICBzZWxmLl90ZXN0X2VudlsnR1NF
VFRJTkdTX0JBQ0tFTkQnXSA9ICdtZW1vcnknCisgICAgICAgIHNlbGYuX3Rlc3RfZW52WyJURVNU
X1dFQktJVF9BUElfV0VCS0lUMl9SRVNPVVJDRVNfUEFUSCJdID0gY29tbW9uLnRvcF9sZXZlbF9w
YXRoKCJUb29scyIsICJUZXN0V2ViS2l0QVBJIiwgIlRlc3RzIiwgIldlYktpdDIiKQorICAgICAg
ICBzZWxmLl90ZXN0X2VudlsiVEVTVF9XRUJLSVRfQVBJX1dFQktJVDJfSU5KRUNURURfQlVORExF
X1BBVEgiXSA9IGNvbW1vbi5idWlsZF9wYXRoKCJMaWJyYXJpZXMiKQorICAgICAgICBzZWxmLl90
ZXN0X2VudlsiV0VCS0lUX0VYRUNfUEFUSCJdID0gc2VsZi5fcHJvZ3JhbXNfcGF0aAorCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3h2ZmIgPSBzdWJwcm9jZXNzLlBvcGVuKFsiWHZm
YiIsIHNlbGYuX29wdGlvbnMuZGlzcGxheSwgIi1zY3JlZW4iLCAiMCIsICI4MDB4NjAweDI0Iiwg
Ii1ub2xpc3RlbiIsICJ0Y3AiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisg
ICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3Jp
dGUoIkZhaWxlZCB0byBydW4gWHZmYjogJXNcbiIgJSBlKQorICAgICAgICAgICAgc3lzLnN0ZGVy
ci5mbHVzaCgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjIElmIHdlIGNh
bm5vdCBzdGFydCB0aGUgYWNjZXNzaWJpbGl0eSBkYWVtb25zLCB3ZSBjYW4ganVzdCBza2lwIHRo
ZSBhY2Nlc3NpYmlsaXR5IHRlc3RzLgorICAgICAgICBpZiBub3Qgc2VsZi5fc3RhcnRfYWNjZXNz
aWJpbGl0eV9kYWVtb25zKCk6CisgICAgICAgICAgICBwcmludCAiQ291bGQgbm90IHN0YXJ0IGFj
Y2Vzc2liaWxpdHkgYnVzLCBzbyBza2lwcGluZyBUZXN0V2ViS2l0QWNjZXNzaWJpbGl0eSIKKyAg
ICAgICAgICAgIHNlbGYuX3NraXBwZWRfdGVzdHMuYXBwZW5kKFNraXBwZWRUZXN0KCJXZWJLaXQy
QVBJVGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkiLCBTa2lwcGVkVGVzdC5FTlRJUkVfU1VJ
VEUsICJDb3VsZCBub3Qgc3RhcnQgYWNjZXNzaWJpbGl0eSBidXMiKSkKKyAgICAgICAgcmV0dXJu
IFRydWUKKworICAgIGRlZiBfdGVhcl9kb3duX3Rlc3RpbmdfZW52aXJvbm1lbnQoc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuX3NwaV9yZWdpc3RyeWQ6CisgICAgICAgICAgICBzZWxmLl9zcGlfcmVn
aXN0cnlkLnRlcm1pbmF0ZSgpCisgICAgICAgIGlmIHNlbGYuX3NwaV9idXNfbGF1bmNoZXI6Cisg
ICAgICAgICAgICBzZWxmLl9zcGlfYnVzX2xhdW5jaGVyLnRlcm1pbmF0ZSgpCisgICAgICAgIHNl
bGYuX3h2ZmIudGVybWluYXRlKCkKKworICAgIGRlZiBfdGVzdF9jYXNlc190b19za2lwKHNlbGYs
IHRlc3RfcHJvZ3JhbSk6CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuc2tpcHBlZF9hY3Rpb24g
IT0gJ3NraXAnOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgdGVzdF9jYXNlcyA9
IFtdCisgICAgICAgIGZvciBza2lwcGVkIGluIHNlbGYuX3NraXBwZWRfdGVzdHM6CisgICAgICAg
ICAgICBpZiB0ZXN0X3Byb2dyYW0uZW5kc3dpdGgoc2tpcHBlZC50ZXN0KSBhbmQgbm90IHNraXBw
ZWQuc2tpcF9lbnRpcmVfc3VpdGUoKToKKyAgICAgICAgICAgICAgICB0ZXN0X2Nhc2VzLmFwcGVu
ZChza2lwcGVkLnRlc3RfY2FzZSkKKyAgICAgICAgcmV0dXJuIHRlc3RfY2FzZXMKKworICAgIGRl
ZiBfc2hvdWxkX3J1bl90ZXN0X3Byb2dyYW0oc2VsZiwgdGVzdF9wcm9ncmFtKToKKyAgICAgICAg
IyBUaGlzIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cywgc2lu
Y2UgcHJvZ3JhbXMgYXJlIHNraXBwZWQgZm9yCisgICAgICAgICMgcHJvYmxlbXMgaW4gdGhlIGhh
cm5lc3MsIHN1Y2ggYXMgZmFpbGluZyB0byBzdGFydCB0aGUgYWNjZXNzaWJpbGl0eSBidXMuCisg
ICAgICAgIGZvciBza2lwcGVkIGluIHNlbGYuX3NraXBwZWRfdGVzdHM6CisgICAgICAgICAgICBp
ZiB0ZXN0X3Byb2dyYW0uZW5kc3dpdGgoc2tpcHBlZC50ZXN0KSBhbmQgc2tpcHBlZC5za2lwX2Vu
dGlyZV9zdWl0ZSgpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1
cm4gVHJ1ZQorCisgICAgZGVmIF9nZXRfY2hpbGRfcGlkX2Zyb21fdGVzdF9vdXRwdXQoc2VsZiwg
b3V0cHV0KToKKyAgICAgICAgaWYgbm90IG91dHB1dDoKKyAgICAgICAgICAgIHJldHVybiAtMQor
ICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaChyJ1wocGlkPSg/UDxjaGlsZF9waWQ+WzAtOV0rKVwp
Jywgb3V0cHV0KQorICAgICAgICBpZiBub3QgbWF0Y2g6CisgICAgICAgICAgICByZXR1cm4gLTEK
KyAgICAgICAgcmV0dXJuIGludChtYXRjaC5ncm91cCgnY2hpbGRfcGlkJykpCisKKyAgICBkZWYg
X2tpbGxfcHJvY2VzcyhzZWxmLCBwaWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5r
aWxsKHBpZCwgU0lHS0lMTCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAj
IFByb2Nlc3MgYWxyZWFkeSBkaWVkLgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIF9ydW5f
dGVzdF9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHRpbWVvdXQ9LTEpOgorICAgICAgICBkZWYgYWxh
cm1faGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICAgICAgICAgIHJhaXNlIFRlc3RUaW1lb3V0
CisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgc3Rkb3V0PXN1YnByb2Nl
c3MuUElQRSwgZW52PXNlbGYuX3Rlc3RfZW52KQorICAgICAgICBpZiB0aW1lb3V0ID4gMDoKKyAg
ICAgICAgICAgIHNpZ25hbChTSUdBTFJNLCBhbGFybV9oYW5kbGVyKQorICAgICAgICAgICAgYWxh
cm0odGltZW91dCkKKworICAgICAgICBzdGRvdXQgPSAiIgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBzdGRvdXQgPSBwLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgIGlmIHRpbWVvdXQg
PiAwOgorICAgICAgICAgICAgICAgIGFsYXJtKDApCisgICAgICAgICAgICBzeXMuc3Rkb3V0Lndy
aXRlKHN0ZG91dCkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICBleGNl
cHQgVGVzdFRpbWVvdXQ6CisgICAgICAgICAgICBzZWxmLl9raWxsX3Byb2Nlc3MocC5waWQpCisg
ICAgICAgICAgICBjaGlsZF9waWQgPSBzZWxmLl9nZXRfY2hpbGRfcGlkX2Zyb21fdGVzdF9vdXRw
dXQoc3Rkb3V0KQorICAgICAgICAgICAgaWYgY2hpbGRfcGlkID4gMDoKKyAgICAgICAgICAgICAg
ICBzZWxmLl9raWxsX3Byb2Nlc3MoY2hpbGRfcGlkKQorICAgICAgICAgICAgcmFpc2UKKworICAg
ICAgICByZXR1cm4gbm90IHAucmV0dXJuY29kZQorCisgICAgZGVmIF9ydW5fdGVzdF9nbGliKHNl
bGYsIHRlc3RfcHJvZ3JhbSk6CisgICAgICAgIHRlc3Rlcl9jb21tYW5kID0gWydndGVzdGVyJ10K
KyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgdGVzdGVyX2Nv
bW1hbmQuYXBwZW5kKCctLXZlcmJvc2UnKQorICAgICAgICBmb3IgdGVzdF9jYXNlIGluIHNlbGYu
X3Rlc3RfY2FzZXNfdG9fc2tpcCh0ZXN0X3Byb2dyYW0pOgorICAgICAgICAgICAgdGVzdGVyX2Nv
bW1hbmQuZXh0ZW5kKFsnLXMnLCB0ZXN0X2Nhc2VdKQorICAgICAgICB0ZXN0ZXJfY29tbWFuZC5h
cHBlbmQodGVzdF9wcm9ncmFtKQorCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9jb21t
YW5kKHRlc3Rlcl9jb21tYW5kLCBzZWxmLl9vcHRpb25zLnRpbWVvdXQpCisKKyAgICBkZWYgX3J1
bl90ZXN0X2dvb2dsZShzZWxmLCB0ZXN0X3Byb2dyYW0pOgorICAgICAgICB0ZXN0ZXJfY29tbWFu
ZCA9IFt0ZXN0X3Byb2dyYW1dCisgICAgICAgIHNraXBwZWRfdGVzdHNfY2FzZXMgPSBzZWxmLl90
ZXN0X2Nhc2VzX3RvX3NraXAodGVzdF9wcm9ncmFtKQorICAgICAgICBpZiBza2lwcGVkX3Rlc3Rz
X2Nhc2VzOgorICAgICAgICAgICAgdGVzdGVyX2NvbW1hbmQuYXBwZW5kKCItLWd0ZXN0X2ZpbHRl
cj0tJXMiICUgIjoiLmpvaW4oc2tpcHBlZF90ZXN0c19jYXNlcykpCisKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3J1bl90ZXN0X2NvbW1hbmQodGVzdGVyX2NvbW1hbmQsIHNlbGYuX29wdGlvbnMudGlt
ZW91dCkKKworICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9wcm9ncmFtKToKKyAgICAgICAg
aWYgInVuaXR0ZXN0cyIgaW4gdGVzdF9wcm9ncmFtIG9yICJXZWJLaXQyQVBJVGVzdHMiIGluIHRl
c3RfcHJvZ3JhbToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9nbGliKHRlc3Rf
cHJvZ3JhbSkKKworICAgICAgICBpZiAiVGVzdFdlYktpdEFQSSIgaW4gdGVzdF9wcm9ncmFtOgor
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0X2dvb2dsZSh0ZXN0X3Byb2dyYW0pCisK
KyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYpOgorICAgICAg
ICBpZiBub3Qgc2VsZi5fdGVzdHM6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJFUlJP
UjogdGVzdHMgbm90IGZvdW5kIGluICVzLlxuIiAlIChzZWxmLl9wcm9ncmFtc19wYXRoKSkKKyAg
ICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAg
ICAgICBpZiBub3Qgc2VsZi5fc2V0dXBfdGVzdGluZ19lbnZpcm9ubWVudCgpOgorICAgICAgICAg
ICAgcmV0dXJuIDEKKworICAgICAgICAjIFJlbW92ZSBza2lwcGVkIHRlc3RzIG5vdyBpbnN0ZWFk
IG9mIHdoZW4gd2UgZmluZCB0aGVtLCBiZWNhdXNlCisgICAgICAgICMgc29tZSB0ZXN0cyBtaWdo
dCBiZSBza2lwcGVkIHdoaWxlIHNldHRpbmcgdXAgdGhlIHRlc3QgZW52aXJvbm1lbnQuCisgICAg
ICAgIHNlbGYuX3Rlc3RzID0gW3Rlc3QgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdHMgaWYgc2VsZi5f
c2hvdWxkX3J1bl90ZXN0X3Byb2dyYW0odGVzdCldCisKKyAgICAgICAgZmFpbGVkX3Rlc3RzID0g
W10KKyAgICAgICAgdGltZWRfb3V0X3Rlc3RzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdHM6CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFRy
dWUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBz
ZWxmLl9ydW5fdGVzdCh0ZXN0KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBUZXN0VGltZW91dDoK
KyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiVEVTVDogJXM6IFRJTUVPVVRc
biIgJSB0ZXN0KQorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAg
ICAgICAgICAgICAgICAgdGltZWRfb3V0X3Rlc3RzLmFwcGVuZCh0ZXN0KQorCisgICAgICAgICAg
ICAgICAgaWYgbm90IHN1Y2Nlc3M6CisgICAgICAgICAgICAgICAgICAgIGZhaWxlZF90ZXN0cy5h
cHBlbmQodGVzdCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3RlYXJfZG93
bl90ZXN0aW5nX2Vudmlyb25tZW50KCkKKworICAgICAgICBpZiBmYWlsZWRfdGVzdHM6CisgICAg
ICAgICAgICBuYW1lcyA9IFt0ZXN0LnJlcGxhY2Uoc2VsZi5fcHJvZ3JhbXNfcGF0aCwgJycsIDEp
IGZvciB0ZXN0IGluIGZhaWxlZF90ZXN0c10KKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUo
IlRlc3RzIGZhaWxlZDogJXNcbiIgJSAiLCAiLmpvaW4obmFtZXMpKQorICAgICAgICAgICAgc3lz
LnN0ZG91dC5mbHVzaCgpCisKKyAgICAgICAgaWYgdGltZWRfb3V0X3Rlc3RzOgorICAgICAgICAg
ICAgbmFtZXMgPSBbdGVzdC5yZXBsYWNlKHNlbGYuX3Byb2dyYW1zX3BhdGgsICcnLCAxKSBmb3Ig
dGVzdCBpbiB0aW1lZF9vdXRfdGVzdHNdCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJU
ZXN0cyB0aGF0IHRpbWVkIG91dDogJXNcbiIgJSAiLCAiLmpvaW4obmFtZXMpKQorICAgICAgICAg
ICAgc3lzLnN0ZG91dC5mbHVzaCgpCisKKyAgICAgICAgaWYgc2VsZi5fc2tpcHBlZF90ZXN0cyBh
bmQgc2VsZi5fb3B0aW9ucy5za2lwcGVkX2FjdGlvbiA9PSAnc2tpcCc6CisgICAgICAgICAgICBz
eXMuc3Rkb3V0LndyaXRlKCJUZXN0cyBza2lwcGVkOlxuJXNcbiIgJSAiXG4iLmpvaW4oW3N0cihz
a2lwcGVkKSBmb3Igc2tpcHBlZCBpbiBzZWxmLl9za2lwcGVkX3Rlc3RzXSkpCisgICAgICAgICAg
ICBzeXMuc3Rkb3V0LmZsdXNoKCkKKworICAgICAgICByZXR1cm4gbGVuKGZhaWxlZF90ZXN0cykK
IAotaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRvcF9sZXZlbF9kaXJlY3RvcnksICdX
ZWJLaXRCdWlsZCcsICdEZXBlbmRlbmNpZXMnKSk6Ci0gICAgamhidWlsZF93cmFwcGVyX3BhdGgg
PSBvcy5wYXRoLmpvaW4odG9wX2xldmVsX2RpcmVjdG9yeSwgJ1Rvb2xzJywgJ2poYnVpbGQnLCAn
amhidWlsZC13cmFwcGVyJykKLSAgICBhcGlfdGVzdHNfY29tbWFuZCA9IFtqaGJ1aWxkX3dyYXBw
ZXJfcGF0aCwgJy0tZ3RrJywgJ3J1bicsIHJ1bl9hcGlfdGVzdHNfcGF0aF0KLWVsc2U6Ci0gICAg
YXBpX3Rlc3RzX2NvbW1hbmQgPSBbcnVuX2FwaV90ZXN0c19wYXRoXQoraWYgX19uYW1lX18gPT0g
Il9fbWFpbl9fIjoKKyAgICBpZiBub3QgamhidWlsZHV0aWxzLmVudGVyX2poYnVpbGRfZW52aXJv
bm1lbnRfaWZfYXZhaWxhYmxlKCJndGsiKToKKyAgICAgICAgcHJpbnQgIioqKiIKKyAgICAgICAg
cHJpbnQgIioqKiBXYXJuaW5nOiBqaGJ1aWxkIGVudmlyb25tZW50IG5vdCBwcmVzZW50LiBSdW4g
dXBkYXRlLXdlYmtpdGd0ay1saWJzIGJlZm9yZSBidWlsZC13ZWJraXQgdG8gZW5zdXJlIHByb3Bl
ciB0ZXN0aW5nLiIKKyAgICAgICAgcHJpbnQgIioqKiIKIAotYXBpX3Rlc3RzX2NvbW1hbmQuZXh0
ZW5kKHN5cy5hcmd2WzE6XSkKLXN5cy5leGl0KHN1YnByb2Nlc3MuUG9wZW4oYXBpX3Rlc3RzX2Nv
bW1hbmQpLndhaXQoKSkKKyAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2Vy
KHVzYWdlPSd1c2FnZTogJXByb2cgW29wdGlvbnNdIFt0ZXN0Li4uXScpCisgICAgb3B0aW9uX3Bh
cnNlci5hZGRfb3B0aW9uKCctcicsICctLXJlbGVhc2UnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdyZWxlYXNlJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0nUnVuIGluIFJlbGVhc2UnKQorICAgIG9wdGlvbl9wYXJz
ZXIuYWRkX29wdGlvbignLWQnLCAnLS1kZWJ1ZycsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2RlYnVnJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nUnVuIGluIERlYnVnJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9v
cHRpb24oJy12JywgJy0tdmVyYm9zZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFj
dGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J3ZlcmJvc2UnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSdSdW4gZ3Rlc3RlciBpbiB2ZXJib3NlIG1vZGUnKQorICAgIG9wdGlvbl9w
YXJzZXIuYWRkX29wdGlvbignLS1kaXNwbGF5JywgYWN0aW9uPSdzdG9yZScsIGRlc3Q9J2Rpc3Bs
YXknLCBkZWZhdWx0PSc6NTUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdE
aXNwbGF5IHRvIHJ1biBYdmZiJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tc2tp
cHBlZCcsIGFjdGlvbj0nc3RvcmUnLCBkZXN0PSdza2lwcGVkX2FjdGlvbicsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNob2ljZXM9Wydza2lwJywgJ2lnbm9yZScsICdvbmx5J10sIGRl
ZmF1bHQ9J3NraXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSdza2lw
fGlnbm9yZXxvbmx5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3BlY2lm
aWVzIGhvdyB0byB0cmVhdCB0aGUgc2tpcHBlZCB0ZXN0cycpCisgICAgb3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKCctdCcsICctLXRpbWVvdXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhY3Rpb249J3N0b3JlJywgdHlwZT0naW50JywgZGVzdD0ndGltZW91dCcsIGRlZmF1bHQ9MTAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RpbWUgaW4gc2Vjb25kcyB1bnRp
bCBhIHRlc3QgdGltZXMgb3V0JykKKyAgICBvcHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5w
YXJzZV9hcmdzKCkKIAorICAgIHN5cy5leGl0KFRlc3RSdW5uZXIob3B0aW9ucywgYXJncykucnVu
X3Rlc3RzKCkpCmRpZmYgLS1naXQgYS9Ub29scy9ndGsvcnVuLWFwaS10ZXN0cyBiL1Rvb2xzL2d0
ay9ydW4tYXBpLXRlc3RzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhNjAxYTc2NmMw
MGRjNDcxMDA0N2VlOWY5YTFhNjNmMDYxNGM4ZDYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL2d0ay9ydW4tYXBpLXRlc3RzCisrKyAvZGV2L251
bGwKQEAgLTEsMzI5ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSMg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotIwotIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSMgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSMgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0KLWltcG9ydCBjb21tb24KLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgb3MKLWlt
cG9ydCBzeXMKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IHJlCi1mcm9tIHNpZ25hbCBpbXBvcnQg
YWxhcm0sIHNpZ25hbCwgU0lHQUxSTSwgU0lHS0lMTAotZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9y
dCBHaW8sIEdMaWIKLQotY2xhc3MgU2tpcHBlZFRlc3Q6Ci0gICAgRU5USVJFX1NVSVRFID0gTm9u
ZQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3QsIHRlc3RfY2FzZSwgcmVhc29uLCBidWc9
Tm9uZSk6Ci0gICAgICAgIHNlbGYudGVzdCA9IHRlc3QKLSAgICAgICAgc2VsZi50ZXN0X2Nhc2Ug
PSB0ZXN0X2Nhc2UKLSAgICAgICAgc2VsZi5yZWFzb24gPSByZWFzb24KLSAgICAgICAgc2VsZi5i
dWcgPSBidWcKLQotICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICBza2lwcGVkX3Rlc3Rf
c3RyID0gIiVzIiAlIHNlbGYudGVzdAotCi0gICAgICAgIGlmIG5vdChzZWxmLnNraXBfZW50aXJl
X3N1aXRlKCkpOgotICAgICAgICAgICAgc2tpcHBlZF90ZXN0X3N0ciArPSAiIFslc10iICUgc2Vs
Zi50ZXN0X2Nhc2UKLQotICAgICAgICBza2lwcGVkX3Rlc3Rfc3RyICs9ICI6ICVzICIgJSBzZWxm
LnJlYXNvbgotICAgICAgICBpZiBzZWxmLmJ1ZyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNr
aXBwZWRfdGVzdF9zdHIgKz0gIihodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9JWQpIiAlIHNlbGYuYnVnCi0gICAgICAgIHJldHVybiBza2lwcGVkX3Rlc3Rfc3RyCi0KLSAg
ICBkZWYgc2tpcF9lbnRpcmVfc3VpdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnRlc3Rf
Y2FzZSA9PSBTa2lwcGVkVGVzdC5FTlRJUkVfU1VJVEUKLQotY2xhc3MgVGVzdFRpbWVvdXQoRXhj
ZXB0aW9uKToKLSAgICBwYXNzCi0KLWNsYXNzIFRlc3RSdW5uZXI6Ci0gICAgVEVTVF9ESVJTID0g
WyAidW5pdHRlc3RzIiwgIldlYktpdDJBUElUZXN0cyIsICJUZXN0V2ViS2l0QVBJIiBdCi0KLSAg
ICBTS0lQUEVEID0gWwotICAgICAgICBTa2lwcGVkVGVzdCgidW5pdHRlc3RzL3Rlc3Rkb3dubG9h
ZCIsICIvd2Via2l0L2Rvd25sb2FkL25vdC1mb3VuZCIsICJUZXN0IGZhaWxzIGluIEdUSyBMaW51
eCA2NC1iaXQgUmVsZWFzZSBib3QiLCA4MjMyOSksCi0gICAgICAgIFNraXBwZWRUZXN0KCJ1bml0
dGVzdHMvdGVzdHdlYnZpZXciLCAiL3dlYmtpdC93ZWJ2aWV3L2ljb24tdXJpIiwgIlRlc3QgdGlt
ZXMgb3V0IGluIEdUSyBMaW51eCA2NC1iaXQgUmVsZWFzZSBib3QiLCA4MjMyOCksCi0gICAgICAg
IFNraXBwZWRUZXN0KCJ1bml0dGVzdHMvdGVzdHdlYnJlc291cmNlIiwgIi93ZWJraXQvd2VicmVz
b3VyY2Uvc3ViX3Jlc291cmNlX2xvYWRpbmciLCAiVGVzdCBmYWlscyBpbiBHVEsgTGludXggNjQt
Yml0IFJlbGVhc2UgYm90IiwgODIzMzApLAotICAgICAgICBTa2lwcGVkVGVzdCgidW5pdHRlc3Rz
L3Rlc3R3ZWJpbnNwZWN0b3IiLCAiL3dlYmtpdC93ZWJpbnNwZWN0b3IvY2xvc2UtYW5kLWluc3Bl
Y3QiLCAiVGVzdCBpcyBmbGFreSBpbiBHVEsgTGludXggMzItYml0IFJlbGVhc2UgYm90IiwgODI4
NjkpLAotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJW
aWV3IiwgIi93ZWJraXQyL1dlYktpdFdlYlZpZXcvbW91c2UtdGFyZ2V0IiwgIlRlc3QgaXMgZmxh
a3kgaW4gR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlIGJvdCIsIDgyODY2KSwKLSAgICAgICAgU2tp
cHBlZFRlc3QoIldlYktpdDJBUElUZXN0cy9UZXN0UmVzb3VyY2VzIiwgIi93ZWJraXQyL1dlYktp
dFdlYlZpZXcvcmVzb3VyY2VzIiwgIlRlc3QgaXMgZmxha3kgaW4gR1RLIExpbnV4IDMyLWJpdCBS
ZWxlYXNlIGJvdCIsIDgyODY4KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJBUElUZXN0
cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIiLCAiL3dlYmtpdDIvV2ViS2l0RmluZENvbnRyb2xs
ZXIvbmV4dCIsICJUZXN0IGZhaWxzICIsIDkxMDgzKSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldl
YktpdDJBUElUZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIiLCAiL3dlYmtpdDIvV2ViS2l0
RmluZENvbnRyb2xsZXIvcHJldmlvdXMiLCAiVGVzdCBmYWlscyIsIDkxMDgzKSwKLSAgICAgICAg
U2tpcHBlZFRlc3QoIldlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIiLCAi
L3dlYmtpdDIvV2ViS2l0RmluZENvbnRyb2xsZXIvaGlkZSIsICJUZXN0ICBhbHdheXMgZmFpbHMg
aW4gWHZmYiIsIDg5ODEwKSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdDIiLCAiV2ViS2l0Mi5XS0Nvbm5lY3Rpb24iLCAiVGVzdHMgZmFpbCBhbmQgdGltZSBv
dXQgb3V0IiwgODQ5NTkpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0MiIsICJXZWJLaXQyLlJlc3RvcmVTZXNzaW9uU3RhdGVDb250YWluaW5nRm9ybURhdGEi
LCAiU2Vzc2lvbiBTdGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gR1RLKyBwb3J0IiwgODQ5NjAp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJL
aXQyLlNwYWNlYmFyU2Nyb2xsaW5nIiwgIlRlc3QgZmFpbHMiLCA4NDk2MSksCi0gICAgICAgIFNr
aXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuTmV3Rmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzIiwgIlRlc3QgaXMgZmxha3kiLCA4NTA2Niks
Ci0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktp
dDIuTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RnJhbWVzIiwgIlRlc3QgZmFpbHMiLCA4
NTAzNyksCi0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwg
IldlYktpdDIuTW91c2VNb3ZlQWZ0ZXJDcmFzaCIsICJUZXN0IGlzIGZsYWt5IiwgODUwNjYpLAot
ICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQy
LkNhbkhhbmRsZVJlcXVlc3QiLCAiVGVzdCBmYWlscyIsIDg4NDUzKSwKLSAgICAgICAgU2tpcHBl
ZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5XS1BhZ2VHZXRTY2Fs
ZUZhY3Rvck5vdFplcm8iLCAiVGVzdCBmYWlscyBhbmQgdGltZXMgb3V0IiwgODg0NTUpLAotICAg
IF0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zLCB0ZXN0cz1bXSk6Ci0gICAgICAg
IHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHNlbGYuX3Byb2dyYW1zX3BhdGggPSBj
b21tb24uYnVpbGRfcGF0aCgiUHJvZ3JhbXMiKQotICAgICAgICBzZWxmLl90ZXN0cyA9IHNlbGYu
X2dldF90ZXN0cyh0ZXN0cykKLSAgICAgICAgc2VsZi5fc2tpcHBlZF90ZXN0cyA9IFRlc3RSdW5u
ZXIuU0tJUFBFRAotCi0gICAgICAgICMgVGhlc2UgU1BJIGRhZW1vbnMgbmVlZCB0byBiZSBhY3Rp
dmUgZm9yIHRoZSBhY2Nlc3NpYmlsaXR5IHRlc3RzIHRvIHdvcmsuCi0gICAgICAgIHNlbGYuX3Nw
aV9yZWdpc3RyeWQgPSBOb25lCi0gICAgICAgIHNlbGYuX3NwaV9idXNfbGF1bmNoZXIgPSBOb25l
Ci0KLSAgICBkZWYgX2dldF90ZXN0cyhzZWxmLCB0ZXN0cyk6Ci0gICAgICAgIGlmIHRlc3RzOgot
ICAgICAgICAgICAgcmV0dXJuIHRlc3RzCi0KLSAgICAgICAgdGVzdHMgPSBbXQotICAgICAgICBm
b3IgdGVzdF9kaXIgaW4gc2VsZi5URVNUX0RJUlM6Ci0gICAgICAgICAgICBhYnNvbHV0ZV90ZXN0
X2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9wcm9ncmFtc19wYXRoLCB0ZXN0X2RpcikKLSAgICAg
ICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGFic29sdXRlX3Rlc3RfZGlyKToKLSAgICAgICAg
ICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiBvcy5saXN0ZGly
KGFic29sdXRlX3Rlc3RfZGlyKToKLSAgICAgICAgICAgICAgICBpZiBub3QgdGVzdF9maWxlLmxv
d2VyKCkuc3RhcnRzd2l0aCgidGVzdCIpOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQot
ICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wcm9ncmFtc19w
YXRoLCB0ZXN0X2RpciwgdGVzdF9maWxlKQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNm
aWxlKHRlc3RfcGF0aCkgYW5kIG9zLmFjY2Vzcyh0ZXN0X3BhdGgsIG9zLlhfT0spOgotICAgICAg
ICAgICAgICAgICAgICB0ZXN0cy5hcHBlbmQodGVzdF9wYXRoKQotICAgICAgICByZXR1cm4gdGVz
dHMKLQotICAgIGRlZiBfbG9va3VwX2F0c3BpMl9iaW5hcnkoc2VsZiwgZmlsZW5hbWUpOgotICAg
ICAgICBleGVjX3ByZWZpeCA9IGNvbW1vbi5wa2dfY29uZmlnX2ZpbGVfdmFyaWFibGUoJ2F0c3Bp
LTInLCAnZXhlY19wcmVmaXgnKQotICAgICAgICBpZiBub3QgZXhlY19wcmVmaXg6Ci0gICAgICAg
ICAgICByZXR1cm4gTm9uZQotICAgICAgICBmb3IgcGF0aCBpbiBbJ2xpYmV4ZWMnLCAnbGliL2F0
LXNwaTItY29yZScsICdsaWIzMi9hdC1zcGkyLWNvcmUnLCAnbGliNjQvYXQtc3BpMi1jb3JlJ106
Ci0gICAgICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihleGVjX3ByZWZpeCwgcGF0aCwg
ZmlsZW5hbWUpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlcGF0aCk6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZpbGVwYXRoCi0KLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAg
IGRlZiBfc3RhcnRfYWNjZXNzaWJpbGl0eV9kYWVtb25zKHNlbGYpOgotICAgICAgICByZXR1cm4g
RmFsc2UKLSAgICAgICAgc3BpX2J1c19sYXVuY2hlcl9wYXRoID0gc2VsZi5fbG9va3VwX2F0c3Bp
Ml9iaW5hcnkoJ2F0LXNwaS1idXMtbGF1bmNoZXInKQotICAgICAgICBzcGlfcmVnaXN0cnlkX3Bh
dGggPSBzZWxmLl9sb29rdXBfYXRzcGkyX2JpbmFyeSgnYXQtc3BpMi1yZWdpc3RyeWQnKQotICAg
ICAgICBpZiBub3Qgc3BpX2J1c19sYXVuY2hlcl9wYXRoIG9yIG5vdCBzcGlfcmVnaXN0cnlkX3Bh
dGg6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICBzZWxmLl9hbGx5X2J1c19sYXVuY2hlciA9IHN1YnByb2Nlc3MuUG9wZW4oW3NwaV9idXNfbGF1
bmNoZXJfcGF0aF0sIGVudj1zZWxmLl90ZXN0X2VudikKLSAgICAgICAgZXhjZXB0OgotICAgICAg
ICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIGxhdW5jaCB0aGUgYWNjZXNzaWJpbGl0
eSBidXNcbiIpCi0gICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgICAgIHJl
dHVybiBGYWxzZQotCi0gICAgICAgICMgV2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBTUEkgYnVz
IGlzIGxhdW5jaGVkIGJlZm9yZSB0cnlpbmcgdG8gc3RhcnQgdGhlIFNQSQotICAgICAgICAjIHJl
Z2lzdHJ5LCBzbyB3ZSBzcGluIGEgbWFpbiBsb29wIHVudGlsIHRoZSBidXMgbmFtZSBhcHBlYXJz
IG9uIERCdXMuCi0gICAgICAgIGxvb3AgPSBHTGliLk1haW5Mb29wKCkKLSAgICAgICAgR2lvLmJ1
c193YXRjaF9uYW1lKEdpby5CdXNUeXBlLlNFU1NJT04sICdvcmcuYTExeS5CdXMnLCBHaW8uQnVz
TmFtZVdhdGNoZXJGbGFncy5OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRh
ICphcmdzOiBsb29wLnF1aXQoKSwgTm9uZSkKLSAgICAgICAgbG9vcC5ydW4oKQotCi0gICAgICAg
IHRyeToKLSAgICAgICAgICAgIHNlbGYuX3NwaV9yZWdpc3RyeWQgPSBzdWJwcm9jZXNzLlBvcGVu
KFtzcGlfcmVnaXN0cnlkX3BhdGhdLCBlbnY9c2VsZi5fdGVzdF9lbnYpCi0gICAgICAgIGV4Y2Vw
dDoKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0byBsYXVuY2ggdGhlIGFj
Y2Vzc2liaWxpdHkgcmVnaXN0cnlcbiIpCi0gICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkK
LSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBk
ZWYgX3NldHVwX3Rlc3RpbmdfZW52aXJvbm1lbnQoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3Rf
ZW52ID0gb3MuZW52aXJvbgotICAgICAgICBzZWxmLl90ZXN0X2VudlsiRElTUExBWSJdID0gc2Vs
Zi5fb3B0aW9ucy5kaXNwbGF5Ci0gICAgICAgIHNlbGYuX3Rlc3RfZW52WyJXRUJLSVRfSU5TUEVD
VE9SX1BBVEgiXSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oc2VsZi5fcHJvZ3JhbXNf
cGF0aCwgJ3Jlc291cmNlcycsICdpbnNwZWN0b3InKSkKLSAgICAgICAgc2VsZi5fdGVzdF9lbnZb
J0dTRVRUSU5HU19CQUNLRU5EJ10gPSAnbWVtb3J5JwotICAgICAgICBzZWxmLl90ZXN0X2Vudlsi
VEVTVF9XRUJLSVRfQVBJX1dFQktJVDJfUkVTT1VSQ0VTX1BBVEgiXSA9IGNvbW1vbi50b3BfbGV2
ZWxfcGF0aCgiVG9vbHMiLCAiVGVzdFdlYktpdEFQSSIsICJUZXN0cyIsICJXZWJLaXQyIikKLSAg
ICAgICAgc2VsZi5fdGVzdF9lbnZbIlRFU1RfV0VCS0lUX0FQSV9XRUJLSVQyX0lOSkVDVEVEX0JV
TkRMRV9QQVRIIl0gPSBjb21tb24uYnVpbGRfcGF0aCgiTGlicmFyaWVzIikKLSAgICAgICAgc2Vs
Zi5fdGVzdF9lbnZbIldFQktJVF9FWEVDX1BBVEgiXSA9IHNlbGYuX3Byb2dyYW1zX3BhdGgKLQot
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl94dmZiID0gc3VicHJvY2Vzcy5Qb3Blbihb
Ilh2ZmIiLCBzZWxmLl9vcHRpb25zLmRpc3BsYXksICItc2NyZWVuIiwgIjAiLCAiODAweDYwMHgy
NCIsICItbm9saXN0ZW4iLCAidGNwIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBF
KQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICBzeXMuc3RkZXJy
LndyaXRlKCJGYWlsZWQgdG8gcnVuIFh2ZmI6ICVzXG4iICUgZSkKLSAgICAgICAgICAgIHN5cy5z
dGRlcnIuZmx1c2goKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgIyBJZiB3
ZSBjYW5ub3Qgc3RhcnQgdGhlIGFjY2Vzc2liaWxpdHkgZGFlbW9ucywgd2UgY2FuIGp1c3Qgc2tp
cCB0aGUgYWNjZXNzaWJpbGl0eSB0ZXN0cy4KLSAgICAgICAgaWYgbm90IHNlbGYuX3N0YXJ0X2Fj
Y2Vzc2liaWxpdHlfZGFlbW9ucygpOgotICAgICAgICAgICAgcHJpbnQgIkNvdWxkIG5vdCBzdGFy
dCBhY2Nlc3NpYmlsaXR5IGJ1cywgc28gc2tpcHBpbmcgVGVzdFdlYktpdEFjY2Vzc2liaWxpdHki
Ci0gICAgICAgICAgICBzZWxmLl9za2lwcGVkX3Rlc3RzLmFwcGVuZChTa2lwcGVkVGVzdCgiV2Vi
S2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgU2tpcHBlZFRlc3QuRU5USVJF
X1NVSVRFLCAiQ291bGQgbm90IHN0YXJ0IGFjY2Vzc2liaWxpdHkgYnVzIikpCi0gICAgICAgIHJl
dHVybiBUcnVlCi0KLSAgICBkZWYgX3RlYXJfZG93bl90ZXN0aW5nX2Vudmlyb25tZW50KHNlbGYp
OgotICAgICAgICBpZiBzZWxmLl9zcGlfcmVnaXN0cnlkOgotICAgICAgICAgICAgc2VsZi5fc3Bp
X3JlZ2lzdHJ5ZC50ZXJtaW5hdGUoKQotICAgICAgICBpZiBzZWxmLl9zcGlfYnVzX2xhdW5jaGVy
OgotICAgICAgICAgICAgc2VsZi5fc3BpX2J1c19sYXVuY2hlci50ZXJtaW5hdGUoKQotICAgICAg
ICBzZWxmLl94dmZiLnRlcm1pbmF0ZSgpCi0KLSAgICBkZWYgX3Rlc3RfY2FzZXNfdG9fc2tpcChz
ZWxmLCB0ZXN0X3Byb2dyYW0pOgotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnNraXBwZWRfYWN0
aW9uICE9ICdza2lwJzoKLSAgICAgICAgICAgIHJldHVybiBbXQotCi0gICAgICAgIHRlc3RfY2Fz
ZXMgPSBbXQotICAgICAgICBmb3Igc2tpcHBlZCBpbiBzZWxmLl9za2lwcGVkX3Rlc3RzOgotICAg
ICAgICAgICAgaWYgdGVzdF9wcm9ncmFtLmVuZHN3aXRoKHNraXBwZWQudGVzdCkgYW5kIG5vdCBz
a2lwcGVkLnNraXBfZW50aXJlX3N1aXRlKCk6Ci0gICAgICAgICAgICAgICAgdGVzdF9jYXNlcy5h
cHBlbmQoc2tpcHBlZC50ZXN0X2Nhc2UpCi0gICAgICAgIHJldHVybiB0ZXN0X2Nhc2VzCi0KLSAg
ICBkZWYgX3Nob3VsZF9ydW5fdGVzdF9wcm9ncmFtKHNlbGYsIHRlc3RfcHJvZ3JhbSk6Ci0gICAg
ICAgICMgVGhpcyBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMs
IHNpbmNlIHByb2dyYW1zIGFyZSBza2lwcGVkIGZvcgotICAgICAgICAjIHByb2JsZW1zIGluIHRo
ZSBoYXJuZXNzLCBzdWNoIGFzIGZhaWxpbmcgdG8gc3RhcnQgdGhlIGFjY2Vzc2liaWxpdHkgYnVz
LgotICAgICAgICBmb3Igc2tpcHBlZCBpbiBzZWxmLl9za2lwcGVkX3Rlc3RzOgotICAgICAgICAg
ICAgaWYgdGVzdF9wcm9ncmFtLmVuZHN3aXRoKHNraXBwZWQudGVzdCkgYW5kIHNraXBwZWQuc2tp
cF9lbnRpcmVfc3VpdGUoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAg
cmV0dXJuIFRydWUKLQotICAgIGRlZiBfZ2V0X2NoaWxkX3BpZF9mcm9tX3Rlc3Rfb3V0cHV0KHNl
bGYsIG91dHB1dCk6Ci0gICAgICAgIGlmIG5vdCBvdXRwdXQ6Ci0gICAgICAgICAgICByZXR1cm4g
LTEKLSAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2gocidcKHBpZD0oP1A8Y2hpbGRfcGlkPlswLTld
KylcKScsIG91dHB1dCkKLSAgICAgICAgaWYgbm90IG1hdGNoOgotICAgICAgICAgICAgcmV0dXJu
IC0xCi0gICAgICAgIHJldHVybiBpbnQobWF0Y2guZ3JvdXAoJ2NoaWxkX3BpZCcpKQotCi0gICAg
ZGVmIF9raWxsX3Byb2Nlc3Moc2VsZiwgcGlkKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAg
b3Mua2lsbChwaWQsIFNJR0tJTEwpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAg
ICAgIyBQcm9jZXNzIGFscmVhZHkgZGllZC4KLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiBf
cnVuX3Rlc3RfY29tbWFuZChzZWxmLCBjb21tYW5kLCB0aW1lb3V0PS0xKToKLSAgICAgICAgZGVm
IGFsYXJtX2hhbmRsZXIoc2lnbnVtLCBmcmFtZSk6Ci0gICAgICAgICAgICByYWlzZSBUZXN0VGlt
ZW91dAotCi0gICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmQsIHN0ZG91dD1zdWJw
cm9jZXNzLlBJUEUsIGVudj1zZWxmLl90ZXN0X2VudikKLSAgICAgICAgaWYgdGltZW91dCA+IDA6
Ci0gICAgICAgICAgICBzaWduYWwoU0lHQUxSTSwgYWxhcm1faGFuZGxlcikKLSAgICAgICAgICAg
IGFsYXJtKHRpbWVvdXQpCi0KLSAgICAgICAgc3Rkb3V0ID0gIiIKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgc3Rkb3V0ID0gcC5jb21tdW5pY2F0ZSgpWzBdCi0gICAgICAgICAgICBpZiB0aW1l
b3V0ID4gMDoKLSAgICAgICAgICAgICAgICBhbGFybSgwKQotICAgICAgICAgICAgc3lzLnN0ZG91
dC53cml0ZShzdGRvdXQpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAg
ZXhjZXB0IFRlc3RUaW1lb3V0OgotICAgICAgICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKHAucGlk
KQotICAgICAgICAgICAgY2hpbGRfcGlkID0gc2VsZi5fZ2V0X2NoaWxkX3BpZF9mcm9tX3Rlc3Rf
b3V0cHV0KHN0ZG91dCkKLSAgICAgICAgICAgIGlmIGNoaWxkX3BpZCA+IDA6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKGNoaWxkX3BpZCkKLSAgICAgICAgICAgIHJhaXNlCi0K
LSAgICAgICAgcmV0dXJuIG5vdCBwLnJldHVybmNvZGUKLQotICAgIGRlZiBfcnVuX3Rlc3RfZ2xp
YihzZWxmLCB0ZXN0X3Byb2dyYW0pOgotICAgICAgICB0ZXN0ZXJfY29tbWFuZCA9IFsnZ3Rlc3Rl
ciddCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMudmVyYm9zZToKLSAgICAgICAgICAgIHRlc3Rl
cl9jb21tYW5kLmFwcGVuZCgnLS12ZXJib3NlJykKLSAgICAgICAgZm9yIHRlc3RfY2FzZSBpbiBz
ZWxmLl90ZXN0X2Nhc2VzX3RvX3NraXAodGVzdF9wcm9ncmFtKToKLSAgICAgICAgICAgIHRlc3Rl
cl9jb21tYW5kLmV4dGVuZChbJy1zJywgdGVzdF9jYXNlXSkKLSAgICAgICAgdGVzdGVyX2NvbW1h
bmQuYXBwZW5kKHRlc3RfcHJvZ3JhbSkKLQotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3Rlc3Rf
Y29tbWFuZCh0ZXN0ZXJfY29tbWFuZCwgc2VsZi5fb3B0aW9ucy50aW1lb3V0KQotCi0gICAgZGVm
IF9ydW5fdGVzdF9nb29nbGUoc2VsZiwgdGVzdF9wcm9ncmFtKToKLSAgICAgICAgdGVzdGVyX2Nv
bW1hbmQgPSBbdGVzdF9wcm9ncmFtXQotICAgICAgICBza2lwcGVkX3Rlc3RzX2Nhc2VzID0gc2Vs
Zi5fdGVzdF9jYXNlc190b19za2lwKHRlc3RfcHJvZ3JhbSkKLSAgICAgICAgaWYgc2tpcHBlZF90
ZXN0c19jYXNlczoKLSAgICAgICAgICAgIHRlc3Rlcl9jb21tYW5kLmFwcGVuZCgiLS1ndGVzdF9m
aWx0ZXI9LSVzIiAlICI6Ii5qb2luKHNraXBwZWRfdGVzdHNfY2FzZXMpKQotCi0gICAgICAgIHJl
dHVybiBzZWxmLl9ydW5fdGVzdF9jb21tYW5kKHRlc3Rlcl9jb21tYW5kLCBzZWxmLl9vcHRpb25z
LnRpbWVvdXQpCi0KLSAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3RfcHJvZ3JhbSk6Ci0gICAg
ICAgIGlmICJ1bml0dGVzdHMiIGluIHRlc3RfcHJvZ3JhbSBvciAiV2ViS2l0MkFQSVRlc3RzIiBp
biB0ZXN0X3Byb2dyYW06Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RfZ2xpYih0
ZXN0X3Byb2dyYW0pCi0KLSAgICAgICAgaWYgIlRlc3RXZWJLaXRBUEkiIGluIHRlc3RfcHJvZ3Jh
bToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9nb29nbGUodGVzdF9wcm9ncmFt
KQotCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIHJ1bl90ZXN0cyhzZWxmKToKLSAg
ICAgICAgaWYgbm90IHNlbGYuX3Rlc3RzOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgi
RVJST1I6IHRlc3RzIG5vdCBmb3VuZCBpbiAlcy5cbiIgJSAoc2VsZi5fcHJvZ3JhbXNfcGF0aCkp
Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgICAgIHJldHVybiAxCi0K
LSAgICAgICAgaWYgbm90IHNlbGYuX3NldHVwX3Rlc3RpbmdfZW52aXJvbm1lbnQoKToKLSAgICAg
ICAgICAgIHJldHVybiAxCi0KLSAgICAgICAgIyBSZW1vdmUgc2tpcHBlZCB0ZXN0cyBub3cgaW5z
dGVhZCBvZiB3aGVuIHdlIGZpbmQgdGhlbSwgYmVjYXVzZQotICAgICAgICAjIHNvbWUgdGVzdHMg
bWlnaHQgYmUgc2tpcHBlZCB3aGlsZSBzZXR0aW5nIHVwIHRoZSB0ZXN0IGVudmlyb25tZW50Lgot
ICAgICAgICBzZWxmLl90ZXN0cyA9IFt0ZXN0IGZvciB0ZXN0IGluIHNlbGYuX3Rlc3RzIGlmIHNl
bGYuX3Nob3VsZF9ydW5fdGVzdF9wcm9ncmFtKHRlc3QpXQotCi0gICAgICAgIGZhaWxlZF90ZXN0
cyA9IFtdCi0gICAgICAgIHRpbWVkX291dF90ZXN0cyA9IFtdCi0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX3Rlc3RzOgotICAgICAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBUcnVlCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
ID0gc2VsZi5fcnVuX3Rlc3QodGVzdCkKLSAgICAgICAgICAgICAgICBleGNlcHQgVGVzdFRpbWVv
dXQ6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlRFU1Q6ICVzOiBUSU1F
T1VUXG4iICUgdGVzdCkKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0g
ICAgICAgICAgICAgICAgICAgIHRpbWVkX291dF90ZXN0cy5hcHBlbmQodGVzdCkKLQotICAgICAg
ICAgICAgICAgIGlmIG5vdCBzdWNjZXNzOgotICAgICAgICAgICAgICAgICAgICBmYWlsZWRfdGVz
dHMuYXBwZW5kKHRlc3QpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLl90ZWFy
X2Rvd25fdGVzdGluZ19lbnZpcm9ubWVudCgpCi0KLSAgICAgICAgaWYgZmFpbGVkX3Rlc3RzOgot
ICAgICAgICAgICAgbmFtZXMgPSBbdGVzdC5yZXBsYWNlKHNlbGYuX3Byb2dyYW1zX3BhdGgsICcn
LCAxKSBmb3IgdGVzdCBpbiBmYWlsZWRfdGVzdHNdCi0gICAgICAgICAgICBzeXMuc3Rkb3V0Lndy
aXRlKCJUZXN0cyBmYWlsZWQ6ICVzXG4iICUgIiwgIi5qb2luKG5hbWVzKSkKLSAgICAgICAgICAg
IHN5cy5zdGRvdXQuZmx1c2goKQotCi0gICAgICAgIGlmIHRpbWVkX291dF90ZXN0czoKLSAgICAg
ICAgICAgIG5hbWVzID0gW3Rlc3QucmVwbGFjZShzZWxmLl9wcm9ncmFtc19wYXRoLCAnJywgMSkg
Zm9yIHRlc3QgaW4gdGltZWRfb3V0X3Rlc3RzXQotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0
ZSgiVGVzdHMgdGhhdCB0aW1lZCBvdXQ6ICVzXG4iICUgIiwgIi5qb2luKG5hbWVzKSkKLSAgICAg
ICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotCi0gICAgICAgIGlmIHNlbGYuX3NraXBwZWRfdGVz
dHMgYW5kIHNlbGYuX29wdGlvbnMuc2tpcHBlZF9hY3Rpb24gPT0gJ3NraXAnOgotICAgICAgICAg
ICAgc3lzLnN0ZG91dC53cml0ZSgiVGVzdHMgc2tpcHBlZDpcbiVzXG4iICUgIlxuIi5qb2luKFtz
dHIoc2tpcHBlZCkgZm9yIHNraXBwZWQgaW4gc2VsZi5fc2tpcHBlZF90ZXN0c10pKQotICAgICAg
ICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0KLSAgICAgICAgcmV0dXJuIGxlbihmYWlsZWRfdGVz
dHMpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgb3B0aW9uX3BhcnNlciA9IG9w
dHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0ndXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBbdGVzdC4u
Ll0nKQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXInLCAnLS1yZWxlYXNlJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0ncmVs
ZWFzZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBpbiBSZWxlYXNl
JykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1kJywgJy0tZGVidWcnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdkZWJ1Zycs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBpbiBEZWJ1ZycpCi0gICAg
b3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSd2ZXJib3NlJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUnVuIGd0ZXN0ZXIgaW4gdmVyYm9zZSBt
b2RlJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tZGlzcGxheScsIGFjdGlvbj0n
c3RvcmUnLCBkZXN0PSdkaXNwbGF5JywgZGVmYXVsdD0nOjU1JywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nRGlzcGxheSB0byBydW4gWHZmYicpCi0gICAgb3B0aW9uX3BhcnNl
ci5hZGRfb3B0aW9uKCctLXNraXBwZWQnLCBhY3Rpb249J3N0b3JlJywgZGVzdD0nc2tpcHBlZF9h
Y3Rpb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsnc2tpcCcsICdp
Z25vcmUnLCAnb25seSddLCBkZWZhdWx0PSdza2lwJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWV0YXZhcj0nc2tpcHxpZ25vcmV8b25seScsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J1NwZWNpZmllcyBob3cgdG8gdHJlYXQgdGhlIHNraXBwZWQgdGVzdHMnKQot
ICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10aW1lb3V0JywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZScsIHR5cGU9J2ludCcsIGRlc3Q9J3Rp
bWVvdXQnLCBkZWZhdWx0PTEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdU
aW1lIGluIHNlY29uZHMgdW50aWwgYSB0ZXN0IHRpbWVzIG91dCcpCi0gICAgb3B0aW9ucywgYXJn
cyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncygpCi0KLSAgICBzeXMuZXhpdChUZXN0UnVubmVy
KG9wdGlvbnMsIGFyZ3MpLnJ1bl90ZXN0cygpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvamhidWlsZC9q
aGJ1aWxkLXdyYXBwZXIgYi9Ub29scy9qaGJ1aWxkL2poYnVpbGQtd3JhcHBlcgppbmRleCBmOTc1
MWU0ZTQ3NWI2NGM5NmRlYzk0Mzk5MjNkYWM3ZTBmNTMzZDA3Li5jYWY1NWRjOGQ3NjUyZWQ0YTI0
NjBlNWNkM2Y4NjZmNDA0MzlhZGIzIDEwMDc1NQotLS0gYS9Ub29scy9qaGJ1aWxkL2poYnVpbGQt
d3JhcHBlcgorKysgYi9Ub29scy9qaGJ1aWxkL2poYnVpbGQtd3JhcHBlcgpAQCAtMTcsMzggKzE3
LDIwIEBACiAjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKICMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAKK2ltcG9ydCBq
aGJ1aWxkdXRpbHMKIGltcG9ydCBvcwogaW1wb3J0IHNobGV4CiBpbXBvcnQgc3VicHJvY2Vzcwog
aW1wb3J0IHN5cwogCi0KLXRvcF9sZXZlbF9kaXIgPSBOb25lCi0KLQotZGVmIHRvcF9sZXZlbF9w
YXRoKCphcmdzKToKLSAgICBnbG9iYWwgdG9wX2xldmVsX2RpcgotICAgIGlmIG5vdCB0b3BfbGV2
ZWxfZGlyOgotICAgICAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGly
bmFtZShfX2ZpbGVfXyksICcuLicsICcuLicpCi0gICAgcmV0dXJuIG9zLnBhdGguam9pbigqKHRv
cF9sZXZlbF9kaXIsKSArIGFyZ3MpCi0KLQogamhidWlsZF9yZXZpc2lvbiA9ICcxZWVkYzQyM2Y3
NWM2MDUyMjRiNDMwNTc5ZTRjMzAzMjkyMTk5NTA3JwogCi1pZiBvcy5lbnZpcm9uLmhhc19rZXko
J1dFQktJVE9VVFBVVERJUicpOgotICAgIGRlcGVuZGVuY2llc19wYXRoID0gb3MucGF0aC5hYnNw
YXRoKG9zLnBhdGguam9pbihvcy5lbnZpcm9uWydXRUJLSVRPVVRQVVRESVInXSwgJ0RlcGVuZGVu
Y2llcycpKQotZWxzZToKLSAgICBkZXBlbmRlbmNpZXNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aCh0
b3BfbGV2ZWxfcGF0aCgnV2ViS2l0QnVpbGQnLCAnRGVwZW5kZW5jaWVzJykpCi0KK2RlcGVuZGVu
Y2llc19wYXRoID0gamhidWlsZHV0aWxzLmdldF9kZXBlbmRlbmNpZXNfcGF0aCgpCiBpbnN0YWxs
YXRpb25fcHJlZml4ID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihkZXBlbmRlbmNpZXNf
cGF0aCwgJ1Jvb3QnKSkKIHNvdXJjZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9p
bihkZXBlbmRlbmNpZXNfcGF0aCwgJ1NvdXJjZScpKQogamhidWlsZF9zb3VyY2VfcGF0aCA9IG9z
LnBhdGguam9pbihzb3VyY2VfcGF0aCwgJ2poYnVpbGQnKQogamhidWlsZF9wYXRoID0gb3MucGF0
aC5qb2luKGluc3RhbGxhdGlvbl9wcmVmaXgsICdiaW4nLCAnamhidWlsZCcpCiAKLQotcGxhdGZv
cm0gPSBOb25lOwotCi0KIGRlZiBqaGJ1aWxkX2luc3RhbGxlZCgpOgogICAgIHJldHVybiBvcy5w
YXRoLmV4aXN0cyhqaGJ1aWxkX3BhdGgpCiAKQEAgLTEwOCw4ICs5MCw4IEBAIGRlZiBpbnN0YWxs
X2poYnVpbGQoKToKICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdqaGJ1aWxkIGNvbmZpZ3VyZSBm
YWlsZWQgd2l0aCByZXR1cm4gY29kZTogJWknICUgcHJvY2Vzcy5yZXR1cm5jb2RlKQogCiAKLWRl
ZiB1cGRhdGVfd2Via2l0X2xpYnNfamhidWlsZCgpOgotICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNz
LlBvcGVuKFt0b3BfbGV2ZWxfcGF0aCgnVG9vbHMnLCAnU2NyaXB0cycsICd1cGRhdGUtd2Via2l0
LWxpYnMtamhidWlsZCcpLCAnLS0nICsgcGxhdGZvcm1dKQorZGVmIHVwZGF0ZV93ZWJraXRfbGli
c19qaGJ1aWxkKHBsYXRmb3JtKToKKyAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihbamhi
dWlsZHV0aWxzLnRvcF9sZXZlbF9wYXRoKCdUb29scycsICdTY3JpcHRzJywgJ3VwZGF0ZS13ZWJr
aXQtbGlicy1qaGJ1aWxkJyksICctLScgKyBwbGF0Zm9ybV0pCiAgICAgcHJvY2Vzcy53YWl0KCkK
ICAgICBpZiBwcm9jZXNzLnJldHVybmNvZGUgIT0gMDoKICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCdqaGJ1aWxkIGNvbmZpZ3VyZSBmYWlsZWQgd2l0aCByZXR1cm4gY29kZTogJWknICUgcHJvY2Vz
cy5yZXR1cm5jb2RlKQpAQCAtMTIzLDEyICsxMDUsMTIgQEAgZGVmIGRldGVybWluZV9wbGF0Zm9y
bSgpOgogICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHBsYXRmb3JtIHNwZWNpZmllZCBmb3Igamhi
dWlsZC13cmFwcGVyLicpCiAKIAotZGVmIGVuc3VyZV9qaGJ1aWxkKCk6CitkZWYgZW5zdXJlX2po
YnVpbGQocGxhdGZvcm0pOgogICAgIGlmIG5vdCBqaGJ1aWxkX2Nsb25lZCgpOgogICAgICAgICBj
bG9uZV9qaGJ1aWxkKCkKICAgICAgICAgdXBkYXRlX2poYnVpbGQoKQogICAgICAgICBpbnN0YWxs
X2poYnVpbGQoKQotICAgICAgICB1cGRhdGVfd2Via2l0X2xpYnNfamhidWlsZCgpCisgICAgICAg
IHVwZGF0ZV93ZWJraXRfbGlic19qaGJ1aWxkKHBsYXRmb3JtKQogICAgIGVsaWYgbm90IGpoYnVp
bGRfaW5zdGFsbGVkKCkgXAogICAgICAgICAgICAgb3Igbm90IGpoYnVpbGRfYXRfZXhwZWN0ZWRf
cmV2aXNpb24oKToKICAgICAgICAgdXBkYXRlX2poYnVpbGQoKQpAQCAtMTQzLDggKzEyNSw4IEBA
IHRyeToKICAgICBwbGF0Zm9ybSA9IGRldGVybWluZV9wbGF0Zm9ybSgpCiBleGNlcHQgVmFsdWVF
cnJvciBhcyBlOgogICAgIHN5cy5leGl0KGUpCi1lbnN1cmVfamhidWlsZCgpCitlbnN1cmVfamhi
dWlsZChwbGF0Zm9ybSkKIAotcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW2poYnVpbGRfcGF0
aCwgJy0tbm8taW50ZXJhY3QnLCAnLWYnLCB0b3BfbGV2ZWxfcGF0aCgnVG9vbHMnLCBwbGF0Zm9y
bSwgJ2poYnVpbGRyYycpXSArIHN5cy5hcmd2WzI6XSkKK3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBv
cGVuKFtqaGJ1aWxkX3BhdGgsICctLW5vLWludGVyYWN0JywgJy1mJywgamhidWlsZHV0aWxzLmdl
dF9jb25maWdfZmlsZV9mb3JfcGxhdGZvcm0ocGxhdGZvcm0pXSArIHN5cy5hcmd2WzI6XSkKIHBy
b2Nlc3Mud2FpdCgpCiBzeXMuZXhpdChwcm9jZXNzLnJldHVybmNvZGUpCmRpZmYgLS1naXQgYS9U
b29scy9qaGJ1aWxkL2poYnVpbGR1dGlscy5weSBiL1Rvb2xzL2poYnVpbGQvamhidWlsZHV0aWxz
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjUyZWI0NDE5NGU1NWI0NzdiNzIzYzFhYzBlNGZiYWFiYjQ4Y2RjYzgK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9qaGJ1aWxkL2poYnVpbGR1dGlscy5weQpAQCAtMCww
ICsxLDQ3IEBACitpbXBvcnQgZ2xvYgoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKKwordG9w
X2xldmVsX2RpciA9IE5vbmUKKworCitkZWYgdG9wX2xldmVsX3BhdGgoKmFyZ3MpOgorICAgIGds
b2JhbCB0b3BfbGV2ZWxfZGlyCisgICAgaWYgbm90IHRvcF9sZXZlbF9kaXI6CisgICAgICAgIHRv
cF9sZXZlbF9kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4u
JywgJy4uJykKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKCoodG9wX2xldmVsX2RpciwpICsgYXJn
cykKKworCitkZWYgZ2V0X2RlcGVuZGVuY2llc19wYXRoKCk6CisgICAgaWYgJ1dFQktJVE9VVFBV
VERJUicgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChvcy5w
YXRoLmpvaW4ob3MuZW52aXJvblsnV0VCS0lUT1VUUFVURElSJ10sICdEZXBlbmRlbmNpZXMnKSkK
KyAgICBlbHNlOgorICAgICAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKHRvcF9sZXZlbF9wYXRo
KCdXZWJLaXRCdWlsZCcsICdEZXBlbmRlbmNpZXMnKSkKKworCitkZWYgZ2V0X2NvbmZpZ19maWxl
X2Zvcl9wbGF0Zm9ybShwbGF0Zm9ybSk6CisgICAgcmV0dXJuIHRvcF9sZXZlbF9wYXRoKCdUb29s
cycsIHBsYXRmb3JtLCAnamhidWlsZHJjJykKKworCitkZWYgZW50ZXJfamhidWlsZF9lbnZpcm9u
bWVudF9pZl9hdmFpbGFibGUocGxhdGZvcm0pOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhn
ZXRfZGVwZW5kZW5jaWVzX3BhdGgoKSk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBX
ZSBkb24ndCBrbm93IHRoZSBQeXRob24gdmVyc2lvbiwgc28gd2UganVzdCBhc3N1bWUgdGhhdCB3
ZSBjYW4gc2FmZWx5IHRha2UgdGhlIGZpcnN0IG9uZSBpbiB0aGUgbGlzdC4KKyAgICBzaXRlX3Bh
Y2thZ2VzX3BhdGggPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKGdldF9kZXBlbmRlbmNpZXNfcGF0
aCgpLCAiUm9vdCIsICJsaWIiLCAiKiIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgaWYgbm90IGxl
bihzaXRlX3BhY2thZ2VzX3BhdGgpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHNpdGVf
cGFja2FnZXNfcGF0aCA9IHNpdGVfcGFja2FnZXNfcGF0aFswXQorICAgIHN5cy5wYXRoLmluc2Vy
dCgwLCBzaXRlX3BhY2thZ2VzX3BhdGgpCisKKyAgICBpbXBvcnQgamhidWlsZC5jb25maWcKKyAg
ICBmcm9tIGpoYnVpbGQuZXJyb3JzIGltcG9ydCBGYXRhbEVycm9yCisKKyAgICB0cnk6CisgICAg
ICAgIGNvbmZpZyA9IGpoYnVpbGQuY29uZmlnLkNvbmZpZyhnZXRfY29uZmlnX2ZpbGVfZm9yX3Bs
YXRmb3JtKHBsYXRmb3JtKSkKKyAgICBleGNlcHQgRmF0YWxFcnJvciwgZXhjZXB0aW9uOgorICAg
ICAgICBzeXMuc3RkZXJyLndyaXRlKCdDb3VsZCBub3QgbG9hZCBqaGJ1aWxkIGNvbmZpZyBmaWxl
OiAlc1xuJyAlIGV4Y2VwdGlvbi5hcmdzWzBdKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
IHJldHVybiBUcnVlCg==
</data>
<flag name="review"
          id="164691"
          type_id="1"
          status="+"
          setter="gustavo"
    />
    <flag name="commit-queue"
          id="164717"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>