<?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>63434</bug_id>
          
          <creation_ts>2011-06-27 00:54:04 -0700</creation_ts>
          <short_desc>Move websocket_server and http_server to webkitpy.layout_package.servers</short_desc>
          <delta_ts>2011-06-27 00:59:11 -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="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>427742</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 00:54:04 -0700</bug_when>
    <thetext>Move websocket_server and http_server to webkitpy.layout_package.servers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427745</commentid>
    <comment_count>1</comment_count>
      <attachid>98677</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 00:54:50 -0700</bug_when>
    <thetext>Created attachment 98677
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427746</commentid>
    <comment_count>2</comment_count>
      <attachid>98677</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-27 00:55:30 -0700</bug_when>
    <thetext>Comment on attachment 98677
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427748</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-27 00:59:11 -0700</bug_when>
    <thetext>Committed r89798: &lt;http://trac.webkit.org/changeset/89798&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98677</attachid>
            <date>2011-06-27 00:54:50 -0700</date>
            <delta_ts>2011-06-27 00:55:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63434-20110627005448.patch</filename>
            <type>text/plain</type>
            <size>73453</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg5Nzk2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjcgQEAKKzIwMTEtMDYtMjcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHdlYnNv
Y2tldF9zZXJ2ZXIgYW5kIGh0dHBfc2VydmVyIHRvIHdlYmtpdHB5LmxheW91dF9wYWNrYWdlLnNl
cnZlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYz
NDM0CisKKyAgICAgICAgVGhlc2UgY2xhc3NlcyBkbyBub3QgcmVwcmVzZW50IHBvcnRzLiAgVGhl
eSByZXByZXNlbnQgc2VydmVycy4KKworICAgICAgICAqIFNjcmlwdHMvbmV3LXJ1bi13ZWJraXQt
aHR0cGQ6CisgICAgICAgICogU2NyaXB0cy9uZXctcnVuLXdlYmtpdC13ZWJzb2NrZXRzZXJ2ZXI6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5Ogor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZl
ci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2h0dHBfc2VydmVyX2Jhc2UucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9pbnRlZ3JhdGlvbnRlc3QucHk6IFJl
bW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wb3J0
X3Rlc3RjYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvd2Vic29ja2V0X3NlcnZlci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL2FwYWNoZV9odHRwX3NlcnZlci5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL2h0dHBfc2VydmVyLnB5OiBD
b3BpZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBf
c2VydmVyLnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZl
cnMvaHR0cF9zZXJ2ZXJfYmFzZS5weTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5LgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250
ZXN0LnB5OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYnNvY2tldF9zZXJ2ZXIucHk6IENvcGllZCBm
cm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3Nl
cnZlci5weS4KKwogMjAxMS0wNi0yNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogVG9vbHMvU2NyaXB0cy9u
ZXctcnVuLXdlYmtpdC1odHRwZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL25ldy1ydW4t
d2Via2l0LWh0dHBkCShyZXZpc2lvbiA4OTc4NSkKKysrIFRvb2xzL1NjcmlwdHMvbmV3LXJ1bi13
ZWJraXQtaHR0cGQJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEyICs0MiwxMyBAQCBpbXBvcnQgb3MK
IGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogCisjIEZJWE1FOiBXZSBzaG91bGQgbm90IGJl
IGhhY2tpbmcgYXJvdW5kIGluIHN5cy5wYXRoLgogc2NyaXB0c19kaXJlY3RvcnkgPSBvcy5wYXRo
LmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkKIHdlYmtpdHB5X2RpcmVjdG9y
eSA9IG9zLnBhdGguam9pbihzY3JpcHRzX2RpcmVjdG9yeSwgIndlYmtpdHB5IikKIHN5cy5wYXRo
LmFwcGVuZChvcy5wYXRoLmpvaW4od2Via2l0cHlfZGlyZWN0b3J5LCAibGF5b3V0X3Rlc3RzIikp
CiAKIGltcG9ydCBwb3J0Ci1mcm9tIHBvcnQgaW1wb3J0IGh0dHBfc2VydmVyCitmcm9tIHNlcnZl
cnMgaW1wb3J0IGh0dHBfc2VydmVyCiAKIGRlZiBydW4ob3B0aW9ucyk6CiAgICAgaWYgbm90IG9w
dGlvbnMuc2VydmVyOgpJbmRleDogVG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC13ZWJzb2Nr
ZXRzZXJ2ZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC13ZWJz
b2NrZXRzZXJ2ZXIJKHJldmlzaW9uIDg5Nzg1KQorKysgVG9vbHMvU2NyaXB0cy9uZXctcnVuLXdl
YmtpdC13ZWJzb2NrZXRzZXJ2ZXIJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgaW1w
b3J0IG9wdHBhcnNlCiBpbXBvcnQgdGVtcGZpbGUKIAogaW1wb3J0IHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0LmZhY3RvcnkgYXMgZmFjdG9yeQotaW1wb3J0IHdlYmtpdHB5LmxheW91dF90ZXN0
cy5wb3J0LndlYnNvY2tldF9zZXJ2ZXIgYXMgd2Vic29ja2V0X3NlcnZlcgoraW1wb3J0IHdlYmtp
dHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzLndlYnNvY2tldF9zZXJ2ZXIgYXMgd2Vic29ja2V0X3Nl
cnZlcgogCiAKIGRlZiBtYWluKCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiA4OTc5NSkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpA
QCAtNTcsMTAgKzU3LDEwIEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS51c2VyIGltcG9y
dCAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9ydCByZWFkX2NoZWNrc3VtX2Zyb21f
cG5nCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjb25maWcgYXMgcG9y
dF9jb25maWcKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGh0dHBfbG9j
awotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgaHR0cF9zZXJ2ZXIKIGZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHRlc3RfZmlsZXMKLWZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHdlYnNvY2tldF9zZXJ2ZXIKIGZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGFwYWNoZV9odHRwX3NlcnZlcgorZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgaHR0cF9zZXJ2ZXIKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IHdlYnNvY2tldF9zZXJ2ZXIKIAog
X2xvZyA9IGxvZ3V0aWxzLmdldF9sb2dnZXIoX19maWxlX18pCiAKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQkocmV2
aXNpb24gODk3ODUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS56aXBmaWxlc2V0IGkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgYmFzZQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
cG9ydCBpbXBvcnQgYnVpbGRlcnMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1w
b3J0IGh0dHBfc2VydmVyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCB3
ZWJzb2NrZXRfc2VydmVyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9y
dCBodHRwX3NlcnZlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQg
d2Vic29ja2V0X3NlcnZlcgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5Lmxh
eW91dF90ZXN0cy5wb3J0LmNocm9taXVtIikKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CShyZXZpc2lv
biA4OTc4NSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0
cF9zZXJ2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMjEzICswLDAgQEAKLSMhL3Vzci9iaW4v
ZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRp
c3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIkEgY2xhc3MgdG8gaGVscCBzdGFydC9z
dG9wIHRoZSBsaWdodHRwZCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIiCi0KLWltcG9y
dCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi0KLWZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKLQotX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5odHRwX3NlcnZl
ciIpCi0KLWNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgot
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBvdXRwdXRfZGlyLCBiYWNrZ3JvdW5k
PUZhbHNlLCBwb3J0PU5vbmUsCi0gICAgICAgICAgICAgICAgIHJvb3Q9Tm9uZSwgcnVuX2JhY2tn
cm91bmQ9Tm9uZSwgbGF5b3V0X3Rlc3RzX2Rpcj1Ob25lKToKLSAgICAgICAgIiIiQXJnczoKLSAg
ICAgICAgICBvdXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRlc3Qg
cmVzdWx0IGRpcmVjdG9yeQotICAgICAgICAiIiIKLSAgICAgICAgIyBXZWJraXQgdGVzdHMKLSAg
ICAgICAgaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZS5fX2luaXRfXyhzZWxmLCBwb3J0
X29iaikKLSAgICAgICAgc2VsZi5fbmFtZSA9ICdsaWdodHRwZCcKLSAgICAgICAgc2VsZi5fb3V0
cHV0X2RpciA9IG91dHB1dF9kaXIKLSAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKLSAgICAgICAg
c2VsZi5fcm9vdCA9IHJvb3QKLSAgICAgICAgc2VsZi5fcnVuX2JhY2tncm91bmQgPSBydW5fYmFj
a2dyb3VuZAotICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyID0gbGF5b3V0X3Rlc3RzX2Rp
cgotCi0gICAgICAgIHNlbGYuX3BpZF9maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYu
X3J1bnRpbWVfcGF0aCwgJyVzLnBpZCcgJSBzZWxmLl9uYW1lKQotCi0gICAgICAgIGlmIHNlbGYu
X3BvcnQ6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0ID0gaW50KHNlbGYuX3BvcnQpCi0KLSAgICAg
ICAgaWYgbm90IHNlbGYuX2xheW91dF90ZXN0c19kaXI6Ci0gICAgICAgICAgICBzZWxmLl9sYXlv
dXRfdGVzdHNfZGlyID0gc2VsZi5fcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2RpcigpCi0KLSAgICAg
ICAgc2VsZi5fd2Via2l0X3Rlc3RzID0gb3MucGF0aC5qb2luKHNlbGYuX2xheW91dF90ZXN0c19k
aXIsICdodHRwJywgJ3Rlc3RzJykKLSAgICAgICAgc2VsZi5fanNfdGVzdF9yZXNvdXJjZSA9IG9z
LnBhdGguam9pbihzZWxmLl9sYXlvdXRfdGVzdHNfZGlyLCAnZmFzdCcsICdqcycsICdyZXNvdXJj
ZXMnKQotICAgICAgICBzZWxmLl9tZWRpYV9yZXNvdXJjZSA9IG9zLnBhdGguam9pbihzZWxmLl9s
YXlvdXRfdGVzdHNfZGlyLCAnbWVkaWEnKQotCi0gICAgICAgICMgU2VsZiBnZW5lcmF0ZWQgY2Vy
dGlmaWNhdGUgZm9yIFNTTCBzZXJ2ZXIgKGZvciBjbGllbnQgY2VydCBnZXQKLSAgICAgICAgIyA8
YmFzZS1wYXRoPlxjaHJvbWVcdGVzdFxkYXRhXHNzbFxjZXJ0c1xyb290X2NhX2NlcnQuY3J0KQot
ICAgICAgICBzZWxmLl9wZW1fZmlsZSA9IG9zLnBhdGguam9pbigKLSAgICAgICAgICAgIG9zLnBh
dGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgJ2h0dHBkMi5wZW0nKQotCi0g
ICAgICAgICMgT25lIG1hcHBpbmcgd2hlcmUgd2UgY2FuIGdldCB0byBldmVyeXRoaW5nCi0gICAg
ICAgIHNlbGYuVklSVFVBTENPTkZJRyA9IFtdCi0KLSAgICAgICAgaWYgc2VsZi5fd2Via2l0X3Rl
c3RzOgotICAgICAgICAgICAgc2VsZi5WSVJUVUFMQ09ORklHLmV4dGVuZCgKLSAgICAgICAgICAg
ICAgICMgVGhyZWUgbWFwcGluZ3MgKG9uZSB3aXRoIFNTTCkgZm9yIExheW91dFRlc3RzIGh0dHAg
dGVzdHMKLSAgICAgICAgICAgICAgIFt7J3BvcnQnOiA4MDAwLCAnZG9jcm9vdCc6IHNlbGYuX3dl
YmtpdF90ZXN0c30sCi0gICAgICAgICAgICAgICAgeydwb3J0JzogODA4MCwgJ2RvY3Jvb3QnOiBz
ZWxmLl93ZWJraXRfdGVzdHN9LAotICAgICAgICAgICAgICAgIHsncG9ydCc6IDg0NDMsICdkb2Ny
b290Jzogc2VsZi5fd2Via2l0X3Rlc3RzLAotICAgICAgICAgICAgICAgICAnc3NsY2VydCc6IHNl
bGYuX3BlbV9maWxlfV0pCi0KLSAgICBkZWYgX3ByZXBhcmVfY29uZmlnKHNlbGYpOgotICAgICAg
ICBiYXNlX2NvbmZfZmlsZSA9IHNlbGYuX3BvcnRfb2JqLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgn
VG9vbHMnLAotICAgICAgICAgICAgJ1NjcmlwdHMnLCAnd2Via2l0cHknLCAnbGF5b3V0X3Rlc3Rz
JywgJ3BvcnQnLCAnbGlnaHR0cGQuY29uZicpCi0gICAgICAgIG91dF9jb25mX2ZpbGUgPSBvcy5w
YXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgJ2xpZ2h0dHBkLmNvbmYnKQotICAgICAgICB0aW1l
X3N0ciA9IHRpbWUuc3RyZnRpbWUoIiVkJWIlWS0lSCVNJVMiKQotICAgICAgICBhY2Nlc3NfZmls
ZV9uYW1lID0gImFjY2Vzcy5sb2ctIiArIHRpbWVfc3RyICsgIi50eHQiCi0gICAgICAgIGFjY2Vz
c19sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgYWNjZXNzX2ZpbGVfbmFtZSkK
LSAgICAgICAgbG9nX2ZpbGVfbmFtZSA9ICJlcnJvci5sb2ctIiArIHRpbWVfc3RyICsgIi50eHQi
Ci0gICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBsb2df
ZmlsZV9uYW1lKQotCi0gICAgICAgICMgV3JpdGUgb3V0IHRoZSBjb25maWcKLSAgICAgICAgYmFz
ZV9jb25mID0gc2VsZi5fZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShiYXNlX2NvbmZfZmlsZSkK
LQotICAgICAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZS13b3JrZWQgc28gdGhhdCB0aGlz
IGJsb2NrIGNhbgotICAgICAgICAjIHVzZSB3aXRoIG9wZW4oKSBpbnN0ZWFkIG9mIGEgbWFudWFs
IGZpbGUuY2xvc2UoKSBjYWxsLgotICAgICAgICBmID0gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX3Rl
eHRfZmlsZV9mb3Jfd3JpdGluZyhvdXRfY29uZl9maWxlKQotICAgICAgICBmLndyaXRlKGJhc2Vf
Y29uZikKLQotICAgICAgICAjIFdyaXRlIG91dCBvdXIgY2dpIGhhbmRsZXJzLiAgUnVuIHBlcmwg
dGhyb3VnaCBlbnYgc28gdGhhdCBpdAotICAgICAgICAjIHByb2Nlc3NlcyB0aGUgIyEgbGluZSBh
bmQgcnVucyBwZXJsIHdpdGggdGhlIHByb3BlciBjb21tYW5kCi0gICAgICAgICMgbGluZSBhcmd1
bWVudHMuIEVtdWxhdGUgYXBhY2hlJ3MgbW9kX2FzaXMgd2l0aCBhIGNhdCBjZ2kgaGFuZGxlci4K
LSAgICAgICAgZi53cml0ZSgoJ2NnaS5hc3NpZ24gPSAoICIuY2dpIiAgPT4gIi91c3IvYmluL2Vu
diIsXG4nCi0gICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAiLnBsIiAgID0+ICIvdXNy
L2Jpbi9lbnYiLFxuJwotICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIi5hc2lzIiA9
PiAiL2Jpbi9jYXQiLFxuJwotICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIi5waHAi
ICA9PiAiJXMiIClcblxuJykgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3BvcnRfb2JqLl9wYXRoX3RvX2xpZ2h0dHBkX3BocCgpKQotCi0gICAgICAgICMgU2V0
dXAgbG9nIGZpbGVzCi0gICAgICAgIGYud3JpdGUoKCdzZXJ2ZXIuZXJyb3Jsb2cgPSAiJXMiXG4n
Ci0gICAgICAgICAgICAgICAgICdhY2Nlc3Nsb2cuZmlsZW5hbWUgPSAiJXMiXG5cbicpICUgKGVy
cm9yX2xvZywgYWNjZXNzX2xvZykpCi0KLSAgICAgICAgIyBTZXR1cCB1cGxvYWQgZm9sZGVycy4g
VXBsb2FkIGZvbGRlciBpcyB0byBob2xkIHRlbXBvcmFyeSB1cGxvYWQgZmlsZXMKLSAgICAgICAg
IyBhbmQgYWxzbyBQT1NUIGRhdGEuIFRoaXMgaXMgdXNlZCB0byBzdXBwb3J0IFhIUiBsYXlvdXQg
dGVzdHMgdGhhdAotICAgICAgICAjIGRvZXMgUE9TVC4KLSAgICAgICAgZi53cml0ZSgoJ3NlcnZl
ci51cGxvYWQtZGlycyA9ICggIiVzIiApXG5cbicpICUgKHNlbGYuX291dHB1dF9kaXIpKQotCi0g
ICAgICAgICMgU2V0dXAgYSBsaW5rIHRvIHdoZXJlIHRoZSBqcyB0ZXN0IHRlbXBsYXRlcyBhcmUg
c3RvcmVkCi0gICAgICAgIGYud3JpdGUoKCdhbGlhcy51cmwgPSAoICIvanMtdGVzdC1yZXNvdXJj
ZXMiID0+ICIlcyIgKVxuXG4nKSAlCi0gICAgICAgICAgICAgICAgICAgIChzZWxmLl9qc190ZXN0
X3Jlc291cmNlKSkKLQotICAgICAgICAjIFNldHVwIGEgbGluayB0byB3aGVyZSB0aGUgbWVkaWEg
cmVzb3VyY2VzIGFyZSBzdG9yZWQuCi0gICAgICAgIGYud3JpdGUoKCdhbGlhcy51cmwgKz0gKCAi
L21lZGlhLXJlc291cmNlcyIgPT4gIiVzIiApXG5cbicpICUKLSAgICAgICAgICAgICAgICAgICAg
KHNlbGYuX21lZGlhX3Jlc291cmNlKSkKLQotICAgICAgICAjIGR1bXAgb3V0IG9mIHZpcnR1YWwg
aG9zdCBjb25maWcgYXQgdGhlIGJvdHRvbS4KLSAgICAgICAgaWYgc2VsZi5fcm9vdDoKLSAgICAg
ICAgICAgIGlmIHNlbGYuX3BvcnQ6Ci0gICAgICAgICAgICAgICAgIyBIYXZlIGJvdGggcG9ydCBh
bmQgcm9vdCBkaXIuCi0gICAgICAgICAgICAgICAgbWFwcGluZ3MgPSBbeydwb3J0Jzogc2VsZi5f
cG9ydCwgJ2RvY3Jvb3QnOiBzZWxmLl9yb290fV0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgIyBIYXZlIG9ubHkgYSByb290IGRpciAtIHNldCB0aGUgcG9ydHMgYXMgZm9yIExh
eW91dFRlc3RzLgotICAgICAgICAgICAgICAgICMgVGhpcyBpcyB1c2VkIGluIHVpX3Rlc3RzIHRv
IHJ1biBodHRwIHRlc3RzIGFnYWluc3QgYSBicm93c2VyLgotCi0gICAgICAgICAgICAgICAgIyBk
ZWZhdWx0IHNldCBvZiBwb3J0cyBhcyBmb3IgTGF5b3V0VGVzdHMgYnV0IHdpdGggYQotICAgICAg
ICAgICAgICAgICMgc3BlY2lmaWVkIHJvb3QuCi0gICAgICAgICAgICAgICAgbWFwcGluZ3MgPSBb
eydwb3J0JzogODAwMCwgJ2RvY3Jvb3QnOiBzZWxmLl9yb290fSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7J3BvcnQnOiA4MDgwLCAnZG9jcm9vdCc6IHNlbGYuX3Jvb3R9LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsncG9ydCc6IDg0NDMsICdkb2Nyb290Jzogc2VsZi5fcm9v
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzbGNlcnQnOiBzZWxmLl9wZW1fZmls
ZX1dCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYXBwaW5ncyA9IHNlbGYuVklSVFVBTENP
TkZJRwotICAgICAgICBmb3IgbWFwcGluZyBpbiBtYXBwaW5nczoKLSAgICAgICAgICAgIHNzbF9z
ZXR1cCA9ICcnCi0gICAgICAgICAgICBpZiAnc3NsY2VydCcgaW4gbWFwcGluZzoKLSAgICAgICAg
ICAgICAgICBzc2xfc2V0dXAgPSAoJyAgc3NsLmVuZ2luZSA9ICJlbmFibGUiXG4nCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICcgIHNzbC5wZW1maWxlID0gIiVzIlxuJyAlIG1hcHBpbmdb
J3NzbGNlcnQnXSkKLQotICAgICAgICAgICAgZi53cml0ZSgoJyRTRVJWRVJbInNvY2tldCJdID09
ICIxMjcuMC4wLjE6JWQiIHtcbicKLSAgICAgICAgICAgICAgICAgICAgICcgIHNlcnZlci5kb2N1
bWVudC1yb290ID0gIiVzIlxuJyArCi0gICAgICAgICAgICAgICAgICAgICBzc2xfc2V0dXAgKwot
ICAgICAgICAgICAgICAgICAgICAgJ31cblxuJykgJSAobWFwcGluZ1sncG9ydCddLCBtYXBwaW5n
Wydkb2Nyb290J10pKQotICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICBleGVjdXRhYmxlID0g
c2VsZi5fcG9ydF9vYmouX3BhdGhfdG9fbGlnaHR0cGQoKQotICAgICAgICBtb2R1bGVfcGF0aCA9
IHNlbGYuX3BvcnRfb2JqLl9wYXRoX3RvX2xpZ2h0dHBkX21vZHVsZXMoKQotICAgICAgICBzdGFy
dF9jbWQgPSBbZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICMgTmV3bHkgd3JpdHRl
biBjb25maWcgZmlsZQotICAgICAgICAgICAgICAgICAgICAgJy1mJywgb3MucGF0aC5qb2luKHNl
bGYuX291dHB1dF9kaXIsICdsaWdodHRwZC5jb25mJyksCi0gICAgICAgICAgICAgICAgICAgICAj
IFdoZXJlIGl0IGNhbiBmaW5kIGl0cyBtb2R1bGUgZHluYW1pYyBsaWJyYXJpZXMKLSAgICAgICAg
ICAgICAgICAgICAgICctbScsIG1vZHVsZV9wYXRoXQotCi0gICAgICAgIGlmIG5vdCBzZWxmLl9y
dW5fYmFja2dyb3VuZDoKLSAgICAgICAgICAgIHN0YXJ0X2NtZC5hcHBlbmQoIyBEb24ndCBiYWNr
Z3JvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICctRCcpCi0KLSAgICAgICAgIyBD
b3B5IGxpYmxpZ2h0Y29tcC5keWxpYiB0byAvdG1wL2xpZ2h0dHBkL2xpYiB0byB3b3JrIGFyb3Vu
ZCB0aGUKLSAgICAgICAgIyBidWcgdGhhdCBtb2RfYWxpYXMuc28gbG9hZHMgaXQgZnJvbSB0aGUg
aGFyZCBjb2RlZCBwYXRoLgotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0g
ICAgICAgICAgICB0bXBfbW9kdWxlX3BhdGggPSAnL3RtcC9saWdodHRwZC9saWInCi0gICAgICAg
ICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModG1wX21vZHVsZV9wYXRoKToKLSAgICAgICAgICAg
ICAgICBvcy5tYWtlZGlycyh0bXBfbW9kdWxlX3BhdGgpCi0gICAgICAgICAgICBsaWJfZmlsZSA9
ICdsaWJsaWdodGNvbXAuZHlsaWInCi0gICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLmNvcHlm
aWxlKG9zLnBhdGguam9pbihtb2R1bGVfcGF0aCwgbGliX2ZpbGUpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4odG1wX21vZHVsZV9wYXRoLCBsaWJf
ZmlsZSkpCi0KLSAgICAgICAgc2VsZi5fc3RhcnRfY21kID0gc3RhcnRfY21kCi0gICAgICAgIHNl
bGYuX2VudiA9IHNlbGYuX3BvcnRfb2JqLnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcigpCi0gICAg
ICAgIHNlbGYuX21hcHBpbmdzID0gbWFwcGluZ3MKLQotICAgIGRlZiBfcmVtb3ZlX3N0YWxlX2xv
Z3Moc2VsZik6Ci0gICAgICAgICMgU29tZXRpbWVzIGxvZ3MgYXJlIG9wZW4gaW4gb3RoZXIgcHJv
Y2Vzc2VzIGJ1dCB0aGV5IHNob3VsZCBjbGVhciBldmVudHVhbGx5LgotICAgICAgICBmb3IgbG9n
X3ByZWZpeCBpbiAoJ2FjY2Vzcy5sb2ctJywgJ2Vycm9yLmxvZy0nKToKLSAgICAgICAgICAgIHRy
eToKLSAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9k
aXIsIGxvZ19wcmVmaXgpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAg
ICAgICAgICBfbG9nLndhcm5pbmcoJ0ZhaWxlZCB0byByZW1vdmUgb2xkICVzICVzIGZpbGVzJyAl
IHNlbGYuX25hbWUsIGxvZ19wcmVmaXgpCi0KLSAgICBkZWYgX3NwYXduX3Byb2Nlc3Moc2VsZik6
Ci0gICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nICVzIHNlcnZlciwgY21kPSIlcyInICUgKHNl
bGYuX25hbWUsIHNlbGYuX3N0YXJ0X2NtZCkpCi0gICAgICAgIHByb2Nlc3MgPSBzZWxmLl9leGVj
dXRpdmUucG9wZW4oc2VsZi5fc3RhcnRfY21kLCBlbnY9c2VsZi5fZW52LCBzaGVsbD1GYWxzZSwg
c3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5QSVBFKQotICAgICAgICBwaWQgPSBwcm9jZXNzLnBpZAot
ICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShzZWxmLl9waWRfZmlsZSwg
c3RyKHBpZCkpCi0gICAgICAgIHJldHVybiBwaWQKLQotICAgIGRlZiBfc3RvcF9ydW5uaW5nX3Nl
cnZlcihzZWxmKToKLSAgICAgICAgIyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQg
YSBjbGVhbmVyIHdheSBvZiBraWxsaW5nIHRoaXMgcHJvY2Vzcy4KLSAgICAgICAgIyBDdXJyZW50
bHkgd2UgdGhyb3cgYXdheSB0aGUgcHJvY2VzcyBvYmplY3QgY3JlYXRlZCBpbiBfc3Bhd25fcHJv
Y2VzcywKLSAgICAgICAgIyBzaW5jZSB0aGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbnkgd2F5
IHRvIGtpbGwgdGhlIHNlcnZlciBhbnkgbW9yZQotICAgICAgICAjIGNsZWFubHkgdXNpbmcgaXQg
dGhhbiBqdXN0IGtpbGxpbmcgdGhlIHBpZCwgYW5kIHdlIG5lZWQgdG8gc3VwcG9ydAotICAgICAg
ICAjIGtpbGxpbmcgYSBwaWQgZGlyZWN0bHkgYW55d2F5IGZvciBydW4td2Via2l0LWh0dHBkIGFu
ZCBydW4td2Via2l0LXdlYnNvY2tldHNlcnZlci4KLSAgICAgICAgc2VsZi5fd2FpdF9mb3JfYWN0
aW9uKHNlbGYuX2NoZWNrX2FuZF9raWxsKQotICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4
aXN0cyhzZWxmLl9waWRfZmlsZSk6Ci0gICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92
ZShzZWxmLl9waWRfZmlsZSkKLQotICAgIGRlZiBfY2hlY2tfYW5kX2tpbGwoc2VsZik6Ci0gICAg
ICAgIGlmIHNlbGYuX2V4ZWN1dGl2ZS5jaGVja19ydW5uaW5nX3BpZChzZWxmLl9waWQpOgotICAg
ICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhzZWxmLl9waWQpCi0gICAgICAg
ICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2Vy
dmVyX2Jhc2UucHkJKHJldmlzaW9uIDg5Nzg1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0x
LDIwNiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0i
IiJCYXNlIGNsYXNzIHdpdGggY29tbW9uIHJvdXRpbmVzIGJldHdlZW4gdGhlIEFwYWNoZSwgTGln
aHR0cGQsIGFuZCB3ZWJzb2NrZXQgc2VydmVycy4iIiIKLQotaW1wb3J0IGVycm5vCi1pbXBvcnQg
bG9nZ2luZwotaW1wb3J0IHNvY2tldAotaW1wb3J0IHN5cwotaW1wb3J0IHRlbXBmaWxlCi1pbXBv
cnQgdGltZQotCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0
cy5wb3J0Lmh0dHBfc2VydmVyX2Jhc2UiKQotCi0KLWNsYXNzIFNlcnZlckVycm9yKEV4Y2VwdGlv
bik6Ci0gICAgcGFzcwotCi0KLWNsYXNzIEh0dHBTZXJ2ZXJCYXNlKG9iamVjdCk6Ci0gICAgIiIi
QSBza2VsZXRvbiBjbGFzcyBmb3Igc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHNlcnZlcnMgdXNlZCBi
eSB0aGUgbGF5b3V0IHRlc3RzLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2Jq
KToKLSAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gcG9ydF9vYmouX2V4ZWN1dGl2ZQotICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtID0gcG9ydF9vYmouX2ZpbGVzeXN0ZW0KLSAgICAgICAgc2VsZi5f
bmFtZSA9ICc8dmlydHVhbD4nCi0gICAgICAgIHNlbGYuX21hcHBpbmdzID0ge30KLSAgICAgICAg
c2VsZi5fcGlkID0gTm9uZQotICAgICAgICBzZWxmLl9waWRfZmlsZSA9IE5vbmUKLSAgICAgICAg
c2VsZi5fcG9ydF9vYmogPSBwb3J0X29iagotCi0gICAgICAgICMgV2UgbmVlZCBhIG5vbi1jaGVj
a291dC1kZXBlbmRlbnQgcGxhY2UgdG8gcHV0IGxvY2sgZmlsZXMsIGV0Yy4gV2UKLSAgICAgICAg
IyBkb24ndCB1c2UgdGhlIFB5dGhvbiBkZWZhdWx0IG9uIHRoZSBNYWMgYmVjYXVzZSBpdCBkZWZh
dWx0cyB0byBhCi0gICAgICAgICMgcmFuZG9tbHktZ2VuZXJhdGVkIGRpcmVjdG9yeSB1bmRlciAv
dmFyL2ZvbGRlcnMgYW5kIG5vIG9uZSB3b3VsZCBldmVyCi0gICAgICAgICMgbG9vayB0aGVyZS4K
LSAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCi0gICAgICAgIGlmIHN5cy5w
bGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgIHRtcGRpciA9ICcvdG1wJwotCi0gICAg
ICAgIHNlbGYuX3J1bnRpbWVfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbih0bXBkaXIsICJX
ZWJLaXQiKQotICAgICAgICBwb3J0X29iai5tYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLl9ydW50
aW1lX3BhdGgpCi0KLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgICIiIlN0YXJ0cyB0aGUg
c2VydmVyLiBJdCBpcyBhbiBlcnJvciB0byBzdGFydCBhbiBhbHJlYWR5IHN0YXJ0ZWQgc2VydmVy
LgotCi0gICAgICAgIFRoaXMgbWV0aG9kIGFsc28gc3RvcHMgYW55IHN0YWxlIHNlcnZlcnMgc3Rh
cnRlZCBieSBhIHByZXZpb3VzIGluc3RhbmNlLiIiIgotICAgICAgICBhc3NlcnQgbm90IHNlbGYu
X3BpZCwgJyVzIHNlcnZlciBpcyBhbHJlYWR5IHJ1bm5pbmcnICUgc2VsZi5fbmFtZQotCi0gICAg
ICAgICMgU3RvcCBhbnkgc3RhbGUgc2VydmVycyBsZWZ0IG92ZXIgZnJvbSBwcmV2aW91cyBpbnN0
YW5jZXMuCi0gICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYuX3BpZF9maWxl
KToKLSAgICAgICAgICAgIHNlbGYuX3BpZCA9IGludChzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4
dF9maWxlKHNlbGYuX3BpZF9maWxlKSkKLSAgICAgICAgICAgIHNlbGYuX3N0b3BfcnVubmluZ19z
ZXJ2ZXIoKQotICAgICAgICAgICAgc2VsZi5fcGlkID0gTm9uZQotCi0gICAgICAgIHNlbGYuX3Jl
bW92ZV9zdGFsZV9sb2dzKCkKLSAgICAgICAgc2VsZi5fcHJlcGFyZV9jb25maWcoKQotICAgICAg
ICBzZWxmLl9jaGVja190aGF0X2FsbF9wb3J0c19hcmVfYXZhaWxhYmxlKCkKLQotICAgICAgICBz
ZWxmLl9waWQgPSBzZWxmLl9zcGF3bl9wcm9jZXNzKCkKLQotICAgICAgICBpZiBzZWxmLl93YWl0
X2Zvcl9hY3Rpb24oc2VsZi5faXNfc2VydmVyX3J1bm5pbmdfb25fYWxsX3BvcnRzKToKLSAgICAg
ICAgICAgIF9sb2cuZGVidWcoIiVzIHN1Y2Nlc3NmdWxseSBzdGFydGVkIChwaWQgPSAlZCkiICUg
KHNlbGYuX25hbWUsIHNlbGYuX3BpZCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxm
Ll9zdG9wX3J1bm5pbmdfc2VydmVyKCkKLSAgICAgICAgICAgIHJhaXNlIFNlcnZlckVycm9yKCdG
YWlsZWQgdG8gc3RhcnQgJXMgc2VydmVyJyAlIHNlbGYuX25hbWUpCi0KLSAgICBkZWYgc3RvcChz
ZWxmKToKLSAgICAgICAgIiIiU3RvcHMgdGhlIHNlcnZlci4gU3RvcHBpbmcgYSBzZXJ2ZXIgdGhh
dCBpc24ndCBzdGFydGVkIGlzIGhhcm1sZXNzLiIiIgotICAgICAgICBhY3R1YWxfcGlkID0gTm9u
ZQotICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxmLl9waWRfZmlsZSk6Ci0g
ICAgICAgICAgICBhY3R1YWxfcGlkID0gaW50KHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF90ZXh0X2Zp
bGUoc2VsZi5fcGlkX2ZpbGUpKQotICAgICAgICAgICAgaWYgbm90IHNlbGYuX3BpZDoKLSAgICAg
ICAgICAgICAgICBzZWxmLl9waWQgPSBhY3R1YWxfcGlkCi0KLSAgICAgICAgaWYgbm90IHNlbGYu
X3BpZDoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGlmIG5vdCBhY3R1YWxfcGlkOgot
ICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdGYWlsZWQgdG8gc3RvcCAlczogcGlkIGZpbGUgaXMg
bWlzc2luZycgJSBzZWxmLl9uYW1lKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHNl
bGYuX3BpZCAhPSBhY3R1YWxfcGlkOgotICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdGYWlsZWQg
dG8gc3RvcCAlczogcGlkIGZpbGUgY29udGFpbnMgJWQsIG5vdCAlZCcgJQotICAgICAgICAgICAg
ICAgICAgICAgICAgIChzZWxmLl9uYW1lLCBhY3R1YWxfcGlkLCBzZWxmLl9waWQpKQotICAgICAg
ICAgICAgIyBUcnkgdG8ga2lsbCB0aGUgZXhpc3RpbmcgcGlkLCBhbnl3YXksIGluIGNhc2UgaXQg
Z290IG9ycGhhbmVkLgotICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLmtpbGxfcHJvY2Vzcyhz
ZWxmLl9waWQpCi0gICAgICAgICAgICBzZWxmLl9waWQgPSBOb25lCi0gICAgICAgICAgICByZXR1
cm4KLQotICAgICAgICBfbG9nLmRlYnVnKCJBdHRlbXB0aW5nIHRvIHNodXQgZG93biAlcyBzZXJ2
ZXIgYXQgcGlkICVkIiAlIChzZWxmLl9uYW1lLCBzZWxmLl9waWQpKQotICAgICAgICBzZWxmLl9z
dG9wX3J1bm5pbmdfc2VydmVyKCkKLSAgICAgICAgX2xvZy5kZWJ1ZygiJXMgc2VydmVyIGF0IHBp
ZCAlZCBzdG9wcGVkIiAlIChzZWxmLl9uYW1lLCBzZWxmLl9waWQpKQotICAgICAgICBzZWxmLl9w
aWQgPSBOb25lCi0KLSAgICBkZWYgX3ByZXBhcmVfY29uZmlnKHNlbGYpOgotICAgICAgICAiIiJU
aGlzIHJvdXRpbmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyB0byBkbyBhbnkgc29y
dAotICAgICAgICBvZiBpbml0aWFsaXphdGlvbiByZXF1aXJlZCBwcmlvciB0byBzdGFydGluZyB0
aGUgc2VydmVyIHRoYXQgbWF5IGZhaWwuIiIiCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBfcmVt
b3ZlX3N0YWxlX2xvZ3Moc2VsZik6Ci0gICAgICAgICIiIlRoaXMgcm91dGluZSBjYW4gYmUgb3Zl
cnJpZGRlbiBieSBzdWJjbGFzc2VzIHRvIHRyeSBhbmQgcmVtb3ZlIGxvZ3MKLSAgICAgICAgbGVm
dCBvdmVyIGZyb20gYSBwcmlvciBydW4uIFRoaXMgcm91dGluZSBzaG91bGQgbG9nIHdhcm5pbmdz
IGlmIHRoZQotICAgICAgICBmaWxlcyBjYW5ub3QgYmUgZGVsZXRlZCwgYnV0IHNob3VsZCBub3Qg
ZmFpbCB1bmxlc3MgZmFpbHVyZSB0bwotICAgICAgICBkZWxldGUgdGhlIGxvZ3Mgd2lsbCBhY3R1
YWxseSBjYXVzZSBzdGFydCgpIHRvIGZhaWwuIiIiCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBf
c3Bhd25fcHJvY2VzcyhzZWxmKToKLSAgICAgICAgIiIiVGhpcyByb3V0aW5lIG11c3QgYmUgaW1w
bGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byBhY3R1YWxseSBzdGFydCB0aGUgc2VydmVyLgotCi0g
ICAgICAgIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBwaWQgb2YgdGhlIHN0YXJ0ZWQgcHJvY2Vz
cywgYW5kIGFsc28gZW5zdXJlcyB0aGF0IHRoYXQKLSAgICAgICAgcGlkIGhhcyBiZWVuIHdyaXR0
ZW4gdG8gc2VsZi5fcGlkX2ZpbGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3IoKQotCi0gICAgZGVmIF9zdG9wX3J1bm5pbmdfc2VydmVyKHNlbGYpOgotICAgICAgICAiIiJU
aGlzIHJvdXRpbmUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIHRvIGFjdHVhbGx5
IHN0b3AgdGhlIHJ1bm5pbmcgc2VydmVyIGxpc3RlZCBpbiBzZWxmLl9waWRfZmlsZS4iIiIKLSAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLSAgICAjIFV0aWxpdHkgcm91dGlu
ZXMuCi0KLSAgICBkZWYgX3JlbW92ZV9sb2dfZmlsZXMoc2VsZiwgZm9sZGVyLCBzdGFydHNfd2l0
aCk6Ci0gICAgICAgIGZpbGVzID0gc2VsZi5fZmlsZXN5c3RlbS5saXN0ZGlyKGZvbGRlcikKLSAg
ICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBpZiBmaWxlLnN0YXJ0c3dpdGgo
c3RhcnRzX3dpdGgpOgotICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0
ZW0uam9pbihmb2xkZXIsIGZpbGUpCi0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5y
ZW1vdmUoZnVsbF9wYXRoKQotCi0gICAgZGVmIF93YWl0X2Zvcl9hY3Rpb24oc2VsZiwgYWN0aW9u
LCB3YWl0X3NlY3M9MjAuMCwgc2xlZXBfc2Vjcz0xLjApOgotICAgICAgICAiIiJSZXBlYXQgdGhl
IGFjdGlvbiBmb3Igd2FpdF9zZWMgb3IgdW50aWwgaXQgc3VjY2VlZHMsIHNsZWVwaW5nIGZvciBz
bGVlcF9zZWNzCi0gICAgICAgIGluIGJldHdlZW4gZWFjaCBhdHRlbXB0LiBSZXR1cm5zIHdoZXRo
ZXIgaXQgc3VjY2VlZGVkLiIiIgotICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKLSAg
ICAgICAgd2hpbGUgdGltZS50aW1lKCkgLSBzdGFydF90aW1lIDwgd2FpdF9zZWNzOgotICAgICAg
ICAgICAgaWYgYWN0aW9uKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAg
ICAgIF9sb2cuZGVidWcoIldhaXRpbmcgZm9yIGFjdGlvbjogJXMiICUgYWN0aW9uKQotICAgICAg
ICAgICAgdGltZS5zbGVlcChzbGVlcF9zZWNzKQotCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0g
ICAgZGVmIF9pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMoc2VsZik6Ci0gICAgICAgICIi
IlJldHVybnMgd2hldGhlciB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgb24gYWxsIHRoZSBkZXNpcmVk
IHBvcnRzLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5fZXhlY3V0aXZlLmNoZWNrX3J1bm5pbmdf
cGlkKHNlbGYuX3BpZCk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJTZXJ2ZXIgaXNuJ3QgcnVu
bmluZyBhdCBhbGwiKQotICAgICAgICAgICAgcmFpc2UgU2VydmVyRXJyb3IoIlNlcnZlciBleGl0
ZWQiKQotCi0gICAgICAgIGZvciBtYXBwaW5nIGluIHNlbGYuX21hcHBpbmdzOgotICAgICAgICAg
ICAgcyA9IHNvY2tldC5zb2NrZXQoKQotICAgICAgICAgICAgcG9ydCA9IG1hcHBpbmdbJ3BvcnQn
XQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoJ2xvY2FsaG9z
dCcsIHBvcnQpKQotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIlNlcnZlciBydW5uaW5nIG9u
ICVkIiAlIHBvcnQpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlOgotICAgICAg
ICAgICAgICAgICMgdGhpcyBicmFuY2ggaXMgbmVlZGVkIG9uIE1hYyAxMC41IC8gcHl0aG9uIDIu
NQotICAgICAgICAgICAgICAgIGlmIGUuYXJnc1swXSBub3QgaW4gKGVycm5vLkVDT05OUkVGVVNF
RCwgZXJybm8uRUNPTk5SRVNFVCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIE5PVCBydW5uaW5nIG9uICVkOiAlcyIgJSAocG9y
dCwgZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBleGNlcHQg
SU9FcnJvciwgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vIG5vdCBpbiAoZXJybm8uRUNP
Tk5SRUZVU0VELCBlcnJuby5FQ09OTlJFU0VUKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UK
LSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJTZXJ2ZXIgTk9UIHJ1bm5pbmcgb24gJWQ6ICVz
IiAlIChwb3J0LCBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAg
IGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgcy5jbG9zZSgpCi0gICAgICAgIHJldHVybiBUcnVl
Ci0KLSAgICBkZWYgX2NoZWNrX3RoYXRfYWxsX3BvcnRzX2FyZV9hdmFpbGFibGUoc2VsZik6Ci0g
ICAgICAgIGZvciBtYXBwaW5nIGluIHNlbGYuX21hcHBpbmdzOgotICAgICAgICAgICAgcyA9IHNv
Y2tldC5zb2NrZXQoKQotICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VU
LCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQotICAgICAgICAgICAgcG9ydCA9IG1hcHBpbmdbJ3Bv
cnQnXQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHMuYmluZCgoJ2xvY2FsaG9z
dCcsIHBvcnQpKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICAg
ICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFMUkVBRFksIGVycm5vLkVBRERSSU5VU0UpOgotICAg
ICAgICAgICAgICAgICAgICByYWlzZSBTZXJ2ZXJFcnJvcignUG9ydCAlZCBpcyBhbHJlYWR5IGlu
IHVzZS4nICUgcG9ydCkKLSAgICAgICAgICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2lu
MzInIGFuZCBlLmVycm5vIGluIChlcnJuby5XU0FFQUNDRVMsKToKLSAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgU2VydmVyRXJyb3IoJ1BvcnQgJWQgaXMgYWxyZWFkeSBpbiB1c2UuJyAlIHBvcnQp
Ci0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAg
ICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgcy5jbG9zZSgpCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9u
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weQkocmV2aXNpb24gODk3ODUpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2lu
dGVncmF0aW9udGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwxNTEgKzAsMCBAQAotIyBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLSIiIkludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgbmV3LXJ1bi13ZWJraXQtaHR0
cGQgYW5kIG5ldy1ydW4td2Via2l0LXdlYnNvY2tldHNlcnZlciBzY3JpcHRzIiIiCi0KLSMgRklY
TUU6IFJlbmFtZSB0aGlzIGZpbGUgdG8gc29tZXRoaW5nIG1vcmUgZGVzY3JpcHRpdmUuCi0KLWlt
cG9ydCBlcnJubwotaW1wb3J0IG9zCi1pbXBvcnQgc29ja2V0Ci1pbXBvcnQgc3VicHJvY2Vzcwot
aW1wb3J0IHN5cwotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQotCi0KLWNsYXNzIEJh
c2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAiIiJCYXNpYyBmcmFtZXdvcmsgZm9yIHNj
cmlwdCB0ZXN0cy4iIiIKLSAgICBIT1NUID0gJ2xvY2FsaG9zdCcKLQotICAgICMgT3ZlcnJpZGUg
aW4gYWN0dWFsIHRlc3QgY2xhc3Nlcy4KLSAgICBQT1JUUyA9IE5vbmUKLSAgICBTQ1JJUFRfTkFN
RSA9IE5vbmUKLQotICAgIGRlZiBhc3NlcnRfc2VydmVyc19hcmVfZG93bihzZWxmLCBwb3J0cz1O
b25lKToKLSAgICAgICAgcG9ydHMgPSBwb3J0cyBvciBzZWxmLlBPUlRTCi0gICAgICAgIGZvciBw
b3J0IGluIHBvcnRzOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRlc3Rfc29j
a2V0ID0gc29ja2V0LnNvY2tldCgpCi0gICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQuY29ubmVj
dCgoc2VsZi5IT1NULCBwb3J0KSkKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQotICAgICAg
ICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGUuZXJybm8gaW4gKGVycm5vLkVDT05OUkVGVVNFRCwgZXJybm8uRUNPTk5SRVNFVCkpCi0gICAg
ICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmNsb3NlKCkKLQot
ICAgIGRlZiBhc3NlcnRfc2VydmVyc19hcmVfdXAoc2VsZiwgcG9ydHM9Tm9uZSk6Ci0gICAgICAg
IHBvcnRzID0gcG9ydHMgb3Igc2VsZi5QT1JUUwotICAgICAgICBmb3IgcG9ydCBpbiBwb3J0czoK
LSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldCA9IHNvY2tldC5z
b2NrZXQoKQotICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmNvbm5lY3QoKHNlbGYuSE9TVCwg
cG9ydCkpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgICAgICBz
ZWxmLmZhaWwoJ2ZhaWxlZCB0byBjb25uZWN0IHRvICVzOiVkJyAlIChzZWxmLkhPU1QsIHBvcnQp
KQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldC5jbG9z
ZSgpCi0KLSAgICBkZWYgcnVuX3NjcmlwdChzZWxmLCBhcmdzKToKLSAgICAgICAgc2NyaXB0X2Rp
ciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBh
dGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpKQotICAgICAgICBzY3JpcHRf
cGF0aCA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCBzZWxmLlNDUklQVF9OQU1FKQotICAgICAg
ICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgc2NyaXB0X3BhdGhdICsg
YXJncywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLQot
ICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X3NlcnZlcl9fbm9ybWFsKHNlbGYpOgotICAgICAgICBp
ZiBub3Qgc2VsZi5TQ1JJUFRfTkFNRToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHNl
bGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhz
ZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdGFydCddKSwgMCkKLSAgICAgICAgc2VsZi5h
c3NlcnRfc2VydmVyc19hcmVfdXAoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1
bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9wJ10pLCAwKQotICAgICAgICBzZWxmLmFzc2VydF9z
ZXJ2ZXJzX2FyZV9kb3duKCkKLQotICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X3NlcnZlcl9fZmFp
bHMoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLlNDUklQVF9OQU1FOgotICAgICAgICAgICAg
cmV0dXJuCi0KLSAgICAgICAgIyBUZXN0IHRoYXQgaWYgYSBwb3J0IGlzbid0IGF2YWlsYWJsZSwg
dGhlIGNhbGwgZmFpbHMuCi0gICAgICAgIGZvciBwb3J0X251bWJlciBpbiBzZWxmLlBPUlRTOgot
ICAgICAgICAgICAgdGVzdF9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKLSAgICAgICAgICAgIHRy
eToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0
LmJpbmQoKHNlbGYuSE9TVCwgcG9ydF9udW1iZXIpKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBz
b2NrZXQuZXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5v
LkVBRERSSU5VU0UsIGVycm5vLkVBTFJFQURZKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuZmFpbCgnY291bGQgbm90IGJpbmQgdG8gcG9ydCAlZDogJXMnICUgKHBvcnRfbnVtYmVyLCBz
dHIoZSkpKQotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0YXJ0J10pLCAxKQot
ICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBzZWxmLnJ1bl9zY3JpcHQoWyct
LXNlcnZlcicsICdzdG9wJ10pCi0gICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQuY2xvc2UoKQot
Ci0gICAgICAgICMgVGVzdCB0aGF0IGNhbGxpbmcgc3RvcCgpIHR3aWNlIGlzIGhhcm1sZXNzLgot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdz
dG9wJ10pLCAwKQotCi0gICAgZGVmIG1heWJlX21ha2VfZGlyKHNlbGYsICpjb21wcyk6Ci0gICAg
ICAgIHRyeToKLSAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbigqY29tcHMpKQot
ICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJy
bm8uRUVYSVNUOgotICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICBkZWYgaW50ZWdyYXRpb25f
dGVzdF9wb3J0X2FuZF9yb290KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5TQ1JJUFRfTkFN
RToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRl
bXAocHJlZml4PSd3ZWJraXRweXRlc3QnKQotICAgICAgICBzZWxmLm1heWJlX21ha2VfZGlyKHRt
cGRpciwgJ2h0dHAnLCAndGVzdHMnLCAnd2Vic29ja2V0JykKLSAgICAgICAgc2VsZi5tYXliZV9t
YWtlX2Rpcih0bXBkaXIsICdmYXN0JywgJ2pzJywgJ3Jlc291cmNlcycpCi0gICAgICAgIHNlbGYu
bWF5YmVfbWFrZV9kaXIodG1wZGlyLCAnbWVkaWEnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0X3Nl
cnZlcnNfYXJlX2Rvd24oWzE4MDAwXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5y
dW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnLCAnLS1wb3J0PTE4MDAwJywgJy0tcm9vdCcs
IHRtcGRpcl0pLCAwKQotICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV91cChbMTgwMDBd
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcics
ICdzdG9wJ10pLCAwKQotICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKFsxODAw
MF0pCi0KLQotY2xhc3MgSFRUUFNlcnZlclRlc3QoQmFzZVRlc3QpOgotICAgICIiIlRlc3RzIHRo
YXQgbmV3LXJ1bi13ZWJraXQtaHR0cCBtdXN0IHBhc3MuIiIiCi0KLSAgICBQT1JUUyA9ICg4MDAw
LCA4MDgwLCA4NDQzKQotICAgIFNDUklQVF9OQU1FID0gJ25ldy1ydW4td2Via2l0LWh0dHBkJwot
Ci0KLWNsYXNzIFdlYnNvY2tldHNlcnZlclRlc3QoQmFzZVRlc3QpOgotICAgICIiIlRlc3RzIHRo
YXQgbmV3LXJ1bi13ZWJraXQtd2Vic29ja2V0c2VydmVyIG11c3QgcGFzcy4iIiIKLQotICAgICMg
RklYTUU6IHRlc3QgVExTIGF0IHNvbWUgcG9pbnQ/Ci0gICAgUE9SVFMgPSAoODg4MCwgKQotICAg
IFNDUklQVF9OQU1FID0gJ25ldy1ydW4td2Via2l0LXdlYnNvY2tldHNlcnZlcicKLQotCi1pZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHBvcnRfdGVzdGNhc2UubWFpbigpCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9w
b3J0X3Rlc3RjYXNlLnB5CShyZXZpc2lvbiA4OTc4NSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCB0cnk6CiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVsdGlwcm9jZXNz
aW5nID0gTm9uZQogCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBodHRw
X3NlcnZlcl9iYXNlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBo
dHRwX3NlcnZlcl9iYXNlCiAKIGZyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgbW9ja3Rvb2wKIG1v
Y2tfb3B0aW9ucyA9IG1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249J1JlbGVhc2Un
KQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2Nr
ZXRfc2VydmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQkocmV2aXNpb24gODk3ODUpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTY2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgot
IyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMK
LSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4K
LSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSIiIkEgY2xhc3MgdG8gaGVscCBzdGFydC9zdG9wIHRoZSBQeVdl
YlNvY2tldCBzZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIiCi0KLWltcG9ydCBsb2dnaW5n
Ci1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi0KLWZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGh0dHBfc2VydmVyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBodHRwX3NlcnZlcl9iYXNlCi0KLV9sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQud2Vic29ja2V0X3NlcnZlciIpCi0KLV9X
U19MT0dfUFJFRklYID0gJ3B5d2Vic29ja2V0LndzLmxvZy0nCi1fV1NTX0xPR19QUkVGSVggPSAn
cHl3ZWJzb2NrZXQud3NzLmxvZy0nCi0KLV9ERUZBVUxUX1dTX1BPUlQgPSA4ODgwCi1fREVGQVVM
VF9XU1NfUE9SVCA9IDkzMjMKLQotCi1jbGFzcyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5MaWdo
dHRwZCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBvdXRwdXRfZGlyLCBwb3J0
PV9ERUZBVUxUX1dTX1BPUlQsCi0gICAgICAgICAgICAgICAgIHJvb3Q9Tm9uZSwgdXNlX3Rscz1G
YWxzZSwKLSAgICAgICAgICAgICAgICAgcGlkZmlsZT1Ob25lKToKLSAgICAgICAgIiIiQXJnczoK
LSAgICAgICAgICBvdXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRl
c3QgcmVzdWx0IGRpcmVjdG9yeQotICAgICAgICAiIiIKLSAgICAgICAgaHR0cF9zZXJ2ZXIuTGln
aHR0cGQuX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG91dHB1dF9kaXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ9X0RFRkFVTFRfV1NfUE9SVCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdD1yb290KQotICAgICAgICBzZWxmLl9v
dXRwdXRfZGlyID0gb3V0cHV0X2RpcgotICAgICAgICBzZWxmLl9waWRfZmlsZSA9IHBpZGZpbGUK
LSAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKLQotICAgICAgICBzZWxmLl9wb3J0ID0gcG9y
dAotICAgICAgICBzZWxmLl9yb290ID0gcm9vdAotICAgICAgICBzZWxmLl91c2VfdGxzID0gdXNl
X3RscwotCi0gICAgICAgIHNlbGYuX25hbWUgPSAncHl3ZWJzb2NrZXQnCi0gICAgICAgIGlmIHNl
bGYuX3VzZV90bHM6Ci0gICAgICAgICAgICBzZWxmLl9uYW1lID0gJ3B5d2Vic29ja2V0X3NlY3Vy
ZScKLQotICAgICAgICBzZWxmLl9wcml2YXRlX2tleSA9IHNlbGYuX3BlbV9maWxlCi0gICAgICAg
IHNlbGYuX2NlcnRpZmljYXRlID0gc2VsZi5fcGVtX2ZpbGUKLSAgICAgICAgaWYgc2VsZi5fcG9y
dDoKLSAgICAgICAgICAgIHNlbGYuX3BvcnQgPSBpbnQoc2VsZi5fcG9ydCkKLSAgICAgICAgc2Vs
Zi5fd3NpbiA9IE5vbmUKLSAgICAgICAgc2VsZi5fd3NvdXQgPSBOb25lCi0gICAgICAgIHNlbGYu
X21hcHBpbmdzID0gW3sncG9ydCc6IHNlbGYuX3BvcnR9XQotCi0gICAgICAgIGlmIG5vdCBzZWxm
Ll9waWRfZmlsZToKLSAgICAgICAgICAgIHNlbGYuX3BpZF9maWxlID0gc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYuX3J1bnRpbWVfcGF0aCwgJyVzLnBpZCcgJSBzZWxmLl9uYW1lKQotCi0gICAg
ICAgICMgV2Via2l0IHRlc3RzCi0gICAgICAgIGlmIHNlbGYuX3Jvb3Q6Ci0gICAgICAgICAgICBz
ZWxmLl9sYXlvdXRfdGVzdHMgPSBvcy5wYXRoLmFic3BhdGgoc2VsZi5fcm9vdCkKLSAgICAgICAg
ICAgIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMgPSBvcy5wYXRoLmFic3BhdGgoCi0gICAgICAgICAg
ICAgICAgb3MucGF0aC5qb2luKHNlbGYuX3Jvb3QsICdodHRwJywgJ3Rlc3RzJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3dlYnNvY2tldCcsICd0ZXN0cycpKQotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX2xheW91dF90ZXN0cyA9
IHNlbGYuX3BvcnRfb2JqLmxheW91dF90ZXN0c19kaXIoKQotICAgICAgICAgICAgICAgIHNlbGYu
X3dlYl9zb2NrZXRfdGVzdHMgPSBvcy5wYXRoLmpvaW4oc2VsZi5fbGF5b3V0X3Rlc3RzLAotICAg
ICAgICAgICAgICAgICAgICAgJ2h0dHAnLCAndGVzdHMnLCAnd2Vic29ja2V0JywgJ3Rlc3RzJykK
LSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rl
c3RzID0gTm9uZQotCi0gICAgICAgIGlmIHNlbGYuX3VzZV90bHM6Ci0gICAgICAgICAgICBzZWxm
Ll9sb2dfcHJlZml4ID0gX1dTU19MT0dfUFJFRklYCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICBzZWxmLl9sb2dfcHJlZml4ID0gX1dTX0xPR19QUkVGSVgKLQotICAgIGRlZiBfcHJlcGFyZV9j
b25maWcoc2VsZik6Ci0gICAgICAgIHRpbWVfc3RyID0gdGltZS5zdHJmdGltZSgnJWQlYiVZLSVI
JU0lUycpCi0gICAgICAgIGxvZ19maWxlX25hbWUgPSBzZWxmLl9sb2dfcHJlZml4ICsgdGltZV9z
dHIKLSAgICAgICAgc2VsZi5fd3NpbiA9IG9wZW4ob3MuZGV2bnVsbCwgJ3InKQotCi0gICAgICAg
IGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBsb2dfZmlsZV9uYW1l
ICsgIi1lcnIudHh0IikKLQotICAgICAgICBvdXRwdXRfbG9nID0gb3MucGF0aC5qb2luKHNlbGYu
X291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUgKyAiLW91dC50eHQiKQotICAgICAgICBzZWxmLl93
c291dCA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcob3V0cHV0
X2xvZykKLQotICAgICAgICBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5w
eXdlYnNvY2tldCBpbXBvcnQgbW9kX3B5d2Vic29ja2V0Ci0gICAgICAgIHB5dGhvbl9pbnRlcnAg
PSBzeXMuZXhlY3V0YWJsZQotICAgICAgICBweXdlYnNvY2tldF9iYXNlID0gb3MucGF0aC5qb2lu
KAotICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRp
cm5hbWUoCi0gICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpLCAndGhpcmRw
YXJ0eScsCi0gICAgICAgICAgICAnYXV0b2luc3RhbGxlZCcsICdweXdlYnNvY2tldCcpCi0gICAg
ICAgIHB5d2Vic29ja2V0X3NjcmlwdCA9IG9zLnBhdGguam9pbihweXdlYnNvY2tldF9iYXNlLCAn
bW9kX3B5d2Vic29ja2V0JywKLSAgICAgICAgICAgICdzdGFuZGFsb25lLnB5JykKLSAgICAgICAg
c3RhcnRfY21kID0gWwotICAgICAgICAgICAgcHl0aG9uX2ludGVycCwgJy11JywgcHl3ZWJzb2Nr
ZXRfc2NyaXB0LAotICAgICAgICAgICAgJy0tc2VydmVyLWhvc3QnLCAnMTI3LjAuMC4xJywKLSAg
ICAgICAgICAgICctLXBvcnQnLCBzdHIoc2VsZi5fcG9ydCksCi0gICAgICAgICAgICAnLS1kb2N1
bWVudC1yb290Jywgb3MucGF0aC5qb2luKHNlbGYuX2xheW91dF90ZXN0cywgJ2h0dHAnLCAndGVz
dHMnKSwKLSAgICAgICAgICAgICctLXNjYW4tZGlyJywgc2VsZi5fd2ViX3NvY2tldF90ZXN0cywK
LSAgICAgICAgICAgICctLWNnaS1wYXRocycsICcvd2Vic29ja2V0L3Rlc3RzJywKLSAgICAgICAg
ICAgICctLWxvZy1maWxlJywgZXJyb3JfbG9nLAotICAgICAgICBdCi0KLSAgICAgICAgaGFuZGxl
cl9tYXBfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLl93ZWJfc29ja2V0X3Rlc3RzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYW5kbGVyX21hcC50eHQnKQotICAg
ICAgICBpZiBvcy5wYXRoLmV4aXN0cyhoYW5kbGVyX21hcF9maWxlKToKLSAgICAgICAgICAgIF9s
b2cuZGVidWcoJ1VzaW5nIGhhbmRsZXJfbWFwX2ZpbGU6ICVzJyAlIGhhbmRsZXJfbWFwX2ZpbGUp
Ci0gICAgICAgICAgICBzdGFydF9jbWQuYXBwZW5kKCctLXdlYnNvY2staGFuZGxlcnMtbWFwLWZp
bGUnKQotICAgICAgICAgICAgc3RhcnRfY21kLmFwcGVuZChoYW5kbGVyX21hcF9maWxlKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdObyBoYW5kbGVyX21hcF9maWxl
IGZvdW5kJykKLQotICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgotICAgICAgICAgICAgc3RhcnRf
Y21kLmV4dGVuZChbJy10JywgJy1rJywgc2VsZi5fcHJpdmF0ZV9rZXksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnLWMnLCBzZWxmLl9jZXJ0aWZpY2F0ZV0pCi0KLSAgICAgICAgc2Vs
Zi5fc3RhcnRfY21kID0gc3RhcnRfY21kCi0gICAgICAgIHNlbGYuX2VudiA9IHNlbGYuX3BvcnRf
b2JqLnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcigpCi0gICAgICAgIHNlbGYuX2VudlsnUFlUSE9O
UEFUSCddID0gKHB5d2Vic29ja2V0X2Jhc2UgKyBvcy5wYXRoLnBhdGhzZXAgKyBzZWxmLl9lbnYu
Z2V0KCdQWVRIT05QQVRIJywgJycpKQotCi0gICAgZGVmIF9yZW1vdmVfc3RhbGVfbG9ncyhzZWxm
KToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX2xvZ19maWxlcyhzZWxm
Ll9vdXRwdXRfZGlyLCBzZWxmLl9sb2dfcHJlZml4KQotICAgICAgICBleGNlcHQgT1NFcnJvciwg
ZToKLSAgICAgICAgICAgIF9sb2cud2FybmluZygnRmFpbGVkIHRvIHJlbW92ZSBzdGFsZSAlcyBs
b2cgZmlsZXM6ICVzJyAlIChzZWxmLl9uYW1lLCBzdHIoZSkpKQotCi0gICAgZGVmIF9zcGF3bl9w
cm9jZXNzKHNlbGYpOgotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyAlcyBzZXJ2ZXIsIGNt
ZD0iJXMiJyAlIChzZWxmLl9uYW1lLCBzZWxmLl9zdGFydF9jbWQpKQotICAgICAgICBzZWxmLl9w
cm9jZXNzID0gc2VsZi5fZXhlY3V0aXZlLnBvcGVuKHNlbGYuX3N0YXJ0X2NtZCwgZW52PXNlbGYu
X2Vudiwgc2hlbGw9RmFsc2UsIHN0ZGluPXNlbGYuX3dzaW4sIHN0ZG91dD1zZWxmLl93c291dCwg
c3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5TVERPVVQpCi0gICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0u
d3JpdGVfdGV4dF9maWxlKHNlbGYuX3BpZF9maWxlLCBzdHIoc2VsZi5fcHJvY2Vzcy5waWQpKQot
ICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2Vzcy5waWQKLQotICAgIGRlZiBfc3RvcF9ydW5uaW5n
X3NlcnZlcihzZWxmKToKLSAgICAgICAgc3VwZXIoUHlXZWJTb2NrZXQsIHNlbGYpLl9zdG9wX3J1
bm5pbmdfc2VydmVyKCkKLQotICAgICAgICBpZiBzZWxmLl93c2luOgotICAgICAgICAgICAgc2Vs
Zi5fd3Npbi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl93c2luID0gTm9uZQotICAgICAgICBp
ZiBzZWxmLl93c291dDoKLSAgICAgICAgICAgIHNlbGYuX3dzb3V0LmNsb3NlKCkKLSAgICAgICAg
ICAgIHNlbGYuX3dzb3V0ID0gTm9uZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvc2VydmVycy9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy9hcGFjaGVfaHR0cF9zZXJ2
ZXIucHkJKHJldmlzaW9uIDg5Nzk1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvc2VydmVycy9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDcgKzM1LDcgQEAgaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIAotZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQorZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQogCiBfbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzLmFwYWNo
ZV9odHRwX3NlcnZlciIpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3NlcnZlcnMvaHR0cF9zZXJ2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy9odHRwX3NlcnZlci5weQkocmV2aXNpb24gODk3
ODUpCShmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9z
ZXJ2ZXIucHk6ODk3ODUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9z
ZXJ2ZXJzL2h0dHBfc2VydmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEzIEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJBIGNsYXNzIHRvIGhl
bHAgc3RhcnQvc3RvcCB0aGUgbGlnaHR0cGQgc2VydmVyIHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIi
IgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQor
Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBodHRwX3NlcnZlcl9iYXNl
CisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQu
aHR0cF9zZXJ2ZXIiKQorCitjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2
ZXJCYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgb3V0cHV0X2Rpciwg
YmFja2dyb3VuZD1GYWxzZSwgcG9ydD1Ob25lLAorICAgICAgICAgICAgICAgICByb290PU5vbmUs
IHJ1bl9iYWNrZ3JvdW5kPU5vbmUsIGxheW91dF90ZXN0c19kaXI9Tm9uZSk6CisgICAgICAgICIi
IkFyZ3M6CisgICAgICAgICAgb3V0cHV0X2RpcjogdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGxh
eW91dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkKKyAgICAgICAgIiIiCisgICAgICAgICMgV2Via2l0
IHRlc3RzCisgICAgICAgIGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18o
c2VsZiwgcG9ydF9vYmopCisgICAgICAgIHNlbGYuX25hbWUgPSAnbGlnaHR0cGQnCisgICAgICAg
IHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0
CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuX3J1bl9iYWNrZ3JvdW5k
ID0gcnVuX2JhY2tncm91bmQKKyAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciA9IGxheW91
dF90ZXN0c19kaXIKKworICAgICAgICBzZWxmLl9waWRfZmlsZSA9IHNlbGYuX2ZpbGVzeXN0ZW0u
am9pbihzZWxmLl9ydW50aW1lX3BhdGgsICclcy5waWQnICUgc2VsZi5fbmFtZSkKKworICAgICAg
ICBpZiBzZWxmLl9wb3J0OgorICAgICAgICAgICAgc2VsZi5fcG9ydCA9IGludChzZWxmLl9wb3J0
KQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9sYXlvdXRfdGVzdHNfZGlyOgorICAgICAgICAgICAg
c2VsZi5fbGF5b3V0X3Rlc3RzX2RpciA9IHNlbGYuX3BvcnRfb2JqLmxheW91dF90ZXN0c19kaXIo
KQorCisgICAgICAgIHNlbGYuX3dlYmtpdF90ZXN0cyA9IG9zLnBhdGguam9pbihzZWxmLl9sYXlv
dXRfdGVzdHNfZGlyLCAnaHR0cCcsICd0ZXN0cycpCisgICAgICAgIHNlbGYuX2pzX3Rlc3RfcmVz
b3VyY2UgPSBvcy5wYXRoLmpvaW4oc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciwgJ2Zhc3QnLCAnanMn
LCAncmVzb3VyY2VzJykKKyAgICAgICAgc2VsZi5fbWVkaWFfcmVzb3VyY2UgPSBvcy5wYXRoLmpv
aW4oc2VsZi5fbGF5b3V0X3Rlc3RzX2RpciwgJ21lZGlhJykKKworICAgICAgICAjIFNlbGYgZ2Vu
ZXJhdGVkIGNlcnRpZmljYXRlIGZvciBTU0wgc2VydmVyIChmb3IgY2xpZW50IGNlcnQgZ2V0Cisg
ICAgICAgICMgPGJhc2UtcGF0aD5cY2hyb21lXHRlc3RcZGF0YVxzc2xcY2VydHNccm9vdF9jYV9j
ZXJ0LmNydCkKKyAgICAgICAgc2VsZi5fcGVtX2ZpbGUgPSBvcy5wYXRoLmpvaW4oCisgICAgICAg
ICAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksICdodHRwZDIu
cGVtJykKKworICAgICAgICAjIE9uZSBtYXBwaW5nIHdoZXJlIHdlIGNhbiBnZXQgdG8gZXZlcnl0
aGluZworICAgICAgICBzZWxmLlZJUlRVQUxDT05GSUcgPSBbXQorCisgICAgICAgIGlmIHNlbGYu
X3dlYmtpdF90ZXN0czoKKyAgICAgICAgICAgIHNlbGYuVklSVFVBTENPTkZJRy5leHRlbmQoCisg
ICAgICAgICAgICAgICAjIFRocmVlIG1hcHBpbmdzIChvbmUgd2l0aCBTU0wpIGZvciBMYXlvdXRU
ZXN0cyBodHRwIHRlc3RzCisgICAgICAgICAgICAgICBbeydwb3J0JzogODAwMCwgJ2RvY3Jvb3Qn
OiBzZWxmLl93ZWJraXRfdGVzdHN9LAorICAgICAgICAgICAgICAgIHsncG9ydCc6IDgwODAsICdk
b2Nyb290Jzogc2VsZi5fd2Via2l0X3Rlc3RzfSwKKyAgICAgICAgICAgICAgICB7J3BvcnQnOiA4
NDQzLCAnZG9jcm9vdCc6IHNlbGYuX3dlYmtpdF90ZXN0cywKKyAgICAgICAgICAgICAgICAgJ3Nz
bGNlcnQnOiBzZWxmLl9wZW1fZmlsZX1dKQorCisgICAgZGVmIF9wcmVwYXJlX2NvbmZpZyhzZWxm
KToKKyAgICAgICAgYmFzZV9jb25mX2ZpbGUgPSBzZWxmLl9wb3J0X29iai5wYXRoX2Zyb21fd2Vi
a2l0X2Jhc2UoJ1Rvb2xzJywKKyAgICAgICAgICAgICdTY3JpcHRzJywgJ3dlYmtpdHB5JywgJ2xh
eW91dF90ZXN0cycsICdwb3J0JywgJ2xpZ2h0dHBkLmNvbmYnKQorICAgICAgICBvdXRfY29uZl9m
aWxlID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsICdsaWdodHRwZC5jb25mJykKKyAg
ICAgICAgdGltZV9zdHIgPSB0aW1lLnN0cmZ0aW1lKCIlZCViJVktJUglTSVTIikKKyAgICAgICAg
YWNjZXNzX2ZpbGVfbmFtZSA9ICJhY2Nlc3MubG9nLSIgKyB0aW1lX3N0ciArICIudHh0IgorICAg
ICAgICBhY2Nlc3NfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGFjY2Vzc19m
aWxlX25hbWUpCisgICAgICAgIGxvZ19maWxlX25hbWUgPSAiZXJyb3IubG9nLSIgKyB0aW1lX3N0
ciArICIudHh0IgorICAgICAgICBlcnJvcl9sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0
X2RpciwgbG9nX2ZpbGVfbmFtZSkKKworICAgICAgICAjIFdyaXRlIG91dCB0aGUgY29uZmlnCisg
ICAgICAgIGJhc2VfY29uZiA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoYmFzZV9j
b25mX2ZpbGUpCisKKyAgICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcmUtd29ya2VkIHNv
IHRoYXQgdGhpcyBibG9jayBjYW4KKyAgICAgICAgIyB1c2Ugd2l0aCBvcGVuKCkgaW5zdGVhZCBv
ZiBhIG1hbnVhbCBmaWxlLmNsb3NlKCkgY2FsbC4KKyAgICAgICAgZiA9IHNlbGYuX2ZpbGVzeXN0
ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcob3V0X2NvbmZfZmlsZSkKKyAgICAgICAgZi53
cml0ZShiYXNlX2NvbmYpCisKKyAgICAgICAgIyBXcml0ZSBvdXQgb3VyIGNnaSBoYW5kbGVycy4g
IFJ1biBwZXJsIHRocm91Z2ggZW52IHNvIHRoYXQgaXQKKyAgICAgICAgIyBwcm9jZXNzZXMgdGhl
ICMhIGxpbmUgYW5kIHJ1bnMgcGVybCB3aXRoIHRoZSBwcm9wZXIgY29tbWFuZAorICAgICAgICAj
IGxpbmUgYXJndW1lbnRzLiBFbXVsYXRlIGFwYWNoZSdzIG1vZF9hc2lzIHdpdGggYSBjYXQgY2dp
IGhhbmRsZXIuCisgICAgICAgIGYud3JpdGUoKCdjZ2kuYXNzaWduID0gKCAiLmNnaSIgID0+ICIv
dXNyL2Jpbi9lbnYiLFxuJworICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIi5wbCIg
ICA9PiAiL3Vzci9iaW4vZW52IixcbicKKyAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAg
ICIuYXNpcyIgPT4gIi9iaW4vY2F0IixcbicKKyAgICAgICAgICAgICAgICAgJyAgICAgICAgICAg
ICAgICIucGhwIiAgPT4gIiVzIiApXG5cbicpICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9wb3J0X29iai5fcGF0aF90b19saWdodHRwZF9waHAoKSkKKworICAg
ICAgICAjIFNldHVwIGxvZyBmaWxlcworICAgICAgICBmLndyaXRlKCgnc2VydmVyLmVycm9ybG9n
ID0gIiVzIlxuJworICAgICAgICAgICAgICAgICAnYWNjZXNzbG9nLmZpbGVuYW1lID0gIiVzIlxu
XG4nKSAlIChlcnJvcl9sb2csIGFjY2Vzc19sb2cpKQorCisgICAgICAgICMgU2V0dXAgdXBsb2Fk
IGZvbGRlcnMuIFVwbG9hZCBmb2xkZXIgaXMgdG8gaG9sZCB0ZW1wb3JhcnkgdXBsb2FkIGZpbGVz
CisgICAgICAgICMgYW5kIGFsc28gUE9TVCBkYXRhLiBUaGlzIGlzIHVzZWQgdG8gc3VwcG9ydCBY
SFIgbGF5b3V0IHRlc3RzIHRoYXQKKyAgICAgICAgIyBkb2VzIFBPU1QuCisgICAgICAgIGYud3Jp
dGUoKCdzZXJ2ZXIudXBsb2FkLWRpcnMgPSAoICIlcyIgKVxuXG4nKSAlIChzZWxmLl9vdXRwdXRf
ZGlyKSkKKworICAgICAgICAjIFNldHVwIGEgbGluayB0byB3aGVyZSB0aGUganMgdGVzdCB0ZW1w
bGF0ZXMgYXJlIHN0b3JlZAorICAgICAgICBmLndyaXRlKCgnYWxpYXMudXJsID0gKCAiL2pzLXRl
c3QtcmVzb3VyY2VzIiA9PiAiJXMiIClcblxuJykgJQorICAgICAgICAgICAgICAgICAgICAoc2Vs
Zi5fanNfdGVzdF9yZXNvdXJjZSkpCisKKyAgICAgICAgIyBTZXR1cCBhIGxpbmsgdG8gd2hlcmUg
dGhlIG1lZGlhIHJlc291cmNlcyBhcmUgc3RvcmVkLgorICAgICAgICBmLndyaXRlKCgnYWxpYXMu
dXJsICs9ICggIi9tZWRpYS1yZXNvdXJjZXMiID0+ICIlcyIgKVxuXG4nKSAlCisgICAgICAgICAg
ICAgICAgICAgIChzZWxmLl9tZWRpYV9yZXNvdXJjZSkpCisKKyAgICAgICAgIyBkdW1wIG91dCBv
ZiB2aXJ0dWFsIGhvc3QgY29uZmlnIGF0IHRoZSBib3R0b20uCisgICAgICAgIGlmIHNlbGYuX3Jv
b3Q6CisgICAgICAgICAgICBpZiBzZWxmLl9wb3J0OgorICAgICAgICAgICAgICAgICMgSGF2ZSBi
b3RoIHBvcnQgYW5kIHJvb3QgZGlyLgorICAgICAgICAgICAgICAgIG1hcHBpbmdzID0gW3sncG9y
dCc6IHNlbGYuX3BvcnQsICdkb2Nyb290Jzogc2VsZi5fcm9vdH1dCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgICMgSGF2ZSBvbmx5IGEgcm9vdCBkaXIgLSBzZXQgdGhlIHBvcnRz
IGFzIGZvciBMYXlvdXRUZXN0cy4KKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdXNlZCBpbiB1
aV90ZXN0cyB0byBydW4gaHR0cCB0ZXN0cyBhZ2FpbnN0IGEgYnJvd3Nlci4KKworICAgICAgICAg
ICAgICAgICMgZGVmYXVsdCBzZXQgb2YgcG9ydHMgYXMgZm9yIExheW91dFRlc3RzIGJ1dCB3aXRo
IGEKKyAgICAgICAgICAgICAgICAjIHNwZWNpZmllZCByb290LgorICAgICAgICAgICAgICAgIG1h
cHBpbmdzID0gW3sncG9ydCc6IDgwMDAsICdkb2Nyb290Jzogc2VsZi5fcm9vdH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MCwgJ2RvY3Jvb3QnOiBzZWxmLl9yb290
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnZG9jcm9vdCc6
IHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc2xjZXJ0Jzogc2Vs
Zi5fcGVtX2ZpbGV9XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFwcGluZ3MgPSBzZWxm
LlZJUlRVQUxDT05GSUcKKyAgICAgICAgZm9yIG1hcHBpbmcgaW4gbWFwcGluZ3M6CisgICAgICAg
ICAgICBzc2xfc2V0dXAgPSAnJworICAgICAgICAgICAgaWYgJ3NzbGNlcnQnIGluIG1hcHBpbmc6
CisgICAgICAgICAgICAgICAgc3NsX3NldHVwID0gKCcgIHNzbC5lbmdpbmUgPSAiZW5hYmxlIlxu
JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBzc2wucGVtZmlsZSA9ICIlcyJcbicg
JSBtYXBwaW5nWydzc2xjZXJ0J10pCisKKyAgICAgICAgICAgIGYud3JpdGUoKCckU0VSVkVSWyJz
b2NrZXQiXSA9PSAiMTI3LjAuMC4xOiVkIiB7XG4nCisgICAgICAgICAgICAgICAgICAgICAnICBz
ZXJ2ZXIuZG9jdW1lbnQtcm9vdCA9ICIlcyJcbicgKworICAgICAgICAgICAgICAgICAgICAgc3Ns
X3NldHVwICsKKyAgICAgICAgICAgICAgICAgICAgICd9XG5cbicpICUgKG1hcHBpbmdbJ3BvcnQn
XSwgbWFwcGluZ1snZG9jcm9vdCddKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZXhl
Y3V0YWJsZSA9IHNlbGYuX3BvcnRfb2JqLl9wYXRoX3RvX2xpZ2h0dHBkKCkKKyAgICAgICAgbW9k
dWxlX3BhdGggPSBzZWxmLl9wb3J0X29iai5fcGF0aF90b19saWdodHRwZF9tb2R1bGVzKCkKKyAg
ICAgICAgc3RhcnRfY21kID0gW2V4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAjIE5l
d2x5IHdyaXR0ZW4gY29uZmlnIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICctZicsIG9zLnBh
dGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCAnbGlnaHR0cGQuY29uZicpLAorICAgICAgICAgICAg
ICAgICAgICAgIyBXaGVyZSBpdCBjYW4gZmluZCBpdHMgbW9kdWxlIGR5bmFtaWMgbGlicmFyaWVz
CisgICAgICAgICAgICAgICAgICAgICAnLW0nLCBtb2R1bGVfcGF0aF0KKworICAgICAgICBpZiBu
b3Qgc2VsZi5fcnVuX2JhY2tncm91bmQ6CisgICAgICAgICAgICBzdGFydF9jbWQuYXBwZW5kKCMg
RG9uJ3QgYmFja2dyb3VuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLUQnKQorCisg
ICAgICAgICMgQ29weSBsaWJsaWdodGNvbXAuZHlsaWIgdG8gL3RtcC9saWdodHRwZC9saWIgdG8g
d29yayBhcm91bmQgdGhlCisgICAgICAgICMgYnVnIHRoYXQgbW9kX2FsaWFzLnNvIGxvYWRzIGl0
IGZyb20gdGhlIGhhcmQgY29kZWQgcGF0aC4KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdk
YXJ3aW4nOgorICAgICAgICAgICAgdG1wX21vZHVsZV9wYXRoID0gJy90bXAvbGlnaHR0cGQvbGli
JworICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRtcF9tb2R1bGVfcGF0aCk6Cisg
ICAgICAgICAgICAgICAgb3MubWFrZWRpcnModG1wX21vZHVsZV9wYXRoKQorICAgICAgICAgICAg
bGliX2ZpbGUgPSAnbGlibGlnaHRjb21wLmR5bGliJworICAgICAgICAgICAgc2VsZi5fZmlsZXN5
c3RlbS5jb3B5ZmlsZShvcy5wYXRoLmpvaW4obW9kdWxlX3BhdGgsIGxpYl9maWxlKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRtcF9tb2R1bGVf
cGF0aCwgbGliX2ZpbGUpKQorCisgICAgICAgIHNlbGYuX3N0YXJ0X2NtZCA9IHN0YXJ0X2NtZAor
ICAgICAgICBzZWxmLl9lbnYgPSBzZWxmLl9wb3J0X29iai5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2
ZXIoKQorICAgICAgICBzZWxmLl9tYXBwaW5ncyA9IG1hcHBpbmdzCisKKyAgICBkZWYgX3JlbW92
ZV9zdGFsZV9sb2dzKHNlbGYpOgorICAgICAgICAjIFNvbWV0aW1lcyBsb2dzIGFyZSBvcGVuIGlu
IG90aGVyIHByb2Nlc3NlcyBidXQgdGhleSBzaG91bGQgY2xlYXIgZXZlbnR1YWxseS4KKyAgICAg
ICAgZm9yIGxvZ19wcmVmaXggaW4gKCdhY2Nlc3MubG9nLScsICdlcnJvci5sb2ctJyk6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX2xvZ19maWxlcyhzZWxm
Ll9vdXRwdXRfZGlyLCBsb2dfcHJlZml4KQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6
CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdGYWlsZWQgdG8gcmVtb3ZlIG9sZCAlcyAl
cyBmaWxlcycgJSBzZWxmLl9uYW1lLCBsb2dfcHJlZml4KQorCisgICAgZGVmIF9zcGF3bl9wcm9j
ZXNzKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyAlcyBzZXJ2ZXIsIGNtZD0i
JXMiJyAlIChzZWxmLl9uYW1lLCBzZWxmLl9zdGFydF9jbWQpKQorICAgICAgICBwcm9jZXNzID0g
c2VsZi5fZXhlY3V0aXZlLnBvcGVuKHNlbGYuX3N0YXJ0X2NtZCwgZW52PXNlbGYuX2Vudiwgc2hl
bGw9RmFsc2UsIHN0ZGVycj1zZWxmLl9leGVjdXRpdmUuUElQRSkKKyAgICAgICAgcGlkID0gcHJv
Y2Vzcy5waWQKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5f
cGlkX2ZpbGUsIHN0cihwaWQpKQorICAgICAgICByZXR1cm4gcGlkCisKKyAgICBkZWYgX3N0b3Bf
cnVubmluZ19zZXJ2ZXIoc2VsZik6CisgICAgICAgICMgRklYTUU6IEl0IHdvdWxkIGJlIG5pY2Ug
aWYgd2UgaGFkIGEgY2xlYW5lciB3YXkgb2Yga2lsbGluZyB0aGlzIHByb2Nlc3MuCisgICAgICAg
ICMgQ3VycmVudGx5IHdlIHRocm93IGF3YXkgdGhlIHByb2Nlc3Mgb2JqZWN0IGNyZWF0ZWQgaW4g
X3NwYXduX3Byb2Nlc3MsCisgICAgICAgICMgc2luY2UgdGhlcmUgZG9lc24ndCBhcHBlYXIgdG8g
YmUgYW55IHdheSB0byBraWxsIHRoZSBzZXJ2ZXIgYW55IG1vcmUKKyAgICAgICAgIyBjbGVhbmx5
IHVzaW5nIGl0IHRoYW4ganVzdCBraWxsaW5nIHRoZSBwaWQsIGFuZCB3ZSBuZWVkIHRvIHN1cHBv
cnQKKyAgICAgICAgIyBraWxsaW5nIGEgcGlkIGRpcmVjdGx5IGFueXdheSBmb3IgcnVuLXdlYmtp
dC1odHRwZCBhbmQgcnVuLXdlYmtpdC13ZWJzb2NrZXRzZXJ2ZXIuCisgICAgICAgIHNlbGYuX3dh
aXRfZm9yX2FjdGlvbihzZWxmLl9jaGVja19hbmRfa2lsbCkKKyAgICAgICAgaWYgc2VsZi5fZmls
ZXN5c3RlbS5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5
c3RlbS5yZW1vdmUoc2VsZi5fcGlkX2ZpbGUpCisKKyAgICBkZWYgX2NoZWNrX2FuZF9raWxsKHNl
bGYpOgorICAgICAgICBpZiBzZWxmLl9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoc2VsZi5f
cGlkKToKKyAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5fcGlk
KQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL2h0dHBfc2VydmVyLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZl
cnMvaHR0cF9zZXJ2ZXIucHkJKHJldmlzaW9uIDg5Nzk1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy9odHRwX3NlcnZlci5weQkod29ya2luZyBjb3B5KQpA
QCAtMzQsOSArMzQsOSBAQCBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiAKLWZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKK2Zy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UK
IAotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5o
dHRwX3NlcnZlciIpCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90
ZXN0cy5zZXJ2ZXJzLmh0dHBfc2VydmVyIikKIAogY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJf
YmFzZS5IdHRwU2VydmVyQmFzZSk6CiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3NlcnZlcnMvaHR0cF9zZXJ2ZXJfYmFzZS5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL2h0dHBfc2VydmVyX2Jhc2Uu
cHkJKHJldmlzaW9uIDg5Nzg1KQkoZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2Jhc2UucHk6ODk3ODUpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL2h0dHBfc2VydmVyX2Jhc2UucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyMDYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyIiIkJhc2UgY2xhc3Mgd2l0aCBjb21tb24gcm91dGluZXMgYmV0d2VlbiB0aGUg
QXBhY2hlLCBMaWdodHRwZCwgYW5kIHdlYnNvY2tldCBzZXJ2ZXJzLiIiIgorCitpbXBvcnQgZXJy
bm8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3lzCitpbXBvcnQgdGVt
cGZpbGUKK2ltcG9ydCB0aW1lCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQuaHR0cF9zZXJ2ZXJfYmFzZSIpCisKKworY2xhc3MgU2VydmVyRXJy
b3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgSHR0cFNlcnZlckJhc2Uob2JqZWN0
KToKKyAgICAiIiJBIHNrZWxldG9uIGNsYXNzIGZvciBzdGFydGluZyBhbmQgc3RvcHBpbmcgc2Vy
dmVycyB1c2VkIGJ5IHRoZSBsYXlvdXQgdGVzdHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydF9vYmopOgorICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBwb3J0X29iai5fZXhlY3V0
aXZlCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0X29iai5fZmlsZXN5c3RlbQorICAg
ICAgICBzZWxmLl9uYW1lID0gJzx2aXJ0dWFsPicKKyAgICAgICAgc2VsZi5fbWFwcGluZ3MgPSB7
fQorICAgICAgICBzZWxmLl9waWQgPSBOb25lCisgICAgICAgIHNlbGYuX3BpZF9maWxlID0gTm9u
ZQorICAgICAgICBzZWxmLl9wb3J0X29iaiA9IHBvcnRfb2JqCisKKyAgICAgICAgIyBXZSBuZWVk
IGEgbm9uLWNoZWNrb3V0LWRlcGVuZGVudCBwbGFjZSB0byBwdXQgbG9jayBmaWxlcywgZXRjLiBX
ZQorICAgICAgICAjIGRvbid0IHVzZSB0aGUgUHl0aG9uIGRlZmF1bHQgb24gdGhlIE1hYyBiZWNh
dXNlIGl0IGRlZmF1bHRzIHRvIGEKKyAgICAgICAgIyByYW5kb21seS1nZW5lcmF0ZWQgZGlyZWN0
b3J5IHVuZGVyIC92YXIvZm9sZGVycyBhbmQgbm8gb25lIHdvdWxkIGV2ZXIKKyAgICAgICAgIyBs
b29rIHRoZXJlLgorICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAg
ICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgdG1wZGlyID0gJy90
bXAnCisKKyAgICAgICAgc2VsZi5fcnVudGltZV9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KHRtcGRpciwgIldlYktpdCIpCisgICAgICAgIHBvcnRfb2JqLm1heWJlX21ha2VfZGlyZWN0b3J5
KHNlbGYuX3J1bnRpbWVfcGF0aCkKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgIiIi
U3RhcnRzIHRoZSBzZXJ2ZXIuIEl0IGlzIGFuIGVycm9yIHRvIHN0YXJ0IGFuIGFscmVhZHkgc3Rh
cnRlZCBzZXJ2ZXIuCisKKyAgICAgICAgVGhpcyBtZXRob2QgYWxzbyBzdG9wcyBhbnkgc3RhbGUg
c2VydmVycyBzdGFydGVkIGJ5IGEgcHJldmlvdXMgaW5zdGFuY2UuIiIiCisgICAgICAgIGFzc2Vy
dCBub3Qgc2VsZi5fcGlkLCAnJXMgc2VydmVyIGlzIGFscmVhZHkgcnVubmluZycgJSBzZWxmLl9u
YW1lCisKKyAgICAgICAgIyBTdG9wIGFueSBzdGFsZSBzZXJ2ZXJzIGxlZnQgb3ZlciBmcm9tIHBy
ZXZpb3VzIGluc3RhbmNlcy4KKyAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc2Vs
Zi5fcGlkX2ZpbGUpOgorICAgICAgICAgICAgc2VsZi5fcGlkID0gaW50KHNlbGYuX2ZpbGVzeXN0
ZW0ucmVhZF90ZXh0X2ZpbGUoc2VsZi5fcGlkX2ZpbGUpKQorICAgICAgICAgICAgc2VsZi5fc3Rv
cF9ydW5uaW5nX3NlcnZlcigpCisgICAgICAgICAgICBzZWxmLl9waWQgPSBOb25lCisKKyAgICAg
ICAgc2VsZi5fcmVtb3ZlX3N0YWxlX2xvZ3MoKQorICAgICAgICBzZWxmLl9wcmVwYXJlX2NvbmZp
ZygpCisgICAgICAgIHNlbGYuX2NoZWNrX3RoYXRfYWxsX3BvcnRzX2FyZV9hdmFpbGFibGUoKQor
CisgICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX3NwYXduX3Byb2Nlc3MoKQorCisgICAgICAgIGlm
IHNlbGYuX3dhaXRfZm9yX2FjdGlvbihzZWxmLl9pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9y
dHMpOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgKHBp
ZCA9ICVkKSIgJSAoc2VsZi5fbmFtZSwgc2VsZi5fcGlkKSkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHNlbGYuX3N0b3BfcnVubmluZ19zZXJ2ZXIoKQorICAgICAgICAgICAgcmFpc2UgU2Vy
dmVyRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXInICUgc2VsZi5fbmFtZSkKKworICAg
IGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wcyB0aGUgc2VydmVyLiBTdG9wcGluZyBh
IHNlcnZlciB0aGF0IGlzbid0IHN0YXJ0ZWQgaXMgaGFybWxlc3MuIiIiCisgICAgICAgIGFjdHVh
bF9waWQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYuX3Bp
ZF9maWxlKToKKyAgICAgICAgICAgIGFjdHVhbF9waWQgPSBpbnQoc2VsZi5fZmlsZXN5c3RlbS5y
ZWFkX3RleHRfZmlsZShzZWxmLl9waWRfZmlsZSkpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5f
cGlkOgorICAgICAgICAgICAgICAgIHNlbGYuX3BpZCA9IGFjdHVhbF9waWQKKworICAgICAgICBp
ZiBub3Qgc2VsZi5fcGlkOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IGFj
dHVhbF9waWQ6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ0ZhaWxlZCB0byBzdG9wICVzOiBw
aWQgZmlsZSBpcyBtaXNzaW5nJyAlIHNlbGYuX25hbWUpCisgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgaWYgc2VsZi5fcGlkICE9IGFjdHVhbF9waWQ6CisgICAgICAgICAgICBfbG9nLndhcm5p
bmcoJ0ZhaWxlZCB0byBzdG9wICVzOiBwaWQgZmlsZSBjb250YWlucyAlZCwgbm90ICVkJyAlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX25hbWUsIGFjdHVhbF9waWQsIHNlbGYuX3Bp
ZCkpCisgICAgICAgICAgICAjIFRyeSB0byBraWxsIHRoZSBleGlzdGluZyBwaWQsIGFueXdheSwg
aW4gY2FzZSBpdCBnb3Qgb3JwaGFuZWQuCisgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUua2ls
bF9wcm9jZXNzKHNlbGYuX3BpZCkKKyAgICAgICAgICAgIHNlbGYuX3BpZCA9IE5vbmUKKyAgICAg
ICAgICAgIHJldHVybgorCisgICAgICAgIF9sb2cuZGVidWcoIkF0dGVtcHRpbmcgdG8gc2h1dCBk
b3duICVzIHNlcnZlciBhdCBwaWQgJWQiICUgKHNlbGYuX25hbWUsIHNlbGYuX3BpZCkpCisgICAg
ICAgIHNlbGYuX3N0b3BfcnVubmluZ19zZXJ2ZXIoKQorICAgICAgICBfbG9nLmRlYnVnKCIlcyBz
ZXJ2ZXIgYXQgcGlkICVkIHN0b3BwZWQiICUgKHNlbGYuX25hbWUsIHNlbGYuX3BpZCkpCisgICAg
ICAgIHNlbGYuX3BpZCA9IE5vbmUKKworICAgIGRlZiBfcHJlcGFyZV9jb25maWcoc2VsZik6Cisg
ICAgICAgICIiIlRoaXMgcm91dGluZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIHRv
IGRvIGFueSBzb3J0CisgICAgICAgIG9mIGluaXRpYWxpemF0aW9uIHJlcXVpcmVkIHByaW9yIHRv
IHN0YXJ0aW5nIHRoZSBzZXJ2ZXIgdGhhdCBtYXkgZmFpbC4iIiIKKyAgICAgICAgcGFzcworCisg
ICAgZGVmIF9yZW1vdmVfc3RhbGVfbG9ncyhzZWxmKToKKyAgICAgICAgIiIiVGhpcyByb3V0aW5l
IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMgdG8gdHJ5IGFuZCByZW1vdmUgbG9ncwor
ICAgICAgICBsZWZ0IG92ZXIgZnJvbSBhIHByaW9yIHJ1bi4gVGhpcyByb3V0aW5lIHNob3VsZCBs
b2cgd2FybmluZ3MgaWYgdGhlCisgICAgICAgIGZpbGVzIGNhbm5vdCBiZSBkZWxldGVkLCBidXQg
c2hvdWxkIG5vdCBmYWlsIHVubGVzcyBmYWlsdXJlIHRvCisgICAgICAgIGRlbGV0ZSB0aGUgbG9n
cyB3aWxsIGFjdHVhbGx5IGNhdXNlIHN0YXJ0KCkgdG8gZmFpbC4iIiIKKyAgICAgICAgcGFzcwor
CisgICAgZGVmIF9zcGF3bl9wcm9jZXNzKHNlbGYpOgorICAgICAgICAiIiJUaGlzIHJvdXRpbmUg
bXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIHRvIGFjdHVhbGx5IHN0YXJ0IHRoZSBz
ZXJ2ZXIuCisKKyAgICAgICAgVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIHBpZCBvZiB0aGUgc3Rh
cnRlZCBwcm9jZXNzLCBhbmQgYWxzbyBlbnN1cmVzIHRoYXQgdGhhdAorICAgICAgICBwaWQgaGFz
IGJlZW4gd3JpdHRlbiB0byBzZWxmLl9waWRfZmlsZS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgX3N0b3BfcnVubmluZ19zZXJ2ZXIoc2VsZik6Cisg
ICAgICAgICIiIlRoaXMgcm91dGluZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMg
dG8gYWN0dWFsbHkgc3RvcCB0aGUgcnVubmluZyBzZXJ2ZXIgbGlzdGVkIGluIHNlbGYuX3BpZF9m
aWxlLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgICMgVXRp
bGl0eSByb3V0aW5lcy4KKworICAgIGRlZiBfcmVtb3ZlX2xvZ19maWxlcyhzZWxmLCBmb2xkZXIs
IHN0YXJ0c193aXRoKToKKyAgICAgICAgZmlsZXMgPSBzZWxmLl9maWxlc3lzdGVtLmxpc3RkaXIo
Zm9sZGVyKQorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIGZpbGUu
c3RhcnRzd2l0aChzdGFydHNfd2l0aCk6CisgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gc2Vs
Zi5fZmlsZXN5c3RlbS5qb2luKGZvbGRlciwgZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9m
aWxlc3lzdGVtLnJlbW92ZShmdWxsX3BhdGgpCisKKyAgICBkZWYgX3dhaXRfZm9yX2FjdGlvbihz
ZWxmLCBhY3Rpb24sIHdhaXRfc2Vjcz0yMC4wLCBzbGVlcF9zZWNzPTEuMCk6CisgICAgICAgICIi
IlJlcGVhdCB0aGUgYWN0aW9uIGZvciB3YWl0X3NlYyBvciB1bnRpbCBpdCBzdWNjZWVkcywgc2xl
ZXBpbmcgZm9yIHNsZWVwX3NlY3MKKyAgICAgICAgaW4gYmV0d2VlbiBlYWNoIGF0dGVtcHQuIFJl
dHVybnMgd2hldGhlciBpdCBzdWNjZWVkZWQuIiIiCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1l
LnRpbWUoKQorICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUgPCB3YWl0X3Nl
Y3M6CisgICAgICAgICAgICBpZiBhY3Rpb24oKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1
ZQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiV2FpdGluZyBmb3IgYWN0aW9uOiAlcyIgJSBhY3Rp
b24pCisgICAgICAgICAgICB0aW1lLnNsZWVwKHNsZWVwX3NlY3MpCisKKyAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICBkZWYgX2lzX3NlcnZlcl9ydW5uaW5nX29uX2FsbF9wb3J0cyhzZWxmKToK
KyAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBzZXJ2ZXIgaXMgcnVubmluZyBvbiBhbGwg
dGhlIGRlc2lyZWQgcG9ydHMuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9leGVjdXRpdmUuY2hl
Y2tfcnVubmluZ19waWQoc2VsZi5fcGlkKToKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIlNlcnZl
ciBpc24ndCBydW5uaW5nIGF0IGFsbCIpCisgICAgICAgICAgICByYWlzZSBTZXJ2ZXJFcnJvcigi
U2VydmVyIGV4aXRlZCIpCisKKyAgICAgICAgZm9yIG1hcHBpbmcgaW4gc2VsZi5fbWFwcGluZ3M6
CisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBwb3J0ID0gbWFw
cGluZ1sncG9ydCddCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5jb25uZWN0
KCgnbG9jYWxob3N0JywgcG9ydCkpCisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVy
IHJ1bm5pbmcgb24gJWQiICUgcG9ydCkKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3Is
IGU6CisgICAgICAgICAgICAgICAgIyB0aGlzIGJyYW5jaCBpcyBuZWVkZWQgb24gTWFjIDEwLjUg
LyBweXRob24gMi41CisgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdIG5vdCBpbiAoZXJybm8u
RUNPTk5SRUZVU0VELCBlcnJuby5FQ09OTlJFU0VUKToKKyAgICAgICAgICAgICAgICAgICAgcmFp
c2UKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJTZXJ2ZXIgTk9UIHJ1bm5pbmcgb24gJWQ6
ICVzIiAlIChwb3J0LCBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAg
ICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gbm90IGlu
IChlcnJuby5FQ09OTlJFRlVTRUQsIGVycm5vLkVDT05OUkVTRVQpOgorICAgICAgICAgICAgICAg
ICAgICByYWlzZQorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIlNlcnZlciBOT1QgcnVubmlu
ZyBvbiAlZDogJXMiICUgKHBvcnQsIGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQor
ICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAg
cmV0dXJuIFRydWUKKworICAgIGRlZiBfY2hlY2tfdGhhdF9hbGxfcG9ydHNfYXJlX2F2YWlsYWJs
ZShzZWxmKToKKyAgICAgICAgZm9yIG1hcHBpbmcgaW4gc2VsZi5fbWFwcGluZ3M6CisgICAgICAg
ICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBzLnNldHNvY2tvcHQoc29ja2V0
LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgICAgICBwb3J0ID0g
bWFwcGluZ1sncG9ydCddCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5iaW5k
KCgnbG9jYWxob3N0JywgcG9ydCkpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAg
ICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUxSRUFEWSwgZXJybm8uRUFERFJJ
TlVTRSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNlcnZlckVycm9yKCdQb3J0ICVkIGlz
IGFscmVhZHkgaW4gdXNlLicgJSBwb3J0KQorICAgICAgICAgICAgICAgIGVsaWYgc3lzLnBsYXRm
b3JtID09ICd3aW4zMicgYW5kIGUuZXJybm8gaW4gKGVycm5vLldTQUVBQ0NFUywpOgorICAgICAg
ICAgICAgICAgICAgICByYWlzZSBTZXJ2ZXJFcnJvcignUG9ydCAlZCBpcyBhbHJlYWR5IGluIHVz
ZS4nICUgcG9ydCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBy
YWlzZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvaHR0cF9zZXJ2
ZXJfYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9zZXJ2ZXJzL2h0dHBfc2VydmVyX2Jhc2UucHkJKHJldmlzaW9uIDg5Nzk1KQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy9odHRwX3NlcnZlcl9iYXNl
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGltcG9ydCBzeXMKIGltcG9ydCB0
ZW1wZmlsZQogaW1wb3J0IHRpbWUKIAotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRw
eS5sYXlvdXRfdGVzdHMucG9ydC5odHRwX3NlcnZlcl9iYXNlIikKK19sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMuaHR0cF9zZXJ2ZXJfYmFzZSIp
CiAKIAogY2xhc3MgU2VydmVyRXJyb3IoRXhjZXB0aW9uKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250ZXN0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Nl
cnZlcnMvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250ZXN0LnB5CShyZXZpc2lvbiA4OTc4NSkJKGZy
b20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9p
bnRlZ3JhdGlvbnRlc3QucHk6ODk3ODUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9zZXJ2ZXJzL2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkludGVncmF0aW9uIHRl
c3RzIGZvciB0aGUgbmV3LXJ1bi13ZWJraXQtaHR0cGQgYW5kIG5ldy1ydW4td2Via2l0LXdlYnNv
Y2tldHNlcnZlciBzY3JpcHRzIiIiCisKKyMgRklYTUU6IFJlbmFtZSB0aGlzIGZpbGUgdG8gc29t
ZXRoaW5nIG1vcmUgZGVzY3JpcHRpdmUuCisKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBv
cnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxl
CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBv
cnQgcG9ydF90ZXN0Y2FzZQorCisKK2NsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
KyAgICAiIiJCYXNpYyBmcmFtZXdvcmsgZm9yIHNjcmlwdCB0ZXN0cy4iIiIKKyAgICBIT1NUID0g
J2xvY2FsaG9zdCcKKworICAgICMgT3ZlcnJpZGUgaW4gYWN0dWFsIHRlc3QgY2xhc3Nlcy4KKyAg
ICBQT1JUUyA9IE5vbmUKKyAgICBTQ1JJUFRfTkFNRSA9IE5vbmUKKworICAgIGRlZiBhc3NlcnRf
c2VydmVyc19hcmVfZG93bihzZWxmLCBwb3J0cz1Ob25lKToKKyAgICAgICAgcG9ydHMgPSBwb3J0
cyBvciBzZWxmLlBPUlRTCisgICAgICAgIGZvciBwb3J0IGluIHBvcnRzOgorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tldCgpCisgICAg
ICAgICAgICAgICAgdGVzdF9zb2NrZXQuY29ubmVjdCgoc2VsZi5IT1NULCBwb3J0KSkKKyAgICAg
ICAgICAgICAgICBzZWxmLmZhaWwoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Cisg
ICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXJybm8gaW4gKGVycm5vLkVDT05OUkVG
VVNFRCwgZXJybm8uRUNPTk5SRVNFVCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAg
ICAgICAgIHRlc3Rfc29ja2V0LmNsb3NlKCkKKworICAgIGRlZiBhc3NlcnRfc2VydmVyc19hcmVf
dXAoc2VsZiwgcG9ydHM9Tm9uZSk6CisgICAgICAgIHBvcnRzID0gcG9ydHMgb3Igc2VsZi5QT1JU
UworICAgICAgICBmb3IgcG9ydCBpbiBwb3J0czoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICB0ZXN0X3NvY2tldCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgICAgIHRl
c3Rfc29ja2V0LmNvbm5lY3QoKHNlbGYuSE9TVCwgcG9ydCkpCisgICAgICAgICAgICBleGNlcHQg
SU9FcnJvciwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWxlZCB0byBjb25uZWN0
IHRvICVzOiVkJyAlIChzZWxmLkhPU1QsIHBvcnQpKQorICAgICAgICAgICAgZmluYWxseToKKyAg
ICAgICAgICAgICAgICB0ZXN0X3NvY2tldC5jbG9zZSgpCisKKyAgICBkZWYgcnVuX3NjcmlwdChz
ZWxmLCBhcmdzKToKKyAgICAgICAgc2NyaXB0X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRo
LmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgo
X19maWxlX18pKSkpKQorICAgICAgICBzY3JpcHRfcGF0aCA9IG9zLnBhdGguam9pbihzY3JpcHRf
ZGlyLCBzZWxmLlNDUklQVF9OQU1FKQorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKFtz
eXMuZXhlY3V0YWJsZSwgc2NyaXB0X3BhdGhdICsgYXJncywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQ
RSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X3Nl
cnZlcl9fbm9ybWFsKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5TQ1JJUFRfTkFNRToKKyAg
ICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24o
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcics
ICdzdGFydCddKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfdXAoKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9w
J10pLCAwKQorICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKCkKKworICAgIGRl
ZiBpbnRlZ3JhdGlvbl90ZXN0X3NlcnZlcl9fZmFpbHMoc2VsZik6CisgICAgICAgIGlmIG5vdCBz
ZWxmLlNDUklQVF9OQU1FOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBUZXN0IHRo
YXQgaWYgYSBwb3J0IGlzbid0IGF2YWlsYWJsZSwgdGhlIGNhbGwgZmFpbHMuCisgICAgICAgIGZv
ciBwb3J0X251bWJlciBpbiBzZWxmLlBPUlRTOgorICAgICAgICAgICAgdGVzdF9zb2NrZXQgPSBz
b2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmJpbmQoKHNlbGYuSE9TVCwgcG9ydF9udW1i
ZXIpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CisgICAgICAgICAg
ICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBRERSSU5VU0UsIGVycm5vLkVBTFJFQURZ
KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnY291bGQgbm90IGJpbmQgdG8g
cG9ydCAlZDogJXMnICUgKHBvcnRfbnVtYmVyLCBzdHIoZSkpKQorICAgICAgICAgICAgICAgICAg
ICByYWlzZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3Njcmlw
dChbJy0tc2VydmVyJywgJ3N0YXJ0J10pLCAxKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgICAgICBzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9wJ10pCisgICAgICAg
ICAgICAgICAgdGVzdF9zb2NrZXQuY2xvc2UoKQorCisgICAgICAgICMgVGVzdCB0aGF0IGNhbGxp
bmcgc3RvcCgpIHR3aWNlIGlzIGhhcm1sZXNzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhz
ZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9wJ10pLCAwKQorCisgICAgZGVmIG1heWJl
X21ha2VfZGlyKHNlbGYsICpjb21wcyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1h
a2VkaXJzKG9zLnBhdGguam9pbigqY29tcHMpKQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToK
KyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAg
IHJhaXNlCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9wb3J0X2FuZF9yb290KHNlbGYpOgor
ICAgICAgICBpZiBub3Qgc2VsZi5TQ1JJUFRfTkFNRToKKyAgICAgICAgICAgIHJldHVybgorCisg
ICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSd3ZWJraXRweXRlc3QnKQor
ICAgICAgICBzZWxmLm1heWJlX21ha2VfZGlyKHRtcGRpciwgJ2h0dHAnLCAndGVzdHMnLCAnd2Vi
c29ja2V0JykKKyAgICAgICAgc2VsZi5tYXliZV9tYWtlX2Rpcih0bXBkaXIsICdmYXN0JywgJ2pz
JywgJ3Jlc291cmNlcycpCisgICAgICAgIHNlbGYubWF5YmVfbWFrZV9kaXIodG1wZGlyLCAnbWVk
aWEnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oWzE4MDAwXSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3Rh
cnQnLCAnLS1wb3J0PTE4MDAwJywgJy0tcm9vdCcsIHRtcGRpcl0pLCAwKQorICAgICAgICBzZWxm
LmFzc2VydF9zZXJ2ZXJzX2FyZV91cChbMTgwMDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9wJ10pLCAwKQorICAgICAgICBzZWxm
LmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKFsxODAwMF0pCisKKworY2xhc3MgSFRUUFNlcnZlclRl
c3QoQmFzZVRlc3QpOgorICAgICIiIlRlc3RzIHRoYXQgbmV3LXJ1bi13ZWJraXQtaHR0cCBtdXN0
IHBhc3MuIiIiCisKKyAgICBQT1JUUyA9ICg4MDAwLCA4MDgwLCA4NDQzKQorICAgIFNDUklQVF9O
QU1FID0gJ25ldy1ydW4td2Via2l0LWh0dHBkJworCisKK2NsYXNzIFdlYnNvY2tldHNlcnZlclRl
c3QoQmFzZVRlc3QpOgorICAgICIiIlRlc3RzIHRoYXQgbmV3LXJ1bi13ZWJraXQtd2Vic29ja2V0
c2VydmVyIG11c3QgcGFzcy4iIiIKKworICAgICMgRklYTUU6IHRlc3QgVExTIGF0IHNvbWUgcG9p
bnQ/CisgICAgUE9SVFMgPSAoODg4MCwgKQorICAgIFNDUklQVF9OQU1FID0gJ25ldy1ydW4td2Vi
a2l0LXdlYnNvY2tldHNlcnZlcicKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAg
IHBvcnRfdGVzdGNhc2UubWFpbigpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9zZXJ2ZXJzL3dlYnNvY2tldF9zZXJ2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJzb2NrZXRfc2VydmVyLnB5
CShyZXZpc2lvbiA4OTc4NSkJKGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5Ojg5Nzg1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJzb2NrZXRfc2VydmVyLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTY2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisiIiJBIGNsYXNzIHRvIGhlbHAgc3RhcnQvc3RvcCB0aGUgUHlXZWJTb2NrZXQgc2Vy
dmVyIHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9z
CitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0IGltcG9ydCBodHRwX3NlcnZlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBp
bXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtp
dHB5LmxheW91dF90ZXN0cy5wb3J0LndlYnNvY2tldF9zZXJ2ZXIiKQorCitfV1NfTE9HX1BSRUZJ
WCA9ICdweXdlYnNvY2tldC53cy5sb2ctJworX1dTU19MT0dfUFJFRklYID0gJ3B5d2Vic29ja2V0
Lndzcy5sb2ctJworCitfREVGQVVMVF9XU19QT1JUID0gODg4MAorX0RFRkFVTFRfV1NTX1BPUlQg
PSA5MzIzCisKKworY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgb3V0cHV0X2RpciwgcG9ydD1fREVGQVVMVF9X
U19QT1JULAorICAgICAgICAgICAgICAgICByb290PU5vbmUsIHVzZV90bHM9RmFsc2UsCisgICAg
ICAgICAgICAgICAgIHBpZGZpbGU9Tm9uZSk6CisgICAgICAgICIiIkFyZ3M6CisgICAgICAgICAg
b3V0cHV0X2RpcjogdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdCBk
aXJlY3RvcnkKKyAgICAgICAgIiIiCisgICAgICAgIGh0dHBfc2VydmVyLkxpZ2h0dHBkLl9faW5p
dF9fKHNlbGYsIHBvcnRfb2JqLCBvdXRwdXRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwb3J0PV9ERUZBVUxUX1dTX1BPUlQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJvb3Q9cm9vdCkKKyAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9
IG91dHB1dF9kaXIKKyAgICAgICAgc2VsZi5fcGlkX2ZpbGUgPSBwaWRmaWxlCisgICAgICAgIHNl
bGYuX3Byb2Nlc3MgPSBOb25lCisKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAg
c2VsZi5fcm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi5fdXNlX3RscyA9IHVzZV90bHMKKworICAg
ICAgICBzZWxmLl9uYW1lID0gJ3B5d2Vic29ja2V0JworICAgICAgICBpZiBzZWxmLl91c2VfdGxz
OgorICAgICAgICAgICAgc2VsZi5fbmFtZSA9ICdweXdlYnNvY2tldF9zZWN1cmUnCisKKyAgICAg
ICAgc2VsZi5fcHJpdmF0ZV9rZXkgPSBzZWxmLl9wZW1fZmlsZQorICAgICAgICBzZWxmLl9jZXJ0
aWZpY2F0ZSA9IHNlbGYuX3BlbV9maWxlCisgICAgICAgIGlmIHNlbGYuX3BvcnQ6CisgICAgICAg
ICAgICBzZWxmLl9wb3J0ID0gaW50KHNlbGYuX3BvcnQpCisgICAgICAgIHNlbGYuX3dzaW4gPSBO
b25lCisgICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQorICAgICAgICBzZWxmLl9tYXBwaW5ncyA9
IFt7J3BvcnQnOiBzZWxmLl9wb3J0fV0KKworICAgICAgICBpZiBub3Qgc2VsZi5fcGlkX2ZpbGU6
CisgICAgICAgICAgICBzZWxmLl9waWRfZmlsZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxm
Ll9ydW50aW1lX3BhdGgsICclcy5waWQnICUgc2VsZi5fbmFtZSkKKworICAgICAgICAjIFdlYmtp
dCB0ZXN0cworICAgICAgICBpZiBzZWxmLl9yb290OgorICAgICAgICAgICAgc2VsZi5fbGF5b3V0
X3Rlc3RzID0gb3MucGF0aC5hYnNwYXRoKHNlbGYuX3Jvb3QpCisgICAgICAgICAgICBzZWxmLl93
ZWJfc29ja2V0X3Rlc3RzID0gb3MucGF0aC5hYnNwYXRoKAorICAgICAgICAgICAgICAgIG9zLnBh
dGguam9pbihzZWxmLl9yb290LCAnaHR0cCcsICd0ZXN0cycsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICd3ZWJzb2NrZXQnLCAndGVzdHMnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHMgPSBzZWxmLl9wb3J0
X29iai5sYXlvdXRfdGVzdHNfZGlyKCkKKyAgICAgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0
X3Rlc3RzID0gb3MucGF0aC5qb2luKHNlbGYuX2xheW91dF90ZXN0cywKKyAgICAgICAgICAgICAg
ICAgICAgICdodHRwJywgJ3Rlc3RzJywgJ3dlYnNvY2tldCcsICd0ZXN0cycpCisgICAgICAgICAg
ICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi5fd2ViX3NvY2tldF90ZXN0cyA9IE5vbmUK
KworICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgorICAgICAgICAgICAgc2VsZi5fbG9nX3ByZWZp
eCA9IF9XU1NfTE9HX1BSRUZJWAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9n
X3ByZWZpeCA9IF9XU19MT0dfUFJFRklYCisKKyAgICBkZWYgX3ByZXBhcmVfY29uZmlnKHNlbGYp
OgorICAgICAgICB0aW1lX3N0ciA9IHRpbWUuc3RyZnRpbWUoJyVkJWIlWS0lSCVNJVMnKQorICAg
ICAgICBsb2dfZmlsZV9uYW1lID0gc2VsZi5fbG9nX3ByZWZpeCArIHRpbWVfc3RyCisgICAgICAg
IHNlbGYuX3dzaW4gPSBvcGVuKG9zLmRldm51bGwsICdyJykKKworICAgICAgICBlcnJvcl9sb2cg
PSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFtZSArICItZXJyLnR4
dCIpCisKKyAgICAgICAgb3V0cHV0X2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGly
LCBsb2dfZmlsZV9uYW1lICsgIi1vdXQudHh0IikKKyAgICAgICAgc2VsZi5fd3NvdXQgPSBzZWxm
Ll9maWxlc3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKG91dHB1dF9sb2cpCisKKyAg
ICAgICAgZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQucHl3ZWJzb2NrZXQg
aW1wb3J0IG1vZF9weXdlYnNvY2tldAorICAgICAgICBweXRob25faW50ZXJwID0gc3lzLmV4ZWN1
dGFibGUKKyAgICAgICAgcHl3ZWJzb2NrZXRfYmFzZSA9IG9zLnBhdGguam9pbigKKyAgICAgICAg
ICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKAorICAg
ICAgICAgICAgb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpKSwgJ3RoaXJkcGFydHknLAorICAg
ICAgICAgICAgJ2F1dG9pbnN0YWxsZWQnLCAncHl3ZWJzb2NrZXQnKQorICAgICAgICBweXdlYnNv
Y2tldF9zY3JpcHQgPSBvcy5wYXRoLmpvaW4ocHl3ZWJzb2NrZXRfYmFzZSwgJ21vZF9weXdlYnNv
Y2tldCcsCisgICAgICAgICAgICAnc3RhbmRhbG9uZS5weScpCisgICAgICAgIHN0YXJ0X2NtZCA9
IFsKKyAgICAgICAgICAgIHB5dGhvbl9pbnRlcnAsICctdScsIHB5d2Vic29ja2V0X3NjcmlwdCwK
KyAgICAgICAgICAgICctLXNlcnZlci1ob3N0JywgJzEyNy4wLjAuMScsCisgICAgICAgICAgICAn
LS1wb3J0Jywgc3RyKHNlbGYuX3BvcnQpLAorICAgICAgICAgICAgJy0tZG9jdW1lbnQtcm9vdCcs
IG9zLnBhdGguam9pbihzZWxmLl9sYXlvdXRfdGVzdHMsICdodHRwJywgJ3Rlc3RzJyksCisgICAg
ICAgICAgICAnLS1zY2FuLWRpcicsIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMsCisgICAgICAgICAg
ICAnLS1jZ2ktcGF0aHMnLCAnL3dlYnNvY2tldC90ZXN0cycsCisgICAgICAgICAgICAnLS1sb2ct
ZmlsZScsIGVycm9yX2xvZywKKyAgICAgICAgXQorCisgICAgICAgIGhhbmRsZXJfbWFwX2ZpbGUg
PSBvcy5wYXRoLmpvaW4oc2VsZi5fd2ViX3NvY2tldF90ZXN0cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnaGFuZGxlcl9tYXAudHh0JykKKyAgICAgICAgaWYgb3Mu
cGF0aC5leGlzdHMoaGFuZGxlcl9tYXBfZmlsZSk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdV
c2luZyBoYW5kbGVyX21hcF9maWxlOiAlcycgJSBoYW5kbGVyX21hcF9maWxlKQorICAgICAgICAg
ICAgc3RhcnRfY21kLmFwcGVuZCgnLS13ZWJzb2NrLWhhbmRsZXJzLW1hcC1maWxlJykKKyAgICAg
ICAgICAgIHN0YXJ0X2NtZC5hcHBlbmQoaGFuZGxlcl9tYXBfZmlsZSkKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIF9sb2cud2FybmluZygnTm8gaGFuZGxlcl9tYXBfZmlsZSBmb3VuZCcpCisK
KyAgICAgICAgaWYgc2VsZi5fdXNlX3RsczoKKyAgICAgICAgICAgIHN0YXJ0X2NtZC5leHRlbmQo
WyctdCcsICctaycsIHNlbGYuX3ByaXZhdGVfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJy1jJywgc2VsZi5fY2VydGlmaWNhdGVdKQorCisgICAgICAgIHNlbGYuX3N0YXJ0X2Nt
ZCA9IHN0YXJ0X2NtZAorICAgICAgICBzZWxmLl9lbnYgPSBzZWxmLl9wb3J0X29iai5zZXR1cF9l
bnZpcm9uX2Zvcl9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9lbnZbJ1BZVEhPTlBBVEgnXSA9IChw
eXdlYnNvY2tldF9iYXNlICsgb3MucGF0aC5wYXRoc2VwICsgc2VsZi5fZW52LmdldCgnUFlUSE9O
UEFUSCcsICcnKSkKKworICAgIGRlZiBfcmVtb3ZlX3N0YWxlX2xvZ3Moc2VsZik6CisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2Rp
ciwgc2VsZi5fbG9nX3ByZWZpeCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAg
ICAgICBfbG9nLndhcm5pbmcoJ0ZhaWxlZCB0byByZW1vdmUgc3RhbGUgJXMgbG9nIGZpbGVzOiAl
cycgJSAoc2VsZi5fbmFtZSwgc3RyKGUpKSkKKworICAgIGRlZiBfc3Bhd25fcHJvY2VzcyhzZWxm
KToKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgJXMgc2VydmVyLCBjbWQ9IiVzIicgJSAo
c2VsZi5fbmFtZSwgc2VsZi5fc3RhcnRfY21kKSkKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHNl
bGYuX2V4ZWN1dGl2ZS5wb3BlbihzZWxmLl9zdGFydF9jbWQsIGVudj1zZWxmLl9lbnYsIHNoZWxs
PUZhbHNlLCBzdGRpbj1zZWxmLl93c2luLCBzdGRvdXQ9c2VsZi5fd3NvdXQsIHN0ZGVycj1zZWxm
Ll9leGVjdXRpdmUuU1RET1VUKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRf
ZmlsZShzZWxmLl9waWRfZmlsZSwgc3RyKHNlbGYuX3Byb2Nlc3MucGlkKSkKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3Byb2Nlc3MucGlkCisKKyAgICBkZWYgX3N0b3BfcnVubmluZ19zZXJ2ZXIoc2Vs
Zik6CisgICAgICAgIHN1cGVyKFB5V2ViU29ja2V0LCBzZWxmKS5fc3RvcF9ydW5uaW5nX3NlcnZl
cigpCisKKyAgICAgICAgaWYgc2VsZi5fd3NpbjoKKyAgICAgICAgICAgIHNlbGYuX3dzaW4uY2xv
c2UoKQorICAgICAgICAgICAgc2VsZi5fd3NpbiA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fd3Nv
dXQ6CisgICAgICAgICAgICBzZWxmLl93c291dC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl93
c291dCA9IE5vbmUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Nl
cnZlcnMvd2Vic29ja2V0X3NlcnZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYnNvY2tldF9zZXJ2ZXIucHkJKHJldmlzaW9u
IDg5Nzk1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93
ZWJzb2NrZXRfc2VydmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAgaW1w
b3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0IGltcG9ydCBodHRwX3NlcnZlcgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
cG9ydCBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
c2VydmVycyBpbXBvcnQgaHR0cF9zZXJ2ZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNl
cnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKIAotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC53ZWJzb2NrZXRfc2VydmVyIikKK19sb2cgPSBs
b2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMud2Vic29ja2V0
X3NlcnZlciIpCiAKIF9XU19MT0dfUFJFRklYID0gJ3B5d2Vic29ja2V0LndzLmxvZy0nCiBfV1NT
X0xPR19QUkVGSVggPSAncHl3ZWJzb2NrZXQud3NzLmxvZy0nCg==
</data>
<flag name="review"
          id="92952"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>