<?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>71833</bug_id>
          
          <creation_ts>2011-11-08 10:32:48 -0800</creation_ts>
          <short_desc>[chromium] remove the deprecated rebaseline script</short_desc>
          <delta_ts>2012-06-28 10:11:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tony Chang">tony</reporter>
          <assigned_to name="Tony Chang">tony</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>498230</commentid>
    <comment_count>0</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-11-08 10:32:48 -0800</bug_when>
    <thetext>[chromium] remove the deprecated rebaseline script</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498231</commentid>
    <comment_count>1</comment_count>
      <attachid>114112</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-11-08 10:33:05 -0800</bug_when>
    <thetext>Created attachment 114112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498293</commentid>
    <comment_count>2</comment_count>
      <attachid>114112</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-08 11:44:50 -0800</bug_when>
    <thetext>Comment on attachment 114112
Patch

YES.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498313</commentid>
    <comment_count>3</comment_count>
      <attachid>114112</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-08 12:03:58 -0800</bug_when>
    <thetext>Comment on attachment 114112
Patch

Please don&apos;t remove this tool. I actively use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498315</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-08 12:04:22 -0800</bug_when>
    <thetext>New tool is practically unusable for me for the reasons stated in the webkit-dev thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498342</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-11-08 12:27:29 -0800</bug_when>
    <thetext>FWIW, I also don&apos;t find webkit-patch rebaseline a complete replacement for rebaseline-chromium-...

Things I miss:

1) visual diff of what&apos;s changed. rebaseline-chromium&apos;s visual diff was buggy, but was useful when it worked. If we could make webkit-patch pretty-diff work, that would be good enough.

2) The last time I looked, it was pretty much impossible to figure out what webkit-patch rebaseline actually did, and why. I had spent a fair amount of time cleaning up the logging in rebaseline-chromium so that you could tell what did get updated and why. In addition, combining the &quot;update baselines&quot; step with the &quot;optimize baselines&quot; step makes it very difficult to figure out what is actually going on.

I don&apos;t want to stop us from getting rid of old code, so I would be fine w/ obsoleting this now as long as someone was actively working on these tools/enhancements in the near future. Saying &quot;patches welcome&quot; is not good enough ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498349</commentid>
    <comment_count>6</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-11-08 12:32:52 -0800</bug_when>
    <thetext>FWIW, I don&apos;t think it&apos;s important to understand why certain files are in certain directories.  The tool should do the right thing and we shouldn&apos;t require people to understand it.

Having a visual diff for a specific platform seems useful though.

We should probably just fix the flakiness dashboard or garden-o-matic to do this instead of just barfing up a bunch of iframes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659578</commentid>
    <comment_count>7</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-06-28 10:11:06 -0700</bug_when>
    <thetext>Looks like this script was removed at some point.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114112</attachid>
            <date>2011-11-08 10:33:05 -0800</date>
            <delta_ts>2011-11-08 12:03:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71833-20111108103318.patch</filename>
            <type>text/plain</type>
            <size>71284</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk1ODcKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmN2JiZmI3ZmNmZTZmNTc3MTIwZTZiZWEyODA2NmZiZWRi
Y2M2ZDE0Li40ZDRhZDc2N2NlYjU0YjJjNTQ3ZTlkYTk4OWI4ZThmZmVkM2M4YWY4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMTEtMDggIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbY2hyb21pdW1dIHJlbW92ZSB0aGUgZGVwcmVjYXRlZCByZWJhc2VsaW5lIHNjcmlwdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE4MzMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcmVi
YXNlbGluZS1jaHJvbWl1bS13ZWJraXQtdGVzdHM6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS90b19iZV9tb3ZlZC9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5w
eTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RvX2JlX21vdmVkL3JlYmFz
ZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5OiBSZW1vdmVkLgorCiAyMDEx
LTExLTA4ICBBbmR5IFdpbmdvICA8d2luZ29AaWdhbGlhLmNvbT4KIAogICAgICAgICBTa2lwIHNv
bWUgRUNNQVNjcmlwdCB0ZXN0cyB0aGF0IGZhaWwgb24gTGludXggaW4gc29tZSB0aW1lIHpvbmVz
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9yZWJhc2VsaW5lLWNocm9taXVtLXdlYmtpdC10
ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13ZWJraXQtdGVzdHMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQ2MzNkYjU2MDk5M2RjODY2NDliMjBkMGJhNTll
NmJmZTgzYzMxZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvVG9vbHMvU2NyaXB0cy9yZWJhc2VsaW5lLWNocm9taXVtLXdlYmtpdC10ZXN0cworKysgL2Rl
di9udWxsCkBAIC0xLDQzICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLWltcG9ydCBzeXMKLQotaW1wb3J0IHdlYmtpdHB5LnRvX2JlX21vdmVkLnJlYmFz
ZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKLSAgICBwcmludCAiIiJUaGlzIHNjcmlwdCBpcyBkZXByZWNpYXRlZC4gIFBsZWFzZSB1c2Ug
dXNlICJ3ZWJraXQtcGF0Y2ggcmViYXNlbGluZS1leHBlY3RhdGlvbnMiIGluc3RlYWQuCi0KLUlm
IHRoYXQgY29tbWFuZCBkb2VzIG5vdCB3b3JrIHByb3Blcmx5LCBwbGVhc2UgZmlsZSBhIGJ1ZyBh
bmQgQ0MgYWJhcnRoLiBJZiB5b3UKLXJlYWxseSBuZWVkIHRvIHVzZSB0aGUgb2xkIHNjcmlwdCwg
cnVuIHRoaXMgY29tbWFuZCBhZ2FpbiB3aXRoCi0tLXVzZS1kZXByZWNhdGVkLXNjcmlwdCBhcyB0
aGUgZmlyc3QgYXJndW1lbnQuIiIiCi0KLSAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMSBhbmQgc3lz
LmFyZ3ZbMV0gPT0gJy0tdXNlLWRlcHJlY2F0ZWQtc2NyaXB0JzoKLSAgICAgICAgc3lzLmV4aXQo
d2Via2l0cHkudG9fYmVfbW92ZWQucmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMubWFp
bihzeXMuYXJndlsyOl0pKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b19i
ZV9tb3ZlZC9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9fYmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMu
cHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5N2U1OGY2YjBhNmVkNzZkMTczODVi
MGIxMTYzMjAyYmQ3ZTE4YTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b19iZV9tb3ZlZC9yZWJhc2VsaW5lX2No
cm9taXVtX3dlYmtpdF90ZXN0cy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwNTIgKzAsMCBAQAot
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBt
ZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0j
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiUmViYXNlbGluaW5n
IHRvb2wgdGhhdCBhdXRvbWF0aWNhbGx5IHByb2R1Y2VzIGJhc2VsaW5lcyBmb3IgYWxsIHBsYXRm
b3Jtcy4KLQotVGhlIHNjcmlwdCBkb2VzIHRoZSBmb2xsb3dpbmcgZm9yIGVhY2ggcGxhdGZvcm0g
c3BlY2lmaWVkOgotICAxLiBDb21waWxlIGEgbGlzdCBvZiB0ZXN0cyB0aGF0IG5lZWQgcmViYXNl
bGluaW5nLgotICAyLiBEb3dubG9hZCB0ZXN0IHJlc3VsdCBhcmNoaXZlIGZyb20gYnVpbGRib3Qg
Zm9yIHRoZSBwbGF0Zm9ybS4KLSAgMy4gRXh0cmFjdCBiYXNlbGluZXMgZnJvbSB0aGUgYXJjaGl2
ZSBmaWxlIGZvciBhbGwgaWRlbnRpZmllZCBmaWxlcy4KLSAgNC4gQWRkIG5ldyBiYXNlbGluZXMg
dG8gU1ZOIHJlcG9zaXRvcnkuCi0gIDUuIEZvciBlYWNoIHRlc3QgdGhhdCBoYXMgYmVlbiByZWJh
c2VsaW5lZCwgcmVtb3ZlIHRoaXMgcGxhdGZvcm0gb3B0aW9uIGZyb20KLSAgICAgdGhlIHRlc3Qg
aW4gdGVzdF9leHBlY3RhdGlvbi50eHQuIElmIG5vIG90aGVyIHBsYXRmb3JtcyByZW1haW4gYWZ0
ZXIKLSAgICAgcmVtb3ZhbCwgZGVsZXRlIHRoZSByZWJhc2VsaW5lZCB0ZXN0IGZyb20gdGhlIGZp
bGUuCi0KLUF0IHRoZSBlbmQsIHRoZSBzY3JpcHQgZ2VuZXJhdGVzIGEgaHRtbCB0aGF0IGNvbXBh
cmVzIG9sZCBhbmQgbmV3IGJhc2VsaW5lcy4KLSIiIgotCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0
IHdpdGhfc3RhdGVtZW50Ci0KLWltcG9ydCBjb3B5Ci1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9w
dHBhcnNlCi1pbXBvcnQgcmUKLWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi0KLWZyb20gd2Via2l0
cHkuY29tbW9uLmNoZWNrb3V0IGltcG9ydCBzY20KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bSBpbXBvcnQgemlwZmlsZXNldAotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBw
YXRoCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHVybGZldGNoZXIKLWZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCi1mcm9t
IHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Ci0KLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnBvcnQuZmFjdG9yeSBpbXBvcnQgUG9ydEZhY3RvcnkKLWZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzIGltcG9ydCByZWFkX2NoZWNrc3VtX2Zyb21fcG5nCi1mcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCi0KLQotX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi1CQVNFTElORV9TVUZGSVhFUyA9ICgnLnR4dCcs
ICcucG5nJywgJy5jaGVja3N1bScpCi0KLUFSQ0hJVkVfRElSX05BTUVfRElDVCA9IHsKLSAgICAn
Y2hyb21pdW0td2luLXdpbjcnOiAnV2Via2l0X1dpbjcnLAotICAgICdjaHJvbWl1bS13aW4tdmlz
dGEnOiAnV2Via2l0X1Zpc3RhJywKLSAgICAnY2hyb21pdW0td2luLXhwJzogJ1dlYmtpdF9XaW4n
LAotICAgICdjaHJvbWl1bS1tYWMtbGVvcGFyZCc6ICdXZWJraXRfTWFjMTBfNScsCi0gICAgJ2No
cm9taXVtLW1hYy1zbm93bGVvcGFyZCc6ICdXZWJraXRfTWFjMTBfNicsCi0gICAgJ2Nocm9taXVt
LWNnLW1hYy1sZW9wYXJkJzogJ1dlYmtpdF9NYWMxMF81X19DR18nLAotICAgICdjaHJvbWl1bS1j
Zy1tYWMtc25vd2xlb3BhcmQnOiAnV2Via2l0X01hYzEwXzZfX0NHXycsCi0gICAgJ2Nocm9taXVt
LWxpbnV4LXg4Nic6ICdXZWJraXRfTGludXhfMzInLAotICAgICdjaHJvbWl1bS1saW51eC14ODZf
NjQnOiAnV2Via2l0X0xpbnV4JywKLSAgICAnY2hyb21pdW0tZ3B1LW1hYy1zbm93bGVvcGFyZCc6
ICdXZWJraXRfTWFjMTBfNl8tX0dQVScsCi0gICAgJ2Nocm9taXVtLWdwdS13aW4teHAnOiAnV2Vi
a2l0X1dpbl8tX0dQVScsCi0gICAgJ2Nocm9taXVtLWdwdS13aW4td2luNyc6ICdXZWJraXRfV2lu
N18tX0dQVScsCi0gICAgJ2Nocm9taXVtLWdwdS1saW51eC14ODZfNjQnOiAnV2Via2l0X0xpbnV4
Xy1fR1BVJywKLSAgICAnY2hyb21pdW0tZ3B1LWxpbnV4LXg4Nic6ICdXZWJraXRfTGludXhfMzJf
LV9HUFUnLAotfQotCi0KLWRlZiBsb2dfZGFzaGVkX3N0cmluZyh0ZXh0LCBwbGF0Zm9ybT1Ob25l
LCBsb2dnaW5nX2xldmVsPWxvZ2dpbmcuREVCVUcpOgotICAgICIiIkxvZyB0ZXh0IG1lc3NhZ2Ug
d2l0aCBkYXNoZXMgb24gYm90aCBzaWRlcy4iIiIKLSAgICBtc2cgPSB0ZXh0Ci0gICAgaWYgcGxh
dGZvcm06Ci0gICAgICAgIG1zZyArPSAnOiAnICsgcGxhdGZvcm0KLSAgICBpZiBsZW4obXNnKSA8
IDc4OgotICAgICAgICBkYXNoZXMgPSAnLScgKiAoKDc4IC0gbGVuKG1zZykpIC8gMikKLSAgICAg
ICAgbXNnID0gJyVzICVzICVzJyAlIChkYXNoZXMsIG1zZywgZGFzaGVzKQotICAgIF9sb2cubG9n
KGxvZ2dpbmdfbGV2ZWwsIG1zZykKLQotCi1kZWYgc2V0dXBfaHRtbF9kaXJlY3RvcnkoZmlsZXN5
c3RlbSwgcGFyZW50X2RpcmVjdG9yeSk6Ci0gICAgIiIiU2V0dXAgdGhlIGRpcmVjdG9yeSB0byBz
dG9yZSBodG1sIHJlc3VsdHMuCi0KLSAgICAgICBBbGwgaHRtbCByZWxhdGVkIGZpbGVzIGFyZSBz
dG9yZWQgaW4gdGhlICJyZWJhc2VsaW5lX2h0bWwiIHN1YmRpcmVjdG9yeSBvZgotICAgICAgIHRo
ZSBwYXJlbnQgZGlyZWN0b3J5LiBUaGUgcGF0aCB0byB0aGUgY3JlYXRlZCBkaXJlY3RvcnkgaXMg
cmV0dXJuZWQuCi0gICAgIiIiCi0KLSAgICBpZiBub3QgcGFyZW50X2RpcmVjdG9yeToKLSAgICAg
ICAgcGFyZW50X2RpcmVjdG9yeSA9IHN0cihmaWxlc3lzdGVtLm1rZHRlbXAoKSkKLSAgICBlbHNl
OgotICAgICAgICBmaWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KHBhcmVudF9kaXJlY3Rv
cnkpCi0KLSAgICBodG1sX2RpcmVjdG9yeSA9IGZpbGVzeXN0ZW0uam9pbihwYXJlbnRfZGlyZWN0
b3J5LCAncmViYXNlbGluZV9odG1sJykKLSAgICBfbG9nLmRlYnVnKCdIdG1sIGRpcmVjdG9yeTog
IiVzIicsIGh0bWxfZGlyZWN0b3J5KQotCi0gICAgaWYgZmlsZXN5c3RlbS5leGlzdHMoaHRtbF9k
aXJlY3RvcnkpOgotICAgICAgICBmaWxlc3lzdGVtLnJtdHJlZShodG1sX2RpcmVjdG9yeSkKLSAg
ICAgICAgX2xvZy5kZWJ1ZygnRGVsZXRlZCBodG1sIGRpcmVjdG9yeTogIiVzIicsIGh0bWxfZGly
ZWN0b3J5KQotCi0gICAgZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShodG1sX2RpcmVj
dG9yeSkKLSAgICByZXR1cm4gaHRtbF9kaXJlY3RvcnkKLQotCi1kZWYgZ2V0X3Jlc3VsdF9maWxl
X2Z1bGxwYXRoKGZpbGVzeXN0ZW0sIGh0bWxfZGlyZWN0b3J5LCBiYXNlbGluZV9maWxlbmFtZSwg
cGxhdGZvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlKToKLSAg
ICAiIiJHZXQgZnVsbCBwYXRoIG9mIHRoZSBiYXNlbGluZSByZXN1bHQgZmlsZS4KLQotICAgIEFy
Z3M6Ci0gICAgICBmaWxlc3lzdGVtOiB3cmFwcGVyIG9iamVjdAotICAgICAgaHRtbF9kaXJlY3Rv
cnk6IGRpcmVjdG9yeSB0aGF0IHN0b3JlcyB0aGUgaHRtbCByZWxhdGVkIGZpbGVzLgotICAgICAg
YmFzZWxpbmVfZmlsZW5hbWU6IG5hbWUgb2YgdGhlIGJhc2VsaW5lIGZpbGUuCi0gICAgICBwbGF0
Zm9ybTogd2luLCBsaW51eCBvciBtYWMKLSAgICAgIHJlc3VsdF90eXBlOiB0eXBlIG9mIHRoZSBi
YXNlbGluZSByZXN1bHQ6ICcudHh0JywgJy5wbmcnLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEZ1
bGwgcGF0aCBvZiB0aGUgYmFzZWxpbmUgZmlsZSBmb3IgcmViYXNlbGluaW5nIHJlc3VsdCBjb21w
YXJpc29uLgotICAgICIiIgotCi0gICAgYmFzZSwgZXh0ID0gZmlsZXN5c3RlbS5zcGxpdGV4dChi
YXNlbGluZV9maWxlbmFtZSkKLSAgICByZXN1bHRfZmlsZW5hbWUgPSAnJXMtJXMtJXMlcycgJSAo
YmFzZSwgcGxhdGZvcm0sIHJlc3VsdF90eXBlLCBleHQpCi0gICAgZnVsbHBhdGggPSBmaWxlc3lz
dGVtLmpvaW4oaHRtbF9kaXJlY3RvcnksIHJlc3VsdF9maWxlbmFtZSkKLSAgICBfbG9nLmRlYnVn
KCcgIFJlc3VsdCBmaWxlIGZ1bGwgcGF0aDogIiVzIi4nLCBmdWxscGF0aCkKLSAgICByZXR1cm4g
ZnVsbHBhdGgKLQotCi1jbGFzcyBSZWJhc2VsaW5lcihvYmplY3QpOgotICAgICIiIkNsYXNzIHRv
IHByb2R1Y2UgbmV3IGJhc2VsaW5lcyBmb3IgYSBnaXZlbiBwbGF0Zm9ybS4iIiIKLQotICAgIFJF
VklTSU9OX1JFR0VYID0gcic8YSBocmVmPVwiKFxkKykvXCI+JwotCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIHJ1bm5pbmdfcG9ydCwgdGFyZ2V0X3BvcnQsIHBsYXRmb3JtLCBvcHRpb25zLCB1cmxf
ZmV0Y2hlciwgemlwX2ZhY3RvcnksIHNjbSwgbG9nZ2VkX2JlZm9yZT1GYWxzZSk6Ci0gICAgICAg
ICIiIgotICAgICAgICBBcmdzOgotICAgICAgICAgICAgcnVubmluZ19wb3J0OiB0aGUgUG9ydCB0
aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24uCi0gICAgICAgICAgICB0YXJnZXRfcG9ydDogdGhlIFBv
cnQgdGhlIHNjcmlwdCB1c2VzIHRvIGZpbmQgcG9ydC1zcGVjaWZpYwotICAgICAgICAgICAgICAg
IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gbGlrZSB0aGUgdGVzdF9leHBlY3RhdGlvbnMudHh0
Ci0gICAgICAgICAgICAgICAgZmlsZSBsb2NhdGlvbiBhbmQgdGhlIGxpc3Qgb2YgdGVzdCBwbGF0
Zm9ybXMuCi0gICAgICAgICAgICBwbGF0Zm9ybTogdGhlIHRlc3QgcGxhdGZvcm0gdG8gcmViYXNl
bGluZQotICAgICAgICAgICAgb3B0aW9uczogdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIG9iamVj
dC4KLSAgICAgICAgICAgIHVybF9mZXRjaGVyOiBvYmplY3QgdGhhdCBjYW4gZmV0Y2ggb2JqZWN0
cyBmcm9tIFVSTHMKLSAgICAgICAgICAgIHppcF9mYWN0b3J5OiBvcHRpb25hbCBvYmplY3QgdGhh
dCBjYW4gZmV0Y2ggemlwIGZpbGVzIGZyb20gVVJMcwotICAgICAgICAgICAgc2NtOiBzY20gb2Jq
ZWN0IGZvciBhZGRpbmcgbmV3IGJhc2VsaW5lcwotICAgICAgICAgICAgbG9nZ2VkX2JlZm9yZTog
d2hldGhlciB0aGUgcHJldmlvdXMgcnVubmluZyBwb3J0IGxvZ2dlZCBhbnl0aGluZy4KLSAgICAg
ICAgIiIiCi0gICAgICAgIHNlbGYuX3BsYXRmb3JtID0gcGxhdGZvcm0KLSAgICAgICAgc2VsZi5f
b3B0aW9ucyA9IG9wdGlvbnMKLSAgICAgICAgc2VsZi5fcG9ydCA9IHJ1bm5pbmdfcG9ydAotICAg
ICAgICBzZWxmLl9maWxlc3lzdGVtID0gcnVubmluZ19wb3J0Ll9maWxlc3lzdGVtCi0gICAgICAg
IHNlbGYuX3RhcmdldF9wb3J0ID0gdGFyZ2V0X3BvcnQKLQotICAgICAgICAjIEZJWE1FOiBUaGlz
IHNob3VsZCBnZXQgaXRzIFBvcnRGYWN0b3J5IGZyb20gYSBIb3N0IG9iamVjdC4KLSAgICAgICAg
IyBOb3RlOiB1c2luZyBydW5uaW5nX3BvcnQuZXhlY3V0aXZlLCBydW5uaW5nX3BvcnQudXNlciBz
aW5jZSB3ZSBjYW4ndCBnZXQgdGhlbSBmcm9tIGEgaG9zdC4KLSAgICAgICAgc2VsZi5fcmViYXNl
bGluZV9wb3J0ID0gUG9ydEZhY3RvcnkoKS5nZXQocGxhdGZvcm0sIG9wdGlvbnMsIGZpbGVzeXN0
ZW09c2VsZi5fZmlsZXN5c3RlbSwgZXhlY3V0aXZlPXJ1bm5pbmdfcG9ydC5leGVjdXRpdmUsIHVz
ZXI9cnVubmluZ19wb3J0LnVzZXIpCi0gICAgICAgIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cyA9
IHNldCgpCi0gICAgICAgIHNlbGYuX3JlYmFzZWxpbmVkX3Rlc3RzID0gW10KLSAgICAgICAgc2Vs
Zi5fbG9nZ2VkX2JlZm9yZSA9IGxvZ2dlZF9iZWZvcmUKLSAgICAgICAgc2VsZi5kaWRfbG9nID0g
RmFsc2UKLQotICAgICAgICAjIENyZWF0ZSB0ZXN0cyBhbmQgZXhwZWN0YXRpb25zIGhlbHBlciB3
aGljaCBpcyB1c2VkIHRvOgotICAgICAgICAjICAgLS4gY29tcGlsZSBsaXN0IG9mIHRlc3RzIHRo
YXQgbmVlZCByZWJhc2VsaW5pbmcuCi0gICAgICAgICMgICAtLiB1cGRhdGUgdGhlIHRlc3RzIGlu
IHRlc3RfZXhwZWN0YXRpb25zIGZpbGUgYWZ0ZXIgcmViYXNlbGluZQotICAgICAgICAjICAgICAg
aXMgZG9uZS4KLSAgICAgICAgZXhwZWN0YXRpb25zX3N0ciA9IHNlbGYuX3JlYmFzZWxpbmVfcG9y
dC50ZXN0X2V4cGVjdGF0aW9ucygpCi0gICAgICAgIHNlbGYuX3Rlc3RfZXhwZWN0YXRpb25zID0g
dGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9ucygKLSAgICAgICAgICAgIHNlbGYuX3Jl
YmFzZWxpbmVfcG9ydCwgTm9uZSwgZXhwZWN0YXRpb25zX3N0ciwgc2VsZi5fcmViYXNlbGluZV9w
b3J0LnRlc3RfY29uZmlndXJhdGlvbigpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5fdXJsX2ZldGNo
ZXIgPSB1cmxfZmV0Y2hlcgotICAgICAgICBzZWxmLl96aXBfZmFjdG9yeSA9IHppcF9mYWN0b3J5
Ci0gICAgICAgIHNlbGYuX3NjbSA9IHNjbQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAg
IiIiUnVuIHJlYmFzZWxpbmUgcHJvY2Vzcy4iIiIKLQotICAgICAgICBsb2dfZGFzaGVkX3N0cmlu
ZygnQ29tcGlsaW5nIHJlYmFzZWxpbmluZyB0ZXN0cycsIHNlbGYuX3BsYXRmb3JtLCBsb2dnaW5n
LkRFQlVHKQotICAgICAgICBpZiBub3Qgc2VsZi5fY29tcGlsZV9yZWJhc2VsaW5pbmdfdGVzdHMo
KToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fcmViYXNl
bGluaW5nX3Rlc3RzOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLQotICAgICAgICBzZWxmLmRp
ZF9sb2cgPSBUcnVlCi0gICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdEb3dubG9hZGluZyBhcmNo
aXZlJywgc2VsZi5fcGxhdGZvcm0sIGxvZ2dpbmcuREVCVUcpCi0gICAgICAgIGFyY2hpdmVfZmls
ZSA9IHNlbGYuX2Rvd25sb2FkX2J1aWxkYm90X2FyY2hpdmUoKQotICAgICAgICBfbG9nLmRlYnVn
KCcnKQotICAgICAgICBpZiBub3QgYXJjaGl2ZV9maWxlOgotICAgICAgICAgICAgX2xvZy5lcnJv
cignTm8gYXJjaGl2ZSBmb3VuZC4nKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAg
ICAgbG9nX2Rhc2hlZF9zdHJpbmcoJ0V4dHJhY3RpbmcgYW5kIGFkZGluZyBuZXcgYmFzZWxpbmVz
Jywgc2VsZi5fcGxhdGZvcm0sIGxvZ2dpbmcuREVCVUcpCi0gICAgICAgIHNlbGYuX2V4dHJhY3Rf
YW5kX2FkZF9uZXdfYmFzZWxpbmVzKGFyY2hpdmVfZmlsZSkKLSAgICAgICAgYXJjaGl2ZV9maWxl
LmNsb3NlKCkKLQotICAgICAgICBsb2dfZGFzaGVkX3N0cmluZygnVXBkYXRpbmcgcmViYXNlbGlu
ZWQgdGVzdHMgaW4gZmlsZScsIHNlbGYuX3BsYXRmb3JtKQotCi0gICAgICAgIGlmIGxlbihzZWxm
Ll9yZWJhc2VsaW5pbmdfdGVzdHMpICE9IGxlbihzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cyk6Ci0g
ICAgICAgICAgICBfbG9nLmRlYnVnKCcnKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnTk9UIEFM
TCBURVNUUyBXRVJFIFJFQkFTRUxJTkVELicpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCcgIE51
bWJlciBtYXJrZWQgZm9yIHJlYmFzZWxpbmluZzogJWQnLCBsZW4oc2VsZi5fcmViYXNlbGluaW5n
X3Rlc3RzKSkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgTnVtYmVyIGFjdHVhbGx5IHJlYmFz
ZWxpbmVkOiAlZCcsIGxlbihzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cykpCi0gICAgICAgICAgICBf
bG9nLmluZm8oJycpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBfbG9nLmRl
YnVnKCcgIEFsbCB0ZXN0cyBuZWVkaW5nIHJlYmFzZWxpbmluZyB3ZXJlIHN1Y2Nlc3NmdWxseSBy
ZWJhc2VsaW5lZC4nKQotICAgICAgICBfbG9nLmluZm8oJycpCi0gICAgICAgIHJldHVybiBUcnVl
Ci0KLSAgICBkZWYgcmVtb3ZlX3JlYmFzZWxpbmluZ19leHBlY3RhdGlvbnMoc2VsZiwgdGVzdHMs
IGJhY2t1cCk6Ci0gICAgICAgICIiImlmIGJhY2t1cCBpcyBUcnVlLCB3ZSBiYWNrdXAgdGhlIG9y
aWdpbmFsIHRlc3QgZXhwZWN0YXRpb25zIGZpbGUuIiIiCi0gICAgICAgIG5ld19leHBlY3RhdGlv
bnMgPSBzZWxmLl90ZXN0X2V4cGVjdGF0aW9ucy5yZW1vdmVfcmViYXNlbGluZWRfdGVzdHModGVz
dHMpCi0gICAgICAgIHBhdGggPSBzZWxmLl90YXJnZXRfcG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0
YXRpb25zX2ZpbGUoKQotICAgICAgICBpZiBiYWNrdXA6Ci0gICAgICAgICAgICBkYXRlX3N1ZmZp
eCA9IHRpbWUuc3RyZnRpbWUoJyVZJW0lZCVIJU0lUycsIHRpbWUubG9jYWx0aW1lKHRpbWUudGlt
ZSgpKSkKLSAgICAgICAgICAgIGJhY2t1cF9maWxlID0gJyVzLm9yaWcuJXMnICUgKHBhdGgsIGRh
dGVfc3VmZml4KQotICAgICAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoYmFja3Vw
X2ZpbGUpOgotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKGJhY2t1cF9m
aWxlKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnU2F2aW5nIG9yaWdpbmFsIGZpbGUgdG8gIiVz
IicsIGJhY2t1cF9maWxlKQotICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5tb3ZlKHBhdGgs
IGJhY2t1cF9maWxlKQotCi0gICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxl
KHBhdGgsIG5ld19leHBlY3RhdGlvbnMpCi0gICAgICAgICMgc2VsZi5fc2NtLmFkZChwYXRoKQot
Ci0gICAgZGVmIGdldF9yZWJhc2VsaW5lZF90ZXN0cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3JlYmFzZWxpbmVkX3Rlc3RzCi0KLSAgICBkZWYgX2NvbXBpbGVfcmViYXNlbGluaW5nX3Rl
c3RzKHNlbGYpOgotICAgICAgICAiIiJDb21waWxlIGxpc3Qgb2YgdGVzdHMgdGhhdCBuZWVkIHJl
YmFzZWxpbmluZyBmb3IgdGhlIHBsYXRmb3JtLgotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAg
ICAgRmFsc2UgaWYgcmVmdGVzdHMgYXJlIHdyb25nbHkgbWFya2VkIGFzICduZWVkcyByZWJhc2Vs
aW5pbmcnIG9yIFRydWUKLSAgICAgICAgIiIiCi0KLSAgICAgICAgc2VsZi5fcmViYXNlbGluaW5n
X3Rlc3RzID0gc2VsZi5fdGVzdF9leHBlY3RhdGlvbnMuZ2V0X3JlYmFzZWxpbmluZ19mYWlsdXJl
cygpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHM6Ci0gICAgICAgICAg
ICBfbG9nLmluZm8oJyVzOiBObyB0ZXN0cyB0byByZWJhc2VsaW5lLicsIHNlbGYuX3BsYXRmb3Jt
KQotICAgICAgICAgICAgcmV0dXJuIFRydWUKLQotICAgICAgICBmcyA9IHNlbGYuX3RhcmdldF9w
b3J0Ll9maWxlc3lzdGVtCi0gICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX3JlYmFzZWxpbmluZ190
ZXN0czoKLSAgICAgICAgICAgIHRlc3RfYWJzcGF0aCA9IHNlbGYuX3RhcmdldF9wb3J0LmFic3Bh
dGhfZm9yX3Rlc3QodGVzdCkKLSAgICAgICAgICAgIGlmIChmcy5leGlzdHMoc2VsZi5fdGFyZ2V0
X3BvcnQucmVmdGVzdF9leHBlY3RlZF9maWxlbmFtZSh0ZXN0X2Fic3BhdGgpKSBvcgotICAgICAg
ICAgICAgICAgIGZzLmV4aXN0cyhzZWxmLl90YXJnZXRfcG9ydC5yZWZ0ZXN0X2V4cGVjdGVkX21p
c21hdGNoX2ZpbGVuYW1lKHRlc3RfYWJzcGF0aCkpKToKLSAgICAgICAgICAgICAgICBfbG9nLmVy
cm9yKCclcyBzZWVtcyB0byBiZSBhIHJlZnRlc3QuIFdlIGNhbiBub3QgcmViYXNlIGZvciByZWZ0
ZXN0cy4nLCB0ZXN0KQotICAgICAgICAgICAgICAgIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cyA9
IHNldCgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgaWYgbm90IHNl
bGYuX2xvZ2dlZF9iZWZvcmU6Ci0gICAgICAgICAgICBfbG9nLmluZm8oJycpCi0gICAgICAgIF9s
b2cuaW5mbygnJXM6IFJlYmFzZWxpbmluZyAlZCB0ZXN0czonLCBzZWxmLl9wbGF0Zm9ybSwgbGVu
KHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cykpCi0gICAgICAgIHRlc3Rfbm8gPSAxCi0gICAgICAg
IGZvciB0ZXN0IGluIHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0czoKLSAgICAgICAgICAgIF9sb2cu
ZGVidWcoJyAgJWQ6ICVzJywgdGVzdF9ubywgdGVzdCkKLSAgICAgICAgICAgIHRlc3Rfbm8gKz0g
MQotCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX2dldF9sYXRlc3RfcmV2aXNpb24o
c2VsZiwgdXJsKToKLSAgICAgICAgIiIiR2V0IHRoZSBsYXRlc3QgbGF5b3V0IHRlc3QgcmV2aXNp
b24gbnVtYmVyIGZyb20gYnVpbGRib3QuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICB1cmw6
IFVybCB0byByZXRyaWV2ZSBsYXlvdXQgdGVzdCByZXZpc2lvbiBudW1iZXJzLgotCi0gICAgICAg
IFJldHVybnM6Ci0gICAgICAgICAgbGF0ZXN0IHJldmlzaW9uIG9yCi0gICAgICAgICAgTm9uZSBv
biBmYWlsdXJlLgotICAgICAgICAiIiIKLQotICAgICAgICBfbG9nLmRlYnVnKCdVcmwgdG8gcmV0
cmlldmUgcmV2aXNpb246ICIlcyInLCB1cmwpCi0KLSAgICAgICAgY29udGVudCA9IHNlbGYuX3Vy
bF9mZXRjaGVyLmZldGNoKHVybCkKLQotICAgICAgICByZXZpc2lvbnMgPSByZS5maW5kYWxsKHNl
bGYuUkVWSVNJT05fUkVHRVgsIGNvbnRlbnQpCi0gICAgICAgIGlmIG5vdCByZXZpc2lvbnM6Ci0g
ICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gZmluZCByZXZpc2lvbiwgY29udGVudDog
IiVzIicsIGNvbnRlbnQpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIHJldmlz
aW9ucy5zb3J0KGtleT1pbnQpCi0gICAgICAgIF9sb2cuZGVidWcoJyAgTGF0ZXN0IHJldmlzaW9u
OiAlcycsIHJldmlzaW9uc1tsZW4ocmV2aXNpb25zKSAtIDFdKQotICAgICAgICByZXR1cm4gcmV2
aXNpb25zW2xlbihyZXZpc2lvbnMpIC0gMV0KLQotICAgIGRlZiBfZ2V0X2FyY2hpdmVfZGlyX25h
bWUoc2VsZiwgcGxhdGZvcm0pOgotICAgICAgICAiIiJHZXQgbmFtZSBvZiB0aGUgbGF5b3V0IHRl
c3QgYXJjaGl2ZSBkaXJlY3RvcnkuCi0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICBEaXJl
Y3RvcnkgbmFtZSBvcgotICAgICAgICAgIE5vbmUgb24gZmFpbHVyZQotICAgICAgICAiIiIKLQot
ICAgICAgICBpZiBwbGF0Zm9ybSBpbiBBUkNISVZFX0RJUl9OQU1FX0RJQ1Q6Ci0gICAgICAgICAg
ICByZXR1cm4gQVJDSElWRV9ESVJfTkFNRV9ESUNUW3BsYXRmb3JtXQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgX2xvZy5lcnJvcignQ2Fubm90IGZpbmQgcGxhdGZvcm0ga2V5ICVzIGluIGFy
Y2hpdmUgJwotICAgICAgICAgICAgICAgICAgICAgICAnZGlyZWN0b3J5IG5hbWUgZGljdGlvbmFy
eScsIHBsYXRmb3JtKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBfZ2V0X2Fy
Y2hpdmVfdXJsKHNlbGYpOgotICAgICAgICAiIiJHZW5lcmF0ZSB0aGUgdXJsIHRvIGRvd25sb2Fk
IGxhdGVzdCBsYXlvdXQgdGVzdCBhcmNoaXZlLgotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAg
ICAgVXJsIHRvIGRvd25sb2FkIGFyY2hpdmUgb3IKLSAgICAgICAgICBOb25lIG9uIGZhaWx1cmUK
LSAgICAgICAgIiIiCi0KLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5mb3JjZV9hcmNoaXZlX3Vy
bDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9vcHRpb25zLmZvcmNlX2FyY2hpdmVfdXJsCi0K
LSAgICAgICAgZGlyX25hbWUgPSBzZWxmLl9nZXRfYXJjaGl2ZV9kaXJfbmFtZShzZWxmLl9wbGF0
Zm9ybSkKLSAgICAgICAgaWYgbm90IGRpcl9uYW1lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUK
LQotICAgICAgICBfbG9nLmRlYnVnKCdCdWlsZGJvdCBwbGF0Zm9ybSBkaXIgbmFtZTogIiVzIics
IGRpcl9uYW1lKQotCi0gICAgICAgIHVybF9iYXNlID0gJyVzLyVzLycgJSAoc2VsZi5fb3B0aW9u
cy5hcmNoaXZlX3VybCwgZGlyX25hbWUpCi0gICAgICAgIGxhdGVzdF9yZXZpc2lvbiA9IHNlbGYu
X2dldF9sYXRlc3RfcmV2aXNpb24odXJsX2Jhc2UpCi0gICAgICAgIGlmIGxhdGVzdF9yZXZpc2lv
biBpcyBOb25lIG9yIGxhdGVzdF9yZXZpc2lvbiA8PSAwOgotICAgICAgICAgICAgcmV0dXJuIE5v
bmUKLSAgICAgICAgYXJjaGl2ZV91cmwgPSAnJXMlcy9sYXlvdXQtdGVzdC1yZXN1bHRzLnppcCcg
JSAodXJsX2Jhc2UsIGxhdGVzdF9yZXZpc2lvbikKLSAgICAgICAgX2xvZy5pbmZvKCcgIFVzaW5n
ICVzJywgYXJjaGl2ZV91cmwpCi0gICAgICAgIHJldHVybiBhcmNoaXZlX3VybAotCi0gICAgZGVm
IF9kb3dubG9hZF9idWlsZGJvdF9hcmNoaXZlKHNlbGYpOgotICAgICAgICAiIiJEb3dubG9hZCBs
YXlvdXQgdGVzdCBhcmNoaXZlIGZpbGUgZnJvbSBidWlsZGJvdCBhbmQgcmV0dXJuIGEgaGFuZGxl
IHRvIGl0LiIiIgotICAgICAgICB1cmwgPSBzZWxmLl9nZXRfYXJjaGl2ZV91cmwoKQotICAgICAg
ICBpZiB1cmwgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgYXJj
aGl2ZV9maWxlID0gemlwZmlsZXNldC5aaXBGaWxlU2V0KHVybCwgZmlsZXN5c3RlbT1zZWxmLl9m
aWxlc3lzdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
emlwX2ZhY3Rvcnk9c2VsZi5femlwX2ZhY3RvcnkpCi0gICAgICAgIF9sb2cuZGVidWcoJ0FyY2hp
dmUgZG93bmxvYWRlZCcpCi0gICAgICAgIHJldHVybiBhcmNoaXZlX2ZpbGUKLQotICAgIGRlZiBf
ZXh0cmFjdF9hbmRfYWRkX25ld19iYXNlbGluZXMoc2VsZiwgemlwX2ZpbGUpOgotICAgICAgICAi
IiJFeHRyYWN0IG5ldyBiYXNlbGluZXMgZnJvbSB0aGUgemlwIGZpbGUgYW5kIGFkZCB0aGVtIHRv
IFNWTiByZXBvc2l0b3J5LgotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgTGlzdCBvZiB0
ZXN0cyB0aGF0IGhhdmUgYmVlbiByZWJhc2VsaW5lZCBvciBOb25lIG9uIGZhaWx1cmUuIiIiCi0g
ICAgICAgIHppcF9uYW1lbGlzdCA9IHppcF9maWxlLm5hbWVsaXN0KCkKLQotICAgICAgICBfbG9n
LmRlYnVnKCd6aXAgZmlsZSBuYW1lbGlzdDonKQotICAgICAgICBmb3IgbmFtZSBpbiB6aXBfbmFt
ZWxpc3Q6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCcgICcgKyBuYW1lKQotCi0gICAgICAgIF9s
b2cuZGVidWcoJ1BsYXRmb3JtIGRpcjogIiVzIicsIHNlbGYuX3BsYXRmb3JtKQotCi0gICAgICAg
IHNlbGYuX3JlYmFzZWxpbmVkX3Rlc3RzID0gW10KLSAgICAgICAgZm9yIHRlc3Rfbm8sIHRlc3Qg
aW4gZW51bWVyYXRlKHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cyk6Ci0gICAgICAgICAgICBfbG9n
LmRlYnVnKCdUZXN0ICVkOiAlcycsIHRlc3Rfbm8gKyAxLCB0ZXN0KQotICAgICAgICAgICAgc2Vs
Zi5fZXh0cmFjdF9hbmRfYWRkX25ld19iYXNlbGluZSh0ZXN0LCB6aXBfZmlsZSkKLQotICAgIGRl
ZiBfZXh0cmFjdF9hbmRfYWRkX25ld19iYXNlbGluZShzZWxmLCB0ZXN0LCB6aXBfZmlsZSk6Ci0g
ICAgICAgIGZvdW5kID0gRmFsc2UKLSAgICAgICAgc2NtX2Vycm9yID0gRmFsc2UKLSAgICAgICAg
dGVzdF9iYXNlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uc3BsaXRleHQodGVzdClbMF0KLSAgICAg
ICAgZm9yIHN1ZmZpeCBpbiBCQVNFTElORV9TVUZGSVhFUzoKLSAgICAgICAgICAgIGFyY2hpdmVf
dGVzdF9uYW1lID0gJ2xheW91dC10ZXN0LXJlc3VsdHMvJXMtYWN0dWFsJXMnICUgKHRlc3RfYmFz
ZW5hbWUsIHN1ZmZpeCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgQXJjaGl2ZSB0ZXN0IGZp
bGUgbmFtZTogIiVzIicsIGFyY2hpdmVfdGVzdF9uYW1lKQotICAgICAgICAgICAgaWYgbm90IGFy
Y2hpdmVfdGVzdF9uYW1lIGluIHppcF9maWxlLm5hbWVsaXN0KCk6Ci0gICAgICAgICAgICAgICAg
X2xvZy5kZWJ1ZygnICAlcyBmaWxlIG5vdCBpbiBhcmNoaXZlLicsIHN1ZmZpeCkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBmb3VuZCA9IFRydWUKLSAgICAgICAgICAg
IF9sb2cuZGVidWcoJyAgJXMgZmlsZSBmb3VuZCBpbiBhcmNoaXZlLicsIHN1ZmZpeCkKLQotICAg
ICAgICAgICAgdGVtcF9uYW1lID0gc2VsZi5fZXh0cmFjdF9mcm9tX3ppcF90b190ZW1wZmlsZSh6
aXBfZmlsZSwgYXJjaGl2ZV90ZXN0X25hbWUpCi0KLSAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGVu
YW1lID0gJyVzLWV4cGVjdGVkJXMnICUgKHRlc3RfYmFzZW5hbWUsIHN1ZmZpeCkKLSAgICAgICAg
ICAgIGV4cGVjdGVkX2Z1bGxwYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKAotICAgICAgICAg
ICAgICAgIHNlbGYuX3JlYmFzZWxpbmVfcG9ydC5iYXNlbGluZV9wYXRoKCksIGV4cGVjdGVkX2Zp
bGVuYW1lKQotICAgICAgICAgICAgZXhwZWN0ZWRfZnVsbHBhdGggPSBzZWxmLl9maWxlc3lzdGVt
Lm5vcm1wYXRoKGV4cGVjdGVkX2Z1bGxwYXRoKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICBF
eHBlY3RlZCBmaWxlIGZ1bGwgcGF0aDogIiVzIicsIGV4cGVjdGVkX2Z1bGxwYXRoKQotCi0gICAg
ICAgICAgICByZWxwYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRoKGV4cGVjdGVkX2Z1bGxw
YXRoLCBzZWxmLl90YXJnZXRfcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkpCi0KLSAgICAgICAgICAg
ICMgVE9ETyh2aWN0b3J3KTogZm9yIG5vdywgdGhlIHJlYmFzZWxpbmluZyB0b29sIGNoZWNrcyB3
aGV0aGVyCi0gICAgICAgICAgICAjIG9yIG5vdCBUSElTIGJhc2VsaW5lIGlzIGR1cGxpY2F0ZSBh
bmQgc2hvdWxkIGJlIHNraXBwZWQuCi0gICAgICAgICAgICAjIFdlIGNvdWxkIGltcHJvdmUgdGhl
IHRvb2wgdG8gY2hlY2sgYWxsIGJhc2VsaW5lcyBpbiB1cHBlcgotICAgICAgICAgICAgIyBhbmQg
bG93ZXIgbGV2ZWxzIGFuZCByZW1vdmUgYWxsIGR1cGxpY2F0ZWQgYmFzZWxpbmVzLgotICAgICAg
ICAgICAgaWYgc2VsZi5faXNfZHVwX2Jhc2VsaW5lKHRlbXBfbmFtZSwgZXhwZWN0ZWRfZnVsbHBh
dGgsIHRlc3QsIHN1ZmZpeCwgc2VsZi5fcGxhdGZvcm0pOgotICAgICAgICAgICAgICAgIHNlbGYu
X2ZpbGVzeXN0ZW0ucmVtb3ZlKHRlbXBfbmFtZSkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9m
aWxlc3lzdGVtLmV4aXN0cyhleHBlY3RlZF9mdWxscGF0aCk6Ci0gICAgICAgICAgICAgICAgICAg
IF9sb2cuaW5mbygnICBSZW1vdmluZyAlcycgJSByZWxwYXRoKQotICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9kZWxldGVfYmFzZWxpbmUoZXhwZWN0ZWRfZnVsbHBhdGgpCi0gICAgICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygnICAlcyBpcyBhIGR1cGxpY2F0ZScgJSByZWxwYXRoKQotCi0gICAgICAg
ICAgICAgICAgIyBGSVhNRTogV2UgY29uc2lkZXIgYSBkdXBsaWNhdGUgYmFzZWxpbmUgYSBzdWNj
ZXNzIGluIHRoZSBub3JtYWwgY2FzZS4KLSAgICAgICAgICAgICAgICAjIEZJWE1FOiBUaGlzIG1h
eSBub3QgYmUgd2hhdCB5b3Ugd2FudCBzb21ldGltZXM7IHNob3VsZCB0aGlzIGJlCi0gICAgICAg
ICAgICAgICAgIyBGSVhNRTogY29udHJvbGxhYmxlPwotICAgICAgICAgICAgICAgIHNlbGYuX3Jl
YmFzZWxpbmVkX3Rlc3RzLmFwcGVuZCh0ZXN0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0K
LSAgICAgICAgICAgIGlmIHN1ZmZpeCA9PSAnLmNoZWNrc3VtJyBhbmQgc2VsZi5fcG5nX2hhc19z
YW1lX2NoZWNrc3VtKHRlbXBfbmFtZSwgdGVzdCwgZXhwZWN0ZWRfZnVsbHBhdGgpOgotICAgICAg
ICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHRlbXBfbmFtZSkKLSAgICAgICAgICAg
ICAgICAjIElmIGFuIG9sZCBjaGVja3N1bSBleGlzdHMsIGRlbGV0ZSBpdC4KLSAgICAgICAgICAg
ICAgICBzZWxmLl9kZWxldGVfYmFzZWxpbmUoZXhwZWN0ZWRfZnVsbHBhdGgpCi0gICAgICAgICAg
ICAgICAgY29udGludWUKLQotICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5tYXliZV9tYWtl
X2RpcmVjdG9yeShzZWxmLl9maWxlc3lzdGVtLmRpcm5hbWUoZXhwZWN0ZWRfZnVsbHBhdGgpKQot
ICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5tb3ZlKHRlbXBfbmFtZSwgZXhwZWN0ZWRfZnVs
bHBhdGgpCi0KLSAgICAgICAgICAgIHBhdGhfZnJvbV9iYXNlID0gc2VsZi5fZmlsZXN5c3RlbS5y
ZWxwYXRoKGV4cGVjdGVkX2Z1bGxwYXRoKQotICAgICAgICAgICAgaWYgc2VsZi5fc2NtLmV4aXN0
cyhwYXRoX2Zyb21fYmFzZSk6Ci0gICAgICAgICAgICAgICAgX2xvZy5pbmZvKCcgIFVwZGF0aW5n
ICVzJyAlIHJlbHBhdGgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIF9sb2cu
aW5mbygnICBBZGRpbmcgJXMnICUgcmVscGF0aCkKLQotICAgICAgICAgICAgaWYgc2VsZi5fc2Nt
LmFkZChleHBlY3RlZF9mdWxscGF0aCwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKToKLSAgICAgICAg
ICAgICAgICAjIEZJWE1FOiBwcmludCBkZXRhaWxlZCBkaWFnbm9zZSBtZXNzYWdlcwotICAgICAg
ICAgICAgICAgIHNjbV9lcnJvciA9IFRydWUKLSAgICAgICAgICAgIGVsaWYgc3VmZml4ICE9ICcu
Y2hlY2tzdW0nOgotICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9odG1sX2Jhc2VsaW5lX2Zp
bGVzKGV4cGVjdGVkX2Z1bGxwYXRoKQotCi0gICAgICAgIGlmIG5vdCBmb3VuZDoKLSAgICAgICAg
ICAgIF9sb2cud2FybignTm8gcmVzdWx0cyBpbiBhcmNoaXZlIGZvciAlcycgJSB0ZXN0KQotICAg
ICAgICBlbGlmIHNjbV9lcnJvcjoKLSAgICAgICAgICAgIF9sb2cud2FybignRmFpbGVkIHRvIGFk
ZCBiYXNlbGluZXMgdG8geW91ciByZXBvc2l0b3J5LicpCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICBfbG9nLmRlYnVnKCcgIFJlYmFzZWxpbmUgc3VjY2VlZGVkLicpCi0gICAgICAgICAgICBz
ZWxmLl9yZWJhc2VsaW5lZF90ZXN0cy5hcHBlbmQodGVzdCkKLQotICAgIGRlZiBfZXh0cmFjdF9m
cm9tX3ppcF90b190ZW1wZmlsZShzZWxmLCB6aXBfZmlsZSwgZmlsZW5hbWUpOgotICAgICAgICAi
IiJFeHRyYWN0cyB8ZmlsZW5hbWV8IGZyb20gfHppcF9maWxlfCwgYSBaaXBGaWxlU2V0LiBSZXR1
cm5zIHRoZSBmdWxsCi0gICAgICAgICAgIHBhdGggbmFtZSB0byB0aGUgZXh0cmFjdGVkIGZpbGUu
IiIiCi0gICAgICAgIGRhdGEgPSB6aXBfZmlsZS5yZWFkKGZpbGVuYW1lKQotICAgICAgICBzdWZm
aXggPSBzZWxmLl9maWxlc3lzdGVtLnNwbGl0ZXh0KGZpbGVuYW1lKVsxXQotICAgICAgICB0ZW1w
ZmlsZSwgdGVtcF9uYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX2JpbmFyeV90ZW1wZmlsZShz
dWZmaXgpCi0gICAgICAgIHRlbXBmaWxlLndyaXRlKGRhdGEpCi0gICAgICAgIHRlbXBmaWxlLmNs
b3NlKCkKLSAgICAgICAgcmV0dXJuIHRlbXBfbmFtZQotCi0gICAgZGVmIF9wbmdfaGFzX3NhbWVf
Y2hlY2tzdW0oc2VsZiwgY2hlY2tzdW1fcGF0aCwgdGVzdCwgY2hlY2tzdW1fZXhwZWN0ZWRfZnVs
bHBhdGgpOgotICAgICAgICAiIiJSZXR1cm5zIFRydWUgaWYgdGhlIGZhbGxiYWNrIHBuZyBmb3Ig
fGNoZWNrc3VtX2V4cGVjdGVkX2Z1bGxwYXRofAotICAgICAgICBjb250YWlucyB0aGUgc2FtZSBj
aGVja3N1bS4iIiIKLSAgICAgICAgZnMgPSBzZWxmLl9maWxlc3lzdGVtCi0gICAgICAgIHBuZ19m
dWxscGF0aCA9IHNlbGYuX2ZpcnN0X2ZhbGxiYWNrX3BuZ19mb3JfdGVzdCh0ZXN0KQotCi0gICAg
ICAgIGlmIG5vdCBmcy5leGlzdHMocG5nX2Z1bGxwYXRoKToKLSAgICAgICAgICAgIF9sb2cuZXJy
b3IoJyAgQ2hlY2tzdW0gd2l0aG91dCBwbmcgZmlsZSBmb3VuZCEgRXhwZWN0ZWQgJXMgdG8gZXhp
c3QuJyAlIHBuZ19mdWxscGF0aCkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAg
IHdpdGggZnMub3Blbl9iaW5hcnlfZmlsZV9mb3JfcmVhZGluZyhwbmdfZnVsbHBhdGgpIGFzIGZp
bGVoYW5kbGU6Ci0gICAgICAgICAgICBjaGVja3N1bV9pbl9wbmcgPSByZWFkX2NoZWNrc3VtX2Zy
b21fcG5nLnJlYWRfY2hlY2tzdW0oZmlsZWhhbmRsZSkKLSAgICAgICAgICAgIGNoZWNrc3VtX2lu
X3RleHRfZmlsZSA9IGZzLnJlYWRfdGV4dF9maWxlKGNoZWNrc3VtX3BhdGgpCi0gICAgICAgICAg
ICBpZiBjaGVja3N1bV9pbl9wbmcgYW5kIGNoZWNrc3VtX2luX3BuZyAhPSBjaGVja3N1bV9pbl90
ZXh0X2ZpbGU6Ci0gICAgICAgICAgICAgICAgX2xvZy5lcnJvcigiICBjaGVja3N1bSBpbiAlcyBh
bmQgJXMgZG9uJ3QgbWF0Y2ghICBDb250aW51aW5nIgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiB0byBjb3B5IGJ1dCBwbGVhc2UgaW52ZXN0aWdhdGUuIiAlICgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoZWNrc3VtX2V4cGVjdGVkX2Z1bGxwYXRoLCBwbmdfZnVsbHBhdGgpKQot
ICAgICAgICAgICAgcmV0dXJuIGNoZWNrc3VtX2luX3RleHRfZmlsZSA9PSBjaGVja3N1bV9pbl9w
bmcKLQotICAgIGRlZiBfZmlyc3RfZmFsbGJhY2tfcG5nX2Zvcl90ZXN0KHNlbGYsIHRlc3QpOgot
ICAgICAgICBhbGxfYmFzZWxpbmVzID0gc2VsZi5fcmViYXNlbGluZV9wb3J0LmV4cGVjdGVkX2Jh
c2VsaW5lcyh0ZXN0LCAnLnBuZycsIFRydWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lz
dGVtLmpvaW4oYWxsX2Jhc2VsaW5lc1swXVswXSwgYWxsX2Jhc2VsaW5lc1swXVsxXSkKLQotICAg
IGRlZiBfaXNfZHVwX2Jhc2VsaW5lKHNlbGYsIG5ld19iYXNlbGluZSwgYmFzZWxpbmVfcGF0aCwg
dGVzdCwgc3VmZml4LCBwbGF0Zm9ybSk6Ci0gICAgICAgICIiIkNoZWNrIHdoZXRoZXIgYSBiYXNl
bGluZSBpcyBkdXBsaWNhdGUgYW5kIGNhbiBmYWxsYmFjayB0byBzYW1lCi0gICAgICAgICAgIGJh
c2VsaW5lIGZvciBhbm90aGVyIHBsYXRmb3JtLiBGb3IgZXhhbXBsZSwgaWYgYSB0ZXN0IGhhcyBz
YW1lCi0gICAgICAgICAgIGJhc2VsaW5lIG9uIGxpbnV4IGFuZCB3aW5kb3dzLCB0aGVuIHdlIG9u
bHkgc3RvcmUgd2luZG93cwotICAgICAgICAgICBiYXNlbGluZSBhbmQgbGludXggYmFzZWxpbmUg
d2lsbCBmYWxsYmFjayB0byB0aGUgd2luZG93cyB2ZXJzaW9uLgotCi0gICAgICAgIEFyZ3M6Ci0g
ICAgICAgICAgbmV3X2Jhc2VsaW5lOiB0ZW1wIGZpbGVuYW1lIGNvbnRhaW5pbmcgdGhlIG5ldyBi
YXNlbGluZSByZXN1bHRzCi0gICAgICAgICAgYmFzZWxpbmVfcGF0aDogYmFzZWxpbmUgZXhwZWN0
YXRpb24gZmlsZSBuYW1lLgotICAgICAgICAgIHRlc3Q6IHRlc3QgbmFtZS4KLSAgICAgICAgICBz
dWZmaXg6IGZpbGUgc3VmZml4IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzLCBpbmNsdWRpbmcgZG90
OwotICAgICAgICAgICAgICAgICAgZS5nLiAnLnR4dCcgb3IgJy5wbmcnLgotICAgICAgICAgIHBs
YXRmb3JtOiBiYXNlbGluZSBwbGF0Zm9ybSAnbWFjJywgJ3dpbicgb3IgJ2xpbnV4Jy4KLQotICAg
ICAgICBSZXR1cm5zOgotICAgICAgICAgIFRydWUgaWYgdGhlIGJhc2VsaW5lIGlzIHVubmVjZXNz
YXJ5LgotICAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4KLSAgICAgICAgIiIiCi0gICAgICAgIGFs
bF9iYXNlbGluZXMgPSBzZWxmLl9yZWJhc2VsaW5lX3BvcnQuZXhwZWN0ZWRfYmFzZWxpbmVzKHRl
c3QsIHN1ZmZpeCwgVHJ1ZSkKLQotICAgICAgICBmb3IgZmFsbGJhY2tfZGlyLCBmYWxsYmFja19m
aWxlIGluIGFsbF9iYXNlbGluZXM6Ci0gICAgICAgICAgICBpZiBub3QgZmFsbGJhY2tfZGlyIG9y
IG5vdCBmYWxsYmFja19maWxlOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAg
ICAgIGZhbGxiYWNrX2Z1bGxwYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5ub3JtcGF0aCgKLSAgICAg
ICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmpvaW4oZmFsbGJhY2tfZGlyLCBmYWxsYmFja19m
aWxlKSkKLSAgICAgICAgICAgIGlmIGZhbGxiYWNrX2Z1bGxwYXRoLmxvd2VyKCkgPT0gYmFzZWxp
bmVfcGF0aC5sb3dlcigpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBm
YWxsYmFja19kaXJfcmVscGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aChmYWxsYmFja19k
aXIsIHNlbGYuX3RhcmdldF9wb3J0LmxheW91dF90ZXN0c19kaXIoKSkKLSAgICAgICAgICAgIGlm
IGZhbGxiYWNrX2Rpcl9yZWxwYXRoID09ICcnOgotICAgICAgICAgICAgICAgIGZhbGxiYWNrX2Rp
cl9yZWxwYXRoID0gJzxnZW5lcmljPicKLQotICAgICAgICAgICAgbmV3X291dHB1dCA9IHNlbGYu
X2ZpbGVzeXN0ZW0ucmVhZF9iaW5hcnlfZmlsZShuZXdfYmFzZWxpbmUpCi0gICAgICAgICAgICBm
YWxsYmFja19vdXRwdXQgPSBzZWxmLl9maWxlc3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUoZmFsbGJh
Y2tfZnVsbHBhdGgpCi0gICAgICAgICAgICBpc19pbWFnZSA9IGJhc2VsaW5lX3BhdGgubG93ZXIo
KS5lbmRzd2l0aCgnLnBuZycpCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fZGlmZl9iYXNlbGlu
ZXMobmV3X291dHB1dCwgZmFsbGJhY2tfb3V0cHV0LCBpc19pbWFnZSk6Ci0gICAgICAgICAgICAg
ICAgX2xvZy5pbmZvKCcgIFNraXBwaW5nICVzIChtYXRjaGVzICVzKScsIHRlc3QsIGZhbGxiYWNr
X2Rpcl9yZWxwYXRoKQotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKLQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBfZGlmZl9iYXNl
bGluZXMoc2VsZiwgb3V0cHV0MSwgb3V0cHV0MiwgaXNfaW1hZ2UpOgotICAgICAgICAiIiJDaGVj
ayB3aGV0aGVyIHR3byBiYXNlbGluZXMgYXJlIGRpZmZlcmVudC4KLQotICAgICAgICBBcmdzOgot
ICAgICAgICAgIG91dHB1dDEsIG91dHB1dDI6IGNvbnRlbnRzIG9mIHRoZSBiYXNlbGluZXMgdG8g
Y29tcGFyZS4KLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgIFRydWUgaWYgdHdvIGZpbGVz
IGFyZSBkaWZmZXJlbnQgb3IgaGF2ZSBkaWZmZXJlbnQgZXh0ZW5zaW9ucy4KLSAgICAgICAgICBG
YWxzZSBvdGhlcndpc2UuCi0gICAgICAgICIiIgotCi0gICAgICAgIGlmIGlzX2ltYWdlOgotICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuZGlmZl9pbWFnZShvdXRwdXQxLCBvdXRwdXQyKVsw
XQotCi0gICAgICAgIHJldHVybiBzZWxmLl9wb3J0LmNvbXBhcmVfdGV4dChvdXRwdXQxLCBvdXRw
dXQyKQotCi0gICAgZGVmIF9kZWxldGVfYmFzZWxpbmUoc2VsZiwgZmlsZW5hbWUpOgotICAgICAg
ICAiIiJSZW1vdmUgdGhlIGZpbGUgZnJvbSByZXBvc2l0b3J5IGFuZCBkZWxldGUgaXQgZnJvbSBk
aXNrLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgZmlsZW5hbWU6IGZ1bGwgcGF0aCBvZiB0
aGUgZmlsZSB0byBkZWxldGUuCi0gICAgICAgICIiIgotCi0gICAgICAgIGlmIG5vdCBmaWxlbmFt
ZSBvciBub3Qgc2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUoZmlsZW5hbWUpOgotICAgICAgICAgICAg
cmV0dXJuCi0gICAgICAgIHNlbGYuX3NjbS5kZWxldGUoZmlsZW5hbWUpCi0KLSAgICBkZWYgX2Ny
ZWF0ZV9odG1sX2Jhc2VsaW5lX2ZpbGVzKHNlbGYsIGJhc2VsaW5lX2Z1bGxwYXRoKToKLSAgICAg
ICAgIiIiQ3JlYXRlIGJhc2VsaW5lIGZpbGVzIChvbGQsIG5ldyBhbmQgZGlmZikgaW4gaHRtbCBk
aXJlY3RvcnkuCi0KLSAgICAgICAgICAgVGhlIGZpbGVzIGFyZSB1c2VkIHRvIGNvbXBhcmUgdGhl
IHJlYmFzZWxpbmluZyByZXN1bHRzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgYmFzZWxp
bmVfZnVsbHBhdGg6IGZ1bGwgcGF0aCBvZiB0aGUgZXhwZWN0ZWQgYmFzZWxpbmUgZmlsZS4KLSAg
ICAgICAgIiIiCi0KLSAgICAgICAgYmFzZWxpbmVfcmVscGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0u
cmVscGF0aChiYXNlbGluZV9mdWxscGF0aCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnICBIdG1sOiBj
cmVhdGUgYmFzZWxpbmVzIGZvciAiJXMiJywgYmFzZWxpbmVfcmVscGF0aCkKLQotICAgICAgICBp
ZiAobm90IGJhc2VsaW5lX2Z1bGxwYXRoCi0gICAgICAgICAgICBvciBub3Qgc2VsZi5fZmlsZXN5
c3RlbS5leGlzdHMoYmFzZWxpbmVfZnVsbHBhdGgpKToKLSAgICAgICAgICAgIF9sb2cuZGVidWco
JyAgSHRtbDogRG9lcyBub3QgZXhpc3Q6ICIlcyInLCBiYXNlbGluZV9mdWxscGF0aCkKLSAgICAg
ICAgICAgIHJldHVybgotCi0gICAgICAgIGlmIG5vdCBzZWxmLl9zY20uZXhpc3RzKGJhc2VsaW5l
X3JlbHBhdGgpOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICBIdG1sOiBEb2VzIG5vdCBleGlz
dCBpbiBzY206ICIlcyInLCBiYXNlbGluZV9yZWxwYXRoKQotICAgICAgICAgICAgcmV0dXJuCi0K
LSAgICAgICAgIyBDb3B5IHRoZSBuZXcgYmFzZWxpbmUgdG8gaHRtbCBkaXJlY3RvcnkgZm9yIHJl
c3VsdCBjb21wYXJpc29uLgotICAgICAgICBiYXNlbGluZV9maWxlbmFtZSA9IHNlbGYuX2ZpbGVz
eXN0ZW0uYmFzZW5hbWUoYmFzZWxpbmVfZnVsbHBhdGgpCi0gICAgICAgIG5ld19maWxlID0gZ2V0
X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX29wdGlvbnMuaHRt
bF9kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJhc2VsaW5lX2ZpbGVuYW1lLCBzZWxmLl9wbGF0Zm9ybSwgJ25ldycpCi0gICAgICAgIHNlbGYu
X2ZpbGVzeXN0ZW0uY29weWZpbGUoYmFzZWxpbmVfZnVsbHBhdGgsIG5ld19maWxlKQotICAgICAg
ICBfbG9nLmRlYnVnKCcgIEh0bWw6IGNvcGllZCBuZXcgYmFzZWxpbmUgZmlsZSBmcm9tICIlcyIg
dG8gIiVzIi4nLAotICAgICAgICAgICAgICAgICAgYmFzZWxpbmVfZnVsbHBhdGgsIG5ld19maWxl
KQotCi0gICAgICAgICMgR2V0IHRoZSBvbGQgYmFzZWxpbmUgZnJvbSB0aGUgcmVwb3NpdG9yeSBh
bmQgc2F2ZSB0byB0aGUgaHRtbCBkaXJlY3RvcnkuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IG91dHB1dCA9IHNlbGYuX3NjbS5zaG93X2hlYWQoYmFzZWxpbmVfcmVscGF0aCkKLSAgICAgICAg
ZXhjZXB0IFNjcmlwdEVycm9yLCBlOgotICAgICAgICAgICAgX2xvZy53YXJuaW5nKGUpCi0gICAg
ICAgICAgICBvdXRwdXQgPSAiIgotCi0gICAgICAgIGlmIChub3Qgb3V0cHV0KSBvciAob3V0cHV0
LnVwcGVyKCkucnN0cmlwKCkuZW5kc3dpdGgoJ05PIFNVQ0ggRklMRSBPUiBESVJFQ1RPUlknKSk6
Ci0gICAgICAgICAgICBfbG9nLndhcm5pbmcoJyAgTm8gYmFzZSBmaWxlOiAiJXMiJywgYmFzZWxp
bmVfZnVsbHBhdGgpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgYmFzZV9maWxlID0gZ2V0
X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX29wdGlvbnMuaHRt
bF9kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiYXNlbGluZV9maWxlbmFtZSwgc2VsZi5fcGxhdGZvcm0sICdvbGQnKQotICAgICAgICBpZiBi
YXNlX2ZpbGUudXBwZXIoKS5lbmRzd2l0aCgnLlBORycpOgotICAgICAgICAgICAgc2VsZi5fZmls
ZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZShiYXNlX2ZpbGUsIG91dHB1dCkKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGJhc2VfZmls
ZSwgb3V0cHV0KQotICAgICAgICBfbG9nLmRlYnVnKCcgIEh0bWw6IGNyZWF0ZWQgb2xkIGJhc2Vs
aW5lIGZpbGU6ICIlcyIuJywgYmFzZV9maWxlKQotCi0gICAgICAgICMgR2V0IHRoZSBkaWZmIGJl
dHdlZW4gb2xkIGFuZCBuZXcgYmFzZWxpbmVzIGFuZCBzYXZlIHRvIHRoZSBodG1sIGRpci4KLSAg
ICAgICAgZGlmZl9maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX2ZpbGVzeXN0
ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9v
cHRpb25zLmh0bWxfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wbGF0Zm9ybSwgJ2RpZmYnKQotICAgICAgICBoYXNf
ZGlmZiA9IEZhbHNlCi0gICAgICAgIGlmIGJhc2VsaW5lX2ZpbGVuYW1lLnVwcGVyKCkuZW5kc3dp
dGgoJy5UWFQnKToKLSAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX3NjbS5kaWZmX2Zvcl9maWxl
KGJhc2VsaW5lX3JlbHBhdGgsIGxvZz1fbG9nKQotICAgICAgICAgICAgaWYgb3V0cHV0OgotICAg
ICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGRpZmZfZmlsZSwg
b3V0cHV0KQotICAgICAgICAgICAgICAgIGhhc19kaWZmID0gVHJ1ZQotICAgICAgICBlbGlmIGJh
c2VsaW5lX2ZpbGVuYW1lLnVwcGVyKCkuZW5kc3dpdGgoJy5QTkcnKToKLSAgICAgICAgICAgIG9s
ZF9maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25z
Lmh0bWxfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wbGF0Zm9ybSwgJ29sZCcpCi0gICAgICAgICAgICBu
ZXdfZmlsZSA9IGdldF9yZXN1bHRfZmlsZV9mdWxscGF0aChzZWxmLl9maWxlc3lzdGVtLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9u
cy5odG1sX2RpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJhc2VsaW5lX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGxhdGZvcm0sICduZXcnKQotICAgICAgICAgICAg
X2xvZy5kZWJ1ZygnIEh0bWw6IGRpZmZpbmcgIiVzIiBhbmQgIiVzIicsIG9sZF9maWxlLCBuZXdf
ZmlsZSkKLSAgICAgICAgICAgIG9sZF9vdXRwdXQgPSBzZWxmLl9maWxlc3lzdGVtLnJlYWRfYmlu
YXJ5X2ZpbGUob2xkX2ZpbGUpCi0gICAgICAgICAgICBuZXdfb3V0cHV0ID0gc2VsZi5fZmlsZXN5
c3RlbS5yZWFkX2JpbmFyeV9maWxlKG5ld19maWxlKQotICAgICAgICAgICAgaW1hZ2VfZGlmZiA9
IHNlbGYuX3BvcnQuZGlmZl9pbWFnZShvbGRfb3V0cHV0LCBuZXdfb3V0cHV0KVswXQotICAgICAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZShkaWZmX2ZpbGUsIGltYWdl
X2RpZmYpCi0KLSAgICAgICAgaWYgaGFzX2RpZmY6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCcg
IEh0bWw6IGNyZWF0ZWQgYmFzZWxpbmUgZGlmZiBmaWxlOiAiJXMiLicsIGRpZmZfZmlsZSkKLQot
Ci1jbGFzcyBIdG1sR2VuZXJhdG9yKG9iamVjdCk6Ci0gICAgIiIiQ2xhc3MgdG8gZ2VuZXJhdGUg
cmViYXNlbGluaW5nIHJlc3VsdCBjb21wYXJpc29uIGh0bWwuIiIiCi0KLSAgICBIVE1MX1JFQkFT
RUxJTkUgPSAoJzxodG1sPicKLSAgICAgICAgICAgICAgICAgICAgICAgJzxoZWFkPicKLSAgICAg
ICAgICAgICAgICAgICAgICAgJzxzdHlsZT4nCi0gICAgICAgICAgICAgICAgICAgICAgICdib2R5
IHtmb250LWZhbWlseTogc2Fucy1zZXJpZjt9JwotICAgICAgICAgICAgICAgICAgICAgICAnLm1h
aW5UYWJsZSB7YmFja2dyb3VuZDogIzY2NjY2Njt9JwotICAgICAgICAgICAgICAgICAgICAgICAn
Lm1haW5UYWJsZSB0ZCAsIC5tYWluVGFibGUgdGgge2JhY2tncm91bmQ6IHdoaXRlO30nCi0gICAg
ICAgICAgICAgICAgICAgICAgICcuZGV0YWlsIHttYXJnaW4tbGVmdDogMTBweDsgbWFyZ2luLXRv
cDogM3B4O30nCi0gICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPicKLSAgICAgICAgICAg
ICAgICAgICAgICAgJzx0aXRsZT5SZWJhc2VsaW5pbmcgUmVzdWx0IENvbXBhcmlzb24gKCUodGlt
ZSlzKScKLSAgICAgICAgICAgICAgICAgICAgICAgJzwvdGl0bGU+JwotICAgICAgICAgICAgICAg
ICAgICAgICAnPC9oZWFkPicKLSAgICAgICAgICAgICAgICAgICAgICAgJzxib2R5PicKLSAgICAg
ICAgICAgICAgICAgICAgICAgJzxoMj5SZWJhc2VsaW5pbmcgUmVzdWx0IENvbXBhcmlzb24gKCUo
dGltZSlzKTwvaDI+JwotICAgICAgICAgICAgICAgICAgICAgICAnJShib2R5KXMnCi0gICAgICAg
ICAgICAgICAgICAgICAgICc8L2JvZHk+JwotICAgICAgICAgICAgICAgICAgICAgICAnPC9odG1s
PicpCi0gICAgSFRNTF9OT19SRUJBU0VMSU5JTkdfVEVTVFMgPSAoCi0gICAgICAgICc8cD5ObyB0
ZXN0cyBmb3VuZCB0aGF0IG5lZWQgcmViYXNlbGluaW5nLjwvcD4nKQotICAgIEhUTUxfVEFCTEVf
VEVTVCA9ICgnPHRhYmxlIGNsYXNzPSJtYWluVGFibGUiIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRp
bmc9NT4nCi0gICAgICAgICAgICAgICAgICAgICAgICclczwvdGFibGU+PGJyPicpCi0gICAgSFRN
TF9UUl9URVNUID0gKCc8dHI+JwotICAgICAgICAgICAgICAgICAgICAnPHRoIHN0eWxlPSJiYWNr
Z3JvdW5kLWNvbG9yOiAjQ0RFQ0RFOyBib3JkZXItYm90dG9tOiAnCi0gICAgICAgICAgICAgICAg
ICAgICcxcHggc29saWQgYmxhY2s7IGZvbnQtc2l6ZTogMThwdDsgZm9udC13ZWlnaHQ6IGJvbGQi
ICcKLSAgICAgICAgICAgICAgICAgICAgJ2NvbHNwYW49IjUiPicKLSAgICAgICAgICAgICAgICAg
ICAgJzxhIGhyZWY9IiVzIj4lczwvYT4nCi0gICAgICAgICAgICAgICAgICAgICc8L3RoPicKLSAg
ICAgICAgICAgICAgICAgICAgJzwvdHI+JykKLSAgICBIVE1MX1RFU1RfREVUQUlMID0gKCc8ZGl2
IGNsYXNzPSJkZXRhaWwiPicKLSAgICAgICAgICAgICAgICAgICAgICAgICc8dHI+JwotICAgICAg
ICAgICAgICAgICAgICAgICAgJzx0aCB3aWR0aD0iMTAwIj5CYXNlbGluZTwvdGg+JwotICAgICAg
ICAgICAgICAgICAgICAgICAgJzx0aCB3aWR0aD0iMTAwIj5QbGF0Zm9ybTwvdGg+JwotICAgICAg
ICAgICAgICAgICAgICAgICAgJzx0aCB3aWR0aD0iMjAwIj5PbGQ8L3RoPicKLSAgICAgICAgICAg
ICAgICAgICAgICAgICc8dGggd2lkdGg9IjIwMCI+TmV3PC90aD4nCi0gICAgICAgICAgICAgICAg
ICAgICAgICAnPHRoIHdpZHRoPSIxNTAiPkRpZmZlcmVuY2U8L3RoPicKLSAgICAgICAgICAgICAg
ICAgICAgICAgICc8L3RyPicKLSAgICAgICAgICAgICAgICAgICAgICAgICclcycKLSAgICAgICAg
ICAgICAgICAgICAgICAgICc8L2Rpdj4nKQotICAgIEhUTUxfVERfTk9MSU5LID0gJzx0ZCBhbGln
bj1jZW50ZXI+PGE+JXM8L2E+PC90ZD4nCi0gICAgSFRNTF9URF9MSU5LID0gJzx0ZCBhbGlnbj1j
ZW50ZXI+PGEgaHJlZj0iJSh1cmkpcyI+JShuYW1lKXM8L2E+PC90ZD4nCi0gICAgSFRNTF9URF9M
SU5LX0lNRyA9ICgnPHRkPjxhIGhyZWY9IiUodXJpKXMiPicKLSAgICAgICAgICAgICAgICAgICAg
ICAgICc8aW1nIHN0eWxlPSJ3aWR0aDogMjAwIiBzcmM9IiUodXJpKXMiIC8+PC9hPjwvdGQ+JykK
LSAgICBIVE1MX1RSID0gJzx0cj4lczwvdHI+JwotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBv
cnQsIHRhcmdldF9wb3J0LCBvcHRpb25zLCBwbGF0Zm9ybXMsIHJlYmFzZWxpbmluZ190ZXN0cyk6
Ci0gICAgICAgIHNlbGYuX2h0bWxfZGlyZWN0b3J5ID0gb3B0aW9ucy5odG1sX2RpcmVjdG9yeQot
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotICAgICAgICBzZWxmLl90YXJnZXRfcG9ydCA9IHRh
cmdldF9wb3J0Ci0gICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHNlbGYu
X3BsYXRmb3JtcyA9IHBsYXRmb3JtcwotICAgICAgICBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMg
PSByZWJhc2VsaW5pbmdfdGVzdHMKLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHBvcnQuX2Zp
bGVzeXN0ZW0KLSAgICAgICAgc2VsZi5faHRtbF9maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KG9wdGlvbnMuaHRtbF9kaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAncmViYXNlbGluZS5odG1sJykKLQotICAgIGRlZiBhYnNwYXRoX3Rv
X3VyaShzZWxmLCBmaWxlbmFtZSk6Ci0gICAgICAgICIiIkNvbnZlcnRzIGFuIGFic29sdXRlIHBh
dGggdG8gYSBmaWxlOiBVUkkuIiIiCi0gICAgICAgIHJldHVybiBwYXRoLmFic3BhdGhfdG9fdXJp
KGZpbGVuYW1lLCBzZWxmLl9wb3J0Ll9leGVjdXRpdmUpCi0KLSAgICBkZWYgZ2VuZXJhdGVfaHRt
bChzZWxmKToKLSAgICAgICAgIiIiR2VuZXJhdGUgaHRtbCBmaWxlIGZvciByZWJhc2VsaW5pbmcg
cmVzdWx0IGNvbXBhcmlzb24uIiIiCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygnR2VuZXJhdGluZyBo
dG1sIGZpbGUnKQotCi0gICAgICAgIGh0bWxfYm9keSA9ICcnCi0gICAgICAgIGlmIG5vdCBzZWxm
Ll9yZWJhc2VsaW5pbmdfdGVzdHM6Ci0gICAgICAgICAgICBodG1sX2JvZHkgKz0gc2VsZi5IVE1M
X05PX1JFQkFTRUxJTklOR19URVNUUwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdGVzdHMg
PSBsaXN0KHNlbGYuX3JlYmFzZWxpbmluZ190ZXN0cykKLSAgICAgICAgICAgIHRlc3RzLnNvcnQo
KQotCi0gICAgICAgICAgICB0ZXN0X25vID0gMQotICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVz
dHM6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGVzdCAlZDogJXMnLCB0ZXN0X25vLCB0
ZXN0KQotICAgICAgICAgICAgICAgIGh0bWxfYm9keSArPSBzZWxmLl9nZW5lcmF0ZV9odG1sX2Zv
cl9vbmVfdGVzdCh0ZXN0KQotCi0gICAgICAgIGh0bWwgPSBzZWxmLkhUTUxfUkVCQVNFTElORSAl
ICh7J3RpbWUnOiB0aW1lLmFzY3RpbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnYm9keSc6IGh0bWxfYm9keX0pCi0gICAgICAgIF9sb2cuZGVidWcoaHRtbCkK
LQotICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShzZWxmLl9odG1sX2Zp
bGUsIGh0bWwpCi0gICAgICAgIF9sb2cuZGVidWcoJ0Jhc2VsaW5lIGNvbXBhcmlzb24gaHRtbCBn
ZW5lcmF0ZWQgYXQgIiVzIicsIHNlbGYuX2h0bWxfZmlsZSkKLQotICAgIGRlZiBzaG93X2h0bWwo
c2VsZik6Ci0gICAgICAgICIiIkxhdW5jaCB0aGUgcmViYXNlbGluaW5nIGh0bWwgaW4gYnJ3b3Nl
ci4iIiIKLQotICAgICAgICBfbG9nLmRlYnVnKCdMYXVuY2hpbmcgaHRtbDogIiVzIicsIHNlbGYu
X2h0bWxfZmlsZSkKLSAgICAgICAgc2VsZi5fcG9ydC5fdXNlci5vcGVuX3VybChzZWxmLl9odG1s
X2ZpbGUpCi0gICAgICAgIF9sb2cuZGVidWcoJ0h0bWwgbGF1bmNoZWQuJykKLQotICAgIGRlZiBf
Z2VuZXJhdGVfYmFzZWxpbmVfbGlua3Moc2VsZiwgdGVzdF9iYXNlbmFtZSwgc3VmZml4LCBwbGF0
Zm9ybSk6Ci0gICAgICAgICIiIkdlbmVyYXRlIGxpbmtzIGZvciBiYXNlbGluZSByZXN1bHRzIChv
bGQsIG5ldyBhbmQgZGlmZikuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICB0ZXN0X2Jhc2Vu
YW1lOiBiYXNlIGZpbGVuYW1lIG9mIHRoZSB0ZXN0Ci0gICAgICAgICAgc3VmZml4OiBiYXNlbGlu
ZSBmaWxlIHN1ZmZpeGVzOiAnLnR4dCcsICcucG5nJwotICAgICAgICAgIHBsYXRmb3JtOiB3aW4s
IGxpbnV4IG9yIG1hYwotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgaHRtbCBsaW5rcyBm
b3Igc2hvd2luZyBiYXNlbGluZSByZXN1bHRzIChvbGQsIG5ldyBhbmQgZGlmZikKLSAgICAgICAg
IiIiCi0KLSAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUgPSAnJXMtZXhwZWN0ZWQlcycgJSAodGVz
dF9iYXNlbmFtZSwgc3VmZml4KQotICAgICAgICBfbG9nLmRlYnVnKCcgICAgYmFzZWxpbmUgZmls
ZW5hbWU6ICIlcyInLCBiYXNlbGluZV9maWxlbmFtZSkKLQotICAgICAgICBuZXdfZmlsZSA9IGdl
dF9yZXN1bHRfZmlsZV9mdWxscGF0aChzZWxmLl9maWxlc3lzdGVtLCBzZWxmLl9odG1sX2RpcmVj
dG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxp
bmVfZmlsZW5hbWUsIHBsYXRmb3JtLCAnbmV3JykKLSAgICAgICAgX2xvZy5kZWJ1ZygnICAgIE5l
dyBiYXNlbGluZSBmaWxlOiAiJXMiJywgbmV3X2ZpbGUpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9m
aWxlc3lzdGVtLmV4aXN0cyhuZXdfZmlsZSk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCcgICAg
Tm8gbmV3IGJhc2VsaW5lIGZpbGU6ICIlcyInLCBuZXdfZmlsZSkKLSAgICAgICAgICAgIHJldHVy
biAnJwotCi0gICAgICAgIG9sZF9maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYu
X2ZpbGVzeXN0ZW0sIHNlbGYuX2h0bWxfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiYXNlbGluZV9maWxlbmFtZSwgcGxhdGZvcm0sICdvbGQn
KQotICAgICAgICBfbG9nLmRlYnVnKCcgICAgT2xkIGJhc2VsaW5lIGZpbGU6ICIlcyInLCBvbGRf
ZmlsZSkKLSAgICAgICAgaWYgc3VmZml4ID09ICcucG5nJzoKLSAgICAgICAgICAgIGh0bWxfdGRf
bGluayA9IHNlbGYuSFRNTF9URF9MSU5LX0lNRwotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
aHRtbF90ZF9saW5rID0gc2VsZi5IVE1MX1REX0xJTksKLQotICAgICAgICBsaW5rcyA9ICcnCi0g
ICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKG9sZF9maWxlKToKLSAgICAgICAgICAg
IGxpbmtzICs9IGh0bWxfdGRfbGluayAlIHsKLSAgICAgICAgICAgICAgICAndXJpJzogc2VsZi5h
YnNwYXRoX3RvX3VyaShvbGRfZmlsZSksCi0gICAgICAgICAgICAgICAgJ25hbWUnOiBiYXNlbGlu
ZV9maWxlbmFtZX0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgICBO
byBvbGQgYmFzZWxpbmUgZmlsZTogIiVzIicsIG9sZF9maWxlKQotICAgICAgICAgICAgbGlua3Mg
Kz0gc2VsZi5IVE1MX1REX05PTElOSyAlICcnCi0KLSAgICAgICAgbGlua3MgKz0gaHRtbF90ZF9s
aW5rICUgeyd1cmknOiBzZWxmLmFic3BhdGhfdG9fdXJpKG5ld19maWxlKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogYmFzZWxpbmVfZmlsZW5hbWV9Ci0KLSAgICAg
ICAgZGlmZl9maWxlID0gZ2V0X3Jlc3VsdF9maWxlX2Z1bGxwYXRoKHNlbGYuX2ZpbGVzeXN0ZW0s
IHNlbGYuX2h0bWxfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZWxpbmVfZmlsZW5hbWUsIHBsYXRmb3JtLCAnZGlmZicpCi0gICAgICAg
IF9sb2cuZGVidWcoJyAgICBCYXNlbGluZSBkaWZmIGZpbGU6ICIlcyInLCBkaWZmX2ZpbGUpCi0g
ICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKGRpZmZfZmlsZSk6Ci0gICAgICAgICAg
ICBsaW5rcyArPSBodG1sX3RkX2xpbmsgJSB7J3VyaSc6IHNlbGYuYWJzcGF0aF90b191cmkoZGlm
Zl9maWxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICdE
aWZmJ30KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgICBObyBiYXNl
bGluZSBkaWZmIGZpbGU6ICIlcyInLCBkaWZmX2ZpbGUpCi0gICAgICAgICAgICBsaW5rcyArPSBz
ZWxmLkhUTUxfVERfTk9MSU5LICUgJycKLQotICAgICAgICByZXR1cm4gbGlua3MKLQotICAgIGRl
ZiBfZ2VuZXJhdGVfaHRtbF9mb3Jfb25lX3Rlc3Qoc2VsZiwgdGVzdCk6Ci0gICAgICAgICIiIkdl
bmVyYXRlIGh0bWwgZm9yIG9uZSByZWJhc2VsaW5pbmcgdGVzdC4KLQotICAgICAgICBBcmdzOgot
ICAgICAgICAgIHRlc3Q6IGxheW91dCB0ZXN0IG5hbWUKLQotICAgICAgICBSZXR1cm5zOgotICAg
ICAgICAgIGh0bWwgdGhhdCBjb21wYXJlcyBiYXNlbGluZSByZXN1bHRzIGZvciB0aGUgdGVzdC4K
LSAgICAgICAgIiIiCi0KLSAgICAgICAgdGVzdF9iYXNlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0u
YmFzZW5hbWUoc2VsZi5fZmlsZXN5c3RlbS5zcGxpdGV4dCh0ZXN0KVswXSkKLSAgICAgICAgX2xv
Zy5kZWJ1ZygnICBiYXNlbmFtZTogIiVzIicsIHRlc3RfYmFzZW5hbWUpCi0gICAgICAgIHJvd3Mg
PSBbXQotICAgICAgICBmb3Igc3VmZml4IGluIEJBU0VMSU5FX1NVRkZJWEVTOgotICAgICAgICAg
ICAgaWYgc3VmZml4ID09ICcuY2hlY2tzdW0nOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0K
LSAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgQ2hlY2tpbmcgJXMgZmlsZXMnLCBzdWZmaXgpCi0g
ICAgICAgICAgICBmb3IgcGxhdGZvcm0gaW4gc2VsZi5fcGxhdGZvcm1zOgotICAgICAgICAgICAg
ICAgIGxpbmtzID0gc2VsZi5fZ2VuZXJhdGVfYmFzZWxpbmVfbGlua3ModGVzdF9iYXNlbmFtZSwg
c3VmZml4LCBwbGF0Zm9ybSkKLSAgICAgICAgICAgICAgICBpZiBsaW5rczoKLSAgICAgICAgICAg
ICAgICAgICAgcm93ID0gc2VsZi5IVE1MX1REX05PTElOSyAlIHNlbGYuX2dldF9iYXNlbGluZV9y
ZXN1bHRfdHlwZShzdWZmaXgpCi0gICAgICAgICAgICAgICAgICAgIHJvdyArPSBzZWxmLkhUTUxf
VERfTk9MSU5LICUgcGxhdGZvcm0KLSAgICAgICAgICAgICAgICAgICAgcm93ICs9IGxpbmtzCi0g
ICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJyAgICBodG1sIHJvdzogJXMnLCByb3cpCi0K
LSAgICAgICAgICAgICAgICAgICAgcm93cy5hcHBlbmQoc2VsZi5IVE1MX1RSICUgcm93KQotCi0g
ICAgICAgIGlmIHJvd3M6Ci0gICAgICAgICAgICB0ZXN0X3BhdGggPSBzZWxmLl9maWxlc3lzdGVt
LmpvaW4oc2VsZi5fdGFyZ2V0X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCB0ZXN0KQotICAgICAg
ICAgICAgaHRtbCA9IHNlbGYuSFRNTF9UUl9URVNUICUgKHNlbGYuYWJzcGF0aF90b191cmkodGVz
dF9wYXRoKSwgdGVzdCkKLSAgICAgICAgICAgIGh0bWwgKz0gc2VsZi5IVE1MX1RFU1RfREVUQUlM
ICUgJyAnLmpvaW4ocm93cykKLQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnICAgIGh0bWwgZm9y
IHRlc3Q6ICVzJywgaHRtbCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLkhUTUxfVEFCTEVfVEVT
VCAlIGh0bWwKLQotICAgICAgICByZXR1cm4gJycKLQotICAgIGRlZiBfZ2V0X2Jhc2VsaW5lX3Jl
c3VsdF90eXBlKHNlbGYsIHN1ZmZpeCk6Ci0gICAgICAgICIiIk5hbWUgb2YgdGhlIGJhc2VsaW5l
IHJlc3VsdCB0eXBlLiIiIgotCi0gICAgICAgIGlmIHN1ZmZpeCA9PSAnLnBuZyc6Ci0gICAgICAg
ICAgICByZXR1cm4gJ1BpeGVsJwotICAgICAgICBlbGlmIHN1ZmZpeCA9PSAnLnR4dCc6Ci0gICAg
ICAgICAgICByZXR1cm4gJ1JlbmRlciBUcmVlJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
cmV0dXJuICdPdGhlcicKLQotCi1kZWYgZ2V0X2hvc3RfcG9ydF9vYmplY3QocG9ydF9mYWN0b3J5
LCBvcHRpb25zKToKLSAgICAiIiJSZXR1cm4gYSBwb3J0IG9iamVjdCBmb3IgdGhlIHBsYXRmb3Jt
IHdlJ3JlIHJ1bm5pbmcgb24uIiIiCi0gICAgIyBXZSB3YW50IHRoZSBJbWFnZURpZmYgbG9naWMg
dG8gbWF0Y2ggdGhhdCBvZiB0aGUgY2hyb21pdW0gYm90cywgc28gd2UKLSAgICAjIGZvcmNlIHRo
ZSB1c2Ugb2YgYSBDaHJvbWl1bSBwb3J0LiAgV2Ugd2lsbCBsb29rIGZvciBlaXRoZXIgRGVidWcg
b3IKLSAgICAjIFJlbGVhc2UgdmVyc2lvbnMuCi0gICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0g
IlJlbGVhc2UiCi0gICAgb3B0aW9ucy5jaHJvbWl1bSA9IFRydWUKLSAgICBwb3J0X29iaiA9IHBv
cnRfZmFjdG9yeS5nZXQob3B0aW9ucz1vcHRpb25zKQotICAgIGlmIG5vdCBwb3J0X29iai5jaGVj
a19pbWFnZV9kaWZmKG92ZXJyaWRlX3N0ZXA9Tm9uZSwgbG9nZ2luZz1GYWxzZSk6Ci0gICAgICAg
IF9sb2cuZGVidWcoJ05vIHJlbGVhc2UgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgZGlmZiBiaW5hcnkg
d2FzIGZvdW5kLicpCi0gICAgICAgIG9wdGlvbnMuY29uZmlndXJhdGlvbiA9ICJEZWJ1ZyIKLSAg
ICAgICAgcG9ydF9vYmogPSBwb3J0X2ZhY3RvcnkuZ2V0KG9wdGlvbnM9b3B0aW9ucykKLSAgICAg
ICAgaWYgbm90IHBvcnRfb2JqLmNoZWNrX2ltYWdlX2RpZmYob3ZlcnJpZGVfc3RlcD1Ob25lLCBs
b2dnaW5nPUZhbHNlKToKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ05vIHZlcnNpb24gb2YgaW1h
Z2UgZGlmZiB3YXMgZm91bmQuIENoZWNrIHlvdXIgYnVpbGQuJykKLSAgICAgICAgICAgIHJldHVy
biBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdGb3VuZCB0aGUg
ZGVidWcgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgZGlmZiBiaW5hcnkuJykKLSAgICBlbHNlOgotICAg
ICAgICBfbG9nLmRlYnVnKCdGb3VuZCB0aGUgcmVsZWFzZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZSBk
aWZmIGJpbmFyeS4nKQotICAgIHJldHVybiBwb3J0X29iagotCi0KLWRlZiBwYXJzZV9vcHRpb25z
KGFyZ3MpOgotICAgICIiIlBhcnNlIG9wdGlvbnMgYW5kIHJldHVybiBhIHBhaXIgb2YgaG9zdCBv
cHRpb25zIGFuZCB0YXJnZXQgb3B0aW9ucy4iIiIKLSAgICBvcHRpb25fcGFyc2VyID0gb3B0cGFy
c2UuT3B0aW9uUGFyc2VyKCkKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy12JywgJy0t
dmVyYm9zZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1
ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2luY2x1ZGUgZGVidWctbGV2ZWwgbG9nZ2luZy4n
KQotCi0gICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcScsICctLXF1aWV0JywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0nU3VwcHJlc3MgcmVzdWx0IEhUTUwgdmlld2luZycpCi0K
LSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcGxhdGZvcm1zJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwPSgnQ29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgcGxhdGZvcm1zICcKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoYXQgbmVlZCByZWJhc2VsaW5pbmcu
JykpCi0KLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy11JywgJy0tYXJjaGl2ZV91cmwn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSgnaHR0cDovL2J1aWxkLmNo
cm9taXVtLm9yZy9mL2Nocm9taXVtLycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2xheW91dF90ZXN0X3Jlc3VsdHMnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0oJ1VybCB0byBmaW5kIHRoZSBsYXlvdXQgdGVzdCByZXN1bHQgYXJjaGl2ZScKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmaWxlLicpKQotICAgIG9wdGlvbl9w
YXJzZXIuYWRkX29wdGlvbignLVUnLCAnLS1mb3JjZV9hcmNoaXZlX3VybCcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9KCdVcmwgb2YgcmVzdWx0IHppcCBmaWxlLiBUaGlzIG9w
dGlvbiBpcyBmb3IgZGVidWdnaW5nICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3B1cnBvc2VzJykpCi0KLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1iJywgJy0t
YmFja3VwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVl
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1doZXRoZXIgb3Igbm90IHRvIGJhY2t1cCB0aGUg
b3JpZ2luYWwgdGVzdCcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBleHBl
Y3RhdGlvbnMgZmlsZSBhZnRlciByZWJhc2VsaW5lLicpKQotCi0gICAgb3B0aW9uX3BhcnNlci5h
ZGRfb3B0aW9uKCctZCcsICctLWh0bWxfZGlyZWN0b3J5JywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD0nJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0o
J1RoZSBkaXJlY3RvcnkgdGhhdCBzdG9yZXMgdGhlIHJlc3VsdHMgZm9yICcKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYmFzZWxpbmluZyBjb21wYXJpc29uLicpKQotCi0g
ICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCcnLCAnLS11c2VfZHJ0JywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0oJ1VzZSBJbWFnZURpZmYgZnJvbSBEdW1wUmVuZGVyVHJlZSBpbnN0ZWFkICcKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mIGltYWdlX2RpZmYgZm9yIHBpeGVsIHRl
c3RzLicpKQotCi0gICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctdycsICctLXdlYmtpdF9j
YW5hcnknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSgnREVQUkVDQVRFRC4gVGhpcyBmbGFnIG5vIGxvbmdl
ciBoYXMgYW55IGVmZmVjdC4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcg
IFRoZSBjYW5hcmllcyBhcmUgYWx3YXlzIHVzZWQuJykpCi0KLSAgICBvcHRpb25fcGFyc2VyLmFk
ZF9vcHRpb24oJycsICctLXRhcmdldC1wbGF0Zm9ybScsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ9J2Nocm9taXVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0oJ1RoZSB0YXJnZXQgcGxhdGZvcm0gdG8gcmViYXNlbGluZSAnCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICcoIm1hYyIsICJjaHJvbWl1bSIsICJxdCIsIGV0Yy4pLiBE
ZWZhdWx0cyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAiY2hyb21p
dW0iLicpKQotCi0gICAgb3B0aW9ucyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKVsw
XQotICAgIGlmIG9wdGlvbnMud2Via2l0X2NhbmFyeToKLSAgICAgICAgcHJpbnQgIi13Ly0td2Vi
a2l0LWNhbmFyeSBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LCBpZ25vcmluZy4iCi0KLSAgICB0YXJn
ZXRfb3B0aW9ucyA9IGNvcHkuY29weShvcHRpb25zKQotICAgIGlmIG9wdGlvbnMudGFyZ2V0X3Bs
YXRmb3JtID09ICdjaHJvbWl1bSc6Ci0gICAgICAgIHRhcmdldF9vcHRpb25zLmNocm9taXVtID0g
VHJ1ZQotICAgIG9wdGlvbnMudG9sZXJhbmNlID0gMAotCi0gICAgcmV0dXJuIChvcHRpb25zLCB0
YXJnZXRfb3B0aW9ucykKLQotCi1jbGFzcyBEZWJ1Z0xvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVy
KToKLSAgICBudW1fZmFpbHVyZXMgPSAwCi0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAg
ICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLmZvcm1hdHRl
ciA9IGxvZ2dpbmcuRm9ybWF0dGVyKGZtdD0oJyUoYXNjdGltZSlzICUoZmlsZW5hbWUpczolKGxp
bmVubyktM2QgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMnKSkKLSAgICAgICAgc2VsZi5zZXRGb3JtYXR0
ZXIoc2VsZi5mb3JtYXR0ZXIpCi0KLSAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgotICAgICAg
ICBpZiByZWNvcmQubGV2ZWxubyA+IGxvZ2dpbmcuSU5GTzoKLSAgICAgICAgICAgIHNlbGYubnVt
X2ZhaWx1cmVzICs9IDEKLSAgICAgICAgcHJpbnQgc2VsZi5mb3JtYXQocmVjb3JkKQotCi0KLWNs
YXNzIE5vcm1hbExvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKLSAgICBsYXN0X2xldmVsbm8g
PSBOb25lCi0gICAgbnVtX2ZhaWx1cmVzID0gMAotCi0gICAgZGVmIGVtaXQoc2VsZiwgcmVjb3Jk
KToKLSAgICAgICAgaWYgcmVjb3JkLmxldmVsbm8gPiBsb2dnaW5nLklORk86Ci0gICAgICAgICAg
ICBzZWxmLm51bV9mYWlsdXJlcyArPSAxCi0gICAgICAgIGlmIHNlbGYubGFzdF9sZXZlbG5vICE9
IHJlY29yZC5sZXZlbG5vOgotICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgICAgIHNlbGYubGFz
dF9sZXZlbG5vID0gcmVjb3JkLmxldmVsbm8KLSAgICAgICAgcHJlZml4ID0gJycKLSAgICAgICAg
bXNnID0gcmVjb3JkLmdldE1lc3NhZ2UoKQotICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+IGxv
Z2dpbmcuSU5GTyBhbmQgbXNnOgotICAgICAgICAgICAgcHJlZml4ID0gJyVzOiAnICUgcmVjb3Jk
LmxldmVsbmFtZQotICAgICAgICBwcmludCAnJXMlcycgJSAocHJlZml4LCBtc2cpCi0KLQotZGVm
IG1haW4oYXJncyk6Ci0gICAgIiIiQm9vdHN0cmFwIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUg
b2JqZWN0IHJlZmVyZW5jZXMgd2UgbmVlZCBhbmQgY2FsbHMgcmVhbF9tYWluKCkuIiIiCi0gICAg
b3B0aW9ucywgdGFyZ2V0X29wdGlvbnMgPSBwYXJzZV9vcHRpb25zKGFyZ3MpCi0KLSAgICBsb2dn
ZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCi0gICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5G
TykKLSAgICBpZiBvcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcu
REVCVUcKLSAgICAgICAgbG9nX2hhbmRsZXIgPSBEZWJ1Z0xvZ0hhbmRsZXIoKQotICAgIGVsc2U6
Ci0gICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTwotICAgICAgICBsb2dfaGFuZGxlciA9
IE5vcm1hbExvZ0hhbmRsZXIoKQotCi0gICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQot
ICAgIGxvZ2dlci5zZXRMZXZlbChsb2dfbGV2ZWwpCi0gICAgbG9nZ2VyLmFkZEhhbmRsZXIobG9n
X2hhbmRsZXIpCi0KLSAgICBob3N0ID0gSG9zdCgpCi0gICAgdGFyZ2V0X3BvcnRfb2JqID0gaG9z
dC5wb3J0X2ZhY3RvcnkuZ2V0KE5vbmUsIHRhcmdldF9vcHRpb25zKQotICAgIGhvc3RfcG9ydF9v
YmogPSBnZXRfaG9zdF9wb3J0X29iamVjdChob3N0LnBvcnRfZmFjdG9yeSwgb3B0aW9ucykKLSAg
ICBpZiBub3QgaG9zdF9wb3J0X29iaiBvciBub3QgdGFyZ2V0X3BvcnRfb2JqOgotICAgICAgICBy
ZXR1cm4gMQotCi0gICAgdXJsX2ZldGNoZXIgPSB1cmxmZXRjaGVyLlVybEZldGNoZXIoaG9zdF9w
b3J0X29iai5fZmlsZXN5c3RlbSkKLSAgICBzY21fb2JqID0gc2NtLmRlZmF1bHRfc2NtKCkKLQot
ICAgICMgV2UgdXNlIHRoZSBkZWZhdWx0IHppcCBmYWN0b3J5IG1ldGhvZC4KLSAgICB6aXBfZmFj
dG9yeSA9IE5vbmUKLQotICAgICMgRklYTUU6IFNDTSBtb2R1bGUgZG9lc24ndCBoYW5kbGUgcGF0
aHMgdGhhdCBhcmVuJ3QgcmVsYXRpdmUgdG8gdGhlIGNoZWNrb3V0X3Jvb3QgY29uc2lzdGVudGx5
LgotICAgIGhvc3RfcG9ydF9vYmouX2ZpbGVzeXN0ZW0uY2hkaXIoc2NtX29iai5jaGVja291dF9y
b290KQotCi0gICAgcmV0X2NvZGUgPSByZWFsX21haW4ob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMs
IGhvc3RfcG9ydF9vYmosIHRhcmdldF9wb3J0X29iaiwgdXJsX2ZldGNoZXIsIHppcF9mYWN0b3J5
LCBzY21fb2JqKQotICAgIGlmIG5vdCByZXRfY29kZSBhbmQgbG9nX2hhbmRsZXIubnVtX2ZhaWx1
cmVzOgotICAgICAgICByZXRfY29kZSA9IDEKLSAgICBwcmludCAnJwotICAgIGlmIHJldF9jb2Rl
OgotICAgICAgICBwcmludCAnUmViYXNlbGluaW5nIGZhaWxlZC4nCi0gICAgZWxzZToKLSAgICAg
ICAgcHJpbnQgJ1JlYmFzZWxpbmluZyBzdWNjZWVkZWQuJwotICAgIHJldHVybiByZXRfY29kZQot
Ci0KLWRlZiByZWFsX21haW4ob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMsIGhvc3RfcG9ydF9vYmos
IHRhcmdldF9wb3J0X29iaiwgdXJsX2ZldGNoZXIsCi0gICAgICAgICAgICAgIHppcF9mYWN0b3J5
LCBzY21fb2JqKToKLSAgICAiIiJNYWluIGZ1bmN0aW9uIHRvIHByb2R1Y2UgbmV3IGJhc2VsaW5l
cy4gVGhlIFJlYmFzZWxpbmVyIG9iamVjdCB1c2VzIHR3bwotICAgIGRpZmZlcmVudCBQb3J0IG9i
amVjdHMgLSBvbmUgdG8gcmVwcmVzZW50IHRoZSBtYWNoaW5lIHRoZSBvYmplY3QgaXMgcnVubmlu
ZwotICAgIG9uLCBhbmQgb25lIHRvIHJlcHJlc2VudCB0aGUgcG9ydCB3aG9zZSBleHBlY3RhdGlv
bnMgYXJlIGJlaW5nIHVwZGF0ZWQuCi0gICAgRS5nLiwgeW91IGNhbiBydW4gdGhlIHNjcmlwdCBv
biBhIG1hYyBhbmQgcmViYXNlbGluZSB0aGUgJ3dpbicgcG9ydC4KLQotICAgIEFyZ3M6Ci0gICAg
ICAgIG9wdGlvbnM6IGNvbW1hbmQtbGluZSBhcmd1bWVudCB1c2VkIGZvciB0aGUgaG9zdF9wb3J0
X29iaiAoc2VlIGJlbG93KQotICAgICAgICB0YXJnZXRfb3B0aW9uczogY29tbWFuZF9saW5lIGFy
Z3VtZW50IHVzZWQgZm9yIHRoZSB0YXJnZXRfcG9ydF9vYmouCi0gICAgICAgICAgICBUaGlzIG9i
amVjdCBtYXkgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgdmFsdWVzIHRoYW4gfG9wdGlvbnN8Lgot
ICAgICAgICBob3N0X3BvcnRfb2JqOiBhIFBvcnQgb2JqZWN0IGZvciB0aGUgcGxhdGZvcm0gdGhl
IHNjcmlwdCBpcyBydW5uaW5nCi0gICAgICAgICAgICBvbi4gVGhpcyBpcyB1c2VkIHRvIHByb2R1
Y2UgaW1hZ2UgYW5kIHRleHQgZGlmZnMsIG1vc3RseSwgYW5kCi0gICAgICAgICAgICBpcyB1c3Vh
bGx5IGFjcXVpcmVkIGZyb20gZ2V0X2hvc3RfcG9ydF9vYmooKS4KLSAgICAgICAgdGFyZ2V0X3Bv
cnRfb2JqOiBhIFBvcnQgb2JqIHJlcHJlc2VudGluZyB0aGUgcG9ydCBnZXR0aW5nIHJlYmFzZWxp
bmVkLgotICAgICAgICAgICAgVGhpcyBpcyB1c2VkIHRvIGZpbmQgdGhlIGV4cGVjdGF0aW9ucyBm
aWxlLCB0aGUgYmFzZWxpbmUgcGF0aHMsCi0gICAgICAgICAgICBldGMuCi0gICAgICAgIHVybF9m
ZXRjaGVyOiBvYmplY3QgdXNlZCB0byBkb3dubG9hZCB0aGUgYnVpbGQgYXJjaGl2ZXMgZnJvbSB0
aGUgYm90cwotICAgICAgICB6aXBfZmFjdG9yeTogZmFjdG9yeSBmdW5jdGlvbiB1c2VkIHRvIGNy
ZWF0ZSB6aXAgZmlsZSBvYmplY3RzIGZvcgotICAgICAgICAgICAgdGhlIGFyY2hpdmVzLgotICAg
ICAgICBzY21fb2JqOiBvYmplY3QgdXNlZCB0byBhZGQgbmV3IGJhc2VsaW5lcyB0byB0aGUgc291
cmNlIGNvbnRyb2wgc3lzdGVtLgotICAgICIiIgotICAgIG9wdGlvbnMuaHRtbF9kaXJlY3Rvcnkg
PSBzZXR1cF9odG1sX2RpcmVjdG9yeShob3N0X3BvcnRfb2JqLl9maWxlc3lzdGVtLCBvcHRpb25z
Lmh0bWxfZGlyZWN0b3J5KQotICAgIGFsbF9wbGF0Zm9ybXMgPSB0YXJnZXRfcG9ydF9vYmouYWxs
X2Jhc2VsaW5lX3ZhcmlhbnRzKCkKLSAgICBpZiBvcHRpb25zLnBsYXRmb3JtczoKLSAgICAgICAg
YmFpbCA9IEZhbHNlCi0gICAgICAgIGZvciBwbGF0Zm9ybSBpbiBvcHRpb25zLnBsYXRmb3JtczoK
LSAgICAgICAgICAgIGlmIG5vdCBwbGF0Zm9ybSBpbiBhbGxfcGxhdGZvcm1zOgotICAgICAgICAg
ICAgICAgIF9sb2cuZXJyb3IoJ0ludmFsaWQgcGxhdGZvcm06ICIlcyInICUgKHBsYXRmb3JtKSkK
LSAgICAgICAgICAgICAgICBiYWlsID0gVHJ1ZQotICAgICAgICBpZiBiYWlsOgotICAgICAgICAg
ICAgcmV0dXJuIDEKLSAgICAgICAgcmViYXNlbGluZV9wbGF0Zm9ybXMgPSBvcHRpb25zLnBsYXRm
b3JtcwotICAgIGVsc2U6Ci0gICAgICAgIHJlYmFzZWxpbmVfcGxhdGZvcm1zID0gYWxsX3BsYXRm
b3JtcwotCi0gICAgIyBGSVhNRTogVGhlc2UgbG9nIG1lc3NhZ2VzIHdpbGwgYmUgd3JvbmcgaWYg
cG9ydHMgc3RvcmUgYmFzZWxpbmVzIG91dHNpZGUKLSAgICAjIG9mIGxheW91dF90ZXN0c19kaXIo
KSwgYnV0IHRoZSBjb2RlIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICBsYXlvdXRfdGVzdHNf
ZGlyID0gdGFyZ2V0X3BvcnRfb2JqLmxheW91dF90ZXN0c19kaXIoKQotICAgIGV4cGVjdGF0aW9u
c19wYXRoID0gdGFyZ2V0X3BvcnRfb2JqLnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgp
Ci0gICAgX2xvZy5pbmZvKCdVc2luZyAlcycgJSBsYXlvdXRfdGVzdHNfZGlyKQotICAgIF9sb2cu
aW5mbygnICBhbmQgJXMnICUgZXhwZWN0YXRpb25zX3BhdGgpCi0KLSAgICByZWJhc2VsaW5lZF90
ZXN0cyA9IHNldCgpCi0gICAgbG9nZ2VkX2JlZm9yZSA9IEZhbHNlCi0gICAgZm9yIHBsYXRmb3Jt
IGluIHJlYmFzZWxpbmVfcGxhdGZvcm1zOgotICAgICAgICByZWJhc2VsaW5lciA9IFJlYmFzZWxp
bmVyKGhvc3RfcG9ydF9vYmosIHRhcmdldF9wb3J0X29iaiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwbGF0Zm9ybSwgb3B0aW9ucywgdXJsX2ZldGNoZXIsIHppcF9mYWN0b3J5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjbV9vYmosIGxvZ2dlZF9iZWZv
cmUpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygnJykKLSAgICAgICAgbG9nX2Rhc2hlZF9zdHJpbmco
J1JlYmFzZWxpbmUgc3RhcnRlZCcsIHBsYXRmb3JtKQotICAgICAgICBpZiByZWJhc2VsaW5lci5y
dW4oKToKLSAgICAgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2VsaW5lIGRvbmUnLCBw
bGF0Zm9ybSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdS
ZWJhc2VsaW5lIGZhaWxlZCcsIHBsYXRmb3JtKQotCi0gICAgICAgIHJlYmFzZWxpbmVkX3Rlc3Rz
IHw9IHNldChyZWJhc2VsaW5lci5nZXRfcmViYXNlbGluZWRfdGVzdHMoKSkKLSAgICAgICAgbG9n
Z2VkX2JlZm9yZSA9IHJlYmFzZWxpbmVyLmRpZF9sb2cKLQotICAgIGlmIHJlYmFzZWxpbmVkX3Rl
c3RzOgotICAgICAgICByZWJhc2VsaW5lci5yZW1vdmVfcmViYXNlbGluaW5nX2V4cGVjdGF0aW9u
cyhyZWJhc2VsaW5lZF90ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3B0aW9ucy5iYWNrdXApCi0KLSAgICBfbG9nLmRlYnVnKCcnKQot
ICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24gc3Rh
cnRlZCcpCi0gICAgaHRtbF9nZW5lcmF0b3IgPSBIdG1sR2VuZXJhdG9yKGhvc3RfcG9ydF9vYmos
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9wb3J0X29iaiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmViYXNlbGluZV9wbGF0Zm9ybXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlYmFzZWxpbmVkX3Rlc3RzKQotICAgIGh0bWxfZ2VuZXJh
dG9yLmdlbmVyYXRlX2h0bWwoKQotICAgIGlmIG5vdCBvcHRpb25zLnF1aWV0OgotICAgICAgICBo
dG1sX2dlbmVyYXRvci5zaG93X2h0bWwoKQotICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2Vs
aW5pbmcgcmVzdWx0IGNvbXBhcmlzb24gZG9uZScpCi0KLSAgICByZXR1cm4gMAotCi0KLWlmICdf
X21haW5fXycgPT0gX19uYW1lX186Ci0gICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b19iZV9tb3ZlZC9yZWJhc2VsaW5l
X2Nocm9taXVtX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9fYmVfbW92ZWQvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3Qu
cHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyY2M5ODM3ZjE5ZWY4Nzc4NTM0YmQy
NWIyOGI0M2YxZmQzYmVlOTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b19iZV9tb3ZlZC9yZWJhc2VsaW5lX2No
cm9taXVtX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQwNSAr
MCwwIEBACi0jIS91c3IvYmluL3B5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0j
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlVuaXQgdGVz
dHMgZm9yIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5LiIiIgotCi1pbXBvcnQg
dW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9u
cwotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCB1cmxmZXRjaGVyX21vY2sKLWZy
b20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKLQotZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtIGltcG9ydCB6aXBmaWxlc2V0X21vY2sKLWZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbSBpbXBvcnQgb3V0cHV0Y2FwdHVyZQotZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBTY3JpcHRFcnJvcgotCi1mcm9tIHdl
YmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uc2NtX21vY2sgaW1wb3J0IE1vY2tTQ00KLWZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS51c2VyX21vY2sgaW1wb3J0IE1vY2tVc2VyCi0KLWZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCBwb3J0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0LnRlc3QgaW1wb3J0IHVuaXRfdGVzdF9maWxlc3lzdGVtCi1mcm9tIHdlYmtpdHB5
LnRvX2JlX21vdmVkIGltcG9ydCByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cwotCi0K
LWNsYXNzIE1vY2tQb3J0KG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX2Rp
ZmZfZXhpc3RzKToKLSAgICAgICAgc2VsZi5pbWFnZV9kaWZmX2V4aXN0cyA9IGltYWdlX2RpZmZf
ZXhpc3RzCi0KLSAgICBkZWYgY2hlY2tfaW1hZ2VfZGlmZihzZWxmLCBvdmVycmlkZV9zdGVwLCBs
b2dnaW5nKToKLSAgICAgICAgcmV0dXJuIHNlbGYuaW1hZ2VfZGlmZl9leGlzdHMKLQotCi1jbGFz
cyBNb2NrUG9ydEZhY3Rvcnkob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmln
X2V4cGVjdGF0aW9ucyk6Ci0gICAgICAgIHNlbGYuY29uZmlnX2V4cGVjdGF0aW9ucyA9IGNvbmZp
Z19leHBlY3RhdGlvbnMKLQotICAgIGRlZiBnZXQoc2VsZiwgcG9ydF9uYW1lPU5vbmUsIG9wdGlv
bnM9Tm9uZSk6Ci0gICAgICAgIHJldHVybiBNb2NrUG9ydChzZWxmLmNvbmZpZ19leHBlY3RhdGlv
bnNbb3B0aW9ucy5jb25maWd1cmF0aW9uXSkKLQotCi1BUkNISVZFX1VSTCA9ICdodHRwOi8vbG9j
YWxob3N0L2xheW91dF90ZXN0X3Jlc3VsdHMnCi0KLQotZGVmIHRlc3Rfb3B0aW9ucygpOgotICAg
IHJldHVybiBNb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPU5vbmUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJhY2t1cD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaHRtbF9kaXJlY3Rvcnk9Jy90bXAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmNoaXZlX3VybD1BUkNISVZFX1VSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yY2VfYXJjaGl2ZV91cmw9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmVyYm9zZT1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVp
ZXQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3Jtcz1Ob25l
KQotCi0KLWRlZiB0ZXN0X2hvc3RfcG9ydF9hbmRfZmlsZXN5c3RlbShvcHRpb25zLCBleHBlY3Rh
dGlvbnMpOgotICAgIGhvc3QgPSBNb2NrSG9zdCgpCi0gICAgaG9zdF9wb3J0X29iaiA9IGhvc3Qu
cG9ydF9mYWN0b3J5LmdldCgndGVzdCcsIG9wdGlvbnMpCi0KLSAgICBleHBlY3RhdGlvbnNfcGF0
aCA9IGhvc3RfcG9ydF9vYmoucGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCkKLSAgICBo
b3N0X3BvcnRfb2JqLmZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGV4cGVjdGF0aW9uc19wYXRo
LCBleHBlY3RhdGlvbnMpCi0gICAgcmV0dXJuIChob3N0X3BvcnRfb2JqLCBob3N0X3BvcnRfb2Jq
LmZpbGVzeXN0ZW0pCi0KLQotZGVmIHRlc3RfdXJsX2ZldGNoZXIoZmlsZXN5c3RlbSk6Ci0gICAg
dXJscyA9IHsKLSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9NYWMxMF82Lyc6ICc8YSBo
cmVmPSI0LyI+JywKLSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9NYWMxMF81Lyc6ICc8
YSBocmVmPSIxLyI+PGEgaHJlZj0iMi8iPicsCi0gICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJr
aXRfTWFjMTBfNl9fQ0dfLyc6ICc8YSBocmVmPSI0LyI+JywKLSAgICAgICAgQVJDSElWRV9VUkwg
KyAnL1dlYmtpdF9NYWMxMF81X19DR18vJzogJzxhIGhyZWY9IjEvIj48YSBocmVmPSIyLyI+JywK
LSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9XaW43Lyc6ICc8YSBocmVmPSIxLyI+JywK
LSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9WaXN0YS8nOiAnPGEgaHJlZj0iMS8iPics
Ci0gICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfV2luLyc6ICc8YSBocmVmPSIxLyI+JywK
LSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9MaW51eC8nOiAnPGEgaHJlZj0iMS8iPics
Ci0gICAgfQotICAgIHJldHVybiB1cmxmZXRjaGVyX21vY2subWFrZV9mZXRjaGVyX2Nscyh1cmxz
KShmaWxlc3lzdGVtKQotCi0KLWRlZiB0ZXN0X3ppcF9mYWN0b3J5KCk6Ci0gICAgemlwaGFzaGVz
ID0gewotICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X01hYzEwXzUvMi9sYXlvdXQtdGVz
dC1yZXN1bHRzLnppcCc6IHsKLSAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1
cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC50eHQnOiAnbmV3LWltYWdlLXR4dCcsCi0gICAgICAg
ICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwu
Y2hlY2tzdW0nOiAnbmV3LWltYWdlLWNoZWNrc3VtJywKLSAgICAgICAgICAgICdsYXlvdXQtdGVz
dC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5wbmcnOiAnbmV3LWltYWdl
LXBuZycsCi0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3Rl
ZC9pbWFnZV9jaGVja3N1bS1hY3R1YWwudHh0JzogJ3BuZy1jb21tZW50LXR4dCcsCi0gICAgICAg
ICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1
bS1hY3R1YWwuY2hlY2tzdW0nOiAnMDEyMzQ1Njc4OScsCi0gICAgICAgICAgICAnbGF5b3V0LXRl
c3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1hY3R1YWwucG5nJzog
J3RFWHRjaGVja3N1bVx4MDAwMTIzNDU2Nzg5JywKLSAgICAgICAgfSwKLSAgICAgICAgQVJDSElW
RV9VUkwgKyAnL1dlYmtpdF9NYWMxMF82LzQvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAnOiB7Ci0g
ICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1h
Y3R1YWwudHh0JzogJ25ldy1pbWFnZS10eHQnLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJl
c3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzogJ25ldy1pbWFn
ZS1jaGVja3N1bScsCi0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9l
eHBlY3RlZC9pbWFnZS1hY3R1YWwucG5nJzogJ25ldy1pbWFnZS1wbmcnLAotICAgICAgICB9LAot
ICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X01hYzEwXzVfX0NHXy8yL2xheW91dC10ZXN0
LXJlc3VsdHMuemlwJzogewotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVy
ZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6ICduZXctaW1hZ2UtdHh0JywKLSAgICAgICAg
ICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5j
aGVja3N1bSc6ICduZXctaW1hZ2UtY2hlY2tzdW0nLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0
LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6ICduZXctaW1hZ2Ut
cG5nJywKLSAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVk
L2ltYWdlX2NoZWNrc3VtLWFjdHVhbC50eHQnOiAncG5nLWNvbW1lbnQtdHh0JywKLSAgICAgICAg
ICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3Vt
LWFjdHVhbC5jaGVja3N1bSc6ICcwMTIzNDU2Nzg5JywKLSAgICAgICAgICAgICdsYXlvdXQtdGVz
dC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWFjdHVhbC5wbmcnOiAn
dEVYdGNoZWNrc3VtXHgwMDAxMjM0NTY3ODknLAotICAgICAgICB9LAotICAgICAgICBBUkNISVZF
X1VSTCArICcvV2Via2l0X01hYzEwXzZfX0NHXy80L2xheW91dC10ZXN0LXJlc3VsdHMuemlwJzog
ewotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1h
Z2UtYWN0dWFsLnR4dCc6ICduZXctaW1hZ2UtdHh0JywKLSAgICAgICAgICAgICdsYXlvdXQtdGVz
dC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5jaGVja3N1bSc6ICduZXct
aW1hZ2UtY2hlY2tzdW0nLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVy
ZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6ICduZXctaW1hZ2UtcG5nJywKLSAgICAgICAg
fSwKLSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9WaXN0YS8xL2xheW91dC10ZXN0LXJl
c3VsdHMuemlwJzogewotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMv
ZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6ICd3aW4taW1hZ2UtdHh0JywKLSAgICAgICAgICAg
ICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5jaGVj
a3N1bSc6ICd3aW4taW1hZ2UtY2hlY2tzdW0nLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJl
c3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6ICd3aW4taW1hZ2UtcG5n
JywKLSAgICAgICAgfSwKLSAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9XaW43LzEvbGF5
b3V0LXRlc3QtcmVzdWx0cy56aXAnOiB7Ci0gICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0
cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwudHh0JzogJ3dpbi1pbWFnZS10eHQnLAot
ICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2Ut
YWN0dWFsLmNoZWNrc3VtJzogJ3dpbi1pbWFnZS1jaGVja3N1bScsCi0gICAgICAgICAgICAnbGF5
b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwucG5nJzogJ3dp
bi1pbWFnZS1wbmcnLAotICAgICAgICB9LAotICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0
X1dpbi8xL2xheW91dC10ZXN0LXJlc3VsdHMuemlwJzogewotICAgICAgICAgICAgJ2xheW91dC10
ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6ICd3aW4taW1h
Z2UtdHh0JywKLSAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVj
dGVkL2ltYWdlLWFjdHVhbC5jaGVja3N1bSc6ICd3aW4taW1hZ2UtY2hlY2tzdW0nLAotICAgICAg
ICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFs
LnBuZyc6ICd3aW4taW1hZ2UtcG5nJywKLSAgICAgICAgfSwKLSAgICAgICAgQVJDSElWRV9VUkwg
KyAnL1dlYmtpdF9MaW51eC8xL2xheW91dC10ZXN0LXJlc3VsdHMuemlwJzogewotICAgICAgICAg
ICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4
dCc6ICd3aW4taW1hZ2UtdHh0JywKLSAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2Zh
aWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5jaGVja3N1bSc6ICd3aW4taW1hZ2UtY2hlY2tz
dW0nLAotICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQv
aW1hZ2UtYWN0dWFsLnBuZyc6ICd3aW4taW1hZ2UtcG5nJywKLSAgICAgICAgfSwKLSAgICB9Ci0g
ICAgcmV0dXJuIHppcGZpbGVzZXRfbW9jay5tYWtlX2ZhY3RvcnkoemlwaGFzaGVzKQotCi0KLWRl
ZiB0ZXN0X2FyY2hpdmUob3JpZ19hcmNoaXZlX2RpY3QpOgotICAgIG5ld19hcmNoaXZlX2RpY3Qg
PSB7fQotICAgIGZvciBwbGF0Zm9ybSwgZGlybmFtZSBpbiBvcmlnX2FyY2hpdmVfZGljdC5pdGVy
aXRlbXMoKToKLSAgICAgICAgIyBUaGlzIGlzIGEgZ2lhbnQgaGFjay4gOigKLSAgICAgICAgcGxh
dGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCdjaHJvbWl1bScsICd0ZXN0JykKLSAgICAgICAgcGxh
dGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCd0ZXN0LWNnJywgJ3Rlc3QnKQotICAgICAgICBuZXdf
YXJjaGl2ZV9kaWN0W3BsYXRmb3JtXSA9IGRpcm5hbWUKLSAgICByZXR1cm4gbmV3X2FyY2hpdmVf
ZGljdAotCi0KLWNsYXNzIFRlc3RHZXRIb3N0UG9ydE9iamVjdCh1bml0dGVzdC5UZXN0Q2FzZSk6
Ci0gICAgZGVmIGFzc2VydF9yZXN1bHQoc2VsZiwgcmVsZWFzZV9wcmVzZW50LCBkZWJ1Z19wcmVz
ZW50LCB2YWxpZF9wb3J0X29iaik6Ci0gICAgICAgICMgVGVzdHMgd2hldGhlciB3ZSBnZXQgYSB2
YWxpZCBwb3J0IG9iamVjdCByZXR1cm5lZCB3aGVuIHdlIGNsYWltCi0gICAgICAgICMgdGhhdCBJ
bWFnZSBkaWZmIGlzIChvciBpc24ndCkgcHJlc2VudCBpbiB0aGUgdHdvIGNvbmZpZ3MuCi0gICAg
ICAgIHBvcnRfZmFjdG9yeSA9IE1vY2tQb3J0RmFjdG9yeSh7J1JlbGVhc2UnOiByZWxlYXNlX3By
ZXNlbnQsICdEZWJ1Zyc6IGRlYnVnX3ByZXNlbnR9KQotICAgICAgICBvcHRpb25zID0gTW9ja09w
dGlvbnMoY29uZmlndXJhdGlvbj1Ob25lLCBodG1sX2RpcmVjdG9yeT0nL3RtcCcpCi0gICAgICAg
IHBvcnRfb2JqID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMuZ2V0X2hvc3RfcG9y
dF9vYmplY3QocG9ydF9mYWN0b3J5LCBvcHRpb25zKQotICAgICAgICBpZiB2YWxpZF9wb3J0X29i
ajoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocG9ydF9vYmosIE5vbmUpCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnRfb2JqLCBOb25lKQot
Ci0gICAgZGVmIHRlc3RfZ2V0X2hvc3RfcG9ydF9vYmplY3Qoc2VsZik6Ci0gICAgICAgICMgVGVz
dCB3aGV0aGVyIHdlIGdldCBhIHZhbGlkIHBvcnQgb2JqZWN0IGJhY2sgZm9yIHRoZSBmb3VyCi0g
ICAgICAgICMgcG9zc2libGUgY2FzZXMgb2YgaGF2aW5nIEltYWdlRGlmZnMgYnVpbHQuIEl0IHNo
b3VsZCB3b3JrIHdoZW4KLSAgICAgICAgIyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgYmluYXJ5IHBy
ZXNlbnQuCi0gICAgICAgIHNlbGYuYXNzZXJ0X3Jlc3VsdChGYWxzZSwgRmFsc2UsIEZhbHNlKQot
ICAgICAgICBzZWxmLmFzc2VydF9yZXN1bHQoVHJ1ZSwgRmFsc2UsIFRydWUpCi0gICAgICAgIHNl
bGYuYXNzZXJ0X3Jlc3VsdChGYWxzZSwgVHJ1ZSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRf
cmVzdWx0KFRydWUsIFRydWUsIFRydWUpCi0KLQotY2xhc3MgVGVzdE9wdGlvbnModW5pdHRlc3Qu
VGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X3BhcnNlX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIChv
cHRpb25zLCB0YXJnZXRfb3B0aW9ucykgPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0
cy5wYXJzZV9vcHRpb25zKFtdKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyZ2V0X29wdGlv
bnMuY2hyb21pdW0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9ucy50b2xlcmFuY2Us
IDApCi0KLSAgICAgICAgKG9wdGlvbnMsIHRhcmdldF9vcHRpb25zKSA9IHJlYmFzZWxpbmVfY2hy
b21pdW1fd2Via2l0X3Rlc3RzLnBhcnNlX29wdGlvbnMoWyctLXRhcmdldC1wbGF0Zm9ybScsICdx
dCddKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIodGFyZ2V0X29wdGlvbnMsICdj
aHJvbWl1bScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbnMudG9sZXJhbmNlLCAw
KQotCi0KLWNsYXNzIFRlc3RSZWJhc2VsaW5lcih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVm
IHNldFVwKHNlbGYpOgotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnX29yaWdfYXJjaGl2
ZScpOgotICAgICAgICAgICAgc2VsZi5fb3JpZ19hcmNoaXZlID0gcmViYXNlbGluZV9jaHJvbWl1
bV93ZWJraXRfdGVzdHMuQVJDSElWRV9ESVJfTkFNRV9ESUNUCi0gICAgICAgICAgICByZWJhc2Vs
aW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5BUkNISVZFX0RJUl9OQU1FX0RJQ1QgPSB0ZXN0X2Fy
Y2hpdmUoc2VsZi5fb3JpZ19hcmNoaXZlKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAg
ICAgICByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5BUkNISVZFX0RJUl9OQU1FX0RJ
Q1QgPSBzZWxmLl9vcmlnX2FyY2hpdmUKLQotICAgIGRlZiBtYWtlX3JlYmFzZWxpbmVyKHNlbGYs
IGV4cGVjdGF0aW9ucyk6Ci0gICAgICAgIG9wdGlvbnMgPSB0ZXN0X29wdGlvbnMoKQotICAgICAg
ICBob3N0X3BvcnRfb2JqLCBmaWxlc3lzdGVtID0gdGVzdF9ob3N0X3BvcnRfYW5kX2ZpbGVzeXN0
ZW0ob3B0aW9ucywgZXhwZWN0YXRpb25zKQotCi0gICAgICAgIHRhcmdldF9vcHRpb25zID0gb3B0
aW9ucwotICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQotICAgICAgICB0YXJnZXRfcG9ydF9vYmog
PSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3QnLCB0YXJnZXRfb3B0aW9ucywgZmlsZXN5c3Rl
bT1maWxlc3lzdGVtKQotICAgICAgICB0YXJnZXRfcG9ydF9vYmouX2V4cGVjdGF0aW9ucyA9IGV4
cGVjdGF0aW9ucwotICAgICAgICBwbGF0Zm9ybSA9IHRhcmdldF9wb3J0X29iai5uYW1lKCkKLQot
ICAgICAgICB1cmxfZmV0Y2hlciA9IHRlc3RfdXJsX2ZldGNoZXIoZmlsZXN5c3RlbSkKLSAgICAg
ICAgemlwX2ZhY3RvcnkgPSB0ZXN0X3ppcF9mYWN0b3J5KCkKLSAgICAgICAgbW9ja19zY20gPSBN
b2NrU0NNKGZpbGVzeXN0ZW0pCi0gICAgICAgIGZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rv
cnkobW9ja19zY20uY2hlY2tvdXRfcm9vdCkKLQotICAgICAgICAjIEZJWE1FOiBTQ00gbW9kdWxl
IGRvZXNuJ3QgaGFuZGxlIHBhdGhzIHRoYXQgYXJlbid0IHJlbGF0aXZlIHRvIHRoZSBjaGVja291
dF9yb290IGNvbnNpc3RlbnRseS4KLSAgICAgICAgZmlsZXN5c3RlbS5jaGRpcigiL3Rlc3QuY2hl
Y2tvdXQiKQotCi0gICAgICAgIHJlYmFzZWxpbmVyID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJr
aXRfdGVzdHMuUmViYXNlbGluZXIoaG9zdF9wb3J0X29iaiwKLSAgICAgICAgICAgIHRhcmdldF9w
b3J0X29iaiwgcGxhdGZvcm0sIG9wdGlvbnMsIHVybF9mZXRjaGVyLCB6aXBfZmFjdG9yeSwgbW9j
a19zY20pCi0gICAgICAgIHJldHVybiByZWJhc2VsaW5lciwgZmlsZXN5c3RlbQotCi0gICAgZGVm
IHRlc3Rfbm9vcChzZWxmKToKLSAgICAgICAgIyB0aGlzIG1ldGhvZCB0ZXN0cyB0aGF0IHdhcyBj
YW4gYXQgbGVhc3QgaW5zdGFudGlhdGUgYW4gb2JqZWN0LCBldmVuCi0gICAgICAgICMgaWYgdGhl
cmUgaXMgbm90aGluZyB0byBkby4KLSAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBz
ZWxmLm1ha2VfcmViYXNlbGluZXIoIiIpCi0gICAgICAgIHJlYmFzZWxpbmVyLnJ1bigpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVzeXN0ZW0ud3JpdHRlbl9maWxlcyksIDEpCi0K
LSAgICBkZWYgdGVzdF9yZWJhc2VsaW5pbmdfdGVzdHMoc2VsZik6Ci0gICAgICAgIHJlYmFzZWxp
bmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKAotICAgICAgICAgICAgIkJV
R1ggUkVCQVNFTElORSBNQUMgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sID0gSU1BR0Ui
KQotICAgICAgICBjb21waWxlX3N1Y2Nlc3MgPSByZWJhc2VsaW5lci5fY29tcGlsZV9yZWJhc2Vs
aW5pbmdfdGVzdHMoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tcGlsZV9zdWNjZXNzKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChbJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0
bWwnXSksIHJlYmFzZWxpbmVyLl9yZWJhc2VsaW5pbmdfdGVzdHMpCi0KLSAgICBkZWYgdGVzdF9y
ZWJhc2VsaW5pbmdfdGVzdHNfc2hvdWxkX2lnbm9yZV9yZWZ0ZXN0cyhzZWxmKToKLSAgICAgICAg
cmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoCi0gICAgICAg
ICAgICAiQlVHWCBSRUJBU0VMSU5FIDogZmFpbHVyZXMvZXhwZWN0ZWQvcmVmdGVzdC5odG1sID0g
SU1BR0UiKQotICAgICAgICBjb21waWxlX3N1Y2Nlc3MgPSByZWJhc2VsaW5lci5fY29tcGlsZV9y
ZWJhc2VsaW5pbmdfdGVzdHMoKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvbXBpbGVfc3Vj
Y2VzcykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWJhc2VsaW5lci5fcmViYXNlbGluaW5n
X3Rlc3RzKQotCi0gICAgZGVmIHRlc3Rfb25lX3BsYXRmb3JtKHNlbGYpOgotICAgICAgICByZWJh
c2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcigKLSAgICAgICAgICAg
ICJCVUdYIFJFQkFTRUxJTkUgTUFDIDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCA9IElN
QUdFIikKLQotICAgICAgICByZWJhc2VsaW5lci5ydW4oKQotICAgICAgICAjIFdlIGV4cGVjdCB0
byBoYXZlIHdyaXR0ZW4gMTMgZmlsZXMgb3ZlciB0aGUgY291cnNlIG9mIHRoaXMgcmViYXNlbGlu
ZToKLSAgICAgICAgIyAqKSAzIGZpbGVzIGluIC9fX2ltX3RtcCBmb3IgdGhlIGV4dHJhY3RlZCBh
cmNoaXZlIG1lbWJlcnMKLSAgICAgICAgIyAqKSAzIG5ldyBiYXNlbGluZXMgdW5kZXIgJy90ZXN0
LmNoZWNrb3V0L0xheW91dFRlc3RzJwotICAgICAgICAjICopIDQgZmlsZXMgaW4gL3RtcCBmb3Ig
dGhlIG5ldyBhbmQgb2xkIGJhc2VsaW5lcyBpbiB0aGUgcmVzdWx0IGZpbGUKLSAgICAgICAgIyAg
ICAoLXtvbGQsbmV3fS57dHh0LHBuZ30KLSAgICAgICAgIyAqKSAxIHRleHQgZGlmZiBpbiAvdG1w
IGZvciB0aGUgcmVzdWx0IGZpbGUgKC1kaWZmLnR4dCkuCi0gICAgICAgICMgKikgMSBpbWFnZSBk
aWZmIGluIC90bXAgZm9yIHRoZSByZXN1bHQgZmlsZSAoLWRpZmYucG5nKS4KLSAgICAgICAgIyAq
KSAxIHVwZGF0ZWQgdGVzdF9leHBlY3RhdGlvbnMgZmlsZQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAxMykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLmNo
ZWNrc3VtJ10sICduZXctaW1hZ2UtY2hlY2tzdW0nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGZpbGVzeXN0ZW0uZmlsZXNbJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rl
c3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQucG5nJ10sICdu
ZXctaW1hZ2UtcG5nJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVz
WycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2Zh
aWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLnR4dCddLCAnbmV3LWltYWdlLXR4dCcpCi0K
LSAgICBkZWYgdGVzdF9hbGxfcGxhdGZvcm1zKHNlbGYpOgotICAgICAgICByZWJhc2VsaW5lciwg
ZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcigKLSAgICAgICAgICAgICJCVUdYIFJF
QkFTRUxJTkUgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sID0gSU1BR0UiKQotICAgICAg
ICByZWJhc2VsaW5lci5ydW4oKQotICAgICAgICAjIFNlZSBjb21tZW50IGluIHRlc3Rfb25lX3Bs
YXRmb3JtIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgMTMgd3JpdHRlbiB0ZXN0cy4KLSAgICAg
ICAgIyBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggdGhlIHJlYmFzZWxpbmUgaXMgbWFya2VkIGZvciBh
bGwgcGxhdGZvcm1zLCBlYWNoCi0gICAgICAgICMgcmViYXNlbGluZXIgb25seSBldmVyIGRvZXMg
b25lLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmls
ZXMpLCAxMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVz
dC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVz
L2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLmNoZWNrc3VtJ10sICduZXctaW1hZ2UtY2hlY2tzdW0n
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbJy90ZXN0LmNoZWNr
b3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvZmFpbHVyZXMvZXhwZWN0
ZWQvaW1hZ2UtZXhwZWN0ZWQucG5nJ10sICduZXctaW1hZ2UtcG5nJykKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVk
LnR4dCddLCAnbmV3LWltYWdlLXR4dCcpCi0KLSAgICBkZWYgdGVzdF9wbmdfZmlsZV93aXRoX2Nv
bW1lbnQoc2VsZik6Ci0gICAgICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtl
X3JlYmFzZWxpbmVyKAotICAgICAgICAgICAgIkJVR1ggUkVCQVNFTElORSBNQUMgOiBmYWlsdXJl
cy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS5odG1sID0gSU1BR0UiKQotICAgICAgICBjb21waWxl
X3N1Y2Nlc3MgPSByZWJhc2VsaW5lci5fY29tcGlsZV9yZWJhc2VsaW5pbmdfdGVzdHMoKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUoY29tcGlsZV9zdWNjZXNzKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNldChbJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwnXSksIHJl
YmFzZWxpbmVyLl9yZWJhc2VsaW5pbmdfdGVzdHMpCi0gICAgICAgIHJlYmFzZWxpbmVyLnJ1bigp
Ci0gICAgICAgICMgVGhlcmUgaXMgb25lIGxlc3MgZmlsZSB3cml0dGVuIHRoYW4gfHRlc3Rfb25l
X3BsYXRmb3JtfCBiZWNhdXNlIHdlIG9ubHkKLSAgICAgICAgIyB3cml0ZSAyIGV4cGVjdGF0aW9u
cyAodGhlIHBuZyBhbmQgdGhlIHR4dCBmaWxlKS4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChs
ZW4oZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMTIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
dGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3Rl
ZC5wbmcnXSwgJ3RFWHRjaGVja3N1bVx4MDAwMTIzNDU2Nzg5JykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4
cGVjdGVkLnR4dCddLCAncG5nLWNvbW1lbnQtdHh0JykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShmaWxlc3lzdGVtLmZpbGVzLmdldCgnL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vdGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBl
Y3RlZC5jaGVja3N1bScsIE5vbmUpKQotCi0gICAgZGVmIHRlc3RfcG5nX2ZpbGVfd2l0aF9jb21t
ZW50X3JlbW92ZV9vbGRfY2hlY2tzdW0oc2VsZik6Ci0gICAgICAgIHJlYmFzZWxpbmVyLCBmaWxl
c3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKAotICAgICAgICAgICAgIkJVR1ggUkVCQVNF
TElORSBNQUMgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS5odG1sID0gSU1BR0Ui
KQotICAgICAgICBmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3Vt
LWV4cGVjdGVkLnBuZyddID0gJ29sZCcKLSAgICAgICAgZmlsZXN5c3RlbS5maWxlc1snL3Rlc3Qu
Y2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9l
eHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5jaGVja3N1bSddID0gJ29sZCcKLSAgICAg
ICAgZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
dGVzdC1tYWMtbGVvcGFyZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3Rl
ZC50eHQnXSA9ICdvbGQnCi0KLSAgICAgICAgY29tcGlsZV9zdWNjZXNzID0gcmViYXNlbGluZXIu
X2NvbXBpbGVfcmViYXNlbGluaW5nX3Rlc3RzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNv
bXBpbGVfc3VjY2VzcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoWydmYWlsdXJlcy9l
eHBlY3RlZC9pbWFnZV9jaGVja3N1bS5odG1sJ10pLCByZWJhc2VsaW5lci5fcmViYXNlbGluaW5n
X3Rlc3RzKQotICAgICAgICByZWJhc2VsaW5lci5ydW4oKQotICAgICAgICAjIFRoZXJlIGlzIG9u
ZSBtb3JlIGZpbGUgd3JpdHRlbiB0aGFuIHx0ZXN0X3BuZ19maWxlX3dpdGhfY29tbWVudF9yZW1v
dmVfb2xkX2NoZWNrc3VtfAotICAgICAgICAjIGJlY2F1c2Ugd2UgYWxzbyBkZWxldGUgdGhlIG9s
ZCBjaGVja3N1bS4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZXN5c3RlbS53cml0
dGVuX2ZpbGVzKSwgMTMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxl
c1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9m
YWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5wbmcnXSwgJ3RFWHRjaGVj
a3N1bVx4MDAwMTIzNDU2Nzg5JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVt
LmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9w
YXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnR4dCddLCAncG5n
LWNvbW1lbnQtdHh0JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVz
LmdldCgnL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFy
ZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC5jaGVja3N1bScsIE5v
bmUpLCBOb25lKQotCi0gICAgZGVmIHRlc3RfcG5nX2ZpbGVfd2l0aF9jb21tZW50X2FzX2R1cGxp
Y2F0ZShzZWxmKToKLSAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2Vf
cmViYXNlbGluZXIoCi0gICAgICAgICAgICAiQlVHWCBSRUJBU0VMSU5FIE1BQyA6IGZhaWx1cmVz
L2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwgPSBJTUFHRSIpCi0gICAgICAgIGZpbGVzeXN0
ZW0uZmlsZXNbJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFjLXNu
b3dsZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnBuZydd
ID0gJ3RFWHRjaGVja3N1bVx4MDAwMTIzNDU2Nzg5JwotICAgICAgICBmaWxlc3lzdGVtLmZpbGVz
WycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1zbm93bGVvcGFy
ZC9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZV9jaGVja3N1bS1leHBlY3RlZC50eHQnXSA9ICdwbmct
Y29tbWVudC10eHQnCi0KLSAgICAgICAgY29tcGlsZV9zdWNjZXNzID0gcmViYXNlbGluZXIuX2Nv
bXBpbGVfcmViYXNlbGluaW5nX3Rlc3RzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBp
bGVfc3VjY2VzcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoWydmYWlsdXJlcy9leHBl
Y3RlZC9pbWFnZV9jaGVja3N1bS5odG1sJ10pLCByZWJhc2VsaW5lci5fcmViYXNlbGluaW5nX3Rl
c3RzKQotICAgICAgICByZWJhc2VsaW5lci5ydW4oKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGZpbGVzeXN0ZW0uZmlsZXMuZ2V0KCcvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS90ZXN0LW1hYy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVj
dGVkLnBuZycsIE5vbmUpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0
ZW0uZmlsZXMuZ2V0KCcvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1h
Yy1sZW9wYXJkL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLnR4dCcs
IE5vbmUpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXMu
Z2V0KCcvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJk
L2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLWV4cGVjdGVkLmNoZWNrc3VtJywgTm9u
ZSksIE5vbmUpCi0KLSAgICBkZWYgdGVzdF9kaWZmX2Jhc2VsaW5lc190eHQoc2VsZik6Ci0gICAg
ICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKCIiKQot
ICAgICAgICBwb3J0ID0gcmViYXNlbGluZXIuX3BvcnQKLSAgICAgICAgb3V0cHV0ID0gcG9ydC5l
eHBlY3RlZF90ZXh0KCdwYXNzZXMvdGV4dC5odG1sJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShyZWJhc2VsaW5lci5fZGlmZl9iYXNlbGluZXMob3V0cHV0LCBvdXRwdXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2ltYWdlPUZhbHNl
KSkKLQotICAgIGRlZiB0ZXN0X2RpZmZfYmFzZWxpbmVzX3BuZyhzZWxmKToKLSAgICAgICAgcmVi
YXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoJycpCi0gICAgICAg
IHBvcnQgPSByZWJhc2VsaW5lci5fcG9ydAotICAgICAgICBpbWFnZSA9IHBvcnQuZXhwZWN0ZWRf
aW1hZ2UoJ3Bhc3Nlcy9pbWFnZS5odG1sJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWJh
c2VsaW5lci5fZGlmZl9iYXNlbGluZXMoaW1hZ2UsIGltYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19pbWFnZT1UcnVlKSkKLQotCi1j
bGFzcyBUZXN0UmVhbE1haW4odW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxm
KToKLSAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19vcmlnX2FyY2hpdmUnKToKLSAgICAg
ICAgICAgIHNlbGYuX29yaWdfYXJjaGl2ZSA9IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rl
c3RzLkFSQ0hJVkVfRElSX05BTUVfRElDVAotICAgICAgICAgICAgcmViYXNlbGluZV9jaHJvbWl1
bV93ZWJraXRfdGVzdHMuQVJDSElWRV9ESVJfTkFNRV9ESUNUID0gdGVzdF9hcmNoaXZlKHNlbGYu
X29yaWdfYXJjaGl2ZSkKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgcmViYXNl
bGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMuQVJDSElWRV9ESVJfTkFNRV9ESUNUID0gc2VsZi5f
b3JpZ19hcmNoaXZlCi0KLSAgICBkZWYgdGVzdF9hbGxfcGxhdGZvcm1zKHNlbGYpOgotICAgICAg
ICBleHBlY3RhdGlvbnMgPSAiQlVHWCBSRUJBU0VMSU5FIDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1h
Z2UuaHRtbCA9IElNQUdFIgotCi0gICAgICAgIG9wdGlvbnMgPSB0ZXN0X29wdGlvbnMoKQotICAg
ICAgICBob3N0X3BvcnRfb2JqLCBmaWxlc3lzdGVtID0gdGVzdF9ob3N0X3BvcnRfYW5kX2ZpbGVz
eXN0ZW0ob3B0aW9ucywgZXhwZWN0YXRpb25zKQotICAgICAgICB1cmxfZmV0Y2hlciA9IHRlc3Rf
dXJsX2ZldGNoZXIoZmlsZXN5c3RlbSkKLSAgICAgICAgemlwX2ZhY3RvcnkgPSB0ZXN0X3ppcF9m
YWN0b3J5KCkKLSAgICAgICAgbW9ja19zY20gPSBNb2NrU0NNKCkKLSAgICAgICAgZmlsZXN5c3Rl
bS5tYXliZV9tYWtlX2RpcmVjdG9yeShtb2NrX3NjbS5jaGVja291dF9yb290KQotCi0gICAgICAg
ICMgRklYTUU6IFNDTSBtb2R1bGUgZG9lc24ndCBoYW5kbGUgcGF0aHMgdGhhdCBhcmVuJ3QgcmVs
YXRpdmUgdG8gdGhlIGNoZWNrb3V0X3Jvb3QgY29uc2lzdGVudGx5LgotICAgICAgICBmaWxlc3lz
dGVtLmNoZGlyKCIvdGVzdC5jaGVja291dCIpCi0KLSAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJl
Lk91dHB1dENhcHR1cmUoKQotICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIHJl
cyA9IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnJlYWxfbWFpbihvcHRpb25zLCBv
cHRpb25zLAotICAgICAgICAgICAgaG9zdF9wb3J0X29iaiwgaG9zdF9wb3J0X29iaiwgdXJsX2Zl
dGNoZXIsIHppcF9mYWN0b3J5LCBtb2NrX3NjbSkKLSAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQo
KQotCi0gICAgICAgICMgV2UgZXhwZWN0IHRvIGhhdmUgd3JpdHRlbiAzOCBmaWxlcyBvdmVyIHRo
ZSBjb3Vyc2Ugb2YgdGhpcyByZWJhc2VsaW5lOgotICAgICAgICAjICopIDYqMyBmaWxlcyBpbiAv
X19pbV90bXAvIGZvciB0aGUgYXJjaGl2ZWQgbWVtYmVycyBvZiB0aGUgNiBwb3J0cwotICAgICAg
ICAjICopIDIqMyBmaWxlcyBpbiAvdGVzdC5jaGVja291dCBmb3IgYWN0dWFsbHkgZGlmZmVyaW5n
IGJhc2VsaW5lcwotICAgICAgICAjICopIDEgZmlsZSBpbiAvdGVzdC5jaGVja291dCBmb3IgdGhl
IHVwZGF0ZWQgdGVzdF9leHBlY3RhdGlvbnMgZmlsZQotICAgICAgICAjICopIDIqNCBmaWxlcyBp
biAvdG1wIGZvciB0aGUgb2xkL25ldyBiYXNlbGluZXMgZm9yIHRoZSB0d28gYWN0dWFsIHBvcnRz
Ci0gICAgICAgICMgKikgMiBmaWxlcyBpbiAvdG1wIGZvciB0aGUgdGV4dCBkaWZmcyBmb3IgdGhl
IHR3byBwb3J0cwotICAgICAgICAjICopIDIgZmlsZXMgaW4gL3RtcCBmb3IgdGhlIGltYWdlIGRp
ZmZzIGZvciB0aGUgdHdvIHBvcnRzCi0gICAgICAgICMgKikgMSBmaWxlIGluIC90bXAgZm9yIHRo
ZSByZWJhc2VsaW5lIHJlc3VsdHMgaHRtbCBmaWxlCi0gICAgICAgICMgRklYTUU6IFRoZXNlIG51
bWJlcnMgZGVwZW5kIG9uIE1vY2tTQ00uZXhpc3RzKCkgcmV0dXJuaW5nIFRydWUgZm9yIGFsbCBm
aWxlcy4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwobGVuKGZpbGVzeXN0ZW0ud3JpdHRlbl9maWxlcyksIDM4KQotCi0KLWNsYXNzIFRl
c3RIdG1sR2VuZXJhdG9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgbWFrZV9nZW5lcmF0
b3Ioc2VsZiwgZmlsZXMsIHRlc3RzKToKLSAgICAgICAgb3B0aW9ucyA9IE1vY2tPcHRpb25zKGNv
bmZpZ3VyYXRpb249Tm9uZSwgaHRtbF9kaXJlY3Rvcnk9Jy90bXAnKQotICAgICAgICBob3N0ID0g
TW9ja0hvc3QoKQotICAgICAgICBob3N0X3BvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rl
c3QnLCBvcHRpb25zLCBmaWxlc3lzdGVtPXVuaXRfdGVzdF9maWxlc3lzdGVtKGZpbGVzKSkKLSAg
ICAgICAgZ2VuZXJhdG9yID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMuSHRtbEdl
bmVyYXRvcihob3N0X3BvcnQsCi0gICAgICAgICAgICB0YXJnZXRfcG9ydD1Ob25lLCBvcHRpb25z
PW9wdGlvbnMsIHBsYXRmb3Jtcz1bJ3Rlc3QtbWFjLWxlb3BhcmQnXSwgcmViYXNlbGluaW5nX3Rl
c3RzPXRlc3RzKQotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLCBob3N0X3BvcnQKLQotICAgIGRl
ZiB0ZXN0X2dlbmVyYXRlX2Jhc2VsaW5lX2xpbmtzKHNlbGYpOgotICAgICAgICBmaWxlcyA9IHsK
LSAgICAgICAgICAgICIvdG1wL2Zvby1leHBlY3RlZC1tYWMtb2xkLnR4dCI6ICIiLAotICAgICAg
ICAgICAgIi90bXAvZm9vLWV4cGVjdGVkLW1hYy1uZXcudHh0IjogIiIsCi0gICAgICAgICAgICAi
L3RtcC9mb28tZXhwZWN0ZWQtbWFjLWRpZmYudHh0IjogIiIsCi0gICAgICAgIH0KLSAgICAgICAg
dGVzdHMgPSBbImZvby50eHQiXQotICAgICAgICBnZW5lcmF0b3IsIGhvc3RfcG9ydCA9IHNlbGYu
bWFrZV9nZW5lcmF0b3IoZmlsZXMsIHRlc3RzKQotICAgICAgICBsaW5rcyA9IGdlbmVyYXRvci5f
Z2VuZXJhdGVfYmFzZWxpbmVfbGlua3MoImZvbyIsICIudHh0IiwgIm1hYyIpCi0gICAgICAgIGV4
cGVjdGVkX2xpbmtzID0gJzx0ZCBhbGlnbj1jZW50ZXI+PGEgaHJlZj0iZmlsZTovLy90bXAvZm9v
LWV4cGVjdGVkLW1hYy1vbGQudHh0Ij5mb28tZXhwZWN0ZWQudHh0PC9hPjwvdGQ+PHRkIGFsaWdu
PWNlbnRlcj48YSBocmVmPSJmaWxlOi8vL3RtcC9mb28tZXhwZWN0ZWQtbWFjLW5ldy50eHQiPmZv
by1leHBlY3RlZC50eHQ8L2E+PC90ZD48dGQgYWxpZ249Y2VudGVyPjxhIGhyZWY9ImZpbGU6Ly8v
dG1wL2Zvby1leHBlY3RlZC1tYWMtZGlmZi50eHQiPkRpZmY8L2E+PC90ZD4nCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwobGlua3MsIGV4cGVjdGVkX2xpbmtzKQotCi0KLWlmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCg==
</data>
<flag name="review"
          id="112673"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="112674"
          type_id="3"
          status="-"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>