<?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>86107</bug_id>
          
          <creation_ts>2012-05-10 09:46:02 -0700</creation_ts>
          <short_desc>don&apos;t use autoinstall to import pywebsocket but check it in WebKit directly</short_desc>
          <delta_ts>2012-05-10 11:37:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Takashi Toyoshima">toyoshim</reporter>
          <assigned_to name="Takashi Toyoshima">toyoshim</assigned_to>
          <cc>abarth</cc>
    
    <cc>bashi</cc>
    
    <cc>dpranke</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>620648</commentid>
    <comment_count>0</comment_count>
    <who name="Takashi Toyoshima">toyoshim</who>
    <bug_when>2012-05-10 09:46:02 -0700</bug_when>
    <thetext>Currently, we use webkitpy&apos;s autoinstall mechanism. But it causes wasteful network traffic by many bots and also is weak at hosting server&apos;s flakiness.
Fortunately, the license of pywebsocket is compatible to one of WebKit.
It must be better to check it into WebKit directory than using autoinstall.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620653</commentid>
    <comment_count>1</comment_count>
      <attachid>141186</attachid>
    <who name="Takashi Toyoshima">toyoshim</who>
    <bug_when>2012-05-10 09:53:13 -0700</bug_when>
    <thetext>Created attachment 141186
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620661</commentid>
    <comment_count>2</comment_count>
      <attachid>141187</attachid>
    <who name="Takashi Toyoshima">toyoshim</who>
    <bug_when>2012-05-10 10:02:07 -0700</bug_when>
    <thetext>Created attachment 141187
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620680</commentid>
    <comment_count>3</comment_count>
    <who name="Takashi Toyoshima">toyoshim</who>
    <bug_when>2012-05-10 10:17:30 -0700</bug_when>
    <thetext>Hi Adam,

as we discussed, I made a change to import pywebsocket directly.
I have two plans now.

My first patch does
 - copy  pywebsocket-0.7.4/src to thirdparty/pywebsocket
 - make empty __init__.py in thirdparty/pywebsocket for python to import it correctly

Second one does
 - copy pywebsocket-0.7.4/src/mod_pywebsocket to thirdparty/mod_pywebsocket
 - copy pywebsocket-0.7.4/src/COPYING to thirdparty/mod_pywebsocket/COPYING

The first plan is more compatible to autoinstall because it copyed in the same way to thirdparty/auoinstall/pywebsocket with empty __init__.py.

The second plan doesn&apos;t need additional empty __init__.py and also omit to import misc files containing test and example directories. I feel the second one is better because misc files were not used.

Other common changes are
 - remove pywebsocket related codes from thirdparty/__init__.py and thirdparty/__init___unittest.py
 - change pywebsocket import path in layout_tests/servers/websocket_server.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620720</commentid>
    <comment_count>4</comment_count>
      <attachid>141187</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-10 10:58:08 -0700</bug_when>
    <thetext>Comment on attachment 141187
Patch

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620727</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-10 11:03:34 -0700</bug_when>
    <thetext>&gt; The second plan doesn&apos;t need additional empty __init__.py and also omit to import misc files containing test and example directories. I feel the second one is better because misc files were not used.

Agreed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620783</commentid>
    <comment_count>6</comment_count>
      <attachid>141187</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-10 11:37:51 -0700</bug_when>
    <thetext>Comment on attachment 141187
Patch

Clearing flags on attachment: 141187

Committed r116668: &lt;http://trac.webkit.org/changeset/116668&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620784</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-10 11:37:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141186</attachid>
            <date>2012-05-10 09:53:13 -0700</date>
            <delta_ts>2012-05-10 11:15:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86107-20120511015310.patch</filename>
            <type>text/plain</type>
            <size>565826</size>
            <attacher name="Takashi Toyoshima">toyoshim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NDA0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjkwYWFhM2Q0M2Q1ZmNhODk3NGRiMjRkMzg3MjJhZmNk
NDVkYzQ1MS4uNGM1NzZmY2E0ZGI5Zjk3MDQ0NzYxYTJiNWY1ZTE3YjM4ZTg3ZjdhYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgz
NSBAQAorMjAxMi0wNS0xMCAgVGFrYXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgZG9uJ3QgdXNlIGF1dG9pbnN0YWxsIHRvIGltcG9ydCBweXdlYnNvY2tl
dCBidXQgY2hlY2sgaXQgaW4gV2ViS2l0IGRpcmVjdGx5LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYxMDcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSByZW1vdmVzIHB5d2Vic29ja2V0
IGZyb20gd2Via2l0cHkncyBhdXRvaW5zdGFsbCBsaXN0IGFuZAorICAgICAgICBpbXBvcnRzIHB5
d2Vic29ja2V0IDAuNy40IGRpcmVjdGx5IGludG8gd2Via2l0cHkvdGhpcmRwYXJ0eS4KKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2Vic29ja2V0X3Nl
cnZlci5weToKKyAgICAgICAgKFB5V2ViU29ja2V0Ll9wcmVwYXJlX2NvbmZpZyk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5OgorICAgICAgICAoQXV0
b2luc3RhbGxJbXBvcnRIb29rLmZpbmRfbW9kdWxlKToKKyAgICAgICAgKEF1dG9pbnN0YWxsSW1w
b3J0SG9vay5faW5zdGFsbF9pcmMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS9fX2luaXRfX191bml0dGVzdC5weToKKyAgICAgICAgKFRoaXJkcGFydHlUZXN0LnRlc3Rf
aW1wb3J0X2hvb2suTW9ja0ltcG9ydEhvb2suX19pbml0X18pOgorICAgICAgICAoVGhpcmRwYXJ0
eVRlc3QudGVzdF9pbXBvcnRfaG9vay5Nb2NrSW1wb3J0SG9vay5faW5zdGFsbF9lbGl6YSk6Cisg
ICAgICAgIChUaGlyZHBhcnR5VGVzdCk6CisgICAgICAgIChUaGlyZHBhcnR5VGVzdC50ZXN0X2lt
cG9ydF9ob29rKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJz
b2NrZXQvQ09QWUlORzogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L3B5d2Vic29ja2V0L01BTklGRVNULmluOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvX19pbml0X18ucHk6IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9leGFt
cGxlL2JlbmNoX3dzaC5weTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L19faW5pdF9fX3VuaXR0ZXN0LnB5LgorICAgICAgICAod2ViX3NvY2tldF9kb19leHRy
YV9oYW5kc2hha2UpOgorICAgICAgICAod2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvZXhhbXBsZS9jbG9z
ZV93c2gucHk6IENvcGllZCBmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9f
X2luaXRfX191bml0dGVzdC5weS4KKyAgICAgICAgKHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNo
YWtlKToKKyAgICAgICAgKHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSk6CisgICAgICAgICh3ZWJf
c29ja2V0X3Bhc3NpdmVfY2xvc2luZ19oYW5kc2hha2UpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9leGFtcGxlL2NvbnNvbGUuaHRtbDogQWRkZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L2V4YW1w
bGUvZWNob19jbGllbnQucHk6IEFkZGVkLgorICAgICAgICAoQ2xpZW50SGFuZHNoYWtlRXJyb3Ip
OgorICAgICAgICAoX2J1aWxkX21ldGhvZF9saW5lKToKKyAgICAgICAgKF9vcmlnaW5faGVhZGVy
KToKKyAgICAgICAgKF9mb3JtYXRfaG9zdF9oZWFkZXIpOgorICAgICAgICAoX3JlY2VpdmVfYnl0
ZXMpOgorICAgICAgICAoX2dldF9tYW5kYXRvcnlfaGVhZGVyKToKKyAgICAgICAgKF92YWxpZGF0
ZV9tYW5kYXRvcnlfaGVhZGVyKToKKyAgICAgICAgKF9UTFNTb2NrZXQpOgorICAgICAgICAoX1RM
U1NvY2tldC5fX2luaXRfXyk6CisgICAgICAgIChfVExTU29ja2V0LnNlbmQpOgorICAgICAgICAo
X1RMU1NvY2tldC5yZWN2KToKKyAgICAgICAgKF9UTFNTb2NrZXQuY2xvc2UpOgorICAgICAgICAo
Q2xpZW50SGFuZHNoYWtlQmFzZSk6CisgICAgICAgIChDbGllbnRIYW5kc2hha2VCYXNlLmZvcik6
CisgICAgICAgIChDbGllbnRIYW5kc2hha2VCYXNlLl9faW5pdF9fKToKKyAgICAgICAgKENsaWVu
dEhhbmRzaGFrZUJhc2UuX3JlYWRfZmllbGRzKToKKyAgICAgICAgKENsaWVudEhhbmRzaGFrZUJh
c2UuX3JlYWRfbmFtZSk6CisgICAgICAgIChDbGllbnRIYW5kc2hha2VCYXNlLl9za2lwX3NwYWNl
cyk6CisgICAgICAgIChDbGllbnRIYW5kc2hha2VCYXNlLl9yZWFkX3ZhbHVlKToKKyAgICAgICAg
KENsaWVudEhhbmRzaGFrZVByb2Nlc3Nvcik6CisgICAgICAgIChDbGllbnRIYW5kc2hha2VQcm9j
ZXNzb3IuX19pbml0X18pOgorICAgICAgICAoQ2xpZW50SGFuZHNoYWtlUHJvY2Vzc29yLmhhbmRz
aGFrZSk6CisgICAgICAgIChDbGllbnRIYW5kc2hha2VQcm9jZXNzb3JIeWJpMDApOgorICAgICAg
ICAoQ2xpZW50SGFuZHNoYWtlUHJvY2Vzc29ySHliaTAwLl9faW5pdF9fKToKKyAgICAgICAgKENs
aWVudEhhbmRzaGFrZVByb2Nlc3Nvckh5YmkwMC5oYW5kc2hha2UpOgorICAgICAgICAoQ2xpZW50
SGFuZHNoYWtlUHJvY2Vzc29ySHliaTAwLl9nZW5lcmF0ZV9zZWNfd2Vic29ja2V0X2tleSk6Cisg
ICAgICAgIChDbGllbnRIYW5kc2hha2VQcm9jZXNzb3JIeWJpMDAuX2dlbmVyYXRlX2tleTMpOgor
ICAgICAgICAoQ2xpZW50SGFuZHNoYWtlUHJvY2Vzc29ySGl4aWU3NSk6CisgICAgICAgIChDbGll
bnRIYW5kc2hha2VQcm9jZXNzb3JIaXhpZTc1Ll9faW5pdF9fKToKKyAgICAgICAgKENsaWVudEhh
bmRzaGFrZVByb2Nlc3NvckhpeGllNzUuX3NraXBfaGVhZGVycyk6CisgICAgICAgIChDbGllbnRI
YW5kc2hha2VQcm9jZXNzb3JIaXhpZTc1LmhhbmRzaGFrZSk6CisgICAgICAgIChDbGllbnRDb25u
ZWN0aW9uKToKKyAgICAgICAgKENsaWVudENvbm5lY3Rpb24uX19pbml0X18pOgorICAgICAgICAo
Q2xpZW50Q29ubmVjdGlvbi53cml0ZSk6CisgICAgICAgIChDbGllbnRDb25uZWN0aW9uLnJlYWQp
OgorICAgICAgICAoQ2xpZW50Q29ubmVjdGlvbi5nZXRfcmVtb3RlX2FkZHIpOgorICAgICAgICAo
Q2xpZW50UmVxdWVzdCk6CisgICAgICAgIChDbGllbnRSZXF1ZXN0Lmp1c3QpOgorICAgICAgICAo
Q2xpZW50UmVxdWVzdC5fX2luaXRfXyk6CisgICAgICAgIChDbGllbnRSZXF1ZXN0Ll9kcmFpbl9y
ZWNlaXZlZF9kYXRhKToKKyAgICAgICAgKEVjaG9DbGllbnQpOgorICAgICAgICAoRWNob0NsaWVu
dC5fX2luaXRfXyk6CisgICAgICAgIChFY2hvQ2xpZW50LnJ1bik6CisgICAgICAgIChFY2hvQ2xp
ZW50Ll9kb19jbG9zaW5nX2hhbmRzaGFrZSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvZXhhbXBsZS9lY2hvX3dzaC5w
eTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9f
X3VuaXR0ZXN0LnB5LgorICAgICAgICAod2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UpOgor
ICAgICAgICAod2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvZXhhbXBsZS9oYW5kbGVyX21hcC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9l
eGFtcGxlL29yaWdpbl9jaGVja193c2gucHk6IENvcGllZCBmcm9tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfX191bml0dGVzdC5weS4KKyAgICAgICAgKHdlYl9zb2Nr
ZXRfZG9fZXh0cmFfaGFuZHNoYWtlKToKKyAgICAgICAgKHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0
YSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L2V4
YW1wbGUvcHl3ZWJzb2NrZXQuY29uZjogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L19faW5pdF9fX3VuaXR0ZXN0LnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHk6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tl
dC9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9iYXNlLnB5OiBBZGRlZC4KKyAgICAgICAgKENvbm5l
Y3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uKToKKyAgICAgICAgKEludmFsaWRGcmFtZUV4Y2VwdGlv
bik6CisgICAgICAgIChCYWRPcGVyYXRpb25FeGNlcHRpb24pOgorICAgICAgICAoVW5zdXBwb3J0
ZWRGcmFtZUV4Y2VwdGlvbik6CisgICAgICAgIChJbnZhbGlkVVRGOEV4Y2VwdGlvbik6CisgICAg
ICAgIChTdHJlYW1CYXNlKToKKyAgICAgICAgKFN0cmVhbUJhc2UuX19pbml0X18pOgorICAgICAg
ICAoU3RyZWFtQmFzZS5fcmVhZCk6CisgICAgICAgIChTdHJlYW1CYXNlLl93cml0ZSk6CisgICAg
ICAgIChTdHJlYW1CYXNlLnJlY2VpdmVfYnl0ZXMpOgorICAgICAgICAoU3RyZWFtQmFzZS5fcmVh
ZF91bnRpbCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29j
a2V0L21vZF9weXdlYnNvY2tldC9fc3RyZWFtX2hpeGllNzUucHk6IEFkZGVkLgorICAgICAgICAo
Zm9yKToKKyAgICAgICAgKFN0cmVhbUhpeGllNzUpOgorICAgICAgICAoU3RyZWFtSGl4aWU3NS5m
b3IpOgorICAgICAgICAoU3RyZWFtSGl4aWU3NS5fX2luaXRfXyk6CisgICAgICAgIChTdHJlYW1I
aXhpZTc1LnNlbmRfbWVzc2FnZSk6CisgICAgICAgIChTdHJlYW1IaXhpZTc1Ll9yZWFkX3BheWxv
YWRfbGVuZ3RoX2hpeGllNzUpOgorICAgICAgICAoU3RyZWFtSGl4aWU3NS5yZWNlaXZlX21lc3Nh
Z2UpOgorICAgICAgICAoU3RyZWFtSGl4aWU3NS5fc2VuZF9jbG9zaW5nX2hhbmRzaGFrZSk6Cisg
ICAgICAgIChTdHJlYW1IaXhpZTc1LmNsb3NlX2Nvbm5lY3Rpb24pOgorICAgICAgICAoU3RyZWFt
SGl4aWU3NS5zZW5kX3BpbmcpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9oeWJpLnB5OiBBZGRlZC4KKyAg
ICAgICAgKEZyYW1lKToKKyAgICAgICAgKEZyYW1lLl9faW5pdF9fKToKKyAgICAgICAgKGNyZWF0
ZV9sZW5ndGhfaGVhZGVyKToKKyAgICAgICAgKGNyZWF0ZV9oZWFkZXIpOgorICAgICAgICAoX2J1
aWxkX2ZyYW1lKToKKyAgICAgICAgKF9maWx0ZXJfYW5kX2Zvcm1hdF9mcmFtZV9vYmplY3QpOgor
ICAgICAgICAoY3JlYXRlX2JpbmFyeV9mcmFtZSk6CisgICAgICAgIChjcmVhdGVfdGV4dF9mcmFt
ZSk6CisgICAgICAgIChGcmFnbWVudGVkRnJhbWVCdWlsZGVyKToKKyAgICAgICAgKEZyYWdtZW50
ZWRGcmFtZUJ1aWxkZXIudG8pOgorICAgICAgICAoRnJhZ21lbnRlZEZyYW1lQnVpbGRlci5fX2lu
aXRfXyk6CisgICAgICAgIChGcmFnbWVudGVkRnJhbWVCdWlsZGVyLmJ1aWxkKToKKyAgICAgICAg
KF9jcmVhdGVfY29udHJvbF9mcmFtZSk6CisgICAgICAgIChjcmVhdGVfcGluZ19mcmFtZSk6Cisg
ICAgICAgIChjcmVhdGVfcG9uZ19mcmFtZSk6CisgICAgICAgIChjcmVhdGVfY2xvc2VfZnJhbWUp
OgorICAgICAgICAoU3RyZWFtT3B0aW9ucyk6CisgICAgICAgIChTdHJlYW1PcHRpb25zLl9faW5p
dF9fKToKKyAgICAgICAgKFN0cmVhbSk6CisgICAgICAgIChTdHJlYW0uZm9yKToKKyAgICAgICAg
KFN0cmVhbS5fX2luaXRfXyk6CisgICAgICAgIChTdHJlYW0uX3JlY2VpdmVfZnJhbWUpOgorICAg
ICAgICAoU3RyZWFtLl9yZWNlaXZlX2ZyYW1lX2FzX2ZyYW1lX29iamVjdCk6CisgICAgICAgIChT
dHJlYW0uc2VuZF9tZXNzYWdlKToKKyAgICAgICAgKFN0cmVhbS5yZWNlaXZlX21lc3NhZ2UpOgor
ICAgICAgICAoU3RyZWFtLl9zZW5kX2Nsb3NpbmdfaGFuZHNoYWtlKToKKyAgICAgICAgKFN0cmVh
bS5jbG9zZV9jb25uZWN0aW9uKToKKyAgICAgICAgKFN0cmVhbS5zZW5kX3BpbmcpOgorICAgICAg
ICAoU3RyZWFtLl9zZW5kX3BvbmcpOgorICAgICAgICAoU3RyZWFtLl9kcmFpbl9yZWNlaXZlZF9k
YXRhKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQv
bW9kX3B5d2Vic29ja2V0L2NvbW1vbi5weTogQWRkZWQuCisgICAgICAgIChpc19jb250cm9sX29w
Y29kZSk6CisgICAgICAgIChFeHRlbnNpb25QYXJhbWV0ZXIpOgorICAgICAgICAoRXh0ZW5zaW9u
UGFyYW1ldGVyLl9faW5pdF9fKToKKyAgICAgICAgKEV4dGVuc2lvblBhcmFtZXRlci5uYW1lKToK
KyAgICAgICAgKEV4dGVuc2lvblBhcmFtZXRlci5hZGRfcGFyYW1ldGVyKToKKyAgICAgICAgKEV4
dGVuc2lvblBhcmFtZXRlci5nZXRfcGFyYW1ldGVycyk6CisgICAgICAgIChFeHRlbnNpb25QYXJh
bWV0ZXIuZ2V0X3BhcmFtZXRlcl9uYW1lcyk6CisgICAgICAgIChFeHRlbnNpb25QYXJhbWV0ZXIu
aGFzX3BhcmFtZXRlcik6CisgICAgICAgIChFeHRlbnNpb25QYXJhbWV0ZXIuZ2V0X3BhcmFtZXRl
cl92YWx1ZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29j
a2V0L21vZF9weXdlYnNvY2tldC9kaXNwYXRjaC5weTogQWRkZWQuCisgICAgICAgIChEaXNwYXRj
aEV4Y2VwdGlvbik6CisgICAgICAgIChEaXNwYXRjaEV4Y2VwdGlvbi5fX2luaXRfXyk6CisgICAg
ICAgIChfZGVmYXVsdF9wYXNzaXZlX2Nsb3NpbmdfaGFuZHNoYWtlX2hhbmRsZXIpOgorICAgICAg
ICAoX25vcm1hbGl6ZV9wYXRoKToKKyAgICAgICAgKF9jcmVhdGVfcGF0aF90b19yZXNvdXJjZV9j
b252ZXJ0ZXIpOgorICAgICAgICAoX2NyZWF0ZV9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlci5j
b252ZXJ0ZXIpOgorICAgICAgICAoX2VudW1lcmF0ZV9oYW5kbGVyX2ZpbGVfcGF0aHMpOgorICAg
ICAgICAoX0hhbmRsZXJTdWl0ZSk6CisgICAgICAgIChfSGFuZGxlclN1aXRlLl9faW5pdF9fKToK
KyAgICAgICAgKF9zb3VyY2VfaGFuZGxlcl9maWxlKToKKyAgICAgICAgKF9leHRyYWN0X2hhbmRs
ZXIpOgorICAgICAgICAoRGlzcGF0Y2hlcik6CisgICAgICAgIChEaXNwYXRjaGVyLm1haW50YWlu
cyk6CisgICAgICAgIChEaXNwYXRjaGVyLl9faW5pdF9fKToKKyAgICAgICAgKERpc3BhdGNoZXIu
YWRkX3Jlc291cmNlX3BhdGhfYWxpYXMpOgorICAgICAgICAoRGlzcGF0Y2hlci5zb3VyY2Vfd2Fy
bmluZ3MpOgorICAgICAgICAoRGlzcGF0Y2hlci5kb19leHRyYV9oYW5kc2hha2UpOgorICAgICAg
ICAoRGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKToKKyAgICAgICAgKERpc3BhdGNoZXIucGFzc2l2
ZV9jbG9zaW5nX2hhbmRzaGFrZSk6CisgICAgICAgIChEaXNwYXRjaGVyLmdldF9oYW5kbGVyX3N1
aXRlKToKKyAgICAgICAgKERpc3BhdGNoZXIuX3NvdXJjZV9oYW5kbGVyX2ZpbGVzX2luX2Rpcik6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9w
eXdlYnNvY2tldC9leHRlbnNpb25zLnB5OiBBZGRlZC4KKyAgICAgICAgKEV4dGVuc2lvblByb2Nl
c3NvckludGVyZmFjZSk6CisgICAgICAgIChFeHRlbnNpb25Qcm9jZXNzb3JJbnRlcmZhY2UuZ2V0
X2V4dGVuc2lvbl9yZXNwb25zZSk6CisgICAgICAgIChFeHRlbnNpb25Qcm9jZXNzb3JJbnRlcmZh
Y2Uuc2V0dXBfc3RyZWFtX29wdGlvbnMpOgorICAgICAgICAoRGVmbGF0ZVN0cmVhbUV4dGVuc2lv
blByb2Nlc3Nvcik6CisgICAgICAgIChEZWZsYXRlU3RyZWFtRXh0ZW5zaW9uUHJvY2Vzc29yLl9f
aW5pdF9fKToKKyAgICAgICAgKERlZmxhdGVTdHJlYW1FeHRlbnNpb25Qcm9jZXNzb3IuZ2V0X2V4
dGVuc2lvbl9yZXNwb25zZSk6CisgICAgICAgIChEZWZsYXRlU3RyZWFtRXh0ZW5zaW9uUHJvY2Vz
c29yLnNldHVwX3N0cmVhbV9vcHRpb25zKToKKyAgICAgICAgKERlZmxhdGVGcmFtZUV4dGVuc2lv
blByb2Nlc3Nvcik6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IuX19p
bml0X18pOgorICAgICAgICAoRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yLmdldF9leHRl
bnNpb25fcmVzcG9uc2UpOgorICAgICAgICAoRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29y
LnNldHVwX3N0cmVhbV9vcHRpb25zKToKKyAgICAgICAgKERlZmxhdGVGcmFtZUV4dGVuc2lvblBy
b2Nlc3Nvci5zZXR1cF9zdHJlYW1fb3B0aW9ucy5fT3V0Z29pbmdGaWx0ZXIpOgorICAgICAgICAo
RGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yLnNldHVwX3N0cmVhbV9vcHRpb25zLl9PdXRn
b2luZ0ZpbHRlci5fX2luaXRfXyk6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9j
ZXNzb3Iuc2V0dXBfc3RyZWFtX29wdGlvbnMuX091dGdvaW5nRmlsdGVyLmZpbHRlcik6CisgICAg
ICAgIChEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3Iuc2V0dXBfc3RyZWFtX29wdGlvbnMu
X0luY29taW5nRmlsdGVyKToKKyAgICAgICAgKERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3Nv
ci5zZXR1cF9zdHJlYW1fb3B0aW9ucy5fSW5jb21pbmdGaWx0ZXIuX19pbml0X18pOgorICAgICAg
ICAoRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yLnNldHVwX3N0cmVhbV9vcHRpb25zLl9J
bmNvbWluZ0ZpbHRlci5maWx0ZXIpOgorICAgICAgICAoRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJv
Y2Vzc29yLnNldF9yZXNwb25zZV93aW5kb3dfYml0cyk6CisgICAgICAgIChEZWZsYXRlRnJhbWVF
eHRlbnNpb25Qcm9jZXNzb3Iuc2V0X3Jlc3BvbnNlX25vX2NvbnRleHRfdGFrZW92ZXIpOgorICAg
ICAgICAoRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yLmVuYWJsZV9vdXRnb2luZ19jb21w
cmVzc2lvbik6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IuZGlzYWJs
ZV9vdXRnb2luZ19jb21wcmVzc2lvbik6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNpb25Q
cm9jZXNzb3IuX291dGdvaW5nX2ZpbHRlcik6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNp
b25Qcm9jZXNzb3IuX2luY29taW5nX2ZpbHRlcik6CisgICAgICAgIChnZXRfZXh0ZW5zaW9uX3By
b2Nlc3Nvcik6CisgICAgICAgIChnZXRfZXh0ZW5zaW9uX3Byb2Nlc3Nvci5pcyk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tl
dC9oYW5kc2hha2UvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAodHJ5KToKKyAgICAgICAg
KGRvX2hhbmRzaGFrZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5
d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvX2Jhc2UucHk6IEFkZGVkLgorICAg
ICAgICAoQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbik6CisgICAgICAgIChIYW5kc2hha2VFeGNlcHRp
b24pOgorICAgICAgICAoSGFuZHNoYWtlRXhjZXB0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKFZl
cnNpb25FeGNlcHRpb24pOgorICAgICAgICAoVmVyc2lvbkV4Y2VwdGlvbi5fX2luaXRfXyk6Cisg
ICAgICAgIChnZXRfZGVmYXVsdF9wb3J0KToKKyAgICAgICAgKHZhbGlkYXRlX3N1YnByb3RvY29s
KToKKyAgICAgICAgKHBhcnNlX2hvc3RfaGVhZGVyKToKKyAgICAgICAgKGZvcm1hdF9oZWFkZXIp
OgorICAgICAgICAoYnVpbGRfbG9jYXRpb24pOgorICAgICAgICAoZ2V0X21hbmRhdG9yeV9oZWFk
ZXIpOgorICAgICAgICAodmFsaWRhdGVfbWFuZGF0b3J5X2hlYWRlcik6CisgICAgICAgIChjaGVj
a19yZXF1ZXN0X2xpbmUpOgorICAgICAgICAoY2hlY2tfaGVhZGVyX2xpbmVzKToKKyAgICAgICAg
KHBhcnNlX3Rva2VuX2xpc3QpOgorICAgICAgICAoX3BhcnNlX2V4dGVuc2lvbl9wYXJhbSk6Cisg
ICAgICAgIChfcGFyc2VfZXh0ZW5zaW9uKToKKyAgICAgICAgKHBhcnNlX2V4dGVuc2lvbnMpOgor
ICAgICAgICAoZm9ybWF0X2V4dGVuc2lvbnMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL2RyYWZ0NzUu
cHk6IEFkZGVkLgorICAgICAgICAoSGFuZHNoYWtlcik6CisgICAgICAgIChIYW5kc2hha2VyLnBl
cmZvcm1zKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX19pbml0X18pOgorICAgICAgICAoSGFuZHNo
YWtlci5kb19oYW5kc2hha2UpOgorICAgICAgICAoSGFuZHNoYWtlci5fc2V0X3Jlc291cmNlKToK
KyAgICAgICAgKEhhbmRzaGFrZXIuX3NldF9vcmlnaW4pOgorICAgICAgICAoSGFuZHNoYWtlci5f
c2V0X2xvY2F0aW9uKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX3NldF9zdWJwcm90b2NvbCk6Cisg
ICAgICAgIChIYW5kc2hha2VyLl9zZXRfcHJvdG9jb2xfdmVyc2lvbik6CisgICAgICAgIChIYW5k
c2hha2VyLl9zZW5kYWxsKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX3NlbmRfaGFuZHNoYWtlKToK
KyAgICAgICAgKEhhbmRzaGFrZXIuX2NoZWNrX2hlYWRlcl9saW5lcyk6CisgICAgICAgIChIYW5k
c2hha2VyLl9jaGVja19maXJzdF9saW5lcyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvaHliaS5weTog
QWRkZWQuCisgICAgICAgIChjb21wdXRlX2FjY2VwdCk6CisgICAgICAgIChIYW5kc2hha2VyKToK
KyAgICAgICAgKEhhbmRzaGFrZXIuX19pbml0X18pOgorICAgICAgICAoSGFuZHNoYWtlci5fdmFs
aWRhdGVfY29ubmVjdGlvbl9oZWFkZXIpOgorICAgICAgICAoSGFuZHNoYWtlci5kb19oYW5kc2hh
a2UpOgorICAgICAgICAoSGFuZHNoYWtlci5fZ2V0X29yaWdpbik6CisgICAgICAgIChIYW5kc2hh
a2VyLl9jaGVja192ZXJzaW9uKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX3NldF9wcm90b2NvbCk6
CisgICAgICAgIChIYW5kc2hha2VyLl9wYXJzZV9leHRlbnNpb25zKToKKyAgICAgICAgKEhhbmRz
aGFrZXIuX3ZhbGlkYXRlX2tleSk6CisgICAgICAgIChIYW5kc2hha2VyLl9nZXRfa2V5KToKKyAg
ICAgICAgKEhhbmRzaGFrZXIuX3NlbmRfaGFuZHNoYWtlKToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9o
eWJpMDAucHk6IEFkZGVkLgorICAgICAgICAoSGFuZHNoYWtlcik6CisgICAgICAgIChIYW5kc2hh
a2VyLl9faW5pdF9fKToKKyAgICAgICAgKEhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKToKKyAgICAg
ICAgKEhhbmRzaGFrZXIuX3NldF9yZXNvdXJjZSk6CisgICAgICAgIChIYW5kc2hha2VyLl9zZXRf
c3VicHJvdG9jb2wpOgorICAgICAgICAoSGFuZHNoYWtlci5fc2V0X2xvY2F0aW9uKToKKyAgICAg
ICAgKEhhbmRzaGFrZXIuX3NldF9vcmlnaW4pOgorICAgICAgICAoSGFuZHNoYWtlci5fc2V0X3By
b3RvY29sX3ZlcnNpb24pOgorICAgICAgICAoSGFuZHNoYWtlci5fc2V0X2NoYWxsZW5nZV9yZXNw
b25zZSk6CisgICAgICAgIChIYW5kc2hha2VyLl9nZXRfa2V5X3ZhbHVlKToKKyAgICAgICAgKEhh
bmRzaGFrZXIuX2dldF9jaGFsbGVuZ2UpOgorICAgICAgICAoSGFuZHNoYWtlci5fc2VuZF9oYW5k
c2hha2UpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tl
dC9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVycGFyc2VyaGFuZGxlci5weTogQWRkZWQuCisgICAgICAg
IChBcGFjaGVMb2dIYW5kbGVyKToKKyAgICAgICAgKEFwYWNoZUxvZ0hhbmRsZXIuX19pbml0X18p
OgorICAgICAgICAoQXBhY2hlTG9nSGFuZGxlci5lbWl0KToKKyAgICAgICAgKF9jb25maWd1cmVf
bG9nZ2luZyk6CisgICAgICAgIChfcGFyc2Vfb3B0aW9uKToKKyAgICAgICAgKF9jcmVhdGVfZGlz
cGF0Y2hlcik6CisgICAgICAgIChoZWFkZXJwYXJzZXJoYW5kbGVyKToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2h0dHBf
aGVhZGVyX3V0aWwucHk6IEFkZGVkLgorICAgICAgICAoX2lzX2NoYXIpOgorICAgICAgICAoX2lz
X2N0bCk6CisgICAgICAgIChQYXJzaW5nU3RhdGUpOgorICAgICAgICAoUGFyc2luZ1N0YXRlLl9f
aW5pdF9fKToKKyAgICAgICAgKHBlZWspOgorICAgICAgICAoY29uc3VtZSk6CisgICAgICAgIChj
b25zdW1lX3N0cmluZyk6CisgICAgICAgIChjb25zdW1lX2x3cyk6CisgICAgICAgIChjb25zdW1l
X2x3c2VzKToKKyAgICAgICAgKGNvbnN1bWVfdG9rZW4pOgorICAgICAgICAoY29uc3VtZV90b2tl
bl9vcl9xdW90ZWRfc3RyaW5nKToKKyAgICAgICAgKHF1b3RlX2lmX25lY2Vzc2FyeSk6CisgICAg
ICAgIChwYXJzZV91cmkpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9w
eXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvbWVtb3JpemluZ2ZpbGUucHk6IEFkZGVkLgorICAg
ICAgICAoTWVtb3JpemluZ0ZpbGUpOgorICAgICAgICAoTWVtb3JpemluZ0ZpbGUuX19pbml0X18p
OgorICAgICAgICAoTWVtb3JpemluZ0ZpbGUuX19nZXRhdHRyaWJ1dGVfXyk6CisgICAgICAgIChN
ZW1vcml6aW5nRmlsZS5yZWFkbGluZSk6CisgICAgICAgIChNZW1vcml6aW5nRmlsZS5nZXRfbWVt
b3JpemVkX2xpbmVzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3
ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L21zZ3V0aWwucHk6IEFkZGVkLgorICAgICAgICAoY2xv
c2VfY29ubmVjdGlvbik6CisgICAgICAgIChzZW5kX21lc3NhZ2UpOgorICAgICAgICAocmVjZWl2
ZV9tZXNzYWdlKToKKyAgICAgICAgKHNlbmRfcGluZyk6CisgICAgICAgIChNZXNzYWdlUmVjZWl2
ZXIpOgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVyLnJlY2VpdmVzKToKKyAgICAgICAgKE1lc3Nh
Z2VSZWNlaXZlci5wcm92aWRlcyk6CisgICAgICAgIChNZXNzYWdlUmVjZWl2ZXIuc2hvdWxkKToK
KyAgICAgICAgKE1lc3NhZ2VSZWNlaXZlci5fX2luaXRfXyk6CisgICAgICAgIChNZXNzYWdlUmVj
ZWl2ZXIucnVuKToKKyAgICAgICAgKE1lc3NhZ2VSZWNlaXZlci5yZWNlaXZlKToKKyAgICAgICAg
KE1lc3NhZ2VSZWNlaXZlci5yZWNlaXZlX25vd2FpdCk6CisgICAgICAgIChNZXNzYWdlUmVjZWl2
ZXIuc3RvcCk6CisgICAgICAgIChNZXNzYWdlU2VuZGVyKToKKyAgICAgICAgKE1lc3NhZ2VTZW5k
ZXIuc2VuZHMpOgorICAgICAgICAoTWVzc2FnZVNlbmRlci5wcm92aWRlcyk6CisgICAgICAgIChN
ZXNzYWdlU2VuZGVyLnNob3VsZCk6CisgICAgICAgIChNZXNzYWdlU2VuZGVyLl9faW5pdF9fKToK
KyAgICAgICAgKE1lc3NhZ2VTZW5kZXIucnVuKToKKyAgICAgICAgKE1lc3NhZ2VTZW5kZXIuc2Vu
ZCk6CisgICAgICAgIChNZXNzYWdlU2VuZGVyLnNlbmRfbm93YWl0KToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5k
YWxvbmUucHk6IEFkZGVkLgorICAgICAgICAoX1N0YW5kYWxvbmVDb25uZWN0aW9uKToKKyAgICAg
ICAgKF9TdGFuZGFsb25lQ29ubmVjdGlvbi5fX2luaXRfXyk6CisgICAgICAgIChfU3RhbmRhbG9u
ZUNvbm5lY3Rpb24uZ2V0X2xvY2FsX2FkZHIpOgorICAgICAgICAoX1N0YW5kYWxvbmVDb25uZWN0
aW9uLmdldF9yZW1vdGVfYWRkcik6CisgICAgICAgIChfU3RhbmRhbG9uZUNvbm5lY3Rpb24ud3Jp
dGUpOgorICAgICAgICAoX1N0YW5kYWxvbmVDb25uZWN0aW9uLnJlYWQpOgorICAgICAgICAoX1N0
YW5kYWxvbmVDb25uZWN0aW9uLmdldF9tZW1vcml6ZWRfbGluZXMpOgorICAgICAgICAoX1N0YW5k
YWxvbmVSZXF1ZXN0KToKKyAgICAgICAgKF9TdGFuZGFsb25lUmVxdWVzdC5fX2luaXRfXyk6Cisg
ICAgICAgIChfU3RhbmRhbG9uZVJlcXVlc3QuZ2V0X3VyaSk6CisgICAgICAgIChfU3RhbmRhbG9u
ZVJlcXVlc3QuZ2V0X21ldGhvZCk6CisgICAgICAgIChfU3RhbmRhbG9uZVJlcXVlc3QuaXNfaHR0
cHMpOgorICAgICAgICAoX1N0YW5kYWxvbmVSZXF1ZXN0Ll9kcmFpbl9yZWNlaXZlZF9kYXRhKToK
KyAgICAgICAgKF9TdGFuZGFsb25lU1NMQ29ubmVjdGlvbik6CisgICAgICAgIChfU3RhbmRhbG9u
ZVNTTENvbm5lY3Rpb24uZm9yKToKKyAgICAgICAgKF9TdGFuZGFsb25lU1NMQ29ubmVjdGlvbi5f
X2luaXRfXyk6CisgICAgICAgIChfU3RhbmRhbG9uZVNTTENvbm5lY3Rpb24uX19nZXRhdHRyaWJ1
dGVfXyk6CisgICAgICAgIChfU3RhbmRhbG9uZVNTTENvbm5lY3Rpb24uX19zZXRhdHRyX18pOgor
ICAgICAgICAoX1N0YW5kYWxvbmVTU0xDb25uZWN0aW9uLm1ha2VmaWxlKToKKyAgICAgICAgKFdl
YlNvY2tldFNlcnZlcik6CisgICAgICAgIChXZWJTb2NrZXRTZXJ2ZXIuX19pbml0X18pOgorICAg
ICAgICAoV2ViU29ja2V0U2VydmVyLl9jcmVhdGVfc29ja2V0cyk6CisgICAgICAgIChXZWJTb2Nr
ZXRTZXJ2ZXIuc2VydmVyX2JpbmQpOgorICAgICAgICAoV2ViU29ja2V0U2VydmVyLnNlcnZlcl9h
Y3RpdmF0ZSk6CisgICAgICAgIChXZWJTb2NrZXRTZXJ2ZXIuc2VydmVyX2Nsb3NlKToKKyAgICAg
ICAgKFdlYlNvY2tldFNlcnZlci5maWxlbm8pOgorICAgICAgICAoV2ViU29ja2V0U2VydmVyLmhh
bmRsZV9lcnJvcik6CisgICAgICAgIChXZWJTb2NrZXRTZXJ2ZXIuZ2V0X3JlcXVlc3QpOgorICAg
ICAgICAoV2ViU29ja2V0U2VydmVyLnNlcnZlX2ZvcmV2ZXIpOgorICAgICAgICAoV2ViU29ja2V0
U2VydmVyLnNodXRkb3duKToKKyAgICAgICAgKFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyKToKKyAg
ICAgICAgKFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyLnNldHVwKToKKyAgICAgICAgKFdlYlNvY2tl
dFJlcXVlc3RIYW5kbGVyLnNldHVwLlNvY2tldFNlcnZlcik6CisgICAgICAgIChXZWJTb2NrZXRS
ZXF1ZXN0SGFuZGxlci5fX2luaXRfXyk6CisgICAgICAgIChXZWJTb2NrZXRSZXF1ZXN0SGFuZGxl
ci5wYXJzZV9yZXF1ZXN0KToKKyAgICAgICAgKFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyLmxvZ19y
ZXF1ZXN0KToKKyAgICAgICAgKFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyLmxvZ19lcnJvcik6Cisg
ICAgICAgIChXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5pc19jZ2kpOgorICAgICAgICAoX2NvbmZp
Z3VyZV9sb2dnaW5nKToKKyAgICAgICAgKF9hbGlhc19oYW5kbGVycyk6CisgICAgICAgIChfYnVp
bGRfb3B0aW9uX3BhcnNlcik6CisgICAgICAgIChUaHJlYWRNb25pdG9yKToKKyAgICAgICAgKFRo
cmVhZE1vbml0b3IuX19pbml0X18pOgorICAgICAgICAoVGhyZWFkTW9uaXRvci5ydW4pOgorICAg
ICAgICAoX3BhcnNlX2FyZ3NfYW5kX2NvbmZpZyk6CisgICAgICAgIChfbWFpbik6CisgICAgICAg
IChfbWFpbi5pZik6CisgICAgICAgIChfbWFpbi5pZi5fX2NoZWNrX3NjcmlwdCk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tl
dC9zdHJlYW0ucHk6IENvcGllZCBmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9fX2luaXRfX191bml0dGVzdC5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3V0aWwucHk6IEFkZGVkLgorICAgICAg
ICAoZ2V0X3N0YWNrX3RyYWNlKToKKyAgICAgICAgKHByZXBlbmRfbWVzc2FnZV90b19leGNlcHRp
b24pOgorICAgICAgICAoX190cmFuc2xhdGVfaW50ZXJwKToKKyAgICAgICAgKGdldF9zY3JpcHRf
aW50ZXJwKToKKyAgICAgICAgKHdyYXBfcG9wZW4zX2Zvcl93aW4pOgorICAgICAgICAod3JhcF9w
b3BlbjNfZm9yX3dpbi5fX3dyYXBfcG9wZW4zKToKKyAgICAgICAgKGhleGlmeSk6CisgICAgICAg
IChnZXRfY2xhc3NfbG9nZ2VyKToKKyAgICAgICAgKE5vb3BNYXNrZXIpOgorICAgICAgICAoTm9v
cE1hc2tlci5fX2luaXRfXyk6CisgICAgICAgIChOb29wTWFza2VyLm1hc2spOgorICAgICAgICAo
UmVwZWF0ZWRYb3JNYXNrZXIpOgorICAgICAgICAoUmVwZWF0ZWRYb3JNYXNrZXIuX19pbml0X18p
OgorICAgICAgICAoUmVwZWF0ZWRYb3JNYXNrZXIubWFzayk6CisgICAgICAgIChEZWZsYXRlUmVx
dWVzdCk6CisgICAgICAgIChEZWZsYXRlUmVxdWVzdC5mb3IpOgorICAgICAgICAoRGVmbGF0ZVJl
cXVlc3QuX19pbml0X18pOgorICAgICAgICAoRGVmbGF0ZVJlcXVlc3QuX19nZXRhdHRyaWJ1dGVf
Xyk6CisgICAgICAgIChEZWZsYXRlUmVxdWVzdC5fX3NldGF0dHJfXyk6CisgICAgICAgIChfRGVm
bGF0ZXIpOgorICAgICAgICAoX0RlZmxhdGVyLl9faW5pdF9fKToKKyAgICAgICAgKF9EZWZsYXRl
ci5jb21wcmVzc19hbmRfZmx1c2gpOgorICAgICAgICAoX0luZmxhdGVyKToKKyAgICAgICAgKF9J
bmZsYXRlci5fX2luaXRfXyk6CisgICAgICAgIChfSW5mbGF0ZXIuZGVjb21wcmVzcyk6CisgICAg
ICAgIChfSW5mbGF0ZXIuYXBwZW5kKToKKyAgICAgICAgKF9JbmZsYXRlci5yZXNldCk6CisgICAg
ICAgIChfUkZDMTk3OURlZmxhdGVyKToKKyAgICAgICAgKF9SRkMxOTc5RGVmbGF0ZXIudGhhdCk6
CisgICAgICAgIChfUkZDMTk3OURlZmxhdGVyLl9faW5pdF9fKToKKyAgICAgICAgKF9SRkMxOTc5
RGVmbGF0ZXIuZmlsdGVyKToKKyAgICAgICAgKF9SRkMxOTc5SW5mbGF0ZXIpOgorICAgICAgICAo
X1JGQzE5NzlJbmZsYXRlci5mb3IpOgorICAgICAgICAoX1JGQzE5NzlJbmZsYXRlci5fX2luaXRf
Xyk6CisgICAgICAgIChfUkZDMTk3OUluZmxhdGVyLmZpbHRlcik6CisgICAgICAgIChEZWZsYXRl
U29ja2V0KToKKyAgICAgICAgKERlZmxhdGVTb2NrZXQuZm9yKToKKyAgICAgICAgKERlZmxhdGVT
b2NrZXQuX19pbml0X18pOgorICAgICAgICAoRGVmbGF0ZVNvY2tldC5yZWN2KToKKyAgICAgICAg
KERlZmxhdGVTb2NrZXQuc2VuZGFsbCk6CisgICAgICAgIChEZWZsYXRlU29ja2V0LnNlbmQpOgor
ICAgICAgICAoRGVmbGF0ZUNvbm5lY3Rpb24pOgorICAgICAgICAoRGVmbGF0ZUNvbm5lY3Rpb24u
Zm9yKToKKyAgICAgICAgKERlZmxhdGVDb25uZWN0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKERl
ZmxhdGVDb25uZWN0aW9uLmdldF9yZW1vdGVfYWRkcik6CisgICAgICAgIChEZWZsYXRlQ29ubmVj
dGlvbi5wdXRfYnl0ZXMpOgorICAgICAgICAoRGVmbGF0ZUNvbm5lY3Rpb24ucmVhZCk6CisgICAg
ICAgIChEZWZsYXRlQ29ubmVjdGlvbi53cml0ZSk6CisgICAgICAgIChfaXNfZXdvdWxkYmxvY2tf
ZXJybm8pOgorICAgICAgICAoZHJhaW5fcmVjZWl2ZWRfZGF0YSk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3NldHVwLnB5OiBDb3BpZWQgZnJvbSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X19fdW5pdHRlc3QucHkuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvX19p
bml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9w
eXdlYnNvY2tldC90ZXN0L2NsaWVudF9mb3JfdGVzdGluZy5weTogQWRkZWQuCisgICAgICAgIChm
b3IpOgorICAgICAgICAoX21ldGhvZF9saW5lKToKKyAgICAgICAgKF9zZWNfb3JpZ2luX2hlYWRl
cik6CisgICAgICAgIChfb3JpZ2luX2hlYWRlcik6CisgICAgICAgIChfZm9ybWF0X2hvc3RfaGVh
ZGVyKToKKyAgICAgICAgKF9yZWNlaXZlX2J5dGVzKToKKyAgICAgICAgKF9yZWFkX2ZpZWxkcyk6
CisgICAgICAgIChfcmVhZF9uYW1lKToKKyAgICAgICAgKF9za2lwX3NwYWNlcyk6CisgICAgICAg
IChfcmVhZF92YWx1ZSk6CisgICAgICAgIChfVExTU29ja2V0KToKKyAgICAgICAgKF9UTFNTb2Nr
ZXQuX19pbml0X18pOgorICAgICAgICAoX1RMU1NvY2tldC5zZW5kKToKKyAgICAgICAgKF9UTFNT
b2NrZXQucmVjdik6CisgICAgICAgIChfVExTU29ja2V0LmNsb3NlKToKKyAgICAgICAgKEh0dHBT
dGF0dXNFeGNlcHRpb24pOgorICAgICAgICAoSHR0cFN0YXR1c0V4Y2VwdGlvbi5fX2luaXRfXyk6
CisgICAgICAgIChXZWJTb2NrZXRIYW5kc2hha2UpOgorICAgICAgICAoV2ViU29ja2V0SGFuZHNo
YWtlLl9faW5pdF9fKToKKyAgICAgICAgKFdlYlNvY2tldEhhbmRzaGFrZS5oYW5kc2hha2UpOgor
ICAgICAgICAoV2ViU29ja2V0SHliaTAwSGFuZHNoYWtlKToKKyAgICAgICAgKFdlYlNvY2tldEh5
YmkwMEhhbmRzaGFrZS5fX2luaXRfXyk6CisgICAgICAgIChXZWJTb2NrZXRIeWJpMDBIYW5kc2hh
a2UuaGFuZHNoYWtlKToKKyAgICAgICAgKFdlYlNvY2tldEh5YmkwMEhhbmRzaGFrZS5fZ2VuZXJh
dGVfc2VjX3dlYnNvY2tldF9rZXkpOgorICAgICAgICAoV2ViU29ja2V0SHliaTAwSGFuZHNoYWtl
Ll9nZW5lcmF0ZV9rZXkzKToKKyAgICAgICAgKFdlYlNvY2tldEhpeGllNzVIYW5kc2hha2UpOgor
ICAgICAgICAoV2ViU29ja2V0SGl4aWU3NUhhbmRzaGFrZS5fX2luaXRfXyk6CisgICAgICAgIChX
ZWJTb2NrZXRIaXhpZTc1SGFuZHNoYWtlLl9za2lwX2hlYWRlcnMpOgorICAgICAgICAoV2ViU29j
a2V0SGl4aWU3NUhhbmRzaGFrZS5oYW5kc2hha2UpOgorICAgICAgICAoV2ViU29ja2V0U3RyZWFt
KToKKyAgICAgICAgKFdlYlNvY2tldFN0cmVhbS5fX2luaXRfXyk6CisgICAgICAgIChXZWJTb2Nr
ZXRTdHJlYW0uX21hc2tfaHliaSk6CisgICAgICAgIChXZWJTb2NrZXRTdHJlYW0uc2VuZF9mcmFt
ZV9vZl9hcmJpdHJhcnlfYnl0ZXMpOgorICAgICAgICAoV2ViU29ja2V0U3RyZWFtLnNlbmRfZGF0
YSk6CisgICAgICAgIChXZWJTb2NrZXRTdHJlYW0uc2VuZF9iaW5hcnkpOgorICAgICAgICAoV2Vi
U29ja2V0U3RyZWFtLnNlbmRfdGV4dCk6CisgICAgICAgIChXZWJTb2NrZXRTdHJlYW0uX2Fzc2Vy
dF9yZWNlaXZlX2RhdGEpOgorICAgICAgICAoV2ViU29ja2V0U3RyZWFtLmFzc2VydF9yZWNlaXZl
X2JpbmFyeSk6CisgICAgICAgIChXZWJTb2NrZXRTdHJlYW0uYXNzZXJ0X3JlY2VpdmVfdGV4dCk6
CisgICAgICAgIChXZWJTb2NrZXRTdHJlYW0uX2J1aWxkX2Nsb3NlX2ZyYW1lKToKKyAgICAgICAg
KFdlYlNvY2tldFN0cmVhbS5zZW5kX2Nsb3NlKToKKyAgICAgICAgKFdlYlNvY2tldFN0cmVhbS5h
c3NlcnRfcmVjZWl2ZV9jbG9zZSk6CisgICAgICAgIChXZWJTb2NrZXRTdHJlYW1IaXhpZTc1KToK
KyAgICAgICAgKFdlYlNvY2tldFN0cmVhbUhpeGllNzUuX19pbml0X18pOgorICAgICAgICAoV2Vi
U29ja2V0U3RyZWFtSGl4aWU3NS5zZW5kX2ZyYW1lX29mX2FyYml0cmFyeV9ieXRlcyk6CisgICAg
ICAgIChXZWJTb2NrZXRTdHJlYW1IaXhpZTc1LnNlbmRfZGF0YSk6CisgICAgICAgIChXZWJTb2Nr
ZXRTdHJlYW1IaXhpZTc1LnNlbmRfYmluYXJ5KToKKyAgICAgICAgKFdlYlNvY2tldFN0cmVhbUhp
eGllNzUuc2VuZF90ZXh0KToKKyAgICAgICAgKFdlYlNvY2tldFN0cmVhbUhpeGllNzUuYXNzZXJ0
X3JlY2VpdmVfYmluYXJ5KToKKyAgICAgICAgKFdlYlNvY2tldFN0cmVhbUhpeGllNzUuYXNzZXJ0
X3JlY2VpdmVfdGV4dCk6CisgICAgICAgIChXZWJTb2NrZXRTdHJlYW1IaXhpZTc1LnNlbmRfY2xv
c2UpOgorICAgICAgICAoV2ViU29ja2V0U3RyZWFtSGl4aWU3NS5hc3NlcnRfcmVjZWl2ZV9jbG9z
ZSk6CisgICAgICAgIChDbGllbnRPcHRpb25zKToKKyAgICAgICAgKENsaWVudE9wdGlvbnMuX19p
bml0X18pOgorICAgICAgICAoQ2xpZW50KToKKyAgICAgICAgKENsaWVudC5fX2luaXRfXyk6Cisg
ICAgICAgIChDbGllbnQuY29ubmVjdCk6CisgICAgICAgIChDbGllbnQuc2VuZF9mcmFtZV9vZl9h
cmJpdHJhcnlfYnl0ZXMpOgorICAgICAgICAoQ2xpZW50LnNlbmRfbWVzc2FnZSk6CisgICAgICAg
IChDbGllbnQuYXNzZXJ0X3JlY2VpdmUpOgorICAgICAgICAoQ2xpZW50LnNlbmRfY2xvc2UpOgor
ICAgICAgICAoQ2xpZW50LmFzc2VydF9yZWNlaXZlX2Nsb3NlKToKKyAgICAgICAgKENsaWVudC5j
bG9zZV9zb2NrZXQpOgorICAgICAgICAoQ2xpZW50LmFzc2VydF9jb25uZWN0aW9uX2Nsb3NlZCk6
CisgICAgICAgIChjcmVhdGVfY2xpZW50KToKKyAgICAgICAgKGNyZWF0ZV9jbGllbnRfaHliaTAw
KToKKyAgICAgICAgKGNyZWF0ZV9jbGllbnRfaGl4aWU3NSk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvZW5kdG9lbmRfd2l0aF9leHRlcm5h
bF9zZXJ2ZXIucHk6IENvcGllZCBmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9fX2luaXRfX191bml0dGVzdC5weS4KKyAgICAgICAgKEVuZFRvRW5kVGVzdFdpdGhFeHRlcm5h
bFNlcnZlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29j
a2V0L3Rlc3QvbW9jay5weTogQWRkZWQuCisgICAgICAgIChfTW9ja0Nvbm5CYXNlKToKKyAgICAg
ICAgKF9Nb2NrQ29ubkJhc2Uub2YpOgorICAgICAgICAoX01vY2tDb25uQmFzZS5fX2luaXRfXyk6
CisgICAgICAgIChfTW9ja0Nvbm5CYXNlLndyaXRlKToKKyAgICAgICAgKF9Nb2NrQ29ubkJhc2Uu
d3JpdHRlbl9kYXRhKToKKyAgICAgICAgKE1vY2tDb25uKToKKyAgICAgICAgKE1vY2tDb25uLl9f
aW5pdF9fKToKKyAgICAgICAgKE1vY2tDb25uLnJlYWRsaW5lKToKKyAgICAgICAgKE1vY2tDb25u
LnJlYWQpOgorICAgICAgICAoTW9ja0Nvbm4uX3JlYWRfdXBfdG8pOgorICAgICAgICAoTW9ja0Js
b2NraW5nQ29ubik6CisgICAgICAgIChNb2NrQmxvY2tpbmdDb25uLl9faW5pdF9fKToKKyAgICAg
ICAgKE1vY2tCbG9ja2luZ0Nvbm4ucmVhZGxpbmUpOgorICAgICAgICAoTW9ja0Jsb2NraW5nQ29u
bi5yZWFkKToKKyAgICAgICAgKE1vY2tCbG9ja2luZ0Nvbm4ucHV0X2J5dGVzKToKKyAgICAgICAg
KE1vY2tUYWJsZSk6CisgICAgICAgIChNb2NrVGFibGUuX19pbml0X18pOgorICAgICAgICAoTW9j
a1RhYmxlLl9fZ2V0aXRlbV9fKToKKyAgICAgICAgKE1vY2tUYWJsZS5fX3NldGl0ZW1fXyk6Cisg
ICAgICAgIChNb2NrVGFibGUuZ2V0KToKKyAgICAgICAgKE1vY2tSZXF1ZXN0KToKKyAgICAgICAg
KE1vY2tSZXF1ZXN0Ll9faW5pdF9fKToKKyAgICAgICAgKE1vY2tSZXF1ZXN0LmlzX2h0dHBzKToK
KyAgICAgICAgKE1vY2tSZXF1ZXN0Ll9kcmFpbl9yZWNlaXZlZF9kYXRhKToKKyAgICAgICAgKE1v
Y2tEaXNwYXRjaGVyKToKKyAgICAgICAgKE1vY2tEaXNwYXRjaGVyLl9faW5pdF9fKToKKyAgICAg
ICAgKE1vY2tEaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAgIChNb2NrRGlz
cGF0Y2hlci50cmFuc2Zlcl9kYXRhKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvcHl3ZWJzb2NrZXQvdGVzdC9ydW5fYWxsLnB5OiBBZGRlZC4KKyAgICAgICAgKF9saXN0
X3Rlc3RfbW9kdWxlcyk6CisgICAgICAgIChfc3VpdGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3NldF9zeXNfcGF0aC5weTogQ29waWVk
IGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fX3VuaXR0ZXN0
LnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90
ZXN0L3Rlc3RfZGlzcGF0Y2gucHk6IEFkZGVkLgorICAgICAgICAoRGlzcGF0Y2hlclRlc3QpOgor
ICAgICAgICAoRGlzcGF0Y2hlclRlc3QudGVzdF9ub3JtYWxpemVfcGF0aCk6CisgICAgICAgIChE
aXNwYXRjaGVyVGVzdC50ZXN0X2NvbnZlcnRlcik6CisgICAgICAgIChEaXNwYXRjaGVyVGVzdC50
ZXN0X2VudW1lcmF0ZV9oYW5kbGVyX2ZpbGVfcGF0aHMpOgorICAgICAgICAoRGlzcGF0Y2hlclRl
c3QudGVzdF9zb3VyY2VfaGFuZGxlcl9maWxlKToKKyAgICAgICAgKERpc3BhdGNoZXJUZXN0LnRl
c3Rfc291cmNlX2hhbmRsZXJfZmlsZS53ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSk6Cisg
ICAgICAgIChEaXNwYXRjaGVyVGVzdC50ZXN0X3NvdXJjZV9oYW5kbGVyX2ZpbGUud2ViX3NvY2tl
dF90cmFuc2Zlcl9kYXRhKToKKyAgICAgICAgKERpc3BhdGNoZXJUZXN0LnRlc3Rfc291cmNlX3dh
cm5pbmdzKToKKyAgICAgICAgKERpc3BhdGNoZXJUZXN0LnRlc3RfZG9fZXh0cmFfaGFuZHNoYWtl
KToKKyAgICAgICAgKERpc3BhdGNoZXJUZXN0LnRlc3RfYWJvcnRfZXh0cmFfaGFuZHNoYWtlKToK
KyAgICAgICAgKERpc3BhdGNoZXJUZXN0LnRlc3RfdHJhbnNmZXJfZGF0YSk6CisgICAgICAgIChE
aXNwYXRjaGVyVGVzdC50ZXN0X3RyYW5zZmVyX2RhdGFfbm9faGFuZGxlcik6CisgICAgICAgIChE
aXNwYXRjaGVyVGVzdC50ZXN0X3RyYW5zZmVyX2RhdGFfaGFuZGxlcl9leGNlcHRpb24pOgorICAg
ICAgICAoRGlzcGF0Y2hlclRlc3QudGVzdF9hYm9ydF90cmFuc2Zlcl9kYXRhKToKKyAgICAgICAg
KERpc3BhdGNoZXJUZXN0LnRlc3Rfc2Nhbl9kaXIpOgorICAgICAgICAoRGlzcGF0Y2hlclRlc3Qu
dGVzdF9zY2FuX3N1Yl9kaXIpOgorICAgICAgICAoRGlzcGF0Y2hlclRlc3QudGVzdF9zY2FuX3N1
Yl9kaXJfYXNfcm9vdCk6CisgICAgICAgIChEaXNwYXRjaGVyVGVzdC50ZXN0X3NjYW5fZGlyX211
c3RfdW5kZXJfcm9vdCk6CisgICAgICAgIChEaXNwYXRjaGVyVGVzdC50ZXN0X3Jlc291cmNlX3Bh
dGhfYWxpYXMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNv
Y2tldC90ZXN0L3Rlc3RfZW5kdG9lbmQucHk6IEFkZGVkLgorICAgICAgICAoX2VjaG9fY2hlY2tf
cHJvY2VkdXJlKToKKyAgICAgICAgKF9lY2hvX2NoZWNrX3Byb2NlZHVyZV93aXRoX2JpbmFyeSk6
CisgICAgICAgIChfZWNob19jaGVja19wcm9jZWR1cmVfd2l0aF9nb29kYnllKToKKyAgICAgICAg
KF9lY2hvX2NoZWNrX3Byb2NlZHVyZV93aXRoX2NvZGVfYW5kX3JlYXNvbik6CisgICAgICAgIChf
dW5tYXNrZWRfZnJhbWVfY2hlY2tfcHJvY2VkdXJlKToKKyAgICAgICAgKEVuZFRvRW5kVGVzdCk6
CisgICAgICAgIChFbmRUb0VuZFRlc3Quc2V0VXApOgorICAgICAgICAoRW5kVG9FbmRUZXN0Ll9y
dW5fcHl0aG9uX2NvbW1hbmQpOgorICAgICAgICAoRW5kVG9FbmRUZXN0Ll9ydW5fc2VydmVyKToK
KyAgICAgICAgKEVuZFRvRW5kVGVzdC5fa2lsbF9wcm9jZXNzKToKKyAgICAgICAgKEVuZFRvRW5k
VGVzdC5fcnVuX2h5YmlfdGVzdF93aXRoX2NsaWVudF9vcHRpb25zKToKKyAgICAgICAgKEVuZFRv
RW5kVGVzdC5fcnVuX2h5YmlfdGVzdCk6CisgICAgICAgIChFbmRUb0VuZFRlc3QuX3J1bl9oeWJp
X2RlZmxhdGVfdGVzdCk6CisgICAgICAgIChFbmRUb0VuZFRlc3QuX3J1bl9oeWJpX2RlZmxhdGVf
ZnJhbWVfdGVzdCk6CisgICAgICAgIChFbmRUb0VuZFRlc3QuX3J1bl9oeWJpX2Nsb3NlX3dpdGhf
Y29kZV9hbmRfcmVhc29uX3Rlc3QpOgorICAgICAgICAoRW5kVG9FbmRUZXN0Ll9ydW5faHliaV9o
dHRwX2ZhbGxiYWNrX3Rlc3QpOgorICAgICAgICAoRW5kVG9FbmRUZXN0LnRlc3RfZWNobyk6Cisg
ICAgICAgIChFbmRUb0VuZFRlc3QudGVzdF9lY2hvX2JpbmFyeSk6CisgICAgICAgIChFbmRUb0Vu
ZFRlc3QudGVzdF9lY2hvX3NlcnZlcl9jbG9zZSk6CisgICAgICAgIChFbmRUb0VuZFRlc3QudGVz
dF91bm1hc2tlZF9mcmFtZSk6CisgICAgICAgIChFbmRUb0VuZFRlc3QudGVzdF9lY2hvX2RlZmxh
dGUpOgorICAgICAgICAoRW5kVG9FbmRUZXN0LnRlc3RfZWNob19kZWZsYXRlX3NlcnZlcl9jbG9z
ZSk6CisgICAgICAgIChFbmRUb0VuZFRlc3QudGVzdF9lY2hvX2RlZmxhdGVfZnJhbWUpOgorICAg
ICAgICAoRW5kVG9FbmRUZXN0LnRlc3RfZWNob19kZWZsYXRlX2ZyYW1lX3NlcnZlcl9jbG9zZSk6
CisgICAgICAgIChFbmRUb0VuZFRlc3QudGVzdF9lY2hvX2Nsb3NlX3dpdGhfY29kZV9hbmRfcmVh
c29uKToKKyAgICAgICAgKEVuZFRvRW5kVGVzdC50ZXN0X2Nsb3NlX29uX3Byb3RvY29sX2Vycm9y
KToKKyAgICAgICAgKEVuZFRvRW5kVGVzdC50ZXN0X2Nsb3NlX29uX3Byb3RvY29sX2Vycm9yLnRl
c3RfZnVuY3Rpb24pOgorICAgICAgICAoRW5kVG9FbmRUZXN0LnRlc3RfY2xvc2Vfb25fdW5zdXBw
b3J0ZWRfZnJhbWUpOgorICAgICAgICAoRW5kVG9FbmRUZXN0LnRlc3RfY2xvc2Vfb25fdW5zdXBw
b3J0ZWRfZnJhbWUudGVzdF9mdW5jdGlvbik6CisgICAgICAgIChFbmRUb0VuZFRlc3QudGVzdF9j
bG9zZV9vbl9pbnZhbGlkX2ZyYW1lKToKKyAgICAgICAgKEVuZFRvRW5kVGVzdC50ZXN0X2Nsb3Nl
X29uX2ludmFsaWRfZnJhbWUudGVzdF9mdW5jdGlvbik6CisgICAgICAgIChFbmRUb0VuZFRlc3Qu
X3J1bl9oeWJpMDBfdGVzdCk6CisgICAgICAgIChFbmRUb0VuZFRlc3QudGVzdF9lY2hvX2h5Ymkw
MCk6CisgICAgICAgIChFbmRUb0VuZFRlc3QudGVzdF9lY2hvX3NlcnZlcl9jbG9zZV9oeWJpMDAp
OgorICAgICAgICAoRW5kVG9FbmRUZXN0Ll9ydW5faGl4aWU3NV90ZXN0KToKKyAgICAgICAgKEVu
ZFRvRW5kVGVzdC50ZXN0X2VjaG9faGl4aWU3NSk6CisgICAgICAgIChFbmRUb0VuZFRlc3QudGVz
dF9lY2hvX2hpeGllNzUudGVzdF9mdW5jdGlvbik6CisgICAgICAgIChFbmRUb0VuZFRlc3QudGVz
dF9lY2hvX3NlcnZlcl9jbG9zZV9oaXhpZTc1KToKKyAgICAgICAgKEVuZFRvRW5kVGVzdC50ZXN0
X2VjaG9fc2VydmVyX2Nsb3NlX2hpeGllNzUudGVzdF9mdW5jdGlvbik6CisgICAgICAgIChFbmRU
b0VuZFRlc3QudGVzdF9hYnNvbHV0ZV91cmkpOgorICAgICAgICAoRW5kVG9FbmRUZXN0LnRlc3Rf
b3JpZ2luX2NoZWNrKToKKyAgICAgICAgKEVuZFRvRW5kVGVzdC50ZXN0X3ZlcnNpb25fY2hlY2sp
OgorICAgICAgICAoRW5kVG9FbmRUZXN0Ll9jaGVja19leGFtcGxlX2VjaG9fY2xpZW50X3Jlc3Vs
dCk6CisgICAgICAgIChFbmRUb0VuZFRlc3QudGVzdF9leGFtcGxlX2VjaG9fY2xpZW50KToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0
X2hhbmRzaGFrZS5weTogQWRkZWQuCisgICAgICAgIChIYW5kc2hha2VyVGVzdCk6CisgICAgICAg
IChIYW5kc2hha2VyVGVzdC50ZXN0X3ZhbGlkYXRlX3N1YnByb3RvY29sKToKKyAgICAgICAgKEV4
dGVuc2lvbnNQYXJzZXJUZXN0KToKKyAgICAgICAgKEV4dGVuc2lvbnNQYXJzZXJUZXN0Ll92ZXJp
ZnlfZXh0ZW5zaW9uX2xpc3QpOgorICAgICAgICAoRXh0ZW5zaW9uc1BhcnNlclRlc3QudGVzdF9w
YXJzZSk6CisgICAgICAgIChFeHRlbnNpb25zUGFyc2VyVGVzdC50ZXN0X3BhcnNlX3dpdGhfYWxs
b3dfcXVvdGVkX3N0cmluZyk6CisgICAgICAgIChFeHRlbnNpb25zUGFyc2VyVGVzdC50ZXN0X3Bh
cnNlX3JlZHVuZGFudF9kYXRhKToKKyAgICAgICAgKEV4dGVuc2lvbnNQYXJzZXJUZXN0LnRlc3Rf
cGFyc2VfcmVkdW5kYW50X2RhdGFfd2l0aF9hbGxvd19xdW90ZWRfc3RyaW5nKToKKyAgICAgICAg
KEV4dGVuc2lvbnNQYXJzZXJUZXN0LnRlc3RfcGFyc2VfYmFkX2RhdGEpOgorICAgICAgICAoRm9y
bWF0RXh0ZW5zaW9uc1Rlc3QpOgorICAgICAgICAoRm9ybWF0RXh0ZW5zaW9uc1Rlc3QudGVzdF9m
b3JtYXRfZXh0ZW5zaW9ucyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9oYW5kc2hha2VfZHJhZnQ3NS5weTogQWRkZWQuCisgICAg
ICAgIChfY3JlYXRlX3JlcXVlc3QpOgorICAgICAgICAoX2NyZWF0ZV9nZXRfbWVtb3JpemVkX2xp
bmVzKToKKyAgICAgICAgKF9jcmVhdGVfZ2V0X21lbW9yaXplZF9saW5lcy5nZXRfbWVtb3JpemVk
X2xpbmVzKToKKyAgICAgICAgKF9jcmVhdGVfcmVxdWVzdHNfd2l0aF9saW5lcyk6CisgICAgICAg
IChIYW5kc2hha2VyVGVzdCk6CisgICAgICAgIChIYW5kc2hha2VyVGVzdC50ZXN0X2dvb2RfcmVx
dWVzdF9kZWZhdWx0X3BvcnQpOgorICAgICAgICAoSGFuZHNoYWtlclRlc3QudGVzdF9nb29kX3Jl
cXVlc3Rfc2VjdXJlX2RlZmF1bHRfcG9ydCk6CisgICAgICAgIChIYW5kc2hha2VyVGVzdC50ZXN0
X2dvb2RfcmVxdWVzdF9ub25kZWZhdWx0X3BvcnQpOgorICAgICAgICAoSGFuZHNoYWtlclRlc3Qu
dGVzdF9nb29kX3JlcXVlc3Rfc2VjdXJlX25vbl9kZWZhdWx0X3BvcnQpOgorICAgICAgICAoSGFu
ZHNoYWtlclRlc3QudGVzdF9nb29kX3JlcXVlc3RfZGVmYXVsdF9ub19wcm90b2NvbCk6CisgICAg
ICAgIChIYW5kc2hha2VyVGVzdC50ZXN0X2dvb2RfcmVxdWVzdF9vcHRpb25hbF9oZWFkZXJzKToK
KyAgICAgICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfYmFkX3JlcXVlc3RzKToKKyAgICAgICAgKEhh
bmRzaGFrZXJUZXN0LnRlc3Rfc3RyaWN0bHlfZ29vZF9yZXF1ZXN0cyk6CisgICAgICAgIChIYW5k
c2hha2VyVGVzdC50ZXN0X25vdF9zdHJpY3RseV9nb29kX3JlcXVlc3RzKToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFr
ZV9oeWJpLnB5OiBBZGRlZC4KKyAgICAgICAgKFJlcXVlc3REZWZpbml0aW9uKToKKyAgICAgICAg
KFJlcXVlc3REZWZpbml0aW9uLmZvcik6CisgICAgICAgIChSZXF1ZXN0RGVmaW5pdGlvbi5fX2lu
aXRfXyk6CisgICAgICAgIChfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYpOgorICAgICAgICAoX2Ny
ZWF0ZV9yZXF1ZXN0KToKKyAgICAgICAgKF9jcmVhdGVfaGFuZHNoYWtlcik6CisgICAgICAgIChT
dWJwcm90b2NvbENob29zaW5nRGlzcGF0Y2hlcik6CisgICAgICAgIChTdWJwcm90b2NvbENob29z
aW5nRGlzcGF0Y2hlci5fX2luaXRfXyk6CisgICAgICAgIChTdWJwcm90b2NvbENob29zaW5nRGlz
cGF0Y2hlci5kb19leHRyYV9oYW5kc2hha2UpOgorICAgICAgICAoU3VicHJvdG9jb2xDaG9vc2lu
Z0Rpc3BhdGNoZXIudHJhbnNmZXJfZGF0YSk6CisgICAgICAgIChIYW5kc2hha2VBYm9ydGVkRXhj
ZXB0aW9uKToKKyAgICAgICAgKEFib3J0aW5nRGlzcGF0Y2hlcik6CisgICAgICAgIChBYm9ydGlu
Z0Rpc3BhdGNoZXIuZG9fZXh0cmFfaGFuZHNoYWtlKToKKyAgICAgICAgKEFib3J0aW5nRGlzcGF0
Y2hlci50cmFuc2Zlcl9kYXRhKToKKyAgICAgICAgKEFib3J0ZWRCeVVzZXJEaXNwYXRjaGVyKToK
KyAgICAgICAgKEFib3J0ZWRCeVVzZXJEaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFrZSk6Cisg
ICAgICAgIChBYm9ydGVkQnlVc2VyRGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKToKKyAgICAgICAg
KEhhbmRzaGFrZXJUZXN0KToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfZG9faGFuZHNo
YWtlKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfZG9faGFuZHNoYWtlX3dpdGhfY2Fw
aXRhbGl6ZWRfdmFsdWUpOgorICAgICAgICAoSGFuZHNoYWtlclRlc3QudGVzdF9kb19oYW5kc2hh
a2Vfd2l0aF9tdWx0aXBsZV9jb25uZWN0aW9uX3ZhbHVlcyk6CisgICAgICAgIChIYW5kc2hha2Vy
VGVzdC50ZXN0X2Fib3J0aW5nX2hhbmRzaGFrZSk6CisgICAgICAgIChIYW5kc2hha2VyVGVzdC50
ZXN0X2RvX2hhbmRzaGFrZV93aXRoX3Byb3RvY29sKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0
LnRlc3RfZG9faGFuZHNoYWtlX3Byb3RvY29sX25vdF9pbl9yZXF1ZXN0X2J1dF9pbl9yZXNwb25z
ZSk6CisgICAgICAgIChIYW5kc2hha2VyVGVzdC50ZXN0X2RvX2hhbmRzaGFrZV93aXRoX3Byb3Rv
Y29sX25vX3Byb3RvY29sX3NlbGVjdGlvbik6CisgICAgICAgIChIYW5kc2hha2VyVGVzdC50ZXN0
X2RvX2hhbmRzaGFrZV93aXRoX2V4dGVuc2lvbnMpOgorICAgICAgICAoSGFuZHNoYWtlclRlc3Qu
dGVzdF9kb19oYW5kc2hha2Vfd2l0aF9xdW90ZWRfZXh0ZW5zaW9ucyk6CisgICAgICAgIChIYW5k
c2hha2VyVGVzdC50ZXN0X2RvX2hhbmRzaGFrZV93aXRoX29wdGlvbmFsX2hlYWRlcnMpOgorICAg
ICAgICAoSGFuZHNoYWtlclRlc3QudGVzdF9hYm9ydF9leHRyYV9oYW5kc2hha2UpOgorICAgICAg
ICAoSGFuZHNoYWtlclRlc3QudGVzdF9iYWRfcmVxdWVzdHMpOgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RfaGFuZHNoYWtlX2h5Ymkw
MC5weTogQWRkZWQuCisgICAgICAgIChfY3JlYXRlX3JlcXVlc3QpOgorICAgICAgICAoX2NyZWF0
ZV9nZXRfbWVtb3JpemVkX2xpbmVzKToKKyAgICAgICAgKF9jcmVhdGVfZ2V0X21lbW9yaXplZF9s
aW5lcy5nZXRfbWVtb3JpemVkX2xpbmVzKToKKyAgICAgICAgKF9jcmVhdGVfcmVxdWVzdHNfd2l0
aF9saW5lcyk6CisgICAgICAgIChIeWJpMDBIYW5kc2hha2VyVGVzdCk6CisgICAgICAgIChIeWJp
MDBIYW5kc2hha2VyVGVzdC50ZXN0X2dvb2RfcmVxdWVzdF9kZWZhdWx0X3BvcnQpOgorICAgICAg
ICAoSHliaTAwSGFuZHNoYWtlclRlc3QudGVzdF9nb29kX3JlcXVlc3RfY2FwaXRhbGl6ZWRfaGVh
ZGVyX3ZhbHVlcyk6CisgICAgICAgIChIeWJpMDBIYW5kc2hha2VyVGVzdC50ZXN0X2dvb2RfcmVx
dWVzdF9zZWN1cmVfZGVmYXVsdF9wb3J0KToKKyAgICAgICAgKEh5YmkwMEhhbmRzaGFrZXJUZXN0
LnRlc3RfZ29vZF9yZXF1ZXN0X25vbmRlZmF1bHRfcG9ydCk6CisgICAgICAgIChIeWJpMDBIYW5k
c2hha2VyVGVzdC50ZXN0X2dvb2RfcmVxdWVzdF9zZWN1cmVfbm9uX2RlZmF1bHRfcG9ydCk6Cisg
ICAgICAgIChIeWJpMDBIYW5kc2hha2VyVGVzdC50ZXN0X2dvb2RfcmVxdWVzdF9kZWZhdWx0X25v
X3Byb3RvY29sKToKKyAgICAgICAgKEh5YmkwMEhhbmRzaGFrZXJUZXN0LnRlc3RfZ29vZF9yZXF1
ZXN0X29wdGlvbmFsX2hlYWRlcnMpOgorICAgICAgICAoSHliaTAwSGFuZHNoYWtlclRlc3QudGVz
dF9nb29kX3JlcXVlc3Rfd2l0aF9ub25wcmludGFibGVfa2V5KToKKyAgICAgICAgKEh5YmkwMEhh
bmRzaGFrZXJUZXN0LnRlc3RfYmFkX3JlcXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZV9oeWJpMDgucHk6
IEFkZGVkLgorICAgICAgICAoUmVxdWVzdERlZmluaXRpb24pOgorICAgICAgICAoUmVxdWVzdERl
ZmluaXRpb24uZm9yKToKKyAgICAgICAgKFJlcXVlc3REZWZpbml0aW9uLl9faW5pdF9fKToKKyAg
ICAgICAgKF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZik6CisgICAgICAgIChfY3JlYXRlX3JlcXVl
c3QpOgorICAgICAgICAoX2NyZWF0ZV9oYW5kc2hha2VyKToKKyAgICAgICAgKFN1YnByb3RvY29s
Q2hvb3NpbmdEaXNwYXRjaGVyKToKKyAgICAgICAgKFN1YnByb3RvY29sQ2hvb3NpbmdEaXNwYXRj
aGVyLl9faW5pdF9fKToKKyAgICAgICAgKFN1YnByb3RvY29sQ2hvb3NpbmdEaXNwYXRjaGVyLmRv
X2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAgIChTdWJwcm90b2NvbENob29zaW5nRGlzcGF0Y2hl
ci50cmFuc2Zlcl9kYXRhKToKKyAgICAgICAgKEhhbmRzaGFrZUFib3J0ZWRFeGNlcHRpb24pOgor
ICAgICAgICAoQWJvcnRpbmdEaXNwYXRjaGVyKToKKyAgICAgICAgKEFib3J0aW5nRGlzcGF0Y2hl
ci5kb19leHRyYV9oYW5kc2hha2UpOgorICAgICAgICAoQWJvcnRpbmdEaXNwYXRjaGVyLnRyYW5z
ZmVyX2RhdGEpOgorICAgICAgICAoQWJvcnRlZEJ5VXNlckRpc3BhdGNoZXIpOgorICAgICAgICAo
QWJvcnRlZEJ5VXNlckRpc3BhdGNoZXIuZG9fZXh0cmFfaGFuZHNoYWtlKToKKyAgICAgICAgKEFi
b3J0ZWRCeVVzZXJEaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEpOgorICAgICAgICAoSGFuZHNoYWtl
clRlc3QpOgorICAgICAgICAoSGFuZHNoYWtlclRlc3QudGVzdF9kb19oYW5kc2hha2UpOgorICAg
ICAgICAoSGFuZHNoYWtlclRlc3QudGVzdF9kb19oYW5kc2hha2Vfd2l0aF9jYXBpdGFsaXplZF92
YWx1ZSk6CisgICAgICAgIChIYW5kc2hha2VyVGVzdC50ZXN0X2RvX2hhbmRzaGFrZV93aXRoX211
bHRpcGxlX2Nvbm5lY3Rpb25fdmFsdWVzKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0LnRlc3Rf
YWJvcnRpbmdfaGFuZHNoYWtlKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfZG9faGFu
ZHNoYWtlX3dpdGhfcHJvdG9jb2wpOgorICAgICAgICAoSGFuZHNoYWtlclRlc3QudGVzdF9kb19o
YW5kc2hha2VfcHJvdG9jb2xfbm90X2luX3JlcXVlc3RfYnV0X2luX3Jlc3BvbnNlKToKKyAgICAg
ICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfZG9faGFuZHNoYWtlX3dpdGhfcHJvdG9jb2xfbm9fcHJv
dG9jb2xfc2VsZWN0aW9uKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0LnRlc3RfZG9faGFuZHNo
YWtlX3dpdGhfZXh0ZW5zaW9ucyk6CisgICAgICAgIChIYW5kc2hha2VyVGVzdC50ZXN0X2RvX2hh
bmRzaGFrZV93aXRoX3F1b3RlZF9leHRlbnNpb25zKToKKyAgICAgICAgKEhhbmRzaGFrZXJUZXN0
LnRlc3RfZG9faGFuZHNoYWtlX3dpdGhfb3B0aW9uYWxfaGVhZGVycyk6CisgICAgICAgIChIYW5k
c2hha2VyVGVzdC50ZXN0X2Fib3J0X2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAgIChIYW5kc2hh
a2VyVGVzdC50ZXN0X2JhZF9yZXF1ZXN0cyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9odHRwX2hlYWRlcl91dGlsLnB5OiBBZGRl
ZC4KKyAgICAgICAgKFVuaXRUZXN0KToKKyAgICAgICAgKFVuaXRUZXN0LnRlc3RfcGFyc2VfcmVs
YXRpdmVfdXJpKToKKyAgICAgICAgKFVuaXRUZXN0LnRlc3RfcGFyc2VfYWJzb2x1dGVfdXJpKToK
KyAgICAgICAgKFVuaXRUZXN0LnRlc3RfcGFyc2VfaW52YWxpZF91cmkpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbWVtb3Jpemlu
Z2ZpbGUucHk6IEFkZGVkLgorICAgICAgICAoVXRpbFRlc3QpOgorICAgICAgICAoVXRpbFRlc3Qu
Y2hlY2spOgorICAgICAgICAoVXRpbFRlc3QuY2hlY2tfd2l0aF9zaXplKToKKyAgICAgICAgKFV0
aWxUZXN0LnRlc3RfZ2V0X21lbW9yaXplZF9saW5lcyk6CisgICAgICAgIChVdGlsVGVzdC50ZXN0
X2dldF9tZW1vcml6ZWRfbGluZXNfbGltaXRfbWVtb3JpemVkX2xpbmVzKToKKyAgICAgICAgKFV0
aWxUZXN0LnRlc3RfZ2V0X21lbW9yaXplZF9saW5lc19lbXB0eV9maWxlKToKKyAgICAgICAgKFV0
aWxUZXN0LnRlc3RfZ2V0X21lbW9yaXplZF9saW5lc193aXRoX3NpemUpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbW9jay5weTog
QWRkZWQuCisgICAgICAgIChNb2NrQ29ublRlc3QpOgorICAgICAgICAoTW9ja0Nvbm5UZXN0LnNl
dFVwKToKKyAgICAgICAgKE1vY2tDb25uVGVzdC50ZXN0X3JlYWRsaW5lKToKKyAgICAgICAgKE1v
Y2tDb25uVGVzdC50ZXN0X3JlYWQpOgorICAgICAgICAoTW9ja0Nvbm5UZXN0LnRlc3RfcmVhZF9h
bmRfcmVhZGxpbmUpOgorICAgICAgICAoTW9ja0Nvbm5UZXN0LnRlc3Rfd3JpdGUpOgorICAgICAg
ICAoTW9ja0Jsb2NraW5nQ29ublRlc3QpOgorICAgICAgICAoTW9ja0Jsb2NraW5nQ29ublRlc3Qu
dGVzdF9yZWFkKToKKyAgICAgICAgKE1vY2tCbG9ja2luZ0Nvbm5UZXN0LnRlc3RfcmVhZC5MaW5l
UmVhZGVyKToKKyAgICAgICAgKE1vY2tCbG9ja2luZ0Nvbm5UZXN0LnRlc3RfcmVhZC5MaW5lUmVh
ZGVyLnRoYXQpOgorICAgICAgICAoTW9ja0Jsb2NraW5nQ29ublRlc3QudGVzdF9yZWFkLkxpbmVS
ZWFkZXIuX19pbml0X18pOgorICAgICAgICAoTW9ja0Jsb2NraW5nQ29ublRlc3QudGVzdF9yZWFk
LkxpbmVSZWFkZXIucnVuKToKKyAgICAgICAgKE1vY2tUYWJsZVRlc3QpOgorICAgICAgICAoTW9j
a1RhYmxlVGVzdC50ZXN0X2NyZWF0ZV9mcm9tX2RpY3QpOgorICAgICAgICAoTW9ja1RhYmxlVGVz
dC50ZXN0X2NyZWF0ZV9mcm9tX2xpc3QpOgorICAgICAgICAoTW9ja1RhYmxlVGVzdC50ZXN0X2Ny
ZWF0ZV9mcm9tX3R1cGxlKToKKyAgICAgICAgKE1vY2tUYWJsZVRlc3QudGVzdF9zZXRfYW5kX2dl
dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rl
c3QvdGVzdF9tc2d1dGlsLnB5OiBBZGRlZC4KKyAgICAgICAgKF9tYXNrX2h5YmkpOgorICAgICAg
ICAoX2NyZWF0ZV9yZXF1ZXN0X2Zyb21fcmF3ZGF0YSk6CisgICAgICAgIChfY3JlYXRlX3JlcXVl
c3QpOgorICAgICAgICAoX2NyZWF0ZV9ibG9ja2luZ19yZXF1ZXN0KToKKyAgICAgICAgKF9jcmVh
dGVfcmVxdWVzdF9oaXhpZTc1KToKKyAgICAgICAgKF9jcmVhdGVfYmxvY2tpbmdfcmVxdWVzdF9o
aXhpZTc1KToKKyAgICAgICAgKE1lc3NhZ2VUZXN0KToKKyAgICAgICAgKE1lc3NhZ2VUZXN0LnRl
c3Rfc2VuZF9tZXNzYWdlKToKKyAgICAgICAgKE1lc3NhZ2VUZXN0LnRlc3Rfc2VuZF9tZWRpdW1f
bWVzc2FnZSk6CisgICAgICAgIChNZXNzYWdlVGVzdC50ZXN0X3NlbmRfbGFyZ2VfbWVzc2FnZSk6
CisgICAgICAgIChNZXNzYWdlVGVzdC50ZXN0X3NlbmRfbWVzc2FnZV91bmljb2RlKToKKyAgICAg
ICAgKE1lc3NhZ2VUZXN0LnRlc3Rfc2VuZF9tZXNzYWdlX2ZyYWdtZW50cyk6CisgICAgICAgIChN
ZXNzYWdlVGVzdC50ZXN0X3NlbmRfZnJhZ21lbnRzX2ltbWVkaWF0ZV96ZXJvX3Rlcm1pbmF0aW9u
KToKKyAgICAgICAgKE1lc3NhZ2VUZXN0LnRlc3Rfc2VuZF9tZXNzYWdlX2RlZmxhdGVfc3RyZWFt
KToKKyAgICAgICAgKE1lc3NhZ2VUZXN0LnRlc3Rfc2VuZF9tZXNzYWdlX2RlZmxhdGVfZnJhbWUp
OgorICAgICAgICAoTWVzc2FnZVRlc3QudGVzdF9zZW5kX21lc3NhZ2VfZGVmbGF0ZV9mcmFtZV9j
b21wX2JpdCk6CisgICAgICAgIChNZXNzYWdlVGVzdC50ZXN0X3NlbmRfbWVzc2FnZV9kZWZsYXRl
X2ZyYW1lX25vX2NvbnRleHRfdGFrZW92ZXJfcGFyYW1ldGVyKToKKyAgICAgICAgKE1lc3NhZ2VU
ZXN0LnRlc3RfZGVmbGF0ZV9mcmFtZV9iYWRfcmVxdWVzdF9wYXJhbWV0ZXJzKToKKyAgICAgICAg
KE1lc3NhZ2VUZXN0LnRlc3RfZGVmbGF0ZV9mcmFtZV9yZXNwb25zZV9wYXJhbWV0ZXJzKToKKyAg
ICAgICAgKE1lc3NhZ2VUZXN0LnRlc3RfcmVjZWl2ZV9tZXNzYWdlKToKKyAgICAgICAgKE1lc3Nh
Z2VUZXN0LnRlc3RfcmVjZWl2ZV9tZWRpdW1fbWVzc2FnZSk6CisgICAgICAgIChNZXNzYWdlVGVz
dC50ZXN0X3JlY2VpdmVfbGFyZ2VfbWVzc2FnZSk6CisgICAgICAgIChNZXNzYWdlVGVzdC50ZXN0
X3JlY2VpdmVfbGVuZ3RoX25vdF9lbmNvZGVkX3VzaW5nX21pbmltYWxfbnVtYmVyX29mX2J5dGVz
KToKKyAgICAgICAgKE1lc3NhZ2VUZXN0LnRlc3RfcmVjZWl2ZV9tZXNzYWdlX3VuaWNvZGUpOgor
ICAgICAgICAoTWVzc2FnZVRlc3QudGVzdF9yZWNlaXZlX21lc3NhZ2VfZXJyb25lb3VzX3VuaWNv
ZGUpOgorICAgICAgICAoTWVzc2FnZVRlc3QudGVzdF9yZWNlaXZlX2ZyYWdtZW50cyk6CisgICAg
ICAgIChNZXNzYWdlVGVzdC50ZXN0X3JlY2VpdmVfZnJhZ21lbnRzX3VuaWNvZGUpOgorICAgICAg
ICAoTWVzc2FnZVRlc3QudGVzdF9yZWNlaXZlX2ZyYWdtZW50c19pbW1lZGlhdGVfemVyb190ZXJt
aW5hdGlvbik6CisgICAgICAgIChNZXNzYWdlVGVzdC50ZXN0X3JlY2VpdmVfZnJhZ21lbnRzX2R1
cGxpY2F0ZV9zdGFydCk6CisgICAgICAgIChNZXNzYWdlVGVzdC50ZXN0X3JlY2VpdmVfZnJhZ21l
bnRzX2ludGVybWVkaWF0ZV9idXRfbm90X3N0YXJ0ZWQpOgorICAgICAgICAoTWVzc2FnZVRlc3Qu
dGVzdF9yZWNlaXZlX2ZyYWdtZW50c19lbmRfYnV0X25vdF9zdGFydGVkKToKKyAgICAgICAgKE1l
c3NhZ2VUZXN0LnRlc3RfcmVjZWl2ZV9tZXNzYWdlX2Rpc2NhcmQpOgorICAgICAgICAoTWVzc2Fn
ZVRlc3QudGVzdF9yZWNlaXZlX2Nsb3NlKToKKyAgICAgICAgKE1lc3NhZ2VUZXN0LnRlc3RfcmVj
ZWl2ZV9tZXNzYWdlX2RlZmxhdGVfc3RyZWFtKToKKyAgICAgICAgKE1lc3NhZ2VUZXN0LnRlc3Rf
cmVjZWl2ZV9tZXNzYWdlX2RlZmxhdGVfZnJhbWUpOgorICAgICAgICAoTWVzc2FnZVRlc3QudGVz
dF9yZWNlaXZlX21lc3NhZ2VfZGVmbGF0ZV9mcmFtZV9jbGllbnRfdXNpbmdfc21hbGxlcl93aW5k
b3cpOgorICAgICAgICAoTWVzc2FnZVRlc3QudGVzdF9yZWNlaXZlX21lc3NhZ2VfZGVmbGF0ZV9m
cmFtZV9jb21wX2JpdCk6CisgICAgICAgIChNZXNzYWdlVGVzdC50ZXN0X3NlbmRfcGluZyk6Cisg
ICAgICAgIChNZXNzYWdlVGVzdC50ZXN0X3JlY2VpdmVfcGluZyk6CisgICAgICAgIChNZXNzYWdl
VGVzdC50ZXN0X3JlY2VpdmVfcGluZy5oYW5kbGVyKToKKyAgICAgICAgKE1lc3NhZ2VUZXN0LnRl
c3RfcmVjZWl2ZV9wb25nKToKKyAgICAgICAgKE1lc3NhZ2VUZXN0LnRlc3RfcmVjZWl2ZV9wb25n
LmhhbmRsZXIpOgorICAgICAgICAoTWVzc2FnZVRlc3QudGVzdF9yZWNlaXZlX3Vuc29saWNpdGVk
X3BvbmcpOgorICAgICAgICAoTWVzc2FnZVRlc3QudGVzdF9waW5nX2Nhbm5vdF9iZV9mcmFnbWVu
dGVkKToKKyAgICAgICAgKE1lc3NhZ2VUZXN0LnRlc3RfcGluZ193aXRoX3Rvb19sb25nX3BheWxv
YWQpOgorICAgICAgICAoTWVzc2FnZVRlc3RIaXhpZTc1KToKKyAgICAgICAgKE1lc3NhZ2VUZXN0
SGl4aWU3NS50ZXN0X3NlbmRfbWVzc2FnZSk6CisgICAgICAgIChNZXNzYWdlVGVzdEhpeGllNzUu
dGVzdF9zZW5kX21lc3NhZ2VfdW5pY29kZSk6CisgICAgICAgIChNZXNzYWdlVGVzdEhpeGllNzUu
dGVzdF9yZWNlaXZlX21lc3NhZ2UpOgorICAgICAgICAoTWVzc2FnZVRlc3RIaXhpZTc1LnRlc3Rf
cmVjZWl2ZV9tZXNzYWdlX3VuaWNvZGUpOgorICAgICAgICAoTWVzc2FnZVRlc3RIaXhpZTc1LnRl
c3RfcmVjZWl2ZV9tZXNzYWdlX2Vycm9uZW91c191bmljb2RlKToKKyAgICAgICAgKE1lc3NhZ2VU
ZXN0SGl4aWU3NS50ZXN0X3JlY2VpdmVfbWVzc2FnZV9kaXNjYXJkKToKKyAgICAgICAgKE1lc3Nh
Z2VSZWNlaXZlclRlc3QpOgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVyVGVzdC51c2luZyk6Cisg
ICAgICAgIChNZXNzYWdlUmVjZWl2ZXJUZXN0LnRlc3RfcXVldWUpOgorICAgICAgICAoTWVzc2Fn
ZVJlY2VpdmVyVGVzdC50ZXN0X29ubWVzc2FnZSk6CisgICAgICAgIChNZXNzYWdlUmVjZWl2ZXJU
ZXN0LnRlc3Rfb25tZXNzYWdlLm9ubWVzc2FnZV9oYW5kbGVyKToKKyAgICAgICAgKE1lc3NhZ2VS
ZWNlaXZlckhpeGllNzVUZXN0KToKKyAgICAgICAgKE1lc3NhZ2VSZWNlaXZlckhpeGllNzVUZXN0
LnVzaW5nKToKKyAgICAgICAgKE1lc3NhZ2VSZWNlaXZlckhpeGllNzVUZXN0LnRlc3RfcXVldWUp
OgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVySGl4aWU3NVRlc3QudGVzdF9vbm1lc3NhZ2UpOgor
ICAgICAgICAoTWVzc2FnZVJlY2VpdmVySGl4aWU3NVRlc3QudGVzdF9vbm1lc3NhZ2Uub25tZXNz
YWdlX2hhbmRsZXIpOgorICAgICAgICAoTWVzc2FnZVNlbmRlclRlc3QpOgorICAgICAgICAoTWVz
c2FnZVNlbmRlclRlc3QudXNpbmcpOgorICAgICAgICAoTWVzc2FnZVNlbmRlclRlc3QudGVzdF9z
ZW5kKToKKyAgICAgICAgKE1lc3NhZ2VTZW5kZXJUZXN0LnRlc3Rfc2VuZF9ub3dhaXQpOgorICAg
ICAgICAoTWVzc2FnZVNlbmRlclRlc3QudGVzdF9zZW5kX25vd2FpdC53cml0ZSk6CisgICAgICAg
IChNZXNzYWdlU2VuZGVySGl4aWU3NVRlc3QpOgorICAgICAgICAoTWVzc2FnZVNlbmRlckhpeGll
NzVUZXN0LnVzaW5nKToKKyAgICAgICAgKE1lc3NhZ2VTZW5kZXJIaXhpZTc1VGVzdC50ZXN0X3Nl
bmQpOgorICAgICAgICAoTWVzc2FnZVNlbmRlckhpeGllNzVUZXN0LnRlc3Rfc2VuZF9ub3dhaXQp
OgorICAgICAgICAoTWVzc2FnZVNlbmRlckhpeGllNzVUZXN0LnRlc3Rfc2VuZF9ub3dhaXQud3Jp
dGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90
ZXN0L3Rlc3Rfc3RyZWFtLnB5OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvX19pbml0X19fdW5pdHRlc3QucHkuCisgICAgICAgIChTdHJlYW1UZXN0KToKKyAg
ICAgICAgKFN0cmVhbVRlc3QudGVzdF9jcmVhdGVfaGVhZGVyKToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X3N0cmVhbV9oaXhpZTc1
LnB5OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0
X19fdW5pdHRlc3QucHkuCisgICAgICAgIChTdHJlYW1IaXhpZTc1VGVzdCk6CisgICAgICAgIChT
dHJlYW1IaXhpZTc1VGVzdC50ZXN0X3BheWxvYWRfbGVuZ3RoKToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X3V0aWwucHk6IEFkZGVk
LgorICAgICAgICAoVXRpbFRlc3QpOgorICAgICAgICAoVXRpbFRlc3QudGVzdF9nZXRfc3RhY2tf
dHJhY2UpOgorICAgICAgICAoVXRpbFRlc3QudGVzdF9wcmVwZW5kX21lc3NhZ2VfdG9fZXhjZXB0
aW9uKToKKyAgICAgICAgKFV0aWxUZXN0LnRlc3RfZ2V0X3NjcmlwdF9pbnRlcnApOgorICAgICAg
ICAoVXRpbFRlc3QudGVzdF9oZXhpZnkpOgorICAgICAgICAoUmVwZWF0ZWRYb3JNYXNrZXJUZXN0
KToKKyAgICAgICAgKFJlcGVhdGVkWG9yTWFza2VyVGVzdC50ZXN0X21hc2spOgorICAgICAgICAo
UmVwZWF0ZWRYb3JNYXNrZXJUZXN0LnRlc3RfbWFza190d2ljZSk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvUkVBRE1FOiBB
ZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9hYm9ydF9ieV91c2VyX3dzaC5weTogQ29waWVkIGZyb20g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fX3VuaXR0ZXN0LnB5Lgor
ICAgICAgICAod2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UpOgorICAgICAgICAod2ViX3Nv
Y2tldF90cmFuc2Zlcl9kYXRhKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9ibGFua193c2gucHk6IENvcGll
ZCBmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfX191bml0dGVz
dC5weS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9vcmlnaW5fY2hlY2tfd3NoLnB5OiBDb3BpZWQgZnJvbSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X19fdW5pdHRlc3QucHkuCisg
ICAgICAgICh3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAgICh3ZWJfc29j
a2V0X3RyYW5zZmVyX2RhdGEpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9leGNlcHRpb25faW5fdHJh
bnNmZXJfd3NoLnB5OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvX19pbml0X19fdW5pdHRlc3QucHkuCisgICAgICAgICh3ZWJfc29ja2V0X2RvX2V4dHJhX2hh
bmRzaGFrZSk6CisgICAgICAgICh3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEpOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hh
bmRsZXJzL3N1Yi9ub193c2hfYXRfdGhlX2VuZC5weTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fX3VuaXR0ZXN0LnB5LgorICAgICAgICAod2Vi
X3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UpOgorICAgICAgICAod2ViX3NvY2tldF90cmFuc2Zl
cl9kYXRhKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2Nr
ZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvbm9uX2NhbGxhYmxlX3dzaC5weTogQ29waWVk
IGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fX3VuaXR0ZXN0
LnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90
ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9wbGFpbl93c2gucHk6IENvcGllZCBmcm9tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfX191bml0dGVzdC5weS4KKyAgICAg
ICAgKHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKToKKyAgICAgICAgKHdlYl9zb2NrZXRf
dHJhbnNmZXJfZGF0YSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5
d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL3dyb25nX2hhbmRzaGFrZV9zaWdf
d3NoLnB5OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19p
bml0X19fdW5pdHRlc3QucHkuCisgICAgICAgIChub193ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRz
aGFrZSk6CisgICAgICAgICh3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEpOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRs
ZXJzL3N1Yi93cm9uZ190cmFuc2Zlcl9zaWdfd3NoLnB5OiBDb3BpZWQgZnJvbSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X19fdW5pdHRlc3QucHkuCisgICAgICAgICh3
ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAgIChub193ZWJfc29ja2V0X3Ry
YW5zZmVyX2RhdGEpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdl
YnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hlbGxvLnBsOiBBZGRlZC4KKwogMjAxMi0wNS0wOCAgQmFs
YXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBYMTEgcGx1
Z2lucyBuZWVkIHRvIGJlIHJld29ya2VkIGZvciBRdDUrV0sxCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYnNvY2tldF9zZXJ2ZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYnNvY2tldF9z
ZXJ2ZXIucHkKaW5kZXggNzY3MWY2MDA2MTZlMzJiZGM5NzY4NTVhNDc0YjcxOWYyYmQ4NDE0ZC4u
NTk0NGU4NzFjODU2Yjk0ZTU0OGQ2MzdkMjIzNGMwMGY3YmNhM2IzZCAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJzb2NrZXRfc2VydmVy
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2Vi
c29ja2V0X3NlcnZlci5weQpAQCAtMTA5LDExICsxMDksMTEgQEAgY2xhc3MgUHlXZWJTb2NrZXQo
aHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICBvdXRwdXRfbG9nID0gc2VsZi5fZmlsZXN5
c3RlbS5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUgKyAiLW91dC50eHQiKQog
ICAgICAgICBzZWxmLl93c291dCA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9y
X3dyaXRpbmcob3V0cHV0X2xvZykKIAotICAgICAgICBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHku
YXV0b2luc3RhbGxlZC5weXdlYnNvY2tldCBpbXBvcnQgbW9kX3B5d2Vic29ja2V0CisgICAgICAg
IGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5weXdlYnNvY2tldCBpbXBvcnQgbW9kX3B5d2Vic29j
a2V0CiAgICAgICAgIHB5dGhvbl9pbnRlcnAgPSBzeXMuZXhlY3V0YWJsZQogICAgICAgICAjIEZJ
WE1FOiBVc2Ugc2VsZi5fZmlsZXN5c3RlbS5wYXRoX3RvX21vZHVsZShzZWxmLl9fbW9kdWxlX18p
IGluc3RlYWQgb2YgX19maWxlX18KICAgICAgICAgIyBJIHRoaW5rIHRoaXMgaXMgdHJ5aW5nIHRv
IGdldCB0aGUgY2hyb21lIGRpcmVjdG9yeT8gIERvZXNuJ3QgdGhlIHBvcnQgb2JqZWN0IGtub3cg
dGhhdD8KLSAgICAgICAgcHl3ZWJzb2NrZXRfYmFzZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihz
ZWxmLl9maWxlc3lzdGVtLmRpcm5hbWUoc2VsZi5fZmlsZXN5c3RlbS5kaXJuYW1lKHNlbGYuX2Zp
bGVzeXN0ZW0uZGlybmFtZShzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgoX19maWxlX18pKSkpLCAn
dGhpcmRwYXJ0eScsICdhdXRvaW5zdGFsbGVkJywgJ3B5d2Vic29ja2V0JykKKyAgICAgICAgcHl3
ZWJzb2NrZXRfYmFzZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9maWxlc3lzdGVtLmRp
cm5hbWUoc2VsZi5fZmlsZXN5c3RlbS5kaXJuYW1lKHNlbGYuX2ZpbGVzeXN0ZW0uZGlybmFtZShz
ZWxmLl9maWxlc3lzdGVtLmFic3BhdGgoX19maWxlX18pKSkpLCAndGhpcmRwYXJ0eScsICdweXdl
YnNvY2tldCcpCiAgICAgICAgIHB5d2Vic29ja2V0X3NjcmlwdCA9IHNlbGYuX2ZpbGVzeXN0ZW0u
am9pbihweXdlYnNvY2tldF9iYXNlLCAnbW9kX3B5d2Vic29ja2V0JywgJ3N0YW5kYWxvbmUucHkn
KQogICAgICAgICBzdGFydF9jbWQgPSBbCiAgICAgICAgICAgICBweXRob25faW50ZXJwLCAnLXUn
LCBweXdlYnNvY2tldF9zY3JpcHQsCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvX19pbml0X18ucHkKaW5kZXggYTBjZjBmNGQ0Y2IwYWEzNGU5NDBlNDM1MWRjYzY2M2MyNDY0
ZDVhNC4uMGRmMGNmN2I2ODc1ZmNlZjgyMzQ0ZWZlOTkyNjkzMzlmMDRlZjFmZSAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQpAQCAtODAsOCArODAs
NiBAQCBjbGFzcyBBdXRvaW5zdGFsbEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgICAgIHNl
bGYuX2luc3RhbGxfZWxpemEoKQogICAgICAgICBlbGlmICcuaXJjJyBpbiBmdWxsbmFtZToKICAg
ICAgICAgICAgIHNlbGYuX2luc3RhbGxfaXJjKCkKLSAgICAgICAgZWxpZiAnLnB5d2Vic29ja2V0
JyBpbiBmdWxsbmFtZToKLSAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfcHl3ZWJzb2NrZXQoKQog
ICAgICAgICBlbGlmICcuYnVpbGRib3QnIGluIGZ1bGxuYW1lOgogICAgICAgICAgICAgc2VsZi5f
aW5zdGFsbF9idWlsZGJvdCgpCiAKQEAgLTEyOCwxMiArMTI2LDYgQEAgY2xhc3MgQXV0b2luc3Rh
bGxJbXBvcnRIb29rKG9iamVjdCk6CiAgICAgICAgIGluc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0
cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9weXRob24taXJjbGliL3B5dGhv
bi1pcmNsaWIvMC40LjgvcHl0aG9uLWlyY2xpYi0wLjQuOC56aXAiLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cmxfc3VicGF0aD0iaXJjYm90LnB5IikKIAotICAgIGRlZiBfaW5zdGFsbF9w
eXdlYnNvY2tldChzZWxmKToKLSAgICAgICAgcHl3ZWJzb2NrZXRfZGlyID0gc2VsZi5fZnMuam9p
bihfQVVUT0lOU1RBTExFRF9ESVIsICJweXdlYnNvY2tldCIpCi0gICAgICAgIGluc3RhbGxlciA9
IEF1dG9JbnN0YWxsZXIodGFyZ2V0X2Rpcj1weXdlYnNvY2tldF9kaXIpCi0gICAgICAgIGluc3Rh
bGxlci5pbnN0YWxsKHVybD0iaHR0cDovL3B5d2Vic29ja2V0Lmdvb2dsZWNvZGUuY29tL2ZpbGVz
L21vZF9weXdlYnNvY2tldC0wLjcuNC50YXIuZ3oiLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICB1cmxfc3VicGF0aD0icHl3ZWJzb2NrZXQtMC43LjQvc3JjL21vZF9weXdlYnNvY2tldCIpCi0K
ICAgICBkZWYgX2luc3RhbGwoc2VsZiwgdXJsLCB1cmxfc3VicGF0aCk6CiAgICAgICAgIGluc3Rh
bGxlciA9IEF1dG9JbnN0YWxsZXIodGFyZ2V0X2Rpcj1fQVVUT0lOU1RBTExFRF9ESVIpCiAgICAg
ICAgIGluc3RhbGxlci5pbnN0YWxsKHVybD11cmwsIHVybF9zdWJwYXRoPXVybF9zdWJwYXRoKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fX3Vu
aXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fX3Vu
aXR0ZXN0LnB5CmluZGV4IGIxOTY0ZTliY2IxNzJlY2U1N2JmZDVlMjVkODZkNzNmNzA5ODFjNjAu
LjM1ODNhYjQzMmE3MWI2ZjVlMTA5MGRhN2Y0NTdmYmQzOTYzNzU4M2UgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfX191bml0dGVzdC5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X19fdW5pdHRlc3QucHkK
QEAgLTM5LDE0ICszOSwxMCBAQCBjbGFzcyBUaGlyZHBhcnR5VGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgICAgICAgICAgQXV0
b2luc3RhbGxJbXBvcnRIb29rLl9faW5pdF9fKHNlbGYpCiAgICAgICAgICAgICAgICAgc2VsZi5f
ZWxpemFfaW5zdGFsbGVkID0gRmFsc2UKLSAgICAgICAgICAgICAgICBzZWxmLl9weXdlYnNvY2tl
dF9pbnN0YWxsZWQgPSBGYWxzZQogCiAgICAgICAgICAgICBkZWYgX2luc3RhbGxfZWxpemEoc2Vs
Zik6CiAgICAgICAgICAgICAgICAgc2VsZi5lbGl6YV9pbnN0YWxsZWQgPSBUcnVlCiAKLSAgICAg
ICAgICAgIGRlZiBfaW5zdGFsbF9weXdlYnNvY2tldChzZWxmKToKLSAgICAgICAgICAgICAgICBz
ZWxmLnB5d2Vic29ja2V0X2luc3RhbGxlZCA9IFRydWUKLQogICAgICAgICBtb2NrX2ltcG9ydF9o
b29rID0gTW9ja0ltcG9ydEhvb2soKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIFRoZSBh
Y3R1YWwgQXV0b2luc3RhbGxJbXBvcnRIb29rIHNob3VsZCBiZSBpbnN0YWxsZWQgYmVmb3JlIHVz
LApAQCAtNTUsOCArNTEsNiBAQCBjbGFzcyBUaGlyZHBhcnR5VGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgICAgICBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZCBp
bXBvcnQgZWxpemEKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2NrX2ltcG9ydF9ob29r
LmVsaXphX2luc3RhbGxlZCkKIAotICAgICAgICAgICAgZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5
LmF1dG9pbnN0YWxsZWQucHl3ZWJzb2NrZXQgaW1wb3J0IG1vZF9weXdlYnNvY2tldAotICAgICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfaW1wb3J0X2hvb2sucHl3ZWJzb2NrZXRfaW5zdGFs
bGVkKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc3lzLm1ldGFfcGF0aC5yZW1vdmUo
bW9ja19pbXBvcnRfaG9vaykKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3B5d2Vic29ja2V0L0NPUFlJTkcgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvcHl3ZWJzb2NrZXQvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjlkNTJkZGY5MzA3MjA4
NmNiYmEyMTJjZGJiZWQ3YjM4ZmFhNTNhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L0NPUFlJTkcKQEAgLTAsMCArMSwyOCBA
QAorQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
K2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKK2luIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L01BTklGRVNULmluIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L01BTklGRVNULmluCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5MjU2
ODgyYzU2ZmViNzI4MTJjOTljOGE4Mzc5OTc5ZTYzZTRhMGMKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvTUFOSUZFU1QuaW4K
QEAgLTAsMCArMSw2IEBACitpbmNsdWRlIENPUFlJTkcKK2luY2x1ZGUgTUFOSUZFU1QuaW4KK2lu
Y2x1ZGUgUkVBRE1FCityZWN1cnNpdmUtaW5jbHVkZSBleGFtcGxlICoucHkKK3JlY3Vyc2l2ZS1p
bmNsdWRlIG1vZF9weXdlYnNvY2tldCAqLnB5CityZWN1cnNpdmUtaW5jbHVkZSB0ZXN0ICoucHkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tl
dC9SRUFETUUgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQv
UkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjBjYjhjNWQ0MTc5ZDA3ZDgwOWI5YmVlMDdjNDBjOTQ0ZDIxNDc4
YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
cHl3ZWJzb2NrZXQvUkVBRE1FCkBAIC0wLDAgKzEsOSBAQAorSW5zdGFsbCB0aGlzIHBhY2thZ2Ug
Ynk6CiskIHB5dGhvbiBzZXR1cC5weSBidWlsZAorJCBzdWRvIHB5dGhvbiBzZXR1cC5weSBpbnN0
YWxsCisKK0lmIHlvdSdyZSBnb2luZyB0byB1c2UgdGhpcyBwYWNrYWdlIGFzIGEgbm9ybWFsIHVz
ZXIsIHJ1biB0aGlzIGluc3RlYWQ6CiskIHB5dGhvbiBzZXR1cC5weSBpbnN0YWxsIC0tdXNlcgor
CitUaGVuIHJlYWQgZG9jdW1lbnQgYnk6CiskIHB5ZG9jIG1vZF9weXdlYnNvY2tldApkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L19faW5p
dF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L19f
aW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxZTRjNmQzMmU0NGNlY2ZmMTVhNjYxNjIxMzlhMTZlNzBh
OGYwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvcHl3ZWJzb2NrZXQvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorIyBUaGlzIGZpbGUgaXMg
cmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZXMu
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2Nr
ZXQvZXhhbXBsZS9iZW5jaF93c2gucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvcHl3ZWJzb2NrZXQvZXhhbXBsZS9iZW5jaF93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTA2N2NhN2Q4
OTU1ZmMxNjNkNTAwMWNkODgxMmU2YWUyMGMxNjI5MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9leGFtcGxlL2JlbmNoX3dz
aC5weQpAQCAtMCwwICsxLDYwIEBACisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJBIHNpbXBsZSBs
b2FkIHRlc3RlciBmb3IgV2ViU29ja2V0IGNsaWVudHMuCisKK0EgY2xpZW50IHByb2dyYW0gc2Vu
ZHMgYSBtZXNzYWdlIGZvcm1hdHRlZCBhcyAiPHRpbWU+IDxjb3VudD4gPG1lc3NhZ2U+IiB0bwor
dGhpcyBoYW5kbGVyLiBUaGlzIGhhbmRsZXIgc3RhcnRzIHNlbmRpbmcgdG90YWwgPGNvdW50PiBX
ZWJTb2NrZXQgbWVzc2FnZXMKK2NvbnRhaW5pbmcgPG1lc3NhZ2U+IGV2ZXJ5IDx0aW1lPiBzZWNv
bmRzLiA8dGltZT4gY2FuIGJlIGEgZmxvYXRpbmcgcG9pbnQKK3ZhbHVlLiA8Y291bnQ+IG11c3Qg
YmUgYW4gaW50ZWdlciB2YWx1ZS4KKyIiIgorCisKK2ltcG9ydCB0aW1lCisKKworZGVmIHdlYl9z
b2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MgICMgQWx3YXlzIGFj
Y2VwdC4KKworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIGxp
bmUgPSByZXF1ZXN0LndzX3N0cmVhbS5yZWNlaXZlX21lc3NhZ2UoKQorICAgIHBhcnRzID0gbGlu
ZS5zcGxpdCgnICcpCisgICAgaWYgbGVuKHBhcnRzKSAhPSAzOgorICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCdCYWQgcGFyYW1ldGVyIGZvcm1hdCcpCisgICAgd2FpdCA9IGZsb2F0KHBhcnRzWzBd
KQorICAgIGNvdW50ID0gaW50KHBhcnRzWzFdKQorICAgIG1lc3NhZ2UgPSBwYXJ0c1syXQorICAg
IGZvciBpIGluIHhyYW5nZShjb3VudCk6CisgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLnNlbmRf
bWVzc2FnZShtZXNzYWdlKQorICAgICAgICB0aW1lLnNsZWVwKHdhaXQpCisKKworIyB2aTpzdHM9
NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
cHl3ZWJzb2NrZXQvZXhhbXBsZS9jbG9zZV93c2gucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvZXhhbXBsZS9jbG9zZV93c2gucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTY3ZjkzNjcwODAzNjU3MWJiZGVhZGM1MGNlNzY2ZDA4YWIzNGIzMQotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9leGFtcGxl
L2Nsb3NlX3dzaC5weQpAQCAtMCwwICsxLDU3IEBACisjIENvcHlyaWdodCAyMDExLCBHb29nbGUg
SW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IHN0cnVjdAorCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgc3RyZWFtCisKKworZGVmIHdl
Yl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MKKworCitkZWYg
d2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHdoaWxlIFRydWU6CisgICAg
ICAgIGxpbmUgPSByZXF1ZXN0LndzX3N0cmVhbS5yZWNlaXZlX21lc3NhZ2UoKQorICAgICAgICBp
ZiBsaW5lIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgY29kZSwgcmVhc29u
ID0gbGluZS5zcGxpdCgnICcsIDEpCisgICAgICAgIGlmIGNvZGUgaXMgTm9uZSBvciByZWFzb24g
aXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkYXRhID0gc3RydWN0LnBhY2so
JyFIJywgaW50KGNvZGUpKSArIHJlYXNvbi5lbmNvZGUoJ1VURi04JykKKyAgICAgICAgcmVxdWVz
dC5jb25uZWN0aW9uLndyaXRlKHN0cmVhbS5jcmVhdGVfY2xvc2VfZnJhbWUoZGF0YSkpCisgICAg
ICAgICMgU3VwcHJlc3MgdG8gcmUtcmVzcG9uZCBjbGllbnQgcmVzcG9uZGluZyBjbG9zZSBmcmFt
ZS4KKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJjdXN0b21pemVkIHNlcnZlciBpbml0aWF0ZWQg
Y2xvc2luZyBoYW5kc2hha2UiKQorCisKK2RlZiB3ZWJfc29ja2V0X3Bhc3NpdmVfY2xvc2luZ19o
YW5kc2hha2UocmVxdWVzdCk6CisgICAgcmV0dXJuIHJlcXVlc3Qud3NfY2xvc2VfY29kZSwgcmVx
dWVzdC53c19jbG9zZV9yZWFzb24KKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9leGFtcGxlL2Nv
bnNvbGUuaHRtbCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tl
dC9leGFtcGxlL2NvbnNvbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTZmM2ZlNmJlYzhlNDM3ODcxNzFj
NjRhNzljMmJmYTU1ZWFkNzEwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L2V4YW1wbGUvY29uc29sZS5odG1sCkBAIC0wLDAg
KzEsMTc3IEBACis8IS0tCitDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KK0FsbCByaWdodHMg
cmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgoraW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKworPCEtLQorQSBzaW1w
bGUgY29uc29sZSBmb3IgdGVzdGluZyBXZWJTb2NrZXQgc2VydmVyLgorCitUeXBlIGFuIGFkZHJl
c3MgaW50byB0aGUgdG9wIHRleHQgaW5wdXQgYW5kIGNsaWNrIGNvbm5lY3QgdG8gZXN0YWJsaXNo
CitXZWJTb2NrZXQuIFRoZW4sIHR5cGUgc29tZSBtZXNzYWdlIGludG8gdGhlIGJvdHRvbSB0ZXh0
IGlucHV0IGFuZCBjbGljayBzZW5kCit0byBzZW5kIHRoZSBtZXNzYWdlLiBSZWNlaXZlZC9zZW50
IG1lc3NhZ2VzIGFuZCBjb25uZWN0aW9uIHN0YXRlIHdpbGwgYmUgc2hvd24KK29uIHRoZSBtaWRk
bGUgdGV4dGFyZWEuCistLT4KKworPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5XZWJTb2NrZXQgY29u
c29sZTwvdGl0bGU+Cis8c2NyaXB0PgordmFyIHNvY2tldCA9IG51bGw7CisKK3ZhciBhZGRyZXNz
Qm94ID0gbnVsbDsKK3ZhciBsb2dCb3ggPSBudWxsOwordmFyIG1lc3NhZ2VCb3ggPSBudWxsOwor
dmFyIGNvZGVCb3ggPSBudWxsOwordmFyIHJlYXNvbkJveCA9IG51bGw7CisKK2Z1bmN0aW9uIGFk
ZFRvTG9nKGxvZykgeworICBsb2dCb3gudmFsdWUgKz0gbG9nICsgJ1xuJworICAvLyBMYXJnZSBl
bm91Z2ggdG8ga2VlcCBzaG93aW5nIHRoZSBsYXRlc3QgbWVzc2FnZS4KKyAgbG9nQm94LnNjcm9s
bFRvcCA9IDEwMDAwMDA7Cit9CisKK2Z1bmN0aW9uIHNlbmQoKSB7CisgIGlmICghc29ja2V0KSB7
CisgICAgYWRkVG9Mb2coJ05vdCBjb25uZWN0ZWQnKTsKKyAgICByZXR1cm47CisgIH0KKworICBz
b2NrZXQuc2VuZChtZXNzYWdlQm94LnZhbHVlKTsKKyAgYWRkVG9Mb2coJz4gJyArIG1lc3NhZ2VC
b3gudmFsdWUpOworICBtZXNzYWdlQm94LnZhbHVlID0gJyc7Cit9CisKK2Z1bmN0aW9uIGNvbm5l
Y3QoKSB7CisgIGlmICgnV2ViU29ja2V0JyBpbiB3aW5kb3cpIHsKKyAgICBzb2NrZXQgPSBuZXcg
V2ViU29ja2V0KGFkZHJlc3NCb3gudmFsdWUpOworICB9IGVsc2UgaWYgKCdNb3pXZWJTb2NrZXQn
IGluIHdpbmRvdykgeworICAgIHNvY2tldCA9IG5ldyBNb3pXZWJTb2NrZXQoYWRkcmVzc0JveC52
YWx1ZSk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuOworICB9CisKKyAgc29ja2V0Lm9ub3BlbiA9
IGZ1bmN0aW9uICgpIHsKKyAgICBhZGRUb0xvZygnT3BlbmVkJyk7CisgIH07CisgIHNvY2tldC5v
bm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICBhZGRUb0xvZygnPCAnICsgZXZlbnQu
ZGF0YSk7CisgIH07CisgIHNvY2tldC5vbmVycm9yID0gZnVuY3Rpb24gKCkgeworICAgIGFkZFRv
TG9nKCdFcnJvcicpOworICB9OworICBzb2NrZXQub25jbG9zZSA9IGZ1bmN0aW9uIChldmVudCkg
eworICAgIHZhciBsb2dNZXNzYWdlID0gJ0Nsb3NlZCAoJzsKKyAgICBpZiAoKGFyZ3VtZW50cy5s
ZW5ndGggPT0gMSkgJiYgKCdDbG9zZUV2ZW50JyBpbiB3aW5kb3cpICYmCisgICAgICAgIChldmVu
dCBpbnN0YW5jZW9mIENsb3NlRXZlbnQpKSB7CisgICAgICBsb2dNZXNzYWdlICs9ICd3YXNDbGVh
biA9ICcgKyBldmVudC53YXNDbGVhbjsKKyAgICAgIC8vIGNvZGUgYW5kIHJlYXNvbiBhcmUgcHJl
c2VudCBvbmx5IGZvcgorICAgICAgLy8gZHJhZnQtaWV0Zi1oeWJpLXRoZXdlYnNvY2tldHByb3Rv
Y29sLTA2IGFuZCBsYXRlcgorICAgICAgaWYgKCdjb2RlJyBpbiBldmVudCkgeworICAgICAgICBs
b2dNZXNzYWdlICs9ICcsIGNvZGUgPSAnICsgZXZlbnQuY29kZTsKKyAgICAgIH0KKyAgICAgIGlm
ICgncmVhc29uJyBpbiBldmVudCkgeworICAgICAgICBsb2dNZXNzYWdlICs9ICcsIHJlYXNvbiA9
ICcgKyBldmVudC5yZWFzb247CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ01lc3Nh
Z2UgKz0gJ0Nsb3NlRXZlbnQgaXMgbm90IGF2YWlsYWJsZSc7CisgICAgfQorICAgIGFkZFRvTG9n
KGxvZ01lc3NhZ2UgKyAnKScpOworICB9OworCisgIGFkZFRvTG9nKCdDb25uZWN0ICcgKyBhZGRy
ZXNzQm94LnZhbHVlKTsKK30KKworZnVuY3Rpb24gY2xvc2VTb2NrZXQoKSB7CisgIGlmICghc29j
a2V0KSB7CisgICAgYWRkVG9Mb2coJ05vdCBjb25uZWN0ZWQnKTsKKyAgICByZXR1cm47CisgIH0K
KworICBpZiAoY29kZUJveC52YWx1ZSB8fCByZWFzb25Cb3gudmFsdWUpIHsKKyAgICBzb2NrZXQu
Y2xvc2UoY29kZUJveC52YWx1ZSwgcmVhc29uQm94LnZhbHVlKTsKKyAgfSBlbHNlIHsKKyAgICBz
b2NrZXQuY2xvc2UoKTsKKyAgfQorfQorCitmdW5jdGlvbiBwcmludFN0YXRlKCkgeworICBpZiAo
IXNvY2tldCkgeworICAgIGFkZFRvTG9nKCdOb3QgY29ubmVjdGVkJyk7CisgICAgcmV0dXJuOwor
ICB9CisKKyAgYWRkVG9Mb2coCisgICAgICAndXJsID0gJyArIHNvY2tldC51cmwgKworICAgICAg
JywgcmVhZHlTdGF0ZSA9ICcgKyBzb2NrZXQucmVhZHlTdGF0ZSArCisgICAgICAnLCBidWZmZXJl
ZEFtb3VudCA9ICcgKyBzb2NrZXQuYnVmZmVyZWRBbW91bnQpOworfQorCitmdW5jdGlvbiBpbml0
KCkgeworICB2YXIgc2NoZW1lID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sID09ICdodHRwczon
ID8gJ3dzczovLycgOiAnd3M6Ly8nOworICB2YXIgZGVmYXVsdEFkZHJlc3MgPSBzY2hlbWUgKyB3
aW5kb3cubG9jYXRpb24uaG9zdCArICcvZWNobyc7CisKKyAgYWRkcmVzc0JveCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdhZGRyZXNzJyk7CisgIGxvZ0JveCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdsb2cnKTsKKyAgbWVzc2FnZUJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdt
ZXNzYWdlJyk7CisgIGNvZGVCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29kZScpOwor
ICByZWFzb25Cb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVhc29uJyk7CisKKyAgYWRk
cmVzc0JveC52YWx1ZSA9IGRlZmF1bHRBZGRyZXNzOworCisgIGlmICgnTW96V2ViU29ja2V0JyBp
biB3aW5kb3cpIHsKKyAgICBhZGRUb0xvZygnVXNlIE1veldlYlNvY2tldCcpOworICB9IGVsc2Ug
aWYgKCEoJ1dlYlNvY2tldCcgaW4gd2luZG93KSkgeworICAgIGFkZFRvTG9nKCdXZWJTb2NrZXQg
aXMgbm90IGF2YWlsYWJsZScpOworICB9Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9u
bG9hZD0iaW5pdCgpIj4KKworPGZvcm0gYWN0aW9uPSIjIiBvbnN1Ym1pdD0iY29ubmVjdCgpOyBy
ZXR1cm4gZmFsc2U7Ij4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iYWRkcmVzcyIgc2l6ZT0iNDAi
PgorPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9ImNvbm5lY3QiPgorPGlucHV0IHR5cGU9ImJ1
dHRvbiIgdmFsdWU9InByaW50IHN0YXRlIiBvbmNsaWNrPSJwcmludFN0YXRlKCk7Ij4KKzwvZm9y
bT4KKworPHRleHRhcmVhIGlkPSJsb2ciIHJvd3M9IjEwIiBjb2xzPSI0MCIgcmVhZG9ubHk+PC90
ZXh0YXJlYT4KKworPGZvcm0gYWN0aW9uPSIjIiBvbnN1Ym1pdD0ic2VuZCgpOyByZXR1cm4gZmFs
c2U7Ij4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibWVzc2FnZSIgc2l6ZT0iNDAiPgorPGlucHV0
IHR5cGU9InN1Ym1pdCIgdmFsdWU9InNlbmQiPgorPC9mb3JtPgorCis8Zm9ybSBhY3Rpb249IiMi
IG9uc3VibWl0PSJjbG9zZVNvY2tldCgpOyByZXR1cm4gZmFsc2U7Ij4KK0NvZGUgPGlucHV0IHR5
cGU9InRleHQiIGlkPSJjb2RlIiBzaXplPSIxMCI+CitSZWFzb24gPGlucHV0IHR5cGU9InRleHQi
IGlkPSJyZWFzb24iIHNpemU9IjIwIj4KKzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJjbG9z
ZSI+Cis8L2Zvcm0+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fY2xpZW50LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L2V4YW1wbGUv
ZWNob19jbGllbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUwOTFjMzU1M2Y4OTk4OGRjYzMwNDRlODI4MjY1
ZjM1MDlhYzNkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fY2xpZW50LnB5CkBAIC0wLDAgKzEsOTk5
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJ
bmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlNp
bXBsZSBXZWJTb2NrZXQgY2xpZW50IG5hbWVkIGVjaG9fY2xpZW50IGp1c3QgYmVjYXVzZSBvZiBo
aXN0b3JpY2FsIHJlYXNvbi4KKworbW9kX3B5d2Vic29ja2V0IGRpcmVjdG9yeSBtdXN0IGJlIGlu
IFBZVEhPTlBBVEguCisKK0V4YW1wbGUgVXNhZ2U6CisKKyMgc2VydmVyIHNldHVwCisgJSBjZCAk
cHl3ZWJzb2NrZXQKKyAlIFBZVEhPTlBBVEg9JGN3ZC9zcmMgcHl0aG9uIC4vbW9kX3B5d2Vic29j
a2V0L3N0YW5kYWxvbmUucHkgLXAgODg4MCBcCisgICAgLWQgJGN3ZC9zcmMvZXhhbXBsZQorCisj
IHJ1biBjbGllbnQKKyAlIFBZVEhPTlBBVEg9JGN3ZC9zcmMgcHl0aG9uIC4vc3JjL2V4YW1wbGUv
ZWNob19jbGllbnQucHkgLXAgODg4MCBcCisgICAgIC1zIGxvY2FsaG9zdCBcCisgICAgIC1vIGh0
dHA6Ly9sb2NhbGhvc3QgLXIgL2VjaG8gLW0gdGVzdAorCitvcgorCisjIHJ1biBlY2hvIGNsaWVu
dCB0byB0ZXN0IElFVEYgSHlCaSAwMCBwcm90b2NvbAorIHJ1biB3aXRoIC0tcHJvdG9jb2wtdmVy
c2lvbj1oeWJpMDAKKworb3IKKworIyBzZXJ2ZXIgc2V0dXAgdG8gdGVzdCBIaXhpZSA3NSBwcm90
b2NvbAorIHJ1biB3aXRoIC0tYWxsb3ctZHJhZnQ3NQorCisjIHJ1biBlY2hvIGNsaWVudCB0byB0
ZXN0IEhpeGllIDc1IHByb3RvY29sCisgcnVuIHdpdGggLS1wcm90b2NvbC12ZXJzaW9uPWhpeGll
NzUKKyIiIgorCisKK2ltcG9ydCBiYXNlNjQKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBsb2dnaW5n
Citmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2ltcG9ydCBvcworaW1wb3J0IHJh
bmRvbQoraW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lz
CisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29j
a2V0LmV4dGVuc2lvbnMgaW1wb3J0IERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3NvcgorZnJv
bSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBmb3JtYXRfZXh0ZW5zaW9u
cworZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBwYXJzZV9leHRl
bnNpb25zCitmcm9tIG1vZF9weXdlYnNvY2tldC5zdHJlYW0gaW1wb3J0IFN0cmVhbQorZnJvbSBt
b2RfcHl3ZWJzb2NrZXQuc3RyZWFtIGltcG9ydCBTdHJlYW1IaXhpZTc1Citmcm9tIG1vZF9weXdl
YnNvY2tldC5zdHJlYW0gaW1wb3J0IFN0cmVhbU9wdGlvbnMKK2Zyb20gbW9kX3B5d2Vic29ja2V0
IGltcG9ydCB1dGlsCisKKworX1RJTUVPVVRfU0VDID0gMTAKK19VTkRFRklORURfUE9SVCA9IC0x
CisKK19VUEdSQURFX0hFQURFUiA9ICdVcGdyYWRlOiB3ZWJzb2NrZXRcclxuJworX1VQR1JBREVf
SEVBREVSX0hJWElFNzUgPSAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKK19DT05ORUNUSU9OX0hF
QURFUiA9ICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicKKworIyBTcGVjaWFsIG1lc3NhZ2UgdGhh
dCB0ZWxscyB0aGUgZWNobyBzZXJ2ZXIgdG8gc3RhcnQgY2xvc2luZyBoYW5kc2hha2UKK19HT09E
QllFX01FU1NBR0UgPSAnR29vZGJ5ZScKKworX1BST1RPQ09MX1ZFUlNJT05fSFlCSTEzID0gJ2h5
YmkxMycKK19QUk9UT0NPTF9WRVJTSU9OX0hZQkkwOCA9ICdoeWJpMDgnCitfUFJPVE9DT0xfVkVS
U0lPTl9IWUJJMDAgPSAnaHliaTAwJworX1BST1RPQ09MX1ZFUlNJT05fSElYSUU3NSA9ICdoaXhp
ZTc1JworCisKK2NsYXNzIENsaWVudEhhbmRzaGFrZUVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFz
cworCisKK2RlZiBfYnVpbGRfbWV0aG9kX2xpbmUocmVzb3VyY2UpOgorICAgIHJldHVybiAnR0VU
ICVzIEhUVFAvMS4xXHJcbicgJSByZXNvdXJjZQorCisKK2RlZiBfb3JpZ2luX2hlYWRlcihoZWFk
ZXIsIG9yaWdpbik6CisgICAgIyA0LjEgMTMuIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZyAi
T3JpZ2luOiIsIGEgVSswMDIwIFNQQUNFIGNoYXJhY3RlciwKKyAgICAjIGFuZCB0aGUgL29yaWdp
bi8gdmFsdWUsIGNvbnZlcnRlZCB0byBBU0NJSSBsb3dlcmNhc2UsIHRvIC9maWVsZHMvLgorICAg
IHJldHVybiAnJXM6ICVzXHJcbicgJSAoaGVhZGVyLCBvcmlnaW4ubG93ZXIoKSkKKworCitkZWYg
X2Zvcm1hdF9ob3N0X2hlYWRlcihob3N0LCBwb3J0LCBzZWN1cmUpOgorICAgICMgNC4xIDkuIExl
dCAvaG9zdHBvcnQvIGJlIGFuIGVtcHR5IHN0cmluZy4KKyAgICAjIDQuMSAxMC4gQXBwZW5kIHRo
ZSAvaG9zdC8gdmFsdWUsIGNvbnZlcnRlZCB0byBBU0NJSSBsb3dlcmNhc2UsIHRvCisgICAgIyAv
aG9zdHBvcnQvCisgICAgaG9zdHBvcnQgPSBob3N0Lmxvd2VyKCkKKyAgICAjIDQuMSAxMS4gSWYg
L3NlY3VyZS8gaXMgZmFsc2UsIGFuZCAvcG9ydC8gaXMgbm90IDgwLCBvciBpZiAvc2VjdXJlLwor
ICAgICMgaXMgdHJ1ZSwgYW5kIC9wb3J0LyBpcyBub3QgNDQzLCB0aGVuIGFwcGVuZCBhIFUrMDAz
QSBDT0xPTiBjaGFyYWN0ZXIKKyAgICAjICg6KSBmb2xsb3dlZCBieSB0aGUgdmFsdWUgb2YgL3Bv
cnQvLCBleHByZXNzZWQgYXMgYSBiYXNlLXRlbiBpbnRlZ2VyLAorICAgICMgdG8gL2hvc3Rwb3J0
LworICAgIGlmICgobm90IHNlY3VyZSBhbmQgcG9ydCAhPSBjb21tb24uREVGQVVMVF9XRUJfU09D
S0VUX1BPUlQpIG9yCisgICAgICAgIChzZWN1cmUgYW5kIHBvcnQgIT0gY29tbW9uLkRFRkFVTFRf
V0VCX1NPQ0tFVF9TRUNVUkVfUE9SVCkpOgorICAgICAgICBob3N0cG9ydCArPSAnOicgKyBzdHIo
cG9ydCkKKyAgICAjIDQuMSAxMi4gY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyaW5nICJIb3N0OiIs
IGEgVSswMDIwIFNQQUNFCisgICAgIyBjaGFyYWN0ZXIsIGFuZCAvaG9zdHBvcnQvLCB0byAvZmll
bGRzLy4KKyAgICByZXR1cm4gJyVzOiAlc1xyXG4nICUgKGNvbW1vbi5IT1NUX0hFQURFUiwgaG9z
dHBvcnQpCisKKworZGVmIF9yZWNlaXZlX2J5dGVzKHNvY2tldCwgbGVuZ3RoKToKKyAgICBieXRl
cyA9IFtdCisgICAgcmVtYWluaW5nID0gbGVuZ3RoCisgICAgd2hpbGUgcmVtYWluaW5nID4gMDoK
KyAgICAgICAgcmVjZWl2ZWRfYnl0ZXMgPSBzb2NrZXQucmVjdihyZW1haW5pbmcpCisgICAgICAg
IGlmIG5vdCByZWNlaXZlZF9ieXRlczoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoCisgICAg
ICAgICAgICAgICAgJ0Nvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSByZWNlaXZpbmcgcmVxdWVzdGVk
IGxlbmd0aCAnCisgICAgICAgICAgICAgICAgJyhyZXF1ZXN0ZWQgJWQgYnl0ZXMgYnV0IHJlY2Vp
dmVkIG9ubHkgJWQgYnl0ZXMpJyAlCisgICAgICAgICAgICAgICAgKGxlbmd0aCwgbGVuZ3RoIC0g
cmVtYWluaW5nKSkKKyAgICAgICAgYnl0ZXMuYXBwZW5kKHJlY2VpdmVkX2J5dGVzKQorICAgICAg
ICByZW1haW5pbmcgLT0gbGVuKHJlY2VpdmVkX2J5dGVzKQorICAgIHJldHVybiAnJy5qb2luKGJ5
dGVzKQorCisKK2RlZiBfZ2V0X21hbmRhdG9yeV9oZWFkZXIoZmllbGRzLCBuYW1lKToKKyAgICAi
IiJHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyIHNwZWNpZmllZCBieSBuYW1lIGZyb20gZmll
bGRzLgorCisgICAgVGhpcyBmdW5jdGlvbiBleHBlY3RzIHRoYXQgdGhlcmUncyBvbmx5IG9uZSBo
ZWFkZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUKKyAgICBpbiBmaWVsZHMuIE90aGVyd2lzZSwg
cmFpc2VzIGFuIENsaWVudEhhbmRzaGFrZUVycm9yLgorICAgICIiIgorCisgICAgdmFsdWVzID0g
ZmllbGRzLmdldChuYW1lLmxvd2VyKCkpCisgICAgaWYgdmFsdWVzIGlzIE5vbmUgb3IgbGVuKHZh
bHVlcykgPT0gMDoKKyAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoCisgICAgICAg
ICAgICAnJXMgaGVhZGVyIG5vdCBmb3VuZDogJXInICUgKG5hbWUsIHZhbHVlcykpCisgICAgaWYg
bGVuKHZhbHVlcykgPiAxOgorICAgICAgICByYWlzZSBDbGllbnRIYW5kc2hha2VFcnJvcigKKyAg
ICAgICAgICAgICdNdWx0aXBsZSAlcyBoZWFkZXJzIGZvdW5kOiAlcicgJSAobmFtZSwgdmFsdWVz
KSkKKyAgICByZXR1cm4gdmFsdWVzWzBdCisKKworZGVmIF92YWxpZGF0ZV9tYW5kYXRvcnlfaGVh
ZGVyKGZpZWxkcywgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rl
ZF92YWx1ZSwgY2FzZV9zZW5zaXRpdmU9RmFsc2UpOgorICAgICIiIkdldHMgYW5kIHZhbGlkYXRl
cyB0aGUgdmFsdWUgb2YgdGhlIGhlYWRlciBzcGVjaWZpZWQgYnkgbmFtZSBmcm9tCisgICAgZmll
bGRzLgorCisgICAgSWYgZXhwZWN0ZWRfdmFsdWUgaXMgc3BlY2lmaWVkLCBjb21wYXJlcyBleHBl
Y3RlZCB2YWx1ZSBhbmQgYWN0dWFsIHZhbHVlCisgICAgYW5kIHJhaXNlcyBhbiBDbGllbnRIYW5k
c2hha2VFcnJvciBvbiBmYWlsdXJlLiBZb3UgY2FuIHNwZWNpZnkgY2FzZQorICAgIHNlbnNpdGl2
ZW5lc3MgaW4gdGhpcyBjb21wYXJpc29uIGJ5IGNhc2Vfc2Vuc2l0aXZlIHBhcmFtZXRlci4gVGhp
cyBmdW5jdGlvbgorICAgIGV4cGVjdHMgdGhhdCB0aGVyZSdzIG9ubHkgb25lIGhlYWRlciB3aXRo
IHRoZSBzcGVjaWZpZWQgbmFtZSBpbiBmaWVsZHMuCisgICAgT3RoZXJ3aXNlLCByYWlzZXMgYW4g
Q2xpZW50SGFuZHNoYWtlRXJyb3IuCisgICAgIiIiCisKKyAgICB2YWx1ZSA9IF9nZXRfbWFuZGF0
b3J5X2hlYWRlcihmaWVsZHMsIG5hbWUpCisKKyAgICBpZiAoKGNhc2Vfc2Vuc2l0aXZlIGFuZCB2
YWx1ZSAhPSBleHBlY3RlZF92YWx1ZSkgb3IKKyAgICAgICAgKG5vdCBjYXNlX3NlbnNpdGl2ZSBh
bmQgdmFsdWUubG93ZXIoKSAhPSBleHBlY3RlZF92YWx1ZS5sb3dlcigpKSk6CisgICAgICAgIHJh
aXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAorICAgICAgICAgICAgJ0lsbGVnYWwgdmFsdWUgZm9y
IGhlYWRlciAlczogJXIgKGV4cGVjdGVkKSB2cyAlciAoYWN0dWFsKScgJQorICAgICAgICAgICAg
KG5hbWUsIGV4cGVjdGVkX3ZhbHVlLCB2YWx1ZSkpCisKKworY2xhc3MgX1RMU1NvY2tldChvYmpl
Y3QpOgorICAgICIiIldyYXBwZXIgZm9yIGEgVExTIGNvbm5lY3Rpb24uIiIiCisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcmF3X3NvY2tldCk6CisgICAgICAgIHNlbGYuX3NzbCA9IHNvY2tldC5z
c2wocmF3X3NvY2tldCkKKworICAgIGRlZiBzZW5kKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3NzbC53cml0ZShieXRlcykKKworICAgIGRlZiByZWN2KHNlbGYsIHNpemU9LTEp
OgorICAgICAgICByZXR1cm4gc2VsZi5fc3NsLnJlYWQoc2l6ZSkKKworICAgIGRlZiBjbG9zZShz
ZWxmKToKKyAgICAgICAgIyBOb3RoaW5nIHRvIGRvLgorICAgICAgICBwYXNzCisKKworY2xhc3Mg
Q2xpZW50SGFuZHNoYWtlQmFzZShvYmplY3QpOgorICAgICIiIkEgYmFzZSBjbGFzcyBmb3IgV2Vi
U29ja2V0IG9wZW5pbmcgaGFuZHNoYWtlIHByb2Nlc3NvcnMgZm9yIGVhY2gKKyAgICBwcm90b2Nv
bCB2ZXJzaW9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBz
ZWxmLl9sb2dnZXIgPSB1dGlsLmdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgIGRlZiBfcmVh
ZF9maWVsZHMoc2VsZik6CisgICAgICAgICMgNC4xIDMyLiBsZXQgL2ZpZWxkcy8gYmUgYSBsaXN0
IG9mIG5hbWUtdmFsdWUgcGFpcnMsIGluaXRpYWxseSBlbXB0eS4KKyAgICAgICAgZmllbGRzID0g
e30KKyAgICAgICAgd2hpbGUgVHJ1ZTogICMgIkZpZWxkIgorICAgICAgICAgICAgIyA0LjEgMzMu
IGxldCAvbmFtZS8gYW5kIC92YWx1ZS8gYmUgZW1wdHkgYnl0ZSBhcnJheXMKKyAgICAgICAgICAg
IG5hbWUgPSAnJworICAgICAgICAgICAgdmFsdWUgPSAnJworICAgICAgICAgICAgIyA0LjEgMzQu
IHJlYWQgL25hbWUvCisgICAgICAgICAgICBuYW1lID0gc2VsZi5fcmVhZF9uYW1lKCkKKyAgICAg
ICAgICAgIGlmIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAg
ICAgIyA0LjEgMzUuIHJlYWQgc3BhY2VzCisgICAgICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBT
a2lwIG9ubHkgb25lIHNwYWNlIGFzIGRlc2NyaWJlZCBpbiB0aGUgc3BlYy4KKyAgICAgICAgICAg
IGNoID0gc2VsZi5fc2tpcF9zcGFjZXMoKQorICAgICAgICAgICAgIyA0LjEgMzYuIHJlYWQgL3Zh
bHVlLworICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9yZWFkX3ZhbHVlKGNoKQorICAgICAgICAg
ICAgIyA0LjEgMzcuIHJlYWQgYSBieXRlIGZyb20gdGhlIHNlcnZlcgorICAgICAgICAgICAgY2gg
PSBfcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2NrZXQsIDEpCisgICAgICAgICAgICBpZiBjaCAhPSAn
XG4nOiAgIyAweDBBCisgICAgICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3Io
CisgICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZCBMRiBidXQgZm91bmQgJXIgd2hpbGUgcmVh
ZGluZyB2YWx1ZSAlciBmb3IgJworICAgICAgICAgICAgICAgICAgICAnaGVhZGVyICVyJyAlIChj
aCwgdmFsdWUsIG5hbWUpKQorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdSZWNlaXZl
ZCAlciBoZWFkZXInLCBuYW1lKQorICAgICAgICAgICAgIyA0LjEgMzguIGFwcGVuZCBhbiBlbnRy
eSB0byB0aGUgL2ZpZWxkcy8gbGlzdCB0aGF0IGhhcyB0aGUgbmFtZQorICAgICAgICAgICAgIyBn
aXZlbiBieSB0aGUgc3RyaW5nIG9idGFpbmVkIGJ5IGludGVycHJldGluZyB0aGUgL25hbWUvIGJ5
dGUKKyAgICAgICAgICAgICMgYXJyYXkgYXMgYSBVVEYtOCBzdHJlYW0gYW5kIHRoZSB2YWx1ZSBn
aXZlbiBieSB0aGUgc3RyaW5nCisgICAgICAgICAgICAjIG9idGFpbmVkIGJ5IGludGVycHJldGlu
ZyB0aGUgL3ZhbHVlLyBieXRlIGFycmF5IGFzIGEgVVRGLTggYnl0ZQorICAgICAgICAgICAgIyBz
dHJlYW0uCisgICAgICAgICAgICBmaWVsZHMuc2V0ZGVmYXVsdChuYW1lLCBbXSkuYXBwZW5kKHZh
bHVlKQorICAgICAgICAgICAgIyA0LjEgMzkuIHJldHVybiB0byB0aGUgIkZpZWxkIiBzdGVwIGFi
b3ZlCisgICAgICAgIHJldHVybiBmaWVsZHMKKworICAgIGRlZiBfcmVhZF9uYW1lKHNlbGYpOgor
ICAgICAgICAjIDQuMSAzMy4gbGV0IC9uYW1lLyBiZSBlbXB0eSBieXRlIGFycmF5cworICAgICAg
ICBuYW1lID0gJycKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICMgNC4xIDM0LiBy
ZWFkIGEgYnl0ZSBmcm9tIHRoZSBzZXJ2ZXIKKyAgICAgICAgICAgIGNoID0gX3JlY2VpdmVfYnl0
ZXMoc2VsZi5fc29ja2V0LCAxKQorICAgICAgICAgICAgaWYgY2ggPT0gJ1xyJzogICMgMHgwRAor
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBlbGlmIGNoID09ICdcbic6
ICAjIDB4MEEKKyAgICAgICAgICAgICAgICByYWlzZSBDbGllbnRIYW5kc2hha2VFcnJvcigKKyAg
ICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgTEYgd2hlbiByZWFkaW5nIGhlYWRlciBuYW1l
ICVyJyAlIG5hbWUpCisgICAgICAgICAgICBlbGlmIGNoID09ICc6JzogICMgMHgzQQorICAgICAg
ICAgICAgICAgIHJldHVybiBuYW1lCisgICAgICAgICAgICBlbGlmIGNoID49ICdBJyBhbmQgY2gg
PD0gJ1onOiAgIyBSYW5nZSAweDMxIHRvIDB4NUEKKyAgICAgICAgICAgICAgICBjaCA9IGNocihv
cmQoY2gpICsgMHgyMCkKKyAgICAgICAgICAgICAgICBuYW1lICs9IGNoCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIG5hbWUgKz0gY2gKKworICAgIGRlZiBfc2tpcF9zcGFjZXMo
c2VsZik6CisgICAgICAgICMgNC4xIDM1LiByZWFkIGEgYnl0ZSBmcm9tIHRoZSBzZXJ2ZXIKKyAg
ICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGNoID0gX3JlY2VpdmVfYnl0ZXMoc2VsZi5f
c29ja2V0LCAxKQorICAgICAgICAgICAgaWYgY2ggPT0gJyAnOiAgIyAweDIwCisgICAgICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJldHVybiBjaAorCisgICAgZGVmIF9yZWFkX3Zh
bHVlKHNlbGYsIGNoKToKKyAgICAgICAgIyA0LjEgMzMuIGxldCAvdmFsdWUvIGJlIGVtcHR5IGJ5
dGUgYXJyYXlzCisgICAgICAgIHZhbHVlID0gJycKKyAgICAgICAgIyA0LjEgMzYuIHJlYWQgYSBi
eXRlIGZyb20gc2VydmVyLgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgY2gg
PT0gJ1xyJzogICMgMHgwRAorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICAg
ICAgZWxpZiBjaCA9PSAnXG4nOiAgIyAweDBBCisgICAgICAgICAgICAgICAgcmFpc2UgQ2xpZW50
SGFuZHNoYWtlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIExGIHdoZW4g
cmVhZGluZyBoZWFkZXIgdmFsdWUgJXInICUgdmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHZhbHVlICs9IGNoCisgICAgICAgICAgICBjaCA9IF9yZWNlaXZlX2J5dGVz
KHNlbGYuX3NvY2tldCwgMSkKKworCitjbGFzcyBDbGllbnRIYW5kc2hha2VQcm9jZXNzb3IoQ2xp
ZW50SGFuZHNoYWtlQmFzZSk6CisgICAgIiIiV2ViU29ja2V0IG9wZW5pbmcgaGFuZHNoYWtlIHBy
b2Nlc3NvciBmb3IKKyAgICBkcmFmdC1pZXRmLWh5YmktdGhld2Vic29ja2V0cHJvdG9jb2wtMDYg
YW5kIGxhdGVyLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2tldCwgb3B0
aW9ucyk6CisgICAgICAgIHN1cGVyKENsaWVudEhhbmRzaGFrZVByb2Nlc3Nvciwgc2VsZikuX19p
bml0X18oKQorCisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldAorICAgICAgICBzZWxmLl9v
cHRpb25zID0gb3B0aW9ucworCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNz
X2xvZ2dlcihzZWxmKQorCisgICAgZGVmIGhhbmRzaGFrZShzZWxmKToKKyAgICAgICAgIiIiUGVy
Zm9ybXMgb3BlbmluZyBoYW5kc2hha2Ugb24gdGhlIHNwZWNpZmllZCBzb2NrZXQuCisKKyAgICAg
ICAgUmFpc2VzOgorICAgICAgICAgICAgQ2xpZW50SGFuZHNoYWtlRXJyb3I6IGhhbmRzaGFrZSBm
YWlsZWQuCisgICAgICAgICIiIgorCisgICAgICAgIHJlcXVlc3RfbGluZSA9IF9idWlsZF9tZXRo
b2RfbGluZShzZWxmLl9vcHRpb25zLnJlc291cmNlKQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVi
dWcoJ0NsaWVudFwncyBvcGVuaW5nIGhhbmRzaGFrZSBSZXF1ZXN0LUxpbmU6ICVyJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfbGluZSkKKyAgICAgICAgc2VsZi5fc29ja2V0
LnNlbmRhbGwocmVxdWVzdF9saW5lKQorCisgICAgICAgIGZpZWxkcyA9IFtdCisgICAgICAgIGZp
ZWxkcy5hcHBlbmQoX2Zvcm1hdF9ob3N0X2hlYWRlcigKKyAgICAgICAgICAgIHNlbGYuX29wdGlv
bnMuc2VydmVyX2hvc3QsCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnNlcnZlcl9wb3J0LAor
ICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy51c2VfdGxzKSkKKyAgICAgICAgZmllbGRzLmFwcGVu
ZChfVVBHUkFERV9IRUFERVIpCisgICAgICAgIGZpZWxkcy5hcHBlbmQoX0NPTk5FQ1RJT05fSEVB
REVSKQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLm9yaWdpbiBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMucHJvdG9jb2xfdmVyc2lvbiA9PSBfUFJPVE9DT0xfVkVS
U0lPTl9IWUJJMDg6CisgICAgICAgICAgICAgICAgZmllbGRzLmFwcGVuZChfb3JpZ2luX2hlYWRl
cigKKyAgICAgICAgICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJTT0NLRVRfT1JJR0lOX0hFQURF
UiwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5vcmlnaW4pKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKF9vcmlnaW5faGVhZGVyKGNv
bW1vbi5PUklHSU5fSEVBREVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fb3B0aW9ucy5vcmlnaW4pKQorCisgICAgICAgIG9yaWdpbmFsX2tleSA9
IG9zLnVyYW5kb20oMTYpCisgICAgICAgIHNlbGYuX2tleSA9IGJhc2U2NC5iNjRlbmNvZGUob3Jp
Z2luYWxfa2V5KQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAnJXM6
ICVyICglcyknLAorICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJTT0NLRVRfS0VZX0hFQURFUiwK
KyAgICAgICAgICAgIHNlbGYuX2tleSwKKyAgICAgICAgICAgIHV0aWwuaGV4aWZ5KG9yaWdpbmFs
X2tleSkpCisgICAgICAgIGZpZWxkcy5hcHBlbmQoCisgICAgICAgICAgICAnJXM6ICVzXHJcbicg
JSAoY29tbW9uLlNFQ19XRUJTT0NLRVRfS0VZX0hFQURFUiwgc2VsZi5fa2V5KSkKKworICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnZlcnNpb25faGVhZGVyID4gMDoKKyAgICAgICAgICAgIGZpZWxk
cy5hcHBlbmQoJyVzOiAlZFxyXG4nICUgKGNvbW1vbi5TRUNfV0VCU09DS0VUX1ZFUlNJT05fSEVB
REVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucy52ZXJzaW9uX2hlYWRlcikpCisgICAgICAgIGVsaWYgc2VsZi5fb3B0aW9ucy5wcm90b2Nv
bF92ZXJzaW9uID09IF9QUk9UT0NPTF9WRVJTSU9OX0hZQkkwODoKKyAgICAgICAgICAgIGZpZWxk
cy5hcHBlbmQoJyVzOiAlZFxyXG4nICUgKGNvbW1vbi5TRUNfV0VCU09DS0VUX1ZFUlNJT05fSEVB
REVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uLlZF
UlNJT05fSFlCSTA4KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQo
JyVzOiAlZFxyXG4nICUgKGNvbW1vbi5TRUNfV0VCU09DS0VUX1ZFUlNJT05fSEVBREVSLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uLlZFUlNJT05fSFlC
SV9MQVRFU1QpKQorCisgICAgICAgIGV4dGVuc2lvbnNfdG9fcmVxdWVzdCA9IFtdCisKKyAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5kZWZsYXRlX3N0cmVhbToKKyAgICAgICAgICAgIGV4dGVuc2lv
bnNfdG9fcmVxdWVzdC5hcHBlbmQoCisgICAgICAgICAgICAgICAgY29tbW9uLkV4dGVuc2lvblBh
cmFtZXRlcigKKyAgICAgICAgICAgICAgICAgICAgY29tbW9uLkRFRkxBVEVfU1RSRUFNX0VYVEVO
U0lPTikpCisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5kZWZsYXRlX2ZyYW1lOgorICAgICAg
ICAgICAgZXh0ZW5zaW9uc190b19yZXF1ZXN0LmFwcGVuZCgKKyAgICAgICAgICAgICAgICBjb21t
b24uRXh0ZW5zaW9uUGFyYW1ldGVyKGNvbW1vbi5ERUZMQVRFX0ZSQU1FX0VYVEVOU0lPTikpCisK
KyAgICAgICAgaWYgbGVuKGV4dGVuc2lvbnNfdG9fcmVxdWVzdCkgIT0gMDoKKyAgICAgICAgICAg
IGZpZWxkcy5hcHBlbmQoCisgICAgICAgICAgICAgICAgJyVzOiAlc1xyXG4nICUKKyAgICAgICAg
ICAgICAgICAoY29tbW9uLlNFQ19XRUJTT0NLRVRfRVhURU5TSU9OU19IRUFERVIsCisgICAgICAg
ICAgICAgICAgIGZvcm1hdF9leHRlbnNpb25zKGV4dGVuc2lvbnNfdG9fcmVxdWVzdCkpKQorCisg
ICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXQuc2Vu
ZGFsbChmaWVsZCkKKworICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbCgnXHJcbicpCisKKyAg
ICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdTZW50IGNsaWVudFwncyBvcGVuaW5nIGhhbmRzaGFr
ZSBoZWFkZXJzOiAlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMpCisgICAg
ICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnU3RhcnQgcmVhZGluZyBTdGF0dXMtTGluZScpCisKKyAg
ICAgICAgc3RhdHVzX2xpbmUgPSAnJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAg
Y2ggPSBfcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2NrZXQsIDEpCisgICAgICAgICAgICBzdGF0dXNf
bGluZSArPSBjaAorICAgICAgICAgICAgaWYgY2ggPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBi
cmVhaworCisgICAgICAgIG0gPSByZS5tYXRjaCgnSFRUUC9cXGQrXC5cXGQrIChcXGRcXGRcXGQp
IC4qXHJcbicsIHN0YXR1c19saW5lKQorICAgICAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgICAg
ICByYWlzZSBDbGllbnRIYW5kc2hha2VFcnJvcigKKyAgICAgICAgICAgICAgICAnV3Jvbmcgc3Rh
dHVzIGxpbmUgZm9ybWF0OiAlcicgJSBzdGF0dXNfbGluZSkKKyAgICAgICAgc3RhdHVzX2NvZGUg
PSBtLmdyb3VwKDEpCisgICAgICAgIGlmIHN0YXR1c19jb2RlICE9ICcxMDEnOgorICAgICAgICAg
ICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdVbmV4cGVjdGVkIHN0YXR1cyBjb2RlICVzIHdpdGggZm9s
bG93aW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVhZGVyczogJXInLCBz
dGF0dXNfY29kZSwgc2VsZi5fcmVhZF9maWVsZHMoKSkKKyAgICAgICAgICAgIHJhaXNlIENsaWVu
dEhhbmRzaGFrZUVycm9yKAorICAgICAgICAgICAgICAgICdFeHBlY3RlZCBIVFRQIHN0YXR1cyBj
b2RlIDEwMSBidXQgZm91bmQgJXInICUgc3RhdHVzX2NvZGUpCisKKyAgICAgICAgc2VsZi5fbG9n
Z2VyLmRlYnVnKCdSZWNlaXZlZCB2YWxpZCBTdGF0dXMtTGluZScpCisgICAgICAgIHNlbGYuX2xv
Z2dlci5kZWJ1ZygnU3RhcnQgcmVhZGluZyBoZWFkZXJzIHVudGlsIHdlIHNlZSBhbiBlbXB0eSBs
aW5lJykKKworICAgICAgICBmaWVsZHMgPSBzZWxmLl9yZWFkX2ZpZWxkcygpCisKKyAgICAgICAg
Y2ggPSBfcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2NrZXQsIDEpCisgICAgICAgIGlmIGNoICE9ICdc
bic6ICAjIDB4MEEKKyAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAorICAg
ICAgICAgICAgICAgICdFeHBlY3RlZCBMRiBidXQgZm91bmQgJXIgd2hpbGUgcmVhZGluZyB2YWx1
ZSAlciBmb3IgaGVhZGVyICcKKyAgICAgICAgICAgICAgICAnbmFtZSAlcicgJSAoY2gsIHZhbHVl
LCBuYW1lKSkKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1JlY2VpdmVkIGFuIGVtcHR5
IGxpbmUnKQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1NlcnZlclwncyBvcGVuaW5nIGhh
bmRzaGFrZSBoZWFkZXJzOiAlcicsIGZpZWxkcykKKworICAgICAgICBfdmFsaWRhdGVfbWFuZGF0
b3J5X2hlYWRlcigKKyAgICAgICAgICAgIGZpZWxkcywKKyAgICAgICAgICAgIGNvbW1vbi5VUEdS
QURFX0hFQURFUiwKKyAgICAgICAgICAgIGNvbW1vbi5XRUJTT0NLRVRfVVBHUkFERV9UWVBFLAor
ICAgICAgICAgICAgRmFsc2UpCisKKyAgICAgICAgX3ZhbGlkYXRlX21hbmRhdG9yeV9oZWFkZXIo
CisgICAgICAgICAgICBmaWVsZHMsCisgICAgICAgICAgICBjb21tb24uQ09OTkVDVElPTl9IRUFE
RVIsCisgICAgICAgICAgICBjb21tb24uVVBHUkFERV9DT05ORUNUSU9OX1RZUEUsCisgICAgICAg
ICAgICBGYWxzZSkKKworICAgICAgICBhY2NlcHQgPSBfZ2V0X21hbmRhdG9yeV9oZWFkZXIoCisg
ICAgICAgICAgICBmaWVsZHMsIGNvbW1vbi5TRUNfV0VCU09DS0VUX0FDQ0VQVF9IRUFERVIpCisK
KyAgICAgICAgIyBWYWxpZGF0ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiaW5hcnlfYWNj
ZXB0ID0gYmFzZTY0LmI2NGRlY29kZShhY2NlcHQpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3Is
IGU6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFcnJvcigKKyAgICAgICAgICAgICAgICAn
SWxsZWdhbCB2YWx1ZSBmb3IgaGVhZGVyICVzOiAlcicgJQorICAgICAgICAgICAgICAgIChjb21t
b24uU0VDX1dFQlNPQ0tFVF9BQ0NFUFRfSEVBREVSLCBhY2NlcHQpKQorCisgICAgICAgIGlmIGxl
bihiaW5hcnlfYWNjZXB0KSAhPSAyMDoKKyAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFr
ZUVycm9yKAorICAgICAgICAgICAgICAgICdEZWNvZGVkIHZhbHVlIG9mICVzIGlzIG5vdCAyMC1i
eXRlIGxvbmcnICUKKyAgICAgICAgICAgICAgICBjb21tb24uU0VDX1dFQlNPQ0tFVF9BQ0NFUFRf
SEVBREVSKQorCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICdSZXNw
b25zZSBmb3IgY2hhbGxlbmdlIDogJXIgKCVzKScsCisgICAgICAgICAgICBhY2NlcHQsIHV0aWwu
aGV4aWZ5KGJpbmFyeV9hY2NlcHQpKQorCisgICAgICAgIGJpbmFyeV9leHBlY3RlZF9hY2NlcHQg
PSB1dGlsLnNoYTFfaGFzaCgKKyAgICAgICAgICAgIHNlbGYuX2tleSArIGNvbW1vbi5XRUJTT0NL
RVRfQUNDRVBUX1VVSUQpLmRpZ2VzdCgpCisgICAgICAgIGV4cGVjdGVkX2FjY2VwdCA9IGJhc2U2
NC5iNjRlbmNvZGUoYmluYXJ5X2V4cGVjdGVkX2FjY2VwdCkKKworICAgICAgICBzZWxmLl9sb2dn
ZXIuZGVidWcoCisgICAgICAgICAgICAnRXhwZWN0ZWQgcmVzcG9uc2UgZm9yIGNoYWxsZW5nZTog
JXIgKCVzKScsCisgICAgICAgICAgICBleHBlY3RlZF9hY2NlcHQsIHV0aWwuaGV4aWZ5KGJpbmFy
eV9leHBlY3RlZF9hY2NlcHQpKQorCisgICAgICAgIGlmIGFjY2VwdCAhPSBleHBlY3RlZF9hY2Nl
cHQ6CisgICAgICAgICAgICByYWlzZSBDbGllbnRIYW5kc2hha2VFcnJvcigKKyAgICAgICAgICAg
ICAgICAnSW52YWxpZCAlcyBoZWFkZXI6ICVyIChleHBlY3RlZDogJXMpJyAlCisgICAgICAgICAg
ICAgICAgKGNvbW1vbi5TRUNfV0VCU09DS0VUX0FDQ0VQVF9IRUFERVIsIGFjY2VwdCwgZXhwZWN0
ZWRfYWNjZXB0KSkKKworICAgICAgICBkZWZsYXRlX3N0cmVhbV9hY2NlcHRlZCA9IEZhbHNlCisg
ICAgICAgIGRlZmxhdGVfZnJhbWVfYWNjZXB0ZWQgPSBGYWxzZQorCisgICAgICAgIGV4dGVuc2lv
bnNfaGVhZGVyID0gZmllbGRzLmdldCgKKyAgICAgICAgICAgIGNvbW1vbi5TRUNfV0VCU09DS0VU
X0VYVEVOU0lPTlNfSEVBREVSLmxvd2VyKCkpCisgICAgICAgIGFjY2VwdGVkX2V4dGVuc2lvbnMg
PSBbXQorICAgICAgICBpZiBleHRlbnNpb25zX2hlYWRlciBpcyBub3QgTm9uZSBhbmQgbGVuKGV4
dGVuc2lvbnNfaGVhZGVyKSAhPSAwOgorICAgICAgICAgICAgYWNjZXB0ZWRfZXh0ZW5zaW9ucyA9
IHBhcnNlX2V4dGVuc2lvbnMoZXh0ZW5zaW9uc19oZWFkZXJbMF0pCisgICAgICAgIGZvciBleHRl
bnNpb24gaW4gYWNjZXB0ZWRfZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIGV4dGVuc2lvbl9uYW1l
ID0gZXh0ZW5zaW9uLm5hbWUoKQorICAgICAgICAgICAgaWYgKGV4dGVuc2lvbl9uYW1lID09IGNv
bW1vbi5ERUZMQVRFX1NUUkVBTV9FWFRFTlNJT04gYW5kCisgICAgICAgICAgICAgICAgbGVuKGV4
dGVuc2lvbi5nZXRfcGFyYW1ldGVyX25hbWVzKCkpID09IDAgYW5kCisgICAgICAgICAgICAgICAg
c2VsZi5fb3B0aW9ucy5kZWZsYXRlX3N0cmVhbSk6CisgICAgICAgICAgICAgICAgZGVmbGF0ZV9z
dHJlYW1fYWNjZXB0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAg
ICAgICAgaWYgKGV4dGVuc2lvbl9uYW1lID09IGNvbW1vbi5ERUZMQVRFX0ZSQU1FX0VYVEVOU0lP
TiBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmRlZmxhdGVfZnJhbWUpOgorICAg
ICAgICAgICAgICAgIGRlZmxhdGVfZnJhbWVfYWNjZXB0ZWQgPSBUcnVlCisgICAgICAgICAgICAg
ICAgcHJvY2Vzc29yID0gRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yKGV4dGVuc2lvbikK
KyAgICAgICAgICAgICAgICB1bnVzZWRfZXh0ZW5zaW9uX3Jlc3BvbnNlID0gcHJvY2Vzc29yLmdl
dF9leHRlbnNpb25fcmVzcG9uc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuZGVm
bGF0ZV9mcmFtZSA9IHByb2Nlc3NvcgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAg
ICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAorICAgICAgICAgICAgICAgICdVbmV4
cGVjdGVkIGV4dGVuc2lvbiAlcicgJSBleHRlbnNpb25fbmFtZSkKKworICAgICAgICBpZiAoc2Vs
Zi5fb3B0aW9ucy5kZWZsYXRlX3N0cmVhbSBhbmQgbm90IGRlZmxhdGVfc3RyZWFtX2FjY2VwdGVk
KToKKyAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAorICAgICAgICAgICAg
ICAgICdSZXF1ZXN0ZWQgJXMsIGJ1dCB0aGUgc2VydmVyIHJlamVjdGVkIGl0JyAlCisgICAgICAg
ICAgICAgICAgY29tbW9uLkRFRkxBVEVfU1RSRUFNX0VYVEVOU0lPTikKKworICAgICAgICBpZiAo
c2VsZi5fb3B0aW9ucy5kZWZsYXRlX2ZyYW1lIGFuZCBub3QgZGVmbGF0ZV9mcmFtZV9hY2NlcHRl
ZCk6CisgICAgICAgICAgICByYWlzZSBDbGllbnRIYW5kc2hha2VFcnJvcigKKyAgICAgICAgICAg
ICAgICAnUmVxdWVzdGVkICVzLCBidXQgdGhlIHNlcnZlciByZWplY3RlZCBpdCcgJQorICAgICAg
ICAgICAgICAgIGNvbW1vbi5ERUZMQVRFX0ZSQU1FX0VYVEVOU0lPTikKKworICAgICAgICAjIFRP
RE8odHlvc2hpbm8pOiBIYW5kbGUgU2VjLVdlYlNvY2tldC1Qcm90b2NvbAorICAgICAgICAjIFRP
RE8odHlvc2hpbm8pOiBIYW5kbGUgQ29va2llLCBldGMuCisKKworY2xhc3MgQ2xpZW50SGFuZHNo
YWtlUHJvY2Vzc29ySHliaTAwKENsaWVudEhhbmRzaGFrZUJhc2UpOgorICAgICIiIldlYlNvY2tl
dCBvcGVuaW5nIGhhbmRzaGFrZSBwcm9jZXNzb3IgZm9yCisgICAgZHJhZnQtaWV0Zi1oeWJpLXRo
ZXdlYnNvY2tldHByb3RvY29sLTAwIChlcXVpdmFsZW50IHRvCisgICAgZHJhZnQtaGl4aWUtdGhl
d2Vic29ja2V0cHJvdG9jb2wtNzYpLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHNvY2tldCwgb3B0aW9ucyk6CisgICAgICAgIHN1cGVyKENsaWVudEhhbmRzaGFrZVByb2Nlc3Nv
ckh5YmkwMCwgc2VsZikuX19pbml0X18oKQorCisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tl
dAorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworCisgICAgICAgIHNlbGYuX2xvZ2dl
ciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgZGVmIGhhbmRzaGFrZShzZWxm
KToKKyAgICAgICAgIiIiUGVyZm9ybXMgb3BlbmluZyBoYW5kc2hha2Ugb24gdGhlIHNwZWNpZmll
ZCBzb2NrZXQuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgQ2xpZW50SGFuZHNoYWtl
RXJyb3I6IGhhbmRzaGFrZSBmYWlsZWQuCisgICAgICAgICIiIgorICAgICAgICAjIDQuMSA1LiBz
ZW5kIHJlcXVlc3QgbGluZS4KKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoX2J1aWxkX21l
dGhvZF9saW5lKHNlbGYuX29wdGlvbnMucmVzb3VyY2UpKQorICAgICAgICAjIDQuMSA2LiBMZXQg
L2ZpZWxkcy8gYmUgYW4gZW1wdHkgbGlzdCBvZiBzdHJpbmdzLgorICAgICAgICBmaWVsZHMgPSBb
XQorICAgICAgICAjIDQuMSA3LiBBZGQgdGhlIHN0cmluZyAiVXBncmFkZTogV2ViU29ja2V0IiB0
byAvZmllbGRzLy4KKyAgICAgICAgZmllbGRzLmFwcGVuZChfVVBHUkFERV9IRUFERVJfSElYSUU3
NSkKKyAgICAgICAgIyA0LjEgOC4gQWRkIHRoZSBzdHJpbmcgIkNvbm5lY3Rpb246IFVwZ3JhZGUi
IHRvIC9maWVsZHMvLgorICAgICAgICBmaWVsZHMuYXBwZW5kKF9DT05ORUNUSU9OX0hFQURFUikK
KyAgICAgICAgIyA0LjEgOS0xMi4gQWRkIEhvc3Q6IGZpZWxkIHRvIC9maWVsZHMvLgorICAgICAg
ICBmaWVsZHMuYXBwZW5kKF9mb3JtYXRfaG9zdF9oZWFkZXIoCisgICAgICAgICAgICBzZWxmLl9v
cHRpb25zLnNlcnZlcl9ob3N0LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9y
dCwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMudXNlX3RscykpCisgICAgICAgICMgNC4xIDEz
LiBBZGQgT3JpZ2luOiBmaWVsZCB0byAvZmllbGRzLy4KKyAgICAgICAgaWYgbm90IHNlbGYuX29w
dGlvbnMub3JpZ2luOgorICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoCisg
ICAgICAgICAgICAgICAgJ1NwZWNpZnkgdGhlIG9yaWdpbiBvZiB0aGUgY29ubmVjdGlvbiBieSAt
LW9yaWdpbiBmbGFnJykKKyAgICAgICAgZmllbGRzLmFwcGVuZChfb3JpZ2luX2hlYWRlcihjb21t
b24uT1JJR0lOX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9vcHRpb25zLm9yaWdpbikpCisgICAgICAgICMgVE9ETzogNC4xIDE0IEFkZCBTZWMtV2Vi
U29ja2V0LVByb3RvY29sOiBmaWVsZCB0byAvZmllbGRzLy4KKyAgICAgICAgIyBUT0RPOiA0LjEg
MTUgQWRkIGNvb2tpZSBoZWFkZXJzIHRvIC9maWVsZHMvLgorCisgICAgICAgICMgNC4xIDE2LTIz
LiBBZGQgU2VjLVdlYlNvY2tldC1LZXk8bj4gdG8gL2ZpZWxkcy8uCisgICAgICAgIHNlbGYuX251
bWJlcjEsIGtleTEgPSBzZWxmLl9nZW5lcmF0ZV9zZWNfd2Vic29ja2V0X2tleSgpCisgICAgICAg
IHNlbGYuX2xvZ2dlci5kZWJ1ZygnTnVtYmVyMTogJWQnLCBzZWxmLl9udW1iZXIxKQorICAgICAg
ICBmaWVsZHMuYXBwZW5kKCclczogJXNcclxuJyAlIChjb21tb24uU0VDX1dFQlNPQ0tFVF9LRVkx
X0hFQURFUiwga2V5MSkpCisgICAgICAgIHNlbGYuX251bWJlcjIsIGtleTIgPSBzZWxmLl9nZW5l
cmF0ZV9zZWNfd2Vic29ja2V0X2tleSgpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnTnVt
YmVyMjogJWQnLCBzZWxmLl9udW1iZXIyKQorICAgICAgICBmaWVsZHMuYXBwZW5kKCclczogJXNc
clxuJyAlIChjb21tb24uU0VDX1dFQlNPQ0tFVF9LRVkyX0hFQURFUiwga2V5MikpCisKKyAgICAg
ICAgZmllbGRzLmFwcGVuZCgnJXM6IDBcclxuJyAlIGNvbW1vbi5TRUNfV0VCU09DS0VUX0RSQUZU
X0hFQURFUikKKworICAgICAgICAjIDQuMSAyNC4gRm9yIGVhY2ggc3RyaW5nIGluIC9maWVsZHMv
LCBpbiBhIHJhbmRvbSBvcmRlcjogc2VuZCB0aGUKKyAgICAgICAgIyBzdHJpbmcsIGVuY29kZWQg
YXMgVVRGLTgsIGZvbGxvd2VkIGJ5IGEgVVRGLTggZW5jb2RlZCBVKzAwMEQgQ0FSUklBR0UKKyAg
ICAgICAgIyBSRVRVUk4gVSswMDBBIExJTkUgRkVFRCBjaGFyYWN0ZXIgcGFpciAoQ1JMRikuCisg
ICAgICAgIHJhbmRvbS5zaHVmZmxlKGZpZWxkcykKKyAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxk
czoKKyAgICAgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kYWxsKGZpZWxkKQorICAgICAgICAjIDQu
MSAyNS4gc2VuZCBhIFVURi04LWVuY29kZWQgVSswMDBEIENBUlJJQUdFIFJFVFVSTiBVKzAwMEEg
TElORSBGRUVECisgICAgICAgICMgY2hhcmFjdGVyIHBhaXIgKENSTEYpLgorICAgICAgICBzZWxm
Ll9zb2NrZXQuc2VuZGFsbCgnXHJcbicpCisgICAgICAgICMgNC4xIDI2LiBsZXQgL2tleTMvIGJl
IGEgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgZWlnaHQgcmFuZG9tIGJ5dGVzIChvcgorICAgICAgICAj
IGVxdWl2YWxlbnRseSwgYSByYW5kb20gNjQgYml0IGludGVnZXIgZW5jb2RlZCBpbiBhIGJpZy1l
bmRpYW4gb3JkZXIpLgorICAgICAgICBzZWxmLl9rZXkzID0gc2VsZi5fZ2VuZXJhdGVfa2V5Mygp
CisgICAgICAgICMgNC4xIDI3LiBzZW5kIC9rZXkzLyB0byB0aGUgc2VydmVyLgorICAgICAgICBz
ZWxmLl9zb2NrZXQuc2VuZGFsbChzZWxmLl9rZXkzKQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVi
dWcoCisgICAgICAgICAgICAnS2V5MzogJXIgKCVzKScsIHNlbGYuX2tleTMsIHV0aWwuaGV4aWZ5
KHNlbGYuX2tleTMpKQorCisgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdTZW50IGhhbmRzaGFr
ZScpCisKKyAgICAgICAgIyA0LjEgMjguIFJlYWQgYnl0ZXMgZnJvbSB0aGUgc2VydmVyIHVudGls
IGVpdGhlciB0aGUgY29ubmVjdGlvbgorICAgICAgICAjIGNsb3Nlcywgb3IgYSAweDBBIGJ5dGUg
aXMgcmVhZC4gbGV0IC9maWVsZC8gYmUgdGhlc2UgYnl0ZXMsIGluY2x1ZGluZworICAgICAgICAj
IHRoZSAweDBBIGJ5dGVzLgorICAgICAgICBmaWVsZCA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6
CisgICAgICAgICAgICBjaCA9IF9yZWNlaXZlX2J5dGVzKHNlbGYuX3NvY2tldCwgMSkKKyAgICAg
ICAgICAgIGZpZWxkICs9IGNoCisgICAgICAgICAgICBpZiBjaCA9PSAnXG4nOgorICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgICMgaWYgL2ZpZWxkLyBpcyBub3QgYXQgbGVhc3Qgc2V2ZW4g
Ynl0ZXMgbG9uZywgb3IgaWYgdGhlIGxhc3QKKyAgICAgICAgIyB0d28gYnl0ZXMgYXJlbid0IDB4
MEQgYW5kIDB4MEEgcmVzcGVjdGl2ZWx5LCBvciBpZiBpdCBkb2VzIG5vdAorICAgICAgICAjIGNv
bnRhaW4gYXQgbGVhc3QgdHdvIDB4MjAgYnl0ZXMsIHRoZW4gZmFpbCB0aGUgV2ViU29ja2V0IGNv
bm5lY3Rpb24KKyAgICAgICAgIyBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgICAgIGlmIGxl
bihmaWVsZCkgPCA3IG9yIG5vdCBmaWVsZC5lbmRzd2l0aCgnXHJcbicpOgorICAgICAgICAgICAg
cmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoJ1dyb25nIHN0YXR1cyBsaW5lOiAlcicgJSBmaWVs
ZCkKKyAgICAgICAgbSA9IHJlLm1hdGNoKCdbXiBdKiAoW14gXSopIC4qJywgZmllbGQpCisgICAg
ICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9y
KAorICAgICAgICAgICAgICAgICdObyBIVFRQIHN0YXR1cyBjb2RlIGZvdW5kIGluIHN0YXR1cyBs
aW5lOiAlcicgJSBmaWVsZCkKKyAgICAgICAgIyA0LjEgMjkuIGxldCAvY29kZS8gYmUgdGhlIHN1
YnN0cmluZyBvZiAvZmllbGQvIHRoYXQgc3RhcnRzIGZyb20gdGhlCisgICAgICAgICMgYnl0ZSBh
ZnRlciB0aGUgZmlyc3QgMHgyMCBieXRlLCBhbmQgZW5kcyB3aXRoIHRoZSBieXRlIGJlZm9yZSB0
aGUKKyAgICAgICAgIyBzZWNvbmQgMHgyMCBieXRlLgorICAgICAgICBjb2RlID0gbS5ncm91cCgx
KQorICAgICAgICAjIDQuMSAzMC4gaWYgL2NvZGUvIGlzIG5vdCB0aHJlZSBieXRlcyBsb25nLCBv
ciBpZiBhbnkgb2YgdGhlIGJ5dGVzIGluCisgICAgICAgICMgL2NvZGUvIGFyZSBub3QgaW4gdGhl
IHJhbmdlIDB4MzAgdG8gMHg5MCwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQKKyAgICAgICAgIyBj
b25uZWN0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAgICAgaWYgbm90IHJlLm1hdGNo
KCdbMC05XVswLTldWzAtOV0nLCBjb2RlKToKKyAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRz
aGFrZUVycm9yKAorICAgICAgICAgICAgICAgICdIVFRQIHN0YXR1cyBjb2RlICVyIGlzIG5vdCB0
aHJlZSBkaWdpdCBpbiBzdGF0dXMgbGluZTogJXInICUKKyAgICAgICAgICAgICAgICAoY29kZSwg
ZmllbGQpKQorICAgICAgICAjIDQuMSAzMS4gaWYgL2NvZGUvLCBpbnRlcnByZXRlZCBhcyBVVEYt
OCwgaXMgIjEwMSIsIHRoZW4gbW92ZSB0byB0aGUKKyAgICAgICAgIyBuZXh0IHN0ZXAuCisgICAg
ICAgIGlmIGNvZGUgIT0gJzEwMSc6CisgICAgICAgICAgICByYWlzZSBDbGllbnRIYW5kc2hha2VF
cnJvcigKKyAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgSFRUUCBzdGF0dXMgY29kZSAxMDEgYnV0
IGZvdW5kICVyIGluIHN0YXR1cyBsaW5lOiAnCisgICAgICAgICAgICAgICAgJyVyJyAlIChjb2Rl
LCBmaWVsZCkpCisgICAgICAgICMgNC4xIDMyLTM5LiByZWFkIGZpZWxkcyBpbnRvIC9maWVsZHMv
CisgICAgICAgIGZpZWxkcyA9IHNlbGYuX3JlYWRfZmllbGRzKCkKKyAgICAgICAgIyA0LjEgNDAu
IF9GaWVsZHMgcHJvY2Vzc2luZ18KKyAgICAgICAgIyByZWFkIGEgYnl0ZSBmcm9tIHNlcnZlcgor
ICAgICAgICBjaCA9IF9yZWNlaXZlX2J5dGVzKHNlbGYuX3NvY2tldCwgMSkKKyAgICAgICAgaWYg
Y2ggIT0gJ1xuJzogICMgMHgwQQorICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJy
b3IoJ0V4cGVjdGVkIExGIGJ1dCBmb3VuZCAlcicgJSBjaCkKKyAgICAgICAgIyA0LjEgNDEuIGNo
ZWNrIC9maWVsZHMvCisgICAgICAgICMgVE9ETyh1a2FpKTogcHJvdG9jb2wKKyAgICAgICAgIyBp
ZiB0aGUgZW50cnkncyBuYW1lIGlzICJ1cGdyYWRlIgorICAgICAgICAjICBpZiB0aGUgdmFsdWUg
aXMgbm90IGV4YWN0bHkgZXF1YWwgdG8gdGhlIHN0cmluZyAiV2ViU29ja2V0IiwKKyAgICAgICAg
IyAgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3Rl
cHMuCisgICAgICAgIF92YWxpZGF0ZV9tYW5kYXRvcnlfaGVhZGVyKAorICAgICAgICAgICAgZmll
bGRzLAorICAgICAgICAgICAgY29tbW9uLlVQR1JBREVfSEVBREVSLAorICAgICAgICAgICAgY29t
bW9uLldFQlNPQ0tFVF9VUEdSQURFX1RZUEVfSElYSUU3NSwKKyAgICAgICAgICAgIFRydWUpCisg
ICAgICAgICMgaWYgdGhlIGVudHJ5J3MgbmFtZSBpcyAiY29ubmVjdGlvbiIKKyAgICAgICAgIyAg
aWYgdGhlIHZhbHVlLCBjb252ZXJ0ZWQgdG8gQVNDSUkgbG93ZXJjYXNlLCBpcyBub3QgZXhhY3Rs
eSBlcXVhbAorICAgICAgICAjICB0byB0aGUgc3RyaW5nICJ1cGdyYWRlIiwgdGhlbiBmYWlsIHRo
ZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQKKyAgICAgICAgIyAgYWJvcnQgdGhlc2Ugc3RlcHMu
CisgICAgICAgIF92YWxpZGF0ZV9tYW5kYXRvcnlfaGVhZGVyKAorICAgICAgICAgICAgZmllbGRz
LAorICAgICAgICAgICAgY29tbW9uLkNPTk5FQ1RJT05fSEVBREVSLAorICAgICAgICAgICAgY29t
bW9uLlVQR1JBREVfQ09OTkVDVElPTl9UWVBFLAorICAgICAgICAgICAgRmFsc2UpCisKKyAgICAg
ICAgb3JpZ2luID0gX2dldF9tYW5kYXRvcnlfaGVhZGVyKAorICAgICAgICAgICAgZmllbGRzLCBj
b21tb24uU0VDX1dFQlNPQ0tFVF9PUklHSU5fSEVBREVSKQorCisgICAgICAgIGxvY2F0aW9uID0g
X2dldF9tYW5kYXRvcnlfaGVhZGVyKAorICAgICAgICAgICAgZmllbGRzLCBjb21tb24uU0VDX1dF
QlNPQ0tFVF9MT0NBVElPTl9IRUFERVIpCisKKyAgICAgICAgIyBUT0RPKHVrYWkpOiBjaGVjayBv
cmlnaW4sIGxvY2F0aW9uLCBjb29raWUsIC4uCisKKyAgICAgICAgIyA0LjEgNDIuIGxldCAvY2hh
bGxlbmdlLyBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiAvbnVtYmVyXzEvLAorICAgICAgICAjIGV4
cHJlc3NlZCBhcyBhIGJpZyBlbmRpYW4gMzIgYml0IGludGVnZXIsIC9udW1iZXJfMi8sIGV4cHJl
c3NlZAorICAgICAgICAjIGFzIGJpZyBlbmRpYW4gMzIgYml0IGludGVnZXIsIGFuZCB0aGUgZWln
aHQgYnl0ZXMgb2YgL2tleV8zLyBpbiB0aGUKKyAgICAgICAgIyBvcmRlciB0aGV5IHdlcmUgc2Vu
dCBvbiB0aGUgd2lyZS4KKyAgICAgICAgY2hhbGxlbmdlID0gc3RydWN0LnBhY2soJyFJJywgc2Vs
Zi5fbnVtYmVyMSkKKyAgICAgICAgY2hhbGxlbmdlICs9IHN0cnVjdC5wYWNrKCchSScsIHNlbGYu
X251bWJlcjIpCisgICAgICAgIGNoYWxsZW5nZSArPSBzZWxmLl9rZXkzCisKKyAgICAgICAgc2Vs
Zi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ0NoYWxsZW5nZTogJXIgKCVzKScsIGNoYWxs
ZW5nZSwgdXRpbC5oZXhpZnkoY2hhbGxlbmdlKSkKKworICAgICAgICAjIDQuMSA0My4gbGV0IC9l
eHBlY3RlZC8gYmUgdGhlIE1ENSBmaW5nZXJwcmludCBvZiAvY2hhbGxlbmdlLyBhcyBhCisgICAg
ICAgICMgYmlnLWVuZGlhbiAxMjggYml0IHN0cmluZy4KKyAgICAgICAgZXhwZWN0ZWQgPSB1dGls
Lm1kNV9oYXNoKGNoYWxsZW5nZSkuZGlnZXN0KCkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVn
KAorICAgICAgICAgICAgJ0V4cGVjdGVkIGNoYWxsZW5nZSByZXNwb25zZTogJXIgKCVzKScsCisg
ICAgICAgICAgICBleHBlY3RlZCwgdXRpbC5oZXhpZnkoZXhwZWN0ZWQpKQorCisgICAgICAgICMg
NC4xIDQ0LiByZWFkIHNpeHRlZW4gYnl0ZXMgZnJvbSB0aGUgc2VydmVyLgorICAgICAgICAjIGxl
dCAvcmVwbHkvIGJlIHRob3NlIGJ5dGVzLgorICAgICAgICByZXBseSA9IF9yZWNlaXZlX2J5dGVz
KHNlbGYuX3NvY2tldCwgMTYpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAg
ICAgICdBY3R1YWwgY2hhbGxlbmdlIHJlc3BvbnNlOiAlciAoJXMpJywgcmVwbHksIHV0aWwuaGV4
aWZ5KHJlcGx5KSkKKworICAgICAgICAjIDQuMSA0NS4gaWYgL3JlcGx5LyBkb2VzIG5vdCBleGFj
dGx5IGVxdWFsIC9leHBlY3RlZC8sIHRoZW4gZmFpbAorICAgICAgICAjIHRoZSBXZWJTb2NrZXQg
Y29ubmVjdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgICAgIGlmIGV4cGVjdGVkICE9
IHJlcGx5OgorICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoCisgICAgICAg
ICAgICAgICAgJ0JhZCBjaGFsbGVuZ2UgcmVzcG9uc2U6ICVyIChleHBlY3RlZCkgIT0gJXIgKGFj
dHVhbCknICUKKyAgICAgICAgICAgICAgICAoZXhwZWN0ZWQsIHJlcGx5KSkKKyAgICAgICAgIyA0
LjEgNDYuIFRoZSAqV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQqLgorCisgICAg
ZGVmIF9nZW5lcmF0ZV9zZWNfd2Vic29ja2V0X2tleShzZWxmKToKKyAgICAgICAgIyA0LjEgMTYu
IGxldCAvc3BhY2VzX24vIGJlIGEgcmFuZG9tIGludGVnZXIgZnJvbSAxIHRvIDEyIGluY2x1c2l2
ZS4KKyAgICAgICAgc3BhY2VzID0gcmFuZG9tLnJhbmRpbnQoMSwgMTIpCisgICAgICAgICMgNC4x
IDE3LiBsZXQgL21heF9uLyBiZSB0aGUgbGFyZ2VzdCBpbnRlZ2VyIG5vdCBncmVhdGVyIHRoYW4K
KyAgICAgICAgIyAgNCwyOTQsOTY3LDI5NSBkaXZpZGVkIGJ5IC9zcGFjZXNfbi8uCisgICAgICAg
IG1heG51bSA9IDQyOTQ5NjcyOTUgLyBzcGFjZXMKKyAgICAgICAgIyA0LjEgMTguIGxldCAvbnVt
YmVyX24vIGJlIGEgcmFuZG9tIGludGVnZXIgZnJvbSAwIHRvIC9tYXhfbi8KKyAgICAgICAgIyBp
bmNsdXNpdmUuCisgICAgICAgIG51bWJlciA9IHJhbmRvbS5yYW5kaW50KDAsIG1heG51bSkKKyAg
ICAgICAgIyA0LjEgMTkuIGxldCAvcHJvZHVjdF9uLyBiZSB0aGUgcmVzdWx0IG9mIG11bHRpcGx5
aW5nIC9udW1iZXJfbi8gYW5kCisgICAgICAgICMgL3NwYWNlc19uLyB0b2dldGhlci4KKyAgICAg
ICAgcHJvZHVjdCA9IG51bWJlciAqIHNwYWNlcworICAgICAgICAjIDQuMSAyMC4gbGV0IC9rZXlf
bi8gYmUgYSBzdHJpbmcgY29uc2lzdGluZyBvZiAvcHJvZHVjdF9uLywgZXhwcmVzc2VkCisgICAg
ICAgICMgaW4gYmFzZSB0ZW4gdXNpbmcgdGhlIG51bWVyYWxzIGluIHRoZSByYW5nZSBVKzAwMzAg
RElHSVQgWkVSTyAoMCkgdG8KKyAgICAgICAgIyBVKzAwMzkgRElHSVQgTklORSAoOSkuCisgICAg
ICAgIGtleSA9IHN0cihwcm9kdWN0KQorICAgICAgICAjIDQuMSAyMS4gaW5zZXJ0IGJldHdlZW4g
b25lIGFuZCB0d2VsdmUgcmFuZG9tIGNoYXJhY3RlcnMgZnJvbSB0aGUKKyAgICAgICAgIyByYW5n
ZSBVKzAwMjEgdG8gVSswMDJGIGFuZCBVKzAwM0EgdG8gVSswMDdFIGludG8gL2tleV9uLyBhdCBy
YW5kb20KKyAgICAgICAgIyBwb3NpdGlvbnMuCisgICAgICAgIGF2YWlsYWJsZV9jaGFycyA9IHJh
bmdlKDB4MjEsIDB4MmYgKyAxKSArIHJhbmdlKDB4M2EsIDB4N2UgKyAxKQorICAgICAgICBuID0g
cmFuZG9tLnJhbmRpbnQoMSwgMTIpCisgICAgICAgIGZvciBfIGluIHhyYW5nZShuKToKKyAgICAg
ICAgICAgIGNoID0gcmFuZG9tLmNob2ljZShhdmFpbGFibGVfY2hhcnMpCisgICAgICAgICAgICBw
b3MgPSByYW5kb20ucmFuZGludCgwLCBsZW4oa2V5KSkKKyAgICAgICAgICAgIGtleSA9IGtleVsw
OnBvc10gKyBjaHIoY2gpICsga2V5W3BvczpdCisgICAgICAgICMgNC4xIDIyLiBpbnNlcnQgL3Nw
YWNlc19uLyBVKzAwMjAgU1BBQ0UgY2hhcmFjdGVycyBpbnRvIC9rZXlfbi8gYXQKKyAgICAgICAg
IyByYW5kb20gcG9zaXRpb25zIG90aGVyIHRoYW4gc3RhcnQgb3IgZW5kIG9mIHRoZSBzdHJpbmcu
CisgICAgICAgIGZvciBfIGluIHhyYW5nZShzcGFjZXMpOgorICAgICAgICAgICAgcG9zID0gcmFu
ZG9tLnJhbmRpbnQoMSwgbGVuKGtleSkgLSAxKQorICAgICAgICAgICAga2V5ID0ga2V5WzA6cG9z
XSArICcgJyArIGtleVtwb3M6XQorICAgICAgICByZXR1cm4gbnVtYmVyLCBrZXkKKworICAgIGRl
ZiBfZ2VuZXJhdGVfa2V5MyhzZWxmKToKKyAgICAgICAgIyA0LjEgMjYuIGxldCAva2V5My8gYmUg
YSBzdHJpbmcgY29uc2lzdGluZyBvZiBlaWdodCByYW5kb20gYnl0ZXMgKG9yCisgICAgICAgICMg
ZXF1aXZhbGVudGx5LCBhIHJhbmRvbSA2NCBiaXQgaW50ZWdlciBlbmNvZGVkIGluIGEgYmlnLWVu
ZGlhbiBvcmRlcikuCisgICAgICAgIHJldHVybiAnJy5qb2luKFtjaHIocmFuZG9tLnJhbmRpbnQo
MCwgMjU1KSkgZm9yIF8gaW4geHJhbmdlKDgpXSkKKworCitjbGFzcyBDbGllbnRIYW5kc2hha2VQ
cm9jZXNzb3JIaXhpZTc1KG9iamVjdCk6CisgICAgIiIiV2ViU29ja2V0IG9wZW5pbmcgaGFuZHNo
YWtlIHByb2Nlc3NvciBmb3IKKyAgICBkcmFmdC1oaXhpZS10aGV3ZWJzb2NrZXRwcm90b2NvbC03
NS4KKyAgICAiIiIKKworICAgIF9FWFBFQ1RFRF9SRVNQT05TRSA9ICgKKyAgICAgICAgJ0hUVFAv
MS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nICsKKyAgICAgICAgX1VQ
R1JBREVfSEVBREVSX0hJWElFNzUgKworICAgICAgICBfQ09OTkVDVElPTl9IRUFERVIpCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgc29ja2V0LCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5fc29j
a2V0ID0gc29ja2V0CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisKKyAgICAgICAg
c2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisKKyAgICBkZWYgX3Nr
aXBfaGVhZGVycyhzZWxmKToKKyAgICAgICAgdGVybWluYXRvciA9ICdcclxuXHJcbicKKyAgICAg
ICAgcG9zID0gMAorICAgICAgICB3aGlsZSBwb3MgPCBsZW4odGVybWluYXRvcik6CisgICAgICAg
ICAgICByZWNlaXZlZCA9IF9yZWNlaXZlX2J5dGVzKHNlbGYuX3NvY2tldCwgMSkKKyAgICAgICAg
ICAgIGlmIHJlY2VpdmVkID09IHRlcm1pbmF0b3JbcG9zXToKKyAgICAgICAgICAgICAgICBwb3Mg
Kz0gMQorICAgICAgICAgICAgZWxpZiByZWNlaXZlZCA9PSB0ZXJtaW5hdG9yWzBdOgorICAgICAg
ICAgICAgICAgIHBvcyA9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcG9z
ID0gMAorCisgICAgZGVmIGhhbmRzaGFrZShzZWxmKToKKyAgICAgICAgIiIiUGVyZm9ybXMgb3Bl
bmluZyBoYW5kc2hha2Ugb24gdGhlIHNwZWNpZmllZCBzb2NrZXQuCisKKyAgICAgICAgUmFpc2Vz
OgorICAgICAgICAgICAgQ2xpZW50SGFuZHNoYWtlRXJyb3I6IGhhbmRzaGFrZSBmYWlsZWQuCisg
ICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kYWxsKF9idWlsZF9tZXRob2Rf
bGluZShzZWxmLl9vcHRpb25zLnJlc291cmNlKSkKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRh
bGwoX1VQR1JBREVfSEVBREVSX0hJWElFNzUpCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kYWxs
KF9DT05ORUNUSU9OX0hFQURFUikKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoX2Zvcm1h
dF9ob3N0X2hlYWRlcigKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVyX2hvc3QsCisg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLnNlcnZlcl9wb3J0LAorICAgICAgICAgICAgc2VsZi5f
b3B0aW9ucy51c2VfdGxzKSkKKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMub3JpZ2luOgor
ICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoCisgICAgICAgICAgICAgICAg
J1NwZWNpZnkgdGhlIG9yaWdpbiBvZiB0aGUgY29ubmVjdGlvbiBieSAtLW9yaWdpbiBmbGFnJykK
KyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoX29yaWdpbl9oZWFkZXIoY29tbW9uLk9SSUdJ
Tl9IRUFERVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX29wdGlvbnMub3JpZ2luKSkKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoJ1xyXG4n
KQorCisgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdTZW50IGhhbmRzaGFrZScpCisKKyAgICAg
ICAgZm9yIGV4cGVjdGVkX2NoYXIgaW4gKAorICAgICAgICAgICAgQ2xpZW50SGFuZHNoYWtlUHJv
Y2Vzc29ySGl4aWU3NS5fRVhQRUNURURfUkVTUE9OU0UpOgorICAgICAgICAgICAgcmVjZWl2ZWQg
PSBfcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2NrZXQsIDEpCisgICAgICAgICAgICBpZiBleHBlY3Rl
ZF9jaGFyICE9IHJlY2VpdmVkOgorICAgICAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFr
ZUVycm9yKCdIYW5kc2hha2UgZmFpbHVyZScpCisgICAgICAgICMgV2UgY3V0IGNvcm5lcnMgYW5k
IHNraXAgb3RoZXIgaGVhZGVycy4KKyAgICAgICAgc2VsZi5fc2tpcF9oZWFkZXJzKCkKKworCitj
bGFzcyBDbGllbnRDb25uZWN0aW9uKG9iamVjdCk6CisgICAgIiIiQSB3cmFwcGVyIGZvciBzb2Nr
ZXQgb2JqZWN0IHRvIHByb3ZpZGUgdGhlIG1wX2Nvbm4gaW50ZXJmYWNlLgorICAgIG1vZF9weXdl
YnNvY2tldCBsaWJyYXJ5IGlzIGRlc2lnbmVkIHRvIGJlIHdvcmtpbmcgb24gQXBhY2hlIG1vZF9w
eXRob24ncworICAgIG1wX2Nvbm4gb2JqZWN0LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHNvY2tldCk6CisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldAorCisgICAgZGVm
IHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChkYXRhKQor
CisgICAgZGVmIHJlYWQoc2VsZiwgbik6CisgICAgICAgIHJldHVybiBzZWxmLl9zb2NrZXQucmVj
dihuKQorCisgICAgZGVmIGdldF9yZW1vdGVfYWRkcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX3NvY2tldC5nZXRwZWVybmFtZSgpCisgICAgcmVtb3RlX2FkZHIgPSBwcm9wZXJ0eShnZXRf
cmVtb3RlX2FkZHIpCisKKworY2xhc3MgQ2xpZW50UmVxdWVzdChvYmplY3QpOgorICAgICIiIkEg
d3JhcHBlciBjbGFzcyBqdXN0IHRvIG1ha2UgaXQgYWJsZSB0byBwYXNzIGEgc29ja2V0IG9iamVj
dCB0bworICAgIGZ1bmN0aW9ucyB0aGF0IGV4cGVjdCBhIG1wX3JlcXVlc3Qgb2JqZWN0LgorICAg
ICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2tldCk6CisgICAgICAgIHNlbGYuX2xv
Z2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX3NvY2tl
dCA9IHNvY2tldAorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBDbGllbnRDb25uZWN0aW9uKHNv
Y2tldCkKKworICAgIGRlZiBfZHJhaW5fcmVjZWl2ZWRfZGF0YShzZWxmKToKKyAgICAgICAgIiIi
RHJhaW5zIHVucmVhZCBkYXRhIGluIHRoZSByZWNlaXZlIGJ1ZmZlci4iIiIKKworICAgICAgICBk
cmFpbmVkX2RhdGEgPSB1dGlsLmRyYWluX3JlY2VpdmVkX2RhdGEoc2VsZi5fc29ja2V0KQorCisg
ICAgICAgIGlmIGRyYWluZWRfZGF0YToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygK
KyAgICAgICAgICAgICAgICAnRHJhaW5lZCBkYXRhIGZvbGxvd2luZyBjbG9zZSBmcmFtZTogJXIn
LCBkcmFpbmVkX2RhdGEpCisKKworY2xhc3MgRWNob0NsaWVudChvYmplY3QpOgorICAgICIiIldl
YlNvY2tldCBlY2hvIGNsaWVudC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25z
KToKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5fc29ja2V0
ID0gTm9uZQorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihz
ZWxmKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIiIiUnVuIHRoZSBjbGllbnQuCisK
KyAgICAgICAgU2hha2UgaGFuZHMgYW5kIHRoZW4gcmVwZWF0IHNlbmRpbmcgbWVzc2FnZSBhbmQg
cmVjZWl2aW5nIGl0cyBlY2hvLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLl9zb2NrZXQg
PSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc2VsZi5fc29ja2V0LnNldHRpbWVvdXQoc2VsZi5f
b3B0aW9ucy5zb2NrZXRfdGltZW91dCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5f
c29ja2V0LmNvbm5lY3QoKHNlbGYuX29wdGlvbnMuc2VydmVyX2hvc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCkpCisgICAgICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLnVzZV90bHM6CisgICAgICAgICAgICAgICAgc2VsZi5fc29j
a2V0ID0gX1RMU1NvY2tldChzZWxmLl9zb2NrZXQpCisKKyAgICAgICAgICAgIHZlcnNpb24gPSBz
ZWxmLl9vcHRpb25zLnByb3RvY29sX3ZlcnNpb24KKworICAgICAgICAgICAgaWYgKHZlcnNpb24g
PT0gX1BST1RPQ09MX1ZFUlNJT05fSFlCSTA4IG9yCisgICAgICAgICAgICAgICAgdmVyc2lvbiA9
PSBfUFJPVE9DT0xfVkVSU0lPTl9IWUJJMTMpOgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRz
aGFrZSA9IENsaWVudEhhbmRzaGFrZVByb2Nlc3NvcigKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fc29ja2V0LCBzZWxmLl9vcHRpb25zKQorICAgICAgICAgICAgZWxpZiB2ZXJzaW9uID09IF9Q
Uk9UT0NPTF9WRVJTSU9OX0hZQkkwMDoKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kc2hha2Ug
PSBDbGllbnRIYW5kc2hha2VQcm9jZXNzb3JIeWJpMDAoCisgICAgICAgICAgICAgICAgICAgIHNl
bGYuX3NvY2tldCwgc2VsZi5fb3B0aW9ucykKKyAgICAgICAgICAgIGVsaWYgdmVyc2lvbiA9PSBf
UFJPVE9DT0xfVkVSU0lPTl9ISVhJRTc1OgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRzaGFr
ZSA9IENsaWVudEhhbmRzaGFrZVByb2Nlc3NvckhpeGllNzUoCisgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3NvY2tldCwgc2VsZi5fb3B0aW9ucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ0ludmFsaWQg
LS1wcm90b2NvbC12ZXJzaW9uIGZsYWc6ICVyJyAlIHZlcnNpb24pCisKKyAgICAgICAgICAgIHNl
bGYuX2hhbmRzaGFrZS5oYW5kc2hha2UoKQorCisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5m
bygnQ29ubmVjdGlvbiBlc3RhYmxpc2hlZCcpCisKKyAgICAgICAgICAgIHJlcXVlc3QgPSBDbGll
bnRSZXF1ZXN0KHNlbGYuX3NvY2tldCkKKworICAgICAgICAgICAgdmVyc2lvbl9tYXAgPSB7Cisg
ICAgICAgICAgICAgICAgX1BST1RPQ09MX1ZFUlNJT05fSFlCSTA4OiBjb21tb24uVkVSU0lPTl9I
WUJJMDgsCisgICAgICAgICAgICAgICAgX1BST1RPQ09MX1ZFUlNJT05fSFlCSTEzOiBjb21tb24u
VkVSU0lPTl9IWUJJMTMsCisgICAgICAgICAgICAgICAgX1BST1RPQ09MX1ZFUlNJT05fSFlCSTAw
OiBjb21tb24uVkVSU0lPTl9IWUJJMDAsCisgICAgICAgICAgICAgICAgX1BST1RPQ09MX1ZFUlNJ
T05fSElYSUU3NTogY29tbW9uLlZFUlNJT05fSElYSUU3NX0KKyAgICAgICAgICAgIHJlcXVlc3Qu
d3NfdmVyc2lvbiA9IHZlcnNpb25fbWFwW3ZlcnNpb25dCisKKyAgICAgICAgICAgIGlmICh2ZXJz
aW9uID09IF9QUk9UT0NPTF9WRVJTSU9OX0hZQkkwOCBvcgorICAgICAgICAgICAgICAgIHZlcnNp
b24gPT0gX1BST1RPQ09MX1ZFUlNJT05fSFlCSTEzKToKKyAgICAgICAgICAgICAgICBzdHJlYW1f
b3B0aW9uID0gU3RyZWFtT3B0aW9ucygpCisgICAgICAgICAgICAgICAgc3RyZWFtX29wdGlvbi5t
YXNrX3NlbmQgPSBUcnVlCisgICAgICAgICAgICAgICAgc3RyZWFtX29wdGlvbi51bm1hc2tfcmVj
ZWl2ZSA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmRlZmxhdGVf
c3RyZWFtOgorICAgICAgICAgICAgICAgICAgICBzdHJlYW1fb3B0aW9uLmRlZmxhdGVfc3RyZWFt
ID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5kZWZsYXRlX2ZyYW1l
IGlzIG5vdCBGYWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29yID0gc2VsZi5fb3B0
aW9ucy5kZWZsYXRlX2ZyYW1lCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nvci5zZXR1cF9z
dHJlYW1fb3B0aW9ucyhzdHJlYW1fb3B0aW9uKQorCisgICAgICAgICAgICAgICAgc2VsZi5fc3Ry
ZWFtID0gU3RyZWFtKHJlcXVlc3QsIHN0cmVhbV9vcHRpb24pCisgICAgICAgICAgICBlbGlmIHZl
cnNpb24gPT0gX1BST1RPQ09MX1ZFUlNJT05fSFlCSTAwOgorICAgICAgICAgICAgICAgIHNlbGYu
X3N0cmVhbSA9IFN0cmVhbUhpeGllNzUocmVxdWVzdCwgVHJ1ZSkKKyAgICAgICAgICAgIGVsaWYg
dmVyc2lvbiA9PSBfUFJPVE9DT0xfVkVSU0lPTl9ISVhJRTc1OgorICAgICAgICAgICAgICAgIHNl
bGYuX3N0cmVhbSA9IFN0cmVhbUhpeGllNzUocmVxdWVzdCkKKworICAgICAgICAgICAgZm9yIGxp
bmUgaW4gc2VsZi5fb3B0aW9ucy5tZXNzYWdlLnNwbGl0KCcsJyk6CisgICAgICAgICAgICAgICAg
c2VsZi5fc3RyZWFtLnNlbmRfbWVzc2FnZShsaW5lKQorICAgICAgICAgICAgICAgIGlmIHNlbGYu
X29wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ1NlbmQ6ICVzJyAl
IGxpbmUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVk
ID0gc2VsZi5fc3RyZWFtLnJlY2VpdmVfbWVzc2FnZSgpCisKKyAgICAgICAgICAgICAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQg
J1JlY3Y6ICVzJyAlIHJlY2VpdmVkCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwg
ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpbnQgJ0Vycm9yOiAlcycgJSBlCisgICAgICAgICAgICAgICAg
ICAgIHJhaXNlCisKKyAgICAgICAgICAgIGlmIHZlcnNpb24gIT0gX1BST1RPQ09MX1ZFUlNJT05f
SElYSUU3NToKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19jbG9zaW5nX2hhbmRzaGFrZSgpCisg
ICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXQuY2xvc2UoKQorCisgICAg
ZGVmIF9kb19jbG9zaW5nX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgIiIiUGVyZm9ybSBjbG9z
aW5nIGhhbmRzaGFrZSB1c2luZyB0aGUgc3BlY2lmaWVkIGNsb3NpbmcgZnJhbWUuIiIiCisKKyAg
ICAgICAgaWYgc2VsZi5fb3B0aW9ucy5tZXNzYWdlLnNwbGl0KCcsJylbLTFdID09IF9HT09EQllF
X01FU1NBR0U6CisgICAgICAgICAgICAjIHJlcXVlc3RlZCBzZXJ2ZXIgaW5pdGlhdGVkIGNsb3Np
bmcgaGFuZHNoYWtlLCBzbworICAgICAgICAgICAgIyBleHBlY3RpbmcgY2xvc2luZyBoYW5kc2hh
a2UgbWVzc2FnZSBmcm9tIHNlcnZlci4KKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdX
YWl0IGZvciBzZXJ2ZXItaW5pdGlhdGVkIGNsb3NpbmcgaGFuZHNoYWtlJykKKyAgICAgICAgICAg
IG1lc3NhZ2UgPSBzZWxmLl9zdHJlYW0ucmVjZWl2ZV9tZXNzYWdlKCkKKyAgICAgICAgICAgIGlm
IG1lc3NhZ2UgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBwcmludCAnUmVjdiBjbG9zZScKKyAg
ICAgICAgICAgICAgICBwcmludCAnU2VuZCBhY2snCisgICAgICAgICAgICAgICAgc2VsZi5fbG9n
Z2VyLmluZm8oCisgICAgICAgICAgICAgICAgICAgICdSZWNlaXZlZCBjbG9zaW5nIGhhbmRzaGFr
ZSBhbmQgc2VudCBhY2snKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBwcmludCAn
U2VuZCBjbG9zZScKKyAgICAgICAgc2VsZi5fc3RyZWFtLmNsb3NlX2Nvbm5lY3Rpb24oKQorICAg
ICAgICBzZWxmLl9sb2dnZXIuaW5mbygnU2VudCBjbG9zaW5nIGhhbmRzaGFrZScpCisgICAgICAg
IHByaW50ICdSZWN2IGFjaycKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ1JlY2VpdmVkIGFj
aycpCisKKworZGVmIG1haW4oKToKKyAgICBzeXMuc3Rkb3V0ID0gY29kZWNzLmdldHdyaXRlcign
dXRmLTgnKShzeXMuc3Rkb3V0KQorCisgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKCkKKyAgICAj
IFdlIGFjY2VwdCAtLWNvbW1hbmRfbGluZV9mbGFnIHN0eWxlIGZsYWdzIHdoaWNoIGlzIHRoZSBz
YW1lIGFzIEdvb2dsZQorICAgICMgZ2ZsYWdzIGluIGFkZGl0aW9uIHRvIGNvbW1vbiAtLWNvbW1h
bmQtbGluZS1mbGFnIHN0eWxlIGZsYWdzLgorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICct
LXNlcnZlci1ob3N0JywgJy0tc2VydmVyX2hvc3QnLAorICAgICAgICAgICAgICAgICAgICAgIGRl
c3Q9J3NlcnZlcl9ob3N0JywgdHlwZT0nc3RyaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PSdsb2NhbGhvc3QnLCBoZWxwPSdzZXJ2ZXIgaG9zdCcpCisgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy1wJywgJy0tc2VydmVyLXBvcnQnLCAnLS1zZXJ2ZXJfcG9ydCcsCisgICAgICAgICAg
ICAgICAgICAgICAgZGVzdD0nc2VydmVyX3BvcnQnLCB0eXBlPSdpbnQnLAorICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ9X1VOREVGSU5FRF9QT1JULCBoZWxwPSdzZXJ2ZXIgcG9ydCcpCisg
ICAgcGFyc2VyLmFkZF9vcHRpb24oJy1vJywgJy0tb3JpZ2luJywgZGVzdD0nb3JpZ2luJywgdHlw
ZT0nc3RyaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsIGhlbHA9J29y
aWdpbicpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1yJywgJy0tcmVzb3VyY2UnLCBkZXN0PSdy
ZXNvdXJjZScsIHR5cGU9J3N0cmluZycsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0n
L2VjaG8nLCBoZWxwPSdyZXNvdXJjZSBwYXRoJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLW0n
LCAnLS1tZXNzYWdlJywgZGVzdD0nbWVzc2FnZScsIHR5cGU9J3N0cmluZycsCisgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0oJ2NvbW1hLXNlcGFyYXRlZCBtZXNzYWdlcyB0byBzZW5kLiAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMgd2lsbCBmb3JjZSBjbG9zZSB0aGUgY29ubmVj
dGlvbiBmcm9tIHNlcnZlci4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR09PREJZ
RV9NRVNTQUdFKSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcsIGRlc3Q9
J3ZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PVRydWUsIGhlbHA9J3N1cHByZXNzIG1lc3NhZ2VzJykKKyAgICBwYXJzZXIuYWRkX29w
dGlvbignLXQnLCAnLS10bHMnLCBkZXN0PSd1c2VfdGxzJywgYWN0aW9uPSdzdG9yZV90cnVlJywK
KyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSd1c2UgVExTICh3c3M6
Ly8pJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLWsnLCAnLS1zb2NrZXQtdGltZW91dCcsICct
LXNvY2tldF90aW1lb3V0JywKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdzb2NrZXRfdGlt
ZW91dCcsIHR5cGU9J2ludCcsIGRlZmF1bHQ9X1RJTUVPVVRfU0VDLAorICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J1RpbWVvdXQoc2VjKSBmb3Igc29ja2V0cycpCisgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy0tZHJhZnQ3NScsIGRlc3Q9J2RyYWZ0NzUnLAorICAgICAgICAgICAgICAgICAgICAg
ICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J3VzZSB0aGUgSGl4aWUgNzUgcHJvdG9jb2wuIFRoaXMgb3ZlcnJpZGVzICcKKyAg
ICAgICAgICAgICAgICAgICAgICAncHJvdG9jb2wtdmVyc2lvbiBmbGFnJykKKyAgICBwYXJzZXIu
YWRkX29wdGlvbignLS1wcm90b2NvbC12ZXJzaW9uJywgJy0tcHJvdG9jb2xfdmVyc2lvbicsCisg
ICAgICAgICAgICAgICAgICAgICAgZGVzdD0ncHJvdG9jb2xfdmVyc2lvbicsCisgICAgICAgICAg
ICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgZGVmYXVsdD1fUFJPVE9DT0xfVkVSU0lPTl9IWUJJ
MTMsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nV2ViU29ja2V0IHByb3RvY29sIHZlcnNp
b24gdG8gdXNlLiBPbmUgb2YgXCcnICsKKyAgICAgICAgICAgICAgICAgICAgICBfUFJPVE9DT0xf
VkVSU0lPTl9IWUJJMTMgKyAnXCcsIFwnJyArCisgICAgICAgICAgICAgICAgICAgICAgX1BST1RP
Q09MX1ZFUlNJT05fSFlCSTA4ICsgJ1wnLCBcJycgKworICAgICAgICAgICAgICAgICAgICAgIF9Q
Uk9UT0NPTF9WRVJTSU9OX0hZQkkwMCArICdcJywgXCcnICsKKyAgICAgICAgICAgICAgICAgICAg
ICBfUFJPVE9DT0xfVkVSU0lPTl9ISVhJRTc1ICsgJ1wnJykKKyAgICBwYXJzZXIuYWRkX29wdGlv
bignLS12ZXJzaW9uLWhlYWRlcicsICctLXZlcnNpb25faGVhZGVyJywKKyAgICAgICAgICAgICAg
ICAgICAgICBkZXN0PSd2ZXJzaW9uX2hlYWRlcicsCisgICAgICAgICAgICAgICAgICAgICAgdHlw
ZT0naW50JywgZGVmYXVsdD0tMSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzcGVjaWZ5
IFNlYy1XZWJTb2NrZXQtVmVyc2lvbiBoZWFkZXIgdmFsdWUnKQorICAgIHBhcnNlci5hZGRfb3B0
aW9uKCctLWRlZmxhdGUtc3RyZWFtJywgJy0tZGVmbGF0ZV9zdHJlYW0nLAorICAgICAgICAgICAg
ICAgICAgICAgIGRlc3Q9J2RlZmxhdGVfc3RyZWFtJywKKyAgICAgICAgICAgICAgICAgICAgICBh
Y3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9J3VzZSBkZWZsYXRlLXN0cmVhbSBleHRlbnNpb24uIFRoaXMgdmFsdWUgd2lsbCBiZSAn
CisgICAgICAgICAgICAgICAgICAgICAgJ2lnbm9yZWQgaWYgdXNlZCB3aXRoIHByb3RvY29sIHZl
cnNpb24gdGhhdCBkb2VzblwndCAnCisgICAgICAgICAgICAgICAgICAgICAgJ3N1cHBvcnQgZGVm
bGF0ZS1zdHJlYW0uJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1kZWZsYXRlLWZyYW1lJywg
Jy0tZGVmbGF0ZV9mcmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nZGVmbGF0ZV9m
cmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVs
dD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd1c2UgZGVmbGF0ZS1mcmFtZSBl
eHRlbnNpb24uIFRoaXMgdmFsdWUgd2lsbCBiZSAnCisgICAgICAgICAgICAgICAgICAgICAgJ2ln
bm9yZWQgaWYgdXNlZCB3aXRoIHByb3RvY29sIHZlcnNpb24gdGhhdCBkb2VzblwndCAnCisgICAg
ICAgICAgICAgICAgICAgICAgJ3N1cHBvcnQgZGVmbGF0ZS1mcmFtZS4nKQorICAgIHBhcnNlci5h
ZGRfb3B0aW9uKCctLWxvZy1sZXZlbCcsICctLWxvZ19sZXZlbCcsIHR5cGU9J2Nob2ljZScsCisg
ICAgICAgICAgICAgICAgICAgICAgZGVzdD0nbG9nX2xldmVsJywgZGVmYXVsdD0nd2FybicsCisg
ICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdl
cnJvcicsICdjcml0aWNhbCddLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0xvZyBsZXZl
bC4nKQorCisgICAgKG9wdGlvbnMsIHVudXNlZF9hcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkK
KworICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5nZXRMZXZlbE5hbWUob3B0
aW9ucy5sb2dfbGV2ZWwudXBwZXIoKSkpCisKKyAgICBpZiBvcHRpb25zLmRyYWZ0NzU6CisgICAg
ICAgIG9wdGlvbnMucHJvdG9jb2xfdmVyc2lvbiA9IF9QUk9UT0NPTF9WRVJTSU9OX0hJWElFNzUK
KworICAgICMgRGVmYXVsdCBwb3J0IG51bWJlciBkZXBlbmRzIG9uIHdoZXRoZXIgVExTIGlzIHVz
ZWQuCisgICAgaWYgb3B0aW9ucy5zZXJ2ZXJfcG9ydCA9PSBfVU5ERUZJTkVEX1BPUlQ6CisgICAg
ICAgIGlmIG9wdGlvbnMudXNlX3RsczoKKyAgICAgICAgICAgIG9wdGlvbnMuc2VydmVyX3BvcnQg
PSBjb21tb24uREVGQVVMVF9XRUJfU09DS0VUX1NFQ1VSRV9QT1JUCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBvcHRpb25zLnNlcnZlcl9wb3J0ID0gY29tbW9uLkRFRkFVTFRfV0VCX1NPQ0tF
VF9QT1JUCisKKyAgICAjIG9wdHBhcnNlIGRvZXNuJ3Qgc2VlbSB0byBoYW5kbGUgbm9uLWFzY2lp
IGRlZmF1bHQgdmFsdWVzLgorICAgICMgU2V0IGRlZmF1bHQgbWVzc2FnZSBoZXJlLgorICAgIGlm
IG5vdCBvcHRpb25zLm1lc3NhZ2U6CisgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IHUnSGVsbG8s
XHU2NWU1XHU2NzJjJyAgICMgIkphcGFuIiBpbiBKYXBhbmVzZQorCisgICAgRWNob0NsaWVudChv
cHRpb25zKS5ydW4oKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigp
CisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvZXhhbXBsZS9lY2hvX3dzaC5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fd3NoLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM4NjQ2YzMyY2ViNTE1ZjE1ZGQ1NzI2MjI2ODljNzllZTYxZTU0M2YKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJz
b2NrZXQvZXhhbXBsZS9lY2hvX3dzaC5weQpAQCAtMCwwICsxLDU0IEBACisjIENvcHlyaWdodCAy
MDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworCitfR09PREJZRV9NRVNTQUdFID0gdSdHb29kYnllJworCisKK2RlZiB3ZWJfc29ja2V0
X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICAjIFRoaXMgZXhhbXBsZSBoYW5kbGVy
IGFjY2VwdHMgYW55IHJlcXVlc3QuIFNlZSBvcmlnaW5fY2hlY2tfd3NoLnB5IGZvciBob3cKKyAg
ICAjIHRvIHJlamVjdCBhY2Nlc3MgZnJvbSB1bnRydXN0ZWQgc2NyaXB0cyBiYXNlZCBvbiBvcmln
aW4gdmFsdWUuCisKKyAgICBwYXNzICAjIEFsd2F5cyBhY2NlcHQuCisKKworZGVmIHdlYl9zb2Nr
ZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBsaW5l
ID0gcmVxdWVzdC53c19zdHJlYW0ucmVjZWl2ZV9tZXNzYWdlKCkKKyAgICAgICAgaWYgbGluZSBp
cyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwg
dW5pY29kZSk6CisgICAgICAgICAgICByZXF1ZXN0LndzX3N0cmVhbS5zZW5kX21lc3NhZ2UobGlu
ZSwgYmluYXJ5PUZhbHNlKQorICAgICAgICAgICAgaWYgbGluZSA9PSBfR09PREJZRV9NRVNTQUdF
OgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVx
dWVzdC53c19zdHJlYW0uc2VuZF9tZXNzYWdlKGxpbmUsIGJpbmFyeT1UcnVlKQorCisKKyMgdmk6
c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L3B5d2Vic29ja2V0L2V4YW1wbGUvaGFuZGxlcl9tYXAudHh0IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L2V4YW1wbGUvaGFuZGxlcl9tYXAudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIxYzRjMDlhYTAwOTFkOGJhZjI5MDg5NTk5MDU4Njc4NDJhZWI4NjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2Nr
ZXQvZXhhbXBsZS9oYW5kbGVyX21hcC50eHQKQEAgLTAsMCArMSwxMSBAQAorIyB3ZWJzb2NrZXQg
aGFuZGxlciBtYXAgZmlsZSwgdXNlZCBieSBzdGFuZGFsb25lLnB5IC1tIG9wdGlvbi4KKyMgQSBs
aW5lIHN0YXJ0aW5nIHdpdGggJyMnIGlzIGEgY29tbWVudCBsaW5lLgorIyBFYWNoIGxpbmUgY29u
c2lzdHMgb2YgJ2FsaWFzX3Jlc291cmNlX3BhdGgnIGFuZCAnZXhpc3RpbmdfcmVzb3VyY2VfcGF0
aCcKKyMgc2VwYXJhdGVkIGJ5IHNwYWNlcy4KKyMgQWxpYXNpbmcgaXMgcHJvY2Vzc2VkIGZyb20g
dGhlIHRvcCB0byB0aGUgYm90dG9tIG9mIHRoZSBsaW5lLCBhbmQKKyMgJ2V4aXN0aW5nX3Jlc291
cmNlX3BhdGgnIG11c3QgZXhpc3QgYmVmb3JlIGl0IGlzIGFsaWFzZWQuCisjIEZvciBleGFtcGxl
LAorIyAgLyAvZWNobworIyBtZWFucyB0aGF0IGEgcmVxdWVzdCB0byAnLycgd2lsbCBiZSBoYW5k
bGVkIGJ5IGhhbmRsZXJzIGZvciAnL2VjaG8nLgorLyAvZWNobworCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvZXhhbXBsZS9vcmlnaW5f
Y2hlY2tfd3NoLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29j
a2V0L2V4YW1wbGUvb3JpZ2luX2NoZWNrX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDU3NjdhYjkzMmZi
NTgyODI0YWFmMWE1N2Q5MjQ5YzMwNGJkNTFlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L2V4YW1wbGUvb3JpZ2luX2NoZWNr
X3dzaC5weQpAQCAtMCwwICsxLDQ0IEBACisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgor
IyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBUaGlzIGV4YW1w
bGUgaXMgZGVyaXZlZCBmcm9tIHRlc3QvdGVzdGRhdGEvaGFuZGxlcnMvb3JpZ2luX2NoZWNrX3dz
aC5weS4KKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6Cisg
ICAgaWYgcmVxdWVzdC53c19vcmlnaW4gPT0gJ2h0dHA6Ly9leGFtcGxlLmNvbSc6CisgICAgICAg
IHJldHVybgorICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWNjZXB0YWJsZSBvcmlnaW46ICVyJyAl
IHJlcXVlc3Qud3Nfb3JpZ2luKQorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVx
dWVzdCk6CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdvcmlnaW5fY2hlY2tfd3NoLnB5
IGlzIGNhbGxlZCBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChy
ZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00
IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9w
eXdlYnNvY2tldC9leGFtcGxlL3B5d2Vic29ja2V0LmNvbmYgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvZXhhbXBsZS9weXdlYnNvY2tldC5jb25mCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjMzNWQxMzBhNWM4NGY2OWRlNGY4MWQzNThmYjJjZGI1YmRlNGFmNmQKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQv
ZXhhbXBsZS9weXdlYnNvY2tldC5jb25mCkBAIC0wLDAgKzEsNDIgQEAKKyMgQ29weXJpZ2h0IDIw
MTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjCisjIFNhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGFwYWNoZTIKKyMKK0xvZ0xl
dmVsIGRlYnVnCis8SWZNb2R1bGUgcHl0aG9uX21vZHVsZT4KKyAgUHl0aG9uUGF0aCAic3lzLnBh
dGgrWycvbW9kX3B5d2Vic29ja2V0J10iCisgIFB5dGhvbk9wdGlvbiBtb2RfcHl3ZWJzb2NrZXQu
aGFuZGxlcl9yb290IC92YXIvd3d3CisgIFB5dGhvbk9wdGlvbiBtb2RfcHl3ZWJzb2NrZXQuaGFu
ZGxlcl9zY2FuIC92YXIvd3d3L3dzCisgICNQeXRob25PcHRpb24gbW9kX3B5d2Vic29ja2V0LmFs
bG93X2RyYWZ0NzUgT24KKyAgPExvY2F0aW9uIC93cz4KKyAgICBQeXRob25IZWFkZXJQYXJzZXJI
YW5kbGVyIG1vZF9weXdlYnNvY2tldC5oZWFkZXJwYXJzZXJoYW5kbGVyCisgIDwvTG9jYXRpb24+
Cis8L0lmTW9kdWxlPgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9fX2luaXRfXy5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX19pbml0
X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzE1NGRhNGExNDBlOTI2NTc1NzdjMmNkMGEzMjYzOTQzMDMyOWVm
NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9w
eXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHkKQEAgLTAsMCArMSwxODQgQEAK
KyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIldlYlNvY2tldCBleHRlbnNpb24gZm9yIEFwYWNoZSBI
VFRQIFNlcnZlci4KKworbW9kX3B5d2Vic29ja2V0IGlzIGEgV2ViU29ja2V0IGV4dGVuc2lvbiBm
b3IgQXBhY2hlIEhUVFAgU2VydmVyCitpbnRlbmRlZCBmb3IgdGVzdGluZyBvciBleHBlcmltZW50
YWwgcHVycG9zZXMuIG1vZF9weXRob24gaXMgcmVxdWlyZWQuCisKKworSW5zdGFsbGF0aW9uOgor
CiswLiBQcmVwYXJlIGFuIEFwYWNoZSBIVFRQIFNlcnZlciBmb3Igd2hpY2ggbW9kX3B5dGhvbiBp
cyBlbmFibGVkLgorCisxLiBTcGVjaWZ5IHRoZSBmb2xsb3dpbmcgQXBhY2hlIEhUVFAgU2VydmVy
IGRpcmVjdGl2ZXMgdG8gc3VpdCB5b3VyCisgICBjb25maWd1cmF0aW9uLgorCisgICBJZiBtb2Rf
cHl3ZWJzb2NrZXQgaXMgbm90IGluIHRoZSBQeXRob24gcGF0aCwgc3BlY2lmeSB0aGUgZm9sbG93
aW5nLgorICAgPHdlYnNvY2tfbGliPiBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIG1vZF9weXdlYnNv
Y2tldCBpcyBpbnN0YWxsZWQuCisKKyAgICAgICBQeXRob25QYXRoICJzeXMucGF0aCtbJzx3ZWJz
b2NrX2xpYj4nXSIKKworICAgQWx3YXlzIHNwZWNpZnkgdGhlIGZvbGxvd2luZy4gPHdlYnNvY2tf
aGFuZGxlcnM+IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUKKyAgIHVzZXItd3JpdHRlbiBXZWJTb2Nr
ZXQgaGFuZGxlcnMgYXJlIHBsYWNlZC4KKworICAgICAgIFB5dGhvbk9wdGlvbiBtb2RfcHl3ZWJz
b2NrZXQuaGFuZGxlcl9yb290IDx3ZWJzb2NrX2hhbmRsZXJzPgorICAgICAgIFB5dGhvbkhlYWRl
clBhcnNlckhhbmRsZXIgbW9kX3B5d2Vic29ja2V0LmhlYWRlcnBhcnNlcmhhbmRsZXIKKworICAg
VG8gbGltaXQgdGhlIHNlYXJjaCBmb3IgV2ViU29ja2V0IGhhbmRsZXJzIHRvIGEgZGlyZWN0b3J5
IDxzY2FuX2Rpcj4KKyAgIHVuZGVyIDx3ZWJzb2NrX2hhbmRsZXJzPiwgY29uZmlndXJlIGFzIGZv
bGxvd3M6CisKKyAgICAgICBQeXRob25PcHRpb24gbW9kX3B5d2Vic29ja2V0LmhhbmRsZXJfc2Nh
biA8c2Nhbl9kaXI+CisKKyAgIDxzY2FuX2Rpcj4gaXMgdXNlZnVsIGluIHNhdmluZyBzY2FuIHRp
bWUgd2hlbiA8d2Vic29ja19oYW5kbGVycz4KKyAgIGNvbnRhaW5zIG1hbnkgbm9uLVdlYlNvY2tl
dCBoYW5kbGVyIGZpbGVzLgorCisgICBJZiB5b3Ugd2FudCB0byBzdXBwb3J0IG9sZCBoYW5kc2hh
a2UgYmFzZWQgb24KKyAgIGRyYWZ0LWhpeGllLXRoZXdlYnNvY2tldHByb3RvY29sLTc1OgorCisg
ICAgICAgUHl0aG9uT3B0aW9uIG1vZF9weXdlYnNvY2tldC5hbGxvd19kcmFmdDc1IE9uCisKKyAg
IElmIHlvdSB3YW50IHRvIGFsbG93IGhhbmRsZXJzIHdob3NlIGNhbm9uaWNhbCBwYXRoIGlzIG5v
dCB1bmRlciB0aGUgcm9vdAorICAgZGlyZWN0b3J5IChpLmUuIHN5bWJvbGljIGxpbmsgaXMgaW4g
cm9vdCBkaXJlY3RvcnkgYnV0IGl0cyB0YXJnZXQgaXMgbm90KSwKKyAgIGNvbmZpZ3VyZSBhcyBm
b2xsb3dzOgorCisgICAgICAgUHl0aG9uT3B0aW9uIG1vZF9weXdlYnNvY2tldC5hbGxvd19oYW5k
bGVyc19vdXRzaWRlX3Jvb3RfZGlyIE9uCisKKyAgIEV4YW1wbGUgc25pcHBldCBvZiBodHRwZC5j
b25mOgorICAgKG1vZF9weXdlYnNvY2tldCBpcyBpbiAvd2Vic29ja19saWIsIFdlYlNvY2tldCBo
YW5kbGVycyBhcmUgaW4KKyAgIC93ZWJzb2NrX2hhbmRsZXJzLCBwb3J0IGlzIDgwIGZvciB3cywg
NDQzIGZvciB3c3MuKQorCisgICAgICAgPElmTW9kdWxlIHB5dGhvbl9tb2R1bGU+CisgICAgICAg
ICBQeXRob25QYXRoICJzeXMucGF0aCtbJy93ZWJzb2NrX2xpYiddIgorICAgICAgICAgUHl0aG9u
T3B0aW9uIG1vZF9weXdlYnNvY2tldC5oYW5kbGVyX3Jvb3QgL3dlYnNvY2tfaGFuZGxlcnMKKyAg
ICAgICAgIFB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIgbW9kX3B5d2Vic29ja2V0LmhlYWRlcnBh
cnNlcmhhbmRsZXIKKyAgICAgICA8L0lmTW9kdWxlPgorCisyLiBUdW5lIEFwYWNoZSBwYXJhbWV0
ZXJzIGZvciBzZXJ2aW5nIFdlYlNvY2tldC4gV2UnZCBsaWtlIHRvIG5vdGUgdGhhdCBhdAorICAg
bGVhc3QgVGltZU91dCBkaXJlY3RpdmUgZnJvbSBjb3JlIGZlYXR1cmVzIGFuZCBSZXF1ZXN0UmVh
ZFRpbWVvdXQKKyAgIGRpcmVjdGl2ZSBmcm9tIG1vZF9yZXF0aW1lb3V0IHNob3VsZCBiZSBtb2Rp
ZmllZCBub3QgdG8ga2lsbCBjb25uZWN0aW9ucworICAgaW4gb25seSBhIGZldyBzZWNvbmRzIG9m
IGlkbGUgdGltZS4KKworMy4gVmVyaWZ5IGluc3RhbGxhdGlvbi4gWW91IGNhbiB1c2UgZXhhbXBs
ZS9jb25zb2xlLmh0bWwgdG8gcG9rZSB0aGUgc2VydmVyLgorCisKK1dyaXRpbmcgV2ViU29ja2V0
IGhhbmRsZXJzOgorCitXaGVuIGEgV2ViU29ja2V0IHJlcXVlc3QgY29tZXMgaW4sIHRoZSByZXNv
dXJjZSBuYW1lCitzcGVjaWZpZWQgaW4gdGhlIGhhbmRzaGFrZSBpcyBjb25zaWRlcmVkIGFzIGlm
IGl0IGlzIGEgZmlsZSBwYXRoIHVuZGVyCis8d2Vic29ja19oYW5kbGVycz4gYW5kIHRoZSBoYW5k
bGVyIGRlZmluZWQgaW4KKzx3ZWJzb2NrX2hhbmRsZXJzPi88cmVzb3VyY2VfbmFtZT5fd3NoLnB5
IGlzIGludm9rZWQuCisKK0ZvciBleGFtcGxlLCBpZiB0aGUgcmVzb3VyY2UgbmFtZSBpcyAvZXhh
bXBsZS9jaGF0LCB0aGUgaGFuZGxlciBkZWZpbmVkIGluCis8d2Vic29ja19oYW5kbGVycz4vZXhh
bXBsZS9jaGF0X3dzaC5weSBpcyBpbnZva2VkLgorCitBIFdlYlNvY2tldCBoYW5kbGVyIGlzIGNv
bXBvc2VkIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgZnVuY3Rpb25zOgorCisgICAgd2ViX3NvY2tl
dF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCkKKyAgICB3ZWJfc29ja2V0X3RyYW5zZmVyX2Rh
dGEocmVxdWVzdCkKKyAgICB3ZWJfc29ja2V0X3Bhc3NpdmVfY2xvc2luZ19oYW5kc2hha2UocmVx
dWVzdCkKKword2hlcmU6CisgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorCit3ZWJf
c29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSBpcyBjYWxsZWQgZHVyaW5nIHRoZSBoYW5kc2hha2Ug
YWZ0ZXIgdGhlCitoZWFkZXJzIGFyZSBzdWNjZXNzZnVsbHkgcGFyc2VkIGFuZCBXZWJTb2NrZXQg
cHJvcGVydGllcyAod3NfbG9jYXRpb24sCit3c19vcmlnaW4sIGFuZCB3c19yZXNvdXJjZSkgYXJl
IGFkZGVkIHRvIHJlcXVlc3QuIEEgaGFuZGxlcgorY2FuIHJlamVjdCB0aGUgcmVxdWVzdCBieSBy
YWlzaW5nIGFuIGV4Y2VwdGlvbi4KKworQSByZXF1ZXN0IG9iamVjdCBoYXMgdGhlIGZvbGxvd2lu
ZyBwcm9wZXJ0aWVzIHRoYXQgeW91IGNhbiB1c2UgZHVyaW5nIHRoZQorZXh0cmEgaGFuZHNoYWtl
ICh3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSk6CistIHdzX3Jlc291cmNlCistIHdzX29y
aWdpbgorLSB3c192ZXJzaW9uCistIHdzX2xvY2F0aW9uIChIaXhpZSA3NSBhbmQgSHlCaSAwMCBv
bmx5KQorLSB3c19leHRlbnNpb25zIChIeWJpIDA2IGFuZCBsYXRlcikKKy0gd3NfZGVmbGF0ZSAo
SHlCaSAwNiBhbmQgbGF0ZXIpCistIHdzX3Byb3RvY29sCistIHdzX3JlcXVlc3RlZF9wcm90b2Nv
bHMgKEh5QmkgMDYgYW5kIGxhdGVyKQorCitUaGUgbGFzdCB0d28gYXJlIGEgYml0IHRyaWNreS4K
KworRm9yIEh5QmkgMDYgYW5kIGxhdGVyLCB3c19wcm90b2NvbCBpcyBhbHdheXMgc2V0IHRvIE5v
bmUgd2hlbgord2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UgaXMgY2FsbGVkLiBJZiB3c19y
ZXF1ZXN0ZWRfcHJvdG9jb2xzIGlzIG5vdAorTm9uZSwgeW91IG11c3QgY2hvb3NlIG9uZSBzdWJw
cm90b2NvbCBmcm9tIHRoaXMgbGlzdCBhbmQgc2V0IGl0IHRvCit3c19wcm90b2NvbC4KKworRm9y
IEhpeGllIDc1IGFuZCBIeUJpIDAwLCB3aGVuIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtl
IGlzIGNhbGxlZCwKK3dzX3Byb3RvY29sIGlzIHNldCB0byB0aGUgdmFsdWUgZ2l2ZW4gYnkgdGhl
IGNsaWVudCBpbgorU2VjLVdlYlNvY2tldC1Qcm90b2NvbCAoV2ViU29ja2V0LVByb3RvY29sIGZv
ciBIaXhpZSA3NSkgaGVhZGVyIG9yIE5vbmUgaWYKK3N1Y2ggaGVhZGVyIHdhcyBub3QgZm91bmQg
aW4gdGhlIG9wZW5pbmcgaGFuZHNoYWtlIHJlcXVlc3QuIEZpbmlzaCBleHRyYQoraGFuZHNoYWtl
IHdpdGggd3NfcHJvdG9jb2wgdW50b3VjaGVkIHRvIGFjY2VwdCB0aGUgcmVxdWVzdCBzdWJwcm90
b2NvbC4KK1RoZW4sIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgKG9yIFdlYlNvY2tldC1Qcm90b2Nv
bCkgaGVhZGVyIHdpbGwgYmUgc2VudCB0bwordGhlIGNsaWVudCBpbiByZXNwb25zZSB3aXRoIHRo
ZSBzYW1lIHZhbHVlIGFzIHJlcXVlc3RlZC4gUmFpc2UgYW4gZXhjZXB0aW9uCitpbiB3ZWJfc29j
a2V0X2RvX2V4dHJhX2hhbmRzaGFrZSB0byByZWplY3QgdGhlIHJlcXVlc3RlZCBzdWJwcm90b2Nv
bC4KKword2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhIGlzIGNhbGxlZCBhZnRlciB0aGUgaGFuZHNo
YWtlIGNvbXBsZXRlZAorc3VjY2Vzc2Z1bGx5LiBBIGhhbmRsZXIgY2FuIHJlY2VpdmUvc2VuZCBt
ZXNzYWdlcyBmcm9tL3RvIHRoZSBjbGllbnQKK3VzaW5nIHJlcXVlc3QuIG1vZF9weXdlYnNvY2tl
dC5tc2d1dGlsIG1vZHVsZSBwcm92aWRlcyB1dGlsaXRpZXMKK2ZvciBkYXRhIHRyYW5zZmVyLgor
CitZb3UgY2FuIHJlY2VpdmUgYSBtZXNzYWdlIGJ5IHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50Lgor
CisgICAgbWVzc2FnZSA9IHJlcXVlc3Qud3Nfc3RyZWFtLnJlY2VpdmVfbWVzc2FnZSgpCisKK1Ro
aXMgY2FsbCBibG9ja3MgdW50aWwgYW55IGNvbXBsZXRlIHRleHQgZnJhbWUgYXJyaXZlcywgYW5k
IHRoZSBwYXlsb2FkIGRhdGEKK29mIHRoZSBpbmNvbWluZyBmcmFtZSB3aWxsIGJlIHN0b3JlZCBp
bnRvIG1lc3NhZ2UuIFdoZW4geW91J3JlIHVzaW5nIElFVEYKK0h5QmkgMDAgb3IgbGF0ZXIgcHJv
dG9jb2wsIHJlY2VpdmVfbWVzc2FnZSgpIHdpbGwgcmV0dXJuIE5vbmUgb24gcmVjZWl2aW5nCitj
bGllbnQtaW5pdGlhdGVkIGNsb3NpbmcgaGFuZHNoYWtlLiBXaGVuIGFueSBlcnJvciBvY2N1cnMs
IHJlY2VpdmVfbWVzc2FnZSgpCit3aWxsIHJhaXNlIHNvbWUgZXhjZXB0aW9uLgorCitZb3UgY2Fu
IHNlbmQgYSBtZXNzYWdlIGJ5IHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50LgorCisgICAgcmVxdWVz
dC53c19zdHJlYW0uc2VuZF9tZXNzYWdlKG1lc3NhZ2UpCisKK0V4ZWN1dGluZyB0aGUgZm9sbG93
aW5nIHN0YXRlbWVudCBvciBqdXN0IHJldHVybi1pbmcgZnJvbQord2ViX3NvY2tldF90cmFuc2Zl
cl9kYXRhIGNhdXNlIGNvbm5lY3Rpb24gY2xvc2UuCisKKyAgICByZXF1ZXN0LndzX3N0cmVhbS5j
bG9zZV9jb25uZWN0aW9uKCkKKworV2hlbiB5b3UncmUgdXNpbmcgSUVURiBIeUJpIDAwIG9yIGxh
dGVyIHByb3RvY29sLCBjbG9zZV9jb25uZWN0aW9uIHdpbGwgd2FpdAorZm9yIGNsb3NpbmcgaGFu
ZHNoYWtlIGFja25vd2xlZGdlbWVudCBjb21pbmcgZnJvbSB0aGUgY2xpZW50LiBXaGVuIGl0Citj
b3VsZG4ndCByZWNlaXZlIGEgdmFsaWQgYWNrbm93bGVkZ2VtZW50LCByYWlzZXMgYW4gZXhjZXB0
aW9uLgorCit3ZWJfc29ja2V0X3Bhc3NpdmVfY2xvc2luZ19oYW5kc2hha2UgaXMgY2FsbGVkIGFm
dGVyIHRoZSBzZXJ2ZXIgcmVjZWl2ZXMKK2luY29taW5nIGNsb3NpbmcgZnJhbWUgZnJvbSB0aGUg
Y2xpZW50IHBlZXIgaW1tZWRpYXRlbHkuIFlvdSBjYW4gc3BlY2lmeQorY29kZSBhbmQgcmVhc29u
IGJ5IHJldHVybiB2YWx1ZXMuIFRoZXkgYXJlIHNlbnQgYXMgYSBvdXRnb2luZyBjbG9zaW5nIGZy
YW1lCitmcm9tIHRoZSBzZXJ2ZXIuIEEgcmVxdWVzdCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcg
cHJvcGVydGllcyB0aGF0IHlvdSBjYW4KK3VzZSBpbiB3ZWJfc29ja2V0X3Bhc3NpdmVfY2xvc2lu
Z19oYW5kc2hha2UuCistIHdzX2Nsb3NlX2NvZGUKKy0gd3NfY2xvc2VfcmVhc29uCisKK0EgV2Vi
U29ja2V0IGhhbmRsZXIgbXVzdCBiZSB0aHJlYWQtc2FmZSBpZiB0aGUgc2VydmVyIChBcGFjaGUg
b3IKK3N0YW5kYWxvbmUucHkpIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRocmVhZHMuCisiIiIKKwor
CisjIHZpOnN0cz00IHN3PTQgZXQgdHc9NzIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9iYXNl
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9w
eXdlYnNvY2tldC9fc3RyZWFtX2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjBmYjMzZDJjNWMwNTVmYjY5
ZWVkYmNkNzY1NjgyNWJiZGZiZmVhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9i
YXNlLnB5CkBAIC0wLDAgKzEsMTY1IEBACisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgor
IyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJCYXNlIHN0
cmVhbSBjbGFzcy4KKyIiIgorCisKKyMgTm90ZTogcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlL3Jl
YWQgYXJlIHVzZWQgaW4gdGhpcyBtb2R1bGUsIGV2ZW4gdGhvdWdoCisjIG1vZF9weXRob24gZG9j
dW1lbnQgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBjb25uZWN0aW9uCisj
IGhhbmRsZXJzLiBVbmZvcnR1bmF0ZWx5LCB3ZSBoYXZlIG5vIG90aGVyIG9wdGlvbnMuIEZvciBl
eGFtcGxlLAorIyByZXF1ZXN0LndyaXRlL3JlYWQgYXJlIG5vdCBzdWl0YWJsZSBiZWNhdXNlIHRo
ZXkgZG9uJ3QgYWxsb3cgZGlyZWN0IHJhdyBieXRlcworIyB3cml0aW5nL3JlYWRpbmcuCisKKwor
ZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IHV0aWwKKworCisjIEV4Y2VwdGlvbnMKKworCitj
bGFzcyBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIlRo
aXMgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIHdoZW4gYSBjb25uZWN0aW9uIGlzIHRlcm1pbmF0
ZWQKKyAgICB1bmV4cGVjdGVkbHkuCisgICAgIiIiCisKKyAgICBwYXNzCisKKworY2xhc3MgSW52
YWxpZEZyYW1lRXhjZXB0aW9uKENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uKToKKyAgICAi
IiJUaGlzIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCB3aGVuIHdlIHJlY2VpdmVkIGFuIGludmFs
aWQgZnJhbWUgd2UKKyAgICBjYW5ub3QgcGFyc2UuCisgICAgIiIiCisKKyAgICBwYXNzCisKKwor
Y2xhc3MgQmFkT3BlcmF0aW9uRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiVGhpcyBleGNl
cHRpb24gd2lsbCBiZSByYWlzZWQgd2hlbiBzZW5kX21lc3NhZ2UoKSBpcyBjYWxsZWQgb24KKyAg
ICBzZXJ2ZXItdGVybWluYXRlZCBjb25uZWN0aW9uIG9yIHJlY2VpdmVfbWVzc2FnZSgpIGlzIGNh
bGxlZCBvbgorICAgIGNsaWVudC10ZXJtaW5hdGVkIGNvbm5lY3Rpb24uCisgICAgIiIiCisKKyAg
ICBwYXNzCisKKworY2xhc3MgVW5zdXBwb3J0ZWRGcmFtZUV4Y2VwdGlvbihFeGNlcHRpb24pOgor
ICAgICIiIlRoaXMgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIHdoZW4gd2UgcmVjZWl2ZSBhIGZy
YW1lIHdpdGggZmxhZywgb3Bjb2RlCisgICAgd2UgY2Fubm90IGhhbmRsZS4gSGFuZGxlcnMgY2Fu
IGp1c3QgY2F0Y2ggYW5kIGlnbm9yZSB0aGlzIGV4Y2VwdGlvbiBhbmQKKyAgICBjYWxsIHJlY2Vp
dmVfbWVzc2FnZSgpIGFnYWluIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIG5leHQgZnJhbWUu
CisgICAgIiIiCisKKyAgICBwYXNzCisKKworY2xhc3MgSW52YWxpZFVURjhFeGNlcHRpb24oRXhj
ZXB0aW9uKToKKyAgICAiIiJUaGlzIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCB3aGVuIHdlIHJl
Y2VpdmUgYSB0ZXh0IGZyYW1lIHdoaWNoCisgICAgY29udGFpbnMgaW52YWxpZCBVVEYtOCBzdHJp
bmdzLgorICAgICIiIgorCisgICAgcGFzcworCisKK2NsYXNzIFN0cmVhbUJhc2Uob2JqZWN0KToK
KyAgICAiIiJCYXNlIHN0cmVhbSBjbGFzcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBy
ZXF1ZXN0KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgICIi
IgorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQor
CisgICAgICAgIHNlbGYuX3JlcXVlc3QgPSByZXF1ZXN0CisKKyAgICBkZWYgX3JlYWQoc2VsZiwg
bGVuZ3RoKToKKyAgICAgICAgIiIiUmVhZHMgbGVuZ3RoIGJ5dGVzIGZyb20gY29ubmVjdGlvbi4g
SW4gY2FzZSB3ZSBjYXRjaCBhbnkgZXhjZXB0aW9uLAorICAgICAgICBwcmVwZW5kcyByZW1vdGUg
YWRkcmVzcyB0byB0aGUgZXhjZXB0aW9uIG1lc3NhZ2UgYW5kIHJhaXNlIGFnYWluLgorCisgICAg
ICAgIFJhaXNlczoKKyAgICAgICAgICAgIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uOiB3
aGVuIHJlYWQgcmV0dXJucyBlbXB0eSBzdHJpbmcuCisgICAgICAgICIiIgorCisgICAgICAgIGJ5
dGVzID0gc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLnJlYWQobGVuZ3RoKQorICAgICAgICBpZiBu
b3QgYnl0ZXM6CisgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlv
bigKKyAgICAgICAgICAgICAgICAnUmVjZWl2aW5nICVkIGJ5dGUgZmFpbGVkLiBQZWVyICglcikg
Y2xvc2VkIGNvbm5lY3Rpb24nICUKKyAgICAgICAgICAgICAgICAobGVuZ3RoLCAoc2VsZi5fcmVx
dWVzdC5jb25uZWN0aW9uLnJlbW90ZV9hZGRyLCkpKQorICAgICAgICByZXR1cm4gYnl0ZXMKKwor
ICAgIGRlZiBfd3JpdGUoc2VsZiwgYnl0ZXMpOgorICAgICAgICAiIiJXcml0ZXMgZ2l2ZW4gYnl0
ZXMgdG8gY29ubmVjdGlvbi4gSW4gY2FzZSB3ZSBjYXRjaCBhbnkgZXhjZXB0aW9uLAorICAgICAg
ICBwcmVwZW5kcyByZW1vdGUgYWRkcmVzcyB0byB0aGUgZXhjZXB0aW9uIG1lc3NhZ2UgYW5kIHJh
aXNlIGFnYWluLgorICAgICAgICAiIiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxm
Ll9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoYnl0ZXMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRp
b24sIGU6CisgICAgICAgICAgICB1dGlsLnByZXBlbmRfbWVzc2FnZV90b19leGNlcHRpb24oCisg
ICAgICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gc2VuZCBtZXNzYWdlIHRvICVyOiAnICUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLnJlbW90
ZV9hZGRyLCksCisgICAgICAgICAgICAgICAgICAgIGUpCisgICAgICAgICAgICByYWlzZQorCisg
ICAgZGVmIHJlY2VpdmVfYnl0ZXMoc2VsZiwgbGVuZ3RoKToKKyAgICAgICAgIiIiUmVjZWl2ZXMg
bXVsdGlwbGUgYnl0ZXMuIFJldHJpZXMgcmVhZCB3aGVuIHdlIGNvdWxkbid0IHJlY2VpdmUgdGhl
CisgICAgICAgIHNwZWNpZmllZCBhbW91bnQuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAg
ICAgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb246IHdoZW4gcmVhZCByZXR1cm5zIGVtcHR5
IHN0cmluZy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgYnl0ZXMgPSBbXQorICAgICAgICB3aGls
ZSBsZW5ndGggPiAwOgorICAgICAgICAgICAgbmV3X2J5dGVzID0gc2VsZi5fcmVhZChsZW5ndGgp
CisgICAgICAgICAgICBieXRlcy5hcHBlbmQobmV3X2J5dGVzKQorICAgICAgICAgICAgbGVuZ3Ro
IC09IGxlbihuZXdfYnl0ZXMpCisgICAgICAgIHJldHVybiAnJy5qb2luKGJ5dGVzKQorCisgICAg
ZGVmIF9yZWFkX3VudGlsKHNlbGYsIGRlbGltX2NoYXIpOgorICAgICAgICAiIiJSZWFkcyBieXRl
cyB1bnRpbCB3ZSBlbmNvdW50ZXIgZGVsaW1fY2hhci4gVGhlIHJlc3VsdCB3aWxsIG5vdAorICAg
ICAgICBjb250YWluIGRlbGltX2NoYXIuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAg
Q29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb246IHdoZW4gcmVhZCByZXR1cm5zIGVtcHR5IHN0
cmluZy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgYnl0ZXMgPSBbXQorICAgICAgICB3aGlsZSBU
cnVlOgorICAgICAgICAgICAgY2ggPSBzZWxmLl9yZWFkKDEpCisgICAgICAgICAgICBpZiBjaCA9
PSBkZWxpbV9jaGFyOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBieXRlcy5h
cHBlbmQoY2gpCisgICAgICAgIHJldHVybiAnJy5qb2luKGJ5dGVzKQorCisKKyMgdmk6c3RzPTQg
c3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5
d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9fc3RyZWFtX2hpeGllNzUucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L19zdHJl
YW1faGl4aWU3NS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODRjYTZlMDczYjZkYTZlZmVkMTg4Y2ZkZDZhZTcw
NDEzOGM2MTc4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9fc3RyZWFtX2hpeGllNzUucHkKQEAg
LTAsMCArMSwyMjggQEAKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMK
KyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRoaXMgZmlsZSBwcm92aWRl
cyBhIGNsYXNzIGZvciBwYXJzaW5nL2J1aWxkaW5nIGZyYW1lcyBvZiB0aGUgV2ViU29ja2V0Citw
cm90b2NvbCB2ZXJzaW9uIEh5QmkgMDAgYW5kIEhpeGllIDc1LgorCitTcGVjaWZpY2F0aW9uOgor
aHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1oeWJpLXRoZXdlYnNvY2tldHBy
b3RvY29sLTAwCisiIiIKKworCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgY29tbW9uCitm
cm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IEJhZE9wZXJhdGlvbkV4Y2Vw
dGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBDb25uZWN0aW9u
VGVybWluYXRlZEV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGlt
cG9ydCBJbnZhbGlkRnJhbWVFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1f
YmFzZSBpbXBvcnQgU3RyZWFtQmFzZQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNl
IGltcG9ydCBVbnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldCBp
bXBvcnQgdXRpbAorCisKK2NsYXNzIFN0cmVhbUhpeGllNzUoU3RyZWFtQmFzZSk6CisgICAgIiIi
QSBjbGFzcyBmb3IgcGFyc2luZy9idWlsZGluZyBmcmFtZXMgb2YgdGhlIFdlYlNvY2tldCBwcm90
b2NvbCB2ZXJzaW9uCisgICAgSHlCaSAwMCBhbmQgSGl4aWUgNzUuCisgICAgIiIiCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgZW5hYmxlX2Nsb3NpbmdfaGFuZHNoYWtlPUZhbHNl
KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgICAgICBlbmFi
bGVfY2xvc2luZ19oYW5kc2hha2U6IHRvIGxldCBTdHJlYW1IaXhpZTc1IHBlcmZvcm0gY2xvc2lu
ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2UgYXMgc3Bl
Y2lmaWVkIGluIEh5QmkgMDAsIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzIG9wdGlvbiB0byBUcnVlLgorICAgICAgICAiIiIKKworICAgICAgICBTdHJlYW1C
YXNlLl9faW5pdF9fKHNlbGYsIHJlcXVlc3QpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gdXRp
bC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisKKyAgICAgICAgc2VsZi5fZW5hYmxlX2Nsb3Npbmdf
aGFuZHNoYWtlID0gZW5hYmxlX2Nsb3NpbmdfaGFuZHNoYWtlCisKKyAgICAgICAgc2VsZi5fcmVx
dWVzdC5jbGllbnRfdGVybWluYXRlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3JlcXVlc3Quc2Vy
dmVyX3Rlcm1pbmF0ZWQgPSBGYWxzZQorCisgICAgZGVmIHNlbmRfbWVzc2FnZShzZWxmLCBtZXNz
YWdlLCBlbmQ9VHJ1ZSwgYmluYXJ5PUZhbHNlKToKKyAgICAgICAgIiIiU2VuZCBtZXNzYWdlLgor
CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBtZXNzYWdlOiB1bmljb2RlIHN0cmluZyB0byBz
ZW5kLgorICAgICAgICAgICAgYmluYXJ5OiBub3QgdXNlZCBpbiBoaXhpZTc1LgorCisgICAgICAg
IFJhaXNlczoKKyAgICAgICAgICAgIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbjogd2hlbiBjYWxsZWQg
b24gYSBzZXJ2ZXItdGVybWluYXRlZAorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uCisgICAg
ICAgICIiIgorCisgICAgICAgIGlmIG5vdCBlbmQ6CisgICAgICAgICAgICByYWlzZSBCYWRPcGVy
YXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1N0cmVhbUhpeGllNzUgZG9lc25cJ3Qg
c3VwcG9ydCBzZW5kX21lc3NhZ2Ugd2l0aCBlbmQ9RmFsc2UnKQorCisgICAgICAgIGlmIGJpbmFy
eToKKyAgICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAg
ICAgICAnU3RyZWFtSGl4aWU3NSBkb2VzblwndCBzdXBwb3J0IHNlbmRfbWVzc2FnZSB3aXRoIGJp
bmFyeT1UcnVlJykKKworICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LnNlcnZlcl90ZXJtaW5hdGVk
OgorICAgICAgICAgICAgcmFpc2UgQmFkT3BlcmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAg
ICAgICdSZXF1ZXN0ZWQgc2VuZF9tZXNzYWdlIGFmdGVyIHNlbmRpbmcgb3V0IGEgY2xvc2luZyBo
YW5kc2hha2UnKQorCisgICAgICAgIHNlbGYuX3dyaXRlKCcnLmpvaW4oWydceDAwJywgbWVzc2Fn
ZS5lbmNvZGUoJ3V0Zi04JyksICdceGZmJ10pKQorCisgICAgZGVmIF9yZWFkX3BheWxvYWRfbGVu
Z3RoX2hpeGllNzUoc2VsZik6CisgICAgICAgICIiIlJlYWRzIGEgbGVuZ3RoIGhlYWRlciBpbiBh
IEhpeGllNzUgdmVyc2lvbiBmcmFtZSB3aXRoIGxlbmd0aC4KKworICAgICAgICBSYWlzZXM6Cisg
ICAgICAgICAgICBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbjogd2hlbiByZWFkIHJldHVy
bnMgZW1wdHkgc3RyaW5nLgorICAgICAgICAiIiIKKworICAgICAgICBsZW5ndGggPSAwCisgICAg
ICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBiX3N0ciA9IHNlbGYuX3JlYWQoMSkKKyAgICAg
ICAgICAgIGIgPSBvcmQoYl9zdHIpCisgICAgICAgICAgICBsZW5ndGggPSBsZW5ndGggKiAxMjgg
KyAoYiAmIDB4N2YpCisgICAgICAgICAgICBpZiAoYiAmIDB4ODApID09IDA6CisgICAgICAgICAg
ICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIGxlbmd0aAorCisgICAgZGVmIHJlY2VpdmVfbWVz
c2FnZShzZWxmKToKKyAgICAgICAgIiIiUmVjZWl2ZSBhIFdlYlNvY2tldCBmcmFtZSBhbmQgcmV0
dXJuIGl0cyBwYXlsb2FkIGFuIHVuaWNvZGUgc3RyaW5nLgorCisgICAgICAgIFJldHVybnM6Cisg
ICAgICAgICAgICBwYXlsb2FkIHVuaWNvZGUgc3RyaW5nIGluIGEgV2ViU29ja2V0IGZyYW1lLgor
CisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0
aW9uOiB3aGVuIHJlYWQgcmV0dXJucyBlbXB0eQorICAgICAgICAgICAgICAgIHN0cmluZy4KKyAg
ICAgICAgICAgIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbjogd2hlbiBjYWxsZWQgb24gYSBjbGllbnQt
dGVybWluYXRlZAorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uCisgICAgICAgICIiIgorCisg
ICAgICAgIGlmIHNlbGYuX3JlcXVlc3QuY2xpZW50X3Rlcm1pbmF0ZWQ6CisgICAgICAgICAgICBy
YWlzZSBCYWRPcGVyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1JlcXVlc3RlZCBy
ZWNlaXZlX21lc3NhZ2UgYWZ0ZXIgcmVjZWl2aW5nIGEgY2xvc2luZyAnCisgICAgICAgICAgICAg
ICAgJ2hhbmRzaGFrZScpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICMgUmVh
ZCAxIGJ5dGUuCisgICAgICAgICAgICAjIG1wX2Nvbm4ucmVhZCB3aWxsIGJsb2NrIGlmIG5vIGJ5
dGVzIGFyZSBhdmFpbGFibGUuCisgICAgICAgICAgICAjIFRpbWVvdXQgaXMgY29udHJvbGxlZCBi
eSBUaW1lT3V0IGRpcmVjdGl2ZSBvZiBBcGFjaGUuCisgICAgICAgICAgICBmcmFtZV90eXBlX3N0
ciA9IHNlbGYucmVjZWl2ZV9ieXRlcygxKQorICAgICAgICAgICAgZnJhbWVfdHlwZSA9IG9yZChm
cmFtZV90eXBlX3N0cikKKyAgICAgICAgICAgIGlmIChmcmFtZV90eXBlICYgMHg4MCkgPT0gMHg4
MDoKKyAgICAgICAgICAgICAgICAjIFRoZSBwYXlsb2FkIGxlbmd0aCBpcyBzcGVjaWZpZWQgaW4g
dGhlIGZyYW1lLgorICAgICAgICAgICAgICAgICMgUmVhZCBhbmQgZGlzY2FyZC4KKyAgICAgICAg
ICAgICAgICBsZW5ndGggPSBzZWxmLl9yZWFkX3BheWxvYWRfbGVuZ3RoX2hpeGllNzUoKQorICAg
ICAgICAgICAgICAgIGlmIGxlbmd0aCA+IDA6CisgICAgICAgICAgICAgICAgICAgIF8gPSBzZWxm
LnJlY2VpdmVfYnl0ZXMobGVuZ3RoKQorICAgICAgICAgICAgICAgICMgNS4zIDMuIDEyLiBpZiAv
dHlwZS8gaXMgMHhGRiBhbmQgL2xlbmd0aC8gaXMgMCwgdGhlbiBzZXQgdGhlCisgICAgICAgICAg
ICAgICAgIyAvY2xpZW50IHRlcm1pbmF0ZWQvIGZsYWcgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgor
ICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9lbmFibGVfY2xvc2luZ19oYW5kc2hha2U6Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBmcmFtZV90
eXBlID09IDB4RkYgYW5kIGxlbmd0aCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9y
ZXF1ZXN0LmNsaWVudF90ZXJtaW5hdGVkID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgICAgIGlm
IHNlbGYuX3JlcXVlc3Quc2VydmVyX3Rlcm1pbmF0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlY2Vp
dmVkIGFjayBmb3Igc2VydmVyLWluaXRpYXRlZCBjbG9zaW5nICcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnaGFuZHNoYWtlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
b25lCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAg
ICAgICAgICAgICAgICAgJ1JlY2VpdmVkIGNsaWVudC1pbml0aWF0ZWQgY2xvc2luZyBoYW5kc2hh
a2UnKQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlbmRfY2xvc2luZ19oYW5kc2hha2Uo
KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAg
ICAgICAgICAgICAnU2VudCBhY2sgZm9yIGNsaWVudC1pbml0aWF0ZWQgY2xvc2luZyBoYW5kc2hh
a2UnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAjIFRoZSBwYXlsb2FkIGlzIGRlbGltaXRlZCB3aXRoIFx4ZmYuCisg
ICAgICAgICAgICAgICAgYnl0ZXMgPSBzZWxmLl9yZWFkX3VudGlsKCdceGZmJykKKyAgICAgICAg
ICAgICAgICAjIFRoZSBXZWJTb2NrZXQgcHJvdG9jb2wgc2VjdGlvbiA0LjQgc3BlY2lmaWVzIHRo
YXQgaW52YWxpZAorICAgICAgICAgICAgICAgICMgY2hhcmFjdGVycyBtdXN0IGJlIHJlcGxhY2Vk
IHdpdGggVStmZmZkIFJFUExBQ0VNRU5UCisgICAgICAgICAgICAgICAgIyBDSEFSQUNURVIuCisg
ICAgICAgICAgICAgICAgbWVzc2FnZSA9IGJ5dGVzLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScp
CisgICAgICAgICAgICAgICAgaWYgZnJhbWVfdHlwZSA9PSAweDAwOgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbWVzc2FnZQorICAgICAgICAgICAgICAgICMgRGlzY2FyZCBkYXRhIG9mIG90
aGVyIHR5cGVzLgorCisgICAgZGVmIF9zZW5kX2Nsb3NpbmdfaGFuZHNoYWtlKHNlbGYpOgorICAg
ICAgICBpZiBub3Qgc2VsZi5fZW5hYmxlX2Nsb3NpbmdfaGFuZHNoYWtlOgorICAgICAgICAgICAg
cmFpc2UgQmFkT3BlcmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdDbG9zaW5nIGhh
bmRzaGFrZSBpcyBub3Qgc3VwcG9ydGVkIGluIEhpeGllIDc1IHByb3RvY29sJykKKworICAgICAg
ICBzZWxmLl9yZXF1ZXN0LnNlcnZlcl90ZXJtaW5hdGVkID0gVHJ1ZQorCisgICAgICAgICMgNS4z
IHRoZSBzZXJ2ZXIgbWF5IGRlY2lkZSB0byB0ZXJtaW5hdGUgdGhlIFdlYlNvY2tldCBjb25uZWN0
aW9uIGJ5CisgICAgICAgICMgcnVubmluZyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RlcHM6Cisg
ICAgICAgICMgMS4gc2VuZCBhIDB4RkYgYnl0ZSBhbmQgYSAweDAwIGJ5dGUgdG8gdGhlIGNsaWVu
dCB0byBpbmRpY2F0ZSB0aGUKKyAgICAgICAgIyBzdGFydCBvZiB0aGUgY2xvc2luZyBoYW5kc2hh
a2UuCisgICAgICAgIHNlbGYuX3dyaXRlKCdceGZmXHgwMCcpCisKKyAgICBkZWYgY2xvc2VfY29u
bmVjdGlvbihzZWxmLCB1bnVzZWRfY29kZT0nJywgdW51c2VkX3JlYXNvbj0nJyk6CisgICAgICAg
ICIiIkNsb3NlcyBhIFdlYlNvY2tldCBjb25uZWN0aW9uLgorCisgICAgICAgIFJhaXNlczoKKyAg
ICAgICAgICAgIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uOiB3aGVuIGNsb3NpbmcgaGFu
ZHNoYWtlIHdhcworICAgICAgICAgICAgICAgIG5vdCBzdWNjZXNzZnVsbC4KKyAgICAgICAgIiIi
CisKKyAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC5zZXJ2ZXJfdGVybWluYXRlZDoKKyAgICAgICAg
ICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAnUmVxdWVzdGVkIGNsb3Nl
X2Nvbm5lY3Rpb24gYnV0IHNlcnZlciBpcyBhbHJlYWR5IHRlcm1pbmF0ZWQnKQorICAgICAgICAg
ICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2VuYWJsZV9jbG9zaW5nX2hhbmRzaGFr
ZToKKyAgICAgICAgICAgIHNlbGYuX3JlcXVlc3Quc2VydmVyX3Rlcm1pbmF0ZWQgPSBUcnVlCisg
ICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ0Nvbm5lY3Rpb24gY2xvc2VkJykKKyAgICAg
ICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX3NlbmRfY2xvc2luZ19oYW5kc2hha2UoKQor
ICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1NlbnQgc2VydmVyLWluaXRpYXRlZCBjbG9zaW5n
IGhhbmRzaGFrZScpCisKKyAgICAgICAgIyBUT0RPKHVrYWkpOiAyLiB3YWl0IHVudGlsIHRoZSAv
Y2xpZW50IHRlcm1pbmF0ZWQvIGZsYWcgaGFzIGJlZW4gc2V0LAorICAgICAgICAjIG9yIHVudGls
IGEgc2VydmVyLWRlZmluZWQgdGltZW91dCBleHBpcmVzLgorICAgICAgICAjCisgICAgICAgICMg
Rm9yIG5vdywgd2UgZXhwZWN0IHJlY2VpdmluZyBjbG9zaW5nIGhhbmRzaGFrZSByaWdodCBhZnRl
ciBzZW5kaW5nCisgICAgICAgICMgb3V0IGNsb3NpbmcgaGFuZHNoYWtlLCBhbmQgaWYgd2UgY291
bGRuJ3QgcmVjZWl2ZSBub24taGFuZHNoYWtlCisgICAgICAgICMgZnJhbWUsIHdlIHRha2UgaXQg
YXMgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24uCisgICAgICAgIG1lc3NhZ2UgPSBzZWxm
LnJlY2VpdmVfbWVzc2FnZSgpCisgICAgICAgIGlmIG1lc3NhZ2UgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICByYWlzZSBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbigKKyAgICAgICAgICAg
ICAgICAnRGlkblwndCByZWNlaXZlIHZhbGlkIGFjayBmb3IgY2xvc2luZyBoYW5kc2hha2UnKQor
ICAgICAgICAjIFRPRE86IDMuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4KKyAgICAg
ICAgIyBub3RlOiBtb2RfcHl0aG9uIENvbm5lY3Rpb24gKG1wX2Nvbm4pIGRvZXNuJ3QgaGF2ZSBj
bG9zZSBtZXRob2QuCisKKyAgICBkZWYgc2VuZF9waW5nKHNlbGYsIGJvZHkpOgorICAgICAgICBy
YWlzZSBCYWRPcGVyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAnU3RyZWFtSGl4aWU3NSBk
b2VzblwndCBzdXBwb3J0IHNlbmRfcGluZycpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9k
X3B5d2Vic29ja2V0L19zdHJlYW1faHliaS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9oeWJpLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmMwMGY1NjkyYmRiZTNiZTk2OWRlYTkxMzZiNzVhYzM4NGU5MWQ4YzgKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQv
bW9kX3B5d2Vic29ja2V0L19zdHJlYW1faHliaS5weQpAQCAtMCwwICsxLDY2OCBAQAorIyBDb3B5
cmlnaHQgMjAxMiwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKworIiIiVGhpcyBmaWxlIHByb3ZpZGVzIGNsYXNzZXMgYW5kIGhlbHBlciBm
dW5jdGlvbnMgZm9yIHBhcnNpbmcvYnVpbGRpbmcgZnJhbWVzCitvZiB0aGUgV2ViU29ja2V0IHBy
b3RvY29sIChSRkMgNjQ1NSkuCisKK1NwZWNpZmljYXRpb246CitodHRwOi8vdG9vbHMuaWV0Zi5v
cmcvaHRtbC9yZmM2NDU1CisiIiIKKworCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQor
aW1wb3J0IG9zCitpbXBvcnQgc3RydWN0CisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBj
b21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCB1dGlsCitmcm9tIG1vZF9weXdlYnNv
Y2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IEJhZE9wZXJhdGlvbkV4Y2VwdGlvbgorZnJvbSBtb2Rf
cHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2Vw
dGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBJbnZhbGlkRnJh
bWVFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1fYmFzZSBpbXBvcnQgSW52
YWxpZFVURjhFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1fYmFzZSBpbXBv
cnQgU3RyZWFtQmFzZQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBV
bnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9uCisKKworX05PT1BfTUFTS0VSID0gdXRpbC5Ob29wTWFz
a2VyKCkKKworCitjbGFzcyBGcmFtZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGZpbj0xLCByc3YxPTAsIHJzdjI9MCwgcnN2Mz0wLAorICAgICAgICAgICAgICAgICBvcGNvZGU9
Tm9uZSwgcGF5bG9hZD0nJyk6CisgICAgICAgIHNlbGYuZmluID0gZmluCisgICAgICAgIHNlbGYu
cnN2MSA9IHJzdjEKKyAgICAgICAgc2VsZi5yc3YyID0gcnN2MgorICAgICAgICBzZWxmLnJzdjMg
PSByc3YzCisgICAgICAgIHNlbGYub3Bjb2RlID0gb3Bjb2RlCisgICAgICAgIHNlbGYucGF5bG9h
ZCA9IHBheWxvYWQKKworCisjIEhlbHBlciBmdW5jdGlvbnMgbWFkZSBwdWJsaWMgdG8gYmUgdXNl
ZCBmb3Igd3JpdGluZyB1bml0dGVzdHMgZm9yIFdlYlNvY2tldAorIyBjbGllbnRzLgorCisKK2Rl
ZiBjcmVhdGVfbGVuZ3RoX2hlYWRlcihsZW5ndGgsIG1hc2spOgorICAgICIiIkNyZWF0ZXMgYSBs
ZW5ndGggaGVhZGVyLgorCisgICAgQXJnczoKKyAgICAgICAgbGVuZ3RoOiBGcmFtZSBsZW5ndGgu
IE11c3QgYmUgbGVzcyB0aGFuIDJeNjMuCisgICAgICAgIG1hc2s6IE1hc2sgYml0LiBNdXN0IGJl
IGJvb2xlYW4uCisKKyAgICBSYWlzZXM6CisgICAgICAgIFZhbHVlRXJyb3I6IHdoZW4gYmFkIGRh
dGEgaXMgZ2l2ZW4uCisgICAgIiIiCisKKyAgICBpZiBtYXNrOgorICAgICAgICBtYXNrX2JpdCA9
IDEgPDwgNworICAgIGVsc2U6CisgICAgICAgIG1hc2tfYml0ID0gMAorCisgICAgaWYgbGVuZ3Ro
IDwgMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbGVuZ3RoIG11c3QgYmUgbm9uIG5lZ2F0
aXZlIGludGVnZXInKQorICAgIGVsaWYgbGVuZ3RoIDw9IDEyNToKKyAgICAgICAgcmV0dXJuIGNo
cihtYXNrX2JpdCB8IGxlbmd0aCkKKyAgICBlbGlmIGxlbmd0aCA8ICgxIDw8IDE2KToKKyAgICAg
ICAgcmV0dXJuIGNocihtYXNrX2JpdCB8IDEyNikgKyBzdHJ1Y3QucGFjaygnIUgnLCBsZW5ndGgp
CisgICAgZWxpZiBsZW5ndGggPCAoMSA8PCA2Myk6CisgICAgICAgIHJldHVybiBjaHIobWFza19i
aXQgfCAxMjcpICsgc3RydWN0LnBhY2soJyFRJywgbGVuZ3RoKQorICAgIGVsc2U6CisgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoJ1BheWxvYWQgaXMgdG9vIGJpZyBmb3Igb25lIGZyYW1lJykKKwor
CitkZWYgY3JlYXRlX2hlYWRlcihvcGNvZGUsIHBheWxvYWRfbGVuZ3RoLCBmaW4sIHJzdjEsIHJz
djIsIHJzdjMsIG1hc2spOgorICAgICIiIkNyZWF0ZXMgYSBmcmFtZSBoZWFkZXIuCisKKyAgICBS
YWlzZXM6CisgICAgICAgIEV4Y2VwdGlvbjogd2hlbiBiYWQgZGF0YSBpcyBnaXZlbi4KKyAgICAi
IiIKKworICAgIGlmIG9wY29kZSA8IDAgb3IgMHhmIDwgb3Bjb2RlOgorICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCdPcGNvZGUgb3V0IG9mIHJhbmdlJykKKworICAgIGlmIHBheWxvYWRfbGVuZ3Ro
IDwgMCBvciAoMSA8PCA2MykgPD0gcGF5bG9hZF9sZW5ndGg6CisgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoJ3BheWxvYWRfbGVuZ3RoIG91dCBvZiByYW5nZScpCisKKyAgICBpZiAoZmluIHwgcnN2
MSB8IHJzdjIgfCByc3YzKSAmIH4xOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdGSU4gYml0
IGFuZCBSZXNlcnZlZCBiaXQgcGFyYW1ldGVyIG11c3QgYmUgMCBvciAxJykKKworICAgIGhlYWRl
ciA9ICcnCisKKyAgICBmaXJzdF9ieXRlID0gKChmaW4gPDwgNykKKyAgICAgICAgICAgICAgICAg
IHwgKHJzdjEgPDwgNikgfCAocnN2MiA8PCA1KSB8IChyc3YzIDw8IDQpCisgICAgICAgICAgICAg
ICAgICB8IG9wY29kZSkKKyAgICBoZWFkZXIgKz0gY2hyKGZpcnN0X2J5dGUpCisgICAgaGVhZGVy
ICs9IGNyZWF0ZV9sZW5ndGhfaGVhZGVyKHBheWxvYWRfbGVuZ3RoLCBtYXNrKQorCisgICAgcmV0
dXJuIGhlYWRlcgorCisKK2RlZiBfYnVpbGRfZnJhbWUoaGVhZGVyLCBib2R5LCBtYXNrKToKKyAg
ICBpZiBub3QgbWFzazoKKyAgICAgICAgcmV0dXJuIGhlYWRlciArIGJvZHkKKworICAgIG1hc2tp
bmdfbm9uY2UgPSBvcy51cmFuZG9tKDQpCisgICAgbWFza2VyID0gdXRpbC5SZXBlYXRlZFhvck1h
c2tlcihtYXNraW5nX25vbmNlKQorCisgICAgcmV0dXJuIGhlYWRlciArIG1hc2tpbmdfbm9uY2Ug
KyBtYXNrZXIubWFzayhib2R5KQorCisKK2RlZiBfZmlsdGVyX2FuZF9mb3JtYXRfZnJhbWVfb2Jq
ZWN0KGZyYW1lLCBtYXNrLCBmcmFtZV9maWx0ZXJzKToKKyAgICBmb3IgZnJhbWVfZmlsdGVyIGlu
IGZyYW1lX2ZpbHRlcnM6CisgICAgICAgIGZyYW1lX2ZpbHRlci5maWx0ZXIoZnJhbWUpCisKKyAg
ICBoZWFkZXIgPSBjcmVhdGVfaGVhZGVyKAorICAgICAgICBmcmFtZS5vcGNvZGUsIGxlbihmcmFt
ZS5wYXlsb2FkKSwgZnJhbWUuZmluLAorICAgICAgICBmcmFtZS5yc3YxLCBmcmFtZS5yc3YyLCBm
cmFtZS5yc3YzLCBtYXNrKQorICAgIHJldHVybiBfYnVpbGRfZnJhbWUoaGVhZGVyLCBmcmFtZS5w
YXlsb2FkLCBtYXNrKQorCisKK2RlZiBjcmVhdGVfYmluYXJ5X2ZyYW1lKAorICAgIG1lc3NhZ2Us
IG9wY29kZT1jb21tb24uT1BDT0RFX0JJTkFSWSwgZmluPTEsIG1hc2s9RmFsc2UsIGZyYW1lX2Zp
bHRlcnM9W10pOgorICAgICIiIkNyZWF0ZXMgYSBzaW1wbGUgYmluYXJ5IGZyYW1lIHdpdGggbm8g
ZXh0ZW5zaW9uLCByZXNlcnZlZCBiaXQuIiIiCisKKyAgICBmcmFtZSA9IEZyYW1lKGZpbj1maW4s
IG9wY29kZT1vcGNvZGUsIHBheWxvYWQ9bWVzc2FnZSkKKyAgICByZXR1cm4gX2ZpbHRlcl9hbmRf
Zm9ybWF0X2ZyYW1lX29iamVjdChmcmFtZSwgbWFzaywgZnJhbWVfZmlsdGVycykKKworCitkZWYg
Y3JlYXRlX3RleHRfZnJhbWUoCisgICAgbWVzc2FnZSwgb3Bjb2RlPWNvbW1vbi5PUENPREVfVEVY
VCwgZmluPTEsIG1hc2s9RmFsc2UsIGZyYW1lX2ZpbHRlcnM9W10pOgorICAgICIiIkNyZWF0ZXMg
YSBzaW1wbGUgdGV4dCBmcmFtZSB3aXRoIG5vIGV4dGVuc2lvbiwgcmVzZXJ2ZWQgYml0LiIiIgor
CisgICAgZW5jb2RlZF9tZXNzYWdlID0gbWVzc2FnZS5lbmNvZGUoJ3V0Zi04JykKKyAgICByZXR1
cm4gY3JlYXRlX2JpbmFyeV9mcmFtZShlbmNvZGVkX21lc3NhZ2UsIG9wY29kZSwgZmluLCBtYXNr
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lX2ZpbHRlcnMpCisKKworY2xh
c3MgRnJhZ21lbnRlZEZyYW1lQnVpbGRlcihvYmplY3QpOgorICAgICIiIkEgc3RhdGVmdWwgY2xh
c3MgdG8gc2VuZCBhIG1lc3NhZ2UgYXMgZnJhZ21lbnRzLiIiIgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG1hc2ssIGZyYW1lX2ZpbHRlcnM9W10pOgorICAgICAgICAiIiJDb25zdHJ1Y3RzIGFu
IGluc3RhbmNlLiIiIgorCisgICAgICAgIHNlbGYuX21hc2sgPSBtYXNrCisgICAgICAgIHNlbGYu
X2ZyYW1lX2ZpbHRlcnMgPSBmcmFtZV9maWx0ZXJzCisKKyAgICAgICAgc2VsZi5fc3RhcnRlZCA9
IEZhbHNlCisKKyAgICAgICAgIyBIb2xkIG9wY29kZSBvZiB0aGUgZmlyc3QgZnJhbWUgaW4gbWVz
c2FnZXMgdG8gdmVyaWZ5IHR5cGVzIG9mIG90aGVyCisgICAgICAgICMgZnJhbWVzIGluIHRoZSBt
ZXNzYWdlIGFyZSBhbGwgdGhlIHNhbWUuCisgICAgICAgIHNlbGYuX29wY29kZSA9IGNvbW1vbi5P
UENPREVfVEVYVAorCisgICAgZGVmIGJ1aWxkKHNlbGYsIG1lc3NhZ2UsIGVuZCwgYmluYXJ5KToK
KyAgICAgICAgaWYgYmluYXJ5OgorICAgICAgICAgICAgZnJhbWVfdHlwZSA9IGNvbW1vbi5PUENP
REVfQklOQVJZCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcmFtZV90eXBlID0gY29tbW9u
Lk9QQ09ERV9URVhUCisgICAgICAgIGlmIHNlbGYuX3N0YXJ0ZWQ6CisgICAgICAgICAgICBpZiBz
ZWxmLl9vcGNvZGUgIT0gZnJhbWVfdHlwZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCdNZXNzYWdlIHR5cGVzIGFyZSBkaWZmZXJlbnQgaW4gZnJhbWVzIGZvciAnCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIHNhbWUgbWVzc2FnZScpCisgICAgICAgICAg
ICBvcGNvZGUgPSBjb21tb24uT1BDT0RFX0NPTlRJTlVBVElPTgorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgb3Bjb2RlID0gZnJhbWVfdHlwZQorICAgICAgICAgICAgc2VsZi5fb3Bjb2RlID0g
ZnJhbWVfdHlwZQorCisgICAgICAgIGlmIGVuZDoKKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0ZWQg
PSBGYWxzZQorICAgICAgICAgICAgZmluID0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
c2VsZi5fc3RhcnRlZCA9IFRydWUKKyAgICAgICAgICAgIGZpbiA9IDAKKworICAgICAgICBpZiBi
aW5hcnk6CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlX2JpbmFyeV9mcmFtZSgKKyAgICAgICAg
ICAgICAgICBtZXNzYWdlLCBvcGNvZGUsIGZpbiwgc2VsZi5fbWFzaywgc2VsZi5fZnJhbWVfZmls
dGVycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVfdGV4dF9mcmFt
ZSgKKyAgICAgICAgICAgICAgICBtZXNzYWdlLCBvcGNvZGUsIGZpbiwgc2VsZi5fbWFzaywgc2Vs
Zi5fZnJhbWVfZmlsdGVycykKKworCitkZWYgX2NyZWF0ZV9jb250cm9sX2ZyYW1lKG9wY29kZSwg
Ym9keSwgbWFzaywgZnJhbWVfZmlsdGVycyk6CisgICAgZnJhbWUgPSBGcmFtZShvcGNvZGU9b3Bj
b2RlLCBwYXlsb2FkPWJvZHkpCisKKyAgICByZXR1cm4gX2ZpbHRlcl9hbmRfZm9ybWF0X2ZyYW1l
X29iamVjdChmcmFtZSwgbWFzaywgZnJhbWVfZmlsdGVycykKKworCitkZWYgY3JlYXRlX3Bpbmdf
ZnJhbWUoYm9keSwgbWFzaz1GYWxzZSwgZnJhbWVfZmlsdGVycz1bXSk6CisgICAgcmV0dXJuIF9j
cmVhdGVfY29udHJvbF9mcmFtZShjb21tb24uT1BDT0RFX1BJTkcsIGJvZHksIG1hc2ssIGZyYW1l
X2ZpbHRlcnMpCisKKworZGVmIGNyZWF0ZV9wb25nX2ZyYW1lKGJvZHksIG1hc2s9RmFsc2UsIGZy
YW1lX2ZpbHRlcnM9W10pOgorICAgIHJldHVybiBfY3JlYXRlX2NvbnRyb2xfZnJhbWUoY29tbW9u
Lk9QQ09ERV9QT05HLCBib2R5LCBtYXNrLCBmcmFtZV9maWx0ZXJzKQorCisKK2RlZiBjcmVhdGVf
Y2xvc2VfZnJhbWUoYm9keSwgbWFzaz1GYWxzZSwgZnJhbWVfZmlsdGVycz1bXSk6CisgICAgcmV0
dXJuIF9jcmVhdGVfY29udHJvbF9mcmFtZSgKKyAgICAgICAgY29tbW9uLk9QQ09ERV9DTE9TRSwg
Ym9keSwgbWFzaywgZnJhbWVfZmlsdGVycykKKworCitjbGFzcyBTdHJlYW1PcHRpb25zKG9iamVj
dCk6CisgICAgIiIiSG9sZHMgb3B0aW9uIHZhbHVlcyB0byBjb25maWd1cmUgU3RyZWFtIG9iamVj
dHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICIiIkNvbnN0cnVjdHMg
U3RyZWFtT3B0aW9ucy4iIiIKKworICAgICAgICAjIEVuYWJsZXMgZGVmbGF0ZS1zdHJlYW0gZXh0
ZW5zaW9uLgorICAgICAgICBzZWxmLmRlZmxhdGVfc3RyZWFtID0gRmFsc2UKKworICAgICAgICAj
IEZpbHRlcnMgYXBwbGllZCB0byBmcmFtZXMuCisgICAgICAgIHNlbGYub3V0Z29pbmdfZnJhbWVf
ZmlsdGVycyA9IFtdCisgICAgICAgIHNlbGYuaW5jb21pbmdfZnJhbWVfZmlsdGVycyA9IFtdCisK
KyAgICAgICAgc2VsZi5tYXNrX3NlbmQgPSBGYWxzZQorICAgICAgICBzZWxmLnVubWFza19yZWNl
aXZlID0gVHJ1ZQorCisKK2NsYXNzIFN0cmVhbShTdHJlYW1CYXNlKToKKyAgICAiIiJBIGNsYXNz
IGZvciBwYXJzaW5nL2J1aWxkaW5nIGZyYW1lcyBvZiB0aGUgV2ViU29ja2V0IHByb3RvY29sCisg
ICAgKFJGQyA2NDU1KS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0
LCBvcHRpb25zKToKKyAgICAgICAgIiIiQ29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAg
ICAiIiIKKworICAgICAgICBTdHJlYW1CYXNlLl9faW5pdF9fKHNlbGYsIHJlcXVlc3QpCisKKyAg
ICAgICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisKKyAgICAg
ICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmRl
ZmxhdGVfc3RyZWFtOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdTZXR1cCBmaWx0
ZXIgZm9yIGRlZmxhdGUtc3RyZWFtJykKKyAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QgPSB1dGls
LkRlZmxhdGVSZXF1ZXN0KHNlbGYuX3JlcXVlc3QpCisKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5j
bGllbnRfdGVybWluYXRlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3JlcXVlc3Quc2VydmVyX3Rl
cm1pbmF0ZWQgPSBGYWxzZQorCisgICAgICAgICMgSG9sZHMgYm9keSBvZiByZWNlaXZlZCBmcmFn
bWVudHMuCisgICAgICAgIHNlbGYuX3JlY2VpdmVkX2ZyYWdtZW50cyA9IFtdCisgICAgICAgICMg
SG9sZHMgdGhlIG9wY29kZSBvZiB0aGUgZmlyc3QgZnJhZ21lbnQuCisgICAgICAgIHNlbGYuX29y
aWdpbmFsX29wY29kZSA9IE5vbmUKKworICAgICAgICBzZWxmLl93cml0ZXIgPSBGcmFnbWVudGVk
RnJhbWVCdWlsZGVyKAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5tYXNrX3NlbmQsIHNlbGYu
X29wdGlvbnMub3V0Z29pbmdfZnJhbWVfZmlsdGVycykKKworICAgICAgICBzZWxmLl9waW5nX3F1
ZXVlID0gZGVxdWUoKQorCisgICAgZGVmIF9yZWNlaXZlX2ZyYW1lKHNlbGYpOgorICAgICAgICAi
IiJSZWNlaXZlcyBhIGZyYW1lIGFuZCByZXR1cm4gZGF0YSBpbiB0aGUgZnJhbWUgYXMgYSB0dXBs
ZSBjb250YWluaW5nCisgICAgICAgIGVhY2ggaGVhZGVyIGZpZWxkIGFuZCBwYXlsb2FkIHNlcGFy
YXRlbHkuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgQ29ubmVjdGlvblRlcm1pbmF0
ZWRFeGNlcHRpb246IHdoZW4gcmVhZCByZXR1cm5zIGVtcHR5CisgICAgICAgICAgICAgICAgc3Ry
aW5nLgorICAgICAgICAgICAgSW52YWxpZEZyYW1lRXhjZXB0aW9uOiB3aGVuIHRoZSBmcmFtZSBj
b250YWlucyBpbnZhbGlkIGRhdGEuCisgICAgICAgICIiIgorCisgICAgICAgIHJlY2VpdmVkID0g
c2VsZi5yZWNlaXZlX2J5dGVzKDIpCisKKyAgICAgICAgZmlyc3RfYnl0ZSA9IG9yZChyZWNlaXZl
ZFswXSkKKyAgICAgICAgZmluID0gKGZpcnN0X2J5dGUgPj4gNykgJiAxCisgICAgICAgIHJzdjEg
PSAoZmlyc3RfYnl0ZSA+PiA2KSAmIDEKKyAgICAgICAgcnN2MiA9IChmaXJzdF9ieXRlID4+IDUp
ICYgMQorICAgICAgICByc3YzID0gKGZpcnN0X2J5dGUgPj4gNCkgJiAxCisgICAgICAgIG9wY29k
ZSA9IGZpcnN0X2J5dGUgJiAweGYKKworICAgICAgICBzZWNvbmRfYnl0ZSA9IG9yZChyZWNlaXZl
ZFsxXSkKKyAgICAgICAgbWFzayA9IChzZWNvbmRfYnl0ZSA+PiA3KSAmIDEKKyAgICAgICAgcGF5
bG9hZF9sZW5ndGggPSBzZWNvbmRfYnl0ZSAmIDB4N2YKKworICAgICAgICBpZiAobWFzayA9PSAx
KSAhPSBzZWxmLl9vcHRpb25zLnVubWFza19yZWNlaXZlOgorICAgICAgICAgICAgcmFpc2UgSW52
YWxpZEZyYW1lRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdNYXNrIGJpdCBvbiB0aGUgcmVj
ZWl2ZWQgZnJhbWUgZGlkXCdudCBtYXRjaCBtYXNraW5nICcKKyAgICAgICAgICAgICAgICAnY29u
ZmlndXJhdGlvbiBmb3IgcmVjZWl2ZWQgZnJhbWVzJykKKworICAgICAgICAjIFRoZSBIeWJpLTEz
IGFuZCBsYXRlciBzcGVjcyBkaXNhbGxvdyBwdXR0aW5nIGEgdmFsdWUgaW4gMHgwLTB4RkZGRgor
ICAgICAgICAjIGludG8gdGhlIDgtb2N0ZXQgZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGggZmllbGQg
KG9yIDB4MC0weEZEIGluCisgICAgICAgICMgMi1vY3RldCBmaWVsZCkuCisgICAgICAgIHZhbGlk
X2xlbmd0aF9lbmNvZGluZyA9IFRydWUKKyAgICAgICAgbGVuZ3RoX2VuY29kaW5nX2J5dGVzID0g
MQorICAgICAgICBpZiBwYXlsb2FkX2xlbmd0aCA9PSAxMjc6CisgICAgICAgICAgICBleHRlbmRl
ZF9wYXlsb2FkX2xlbmd0aCA9IHNlbGYucmVjZWl2ZV9ieXRlcyg4KQorICAgICAgICAgICAgcGF5
bG9hZF9sZW5ndGggPSBzdHJ1Y3QudW5wYWNrKAorICAgICAgICAgICAgICAgICchUScsIGV4dGVu
ZGVkX3BheWxvYWRfbGVuZ3RoKVswXQorICAgICAgICAgICAgaWYgcGF5bG9hZF9sZW5ndGggPiAw
eDdGRkZGRkZGRkZGRkZGRkY6CisgICAgICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZyYW1lRXhj
ZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAnRXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGggPj0g
Ml42MycpCisgICAgICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LndzX3ZlcnNpb24gPj0gMTMgYW5k
IHBheWxvYWRfbGVuZ3RoIDwgMHgxMDAwMDoKKyAgICAgICAgICAgICAgICB2YWxpZF9sZW5ndGhf
ZW5jb2RpbmcgPSBGYWxzZQorICAgICAgICAgICAgICAgIGxlbmd0aF9lbmNvZGluZ19ieXRlcyA9
IDgKKyAgICAgICAgZWxpZiBwYXlsb2FkX2xlbmd0aCA9PSAxMjY6CisgICAgICAgICAgICBleHRl
bmRlZF9wYXlsb2FkX2xlbmd0aCA9IHNlbGYucmVjZWl2ZV9ieXRlcygyKQorICAgICAgICAgICAg
cGF5bG9hZF9sZW5ndGggPSBzdHJ1Y3QudW5wYWNrKAorICAgICAgICAgICAgICAgICchSCcsIGV4
dGVuZGVkX3BheWxvYWRfbGVuZ3RoKVswXQorICAgICAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC53
c192ZXJzaW9uID49IDEzIGFuZCBwYXlsb2FkX2xlbmd0aCA8IDEyNjoKKyAgICAgICAgICAgICAg
ICB2YWxpZF9sZW5ndGhfZW5jb2RpbmcgPSBGYWxzZQorICAgICAgICAgICAgICAgIGxlbmd0aF9l
bmNvZGluZ19ieXRlcyA9IDIKKworICAgICAgICBpZiBub3QgdmFsaWRfbGVuZ3RoX2VuY29kaW5n
OgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLndhcm5pbmcoCisgICAgICAgICAgICAgICAgJ1Bh
eWxvYWQgbGVuZ3RoIGlzIG5vdCBlbmNvZGVkIHVzaW5nIHRoZSBtaW5pbWFsIG51bWJlciBvZiAn
CisgICAgICAgICAgICAgICAgJ2J5dGVzICglZCBpcyBlbmNvZGVkIHVzaW5nICVkIGJ5dGVzKScs
CisgICAgICAgICAgICAgICAgcGF5bG9hZF9sZW5ndGgsCisgICAgICAgICAgICAgICAgbGVuZ3Ro
X2VuY29kaW5nX2J5dGVzKQorCisgICAgICAgIGlmIG1hc2sgPT0gMToKKyAgICAgICAgICAgIG1h
c2tpbmdfbm9uY2UgPSBzZWxmLnJlY2VpdmVfYnl0ZXMoNCkKKyAgICAgICAgICAgIG1hc2tlciA9
IHV0aWwuUmVwZWF0ZWRYb3JNYXNrZXIobWFza2luZ19ub25jZSkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIG1hc2tlciA9IF9OT09QX01BU0tFUgorCisgICAgICAgIGJ5dGVzID0gbWFza2Vy
Lm1hc2soc2VsZi5yZWNlaXZlX2J5dGVzKHBheWxvYWRfbGVuZ3RoKSkKKworICAgICAgICByZXR1
cm4gb3Bjb2RlLCBieXRlcywgZmluLCByc3YxLCByc3YyLCByc3YzCisKKyAgICBkZWYgX3JlY2Vp
dmVfZnJhbWVfYXNfZnJhbWVfb2JqZWN0KHNlbGYpOgorICAgICAgICBvcGNvZGUsIGJ5dGVzLCBm
aW4sIHJzdjEsIHJzdjIsIHJzdjMgPSBzZWxmLl9yZWNlaXZlX2ZyYW1lKCkKKworICAgICAgICBy
ZXR1cm4gRnJhbWUoZmluPWZpbiwgcnN2MT1yc3YxLCByc3YyPXJzdjIsIHJzdjM9cnN2MywKKyAg
ICAgICAgICAgICAgICAgICAgIG9wY29kZT1vcGNvZGUsIHBheWxvYWQ9Ynl0ZXMpCisKKyAgICBk
ZWYgc2VuZF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGVuZD1UcnVlLCBiaW5hcnk9RmFsc2UpOgor
ICAgICAgICAiIiJTZW5kIG1lc3NhZ2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG1l
c3NhZ2U6IHRleHQgaW4gdW5pY29kZSBvciBiaW5hcnkgaW4gc3RyIHRvIHNlbmQuCisgICAgICAg
ICAgICBiaW5hcnk6IHNlbmQgbWVzc2FnZSBhcyBiaW5hcnkgZnJhbWUuCisKKyAgICAgICAgUmFp
c2VzOgorICAgICAgICAgICAgQmFkT3BlcmF0aW9uRXhjZXB0aW9uOiB3aGVuIGNhbGxlZCBvbiBh
IHNlcnZlci10ZXJtaW5hdGVkCisgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciBjYWxsZWQg
d2l0aCBpbmNvbnNpc3RlbnQgbWVzc2FnZSB0eXBlIG9yIGJpbmFyeQorICAgICAgICAgICAgICAg
IHBhcmFtZXRlci4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC5zZXJ2
ZXJfdGVybWluYXRlZDoKKyAgICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigK
KyAgICAgICAgICAgICAgICAnUmVxdWVzdGVkIHNlbmRfbWVzc2FnZSBhZnRlciBzZW5kaW5nIG91
dCBhIGNsb3NpbmcgaGFuZHNoYWtlJykKKworICAgICAgICBpZiBiaW5hcnkgYW5kIGlzaW5zdGFu
Y2UobWVzc2FnZSwgdW5pY29kZSk6CisgICAgICAgICAgICByYWlzZSBCYWRPcGVyYXRpb25FeGNl
cHRpb24oCisgICAgICAgICAgICAgICAgJ01lc3NhZ2UgZm9yIGJpbmFyeSBmcmFtZSBtdXN0IGJl
IGluc3RhbmNlIG9mIHN0cicpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fd3Jp
dGUoc2VsZi5fd3JpdGVyLmJ1aWxkKG1lc3NhZ2UsIGVuZCwgYmluYXJ5KSkKKyAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICByYWlzZSBCYWRPcGVyYXRpb25FeGNlcHRp
b24oZSkKKworICAgIGRlZiByZWNlaXZlX21lc3NhZ2Uoc2VsZik6CisgICAgICAgICIiIlJlY2Vp
dmUgYSBXZWJTb2NrZXQgZnJhbWUgYW5kIHJldHVybiBpdHMgcGF5bG9hZCBhcyBhIHRleHQgaW4K
KyAgICAgICAgdW5pY29kZSBvciBhIGJpbmFyeSBpbiBzdHIuCisKKyAgICAgICAgUmV0dXJuczoK
KyAgICAgICAgICAgIHBheWxvYWQgZGF0YSBvZiB0aGUgZnJhbWUKKyAgICAgICAgICAgIC0gYXMg
dW5pY29kZSBpbnN0YW5jZSBpZiByZWNlaXZlZCB0ZXh0IGZyYW1lCisgICAgICAgICAgICAtIGFz
IHN0ciBpbnN0YW5jZSBpZiByZWNlaXZlZCBiaW5hcnkgZnJhbWUKKyAgICAgICAgICAgIG9yIE5v
bmUgaWZmIHJlY2VpdmVkIGNsb3NpbmcgaGFuZHNoYWtlLgorICAgICAgICBSYWlzZXM6CisgICAg
ICAgICAgICBCYWRPcGVyYXRpb25FeGNlcHRpb246IHdoZW4gY2FsbGVkIG9uIGEgY2xpZW50LXRl
cm1pbmF0ZWQKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLgorICAgICAgICAgICAgQ29ubmVj
dGlvblRlcm1pbmF0ZWRFeGNlcHRpb246IHdoZW4gcmVhZCByZXR1cm5zIGVtcHR5CisgICAgICAg
ICAgICAgICAgc3RyaW5nLgorICAgICAgICAgICAgSW52YWxpZEZyYW1lRXhjZXB0aW9uOiB3aGVu
IHRoZSBmcmFtZSBjb250YWlucyBpbnZhbGlkCisgICAgICAgICAgICAgICAgZGF0YS4KKyAgICAg
ICAgICAgIFVuc3VwcG9ydGVkRnJhbWVFeGNlcHRpb246IHdoZW4gdGhlIHJlY2VpdmVkIGZyYW1l
IGhhcworICAgICAgICAgICAgICAgIGZsYWdzLCBvcGNvZGUgd2UgY2Fubm90IGhhbmRsZS4gWW91
IGNhbiBpZ25vcmUgdGhpcworICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiBhbmQgY29udGludWUg
cmVjZWl2aW5nIHRoZSBuZXh0IGZyYW1lLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBzZWxm
Ll9yZXF1ZXN0LmNsaWVudF90ZXJtaW5hdGVkOgorICAgICAgICAgICAgcmFpc2UgQmFkT3BlcmF0
aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdSZXF1ZXN0ZWQgcmVjZWl2ZV9tZXNzYWdl
IGFmdGVyIHJlY2VpdmluZyBhIGNsb3NpbmcgJworICAgICAgICAgICAgICAgICdoYW5kc2hha2Un
KQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIG1wX2Nvbm4ucmVhZCB3aWxs
IGJsb2NrIGlmIG5vIGJ5dGVzIGFyZSBhdmFpbGFibGUuCisgICAgICAgICAgICAjIFRpbWVvdXQg
aXMgY29udHJvbGxlZCBieSBUaW1lT3V0IGRpcmVjdGl2ZSBvZiBBcGFjaGUuCisKKyAgICAgICAg
ICAgIGZyYW1lID0gc2VsZi5fcmVjZWl2ZV9mcmFtZV9hc19mcmFtZV9vYmplY3QoKQorCisgICAg
ICAgICAgICBmb3IgZnJhbWVfZmlsdGVyIGluIHNlbGYuX29wdGlvbnMuaW5jb21pbmdfZnJhbWVf
ZmlsdGVyczoKKyAgICAgICAgICAgICAgICBmcmFtZV9maWx0ZXIuZmlsdGVyKGZyYW1lKQorCisg
ICAgICAgICAgICBpZiBmcmFtZS5yc3YxIG9yIGZyYW1lLnJzdjIgb3IgZnJhbWUucnN2MzoKKyAg
ICAgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9uKAorICAgICAgICAg
ICAgICAgICAgICAnVW5zdXBwb3J0ZWQgZmxhZyBpcyBzZXQgKHJzdiA9ICVkJWQlZCknICUKKyAg
ICAgICAgICAgICAgICAgICAgKGZyYW1lLnJzdjEsIGZyYW1lLnJzdjIsIGZyYW1lLnJzdjMpKQor
CisgICAgICAgICAgICBpZiBmcmFtZS5vcGNvZGUgPT0gY29tbW9uLk9QQ09ERV9DT05USU5VQVRJ
T046CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlY2VpdmVkX2ZyYWdtZW50czoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgZnJhbWUuZmluOgorICAgICAgICAgICAgICAgICAgICAgICAg
cmFpc2UgSW52YWxpZEZyYW1lRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdSZWNlaXZlZCBhIHRlcm1pbmF0aW9uIGZyYW1lIGJ1dCBmcmFnbWVudGF0aW9uICcKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnbm90IHN0YXJ0ZWQnKQorICAgICAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZyYW1lRXhjZXB0
aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWNlaXZlZCBhbiBpbnRlcm1lZGlh
dGUgZnJhbWUgYnV0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJhZ21lbnRhdGlv
biBub3Qgc3RhcnRlZCcpCisKKyAgICAgICAgICAgICAgICBpZiBmcmFtZS5maW46CisgICAgICAg
ICAgICAgICAgICAgICMgRW5kIG9mIGZyYWdtZW50YXRpb24gZnJhbWUKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fcmVjZWl2ZWRfZnJhZ21lbnRzLmFwcGVuZChmcmFtZS5wYXlsb2FkKQorICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlID0gJycuam9pbihzZWxmLl9yZWNlaXZlZF9mcmFnbWVu
dHMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlY2VpdmVkX2ZyYWdtZW50cyA9IFtdCisg
ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBJbnRlcm1lZGlhdGUg
ZnJhbWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVjZWl2ZWRfZnJhZ21lbnRzLmFwcGVu
ZChmcmFtZS5wYXlsb2FkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9yZWNlaXZlZF9mcmFnbWVudHM6Cisg
ICAgICAgICAgICAgICAgICAgIGlmIGZyYW1lLmZpbjoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJhaXNlIEludmFsaWRGcmFtZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnUmVjZWl2ZWQgYW4gdW5mcmFnbWVudGVkIGZyYW1lIHdpdGhvdXQgJworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICd0ZXJtaW5hdGluZyBleGlzdGluZyBmcmFnbWVudGF0aW9uJykKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIElu
dmFsaWRGcmFtZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTmV3IGZy
YWdtZW50YXRpb24gc3RhcnRlZCB3aXRob3V0IHRlcm1pbmF0aW5nICcKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnZXhpc3RpbmcgZnJhZ21lbnRhdGlvbicpCisKKyAgICAgICAgICAgICAg
ICBpZiBmcmFtZS5maW46CisgICAgICAgICAgICAgICAgICAgICMgVW5mcmFnbWVudGVkIGZyYW1l
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1vbi5pc19jb250cm9sX29wY29kZShmcmFt
ZS5vcGNvZGUpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGZyYW1lLnBheWxvYWQp
ID4gMTI1KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEludmFsaWRGcmFtZUV4Y2Vw
dGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXBwbGljYXRpb24gZGF0YSBzaXpl
IG9mIGNvbnRyb2wgZnJhbWVzIG11c3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcxMjUgYnl0ZXMgb3IgbGVzcycpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2lu
YWxfb3Bjb2RlID0gZnJhbWUub3Bjb2RlCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBm
cmFtZS5wYXlsb2FkCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
IyBTdGFydCBvZiBmcmFnbWVudGF0aW9uIGZyYW1lCisKKyAgICAgICAgICAgICAgICAgICAgaWYg
Y29tbW9uLmlzX2NvbnRyb2xfb3Bjb2RlKGZyYW1lLm9wY29kZSk6CisgICAgICAgICAgICAgICAg
ICAgICAgICByYWlzZSBJbnZhbGlkRnJhbWVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ0NvbnRyb2wgZnJhbWVzIG11c3Qgbm90IGJlIGZyYWdtZW50ZWQnKQorCisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX29yaWdpbmFsX29wY29kZSA9IGZyYW1lLm9wY29kZQorICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9yZWNlaXZlZF9mcmFnbWVudHMuYXBwZW5kKGZyYW1lLnBh
eWxvYWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHNl
bGYuX29yaWdpbmFsX29wY29kZSA9PSBjb21tb24uT1BDT0RFX1RFWFQ6CisgICAgICAgICAgICAg
ICAgIyBUaGUgV2ViU29ja2V0IHByb3RvY29sIHNlY3Rpb24gNC40IHNwZWNpZmllcyB0aGF0IGlu
dmFsaWQKKyAgICAgICAgICAgICAgICAjIGNoYXJhY3RlcnMgbXVzdCBiZSByZXBsYWNlZCB3aXRo
IFUrZmZmZCBSRVBMQUNFTUVOVAorICAgICAgICAgICAgICAgICMgQ0hBUkFDVEVSLgorICAgICAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UuZGVjb2Rl
KCd1dGYtOCcpCisgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciwgZToK
KyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW52YWxpZFVURjhFeGNlcHRpb24oZSkKKyAgICAg
ICAgICAgIGVsaWYgc2VsZi5fb3JpZ2luYWxfb3Bjb2RlID09IGNvbW1vbi5PUENPREVfQklOQVJZ
OgorICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlCisgICAgICAgICAgICBlbGlmIHNlbGYu
X29yaWdpbmFsX29wY29kZSA9PSBjb21tb24uT1BDT0RFX0NMT1NFOgorICAgICAgICAgICAgICAg
IHNlbGYuX3JlcXVlc3QuY2xpZW50X3Rlcm1pbmF0ZWQgPSBUcnVlCisKKyAgICAgICAgICAgICAg
ICAjIFN0YXR1cyBjb2RlIGlzIG9wdGlvbmFsLiBXZSBjYW4gaGF2ZSBzdGF0dXMgcmVhc29uIG9u
bHkgaWYgd2UKKyAgICAgICAgICAgICAgICAjIGhhdmUgc3RhdHVzIGNvZGUuIFN0YXR1cyByZWFz
b24gY2FuIGJlIGVtcHR5IHN0cmluZy4gU28sCisgICAgICAgICAgICAgICAgIyBhbGxvd2VkIGNh
c2VzIGFyZQorICAgICAgICAgICAgICAgICMgLSBubyBhcHBsaWNhdGlvbiBkYXRhOiBubyBjb2Rl
IG5vIHJlYXNvbgorICAgICAgICAgICAgICAgICMgLSAyIG9jdGV0IG9mIGFwcGxpY2F0aW9uIGRh
dGE6IGhhcyBjb2RlIGJ1dCBubyByZWFzb24KKyAgICAgICAgICAgICAgICAjIC0gMyBvciBtb3Jl
IG9jdGV0IG9mIGFwcGxpY2F0aW9uIGRhdGE6IGJvdGggY29kZSBhbmQgcmVhc29uCisgICAgICAg
ICAgICAgICAgaWYgbGVuKG1lc3NhZ2UpID09IDE6CisgICAgICAgICAgICAgICAgICAgIHJhaXNl
IEludmFsaWRGcmFtZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICdJZiBhIGNs
b3NlIGZyYW1lIGhhcyBzdGF0dXMgY29kZSwgdGhlIGxlbmd0aCBvZiAnCisgICAgICAgICAgICAg
ICAgICAgICAgICAnc3RhdHVzIGNvZGUgbXVzdCBiZSAyIG9jdGV0JykKKyAgICAgICAgICAgICAg
ICBlbGlmIGxlbihtZXNzYWdlKSA+PSAyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXF1
ZXN0LndzX2Nsb3NlX2NvZGUgPSBzdHJ1Y3QudW5wYWNrKAorICAgICAgICAgICAgICAgICAgICAg
ICAgJyFIJywgbWVzc2FnZVswOjJdKVswXQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXF1
ZXN0LndzX2Nsb3NlX3JlYXNvbiA9IG1lc3NhZ2VbMjpdLmRlY29kZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICd1dGYtOCcsICdyZXBsYWNlJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5f
bG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIGNsb3NlIGZy
YW1lIChjb2RlPSVkLCByZWFzb249JXIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3JlcXVlc3Qud3NfY2xvc2VfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jl
cXVlc3Qud3NfY2xvc2VfcmVhc29uKQorCisgICAgICAgICAgICAgICAgIyBEcmFpbiBqdW5rIGRh
dGEgYWZ0ZXIgdGhlIGNsb3NlIGZyYW1lIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICBz
ZWxmLl9kcmFpbl9yZWNlaXZlZF9kYXRhKCkKKworICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Jl
cXVlc3Quc2VydmVyX3Rlcm1pbmF0ZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dl
ci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAgICAgICAgICdSZWNlaXZlZCBhY2sgZm9yIHNlcnZl
ci1pbml0aWF0ZWQgY2xvc2luZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAnaGFuZHNoYWtl
JykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgICAgIHNl
bGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIGNsaWVudC1p
bml0aWF0ZWQgY2xvc2luZyBoYW5kc2hha2UnKQorCisgICAgICAgICAgICAgICAgY29kZSA9IGNv
bW1vbi5TVEFUVVNfTk9STUFMX0NMT1NVUkUKKyAgICAgICAgICAgICAgICByZWFzb24gPSAnJwor
ICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fcmVxdWVzdCwgJ19kaXNwYXRjaGVyJyk6
CisgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXIgPSBzZWxmLl9yZXF1ZXN0Ll9kaXNwYXRj
aGVyCisgICAgICAgICAgICAgICAgICAgIGNvZGUsIHJlYXNvbiA9IGRpc3BhdGNoZXIucGFzc2l2
ZV9jbG9zaW5nX2hhbmRzaGFrZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVl
c3QpCisgICAgICAgICAgICAgICAgc2VsZi5fc2VuZF9jbG9zaW5nX2hhbmRzaGFrZShjb2RlLCBy
ZWFzb24pCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAg
ICAgICAgICAnU2VudCBhY2sgZm9yIGNsaWVudC1pbml0aWF0ZWQgY2xvc2luZyBoYW5kc2hha2Un
KQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBlbGlmIHNlbGYuX29y
aWdpbmFsX29wY29kZSA9PSBjb21tb24uT1BDT0RFX1BJTkc6CisgICAgICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gc2VsZi5fcmVxdWVzdC5vbl9waW5nX2hh
bmRsZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgaGFuZGxlcjoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXIoc2VsZi5fcmVxdWVzdCwgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBl
OgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgc2VsZi5fc2VuZF9w
b25nKG1lc3NhZ2UpCisgICAgICAgICAgICBlbGlmIHNlbGYuX29yaWdpbmFsX29wY29kZSA9PSBj
b21tb24uT1BDT0RFX1BPTkc6CisgICAgICAgICAgICAgICAgIyBUT0RPKHR5b3NoaW5vKTogQWRk
IHBpbmcgdGltZW91dCBoYW5kbGluZy4KKworICAgICAgICAgICAgICAgIGluZmxpZ2h0X3Bpbmdz
ID0gZGVxdWUoKQorCisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYm9keSA9IHNlbGYu
X3BpbmdfcXVldWUucG9wbGVmdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3Rl
ZF9ib2R5ID09IG1lc3NhZ2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmZsaWdo
dF9waW5ncyBjb250YWlucyBwaW5ncyBpZ25vcmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICMgb3RoZXIgcGVlci4gSnVzdCBmb3JnZXQgdGhlbS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdQaW5nICVyIGlzIGFja2VkICglZCBwaW5ncyB3ZXJlIGlnbm9yZWQpJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYm9keSwgbGVuKGluZmxpZ2h0
X3BpbmdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZsaWdodF9w
aW5ncy5hcHBlbmQoZXhwZWN0ZWRfYm9keSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElu
ZGV4RXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSByZWNlaXZlZCBwb25n
IHdhcyB1bnNvbGljaXRlZCBwb25nLiBLZWVwIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAg
IyBwaW5nIHF1ZXVlIGFzIGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGluZ19x
dWV1ZSA9IGluZmxpZ2h0X3BpbmdzCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2dn
ZXIuZGVidWcoJ1JlY2VpdmVkIGEgdW5zb2xpY2l0ZWQgcG9uZycpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVyID0gc2VsZi5fcmVxdWVzdC5vbl9wb25nX2hhbmRsZXIKKyAgICAgICAgICAgICAg
ICAgICAgaWYgaGFuZGxlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIoc2VsZi5f
cmVxdWVzdCwgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAg
ICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgICAg
ICBwYXNzCisKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9uKAorICAgICAgICAg
ICAgICAgICAgICAnT3Bjb2RlICVkIGlzIG5vdCBzdXBwb3J0ZWQnICUgc2VsZi5fb3JpZ2luYWxf
b3Bjb2RlKQorCisgICAgZGVmIF9zZW5kX2Nsb3NpbmdfaGFuZHNoYWtlKHNlbGYsIGNvZGUsIHJl
YXNvbik6CisgICAgICAgIGlmIGNvZGUgPj0gKDEgPDwgMTYpIG9yIGNvZGUgPCAwOgorICAgICAg
ICAgICAgcmFpc2UgQmFkT3BlcmF0aW9uRXhjZXB0aW9uKCdTdGF0dXMgY29kZSBpcyBvdXQgb2Yg
cmFuZ2UnKQorCisgICAgICAgIGVuY29kZWRfcmVhc29uID0gcmVhc29uLmVuY29kZSgndXRmLTgn
KQorICAgICAgICBpZiBsZW4oZW5jb2RlZF9yZWFzb24pICsgMiA+IDEyNToKKyAgICAgICAgICAg
IHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnQXBwbGljYXRp
b24gZGF0YSBzaXplIG9mIGNsb3NlIGZyYW1lcyBtdXN0IGJlIDEyNSBieXRlcyBvciAnCisgICAg
ICAgICAgICAgICAgJ2xlc3MnKQorCisgICAgICAgIGZyYW1lID0gY3JlYXRlX2Nsb3NlX2ZyYW1l
KAorICAgICAgICAgICAgc3RydWN0LnBhY2soJyFIJywgY29kZSkgKyBlbmNvZGVkX3JlYXNvbiwK
KyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubWFza19zZW5kLAorICAgICAgICAgICAgc2VsZi5f
b3B0aW9ucy5vdXRnb2luZ19mcmFtZV9maWx0ZXJzKQorCisgICAgICAgIHNlbGYuX3JlcXVlc3Qu
c2VydmVyX3Rlcm1pbmF0ZWQgPSBUcnVlCisKKyAgICAgICAgc2VsZi5fd3JpdGUoZnJhbWUpCisK
KyAgICBkZWYgY2xvc2VfY29ubmVjdGlvbihzZWxmLCBjb2RlPWNvbW1vbi5TVEFUVVNfTk9STUFM
X0NMT1NVUkUsIHJlYXNvbj0nJyk6CisgICAgICAgICIiIkNsb3NlcyBhIFdlYlNvY2tldCBjb25u
ZWN0aW9uLiIiIgorCisgICAgICAgIGlmIHNlbGYuX3JlcXVlc3Quc2VydmVyX3Rlcm1pbmF0ZWQ6
CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAgICAgJ1JlcXVl
c3RlZCBjbG9zZV9jb25uZWN0aW9uIGJ1dCBzZXJ2ZXIgaXMgYWxyZWFkeSB0ZXJtaW5hdGVkJykK
KyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX3NlbmRfY2xvc2luZ19oYW5kc2hh
a2UoY29kZSwgcmVhc29uKQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1NlbnQgc2VydmVy
LWluaXRpYXRlZCBjbG9zaW5nIGhhbmRzaGFrZScpCisKKyAgICAgICAgaWYgKGNvZGUgPT0gY29t
bW9uLlNUQVRVU19HT0lOR19BV0FZIG9yCisgICAgICAgICAgICBjb2RlID09IGNvbW1vbi5TVEFU
VVNfUFJPVE9DT0xfRVJST1IpOgorICAgICAgICAgICAgIyBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ug
dG8gd2FpdCBmb3IgYSBjbG9zZSBmcmFtZSBpZiB0aGUgcmVhc29uIGlzCisgICAgICAgICAgICAj
IHByb3RvY29sIGVycm9yIG9yIHRoYXQgdGhlIHNlcnZlciBpcyBnb2luZyBhd2F5LiBGb3Igc29t
ZSBvZgorICAgICAgICAgICAgIyBvdGhlciByZWFzb25zLCBpdCBtaWdodCBub3QgbWFrZSBzZW5z
ZSB0byB3YWl0IGZvciBhIGNsb3NlIGZyYW1lLAorICAgICAgICAgICAgIyBidXQgaXQncyBub3Qg
Y2xlYXIsIHlldC4KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgVE9ETyh1a2FpKTog
Mi4gd2FpdCB1bnRpbCB0aGUgL2NsaWVudCB0ZXJtaW5hdGVkLyBmbGFnIGhhcyBiZWVuIHNldCwK
KyAgICAgICAgIyBvciB1bnRpbCBhIHNlcnZlci1kZWZpbmVkIHRpbWVvdXQgZXhwaXJlcy4KKyAg
ICAgICAgIworICAgICAgICAjIEZvciBub3csIHdlIGV4cGVjdCByZWNlaXZpbmcgY2xvc2luZyBo
YW5kc2hha2UgcmlnaHQgYWZ0ZXIgc2VuZGluZworICAgICAgICAjIG91dCBjbG9zaW5nIGhhbmRz
aGFrZS4KKyAgICAgICAgbWVzc2FnZSA9IHNlbGYucmVjZWl2ZV9tZXNzYWdlKCkKKyAgICAgICAg
aWYgbWVzc2FnZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25UZXJt
aW5hdGVkRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdEaWRuXCd0IHJlY2VpdmUgdmFsaWQg
YWNrIGZvciBjbG9zaW5nIGhhbmRzaGFrZScpCisgICAgICAgICMgVE9ETzogMy4gY2xvc2UgdGhl
IFdlYlNvY2tldCBjb25uZWN0aW9uLgorICAgICAgICAjIG5vdGU6IG1vZF9weXRob24gQ29ubmVj
dGlvbiAobXBfY29ubikgZG9lc24ndCBoYXZlIGNsb3NlIG1ldGhvZC4KKworICAgIGRlZiBzZW5k
X3Bpbmcoc2VsZiwgYm9keT0nJyk6CisgICAgICAgIGlmIGxlbihib2R5KSA+IDEyNToKKyAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgJ0FwcGxpY2F0aW9uIGRh
dGEgc2l6ZSBvZiBjb250cm9sIGZyYW1lcyBtdXN0IGJlIDEyNSBieXRlcyBvciAnCisgICAgICAg
ICAgICAgICAgJ2xlc3MnKQorICAgICAgICBmcmFtZSA9IGNyZWF0ZV9waW5nX2ZyYW1lKAorICAg
ICAgICAgICAgYm9keSwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubWFza19zZW5kLAorICAg
ICAgICAgICAgc2VsZi5fb3B0aW9ucy5vdXRnb2luZ19mcmFtZV9maWx0ZXJzKQorICAgICAgICBz
ZWxmLl93cml0ZShmcmFtZSkKKworICAgICAgICBzZWxmLl9waW5nX3F1ZXVlLmFwcGVuZChib2R5
KQorCisgICAgZGVmIF9zZW5kX3Bvbmcoc2VsZiwgYm9keSk6CisgICAgICAgIGlmIGxlbihib2R5
KSA+IDEyNToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAg
J0FwcGxpY2F0aW9uIGRhdGEgc2l6ZSBvZiBjb250cm9sIGZyYW1lcyBtdXN0IGJlIDEyNSBieXRl
cyBvciAnCisgICAgICAgICAgICAgICAgJ2xlc3MnKQorICAgICAgICBmcmFtZSA9IGNyZWF0ZV9w
b25nX2ZyYW1lKAorICAgICAgICAgICAgYm9keSwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
bWFza19zZW5kLAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5vdXRnb2luZ19mcmFtZV9maWx0
ZXJzKQorICAgICAgICBzZWxmLl93cml0ZShmcmFtZSkKKworICAgIGRlZiBfZHJhaW5fcmVjZWl2
ZWRfZGF0YShzZWxmKToKKyAgICAgICAgIiIiRHJhaW5zIHVucmVhZCBkYXRhIGluIHRoZSByZWNl
aXZlIGJ1ZmZlciB0byBhdm9pZCBzZW5kaW5nIG91dCBUQ1AKKyAgICAgICAgUlNUIHBhY2tldC4g
VGhpcyBpcyBiZWNhdXNlIHdoZW4gZGVmbGF0ZS1zdHJlYW0gaXMgZW5hYmxlZCwgc29tZQorICAg
ICAgICBERUZMQVRFIGJsb2NrIGZvciBmbHVzaGluZyBkYXRhIG1heSBmb2xsb3cgYSBjbG9zZSBm
cmFtZS4gSWYgYW55IGRhdGEKKyAgICAgICAgcmVtYWlucyBpbiB0aGUgcmVjZWl2ZSBidWZmZXIg
b2YgYSBzb2NrZXQgd2hlbiB0aGUgc29ja2V0IGlzIGNsb3NlZCwKKyAgICAgICAgaXQgc2VuZHMg
b3V0IFRDUCBSU1QgcGFja2V0IHRvIHRoZSBvdGhlciBwZWVyLgorCisgICAgICAgIFNpbmNlIG1v
ZF9weXRob24ncyBtcF9jb25uIG9iamVjdCBkb2Vzbid0IHN1cHBvcnQgbm9uLWJsb2NraW5nIHJl
YWQsCisgICAgICAgIHdlIHBlcmZvcm0gdGhpcyBvbmx5IHdoZW4gcHl3ZWJzb2NrZXQgaXMgcnVu
bmluZyBpbiBzdGFuZGFsb25lIG1vZGUuCisgICAgICAgICIiIgorCisgICAgICAgICMgSWYgc2Vs
Zi5fb3B0aW9ucy5kZWZsYXRlX3N0cmVhbSBpcyB0cnVlLCBzZWxmLl9yZXF1ZXN0IGlzCisgICAg
ICAgICMgRGVmbGF0ZVJlcXVlc3QsIHNvIHdlIGNhbiBnZXQgd3JhcHBlZCByZXF1ZXN0IG9iamVj
dCBieQorICAgICAgICAjIHNlbGYuX3JlcXVlc3QuX3JlcXVlc3QuCisgICAgICAgICMKKyAgICAg
ICAgIyBPbmx5IF9TdGFuZGFsb25lUmVxdWVzdCBoYXMgX2RyYWluX3JlY2VpdmVkX2RhdGEgbWV0
aG9kLgorICAgICAgICBpZiAoc2VsZi5fb3B0aW9ucy5kZWZsYXRlX3N0cmVhbSBhbmQKKyAgICAg
ICAgICAgICgnX2RyYWluX3JlY2VpdmVkX2RhdGEnIGluIGRpcihzZWxmLl9yZXF1ZXN0Ll9yZXF1
ZXN0KSkpOgorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC5fcmVxdWVzdC5fZHJhaW5fcmVjZWl2
ZWRfZGF0YSgpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2NvbW1v
bi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2Rf
cHl3ZWJzb2NrZXQvY29tbW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhNjcwYmI0MmVlYjE1MjYzODE5ODk5
NzdmZDI3NGMzMDNiZGM0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2NvbW1vbi5weQpAQCAt
MCwwICsxLDE3OSBAQAorIyBDb3B5cmlnaHQgMjAxMiwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisj
IGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIyBDb25zdGFudHMgaW5kaWNhdGlu
ZyBXZWJTb2NrZXQgcHJvdG9jb2wgdmVyc2lvbi4KK1ZFUlNJT05fSElYSUU3NSA9IC0xCitWRVJT
SU9OX0hZQkkwMCA9IDAKK1ZFUlNJT05fSFlCSTAxID0gMQorVkVSU0lPTl9IWUJJMDIgPSAyCitW
RVJTSU9OX0hZQkkwMyA9IDIKK1ZFUlNJT05fSFlCSTA0ID0gNAorVkVSU0lPTl9IWUJJMDUgPSA1
CitWRVJTSU9OX0hZQkkwNiA9IDYKK1ZFUlNJT05fSFlCSTA3ID0gNworVkVSU0lPTl9IWUJJMDgg
PSA4CitWRVJTSU9OX0hZQkkwOSA9IDgKK1ZFUlNJT05fSFlCSTEwID0gOAorVkVSU0lPTl9IWUJJ
MTEgPSA4CitWRVJTSU9OX0hZQkkxMiA9IDgKK1ZFUlNJT05fSFlCSTEzID0gMTMKK1ZFUlNJT05f
SFlCSTE0ID0gMTMKK1ZFUlNJT05fSFlCSTE1ID0gMTMKK1ZFUlNJT05fSFlCSTE2ID0gMTMKK1ZF
UlNJT05fSFlCSTE3ID0gMTMKKworIyBDb25zdGFudHMgaW5kaWNhdGluZyBXZWJTb2NrZXQgcHJv
dG9jb2wgbGF0ZXN0IHZlcnNpb24uCitWRVJTSU9OX0hZQklfTEFURVNUID0gVkVSU0lPTl9IWUJJ
MTMKKworIyBQb3J0IG51bWJlcnMKK0RFRkFVTFRfV0VCX1NPQ0tFVF9QT1JUID0gODAKK0RFRkFV
TFRfV0VCX1NPQ0tFVF9TRUNVUkVfUE9SVCA9IDQ0MworCisjIFNjaGVtZXMKK1dFQl9TT0NLRVRf
U0NIRU1FID0gJ3dzJworV0VCX1NPQ0tFVF9TRUNVUkVfU0NIRU1FID0gJ3dzcycKKworIyBGcmFt
ZSBvcGNvZGVzIGRlZmluZWQgaW4gdGhlIHNwZWMuCitPUENPREVfQ09OVElOVUFUSU9OID0gMHgw
CitPUENPREVfVEVYVCA9IDB4MQorT1BDT0RFX0JJTkFSWSA9IDB4MgorT1BDT0RFX0NMT1NFID0g
MHg4CitPUENPREVfUElORyA9IDB4OQorT1BDT0RFX1BPTkcgPSAweGEKKworIyBVVUlEcyB1c2Vk
IGJ5IEh5QmkgMDQgYW5kIGxhdGVyIG9wZW5pbmcgaGFuZHNoYWtlIGFuZCBmcmFtZSBtYXNraW5n
LgorV0VCU09DS0VUX0FDQ0VQVF9VVUlEID0gJzI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIw
REM4NUIxMScKKworIyBPcGVuaW5nIGhhbmRzaGFrZSBoZWFkZXIgbmFtZXMgYW5kIGV4cGVjdGVk
IHZhbHVlcy4KK1VQR1JBREVfSEVBREVSID0gJ1VwZ3JhZGUnCitXRUJTT0NLRVRfVVBHUkFERV9U
WVBFID0gJ3dlYnNvY2tldCcKK1dFQlNPQ0tFVF9VUEdSQURFX1RZUEVfSElYSUU3NSA9ICdXZWJT
b2NrZXQnCitDT05ORUNUSU9OX0hFQURFUiA9ICdDb25uZWN0aW9uJworVVBHUkFERV9DT05ORUNU
SU9OX1RZUEUgPSAnVXBncmFkZScKK0hPU1RfSEVBREVSID0gJ0hvc3QnCitPUklHSU5fSEVBREVS
ID0gJ09yaWdpbicKK1NFQ19XRUJTT0NLRVRfT1JJR0lOX0hFQURFUiA9ICdTZWMtV2ViU29ja2V0
LU9yaWdpbicKK1NFQ19XRUJTT0NLRVRfS0VZX0hFQURFUiA9ICdTZWMtV2ViU29ja2V0LUtleScK
K1NFQ19XRUJTT0NLRVRfQUNDRVBUX0hFQURFUiA9ICdTZWMtV2ViU29ja2V0LUFjY2VwdCcKK1NF
Q19XRUJTT0NLRVRfVkVSU0lPTl9IRUFERVIgPSAnU2VjLVdlYlNvY2tldC1WZXJzaW9uJworU0VD
X1dFQlNPQ0tFVF9QUk9UT0NPTF9IRUFERVIgPSAnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcKK1NF
Q19XRUJTT0NLRVRfRVhURU5TSU9OU19IRUFERVIgPSAnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25z
JworU0VDX1dFQlNPQ0tFVF9EUkFGVF9IRUFERVIgPSAnU2VjLVdlYlNvY2tldC1EcmFmdCcKK1NF
Q19XRUJTT0NLRVRfS0VZMV9IRUFERVIgPSAnU2VjLVdlYlNvY2tldC1LZXkxJworU0VDX1dFQlNP
Q0tFVF9LRVkyX0hFQURFUiA9ICdTZWMtV2ViU29ja2V0LUtleTInCitTRUNfV0VCU09DS0VUX0xP
Q0FUSU9OX0hFQURFUiA9ICdTZWMtV2ViU29ja2V0LUxvY2F0aW9uJworCisjIEV4dGVuc2lvbnMK
K0RFRkxBVEVfU1RSRUFNX0VYVEVOU0lPTiA9ICdkZWZsYXRlLXN0cmVhbScKK0RFRkxBVEVfRlJB
TUVfRVhURU5TSU9OID0gJ2RlZmxhdGUtZnJhbWUnCitYX1dFQktJVF9ERUZMQVRFX0ZSQU1FX0VY
VEVOU0lPTiA9ICd4LXdlYmtpdC1kZWZsYXRlLWZyYW1lJworCisjIFN0YXR1cyBjb2RlcworIyBD
b2RlIFNUQVRVU19OT19TVEFUVVNfUkVDRUlWRUQsIFNUQVRVU19BQk5PUk1BTF9DTE9TVVJFLCBh
bmQKKyMgU1RBVFVTX1RMU19IQU5EU0hBS0UgYXJlIHBzZXVkbyBjb2RlcyB0byBpbmRpY2F0ZSBz
cGVjaWZpYyBlcnJvciBjYXNlcy4KKyMgQ291bGQgbm90IGJlIHVzZWQgZm9yIGNvZGVzIGluIGFj
dHVhbCBjbG9zaW5nIGZyYW1lcy4KKyMgQXBwbGljYXRpb24gbGV2ZWwgZXJyb3JzIG11c3QgdXNl
IGNvZGVzIGluIHRoZSByYW5nZQorIyBTVEFUVVNfVVNFUl9SRUdJU1RFUkVEX0JBU0UgdG8gU1RB
VFVTX1VTRVJfUFJJVkFURV9NQVguIFRoZSBjb2RlcyBpbiB0aGUKKyMgcmFuZ2UgU1RBVFVTX1VT
RVJfUkVHSVNURVJFRF9CQVNFIHRvIFNUQVRVU19VU0VSX1JFR0lTVEVSRURfTUFYIGFyZSBtYW5h
Z2VkCisjIGJ5IElBTkEuIFVzdWFsbHkgYXBwbGljYXRpb24gbXVzdCBkZWZpbmUgdXNlciBwcm90
b2NvbCBsZXZlbCBlcnJvcnMgaW4gdGhlCisjIHJhbmdlIFNUQVRVU19VU0VSX1BSSVZBVEVfQkFT
RSB0byBTVEFUVVNfVVNFUl9QUklWQVRFX01BWC4KK1NUQVRVU19OT1JNQUxfQ0xPU1VSRSA9IDEw
MDAKK1NUQVRVU19HT0lOR19BV0FZID0gMTAwMQorU1RBVFVTX1BST1RPQ09MX0VSUk9SID0gMTAw
MgorU1RBVFVTX1VOU1VQUE9SVEVEX0RBVEEgPSAxMDAzCitTVEFUVVNfTk9fU1RBVFVTX1JFQ0VJ
VkVEID0gMTAwNQorU1RBVFVTX0FCTk9STUFMX0NMT1NVUkUgPSAxMDA2CitTVEFUVVNfSU5WQUxJ
RF9GUkFNRV9QQVlMT0FEX0RBVEEgPSAxMDA3CitTVEFUVVNfUE9MSUNZX1ZJT0xBVElPTiA9IDEw
MDgKK1NUQVRVU19NRVNTQUdFX1RPT19CSUcgPSAxMDA5CitTVEFUVVNfTUFOREFUT1JZX0VYVEVO
U0lPTiA9IDEwMTAKK1NUQVRVU19JTlRFUk5BTF9TRVJWRVJfRVJST1IgPSAxMDExCitTVEFUVVNf
VExTX0hBTkRTSEFLRSA9IDEwMTUKK1NUQVRVU19VU0VSX1JFR0lTVEVSRURfQkFTRSA9IDMwMDAK
K1NUQVRVU19VU0VSX1JFR0lTVEVSRURfTUFYID0gMzk5OQorU1RBVFVTX1VTRVJfUFJJVkFURV9C
QVNFID0gNDAwMAorU1RBVFVTX1VTRVJfUFJJVkFURV9NQVggPSA0OTk5CisjIEZvbGxvd2luZyBk
ZWZpbml0aW9ucyBhcmUgYWxpYXNlcyB0byBrZWVwIGNvbXBhdGliaWxpdHkuIEFwcGxpY2F0aW9u
cyBtdXN0CisjIG5vdCB1c2UgdGhlc2Ugb2Jzb2xldGVkIGRlZmluaXRpb25zIGFueW1vcmUuCitT
VEFUVVNfTk9STUFMID0gU1RBVFVTX05PUk1BTF9DTE9TVVJFCitTVEFUVVNfVU5TVVBQT1JURUQg
PSBTVEFUVVNfVU5TVVBQT1JURURfREFUQQorU1RBVFVTX0NPREVfTk9UX0FWQUlMQUJMRSA9IFNU
QVRVU19OT19TVEFUVVNfUkVDRUlWRUQKK1NUQVRVU19BQk5PUk1BTF9DTE9TRSA9IFNUQVRVU19B
Qk5PUk1BTF9DTE9TVVJFCitTVEFUVVNfSU5WQUxJRF9GUkFNRV9QQVlMT0FEID0gU1RBVFVTX0lO
VkFMSURfRlJBTUVfUEFZTE9BRF9EQVRBCitTVEFUVVNfTUFOREFUT1JZX0VYVCA9IFNUQVRVU19N
QU5EQVRPUllfRVhURU5TSU9OCisKKyMgSFRUUCBzdGF0dXMgY29kZXMKK0hUVFBfU1RBVFVTX0JB
RF9SRVFVRVNUID0gNDAwCitIVFRQX1NUQVRVU19GT1JCSURERU4gPSA0MDMKK0hUVFBfU1RBVFVT
X05PVF9GT1VORCA9IDQwNAorCisKK2RlZiBpc19jb250cm9sX29wY29kZShvcGNvZGUpOgorICAg
IHJldHVybiAob3Bjb2RlID4+IDMpID09IDEKKworCitjbGFzcyBFeHRlbnNpb25QYXJhbWV0ZXIo
b2JqZWN0KToKKyAgICAiIiJIb2xkcyBpbmZvcm1hdGlvbiBhYm91dCBhbiBleHRlbnNpb24gd2hp
Y2ggaXMgZXhjaGFuZ2VkIG9uIGV4dGVuc2lvbgorICAgIG5lZ290aWF0aW9uIGluIG9wZW5pbmcg
aGFuZHNoYWtlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAg
ICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBDaGFuZ2Ug
dGhlIGRhdGEgc3RydWN0dXJlIHRvIG1vcmUgZWZmaWNpZW50IG9uZSBzdWNoCisgICAgICAgICMg
YXMgZGljdCB3aGVuIHRoZSBzcGVjIGNoYW5nZXMgdG8gc2F5IGxpa2UKKyAgICAgICAgIyAtIFBh
cmFtZXRlciBuYW1lcyBtdXN0IGJlIHVuaXF1ZQorICAgICAgICAjIC0gVGhlIG9yZGVyIG9mIHBh
cmFtZXRlcnMgaXMgbm90IHNpZ25pZmljYW50CisgICAgICAgIHNlbGYuX3BhcmFtZXRlcnMgPSBb
XQorCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAg
ICBkZWYgYWRkX3BhcmFtZXRlcihzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3Bh
cmFtZXRlcnMuYXBwZW5kKChuYW1lLCB2YWx1ZSkpCisKKyAgICBkZWYgZ2V0X3BhcmFtZXRlcnMo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wYXJhbWV0ZXJzCisKKyAgICBkZWYgZ2V0X3Bh
cmFtZXRlcl9uYW1lcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFtuYW1lIGZvciBuYW1lLCB1bnVz
ZWRfdmFsdWUgaW4gc2VsZi5fcGFyYW1ldGVyc10KKworICAgIGRlZiBoYXNfcGFyYW1ldGVyKHNl
bGYsIG5hbWUpOgorICAgICAgICBmb3IgcGFyYW1fbmFtZSwgcGFyYW1fdmFsdWUgaW4gc2VsZi5f
cGFyYW1ldGVyczoKKyAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgPT0gbmFtZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBnZXRf
cGFyYW1ldGVyX3ZhbHVlKHNlbGYsIG5hbWUpOgorICAgICAgICBmb3IgcGFyYW1fbmFtZSwgcGFy
YW1fdmFsdWUgaW4gc2VsZi5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGlmIHBhcmFtX25hbWUg
PT0gbmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1fdmFsdWUKKworCisjIHZpOnN0
cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvZGlzcGF0Y2gucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2Rpc3BhdGNo
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmFiMWViNGZiM2MzNjI4OWYzZTdjZDE5OTM4ZjQ0Njg2MTYxM2VhNTIK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3
ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2Rpc3BhdGNoLnB5CkBAIC0wLDAgKzEsMzgxIEBACisj
IENvcHlyaWdodCAyMDEyLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworCisiIiJEaXNwYXRjaCBXZWJTb2NrZXQgcmVxdWVzdC4KKyIiIgor
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQorCitmcm9tIG1vZF9weXdl
YnNvY2tldCBpbXBvcnQgY29tbW9uCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgaGFuZHNo
YWtlCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXNndXRpbAorZnJvbSBtb2RfcHl3ZWJz
b2NrZXQgaW1wb3J0IHN0cmVhbQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IHV0aWwKKwor
CitfU09VUkNFX1BBVEhfUEFUVEVSTiA9IHJlLmNvbXBpbGUocicoP2kpX3dzaFwucHkkJykKK19T
T1VSQ0VfU1VGRklYID0gJ193c2gucHknCitfRE9fRVhUUkFfSEFORFNIQUtFX0hBTkRMRVJfTkFN
RSA9ICd3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZScKK19UUkFOU0ZFUl9EQVRBX0hBTkRM
RVJfTkFNRSA9ICd3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEnCitfUEFTU0lWRV9DTE9TSU5HX0hB
TkRTSEFLRV9IQU5ETEVSX05BTUUgPSAoCisgICAgJ3dlYl9zb2NrZXRfcGFzc2l2ZV9jbG9zaW5n
X2hhbmRzaGFrZScpCisKKworY2xhc3MgRGlzcGF0Y2hFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAg
ICAiIiJFeGNlcHRpb24gaW4gZGlzcGF0Y2hpbmcgV2ViU29ja2V0IHJlcXVlc3QuIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgc3RhdHVzPWNvbW1vbi5IVFRQX1NUQVRVU19OT1Rf
Rk9VTkQpOgorICAgICAgICBzdXBlcihEaXNwYXRjaEV4Y2VwdGlvbiwgc2VsZikuX19pbml0X18o
bmFtZSkKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzdGF0dXMKKworCitkZWYgX2RlZmF1bHRfcGFz
c2l2ZV9jbG9zaW5nX2hhbmRzaGFrZV9oYW5kbGVyKHJlcXVlc3QpOgorICAgICIiIkRlZmF1bHQg
d2ViX3NvY2tldF9wYXNzaXZlX2Nsb3NpbmdfaGFuZHNoYWtlIGhhbmRsZXIuIiIiCisKKyAgICBy
ZXR1cm4gY29tbW9uLlNUQVRVU19OT1JNQUxfQ0xPU1VSRSwgJycKKworCitkZWYgX25vcm1hbGl6
ZV9wYXRoKHBhdGgpOgorICAgICIiIk5vcm1hbGl6ZSBwYXRoLgorCisgICAgQXJnczoKKyAgICAg
ICAgcGF0aDogdGhlIHBhdGggdG8gbm9ybWFsaXplLgorCisgICAgUGF0aCBpcyBjb252ZXJ0ZWQg
dG8gdGhlIGFic29sdXRlIHBhdGguCisgICAgVGhlIGlucHV0IHBhdGggY2FuIHVzZSBlaXRoZXIg
J1xcJyBvciAnLycgYXMgdGhlIHNlcGFyYXRvci4KKyAgICBUaGUgbm9ybWFsaXplZCBwYXRoIGFs
d2F5cyB1c2VzICcvJyByZWdhcmRsZXNzIG9mIHRoZSBwbGF0Zm9ybS4KKyAgICAiIiIKKworICAg
IHBhdGggPSBwYXRoLnJlcGxhY2UoJ1xcJywgb3MucGF0aC5zZXApCisgICAgcGF0aCA9IG9zLnBh
dGgucmVhbHBhdGgocGF0aCkKKyAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCdcXCcsICcvJykKKyAg
ICByZXR1cm4gcGF0aAorCisKK2RlZiBfY3JlYXRlX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVy
KGJhc2VfZGlyKToKKyAgICAiIiJSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyB0aGUg
cGF0aCBvZiBhIFdlYlNvY2tldCBoYW5kbGVyIHNvdXJjZQorICAgIGZpbGUgdG8gYSByZXNvdXJj
ZSBzdHJpbmcgYnkgcmVtb3ZpbmcgdGhlIHBhdGggdG8gdGhlIGJhc2UgZGlyZWN0b3J5IGZyb20K
KyAgICBpdHMgaGVhZCwgcmVtb3ZpbmcgX1NPVVJDRV9TVUZGSVggZnJvbSBpdHMgdGFpbCwgYW5k
IHJlcGxhY2luZyBwYXRoCisgICAgc2VwYXJhdG9ycyBpbiBpdCB3aXRoICcvJy4KKworICAgIEFy
Z3M6CisgICAgICAgIGJhc2VfZGlyOiB0aGUgcGF0aCB0byB0aGUgYmFzZSBkaXJlY3RvcnkuCisg
ICAgIiIiCisKKyAgICBiYXNlX2RpciA9IF9ub3JtYWxpemVfcGF0aChiYXNlX2RpcikKKworICAg
IGJhc2VfbGVuID0gbGVuKGJhc2VfZGlyKQorICAgIHN1ZmZpeF9sZW4gPSBsZW4oX1NPVVJDRV9T
VUZGSVgpCisKKyAgICBkZWYgY29udmVydGVyKHBhdGgpOgorICAgICAgICBpZiBub3QgcGF0aC5l
bmRzd2l0aChfU09VUkNFX1NVRkZJWCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAg
ICAjIF9ub3JtYWxpemVfcGF0aCBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgcmVzb2x2aW5nIHN5
bWxpbmsgYnJlYWtzCisgICAgICAgICMgZm9sbG93aW5nIHBhdGggY2hlY2suCisgICAgICAgIHBh
dGggPSBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQorICAgICAgICBpZiBub3QgcGF0aC5zdGFydHN3
aXRoKGJhc2VfZGlyKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBw
YXRoW2Jhc2VfbGVuOi1zdWZmaXhfbGVuXQorCisgICAgcmV0dXJuIGNvbnZlcnRlcgorCisKK2Rl
ZiBfZW51bWVyYXRlX2hhbmRsZXJfZmlsZV9wYXRocyhkaXJlY3RvcnkpOgorICAgICIiIlJldHVy
bnMgYSBnZW5lcmF0b3IgdGhhdCBlbnVtZXJhdGVzIFdlYlNvY2tldCBIYW5kbGVyIHNvdXJjZSBm
aWxlIG5hbWVzCisgICAgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAgICAiIiIKKworICAgIGZv
ciByb290LCB1bnVzZWRfZGlycywgZmlsZXMgaW4gb3Mud2FsayhkaXJlY3RvcnkpOgorICAgICAg
ICBmb3IgYmFzZSBpbiBmaWxlczoKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocm9v
dCwgYmFzZSkKKyAgICAgICAgICAgIGlmIF9TT1VSQ0VfUEFUSF9QQVRURVJOLnNlYXJjaChwYXRo
KToKKyAgICAgICAgICAgICAgICB5aWVsZCBwYXRoCisKKworY2xhc3MgX0hhbmRsZXJTdWl0ZShv
YmplY3QpOgorICAgICIiIkEgaGFuZGxlciBzdWl0ZSBob2xkZXIgY2xhc3MuIiIiCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgZG9fZXh0cmFfaGFuZHNoYWtlLCB0cmFuc2Zlcl9kYXRhLAorICAg
ICAgICAgICAgICAgICBwYXNzaXZlX2Nsb3NpbmdfaGFuZHNoYWtlKToKKyAgICAgICAgc2VsZi5k
b19leHRyYV9oYW5kc2hha2UgPSBkb19leHRyYV9oYW5kc2hha2UKKyAgICAgICAgc2VsZi50cmFu
c2Zlcl9kYXRhID0gdHJhbnNmZXJfZGF0YQorICAgICAgICBzZWxmLnBhc3NpdmVfY2xvc2luZ19o
YW5kc2hha2UgPSBwYXNzaXZlX2Nsb3NpbmdfaGFuZHNoYWtlCisKKworZGVmIF9zb3VyY2VfaGFu
ZGxlcl9maWxlKGhhbmRsZXJfZGVmaW5pdGlvbik6CisgICAgIiIiU291cmNlIGEgaGFuZGxlciBk
ZWZpbml0aW9uIHN0cmluZy4KKworICAgIEFyZ3M6CisgICAgICAgIGhhbmRsZXJfZGVmaW5pdGlv
bjogYSBzdHJpbmcgY29udGFpbmluZyBQeXRob24gc3RhdGVtZW50cyB0aGF0IGRlZmluZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgZnVuY3Rpb25zLgorICAgICIiIgorCisg
ICAgZ2xvYmFsX2RpYyA9IHt9CisgICAgdHJ5OgorICAgICAgICBleGVjIGhhbmRsZXJfZGVmaW5p
dGlvbiBpbiBnbG9iYWxfZGljCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmFpc2Ug
RGlzcGF0Y2hFeGNlcHRpb24oJ0Vycm9yIGluIHNvdXJjaW5nIGhhbmRsZXI6JyArCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCisgICAgcGFz
c2l2ZV9jbG9zaW5nX2hhbmRzaGFrZV9oYW5kbGVyID0gTm9uZQorICAgIHRyeToKKyAgICAgICAg
cGFzc2l2ZV9jbG9zaW5nX2hhbmRzaGFrZV9oYW5kbGVyID0gX2V4dHJhY3RfaGFuZGxlcigKKyAg
ICAgICAgICAgIGdsb2JhbF9kaWMsIF9QQVNTSVZFX0NMT1NJTkdfSEFORFNIQUtFX0hBTkRMRVJf
TkFNRSkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBwYXNzaXZlX2Nsb3NpbmdfaGFu
ZHNoYWtlX2hhbmRsZXIgPSAoCisgICAgICAgICAgICBfZGVmYXVsdF9wYXNzaXZlX2Nsb3Npbmdf
aGFuZHNoYWtlX2hhbmRsZXIpCisgICAgcmV0dXJuIF9IYW5kbGVyU3VpdGUoCisgICAgICAgIF9l
eHRyYWN0X2hhbmRsZXIoZ2xvYmFsX2RpYywgX0RPX0VYVFJBX0hBTkRTSEFLRV9IQU5ETEVSX05B
TUUpLAorICAgICAgICBfZXh0cmFjdF9oYW5kbGVyKGdsb2JhbF9kaWMsIF9UUkFOU0ZFUl9EQVRB
X0hBTkRMRVJfTkFNRSksCisgICAgICAgIHBhc3NpdmVfY2xvc2luZ19oYW5kc2hha2VfaGFuZGxl
cikKKworCitkZWYgX2V4dHJhY3RfaGFuZGxlcihkaWMsIG5hbWUpOgorICAgICIiIkV4dHJhY3Rz
IGEgY2FsbGFibGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZnJvbSB0aGUgZ2l2ZW4gZGljdGlv
bmFyeQorICAgIGRpYy4KKyAgICAiIiIKKworICAgIGlmIG5hbWUgbm90IGluIGRpYzoKKyAgICAg
ICAgcmFpc2UgRGlzcGF0Y2hFeGNlcHRpb24oJyVzIGlzIG5vdCBkZWZpbmVkLicgJSBuYW1lKQor
ICAgIGhhbmRsZXIgPSBkaWNbbmFtZV0KKyAgICBpZiBub3QgY2FsbGFibGUoaGFuZGxlcik6Cisg
ICAgICAgIHJhaXNlIERpc3BhdGNoRXhjZXB0aW9uKCclcyBpcyBub3QgY2FsbGFibGUuJyAlIG5h
bWUpCisgICAgcmV0dXJuIGhhbmRsZXIKKworCitjbGFzcyBEaXNwYXRjaGVyKG9iamVjdCk6Cisg
ICAgIiIiRGlzcGF0Y2hlcyBXZWJTb2NrZXQgcmVxdWVzdHMuCisKKyAgICBUaGlzIGNsYXNzIG1h
aW50YWlucyBhIG1hcCBmcm9tIHJlc291cmNlIG5hbWUgdG8gaGFuZGxlcnMuCisgICAgIiIiCisK
KyAgICBkZWYgX19pbml0X18oCisgICAgICAgIHNlbGYsIHJvb3RfZGlyLCBzY2FuX2Rpcj1Ob25l
LAorICAgICAgICBhbGxvd19oYW5kbGVyc19vdXRzaWRlX3Jvb3RfZGlyPVRydWUpOgorICAgICAg
ICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAg
IHJvb3RfZGlyOiBUaGUgZGlyZWN0b3J5IHdoZXJlIGhhbmRsZXIgZGVmaW5pdGlvbiBmaWxlcyBh
cmUKKyAgICAgICAgICAgICAgICAgICAgICBwbGFjZWQuCisgICAgICAgICAgICBzY2FuX2Rpcjog
VGhlIGRpcmVjdG9yeSB3aGVyZSBoYW5kbGVyIGRlZmluaXRpb24gZmlsZXMgYXJlCisgICAgICAg
ICAgICAgICAgICAgICAgc2VhcmNoZWQuIHNjYW5fZGlyIG11c3QgYmUgYSBkaXJlY3RvcnkgdW5k
ZXIgcm9vdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHJvb3RfZGlyIGl0
c2VsZi4gIElmIHNjYW5fZGlyIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgcm9vdF9k
aXIgaXMgdXNlZCBhcyBzY2FuX2Rpci4gc2Nhbl9kaXIgY2FuIGJlIHVzZWZ1bAorICAgICAgICAg
ICAgICAgICAgICAgIGluIHNhdmluZyBzY2FuIHRpbWUgd2hlbiByb290X2RpciBjb250YWlucyBt
YW55CisgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMuCisgICAgICAgICAgICBh
bGxvd19oYW5kbGVyc19vdXRzaWRlX3Jvb3RfZGlyOiBTY2FucyBoYW5kbGVyIGZpbGVzIGV2ZW4g
aWYgdGhlaXIKKyAgICAgICAgICAgICAgICAgICAgICBjYW5vbmljYWwgcGF0aCBpcyBub3QgdW5k
ZXIgcm9vdF9kaXIuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwu
Z2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX2hhbmRsZXJfc3VpdGVfbWFw
ID0ge30KKyAgICAgICAgc2VsZi5fc291cmNlX3dhcm5pbmdzID0gW10KKyAgICAgICAgaWYgc2Nh
bl9kaXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNjYW5fZGlyID0gcm9vdF9kaXIKKyAgICAgICAg
aWYgbm90IG9zLnBhdGgucmVhbHBhdGgoc2Nhbl9kaXIpLnN0YXJ0c3dpdGgoCisgICAgICAgICAg
ICAgICAgb3MucGF0aC5yZWFscGF0aChyb290X2RpcikpOgorICAgICAgICAgICAgcmFpc2UgRGlz
cGF0Y2hFeGNlcHRpb24oJ3NjYW5fZGlyOiVzIG11c3QgYmUgYSBkaXJlY3RvcnkgdW5kZXIgJwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jvb3RfZGlyOiVzLicgJSAoc2Nh
bl9kaXIsIHJvb3RfZGlyKSkKKyAgICAgICAgc2VsZi5fc291cmNlX2hhbmRsZXJfZmlsZXNfaW5f
ZGlyKAorICAgICAgICAgICAgcm9vdF9kaXIsIHNjYW5fZGlyLCBhbGxvd19oYW5kbGVyc19vdXRz
aWRlX3Jvb3RfZGlyKQorCisgICAgZGVmIGFkZF9yZXNvdXJjZV9wYXRoX2FsaWFzKHNlbGYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzX3Jlc291cmNlX3BhdGgsIGV4aXN0
aW5nX3Jlc291cmNlX3BhdGgpOgorICAgICAgICAiIiJBZGQgcmVzb3VyY2UgcGF0aCBhbGlhcy4K
KworICAgICAgICBPbmNlIGFkZGVkLCByZXF1ZXN0IHRvIGFsaWFzX3Jlc291cmNlX3BhdGggd291
bGQgYmUgaGFuZGxlZCBieQorICAgICAgICBoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yIGV4aXN0aW5n
X3Jlc291cmNlX3BhdGguCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGFsaWFzX3Jlc291
cmNlX3BhdGg6IGFsaWFzIHJlc291cmNlIHBhdGgKKyAgICAgICAgICAgIGV4aXN0aW5nX3Jlc291
cmNlX3BhdGg6IGV4aXN0aW5nIHJlc291cmNlIHBhdGgKKyAgICAgICAgIiIiCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGhhbmRsZXJfc3VpdGUgPSBzZWxmLl9oYW5kbGVyX3N1aXRlX21hcFtl
eGlzdGluZ19yZXNvdXJjZV9wYXRoXQorICAgICAgICAgICAgc2VsZi5faGFuZGxlcl9zdWl0ZV9t
YXBbYWxpYXNfcmVzb3VyY2VfcGF0aF0gPSBoYW5kbGVyX3N1aXRlCisgICAgICAgIGV4Y2VwdCBL
ZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIERpc3BhdGNoRXhjZXB0aW9uKCdObyBoYW5kbGVy
IGZvcjogJXInICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5n
X3Jlc291cmNlX3BhdGgpCisKKyAgICBkZWYgc291cmNlX3dhcm5pbmdzKHNlbGYpOgorICAgICAg
ICAiIiJSZXR1cm4gd2FybmluZ3MgaW4gc291cmNpbmcgaGFuZGxlcnMuIiIiCisKKyAgICAgICAg
cmV0dXJuIHNlbGYuX3NvdXJjZV93YXJuaW5ncworCisgICAgZGVmIGRvX2V4dHJhX2hhbmRzaGFr
ZShzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIiIiRG8gZXh0cmEgY2hlY2tpbmcgaW4gV2ViU29j
a2V0IGhhbmRzaGFrZS4KKworICAgICAgICBTZWxlY3QgYSBoYW5kbGVyIGJhc2VkIG9uIHJlcXVl
c3QudXJpIGFuZCBjYWxsIGl0cworICAgICAgICB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFr
ZSBmdW5jdGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxdWVzdDogbW9kX3B5
dGhvbiByZXF1ZXN0LgorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIERpc3BhdGNoRXhj
ZXB0aW9uOiB3aGVuIGhhbmRsZXIgd2FzIG5vdCBmb3VuZAorICAgICAgICAgICAgQWJvcnRlZEJ5
VXNlckV4Y2VwdGlvbjogd2hlbiB1c2VyIGhhbmRsZXIgYWJvcnQgY29ubmVjdGlvbgorICAgICAg
ICAgICAgSGFuZHNoYWtlRXhjZXB0aW9uOiB3aGVuIG9wZW5pbmcgaGFuZHNoYWtlIGZhaWxlZAor
ICAgICAgICAiIiIKKworICAgICAgICBoYW5kbGVyX3N1aXRlID0gc2VsZi5nZXRfaGFuZGxlcl9z
dWl0ZShyZXF1ZXN0LndzX3Jlc291cmNlKQorICAgICAgICBpZiBoYW5kbGVyX3N1aXRlIGlzIE5v
bmU6CisgICAgICAgICAgICByYWlzZSBEaXNwYXRjaEV4Y2VwdGlvbignTm8gaGFuZGxlciBmb3I6
ICVyJyAlIHJlcXVlc3Qud3NfcmVzb3VyY2UpCisgICAgICAgIGRvX2V4dHJhX2hhbmRzaGFrZV8g
PSBoYW5kbGVyX3N1aXRlLmRvX2V4dHJhX2hhbmRzaGFrZQorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBkb19leHRyYV9oYW5kc2hha2VfKHJlcXVlc3QpCisgICAgICAgIGV4Y2VwdCBoYW5kc2hh
a2UuQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAg
IGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICB1dGlsLnByZXBlbmRfbWVzc2FnZV90
b19leGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICclcyByYWlzZWQgZXhjZXB0aW9uIGZv
ciAlczogJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRE9fRVhUUkFfSEFORFNI
QUtFX0hBTkRMRVJfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lndz
X3Jlc291cmNlKSwKKyAgICAgICAgICAgICAgICAgICAgZSkKKyAgICAgICAgICAgIHJhaXNlIGhh
bmRzaGFrZS5IYW5kc2hha2VFeGNlcHRpb24oZSwgY29tbW9uLkhUVFBfU1RBVFVTX0ZPUkJJRERF
TikKKworICAgIGRlZiB0cmFuc2Zlcl9kYXRhKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICAiIiJM
ZXQgYSBoYW5kbGVyIHRyYW5zZmVyX2RhdGEgd2l0aCBhIFdlYlNvY2tldCBjbGllbnQuCisKKyAg
ICAgICAgU2VsZWN0IGEgaGFuZGxlciBiYXNlZCBvbiByZXF1ZXN0LndzX3Jlc291cmNlIGFuZCBj
YWxsIGl0cworICAgICAgICB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEgZnVuY3Rpb24uCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KKwor
ICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBEaXNwYXRjaEV4Y2VwdGlvbjogd2hlbiBoYW5k
bGVyIHdhcyBub3QgZm91bmQKKyAgICAgICAgICAgIEFib3J0ZWRCeVVzZXJFeGNlcHRpb246IHdo
ZW4gdXNlciBoYW5kbGVyIGFib3J0IGNvbm5lY3Rpb24KKyAgICAgICAgIiIiCisKKyAgICAgICAg
aGFuZGxlcl9zdWl0ZSA9IHNlbGYuZ2V0X2hhbmRsZXJfc3VpdGUocmVxdWVzdC53c19yZXNvdXJj
ZSkKKyAgICAgICAgaWYgaGFuZGxlcl9zdWl0ZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2Ug
RGlzcGF0Y2hFeGNlcHRpb24oJ05vIGhhbmRsZXIgZm9yOiAlcicgJSByZXF1ZXN0LndzX3Jlc291
cmNlKQorICAgICAgICB0cmFuc2Zlcl9kYXRhXyA9IGhhbmRsZXJfc3VpdGUudHJhbnNmZXJfZGF0
YQorICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBUZXJtaW5hdGUgdW5kZXJseWluZyBUQ1AgY29u
bmVjdGlvbiBpZiBwb3NzaWJsZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJhbnNmZXJf
ZGF0YV8ocmVxdWVzdCkKKyAgICAgICAgICAgIGlmIG5vdCByZXF1ZXN0LnNlcnZlcl90ZXJtaW5h
dGVkOgorICAgICAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5lY3Rpb24o
KQorICAgICAgICAjIENhdGNoIG5vbi1jcml0aWNhbCBleGNlcHRpb25zIHRoZSBoYW5kbGVyIGRp
ZG4ndCBoYW5kbGUuCisgICAgICAgIGV4Y2VwdCBoYW5kc2hha2UuQWJvcnRlZEJ5VXNlckV4Y2Vw
dGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnJXMnLCBlKQorICAgICAg
ICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IG1zZ3V0aWwuQmFkT3BlcmF0aW9uRXhjZXB0aW9u
LCBlOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCclcycsIGUpCisgICAgICAgICAg
ICByZXF1ZXN0LndzX3N0cmVhbS5jbG9zZV9jb25uZWN0aW9uKGNvbW1vbi5TVEFUVVNfQUJOT1JN
QUxfQ0xPU1VSRSkKKyAgICAgICAgZXhjZXB0IG1zZ3V0aWwuSW52YWxpZEZyYW1lRXhjZXB0aW9u
LCBlOgorICAgICAgICAgICAgIyBJbnZhbGlkRnJhbWVFeGNlcHRpb24gbXVzdCBiZSBjYXVnaHQg
YmVmb3JlCisgICAgICAgICAgICAjIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uIHRoYXQg
Y2F0Y2hlcyBJbnZhbGlkRnJhbWVFeGNlcHRpb24uCisgICAgICAgICAgICBzZWxmLl9sb2dnZXIu
ZGVidWcoJyVzJywgZSkKKyAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5l
Y3Rpb24oY29tbW9uLlNUQVRVU19QUk9UT0NPTF9FUlJPUikKKyAgICAgICAgZXhjZXB0IG1zZ3V0
aWwuVW5zdXBwb3J0ZWRGcmFtZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dl
ci5kZWJ1ZygnJXMnLCBlKQorICAgICAgICAgICAgcmVxdWVzdC53c19zdHJlYW0uY2xvc2VfY29u
bmVjdGlvbihjb21tb24uU1RBVFVTX1VOU1VQUE9SVEVEX0RBVEEpCisgICAgICAgIGV4Y2VwdCBz
dHJlYW0uSW52YWxpZFVURjhFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIu
ZGVidWcoJyVzJywgZSkKKyAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5l
Y3Rpb24oCisgICAgICAgICAgICAgICAgY29tbW9uLlNUQVRVU19JTlZBTElEX0ZSQU1FX1BBWUxP
QURfREFUQSkKKyAgICAgICAgZXhjZXB0IG1zZ3V0aWwuQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNl
cHRpb24sIGU6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJyVzJywgZSkKKyAgICAg
ICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHV0aWwucHJlcGVuZF9tZXNzYWdl
X3RvX2V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnJXMgcmFpc2VkIGV4Y2VwdGlvbiBmb3Ig
JXM6ICcgJSAoCisgICAgICAgICAgICAgICAgICAgIF9UUkFOU0ZFUl9EQVRBX0hBTkRMRVJfTkFN
RSwgcmVxdWVzdC53c19yZXNvdXJjZSksCisgICAgICAgICAgICAgICAgZSkKKyAgICAgICAgICAg
IHJhaXNlCisKKyAgICBkZWYgcGFzc2l2ZV9jbG9zaW5nX2hhbmRzaGFrZShzZWxmLCByZXF1ZXN0
KToKKyAgICAgICAgIiIiUHJlcGFyZSBjb2RlIGFuZCByZWFzb24gZm9yIHJlc3BvbmRpbmcgY2xp
ZW50IGluaXRpYXRlZCBjbG9zaW5nCisgICAgICAgIGhhbmRzaGFrZS4KKyAgICAgICAgIiIiCisK
KyAgICAgICAgaGFuZGxlcl9zdWl0ZSA9IHNlbGYuZ2V0X2hhbmRsZXJfc3VpdGUocmVxdWVzdC53
c19yZXNvdXJjZSkKKyAgICAgICAgaWYgaGFuZGxlcl9zdWl0ZSBpcyBOb25lOgorICAgICAgICAg
ICAgcmV0dXJuIF9kZWZhdWx0X3Bhc3NpdmVfY2xvc2luZ19oYW5kc2hha2VfaGFuZGxlcihyZXF1
ZXN0KQorICAgICAgICByZXR1cm4gaGFuZGxlcl9zdWl0ZS5wYXNzaXZlX2Nsb3NpbmdfaGFuZHNo
YWtlKHJlcXVlc3QpCisKKyAgICBkZWYgZ2V0X2hhbmRsZXJfc3VpdGUoc2VsZiwgcmVzb3VyY2Up
OgorICAgICAgICAiIiJSZXRyaWV2ZXMgdHdvIGhhbmRsZXJzIChvbmUgZm9yIGV4dHJhIGhhbmRz
aGFrZSBwcm9jZXNzaW5nLCBhbmQgb25lCisgICAgICAgIGZvciBkYXRhIHRyYW5zZmVyKSBmb3Ig
dGhlIGdpdmVuIHJlcXVlc3QgYXMgYSBIYW5kbGVyU3VpdGUgb2JqZWN0LgorICAgICAgICAiIiIK
KworICAgICAgICBmcmFnbWVudCA9IE5vbmUKKyAgICAgICAgaWYgJyMnIGluIHJlc291cmNlOgor
ICAgICAgICAgICAgcmVzb3VyY2UsIGZyYWdtZW50ID0gcmVzb3VyY2Uuc3BsaXQoJyMnLCAxKQor
ICAgICAgICBpZiAnPycgaW4gcmVzb3VyY2U6CisgICAgICAgICAgICByZXNvdXJjZSA9IHJlc291
cmNlLnNwbGl0KCc/JywgMSlbMF0KKyAgICAgICAgaGFuZGxlcl9zdWl0ZSA9IHNlbGYuX2hhbmRs
ZXJfc3VpdGVfbWFwLmdldChyZXNvdXJjZSkKKyAgICAgICAgaWYgaGFuZGxlcl9zdWl0ZSBhbmQg
ZnJhZ21lbnQ6CisgICAgICAgICAgICByYWlzZSBEaXNwYXRjaEV4Y2VwdGlvbignRnJhZ21lbnQg
aWRlbnRpZmllcnMgTVVTVCBOT1QgYmUgdXNlZCBvbiAnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnV2ViU29ja2V0IFVSSXMnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29tbW9uLkhUVFBfU1RBVFVTX0JBRF9SRVFVRVNUKQorICAgICAgICByZXR1
cm4gaGFuZGxlcl9zdWl0ZQorCisgICAgZGVmIF9zb3VyY2VfaGFuZGxlcl9maWxlc19pbl9kaXIo
CisgICAgICAgIHNlbGYsIHJvb3RfZGlyLCBzY2FuX2RpciwgYWxsb3dfaGFuZGxlcnNfb3V0c2lk
ZV9yb290X2Rpcik6CisgICAgICAgICIiIlNvdXJjZSBhbGwgdGhlIGhhbmRsZXIgc291cmNlIGZp
bGVzIGluIHRoZSBzY2FuX2RpciBkaXJlY3RvcnkuCisKKyAgICAgICAgVGhlIHJlc291cmNlIHBh
dGggaXMgZGV0ZXJtaW5lZCByZWxhdGl2ZSB0byByb290X2Rpci4KKyAgICAgICAgIiIiCisKKyAg
ICAgICAgIyBXZSBidWlsZCBhIG1hcCBmcm9tIHJlc291cmNlIHRvIGhhbmRsZXIgY29kZSBhc3N1
bWluZyB0aGF0IHRoZXJlJ3MKKyAgICAgICAgIyBvbmx5IG9uZSBwYXRoIGZyb20gcm9vdF9kaXIg
dG8gc2Nhbl9kaXIgYW5kIGl0IGNhbiBiZSBvYnRhaW5lZCBieQorICAgICAgICAjIGNvbXBhcmlu
ZyByZWFscGF0aCBvZiB0aGVtLgorCisgICAgICAgICMgSGVyZSB3ZSBjYW5ub3QgdXNlIGFic3Bh
dGguIFNlZQorICAgICAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMTYwMworCisgICAgICAgIGNvbnZlcnQgPSBfY3JlYXRlX3BhdGhfdG9fcmVzb3VyY2VfY29u
dmVydGVyKHJvb3RfZGlyKQorICAgICAgICBzY2FuX3JlYWxwYXRoID0gb3MucGF0aC5yZWFscGF0
aChzY2FuX2RpcikKKyAgICAgICAgcm9vdF9yZWFscGF0aCA9IG9zLnBhdGgucmVhbHBhdGgocm9v
dF9kaXIpCisgICAgICAgIGZvciBwYXRoIGluIF9lbnVtZXJhdGVfaGFuZGxlcl9maWxlX3BhdGhz
KHNjYW5fcmVhbHBhdGgpOgorICAgICAgICAgICAgaWYgKG5vdCBhbGxvd19oYW5kbGVyc19vdXRz
aWRlX3Jvb3RfZGlyIGFuZAorICAgICAgICAgICAgICAgIChub3Qgb3MucGF0aC5yZWFscGF0aChw
YXRoKS5zdGFydHN3aXRoKHJvb3RfcmVhbHBhdGgpKSk6CisgICAgICAgICAgICAgICAgc2VsZi5f
bG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgICAgICAgICAnQ2Fub25pY2FsIHBhdGggb2YgJXMg
aXMgbm90IHVuZGVyIHJvb3QgZGlyZWN0b3J5JyAlCisgICAgICAgICAgICAgICAgICAgIHBhdGgp
CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBoYW5kbGVyX3N1aXRlID0gX3NvdXJjZV9oYW5kbGVyX2ZpbGUob3BlbihwYXRoKS5yZWFk
KCkpCisgICAgICAgICAgICBleGNlcHQgRGlzcGF0Y2hFeGNlcHRpb24sIGU6CisgICAgICAgICAg
ICAgICAgc2VsZi5fc291cmNlX3dhcm5pbmdzLmFwcGVuZCgnJXM6ICVzJyAlIChwYXRoLCBlKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmVzb3VyY2UgPSBjb252ZXJ0
KHBhdGgpCisgICAgICAgICAgICBpZiByZXNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgICAg
IHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAgICAgJ1BhdGggdG8gcmVzb3Vy
Y2UgY29udmVyc2lvbiBvbiAlcyBmYWlsZWQnICUgcGF0aCkKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlcl9zdWl0ZV9tYXBbY29udmVydChwYXRoKV0gPSBo
YW5kbGVyX3N1aXRlCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2V4
dGVuc2lvbnMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2Nr
ZXQvbW9kX3B5d2Vic29ja2V0L2V4dGVuc2lvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2UzNzg0NjU4MTA0
YzY4MGI0ZmRiMjczYjIxYjljZWE0NjQ5MzA1MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvZXh0
ZW5zaW9ucy5weQpAQCAtMCwwICsxLDI2NSBAQAorIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIElu
Yy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworZnJvbSBt
b2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0
IHV0aWwKKworCitfYXZhaWxhYmxlX3Byb2Nlc3NvcnMgPSB7fQorCisKK2NsYXNzIEV4dGVuc2lv
blByb2Nlc3NvckludGVyZmFjZShvYmplY3QpOgorCisgICAgZGVmIGdldF9leHRlbnNpb25fcmVz
cG9uc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2V0dXBfc3RyZWFt
X29wdGlvbnMoc2VsZiwgc3RyZWFtX29wdGlvbnMpOgorICAgICAgICBwYXNzCisKKworY2xhc3Mg
RGVmbGF0ZVN0cmVhbUV4dGVuc2lvblByb2Nlc3NvcihFeHRlbnNpb25Qcm9jZXNzb3JJbnRlcmZh
Y2UpOgorICAgICIiIldlYlNvY2tldCBERUZMQVRFIHN0cmVhbSBleHRlbnNpb24gcHJvY2Vzc29y
LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICBzZWxmLl9s
b2dnZXIgPSB1dGlsLmdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBzZWxmLl9yZXF1
ZXN0ID0gcmVxdWVzdAorCisgICAgZGVmIGdldF9leHRlbnNpb25fcmVzcG9uc2Uoc2VsZik6Cisg
ICAgICAgIGlmIGxlbihzZWxmLl9yZXF1ZXN0LmdldF9wYXJhbWV0ZXJfbmFtZXMoKSkgIT0gMDoK
KyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAor
ICAgICAgICAgICAgJ0VuYWJsZSAlcyBleHRlbnNpb24nLCBjb21tb24uREVGTEFURV9TVFJFQU1f
RVhURU5TSU9OKQorCisgICAgICAgIHJldHVybiBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKGNv
bW1vbi5ERUZMQVRFX1NUUkVBTV9FWFRFTlNJT04pCisKKyAgICBkZWYgc2V0dXBfc3RyZWFtX29w
dGlvbnMoc2VsZiwgc3RyZWFtX29wdGlvbnMpOgorICAgICAgICBzdHJlYW1fb3B0aW9ucy5kZWZs
YXRlX3N0cmVhbSA9IFRydWUKKworCitfYXZhaWxhYmxlX3Byb2Nlc3NvcnNbY29tbW9uLkRFRkxB
VEVfU1RSRUFNX0VYVEVOU0lPTl0gPSAoCisgICAgRGVmbGF0ZVN0cmVhbUV4dGVuc2lvblByb2Nl
c3NvcikKKworCitjbGFzcyBEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IoRXh0ZW5zaW9u
UHJvY2Vzc29ySW50ZXJmYWNlKToKKyAgICAiIiJXZWJTb2NrZXQgUGVyLWZyYW1lIERFRkxBVEUg
ZXh0ZW5zaW9uIHByb2Nlc3Nvci4iIiIKKworICAgIF9XSU5ET1dfQklUU19QQVJBTSA9ICdtYXhf
d2luZG93X2JpdHMnCisgICAgX05PX0NPTlRFWFRfVEFLRU9WRVJfUEFSQU0gPSAnbm9fY29udGV4
dF90YWtlb3ZlcicKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0KToKKyAgICAgICAg
c2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisKKyAgICAgICAgc2Vs
Zi5fcmVxdWVzdCA9IHJlcXVlc3QKKworICAgICAgICBzZWxmLl9yZXNwb25zZV93aW5kb3dfYml0
cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcmVzcG9uc2Vfbm9fY29udGV4dF90YWtlb3ZlciA9IEZh
bHNlCisKKyAgICAgICAgIyBDb3VudGVycyBmb3Igc3RhdGlzdGljcy4KKworICAgICAgICAjIFRv
dGFsIG51bWJlciBvZiBvdXRnb2luZyBieXRlcyBzdXBwbGllZCB0byB0aGlzIGZpbHRlci4KKyAg
ICAgICAgc2VsZi5fdG90YWxfb3V0Z29pbmdfcGF5bG9hZF9ieXRlcyA9IDAKKyAgICAgICAgIyBU
b3RhbCBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byB0aGUgbmV0d29yayBhZnRlciBhcHBseWluZyB0
aGlzIGZpbHRlci4KKyAgICAgICAgc2VsZi5fdG90YWxfZmlsdGVyZWRfb3V0Z29pbmdfcGF5bG9h
ZF9ieXRlcyA9IDAKKworICAgICAgICAjIFRvdGFsIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCBm
cm9tIHRoZSBuZXR3b3JrLgorICAgICAgICBzZWxmLl90b3RhbF9pbmNvbWluZ19wYXlsb2FkX2J5
dGVzID0gMAorICAgICAgICAjIFRvdGFsIG51bWJlciBvZiBpbmNvbWluZyBieXRlcyBvYnRhaW5l
ZCBhZnRlciBhcHBseWluZyB0aGlzIGZpbHRlci4KKyAgICAgICAgc2VsZi5fdG90YWxfZmlsdGVy
ZWRfaW5jb21pbmdfcGF5bG9hZF9ieXRlcyA9IDAKKworICAgIGRlZiBnZXRfZXh0ZW5zaW9uX3Jl
c3BvbnNlKHNlbGYpOgorICAgICAgICAjIEFueSB1bmtub3duIHBhcmFtZXRlciB3aWxsIGJlIGp1
c3QgaWdub3JlZC4KKworICAgICAgICB3aW5kb3dfYml0cyA9IHNlbGYuX3JlcXVlc3QuZ2V0X3Bh
cmFtZXRlcl92YWx1ZSgKKyAgICAgICAgICAgIHNlbGYuX1dJTkRPV19CSVRTX1BBUkFNKQorICAg
ICAgICBub19jb250ZXh0X3Rha2VvdmVyID0gc2VsZi5fcmVxdWVzdC5oYXNfcGFyYW1ldGVyKAor
ICAgICAgICAgICAgc2VsZi5fTk9fQ09OVEVYVF9UQUtFT1ZFUl9QQVJBTSkKKyAgICAgICAgaWYg
KG5vX2NvbnRleHRfdGFrZW92ZXIgYW5kCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LmdldF9w
YXJhbWV0ZXJfdmFsdWUoCisgICAgICAgICAgICAgICAgc2VsZi5fTk9fQ09OVEVYVF9UQUtFT1ZF
Ul9QQVJBTSkgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAg
ICBpZiB3aW5kb3dfYml0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICB3aW5kb3dfYml0cyA9IGludCh3aW5kb3dfYml0cykKKyAgICAgICAgICAgIGV4Y2Vw
dCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAg
ICBpZiB3aW5kb3dfYml0cyA8IDggb3Igd2luZG93X2JpdHMgPiAxNToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgICAgIHNlbGYuX2RlZmxhdGVyID0gdXRpbC5fUkZDMTk3OURl
ZmxhdGVyKAorICAgICAgICAgICAgd2luZG93X2JpdHMsIG5vX2NvbnRleHRfdGFrZW92ZXIpCisK
KyAgICAgICAgc2VsZi5faW5mbGF0ZXIgPSB1dGlsLl9SRkMxOTc5SW5mbGF0ZXIoKQorCisgICAg
ICAgIHNlbGYuX2NvbXByZXNzX291dGdvaW5nID0gVHJ1ZQorCisgICAgICAgIHJlc3BvbnNlID0g
Y29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihzZWxmLl9yZXF1ZXN0Lm5hbWUoKSkKKworICAgICAg
ICBpZiBzZWxmLl9yZXNwb25zZV93aW5kb3dfYml0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IHJlc3BvbnNlLmFkZF9wYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgc2VsZi5fV0lORE9XX0JJ
VFNfUEFSQU0sIHN0cihzZWxmLl9yZXNwb25zZV93aW5kb3dfYml0cykpCisgICAgICAgIGlmIHNl
bGYuX3Jlc3BvbnNlX25vX2NvbnRleHRfdGFrZW92ZXI6CisgICAgICAgICAgICByZXNwb25zZS5h
ZGRfcGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIHNlbGYuX05PX0NPTlRFWFRfVEFLRU9WRVJf
UEFSQU0sIE5vbmUpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAg
J0VuYWJsZSAlcyBleHRlbnNpb24gKCcKKyAgICAgICAgICAgICdyZXF1ZXN0OiB3aW5kb3dfYml0
cz0lczsgbm9fY29udGV4dF90YWtlb3Zlcj0lciwgJworICAgICAgICAgICAgJ3Jlc3BvbnNlOiB3
aW5kb3dfd2JpdHM9JXM7IG5vX2NvbnRleHRfdGFrZW92ZXI9JXIpJyAlCisgICAgICAgICAgICAo
c2VsZi5fcmVxdWVzdC5uYW1lKCksCisgICAgICAgICAgICAgd2luZG93X2JpdHMsCisgICAgICAg
ICAgICAgbm9fY29udGV4dF90YWtlb3ZlciwKKyAgICAgICAgICAgICBzZWxmLl9yZXNwb25zZV93
aW5kb3dfYml0cywKKyAgICAgICAgICAgICBzZWxmLl9yZXNwb25zZV9ub19jb250ZXh0X3Rha2Vv
dmVyKSkKKworICAgICAgICByZXR1cm4gcmVzcG9uc2UKKworICAgIGRlZiBzZXR1cF9zdHJlYW1f
b3B0aW9ucyhzZWxmLCBzdHJlYW1fb3B0aW9ucyk6CisKKyAgICAgICAgY2xhc3MgX091dGdvaW5n
RmlsdGVyKG9iamVjdCk6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQp
OgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcmVudCA9IHBhcmVudAorCisgICAgICAgICAgICBk
ZWYgZmlsdGVyKHNlbGYsIGZyYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJlbnQuX291
dGdvaW5nX2ZpbHRlcihmcmFtZSkKKworICAgICAgICBjbGFzcyBfSW5jb21pbmdGaWx0ZXIob2Jq
ZWN0KToKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCk6CisgICAgICAg
ICAgICAgICAgc2VsZi5fcGFyZW50ID0gcGFyZW50CisKKyAgICAgICAgICAgIGRlZiBmaWx0ZXIo
c2VsZiwgZnJhbWUpOgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcmVudC5faW5jb21pbmdfZmls
dGVyKGZyYW1lKQorCisgICAgICAgIHN0cmVhbV9vcHRpb25zLm91dGdvaW5nX2ZyYW1lX2ZpbHRl
cnMuYXBwZW5kKAorICAgICAgICAgICAgX091dGdvaW5nRmlsdGVyKHNlbGYpKQorICAgICAgICBz
dHJlYW1fb3B0aW9ucy5pbmNvbWluZ19mcmFtZV9maWx0ZXJzLmluc2VydCgKKyAgICAgICAgICAg
IDAsIF9JbmNvbWluZ0ZpbHRlcihzZWxmKSkKKworICAgIGRlZiBzZXRfcmVzcG9uc2Vfd2luZG93
X2JpdHMoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9yZXNwb25zZV93aW5kb3dfYml0cyA9
IHZhbHVlCisKKyAgICBkZWYgc2V0X3Jlc3BvbnNlX25vX2NvbnRleHRfdGFrZW92ZXIoc2VsZiwg
dmFsdWUpOgorICAgICAgICBzZWxmLl9yZXNwb25zZV9ub19jb250ZXh0X3Rha2VvdmVyID0gdmFs
dWUKKworICAgIGRlZiBlbmFibGVfb3V0Z29pbmdfY29tcHJlc3Npb24oc2VsZik6CisgICAgICAg
IHNlbGYuX2NvbXByZXNzX291dGdvaW5nID0gVHJ1ZQorCisgICAgZGVmIGRpc2FibGVfb3V0Z29p
bmdfY29tcHJlc3Npb24oc2VsZik6CisgICAgICAgIHNlbGYuX2NvbXByZXNzX291dGdvaW5nID0g
RmFsc2UKKworICAgIGRlZiBfb3V0Z29pbmdfZmlsdGVyKHNlbGYsIGZyYW1lKToKKyAgICAgICAg
IiIiVHJhbnNmb3JtIG91dGdvaW5nIGZyYW1lcy4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9ubHkg
YnkKKyAgICAgICAgYW4gX091dGdvaW5nRmlsdGVyIGluc3RhbmNlLgorICAgICAgICAiIiIKKwor
ICAgICAgICBvcmlnaW5hbF9wYXlsb2FkX3NpemUgPSBsZW4oZnJhbWUucGF5bG9hZCkKKyAgICAg
ICAgc2VsZi5fdG90YWxfb3V0Z29pbmdfcGF5bG9hZF9ieXRlcyArPSBvcmlnaW5hbF9wYXlsb2Fk
X3NpemUKKworICAgICAgICBpZiAobm90IHNlbGYuX2NvbXByZXNzX291dGdvaW5nIG9yCisgICAg
ICAgICAgICBjb21tb24uaXNfY29udHJvbF9vcGNvZGUoZnJhbWUub3Bjb2RlKSk6CisgICAgICAg
ICAgICBzZWxmLl90b3RhbF9maWx0ZXJlZF9vdXRnb2luZ19wYXlsb2FkX2J5dGVzICs9ICgKKyAg
ICAgICAgICAgICAgICBvcmlnaW5hbF9wYXlsb2FkX3NpemUpCisgICAgICAgICAgICByZXR1cm4K
KworICAgICAgICBmcmFtZS5wYXlsb2FkID0gc2VsZi5fZGVmbGF0ZXIuZmlsdGVyKGZyYW1lLnBh
eWxvYWQpCisgICAgICAgIGZyYW1lLnJzdjEgPSAxCisKKyAgICAgICAgZmlsdGVyZWRfcGF5bG9h
ZF9zaXplID0gbGVuKGZyYW1lLnBheWxvYWQpCisgICAgICAgIHNlbGYuX3RvdGFsX2ZpbHRlcmVk
X291dGdvaW5nX3BheWxvYWRfYnl0ZXMgKz0gZmlsdGVyZWRfcGF5bG9hZF9zaXplCisKKyAgICAg
ICAgIyBQcmludCBpbmYgd2hlbiByYXRpbyBpcyBub3QgYXZhaWxhYmxlLgorICAgICAgICByYXRp
byA9IGZsb2F0KCdpbmYnKQorICAgICAgICBhdmVyYWdlX3JhdGlvID0gZmxvYXQoJ2luZicpCisg
ICAgICAgIGlmIG9yaWdpbmFsX3BheWxvYWRfc2l6ZSAhPSAwOgorICAgICAgICAgICAgcmF0aW8g
PSBmbG9hdChmaWx0ZXJlZF9wYXlsb2FkX3NpemUpIC8gb3JpZ2luYWxfcGF5bG9hZF9zaXplCisg
ICAgICAgIGlmIHNlbGYuX3RvdGFsX291dGdvaW5nX3BheWxvYWRfYnl0ZXMgIT0gMDoKKyAgICAg
ICAgICAgIGF2ZXJhZ2VfcmF0aW8gPSAoCisgICAgICAgICAgICAgICAgZmxvYXQoc2VsZi5fdG90
YWxfZmlsdGVyZWRfb3V0Z29pbmdfcGF5bG9hZF9ieXRlcykgLworICAgICAgICAgICAgICAgIHNl
bGYuX3RvdGFsX291dGdvaW5nX3BheWxvYWRfYnl0ZXMpCisgICAgICAgIHNlbGYuX2xvZ2dlci5k
ZWJ1ZygKKyAgICAgICAgICAgICdPdXRnb2luZyBjb21wcmVzcyByYXRpbzogJWYgKGF2ZXJhZ2U6
ICVmKScgJQorICAgICAgICAgICAgKHJhdGlvLCBhdmVyYWdlX3JhdGlvKSkKKworICAgIGRlZiBf
aW5jb21pbmdfZmlsdGVyKHNlbGYsIGZyYW1lKToKKyAgICAgICAgIiIiVHJhbnNmb3JtIGluY29t
aW5nIGZyYW1lcy4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9ubHkgYnkKKyAgICAgICAgYW4gX0lu
Y29taW5nRmlsdGVyIGluc3RhbmNlLgorICAgICAgICAiIiIKKworICAgICAgICByZWNlaXZlZF9w
YXlsb2FkX3NpemUgPSBsZW4oZnJhbWUucGF5bG9hZCkKKyAgICAgICAgc2VsZi5fdG90YWxfaW5j
b21pbmdfcGF5bG9hZF9ieXRlcyArPSByZWNlaXZlZF9wYXlsb2FkX3NpemUKKworICAgICAgICBp
ZiBmcmFtZS5yc3YxICE9IDEgb3IgY29tbW9uLmlzX2NvbnRyb2xfb3Bjb2RlKGZyYW1lLm9wY29k
ZSk6CisgICAgICAgICAgICBzZWxmLl90b3RhbF9maWx0ZXJlZF9pbmNvbWluZ19wYXlsb2FkX2J5
dGVzICs9ICgKKyAgICAgICAgICAgICAgICByZWNlaXZlZF9wYXlsb2FkX3NpemUpCisgICAgICAg
ICAgICByZXR1cm4KKworICAgICAgICBmcmFtZS5wYXlsb2FkID0gc2VsZi5faW5mbGF0ZXIuZmls
dGVyKGZyYW1lLnBheWxvYWQpCisgICAgICAgIGZyYW1lLnJzdjEgPSAwCisKKyAgICAgICAgZmls
dGVyZWRfcGF5bG9hZF9zaXplID0gbGVuKGZyYW1lLnBheWxvYWQpCisgICAgICAgIHNlbGYuX3Rv
dGFsX2ZpbHRlcmVkX2luY29taW5nX3BheWxvYWRfYnl0ZXMgKz0gZmlsdGVyZWRfcGF5bG9hZF9z
aXplCisKKyAgICAgICAgIyBQcmludCBpbmYgd2hlbiByYXRpbyBpcyBub3QgYXZhaWxhYmxlLgor
ICAgICAgICByYXRpbyA9IGZsb2F0KCdpbmYnKQorICAgICAgICBhdmVyYWdlX3JhdGlvID0gZmxv
YXQoJ2luZicpCisgICAgICAgIGlmIHJlY2VpdmVkX3BheWxvYWRfc2l6ZSAhPSAwOgorICAgICAg
ICAgICAgcmF0aW8gPSBmbG9hdChyZWNlaXZlZF9wYXlsb2FkX3NpemUpIC8gZmlsdGVyZWRfcGF5
bG9hZF9zaXplCisgICAgICAgIGlmIHNlbGYuX3RvdGFsX2ZpbHRlcmVkX2luY29taW5nX3BheWxv
YWRfYnl0ZXMgIT0gMDoKKyAgICAgICAgICAgIGF2ZXJhZ2VfcmF0aW8gPSAoCisgICAgICAgICAg
ICAgICAgZmxvYXQoc2VsZi5fdG90YWxfaW5jb21pbmdfcGF5bG9hZF9ieXRlcykgLworICAgICAg
ICAgICAgICAgIHNlbGYuX3RvdGFsX2ZpbHRlcmVkX2luY29taW5nX3BheWxvYWRfYnl0ZXMpCisg
ICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICdJbmNvbWluZyBjb21wcmVz
cyByYXRpbzogJWYgKGF2ZXJhZ2U6ICVmKScgJQorICAgICAgICAgICAgKHJhdGlvLCBhdmVyYWdl
X3JhdGlvKSkKKworCitfYXZhaWxhYmxlX3Byb2Nlc3NvcnNbY29tbW9uLkRFRkxBVEVfRlJBTUVf
RVhURU5TSU9OXSA9ICgKKyAgICBEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IpCisKKwor
IyBBZGRpbmcgdmVuZG9yLXByZWZpeGVkIGRlZmxhdGUtZnJhbWUgZXh0ZW5zaW9uLgorIyBUT0RP
KGJhc2hpKTogUmVtb3ZlIHRoaXMgYWZ0ZXIgV2ViS2l0IHN0b3BzIHVzaW5nIHZlbmRlciBwcmVm
aXguCitfYXZhaWxhYmxlX3Byb2Nlc3NvcnNbY29tbW9uLlhfV0VCS0lUX0RFRkxBVEVfRlJBTUVf
RVhURU5TSU9OXSA9ICgKKyAgICBEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3IpCisKKwor
ZGVmIGdldF9leHRlbnNpb25fcHJvY2Vzc29yKGV4dGVuc2lvbl9yZXF1ZXN0KToKKyAgICBnbG9i
YWwgX2F2YWlsYWJsZV9wcm9jZXNzb3JzCisgICAgcHJvY2Vzc29yX2NsYXNzID0gX2F2YWlsYWJs
ZV9wcm9jZXNzb3JzLmdldChleHRlbnNpb25fcmVxdWVzdC5uYW1lKCkpCisgICAgaWYgcHJvY2Vz
c29yX2NsYXNzIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuIHByb2Nl
c3Nvcl9jbGFzcyhleHRlbnNpb25fcmVxdWVzdCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9t
b2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvX19p
bml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTBhMTc4MzE0NDQ0Y2M3Mjk3YTg4MjkwMzU4ZGRjYWNjMGEy
ZjI0MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19faW5pdF9fLnB5CkBAIC0w
LDAgKzEsMTE2IEBACisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJXZWJTb2NrZXQgb3BlbmluZyBo
YW5kc2hha2UgcHJvY2Vzc29yLiBUaGlzIGNsYXNzIHRyeSB0byBhcHBseSBhdmFpbGFibGUKK29w
ZW5pbmcgaGFuZHNoYWtlIHByb2Nlc3NvcnMgZm9yIGVhY2ggcHJvdG9jb2wgdmVyc2lvbiB1bnRp
bCBhIGNvbm5lY3Rpb24gaXMKK3N1Y2Nlc3NmdWxseSBlc3RhYmxpc2hlZC4KKyIiIgorCisKK2lt
cG9ydCBsb2dnaW5nCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zyb20g
bW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZSBpbXBvcnQgZHJhZnQ3NQorZnJvbSBtb2RfcHl3ZWJz
b2NrZXQuaGFuZHNoYWtlIGltcG9ydCBoeWJpMDAKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRz
aGFrZSBpbXBvcnQgaHliaQorIyBFeHBvcnQgQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbiwgSGFuZHNo
YWtlRXhjZXB0aW9uLCBhbmQgVmVyc2lvbkV4Y2VwdGlvbgorIyBzeW1ib2wgZnJvbSB0aGlzIG1v
ZHVsZS4KK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgQWJvcnRl
ZEJ5VXNlckV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGlt
cG9ydCBIYW5kc2hha2VFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5f
YmFzZSBpbXBvcnQgVmVyc2lvbkV4Y2VwdGlvbgorCisKK19MT0dHRVIgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKKworCitkZWYgZG9faGFuZHNoYWtlKHJlcXVlc3QsIGRpc3BhdGNoZXIs
IGFsbG93RHJhZnQ3NT1GYWxzZSwgc3RyaWN0PUZhbHNlKToKKyAgICAiIiJQZXJmb3JtcyBXZWJT
b2NrZXQgaGFuZHNoYWtlLgorCisgICAgQXJnczoKKyAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhv
biByZXF1ZXN0LgorICAgICAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyIChkaXNwYXRjaC5EaXNw
YXRjaGVyKS4KKyAgICAgICAgYWxsb3dEcmFmdDc1OiBhbGxvdyBkcmFmdCA3NSBoYW5kc2hha2Ug
cHJvdG9jb2wuCisgICAgICAgIHN0cmljdDogU3RyaWN0bHkgY2hlY2sgaGFuZHNoYWtlIHJlcXVl
c3QgaW4gZHJhZnQgNzUuCisgICAgICAgICAgICBEZWZhdWx0OiBGYWxzZS4gSWYgVHJ1ZSwgcmVx
dWVzdC5jb25uZWN0aW9uIG11c3QgcHJvdmlkZQorICAgICAgICAgICAgZ2V0X21lbW9yaXplZF9s
aW5lcyBtZXRob2QuCisKKyAgICBIYW5kc2hha2VyIHdpbGwgYWRkIGF0dHJpYnV0ZXMgc3VjaCBh
cyB3c19yZXNvdXJjZSBpbiBwZXJmb3JtaW5nCisgICAgaGFuZHNoYWtlLgorICAgICIiIgorCisg
ICAgX0xPR0dFUi5kZWJ1ZygnQ2xpZW50XCdzIG9wZW5pbmcgaGFuZHNoYWtlIHJlc291cmNlOiAl
cicsIHJlcXVlc3QudXJpKQorICAgICMgVG8gcHJpbnQgbWltZXRvb2xzLk1lc3NhZ2UgYXMgZXNj
YXBlZCBvbmUtbGluZSBzdHJpbmcsIHdlIGNvbnZlcnRzCisgICAgIyBoZWFkZXJzX2luIHRvIGRp
Y3Qgb2JqZWN0LiBXaXRob3V0IGNvbnZlcnNpb24sIGlmIHdlIHVzZSAlciwgaXQganVzdAorICAg
ICMgcHJpbnRzIHRoZSB0eXBlIGFuZCBhZGRyZXNzLCBhbmQgaWYgd2UgdXNlICVzLCBpdCBwcmlu
dHMgdGhlIG9yaWdpbmFsCisgICAgIyBoZWFkZXIgc3RyaW5nIGFzIG11bHRpcGxlIGxpbmVzLgor
ICAgICMKKyAgICAjIEJvdGggbWltZXRvb2xzLk1lc3NhZ2UgYW5kIE1wVGFibGVfVHlwZSBvZiBt
b2RfcHl0aG9uIGNhbiBiZQorICAgICMgY29udmVydGVkIHRvIGRpY3QuCisgICAgIworICAgICMg
bWltZXRvb2xzLk1lc3NhZ2UuX19zdHJfXyByZXR1cm5zIHRoZSBvcmlnaW5hbCBoZWFkZXIgc3Ry
aW5nLgorICAgICMgZGljdChtaW1ldG9vbHMuTWVzc2FnZSBvYmplY3QpIHJldHVybnMgdGhlIG1h
cCBmcm9tIGhlYWRlciBuYW1lcyB0bworICAgICMgaGVhZGVyIHZhbHVlcy4gV2hpbGUgTXBUYWJs
ZV9UeXBlIGRvZXNuJ3QgaGF2ZSBzdWNoIF9fc3RyX18gYnV0IGp1c3QKKyAgICAjIF9fcmVwcl9f
IHdoaWNoIGZvcm1hdHMgaXRzZWxmIGFzIHdlbGwgYXMgZGljdGlvbmFyeSBvYmplY3QuCisgICAg
X0xPR0dFUi5kZWJ1ZygKKyAgICAgICAgJ0NsaWVudFwncyBvcGVuaW5nIGhhbmRzaGFrZSBoZWFk
ZXJzOiAlcicsIGRpY3QocmVxdWVzdC5oZWFkZXJzX2luKSkKKworICAgIGhhbmRzaGFrZXJzID0g
W10KKyAgICBoYW5kc2hha2Vycy5hcHBlbmQoCisgICAgICAgICgnUkZDIDY0NTUnLCBoeWJpLkhh
bmRzaGFrZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikpKQorICAgIGhhbmRzaGFrZXJzLmFwcGVuZCgK
KyAgICAgICAgKCdIeUJpIDAwJywgaHliaTAwLkhhbmRzaGFrZXIocmVxdWVzdCwgZGlzcGF0Y2hl
cikpKQorICAgIGlmIGFsbG93RHJhZnQ3NToKKyAgICAgICAgaGFuZHNoYWtlcnMuYXBwZW5kKAor
ICAgICAgICAgICAgKCdIaXhpZSA3NScsIGRyYWZ0NzUuSGFuZHNoYWtlcihyZXF1ZXN0LCBkaXNw
YXRjaGVyLCBzdHJpY3QpKSkKKworICAgIGZvciBuYW1lLCBoYW5kc2hha2VyIGluIGhhbmRzaGFr
ZXJzOgorICAgICAgICBfTE9HR0VSLmRlYnVnKCdUcnlpbmcgcHJvdG9jb2wgdmVyc2lvbiAlcycs
IG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtl
KCkKKyAgICAgICAgICAgIF9MT0dHRVIuaW5mbygnRXN0YWJsaXNoZWQgKCVzIHByb3RvY29sKScs
IG5hbWUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IEhhbmRzaGFrZUV4Y2Vw
dGlvbiwgZToKKyAgICAgICAgICAgIF9MT0dHRVIuZGVidWcoCisgICAgICAgICAgICAgICAgJ0Zh
aWxlZCB0byBjb21wbGV0ZSBvcGVuaW5nIGhhbmRzaGFrZSBhcyAlcyBwcm90b2NvbDogJXInLAor
ICAgICAgICAgICAgICAgIG5hbWUsIGUpCisgICAgICAgICAgICBpZiBlLnN0YXR1czoKKyAgICAg
ICAgICAgICAgICByYWlzZSBlCisgICAgICAgIGV4Y2VwdCBBYm9ydGVkQnlVc2VyRXhjZXB0aW9u
LCBlOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IFZlcnNpb25FeGNlcHRpb24s
IGU6CisgICAgICAgICAgICByYWlzZQorCisgICAgIyBUT0RPKHRveW9zaGltKTogQWRkIGEgdGVz
dCB0byBjb3ZlciB0aGUgY2FzZSBhbGwgaGFuZHNoYWtlcnMgZmFpbC4KKyAgICByYWlzZSBIYW5k
c2hha2VFeGNlcHRpb24oCisgICAgICAgICdGYWlsZWQgdG8gY29tcGxldGUgb3BlbmluZyBoYW5k
c2hha2UgZm9yIGFsbCBhdmFpbGFibGUgcHJvdG9jb2xzJywKKyAgICAgICAgc3RhdHVzPWNvbW1v
bi5IVFRQX1NUQVRVU19CQURfUkVRVUVTVCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2Rf
cHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvX2Jhc2UucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGQ3YzMyZTM1MDczOTFhOTRlMzhmMzQyMmU3ZjYzZWJlYzhkZjlmNAotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNv
Y2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19iYXNlLnB5CkBAIC0wLDAgKzEsMzIzIEBA
CisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJDb21tb24gZnVuY3Rpb25zIGFuZCBleGNlcHRpb25z
IHVzZWQgYnkgV2ViU29ja2V0IG9wZW5pbmcgaGFuZHNoYWtlCitwcm9jZXNzb3JzLgorIiIiCisK
KworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2Nr
ZXQgaW1wb3J0IGh0dHBfaGVhZGVyX3V0aWwKKworCitjbGFzcyBBYm9ydGVkQnlVc2VyRXhjZXB0
aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIGZvciBhYm9ydGluZyBhIGNvbm5lY3Rp
b24gaW50ZW50aW9uYWxseS4KKworICAgIElmIHRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCBpbiBk
b19leHRyYV9oYW5kc2hha2UgaGFuZGxlciwgdGhlIGNvbm5lY3Rpb24KKyAgICB3aWxsIGJlIGFi
YW5kb25lZC4gTm8gb3RoZXIgV2ViU29ja2V0IG9yIEhUVFAoUykgaGFuZGxlciB3aWxsIGJlIGlu
dm9rZWQuCisKKyAgICBJZiB0aGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgaW4gdHJhbnNmZXJfZGF0
YV9oYW5kbGVyLCB0aGUgY29ubmVjdGlvbiB3aWxsCisgICAgYmUgY2xvc2VkIHdpdGhvdXQgY2xv
c2luZyBoYW5kc2hha2UuIE5vIG90aGVyIFdlYlNvY2tldCBvciBIVFRQKFMpIGhhbmRsZXIKKyAg
ICB3aWxsIGJlIGludm9rZWQuCisgICAgIiIiCisKKyAgICBwYXNzCisKKworY2xhc3MgSGFuZHNo
YWtlRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiVGhpcyBleGNlcHRpb24gd2lsbCBiZSBy
YWlzZWQgd2hlbiBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nCisgICAgV2ViU29j
a2V0IGluaXRpYWwgaGFuZHNoYWtlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IG5hbWUsIHN0YXR1cz1Ob25lKToKKyAgICAgICAgc3VwZXIoSGFuZHNoYWtlRXhjZXB0aW9uLCBz
ZWxmKS5fX2luaXRfXyhuYW1lKQorICAgICAgICBzZWxmLnN0YXR1cyA9IHN0YXR1cworCisKK2Ns
YXNzIFZlcnNpb25FeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAiIiJUaGlzIGV4Y2VwdGlvbiB3
aWxsIGJlIHJhaXNlZCB3aGVuIGEgdmVyc2lvbiBvZiBjbGllbnQgcmVxdWVzdCBkb2VzIG5vdAor
ICAgIG1hdGNoIHdpdGggdmVyc2lvbiB0aGUgc2VydmVyIHN1cHBvcnRzLgorICAgICIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHN1cHBvcnRlZF92ZXJzaW9ucz0nJyk6CisgICAg
ICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAg
ICAgc3VwcG9ydGVkX3ZlcnNpb246IGEgc3RyIG9iamVjdCB0byBzaG93IHN1cHBvcnRlZCBoeWJp
IHZlcnNpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICc4LCAxMycp
CisgICAgICAgICIiIgorICAgICAgICBzdXBlcihWZXJzaW9uRXhjZXB0aW9uLCBzZWxmKS5fX2lu
aXRfXyhuYW1lKQorICAgICAgICBzZWxmLnN1cHBvcnRlZF92ZXJzaW9ucyA9IHN1cHBvcnRlZF92
ZXJzaW9ucworCisKK2RlZiBnZXRfZGVmYXVsdF9wb3J0KGlzX3NlY3VyZSk6CisgICAgaWYgaXNf
c2VjdXJlOgorICAgICAgICByZXR1cm4gY29tbW9uLkRFRkFVTFRfV0VCX1NPQ0tFVF9TRUNVUkVf
UE9SVAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBjb21tb24uREVGQVVMVF9XRUJfU09DS0VU
X1BPUlQKKworCitkZWYgdmFsaWRhdGVfc3VicHJvdG9jb2woc3VicHJvdG9jb2wsIGhpeGllKToK
KyAgICAiIiJWYWxpZGF0ZSBhIHZhbHVlIGluIHN1YnByb3RvY29sIGZpZWxkcyBzdWNoIGFzIFdl
YlNvY2tldC1Qcm90b2NvbCwKKyAgICBTZWMtV2ViU29ja2V0LVByb3RvY29sLgorCisgICAgU2Vl
CisgICAgLSBSRkMgNjQ1NTogU2VjdGlvbiA0LjEuLCA0LjIuMi4sIGFuZCA0LjMuCisgICAgLSBI
eUJpIDAwOiBTZWN0aW9uIDQuMS4gT3BlbmluZyBoYW5kc2hha2UKKyAgICAtIEhpeGllIDc1OiBT
ZWN0aW9uIDQuMS4gSGFuZHNoYWtlCisgICAgIiIiCisKKyAgICBpZiBub3Qgc3VicHJvdG9jb2w6
CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbignSW52YWxpZCBzdWJwcm90b2NvbCBu
YW1lOiBlbXB0eScpCisgICAgaWYgaGl4aWU6CisgICAgICAgICMgUGFyYW1ldGVyIHNob3VsZCBi
ZSBpbiB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RS4KKyAgICAgICAgZm9yIGMgaW4gc3VicHJv
dG9jb2w6CisgICAgICAgICAgICBpZiBub3QgMHgyMCA8PSBvcmQoYykgPD0gMHg3ZToKKyAgICAg
ICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAg
ICdJbGxlZ2FsIGNoYXJhY3RlciBpbiBzdWJwcm90b2NvbCBuYW1lOiAlcicgJSBjKQorICAgIGVs
c2U6CisgICAgICAgICMgUGFyYW1ldGVyIHNob3VsZCBiZSBlbmNvZGVkIEhUVFAgdG9rZW4uCisg
ICAgICAgIHN0YXRlID0gaHR0cF9oZWFkZXJfdXRpbC5QYXJzaW5nU3RhdGUoc3VicHJvdG9jb2wp
CisgICAgICAgIHRva2VuID0gaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX3Rva2VuKHN0YXRlKQor
ICAgICAgICByZXN0ID0gaHR0cF9oZWFkZXJfdXRpbC5wZWVrKHN0YXRlKQorICAgICAgICAjIElm
IHxyZXN0fCBpcyBub3QgTm9uZSwgfHN1YnByb3RvY29sfCBpcyBub3Qgb25lIHRva2VuIG9yIGlu
dmFsaWQuIElmCisgICAgICAgICMgfHJlc3R8IGlzIE5vbmUsIHx0b2tlbnwgbXVzdCBub3QgYmUg
Tm9uZSBiZWNhdXNlIHxzdWJwcm90b2NvbHwgaXMKKyAgICAgICAgIyBjb25jYXRlbmF0aW9uIG9m
IHx0b2tlbnwgYW5kIHxyZXN0fCBhbmQgaXMgbm90IE5vbmUuCisgICAgICAgIGlmIHJlc3QgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oJ0ludmFsaWQg
bm9uLXRva2VuIHN0cmluZyBpbiBzdWJwcm90b2NvbCAnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ25hbWU6ICVyJyAlIHJlc3QpCisKKworZGVmIHBhcnNlX2hvc3RfaGVh
ZGVyKHJlcXVlc3QpOgorICAgIGZpZWxkcyA9IHJlcXVlc3QuaGVhZGVyc19pblsnSG9zdCddLnNw
bGl0KCc6JywgMSkKKyAgICBpZiBsZW4oZmllbGRzKSA9PSAxOgorICAgICAgICByZXR1cm4gZmll
bGRzWzBdLCBnZXRfZGVmYXVsdF9wb3J0KHJlcXVlc3QuaXNfaHR0cHMoKSkKKyAgICB0cnk6Cisg
ICAgICAgIHJldHVybiBmaWVsZHNbMF0sIGludChmaWVsZHNbMV0pCisgICAgZXhjZXB0IFZhbHVl
RXJyb3IsIGU6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbignSW52YWxpZCBwb3J0
IG51bWJlciBmb3JtYXQ6ICVyJyAlIGUpCisKKworZGVmIGZvcm1hdF9oZWFkZXIobmFtZSwgdmFs
dWUpOgorICAgIHJldHVybiAnJXM6ICVzXHJcbicgJSAobmFtZSwgdmFsdWUpCisKKworZGVmIGJ1
aWxkX2xvY2F0aW9uKHJlcXVlc3QpOgorICAgICIiIkJ1aWxkIFdlYlNvY2tldCBsb2NhdGlvbiBm
b3IgcmVxdWVzdC4iIiIKKyAgICBsb2NhdGlvbl9wYXJ0cyA9IFtdCisgICAgaWYgcmVxdWVzdC5p
c19odHRwcygpOgorICAgICAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoY29tbW9uLldFQl9TT0NL
RVRfU0VDVVJFX1NDSEVNRSkKKyAgICBlbHNlOgorICAgICAgICBsb2NhdGlvbl9wYXJ0cy5hcHBl
bmQoY29tbW9uLldFQl9TT0NLRVRfU0NIRU1FKQorICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZCgn
Oi8vJykKKyAgICBob3N0LCBwb3J0ID0gcGFyc2VfaG9zdF9oZWFkZXIocmVxdWVzdCkKKyAgICBj
b25uZWN0aW9uX3BvcnQgPSByZXF1ZXN0LmNvbm5lY3Rpb24ubG9jYWxfYWRkclsxXQorICAgIGlm
IHBvcnQgIT0gY29ubmVjdGlvbl9wb3J0OgorICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRp
b24oJ0hlYWRlci9jb25uZWN0aW9uIHBvcnQgbWlzbWF0Y2g6ICVkLyVkJyAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAocG9ydCwgY29ubmVjdGlvbl9wb3J0KSkKKyAgICBsb2Nh
dGlvbl9wYXJ0cy5hcHBlbmQoaG9zdCkKKyAgICBpZiAocG9ydCAhPSBnZXRfZGVmYXVsdF9wb3J0
KHJlcXVlc3QuaXNfaHR0cHMoKSkpOgorICAgICAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoJzon
KQorICAgICAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoc3RyKHBvcnQpKQorICAgIGxvY2F0aW9u
X3BhcnRzLmFwcGVuZChyZXF1ZXN0LnVyaSkKKyAgICByZXR1cm4gJycuam9pbihsb2NhdGlvbl9w
YXJ0cykKKworCitkZWYgZ2V0X21hbmRhdG9yeV9oZWFkZXIocmVxdWVzdCwga2V5KToKKyAgICB2
YWx1ZSA9IHJlcXVlc3QuaGVhZGVyc19pbi5nZXQoa2V5KQorICAgIGlmIHZhbHVlIGlzIE5vbmU6
CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbignSGVhZGVyICVzIGlzIG5vdCBkZWZp
bmVkJyAlIGtleSkKKyAgICByZXR1cm4gdmFsdWUKKworCitkZWYgdmFsaWRhdGVfbWFuZGF0b3J5
X2hlYWRlcihyZXF1ZXN0LCBrZXksIGV4cGVjdGVkX3ZhbHVlLCBmYWlsX3N0YXR1cz1Ob25lKToK
KyAgICB2YWx1ZSA9IGdldF9tYW5kYXRvcnlfaGVhZGVyKHJlcXVlc3QsIGtleSkKKworICAgIGlm
IHZhbHVlLmxvd2VyKCkgIT0gZXhwZWN0ZWRfdmFsdWUubG93ZXIoKToKKyAgICAgICAgcmFpc2Ug
SGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAgICAgICAgJ0V4cGVjdGVkICVyIGZvciBoZWFkZXIg
JXMgYnV0IGZvdW5kICVyIChjYXNlLWluc2Vuc2l0aXZlKScgJQorICAgICAgICAgICAgKGV4cGVj
dGVkX3ZhbHVlLCBrZXksIHZhbHVlKSwgc3RhdHVzPWZhaWxfc3RhdHVzKQorCisKK2RlZiBjaGVj
a19yZXF1ZXN0X2xpbmUocmVxdWVzdCk6CisgICAgIyA1LjEgMS4gVGhlIHRocmVlIGNoYXJhY3Rl
ciBVVEYtOCBzdHJpbmcgIkdFVCIuCisgICAgIyA1LjEgMi4gQSBVVEYtOC1lbmNvZGVkIFUrMDAy
MCBTUEFDRSBjaGFyYWN0ZXIgKDB4MjAgYnl0ZSkuCisgICAgaWYgcmVxdWVzdC5tZXRob2QgIT0g
J0dFVCc6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbignTWV0aG9kIGlzIG5vdCBH
RVQnKQorCisKK2RlZiBjaGVja19oZWFkZXJfbGluZXMocmVxdWVzdCwgbWFuZGF0b3J5X2hlYWRl
cnMpOgorICAgIGNoZWNrX3JlcXVlc3RfbGluZShyZXF1ZXN0KQorCisgICAgIyBUaGUgZXhwZWN0
ZWQgZmllbGQgbmFtZXMsIGFuZCB0aGUgbWVhbmluZyBvZiB0aGVpciBjb3JyZXNwb25kaW5nCisg
ICAgIyB2YWx1ZXMsIGFyZSBhcyBmb2xsb3dzLgorICAgICMgIHxVcGdyYWRlfCBhbmQgfENvbm5l
Y3Rpb258CisgICAgZm9yIGtleSwgZXhwZWN0ZWRfdmFsdWUgaW4gbWFuZGF0b3J5X2hlYWRlcnM6
CisgICAgICAgIHZhbGlkYXRlX21hbmRhdG9yeV9oZWFkZXIocmVxdWVzdCwga2V5LCBleHBlY3Rl
ZF92YWx1ZSkKKworCitkZWYgcGFyc2VfdG9rZW5fbGlzdChkYXRhKToKKyAgICAiIiJQYXJzZXMg
YSBoZWFkZXIgdmFsdWUgd2hpY2ggZm9sbG93cyAxI3Rva2VuIGFuZCByZXR1cm5zIHBhcnNlZCBl
bGVtZW50cworICAgIGFzIGEgbGlzdCBvZiBzdHJpbmdzLgorCisgICAgTGVhZGluZyBMV1NlcyBt
dXN0IGJlIHRyaW1tZWQuCisgICAgIiIiCisKKyAgICBzdGF0ZSA9IGh0dHBfaGVhZGVyX3V0aWwu
UGFyc2luZ1N0YXRlKGRhdGEpCisKKyAgICB0b2tlbl9saXN0ID0gW10KKworICAgIHdoaWxlIFRy
dWU6CisgICAgICAgIHRva2VuID0gaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX3Rva2VuKHN0YXRl
KQorICAgICAgICBpZiB0b2tlbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRva2VuX2xpc3Qu
YXBwZW5kKHRva2VuKQorCisgICAgICAgIGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9sd3Nlcyhz
dGF0ZSkKKworICAgICAgICBpZiBodHRwX2hlYWRlcl91dGlsLnBlZWsoc3RhdGUpIGlzIE5vbmU6
CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5vdCBodHRwX2hlYWRlcl91dGlsLmNv
bnN1bWVfc3RyaW5nKHN0YXRlLCAnLCcpOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhj
ZXB0aW9uKAorICAgICAgICAgICAgICAgICdFeHBlY3RlZCBhIGNvbW1hIGJ1dCBmb3VuZCAlcicg
JSBodHRwX2hlYWRlcl91dGlsLnBlZWsoc3RhdGUpKQorCisgICAgICAgIGh0dHBfaGVhZGVyX3V0
aWwuY29uc3VtZV9sd3NlcyhzdGF0ZSkKKworICAgIGlmIGxlbih0b2tlbl9saXN0KSA9PSAwOgor
ICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oJ05vIHZhbGlkIHRva2VuIGZvdW5kJykK
KworICAgIHJldHVybiB0b2tlbl9saXN0CisKKworZGVmIF9wYXJzZV9leHRlbnNpb25fcGFyYW0o
c3RhdGUsIGRlZmluaXRpb24sIGFsbG93X3F1b3RlZF9zdHJpbmcpOgorICAgIHBhcmFtX25hbWUg
PSBodHRwX2hlYWRlcl91dGlsLmNvbnN1bWVfdG9rZW4oc3RhdGUpCisKKyAgICBpZiBwYXJhbV9u
YW1lIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbignTm8gdmFsaWQg
cGFyYW1ldGVyIG5hbWUgZm91bmQnKQorCisgICAgaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX2x3
c2VzKHN0YXRlKQorCisgICAgaWYgbm90IGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9zdHJpbmco
c3RhdGUsICc9Jyk6CisgICAgICAgIGRlZmluaXRpb24uYWRkX3BhcmFtZXRlcihwYXJhbV9uYW1l
LCBOb25lKQorICAgICAgICByZXR1cm4KKworICAgIGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9s
d3NlcyhzdGF0ZSkKKworICAgIGlmIGFsbG93X3F1b3RlZF9zdHJpbmc6CisgICAgICAgICMgVE9E
Tyh0b3lvc2hpbSk6IEFkZCBjb2RlIHRvIHZhbGlkYXRlIHRoYXQgcGFyc2VkIHBhcmFtX3ZhbHVl
IGlzIHRva2VuCisgICAgICAgIHBhcmFtX3ZhbHVlID0gaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1l
X3Rva2VuX29yX3F1b3RlZF9zdHJpbmcoc3RhdGUpCisgICAgZWxzZToKKyAgICAgICAgcGFyYW1f
dmFsdWUgPSBodHRwX2hlYWRlcl91dGlsLmNvbnN1bWVfdG9rZW4oc3RhdGUpCisgICAgaWYgcGFy
YW1fdmFsdWUgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAg
ICAgICAgICAgJ05vIHZhbGlkIHBhcmFtZXRlciB2YWx1ZSBmb3VuZCBvbiB0aGUgcmlnaHQtaGFu
ZCBzaWRlIG9mICcKKyAgICAgICAgICAgICdwYXJhbWV0ZXIgJXInICUgcGFyYW1fbmFtZSkKKwor
ICAgIGRlZmluaXRpb24uYWRkX3BhcmFtZXRlcihwYXJhbV9uYW1lLCBwYXJhbV92YWx1ZSkKKwor
CitkZWYgX3BhcnNlX2V4dGVuc2lvbihzdGF0ZSwgYWxsb3dfcXVvdGVkX3N0cmluZyk6CisgICAg
ZXh0ZW5zaW9uX3Rva2VuID0gaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX3Rva2VuKHN0YXRlKQor
ICAgIGlmIGV4dGVuc2lvbl90b2tlbiBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihleHRlbnNpb25fdG9rZW4p
CisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBodHRwX2hlYWRlcl91dGlsLmNvbnN1bWVfbHdz
ZXMoc3RhdGUpCisKKyAgICAgICAgaWYgbm90IGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9zdHJp
bmcoc3RhdGUsICc7Jyk6CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGh0dHBfaGVhZGVy
X3V0aWwuY29uc3VtZV9sd3NlcyhzdGF0ZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBf
cGFyc2VfZXh0ZW5zaW9uX3BhcmFtKHN0YXRlLCBleHRlbnNpb24sIGFsbG93X3F1b3RlZF9zdHJp
bmcpCisgICAgICAgIGV4Y2VwdCBIYW5kc2hha2VFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBy
YWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBwYXJz
ZSBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMgaGVhZGVyOiAnCisgICAgICAgICAgICAgICAgJ0Zh
aWxlZCB0byBwYXJzZSBwYXJhbWV0ZXIgZm9yICVyICglciknICUKKyAgICAgICAgICAgICAgICAo
ZXh0ZW5zaW9uX3Rva2VuLCBlKSkKKworICAgIHJldHVybiBleHRlbnNpb24KKworCitkZWYgcGFy
c2VfZXh0ZW5zaW9ucyhkYXRhLCBhbGxvd19xdW90ZWRfc3RyaW5nPUZhbHNlKToKKyAgICAiIiJQ
YXJzZXMgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zIGhlYWRlciB2YWx1ZSByZXR1cm5zIGEgbGlz
dCBvZgorICAgIGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIgb2JqZWN0cy4KKworICAgIExlYWRp
bmcgTFdTZXMgbXVzdCBiZSB0cmltbWVkLgorICAgICIiIgorCisgICAgc3RhdGUgPSBodHRwX2hl
YWRlcl91dGlsLlBhcnNpbmdTdGF0ZShkYXRhKQorCisgICAgZXh0ZW5zaW9uX2xpc3QgPSBbXQor
ICAgIHdoaWxlIFRydWU6CisgICAgICAgIGV4dGVuc2lvbiA9IF9wYXJzZV9leHRlbnNpb24oc3Rh
dGUsIGFsbG93X3F1b3RlZF9zdHJpbmcpCisgICAgICAgIGlmIGV4dGVuc2lvbiBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgIGV4dGVuc2lvbl9saXN0LmFwcGVuZChleHRlbnNpb24pCisKKyAgICAg
ICAgaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX2x3c2VzKHN0YXRlKQorCisgICAgICAgIGlmIGh0
dHBfaGVhZGVyX3V0aWwucGVlayhzdGF0ZSkgaXMgTm9uZToKKyAgICAgICAgICAgIGJyZWFrCisK
KyAgICAgICAgaWYgbm90IGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9zdHJpbmcoc3RhdGUsICcs
Jyk6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAg
ICAgJ0ZhaWxlZCB0byBwYXJzZSBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMgaGVhZGVyOiAnCisg
ICAgICAgICAgICAgICAgJ0V4cGVjdGVkIGEgY29tbWEgYnV0IGZvdW5kICVyJyAlCisgICAgICAg
ICAgICAgICAgaHR0cF9oZWFkZXJfdXRpbC5wZWVrKHN0YXRlKSkKKworICAgICAgICBodHRwX2hl
YWRlcl91dGlsLmNvbnN1bWVfbHdzZXMoc3RhdGUpCisKKyAgICBpZiBsZW4oZXh0ZW5zaW9uX2xp
c3QpID09IDA6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbigKKyAgICAgICAgICAg
ICdTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMgaGVhZGVyIGNvbnRhaW5zIG5vIHZhbGlkIGV4dGVu
c2lvbicpCisKKyAgICByZXR1cm4gZXh0ZW5zaW9uX2xpc3QKKworCitkZWYgZm9ybWF0X2V4dGVu
c2lvbnMoZXh0ZW5zaW9uX2xpc3QpOgorICAgIGZvcm1hdHRlZF9leHRlbnNpb25fbGlzdCA9IFtd
CisgICAgZm9yIGV4dGVuc2lvbiBpbiBleHRlbnNpb25fbGlzdDoKKyAgICAgICAgZm9ybWF0dGVk
X3BhcmFtcyA9IFtleHRlbnNpb24ubmFtZSgpXQorICAgICAgICBmb3IgcGFyYW1fbmFtZSwgcGFy
YW1fdmFsdWUgaW4gZXh0ZW5zaW9uLmdldF9wYXJhbWV0ZXJzKCk6CisgICAgICAgICAgICBpZiBw
YXJhbV92YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGZvcm1hdHRlZF9wYXJhbXMuYXBw
ZW5kKHBhcmFtX25hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHF1b3Rl
ZF92YWx1ZSA9IGh0dHBfaGVhZGVyX3V0aWwucXVvdGVfaWZfbmVjZXNzYXJ5KHBhcmFtX3ZhbHVl
KQorICAgICAgICAgICAgICAgIGZvcm1hdHRlZF9wYXJhbXMuYXBwZW5kKCclcz0lcycgJSAocGFy
YW1fbmFtZSwgcXVvdGVkX3ZhbHVlKSkKKworICAgICAgICBmb3JtYXR0ZWRfZXh0ZW5zaW9uX2xp
c3QuYXBwZW5kKCc7ICcuam9pbihmb3JtYXR0ZWRfcGFyYW1zKSkKKworICAgIHJldHVybiAnLCAn
LmpvaW4oZm9ybWF0dGVkX2V4dGVuc2lvbl9saXN0KQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0
L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvZHJhZnQ3NS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL2Ry
YWZ0NzUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODAyYTMxYzlhOTZlMGVkZTZiOTUxNDM3YTFlYWYzMzNmMmY5
MDQxYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL2RyYWZ0NzUucHkKQEAgLTAs
MCArMSwxOTAgQEAKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIldlYlNvY2tldCBoYW5kc2hha2lu
ZyBkZWZpbmVkIGluIGRyYWZ0LWhpeGllLXRoZXdlYnNvY2tldHByb3RvY29sLTc1LiIiIgorCisK
KyMgTm90ZTogcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlIGlzIHVzZWQgaW4gdGhpcyBtb2R1bGUs
IGV2ZW4gdGhvdWdoIG1vZF9weXRob24KKyMgZG9jdW1lbnQgc2F5cyB0aGF0IGl0IHNob3VsZCBi
ZSB1c2VkIG9ubHkgaW4gY29ubmVjdGlvbiBoYW5kbGVycy4KKyMgVW5mb3J0dW5hdGVseSwgd2Ug
aGF2ZSBubyBvdGhlciBvcHRpb25zLiBGb3IgZXhhbXBsZSwgcmVxdWVzdC53cml0ZSBpcyBub3QK
KyMgc3VpdGFibGUgYmVjYXVzZSBpdCBkb2Vzbid0IGFsbG93IGRpcmVjdCByYXcgYnl0ZXMgd3Jp
dGluZy4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCisKK2Zyb20gbW9kX3B5d2Vic29j
a2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0LnN0cmVhbSBpbXBvcnQgU3Ry
ZWFtSGl4aWU3NQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IHV0aWwKK2Zyb20gbW9kX3B5
d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgSGFuZHNoYWtlRXhjZXB0aW9uCitmcm9t
IG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IGJ1aWxkX2xvY2F0aW9uCitm
cm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IHZhbGlkYXRlX3N1YnBy
b3RvY29sCisKKworX01BTkRBVE9SWV9IRUFERVJTID0gWworICAgICMga2V5LCBleHBlY3RlZCB2
YWx1ZSBvciBOb25lCisgICAgWydVcGdyYWRlJywgJ1dlYlNvY2tldCddLAorICAgIFsnQ29ubmVj
dGlvbicsICdVcGdyYWRlJ10sCisgICAgWydIb3N0JywgTm9uZV0sCisgICAgWydPcmlnaW4nLCBO
b25lXSwKK10KKworX0ZJUlNUX0ZJVkVfTElORVMgPSBtYXAocmUuY29tcGlsZSwgWworICAgIHIn
XkdFVCAvW1xTXSogSFRUUC8xLjFcclxuJCcsCisgICAgcideVXBncmFkZTogV2ViU29ja2V0XHJc
biQnLAorICAgIHInXkNvbm5lY3Rpb246IFVwZ3JhZGVcclxuJCcsCisgICAgcideSG9zdDogW1xT
XStcclxuJCcsCisgICAgcideT3JpZ2luOiBbXFNdK1xyXG4kJywKK10pCisKK19TSVhUSF9BTkRf
TEFURVIgPSByZS5jb21waWxlKAorICAgIHInXicKKyAgICByJyhXZWJTb2NrZXQtUHJvdG9jb2w6
IFtceDIwLVx4N2VdK1xyXG4pPycKKyAgICByJyhDb29raWU6IFteXHJdKlxyXG4pKicKKyAgICBy
JyhDb29raWUyOiBbXlxyXSpcclxuKT8nCisgICAgcicoQ29va2llOiBbXlxyXSpcclxuKSonCisg
ICAgcidcclxuJykKKworCitjbGFzcyBIYW5kc2hha2VyKG9iamVjdCk6CisgICAgIiIiVGhpcyBj
bGFzcyBwZXJmb3JtcyBXZWJTb2NrZXQgaGFuZHNoYWtlLiIiIgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHJlcXVlc3QsIGRpc3BhdGNoZXIsIHN0cmljdD1GYWxzZSk6CisgICAgICAgICIiIkNv
bnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxdWVz
dDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAgICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hl
ciAoZGlzcGF0Y2guRGlzcGF0Y2hlcikuCisgICAgICAgICAgICBzdHJpY3Q6IFN0cmljdGx5IGNo
ZWNrIGhhbmRzaGFrZSByZXF1ZXN0LiBEZWZhdWx0OiBGYWxzZS4KKyAgICAgICAgICAgICAgICBJ
ZiBUcnVlLCByZXF1ZXN0LmNvbm5lY3Rpb24gbXVzdCBwcm92aWRlIGdldF9tZW1vcml6ZWRfbGlu
ZXMKKyAgICAgICAgICAgICAgICBtZXRob2QuCisKKyAgICAgICAgSGFuZHNoYWtlciB3aWxsIGFk
ZCBhdHRyaWJ1dGVzIHN1Y2ggYXMgd3NfcmVzb3VyY2UgaW4gcGVyZm9ybWluZworICAgICAgICBo
YW5kc2hha2UuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0
X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX3JlcXVlc3QgPSByZXF1ZXN0Cisg
ICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIgPSBkaXNwYXRjaGVyCisgICAgICAgIHNlbGYuX3N0cmlj
dCA9IHN0cmljdAorCisgICAgZGVmIGRvX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgIiIiUGVy
Zm9ybSBXZWJTb2NrZXQgSGFuZHNoYWtlLgorCisgICAgICAgIE9uIF9yZXF1ZXN0LCB3ZSBzZXQK
KyAgICAgICAgICAgIHdzX3Jlc291cmNlLCB3c19vcmlnaW4sIHdzX2xvY2F0aW9uLCB3c19wcm90
b2NvbAorICAgICAgICAgICAgd3NfY2hhbGxlbmdlX21kNTogV2ViU29ja2V0IGhhbmRzaGFrZSBp
bmZvcm1hdGlvbi4KKyAgICAgICAgICAgIHdzX3N0cmVhbTogRnJhbWUgZ2VuZXJhdGlvbi9wYXJz
aW5nIGNsYXNzLgorICAgICAgICAgICAgd3NfdmVyc2lvbjogUHJvdG9jb2wgdmVyc2lvbi4KKyAg
ICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fY2hlY2tfaGVhZGVyX2xpbmVzKCkKKyAgICAgICAg
c2VsZi5fc2V0X3Jlc291cmNlKCkKKyAgICAgICAgc2VsZi5fc2V0X29yaWdpbigpCisgICAgICAg
IHNlbGYuX3NldF9sb2NhdGlvbigpCisgICAgICAgIHNlbGYuX3NldF9zdWJwcm90b2NvbCgpCisg
ICAgICAgIHNlbGYuX3NldF9wcm90b2NvbF92ZXJzaW9uKCkKKworICAgICAgICBzZWxmLl9kaXNw
YXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFrZShzZWxmLl9yZXF1ZXN0KQorCisgICAgICAgIHNlbGYu
X3NlbmRfaGFuZHNoYWtlKCkKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1NlbnQgb3Bl
bmluZyBoYW5kc2hha2UgcmVzcG9uc2UnKQorCisgICAgZGVmIF9zZXRfcmVzb3VyY2Uoc2VsZik6
CisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcmVzb3VyY2UgPSBzZWxmLl9yZXF1ZXN0LnVyaQor
CisgICAgZGVmIF9zZXRfb3JpZ2luKHNlbGYpOgorICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX29y
aWdpbiA9IHNlbGYuX3JlcXVlc3QuaGVhZGVyc19pblsnT3JpZ2luJ10KKworICAgIGRlZiBfc2V0
X2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2xvY2F0aW9uID0gYnVp
bGRfbG9jYXRpb24oc2VsZi5fcmVxdWVzdCkKKworICAgIGRlZiBfc2V0X3N1YnByb3RvY29sKHNl
bGYpOgorICAgICAgICBzdWJwcm90b2NvbCA9IHNlbGYuX3JlcXVlc3QuaGVhZGVyc19pbi5nZXQo
J1dlYlNvY2tldC1Qcm90b2NvbCcpCisgICAgICAgIGlmIHN1YnByb3RvY29sIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgdmFsaWRhdGVfc3VicHJvdG9jb2woc3VicHJvdG9jb2wsIGhpeGllPVRy
dWUpCisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcHJvdG9jb2wgPSBzdWJwcm90b2NvbAorCisg
ICAgZGVmIF9zZXRfcHJvdG9jb2xfdmVyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nZ2Vy
LmRlYnVnKCdJRVRGIEhpeGllIDc1IHByb3RvY29sJykKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53
c192ZXJzaW9uID0gY29tbW9uLlZFUlNJT05fSElYSUU3NQorICAgICAgICBzZWxmLl9yZXF1ZXN0
LndzX3N0cmVhbSA9IFN0cmVhbUhpeGllNzUoc2VsZi5fcmVxdWVzdCkKKworICAgIGRlZiBfc2Vu
ZGFsbChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRl
KGRhdGEpCisKKyAgICBkZWYgX3NlbmRfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICBzZWxmLl9z
ZW5kYWxsKCdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJykK
KyAgICAgICAgc2VsZi5fc2VuZGFsbCgnVXBncmFkZTogV2ViU29ja2V0XHJcbicpCisgICAgICAg
IHNlbGYuX3NlbmRhbGwoJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJykKKyAgICAgICAgc2VsZi5f
c2VuZGFsbCgnV2ViU29ja2V0LU9yaWdpbjogJXNcclxuJyAlIHNlbGYuX3JlcXVlc3Qud3Nfb3Jp
Z2luKQorICAgICAgICBzZWxmLl9zZW5kYWxsKCdXZWJTb2NrZXQtTG9jYXRpb246ICVzXHJcbicg
JSBzZWxmLl9yZXF1ZXN0LndzX2xvY2F0aW9uKQorICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0Lndz
X3Byb3RvY29sOgorICAgICAgICAgICAgc2VsZi5fc2VuZGFsbCgKKyAgICAgICAgICAgICAgICAn
V2ViU29ja2V0LVByb3RvY29sOiAlc1xyXG4nICUgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCkK
KyAgICAgICAgc2VsZi5fc2VuZGFsbCgnXHJcbicpCisKKyAgICBkZWYgX2NoZWNrX2hlYWRlcl9s
aW5lcyhzZWxmKToKKyAgICAgICAgZm9yIGtleSwgZXhwZWN0ZWRfdmFsdWUgaW4gX01BTkRBVE9S
WV9IRUFERVJTOgorICAgICAgICAgICAgYWN0dWFsX3ZhbHVlID0gc2VsZi5fcmVxdWVzdC5oZWFk
ZXJzX2luLmdldChrZXkpCisgICAgICAgICAgICBpZiBub3QgYWN0dWFsX3ZhbHVlOgorICAgICAg
ICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbignSGVhZGVyICVzIGlzIG5vdCBkZWZp
bmVkJyAlIGtleSkKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkX3ZhbHVlOgorICAgICAgICAgICAg
ICAgIGlmIGFjdHVhbF92YWx1ZSAhPSBleHBlY3RlZF92YWx1ZToKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgJ0V4
cGVjdGVkICVyIGZvciBoZWFkZXIgJXMgYnV0IGZvdW5kICVyJyAlCisgICAgICAgICAgICAgICAg
ICAgICAgICAoZXhwZWN0ZWRfdmFsdWUsIGtleSwgYWN0dWFsX3ZhbHVlKSkKKyAgICAgICAgaWYg
c2VsZi5fc3RyaWN0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmVzID0g
c2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLmdldF9tZW1vcml6ZWRfbGluZXMoKQorICAgICAgICAg
ICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJp
YnV0ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnU3RyaWN0IGhhbmRzaGFrZSBpcyBzcGVj
aWZpZWQgYnV0IHRoZSBjb25uZWN0aW9uICcKKyAgICAgICAgICAgICAgICAgICAgJ2RvZXNuXCd0
IHByb3ZpZGUgZ2V0X21lbW9yaXplZF9saW5lcygpJykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNr
X2ZpcnN0X2xpbmVzKGxpbmVzKQorCisgICAgZGVmIF9jaGVja19maXJzdF9saW5lcyhzZWxmLCBs
aW5lcyk6CisgICAgICAgIGlmIGxlbihsaW5lcykgPCBsZW4oX0ZJUlNUX0ZJVkVfTElORVMpOgor
ICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKCdUb28gZmV3IGhlYWRlciBsaW5l
czogJWQnICUgbGVuKGxpbmVzKSkKKyAgICAgICAgZm9yIGxpbmUsIHJlZ2V4cCBpbiB6aXAobGlu
ZXMsIF9GSVJTVF9GSVZFX0xJTkVTKToKKyAgICAgICAgICAgIGlmIG5vdCByZWdleHAuc2VhcmNo
KGxpbmUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbigKKyAgICAg
ICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgaGVhZGVyOiAlciBkb2VzblwndCBtYXRjaCAlcicK
KyAgICAgICAgICAgICAgICAgICAgJSAobGluZSwgcmVnZXhwLnBhdHRlcm4pKQorICAgICAgICBz
aXh0aF9hbmRfbGF0ZXIgPSAnJy5qb2luKGxpbmVzWzU6XSkKKyAgICAgICAgaWYgbm90IF9TSVhU
SF9BTkRfTEFURVIuc2VhcmNoKHNpeHRoX2FuZF9sYXRlcik6CisgICAgICAgICAgICByYWlzZSBI
YW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgaGVhZGVyOiAl
ciBkb2VzblwndCBtYXRjaCAlcicKKyAgICAgICAgICAgICAgICAlIChzaXh0aF9hbmRfbGF0ZXIs
IF9TSVhUSF9BTkRfTEFURVIucGF0dGVybikpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9k
X3B5d2Vic29ja2V0L2hhbmRzaGFrZS9oeWJpLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvaHliaS5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zYmM4NGJkMjY1NjkyZmY5Y2RjOTMxZmIyNzRlZGI4MzhiZjk1ZmVkCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29j
a2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvaHliaS5weQpAQCAtMCwwICsxLDM3MCBAQAor
IyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKworIiIiVGhpcyBmaWxlIHByb3ZpZGVzIHRoZSBvcGVuaW5nIGhh
bmRzaGFrZSBwcm9jZXNzb3IgZm9yIHRoZSBXZWJTb2NrZXQKK3Byb3RvY29sIChSRkMgNjQ1NSku
CisKK1NwZWNpZmljYXRpb246CitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU1Cisi
IiIKKworCisjIE5vdGU6IHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZSBpcyB1c2VkIGluIHRoaXMg
bW9kdWxlLCBldmVuIHRob3VnaCBtb2RfcHl0aG9uCisjIGRvY3VtZW50IHNheXMgdGhhdCBpdCBz
aG91bGQgYmUgdXNlZCBvbmx5IGluIGNvbm5lY3Rpb24gaGFuZGxlcnMuCisjIFVuZm9ydHVuYXRl
bHksIHdlIGhhdmUgbm8gb3RoZXIgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIHJlcXVlc3Qud3JpdGUg
aXMgbm90CisjIHN1aXRhYmxlIGJlY2F1c2UgaXQgZG9lc24ndCBhbGxvdyBkaXJlY3QgcmF3IGJ5
dGVzIHdyaXRpbmcuCisKKworaW1wb3J0IGJhc2U2NAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBv
cworaW1wb3J0IHJlCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zyb20g
bW9kX3B5d2Vic29ja2V0LmV4dGVuc2lvbnMgaW1wb3J0IGdldF9leHRlbnNpb25fcHJvY2Vzc29y
Citmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IGNoZWNrX3JlcXVl
c3RfbGluZQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBmb3Jt
YXRfZXh0ZW5zaW9ucworZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9y
dCBmb3JtYXRfaGVhZGVyCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1w
b3J0IGdldF9tYW5kYXRvcnlfaGVhZGVyCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2Uu
X2Jhc2UgaW1wb3J0IEhhbmRzaGFrZUV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFu
ZHNoYWtlLl9iYXNlIGltcG9ydCBwYXJzZV9leHRlbnNpb25zCitmcm9tIG1vZF9weXdlYnNvY2tl
dC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IHBhcnNlX3Rva2VuX2xpc3QKK2Zyb20gbW9kX3B5d2Vi
c29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgdmFsaWRhdGVfbWFuZGF0b3J5X2hlYWRlcgor
ZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCB2YWxpZGF0ZV9zdWJw
cm90b2NvbAorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBWZXJz
aW9uRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5zdHJlYW0gaW1wb3J0IFN0cmVhbQor
ZnJvbSBtb2RfcHl3ZWJzb2NrZXQuc3RyZWFtIGltcG9ydCBTdHJlYW1PcHRpb25zCitmcm9tIG1v
ZF9weXdlYnNvY2tldCBpbXBvcnQgdXRpbAorCisKKyMgVXNlZCB0byB2YWxpZGF0ZSB0aGUgdmFs
dWUgaW4gdGhlIFNlYy1XZWJTb2NrZXQtS2V5IGhlYWRlciBzdHJpY3RseS4gUkZDIDQ2NDgKKyMg
ZGlzYWxsb3dzIG5vbi16ZXJvIHBhZGRpbmcsIHNvIHRoZSBjaGFyYWN0ZXIgcmlnaHQgYmVmb3Jl
ID09IG11c3QgYmUgYW55IG9mCisjIEEsIFEsIGcgYW5kIHcuCitfU0VDX1dFQlNPQ0tFVF9LRVlf
UkVHRVggPSByZS5jb21waWxlKCdeWysvMC05QS1aYS16XXsyMX1bQVFnd109PSQnKQorCisjIERl
ZmluaW5nIGFsaWFzZXMgZm9yIHZhbHVlcyB1c2VkIGZyZXF1ZW50bHkuCitfVkVSU0lPTl9IWUJJ
MDggPSBjb21tb24uVkVSU0lPTl9IWUJJMDgKK19WRVJTSU9OX0hZQkkwOF9TVFJJTkcgPSBzdHIo
X1ZFUlNJT05fSFlCSTA4KQorX1ZFUlNJT05fTEFURVNUID0gY29tbW9uLlZFUlNJT05fSFlCSV9M
QVRFU1QKK19WRVJTSU9OX0xBVEVTVF9TVFJJTkcgPSBzdHIoX1ZFUlNJT05fTEFURVNUKQorX1NV
UFBPUlRFRF9WRVJTSU9OUyA9IFsKKyAgICBfVkVSU0lPTl9MQVRFU1QsCisgICAgX1ZFUlNJT05f
SFlCSTA4LAorXQorCisKK2RlZiBjb21wdXRlX2FjY2VwdChrZXkpOgorICAgICIiIkNvbXB1dGVz
IHZhbHVlIGZvciB0aGUgU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyIGZyb20gdmFsdWUgb2Yg
dGhlCisgICAgU2VjLVdlYlNvY2tldC1LZXkgaGVhZGVyLgorICAgICIiIgorCisgICAgYWNjZXB0
X2JpbmFyeSA9IHV0aWwuc2hhMV9oYXNoKAorICAgICAgICBrZXkgKyBjb21tb24uV0VCU09DS0VU
X0FDQ0VQVF9VVUlEKS5kaWdlc3QoKQorICAgIGFjY2VwdCA9IGJhc2U2NC5iNjRlbmNvZGUoYWNj
ZXB0X2JpbmFyeSkKKworICAgIHJldHVybiAoYWNjZXB0LCBhY2NlcHRfYmluYXJ5KQorCisKK2Ns
YXNzIEhhbmRzaGFrZXIob2JqZWN0KToKKyAgICAiIiJPcGVuaW5nIGhhbmRzaGFrZSBwcm9jZXNz
b3IgZm9yIHRoZSBXZWJTb2NrZXQgcHJvdG9jb2wgKFJGQyA2NDU1KS4iIiIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCByZXF1ZXN0LCBkaXNwYXRjaGVyKToKKyAgICAgICAgIiIiQ29uc3RydWN0
IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICByZXF1ZXN0OiBtb2Rf
cHl0aG9uIHJlcXVlc3QuCisgICAgICAgICAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyIChkaXNw
YXRjaC5EaXNwYXRjaGVyKS4KKworICAgICAgICBIYW5kc2hha2VyIHdpbGwgYWRkIGF0dHJpYnV0
ZXMgc3VjaCBhcyB3c19yZXNvdXJjZSBkdXJpbmcgaGFuZHNoYWtlLgorICAgICAgICAiIiIKKwor
ICAgICAgICBzZWxmLl9sb2dnZXIgPSB1dGlsLmdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAg
ICAgICBzZWxmLl9yZXF1ZXN0ID0gcmVxdWVzdAorICAgICAgICBzZWxmLl9kaXNwYXRjaGVyID0g
ZGlzcGF0Y2hlcgorCisgICAgZGVmIF92YWxpZGF0ZV9jb25uZWN0aW9uX2hlYWRlcihzZWxmKToK
KyAgICAgICAgY29ubmVjdGlvbiA9IGdldF9tYW5kYXRvcnlfaGVhZGVyKAorICAgICAgICAgICAg
c2VsZi5fcmVxdWVzdCwgY29tbW9uLkNPTk5FQ1RJT05fSEVBREVSKQorCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGNvbm5lY3Rpb25fdG9rZW5zID0gcGFyc2VfdG9rZW5fbGlzdChjb25uZWN0
aW9uKQorICAgICAgICBleGNlcHQgSGFuZHNoYWtlRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAg
cmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gcGFy
c2UgJXM6ICVzJyAlIChjb21tb24uQ09OTkVDVElPTl9IRUFERVIsIGUpKQorCisgICAgICAgIGNv
bm5lY3Rpb25faXNfdmFsaWQgPSBGYWxzZQorICAgICAgICBmb3IgdG9rZW4gaW4gY29ubmVjdGlv
bl90b2tlbnM6CisgICAgICAgICAgICBpZiB0b2tlbi5sb3dlcigpID09IGNvbW1vbi5VUEdSQURF
X0NPTk5FQ1RJT05fVFlQRS5sb3dlcigpOgorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25faXNf
dmFsaWQgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGNvbm5l
Y3Rpb25faXNfdmFsaWQ6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisg
ICAgICAgICAgICAgICAgJyVzIGhlYWRlciBkb2VzblwndCBjb250YWluICIlcyInICUKKyAgICAg
ICAgICAgICAgICAoY29tbW9uLkNPTk5FQ1RJT05fSEVBREVSLCBjb21tb24uVVBHUkFERV9DT05O
RUNUSU9OX1RZUEUpKQorCisgICAgZGVmIGRvX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgc2Vs
Zi5fcmVxdWVzdC53c19jbG9zZV9jb2RlID0gTm9uZQorICAgICAgICBzZWxmLl9yZXF1ZXN0Lndz
X2Nsb3NlX3JlYXNvbiA9IE5vbmUKKworICAgICAgICAjIFBhcnNpbmcuCisKKyAgICAgICAgY2hl
Y2tfcmVxdWVzdF9saW5lKHNlbGYuX3JlcXVlc3QpCisKKyAgICAgICAgdmFsaWRhdGVfbWFuZGF0
b3J5X2hlYWRlcigKKyAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QsCisgICAgICAgICAgICBjb21t
b24uVVBHUkFERV9IRUFERVIsCisgICAgICAgICAgICBjb21tb24uV0VCU09DS0VUX1VQR1JBREVf
VFlQRSkKKworICAgICAgICBzZWxmLl92YWxpZGF0ZV9jb25uZWN0aW9uX2hlYWRlcigpCisKKyAg
ICAgICAgc2VsZi5fcmVxdWVzdC53c19yZXNvdXJjZSA9IHNlbGYuX3JlcXVlc3QudXJpCisKKyAg
ICAgICAgdW51c2VkX2hvc3QgPSBnZXRfbWFuZGF0b3J5X2hlYWRlcihzZWxmLl9yZXF1ZXN0LCBj
b21tb24uSE9TVF9IRUFERVIpCisKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c192ZXJzaW9uID0g
c2VsZi5fY2hlY2tfdmVyc2lvbigpCisKKyAgICAgICAgIyBUaGlzIGhhbmRzaGFrZSBtdXN0IGJl
IGJhc2VkIG9uIGxhdGVzdCBoeWJpLiBXZSBhcmUgcmVzcG9uc2libGUgdG8KKyAgICAgICAgIyBm
YWxsYmFjayB0byBIVFRQIG9uIGhhbmRzaGFrZSBmYWlsdXJlIGFzIGxhdGVzdCBoeWJpIGhhbmRz
aGFrZQorICAgICAgICAjIHNwZWNpZmllcy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2Vs
Zi5fZ2V0X29yaWdpbigpCisgICAgICAgICAgICBzZWxmLl9zZXRfcHJvdG9jb2woKQorICAgICAg
ICAgICAgc2VsZi5fcGFyc2VfZXh0ZW5zaW9ucygpCisKKyAgICAgICAgICAgICMgS2V5IHZhbGlk
YXRpb24sIHJlc3BvbnNlIGdlbmVyYXRpb24uCisKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2dl
dF9rZXkoKQorICAgICAgICAgICAgKGFjY2VwdCwgYWNjZXB0X2JpbmFyeSkgPSBjb21wdXRlX2Fj
Y2VwdChrZXkpCisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAg
ICAgJyVzOiAlciAoJXMpJywKKyAgICAgICAgICAgICAgICBjb21tb24uU0VDX1dFQlNPQ0tFVF9B
Q0NFUFRfSEVBREVSLAorICAgICAgICAgICAgICAgIGFjY2VwdCwKKyAgICAgICAgICAgICAgICB1
dGlsLmhleGlmeShhY2NlcHRfYmluYXJ5KSkKKworICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRl
YnVnKCdQcm90b2NvbCB2ZXJzaW9uIGlzIFJGQyA2NDU1JykKKworICAgICAgICAgICAgIyBTZXR1
cCBleHRlbnNpb24gcHJvY2Vzc29ycy4KKworICAgICAgICAgICAgcHJvY2Vzc29ycyA9IFtdCisg
ICAgICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LndzX3JlcXVlc3RlZF9leHRlbnNpb25zIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgICAgIGZvciBleHRlbnNpb25fcmVxdWVzdCBpbiBzZWxmLl9y
ZXF1ZXN0LndzX3JlcXVlc3RlZF9leHRlbnNpb25zOgorICAgICAgICAgICAgICAgICAgICBwcm9j
ZXNzb3IgPSBnZXRfZXh0ZW5zaW9uX3Byb2Nlc3NvcihleHRlbnNpb25fcmVxdWVzdCkKKyAgICAg
ICAgICAgICAgICAgICAgIyBVbmtub3duIGV4dGVuc2lvbiByZXF1ZXN0cyBhcmUganVzdCBpZ25v
cmVkLgorICAgICAgICAgICAgICAgICAgICBpZiBwcm9jZXNzb3IgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JzLmFwcGVuZChwcm9jZXNzb3IpCisgICAgICAg
ICAgICBzZWxmLl9yZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzID0gcHJvY2Vzc29ycwor
CisgICAgICAgICAgICAjIEV4dHJhIGhhbmRzaGFrZSBoYW5kbGVyIG1heSBtb2RpZnkvcmVtb3Zl
IHByb2Nlc3NvcnMuCisgICAgICAgICAgICBzZWxmLl9kaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRz
aGFrZShzZWxmLl9yZXF1ZXN0KQorCisgICAgICAgICAgICBzdHJlYW1fb3B0aW9ucyA9IFN0cmVh
bU9wdGlvbnMoKQorCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2V4dGVuc2lvbnMgPSBO
b25lCisgICAgICAgICAgICBmb3IgcHJvY2Vzc29yIGluIHNlbGYuX3JlcXVlc3Qud3NfZXh0ZW5z
aW9uX3Byb2Nlc3NvcnM6CisgICAgICAgICAgICAgICAgaWYgcHJvY2Vzc29yIGlzIE5vbmU6Cisg
ICAgICAgICAgICAgICAgICAgICMgU29tZSBwcm9jZXNzb3JzIG1heSBiZSByZW1vdmVkIGJ5IGV4
dHJhIGhhbmRzaGFrZQorICAgICAgICAgICAgICAgICAgICAjIGhhbmRsZXIuCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBleHRlbnNpb25fcmVzcG9uc2Ug
PSBwcm9jZXNzb3IuZ2V0X2V4dGVuc2lvbl9yZXNwb25zZSgpCisgICAgICAgICAgICAgICAgaWYg
ZXh0ZW5zaW9uX3Jlc3BvbnNlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgUmVqZWN0
ZWQuCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBz
ZWxmLl9yZXF1ZXN0LndzX2V4dGVuc2lvbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5fcmVxdWVzdC53c19leHRlbnNpb25zID0gW10KKyAgICAgICAgICAgICAgICBzZWxmLl9y
ZXF1ZXN0LndzX2V4dGVuc2lvbnMuYXBwZW5kKGV4dGVuc2lvbl9yZXNwb25zZSkKKworICAgICAg
ICAgICAgICAgIHByb2Nlc3Nvci5zZXR1cF9zdHJlYW1fb3B0aW9ucyhzdHJlYW1fb3B0aW9ucykK
KworICAgICAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC53c19leHRlbnNpb25zIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAg
ICAgJ0V4dGVuc2lvbnMgYWNjZXB0ZWQ6ICVyJywKKyAgICAgICAgICAgICAgICAgICAgbWFwKGNv
bW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX3JlcXVlc3Qud3NfZXh0ZW5zaW9ucykpCisKKyAgICAgICAgICAgIHNlbGYuX3JlcXVlc3Qu
d3Nfc3RyZWFtID0gU3RyZWFtKHNlbGYuX3JlcXVlc3QsIHN0cmVhbV9vcHRpb25zKQorCisgICAg
ICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LndzX3JlcXVlc3RlZF9wcm90b2NvbHMgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCBpcyBOb25l
OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAg
ICAgICAgICAgICAgICAgICAnZG9fZXh0cmFfaGFuZHNoYWtlIG11c3QgY2hvb3NlIG9uZSBzdWJw
cm90b2NvbCBmcm9tICcKKyAgICAgICAgICAgICAgICAgICAgICAgICd3c19yZXF1ZXN0ZWRfcHJv
dG9jb2xzIGFuZCBzZXQgaXQgdG8gd3NfcHJvdG9jb2wnKQorICAgICAgICAgICAgICAgIHZhbGlk
YXRlX3N1YnByb3RvY29sKHNlbGYuX3JlcXVlc3Qud3NfcHJvdG9jb2wsIGhpeGllPUZhbHNlKQor
CisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgICAgICAg
ICAnU3VicHJvdG9jb2wgYWNjZXB0ZWQ6ICVyJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5f
cmVxdWVzdC53c19wcm90b2NvbCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
aWYgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAg
ICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAg
J3dzX3Byb3RvY29sIG11c3QgYmUgTm9uZSB3aGVuIHRoZSBjbGllbnQgZGlkblwndCAnCisgICAg
ICAgICAgICAgICAgICAgICAgICAncmVxdWVzdCBhbnkgc3VicHJvdG9jb2wnKQorCisgICAgICAg
ICAgICBzZWxmLl9zZW5kX2hhbmRzaGFrZShhY2NlcHQpCisgICAgICAgIGV4Y2VwdCBIYW5kc2hh
a2VFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBpZiBub3QgZS5zdGF0dXM6CisgICAgICAgICAg
ICAgICAgIyBGYWxsYmFjayB0byA0MDAgYmFkIHJlcXVlc3QgYnkgZGVmYXVsdC4KKyAgICAgICAg
ICAgICAgICBlLnN0YXR1cyA9IGNvbW1vbi5IVFRQX1NUQVRVU19CQURfUkVRVUVTVAorICAgICAg
ICAgICAgcmFpc2UgZQorCisgICAgZGVmIF9nZXRfb3JpZ2luKHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLl9yZXF1ZXN0LndzX3ZlcnNpb24gaXMgX1ZFUlNJT05fSFlCSTA4OgorICAgICAgICAgICAg
b3JpZ2luX2hlYWRlciA9IGNvbW1vbi5TRUNfV0VCU09DS0VUX09SSUdJTl9IRUFERVIKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIG9yaWdpbl9oZWFkZXIgPSBjb21tb24uT1JJR0lOX0hFQURF
UgorICAgICAgICBvcmlnaW4gPSBzZWxmLl9yZXF1ZXN0LmhlYWRlcnNfaW4uZ2V0KG9yaWdpbl9o
ZWFkZXIpCisgICAgICAgIGlmIG9yaWdpbiBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9n
Z2VyLmRlYnVnKCdDbGllbnQgcmVxdWVzdCBkb2VzIG5vdCBoYXZlIG9yaWdpbiBoZWFkZXInKQor
ICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX29yaWdpbiA9IG9yaWdpbgorCisgICAgZGVmIF9jaGVj
a192ZXJzaW9uKHNlbGYpOgorICAgICAgICB2ZXJzaW9uID0gZ2V0X21hbmRhdG9yeV9oZWFkZXIo
c2VsZi5fcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bW1vbi5TRUNfV0VCU09DS0VUX1ZFUlNJT05fSEVBREVSKQorICAgICAgICBpZiB2ZXJzaW9uID09
IF9WRVJTSU9OX0hZQkkwOF9TVFJJTkc6CisgICAgICAgICAgICByZXR1cm4gX1ZFUlNJT05fSFlC
STA4CisgICAgICAgIGlmIHZlcnNpb24gPT0gX1ZFUlNJT05fTEFURVNUX1NUUklORzoKKyAgICAg
ICAgICAgIHJldHVybiBfVkVSU0lPTl9MQVRFU1QKKworICAgICAgICBpZiB2ZXJzaW9uLmZpbmQo
JywnKSA+PSAwOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAg
ICAgICAgICAgICdNdWx0aXBsZSB2ZXJzaW9ucyAoJXIpIGFyZSBub3QgYWxsb3dlZCBmb3IgaGVh
ZGVyICVzJyAlCisgICAgICAgICAgICAgICAgKHZlcnNpb24sIGNvbW1vbi5TRUNfV0VCU09DS0VU
X1ZFUlNJT05fSEVBREVSKSwKKyAgICAgICAgICAgICAgICBzdGF0dXM9Y29tbW9uLkhUVFBfU1RB
VFVTX0JBRF9SRVFVRVNUKQorICAgICAgICByYWlzZSBWZXJzaW9uRXhjZXB0aW9uKAorICAgICAg
ICAgICAgJ1Vuc3VwcG9ydGVkIHZlcnNpb24gJXIgZm9yIGhlYWRlciAlcycgJQorICAgICAgICAg
ICAgKHZlcnNpb24sIGNvbW1vbi5TRUNfV0VCU09DS0VUX1ZFUlNJT05fSEVBREVSKSwKKyAgICAg
ICAgICAgIHN1cHBvcnRlZF92ZXJzaW9ucz0nLCAnLmpvaW4obWFwKHN0ciwgX1NVUFBPUlRFRF9W
RVJTSU9OUykpKQorCisgICAgZGVmIF9zZXRfcHJvdG9jb2woc2VsZik6CisgICAgICAgIHNlbGYu
X3JlcXVlc3Qud3NfcHJvdG9jb2wgPSBOb25lCisKKyAgICAgICAgcHJvdG9jb2xfaGVhZGVyID0g
c2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luLmdldCgKKyAgICAgICAgICAgIGNvbW1vbi5TRUNfV0VC
U09DS0VUX1BST1RPQ09MX0hFQURFUikKKworICAgICAgICBpZiBub3QgcHJvdG9jb2xfaGVhZGVy
OgorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53c19yZXF1ZXN0ZWRfcHJvdG9jb2xzID0gTm9u
ZQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19yZXF1ZXN0
ZWRfcHJvdG9jb2xzID0gcGFyc2VfdG9rZW5fbGlzdCgKKyAgICAgICAgICAgIHByb3RvY29sX2hl
YWRlcikKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdTdWJwcm90b2NvbHMgcmVxdWVzdGVk
OiAlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX3JlcXVl
c3RlZF9wcm90b2NvbHMpCisKKyAgICBkZWYgX3BhcnNlX2V4dGVuc2lvbnMoc2VsZik6CisgICAg
ICAgIGV4dGVuc2lvbnNfaGVhZGVyID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luLmdldCgKKyAg
ICAgICAgICAgIGNvbW1vbi5TRUNfV0VCU09DS0VUX0VYVEVOU0lPTlNfSEVBREVSKQorICAgICAg
ICBpZiBub3QgZXh0ZW5zaW9uc19oZWFkZXI6CisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0Lndz
X3JlcXVlc3RlZF9leHRlbnNpb25zID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAg
ICAgaWYgc2VsZi5fcmVxdWVzdC53c192ZXJzaW9uIGlzIGNvbW1vbi5WRVJTSU9OX0hZQkkwODoK
KyAgICAgICAgICAgIGFsbG93X3F1b3RlZF9zdHJpbmc9RmFsc2UKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGFsbG93X3F1b3RlZF9zdHJpbmc9VHJ1ZQorICAgICAgICBzZWxmLl9yZXF1ZXN0
LndzX3JlcXVlc3RlZF9leHRlbnNpb25zID0gcGFyc2VfZXh0ZW5zaW9ucygKKyAgICAgICAgICAg
IGV4dGVuc2lvbnNfaGVhZGVyLCBhbGxvd19xdW90ZWRfc3RyaW5nPWFsbG93X3F1b3RlZF9zdHJp
bmcpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ0V4dGVuc2lv
bnMgcmVxdWVzdGVkOiAlcicsCisgICAgICAgICAgICBtYXAoY29tbW9uLkV4dGVuc2lvblBhcmFt
ZXRlci5uYW1lLAorICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcmVxdWVzdGVkX2V4
dGVuc2lvbnMpKQorCisgICAgZGVmIF92YWxpZGF0ZV9rZXkoc2VsZiwga2V5KToKKyAgICAgICAg
aWYga2V5LmZpbmQoJywnKSA+PSAwOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0
aW9uKCdSZXF1ZXN0IGhhcyBtdWx0aXBsZSAlcyBoZWFkZXIgbGluZXMgb3IgJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlciBc
JyxcJzogJXInICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tbW9u
LlNFQ19XRUJTT0NLRVRfS0VZX0hFQURFUiwga2V5KSkKKworICAgICAgICAjIFZhbGlkYXRlCisg
ICAgICAgIGtleV9pc192YWxpZCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMg
VmFsaWRhdGUga2V5IGJ5IHF1aWNrIHJlZ2V4IG1hdGNoIGJlZm9yZSBwYXJzaW5nIGJ5IGJhc2U2
NAorICAgICAgICAgICAgIyBtb2R1bGUuIEJlY2F1c2UgYmFzZTY0IG1vZHVsZSBza2lwcyBpbnZh
bGlkIGNoYXJhY3RlcnMsIHdlIGhhdmUKKyAgICAgICAgICAgICMgdG8gZG8gdGhpcyBpbiBhZHZh
bmNlIHRvIG1ha2UgdGhpcyBzZXJ2ZXIgc3RyaWN0bHkgcmVqZWN0IGlsbGVnYWwKKyAgICAgICAg
ICAgICMga2V5cy4KKyAgICAgICAgICAgIGlmIF9TRUNfV0VCU09DS0VUX0tFWV9SRUdFWC5tYXRj
aChrZXkpOgorICAgICAgICAgICAgICAgIGRlY29kZWRfa2V5ID0gYmFzZTY0LmI2NGRlY29kZShr
ZXkpCisgICAgICAgICAgICAgICAgaWYgbGVuKGRlY29kZWRfa2V5KSA9PSAxNjoKKyAgICAgICAg
ICAgICAgICAgICAga2V5X2lzX3ZhbGlkID0gVHJ1ZQorICAgICAgICBleGNlcHQgVHlwZUVycm9y
LCBlOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIG5vdCBrZXlfaXNfdmFsaWQ6Cisg
ICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ0ls
bGVnYWwgdmFsdWUgZm9yIGhlYWRlciAlczogJXInICUKKyAgICAgICAgICAgICAgICAoY29tbW9u
LlNFQ19XRUJTT0NLRVRfS0VZX0hFQURFUiwga2V5KSkKKworICAgICAgICByZXR1cm4gZGVjb2Rl
ZF9rZXkKKworICAgIGRlZiBfZ2V0X2tleShzZWxmKToKKyAgICAgICAga2V5ID0gZ2V0X21hbmRh
dG9yeV9oZWFkZXIoCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LCBjb21tb24uU0VDX1dFQlNP
Q0tFVF9LRVlfSEVBREVSKQorCisgICAgICAgIGRlY29kZWRfa2V5ID0gc2VsZi5fdmFsaWRhdGVf
a2V5KGtleSkKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAnJXM6
ICVyICglcyknLAorICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJTT0NLRVRfS0VZX0hFQURFUiwK
KyAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgIHV0aWwuaGV4aWZ5KGRlY29kZWRfa2V5KSkK
KworICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgX3NlbmRfaGFuZHNoYWtlKHNlbGYsIGFj
Y2VwdCk6CisgICAgICAgIHJlc3BvbnNlID0gW10KKworICAgICAgICByZXNwb25zZS5hcHBlbmQo
J0hUVFAvMS4xIDEwMSBTd2l0Y2hpbmcgUHJvdG9jb2xzXHJcbicpCisKKyAgICAgICAgcmVzcG9u
c2UuYXBwZW5kKGZvcm1hdF9oZWFkZXIoCisgICAgICAgICAgICBjb21tb24uVVBHUkFERV9IRUFE
RVIsIGNvbW1vbi5XRUJTT0NLRVRfVVBHUkFERV9UWVBFKSkKKyAgICAgICAgcmVzcG9uc2UuYXBw
ZW5kKGZvcm1hdF9oZWFkZXIoCisgICAgICAgICAgICBjb21tb24uQ09OTkVDVElPTl9IRUFERVIs
IGNvbW1vbi5VUEdSQURFX0NPTk5FQ1RJT05fVFlQRSkpCisgICAgICAgIHJlc3BvbnNlLmFwcGVu
ZChmb3JtYXRfaGVhZGVyKAorICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJTT0NLRVRfQUNDRVBU
X0hFQURFUiwgYWNjZXB0KSkKKyAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlc3BvbnNlLmFwcGVuZChmb3JtYXRfaGVhZGVyKAor
ICAgICAgICAgICAgICAgIGNvbW1vbi5TRUNfV0VCU09DS0VUX1BST1RPQ09MX0hFQURFUiwKKyAg
ICAgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX3Byb3RvY29sKSkKKyAgICAgICAgaWYgKHNl
bGYuX3JlcXVlc3Qud3NfZXh0ZW5zaW9ucyBpcyBub3QgTm9uZSBhbmQKKyAgICAgICAgICAgIGxl
bihzZWxmLl9yZXF1ZXN0LndzX2V4dGVuc2lvbnMpICE9IDApOgorICAgICAgICAgICAgcmVzcG9u
c2UuYXBwZW5kKGZvcm1hdF9oZWFkZXIoCisgICAgICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJT
T0NLRVRfRVhURU5TSU9OU19IRUFERVIsCisgICAgICAgICAgICAgICAgZm9ybWF0X2V4dGVuc2lv
bnMoc2VsZi5fcmVxdWVzdC53c19leHRlbnNpb25zKSkpCisgICAgICAgIHJlc3BvbnNlLmFwcGVu
ZCgnXHJcbicpCisKKyAgICAgICAgcmF3X3Jlc3BvbnNlID0gJycuam9pbihyZXNwb25zZSkKKyAg
ICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKHJhd19yZXNwb25zZSkKKyAgICAg
ICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdTZW50IHNlcnZlclwncyBvcGVuaW5nIGhhbmRzaGFrZTog
JXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3X3Jlc3BvbnNlKQorCisKKyMgdmk6
c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvaHliaTAwLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tl
dC9oYW5kc2hha2UvaHliaTAwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjNmY4ZGM0MzZkNTkyZWExZjBlYTNj
MTY0ZDM2MWE1NzY4NWE1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9oeWJp
MDAucHkKQEAgLTAsMCArMSwyNDIgQEAKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisj
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRoaXMgZmls
ZSBwcm92aWRlcyB0aGUgb3BlbmluZyBoYW5kc2hha2UgcHJvY2Vzc29yIGZvciB0aGUgV2ViU29j
a2V0Citwcm90b2NvbCB2ZXJzaW9uIEh5QmkgMDAuCisKK1NwZWNpZmljYXRpb246CitodHRwOi8v
dG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLWh5YmktdGhld2Vic29ja2V0cHJvdG9jb2wt
MDAKKyIiIgorCisKKyMgTm90ZTogcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlL3JlYWQgYXJlIHVz
ZWQgaW4gdGhpcyBtb2R1bGUsIGV2ZW4gdGhvdWdoCisjIG1vZF9weXRob24gZG9jdW1lbnQgc2F5
cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBjb25uZWN0aW9uCisjIGhhbmRsZXJz
LiBVbmZvcnR1bmF0ZWx5LCB3ZSBoYXZlIG5vIG90aGVyIG9wdGlvbnMuIEZvciBleGFtcGxlLAor
IyByZXF1ZXN0LndyaXRlL3JlYWQgYXJlIG5vdCBzdWl0YWJsZSBiZWNhdXNlIHRoZXkgZG9uJ3Qg
YWxsb3cgZGlyZWN0IHJhdyBieXRlcworIyB3cml0aW5nL3JlYWRpbmcuCisKKworaW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHN0cnVjdAorCitmcm9tIG1vZF9weXdlYnNvY2tldCBp
bXBvcnQgY29tbW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5zdHJlYW0gaW1wb3J0IFN0cmVhbUhp
eGllNzUKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCB1dGlsCitmcm9tIG1vZF9weXdlYnNv
Y2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IEhhbmRzaGFrZUV4Y2VwdGlvbgorZnJvbSBtb2Rf
cHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBidWlsZF9sb2NhdGlvbgorZnJvbSBt
b2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBjaGVja19oZWFkZXJfbGluZXMK
K2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgZm9ybWF0X2hlYWRl
cgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBnZXRfbWFuZGF0
b3J5X2hlYWRlcgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCB2
YWxpZGF0ZV9zdWJwcm90b2NvbAorCisKK19NQU5EQVRPUllfSEVBREVSUyA9IFsKKyAgICAjIGtl
eSwgZXhwZWN0ZWQgdmFsdWUgb3IgTm9uZQorICAgIFtjb21tb24uVVBHUkFERV9IRUFERVIsIGNv
bW1vbi5XRUJTT0NLRVRfVVBHUkFERV9UWVBFX0hJWElFNzVdLAorICAgIFtjb21tb24uQ09OTkVD
VElPTl9IRUFERVIsIGNvbW1vbi5VUEdSQURFX0NPTk5FQ1RJT05fVFlQRV0sCitdCisKKworY2xh
c3MgSGFuZHNoYWtlcihvYmplY3QpOgorICAgICIiIk9wZW5pbmcgaGFuZHNoYWtlIHByb2Nlc3Nv
ciBmb3IgdGhlIFdlYlNvY2tldCBwcm90b2NvbCB2ZXJzaW9uIEh5QmkgMDAuCisgICAgIiIiCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgZGlzcGF0Y2hlcik6CisgICAgICAgICIi
IkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVx
dWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAgICAgZGlzcGF0Y2hlcjogRGlzcGF0
Y2hlciAoZGlzcGF0Y2guRGlzcGF0Y2hlcikuCisKKyAgICAgICAgSGFuZHNoYWtlciB3aWxsIGFk
ZCBhdHRyaWJ1dGVzIHN1Y2ggYXMgd3NfcmVzb3VyY2UgaW4gcGVyZm9ybWluZworICAgICAgICBo
YW5kc2hha2UuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0
X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX3JlcXVlc3QgPSByZXF1ZXN0Cisg
ICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIgPSBkaXNwYXRjaGVyCisKKyAgICBkZWYgZG9faGFuZHNo
YWtlKHNlbGYpOgorICAgICAgICAiIiJQZXJmb3JtIFdlYlNvY2tldCBIYW5kc2hha2UuCisKKyAg
ICAgICAgT24gX3JlcXVlc3QsIHdlIHNldAorICAgICAgICAgICAgd3NfcmVzb3VyY2UsIHdzX3By
b3RvY29sLCB3c19sb2NhdGlvbiwgd3Nfb3JpZ2luLCB3c19jaGFsbGVuZ2UsCisgICAgICAgICAg
ICB3c19jaGFsbGVuZ2VfbWQ1OiBXZWJTb2NrZXQgaGFuZHNoYWtlIGluZm9ybWF0aW9uLgorICAg
ICAgICAgICAgd3Nfc3RyZWFtOiBGcmFtZSBnZW5lcmF0aW9uL3BhcnNpbmcgY2xhc3MuCisgICAg
ICAgICAgICB3c192ZXJzaW9uOiBQcm90b2NvbCB2ZXJzaW9uLgorCisgICAgICAgIFJhaXNlczoK
KyAgICAgICAgICAgIEhhbmRzaGFrZUV4Y2VwdGlvbjogd2hlbiBhbnkgZXJyb3IgaGFwcGVuZWQg
aW4gcGFyc2luZyB0aGUgb3BlbmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
YW5kc2hha2UgcmVxdWVzdC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyA1LjEgUmVhZGluZyB0
aGUgY2xpZW50J3Mgb3BlbmluZyBoYW5kc2hha2UuCisgICAgICAgICMgZGlzcGF0Y2hlciBzZXRz
IGl0IGluIHNlbGYuX3JlcXVlc3QuCisgICAgICAgIGNoZWNrX2hlYWRlcl9saW5lcyhzZWxmLl9y
ZXF1ZXN0LCBfTUFOREFUT1JZX0hFQURFUlMpCisgICAgICAgIHNlbGYuX3NldF9yZXNvdXJjZSgp
CisgICAgICAgIHNlbGYuX3NldF9zdWJwcm90b2NvbCgpCisgICAgICAgIHNlbGYuX3NldF9sb2Nh
dGlvbigpCisgICAgICAgIHNlbGYuX3NldF9vcmlnaW4oKQorICAgICAgICBzZWxmLl9zZXRfY2hh
bGxlbmdlX3Jlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5fc2V0X3Byb3RvY29sX3ZlcnNpb24oKQor
CisgICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIuZG9fZXh0cmFfaGFuZHNoYWtlKHNlbGYuX3JlcXVl
c3QpCisKKyAgICAgICAgc2VsZi5fc2VuZF9oYW5kc2hha2UoKQorCisgICAgZGVmIF9zZXRfcmVz
b3VyY2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcmVzb3VyY2UgPSBzZWxmLl9y
ZXF1ZXN0LnVyaQorCisgICAgZGVmIF9zZXRfc3VicHJvdG9jb2woc2VsZik6CisgICAgICAgICMg
fFNlYy1XZWJTb2NrZXQtUHJvdG9jb2x8CisgICAgICAgIHN1YnByb3RvY29sID0gc2VsZi5fcmVx
dWVzdC5oZWFkZXJzX2luLmdldCgKKyAgICAgICAgICAgIGNvbW1vbi5TRUNfV0VCU09DS0VUX1BS
T1RPQ09MX0hFQURFUikKKyAgICAgICAgaWYgc3VicHJvdG9jb2wgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICB2YWxpZGF0ZV9zdWJwcm90b2NvbChzdWJwcm90b2NvbCwgaGl4aWU9VHJ1ZSkKKyAg
ICAgICAgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCA9IHN1YnByb3RvY29sCisKKyAgICBkZWYg
X3NldF9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgIyB8SG9zdHwKKyAgICAgICAgaG9zdCA9IHNl
bGYuX3JlcXVlc3QuaGVhZGVyc19pbi5nZXQoY29tbW9uLkhPU1RfSEVBREVSKQorICAgICAgICBp
ZiBob3N0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53c19sb2NhdGlv
biA9IGJ1aWxkX2xvY2F0aW9uKHNlbGYuX3JlcXVlc3QpCisgICAgICAgICMgVE9ETyh1a2FpKTog
Y2hlY2sgaG9zdCBpcyB0aGlzIGhvc3QuCisKKyAgICBkZWYgX3NldF9vcmlnaW4oc2VsZik6Cisg
ICAgICAgICMgfE9yaWdpbnwKKyAgICAgICAgb3JpZ2luID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJz
X2luLmdldChjb21tb24uT1JJR0lOX0hFQURFUikKKyAgICAgICAgaWYgb3JpZ2luIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53c19vcmlnaW4gPSBvcmlnaW4KKworICAg
IGRlZiBfc2V0X3Byb3RvY29sX3ZlcnNpb24oc2VsZik6CisgICAgICAgICMgfFNlYy1XZWJTb2Nr
ZXQtRHJhZnR8CisgICAgICAgIGRyYWZ0ID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luLmdldChj
b21tb24uU0VDX1dFQlNPQ0tFVF9EUkFGVF9IRUFERVIpCisgICAgICAgIGlmIGRyYWZ0IGlzIG5v
dCBOb25lIGFuZCBkcmFmdCAhPSAnMCc6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNl
cHRpb24oJ0lsbGVnYWwgdmFsdWUgZm9yICVzOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjb21tb24uU0VDX1dFQlNPQ0tFVF9EUkFGVF9IRUFERVIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWZ0KSkKKworICAgICAgICBzZWxm
Ll9sb2dnZXIuZGVidWcoJ1Byb3RvY29sIHZlcnNpb24gaXMgSHlCaSAwMCcpCisgICAgICAgIHNl
bGYuX3JlcXVlc3Qud3NfdmVyc2lvbiA9IGNvbW1vbi5WRVJTSU9OX0hZQkkwMAorICAgICAgICBz
ZWxmLl9yZXF1ZXN0LndzX3N0cmVhbSA9IFN0cmVhbUhpeGllNzUoc2VsZi5fcmVxdWVzdCwgVHJ1
ZSkKKworICAgIGRlZiBfc2V0X2NoYWxsZW5nZV9yZXNwb25zZShzZWxmKToKKyAgICAgICAgIyA1
LjIgNC04LgorICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2NoYWxsZW5nZSA9IHNlbGYuX2dldF9j
aGFsbGVuZ2UoKQorICAgICAgICAjIDUuMiA5LiBsZXQgL3Jlc3BvbnNlLyBiZSB0aGUgTUQ1IGZp
bnRlcnByaW50IG9mIC9jaGFsbGVuZ2UvCisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfY2hhbGxl
bmdlX21kNSA9IHV0aWwubWQ1X2hhc2goCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2No
YWxsZW5nZSkuZGlnZXN0KCkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAg
ICAgJ0NoYWxsZW5nZTogJXIgKCVzKScsCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2No
YWxsZW5nZSwKKyAgICAgICAgICAgIHV0aWwuaGV4aWZ5KHNlbGYuX3JlcXVlc3Qud3NfY2hhbGxl
bmdlKSkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ0NoYWxsZW5n
ZSByZXNwb25zZTogJXIgKCVzKScsCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2NoYWxs
ZW5nZV9tZDUsCisgICAgICAgICAgICB1dGlsLmhleGlmeShzZWxmLl9yZXF1ZXN0LndzX2NoYWxs
ZW5nZV9tZDUpKQorCisgICAgZGVmIF9nZXRfa2V5X3ZhbHVlKHNlbGYsIGtleV9maWVsZCk6Cisg
ICAgICAgIGtleV92YWx1ZSA9IGdldF9tYW5kYXRvcnlfaGVhZGVyKHNlbGYuX3JlcXVlc3QsIGtl
eV9maWVsZCkKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJyVzOiAlcicsIGtleV9maWVs
ZCwga2V5X3ZhbHVlKQorCisgICAgICAgICMgNS4yIDQuIGxldCAva2V5LW51bWJlcl9uLyBiZSB0
aGUgZGlnaXRzIChjaGFyYWN0ZXJzIGluIHRoZSByYW5nZQorICAgICAgICAjIFUrMDAzMCBESUdJ
VCBaRVJPICgwKSB0byBVKzAwMzkgRElHSVQgTklORSAoOSkpIGluIC9rZXlfbi8sCisgICAgICAg
ICMgaW50ZXJwcmV0ZWQgYXMgYSBiYXNlIHRlbiBpbnRlZ2VyLCBpZ25vcmluZyBhbGwgb3RoZXIg
Y2hhcmFjdGVycworICAgICAgICAjIGluIC9rZXlfbi8uCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIGtleV9udW1iZXIgPSBpbnQocmUuc3ViKCJcXEQiLCAiIiwga2V5X3ZhbHVlKSkKKyAgICAg
ICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKCclcyBmaWVs
ZCBjb250YWlucyBubyBkaWdpdCcgJSBrZXlfZmllbGQpCisgICAgICAgICMgNS4yIDUuIGxldCAv
c3BhY2VzX24vIGJlIHRoZSBudW1iZXIgb2YgVSswMDIwIFNQQUNFIGNoYXJhY3RlcnMKKyAgICAg
ICAgIyBpbiAva2V5X24vLgorICAgICAgICBzcGFjZXMgPSByZS5zdWJuKCIgIiwgIiIsIGtleV92
YWx1ZSlbMV0KKyAgICAgICAgaWYgc3BhY2VzID09IDA6CisgICAgICAgICAgICByYWlzZSBIYW5k
c2hha2VFeGNlcHRpb24oJyVzIGZpZWxkIGNvbnRhaW5zIG5vIHNwYWNlJyAlIGtleV9maWVsZCkK
KworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAnJXM6IEtleS1udW1i
ZXIgaXMgJWQgYW5kIG51bWJlciBvZiBzcGFjZXMgaXMgJWQnLAorICAgICAgICAgICAga2V5X2Zp
ZWxkLCBrZXlfbnVtYmVyLCBzcGFjZXMpCisKKyAgICAgICAgIyA1LjIgNi4gaWYgL2tleS1udW1i
ZXJfbi8gaXMgbm90IGFuIGludGVncmFsIG11bHRpcGxlIG9mIC9zcGFjZXNfbi8KKyAgICAgICAg
IyB0aGVuIGFib3J0IHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4KKyAgICAgICAgaWYga2V5X251
bWJlciAlIHNwYWNlcyAhPSAwOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9u
KAorICAgICAgICAgICAgICAgICclczogS2V5LW51bWJlciAoJWQpIGlzIG5vdCBhbiBpbnRlZ3Jh
bCBtdWx0aXBsZSBvZiBzcGFjZXMgJworICAgICAgICAgICAgICAgICcoJWQpJyAlIChrZXlfZmll
bGQsIGtleV9udW1iZXIsIHNwYWNlcykpCisgICAgICAgICMgNS4yIDcuIGxldCAvcGFydF9uLyBi
ZSAva2V5LW51bWJlcl9uLyBkaXZpZGVkIGJ5IC9zcGFjZXNfbi8uCisgICAgICAgIHBhcnQgPSBr
ZXlfbnVtYmVyIC8gc3BhY2VzCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnJXM6IFBhcnQg
aXMgJWQnLCBrZXlfZmllbGQsIHBhcnQpCisgICAgICAgIHJldHVybiBwYXJ0CisKKyAgICBkZWYg
X2dldF9jaGFsbGVuZ2Uoc2VsZik6CisgICAgICAgICMgNS4yIDQtNy4KKyAgICAgICAga2V5MSA9
IHNlbGYuX2dldF9rZXlfdmFsdWUoY29tbW9uLlNFQ19XRUJTT0NLRVRfS0VZMV9IRUFERVIpCisg
ICAgICAgIGtleTIgPSBzZWxmLl9nZXRfa2V5X3ZhbHVlKGNvbW1vbi5TRUNfV0VCU09DS0VUX0tF
WTJfSEVBREVSKQorICAgICAgICAjIDUuMiA4LiBsZXQgL2NoYWxsZW5nZS8gYmUgdGhlIGNvbmNh
dGVuYXRpb24gb2YgL3BhcnRfMS8sCisgICAgICAgIGNoYWxsZW5nZSA9ICcnCisgICAgICAgIGNo
YWxsZW5nZSArPSBzdHJ1Y3QucGFjaygnIUknLCBrZXkxKSAgIyBuZXR3b3JrIGJ5dGVvcmRlciBp
bnQKKyAgICAgICAgY2hhbGxlbmdlICs9IHN0cnVjdC5wYWNrKCchSScsIGtleTIpICAjIG5ldHdv
cmsgYnl0ZW9yZGVyIGludAorICAgICAgICBjaGFsbGVuZ2UgKz0gc2VsZi5fcmVxdWVzdC5jb25u
ZWN0aW9uLnJlYWQoOCkKKyAgICAgICAgcmV0dXJuIGNoYWxsZW5nZQorCisgICAgZGVmIF9zZW5k
X2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgcmVzcG9uc2UgPSBbXQorCisgICAgICAgICMgNS4y
IDEwLiBzZW5kIHRoZSBmb2xsb3dpbmcgbGluZS4KKyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKCdI
VFRQLzEuMSAxMDEgV2ViU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nKQorCisgICAgICAg
ICMgNS4yIDExLiBzZW5kIHRoZSBmb2xsb3dpbmcgZmllbGRzIHRvIHRoZSBjbGllbnQuCisgICAg
ICAgIHJlc3BvbnNlLmFwcGVuZChmb3JtYXRfaGVhZGVyKAorICAgICAgICAgICAgY29tbW9uLlVQ
R1JBREVfSEVBREVSLCBjb21tb24uV0VCU09DS0VUX1VQR1JBREVfVFlQRV9ISVhJRTc1KSkKKyAg
ICAgICAgcmVzcG9uc2UuYXBwZW5kKGZvcm1hdF9oZWFkZXIoCisgICAgICAgICAgICBjb21tb24u
Q09OTkVDVElPTl9IRUFERVIsIGNvbW1vbi5VUEdSQURFX0NPTk5FQ1RJT05fVFlQRSkpCisgICAg
ICAgIHJlc3BvbnNlLmFwcGVuZChmb3JtYXRfaGVhZGVyKAorICAgICAgICAgICAgY29tbW9uLlNF
Q19XRUJTT0NLRVRfTE9DQVRJT05fSEVBREVSLCBzZWxmLl9yZXF1ZXN0LndzX2xvY2F0aW9uKSkK
KyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKGZvcm1hdF9oZWFkZXIoCisgICAgICAgICAgICBjb21t
b24uU0VDX1dFQlNPQ0tFVF9PUklHSU5fSEVBREVSLCBzZWxmLl9yZXF1ZXN0LndzX29yaWdpbikp
CisgICAgICAgIGlmIHNlbGYuX3JlcXVlc3Qud3NfcHJvdG9jb2w6CisgICAgICAgICAgICByZXNw
b25zZS5hcHBlbmQoZm9ybWF0X2hlYWRlcigKKyAgICAgICAgICAgICAgICBjb21tb24uU0VDX1dF
QlNPQ0tFVF9QUk9UT0NPTF9IRUFERVIsCisgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53
c19wcm90b2NvbCkpCisgICAgICAgICMgNS4yIDEyLiBzZW5kIHR3byBieXRlcyAweDBEIDB4MEEu
CisgICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnXHJcbicpCisgICAgICAgICMgNS4yIDEzLiBzZW5k
IC9yZXNwb25zZS8KKyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKHNlbGYuX3JlcXVlc3Qud3NfY2hh
bGxlbmdlX21kNSkKKworICAgICAgICByYXdfcmVzcG9uc2UgPSAnJy5qb2luKHJlc3BvbnNlKQor
ICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUocmF3X3Jlc3BvbnNlKQorICAg
ICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1NlbnQgc2VydmVyXCdzIG9wZW5pbmcgaGFuZHNoYWtl
OiAlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdfcmVzcG9uc2UpCisKKworIyB2
aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hlYWRlcnBhcnNlcmhhbmRsZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vi
c29ja2V0L2hlYWRlcnBhcnNlcmhhbmRsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjY4YzI0MGUxNjVlZDhl
NDJkOTlkMzU5YTAyODIxOTM5YjkyMjBkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVy
cGFyc2VyaGFuZGxlci5weQpAQCAtMCwwICsxLDI0MyBAQAorIyBDb3B5cmlnaHQgMjAxMSwgR29v
Z2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwor
IiIiUHl0aG9uSGVhZGVyUGFyc2VySGFuZGxlciBmb3IgbW9kX3B5d2Vic29ja2V0LgorCitBcGFj
aGUgSFRUUCBTZXJ2ZXIgYW5kIG1vZF9weXRob24gbXVzdCBiZSBjb25maWd1cmVkIHN1Y2ggdGhh
dCB0aGlzCitmdW5jdGlvbiBpcyBjYWxsZWQgdG8gaGFuZGxlIFdlYlNvY2tldCByZXF1ZXN0Lgor
IiIiCisKKworaW1wb3J0IGxvZ2dpbmcKKworZnJvbSBtb2RfcHl0aG9uIGltcG9ydCBhcGFjaGUK
KworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2Nr
ZXQgaW1wb3J0IGRpc3BhdGNoCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgaGFuZHNoYWtl
Citmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgdXRpbAorCisKKyMgUHl0aG9uT3B0aW9uIHRv
IHNwZWNpZnkgdGhlIGhhbmRsZXIgcm9vdCBkaXJlY3RvcnkuCitfUFlPUFRfSEFORExFUl9ST09U
ID0gJ21vZF9weXdlYnNvY2tldC5oYW5kbGVyX3Jvb3QnCisKKyMgUHl0aG9uT3B0aW9uIHRvIHNw
ZWNpZnkgdGhlIGhhbmRsZXIgc2NhbiBkaXJlY3RvcnkuCisjIFRoaXMgbXVzdCBiZSBhIGRpcmVj
dG9yeSB1bmRlciB0aGUgcm9vdCBkaXJlY3RvcnkuCisjIFRoZSBkZWZhdWx0IGlzIHRoZSByb290
IGRpcmVjdG9yeS4KK19QWU9QVF9IQU5ETEVSX1NDQU4gPSAnbW9kX3B5d2Vic29ja2V0LmhhbmRs
ZXJfc2NhbicKKworIyBQeXRob25PcHRpb24gdG8gYWxsb3cgaGFuZGxlcnMgd2hvc2UgY2Fub25p
Y2FsIHBhdGggaXMKKyMgbm90IHVuZGVyIHRoZSByb290IGRpcmVjdG9yeS4gSXQncyBkaXNhbGxv
d2VkIGJ5IGRlZmF1bHQuCisjIFNldCB0aGlzIG9wdGlvbiB3aXRoIHZhbHVlIG9mICd5ZXMnIHRv
IGFsbG93LgorX1BZT1BUX0FMTE9XX0hBTkRMRVJTX09VVFNJREVfUk9PVCA9ICgKKyAgICAnbW9k
X3B5d2Vic29ja2V0LmFsbG93X2hhbmRsZXJzX291dHNpZGVfcm9vdF9kaXInKQorIyBNYXAgZnJv
bSB2YWx1ZXMgdG8gdGhlaXIgbWVhbmluZ3MuICdZZXMnIGFuZCAnTm8nIGFyZSBhbGxvd2VkIGp1
c3QgZm9yCisjIGNvbXBhdGliaWxpdHkuCitfUFlPUFRfQUxMT1dfSEFORExFUlNfT1VUU0lERV9S
T09UX0RFRklOSVRJT04gPSB7CisgICAgJ29mZic6IEZhbHNlLCAnbm8nOiBGYWxzZSwgJ29uJzog
VHJ1ZSwgJ3llcyc6IFRydWV9CisKKyMgUHl0aG9uT3B0aW9uIHRvIHNwZWNpZnkgdG8gYWxsb3cg
ZHJhZnQ3NSBoYW5kc2hha2UuCisjIFRoZSBkZWZhdWx0IGlzIE5vbmUgKE9mZikKK19QWU9QVF9B
TExPV19EUkFGVDc1ID0gJ21vZF9weXdlYnNvY2tldC5hbGxvd19kcmFmdDc1JworIyBNYXAgZnJv
bSB2YWx1ZXMgdG8gdGhlaXIgbWVhbmluZ3MuCitfUFlPUFRfQUxMT1dfRFJBRlQ3NV9ERUZJTklU
SU9OID0geydvZmYnOiBGYWxzZSwgJ29uJzogVHJ1ZX0KKworCitjbGFzcyBBcGFjaGVMb2dIYW5k
bGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgIiIiV3JhcHBlciBsb2dnaW5nLkhhbmRsZXIgdG8g
ZW1pdCBsb2cgbWVzc2FnZSB0byBhcGFjaGUncyBlcnJvci5sb2cuIiIiCisKKyAgICBfTEVWRUxT
ID0geworICAgICAgICBsb2dnaW5nLkRFQlVHOiBhcGFjaGUuQVBMT0dfREVCVUcsCisgICAgICAg
IGxvZ2dpbmcuSU5GTzogYXBhY2hlLkFQTE9HX0lORk8sCisgICAgICAgIGxvZ2dpbmcuV0FSTklO
RzogYXBhY2hlLkFQTE9HX1dBUk5JTkcsCisgICAgICAgIGxvZ2dpbmcuRVJST1I6IGFwYWNoZS5B
UExPR19FUlIsCisgICAgICAgIGxvZ2dpbmcuQ1JJVElDQUw6IGFwYWNoZS5BUExPR19DUklULAor
ICAgICAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdD1Ob25lKToKKyAgICAg
ICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2xvZ19lcnJv
ciA9IGFwYWNoZS5sb2dfZXJyb3IKKyAgICAgICAgaWYgcmVxdWVzdCBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIHNlbGYuX2xvZ19lcnJvciA9IHJlcXVlc3QubG9nX2Vycm9yCisKKyAgICAgICAg
IyBUaW1lIGFuZCBsZXZlbCB3aWxsIGJlIHByaW50ZWQgYnkgQXBhY2hlLgorICAgICAgICBzZWxm
Ll9mb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShuYW1lKXM6ICUobWVzc2FnZSlzJykK
KworICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6CisgICAgICAgIGFwYWNoZV9sZXZlbCA9IGFw
YWNoZS5BUExPR19ERUJVRworICAgICAgICBpZiByZWNvcmQubGV2ZWxubyBpbiBBcGFjaGVMb2dI
YW5kbGVyLl9MRVZFTFM6CisgICAgICAgICAgICBhcGFjaGVfbGV2ZWwgPSBBcGFjaGVMb2dIYW5k
bGVyLl9MRVZFTFNbcmVjb3JkLmxldmVsbm9dCisKKyAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0
dGVyLmZvcm1hdChyZWNvcmQpCisKKyAgICAgICAgIyAic2VydmVyIiBwYXJhbWV0ZXIgbXVzdCBi
ZSBwYXNzZWQgdG8gaGF2ZSAibGV2ZWwiIHBhcmFtZXRlciB3b3JrLgorICAgICAgICAjIElmIG9u
bHkgImxldmVsIiBwYXJhbWV0ZXIgaXMgcGFzc2VkLCBub3RoaW5nIHNob3dzIHVwIG9uIEFwYWNo
ZSdzCisgICAgICAgICMgbG9nLiBIb3dldmVyLCBhdCB0aGlzIHBvaW50LCB3ZSBjYW5ub3QgZ2V0
IHRoZSBzZXJ2ZXIgb2JqZWN0IG9mIHRoZQorICAgICAgICAjIHZpcnR1YWwgaG9zdCB3aGljaCB3
aWxsIHByb2Nlc3MgV2ViU29ja2V0IHJlcXVlc3RzLiBUaGUgb25seSBzZXJ2ZXIKKyAgICAgICAg
IyBvYmplY3Qgd2UgY2FuIGdldCBoZXJlIGlzIGFwYWNoZS5tYWluX3NlcnZlci4gQnV0IFdoZXJl
dmVyIChzZXJ2ZXIKKyAgICAgICAgIyBjb25maWd1cmF0aW9uIGNvbnRleHQgb3IgdmlydHVhbCBo
b3N0IGNvbnRleHQpIHdlIHB1dAorICAgICAgICAjIFB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIg
ZGlyZWN0aXZlLCBhcGFjaGUubWFpbl9zZXJ2ZXIganVzdCBwb2ludHMKKyAgICAgICAgIyB0aGUg
bWFpbiBzZXJ2ZXIgaW5zdGFuY2UgKG5vdCBhbnkgb2YgdmlydHVhbCBzZXJ2ZXIgaW5zdGFuY2Up
LiBUaGVuLAorICAgICAgICAjIEFwYWNoZSBmb2xsb3dzIExvZ0xldmVsIGRpcmVjdGl2ZSBpbiB0
aGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gY29udGV4dAorICAgICAgICAjIHRvIGZpbHRlciBsb2dz
LiBTbywgd2UgbmVlZCB0byBzcGVjaWZ5IExvZ0xldmVsIGluIHRoZSBzZXJ2ZXIKKyAgICAgICAg
IyBjb25maWd1cmF0aW9uIGNvbnRleHQuIEV2ZW4gaWYgd2Ugc3BlY2lmeSAiTG9nTGV2ZWwgZGVi
dWciIGluIHRoZQorICAgICAgICAjIHZpcnR1YWwgaG9zdCBjb250ZXh0IHdoaWNoIGFjdHVhbGx5
IGhhbmRsZXMgV2ViU29ja2V0IGNvbm5lY3Rpb25zLAorICAgICAgICAjIERFQlVHIGxldmVsIGxv
Z3MgbmV2ZXIgc2hvdyB1cCB1bmxlc3MgIkxvZ0xldmVsIGRlYnVnIiBpcyBzcGVjaWZpZWQKKyAg
ICAgICAgIyBpbiB0aGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gY29udGV4dC4KKyAgICAgICAgIwor
ICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBQcm92aWRlIGxvZ2dpbmcgbWV0aG9kcyBvbiByZXF1
ZXN0IG9iamVjdC4gV2hlbgorICAgICAgICAjIHJlcXVlc3QgaXMgbXBfcmVxdWVzdCBvYmplY3Qg
KHdoZW4gdXNlZCB0b2dldGhlciB3aXRoIEFwYWNoZSksIHRoZQorICAgICAgICAjIG1ldGhvZHMg
Y2FsbCByZXF1ZXN0LmxvZ19lcnJvciBpbmRpcmVjdGx5LiBXaGVuIHJlcXVlc3QgaXMKKyAgICAg
ICAgIyBfU3RhbmRhbG9uZVJlcXVlc3QsIHRoZSBtZXRob2RzIGNhbGwgUHl0aG9uJ3MgbG9nZ2lu
ZyBmYWNpbGl0eSB3aGljaAorICAgICAgICAjIHdlIGNyZWF0ZSBpbiBzdGFuZGFsb25lLnB5Lgor
ICAgICAgICBzZWxmLl9sb2dfZXJyb3IobXNnLCBhcGFjaGVfbGV2ZWwsIGFwYWNoZS5tYWluX3Nl
cnZlcikKKworCitkZWYgX2NvbmZpZ3VyZV9sb2dnaW5nKCk6CisgICAgbG9nZ2VyID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoKQorICAgICMgTG9ncyBhcmUgZmlsdGVyZWQgYnkgQXBhY2hlIGJhc2VkIG9u
IExvZ0xldmVsIGRpcmVjdGl2ZSBpbiBBcGFjaGUKKyAgICAjIGNvbmZpZ3VyYXRpb24gZmlsZS4g
V2UgbXVzdCBqdXN0IHBhc3MgbG9ncyBmb3IgYWxsIGxldmVscyB0bworICAgICMgQXBhY2hlTG9n
SGFuZGxlci4KKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICBsb2dnZXIu
YWRkSGFuZGxlcihBcGFjaGVMb2dIYW5kbGVyKCkpCisKKworX2NvbmZpZ3VyZV9sb2dnaW5nKCkK
KworX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2RlZiBfcGFyc2Vf
b3B0aW9uKG5hbWUsIHZhbHVlLCBkZWZpbml0aW9uKToKKyAgICBpZiB2YWx1ZSBpcyBOb25lOgor
ICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIG1lYW5pbmcgPSBkZWZpbml0aW9uLmdldCh2YWx1
ZS5sb3dlcigpKQorICAgIGlmIG1lYW5pbmcgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCdJbnZhbGlkIHZhbHVlIGZvciBQeXRob25PcHRpb24gJXM6ICVyJyAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAobmFtZSwgdmFsdWUpKQorICAgIHJldHVybiBtZWFuaW5nCisKKworZGVm
IF9jcmVhdGVfZGlzcGF0Y2hlcigpOgorICAgIF9MT0dHRVIuaW5mbygnSW5pdGlhbGl6aW5nIERp
c3BhdGNoZXInKQorCisgICAgb3B0aW9ucyA9IGFwYWNoZS5tYWluX3NlcnZlci5nZXRfb3B0aW9u
cygpCisKKyAgICBoYW5kbGVyX3Jvb3QgPSBvcHRpb25zLmdldChfUFlPUFRfSEFORExFUl9ST09U
LCBOb25lKQorICAgIGlmIG5vdCBoYW5kbGVyX3Jvb3Q6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bignUHl0aG9uT3B0aW9uICVzIGlzIG5vdCBkZWZpbmVkJyAlIF9QWU9QVF9IQU5ETEVSX1JPT1Qs
CisgICAgICAgICAgICAgICAgICAgICAgICBhcGFjaGUuQVBMT0dfRVJSKQorCisgICAgaGFuZGxl
cl9zY2FuID0gb3B0aW9ucy5nZXQoX1BZT1BUX0hBTkRMRVJfU0NBTiwgaGFuZGxlcl9yb290KQor
CisgICAgYWxsb3dfaGFuZGxlcnNfb3V0c2lkZV9yb290ID0gX3BhcnNlX29wdGlvbigKKyAgICAg
ICAgX1BZT1BUX0FMTE9XX0hBTkRMRVJTX09VVFNJREVfUk9PVCwKKyAgICAgICAgb3B0aW9ucy5n
ZXQoX1BZT1BUX0FMTE9XX0hBTkRMRVJTX09VVFNJREVfUk9PVCksCisgICAgICAgIF9QWU9QVF9B
TExPV19IQU5ETEVSU19PVVRTSURFX1JPT1RfREVGSU5JVElPTikKKworICAgIGRpc3BhdGNoZXIg
PSBkaXNwYXRjaC5EaXNwYXRjaGVyKAorICAgICAgICBoYW5kbGVyX3Jvb3QsIGhhbmRsZXJfc2Nh
biwgYWxsb3dfaGFuZGxlcnNfb3V0c2lkZV9yb290KQorCisgICAgZm9yIHdhcm5pbmcgaW4gZGlz
cGF0Y2hlci5zb3VyY2Vfd2FybmluZ3MoKToKKyAgICAgICAgYXBhY2hlLmxvZ19lcnJvcignbW9k
X3B5d2Vic29ja2V0OiAlcycgJSB3YXJuaW5nLCBhcGFjaGUuQVBMT0dfV0FSTklORykKKworICAg
IHJldHVybiBkaXNwYXRjaGVyCisKKworIyBJbml0aWFsaXplCitfZGlzcGF0Y2hlciA9IF9jcmVh
dGVfZGlzcGF0Y2hlcigpCisKKworZGVmIGhlYWRlcnBhcnNlcmhhbmRsZXIocmVxdWVzdCk6Cisg
ICAgIiIiSGFuZGxlIHJlcXVlc3QuCisKKyAgICBBcmdzOgorICAgICAgICByZXF1ZXN0OiBtb2Rf
cHl0aG9uIHJlcXVlc3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIG5hbWVkIGhlYWRlcnBhcnNl
cmhhbmRsZXIgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdAorICAgIG5hbWUgZm9yIGEgUHl0aG9u
SGVhZGVyUGFyc2VySGFuZGxlci4KKyAgICAiIiIKKworICAgIGhhbmRzaGFrZV9pc19kb25lID0g
RmFsc2UKKyAgICB0cnk6CisgICAgICAgICMgRmFsbGJhY2sgdG8gZGVmYXVsdCBodHRwIGhhbmRs
ZXIgZm9yIHJlcXVlc3QgcGF0aHMgZm9yIHdoaWNoCisgICAgICAgICMgd2UgZG9uJ3QgaGF2ZSBy
ZXF1ZXN0IGhhbmRsZXJzLgorICAgICAgICBpZiBub3QgX2Rpc3BhdGNoZXIuZ2V0X2hhbmRsZXJf
c3VpdGUocmVxdWVzdC51cmkpOgorICAgICAgICAgICAgcmVxdWVzdC5sb2dfZXJyb3IoJ05vIGhh
bmRsZXIgZm9yIHJlc291cmNlOiAlcicgJSByZXF1ZXN0LnVyaSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFwYWNoZS5BUExPR19JTkZPKQorICAgICAgICAgICAgcmVxdWVzdC5sb2df
ZXJyb3IoJ0ZhbGxiYWNrIHRvIEFwYWNoZScsIGFwYWNoZS5BUExPR19JTkZPKQorICAgICAgICAg
ICAgcmV0dXJuIGFwYWNoZS5ERUNMSU5FRAorICAgIGV4Y2VwdCBkaXNwYXRjaC5EaXNwYXRjaEV4
Y2VwdGlvbiwgZToKKyAgICAgICAgcmVxdWVzdC5sb2dfZXJyb3IoJ21vZF9weXdlYnNvY2tldDog
JXMnICUgZSwgYXBhY2hlLkFQTE9HX0lORk8pCisgICAgICAgIGlmIG5vdCBoYW5kc2hha2VfaXNf
ZG9uZToKKyAgICAgICAgICAgIHJldHVybiBlLnN0YXR1cworCisgICAgdHJ5OgorICAgICAgICBh
bGxvd19kcmFmdDc1ID0gX3BhcnNlX29wdGlvbigKKyAgICAgICAgICAgIF9QWU9QVF9BTExPV19E
UkFGVDc1LAorICAgICAgICAgICAgYXBhY2hlLm1haW5fc2VydmVyLmdldF9vcHRpb25zKCkuZ2V0
KF9QWU9QVF9BTExPV19EUkFGVDc1KSwKKyAgICAgICAgICAgIF9QWU9QVF9BTExPV19EUkFGVDc1
X0RFRklOSVRJT04pCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaGFuZHNoYWtlLmRvX2hh
bmRzaGFrZSgKKyAgICAgICAgICAgICAgICByZXF1ZXN0LCBfZGlzcGF0Y2hlciwgYWxsb3dEcmFm
dDc1PWFsbG93X2RyYWZ0NzUpCisgICAgICAgIGV4Y2VwdCBoYW5kc2hha2UuVmVyc2lvbkV4Y2Vw
dGlvbiwgZToKKyAgICAgICAgICAgIHJlcXVlc3QubG9nX2Vycm9yKCdtb2RfcHl3ZWJzb2NrZXQ6
ICVzJyAlIGUsIGFwYWNoZS5BUExPR19JTkZPKQorICAgICAgICAgICAgcmVxdWVzdC5lcnJfaGVh
ZGVyc19vdXQuYWRkKGNvbW1vbi5TRUNfV0VCU09DS0VUX1ZFUlNJT05fSEVBREVSLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3VwcG9ydGVkX3ZlcnNpb25zKQor
ICAgICAgICAgICAgcmV0dXJuIGFwYWNoZS5IVFRQX0JBRF9SRVFVRVNUCisgICAgICAgIGV4Y2Vw
dCBoYW5kc2hha2UuSGFuZHNoYWtlRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgIyBIYW5kc2hh
a2UgZm9yIHdzL3dzcyBmYWlsZWQuCisgICAgICAgICAgICAjIFNlbmQgaHR0cCByZXNwb25zZSB3
aXRoIGVycm9yIHN0YXR1cy4KKyAgICAgICAgICAgIHJlcXVlc3QubG9nX2Vycm9yKCdtb2RfcHl3
ZWJzb2NrZXQ6ICVzJyAlIGUsIGFwYWNoZS5BUExPR19JTkZPKQorICAgICAgICAgICAgcmV0dXJu
IGUuc3RhdHVzCisKKyAgICAgICAgaGFuZHNoYWtlX2lzX2RvbmUgPSBUcnVlCisgICAgICAgIHJl
cXVlc3QuX2Rpc3BhdGNoZXIgPSBfZGlzcGF0Y2hlcgorICAgICAgICBfZGlzcGF0Y2hlci50cmFu
c2Zlcl9kYXRhKHJlcXVlc3QpCisgICAgZXhjZXB0IGhhbmRzaGFrZS5BYm9ydGVkQnlVc2VyRXhj
ZXB0aW9uLCBlOgorICAgICAgICByZXF1ZXN0LmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0OiAl
cycgJSBlLCBhcGFjaGUuQVBMT0dfSU5GTykKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAg
ICAgICAjIERpc3BhdGNoRXhjZXB0aW9uIGNhbiBhbHNvIGJlIHRocm93biBpZiBzb21ldGhpbmcg
aXMgd3JvbmcgaW4KKyAgICAgICAgIyBweXdlYnNvY2tldCBjb2RlLiBJdCdzIGNhdWdodCBoZXJl
LCB0aGVuLgorCisgICAgICAgIHJlcXVlc3QubG9nX2Vycm9yKCdtb2RfcHl3ZWJzb2NrZXQ6ICVz
XG4lcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZSwgdXRpbC5nZXRfc3RhY2tfdHJh
Y2UoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFwYWNoZS5BUExPR19FUlIpCisgICAg
ICAgICMgVW5rbm93biBleGNlcHRpb25zIGJlZm9yZSBoYW5kc2hha2UgbWVhbiBBcGFjaGUgbXVz
dCBoYW5kbGUgaXRzCisgICAgICAgICMgcmVxdWVzdCB3aXRoIGFub3RoZXIgaGFuZGxlci4KKyAg
ICAgICAgaWYgbm90IGhhbmRzaGFrZV9pc19kb25lOgorICAgICAgICAgICAgcmV0dXJuIGFwYWNo
ZS5ERUNMSU5FRAorICAgICMgU2V0IGFzc2JhY2t3YXJkcyB0byBzdXBwcmVzcyByZXNwb25zZSBo
ZWFkZXIgZ2VuZXJhdGlvbiBieSBBcGFjaGUuCisgICAgcmVxdWVzdC5hc3NiYWNrd2FyZHMgPSAx
CisgICAgcmV0dXJuIGFwYWNoZS5ET05FICAjIFJldHVybiBET05FIHN1Y2ggdGhhdCBubyBvdGhl
ciBoYW5kbGVycyBhcmUgaW52b2tlZC4KKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3
ZWJzb2NrZXQvaHR0cF9oZWFkZXJfdXRpbC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaHR0cF9oZWFkZXJfdXRpbC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNzc0NjUzOTMyODVmZjFiZDZiZjhkOTk0MDFjYzY3NDQyMTI1ZTBiCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29j
a2V0L21vZF9weXdlYnNvY2tldC9odHRwX2hlYWRlcl91dGlsLnB5CkBAIC0wLDAgKzEsMjYzIEBA
CisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJVdGlsaXRpZXMgZm9yIHBhcnNpbmcgYW5kIGZvcm1h
dHRpbmcgaGVhZGVycyB0aGF0IGZvbGxvdyB0aGUgZ3JhbW1hciBkZWZpbmVkCitpbiBIVFRQIFJG
QyBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyNjE2LnR4dC4KKyIiIgorCisKK2ltcG9ydCB1
cmxwYXJzZQorCisKK19TRVBBUkFUT1JTID0gJygpPD5ALDs6XFwiL1tdPz17fSBcdCcKKworCitk
ZWYgX2lzX2NoYXIoYyk6CisgICAgIiIiUmV0dXJucyB0cnVlIGlmZiBjIGlzIGluIENIQVIgYXMg
c3BlY2lmaWVkIGluIEhUVFAgUkZDLiIiIgorCisgICAgcmV0dXJuIG9yZChjKSA8PSAxMjcKKwor
CitkZWYgX2lzX2N0bChjKToKKyAgICAiIiJSZXR1cm5zIHRydWUgaWZmIGMgaXMgaW4gQ1RMIGFz
IHNwZWNpZmllZCBpbiBIVFRQIFJGQy4iIiIKKworICAgIHJldHVybiBvcmQoYykgPD0gMzEgb3Ig
b3JkKGMpID09IDEyNworCisKK2NsYXNzIFBhcnNpbmdTdGF0ZShvYmplY3QpOgorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAg
IHNlbGYuaGVhZCA9IDAKKworCitkZWYgcGVlayhzdGF0ZSwgcG9zPTApOgorICAgICIiIlBlZWtz
IHRoZSBjaGFyYWN0ZXIgYXQgcG9zIGZyb20gdGhlIGhlYWQgb2YgZGF0YS4iIiIKKworICAgIGlm
IHN0YXRlLmhlYWQgKyBwb3MgPj0gbGVuKHN0YXRlLmRhdGEpOgorICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgcmV0dXJuIHN0YXRlLmRhdGFbc3RhdGUuaGVhZCArIHBvc10KKworCitkZWYgY29u
c3VtZShzdGF0ZSwgYW1vdW50PTEpOgorICAgICIiIkNvbnN1bWVzIHNwZWNpZmllZCBhbW91bnQg
b2YgYnl0ZXMgZnJvbSB0aGUgaGVhZCBhbmQgcmV0dXJucyB0aGUKKyAgICBjb25zdW1lZCBieXRl
cy4gSWYgdGhlcmUncyBub3QgZW5vdWdoIGJ5dGVzIHRvIGNvbnN1bWUsIHJldHVybnMgTm9uZS4K
KyAgICAiIiIKKworICAgIGlmIHN0YXRlLmhlYWQgKyBhbW91bnQgPiBsZW4oc3RhdGUuZGF0YSk6
CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICByZXN1bHQgPSBzdGF0ZS5kYXRhW3N0YXRlLmhl
YWQ6c3RhdGUuaGVhZCArIGFtb3VudF0KKyAgICBzdGF0ZS5oZWFkID0gc3RhdGUuaGVhZCArIGFt
b3VudAorICAgIHJldHVybiByZXN1bHQKKworCitkZWYgY29uc3VtZV9zdHJpbmcoc3RhdGUsIGV4
cGVjdGVkKToKKyAgICAiIiJHaXZlbiBhIHBhcnNpbmcgc3RhdGUgYW5kIGEgZXhwZWN0ZWQgc3Ry
aW5nLCBjb25zdW1lcyB0aGUgc3RyaW5nIGZyb20KKyAgICB0aGUgaGVhZC4gUmV0dXJucyBUcnVl
IGlmIGNvbnN1bWVkIHN1Y2Nlc3NmdWxseS4gT3RoZXJ3aXNlLCByZXR1cm5zCisgICAgRmFsc2Uu
CisgICAgIiIiCisKKyAgICBwb3MgPSAwCisKKyAgICBmb3IgYyBpbiBleHBlY3RlZDoKKyAgICAg
ICAgaWYgYyAhPSBwZWVrKHN0YXRlLCBwb3MpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgICAgIHBvcyArPSAxCisKKyAgICBjb25zdW1lKHN0YXRlLCBwb3MpCisgICAgcmV0dXJuIFRy
dWUKKworCitkZWYgY29uc3VtZV9sd3Moc3RhdGUpOgorICAgICIiIkNvbnN1bWVzIGEgTFdTIGZy
b20gdGhlIGhlYWQuIFJldHVybnMgVHJ1ZSBpZiBhbnkgTFdTIGlzIGNvbnN1bWVkLgorICAgIE90
aGVyd2lzZSwgcmV0dXJucyBGYWxzZS4KKworICAgIExXUyA9IFtDUkxGXSAxKiggU1AgfCBIVCAp
CisgICAgIiIiCisKKyAgICBvcmlnaW5hbF9oZWFkID0gc3RhdGUuaGVhZAorCisgICAgY29uc3Vt
ZV9zdHJpbmcoc3RhdGUsICdcclxuJykKKworICAgIHBvcyA9IDAKKworICAgIHdoaWxlIFRydWU6
CisgICAgICAgIGMgPSBwZWVrKHN0YXRlLCBwb3MpCisgICAgICAgIGlmIGMgPT0gJyAnIG9yIGMg
PT0gJ1x0JzoKKyAgICAgICAgICAgIHBvcyArPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBpZiBwb3MgPT0gMDoKKyAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkID0gb3JpZ2luYWxfaGVh
ZAorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBjb25zdW1lKHN0YXRlLCBwb3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRy
dWUKKworCitkZWYgY29uc3VtZV9sd3NlcyhzdGF0ZSk6CisgICAgIiIiQ29uc3VtZXMgKkxXUyBm
cm9tIHRoZSBoZWFkLiIiIgorCisgICAgd2hpbGUgY29uc3VtZV9sd3Moc3RhdGUpOgorICAgICAg
ICBwYXNzCisKKworZGVmIGNvbnN1bWVfdG9rZW4oc3RhdGUpOgorICAgICIiIkNvbnN1bWVzIGEg
dG9rZW4gZnJvbSB0aGUgaGVhZC4gUmV0dXJucyB0aGUgdG9rZW4gb3IgTm9uZSBpZiBubyB0b2tl
bgorICAgIHdhcyBmb3VuZC4KKyAgICAiIiIKKworICAgIHBvcyA9IDAKKworICAgIHdoaWxlIFRy
dWU6CisgICAgICAgIGMgPSBwZWVrKHN0YXRlLCBwb3MpCisgICAgICAgIGlmIGMgaXMgTm9uZSBv
ciBjIGluIF9TRVBBUkFUT1JTIG9yIF9pc19jdGwoYykgb3Igbm90IF9pc19jaGFyKGMpOgorICAg
ICAgICAgICAgaWYgcG9zID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
ICAgICAgICAgcmV0dXJuIGNvbnN1bWUoc3RhdGUsIHBvcykKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHBvcyArPSAxCisKKworZGVmIGNvbnN1bWVfdG9rZW5fb3JfcXVvdGVkX3N0cmluZyhz
dGF0ZSk6CisgICAgIiIiQ29uc3VtZXMgYSB0b2tlbiBvciBhIHF1b3RlZC1zdHJpbmcsIGFuZCBy
ZXR1cm5zIHRoZSB0b2tlbiBvciB1bnF1b3RlZAorICAgIHN0cmluZy4gSWYgbm8gdG9rZW4gb3Ig
cXVvdGVkLXN0cmluZyB3YXMgZm91bmQsIHJldHVybnMgTm9uZS4KKyAgICAiIiIKKworICAgIG9y
aWdpbmFsX2hlYWQgPSBzdGF0ZS5oZWFkCisKKyAgICBpZiBub3QgY29uc3VtZV9zdHJpbmcoc3Rh
dGUsICciJyk6CisgICAgICAgIHJldHVybiBjb25zdW1lX3Rva2VuKHN0YXRlKQorCisgICAgcmVz
dWx0ID0gW10KKworICAgIGV4cGVjdF9xdW90ZWRfcGFpciA9IEZhbHNlCisKKyAgICB3aGlsZSBU
cnVlOgorICAgICAgICBpZiBub3QgZXhwZWN0X3F1b3RlZF9wYWlyIGFuZCBjb25zdW1lX2x3cyhz
dGF0ZSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJykKKyAgICAgICAgICAgIGNvbnRp
bnVlCisKKyAgICAgICAgYyA9IGNvbnN1bWUoc3RhdGUpCisgICAgICAgIGlmIGMgaXMgTm9uZToK
KyAgICAgICAgICAgICMgcXVvdGVkLXN0cmluZyBpcyBub3QgZW5jbG9zZWQgd2l0aCBkb3VibGUg
cXVvdGF0aW9uCisgICAgICAgICAgICBzdGF0ZS5oZWFkID0gb3JpZ2luYWxfaGVhZAorICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxpZiBleHBlY3RfcXVvdGVkX3BhaXI6CisgICAg
ICAgICAgICBleHBlY3RfcXVvdGVkX3BhaXIgPSBGYWxzZQorICAgICAgICAgICAgaWYgX2lzX2No
YXIoYyk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAjIE5vbiBDSEFSIGNoYXJhY3RlciBmb3VuZCBpbiBxdW90ZWQt
cGFpcgorICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQgPSBvcmlnaW5hbF9oZWFkCisgICAgICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxpZiBjID09ICdcXCc6CisgICAgICAgICAg
ICBleHBlY3RfcXVvdGVkX3BhaXIgPSBUcnVlCisgICAgICAgIGVsaWYgYyA9PSAnIic6CisgICAg
ICAgICAgICByZXR1cm4gJycuam9pbihyZXN1bHQpCisgICAgICAgIGVsaWYgX2lzX2N0bChjKToK
KyAgICAgICAgICAgICMgSW52YWxpZCBjaGFyYWN0ZXIgJXIgZm91bmQgaW4gcWR0ZXh0CisgICAg
ICAgICAgICBzdGF0ZS5oZWFkID0gb3JpZ2luYWxfaGVhZAorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYykKKworCitkZWYg
cXVvdGVfaWZfbmVjZXNzYXJ5KHMpOgorICAgICIiIlF1b3RlcyBhcmJpdHJhcnkgc3RyaW5nIGlu
dG8gcXVvdGVkLXN0cmluZy4iIiIKKworICAgIHF1b3RlID0gRmFsc2UKKyAgICBpZiBzID09ICcn
OgorICAgICAgICByZXR1cm4gJyIiJworCisgICAgcmVzdWx0ID0gW10KKyAgICBmb3IgYyBpbiBz
OgorICAgICAgICBpZiBjID09ICciJyBvciBjIGluIF9TRVBBUkFUT1JTIG9yIF9pc19jdGwoYykg
b3Igbm90IF9pc19jaGFyKGMpOgorICAgICAgICAgICAgcXVvdGUgPSBUcnVlCisKKyAgICAgICAg
aWYgYyA9PSAnIicgb3IgX2lzX2N0bChjKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xc
JyArIGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGMpCisKKyAg
ICBpZiBxdW90ZToKKyAgICAgICAgcmV0dXJuICciJyArICcnLmpvaW4ocmVzdWx0KSArICciJwor
ICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnJy5qb2luKHJlc3VsdCkKKworCitkZWYgcGFyc2Vf
dXJpKHVyaSk6CisgICAgIiIiUGFyc2UgYWJzb2x1dGUgVVJJIHRoZW4gcmV0dXJuIGhvc3QsIHBv
cnQgYW5kIHJlc291cmNlLiIiIgorCisgICAgcGFyc2VkID0gdXJscGFyc2UudXJsc3BsaXQodXJp
KQorICAgIGlmIHBhcnNlZC5zY2hlbWUgIT0gJ3dzcycgYW5kIHBhcnNlZC5zY2hlbWUgIT0gJ3dz
JzoKKyAgICAgICAgIyB8dXJpfCBtdXN0IGJlIGEgcmVsYXRpdmUgVVJJLgorICAgICAgICAjIFRP
RE8odG95b3NoaW0pOiBTaG91bGQgdmFsaWRhdGUgfHVyaXwuCisgICAgICAgIHJldHVybiBOb25l
LCBOb25lLCB1cmkKKworICAgIGlmIHBhcnNlZC5ob3N0bmFtZSBpcyBOb25lOgorICAgICAgICBy
ZXR1cm4gTm9uZSwgTm9uZSwgTm9uZQorCisgICAgcG9ydCA9IE5vbmUKKyAgICB0cnk6CisgICAg
ICAgIHBvcnQgPSBwYXJzZWQucG9ydAorICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAg
ICAjIHBvcnQgcHJvcGVydHkgY2F1c2UgVmFsdWVFcnJvciBvbiBpbnZhbGlkIG51bGwgcG9ydCBk
ZXNjcmlwdGlvbiBsaWtlCisgICAgICAgICMgJ3dzOi8vaG9zdDovcGF0aCcuCisgICAgICAgIHJl
dHVybiBOb25lLCBOb25lLCBOb25lCisKKyAgICBpZiBwb3J0IGlzIE5vbmU6CisgICAgICAgIGlm
IHBhcnNlZC5zY2hlbWUgPT0gJ3dzJzoKKyAgICAgICAgICAgIHBvcnQgPSA4MAorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgcG9ydCA9IDQ0MworCisgICAgcGF0aCA9IHBhcnNlZC5wYXRoCisg
ICAgaWYgbm90IHBhdGg6CisgICAgICAgIHBhdGggKz0gJy8nCisgICAgaWYgcGFyc2VkLnF1ZXJ5
OgorICAgICAgICBwYXRoICs9ICc/JyArIHBhcnNlZC5xdWVyeQorICAgIGlmIHBhcnNlZC5mcmFn
bWVudDoKKyAgICAgICAgcGF0aCArPSAnIycgKyBwYXJzZWQuZnJhZ21lbnQKKworICAgIHJldHVy
biBwYXJzZWQuaG9zdG5hbWUsIHBvcnQsIHBhdGgKKworCit0cnk6CisgICAgdXJscGFyc2UudXNl
c19uZXRsb2MuaW5kZXgoJ3dzJykKK2V4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICMgdXJscGFy
c2UgaW4gUHl0aG9uMi41LjEgZG9lc24ndCBoYXZlICd3cycgYW5kICd3c3MnIGVudHJpZXMuCisg
ICAgdXJscGFyc2UudXNlc19uZXRsb2MuYXBwZW5kKCd3cycpCisgICAgdXJscGFyc2UudXNlc19u
ZXRsb2MuYXBwZW5kKCd3c3MnKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNv
Y2tldC9tZW1vcml6aW5nZmlsZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvbWVtb3JpemluZ2ZpbGUucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGQ0Y2Q5NTg1OTVhYmRmYzBjNDBkNDMwODQ4ODcwMGI3YjkzYzZiNwotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2Rf
cHl3ZWJzb2NrZXQvbWVtb3JpemluZ2ZpbGUucHkKQEAgLTAsMCArMSw5OSBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6Cisj
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJNZW1vcml6aW5nIGZpbGUu
CisKK0EgbWVtb3JpemluZyBmaWxlIHdyYXBzIGEgZmlsZSBhbmQgbWVtb3JpemVzIGxpbmVzIHJl
YWQgYnkgcmVhZGxpbmUuCisiIiIKKworCitpbXBvcnQgc3lzCisKKworY2xhc3MgTWVtb3Jpemlu
Z0ZpbGUob2JqZWN0KToKKyAgICAiIiJNZW1vcml6aW5nRmlsZSB3cmFwcyBhIGZpbGUgYW5kIG1l
bW9yaXplcyBsaW5lcyByZWFkIGJ5IHJlYWRsaW5lLgorCisgICAgTm90ZSB0aGF0IGRhdGEgcmVh
ZCBieSBvdGhlciBtZXRob2RzIGFyZSBub3QgbWVtb3JpemVkLiBUaGlzIGJlaGF2aW9yCisgICAg
aXMgZ29vZCBlbm91Z2ggZm9yIG1lbW9yaXppbmcgbGluZXMgU2ltcGxlSFRUUFNlcnZlciByZWFk
cyBiZWZvcmUKKyAgICB0aGUgY29udHJvbCByZWFjaGVzIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVy
LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVfLCBtYXhfbWVtb3JpemVk
X2xpbmVzPXN5cy5tYXhpbnQpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGZpbGVfOiB0aGUgZmlsZSBvYmplY3QgdG8gd3Jh
cC4KKyAgICAgICAgICAgIG1heF9tZW1vcml6ZWRfbGluZXM6IHRoZSBtYXhpbXVtIG51bWJlciBv
ZiBsaW5lcyB0byBtZW1vcml6ZS4KKyAgICAgICAgICAgICAgICBPbmx5IHRoZSBmaXJzdCBtYXhf
bWVtb3JpemVkX2xpbmVzIGFyZSBtZW1vcml6ZWQuCisgICAgICAgICAgICAgICAgRGVmYXVsdDog
c3lzLm1heGludC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGVfCisg
ICAgICAgIHNlbGYuX21lbW9yaXplZF9saW5lcyA9IFtdCisgICAgICAgIHNlbGYuX21heF9tZW1v
cml6ZWRfbGluZXMgPSBtYXhfbWVtb3JpemVkX2xpbmVzCisgICAgICAgIHNlbGYuX2J1ZmZlcmVk
ID0gRmFsc2UKKyAgICAgICAgc2VsZi5fYnVmZmVyZWRfbGluZSA9IE5vbmUKKworICAgIGRlZiBf
X2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluICgnX2ZpbGUn
LCAnX21lbW9yaXplZF9saW5lcycsICdfbWF4X21lbW9yaXplZF9saW5lcycsCisgICAgICAgICAg
ICAgICAgICAgICdfYnVmZmVyZWQnLCAnX2J1ZmZlcmVkX2xpbmUnLCAncmVhZGxpbmUnLAorICAg
ICAgICAgICAgICAgICAgICAnZ2V0X21lbW9yaXplZF9saW5lcycpOgorICAgICAgICAgICAgcmV0
dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpCisgICAgICAgIHJldHVybiBz
ZWxmLl9maWxlLl9fZ2V0YXR0cmlidXRlX18obmFtZSkKKworICAgIGRlZiByZWFkbGluZShzZWxm
LCBzaXplPS0xKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgZmlsZS5yZWFkbGluZSBhbmQgbWVtb3Jp
emUgdGhlIGxpbmUgcmVhZC4KKworICAgICAgICBOb3RlIHRoYXQgZXZlbiBpZiBzaXplIGlzIHNw
ZWNpZmllZCBhbmQgc21hbGxlciB0aGFuIGFjdHVhbCBzaXplLAorICAgICAgICB0aGUgd2hvbGUg
bGluZSB3aWxsIGJlIHJlYWQgb3V0IGZyb20gdW5kZXJseWluZyBmaWxlIG9iamVjdCBieQorICAg
ICAgICBzdWJzZXF1ZW50IHJlYWRsaW5lIGNhbGxzLgorICAgICAgICAiIiIKKworICAgICAgICBp
ZiBzZWxmLl9idWZmZXJlZDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9idWZmZXJlZF9saW5l
CisgICAgICAgICAgICBzZWxmLl9idWZmZXJlZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBsaW5lID0gc2VsZi5fZmlsZS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBsaW5l
IGFuZCBsZW4oc2VsZi5fbWVtb3JpemVkX2xpbmVzKSA8IHNlbGYuX21heF9tZW1vcml6ZWRfbGlu
ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5fbWVtb3JpemVkX2xpbmVzLmFwcGVuZChsaW5lKQor
ICAgICAgICBpZiBzaXplID49IDAgYW5kIHNpemUgPCBsZW4obGluZSk6CisgICAgICAgICAgICBz
ZWxmLl9idWZmZXJlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcmVkX2xpbmUgPSBs
aW5lW3NpemU6XQorICAgICAgICAgICAgcmV0dXJuIGxpbmVbOnNpemVdCisgICAgICAgIHJldHVy
biBsaW5lCisKKyAgICBkZWYgZ2V0X21lbW9yaXplZF9saW5lcyhzZWxmKToKKyAgICAgICAgIiIi
R2V0IGxpbmVzIG1lbW9yaXplZCBzbyBmYXIuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tZW1v
cml6ZWRfbGluZXMKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvbXNn
dXRpbC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9t
b2RfcHl3ZWJzb2NrZXQvbXNndXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMWZmZGFjZjYzMjY2MjU1NDlk
NTVlMTczYjRkOTkwNDJmNzE4Y2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9tc2d1dGlsLnB5
CkBAIC0wLDAgKzEsMjE5IEBACisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJNZXNzYWdlIHJlbGF0
ZWQgdXRpbGl0aWVzLgorCitOb3RlOiByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUvcmVhZCBhcmUg
dXNlZCBpbiB0aGlzIG1vZHVsZSwgZXZlbiB0aG91Z2gKK21vZF9weXRob24gZG9jdW1lbnQgc2F5
cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBjb25uZWN0aW9uCitoYW5kbGVycy4g
VW5mb3J0dW5hdGVseSwgd2UgaGF2ZSBubyBvdGhlciBvcHRpb25zLiBGb3IgZXhhbXBsZSwKK3Jl
cXVlc3Qud3JpdGUvcmVhZCBhcmUgbm90IHN1aXRhYmxlIGJlY2F1c2UgdGhleSBkb24ndCBhbGxv
dyBkaXJlY3QgcmF3CitieXRlcyB3cml0aW5nL3JlYWRpbmcuCisiIiIKKworCitpbXBvcnQgUXVl
dWUKK2ltcG9ydCB0aHJlYWRpbmcKKworCisjIEV4cG9ydCBFeGNlcHRpb24gc3ltYm9scyBmcm9t
IG1zZ3V0aWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKK2Zyb20gbW9kX3B5d2Vic29ja2V0
Ll9zdHJlYW1fYmFzZSBpbXBvcnQgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24KK2Zyb20g
bW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1fYmFzZSBpbXBvcnQgSW52YWxpZEZyYW1lRXhjZXB0aW9u
Citmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IEJhZE9wZXJhdGlvbkV4
Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBVbnN1cHBv
cnRlZEZyYW1lRXhjZXB0aW9uCisKKworIyBBbiBBUEkgZm9yIGhhbmRsZXIgdG8gc2VuZC9yZWNl
aXZlIFdlYlNvY2tldCBtZXNzYWdlcy4KK2RlZiBjbG9zZV9jb25uZWN0aW9uKHJlcXVlc3QpOgor
ICAgICIiIkNsb3NlIGNvbm5lY3Rpb24uCisKKyAgICBBcmdzOgorICAgICAgICByZXF1ZXN0OiBt
b2RfcHl0aG9uIHJlcXVlc3QuCisgICAgIiIiCisgICAgcmVxdWVzdC53c19zdHJlYW0uY2xvc2Vf
Y29ubmVjdGlvbigpCisKKworZGVmIHNlbmRfbWVzc2FnZShyZXF1ZXN0LCBtZXNzYWdlLCBlbmQ9
VHJ1ZSwgYmluYXJ5PUZhbHNlKToKKyAgICAiIiJTZW5kIG1lc3NhZ2UuCisKKyAgICBBcmdzOgor
ICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgIG1lc3NhZ2U6IHVu
aWNvZGUgdGV4dCBvciBzdHIgYmluYXJ5IHRvIHNlbmQuCisgICAgICAgIGVuZDogRmFsc2UgdG8g
c2VuZCBtZXNzYWdlIGFzIGEgZnJhZ21lbnQuIEFsbCBtZXNzYWdlcyB1bnRpbCB0aGUKKyAgICAg
ICAgICAgICBmaXJzdCBjYWxsIHdpdGggZW5kPVRydWUgKGluY2x1c2l2ZSkgd2lsbCBiZSBkZWxp
dmVyZWQgdG8gdGhlCisgICAgICAgICAgICAgY2xpZW50IGluIHNlcGFyYXRlIGZyYW1lcyBidXQg
YXMgb25lIFdlYlNvY2tldCBtZXNzYWdlLgorICAgICAgICBiaW5hcnk6IHNlbmQgbWVzc2FnZSBh
cyBiaW5hcnkgZnJhbWUuCisgICAgUmFpc2VzOgorICAgICAgICBCYWRPcGVyYXRpb25FeGNlcHRp
b246IHdoZW4gc2VydmVyIGFscmVhZHkgdGVybWluYXRlZC4KKyAgICAiIiIKKyAgICByZXF1ZXN0
LndzX3N0cmVhbS5zZW5kX21lc3NhZ2UobWVzc2FnZSwgZW5kLCBiaW5hcnkpCisKKworZGVmIHJl
Y2VpdmVfbWVzc2FnZShyZXF1ZXN0KToKKyAgICAiIiJSZWNlaXZlIGEgV2ViU29ja2V0IGZyYW1l
IGFuZCByZXR1cm4gaXRzIHBheWxvYWQgYXMgYSB0ZXh0IGluCisgICAgdW5pY29kZSBvciBhIGJp
bmFyeSBpbiBzdHIuCisKKyAgICBBcmdzOgorICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJl
cXVlc3QuCisgICAgUmFpc2VzOgorICAgICAgICBJbnZhbGlkRnJhbWVFeGNlcHRpb246ICAgICB3
aGVuIGNsaWVudCBzZW5kIGludmFsaWQgZnJhbWUuCisgICAgICAgIFVuc3VwcG9ydGVkRnJhbWVF
eGNlcHRpb246IHdoZW4gY2xpZW50IHNlbmQgdW5zdXBwb3J0ZWQgZnJhbWUgZS5nLiBzb21lCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHJlc2VydmVkIGJpdCBpcyBzZXQg
YnV0IG5vIGV4dGVuc2lvbiBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVjb2duaXplIGl0LgorICAgICAgICBJbnZhbGlkVVRGOEV4Y2VwdGlvbjogICAgICB3aGVuIGNs
aWVudCBzZW5kIGEgdGV4dCBmcmFtZSBjb250YWluaW5nIGFueQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnZhbGlkIFVURi04IHN0cmluZy4KKyAgICAgICAgQ29ubmVjdGlv
blRlcm1pbmF0ZWRFeGNlcHRpb246IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWRseS4KKyAgICAgICAgQmFk
T3BlcmF0aW9uRXhjZXB0aW9uOiAgICAgd2hlbiBjbGllbnQgYWxyZWFkeSB0ZXJtaW5hdGVkLgor
ICAgICIiIgorICAgIHJldHVybiByZXF1ZXN0LndzX3N0cmVhbS5yZWNlaXZlX21lc3NhZ2UoKQor
CisKK2RlZiBzZW5kX3BpbmcocmVxdWVzdCwgYm9keT0nJyk6CisgICAgcmVxdWVzdC53c19zdHJl
YW0uc2VuZF9waW5nKGJvZHkpCisKKworY2xhc3MgTWVzc2FnZVJlY2VpdmVyKHRocmVhZGluZy5U
aHJlYWQpOgorICAgICIiIlRoaXMgY2xhc3MgcmVjZWl2ZXMgbWVzc2FnZXMgZnJvbSB0aGUgY2xp
ZW50LgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyB0aHJlZSB3YXlzIHRvIHJlY2VpdmUgbWVz
c2FnZXM6IGJsb2NraW5nLAorICAgIG5vbi1ibG9ja2luZywgYW5kIHZpYSBjYWxsYmFjay4gQ2Fs
bGJhY2sgaGFzIHRoZSBoaWdoZXN0IHByZWNlZGVuY2UuCisKKyAgICBOb3RlOiBUaGlzIGNsYXNz
IHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIHRoZSBzdGFuZGFsb25lIHNlcnZlciBmb3Igd3NzCisg
ICAgYmVjYXVzZSBweU9wZW5TU0wgdXNlZCBieSB0aGUgc2VydmVyIHJhaXNlcyBhIGZhdGFsIGVy
cm9yIGlmIHRoZSBzb2NrZXQKKyAgICBpcyBhY2Nlc3NlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMu
CisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgb25tZXNzYWdlPU5v
bmUpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAgICAgICAgIG9u
bWVzc2FnZTogYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2
ZWQuCisgICAgICAgICAgICAgICAgICAgICAgIE1heSBiZSBOb25lLiBJZiBub3QgTm9uZSwgdGhl
IGZ1bmN0aW9uIGlzIGNhbGxlZCBvbgorICAgICAgICAgICAgICAgICAgICAgICBhbm90aGVyIHRo
cmVhZC4gSW4gdGhhdCBjYXNlLCBNZXNzYWdlUmVjZWl2ZXIucmVjZWl2ZQorICAgICAgICAgICAg
ICAgICAgICAgICBhbmQgTWVzc2FnZVJlY2VpdmVyLnJlY2VpdmVfbm93YWl0IGFyZSB1c2VsZXNz
CisgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhleSB3aWxsIG5ldmVyIHJldHVybiBh
bnkgbWVzc2FnZXMuCisgICAgICAgICIiIgorCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19p
bml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcmVxdWVzdCA9IHJlcXVlc3QKKyAgICAgICAgc2Vs
Zi5fcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHNlbGYuX29ubWVzc2FnZSA9IG9ubWVz
c2FnZQorICAgICAgICBzZWxmLl9zdG9wX3JlcXVlc3RlZCA9IEZhbHNlCisgICAgICAgIHNlbGYu
c2V0RGFlbW9uKFRydWUpCisgICAgICAgIHNlbGYuc3RhcnQoKQorCisgICAgZGVmIHJ1bihzZWxm
KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3BfcmVxdWVz
dGVkOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSByZWNlaXZlX21lc3NhZ2Uoc2VsZi5fcmVx
dWVzdCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9vbm1lc3NhZ2U6CisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX29ubWVzc2FnZShtZXNzYWdlKQorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX3F1ZXVlLnB1dChtZXNzYWdlKQorICAgICAgICBmaW5h
bGx5OgorICAgICAgICAgICAgY2xvc2VfY29ubmVjdGlvbihzZWxmLl9yZXF1ZXN0KQorCisgICAg
ZGVmIHJlY2VpdmUoc2VsZik6CisgICAgICAgICIiIiBSZWNlaXZlIGEgbWVzc2FnZSBmcm9tIHRo
ZSBjaGFubmVsLCBibG9ja2luZy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgbWVz
c2FnZSBhcyBhIHVuaWNvZGUgc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNl
bGYuX3F1ZXVlLmdldCgpCisKKyAgICBkZWYgcmVjZWl2ZV9ub3dhaXQoc2VsZik6CisgICAgICAg
ICIiIiBSZWNlaXZlIGEgbWVzc2FnZSBmcm9tIHRoZSBjaGFubmVsLCBub24tYmxvY2tpbmcuCisK
KyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIG1lc3NhZ2UgYXMgYSB1bmljb2RlIHN0cmlu
ZyBpZiBhdmFpbGFibGUuIE5vbmUgb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYuX3F1ZXVlLmdldF9ub3dhaXQoKQorICAgICAg
ICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICBtZXNzYWdlID0gTm9uZQorICAgICAg
ICByZXR1cm4gbWVzc2FnZQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlJlcXVl
c3QgdG8gc3RvcCB0aGlzIGluc3RhbmNlLgorCisgICAgICAgIFRoZSBpbnN0YW5jZSB3aWxsIGJl
IHN0b3BwZWQgYWZ0ZXIgcmVjZWl2aW5nIHRoZSBuZXh0IG1lc3NhZ2UuCisgICAgICAgIFRoaXMg
bWV0aG9kIG1heSBub3QgYmUgdmVyeSB1c2VmdWwsIGJ1dCB0aGVyZSBpcyBubyBjbGVhbiB3YXkK
KyAgICAgICAgaW4gUHl0aG9uIHRvIGZvcmNlZnVsbHkgc3RvcCBhIHJ1bm5pbmcgdGhyZWFkLgor
ICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fc3RvcF9yZXF1ZXN0ZWQgPSBUcnVlCisKKworY2xh
c3MgTWVzc2FnZVNlbmRlcih0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAiIiJUaGlzIGNsYXNzIHNl
bmRzIG1lc3NhZ2VzIHRvIHRoZSBjbGllbnQuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGJv
dGggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyB3YXlzIHRvIHNlbmQKKyAgICBtZXNzYWdl
cy4KKworICAgIE5vdGU6IFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggdGhlIHN0
YW5kYWxvbmUgc2VydmVyIGZvciB3c3MKKyAgICBiZWNhdXNlIHB5T3BlblNTTCB1c2VkIGJ5IHRo
ZSBzZXJ2ZXIgcmFpc2VzIGEgZmF0YWwgZXJyb3IgaWYgdGhlIHNvY2tldAorICAgIGlzIGFjY2Vz
c2VkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAg
ICAgIEFyZ3M6CisgICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAg
ICAgICIiIgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAg
IHNlbGYuX3JlcXVlc3QgPSByZXF1ZXN0CisgICAgICAgIHNlbGYuX3F1ZXVlID0gUXVldWUuUXVl
dWUoKQorICAgICAgICBzZWxmLnNldERhZW1vbihUcnVlKQorICAgICAgICBzZWxmLnN0YXJ0KCkK
KworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBt
ZXNzYWdlLCBjb25kaXRpb24gPSBzZWxmLl9xdWV1ZS5nZXQoKQorICAgICAgICAgICAgY29uZGl0
aW9uLmFjcXVpcmUoKQorICAgICAgICAgICAgc2VuZF9tZXNzYWdlKHNlbGYuX3JlcXVlc3QsIG1l
c3NhZ2UpCisgICAgICAgICAgICBjb25kaXRpb24ubm90aWZ5KCkKKyAgICAgICAgICAgIGNvbmRp
dGlvbi5yZWxlYXNlKCkKKworICAgIGRlZiBzZW5kKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICAi
IiJTZW5kIGEgbWVzc2FnZSwgYmxvY2tpbmcuIiIiCisKKyAgICAgICAgY29uZGl0aW9uID0gdGhy
ZWFkaW5nLkNvbmRpdGlvbigpCisgICAgICAgIGNvbmRpdGlvbi5hY3F1aXJlKCkKKyAgICAgICAg
c2VsZi5fcXVldWUucHV0KChtZXNzYWdlLCBjb25kaXRpb24pKQorICAgICAgICBjb25kaXRpb24u
d2FpdCgpCisKKyAgICBkZWYgc2VuZF9ub3dhaXQoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICIi
IlNlbmQgYSBtZXNzYWdlLCBub24tYmxvY2tpbmcuIiIiCisKKyAgICAgICAgc2VsZi5fcXVldWUu
cHV0KChtZXNzYWdlLCB0aHJlYWRpbmcuQ29uZGl0aW9uKCkpKQorCisKKyMgdmk6c3RzPTQgc3c9
NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vi
c29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRjMTQzZWEwMDY5M2NlMjU3ODc2MDU2MDhhZWYzMTZlNGE5OWNiMWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJz
b2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKQEAgLTAsMCArMSw4NzAgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KKyMg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiU3RhbmRhbG9u
ZSBXZWJTb2NrZXQgc2VydmVyLgorCitCQVNJQyBVU0FHRQorCitVc2UgdGhpcyBzZXJ2ZXIgdG8g
cnVuIG1vZF9weXdlYnNvY2tldCB3aXRob3V0IEFwYWNoZSBIVFRQIFNlcnZlci4KKworVXNhZ2U6
CisgICAgcHl0aG9uIHN0YW5kYWxvbmUucHkgWy1wIDx3c19wb3J0Pl0gWy13IDx3ZWJzb2NrX2hh
bmRsZXJzPl0KKyAgICAgICAgICAgICAgICAgICAgICAgICBbLXMgPHNjYW5fZGlyPl0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICBbLWQgPGRvY3VtZW50X3Jvb3Q+XQorICAgICAgICAgICAgICAg
ICAgICAgICAgIFstbSA8d2Vic29ja19oYW5kbGVyc19tYXBfZmlsZT5dCisgICAgICAgICAgICAg
ICAgICAgICAgICAgLi4uIGZvciBvdGhlciBvcHRpb25zLCBzZWUgX21haW4gYmVsb3cgLi4uCisK
Kzx3c19wb3J0PiBpcyB0aGUgcG9ydCBudW1iZXIgdG8gdXNlIGZvciB3czovLyBjb25uZWN0aW9u
LgorCis8ZG9jdW1lbnRfcm9vdD4gaXMgdGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9m
IEhUTUwgZmlsZXMuCisKKzx3ZWJzb2NrX2hhbmRsZXJzPiBpcyB0aGUgcGF0aCB0byB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgV2ViU29ja2V0IGhhbmRsZXJzLgorU2VlIF9faW5pdF9fLnB5IGZvciBk
ZXRhaWxzIG9mIDx3ZWJzb2NrX2hhbmRsZXJzPiBhbmQgaG93IHRvIHdyaXRlIFdlYlNvY2tldAor
aGFuZGxlcnMuIElmIHRoaXMgcGF0aCBpcyByZWxhdGl2ZSwgPGRvY3VtZW50X3Jvb3Q+IGlzIHVz
ZWQgYXMgdGhlIGJhc2UuCisKKzxzY2FuX2Rpcj4gaXMgYSBwYXRoIHVuZGVyIHRoZSByb290IGRp
cmVjdG9yeS4gSWYgc3BlY2lmaWVkLCBvbmx5IHRoZQoraGFuZGxlcnMgdW5kZXIgc2Nhbl9kaXIg
YXJlIHNjYW5uZWQuIFRoaXMgaXMgdXNlZnVsIGluIHNhdmluZyBzY2FuIHRpbWUuCisKKworQ09O
RklHVVJBVElPTiBGSUxFCisKK1lvdSBjYW4gYWxzbyB3cml0ZSBhIGNvbmZpZ3VyYXRpb24gZmls
ZSBhbmQgdXNlIGl0IGJ5IHNwZWNpZnlpbmcgdGhlIHBhdGggdG8KK3RoZSBjb25maWd1cmF0aW9u
IGZpbGUgYnkgLS1jb25maWcgb3B0aW9uLiBQbGVhc2Ugd3JpdGUgYSBjb25maWd1cmF0aW9uIGZp
bGUKK2ZvbGxvd2luZyB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgUHl0aG9uIENvbmZpZ1BhcnNl
ciBsaWJyYXJ5LiBOYW1lIG9mIGVhY2gKK2VudHJ5IG11c3QgYmUgdGhlIGxvbmcgdmVyc2lvbiBh
cmd1bWVudCBuYW1lLiBFLmcuIHRvIHNldCBsb2cgbGV2ZWwgdG8gZGVidWcsCithZGQgdGhlIGZv
bGxvd2luZyBsaW5lOgorCitsb2dfbGV2ZWw9ZGVidWcKKworRm9yIG9wdGlvbnMgd2hpY2ggZG9l
c24ndCB0YWtlIHZhbHVlLCBwbGVhc2UgYWRkIHNvbWUgZmFrZSB2YWx1ZS4gRS5nLiBmb3IKKy0t
dGxzIG9wdGlvbiwgYWRkIHRoZSBmb2xsb3dpbmcgbGluZToKKwordGxzPVRydWUKKworTm90ZSB0
aGF0IHRscyB3aWxsIGJlIGVuYWJsZWQgZXZlbiBpZiB5b3Ugd3JpdGUgdGxzPUZhbHNlIGFzIHRo
ZSB2YWx1ZSBwYXJ0IGlzCitmYWtlLgorCitXaGVuIGJvdGggYSBjb21tYW5kIGxpbmUgYXJndW1l
bnQgYW5kIGEgY29uZmlndXJhdGlvbiBmaWxlIGVudHJ5IGFyZSBzZXQgZm9yCit0aGUgc2FtZSBj
b25maWd1cmF0aW9uIGl0ZW0sIHRoZSBjb21tYW5kIGxpbmUgdmFsdWUgd2lsbCBvdmVycmlkZSBv
bmUgaW4gdGhlCitjb25maWd1cmF0aW9uIGZpbGUuCisKKworVEhSRUFESU5HCisKK1RoaXMgc2Vy
dmVyIGlzIGRlcml2ZWQgZnJvbSBTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nTWl4SW4uIEhlbmNlIGEg
dGhyZWFkIGlzCit1c2VkIGZvciBlYWNoIHJlcXVlc3QuCisKKworU0VDVVJJVFkgV0FSTklORwor
CitUaGlzIHVzZXMgQ0dJSFRUUFNlcnZlciBhbmQgQ0dJSFRUUFNlcnZlciBpcyBub3Qgc2VjdXJl
LgorSXQgbWF5IGV4ZWN1dGUgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIG9yIGV4dGVybmFsIHByb2dy
YW1zLiBJdCBzaG91bGQgbm90IGJlCit1c2VkIG91dHNpZGUgYSBmaXJld2FsbC4KKyIiIgorCitp
bXBvcnQgQmFzZUhUVFBTZXJ2ZXIKK2ltcG9ydCBDR0lIVFRQU2VydmVyCitpbXBvcnQgU2ltcGxl
SFRUUFNlcnZlcgoraW1wb3J0IFNvY2tldFNlcnZlcgoraW1wb3J0IENvbmZpZ1BhcnNlcgoraW1w
b3J0IGh0dHBsaWIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbG9nZ2luZy5oYW5kbGVycworaW1w
b3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNlbGVjdAoraW1wb3J0
IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKKworX0hB
U19TU0wgPSBGYWxzZQorX0hBU19PUEVOX1NTTCA9IEZhbHNlCit0cnk6CisgICAgaW1wb3J0IHNz
bAorICAgIF9IQVNfU1NMID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRyeToKKyAg
ICAgICAgaW1wb3J0IE9wZW5TU0wuU1NMCisgICAgICAgIF9IQVNfT1BFTl9TU0wgPSBUcnVlCisg
ICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwYXNzCisKK2Zyb20gbW9kX3B5d2Vic29j
a2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBkaXNwYXRjaAor
ZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGhhbmRzaGFrZQorZnJvbSBtb2RfcHl3ZWJzb2Nr
ZXQgaW1wb3J0IGh0dHBfaGVhZGVyX3V0aWwKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBt
ZW1vcml6aW5nZmlsZQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IHV0aWwKKworCitfREVG
QVVMVF9MT0dfTUFYX0JZVEVTID0gMTAyNCAqIDI1NgorX0RFRkFVTFRfTE9HX0JBQ0tVUF9DT1VO
VCA9IDUKKworX0RFRkFVTFRfUkVRVUVTVF9RVUVVRV9TSVpFID0gMTI4CisKKyMgMTAyNCBpcyBw
cmFjdGljYWxseSBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBXZWJTb2NrZXQgaGFuZHNoYWtlIGxp
bmVzLgorX01BWF9NRU1PUklaRURfTElORVMgPSAxMDI0CisKKworY2xhc3MgX1N0YW5kYWxvbmVD
b25uZWN0aW9uKG9iamVjdCk6CisgICAgIiIiTWltaWMgbW9kX3B5dGhvbiBtcF9jb25uLiIiIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3RfaGFuZGxlcik6CisgICAgICAgICIiIkNv
bnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxdWVz
dF9oYW5kbGVyOiBBIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyIGluc3RhbmNlLgorICAgICAgICAi
IiIKKworICAgICAgICBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIgPSByZXF1ZXN0X2hhbmRsZXIKKwor
ICAgIGRlZiBnZXRfbG9jYWxfYWRkcihzZWxmKToKKyAgICAgICAgIiIiR2V0dGVyIHRvIG1pbWlj
IG1wX2Nvbm4ubG9jYWxfYWRkci4iIiIKKworICAgICAgICByZXR1cm4gKHNlbGYuX3JlcXVlc3Rf
aGFuZGxlci5zZXJ2ZXIuc2VydmVyX25hbWUsCisgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVz
dF9oYW5kbGVyLnNlcnZlci5zZXJ2ZXJfcG9ydCkKKyAgICBsb2NhbF9hZGRyID0gcHJvcGVydHko
Z2V0X2xvY2FsX2FkZHIpCisKKyAgICBkZWYgZ2V0X3JlbW90ZV9hZGRyKHNlbGYpOgorICAgICAg
ICAiIiJHZXR0ZXIgdG8gbWltaWMgbXBfY29ubi5yZW1vdGVfYWRkci4KKworICAgICAgICBTZXR0
aW5nIHRoZSBwcm9wZXJ0eSBpbiBfX2luaXRfXyB3b24ndCB3b3JrIGJlY2F1c2UgdGhlIHJlcXVl
c3QKKyAgICAgICAgaGFuZGxlciBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0IHRoZXJlLiIiIgorCisg
ICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIuY2xpZW50X2FkZHJlc3MKKyAgICBy
ZW1vdGVfYWRkciA9IHByb3BlcnR5KGdldF9yZW1vdGVfYWRkcikKKworICAgIGRlZiB3cml0ZShz
ZWxmLCBkYXRhKToKKyAgICAgICAgIiIiTWltaWMgbXBfY29ubi53cml0ZSgpLiIiIgorCisgICAg
ICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIud2ZpbGUud3JpdGUoZGF0YSkKKworICAg
IGRlZiByZWFkKHNlbGYsIGxlbmd0aCk6CisgICAgICAgICIiIk1pbWljIG1wX2Nvbm4ucmVhZCgp
LiIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIucmZpbGUucmVhZChs
ZW5ndGgpCisKKyAgICBkZWYgZ2V0X21lbW9yaXplZF9saW5lcyhzZWxmKToKKyAgICAgICAgIiIi
R2V0IG1lbW9yaXplZCBsaW5lcy4iIiIKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9o
YW5kbGVyLnJmaWxlLmdldF9tZW1vcml6ZWRfbGluZXMoKQorCisKK2NsYXNzIF9TdGFuZGFsb25l
UmVxdWVzdChvYmplY3QpOgorICAgICIiIk1pbWljIG1vZF9weXRob24gcmVxdWVzdC4iIiIKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0X2hhbmRsZXIsIHVzZV90bHMpOgorICAgICAg
ICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAg
IHJlcXVlc3RfaGFuZGxlcjogQSBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlciBpbnN0YW5jZS4KKyAg
ICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2Vy
KHNlbGYpCisKKyAgICAgICAgc2VsZi5fcmVxdWVzdF9oYW5kbGVyID0gcmVxdWVzdF9oYW5kbGVy
CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IF9TdGFuZGFsb25lQ29ubmVjdGlvbihyZXF1ZXN0
X2hhbmRsZXIpCisgICAgICAgIHNlbGYuX3VzZV90bHMgPSB1c2VfdGxzCisgICAgICAgIHNlbGYu
aGVhZGVyc19pbiA9IHJlcXVlc3RfaGFuZGxlci5oZWFkZXJzCisKKyAgICBkZWYgZ2V0X3VyaShz
ZWxmKToKKyAgICAgICAgIiIiR2V0dGVyIHRvIG1pbWljIHJlcXVlc3QudXJpLiIiIgorCisgICAg
ICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIucGF0aAorICAgIHVyaSA9IHByb3BlcnR5
KGdldF91cmkpCisKKyAgICBkZWYgZ2V0X21ldGhvZChzZWxmKToKKyAgICAgICAgIiIiR2V0dGVy
IHRvIG1pbWljIHJlcXVlc3QubWV0aG9kLiIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9yZXF1
ZXN0X2hhbmRsZXIuY29tbWFuZAorICAgIG1ldGhvZCA9IHByb3BlcnR5KGdldF9tZXRob2QpCisK
KyAgICBkZWYgaXNfaHR0cHMoc2VsZik6CisgICAgICAgICIiIk1pbWljIHJlcXVlc3QuaXNfaHR0
cHMoKS4iIiIKKworICAgICAgICByZXR1cm4gc2VsZi5fdXNlX3RscworCisgICAgZGVmIF9kcmFp
bl9yZWNlaXZlZF9kYXRhKHNlbGYpOgorICAgICAgICAiIiJEb24ndCB1c2UgdGhpcyBtZXRob2Qg
ZnJvbSBXZWJTb2NrZXQgaGFuZGxlci4gRHJhaW5zIHVucmVhZCBkYXRhCisgICAgICAgIGluIHRo
ZSByZWNlaXZlIGJ1ZmZlci4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmF3X3NvY2tldCA9IHNl
bGYuX3JlcXVlc3RfaGFuZGxlci5jb25uZWN0aW9uCisgICAgICAgIGRyYWluZWRfZGF0YSA9IHV0
aWwuZHJhaW5fcmVjZWl2ZWRfZGF0YShyYXdfc29ja2V0KQorCisgICAgICAgIGlmIGRyYWluZWRf
ZGF0YToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAn
RHJhaW5lZCBkYXRhIGZvbGxvd2luZyBjbG9zZSBmcmFtZTogJXInLCBkcmFpbmVkX2RhdGEpCisK
KworY2xhc3MgX1N0YW5kYWxvbmVTU0xDb25uZWN0aW9uKG9iamVjdCk6CisgICAgIiIiQSB3cmFw
cGVyIGNsYXNzIGZvciBPcGVuU1NMLlNTTC5Db25uZWN0aW9uIHRvIHByb3ZpZGUgbWFrZWZpbGUg
bWV0aG9kCisgICAgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY2xhc3MuCisgICAgIiIi
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubmVjdGlvbik6CisgICAgICAgIHNlbGYuX2Nv
bm5lY3Rpb24gPSBjb25uZWN0aW9uCisKKyAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBu
YW1lKToKKyAgICAgICAgaWYgbmFtZSBpbiAoJ19jb25uZWN0aW9uJywgJ21ha2VmaWxlJyk6Cisg
ICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rpb24uX19nZXRhdHRyaWJ1dGVfXyhuYW1lKQorCisg
ICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgaWYgbmFtZSBp
biAoJ19jb25uZWN0aW9uJywgJ21ha2VmaWxlJyk6CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0
Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZi5fY29u
bmVjdGlvbi5fX3NldGF0dHJfXyhuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBtYWtlZmlsZShzZWxm
LCBtb2RlPSdyJywgYnVmc2l6ZT0tMSk6CisgICAgICAgIHJldHVybiBzb2NrZXQuX2ZpbGVvYmpl
Y3Qoc2VsZi5fY29ubmVjdGlvbiwgbW9kZSwgYnVmc2l6ZSkKKworCitjbGFzcyBXZWJTb2NrZXRT
ZXJ2ZXIoU29ja2V0U2VydmVyLlRocmVhZGluZ01peEluLCBCYXNlSFRUUFNlcnZlci5IVFRQU2Vy
dmVyKToKKyAgICAiIiJIVFRQU2VydmVyIHNwZWNpYWxpemVkIGZvciBXZWJTb2NrZXQuIiIiCisK
KyAgICAjIE92ZXJyaWRlcyBTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nTWl4SW4uZGFlbW9uX3RocmVh
ZHMKKyAgICBkYWVtb25fdGhyZWFkcyA9IFRydWUKKyAgICAjIE92ZXJyaWRlcyBCYXNlSFRUUFNl
cnZlci5IVFRQU2VydmVyLmFsbG93X3JldXNlX2FkZHJlc3MKKyAgICBhbGxvd19yZXVzZV9hZGRy
ZXNzID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICAi
IiJPdmVycmlkZSBTb2NrZXRTZXJ2ZXIuVENQU2VydmVyLl9faW5pdF9fIHRvIHNldCBTU0wgZW5h
YmxlZAorICAgICAgICBzb2NrZXQgb2JqZWN0IHRvIHNlbGYuc29ja2V0IGJlZm9yZSBzZXJ2ZXJf
YmluZCBhbmQgc2VydmVyX2FjdGl2YXRlLAorICAgICAgICBpZiBuZWNlc3NhcnkuCisgICAgICAg
ICIiIgorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxm
KQorCisgICAgICAgIHNlbGYucmVxdWVzdF9xdWV1ZV9zaXplID0gb3B0aW9ucy5yZXF1ZXN0X3F1
ZXVlX3NpemUKKyAgICAgICAgc2VsZi5fX3dzX2lzX3NodXRfZG93biA9IHRocmVhZGluZy5FdmVu
dCgpCisgICAgICAgIHNlbGYuX193c19zZXJ2aW5nID0gRmFsc2UKKworICAgICAgICBTb2NrZXRT
ZXJ2ZXIuQmFzZVNlcnZlci5fX2luaXRfXygKKyAgICAgICAgICAgIHNlbGYsIChvcHRpb25zLnNl
cnZlcl9ob3N0LCBvcHRpb25zLnBvcnQpLCBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcikKKworICAg
ICAgICAjIEV4cG9zZSB0aGUgb3B0aW9ucyBvYmplY3QgdG8gYWxsb3cgaGFuZGxlciBvYmplY3Rz
IGFjY2VzcyBpdC4gV2UgbmFtZQorICAgICAgICAjIGl0IHdpdGggd2Vic29ja2V0XyBwcmVmaXgg
dG8gYXZvaWQgY29uZmxpY3QuCisgICAgICAgIHNlbGYud2Vic29ja2V0X3NlcnZlcl9vcHRpb25z
ID0gb3B0aW9ucworCisgICAgICAgIHNlbGYuX2NyZWF0ZV9zb2NrZXRzKCkKKyAgICAgICAgc2Vs
Zi5zZXJ2ZXJfYmluZCgpCisgICAgICAgIHNlbGYuc2VydmVyX2FjdGl2YXRlKCkKKworICAgIGRl
ZiBfY3JlYXRlX3NvY2tldHMoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyX25hbWUsIHNlbGYu
c2VydmVyX3BvcnQgPSBzZWxmLnNlcnZlcl9hZGRyZXNzCisgICAgICAgIHNlbGYuX3NvY2tldHMg
PSBbXQorICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJfbmFtZToKKyAgICAgICAgICAgICMgT24g
cGxhdGZvcm1zIHRoYXQgZG9lc24ndCBzdXBwb3J0IElQdjYsIHRoZSBmaXJzdCBiaW5kIGZhaWxz
LgorICAgICAgICAgICAgIyBPbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0cyBJUHY2CisgICAgICAg
ICAgICAjIC0gSWYgaXQgYmluZHMgYm90aCBJUHY0IGFuZCBJUHY2IG9uIGNhbGwgd2l0aCBBRl9J
TkVUNiwgdGhlCisgICAgICAgICAgICAjICAgZmlyc3QgYmluZCBzdWNjZWVkcyBhbmQgdGhlIHNl
Y29uZCBmYWlscyAod2UnbGwgc2VlICdBZGRyZXNzCisgICAgICAgICAgICAjICAgYWxyZWFkeSBp
biB1c2UnIGVycm9yKS4KKyAgICAgICAgICAgICMgLSBJZiBpdCBiaW5kcyBvbmx5IElQdjYgb24g
Y2FsbCB3aXRoIEFGX0lORVQ2LCBib3RoIGNhbGwgYXJlCisgICAgICAgICAgICAjICAgZXhwZWN0
ZWQgdG8gc3VjY2VlZCB0byBsaXN0ZW4gYm90aCBwcm90b2NvbC4KKyAgICAgICAgICAgIGFkZHJp
bmZvX2FycmF5ID0gWworICAgICAgICAgICAgICAgIChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5T
T0NLX1NUUkVBTSwgJycsICcnLCAnJyksCisgICAgICAgICAgICAgICAgKHNvY2tldC5BRl9JTkVU
LCBzb2NrZXQuU09DS19TVFJFQU0sICcnLCAnJywgJycpXQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgYWRkcmluZm9fYXJyYXkgPSBzb2NrZXQuZ2V0YWRkcmluZm8oc2VsZi5zZXJ2ZXJfbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
c2VydmVyX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzb2NrZXQuQUZfVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc29ja2V0LlNPQ0tfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fVENQKQorICAgICAgICBm
b3IgYWRkcmluZm8gaW4gYWRkcmluZm9fYXJyYXk6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIu
aW5mbygnQ3JlYXRlIHNvY2tldCBvbjogJXInLCBhZGRyaW5mbykKKyAgICAgICAgICAgIGZhbWls
eSwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNvY2thZGRyID0gYWRkcmluZm8KKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzb2NrZXRfID0gc29ja2V0LnNvY2tldChmYW1p
bHksIHNvY2t0eXBlKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAg
ICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnU2tpcCBieSBmYWlsdXJlOiAlcicsIGUpCisgICAg
ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHNlbGYud2Vic29ja2V0X3NlcnZl
cl9vcHRpb25zLnVzZV90bHM6CisgICAgICAgICAgICAgICAgaWYgX0hBU19TU0w6CisgICAgICAg
ICAgICAgICAgICAgIHNvY2tldF8gPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0XywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGtleWZpbGU9c2VsZi53ZWJzb2NrZXRfc2VydmVyX29wdGlvbnMucHJp
dmF0ZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1zZWxmLndlYnNvY2tl
dF9zZXJ2ZXJfb3B0aW9ucy5jZXJ0aWZpY2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNz
bF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICAgICAgaWYgX0hBU19P
UEVOX1NTTDoKKyAgICAgICAgICAgICAgICAgICAgY3R4ID0gT3BlblNTTC5TU0wuQ29udGV4dChP
cGVuU1NMLlNTTC5TU0x2MjNfTUVUSE9EKQorICAgICAgICAgICAgICAgICAgICBjdHgudXNlX3By
aXZhdGVrZXlfZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2Vic29ja2V0X3Nl
cnZlcl9vcHRpb25zLnByaXZhdGVfa2V5KQorICAgICAgICAgICAgICAgICAgICBjdHgudXNlX2Nl
cnRpZmljYXRlX2ZpbGUoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndlYnNvY2tldF9z
ZXJ2ZXJfb3B0aW9ucy5jZXJ0aWZpY2F0ZSkKKyAgICAgICAgICAgICAgICAgICAgc29ja2V0XyA9
IE9wZW5TU0wuU1NMLkNvbm5lY3Rpb24oY3R4LCBzb2NrZXRfKQorICAgICAgICAgICAgc2VsZi5f
c29ja2V0cy5hcHBlbmQoKHNvY2tldF8sIGFkZHJpbmZvKSkKKworICAgIGRlZiBzZXJ2ZXJfYmlu
ZChzZWxmKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgU29ja2V0U2VydmVyLlRDUFNlcnZlci5zZXJ2
ZXJfYmluZCB0byBlbmFibGUgbXVsdGlwbGUKKyAgICAgICAgc29ja2V0cyBiaW5kLgorICAgICAg
ICAiIiIKKworICAgICAgICBmYWlsZWRfc29ja2V0cyA9IFtdCisKKyAgICAgICAgZm9yIHNvY2tl
dGluZm8gaW4gc2VsZi5fc29ja2V0czoKKyAgICAgICAgICAgIHNvY2tldF8sIGFkZHJpbmZvID0g
c29ja2V0aW5mbworICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0JpbmQgb246ICVyJywg
YWRkcmluZm8pCisgICAgICAgICAgICBpZiBzZWxmLmFsbG93X3JldXNlX2FkZHJlc3M6CisgICAg
ICAgICAgICAgICAgc29ja2V0Xy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQu
U09fUkVVU0VBRERSLCAxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2tl
dF8uYmluZChzZWxmLnNlcnZlcl9hZGRyZXNzKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
biwgZToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnU2tpcCBieSBmYWlsdXJl
OiAlcicsIGUpCisgICAgICAgICAgICAgICAgc29ja2V0Xy5jbG9zZSgpCisgICAgICAgICAgICAg
ICAgZmFpbGVkX3NvY2tldHMuYXBwZW5kKHNvY2tldGluZm8pCisKKyAgICAgICAgZm9yIHNvY2tl
dGluZm8gaW4gZmFpbGVkX3NvY2tldHM6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXRzLnJlbW92
ZShzb2NrZXRpbmZvKQorCisgICAgZGVmIHNlcnZlcl9hY3RpdmF0ZShzZWxmKToKKyAgICAgICAg
IiIiT3ZlcnJpZGUgU29ja2V0U2VydmVyLlRDUFNlcnZlci5zZXJ2ZXJfYWN0aXZhdGUgdG8gZW5h
YmxlIG11bHRpcGxlCisgICAgICAgIHNvY2tldHMgbGlzdGVuLgorICAgICAgICAiIiIKKworICAg
ICAgICBmYWlsZWRfc29ja2V0cyA9IFtdCisKKyAgICAgICAgZm9yIHNvY2tldGluZm8gaW4gc2Vs
Zi5fc29ja2V0czoKKyAgICAgICAgICAgIHNvY2tldF8sIGFkZHJpbmZvID0gc29ja2V0aW5mbwor
ICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0xpc3RlbiBvbjogJXInLCBhZGRyaW5mbykK
KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzb2NrZXRfLmxpc3RlbihzZWxmLnJl
cXVlc3RfcXVldWVfc2l6ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAg
ICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ1NraXAgYnkgZmFpbHVyZTogJXInLCBlKQor
ICAgICAgICAgICAgICAgIHNvY2tldF8uY2xvc2UoKQorICAgICAgICAgICAgICAgIGZhaWxlZF9z
b2NrZXRzLmFwcGVuZChzb2NrZXRpbmZvKQorCisgICAgICAgIGZvciBzb2NrZXRpbmZvIGluIGZh
aWxlZF9zb2NrZXRzOgorICAgICAgICAgICAgc2VsZi5fc29ja2V0cy5yZW1vdmUoc29ja2V0aW5m
bykKKworICAgIGRlZiBzZXJ2ZXJfY2xvc2Uoc2VsZik6CisgICAgICAgICIiIk92ZXJyaWRlIFNv
Y2tldFNlcnZlci5UQ1BTZXJ2ZXIuc2VydmVyX2Nsb3NlIHRvIGVuYWJsZSBtdWx0aXBsZQorICAg
ICAgICBzb2NrZXRzIGNsb3NlLgorICAgICAgICAiIiIKKworICAgICAgICBmb3Igc29ja2V0aW5m
byBpbiBzZWxmLl9zb2NrZXRzOgorICAgICAgICAgICAgc29ja2V0XywgYWRkcmluZm8gPSBzb2Nr
ZXRpbmZvCisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnQ2xvc2Ugb246ICVyJywgYWRk
cmluZm8pCisgICAgICAgICAgICBzb2NrZXRfLmNsb3NlKCkKKworICAgIGRlZiBmaWxlbm8oc2Vs
Zik6CisgICAgICAgICIiIk92ZXJyaWRlIFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIuZmlsZW5vLiIi
IgorCisgICAgICAgIHNlbGYuX2xvZ2dlci5jcml0aWNhbCgnTm90IHN1cHBvcnRlZDogZmlsZW5v
JykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2tldHNbMF1bMF0uZmlsZW5vKCkKKworICAgIGRl
ZiBoYW5kbGVfZXJyb3Ioc2VsZiwgcnF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgICIi
Ik92ZXJyaWRlIFNvY2tldFNlcnZlci5oYW5kbGVfZXJyb3IuIiIiCisKKyAgICAgICAgc2VsZi5f
bG9nZ2VyLmVycm9yKAorICAgICAgICAgICAgJ0V4Y2VwdGlvbiBpbiBwcm9jZXNzaW5nIHJlcXVl
c3QgZnJvbTogJXJcbiVzJywKKyAgICAgICAgICAgIGNsaWVudF9hZGRyZXNzLAorICAgICAgICAg
ICAgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSkKKyAgICAgICAgIyBOb3RlOiBjbGllbnRfYWRkcmVz
cyBpcyBhIHR1cGxlLgorCisgICAgZGVmIGdldF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAiIiJP
dmVycmlkZSBUQ1BTZXJ2ZXIuZ2V0X3JlcXVlc3QgdG8gd3JhcCBPcGVuU1NMLlNTTC5Db25uZWN0
aW9uCisgICAgICAgIG9iamVjdCB3aXRoIF9TdGFuZGFsb25lU1NMQ29ubmVjdGlvbiB0byBwcm92
aWRlIG1ha2VmaWxlIG1ldGhvZC4gV2UKKyAgICAgICAgY2Fubm90IHN1YnN0aXR1dGUgT3BlblNT
TC5TU0wuQ29ubmVjdGlvbi5tYWtlZmlsZSBzaW5jZSBpdCdzIHJlYWRvbmx5CisgICAgICAgIGF0
dHJpYnV0ZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgYWNjZXB0ZWRfc29ja2V0LCBjbGllbnRf
YWRkcmVzcyA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCisgICAgICAgIGlmIHNlbGYud2Vic29ja2V0
X3NlcnZlcl9vcHRpb25zLnVzZV90bHMgYW5kIF9IQVNfT1BFTl9TU0w6CisgICAgICAgICAgICBh
Y2NlcHRlZF9zb2NrZXQgPSBfU3RhbmRhbG9uZVNTTENvbm5lY3Rpb24oYWNjZXB0ZWRfc29ja2V0
KQorICAgICAgICByZXR1cm4gYWNjZXB0ZWRfc29ja2V0LCBjbGllbnRfYWRkcmVzcworCisgICAg
ZGVmIHNlcnZlX2ZvcmV2ZXIoc2VsZiwgcG9sbF9pbnRlcnZhbD0wLjUpOgorICAgICAgICAiIiJP
dmVycmlkZSBTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2ZV9mb3JldmVyLiIiIgorCisgICAg
ICAgIHNlbGYuX193c19zZXJ2aW5nID0gVHJ1ZQorICAgICAgICBzZWxmLl9fd3NfaXNfc2h1dF9k
b3duLmNsZWFyKCkKKyAgICAgICAgaGFuZGxlX3JlcXVlc3QgPSBzZWxmLmhhbmRsZV9yZXF1ZXN0
CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ19oYW5kbGVfcmVxdWVzdF9ub2Jsb2NrJyk6Cisg
ICAgICAgICAgICBoYW5kbGVfcmVxdWVzdCA9IHNlbGYuX2hhbmRsZV9yZXF1ZXN0X25vYmxvY2sK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci53YXJuaW5nKCdGYWxsYmFj
ayB0byBibG9ja2luZyByZXF1ZXN0IGhhbmRsZXInKQorICAgICAgICB0cnk6CisgICAgICAgICAg
ICB3aGlsZSBzZWxmLl9fd3Nfc2VydmluZzoKKyAgICAgICAgICAgICAgICByLCB3LCBlID0gc2Vs
ZWN0LnNlbGVjdCgKKyAgICAgICAgICAgICAgICAgICAgW3NvY2tldF9bMF0gZm9yIHNvY2tldF8g
aW4gc2VsZi5fc29ja2V0c10sCisgICAgICAgICAgICAgICAgICAgIFtdLCBbXSwgcG9sbF9pbnRl
cnZhbCkKKyAgICAgICAgICAgICAgICBmb3Igc29ja2V0XyBpbiByOgorICAgICAgICAgICAgICAg
ICAgICBzZWxmLnNvY2tldCA9IHNvY2tldF8KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlX3Jl
cXVlc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gTm9uZQorICAgICAgICBmaW5h
bGx5OgorICAgICAgICAgICAgc2VsZi5fX3dzX2lzX3NodXRfZG93bi5zZXQoKQorCisgICAgZGVm
IHNodXRkb3duKHNlbGYpOgorICAgICAgICAiIiJPdmVycmlkZSBTb2NrZXRTZXJ2ZXIuQmFzZVNl
cnZlci5zaHV0ZG93bi4iIiIKKworICAgICAgICBzZWxmLl9fd3Nfc2VydmluZyA9IEZhbHNlCisg
ICAgICAgIHNlbGYuX193c19pc19zaHV0X2Rvd24ud2FpdCgpCisKKworY2xhc3MgV2ViU29ja2V0
UmVxdWVzdEhhbmRsZXIoQ0dJSFRUUFNlcnZlci5DR0lIVFRQUmVxdWVzdEhhbmRsZXIpOgorICAg
ICIiIkNHSUhUVFBSZXF1ZXN0SGFuZGxlciBzcGVjaWFsaXplZCBmb3IgV2ViU29ja2V0LiIiIgor
CisgICAgIyBVc2UgaHR0cGxpYi5IVFRQTWVzc2FnZSBpbnN0ZWFkIG9mIG1pbWV0b29scy5NZXNz
YWdlLgorICAgIE1lc3NhZ2VDbGFzcyA9IGh0dHBsaWIuSFRUUE1lc3NhZ2UKKworICAgIGRlZiBz
ZXR1cChzZWxmKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgU29ja2V0U2VydmVyLlN0cmVhbVJlcXVl
c3RIYW5kbGVyLnNldHVwIHRvIHdyYXAgcmZpbGUKKyAgICAgICAgd2l0aCBNZW1vcml6aW5nRmls
ZS4KKworICAgICAgICBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBieSBCYXNlUmVxdWVzdEhh
bmRsZXIncyBjb25zdHJ1Y3RvcgorICAgICAgICBiZWZvcmUgY2FsbGluZyBCYXNlSFRUUFJlcXVl
c3RIYW5kbGVyLmhhbmRsZS4KKyAgICAgICAgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5oYW5kbGUg
d2lsbCBjYWxsCisgICAgICAgIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuaGFuZGxlX29uZV9yZXF1
ZXN0IGFuZCBpdCB3aWxsIGNhbGwKKyAgICAgICAgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIucGFy
c2VfcmVxdWVzdC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBDYWxsIHN1cGVyY2xhc3MncyBz
ZXR1cCB0byBwcmVwYXJlIHJmaWxlLCB3ZmlsZSwgZXRjLiBTZWUgc2V0dXAKKyAgICAgICAgIyBk
ZWZpbml0aW9uIG9uIHRoZSByb290IGNsYXNzIFNvY2tldFNlcnZlci5TdHJlYW1SZXF1ZXN0SGFu
ZGxlciB0bworICAgICAgICAjIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGRvZXMuCisgICAgICAgIENH
SUhUVFBTZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLnNldHVwKHNlbGYpCisKKyAgICAgICAg
c2VsZi5yZmlsZSA9IG1lbW9yaXppbmdmaWxlLk1lbW9yaXppbmdGaWxlKAorICAgICAgICAgICAg
c2VsZi5yZmlsZSwKKyAgICAgICAgICAgIG1heF9tZW1vcml6ZWRfbGluZXM9X01BWF9NRU1PUkla
RURfTElORVMpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJl
c3MsIHNlcnZlcik6CisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dl
cihzZWxmKQorCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBzZXJ2ZXIud2Vic29ja2V0X3NlcnZl
cl9vcHRpb25zCisKKyAgICAgICAgIyBPdmVycmlkZXMgQ0dJSFRUUFNlcnZlclJlcXVlc3RIYW5k
bGVyLmNnaV9kaXJlY3Rvcmllcy4KKyAgICAgICAgc2VsZi5jZ2lfZGlyZWN0b3JpZXMgPSBzZWxm
Ll9vcHRpb25zLmNnaV9kaXJlY3RvcmllcworICAgICAgICAjIFJlcGxhY2UgQ0dJSFRUUFJlcXVl
c3RIYW5kbGVyLmlzX2V4ZWN1dGFibGUgbWV0aG9kLgorICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LmlzX2V4ZWN1dGFibGVfbWV0aG9kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5pc19l
eGVjdXRhYmxlID0gc2VsZi5fb3B0aW9ucy5pc19leGVjdXRhYmxlX21ldGhvZAorCisgICAgICAg
ICMgVGhpcyBhY3R1YWxseSBjYWxscyBCYXNlUmVxdWVzdEhhbmRsZXIuX19pbml0X18uCisgICAg
ICAgIENHSUhUVFBTZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLl9faW5pdF9fKAorICAgICAg
ICAgICAgc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MsIHNlcnZlcikKKworICAgIGRlZiBw
YXJzZV9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAiIiJPdmVycmlkZSBCYXNlSFRUUFNlcnZlci5C
YXNlSFRUUFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3QuCisKKyAgICAgICAgUmV0dXJuIFRy
dWUgdG8gY29udGludWUgcHJvY2Vzc2luZyBmb3IgSFRUUChTKSwgRmFsc2Ugb3RoZXJ3aXNlLgor
CisgICAgICAgIFNlZSBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmhhbmRsZV9vbmVfcmVxdWVzdCBt
ZXRob2Qgd2hpY2ggY2FsbHMKKyAgICAgICAgdGhpcyBtZXRob2QgdG8gdW5kZXJzdGFuZCBob3cg
dGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGhhbmRsZWQuCisgICAgICAgICIiIgorCisgICAgICAg
ICMgV2UgaG9vayBwYXJzZV9yZXF1ZXN0IG1ldGhvZCwgYnV0IGFsc28gY2FsbCB0aGUgb3JpZ2lu
YWwKKyAgICAgICAgIyBDR0lIVFRQUmVxdWVzdEhhbmRsZXIucGFyc2VfcmVxdWVzdCBzaW5jZSB3
aGVuIHdlIHJldHVybiBGYWxzZSwKKyAgICAgICAgIyBDR0lIVFRQUmVxdWVzdEhhbmRsZXIuaGFu
ZGxlX29uZV9yZXF1ZXN0IGNvbnRpbnVlcyBwcm9jZXNzaW5nIGFuZAorICAgICAgICAjIGl0IG5l
ZWRzIHZhcmlhYmxlcyBzZXQgYnkgQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3Qu
CisgICAgICAgICMKKyAgICAgICAgIyBWYXJpYWJsZXMgc2V0IGJ5IHRoaXMgbWV0aG9kIHdpbGwg
YmUgYWxzbyB1c2VkIGJ5IFdlYlNvY2tldCByZXF1ZXN0CisgICAgICAgICMgaGFuZGxpbmcgKHNl
bGYucGF0aCwgc2VsZi5jb21tYW5kLCBzZWxmLnJlcXVlc3RsaW5lLCBldGMuIFNlZSBhbHNvCisg
ICAgICAgICMgaG93IF9TdGFuZGFsb25lUmVxdWVzdCdzIG1lbWJlcnMgYXJlIGltcGxlbWVudGVk
IHVzaW5nIHRoZXNlCisgICAgICAgICMgYXR0cmlidXRlcykuCisgICAgICAgIGlmIG5vdCBDR0lI
VFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlci5wYXJzZV9yZXF1ZXN0KHNlbGYpOgorICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGhvc3QsIHBvcnQsIHJlc291cmNlID0gaHR0
cF9oZWFkZXJfdXRpbC5wYXJzZV91cmkoc2VsZi5wYXRoKQorICAgICAgICBpZiByZXNvdXJjZSBp
cyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0ludmFsaWQgVVJJOiAlcics
IHNlbGYucGF0aCkKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdGYWxsYmFjayB0byBD
R0lIVFRQUmVxdWVzdEhhbmRsZXInKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAg
c2VydmVyX29wdGlvbnMgPSBzZWxmLnNlcnZlci53ZWJzb2NrZXRfc2VydmVyX29wdGlvbnMKKyAg
ICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbGlkYXRpb25faG9zdCA9
IHNlcnZlcl9vcHRpb25zLnZhbGlkYXRpb25faG9zdAorICAgICAgICAgICAgaWYgdmFsaWRhdGlv
bl9ob3N0IGlzIG5vdCBOb25lIGFuZCBob3N0ICE9IHZhbGlkYXRpb25faG9zdDoKKyAgICAgICAg
ICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnSW52YWxpZCBob3N0OiAlciAoZXhwZWN0ZWQ6ICVy
KScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uX2hvc3QpCisgICAgICAgICAgICAgICAg
c2VsZi5fbG9nZ2VyLmluZm8oJ0ZhbGxiYWNrIHRvIENHSUhUVFBSZXF1ZXN0SGFuZGxlcicpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgcG9ydCBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIHZhbGlkYXRpb25fcG9ydCA9IHNlcnZlcl9vcHRpb25zLnZhbGlkYXRpb25f
cG9ydAorICAgICAgICAgICAgaWYgdmFsaWRhdGlvbl9wb3J0IGlzIG5vdCBOb25lIGFuZCBwb3J0
ICE9IHZhbGlkYXRpb25fcG9ydDoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygn
SW52YWxpZCBwb3J0OiAlciAoZXhwZWN0ZWQ6ICVyKScsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0aW9uX3BvcnQpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0ZhbGxiYWNr
IHRvIENHSUhUVFBSZXF1ZXN0SGFuZGxlcicpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUK
KyAgICAgICAgc2VsZi5wYXRoID0gcmVzb3VyY2UKKworICAgICAgICByZXF1ZXN0ID0gX1N0YW5k
YWxvbmVSZXF1ZXN0KHNlbGYsIHNlbGYuX29wdGlvbnMudXNlX3RscykKKworICAgICAgICB0cnk6
CisgICAgICAgICAgICAjIEZhbGxiYWNrIHRvIGRlZmF1bHQgaHR0cCBoYW5kbGVyIGZvciByZXF1
ZXN0IHBhdGhzIGZvciB3aGljaAorICAgICAgICAgICAgIyB3ZSBkb24ndCBoYXZlIHJlcXVlc3Qg
aGFuZGxlcnMuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5kaXNwYXRjaGVyLmdl
dF9oYW5kbGVyX3N1aXRlKHNlbGYucGF0aCk6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2Vy
LmluZm8oJ05vIGhhbmRsZXIgZm9yIHJlc291cmNlOiAlcicsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5wYXRoKQorICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5p
bmZvKCdGYWxsYmFjayB0byBDR0lIVFRQUmVxdWVzdEhhbmRsZXInKQorICAgICAgICAgICAgICAg
IHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBkaXNwYXRjaC5EaXNwYXRjaEV4Y2VwdGlvbiwg
ZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCclcycsIGUpCisgICAgICAgICAgICBz
ZWxmLnNlbmRfZXJyb3IoZS5zdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
ICAgICAjIElmIGFueSBFeGNlcHRpb25zIHdpdGhvdXQgZXhjZXB0IGNsYXVzZSBzZXR1cCAoaW5j
bHVkaW5nCisgICAgICAgICMgRGlzcGF0Y2hFeGNlcHRpb24pIGlzIHJhaXNlZCBiZWxvdyB0aGlz
IHBvaW50LCBpdCB3aWxsIGJlIGNhdWdodAorICAgICAgICAjIGFuZCBsb2dnZWQgYnkgV2ViU29j
a2V0U2VydmVyLgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBoYW5kc2hha2UuZG9faGFuZHNoYWtlKAorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0
LAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmRpc3BhdGNoZXIsCisgICAgICAg
ICAgICAgICAgICAgIGFsbG93RHJhZnQ3NT1zZWxmLl9vcHRpb25zLmFsbG93X2RyYWZ0NzUsCisg
ICAgICAgICAgICAgICAgICAgIHN0cmljdD1zZWxmLl9vcHRpb25zLnN0cmljdCkKKyAgICAgICAg
ICAgIGV4Y2VwdCBoYW5kc2hha2UuVmVyc2lvbkV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAg
ICBzZWxmLl9sb2dnZXIuaW5mbygnJXMnLCBlKQorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9y
ZXNwb25zZShjb21tb24uSFRUUF9TVEFUVVNfQkFEX1JFUVVFU1QpCisgICAgICAgICAgICAgICAg
c2VsZi5zZW5kX2hlYWRlcihjb21tb24uU0VDX1dFQlNPQ0tFVF9WRVJTSU9OX0hFQURFUiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3VwcG9ydGVkX3ZlcnNpb25zKQorICAg
ICAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorICAgICAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5IYW5kc2hha2VFeGNlcHRpb24sIGU6
CisgICAgICAgICAgICAgICAgIyBIYW5kc2hha2UgZm9yIHdzKHMpIGZhaWxlZC4KKyAgICAgICAg
ICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnJXMnLCBlKQorICAgICAgICAgICAgICAgIHNlbGYu
c2VuZF9lcnJvcihlLnN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
ICAgICAgICAgcmVxdWVzdC5fZGlzcGF0Y2hlciA9IHNlbGYuX29wdGlvbnMuZGlzcGF0Y2hlcgor
ICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5kaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVz
dCkKKyAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5BYm9ydGVkQnlVc2VyRXhjZXB0aW9uLCBlOgor
ICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJyVzJywgZSkKKyAgICAgICAgcmV0dXJuIEZh
bHNlCisKKyAgICBkZWYgbG9nX3JlcXVlc3Qoc2VsZiwgY29kZT0nLScsIHNpemU9Jy0nKToKKyAg
ICAgICAgIiIiT3ZlcnJpZGUgQmFzZUhUVFBTZXJ2ZXIubG9nX3JlcXVlc3QuIiIiCisKKyAgICAg
ICAgc2VsZi5fbG9nZ2VyLmluZm8oJyIlcyIgJXMgJXMnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLnJlcXVlc3RsaW5lLCBzdHIoY29kZSksIHN0cihzaXplKSkKKworICAgIGRlZiBs
b2dfZXJyb3Ioc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJPdmVycmlkZSBCYXNlSFRUUFNlcnZl
ci5sb2dfZXJyb3IuIiIiCisKKyAgICAgICAgIyBEZXNwaXRlIHRoZSBuYW1lLCB0aGlzIG1ldGhv
ZCBpcyBmb3Igd2FybmluZ3MgdGhhbiBmb3IgZXJyb3JzLgorICAgICAgICAjIEZvciBleGFtcGxl
LCBIVFRQIHN0YXR1cyBjb2RlIGlzIGxvZ2dlZCBieSB0aGlzIG1ldGhvZC4KKyAgICAgICAgc2Vs
Zi5fbG9nZ2VyLndhcm5pbmcoJyVzIC0gJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLmFkZHJlc3Nfc3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
Z3NbMF0gJSBhcmdzWzE6XSkKKworICAgIGRlZiBpc19jZ2koc2VsZik6CisgICAgICAgICIiIlRl
c3Qgd2hldGhlciBzZWxmLnBhdGggY29ycmVzcG9uZHMgdG8gYSBDR0kgc2NyaXB0LgorCisgICAg
ICAgIEFkZCBleHRyYSBjaGVjayB0aGF0IHNlbGYucGF0aCBkb2Vzbid0IGNvbnRhaW5zIC4uCisg
ICAgICAgIEFsc28gY2hlY2sgaWYgdGhlIGZpbGUgaXMgYSBleGVjdXRhYmxlIGZpbGUgb3Igbm90
LgorICAgICAgICBJZiB0aGUgZmlsZSBpcyBub3QgZXhlY3V0YWJsZSwgaXQgaXMgaGFuZGxlZCBh
cyBzdGF0aWMgZmlsZSBvciBkaXIKKyAgICAgICAgcmF0aGVyIHRoYW4gYSBDR0kgc2NyaXB0Lgor
ICAgICAgICAiIiIKKworICAgICAgICBpZiBDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFu
ZGxlci5pc19jZ2koc2VsZik6CisgICAgICAgICAgICBpZiAnLi4nIGluIHNlbGYucGF0aDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICMgc3RyaXAgcXVlcnkgcGFy
YW1ldGVyIGZyb20gcmVxdWVzdCBwYXRoCisgICAgICAgICAgICByZXNvdXJjZV9uYW1lID0gc2Vs
Zi5wYXRoLnNwbGl0KCc/JywgMilbMF0KKyAgICAgICAgICAgICMgY29udmVydCByZXNvdXJjZV9u
YW1lIGludG8gcmVhbCBwYXRoIG5hbWUgaW4gZmlsZXN5c3RlbS4KKyAgICAgICAgICAgIHNjcmlw
dGZpbGUgPSBzZWxmLnRyYW5zbGF0ZV9wYXRoKHJlc291cmNlX25hbWUpCisgICAgICAgICAgICBp
ZiBub3Qgb3MucGF0aC5pc2ZpbGUoc2NyaXB0ZmlsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5pc19leGVjdXRhYmxlKHNjcmlwdGZpbGUp
OgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIFRydWUK
KyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIF9jb25maWd1cmVfbG9nZ2luZyhvcHRpb25z
KToKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9nZ2VyLnNldExldmVs
KGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKG9wdGlvbnMubG9nX2xldmVsLnVwcGVyKCkpKQorICAgIGlm
IG9wdGlvbnMubG9nX2ZpbGU6CisgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLmhhbmRsZXJzLlJv
dGF0aW5nRmlsZUhhbmRsZXIoCisgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2dfZmlsZSwgJ2En
LCBvcHRpb25zLmxvZ19tYXgsIG9wdGlvbnMubG9nX2NvdW50KQorICAgIGVsc2U6CisgICAgICAg
IGhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorICAgIGZvcm1hdHRlciA9IGxvZ2dp
bmcuRm9ybWF0dGVyKAorICAgICAgICAgICAgJ1slKGFzY3RpbWUpc10gWyUobGV2ZWxuYW1lKXNd
ICUobmFtZSlzOiAlKG1lc3NhZ2UpcycpCisgICAgaGFuZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0
dGVyKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKworZGVmIF9hbGlhc19oYW5k
bGVycyhkaXNwYXRjaGVyLCB3ZWJzb2NrX2hhbmRsZXJzX21hcF9maWxlKToKKyAgICAiIiJTZXQg
YWxpYXNlcyBzcGVjaWZpZWQgaW4gd2Vic29ja19oYW5kbGVyX21hcF9maWxlIGluIGRpc3BhdGNo
ZXIuCisKKyAgICBBcmdzOgorICAgICAgICBkaXNwYXRjaGVyOiBkaXNwYXRjaC5EaXNwYXRjaGVy
IGluc3RhbmNlCisgICAgICAgIHdlYnNvY2tfaGFuZGxlcl9tYXBfZmlsZTogYWxpYXMgbWFwIGZp
bGUKKyAgICAiIiIKKworICAgIGZwID0gb3Blbih3ZWJzb2NrX2hhbmRsZXJzX21hcF9maWxlKQor
ICAgIHRyeToKKyAgICAgICAgZm9yIGxpbmUgaW4gZnA6CisgICAgICAgICAgICBpZiBsaW5lWzBd
ID09ICcjJyBvciBsaW5lLmlzc3BhY2UoKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICAgICAgbSA9IHJlLm1hdGNoKCcoXFMrKVxzKyhcUyspJywgbGluZSkKKyAgICAgICAgICAg
IGlmIG5vdCBtOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnV3JvbmcgZm9ybWF0
IGluIG1hcCBmaWxlOicgKyBsaW5lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGlzcGF0Y2hlci5hZGRfcmVzb3VyY2VfcGF0aF9h
bGlhcygKKyAgICAgICAgICAgICAgICAgICAgbS5ncm91cCgxKSwgbS5ncm91cCgyKSkKKyAgICAg
ICAgICAgIGV4Y2VwdCBkaXNwYXRjaC5EaXNwYXRjaEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAg
ICAgICBsb2dnaW5nLmVycm9yKHN0cihlKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBmcC5jbG9z
ZSgpCisKKworZGVmIF9idWlsZF9vcHRpb25fcGFyc2VyKCk6CisgICAgcGFyc2VyID0gb3B0cGFy
c2UuT3B0aW9uUGFyc2VyKCkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLWNvbmZpZycsIGRl
c3Q9J2NvbmZpZ19maWxlJywgdHlwZT0nc3RyaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1BhdGggdG8gY29uZmln
dXJhdGlvbiBmaWxlLiBTZWUgdGhlIGZpbGUgY29tbWVudCAnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2F0IHRoZSB0b3Agb2YgdGhpcyBmaWxlIGZvciB0aGUgY29uZmlndXJhdGlvbiAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGUgZm9ybWF0JykpCisgICAgcGFyc2Vy
LmFkZF9vcHRpb24oJy1IJywgJy0tc2VydmVyLWhvc3QnLCAnLS1zZXJ2ZXJfaG9zdCcsCisgICAg
ICAgICAgICAgICAgICAgICAgZGVzdD0nc2VydmVyX2hvc3QnLAorICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ9JycsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2VydmVyIGhvc3Ru
YW1lIHRvIGxpc3RlbiB0bycpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1WJywgJy0tdmFsaWRh
dGlvbi1ob3N0JywgJy0tdmFsaWRhdGlvbl9ob3N0JywKKyAgICAgICAgICAgICAgICAgICAgICBk
ZXN0PSd2YWxpZGF0aW9uX2hvc3QnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9u
ZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzZXJ2ZXIgaG9zdG5hbWUgdG8gdmFsaWRh
dGUgaW4gYWJzb2x1dGUgcGF0aC4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBv
cnQnLCBkZXN0PSdwb3J0JywgdHlwZT0naW50JywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0PWNvbW1vbi5ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSdwb3J0IHRvIGxpc3RlbiB0bycpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1QJywg
Jy0tdmFsaWRhdGlvbi1wb3J0JywgJy0tdmFsaWRhdGlvbl9wb3J0JywKKyAgICAgICAgICAgICAg
ICAgICAgICBkZXN0PSd2YWxpZGF0aW9uX3BvcnQnLCB0eXBlPSdpbnQnLAorICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzZXJ2
ZXIgcG9ydCB0byB2YWxpZGF0ZSBpbiBhYnNvbHV0ZSBwYXRoLicpCisgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy13JywgJy0td2Vic29jay1oYW5kbGVycycsICctLXdlYnNvY2tfaGFuZGxlcnMnLAor
ICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3dlYnNvY2tfaGFuZGxlcnMnLAorICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9Jy4nLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1dl
YlNvY2tldCBoYW5kbGVycyByb290IGRpcmVjdG9yeS4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9u
KCctbScsICctLXdlYnNvY2staGFuZGxlcnMtbWFwLWZpbGUnLAorICAgICAgICAgICAgICAgICAg
ICAgICctLXdlYnNvY2tfaGFuZGxlcnNfbWFwX2ZpbGUnLAorICAgICAgICAgICAgICAgICAgICAg
IGRlc3Q9J3dlYnNvY2tfaGFuZGxlcnNfbWFwX2ZpbGUnLAorICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnV2ViU29ja2V0IGhh
bmRsZXJzIG1hcCBmaWxlLiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VhY2ggbGlu
ZSBjb25zaXN0cyBvZiBhbGlhc19yZXNvdXJjZV9wYXRoIGFuZCAnCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2V4aXN0aW5nX3Jlc291cmNlX3BhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMu
JykpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc2Nhbi1kaXInLCAnLS1zY2FuX2Rp
cicsIGRlc3Q9J3NjYW5fZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUs
CisgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1dlYlNvY2tldCBoYW5kbGVycyBzY2FuIGRp
cmVjdG9yeS4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdXN0IGJlIGEgZGlyZWN0
b3J5IHVuZGVyIHdlYnNvY2tfaGFuZGxlcnMuJykpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0t
YWxsb3ctaGFuZGxlcnMtb3V0c2lkZS1yb290LWRpcicsCisgICAgICAgICAgICAgICAgICAgICAg
Jy0tYWxsb3dfaGFuZGxlcnNfb3V0c2lkZV9yb290X2RpcicsCisgICAgICAgICAgICAgICAgICAg
ICAgZGVzdD0nYWxsb3dfaGFuZGxlcnNfb3V0c2lkZV9yb290X2RpcicsCisgICAgICAgICAgICAg
ICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdTY2FucyBXZWJTb2NrZXQg
aGFuZGxlcnMgZXZlbiBpZiB0aGVpciBjYW5vbmljYWwgJworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdwYXRoIGlzIG5vdCB1bmRlciB3ZWJzb2NrX2hhbmRsZXJzLicpKQorICAgIHBhcnNl
ci5hZGRfb3B0aW9uKCctZCcsICctLWRvY3VtZW50LXJvb3QnLCAnLS1kb2N1bWVudF9yb290JywK
KyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdkb2N1bWVudF9yb290JywgZGVmYXVsdD0nLics
CisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRG9jdW1lbnQgcm9vdCBkaXJlY3RvcnkuJykK
KyAgICBwYXJzZXIuYWRkX29wdGlvbignLXgnLCAnLS1jZ2ktcGF0aHMnLCAnLS1jZ2lfcGF0aHMn
LCBkZXN0PSdjZ2lfcGF0aHMnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwK
KyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnQ0dJIHBhdGhzIHJlbGF0aXZlIHRvIGRvY3Vt
ZW50X3Jvb3QuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb21tYS1zZXBhcmF0ZWQu
IChlLmcgLXggL2NnaSwvaHRiaW4pICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmls
ZXMgdW5kZXIgZG9jdW1lbnRfcm9vdC9jZ2lfcGF0aCBhcmUgaGFuZGxlZCAnCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2FzIENHSSBwcm9ncmFtcy4gTXVzdCBiZSBleGVjdXRhYmxlLicp
KQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXRscycsIGRlc3Q9J3VzZV90bHMnLCBh
Y3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2Us
IGhlbHA9J3VzZSBUTFMgKHdzczovLyknKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctaycsICct
LXByaXZhdGUta2V5JywgJy0tcHJpdmF0ZV9rZXknLAorICAgICAgICAgICAgICAgICAgICAgIGRl
c3Q9J3ByaXZhdGVfa2V5JywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxw
PSdUTFMgcHJpdmF0ZSBrZXkgZmlsZS4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYycsICct
LWNlcnRpZmljYXRlJywgZGVzdD0nY2VydGlmaWNhdGUnLAorICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ9JycsIGhlbHA9J1RMUyBjZXJ0aWZpY2F0ZSBmaWxlLicpCisgICAgcGFyc2VyLmFk
ZF9vcHRpb24oJy1sJywgJy0tbG9nLWZpbGUnLCAnLS1sb2dfZmlsZScsIGRlc3Q9J2xvZ19maWxl
JywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxwPSdMb2cgZmlsZS4nKQor
ICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLWxvZy1sZXZlbCcsICctLWxvZ19sZXZlbCcsIHR5cGU9
J2Nob2ljZScsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nbG9nX2xldmVsJywgZGVmYXVs
dD0nd2FybicsCisgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bJ2RlYnVnJywgJ2luZm8n
LCAnd2FybmluZycsICd3YXJuJywgJ2Vycm9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnY3JpdGljYWwnXSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdMb2cgbGV2ZWwu
JykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS10aHJlYWQtbW9uaXRvci1pbnRlcnZhbC1pbi1z
ZWMnLAorICAgICAgICAgICAgICAgICAgICAgICctLXRocmVhZF9tb25pdG9yX2ludGVydmFsX2lu
X3NlYycsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ndGhyZWFkX21vbml0b3JfaW50ZXJ2
YWxfaW5fc2VjJywKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdpbnQnLCBkZWZhdWx0PS0x
LAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdJZiBwb3NpdGl2ZSBpbnRlZ2VyIGlzIHNw
ZWNpZmllZCwgcnVuIGEgdGhyZWFkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9u
aXRvciB0byBzaG93IHRoZSBzdGF0dXMgb2Ygc2VydmVyIHRocmVhZHMgJworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdwZXJpb2RpY2FsbHkgaW4gdGhlIHNwZWNpZmllZCBpbnRldmFsIGlu
ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2Vjb25kLiBJZiBub24tcG9zaXRpdmUg
aW50ZWdlciBpcyBzcGVjaWZpZWQsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlz
YWJsZSB0aGUgdGhyZWFkIG1vbml0b3IuJykpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tbG9n
LW1heCcsICctLWxvZ19tYXgnLCBkZXN0PSdsb2dfbWF4JywgdHlwZT0naW50JywKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PV9ERUZBVUxUX0xPR19NQVhfQllURVMsCisgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nTG9nIG1heGltdW0gYnl0ZXMnKQorICAgIHBhcnNlci5hZGRfb3B0
aW9uKCctLWxvZy1jb3VudCcsICctLWxvZ19jb3VudCcsIGRlc3Q9J2xvZ19jb3VudCcsCisgICAg
ICAgICAgICAgICAgICAgICAgdHlwZT0naW50JywgZGVmYXVsdD1fREVGQVVMVF9MT0dfQkFDS1VQ
X0NPVU5ULAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0xvZyBiYWNrdXAgY291bnQnKQor
ICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLWFsbG93LWRyYWZ0NzUnLCBkZXN0PSdhbGxvd19kcmFm
dDc1JywKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0
PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0FsbG93IGRyYWZ0IDc1IGhhbmRz
aGFrZScpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tc3RyaWN0JywgZGVzdD0nc3RyaWN0Jywg
YWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNl
LCBoZWxwPSdTdHJpY3RseSBjaGVjayBoYW5kc2hha2UgcmVxdWVzdCcpCisgICAgcGFyc2VyLmFk
ZF9vcHRpb24oJy1xJywgJy0tcXVldWUnLCBkZXN0PSdyZXF1ZXN0X3F1ZXVlX3NpemUnLCB0eXBl
PSdpbnQnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9X0RFRkFVTFRfUkVRVUVTVF9R
VUVVRV9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3JlcXVlc3QgcXVldWUgc2l6
ZScpCisKKyAgICByZXR1cm4gcGFyc2VyCisKKworY2xhc3MgVGhyZWFkTW9uaXRvcih0aHJlYWRp
bmcuVGhyZWFkKToKKyAgICBkYWVtb24gPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
aW50ZXJ2YWxfaW5fc2VjKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxm
LCBuYW1lPSdUaHJlYWRNb25pdG9yJykKKworICAgICAgICBzZWxmLl9sb2dnZXIgPSB1dGlsLmdl
dF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBzZWxmLl9pbnRlcnZhbF9pbl9zZWMgPSBp
bnRlcnZhbF9pbl9zZWMKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6
CisgICAgICAgICAgICB0aHJlYWRfbmFtZV9saXN0ID0gW10KKyAgICAgICAgICAgIGZvciB0aHJl
YWQgaW4gdGhyZWFkaW5nLmVudW1lcmF0ZSgpOgorICAgICAgICAgICAgICAgIHRocmVhZF9uYW1l
X2xpc3QuYXBwZW5kKHRocmVhZC5uYW1lKQorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8o
CisgICAgICAgICAgICAgICAgIiVkIGFjdGl2ZSB0aHJlYWRzOiAlcyIsCisgICAgICAgICAgICAg
ICAgdGhyZWFkaW5nLmFjdGl2ZV9jb3VudCgpLAorICAgICAgICAgICAgICAgICcsICcuam9pbih0
aHJlYWRfbmFtZV9saXN0KSkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5faW50ZXJ2YWxf
aW5fc2VjKQorCisKK2RlZiBfcGFyc2VfYXJnc19hbmRfY29uZmlnKGFyZ3MpOgorICAgIHBhcnNl
ciA9IF9idWlsZF9vcHRpb25fcGFyc2VyKCkKKworICAgICMgRmlyc3QsIHBhcnNlIG9wdGlvbnMg
d2l0aG91dCBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgdGVtcG9yYXJ5X29wdGlvbnMsIHRlbXBv
cmFyeV9hcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1hcmdzKQorICAgIGlmIHRlbXBvcmFy
eV9hcmdzOgorICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKAorICAgICAgICAgICAgJ1VucmVjb2du
aXplZCBwb3NpdGlvbmFsIGFyZ3VtZW50czogJXInLCB0ZW1wb3JhcnlfYXJncykKKyAgICAgICAg
c3lzLmV4aXQoMSkKKworICAgIGlmIHRlbXBvcmFyeV9vcHRpb25zLmNvbmZpZ19maWxlOgorICAg
ICAgICB0cnk6CisgICAgICAgICAgICBjb25maWdfZnAgPSBvcGVuKHRlbXBvcmFyeV9vcHRpb25z
LmNvbmZpZ19maWxlLCAncicpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAg
ICAgbG9nZ2luZy5jcml0aWNhbCgKKyAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIG9wZW4gY29u
ZmlndXJhdGlvbiBmaWxlICVyOiAlcicsCisgICAgICAgICAgICAgICAgdGVtcG9yYXJ5X29wdGlv
bnMuY29uZmlnX2ZpbGUsCisgICAgICAgICAgICAgICAgZSkKKyAgICAgICAgICAgIHN5cy5leGl0
KDEpCisKKyAgICAgICAgY29uZmlnX3BhcnNlciA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFy
c2VyKCkKKyAgICAgICAgY29uZmlnX3BhcnNlci5yZWFkZnAoY29uZmlnX2ZwKQorICAgICAgICBj
b25maWdfZnAuY2xvc2UoKQorCisgICAgICAgIGFyZ3NfZnJvbV9jb25maWcgPSBbXQorICAgICAg
ICBmb3IgbmFtZSwgdmFsdWUgaW4gY29uZmlnX3BhcnNlci5pdGVtcygncHl3ZWJzb2NrZXQnKToK
KyAgICAgICAgICAgIGFyZ3NfZnJvbV9jb25maWcuYXBwZW5kKCctLScgKyBuYW1lKQorICAgICAg
ICAgICAgYXJnc19mcm9tX2NvbmZpZy5hcHBlbmQodmFsdWUpCisgICAgICAgIGlmIGFyZ3MgaXMg
Tm9uZToKKyAgICAgICAgICAgIGFyZ3MgPSBhcmdzX2Zyb21fY29uZmlnCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBhcmdzID0gYXJnc19mcm9tX2NvbmZpZyArIGFyZ3MKKyAgICAgICAgcmV0
dXJuIHBhcnNlci5wYXJzZV9hcmdzKGFyZ3M9YXJncykKKyAgICBlbHNlOgorICAgICAgICByZXR1
cm4gdGVtcG9yYXJ5X29wdGlvbnMsIHRlbXBvcmFyeV9hcmdzCisKKworZGVmIF9tYWluKGFyZ3M9
Tm9uZSk6CisgICAgb3B0aW9ucywgYXJncyA9IF9wYXJzZV9hcmdzX2FuZF9jb25maWcoYXJncz1h
cmdzKQorCisgICAgb3MuY2hkaXIob3B0aW9ucy5kb2N1bWVudF9yb290KQorCisgICAgX2NvbmZp
Z3VyZV9sb2dnaW5nKG9wdGlvbnMpCisKKyAgICAjIFRPRE8odHlvc2hpbm8pOiBDbGVhbiB1cCBp
bml0aWFsaXphdGlvbiBvZiBDR0kgcmVsYXRlZCB2YWx1ZXMuIE1vdmUgc29tZQorICAgICMgb2Yg
Y29kZSBoZXJlIHRvIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyIGNsYXNzIGlmIGl0J3MgYmV0dGVy
LgorICAgIG9wdGlvbnMuY2dpX2RpcmVjdG9yaWVzID0gW10KKyAgICBvcHRpb25zLmlzX2V4ZWN1
dGFibGVfbWV0aG9kID0gTm9uZQorICAgIGlmIG9wdGlvbnMuY2dpX3BhdGhzOgorICAgICAgICBv
cHRpb25zLmNnaV9kaXJlY3RvcmllcyA9IG9wdGlvbnMuY2dpX3BhdGhzLnNwbGl0KCcsJykKKyAg
ICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dpbjMyJyk6CisgICAgICAgICAg
ICBjeWd3aW5fcGF0aCA9IE5vbmUKKyAgICAgICAgICAgICMgRm9yIFdpbjMyIFB5dGhvbiwgaXQg
aXMgZXhwZWN0ZWQgdGhhdCBDWUdXSU5fUEFUSAorICAgICAgICAgICAgIyBpcyBzZXQgdG8gYSBk
aXJlY3Rvcnkgb2YgY3lnd2luIGJpbmFyaWVzLgorICAgICAgICAgICAgIyBGb3IgZXhhbXBsZSwg
d2Vic29ja2V0X3NlcnZlci5weSBpbiBDaHJvbWl1bSBzZXRzIENZR1dJTl9QQVRIIHRvCisgICAg
ICAgICAgICAjIGZ1bGwgcGF0aCBvZiB0aGlyZF9wYXJ0eS9jeWd3aW4vYmluLgorICAgICAgICAg
ICAgaWYgJ0NZR1dJTl9QQVRIJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgICAgIGN5Z3dp
bl9wYXRoID0gb3MuZW52aXJvblsnQ1lHV0lOX1BBVEgnXQorICAgICAgICAgICAgdXRpbC53cmFw
X3BvcGVuM19mb3Jfd2luKGN5Z3dpbl9wYXRoKQorCisgICAgICAgICAgICBkZWYgX19jaGVja19z
Y3JpcHQoc2NyaXB0cGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwuZ2V0X3Njcmlw
dF9pbnRlcnAoc2NyaXB0cGF0aCwgY3lnd2luX3BhdGgpCisKKyAgICAgICAgICAgIG9wdGlvbnMu
aXNfZXhlY3V0YWJsZV9tZXRob2QgPSBfX2NoZWNrX3NjcmlwdAorCisgICAgaWYgb3B0aW9ucy51
c2VfdGxzOgorICAgICAgICBpZiBub3QgKF9IQVNfU1NMIG9yIF9IQVNfT1BFTl9TU0wpOgorICAg
ICAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgnVExTIHN1cHBvcnQgcmVxdWlyZXMgc3NsIG9yIHB5
T3BlblNTTC4nKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgbm90IG9wdGlv
bnMucHJpdmF0ZV9rZXkgb3Igbm90IG9wdGlvbnMuY2VydGlmaWNhdGU6CisgICAgICAgICAgICBs
b2dnaW5nLmNyaXRpY2FsKAorICAgICAgICAgICAgICAgICAgICAnVG8gdXNlIFRMUywgc3BlY2lm
eSBwcml2YXRlX2tleSBhbmQgY2VydGlmaWNhdGUuJykKKyAgICAgICAgICAgIHN5cy5leGl0KDEp
CisKKyAgICBpZiBub3Qgb3B0aW9ucy5zY2FuX2RpcjoKKyAgICAgICAgb3B0aW9ucy5zY2FuX2Rp
ciA9IG9wdGlvbnMud2Vic29ja19oYW5kbGVycworCisgICAgdHJ5OgorICAgICAgICBpZiBvcHRp
b25zLnRocmVhZF9tb25pdG9yX2ludGVydmFsX2luX3NlYyA+IDA6CisgICAgICAgICAgICAjIFJ1
biBhIHRocmVhZCBtb25pdG9yIHRvIHNob3cgdGhlIHN0YXR1cyBvZiBzZXJ2ZXIgdGhyZWFkcyBm
b3IKKyAgICAgICAgICAgICMgZGVidWdnaW5nLgorICAgICAgICAgICAgVGhyZWFkTW9uaXRvcihv
cHRpb25zLnRocmVhZF9tb25pdG9yX2ludGVydmFsX2luX3NlYykuc3RhcnQoKQorCisgICAgICAg
ICMgU2hhcmUgYSBEaXNwYXRjaGVyIGFtb25nIHJlcXVlc3QgaGFuZGxlcnMgdG8gc2F2ZSB0aW1l
IGZvcgorICAgICAgICAjIGluc3RhbnRpYXRpb24uICBEaXNwYXRjaGVyIGNhbiBiZSBzaGFyZWQg
YmVjYXVzZSBpdCBpcyB0aHJlYWQtc2FmZS4KKyAgICAgICAgb3B0aW9ucy5kaXNwYXRjaGVyID0g
ZGlzcGF0Y2guRGlzcGF0Y2hlcigKKyAgICAgICAgICAgIG9wdGlvbnMud2Vic29ja19oYW5kbGVy
cywKKyAgICAgICAgICAgIG9wdGlvbnMuc2Nhbl9kaXIsCisgICAgICAgICAgICBvcHRpb25zLmFs
bG93X2hhbmRsZXJzX291dHNpZGVfcm9vdF9kaXIpCisgICAgICAgIGlmIG9wdGlvbnMud2Vic29j
a19oYW5kbGVyc19tYXBfZmlsZToKKyAgICAgICAgICAgIF9hbGlhc19oYW5kbGVycyhvcHRpb25z
LmRpc3BhdGNoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy53ZWJzb2Nr
X2hhbmRsZXJzX21hcF9maWxlKQorICAgICAgICB3YXJuaW5ncyA9IG9wdGlvbnMuZGlzcGF0Y2hl
ci5zb3VyY2Vfd2FybmluZ3MoKQorICAgICAgICBpZiB3YXJuaW5nczoKKyAgICAgICAgICAgIGZv
ciB3YXJuaW5nIGluIHdhcm5pbmdzOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygn
bW9kX3B5d2Vic29ja2V0OiAlcycgJSB3YXJuaW5nKQorCisgICAgICAgIHNlcnZlciA9IFdlYlNv
Y2tldFNlcnZlcihvcHRpb25zKQorICAgICAgICBzZXJ2ZXIuc2VydmVfZm9yZXZlcigpCisgICAg
ZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgnbW9kX3B5d2Vi
c29ja2V0OiAlcycgJSBlKQorICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKCdtb2RfcHl3ZWJzb2Nr
ZXQ6ICVzJyAlIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCisgICAgICAgIHN5cy5leGl0KDEpCisK
KworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBfbWFpbihzeXMuYXJndlsxOl0pCisK
KworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0cmVhbS5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQv
c3RyZWFtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwNTFlZWUyMDllZTJkMDZjMTM0YmYzODZjYzlmM2JjODMx
NzIwYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0cmVhbS5weQpAQCAtMCwwICsxLDU2IEBA
CisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUaGlzIGZpbGUgZXhwb3J0cyBwdWJsaWMgc3ltYm9s
cy4KKyIiIgorCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1fYmFzZSBpbXBvcnQgQmFk
T3BlcmF0aW9uRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2Jhc2UgaW1w
b3J0IENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5f
c3RyZWFtX2Jhc2UgaW1wb3J0IEludmFsaWRGcmFtZUV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJz
b2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBJbnZhbGlkVVRGOEV4Y2VwdGlvbgorZnJvbSBtb2Rf
cHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBVbnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9u
Citmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2hpeGllNzUgaW1wb3J0IFN0cmVhbUhpeGll
NzUKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faHliaSBpbXBvcnQgRnJhbWUKK2Zyb20g
bW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faHliaSBpbXBvcnQgU3RyZWFtCitmcm9tIG1vZF9weXdl
YnNvY2tldC5fc3RyZWFtX2h5YmkgaW1wb3J0IFN0cmVhbU9wdGlvbnMKKworIyBUaGVzZSBtZXRo
b2RzIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IFdlYlNvY2tldCBjbGllbnQgZGV2ZWxvcGVy
cyB0byBoYXZlCisjIHRoZWlyIGltcGxlbWVudGF0aW9ucyByZWNlaXZlIGJyb2tlbiBkYXRhIGlu
IHRlc3RzLgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9oeWJpIGltcG9ydCBjcmVhdGVf
Y2xvc2VfZnJhbWUKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faHliaSBpbXBvcnQgY3Jl
YXRlX2hlYWRlcgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9oeWJpIGltcG9ydCBjcmVh
dGVfbGVuZ3RoX2hlYWRlcgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9oeWJpIGltcG9y
dCBjcmVhdGVfcGluZ19mcmFtZQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9oeWJpIGlt
cG9ydCBjcmVhdGVfcG9uZ19mcmFtZQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9oeWJp
IGltcG9ydCBjcmVhdGVfYmluYXJ5X2ZyYW1lCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFt
X2h5YmkgaW1wb3J0IGNyZWF0ZV90ZXh0X2ZyYW1lCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQv
bW9kX3B5d2Vic29ja2V0L3V0aWwucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWEwYWI1
ZGU2OTdhY2IxMzc3ZjllYjBkYWY4MzIxM2NkOTVkMmJhNwotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2Nr
ZXQvdXRpbC5weQpAQCAtMCwwICsxLDQ4OSBAQAorIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIElu
Yy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiV2Vi
U29ja2V0IHV0aWxpdGllcy4KKyIiIgorCisKK2ltcG9ydCBhcnJheQoraW1wb3J0IGVycm5vCisK
KyMgSW1wb3J0IGhhc2ggY2xhc3NlcyBmcm9tIGEgbW9kdWxlIGF2YWlsYWJsZSBhbmQgcmVjb21t
ZW5kZWQgZm9yIGVhY2ggUHl0aG9uCisjIHZlcnNpb24gYW5kIHJlLWV4cG9ydCB0aG9zZSBzeW1i
b2wuIFVzZSBzaGEgYW5kIG1kNSBtb2R1bGUgaW4gUHl0aG9uIDIuNCwgYW5kCisjIGhhc2hsaWIg
bW9kdWxlIGluIFB5dGhvbiAyLjYuCit0cnk6CisgICAgaW1wb3J0IGhhc2hsaWIKKyAgICBtZDVf
aGFzaCA9IGhhc2hsaWIubWQ1CisgICAgc2hhMV9oYXNoID0gaGFzaGxpYi5zaGExCitleGNlcHQg
SW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IG1kNQorICAgIGltcG9ydCBzaGEKKyAgICBtZDVfaGFz
aCA9IG1kNS5tZDUKKyAgICBzaGExX2hhc2ggPSBzaGEuc2hhCisKK2ltcG9ydCBTdHJpbmdJTwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBv
cnQgdHJhY2ViYWNrCitpbXBvcnQgemxpYgorCisKK2RlZiBnZXRfc3RhY2tfdHJhY2UoKToKKyAg
ICAiIiJHZXQgdGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UgYXMgc3RyaW5nLgorCisgICAgVGhpcyBp
cyBuZWVkZWQgdG8gc3VwcG9ydCBQeXRob24gMi4zLgorICAgIFRPRE86IFJlbW92ZSB0aGlzIHdo
ZW4gd2Ugb25seSBzdXBwb3J0IFB5dGhvbiAyLjQgYW5kIGFib3ZlLgorICAgICAgICAgIFVzZSB0
cmFjZWJhY2suZm9ybWF0X2V4YyBpbnN0ZWFkLgorICAgICIiIgorCisgICAgb3V0ID0gU3RyaW5n
SU8uU3RyaW5nSU8oKQorICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1vdXQpCisgICAgcmV0
dXJuIG91dC5nZXR2YWx1ZSgpCisKKworZGVmIHByZXBlbmRfbWVzc2FnZV90b19leGNlcHRpb24o
bWVzc2FnZSwgZXhjKToKKyAgICAiIiJQcmVwZW5kIG1lc3NhZ2UgdG8gdGhlIGV4Y2VwdGlvbi4i
IiIKKworICAgIGV4Yy5hcmdzID0gKG1lc3NhZ2UgKyBzdHIoZXhjKSwpCisgICAgcmV0dXJuCisK
KworZGVmIF9fdHJhbnNsYXRlX2ludGVycChpbnRlcnAsIGN5Z3dpbl9wYXRoKToKKyAgICAiIiJU
cmFuc2xhdGUgaW50ZXJwIHByb2dyYW0gcGF0aCBmb3IgV2luMzIgcHl0aG9uIHRvIHJ1biBjeWd3
aW4gcHJvZ3JhbQorICAgIChlLmcuIHBlcmwpLiAgTm90ZSB0aGF0IGl0IGRvZXNuJ3Qgc3VwcG9y
dCBwYXRoIHRoYXQgY29udGFpbnMgc3BhY2UsCisgICAgd2hpY2ggaXMgdHlwaWNhbGx5IHRydWUg
Zm9yIFVuaXgsIHdoZXJlICMhLXNjcmlwdCBpcyB3cml0dGVuLgorICAgIEZvciBXaW4zMiBweXRo
b24sIGN5Z3dpbl9wYXRoIGlzIGEgZGlyZWN0b3J5IG9mIGN5Z3dpbiBiaW5hcmllcy4KKworICAg
IEFyZ3M6CisgICAgICBpbnRlcnA6IGludGVycCBjb21tYW5kIGxpbmUKKyAgICAgIGN5Z3dpbl9w
YXRoOiBkaXJlY3RvcnkgbmFtZSBvZiBjeWd3aW4gYmluYXJ5LCBvciBOb25lCisgICAgUmV0dXJu
czoKKyAgICAgIHRyYW5zbGF0ZWQgaW50ZXJwIGNvbW1hbmQgbGluZS4KKyAgICAiIiIKKyAgICBp
ZiBub3QgY3lnd2luX3BhdGg6CisgICAgICAgIHJldHVybiBpbnRlcnAKKyAgICBtID0gcmUubWF0
Y2goJ15bXiBdKi8oW14gXSspKCAuKik/JywgaW50ZXJwKQorICAgIGlmIG06CisgICAgICAgIGNt
ZCA9IG9zLnBhdGguam9pbihjeWd3aW5fcGF0aCwgbS5ncm91cCgxKSkKKyAgICAgICAgcmV0dXJu
IGNtZCArIG0uZ3JvdXAoMikKKyAgICByZXR1cm4gaW50ZXJwCisKKworZGVmIGdldF9zY3JpcHRf
aW50ZXJwKHNjcmlwdF9wYXRoLCBjeWd3aW5fcGF0aD1Ob25lKToKKyAgICAiIiJHZXRzICMhLWlu
dGVycHJldGVyIGNvbW1hbmQgbGluZSBmcm9tIHRoZSBzY3JpcHQuCisKKyAgICBJdCBhbHNvIGZp
eGVzIGNvbW1hbmQgcGF0aC4gIFdoZW4gQ3lnd2luIFB5dGhvbiBpcyB1c2VkLCBlLmcuIGluIFdl
YktpdCwKKyAgICBpdCBjb3VsZCBydW4gIi91c3IvYmluL3BlcmwgLXdUIGhlbGxvLnBsIi4KKyAg
ICBXaGVuIFdpbjMyIFB5dGhvbiBpcyB1c2VkLCBlLmcuIGluIENocm9taXVtLCBpdCBjb3VsZG4n
dC4gIFNvLCBmaXgKKyAgICAiL3Vzci9iaW4vcGVybCIgdG8gIjxjeWd3aW5fcGF0aD5ccGVybC5l
eGUiLgorCisgICAgQXJnczoKKyAgICAgIHNjcmlwdF9wYXRoOiBwYXRobmFtZSBvZiB0aGUgc2Ny
aXB0CisgICAgICBjeWd3aW5fcGF0aDogZGlyZWN0b3J5IG5hbWUgb2YgY3lnd2luIGJpbmFyeSwg
b3IgTm9uZQorICAgIFJldHVybnM6CisgICAgICAjIS1pbnRlcnByZXRlciBjb21tYW5kIGxpbmUs
IG9yIE5vbmUgaWYgaXQgaXMgbm90ICMhLXNjcmlwdC4KKyAgICAiIiIKKyAgICBmcCA9IG9wZW4o
c2NyaXB0X3BhdGgpCisgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKKyAgICBmcC5jbG9zZSgpCisg
ICAgbSA9IHJlLm1hdGNoKCdeIyEoLiopJywgbGluZSkKKyAgICBpZiBtOgorICAgICAgICByZXR1
cm4gX190cmFuc2xhdGVfaW50ZXJwKG0uZ3JvdXAoMSksIGN5Z3dpbl9wYXRoKQorICAgIHJldHVy
biBOb25lCisKKworZGVmIHdyYXBfcG9wZW4zX2Zvcl93aW4oY3lnd2luX3BhdGgpOgorICAgICIi
IldyYXAgcG9wZW4zIHRvIHN1cHBvcnQgIyEtc2NyaXB0IG9uIFdpbmRvd3MuCisKKyAgICBBcmdz
OgorICAgICAgY3lnd2luX3BhdGg6ICBwYXRoIGZvciBjeWd3aW4gYmluYXJ5IGlmIGNvbW1hbmQg
cGF0aCBpcyBuZWVkZWQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC4gIE5v
bmUgaWYgbm8gdHJhbnNsYXRpb24gcmVxdWlyZWQuCisgICAgIiIiCisKKyAgICBfX29yaWdfcG9w
ZW4zID0gb3MucG9wZW4zCisKKyAgICBkZWYgX193cmFwX3BvcGVuMyhjbWQsIG1vZGU9J3QnLCBi
dWZzaXplPS0xKToKKyAgICAgICAgY21kbGluZSA9IGNtZC5zcGxpdCgnICcpCisgICAgICAgIGlu
dGVycCA9IGdldF9zY3JpcHRfaW50ZXJwKGNtZGxpbmVbMF0sIGN5Z3dpbl9wYXRoKQorICAgICAg
ICBpZiBpbnRlcnA6CisgICAgICAgICAgICBjbWQgPSBpbnRlcnAgKyAnICcgKyBjbWQKKyAgICAg
ICAgcmV0dXJuIF9fb3JpZ19wb3BlbjMoY21kLCBtb2RlLCBidWZzaXplKQorCisgICAgb3MucG9w
ZW4zID0gX193cmFwX3BvcGVuMworCisKK2RlZiBoZXhpZnkocyk6CisgICAgcmV0dXJuICcgJy5q
b2luKG1hcChsYW1iZGEgeDogJyUwMngnICUgb3JkKHgpLCBzKSkKKworCitkZWYgZ2V0X2NsYXNz
X2xvZ2dlcihvKToKKyAgICByZXR1cm4gbG9nZ2luZy5nZXRMb2dnZXIoCisgICAgICAgICclcy4l
cycgJSAoby5fX2NsYXNzX18uX19tb2R1bGVfXywgby5fX2NsYXNzX18uX19uYW1lX18pKQorCisK
K2NsYXNzIE5vb3BNYXNrZXIob2JqZWN0KToKKyAgICAiIiJBIG1hc2tpbmcgb2JqZWN0IHRoYXQg
aGFzIHRoZSBzYW1lIGludGVyZmFjZSBhcyBSZXBlYXRlZFhvck1hc2tlciBidXQKKyAgICBqdXN0
IHJldHVybnMgdGhlIHN0cmluZyBwYXNzZWQgaW4gd2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZS4K
KyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAg
ZGVmIG1hc2soc2VsZiwgcyk6CisgICAgICAgIHJldHVybiBzCisKKworY2xhc3MgUmVwZWF0ZWRY
b3JNYXNrZXIob2JqZWN0KToKKyAgICAiIiJBIG1hc2tpbmcgb2JqZWN0IHRoYXQgYXBwbGllcyBY
T1Igb24gdGhlIHN0cmluZyBnaXZlbiB0byBtYXNrIG1ldGhvZAorICAgIHdpdGggdGhlIG1hc2tp
bmcgYnl0ZXMgZ2l2ZW4gdG8gdGhlIGNvbnN0cnVjdG9yIHJlcGVhdGVkbHkuIFRoaXMgb2JqZWN0
CisgICAgcmVtZW1iZXJzIHRoZSBwb3NpdGlvbiBpbiB0aGUgbWFza2luZyBieXRlcyB0aGUgbGFz
dCBtYXNrIG1ldGhvZCBjYWxsCisgICAgZW5kZWQgYW5kIHJlc3VtZXMgZnJvbSB0aGF0IHBvaW50
IG9uIHRoZSBuZXh0IG1hc2sgbWV0aG9kIGNhbGwuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgbWFzayk6CisgICAgICAgIHNlbGYuX21hc2sgPSBtYXAob3JkLCBtYXNrKQorICAg
ICAgICBzZWxmLl9tYXNrX3NpemUgPSBsZW4oc2VsZi5fbWFzaykKKyAgICAgICAgc2VsZi5fY291
bnQgPSAwCisKKyAgICBkZWYgbWFzayhzZWxmLCBzKToKKyAgICAgICAgcmVzdWx0ID0gYXJyYXku
YXJyYXkoJ0InKQorICAgICAgICByZXN1bHQuZnJvbXN0cmluZyhzKQorICAgICAgICBmb3IgaSBp
biB4cmFuZ2UobGVuKHJlc3VsdCkpOgorICAgICAgICAgICAgcmVzdWx0W2ldIF49IHNlbGYuX21h
c2tbc2VsZi5fY291bnRdCisgICAgICAgICAgICBzZWxmLl9jb3VudCA9IChzZWxmLl9jb3VudCAr
IDEpICUgc2VsZi5fbWFza19zaXplCisgICAgICAgIHJldHVybiByZXN1bHQudG9zdHJpbmcoKQor
CisKK2NsYXNzIERlZmxhdGVSZXF1ZXN0KG9iamVjdCk6CisgICAgIiIiQSB3cmFwcGVyIGNsYXNz
IGZvciByZXF1ZXN0IG9iamVjdCB0byBpbnRlcmNlcHQgc2VuZCBhbmQgcmVjdiB0byBwZXJmb3Jt
CisgICAgZGVmbGF0ZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0cmFuc3BhcmVudGx5
LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICBz
ZWxmLl9yZXF1ZXN0ID0gcmVxdWVzdAorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBEZWZsYXRl
Q29ubmVjdGlvbihyZXF1ZXN0LmNvbm5lY3Rpb24pCisKKyAgICBkZWYgX19nZXRhdHRyaWJ1dGVf
XyhzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZSBpbiAoJ19yZXF1ZXN0JywgJ2Nvbm5lY3Rp
b24nKToKKyAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBu
YW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdC5fX2dldGF0dHJpYnV0ZV9fKG5hbWUp
CisKKyAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICBpZiBu
YW1lIGluICgnX3JlcXVlc3QnLCAnY29ubmVjdGlvbicpOgorICAgICAgICAgICAgcmV0dXJuIG9i
amVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3JlcXVlc3QuX19zZXRhdHRyX18obmFtZSwgdmFsdWUpCisKKworIyBCeSBtYWtpbmcgd2JpdHMg
b3B0aW9uIG5lZ2F0aXZlLCB3ZSBjYW4gc3VwcHJlc3MgQ01GL0ZMRyAoMiBvY3RldCkgYW5kCisj
IEFETEVSMzIgKDQgb2N0ZXQpIGZpZWxkcyBvZiB6bGliIHNvIHRoYXQgd2UgY2FuIHVzZSB6bGli
IG1vZHVsZSBqdXN0IGFzCisjIGRlZmxhdGUgbGlicmFyeS4gRElDVElEIHdvbid0IGJlIGFkZGVk
IGFzIGZhciBhcyB3ZSBkb24ndCBzZXQgZGljdGlvbmFyeS4KKyMgTFo3NyB3aW5kb3cgb2YgMzJL
IHdpbGwgYmUgdXNlZCBmb3IgYm90aCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbi4KKyMg
Rm9yIGRlY29tcHJlc3Npb24sIHdlIGNhbiBqdXN0IHVzZSAzMksgdG8gY292ZXIgYW55IHdpbmRv
d3Mgc2l6ZS4gRm9yCisjIGNvbXByZXNzaW9uLCB3ZSB1c2UgMzJLIHNvIHJlY2VpdmVycyBtdXN0
IHVzZSAzMksuCisjCisjIENvbXByZXNzaW9uIGxldmVsIGlzIFpfREVGQVVMVF9DT01QUkVTU0lP
Ti4gV2UgZG9uJ3QgaGF2ZSB0byBtYXRjaCBsZXZlbAorIyB0byBkZWNvZGUuCisjCisjIFNlZSB6
Y29uZi5oLCBkZWZsYXRlLmNjLCBpbmZsYXRlLmNjIG9mIHpsaWIgbGlicmFyeSwgYW5kIHpsaWJt
b2R1bGUuYyBvZgorIyBQeXRob24uIFNlZSBhbHNvIFJGQzE5NTAgKFpMSUIgMy4zKS4KKworCitj
bGFzcyBfRGVmbGF0ZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3df
Yml0cyk6CisgICAgICAgIHNlbGYuX2xvZ2dlciA9IGdldF9jbGFzc19sb2dnZXIoc2VsZikKKwor
ICAgICAgICBzZWxmLl9jb21wcmVzcyA9IHpsaWIuY29tcHJlc3NvYmooCisgICAgICAgICAgICB6
bGliLlpfREVGQVVMVF9DT01QUkVTU0lPTiwgemxpYi5ERUZMQVRFRCwgLXdpbmRvd19iaXRzKQor
CisgICAgZGVmIGNvbXByZXNzX2FuZF9mbHVzaChzZWxmLCBieXRlcyk6CisgICAgICAgIGNvbXBy
ZXNzZWRfYnl0ZXMgPSBzZWxmLl9jb21wcmVzcy5jb21wcmVzcyhieXRlcykKKyAgICAgICAgY29t
cHJlc3NlZF9ieXRlcyArPSBzZWxmLl9jb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkK
KyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdDb21wcmVzcyBpbnB1dCAlcicsIGJ5dGVzKQor
ICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ0NvbXByZXNzIHJlc3VsdCAlcicsIGNvbXByZXNz
ZWRfYnl0ZXMpCisgICAgICAgIHJldHVybiBjb21wcmVzc2VkX2J5dGVzCisKKworY2xhc3MgX0lu
ZmxhdGVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYu
X2xvZ2dlciA9IGdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBzZWxmLl91bmNvbnN1
bWVkID0gJycKKworICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiBkZWNvbXByZXNzKHNl
bGYsIHNpemUpOgorICAgICAgICBpZiBub3QgKHNpemUgPT0gLTEgb3Igc2l6ZSA+IDApOgorICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdzaXplIG11c3QgYmUgLTEgb3IgcG9zaXRpdmUnKQor
CisgICAgICAgIGRhdGEgPSAnJworCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBp
ZiBzaXplID09IC0xOgorICAgICAgICAgICAgICAgIGRhdGEgKz0gc2VsZi5fZGVjb21wcmVzcy5k
ZWNvbXByZXNzKHNlbGYuX3VuY29uc3VtZWQpCisgICAgICAgICAgICAgICAgIyBTZWUgUHl0aG9u
IGJ1ZyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTIwNTAgdG8KKyAgICAgICAgICAgICAg
ICAjIHVuZGVyc3RhbmQgd2h5IHRoZSBzYW1lIGNvZGUgY2Fubm90IGJlIHVzZWQgZm9yIHVwZGF0
aW5nCisgICAgICAgICAgICAgICAgIyBzZWxmLl91bmNvbnN1bWVkIGZvciBoZXJlIGFuZCBlbHNl
IGJsb2NrLgorICAgICAgICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWQgPSAnJworICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhICs9IHNlbGYuX2RlY29tcHJlc3MuZGVjb21w
cmVzcygKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdW5jb25zdW1lZCwgc2l6ZSAtIGxlbihk
YXRhKSkKKyAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkID0gc2VsZi5fZGVjb21wcmVz
cy51bmNvbnN1bWVkX3RhaWwKKyAgICAgICAgICAgIGlmIHNlbGYuX2RlY29tcHJlc3MudW51c2Vk
X2RhdGE6CisgICAgICAgICAgICAgICAgIyBFbmNvdW50ZXJlZCBhIGxhc3QgYmxvY2sgKGkuZS4g
YSBibG9jayB3aXRoIEJGSU5BTCA9IDEpIGFuZAorICAgICAgICAgICAgICAgICMgZm91bmQgYSBu
ZXcgc3RyZWFtICh1bnVzZWRfZGF0YSkuIFdlIGNhbm5vdCB1c2UgdGhlIHNhbWUKKyAgICAgICAg
ICAgICAgICAjIHpsaWIuRGVjb21wcmVzcyBvYmplY3QgZm9yIHRoZSBuZXcgc3RyZWFtLiBDcmVh
dGUgYSBuZXcKKyAgICAgICAgICAgICAgICAjIERlY29tcHJlc3Mgb2JqZWN0IHRvIGRlY29tcHJl
c3MgdGhlIG5ldyBvbmUuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgSXQn
cyBmaW5lIHRvIGlnbm9yZSB1bmNvbnN1bWVkX3RhaWwgaWYgdW51c2VkX2RhdGEgaXMgbm90Cisg
ICAgICAgICAgICAgICAgIyBlbXB0eS4KKyAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVk
ID0gc2VsZi5fZGVjb21wcmVzcy51bnVzZWRfZGF0YQorICAgICAgICAgICAgICAgIHNlbGYucmVz
ZXQoKQorICAgICAgICAgICAgICAgIGlmIHNpemUgPj0gMCBhbmQgbGVuKGRhdGEpID09IHNpemU6
CisgICAgICAgICAgICAgICAgICAgICMgZGF0YSBpcyBmaWxsZWQuIERvbid0IGNhbGwgZGVjb21w
cmVzcyBhZ2Fpbi4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICAgICAjIFJlLWludm9rZSBEZWNvbXByZXNzLmRlY29tcHJl
c3MgdG8gdHJ5IHRvIGRlY29tcHJlc3MgYWxsCisgICAgICAgICAgICAgICAgICAgICMgYXZhaWxh
YmxlIGJ5dGVzIGJlZm9yZSBpbnZva2luZyByZWFkIHdoaWNoIGJsb2NrcyB1bnRpbAorICAgICAg
ICAgICAgICAgICAgICAjIGFueSBuZXcgYnl0ZSBpcyBhdmFpbGFibGUuCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSGVy
ZSwgc2luY2UgdW51c2VkX2RhdGEgaXMgZW1wdHksIGV2ZW4gaWYgdW5jb25zdW1lZF90YWlsIGlz
CisgICAgICAgICAgICAgICAgIyBub3QgZW1wdHksIGJ5dGVzIG9mIHJlcXVlc3RlZCBsZW5ndGgg
YXJlIGFscmVhZHkgaW4gZGF0YS4gV2UKKyAgICAgICAgICAgICAgICAjIGRvbid0IGhhdmUgdG8g
ImNvbnRpbnVlIiBoZXJlLgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgZGF0
YToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnRGVjb21wcmVzc2VkICVyJywgZGF0
YSkKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgZGF0YSk6Cisg
ICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnQXBwZW5kZWQgJXInLCBkYXRhKQorICAgICAgICBz
ZWxmLl91bmNvbnN1bWVkICs9IGRhdGEKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAg
c2VsZi5fbG9nZ2VyLmRlYnVnKCdSZXNldCcpCisgICAgICAgIHNlbGYuX2RlY29tcHJlc3MgPSB6
bGliLmRlY29tcHJlc3NvYmooLXpsaWIuTUFYX1dCSVRTKQorCisKKyMgQ29tcHJlc3Nlcy9kZWNv
bXByZXNzZXMgZ2l2ZW4gb2N0ZXRzIHVzaW5nIHRoZSBtZXRob2QgaW50cm9kdWNlZCBpbiBSRkMx
OTc5LgorCisKK2NsYXNzIF9SRkMxOTc5RGVmbGF0ZXIob2JqZWN0KToKKyAgICAiIiJBIGNvbXBy
ZXNzb3IgY2xhc3MgdGhhdCBhcHBsaWVzIERFRkxBVEUgdG8gZ2l2ZW4gYnl0ZSBzZXF1ZW5jZSBh
bmQKKyAgICBmbHVzaGVzIHVzaW5nIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGluIHRoZSBSRkMx
OTc5IHNlY3Rpb24gMi4xLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRv
d19iaXRzLCBub19jb250ZXh0X3Rha2VvdmVyKToKKyAgICAgICAgc2VsZi5fZGVmbGF0ZXIgPSBO
b25lCisgICAgICAgIGlmIHdpbmRvd19iaXRzIGlzIE5vbmU6CisgICAgICAgICAgICB3aW5kb3df
Yml0cyA9IHpsaWIuTUFYX1dCSVRTCisgICAgICAgIHNlbGYuX3dpbmRvd19iaXRzID0gd2luZG93
X2JpdHMKKyAgICAgICAgc2VsZi5fbm9fY29udGV4dF90YWtlb3ZlciA9IG5vX2NvbnRleHRfdGFr
ZW92ZXIKKworICAgIGRlZiBmaWx0ZXIoc2VsZiwgYnl0ZXMpOgorICAgICAgICBpZiBzZWxmLl9k
ZWZsYXRlciBpcyBOb25lIG9yIHNlbGYuX25vX2NvbnRleHRfdGFrZW92ZXI6CisgICAgICAgICAg
ICBzZWxmLl9kZWZsYXRlciA9IF9EZWZsYXRlcihzZWxmLl93aW5kb3dfYml0cykKKworICAgICAg
ICAjIFN0cmlwIGxhc3QgNCBvY3RldHMgd2hpY2ggaXMgTEVOIGFuZCBOTEVOIGZpZWxkIG9mIGEg
bm9uLWNvbXByZXNzZWQKKyAgICAgICAgIyBibG9jayBhZGRlZCBmb3IgWl9TWU5DX0ZMVVNILgor
ICAgICAgICByZXR1cm4gc2VsZi5fZGVmbGF0ZXIuY29tcHJlc3NfYW5kX2ZsdXNoKGJ5dGVzKVs6
LTRdCisKKworY2xhc3MgX1JGQzE5NzlJbmZsYXRlcihvYmplY3QpOgorICAgICIiIkEgZGVjb21w
cmVzc29yIGNsYXNzIGZvciBieXRlIHNlcXVlbmNlIGNvbXByZXNzZWQgYW5kIGZsdXNoZWQgZm9s
bG93aW5nCisgICAgdGhlIGFsZ29yaXRobSBkZXNjcmliZWQgaW4gdGhlIFJGQzE5Nzkgc2VjdGlv
biAyLjEuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYu
X2luZmxhdGVyID0gX0luZmxhdGVyKCkKKworICAgIGRlZiBmaWx0ZXIoc2VsZiwgYnl0ZXMpOgor
ICAgICAgICAjIFJlc3RvcmUgc3RyaXBwZWQgTEVOIGFuZCBOTEVOIGZpZWxkIG9mIGEgbm9uLWNv
bXByZXNzZWQgYmxvY2sgYWRkZWQKKyAgICAgICAgIyBmb3IgWl9TWU5DX0ZMVVNILgorICAgICAg
ICBzZWxmLl9pbmZsYXRlci5hcHBlbmQoYnl0ZXMgKyAnXHgwMFx4MDBceGZmXHhmZicpCisgICAg
ICAgIHJldHVybiBzZWxmLl9pbmZsYXRlci5kZWNvbXByZXNzKC0xKQorCisKK2NsYXNzIERlZmxh
dGVTb2NrZXQob2JqZWN0KToKKyAgICAiIiJBIHdyYXBwZXIgY2xhc3MgZm9yIHNvY2tldCBvYmpl
Y3QgdG8gaW50ZXJjZXB0IHNlbmQgYW5kIHJlY3YgdG8gcGVyZm9ybQorICAgIGRlZmxhdGUgY29t
cHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdHJhbnNwYXJlbnRseS4KKyAgICAiIiIKKworICAg
ICMgU2l6ZSBvZiB0aGUgYnVmZmVyIHBhc3NlZCB0byByZWN2IHRvIHJlY2VpdmUgY29tcHJlc3Nl
ZCBkYXRhLgorICAgIF9SRUNWX1NJWkUgPSA0MDk2CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c29ja2V0KToKKyAgICAgICAgc2VsZi5fc29ja2V0ID0gc29ja2V0CisKKyAgICAgICAgc2VsZi5f
bG9nZ2VyID0gZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX2RlZmxhdGVy
ID0gX0RlZmxhdGVyKHpsaWIuTUFYX1dCSVRTKQorICAgICAgICBzZWxmLl9pbmZsYXRlciA9IF9J
bmZsYXRlcigpCisKKyAgICBkZWYgcmVjdihzZWxmLCBzaXplKToKKyAgICAgICAgIiIiUmVjZWl2
ZXMgZGF0YSBmcm9tIHRoZSBzb2NrZXQgc3BlY2lmaWVkIG9uIHRoZSBjb25zdHJ1Y3Rpb24gdXAK
KyAgICAgICAgdG8gdGhlIHNwZWNpZmllZCBzaXplLiBPbmNlIGFueSBkYXRhIGlzIGF2YWlsYWJs
ZSwgcmV0dXJucyBpdCBldmVuCisgICAgICAgIGlmIGl0J3Mgc21hbGxlciB0aGFuIHRoZSBzcGVj
aWZpZWQgc2l6ZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBUT0RPKHR5b3NoaW5vKTogQWxs
b3cgY2FsbCB3aXRoIHNpemU9MC4gSXQgc2hvdWxkIGJsb2NrIHVudGlsIGFueQorICAgICAgICAj
IGRlY29tcHJlc3NlZCBkYXRhIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgc2l6ZSA8PSAwOgor
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdOb24tcG9zaXRpdmUgc2l6ZSBwYXNzZWQnKQor
ICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2luZmxhdGVyLmRl
Y29tcHJlc3Moc2l6ZSkKKyAgICAgICAgICAgIGlmIGxlbihkYXRhKSAhPSAwOgorICAgICAgICAg
ICAgICAgIHJldHVybiBkYXRhCisKKyAgICAgICAgICAgIHJlYWRfZGF0YSA9IHNlbGYuX3NvY2tl
dC5yZWN2KERlZmxhdGVTb2NrZXQuX1JFQ1ZfU0laRSkKKyAgICAgICAgICAgIGlmIG5vdCByZWFk
X2RhdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgICAgICBzZWxmLl9pbmZs
YXRlci5hcHBlbmQocmVhZF9kYXRhKQorCisgICAgZGVmIHNlbmRhbGwoc2VsZiwgYnl0ZXMpOgor
ICAgICAgICBzZWxmLnNlbmQoYnl0ZXMpCisKKyAgICBkZWYgc2VuZChzZWxmLCBieXRlcyk6Cisg
ICAgICAgIHNlbGYuX3NvY2tldC5zZW5kYWxsKHNlbGYuX2RlZmxhdGVyLmNvbXByZXNzX2FuZF9m
bHVzaChieXRlcykpCisgICAgICAgIHJldHVybiBsZW4oYnl0ZXMpCisKKworY2xhc3MgRGVmbGF0
ZUNvbm5lY3Rpb24ob2JqZWN0KToKKyAgICAiIiJBIHdyYXBwZXIgY2xhc3MgZm9yIHJlcXVlc3Qg
b2JqZWN0IHRvIGludGVyY2VwdCB3cml0ZSBhbmQgcmVhZCB0bworICAgIHBlcmZvcm0gZGVmbGF0
ZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0cmFuc3BhcmVudGx5LgorICAgICIiIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm5lY3Rpb24pOgorICAgICAgICBzZWxmLl9jb25u
ZWN0aW9uID0gY29ubmVjdGlvbgorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IGdldF9jbGFzc19s
b2dnZXIoc2VsZikKKworICAgICAgICBzZWxmLl9kZWZsYXRlciA9IF9EZWZsYXRlcih6bGliLk1B
WF9XQklUUykKKyAgICAgICAgc2VsZi5faW5mbGF0ZXIgPSBfSW5mbGF0ZXIoKQorCisgICAgZGVm
IGdldF9yZW1vdGVfYWRkcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rpb24u
cmVtb3RlX2FkZHIKKyAgICByZW1vdGVfYWRkciA9IHByb3BlcnR5KGdldF9yZW1vdGVfYWRkcikK
KworICAgIGRlZiBwdXRfYnl0ZXMoc2VsZiwgYnl0ZXMpOgorICAgICAgICBzZWxmLndyaXRlKGJ5
dGVzKQorCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgICIiIlJlYWRzIGF0
IG1vc3Qgc2l6ZSBieXRlcy4gQmxvY2tzIHVudGlsIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGJ5dGUK
KyAgICAgICAgYXZhaWxhYmxlLgorICAgICAgICAiIiIKKworICAgICAgICAjIFRPRE8odHlvc2hp
bm8pOiBBbGxvdyBjYWxsIHdpdGggc2l6ZT0wLgorICAgICAgICBpZiBub3QgKHNpemUgPT0gLTEg
b3Igc2l6ZSA+IDApOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdzaXplIG11c3QgYmUg
LTEgb3IgcG9zaXRpdmUnKQorCisgICAgICAgIGRhdGEgPSAnJworICAgICAgICB3aGlsZSBUcnVl
OgorICAgICAgICAgICAgaWYgc2l6ZSA9PSAtMToKKyAgICAgICAgICAgICAgICBkYXRhICs9IHNl
bGYuX2luZmxhdGVyLmRlY29tcHJlc3MoLTEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIGRhdGEgKz0gc2VsZi5faW5mbGF0ZXIuZGVjb21wcmVzcyhzaXplIC0gbGVuKGRhdGEp
KQorCisgICAgICAgICAgICBpZiBzaXplID49IDAgYW5kIGxlbihkYXRhKSAhPSAwOgorICAgICAg
ICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgVE9ETyh0eW9zaGlubyk6IE1ha2UgdGhp
cyByZWFkIGVmZmljaWVudCBieSBzb21lIHdvcmthcm91bmQuCisgICAgICAgICAgICAjCisgICAg
ICAgICAgICAjIEluIDMuMC4zIGFuZCBwcmlvciBvZiBtb2RfcHl0aG9uLCByZWFkIGJsb2NrcyB1
bnRpbCBsZW5ndGggYnl0ZXMKKyAgICAgICAgICAgICMgd2FzIHJlYWQuIFdlIGRvbid0IGtub3cg
dGhlIGV4YWN0IHNpemUgdG8gcmVhZCB3aGlsZSB1c2luZworICAgICAgICAgICAgIyBkZWZsYXRl
LCBzbyByZWFkIGJ5dGUtYnktYnl0ZS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgX1N0
YW5kYWxvbmVSZXF1ZXN0LnJlYWQgdGhhdCB1bHRpbWF0ZWx5IHBlcmZvcm1zCisgICAgICAgICAg
ICAjIHNvY2tldC5fZmlsZW9iamVjdC5yZWFkIGFsc28gYmxvY2tzIHVudGlsIGxlbmd0aCBieXRl
cyB3YXMgcmVhZAorICAgICAgICAgICAgcmVhZF9kYXRhID0gc2VsZi5fY29ubmVjdGlvbi5yZWFk
KDEpCisgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgICAgICBzZWxmLl9pbmZsYXRlci5hcHBlbmQocmVhZF9kYXRhKQorICAgICAgICBy
ZXR1cm4gZGF0YQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgc2VsZi5f
Y29ubmVjdGlvbi53cml0ZShzZWxmLl9kZWZsYXRlci5jb21wcmVzc19hbmRfZmx1c2goYnl0ZXMp
KQorCisKK2RlZiBfaXNfZXdvdWxkYmxvY2tfZXJybm8oZXJyb3JfbnVtYmVyKToKKyAgICAiIiJS
ZXR1cm5zIFRydWUgaWZmIGVycm9yX251bWJlciBpbmRpY2F0ZXMgdGhhdCByZWNlaXZlIG9wZXJh
dGlvbiB3b3VsZAorICAgIGJsb2NrLiBUbyBtYWtlIHRoaXMgcG9ydGFibGUsIHdlIGNoZWNrIGF2
YWlsYWJpbGl0eSBvZiBlcnJubyBhbmQgdGhlbgorICAgIGNvbXBhcmUgdGhlbS4KKyAgICAiIiIK
KworICAgIGZvciBlcnJvcl9uYW1lIGluIFsnV1NBRVdPVUxEQkxPQ0snLCAnRVdPVUxEQkxPQ0sn
LCAnRUFHQUlOJ106CisgICAgICAgIGlmIChlcnJvcl9uYW1lIGluIGRpcihlcnJubykgYW5kCisg
ICAgICAgICAgICBlcnJvcl9udW1iZXIgPT0gZ2V0YXR0cihlcnJubywgZXJyb3JfbmFtZSkpOgor
ICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworCitkZWYgZHJhaW5f
cmVjZWl2ZWRfZGF0YShyYXdfc29ja2V0KToKKyAgICAjIFNldCB0aGUgc29ja2V0IG5vbi1ibG9j
a2luZy4KKyAgICBvcmlnaW5hbF90aW1lb3V0ID0gcmF3X3NvY2tldC5nZXR0aW1lb3V0KCkKKyAg
ICByYXdfc29ja2V0LnNldHRpbWVvdXQoMC4wKQorCisgICAgZHJhaW5lZF9kYXRhID0gW10KKwor
ICAgICMgRHJhaW4gdW50aWwgdGhlIHNvY2tldCBpcyBjbG9zZWQgb3Igbm8gZGF0YSBpcyBpbW1l
ZGlhdGVseQorICAgICMgYXZhaWxhYmxlIGZvciByZWFkLgorICAgIHdoaWxlIFRydWU6CisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSByYXdfc29ja2V0LnJlY3YoMSkKKyAgICAgICAg
ICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBkcmFp
bmVkX2RhdGEuYXBwZW5kKGRhdGEpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6Cisg
ICAgICAgICAgICAjIGUgY2FuIGJlIGVpdGhlciBhIHBhaXIgKGVycm5vLCBzdHJpbmcpIG9yIGp1
c3QgYSBzdHJpbmcgKG9yCisgICAgICAgICAgICAjIHNvbWV0aGluZyBlbHNlKSB0ZWxsaW5nIHdo
YXQgd2VudCB3cm9uZy4gV2Ugc3VwcHJlc3Mgb25seQorICAgICAgICAgICAgIyB0aGUgZXJyb3Jz
IHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIHNvY2tldCBibG9ja3MuIFRob3NlCisgICAgICAgICAg
ICAjIGV4Y2VwdGlvbnMgY2FuIGJlIHBhcnNlZCBhcyBhIHBhaXIgKGVycm5vLCBzdHJpbmcpLgor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGVycm9yX251bWJlciwgbWVzc2FnZSA9
IGUKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAjIEZhaWxlZCB0byBwYXJz
ZSBzb2NrZXQuZXJyb3IuCisgICAgICAgICAgICAgICAgcmFpc2UgZQorCisgICAgICAgICAgICBp
ZiBfaXNfZXdvdWxkYmxvY2tfZXJybm8oZXJyb3JfbnVtYmVyKToKKyAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBlCisKKyAgICAj
IFJvbGxiYWNrIHRpbWVvdXQgdmFsdWUuCisgICAgcmF3X3NvY2tldC5zZXR0aW1lb3V0KG9yaWdp
bmFsX3RpbWVvdXQpCisKKyAgICByZXR1cm4gJycuam9pbihkcmFpbmVkX2RhdGEpCisKKworIyB2
aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvcHl3ZWJzb2NrZXQvc2V0dXAucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvcHl3ZWJzb2NrZXQvc2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDhmNGY1MTc3MTBjZTMzNjk2
MGFiMzFhMjBiOWIxYTgzMzRlOWNmMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC9zZXR1cC5weQpAQCAtMCwwICsxLDY0IEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMu
CisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlNldCB1
cCBzY3JpcHQgZm9yIG1vZF9weXdlYnNvY2tldC4KKyIiIgorCisKK2Zyb20gZGlzdHV0aWxzLmNv
cmUgaW1wb3J0IHNldHVwCitpbXBvcnQgc3lzCisKKworX1BBQ0tBR0VfTkFNRSA9ICdtb2RfcHl3
ZWJzb2NrZXQnCisKK2lmIHN5cy52ZXJzaW9uIDwgJzIuMyc6CisgICAgcHJpbnQgPj4gc3lzLnN0
ZGVyciwgJyVzIHJlcXVpcmVzIFB5dGhvbiAyLjMgb3IgbGF0ZXIuJyAlIF9QQUNLQUdFX05BTUUK
KyAgICBzeXMuZXhpdCgxKQorCitzZXR1cChhdXRob3I9J1l1em8gRnVqaXNoaW1hJywKKyAgICAg
IGF1dGhvcl9lbWFpbD0neXV6b0BjaHJvbWl1bS5vcmcnLAorICAgICAgZGVzY3JpcHRpb249J1dl
YlNvY2tldCBleHRlbnNpb24gZm9yIEFwYWNoZSBIVFRQIFNlcnZlci4nLAorICAgICAgbG9uZ19k
ZXNjcmlwdGlvbj0oCisgICAgICAgICAgICAgICdtb2RfcHl3ZWJzb2NrZXQgaXMgYW4gQXBhY2hl
IEhUVFAgU2VydmVyIGV4dGVuc2lvbiBmb3IgJworICAgICAgICAgICAgICAnV2ViU29ja2V0ICho
dHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU1KS4gJworICAgICAgICAgICAgICAnU2Vl
IG1vZF9weXdlYnNvY2tldC9fX2luaXRfXy5weSBmb3IgbW9yZSBkZXRhaWwuJyksCisgICAgICBs
aWNlbnNlPSdTZWUgQ09QWUlORycsCisgICAgICBuYW1lPV9QQUNLQUdFX05BTUUsCisgICAgICBw
YWNrYWdlcz1bX1BBQ0tBR0VfTkFNRSwgX1BBQ0tBR0VfTkFNRSArICcuaGFuZHNoYWtlJ10sCisg
ICAgICB1cmw9J2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9weXdlYnNvY2tldC8nLAorICAgICAg
IyBTZWUgdGhlIHNvdXJjZSBvZiBkaXN0dXRpbHMudmVyc2lvbiwgZGlzdHV0aWxzLnZlcnNpb25w
cmVkaWNhdGUgYW5kCisgICAgICAjIGRpc3R1dGlscy5kaXN0IHRvIHVuZGVyc3RhbmQgaG93IHRv
IG5hbWUgdmVyc2lvbiBudW1iZXJzLgorICAgICAgdmVyc2lvbj0nMC43LjQnLAorICAgICAgKQor
CisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC9fX2luaXRfXy5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC9jbGll
bnRfZm9yX3Rlc3RpbmcucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3
ZWJzb2NrZXQvdGVzdC9jbGllbnRfZm9yX3Rlc3RpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWYzM2RkMTM0
ZDI0YzdlYzVmMTZhZmQzYWJhYTMxMzk1OTc3NjM0OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L2NsaWVudF9mb3Jf
dGVzdGluZy5weQpAQCAtMCwwICsxLDEwNzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIwor
IyBDb3B5cmlnaHQgMjAxMiwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKworIiIiV2ViU29ja2V0IGNsaWVudCB1dGlsaXR5IGZvciB0ZXN0
aW5nLgorCitUaGlzIG1vZHVsZSBjb250YWlucyBoZWxwZXIgbWV0aG9kcyBmb3IgcGVyZm9ybWlu
ZyBoYW5kc2hha2UsIGZyYW1lCitzZW5kaW5nL3JlY2VpdmluZyBhcyBhIFdlYlNvY2tldCBjbGll
bnQuCisKK1RoaXMgaXMgY29kZSBmb3IgdGVzdGluZyBtb2RfcHl3ZWJzb2NrZXQuIEtlZXAgdGhp
cyBjb2RlIGluZGVwZW5kZW50IGZyb20KK21vZF9weXdlYnNvY2tldC4gRG9uJ3QgaW1wb3J0IGUu
Zy4gU3RyZWFtIGNsYXNzIGZvciBnZW5lcmF0aW5nIGZyYW1lIGZvcgordGVzdGluZy4gVXNpbmcg
dXRpbC5oZXhpZnksIGV0Yy4gdGhhdCBhcmUgbm90IHJlbGF0ZWQgdG8gcHJvdG9jb2wgcHJvY2Vz
c2luZworaXMgYWxsb3dlZC4KKworTm90ZToKK1RoaXMgY29kZSBpcyBmYXIgZnJvbSByb2J1c3Qs
IGUuZy4sIHdlIGN1dCBjb3JuZXJzIGluIGhhbmRzaGFrZS4KKyIiIgorCisKK2ltcG9ydCBiYXNl
NjQKK2ltcG9ydCBlcnJubworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJhbmRv
bQoraW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RydWN0CisKK2Zyb20gbW9kX3B5
d2Vic29ja2V0IGltcG9ydCB1dGlsCisKKworX0RFRkFVTFRfUE9SVCA9IDgwCitfREVGQVVMVF9T
RUNVUkVfUE9SVCA9IDQ0MworCisjIE9wY29kZXMgaW50cm9kdWNlZCBpbiBJRVRGIEh5QmkgMDEg
Zm9yIHRoZSBuZXcgZnJhbWluZyBmb3JtYXQKK19PUENPREVfQ09OVElOVUFUSU9OID0gMHgwCitf
T1BDT0RFX0NMT1NFID0gMHg4CitfT1BDT0RFX1RFWFQgPSAweDEKK19PUENPREVfQklOQVJZID0g
MHgyCisKKyMgU3RyaW5ncyB1c2VkIGZvciBoYW5kc2hha2UKK19VUEdSQURFX0hFQURFUiA9ICdV
cGdyYWRlOiB3ZWJzb2NrZXRcclxuJworX1VQR1JBREVfSEVBREVSX0hJWElFNzUgPSAnVXBncmFk
ZTogV2ViU29ja2V0XHJcbicKK19DT05ORUNUSU9OX0hFQURFUiA9ICdDb25uZWN0aW9uOiBVcGdy
YWRlXHJcbicKKworX1dFQlNPQ0tFVF9BQ0NFUFRfVVVJRCA9ICcyNThFQUZBNS1FOTE0LTQ3REEt
OTVDQS1DNUFCMERDODVCMTEnCisKKyMgU3RhdHVzIGNvZGVzCitTVEFUVVNfTk9STUFMX0NMT1NV
UkUgPSAxMDAwCitTVEFUVVNfR09JTkdfQVdBWSA9IDEwMDEKK1NUQVRVU19QUk9UT0NPTF9FUlJP
UiA9IDEwMDIKK1NUQVRVU19VTlNVUFBPUlRFRF9EQVRBID0gMTAwMworU1RBVFVTX05PX1NUQVRV
U19SRUNFSVZFRCA9IDEwMDUKK1NUQVRVU19BQk5PUk1BTF9DTE9TVVJFID0gMTAwNgorU1RBVFVT
X0lOVkFMSURfRlJBTUVfUEFZTE9BRF9EQVRBID0gMTAwNworU1RBVFVTX1BPTElDWV9WSU9MQVRJ
T04gPSAxMDA4CitTVEFUVVNfTUVTU0FHRV9UT09fQklHID0gMTAwOQorU1RBVFVTX01BTkRBVE9S
WV9FWFQgPSAxMDEwCitTVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SID0gMTAxMQorU1RBVFVT
X1RMU19IQU5EU0hBS0UgPSAxMDE1CisKKyMgRXh0ZW5zaW9uIHRva2VucworX0RFRkxBVEVfU1RS
RUFNX0VYVEVOU0lPTiA9ICdkZWZsYXRlLXN0cmVhbScKK19ERUZMQVRFX0ZSQU1FX0VYVEVOU0lP
TiA9ICdkZWZsYXRlLWZyYW1lJworCisKK2RlZiBfbWV0aG9kX2xpbmUocmVzb3VyY2UpOgorICAg
IHJldHVybiAnR0VUICVzIEhUVFAvMS4xXHJcbicgJSByZXNvdXJjZQorCisKK2RlZiBfc2VjX29y
aWdpbl9oZWFkZXIob3JpZ2luKToKKyAgICByZXR1cm4gJ1NlYy1XZWJTb2NrZXQtT3JpZ2luOiAl
c1xyXG4nICUgb3JpZ2luLmxvd2VyKCkKKworCitkZWYgX29yaWdpbl9oZWFkZXIob3JpZ2luKToK
KyAgICAjIDQuMSAxMy4gY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyaW5nICJPcmlnaW46IiwgYSBV
KzAwMjAgU1BBQ0UgY2hhcmFjdGVyLAorICAgICMgYW5kIHRoZSAvb3JpZ2luLyB2YWx1ZSwgY29u
dmVydGVkIHRvIEFTQ0lJIGxvd2VyY2FzZSwgdG8gL2ZpZWxkcy8uCisgICAgcmV0dXJuICdPcmln
aW46ICVzXHJcbicgJSBvcmlnaW4ubG93ZXIoKQorCisKK2RlZiBfZm9ybWF0X2hvc3RfaGVhZGVy
KGhvc3QsIHBvcnQsIHNlY3VyZSk6CisgICAgIyA0LjEgOS4gTGV0IC9ob3N0cG9ydC8gYmUgYW4g
ZW1wdHkgc3RyaW5nLgorICAgICMgNC4xIDEwLiBBcHBlbmQgdGhlIC9ob3N0LyB2YWx1ZSwgY29u
dmVydGVkIHRvIEFTQ0lJIGxvd2VyY2FzZSwgdG8KKyAgICAjIC9ob3N0cG9ydC8KKyAgICBob3N0
cG9ydCA9IGhvc3QubG93ZXIoKQorICAgICMgNC4xIDExLiBJZiAvc2VjdXJlLyBpcyBmYWxzZSwg
YW5kIC9wb3J0LyBpcyBub3QgODAsIG9yIGlmIC9zZWN1cmUvCisgICAgIyBpcyB0cnVlLCBhbmQg
L3BvcnQvIGlzIG5vdCA0NDMsIHRoZW4gYXBwZW5kIGEgVSswMDNBIENPTE9OIGNoYXJhY3Rlcgor
ICAgICMgKDopIGZvbGxvd2VkIGJ5IHRoZSB2YWx1ZSBvZiAvcG9ydC8sIGV4cHJlc3NlZCBhcyBh
IGJhc2UtdGVuIGludGVnZXIsCisgICAgIyB0byAvaG9zdHBvcnQvCisgICAgaWYgKChub3Qgc2Vj
dXJlIGFuZCBwb3J0ICE9IF9ERUZBVUxUX1BPUlQpIG9yCisgICAgICAgIChzZWN1cmUgYW5kIHBv
cnQgIT0gX0RFRkFVTFRfU0VDVVJFX1BPUlQpKToKKyAgICAgICAgaG9zdHBvcnQgKz0gJzonICsg
c3RyKHBvcnQpCisgICAgIyA0LjEgMTIuIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZyAiSG9z
dDoiLCBhIFUrMDAyMCBTUEFDRQorICAgICMgY2hhcmFjdGVyLCBhbmQgL2hvc3Rwb3J0LywgdG8g
L2ZpZWxkcy8uCisgICAgcmV0dXJuICdIb3N0OiAlc1xyXG4nICUgaG9zdHBvcnQKKworCisjIFRP
RE8odHlvc2hpbm8pOiBEZWZpbmUgYSBiYXNlIGNsYXNzIGFuZCBtb3ZlIHRoZXNlIHNoYXJlZCBt
ZXRob2RzIHRvIHRoYXQuCisKKworZGVmIF9yZWNlaXZlX2J5dGVzKHNvY2tldCwgbGVuZ3RoKToK
KyAgICBieXRlcyA9IFtdCisgICAgcmVtYWluaW5nID0gbGVuZ3RoCisgICAgd2hpbGUgcmVtYWlu
aW5nID4gMDoKKyAgICAgICAgcmVjZWl2ZWRfYnl0ZXMgPSBzb2NrZXQucmVjdihyZW1haW5pbmcp
CisgICAgICAgIGlmIG5vdCByZWNlaXZlZF9ieXRlczoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigKKyAgICAgICAgICAgICAgICAnQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIHJlY2Vpdmlu
ZyByZXF1ZXN0ZWQgbGVuZ3RoICcKKyAgICAgICAgICAgICAgICAnKHJlcXVlc3RlZCAlZCBieXRl
cyBidXQgcmVjZWl2ZWQgb25seSAlZCBieXRlcyknICUKKyAgICAgICAgICAgICAgICAobGVuZ3Ro
LCBsZW5ndGggLSByZW1haW5pbmcpKQorICAgICAgICBieXRlcy5hcHBlbmQocmVjZWl2ZWRfYnl0
ZXMpCisgICAgICAgIHJlbWFpbmluZyAtPSBsZW4ocmVjZWl2ZWRfYnl0ZXMpCisgICAgcmV0dXJu
ICcnLmpvaW4oYnl0ZXMpCisKKworIyBUT0RPKHR5b3NoaW5vKTogTm93IHRoZSBXZWJTb2NrZXRI
YW5kc2hha2UgY2xhc3MgZGl2ZXJ0cyB0aGVzZSBtZXRob2RzLiBXZQorIyBzaG91bGQgbW92ZSB0
byBIVFRQIHBhcnNlciBhcyBzcGVjaWZpZWQgaW4gUkZDIDY0NTUuIEZvciBIeUJpIDAwIGFuZAor
IyBIaXhpZSA3NSwgcGFjayB0aGVzZSBtZXRob2RzIGFzIHNvbWUgcGFyc2VyIGNsYXNzLgorCisK
K2RlZiBfcmVhZF9maWVsZHMoc29ja2V0KToKKyAgICAjIDQuMSAzMi4gbGV0IC9maWVsZHMvIGJl
IGEgbGlzdCBvZiBuYW1lLXZhbHVlIHBhaXJzLCBpbml0aWFsbHkgZW1wdHkuCisgICAgZmllbGRz
ID0ge30KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICAjIDQuMSAzMy4gbGV0IC9uYW1lLyBhbmQg
L3ZhbHVlLyBiZSBlbXB0eSBieXRlIGFycmF5cworICAgICAgICBuYW1lID0gJycKKyAgICAgICAg
dmFsdWUgPSAnJworICAgICAgICAjIDQuMSAzNC4gcmVhZCAvbmFtZS8KKyAgICAgICAgbmFtZSA9
IF9yZWFkX25hbWUoc29ja2V0KQorICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgICAg
ICBicmVhaworICAgICAgICAjIDQuMSAzNS4gcmVhZCBzcGFjZXMKKyAgICAgICAgIyBUT0RPKHR5
b3NoaW5vKTogU2tpcCBvbmx5IG9uZSBzcGFjZSBhcyBkZXNjcmliZWQgaW4gdGhlIHNwZWMuCisg
ICAgICAgIGNoID0gX3NraXBfc3BhY2VzKHNvY2tldCkKKyAgICAgICAgIyA0LjEgMzYuIHJlYWQg
L3ZhbHVlLworICAgICAgICB2YWx1ZSA9IF9yZWFkX3ZhbHVlKHNvY2tldCwgY2gpCisgICAgICAg
ICMgNC4xIDM3LiByZWFkIGEgYnl0ZSBmcm9tIHRoZSBzZXJ2ZXIKKyAgICAgICAgY2ggPSBfcmVj
ZWl2ZV9ieXRlcyhzb2NrZXQsIDEpCisgICAgICAgIGlmIGNoICE9ICdcbic6ICAjIDB4MEEKKyAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgTEYg
YnV0IGZvdW5kICVyIHdoaWxlIHJlYWRpbmcgdmFsdWUgJXIgZm9yIGhlYWRlciAnCisgICAgICAg
ICAgICAgICAgJyVyJyAlIChjaCwgbmFtZSwgdmFsdWUpKQorICAgICAgICAjIDQuMSAzOC4gYXBw
ZW5kIGFuIGVudHJ5IHRvIHRoZSAvZmllbGRzLyBsaXN0IHRoYXQgaGFzIHRoZSBuYW1lCisgICAg
ICAgICMgZ2l2ZW4gYnkgdGhlIHN0cmluZyBvYnRhaW5lZCBieSBpbnRlcnByZXRpbmcgdGhlIC9u
YW1lLyBieXRlCisgICAgICAgICMgYXJyYXkgYXMgYSBVVEYtOCBzdHJlYW0gYW5kIHRoZSB2YWx1
ZSBnaXZlbiBieSB0aGUgc3RyaW5nCisgICAgICAgICMgb2J0YWluZWQgYnkgaW50ZXJwcmV0aW5n
IHRoZSAvdmFsdWUvIGJ5dGUgYXJyYXkgYXMgYSBVVEYtOCBieXRlCisgICAgICAgICMgc3RyZWFt
LgorICAgICAgICBmaWVsZHMuc2V0ZGVmYXVsdChuYW1lLCBbXSkuYXBwZW5kKHZhbHVlKQorICAg
ICAgICAjIDQuMSAzOS4gcmV0dXJuIHRvIHRoZSAiRmllbGQiIHN0ZXAgYWJvdmUKKyAgICByZXR1
cm4gZmllbGRzCisKKworZGVmIF9yZWFkX25hbWUoc29ja2V0KToKKyAgICAjIDQuMSAzMy4gbGV0
IC9uYW1lLyBiZSBlbXB0eSBieXRlIGFycmF5cworICAgIG5hbWUgPSAnJworICAgIHdoaWxlIFRy
dWU6CisgICAgICAgICMgNC4xIDM0LiByZWFkIGEgYnl0ZSBmcm9tIHRoZSBzZXJ2ZXIKKyAgICAg
ICAgY2ggPSBfcmVjZWl2ZV9ieXRlcyhzb2NrZXQsIDEpCisgICAgICAgIGlmIGNoID09ICdccic6
ICAjIDB4MEQKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsaWYgY2ggPT0gJ1xu
JzogICMgMHgwQQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAg
ICdVbmV4cGVjdGVkIExGIHdoZW4gcmVhZGluZyBoZWFkZXIgbmFtZSAlcicgJSBuYW1lKQorICAg
ICAgICBlbGlmIGNoID09ICc6JzogICMgMHgzQQorICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAg
ICAgICAgZWxpZiBjaCA+PSAnQScgYW5kIGNoIDw9ICdaJzogICMgcmFuZ2UgMHgzMSB0byAweDVB
CisgICAgICAgICAgICBjaCA9IGNocihvcmQoY2gpICsgMHgyMCkKKyAgICAgICAgICAgIG5hbWUg
Kz0gY2gKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUgKz0gY2gKKworCitkZWYgX3Nr
aXBfc3BhY2VzKHNvY2tldCk6CisgICAgIyA0LjEgMzUuIHJlYWQgYSBieXRlIGZyb20gdGhlIHNl
cnZlcgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGNoID0gX3JlY2VpdmVfYnl0ZXMoc29ja2V0
LCAxKQorICAgICAgICBpZiBjaCA9PSAnICc6ICAjIDB4MjAKKyAgICAgICAgICAgIGNvbnRpbnVl
CisgICAgICAgIHJldHVybiBjaAorCisKK2RlZiBfcmVhZF92YWx1ZShzb2NrZXQsIGNoKToKKyAg
ICAjIDQuMSAzMy4gbGV0IC92YWx1ZS8gYmUgZW1wdHkgYnl0ZSBhcnJheXMKKyAgICB2YWx1ZSA9
ICcnCisgICAgIyA0LjEgMzYuIHJlYWQgYSBieXRlIGZyb20gc2VydmVyLgorICAgIHdoaWxlIFRy
dWU6CisgICAgICAgIGlmIGNoID09ICdccic6ICAjIDB4MEQKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZQorICAgICAgICBlbGlmIGNoID09ICdcbic6ICAjIDB4MEEKKyAgICAgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBMRiB3aGVuIHJlYWRpbmcg
aGVhZGVyIHZhbHVlICVyJyAlIHZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFs
dWUgKz0gY2gKKyAgICAgICAgY2ggPSBfcmVjZWl2ZV9ieXRlcyhzb2NrZXQsIDEpCisKKworY2xh
c3MgX1RMU1NvY2tldChvYmplY3QpOgorICAgICIiIldyYXBwZXIgZm9yIGEgVExTIGNvbm5lY3Rp
b24uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3X3NvY2tldCk6CisgICAgICAgIHNl
bGYuX3NzbCA9IHNvY2tldC5zc2wocmF3X3NvY2tldCkKKworICAgIGRlZiBzZW5kKHNlbGYsIGJ5
dGVzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NzbC53cml0ZShieXRlcykKKworICAgIGRlZiBy
ZWN2KHNlbGYsIHNpemU9LTEpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3NsLnJlYWQoc2l6ZSkK
KworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIyBOb3RoaW5nIHRvIGRvLgorICAgICAg
ICBwYXNzCisKKworY2xhc3MgSHR0cFN0YXR1c0V4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIi
IlRoaXMgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIHdoZW4gdW5leHBlY3RlZCBodHRwIHN0YXR1
cyBjb2RlIHdhcworICAgIHJlY2VpdmVkIGFzIGEgcmVzdWx0IG9mIGhhbmRzaGFrZS4KKyAgICAi
IiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBzdGF0dXMpOgorICAgICAgICBzdXBl
cihIdHRwU3RhdHVzRXhjZXB0aW9uLCBzZWxmKS5fX2luaXRfXyhuYW1lKQorICAgICAgICBzZWxm
LnN0YXR1cyA9IHN0YXR1cworCisKK2NsYXNzIFdlYlNvY2tldEhhbmRzaGFrZShvYmplY3QpOgor
ICAgICIiIk9wZW5pbmcgaGFuZHNoYWtlIHByb2Nlc3NvciBmb3IgdGhlIFdlYlNvY2tldCBwcm90
b2NvbCAoUkZDIDY0NTUpLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgor
ICAgICAgICBzZWxmLl9sb2dnZXIgPSB1dGlsLmdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAg
ICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworCisgICAgZGVmIGhhbmRzaGFrZShzZWxmLCBz
b2NrZXQpOgorICAgICAgICAiIiJIYW5kc2hha2UgV2ViU29ja2V0LgorCisgICAgICAgIFJhaXNl
czoKKyAgICAgICAgICAgIEV4Y2VwdGlvbjogaGFuZHNoYWtlIGZhaWxlZC4KKyAgICAgICAgIiIi
CisKKyAgICAgICAgc2VsZi5fc29ja2V0ID0gc29ja2V0CisKKyAgICAgICAgcmVxdWVzdF9saW5l
ID0gX21ldGhvZF9saW5lKHNlbGYuX29wdGlvbnMucmVzb3VyY2UpCisgICAgICAgIHNlbGYuX2xv
Z2dlci5kZWJ1ZygnT3BlbmluZyBoYW5kc2hha2UgUmVxdWVzdC1MaW5lOiAlcicsIHJlcXVlc3Rf
bGluZSkKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwocmVxdWVzdF9saW5lKQorCisgICAg
ICAgIGZpZWxkcyA9IFtdCisgICAgICAgIGZpZWxkcy5hcHBlbmQoX1VQR1JBREVfSEVBREVSKQor
ICAgICAgICBmaWVsZHMuYXBwZW5kKF9DT05ORUNUSU9OX0hFQURFUikKKworICAgICAgICBmaWVs
ZHMuYXBwZW5kKF9mb3JtYXRfaG9zdF9oZWFkZXIoCisgICAgICAgICAgICBzZWxmLl9vcHRpb25z
LnNlcnZlcl9ob3N0LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCwKKyAg
ICAgICAgICAgIHNlbGYuX29wdGlvbnMudXNlX3RscykpCisKKyAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy52ZXJzaW9uIGlzIDg6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKF9zZWNfb3JpZ2lu
X2hlYWRlcihzZWxmLl9vcHRpb25zLm9yaWdpbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBmaWVsZHMuYXBwZW5kKF9vcmlnaW5faGVhZGVyKHNlbGYuX29wdGlvbnMub3JpZ2luKSkKKwor
ICAgICAgICBvcmlnaW5hbF9rZXkgPSBvcy51cmFuZG9tKDE2KQorICAgICAgICBrZXkgPSBiYXNl
NjQuYjY0ZW5jb2RlKG9yaWdpbmFsX2tleSkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAor
ICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5OiAlcyAoJXMpJywga2V5LCB1dGlsLmhleGlm
eShvcmlnaW5hbF9rZXkpKQorICAgICAgICBmaWVsZHMuYXBwZW5kKCdTZWMtV2ViU29ja2V0LUtl
eTogJXNcclxuJyAlIGtleSkKKworICAgICAgICBmaWVsZHMuYXBwZW5kKCdTZWMtV2ViU29ja2V0
LVZlcnNpb246ICVkXHJcbicgJSBzZWxmLl9vcHRpb25zLnZlcnNpb24pCisKKyAgICAgICAgIyBT
ZXR0aW5nIHVwIGV4dGVuc2lvbnMuCisgICAgICAgIGV4dGVuc2lvbnMgPSBbXQorCisgICAgICAg
IGRlZmxhdGVfc3RyZWFtX2FjY2VwdGVkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9u
cy51c2VfZGVmbGF0ZV9zdHJlYW06CisgICAgICAgICAgICBleHRlbnNpb25zLmFwcGVuZChfREVG
TEFURV9TVFJFQU1fRVhURU5TSU9OKQorCisgICAgICAgIGRlZmxhdGVfZnJhbWVfYWNjZXB0ZWQg
PSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnVzZV9kZWZsYXRlX2ZyYW1lOgorICAg
ICAgICAgICAgZXh0ZW5zaW9ucy5hcHBlbmQoX0RFRkxBVEVfRlJBTUVfRVhURU5TSU9OKQorCisg
ICAgICAgIGlmIGxlbihleHRlbnNpb25zKSA+IDA6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5k
KCdTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnM6ICVzXHJcbicgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAnLCAnLmpvaW4oZXh0ZW5zaW9ucykpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRl
YnVnKCdPcGVuaW5nIGhhbmRzaGFrZSByZXF1ZXN0IGhlYWRlcnM6ICVyJywgZmllbGRzKQorCisg
ICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXQuc2Vu
ZGFsbChmaWVsZCkKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoJ1xyXG4nKQorCisgICAg
ICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdTZW50IG9wZW5pbmcgaGFuZHNoYWtlIHJlcXVlc3QnKQor
CisgICAgICAgIGZpZWxkID0gJycKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGNo
ID0gX3JlY2VpdmVfYnl0ZXMoc2VsZi5fc29ja2V0LCAxKQorICAgICAgICAgICAgZmllbGQgKz0g
Y2gKKyAgICAgICAgICAgIGlmIGNoID09ICdcbic6CisgICAgICAgICAgICAgICAgYnJlYWsKKwor
ICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ09wZW5pbmcgaGFuZHNoYWtlIFJlc3BvbnNlLUxp
bmU6ICVyJywgZmllbGQpCisKKyAgICAgICAgaWYgbGVuKGZpZWxkKSA8IDcgb3Igbm90IGZpZWxk
LmVuZHN3aXRoKCdcclxuJyk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1dyb25nIHN0
YXR1cyBsaW5lOiAlcicgJSBmaWVsZCkKKyAgICAgICAgbSA9IHJlLm1hdGNoKCdbXiBdKiAoW14g
XSopIC4qJywgZmllbGQpCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnTm8gSFRUUCBzdGF0dXMgY29kZSBmb3VuZCBp
biBzdGF0dXMgbGluZTogJXInICUgZmllbGQpCisgICAgICAgIGNvZGUgPSBtLmdyb3VwKDEpCisg
ICAgICAgIGlmIG5vdCByZS5tYXRjaCgnWzAtOV1bMC05XVswLTldJywgY29kZSk6CisgICAgICAg
ICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ0hUVFAgc3RhdHVzIGNvZGUg
JXIgaXMgbm90IHRocmVlIGRpZ2l0IGluIHN0YXR1cyBsaW5lOiAlcicgJQorICAgICAgICAgICAg
ICAgIChjb2RlLCBmaWVsZCkpCisgICAgICAgIGlmIGNvZGUgIT0gJzEwMSc6CisgICAgICAgICAg
ICByYWlzZSBIdHRwU3RhdHVzRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdFeHBlY3RlZCBI
VFRQIHN0YXR1cyBjb2RlIDEwMSBidXQgZm91bmQgJXIgaW4gc3RhdHVzIGxpbmU6ICcKKyAgICAg
ICAgICAgICAgICAnJXInICUgKGNvZGUsIGZpZWxkKSwgaW50KGNvZGUpKQorICAgICAgICBmaWVs
ZHMgPSBfcmVhZF9maWVsZHMoc2VsZi5fc29ja2V0KQorICAgICAgICBjaCA9IF9yZWNlaXZlX2J5
dGVzKHNlbGYuX3NvY2tldCwgMSkKKyAgICAgICAgaWYgY2ggIT0gJ1xuJzogICMgMHgwQQorICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdFeHBlY3RlZCBMRiBidXQgZm91bmQ6ICVyJyAlIGNo
KQorCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnT3BlbmluZyBoYW5kc2hha2UgcmVzcG9u
c2UgaGVhZGVyczogJXInLCBmaWVsZHMpCisKKyAgICAgICAgIyBDaGVjayAvZmllbGRzLworICAg
ICAgICBpZiBsZW4oZmllbGRzWyd1cGdyYWRlJ10pICE9IDE6CisgICAgICAgICAgICByYWlzZSBF
eGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ011bHRpcGxlIFVwZ3JhZGUgaGVhZGVycyBmb3Vu
ZDogJXMnICUgZmllbGRzWyd1cGdyYWRlJ10pCisgICAgICAgIGlmIGxlbihmaWVsZHNbJ2Nvbm5l
Y3Rpb24nXSkgIT0gMToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAg
ICAgICAnTXVsdGlwbGUgQ29ubmVjdGlvbiBoZWFkZXJzIGZvdW5kOiAlcycgJSBmaWVsZHNbJ2Nv
bm5lY3Rpb24nXSkKKyAgICAgICAgaWYgZmllbGRzWyd1cGdyYWRlJ11bMF0gIT0gJ3dlYnNvY2tl
dCc6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1VuZXhw
ZWN0ZWQgVXBncmFkZSBoZWFkZXIgdmFsdWU6ICVzJyAlIGZpZWxkc1sndXBncmFkZSddWzBdKQor
ICAgICAgICBpZiBmaWVsZHNbJ2Nvbm5lY3Rpb24nXVswXS5sb3dlcigpICE9ICd1cGdyYWRlJzoK
KyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnVW5leHBlY3Rl
ZCBDb25uZWN0aW9uIGhlYWRlciB2YWx1ZTogJXMnICUKKyAgICAgICAgICAgICAgICBmaWVsZHNb
J2Nvbm5lY3Rpb24nXVswXSkKKworICAgICAgICBpZiBsZW4oZmllbGRzWydzZWMtd2Vic29ja2V0
LWFjY2VwdCddKSAhPSAxOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAg
ICAgICAgICdNdWx0aXBsZSBTZWMtV2ViU29ja2V0LUFjY2VwdCBoZWFkZXJzIGZvdW5kOiAlcycg
JQorICAgICAgICAgICAgICAgIGZpZWxkc1snc2VjLXdlYnNvY2tldC1hY2NlcHQnXSkKKworICAg
ICAgICBhY2NlcHQgPSBmaWVsZHNbJ3NlYy13ZWJzb2NrZXQtYWNjZXB0J11bMF0KKworICAgICAg
ICAjIFZhbGlkYXRlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlY29kZWRfYWNjZXB0ID0g
YmFzZTY0LmI2NGRlY29kZShhY2NlcHQpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6Cisg
ICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ0ls
bGVnYWwgdmFsdWUgZm9yIGhlYWRlciBTZWMtV2ViU29ja2V0LUFjY2VwdDogJyArIGFjY2VwdCkK
KworICAgICAgICBpZiBsZW4oZGVjb2RlZF9hY2NlcHQpICE9IDIwOgorICAgICAgICAgICAgcmFp
c2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdEZWNvZGVkIHZhbHVlIG9m
IFNlYy1XZWJTb2NrZXQtQWNjZXB0IGlzIG5vdCAyMC1ieXRlIGxvbmcnKQorCisgICAgICAgIHNl
bGYuX2xvZ2dlci5kZWJ1ZygnQWN0dWFsIFNlYy1XZWJTb2NrZXQtQWNjZXB0OiAlciAoJXMpJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdCwgdXRpbC5oZXhpZnkoZGVjb2RlZF9h
Y2NlcHQpKQorCisgICAgICAgIG9yaWdpbmFsX2V4cGVjdGVkX2FjY2VwdCA9IHV0aWwuc2hhMV9o
YXNoKAorICAgICAgICAgICAga2V5ICsgX1dFQlNPQ0tFVF9BQ0NFUFRfVVVJRCkuZGlnZXN0KCkK
KyAgICAgICAgZXhwZWN0ZWRfYWNjZXB0ID0gYmFzZTY0LmI2NGVuY29kZShvcmlnaW5hbF9leHBl
Y3RlZF9hY2NlcHQpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdFeHBlY3RlZCBTZWMt
V2ViU29ja2V0LUFjY2VwdDogJXIgKCVzKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHBlY3RlZF9hY2NlcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmhleGlmeShv
cmlnaW5hbF9leHBlY3RlZF9hY2NlcHQpKQorCisgICAgICAgIGlmIGFjY2VwdCAhPSBleHBlY3Rl
ZF9hY2NlcHQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAg
J0ludmFsaWQgU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyOiAlciAoZXhwZWN0ZWQpICE9ICVy
ICcKKyAgICAgICAgICAgICAgICAnKGFjdHVhbCknICUgKGFjY2VwdCwgZXhwZWN0ZWRfYWNjZXB0
KSkKKworICAgICAgICBzZXJ2ZXJfZXh0ZW5zaW9uc19oZWFkZXIgPSBmaWVsZHMuZ2V0KCdzZWMt
d2Vic29ja2V0LWV4dGVuc2lvbnMnKQorICAgICAgICBpZiAoc2VydmVyX2V4dGVuc2lvbnNfaGVh
ZGVyIGlzIE5vbmUgb3IKKyAgICAgICAgICAgIGxlbihzZXJ2ZXJfZXh0ZW5zaW9uc19oZWFkZXIp
ICE9IDEpOgorICAgICAgICAgICAgYWNjZXB0ZWRfZXh0ZW5zaW9ucyA9IFtdCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBhY2NlcHRlZF9leHRlbnNpb25zID0gc2VydmVyX2V4dGVuc2lvbnNf
aGVhZGVyWzBdLnNwbGl0KCcsJykKKyAgICAgICAgICAgICMgVE9ETyh0eW9zaGlubyk6IEZvbGxv
dyB0aGUgQUJORiBpbiB0aGUgc3BlYy4KKyAgICAgICAgICAgIGFjY2VwdGVkX2V4dGVuc2lvbnMg
PSBbcy5zdHJpcCgpIGZvciBzIGluIGFjY2VwdGVkX2V4dGVuc2lvbnNdCisKKyAgICAgICAgIyBT
Y2FuIGFjY2VwdGVkIGV4dGVuc2lvbiBsaXN0IHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFueSB1bnJl
Y29nbml6ZWQKKyAgICAgICAgIyBleHRlbnNpb25zIG9yIGV4dGVuc2lvbnMgd2UgZGlkbid0IHJl
cXVlc3QgaW4gaXQuIFRoZW4sIGZvcgorICAgICAgICAjIGV4dGVuc2lvbnMgd2UgcmVxdWVzdCwg
cGFyc2UgdGhlbSBhbmQgc3RvcmUgcGFyYW1ldGVycy4gVGhleSB3aWxsIGJlCisgICAgICAgICMg
dXNlZCBsYXRlciBieSBlYWNoIGV4dGVuc2lvbi4KKyAgICAgICAgZm9yIGV4dGVuc2lvbiBpbiBh
Y2NlcHRlZF9leHRlbnNpb25zOgorICAgICAgICAgICAgaWYgZXh0ZW5zaW9uID09ICcnOgorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBleHRlbnNpb24gPT0gX0RFRkxB
VEVfU1RSRUFNX0VYVEVOU0lPTjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnVz
ZV9kZWZsYXRlX3N0cmVhbToKKyAgICAgICAgICAgICAgICAgICAgZGVmbGF0ZV9zdHJlYW1fYWNj
ZXB0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBp
ZiBleHRlbnNpb24gPT0gX0RFRkxBVEVfRlJBTUVfRVhURU5TSU9OOgorICAgICAgICAgICAgICAg
IGlmIHNlbGYuX29wdGlvbnMudXNlX2RlZmxhdGVfZnJhbWU6CisgICAgICAgICAgICAgICAgICAg
IGRlZmxhdGVfZnJhbWVfYWNjZXB0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnUmVj
ZWl2ZWQgdW5yZWNvZ25pemVkIGV4dGVuc2lvbjogJXMnICUgZXh0ZW5zaW9uKQorCisgICAgICAg
ICMgTGV0IGFsbCBleHRlbnNpb25zIGNoZWNrIHRoZSByZXNwb25zZSBmb3IgZXh0ZW5zaW9uIHJl
cXVlc3QuCisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy51c2VfZGVmbGF0ZV9zdHJlYW0gYW5k
IG5vdCBkZWZsYXRlX3N0cmVhbV9hY2NlcHRlZDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bignJXMgZXh0ZW5zaW9uIG5vdCBhY2NlcHRlZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9ERUZMQVRFX1NUUkVBTV9FWFRFTlNJT04pCisKKyAgICAgICAgaWYgKHNlbGYuX29wdGlv
bnMudXNlX2RlZmxhdGVfZnJhbWUgYW5kCisgICAgICAgICAgICBub3QgZGVmbGF0ZV9mcmFtZV9h
Y2NlcHRlZCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJyVzIGV4dGVuc2lvbiBub3Qg
YWNjZXB0ZWQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfREVGTEFURV9GUkFNRV9F
WFRFTlNJT04pCisKKworY2xhc3MgV2ViU29ja2V0SHliaTAwSGFuZHNoYWtlKG9iamVjdCk6Cisg
ICAgIiIiT3BlbmluZyBoYW5kc2hha2UgcHJvY2Vzc29yIGZvciB0aGUgV2ViU29ja2V0IHByb3Rv
Y29sIHZlcnNpb24gSHlCaSAwMC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBv
cHRpb25zLCBkcmFmdF9maWVsZCk6CisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2Ns
YXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAg
ICAgIHNlbGYuX2RyYWZ0X2ZpZWxkID0gZHJhZnRfZmllbGQKKworICAgIGRlZiBoYW5kc2hha2Uo
c2VsZiwgc29ja2V0KToKKyAgICAgICAgIiIiSGFuZHNoYWtlIFdlYlNvY2tldC4KKworICAgICAg
ICBSYWlzZXM6CisgICAgICAgICAgICBFeGNlcHRpb246IGhhbmRzaGFrZSBmYWlsZWQuCisgICAg
ICAgICIiIgorCisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldAorCisgICAgICAgICMgNC4x
IDUuIHNlbmQgcmVxdWVzdCBsaW5lLgorICAgICAgICByZXF1ZXN0X2xpbmUgPSBfbWV0aG9kX2xp
bmUoc2VsZi5fb3B0aW9ucy5yZXNvdXJjZSkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdP
cGVuaW5nIGhhbmRzaGFrZSBSZXF1ZXN0LUxpbmU6ICVyJywgcmVxdWVzdF9saW5lKQorICAgICAg
ICBzZWxmLl9zb2NrZXQuc2VuZGFsbChyZXF1ZXN0X2xpbmUpCisgICAgICAgICMgNC4xIDYuIExl
dCAvZmllbGRzLyBiZSBhbiBlbXB0eSBsaXN0IG9mIHN0cmluZ3MuCisgICAgICAgIGZpZWxkcyA9
IFtdCisgICAgICAgICMgNC4xIDcuIEFkZCB0aGUgc3RyaW5nICJVcGdyYWRlOiBXZWJTb2NrZXQi
IHRvIC9maWVsZHMvLgorICAgICAgICBmaWVsZHMuYXBwZW5kKF9VUEdSQURFX0hFQURFUl9ISVhJ
RTc1KQorICAgICAgICAjIDQuMSA4LiBBZGQgdGhlIHN0cmluZyAiQ29ubmVjdGlvbjogVXBncmFk
ZSIgdG8gL2ZpZWxkcy8uCisgICAgICAgIGZpZWxkcy5hcHBlbmQoX0NPTk5FQ1RJT05fSEVBREVS
KQorICAgICAgICAjIDQuMSA5LTEyLiBBZGQgSG9zdDogZmllbGQgdG8gL2ZpZWxkcy8uCisgICAg
ICAgIGZpZWxkcy5hcHBlbmQoX2Zvcm1hdF9ob3N0X2hlYWRlcigKKyAgICAgICAgICAgIHNlbGYu
X29wdGlvbnMuc2VydmVyX2hvc3QsCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnNlcnZlcl9w
b3J0LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy51c2VfdGxzKSkKKyAgICAgICAgIyA0LjEg
MTMuIEFkZCBPcmlnaW46IGZpZWxkIHRvIC9maWVsZHMvLgorICAgICAgICBmaWVsZHMuYXBwZW5k
KF9vcmlnaW5faGVhZGVyKHNlbGYuX29wdGlvbnMub3JpZ2luKSkKKyAgICAgICAgIyBUT0RPOiA0
LjEgMTQgQWRkIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2w6IGZpZWxkIHRvIC9maWVsZHMvLgorICAg
ICAgICAjIFRPRE86IDQuMSAxNSBBZGQgY29va2llIGhlYWRlcnMgdG8gL2ZpZWxkcy8uCisKKyAg
ICAgICAgIyA0LjEgMTYtMjMuIEFkZCBTZWMtV2ViU29ja2V0LUtleTxuPiB0byAvZmllbGRzLy4K
KyAgICAgICAgc2VsZi5fbnVtYmVyMSwga2V5MSA9IHNlbGYuX2dlbmVyYXRlX3NlY193ZWJzb2Nr
ZXRfa2V5KCkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdOdW1iZXIxOiAlZCcsIHNlbGYu
X251bWJlcjEpCisgICAgICAgIGZpZWxkcy5hcHBlbmQoJ1NlYy1XZWJTb2NrZXQtS2V5MTogJXNc
clxuJyAlIGtleTEpCisgICAgICAgIHNlbGYuX251bWJlcjIsIGtleTIgPSBzZWxmLl9nZW5lcmF0
ZV9zZWNfd2Vic29ja2V0X2tleSgpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnTnVtYmVy
MjogJWQnLCBzZWxmLl9udW1iZXIxKQorICAgICAgICBmaWVsZHMuYXBwZW5kKCdTZWMtV2ViU29j
a2V0LUtleTI6ICVzXHJcbicgJSBrZXkyKQorCisgICAgICAgIGZpZWxkcy5hcHBlbmQoJ1NlYy1X
ZWJTb2NrZXQtRHJhZnQ6ICVzXHJcbicgJSBzZWxmLl9kcmFmdF9maWVsZCkKKworICAgICAgICAj
IDQuMSAyNC4gRm9yIGVhY2ggc3RyaW5nIGluIC9maWVsZHMvLCBpbiBhIHJhbmRvbSBvcmRlcjog
c2VuZCB0aGUKKyAgICAgICAgIyBzdHJpbmcsIGVuY29kZWQgYXMgVVRGLTgsIGZvbGxvd2VkIGJ5
IGEgVVRGLTggZW5jb2RlZCBVKzAwMEQgQ0FSUklBR0UKKyAgICAgICAgIyBSRVRVUk4gVSswMDBB
IExJTkUgRkVFRCBjaGFyYWN0ZXIgcGFpciAoQ1JMRikuCisgICAgICAgIHJhbmRvbS5zaHVmZmxl
KGZpZWxkcykKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ09wZW5pbmcgaGFuZHNoYWtl
IHJlcXVlc3QgaGVhZGVyczogJXInLCBmaWVsZHMpCisgICAgICAgIGZvciBmaWVsZCBpbiBmaWVs
ZHM6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChmaWVsZCkKKworICAgICAgICAj
IDQuMSAyNS4gc2VuZCBhIFVURi04LWVuY29kZWQgVSswMDBEIENBUlJJQUdFIFJFVFVSTiBVKzAw
MEEgTElORSBGRUVECisgICAgICAgICMgY2hhcmFjdGVyIHBhaXIgKENSTEYpLgorICAgICAgICBz
ZWxmLl9zb2NrZXQuc2VuZGFsbCgnXHJcbicpCisgICAgICAgICMgNC4xIDI2LiBsZXQgL2tleTMv
IGJlIGEgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgZWlnaHQgcmFuZG9tIGJ5dGVzIChvcgorICAgICAg
ICAjIGVxdWl2YWxlbnRseSwgYSByYW5kb20gNjQgYml0IGludGVnZXIgZW5jb2RlZCBpbiBhIGJp
Zy1lbmRpYW4gb3JkZXIpLgorICAgICAgICBzZWxmLl9rZXkzID0gc2VsZi5fZ2VuZXJhdGVfa2V5
MygpCisgICAgICAgICMgNC4xIDI3LiBzZW5kIC9rZXkzLyB0byB0aGUgc2VydmVyLgorICAgICAg
ICBzZWxmLl9zb2NrZXQuc2VuZGFsbChzZWxmLl9rZXkzKQorICAgICAgICBzZWxmLl9sb2dnZXIu
ZGVidWcoCisgICAgICAgICAgICAnS2V5MzogJXIgKCVzKScsIHNlbGYuX2tleTMsIHV0aWwuaGV4
aWZ5KHNlbGYuX2tleTMpKQorCisgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdTZW50IG9wZW5p
bmcgaGFuZHNoYWtlIHJlcXVlc3QnKQorCisgICAgICAgICMgNC4xIDI4LiBSZWFkIGJ5dGVzIGZy
b20gdGhlIHNlcnZlciB1bnRpbCBlaXRoZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgIyBjbG9z
ZXMsIG9yIGEgMHgwQSBieXRlIGlzIHJlYWQuIGxldCAvZmllbGQvIGJlIHRoZXNlIGJ5dGVzLCBp
bmNsdWRpbmcKKyAgICAgICAgIyB0aGUgMHgwQSBieXRlcy4KKyAgICAgICAgZmllbGQgPSAnJwor
ICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgY2ggPSBfcmVjZWl2ZV9ieXRlcyhzZWxm
Ll9zb2NrZXQsIDEpCisgICAgICAgICAgICBmaWVsZCArPSBjaAorICAgICAgICAgICAgaWYgY2gg
PT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHNlbGYuX2xvZ2dlci5k
ZWJ1ZygnT3BlbmluZyBoYW5kc2hha2UgUmVzcG9uc2UtTGluZTogJXInLCBmaWVsZCkKKworICAg
ICAgICAjIGlmIC9maWVsZC8gaXMgbm90IGF0IGxlYXN0IHNldmVuIGJ5dGVzIGxvbmcsIG9yIGlm
IHRoZSBsYXN0CisgICAgICAgICMgdHdvIGJ5dGVzIGFyZW4ndCAweDBEIGFuZCAweDBBIHJlc3Bl
Y3RpdmVseSwgb3IgaWYgaXQgZG9lcyBub3QKKyAgICAgICAgIyBjb250YWluIGF0IGxlYXN0IHR3
byAweDIwIGJ5dGVzLCB0aGVuIGZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uCisgICAgICAg
ICMgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgICAgICBpZiBsZW4oZmllbGQpIDwgNyBvciBu
b3QgZmllbGQuZW5kc3dpdGgoJ1xyXG4nKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbign
V3Jvbmcgc3RhdHVzIGxpbmU6ICVyJyAlIGZpZWxkKQorICAgICAgICBtID0gcmUubWF0Y2goJ1te
IF0qIChbXiBdKikgLionLCBmaWVsZCkKKyAgICAgICAgaWYgbSBpcyBOb25lOgorICAgICAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCdObyBjb2RlIGZvdW5kIGluIHN0YXR1cyBsaW5lOiAlcicgJSBm
aWVsZCkKKyAgICAgICAgIyA0LjEgMjkuIGxldCAvY29kZS8gYmUgdGhlIHN1YnN0cmluZyBvZiAv
ZmllbGQvIHRoYXQgc3RhcnRzIGZyb20gdGhlCisgICAgICAgICMgYnl0ZSBhZnRlciB0aGUgZmly
c3QgMHgyMCBieXRlLCBhbmQgZW5kcyB3aXRoIHRoZSBieXRlIGJlZm9yZSB0aGUKKyAgICAgICAg
IyBzZWNvbmQgMHgyMCBieXRlLgorICAgICAgICBjb2RlID0gbS5ncm91cCgxKQorICAgICAgICAj
IDQuMSAzMC4gaWYgL2NvZGUvIGlzIG5vdCB0aHJlZSBieXRlcyBsb25nLCBvciBpZiBhbnkgb2Yg
dGhlIGJ5dGVzIGluCisgICAgICAgICMgL2NvZGUvIGFyZSBub3QgaW4gdGhlIHJhbmdlIDB4MzAg
dG8gMHg5MCwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQKKyAgICAgICAgIyBjb25uZWN0aW9uIGFu
ZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAgICAgaWYgbm90IHJlLm1hdGNoKCdbMC05XVswLTld
WzAtOV0nLCBjb2RlKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAg
ICAgICAnSFRUUCBzdGF0dXMgY29kZSAlciBpcyBub3QgdGhyZWUgZGlnaXQgaW4gc3RhdHVzIGxp
bmU6ICVyJyAlCisgICAgICAgICAgICAgICAgKGNvZGUsIGZpZWxkKSkKKyAgICAgICAgIyA0LjEg
MzEuIGlmIC9jb2RlLywgaW50ZXJwcmV0ZWQgYXMgVVRGLTgsIGlzICIxMDEiLCB0aGVuIG1vdmUg
dG8gdGhlCisgICAgICAgICMgbmV4dCBzdGVwLgorICAgICAgICBpZiBjb2RlICE9ICcxMDEnOgor
ICAgICAgICAgICAgcmFpc2UgSHR0cFN0YXR1c0V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAn
RXhwZWN0ZWQgSFRUUCBzdGF0dXMgY29kZSAxMDEgYnV0IGZvdW5kICVyIGluIHN0YXR1cyBsaW5l
OiAnCisgICAgICAgICAgICAgICAgJyVyJyAlIChjb2RlLCBmaWVsZCksIGludChjb2RlKSkKKyAg
ICAgICAgIyA0LjEgMzItMzkuIHJlYWQgZmllbGRzIGludG8gL2ZpZWxkcy8KKyAgICAgICAgZmll
bGRzID0gX3JlYWRfZmllbGRzKHNlbGYuX3NvY2tldCkKKworICAgICAgICBzZWxmLl9sb2dnZXIu
ZGVidWcoJ09wZW5pbmcgaGFuZHNoYWtlIHJlc3BvbnNlIGhlYWRlcnM6ICVyJywgZmllbGRzKQor
CisgICAgICAgICMgNC4xIDQwLiBfRmllbGRzIHByb2Nlc3NpbmdfCisgICAgICAgICMgcmVhZCBh
IGJ5dGUgZnJvbSBzZXJ2ZXIKKyAgICAgICAgY2ggPSBfcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2Nr
ZXQsIDEpCisgICAgICAgIGlmIGNoICE9ICdcbic6ICAjIDB4MEEKKyAgICAgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbignRXhwZWN0ZWQgTEYgYnV0IGZvdW5kICVyJyAlIGNoKQorICAgICAgICAjIDQu
MSA0MS4gY2hlY2sgL2ZpZWxkcy8KKyAgICAgICAgaWYgbGVuKGZpZWxkc1sndXBncmFkZSddKSAh
PSAxOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdNdWx0
aXBsZSBVcGdyYWRlIGhlYWRlcnMgZm91bmQ6ICVzJyAlIGZpZWxkc1sndXBncmFkZSddKQorICAg
ICAgICBpZiBsZW4oZmllbGRzWydjb25uZWN0aW9uJ10pICE9IDE6CisgICAgICAgICAgICByYWlz
ZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ011bHRpcGxlIENvbm5lY3Rpb24gaGVhZGVy
cyBmb3VuZDogJXMnICUgZmllbGRzWydjb25uZWN0aW9uJ10pCisgICAgICAgIGlmIGxlbihmaWVs
ZHNbJ3NlYy13ZWJzb2NrZXQtb3JpZ2luJ10pICE9IDE6CisgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oCisgICAgICAgICAgICAgICAgJ011bHRpcGxlIFNlYy1XZWJTb2NrZXQtT3JpZ2luIGhl
YWRlcnMgZm91bmQ6ICVzJyAlCisgICAgICAgICAgICAgICAgZmllbGRzWydzZWMtc2Vic29ja2V0
LW9yaWdpbiddKQorICAgICAgICBpZiBsZW4oZmllbGRzWydzZWMtd2Vic29ja2V0LWxvY2F0aW9u
J10pICE9IDE6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAg
J011bHRpcGxlIFNlYy1XZWJTb2NrZXQtTG9jYXRpb24gaGVhZGVycyBmb3VuZDogJXMnICUKKyAg
ICAgICAgICAgICAgICBmaWVsZHNbJ3NlYy1zZWJzb2NrZXQtbG9jYXRpb24nXSkKKyAgICAgICAg
IyBUT0RPKHVrYWkpOiBwcm90b2NvbAorICAgICAgICAjIGlmIHRoZSBlbnRyeSdzIG5hbWUgaXMg
InVwZ3JhZGUiCisgICAgICAgICMgIGlmIHRoZSB2YWx1ZSBpcyBub3QgZXhhY3RseSBlcXVhbCB0
byB0aGUgc3RyaW5nICJXZWJTb2NrZXQiLAorICAgICAgICAjICB0aGVuIGZhaWwgdGhlIFdlYlNv
Y2tldCBjb25uZWN0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAgICAgaWYgZmllbGRz
Wyd1cGdyYWRlJ11bMF0gIT0gJ1dlYlNvY2tldCc6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oCisgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgVXBncmFkZSBoZWFkZXIgdmFsdWU6ICVz
JyAlIGZpZWxkc1sndXBncmFkZSddWzBdKQorICAgICAgICAjIGlmIHRoZSBlbnRyeSdzIG5hbWUg
aXMgImNvbm5lY3Rpb24iCisgICAgICAgICMgIGlmIHRoZSB2YWx1ZSwgY29udmVydGVkIHRvIEFT
Q0lJIGxvd2VyY2FzZSwgaXMgbm90IGV4YWN0bHkgZXF1YWwKKyAgICAgICAgIyAgdG8gdGhlIHN0
cmluZyAidXBncmFkZSIsIHRoZW4gZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gYW5kCisg
ICAgICAgICMgIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgICAgICBpZiBmaWVsZHNbJ2Nvbm5lY3Rp
b24nXVswXS5sb3dlcigpICE9ICd1cGdyYWRlJzoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bigKKyAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBDb25uZWN0aW9uIGhlYWRlciB2YWx1ZTog
JXMnICUKKyAgICAgICAgICAgICAgICBmaWVsZHNbJ2Nvbm5lY3Rpb24nXVswXSkKKyAgICAgICAg
IyBUT0RPKHVrYWkpOiBjaGVjayBvcmlnaW4sIGxvY2F0aW9uLCBjb29raWUsIC4uCisKKyAgICAg
ICAgIyA0LjEgNDIuIGxldCAvY2hhbGxlbmdlLyBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiAvbnVt
YmVyXzEvLAorICAgICAgICAjIGV4cHJlc3NlZCBhcyBhIGJpZyBlbmRpYW4gMzIgYml0IGludGVn
ZXIsIC9udW1iZXJfMi8sIGV4cHJlc3NlZAorICAgICAgICAjIGFzIGJpZyBlbmRpYW4gMzIgYml0
IGludGVnZXIsIGFuZCB0aGUgZWlnaHQgYnl0ZXMgb2YgL2tleV8zLyBpbiB0aGUKKyAgICAgICAg
IyBvcmRlciB0aGV5IHdlcmUgc2VudCBvbiB0aGUgd2lyZS4KKyAgICAgICAgY2hhbGxlbmdlID0g
c3RydWN0LnBhY2soJyFJJywgc2VsZi5fbnVtYmVyMSkKKyAgICAgICAgY2hhbGxlbmdlICs9IHN0
cnVjdC5wYWNrKCchSScsIHNlbGYuX251bWJlcjIpCisgICAgICAgIGNoYWxsZW5nZSArPSBzZWxm
Ll9rZXkzCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ0NoYWxs
ZW5nZTogJXIgKCVzKScsIGNoYWxsZW5nZSwgdXRpbC5oZXhpZnkoY2hhbGxlbmdlKSkKKworICAg
ICAgICAjIDQuMSA0My4gbGV0IC9leHBlY3RlZC8gYmUgdGhlIE1ENSBmaW5nZXJwcmludCBvZiAv
Y2hhbGxlbmdlLyBhcyBhCisgICAgICAgICMgYmlnLWVuZGlhbiAxMjggYml0IHN0cmluZy4KKyAg
ICAgICAgZXhwZWN0ZWQgPSB1dGlsLm1kNV9oYXNoKGNoYWxsZW5nZSkuZGlnZXN0KCkKKyAgICAg
ICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ0V4cGVjdGVkIGNoYWxsZW5nZSBy
ZXNwb25zZTogJXIgKCVzKScsCisgICAgICAgICAgICBleHBlY3RlZCwgdXRpbC5oZXhpZnkoZXhw
ZWN0ZWQpKQorCisgICAgICAgICMgNC4xIDQ0LiByZWFkIHNpeHRlZW4gYnl0ZXMgZnJvbSB0aGUg
c2VydmVyLgorICAgICAgICAjIGxldCAvcmVwbHkvIGJlIHRob3NlIGJ5dGVzLgorICAgICAgICBy
ZXBseSA9IF9yZWNlaXZlX2J5dGVzKHNlbGYuX3NvY2tldCwgMTYpCisgICAgICAgIHNlbGYuX2xv
Z2dlci5kZWJ1ZygKKyAgICAgICAgICAgICdBY3R1YWwgY2hhbGxlbmdlIHJlc3BvbnNlOiAlciAo
JXMpJywgcmVwbHksIHV0aWwuaGV4aWZ5KHJlcGx5KSkKKworICAgICAgICAjIDQuMSA0NS4gaWYg
L3JlcGx5LyBkb2VzIG5vdCBleGFjdGx5IGVxdWFsIC9leHBlY3RlZC8sIHRoZW4gZmFpbAorICAg
ICAgICAjIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisg
ICAgICAgIGlmIGV4cGVjdGVkICE9IHJlcGx5OgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KAorICAgICAgICAgICAgICAgICdCYWQgY2hhbGxlbmdlIHJlc3BvbnNlOiAlciAoZXhwZWN0ZWQp
ICE9ICVyIChhY3R1YWwpJyAlCisgICAgICAgICAgICAgICAgKGV4cGVjdGVkLCByZXBseSkpCisg
ICAgICAgICMgNC4xIDQ2LiBUaGUgKldlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVk
Ki4KKworICAgIGRlZiBfZ2VuZXJhdGVfc2VjX3dlYnNvY2tldF9rZXkoc2VsZik6CisgICAgICAg
ICMgNC4xIDE2LiBsZXQgL3NwYWNlc19uLyBiZSBhIHJhbmRvbSBpbnRlZ2VyIGZyb20gMSB0byAx
MiBpbmNsdXNpdmUuCisgICAgICAgIHNwYWNlcyA9IHJhbmRvbS5yYW5kaW50KDEsIDEyKQorICAg
ICAgICAjIDQuMSAxNy4gbGV0IC9tYXhfbi8gYmUgdGhlIGxhcmdlc3QgaW50ZWdlciBub3QgZ3Jl
YXRlciB0aGFuCisgICAgICAgICMgIDQsMjk0LDk2NywyOTUgZGl2aWRlZCBieSAvc3BhY2VzX24v
LgorICAgICAgICBtYXhudW0gPSA0Mjk0OTY3Mjk1IC8gc3BhY2VzCisgICAgICAgICMgNC4xIDE4
LiBsZXQgL251bWJlcl9uLyBiZSBhIHJhbmRvbSBpbnRlZ2VyIGZyb20gMCB0byAvbWF4X24vCisg
ICAgICAgICMgaW5jbHVzaXZlLgorICAgICAgICBudW1iZXIgPSByYW5kb20ucmFuZGludCgwLCBt
YXhudW0pCisgICAgICAgICMgNC4xIDE5LiBsZXQgL3Byb2R1Y3Rfbi8gYmUgdGhlIHJlc3VsdCBv
ZiBtdWx0aXBseWluZyAvbnVtYmVyX24vIGFuZAorICAgICAgICAjIC9zcGFjZXNfbi8gdG9nZXRo
ZXIuCisgICAgICAgIHByb2R1Y3QgPSBudW1iZXIgKiBzcGFjZXMKKyAgICAgICAgIyA0LjEgMjAu
IGxldCAva2V5X24vIGJlIGEgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgL3Byb2R1Y3Rfbi8sIGV4cHJl
c3NlZAorICAgICAgICAjIGluIGJhc2UgdGVuIHVzaW5nIHRoZSBudW1lcmFscyBpbiB0aGUgcmFu
Z2UgVSswMDMwIERJR0lUIFpFUk8gKDApIHRvCisgICAgICAgICMgVSswMDM5IERJR0lUIE5JTkUg
KDkpLgorICAgICAgICBrZXkgPSBzdHIocHJvZHVjdCkKKyAgICAgICAgIyA0LjEgMjEuIGluc2Vy
dCBiZXR3ZWVuIG9uZSBhbmQgdHdlbHZlIHJhbmRvbSBjaGFyYWN0ZXJzIGZyb20gdGhlCisgICAg
ICAgICMgcmFuZ2UgVSswMDIxIHRvIFUrMDAyRiBhbmQgVSswMDNBIHRvIFUrMDA3RSBpbnRvIC9r
ZXlfbi8gYXQgcmFuZG9tCisgICAgICAgICMgcG9zaXRpb25zLgorICAgICAgICBhdmFpbGFibGVf
Y2hhcnMgPSByYW5nZSgweDIxLCAweDJmICsgMSkgKyByYW5nZSgweDNhLCAweDdlICsgMSkKKyAg
ICAgICAgbiA9IHJhbmRvbS5yYW5kaW50KDEsIDEyKQorICAgICAgICBmb3IgXyBpbiB4cmFuZ2Uo
bik6CisgICAgICAgICAgICBjaCA9IHJhbmRvbS5jaG9pY2UoYXZhaWxhYmxlX2NoYXJzKQorICAg
ICAgICAgICAgcG9zID0gcmFuZG9tLnJhbmRpbnQoMCwgbGVuKGtleSkpCisgICAgICAgICAgICBr
ZXkgPSBrZXlbMDpwb3NdICsgY2hyKGNoKSArIGtleVtwb3M6XQorICAgICAgICAjIDQuMSAyMi4g
aW5zZXJ0IC9zcGFjZXNfbi8gVSswMDIwIFNQQUNFIGNoYXJhY3RlcnMgaW50byAva2V5X24vIGF0
CisgICAgICAgICMgcmFuZG9tIHBvc2l0aW9ucyBvdGhlciB0aGFuIHN0YXJ0IG9yIGVuZCBvZiB0
aGUgc3RyaW5nLgorICAgICAgICBmb3IgXyBpbiB4cmFuZ2Uoc3BhY2VzKToKKyAgICAgICAgICAg
IHBvcyA9IHJhbmRvbS5yYW5kaW50KDEsIGxlbihrZXkpIC0gMSkKKyAgICAgICAgICAgIGtleSA9
IGtleVswOnBvc10gKyAnICcgKyBrZXlbcG9zOl0KKyAgICAgICAgcmV0dXJuIG51bWJlciwga2V5
CisKKyAgICBkZWYgX2dlbmVyYXRlX2tleTMoc2VsZik6CisgICAgICAgICMgNC4xIDI2LiBsZXQg
L2tleTMvIGJlIGEgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgZWlnaHQgcmFuZG9tIGJ5dGVzIChvcgor
ICAgICAgICAjIGVxdWl2YWxlbnRseSwgYSByYW5kb20gNjQgYml0IGludGVnZXIgZW5jb2RlZCBp
biBhIGJpZy1lbmRpYW4gb3JkZXIpLgorICAgICAgICByZXR1cm4gJycuam9pbihbY2hyKHJhbmRv
bS5yYW5kaW50KDAsIDI1NSkpIGZvciBfIGluIHhyYW5nZSg4KV0pCisKKworY2xhc3MgV2ViU29j
a2V0SGl4aWU3NUhhbmRzaGFrZShvYmplY3QpOgorICAgICIiIldlYlNvY2tldCBoYW5kc2hha2Ug
cHJvY2Vzc29yIGZvciBJRVRGIEhpeGllIDc1LiIiIgorCisgICAgX0VYUEVDVEVEX1JFU1BPTlNF
ID0gKAorICAgICAgICAnSFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtl
XHJcbicgKworICAgICAgICBfVVBHUkFERV9IRUFERVJfSElYSUU3NSArCisgICAgICAgIF9DT05O
RUNUSU9OX0hFQURFUikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zKToKKyAgICAg
ICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCisKKyAgICAgICAg
c2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKworICAgIGRlZiBfc2tpcF9oZWFkZXJzKHNlbGYpOgor
ICAgICAgICB0ZXJtaW5hdG9yID0gJ1xyXG5cclxuJworICAgICAgICBwb3MgPSAwCisgICAgICAg
IHdoaWxlIHBvcyA8IGxlbih0ZXJtaW5hdG9yKToKKyAgICAgICAgICAgIHJlY2VpdmVkID0gX3Jl
Y2VpdmVfYnl0ZXMoc2VsZi5fc29ja2V0LCAxKQorICAgICAgICAgICAgaWYgcmVjZWl2ZWQgPT0g
dGVybWluYXRvcltwb3NdOgorICAgICAgICAgICAgICAgIHBvcyArPSAxCisgICAgICAgICAgICBl
bGlmIHJlY2VpdmVkID09IHRlcm1pbmF0b3JbMF06CisgICAgICAgICAgICAgICAgcG9zID0gMQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwb3MgPSAwCisKKyAgICBkZWYgaGFu
ZHNoYWtlKHNlbGYsIHNvY2tldCk6CisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldAorCisg
ICAgICAgIHJlcXVlc3RfbGluZSA9IF9tZXRob2RfbGluZShzZWxmLl9vcHRpb25zLnJlc291cmNl
KQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ09wZW5pbmcgaGFuZHNoYWtlIFJlcXVlc3Qt
TGluZTogJXInLCByZXF1ZXN0X2xpbmUpCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kYWxsKHJl
cXVlc3RfbGluZSkKKworICAgICAgICBoZWFkZXJzID0gX1VQR1JBREVfSEVBREVSX0hJWElFNzUg
KyBfQ09OTkVDVElPTl9IRUFERVIKKyAgICAgICAgaGVhZGVycyArPSBfZm9ybWF0X2hvc3RfaGVh
ZGVyKAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfaG9zdCwKKyAgICAgICAgICAg
IHNlbGYuX29wdGlvbnMuc2VydmVyX3BvcnQsCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnVz
ZV90bHMpCisgICAgICAgIGhlYWRlcnMgKz0gX29yaWdpbl9oZWFkZXIoc2VsZi5fb3B0aW9ucy5v
cmlnaW4pCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnT3BlbmluZyBoYW5kc2hha2UgcmVx
dWVzdCBoZWFkZXJzOiAlcicsIGhlYWRlcnMpCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kYWxs
KGhlYWRlcnMpCisKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoJ1xyXG4nKQorCisgICAg
ICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdTZW50IG9wZW5pbmcgaGFuZHNoYWtlIHJlcXVlc3QnKQor
CisgICAgICAgIGZvciBleHBlY3RlZF9jaGFyIGluIFdlYlNvY2tldEhpeGllNzVIYW5kc2hha2Uu
X0VYUEVDVEVEX1JFU1BPTlNFOgorICAgICAgICAgICAgcmVjZWl2ZWQgPSBfcmVjZWl2ZV9ieXRl
cyhzZWxmLl9zb2NrZXQsIDEpCisgICAgICAgICAgICBpZiBleHBlY3RlZF9jaGFyICE9IHJlY2Vp
dmVkOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSGFuZHNoYWtlIGZhaWx1cmUn
KQorICAgICAgICAjIFdlIGN1dCBjb3JuZXJzIGFuZCBza2lwIG90aGVyIGhlYWRlcnMuCisgICAg
ICAgIHNlbGYuX3NraXBfaGVhZGVycygpCisKKworY2xhc3MgV2ViU29ja2V0U3RyZWFtKG9iamVj
dCk6CisgICAgIiIiRnJhbWUgcHJvY2Vzc29yIGZvciB0aGUgV2ViU29ja2V0IHByb3RvY29sIChS
RkMgNjQ1NSkuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc29ja2V0LCBoYW5kc2hha2Up
OgorICAgICAgICBzZWxmLl9oYW5kc2hha2UgPSBoYW5kc2hha2UKKyAgICAgICAgaWYgc2VsZi5f
aGFuZHNoYWtlLl9vcHRpb25zLnVzZV9kZWZsYXRlX3N0cmVhbToKKyAgICAgICAgICAgIHNlbGYu
X3NvY2tldCA9IHV0aWwuRGVmbGF0ZVNvY2tldChzb2NrZXQpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLl9zb2NrZXQgPSBzb2NrZXQKKworICAgICAgICAjIEZpbHRlcnMgYXBwbGll
ZCB0byBhcHBsaWNhdGlvbiBkYXRhIHBhcnQgb2YgZGF0YSBmcmFtZXMuCisgICAgICAgIHNlbGYu
X291dGdvaW5nX2ZyYW1lX2ZpbHRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5faW5jb21pbmdfZnJh
bWVfZmlsdGVyID0gTm9uZQorCisgICAgICAgIGlmIHNlbGYuX2hhbmRzaGFrZS5fb3B0aW9ucy51
c2VfZGVmbGF0ZV9mcmFtZToKKyAgICAgICAgICAgIHNlbGYuX291dGdvaW5nX2ZyYW1lX2ZpbHRl
ciA9ICgKKyAgICAgICAgICAgICAgICB1dGlsLl9SRkMxOTc5RGVmbGF0ZXIoTm9uZSwgRmFsc2Up
KQorICAgICAgICAgICAgc2VsZi5faW5jb21pbmdfZnJhbWVfZmlsdGVyID0gdXRpbC5fUkZDMTk3
OUluZmxhdGVyKCkKKworICAgICAgICBzZWxmLl9mcmFnbWVudGVkID0gRmFsc2UKKworICAgIGRl
ZiBfbWFza19oeWJpKHNlbGYsIHMpOgorICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBvcy51cmFu
ZG9tIGRvZXMgb3Blbi9yZWFkL2Nsb3NlIGZvciBldmVyeSBjYWxsLiBJZgorICAgICAgICAjIHBl
cmZvcm1hbmNlIG1hdHRlcnMsIGNoYW5nZSB0aGlzIHRvIHNvbWUgbGlicmFyeSBjYWxsIHRoYXQg
Z2VuZXJhdGVzCisgICAgICAgICMgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHBzZXVkbyByYW5k
b20gbnVtYmVyIHNlcXVlbmNlLgorICAgICAgICBtYXNraW5nX25vbmNlID0gb3MudXJhbmRvbSg0
KQorICAgICAgICByZXN1bHQgPSBbbWFza2luZ19ub25jZV0KKyAgICAgICAgY291bnQgPSAwCisg
ICAgICAgIGZvciBjIGluIHM6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNocihvcmQoYykg
XiBvcmQobWFza2luZ19ub25jZVtjb3VudF0pKSkKKyAgICAgICAgICAgIGNvdW50ID0gKGNvdW50
ICsgMSkgJSBsZW4obWFza2luZ19ub25jZSkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4ocmVzdWx0
KQorCisgICAgZGVmIHNlbmRfZnJhbWVfb2ZfYXJiaXRyYXJ5X2J5dGVzKHNlbGYsIGhlYWRlciwg
Ym9keSk6CisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kYWxsKGhlYWRlciArIHNlbGYuX21hc2tf
aHliaShib2R5KSkKKworICAgIGRlZiBzZW5kX2RhdGEoc2VsZiwgcGF5bG9hZCwgZnJhbWVfdHlw
ZSwgZW5kPVRydWUsIG1hc2s9VHJ1ZSk6CisgICAgICAgIGlmIHNlbGYuX291dGdvaW5nX2ZyYW1l
X2ZpbHRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBheWxvYWQgPSBzZWxmLl9vdXRnb2lu
Z19mcmFtZV9maWx0ZXIuZmlsdGVyKHBheWxvYWQpCisKKyAgICAgICAgaWYgc2VsZi5fZnJhZ21l
bnRlZDoKKyAgICAgICAgICAgIG9wY29kZSA9IF9PUENPREVfQ09OVElOVUFUSU9OCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBvcGNvZGUgPSBmcmFtZV90eXBlCisKKyAgICAgICAgaWYgZW5k
OgorICAgICAgICAgICAgc2VsZi5fZnJhZ21lbnRlZCA9IEZhbHNlCisgICAgICAgICAgICBmaW4g
PSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9mcmFnbWVudGVkID0gVHJ1ZQor
ICAgICAgICAgICAgZmluID0gMAorCisgICAgICAgIHJzdjEgPSAwCisgICAgICAgIGlmIHNlbGYu
X2hhbmRzaGFrZS5fb3B0aW9ucy51c2VfZGVmbGF0ZV9mcmFtZToKKyAgICAgICAgICAgIHJzdjEg
PSAxCisKKyAgICAgICAgaWYgbWFzazoKKyAgICAgICAgICAgIG1hc2tfYml0ID0gMSA8PCA3Cisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrX2JpdCA9IDAKKworICAgICAgICBoZWFkZXIg
PSBjaHIoZmluIDw8IDcgfCByc3YxIDw8IDYgfCBvcGNvZGUpCisgICAgICAgIHBheWxvYWRfbGVu
Z3RoID0gbGVuKHBheWxvYWQpCisgICAgICAgIGlmIHBheWxvYWRfbGVuZ3RoIDw9IDEyNToKKyAg
ICAgICAgICAgIGhlYWRlciArPSBjaHIobWFza19iaXQgfCBwYXlsb2FkX2xlbmd0aCkKKyAgICAg
ICAgZWxpZiBwYXlsb2FkX2xlbmd0aCA8IDEgPDwgMTY6CisgICAgICAgICAgICBoZWFkZXIgKz0g
Y2hyKG1hc2tfYml0IHwgMTI2KSArIHN0cnVjdC5wYWNrKCchSCcsIHBheWxvYWRfbGVuZ3RoKQor
ICAgICAgICBlbGlmIHBheWxvYWRfbGVuZ3RoIDwgMSA8PCA2MzoKKyAgICAgICAgICAgIGhlYWRl
ciArPSBjaHIobWFza19iaXQgfCAxMjcpICsgc3RydWN0LnBhY2soJyFRJywgcGF5bG9hZF9sZW5n
dGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RvbyBsb25n
IHBheWxvYWQgKCVkIGJ5dGUpJyAlIHBheWxvYWRfbGVuZ3RoKQorICAgICAgICBpZiBtYXNrOgor
ICAgICAgICAgICAgcGF5bG9hZCA9IHNlbGYuX21hc2tfaHliaShwYXlsb2FkKQorICAgICAgICBz
ZWxmLl9zb2NrZXQuc2VuZGFsbChoZWFkZXIgKyBwYXlsb2FkKQorCisgICAgZGVmIHNlbmRfYmlu
YXJ5KHNlbGYsIHBheWxvYWQsIGVuZD1UcnVlLCBtYXNrPVRydWUpOgorICAgICAgICBzZWxmLnNl
bmRfZGF0YShwYXlsb2FkLCBfT1BDT0RFX0JJTkFSWSwgZW5kLCBtYXNrKQorCisgICAgZGVmIHNl
bmRfdGV4dChzZWxmLCBwYXlsb2FkLCBlbmQ9VHJ1ZSwgbWFzaz1UcnVlKToKKyAgICAgICAgc2Vs
Zi5zZW5kX2RhdGEocGF5bG9hZC5lbmNvZGUoJ3V0Zi04JyksIF9PUENPREVfVEVYVCwgZW5kLCBt
YXNrKQorCisgICAgZGVmIF9hc3NlcnRfcmVjZWl2ZV9kYXRhKHNlbGYsIHBheWxvYWQsIG9wY29k
ZSwgZmluLCByc3YxLCByc3YyLCByc3YzKToKKyAgICAgICAgcmVjZWl2ZWQgPSBfcmVjZWl2ZV9i
eXRlcyhzZWxmLl9zb2NrZXQsIDIpCisKKyAgICAgICAgZmlyc3RfYnl0ZSA9IG9yZChyZWNlaXZl
ZFswXSkKKyAgICAgICAgYWN0dWFsX2ZpbiA9IGZpcnN0X2J5dGUgPj4gNyAmIDEKKyAgICAgICAg
YWN0dWFsX3JzdjEgPSBmaXJzdF9ieXRlID4+IDYgJiAxCisgICAgICAgIGFjdHVhbF9yc3YyID0g
Zmlyc3RfYnl0ZSA+PiA1ICYgMQorICAgICAgICBhY3R1YWxfcnN2MyA9IGZpcnN0X2J5dGUgPj4g
NCAmIDEKKyAgICAgICAgYWN0dWFsX29wY29kZSA9IGZpcnN0X2J5dGUgJiAweGYKKworICAgICAg
ICBpZiBhY3R1YWxfb3Bjb2RlICE9IG9wY29kZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bigKKyAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBvcGNvZGU6ICVkIChleHBlY3RlZCkgdnMg
JWQgKGFjdHVhbCknICUKKyAgICAgICAgICAgICAgICAob3Bjb2RlLCBhY3R1YWxfb3Bjb2RlKSkK
KworICAgICAgICBpZiBhY3R1YWxfZmluICE9IGZpbjoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigKKyAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBmaW46ICVkIChleHBlY3RlZCkgdnMg
JWQgKGFjdHVhbCknICUKKyAgICAgICAgICAgICAgICAoZmluLCBhY3R1YWxfZmluKSkKKworICAg
ICAgICBzZWNvbmRfYnl0ZSA9IG9yZChyZWNlaXZlZFsxXSkKKyAgICAgICAgbWFzayA9IHNlY29u
ZF9ieXRlID4+IDcgJiAxCisgICAgICAgIHBheWxvYWRfbGVuZ3RoID0gc2Vjb25kX2J5dGUgJiAw
eDdmCisKKyAgICAgICAgaWYgcnN2MSBpcyBOb25lOgorICAgICAgICAgICAgcnN2MSA9IDAKKyAg
ICAgICAgICAgIGlmIHNlbGYuX2hhbmRzaGFrZS5fb3B0aW9ucy51c2VfZGVmbGF0ZV9mcmFtZToK
KyAgICAgICAgICAgICAgICByc3YxID0gMQorCisgICAgICAgIGlmIHJzdjIgaXMgTm9uZToKKyAg
ICAgICAgICAgIHJzdjIgPSAwCisKKyAgICAgICAgaWYgcnN2MyBpcyBOb25lOgorICAgICAgICAg
ICAgcnN2MyA9IDAKKworICAgICAgICBpZiBhY3R1YWxfcnN2MSAhPSByc3YxOgorICAgICAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIHJzdjE6ICVy
IChleHBlY3RlZCkgdnMgJXIgKGFjdHVhbCknICUKKyAgICAgICAgICAgICAgICAocnN2MSwgYWN0
dWFsX3JzdjEpKQorCisgICAgICAgIGlmIGFjdHVhbF9yc3YyICE9IHJzdjI6CisgICAgICAgICAg
ICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgcnN2MjogJXIg
KGV4cGVjdGVkKSB2cyAlciAoYWN0dWFsKScgJQorICAgICAgICAgICAgICAgIChyc3YyLCBhY3R1
YWxfcnN2MikpCisKKyAgICAgICAgaWYgYWN0dWFsX3JzdjMgIT0gcnN2MzoKKyAgICAgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCByc3YzOiAlciAo
ZXhwZWN0ZWQpIHZzICVyIChhY3R1YWwpJyAlCisgICAgICAgICAgICAgICAgKHJzdjMsIGFjdHVh
bF9yc3YzKSkKKworICAgICAgICBpZiBtYXNrICE9IDA6CisgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oCisgICAgICAgICAgICAgICAgJ01hc2sgYml0IG11c3QgYmUgMCBmb3IgZnJhbWVzIGNv
bWluZyBmcm9tIHNlcnZlcicpCisKKyAgICAgICAgaWYgcGF5bG9hZF9sZW5ndGggPT0gMTI3Ogor
ICAgICAgICAgICAgZXh0ZW5kZWRfcGF5bG9hZF9sZW5ndGggPSBfcmVjZWl2ZV9ieXRlcyhzZWxm
Ll9zb2NrZXQsIDgpCisgICAgICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IHN0cnVjdC51bnBhY2so
CisgICAgICAgICAgICAgICAgJyFRJywgZXh0ZW5kZWRfcGF5bG9hZF9sZW5ndGgpWzBdCisgICAg
ICAgICAgICBpZiBwYXlsb2FkX2xlbmd0aCA+IDB4N0ZGRkZGRkZGRkZGRkZGRjoKKyAgICAgICAg
ICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0V4dGVuZGVkIHBheWxvYWQgbGVuZ3RoID49IDJeNjMn
KQorICAgICAgICBlbGlmIHBheWxvYWRfbGVuZ3RoID09IDEyNjoKKyAgICAgICAgICAgIGV4dGVu
ZGVkX3BheWxvYWRfbGVuZ3RoID0gX3JlY2VpdmVfYnl0ZXMoc2VsZi5fc29ja2V0LCAyKQorICAg
ICAgICAgICAgcGF5bG9hZF9sZW5ndGggPSBzdHJ1Y3QudW5wYWNrKAorICAgICAgICAgICAgICAg
ICchSCcsIGV4dGVuZGVkX3BheWxvYWRfbGVuZ3RoKVswXQorCisgICAgICAgIHJlY2VpdmVkID0g
X3JlY2VpdmVfYnl0ZXMoc2VsZi5fc29ja2V0LCBwYXlsb2FkX2xlbmd0aCkKKworICAgICAgICBp
ZiBzZWxmLl9pbmNvbWluZ19mcmFtZV9maWx0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBy
ZWNlaXZlZCA9IHNlbGYuX2luY29taW5nX2ZyYW1lX2ZpbHRlci5maWx0ZXIocmVjZWl2ZWQpCisK
KyAgICAgICAgaWYgbGVuKHJlY2VpdmVkKSAhPSBsZW4ocGF5bG9hZCk6CisgICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgcGF5bG9hZCBsZW5n
dGg6ICVkIChleHBlY3RlZCkgdnMgJWQgKGFjdHVhbCknICUKKyAgICAgICAgICAgICAgICAobGVu
KHBheWxvYWQpLCBsZW4ocmVjZWl2ZWQpKSkKKworICAgICAgICBpZiBwYXlsb2FkICE9IHJlY2Vp
dmVkOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdVbmV4
cGVjdGVkIHBheWxvYWQ6ICVyIChleHBlY3RlZCkgdnMgJXIgKGFjdHVhbCknICUKKyAgICAgICAg
ICAgICAgICAocGF5bG9hZCwgcmVjZWl2ZWQpKQorCisgICAgZGVmIGFzc2VydF9yZWNlaXZlX2Jp
bmFyeShzZWxmLCBwYXlsb2FkLCBvcGNvZGU9X09QQ09ERV9CSU5BUlksIGZpbj0xLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcnN2MT1Ob25lLCByc3YyPU5vbmUsIHJzdjM9Tm9uZSk6
CisgICAgICAgIHNlbGYuX2Fzc2VydF9yZWNlaXZlX2RhdGEocGF5bG9hZCwgb3Bjb2RlLCBmaW4s
IHJzdjEsIHJzdjIsIHJzdjMpCisKKyAgICBkZWYgYXNzZXJ0X3JlY2VpdmVfdGV4dChzZWxmLCBw
YXlsb2FkLCBvcGNvZGU9X09QQ09ERV9URVhULCBmaW49MSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByc3YxPU5vbmUsIHJzdjI9Tm9uZSwgcnN2Mz1Ob25lKToKKyAgICAgICAgc2VsZi5f
YXNzZXJ0X3JlY2VpdmVfZGF0YShwYXlsb2FkLmVuY29kZSgndXRmLTgnKSwgb3Bjb2RlLCBmaW4s
IHJzdjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN2MiwgcnN2MykKKwor
ICAgIGRlZiBfYnVpbGRfY2xvc2VfZnJhbWUoc2VsZiwgY29kZSwgcmVhc29uLCBtYXNrKToKKyAg
ICAgICAgZnJhbWUgPSBjaHIoMSA8PCA3IHwgX09QQ09ERV9DTE9TRSkKKworICAgICAgICBpZiBj
b2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYm9keSA9IHN0cnVjdC5wYWNrKCchSCcsIGNv
ZGUpICsgcmVhc29uLmVuY29kZSgndXRmLTgnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
Ym9keSA9ICcnCisgICAgICAgIGlmIG1hc2s6CisgICAgICAgICAgICBmcmFtZSArPSBjaHIoMSA8
PCA3IHwgbGVuKGJvZHkpKSArIHNlbGYuX21hc2tfaHliaShib2R5KQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgZnJhbWUgKz0gY2hyKGxlbihib2R5KSkgKyBib2R5CisgICAgICAgIHJldHVy
biBmcmFtZQorCisgICAgZGVmIHNlbmRfY2xvc2Uoc2VsZiwgY29kZSwgcmVhc29uKToKKyAgICAg
ICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoCisgICAgICAgICAgICBzZWxmLl9idWlsZF9jbG9zZV9m
cmFtZShjb2RlLCByZWFzb24sIFRydWUpKQorCisgICAgZGVmIGFzc2VydF9yZWNlaXZlX2Nsb3Nl
KHNlbGYsIGNvZGUsIHJlYXNvbik6CisgICAgICAgIGV4cGVjdGVkX2ZyYW1lID0gc2VsZi5fYnVp
bGRfY2xvc2VfZnJhbWUoY29kZSwgcmVhc29uLCBGYWxzZSkKKyAgICAgICAgYWN0dWFsX2ZyYW1l
ID0gX3JlY2VpdmVfYnl0ZXMoc2VsZi5fc29ja2V0LCBsZW4oZXhwZWN0ZWRfZnJhbWUpKQorICAg
ICAgICBpZiBhY3R1YWxfZnJhbWUgIT0gZXhwZWN0ZWRfZnJhbWU6CisgICAgICAgICAgICByYWlz
ZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgY2xvc2UgZnJhbWU6ICVy
IChleHBlY3RlZCkgdnMgJXIgKGFjdHVhbCknICUKKyAgICAgICAgICAgICAgICAoZXhwZWN0ZWRf
ZnJhbWUsIGFjdHVhbF9mcmFtZSkpCisKKworY2xhc3MgV2ViU29ja2V0U3RyZWFtSGl4aWU3NShv
YmplY3QpOgorICAgICIiIkZyYW1lIHByb2Nlc3NvciBmb3IgdGhlIFdlYlNvY2tldCBwcm90b2Nv
bCB2ZXJzaW9uIEhpeGllIDc1IGFuZCBIeUJpIDAwLgorICAgICIiIgorCisgICAgX0NMT1NFX0ZS
QU1FID0gJ1x4ZmZceDAwJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2tldCwgdW51c2Vk
X2hhbmRzaGFrZSk6CisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldAorCisgICAgZGVmIHNl
bmRfZnJhbWVfb2ZfYXJiaXRyYXJ5X2J5dGVzKHNlbGYsIGhlYWRlciwgYm9keSk6CisgICAgICAg
IHNlbGYuX3NvY2tldC5zZW5kYWxsKGhlYWRlciArIGJvZHkpCisKKyAgICBkZWYgc2VuZF9kYXRh
KHNlbGYsIHBheWxvYWQsIHVudXNlZF9mcmFtZV90eXBlbSwgdW51c2VkX2VuZCwgdW51c2VkX21h
c2spOgorICAgICAgICBmcmFtZSA9ICcnLmpvaW4oWydceDAwJywgcGF5bG9hZCwgJ1x4ZmYnXSkK
KyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoZnJhbWUpCisKKyAgICBkZWYgc2VuZF9iaW5h
cnkoc2VsZiwgdW51c2VkX3BheWxvYWQsIHVudXNlZF9lbmQsIHVudXNlZF9tYXNrKToKKyAgICAg
ICAgcGFzcworCisgICAgZGVmIHNlbmRfdGV4dChzZWxmLCBwYXlsb2FkLCB1bnVzZWRfZW5kLCB1
bnVzZWRfbWFzayk6CisgICAgICAgIGVuY29kZWRfcGF5bG9hZCA9IHBheWxvYWQuZW5jb2RlKCd1
dGYtOCcpCisgICAgICAgIGZyYW1lID0gJycuam9pbihbJ1x4MDAnLCBlbmNvZGVkX3BheWxvYWQs
ICdceGZmJ10pCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kYWxsKGZyYW1lKQorCisgICAgZGVm
IGFzc2VydF9yZWNlaXZlX2JpbmFyeShzZWxmLCBwYXlsb2FkLCBvcGNvZGU9X09QQ09ERV9CSU5B
UlksIGZpbj0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN2MT0wLCByc3YyPTAs
IHJzdjM9MCk6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignQmluYXJ5IGZyYW1lIGlzIG5vdCBz
dXBwb3J0ZWQgaW4gaGl4aWU3NScpCisKKyAgICBkZWYgYXNzZXJ0X3JlY2VpdmVfdGV4dChzZWxm
LCBwYXlsb2FkKToKKyAgICAgICAgcmVjZWl2ZWQgPSBfcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2Nr
ZXQsIDEpCisKKyAgICAgICAgaWYgcmVjZWl2ZWQgIT0gJ1x4MDAnOgorICAgICAgICAgICAgcmFp
c2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGZyYW1lIHR5cGU6ICVk
IChleHBlY3RlZCkgdnMgJWQgKGFjdHVhbCknICUKKyAgICAgICAgICAgICAgICAoMCwgb3JkKHJl
Y2VpdmVkKSkpCisKKyAgICAgICAgcmVjZWl2ZWQgPSBfcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2Nr
ZXQsIGxlbihwYXlsb2FkKSArIDEpCisgICAgICAgIGlmIHJlY2VpdmVkWy0xXSAhPSAnXHhmZic6
CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1Rlcm1pbmF0
aW9uIGV4cGVjdGVkOiAweGZmIChleHBlY3RlZCkgdnMgJXIgKGFjdHVhbCknICUKKyAgICAgICAg
ICAgICAgICByZWNlaXZlZCkKKworICAgICAgICBpZiByZWNlaXZlZFswOi0xXSAhPSBwYXlsb2Fk
OgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdVbmV4cGVj
dGVkIHBheWxvYWQ6ICVyIChleHBlY3RlZCkgdnMgJXIgKGFjdHVhbCknICUKKyAgICAgICAgICAg
ICAgICAocGF5bG9hZCwgcmVjZWl2ZWRbMDotMV0pKQorCisgICAgZGVmIHNlbmRfY2xvc2Uoc2Vs
ZiwgY29kZSwgcmVhc29uKToKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoc2VsZi5fQ0xP
U0VfRlJBTUUpCisKKyAgICBkZWYgYXNzZXJ0X3JlY2VpdmVfY2xvc2Uoc2VsZiwgdW51c2VkX2Nv
ZGUsIHVudXNlZF9yZWFzb24pOgorICAgICAgICBjbG9zaW5nID0gX3JlY2VpdmVfYnl0ZXMoc2Vs
Zi5fc29ja2V0LCBsZW4oc2VsZi5fQ0xPU0VfRlJBTUUpKQorICAgICAgICBpZiBjbG9zaW5nICE9
IHNlbGYuX0NMT1NFX0ZSQU1FOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdEaWRuXCd0
IHJlY2VpdmUgY2xvc2luZyBoYW5kc2hha2UnKQorCisKK2NsYXNzIENsaWVudE9wdGlvbnMob2Jq
ZWN0KToKKyAgICAiIiJIb2xkcyBvcHRpb24gdmFsdWVzIHRvIGNvbmZpZ3VyZSB0aGUgQ2xpZW50
IG9iamVjdC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi52ZXJz
aW9uID0gMTMKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaG9zdCA9ICcnCisgICAgICAgIHNlbGYub3Jp
Z2luID0gJycKKyAgICAgICAgc2VsZi5yZXNvdXJjZSA9ICcnCisgICAgICAgIHNlbGYuc2VydmVy
X3BvcnQgPSAtMQorICAgICAgICBzZWxmLnNvY2tldF90aW1lb3V0ID0gMTAwMAorICAgICAgICBz
ZWxmLnVzZV90bHMgPSBGYWxzZQorICAgICAgICAjIEVuYWJsZSBkZWZsYXRlLXN0cmVhbS4KKyAg
ICAgICAgc2VsZi51c2VfZGVmbGF0ZV9zdHJlYW0gPSBGYWxzZQorICAgICAgICAjIEVuYWJsZSBk
ZWZsYXRlLWFwcGxpY2F0aW9uLWRhdGEuCisgICAgICAgIHNlbGYudXNlX2RlZmxhdGVfZnJhbWUg
PSBGYWxzZQorCisKK2NsYXNzIENsaWVudChvYmplY3QpOgorICAgICIiIldlYlNvY2tldCBjbGll
bnQuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgaGFuZHNoYWtlLCBzdHJl
YW1fY2xhc3MpOgorICAgICAgICBzZWxmLl9sb2dnZXIgPSB1dGlsLmdldF9jbGFzc19sb2dnZXIo
c2VsZikKKworICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9z
b2NrZXQgPSBOb25lCisKKyAgICAgICAgc2VsZi5faGFuZHNoYWtlID0gaGFuZHNoYWtlCisgICAg
ICAgIHNlbGYuX3N0cmVhbV9jbGFzcyA9IHN0cmVhbV9jbGFzcworCisgICAgZGVmIGNvbm5lY3Qo
c2VsZik6CisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBz
ZWxmLl9zb2NrZXQuc2V0dGltZW91dChzZWxmLl9vcHRpb25zLnNvY2tldF90aW1lb3V0KQorCisg
ICAgICAgIHNlbGYuX3NvY2tldC5jb25uZWN0KChzZWxmLl9vcHRpb25zLnNlcnZlcl9ob3N0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCkp
CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMudXNlX3RsczoKKyAgICAgICAgICAgIHNlbGYuX3Nv
Y2tldCA9IF9UTFNTb2NrZXQoc2VsZi5fc29ja2V0KQorCisgICAgICAgIHNlbGYuX2hhbmRzaGFr
ZS5oYW5kc2hha2Uoc2VsZi5fc29ja2V0KQorCisgICAgICAgIHNlbGYuX3N0cmVhbSA9IHNlbGYu
X3N0cmVhbV9jbGFzcyhzZWxmLl9zb2NrZXQsIHNlbGYuX2hhbmRzaGFrZSkKKworICAgICAgICBz
ZWxmLl9sb2dnZXIuaW5mbygnQ29ubmVjdGlvbiBlc3RhYmxpc2hlZCcpCisKKyAgICBkZWYgc2Vu
ZF9mcmFtZV9vZl9hcmJpdHJhcnlfYnl0ZXMoc2VsZiwgaGVhZGVyLCBib2R5KToKKyAgICAgICAg
c2VsZi5fc3RyZWFtLnNlbmRfZnJhbWVfb2ZfYXJiaXRyYXJ5X2J5dGVzKGhlYWRlciwgYm9keSkK
KworICAgIGRlZiBzZW5kX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgZW5kPVRydWUsIGJpbmFyeT1G
YWxzZSwgcmF3PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgbWFzaz1UcnVlKToKKyAgICAg
ICAgaWYgYmluYXJ5OgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtLnNlbmRfYmluYXJ5KG1lc3Nh
Z2UsIGVuZCwgbWFzaykKKyAgICAgICAgZWxpZiByYXc6CisgICAgICAgICAgICBzZWxmLl9zdHJl
YW0uc2VuZF9kYXRhKG1lc3NhZ2UsIF9PUENPREVfVEVYVCwgZW5kLCBtYXNrKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtLnNlbmRfdGV4dChtZXNzYWdlLCBlbmQsIG1h
c2spCisKKyAgICBkZWYgYXNzZXJ0X3JlY2VpdmUoc2VsZiwgcGF5bG9hZCwgYmluYXJ5PUZhbHNl
KToKKyAgICAgICAgaWYgYmluYXJ5OgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtLmFzc2VydF9y
ZWNlaXZlX2JpbmFyeShwYXlsb2FkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5f
c3RyZWFtLmFzc2VydF9yZWNlaXZlX3RleHQocGF5bG9hZCkKKworICAgIGRlZiBzZW5kX2Nsb3Nl
KHNlbGYsIGNvZGU9U1RBVFVTX05PUk1BTF9DTE9TVVJFLCByZWFzb249JycpOgorICAgICAgICBz
ZWxmLl9zdHJlYW0uc2VuZF9jbG9zZShjb2RlLCByZWFzb24pCisKKyAgICBkZWYgYXNzZXJ0X3Jl
Y2VpdmVfY2xvc2Uoc2VsZiwgY29kZT1TVEFUVVNfTk9STUFMX0NMT1NVUkUsIHJlYXNvbj0nJyk6
CisgICAgICAgIHNlbGYuX3N0cmVhbS5hc3NlcnRfcmVjZWl2ZV9jbG9zZShjb2RlLCByZWFzb24p
CisKKyAgICBkZWYgY2xvc2Vfc29ja2V0KHNlbGYpOgorICAgICAgICBzZWxmLl9zb2NrZXQuY2xv
c2UoKQorCisgICAgZGVmIGFzc2VydF9jb25uZWN0aW9uX2Nsb3NlZChzZWxmKToKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgcmVhZF9kYXRhID0gX3JlY2VpdmVfYnl0ZXMoc2VsZi5fc29ja2V0
LCAxKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgaWYgc3RyKGUp
LmZpbmQoCisgICAgICAgICAgICAgICAgJ0Nvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSByZWNlaXZp
bmcgcmVxdWVzdGVkIGxlbmd0aCAnKSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybgorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGVycm9yX251bWJlciwgbWVzc2FnZSA9IGUK
KyAgICAgICAgICAgICAgICBmb3IgZXJyb3JfbmFtZSBpbiBbJ0VDT05OUkVTRVQnLCAnV1NBRUNP
Tk5SRVNFVCddOgorICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JfbmFtZSBpbiBkaXIoZXJy
bm8pIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbnVtYmVyID09IGdldGF0dHIo
ZXJybm8sIGVycm9yX25hbWUpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAg
ICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgICAgIHJh
aXNlIGUKKworICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0Nvbm5lY3Rpb24gaXMgbm90IGNsb3Nl
ZCAoUmVhZDogJXIpJyAlIHJlYWRfZGF0YSkKKworCitkZWYgY3JlYXRlX2NsaWVudChvcHRpb25z
KToKKyAgICByZXR1cm4gQ2xpZW50KAorICAgICAgICBvcHRpb25zLCBXZWJTb2NrZXRIYW5kc2hh
a2Uob3B0aW9ucyksIFdlYlNvY2tldFN0cmVhbSkKKworCitkZWYgY3JlYXRlX2NsaWVudF9oeWJp
MDAob3B0aW9ucyk6CisgICAgcmV0dXJuIENsaWVudCgKKyAgICAgICAgb3B0aW9ucywKKyAgICAg
ICAgV2ViU29ja2V0SHliaTAwSGFuZHNoYWtlKG9wdGlvbnMsICcwJyksCisgICAgICAgIFdlYlNv
Y2tldFN0cmVhbUhpeGllNzUpCisKKworZGVmIGNyZWF0ZV9jbGllbnRfaGl4aWU3NShvcHRpb25z
KToKKyAgICByZXR1cm4gQ2xpZW50KAorICAgICAgICBvcHRpb25zLCBXZWJTb2NrZXRIaXhpZTc1
SGFuZHNoYWtlKG9wdGlvbnMpLCBXZWJTb2NrZXRTdHJlYW1IaXhpZTc1KQorCisKKyMgdmk6c3Rz
PTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3B5d2Vic29ja2V0L3Rlc3QvZW5kdG9lbmRfd2l0aF9leHRlcm5hbF9zZXJ2ZXIucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC9lbmR0b2VuZF93
aXRoX2V4dGVybmFsX3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2Y4NmZkYjQxNjNkNGU3Mzg5NTJi
M2NjYjc3ZjE5MjE2YmM1OTE1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvZW5kdG9lbmRfd2l0aF9leHRlcm5hbF9z
ZXJ2ZXIucHkKQEAgLTAsMCArMSw2NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENv
cHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCisiIiJUZXN0IGZvciBlbmQtdG8tZW5kIHdpdGggZXh0ZXJuYWwgc2Vy
dmVyLgorCitUaGlzIHRlc3QgaXMgbm90IHJ1biBieSBydW5fYWxsLnB5IGJlY2F1c2UgaXQgcmVx
dWlyZXMgc29tZSBwcmVwYXJhdGlvbnMuCitJZiB5b3Ugd291bGQgbGlrZSB0byBydW4gdGhpcyB0
ZXN0IGNvcnJlY3RseSwgbGF1bmNoIEFwYWNoZSB3aXRoIG1vZF9weXRob24KK2FuZCBtb2RfcHl3
ZWJzb2NrZXQgbWFudWFsbHkuIEluIGFkZGl0aW9uLCB5b3Ugc2hvdWxkIHBhc3MgYWxsb3dfZHJh
ZnQ3NSBvcHRpb24KK2FuZCBleGFtcGxlIHBhdGggYXMgaGFuZGxlcl9zY2FuIG9wdGlvbiBhbmQg
QXBhY2hlJ3MgRG9jdW1lbnRSb290LgorIiIiCisKKworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQg
c3lzCitpbXBvcnQgdGVzdC50ZXN0X2VuZHRvZW5kCitpbXBvcnQgdW5pdHRlc3QKKworCitfREVG
QVVMVF9XRUJfU09DS0VUX1BPUlQgPSA4MAorCisKK2NsYXNzIEVuZFRvRW5kVGVzdFdpdGhFeHRl
cm5hbFNlcnZlcih0ZXN0LnRlc3RfZW5kdG9lbmQuRW5kVG9FbmRUZXN0KToKKyAgICBwYXNzCisK
K2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9u
UGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1wb3J0JywgZGVzdD0ncG9y
dCcsIHR5cGU9J2ludCcsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1fREVGQVVMVF9X
RUJfU09DS0VUX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZXh0ZXJuYWwgdGVz
dCBzZXJ2ZXIgcG9ydC4nKQorICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdz
KCkKKworICAgIHRlc3QudGVzdF9lbmR0b2VuZC5fdXNlX2V4dGVybmFsX3NlcnZlciA9IFRydWUK
KyAgICB0ZXN0LnRlc3RfZW5kdG9lbmQuX2V4dGVybmFsX3NlcnZlcl9wb3J0ID0gb3B0aW9ucy5w
b3J0CisKKyAgICB1bml0dGVzdC5tYWluKGFyZ3Y9W3N5cy5hcmd2WzBdXSkKKworCisjIHZpOnN0
cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9weXdlYnNvY2tldC90ZXN0L21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvcHl3ZWJzb2NrZXQvdGVzdC9tb2NrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0OGIwOTI0NmY5ZDk0
NTA1ODk3ODdkMzExMDIwZmFlYTRlMWQxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC9tb2NrLnB5CkBAIC0wLDAg
KzEsMjI0IEBACisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJNb2NrcyBmb3IgdGVzdGluZy4KKyIi
IgorCisKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHRocmVhZGluZworCitmcm9tIG1vZF9weXdlYnNv
Y2tldCBpbXBvcnQgY29tbW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5zdHJlYW0gaW1wb3J0IFN0
cmVhbUhpeGllNzUKKworCitjbGFzcyBfTW9ja0Nvbm5CYXNlKG9iamVjdCk6CisgICAgIiIiQmFz
ZSBjbGFzcyBvZiBtb2NrcyBmb3IgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi4KKworICAgIFRo
aXMgZW5hYmxlcyB0ZXN0cyB0byBjaGVjayB3aGF0IGlzIHdyaXR0ZW4gdG8gYSAobW9jaykgbXBf
Y29ubi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5f
d3JpdGVfZGF0YSA9IFtdCisgICAgICAgIHNlbGYucmVtb3RlX2FkZHIgPSAnZmFrZV9hZGRyZXNz
JworCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJPdmVycmlkZSBtb2Rf
cHl0aG9uLmFwYWNoZS5tcF9jb25uLndyaXRlLiIiIgorCisgICAgICAgIHNlbGYuX3dyaXRlX2Rh
dGEuYXBwZW5kKGRhdGEpCisKKyAgICBkZWYgd3JpdHRlbl9kYXRhKHNlbGYpOgorICAgICAgICAi
IiJHZXQgYnl0ZXMgd3JpdHRlbiB0byB0aGlzIG1vY2suIiIiCisKKyAgICAgICAgcmV0dXJuICcn
LmpvaW4oc2VsZi5fd3JpdGVfZGF0YSkKKworCitjbGFzcyBNb2NrQ29ubihfTW9ja0Nvbm5CYXNl
KToKKyAgICAiIiJNb2NrIGZvciBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLgorCisgICAgVGhp
cyBlbmFibGVzIHRlc3RzIHRvIHNwZWNpZnkgd2hhdCBzaG91bGQgYmUgcmVhZCBmcm9tIGEgKG1v
Y2spIG1wX2Nvbm4gYXMKKyAgICB3ZWxsIGFzIHRvIGNoZWNrIHdoYXQgaXMgd3JpdHRlbiB0byBp
dC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFkX2RhdGEpOgorICAgICAg
ICAiIiJDb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
ICByZWFkX2RhdGE6IGJ5dGVzIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkIHdoZW4gcmVhZCogbWV0
aG9kcyBhcmUKKyAgICAgICAgICAgIGNhbGxlZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgX01v
Y2tDb25uQmFzZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9yZWFkX2RhdGEgPSByZWFk
X2RhdGEKKyAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCisKKyAgICBkZWYgcmVhZGxpbmUoc2Vs
Zik6CisgICAgICAgICIiIk92ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ucmVhZGxp
bmUuIiIiCisKKyAgICAgICAgaWYgc2VsZi5fcmVhZF9wb3MgPj0gbGVuKHNlbGYuX3JlYWRfZGF0
YSk6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgZW5kX2luZGV4ID0gc2VsZi5fcmVh
ZF9kYXRhLmZpbmQoJ1xuJywgc2VsZi5fcmVhZF9wb3MpICsgMQorICAgICAgICBpZiBub3QgZW5k
X2luZGV4OgorICAgICAgICAgICAgZW5kX2luZGV4ID0gbGVuKHNlbGYuX3JlYWRfZGF0YSkKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdXBfdG8oZW5kX2luZGV4KQorCisgICAgZGVmIHJlYWQo
c2VsZiwgbGVuZ3RoKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgbW9kX3B5dGhvbi5hcGFjaGUubXBf
Y29ubi5yZWFkLiIiIgorCisgICAgICAgIGlmIHNlbGYuX3JlYWRfcG9zID49IGxlbihzZWxmLl9y
ZWFkX2RhdGEpOgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIGVuZF9pbmRleCA9IG1p
bihsZW4oc2VsZi5fcmVhZF9kYXRhKSwgc2VsZi5fcmVhZF9wb3MgKyBsZW5ndGgpCisgICAgICAg
IHJldHVybiBzZWxmLl9yZWFkX3VwX3RvKGVuZF9pbmRleCkKKworICAgIGRlZiBfcmVhZF91cF90
byhzZWxmLCBlbmRfaW5kZXgpOgorICAgICAgICBsaW5lID0gc2VsZi5fcmVhZF9kYXRhW3NlbGYu
X3JlYWRfcG9zOmVuZF9pbmRleF0KKyAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSBlbmRfaW5kZXgK
KyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBNb2NrQmxvY2tpbmdDb25uKF9Nb2NrQ29u
bkJhc2UpOgorICAgICIiIkJsb2NraW5nIG1vY2sgZm9yIG1vZF9weXRob24uYXBhY2hlLm1wX2Nv
bm4uCisKKyAgICBUaGlzIGVuYWJsZXMgdGVzdHMgdG8gc3BlY2lmeSB3aGF0IHNob3VsZCBiZSBy
ZWFkIGZyb20gYSAobW9jaykgbXBfY29ubiBhcworICAgIHdlbGwgYXMgdG8gY2hlY2sgd2hhdCBp
cyB3cml0dGVuIHRvIGl0LgorICAgIENhbGxlcnMgb2YgcmVhZCogbWV0aG9kcyB3aWxsIGJsb2Nr
IGlmIHRoZXJlIGlzIG5vIGJ5dGVzIGF2YWlsYWJsZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmKToKKyAgICAgICAgX01vY2tDb25uQmFzZS5fX2luaXRfXyhzZWxmKQorICAgICAg
ICBzZWxmLl9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKworICAgIGRlZiByZWFkbGluZShzZWxmKToK
KyAgICAgICAgIiIiT3ZlcnJpZGUgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi5yZWFkbGluZS4i
IiIKKyAgICAgICAgbGluZSA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBj
ID0gc2VsZi5fcXVldWUuZ2V0KCkKKyAgICAgICAgICAgIGxpbmUgKz0gYworICAgICAgICAgICAg
aWYgYyA9PSAnXG4nOgorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBkZWYgcmVh
ZChzZWxmLCBsZW5ndGgpOgorICAgICAgICAiIiJPdmVycmlkZSBtb2RfcHl0aG9uLmFwYWNoZS5t
cF9jb25uLnJlYWQuIiIiCisKKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIGZvciB1bnVzZWQg
aW4gcmFuZ2UobGVuZ3RoKToKKyAgICAgICAgICAgIGRhdGEgKz0gc2VsZi5fcXVldWUuZ2V0KCkK
KyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBwdXRfYnl0ZXMoc2VsZiwgYnl0ZXMpOgor
ICAgICAgICAiIiJQdXQgYnl0ZXMgdG8gYmUgcmVhZCBmcm9tIHRoaXMgbW9jay4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgICAgYnl0ZXM6IGJ5dGVzIHRvIGJlIHJlYWQuCisgICAgICAgICIi
IgorCisgICAgICAgIGZvciBieXRlIGluIGJ5dGVzOgorICAgICAgICAgICAgc2VsZi5fcXVldWUu
cHV0KGJ5dGUpCisKKworY2xhc3MgTW9ja1RhYmxlKGRpY3QpOgorICAgICIiIk1vY2sgdGFibGUu
CisKKyAgICBUaGlzIG1pbWljcyBtb2RfcHl0aG9uIG1wX3RhYmxlLiBOb3RlIHRoYXQgb25seSB0
aGUgbWV0aG9kcyB1c2VkIGJ5CisgICAgdGVzdHMgYXJlIG92ZXJyaWRkZW4uCisgICAgIiIiCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgY29weV9mcm9tPXt9KToKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShjb3B5X2Zyb20sIGRpY3QpOgorICAgICAgICAgICAgY29weV9mcm9tID0gY29weV9mcm9t
Lml0ZW1zKCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gY29weV9mcm9tOgorICAgICAgICAg
ICAgc2VsZi5fX3NldGl0ZW1fXyhrZXksIHZhbHVlKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNl
bGYsIGtleSk6CisgICAgICAgIHJldHVybiBzdXBlcihNb2NrVGFibGUsIHNlbGYpLl9fZ2V0aXRl
bV9fKGtleS5sb3dlcigpKQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUp
OgorICAgICAgICBzdXBlcihNb2NrVGFibGUsIHNlbGYpLl9fc2V0aXRlbV9fKGtleS5sb3dlcigp
LCB2YWx1ZSkKKworICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZfdmFsdWU9Tm9uZSk6CisgICAg
ICAgIHJldHVybiBzdXBlcihNb2NrVGFibGUsIHNlbGYpLmdldChrZXkubG93ZXIoKSwgZGVmX3Zh
bHVlKQorCisKK2NsYXNzIE1vY2tSZXF1ZXN0KG9iamVjdCk6CisgICAgIiIiTW9jayByZXF1ZXN0
LgorCisgICAgVGhpcyBtaW1pY3MgbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHVyaT1Ob25lLCBoZWFkZXJzX2luPXt9LCBjb25uZWN0aW9uPU5v
bmUsIG1ldGhvZD0nR0VUJywKKyAgICAgICAgICAgICAgICAgaXNfaHR0cHM9RmFsc2UpOgorICAg
ICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJndW1lbnRzOgorICAg
ICAgICAgICAgdXJpOiBVUkkgb2YgdGhlIHJlcXVlc3QuCisgICAgICAgICAgICBoZWFkZXJzX2lu
OiBSZXF1ZXN0IGhlYWRlcnMuCisgICAgICAgICAgICBjb25uZWN0aW9uOiBDb25uZWN0aW9uIHVz
ZWQgZm9yIHRoZSByZXF1ZXN0LgorICAgICAgICAgICAgbWV0aG9kOiByZXF1ZXN0IG1ldGhvZC4K
KyAgICAgICAgICAgIGlzX2h0dHBzOiBXaGV0aGVyIHRoaXMgcmVxdWVzdCBpcyBvdmVyIFNTTC4K
KworICAgICAgICBTZWUgdGhlIGRvY3VtZW50IG9mIG1vZF9weXRob24gUmVxdWVzdCBmb3IgZGV0
YWlscy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYudXJpID0gdXJpCisgICAgICAgIHNlbGYu
Y29ubmVjdGlvbiA9IGNvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5tZXRob2QgPSBtZXRob2QKKyAg
ICAgICAgc2VsZi5oZWFkZXJzX2luID0gTW9ja1RhYmxlKGhlYWRlcnNfaW4pCisgICAgICAgICMg
c2VsZi5pc19odHRwc18gbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIHRlc3RzLiAgVG8gYXZv
aWQgbmFtZQorICAgICAgICAjIGNvbmZsaWN0IHdpdGggc2VsZi5pc19odHRwcygpLCBpdCBpcyBu
YW1lZCBhcyBzdWNoLgorICAgICAgICBzZWxmLmlzX2h0dHBzXyA9IGlzX2h0dHBzCisgICAgICAg
IHNlbGYud3Nfc3RyZWFtID0gU3RyZWFtSGl4aWU3NShzZWxmLCBUcnVlKQorICAgICAgICBzZWxm
LndzX2Nsb3NlX2NvZGUgPSBOb25lCisgICAgICAgIHNlbGYud3NfY2xvc2VfcmVhc29uID0gTm9u
ZQorICAgICAgICBzZWxmLndzX3ZlcnNpb24gPSBjb21tb24uVkVSU0lPTl9IWUJJMDAKKyAgICAg
ICAgc2VsZi53c19kZWZsYXRlID0gRmFsc2UKKworICAgICAgICBzZWxmLmRyYWluX3JlY2VpdmVk
X2RhdGFfY2FsbGVkID0gRmFsc2UKKworICAgIGRlZiBpc19odHRwcyhzZWxmKToKKyAgICAgICAg
IiIiUmV0dXJuIHdoZXRoZXIgdGhpcyByZXF1ZXN0IGlzIG92ZXIgU1NMLiIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5pc19odHRwc18KKworICAgIGRlZiBfZHJhaW5fcmVjZWl2ZWRfZGF0YShzZWxm
KToKKyAgICAgICAgc2VsZi5kcmFpbl9yZWNlaXZlZF9kYXRhX2NhbGxlZCA9IFRydWUKKworCitj
bGFzcyBNb2NrRGlzcGF0Y2hlcihvYmplY3QpOgorICAgICIiIk1vY2sgZm9yIGRpc3BhdGNoLkRp
c3BhdGNoZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZG9f
ZXh0cmFfaGFuZHNoYWtlX2NhbGxlZCA9IEZhbHNlCisKKyAgICBkZWYgZG9fZXh0cmFfaGFuZHNo
YWtlKHNlbGYsIGNvbm5fY29udGV4dCk6CisgICAgICAgIHNlbGYuZG9fZXh0cmFfaGFuZHNoYWtl
X2NhbGxlZCA9IFRydWUKKworICAgIGRlZiB0cmFuc2Zlcl9kYXRhKHNlbGYsIGNvbm5fY29udGV4
dCk6CisgICAgICAgIHBhc3MKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3J1bl9hbGwu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC9y
dW5fYWxsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1ZTRkNzgxNDdkMTE2MTRmMjI2Yjg1MGYwNzY5YjQxOTBm
MTQxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvcHl3ZWJzb2NrZXQvdGVzdC9ydW5fYWxsLnB5CkBAIC0wLDAgKzEsODQgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KKyMgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiUnVuIGFsbCB0ZXN0cyBp
biB0aGUgc2FtZSBkaXJlY3RvcnkuCisKK1RoaXMgc3VpdGUgaXMgZXhwZWN0ZWQgdG8gYmUgcnVu
IHVuZGVyIHB5d2Vic29ja2V0J3Mgc3JjIGRpcmVjdG9yeSwgaS5lLiB0aGUKK2RpcmVjdG9yeSBj
b250YWluaW5nIG1vZF9weXdlYnNvY2tldCwgdGVzdCwgZXRjLgorCitUbyBjaGFuZ2UgbG9nZ2lu
IGxldmVsLCBwbGVhc2Ugc3BlY2lmeSAtLWxvZy1sZXZlbCBvcHRpb24uCisgICAgcHl0aG9uIHRl
c3QvcnVuX3Rlc3QucHkgLS1sb2ctbGV2ZWwgZGVidWcKKworVG8gcGFzcyBhbnkgb3B0aW9uIHRv
IHVuaXR0ZXN0IG1vZHVsZSwgcGxlYXNlIHNwZWNpZnkgb3B0aW9ucyBhZnRlciAnLS0nLiBGb3IK
K2V4YW1wbGUsIHJ1biB0aGlzIGZvciBtYWtpbmcgdGhlIHRlc3QgcnVubmVyIHZlcmJvc2UuCisg
ICAgcHl0aG9uIHRlc3QvcnVuX3Rlc3QucHkgLS1sb2ctbGV2ZWwgZGVidWcgLS0gLXYKKyIiIgor
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0IHJl
CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworCitfVEVTVF9NT0RVTEVfUEFUVEVSTiA9
IHJlLmNvbXBpbGUocideKHRlc3RfLispXC5weSQnKQorCisKK2RlZiBfbGlzdF90ZXN0X21vZHVs
ZXMoZGlyZWN0b3J5KToKKyAgICBtb2R1bGVfbmFtZXMgPSBbXQorICAgIGZvciBmaWxlbmFtZSBp
biBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6CisgICAgICAgIG1hdGNoID0gX1RFU1RfTU9EVUxFX1BB
VFRFUk4uc2VhcmNoKGZpbGVuYW1lKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgIG1v
ZHVsZV9uYW1lcy5hcHBlbmQobWF0Y2guZ3JvdXAoMSkpCisgICAgcmV0dXJuIG1vZHVsZV9uYW1l
cworCisKK2RlZiBfc3VpdGUoKToKKyAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkK
KyAgICByZXR1cm4gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcygKKyAgICAgICAgICAgIF9saXN0
X3Rlc3RfbW9kdWxlcyhvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sICcu
JykpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcGFyc2VyID0gb3B0cGFy
c2UuT3B0aW9uUGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1sb2ctbGV2ZWwnLCAn
LS1sb2dfbGV2ZWwnLCB0eXBlPSdjaG9pY2UnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9
J2xvZ19sZXZlbCcsIGRlZmF1bHQ9J3dhcm5pbmcnLAorICAgICAgICAgICAgICAgICAgICAgIGNo
b2ljZXM9WydkZWJ1ZycsICdpbmZvJywgJ3dhcm5pbmcnLCAnd2FybicsICdlcnJvcicsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyaXRpY2FsJ10pCisgICAgb3B0aW9ucywgYXJn
cyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxv
Z2dpbmcuZ2V0TGV2ZWxOYW1lKG9wdGlvbnMubG9nX2xldmVsLnVwcGVyKCkpKQorICAgIHVuaXR0
ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J19zdWl0ZScsIGFyZ3Y9W3N5cy5hcmd2WzBdXSArIGFyZ3Mp
CisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC9zZXRfc3lzX3BhdGgucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC9zZXRfc3lzX3BhdGgu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTNjNmRiOWVhNGQzODNhMzdjMjdhMDYwYTBlZjFjNTYzYmJiMWUxNAot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdl
YnNvY2tldC90ZXN0L3NldF9zeXNfcGF0aC5weQpAQCAtMCwwICsxLDQ1IEBACisjIENvcHlyaWdo
dCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworCisiIiJDb25maWd1cmF0aW9uIGZvciB0ZXN0aW5nLgorCitUZXN0IGZpbGVzIHNo
b3VsZCBpbXBvcnQgdGhpcyBtb2R1bGUgYmVmb3JlIG1vZF9weXdlYnNvY2tldC4KKyIiIgorCisK
K2ltcG9ydCBvcworaW1wb3J0IHN5cworCisKKyMgQWRkIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRv
IHN5cy5wYXRoIHRvIGVuYWJsZSBpbXBvcnRpbmcgbW9kX3B5d2Vic29ja2V0Lgorc3lzLnBhdGgu
aW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSwgJy4uJykp
CisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2Rpc3BhdGNoLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9kaXNwYXRj
aC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45Y2EzZDRmM2FlMWRiZjVmOTdiMjdkODRlYzZlNjQyMmZkMGVjYWE0
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5
d2Vic29ja2V0L3Rlc3QvdGVzdF9kaXNwYXRjaC5weQpAQCAtMCwwICsxLDI4OCBAQAorIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0cyBmb3IgZGlz
cGF0Y2ggbW9kdWxlLiIiIgorCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9y
dCBzZXRfc3lzX3BhdGggICMgVXBkYXRlIHN5cy5wYXRoIHRvIGxvY2F0ZSBtb2RfcHl3ZWJzb2Nr
ZXQgbW9kdWxlLgorCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgZGlzcGF0Y2gKK2Zyb20g
bW9kX3B5d2Vic29ja2V0IGltcG9ydCBoYW5kc2hha2UKK2Zyb20gdGVzdCBpbXBvcnQgbW9jawor
CisKK19URVNUX0hBTkRMRVJTX0RJUiA9IG9zLnBhdGguam9pbigKKyAgICAgICAgb3MucGF0aC5z
cGxpdChfX2ZpbGVfXylbMF0sICd0ZXN0ZGF0YScsICdoYW5kbGVycycpCisKK19URVNUX0hBTkRM
RVJTX1NVQl9ESVIgPSBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJykKKwor
CitjbGFzcyBEaXNwYXRjaGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSB1bml0
dGVzdCBmb3IgZGlzcGF0Y2ggbW9kdWxlLiIiIgorCisgICAgZGVmIHRlc3Rfbm9ybWFsaXplX3Bh
dGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5hYnNwYXRoKCcvYS9i
JykucmVwbGFjZSgnXFwnLCAnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNo
Ll9ub3JtYWxpemVfcGF0aCgnL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBh
dGguYWJzcGF0aCgnL2EvYicpLnJlcGxhY2UoJ1xcJywgJy8nKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBkaXNwYXRjaC5fbm9ybWFsaXplX3BhdGgoJ1xcYVxcYicpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKG9zLnBhdGguYWJzcGF0aCgnL2EvYicpLnJlcGxhY2UoJ1xcJywgJy8nKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaC5fbm9ybWFsaXplX3BhdGgoJy9hL2Mv
Li4vYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYWJzcGF0aCgnYWJjJyku
cmVwbGFjZSgnXFwnLCAnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoLl9u
b3JtYWxpemVfcGF0aCgnYWJjJykpCisKKyAgICBkZWYgdGVzdF9jb252ZXJ0ZXIoc2VsZik6Cisg
ICAgICAgIGNvbnZlcnRlciA9IGRpc3BhdGNoLl9jcmVhdGVfcGF0aF90b19yZXNvdXJjZV9jb252
ZXJ0ZXIoJy9hL2InKQorICAgICAgICAjIFB5dGhvbiBidWlsdCBieSBNU0MgaW5zZXJ0cyBhIGRy
aXZlIG5hbWUgbGlrZSAnQzpcJyB2aWEgcmVhbHBhdGgoKS4KKyAgICAgICAgIyBDb252ZXJ0ZXIg
R2VuZXJhdG9yIGV4cGFuZHMgcHJvdmlkZWQgcGF0aCB1c2luZyByZWFscGF0aCgpIGFuZCB1c2Vz
CisgICAgICAgICMgdGhlIHBhdGggaW5jbHVkaW5nIGEgZHJpdmUgbmFtZSB0byB2ZXJpZnkgdGhl
IHByZWZpeC4KKyAgICAgICAgb3Nfcm9vdCA9IG9zLnBhdGgucmVhbHBhdGgoJy8nKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRlcihvc19yb290ICsgJ2EvYi9oX3dzaC5w
eScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvYy9oJywgY29udmVydGVyKG9zX3Jvb3Qg
KyAnYS9iL2MvaF93c2gucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBjb252
ZXJ0ZXIob3Nfcm9vdCArICdhL2IvaC5weScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5v
bmUsIGNvbnZlcnRlcignYS9iL2hfd3NoLnB5JykpCisKKyAgICAgICAgY29udmVydGVyID0gZGlz
cGF0Y2guX2NyZWF0ZV9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcignYS9iJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIoZGlzcGF0Y2guX25vcm1hbGl6ZV9wYXRo
KAorICAgICAgICAgICAgJ2EvYi9oX3dzaC5weScpKSkKKworICAgICAgICBjb252ZXJ0ZXIgPSBk
aXNwYXRjaC5fY3JlYXRlX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKCcvYS9iLy8vJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIob3Nfcm9vdCArICdhL2IvaF93
c2gucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIoZGlzcGF0
Y2guX25vcm1hbGl6ZV9wYXRoKAorICAgICAgICAgICAgJy9hL2IvLi4vYi9oX3dzaC5weScpKSkK
KworICAgICAgICBjb252ZXJ0ZXIgPSBkaXNwYXRjaC5fY3JlYXRlX3BhdGhfdG9fcmVzb3VyY2Vf
Y29udmVydGVyKAorICAgICAgICAgICAgJy9hLy4uL2EvYi8uLi9iLycpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJy9oJywgY29udmVydGVyKG9zX3Jvb3QgKyAnYS9iL2hfd3NoLnB5JykpCisK
KyAgICAgICAgY29udmVydGVyID0gZGlzcGF0Y2guX2NyZWF0ZV9wYXRoX3RvX3Jlc291cmNlX2Nv
bnZlcnRlcihyJ1xhXGInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRl
cihvc19yb290ICsgcidhXGJcaF93c2gucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
L2gnLCBjb252ZXJ0ZXIob3Nfcm9vdCArIHInYS9iL2hfd3NoLnB5JykpCisKKyAgICBkZWYgdGVz
dF9lbnVtZXJhdGVfaGFuZGxlcl9maWxlX3BhdGhzKHNlbGYpOgorICAgICAgICBwYXRocyA9IGxp
c3QoCisgICAgICAgICAgICBkaXNwYXRjaC5fZW51bWVyYXRlX2hhbmRsZXJfZmlsZV9wYXRocyhf
VEVTVF9IQU5ETEVSU19ESVIpKQorICAgICAgICBwYXRocy5zb3J0KCkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCg4LCBsZW4ocGF0aHMpKQorICAgICAgICBleHBlY3RlZF9wYXRocyA9IFsKKyAg
ICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnYWJvcnRfYnlf
dXNlcl93c2gucHknKSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExF
UlNfRElSLCAnYmxhbmtfd3NoLnB5JyksCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKF9U
RVNUX0hBTkRMRVJTX0RJUiwgJ29yaWdpbl9jaGVja193c2gucHknKSwKKyAgICAgICAgICAgICAg
ICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbl9pbl90cmFuc2Zlcl93c2gucHknKSwKKyAgICAgICAg
ICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJywgJ25vbl9jYWxs
YWJsZV93c2gucHknKSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExF
UlNfRElSLCAnc3ViJywgJ3BsYWluX3dzaC5weScpLAorICAgICAgICAgICAgICAgIG9zLnBhdGgu
am9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdzdWInLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnd3JvbmdfaGFuZHNoYWtlX3NpZ193c2gucHknKSwKKyAgICAgICAgICAgICAgICBvcy5w
YXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3dyb25nX3RyYW5zZmVyX3NpZ193c2gucHknKSwKKyAgICAgICAgICAgICAgICBd
CisgICAgICAgIGZvciBleHBlY3RlZCwgYWN0dWFsIGluIHppcChleHBlY3RlZF9wYXRocywgcGF0
aHMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQorCisg
ICAgZGVmIHRlc3Rfc291cmNlX2hhbmRsZXJfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoCisgICAgICAgICAgICBkaXNwYXRjaC5EaXNwYXRjaEV4Y2VwdGlvbiwgZGlzcGF0
Y2guX3NvdXJjZV9oYW5kbGVyX2ZpbGUsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygK
KyAgICAgICAgICAgIGRpc3BhdGNoLkRpc3BhdGNoRXhjZXB0aW9uLCBkaXNwYXRjaC5fc291cmNl
X2hhbmRsZXJfZmlsZSwgJ2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAg
ICAgICAgZGlzcGF0Y2guRGlzcGF0Y2hFeGNlcHRpb24sIGRpc3BhdGNoLl9zb3VyY2VfaGFuZGxl
cl9maWxlLCAnMS8wJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpc3BhdGNoLl9zb3VyY2Vf
aGFuZGxlcl9maWxlKAorICAgICAgICAgICAgICAgICdkZWYgd2ViX3NvY2tldF9kb19leHRyYV9o
YW5kc2hha2UocmVxdWVzdCk6cGFzc1xuJworICAgICAgICAgICAgICAgICdkZWYgd2ViX3NvY2tl
dF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOnBhc3NcbicpKQorCisgICAgZGVmIHRlc3Rfc291cmNl
X3dhcm5pbmdzKHNlbGYpOgorICAgICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hl
cihfVEVTVF9IQU5ETEVSU19ESVIsIE5vbmUpCisgICAgICAgIHdhcm5pbmdzID0gZGlzcGF0Y2hl
ci5zb3VyY2Vfd2FybmluZ3MoKQorICAgICAgICB3YXJuaW5ncy5zb3J0KCkKKyAgICAgICAgZXhw
ZWN0ZWRfd2FybmluZ3MgPSBbCisgICAgICAgICAgICAgICAgKG9zLnBhdGgucmVhbHBhdGgob3Mu
cGF0aC5qb2luKAorICAgICAgICAgICAgICAgICAgICBfVEVTVF9IQU5ETEVSU19ESVIsICdibGFu
a193c2gucHknKSkgKworICAgICAgICAgICAgICAgICAnOiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hh
bmRzaGFrZSBpcyBub3QgZGVmaW5lZC4nKSwKKyAgICAgICAgICAgICAgICAob3MucGF0aC5yZWFs
cGF0aChvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICAgICAgICAgIF9URVNUX0hBTkRMRVJTX0RJ
UiwgJ3N1YicsICdub25fY2FsbGFibGVfd3NoLnB5JykpICsKKyAgICAgICAgICAgICAgICAgJzog
d2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UgaXMgbm90IGNhbGxhYmxlLicpLAorICAgICAg
ICAgICAgICAgIChvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbigKKyAgICAgICAgICAgICAg
ICAgICAgX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJywgJ3dyb25nX2hhbmRzaGFrZV9zaWdfd3No
LnB5JykpICsKKyAgICAgICAgICAgICAgICAgJzogd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hh
a2UgaXMgbm90IGRlZmluZWQuJyksCisgICAgICAgICAgICAgICAgKG9zLnBhdGgucmVhbHBhdGgo
b3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgICAgICBfVEVTVF9IQU5ETEVSU19ESVIsICdz
dWInLCAnd3JvbmdfdHJhbnNmZXJfc2lnX3dzaC5weScpKSArCisgICAgICAgICAgICAgICAgICc6
IHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSBpcyBub3QgZGVmaW5lZC4nKSwKKyAgICAgICAgICAg
ICAgICBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQsIGxlbih3YXJuaW5ncykpCisgICAg
ICAgIGZvciBleHBlY3RlZCwgYWN0dWFsIGluIHppcChleHBlY3RlZF93YXJuaW5ncywgd2Fybmlu
Z3MpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCkKKwor
ICAgIGRlZiB0ZXN0X2RvX2V4dHJhX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgZGlzcGF0Y2hl
ciA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElSLCBOb25lKQorICAgICAg
ICByZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdCgpCisgICAgICAgIHJlcXVlc3Qud3NfcmVzb3Vy
Y2UgPSAnL29yaWdpbl9jaGVjaycKKyAgICAgICAgcmVxdWVzdC53c19vcmlnaW4gPSAnaHR0cDov
L2V4YW1wbGUuY29tJworICAgICAgICBkaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFrZShyZXF1
ZXN0KSAgIyBNdXN0IG5vdCByYWlzZSBleGNlcHRpb24uCisKKyAgICAgICAgcmVxdWVzdC53c19v
cmlnaW4gPSAnaHR0cDovL2JhZC5leGFtcGxlLmNvbScKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgZGlzcGF0Y2hlci5kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCkKKyAgICAgICAgICAgIHNl
bGYuZmFpbCgnQ291bGQgbm90IGNhdGNoIEhhbmRzaGFrZUV4Y2VwdGlvbiB3aXRoIDQwMyBzdGF0
dXMnKQorICAgICAgICBleGNlcHQgaGFuZHNoYWtlLkhhbmRzaGFrZUV4Y2VwdGlvbiwgZToKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQwMywgZS5zdGF0dXMpCisgICAgICAgIGV4Y2Vw
dCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgZXhjZXB0
aW9uOiAlcicgJSBlKQorCisgICAgZGVmIHRlc3RfYWJvcnRfZXh0cmFfaGFuZHNoYWtlKHNlbGYp
OgorICAgICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVTVF9IQU5ETEVS
U19ESVIsIE5vbmUpCisgICAgICAgIHJlcXVlc3QgPSBtb2NrLk1vY2tSZXF1ZXN0KCkKKyAgICAg
ICAgcmVxdWVzdC53c19yZXNvdXJjZSA9ICcvYWJvcnRfYnlfdXNlcicKKyAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoaGFuZHNoYWtlLkFib3J0ZWRCeVVzZXJFeGNlcHRpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpc3BhdGNoZXIuZG9fZXh0cmFfaGFuZHNoYWtlLCByZXF1ZXN0KQor
CisgICAgZGVmIHRlc3RfdHJhbnNmZXJfZGF0YShzZWxmKToKKyAgICAgICAgZGlzcGF0Y2hlciA9
IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElSLCBOb25lKQorCisgICAgICAg
IHJlcXVlc3QgPSBtb2NrLk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubignXHhm
Zlx4MDAnKSkKKyAgICAgICAgcmVxdWVzdC53c19yZXNvdXJjZSA9ICcvb3JpZ2luX2NoZWNrJwor
ICAgICAgICByZXF1ZXN0LndzX3Byb3RvY29sID0gJ3AxJworICAgICAgICBkaXNwYXRjaGVyLnRy
YW5zZmVyX2RhdGEocmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnb3JpZ2luX2No
ZWNrX3dzaC5weSBpcyBjYWxsZWQgZm9yIC9vcmlnaW5fY2hlY2ssIHAxJworICAgICAgICAgICAg
ICAgICAgICAgICAgICdceGZmXHgwMCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgICAgIHJlcXVlc3QgPSBtb2NrLk1v
Y2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubignXHhmZlx4MDAnKSkKKyAgICAgICAg
cmVxdWVzdC53c19yZXNvdXJjZSA9ICcvc3ViL3BsYWluJworICAgICAgICByZXF1ZXN0LndzX3By
b3RvY29sID0gTm9uZQorICAgICAgICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVzdCkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3ViL3BsYWluX3dzaC5weSBpcyBjYWxsZWQgZm9y
IC9zdWIvcGxhaW4sIE5vbmUnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4ZmZceDAwJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRh
KCkpCisKKyAgICAgICAgcmVxdWVzdCA9IG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2Nr
Lk1vY2tDb25uKCdceGZmXHgwMCcpKQorICAgICAgICByZXF1ZXN0LndzX3Jlc291cmNlID0gJy9z
dWIvcGxhaW4/JworICAgICAgICByZXF1ZXN0LndzX3Byb3RvY29sID0gTm9uZQorICAgICAgICBk
aXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnc3ViL3BsYWluX3dzaC5weSBpcyBjYWxsZWQgZm9yIC9zdWIvcGxhaW4/LCBOb25lJworICAg
ICAgICAgICAgICAgICAgICAgICAgICdceGZmXHgwMCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgICAgIHJlcXVlc3Qg
PSBtb2NrLk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubignXHhmZlx4MDAnKSkK
KyAgICAgICAgcmVxdWVzdC53c19yZXNvdXJjZSA9ICcvc3ViL3BsYWluP3E9dicKKyAgICAgICAg
cmVxdWVzdC53c19wcm90b2NvbCA9IE5vbmUKKyAgICAgICAgZGlzcGF0Y2hlci50cmFuc2Zlcl9k
YXRhKHJlcXVlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3N1Yi9wbGFpbl93c2gucHkg
aXMgY2FsbGVkIGZvciAvc3ViL3BsYWluP3E9diwgTm9uZScKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAnXHhmZlx4MDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X3RyYW5zZmVyX2RhdGFfbm9faGFu
ZGxlcihzZWxmKToKKyAgICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RF
U1RfSEFORExFUlNfRElSLCBOb25lKQorICAgICAgICBmb3IgcmVzb3VyY2UgaW4gWycvYmxhbmsn
LCAnL3N1Yi9ub25fY2FsbGFibGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcvc3ViL25v
X3dzaF9hdF90aGVfZW5kJywgJy9kb2VzL25vdC9leGlzdCddOgorICAgICAgICAgICAgcmVxdWVz
dCA9IG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tDb25uKCcnKSkKKyAgICAg
ICAgICAgIHJlcXVlc3Qud3NfcmVzb3VyY2UgPSByZXNvdXJjZQorICAgICAgICAgICAgcmVxdWVz
dC53c19wcm90b2NvbCA9ICdwMicKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBk
aXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVzdCkKKyAgICAgICAgICAgICAgICBzZWxmLmZh
aWwoKQorICAgICAgICAgICAgZXhjZXB0IGRpc3BhdGNoLkRpc3BhdGNoRXhjZXB0aW9uLCBlOgor
ICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHIoZSkuZmluZCgnTm8gaGFuZGxlcicp
ICE9IC0xKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBz
ZWxmLmZhaWwoKQorCisgICAgZGVmIHRlc3RfdHJhbnNmZXJfZGF0YV9oYW5kbGVyX2V4Y2VwdGlv
bihzZWxmKToKKyAgICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1Rf
SEFORExFUlNfRElSLCBOb25lKQorICAgICAgICByZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdChj
b25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycpKQorICAgICAgICByZXF1ZXN0LndzX3Jlc291cmNl
ID0gJy9zdWIvZXhjZXB0aW9uX2luX3RyYW5zZmVyJworICAgICAgICByZXF1ZXN0LndzX3Byb3Rv
Y29sID0gJ3AzJworICAgICAgICB0cnk6CisgICAgICAgICAgICBkaXNwYXRjaGVyLnRyYW5zZmVy
X2RhdGEocmVxdWVzdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgpCisgICAgICAgIGV4Y2VwdCBF
eGNlcHRpb24sIGU6CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyKGUpLmZpbmQoJ0lu
dGVudGlvbmFsJykgIT0gLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0
ZWQgZXhjZXB0aW9uOiAlcycgJSBlKQorCisgICAgZGVmIHRlc3RfYWJvcnRfdHJhbnNmZXJfZGF0
YShzZWxmKToKKyAgICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1Rf
SEFORExFUlNfRElSLCBOb25lKQorICAgICAgICByZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdCgp
CisgICAgICAgIHJlcXVlc3Qud3NfcmVzb3VyY2UgPSAnL2Fib3J0X2J5X3VzZXInCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5BYm9ydGVkQnlVc2VyRXhjZXB0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEsIHJlcXVlc3Qp
CisKKyAgICBkZWYgdGVzdF9zY2FuX2RpcihzZWxmKToKKyAgICAgICAgZGlzcCA9IGRpc3BhdGNo
LkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElSLCBOb25lKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKDQsIGxlbihkaXNwLl9oYW5kbGVyX3N1aXRlX21hcCkpCisgICAgICAgIHNlbGYuZmFp
bFVubGVzcygnL29yaWdpbl9jaGVjaycgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAg
ICAgIHNlbGYuZmFpbFVubGVzcygKKyAgICAgICAgICAgICcvc3ViL2V4Y2VwdGlvbl9pbl90cmFu
c2ZlcicgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuZmFpbFVubGVz
cygnL3N1Yi9wbGFpbicgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisKKyAgICBkZWYgdGVz
dF9zY2FuX3N1Yl9kaXIoc2VsZik6CisgICAgICAgIGRpc3AgPSBkaXNwYXRjaC5EaXNwYXRjaGVy
KF9URVNUX0hBTkRMRVJTX0RJUiwgX1RFU1RfSEFORExFUlNfU1VCX0RJUikKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgyLCBsZW4oZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApKQorICAgICAgICBz
ZWxmLmZhaWxJZignL29yaWdpbl9jaGVjaycgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisg
ICAgICAgIHNlbGYuZmFpbFVubGVzcygKKyAgICAgICAgICAgICcvc3ViL2V4Y2VwdGlvbl9pbl90
cmFuc2ZlcicgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuZmFpbFVu
bGVzcygnL3N1Yi9wbGFpbicgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisKKyAgICBkZWYg
dGVzdF9zY2FuX3N1Yl9kaXJfYXNfcm9vdChzZWxmKToKKyAgICAgICAgZGlzcCA9IGRpc3BhdGNo
LkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfU1VCX0RJUiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1RFU1RfSEFORExFUlNfU1VCX0RJUikKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgyLCBsZW4oZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApKQorICAgICAgICBzZWxmLmZh
aWxJZignL29yaWdpbl9jaGVjaycgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAg
IHNlbGYuZmFpbElmKCcvc3ViL2V4Y2VwdGlvbl9pbl90cmFuc2ZlcicgaW4gZGlzcC5faGFuZGxl
cl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuZmFpbElmKCcvc3ViL3BsYWluJyBpbiBkaXNwLl9o
YW5kbGVyX3N1aXRlX21hcCkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCcvZXhjZXB0aW9uX2lu
X3RyYW5zZmVyJyBpbiBkaXNwLl9oYW5kbGVyX3N1aXRlX21hcCkKKyAgICAgICAgc2VsZi5mYWls
VW5sZXNzKCcvcGxhaW4nIGluIGRpc3AuX2hhbmRsZXJfc3VpdGVfbWFwKQorCisgICAgZGVmIHRl
c3Rfc2Nhbl9kaXJfbXVzdF91bmRlcl9yb290KHNlbGYpOgorICAgICAgICBkaXNwYXRjaC5EaXNw
YXRjaGVyKCdhL2InLCAnYS9iL2MnKSAgIyBPSworICAgICAgICBkaXNwYXRjaC5EaXNwYXRjaGVy
KCdhL2IvLy8nLCAnYS9iJykgICMgT0sKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGlzcGF0
Y2guRGlzcGF0Y2hFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNo
LkRpc3BhdGNoZXIsICdhL2IvYycsICdhL2InKQorCisgICAgZGVmIHRlc3RfcmVzb3VyY2VfcGF0
aF9hbGlhcyhzZWxmKToKKyAgICAgICAgZGlzcCA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1Rf
SEFORExFUlNfRElSLCBOb25lKQorICAgICAgICBkaXNwLmFkZF9yZXNvdXJjZV9wYXRoX2FsaWFz
KCcvJywgJy9vcmlnaW5fY2hlY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIGxlbihk
aXNwLl9oYW5kbGVyX3N1aXRlX21hcCkpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygnL29yaWdp
bl9jaGVjaycgaW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuZmFpbFVu
bGVzcygKKyAgICAgICAgICAgICcvc3ViL2V4Y2VwdGlvbl9pbl90cmFuc2ZlcicgaW4gZGlzcC5f
aGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygnL3N1Yi9wbGFpbicg
aW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuZmFpbFVubGVzcygnLycg
aW4gZGlzcC5faGFuZGxlcl9zdWl0ZV9tYXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRp
c3BhdGNoLkRpc3BhdGNoRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNw
LmFkZF9yZXNvdXJjZV9wYXRoX2FsaWFzLCAnL2FsaWFzJywgJy9ub3QtZXhpc3QnKQorCisKK2lm
IF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCisKKworIyB2aTpz
dHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2VuZHRvZW5kLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9lbmR0b2VuZC5weQpuZXcgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45NjFjZjNkMzcxNGEyZWRlOTZjNjE1MzdiMWU1ZjMwMmE4NmFmYTdlCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rl
c3QvdGVzdF9lbmR0b2VuZC5weQpAQCAtMCwwICsxLDQ4NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjCisjIENvcHlyaWdodCAyMDEyLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0IGZvciBlbmQtdG8tZW5kLiIiIgor
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2Nr
ZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHVu
aXR0ZXN0CisKK2ltcG9ydCBzZXRfc3lzX3BhdGggICMgVXBkYXRlIHN5cy5wYXRoIHRvIGxvY2F0
ZSBtb2RfcHl3ZWJzb2NrZXQgbW9kdWxlLgorCitmcm9tIHRlc3QgaW1wb3J0IGNsaWVudF9mb3Jf
dGVzdGluZworCisKKyMgU3BlY2lhbCBtZXNzYWdlIHRoYXQgdGVsbHMgdGhlIGVjaG8gc2VydmVy
IHRvIHN0YXJ0IGNsb3NpbmcgaGFuZHNoYWtlCitfR09PREJZRV9NRVNTQUdFID0gJ0dvb2RieWUn
CisKKyMgSWYgeW91IHdhbnQgdG8gdXNlIGV4dGVybmFsIHNlcnZlciB0byBydW4gZW5kIHRvIGVu
ZCB0ZXN0cywgc2V0IGZvbGxvd2luZworIyBwYXJhbWV0ZXJzIGNvcnJlY3RseS4KK191c2VfZXh0
ZXJuYWxfc2VydmVyID0gRmFsc2UKK19leHRlcm5hbF9zZXJ2ZXJfcG9ydCA9IDAKKworCisjIFRl
c3QgYm9keSBmdW5jdGlvbnMKK2RlZiBfZWNob19jaGVja19wcm9jZWR1cmUoY2xpZW50KToKKyAg
ICBjbGllbnQuY29ubmVjdCgpCisKKyAgICBjbGllbnQuc2VuZF9tZXNzYWdlKCd0ZXN0JykKKyAg
ICBjbGllbnQuYXNzZXJ0X3JlY2VpdmUoJ3Rlc3QnKQorICAgIGNsaWVudC5zZW5kX21lc3NhZ2Uo
J2hlbGxvd29ybGQnKQorICAgIGNsaWVudC5hc3NlcnRfcmVjZWl2ZSgnaGVsbG93b3JsZCcpCisK
KyAgICBjbGllbnQuc2VuZF9jbG9zZSgpCisgICAgY2xpZW50LmFzc2VydF9yZWNlaXZlX2Nsb3Nl
KCkKKworICAgIGNsaWVudC5hc3NlcnRfY29ubmVjdGlvbl9jbG9zZWQoKQorCisKK2RlZiBfZWNo
b19jaGVja19wcm9jZWR1cmVfd2l0aF9iaW5hcnkoY2xpZW50KToKKyAgICBjbGllbnQuY29ubmVj
dCgpCisKKyAgICBjbGllbnQuc2VuZF9tZXNzYWdlKCdiaW5hcnknLCBiaW5hcnk9VHJ1ZSkKKyAg
ICBjbGllbnQuYXNzZXJ0X3JlY2VpdmUoJ2JpbmFyeScsIGJpbmFyeT1UcnVlKQorICAgIGNsaWVu
dC5zZW5kX21lc3NhZ2UoJ1x4MDBceDgwXHhmZVx4ZmZceDAwXHg4MCcsIGJpbmFyeT1UcnVlKQor
ICAgIGNsaWVudC5hc3NlcnRfcmVjZWl2ZSgnXHgwMFx4ODBceGZlXHhmZlx4MDBceDgwJywgYmlu
YXJ5PVRydWUpCisKKyAgICBjbGllbnQuc2VuZF9jbG9zZSgpCisgICAgY2xpZW50LmFzc2VydF9y
ZWNlaXZlX2Nsb3NlKCkKKworICAgIGNsaWVudC5hc3NlcnRfY29ubmVjdGlvbl9jbG9zZWQoKQor
CisKK2RlZiBfZWNob19jaGVja19wcm9jZWR1cmVfd2l0aF9nb29kYnllKGNsaWVudCk6CisgICAg
Y2xpZW50LmNvbm5lY3QoKQorCisgICAgY2xpZW50LnNlbmRfbWVzc2FnZSgndGVzdCcpCisgICAg
Y2xpZW50LmFzc2VydF9yZWNlaXZlKCd0ZXN0JykKKworICAgIGNsaWVudC5zZW5kX21lc3NhZ2Uo
X0dPT0RCWUVfTUVTU0FHRSkKKyAgICBjbGllbnQuYXNzZXJ0X3JlY2VpdmUoX0dPT0RCWUVfTUVT
U0FHRSkKKworICAgIGNsaWVudC5hc3NlcnRfcmVjZWl2ZV9jbG9zZSgpCisgICAgY2xpZW50LnNl
bmRfY2xvc2UoKQorCisgICAgY2xpZW50LmFzc2VydF9jb25uZWN0aW9uX2Nsb3NlZCgpCisKKwor
ZGVmIF9lY2hvX2NoZWNrX3Byb2NlZHVyZV93aXRoX2NvZGVfYW5kX3JlYXNvbihjbGllbnQsIGNv
ZGUsIHJlYXNvbik6CisgICAgY2xpZW50LmNvbm5lY3QoKQorCisgICAgY2xpZW50LnNlbmRfY2xv
c2UoY29kZSwgcmVhc29uKQorICAgIGNsaWVudC5hc3NlcnRfcmVjZWl2ZV9jbG9zZShjb2RlLCBy
ZWFzb24pCisKKyAgICBjbGllbnQuYXNzZXJ0X2Nvbm5lY3Rpb25fY2xvc2VkKCkKKworCitkZWYg
X3VubWFza2VkX2ZyYW1lX2NoZWNrX3Byb2NlZHVyZShjbGllbnQpOgorICAgIGNsaWVudC5jb25u
ZWN0KCkKKworICAgIGNsaWVudC5zZW5kX21lc3NhZ2UoJ3Rlc3QnLCBtYXNrPUZhbHNlKQorICAg
IGNsaWVudC5hc3NlcnRfcmVjZWl2ZV9jbG9zZShjbGllbnRfZm9yX3Rlc3RpbmcuU1RBVFVTX1BS
T1RPQ09MX0VSUk9SLCAnJykKKworICAgIGNsaWVudC5hc3NlcnRfY29ubmVjdGlvbl9jbG9zZWQo
KQorCisKK2NsYXNzIEVuZFRvRW5kVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQW4g
ZW5kLXRvLWVuZCB0ZXN0IHRoYXQgbGF1bmNoZXMgcHl3ZWJzb2NrZXQgc3RhbmRhbG9uZSBzZXJ2
ZXIgYXMgYQorICAgIHNlcGFyYXRlIHByb2Nlc3MsIGNvbm5lY3RzIHRvIGl0IHVzaW5nIHRoZSBj
bGllbnRfZm9yX3Rlc3RpbmcgbW9kdWxlLCBhbmQKKyAgICBjaGVja3MgaWYgdGhlIHNlcnZlciBi
ZWhhdmVzIGNvcnJlY3RseSBieSBleGNoYW5naW5nIG9wZW5pbmcgaGFuZHNoYWtlIGFuZAorICAg
IGZyYW1lcyBvdmVyIGEgVENQIGNvbm5lY3Rpb24uCisgICAgIiIiCisKKyAgICBkZWYgc2V0VXAo
c2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyX3N0ZGVyciA9IE5vbmUKKyAgICAgICAgc2VsZi50
b3BfZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdLCAnLi4nKQor
ICAgICAgICBvcy5wdXRlbnYoJ1BZVEhPTlBBVEgnLCBvcy5wYXRoLnBhdGhzZXAuam9pbihzeXMu
cGF0aCkpCisgICAgICAgIHNlbGYuc3RhbmRhbG9uZV9jb21tYW5kID0gb3MucGF0aC5qb2luKAor
ICAgICAgICAgICAgc2VsZi50b3BfZGlyLCAnbW9kX3B5d2Vic29ja2V0JywgJ3N0YW5kYWxvbmUu
cHknKQorICAgICAgICBzZWxmLmRvY3VtZW50X3Jvb3QgPSBvcy5wYXRoLmpvaW4oc2VsZi50b3Bf
ZGlyLCAnZXhhbXBsZScpCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgcy5i
aW5kKCgnbG9jYWxob3N0JywgMCkpCisgICAgICAgIChfLCBzZWxmLnRlc3RfcG9ydCkgPSBzLmdl
dHNvY2tuYW1lKCkKKyAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9
IGNsaWVudF9mb3JfdGVzdGluZy5DbGllbnRPcHRpb25zKCkKKyAgICAgICAgc2VsZi5fb3B0aW9u
cy5zZXJ2ZXJfaG9zdCA9ICdsb2NhbGhvc3QnCisgICAgICAgIHNlbGYuX29wdGlvbnMub3JpZ2lu
ID0gJ2h0dHA6Ly9sb2NhbGhvc3QnCisgICAgICAgIHNlbGYuX29wdGlvbnMucmVzb3VyY2UgPSAn
L2VjaG8nCisKKyAgICAgICAgIyBUT0RPKHRveW9zaGltKTogRWxpbWluYXRlIGxhdW5jaGluZyBh
IHN0YW5kYWxvbmUgc2VydmVyIG9uIHVzaW5nCisgICAgICAgICMgZXh0ZXJuYWwgc2VydmVyLgor
CisgICAgICAgIGlmIF91c2VfZXh0ZXJuYWxfc2VydmVyOgorICAgICAgICAgICAgc2VsZi5fb3B0
aW9ucy5zZXJ2ZXJfcG9ydCA9IF9leHRlcm5hbF9zZXJ2ZXJfcG9ydAorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCA9IHNlbGYudGVzdF9wb3J0CisK
KyAgICBkZWYgX3J1bl9weXRob25fY29tbWFuZChzZWxmLCBjb21tYW5kbGluZSwgc3Rkb3V0PU5v
bmUsIHN0ZGVycj1Ob25lKToKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5l
eGVjdXRhYmxlXSArIGNvbW1hbmRsaW5lLCBjbG9zZV9mZHM9VHJ1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVycikKKworICAgIGRl
ZiBfcnVuX3NlcnZlcihzZWxmLCBhbGxvd19kcmFmdDc1PUZhbHNlKToKKyAgICAgICAgYXJncyA9
IFtzZWxmLnN0YW5kYWxvbmVfY29tbWFuZCwKKyAgICAgICAgICAgICAgICAnLUgnLCAnbG9jYWxo
b3N0JywKKyAgICAgICAgICAgICAgICAnLVYnLCAnbG9jYWxob3N0JywKKyAgICAgICAgICAgICAg
ICAnLXAnLCBzdHIoc2VsZi50ZXN0X3BvcnQpLAorICAgICAgICAgICAgICAgICctUCcsIHN0cihz
ZWxmLnRlc3RfcG9ydCksCisgICAgICAgICAgICAgICAgJy1kJywgc2VsZi5kb2N1bWVudF9yb290
XQorCisgICAgICAgICMgSW5oZXJpdCB0aGUgbGV2ZWwgc2V0IHRvIHRoZSByb290IGxvZ2dlciBi
eSB0ZXN0IHJ1bm5lci4KKyAgICAgICAgcm9vdF9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigp
CisgICAgICAgIGxvZ19sZXZlbCA9IHJvb3RfbG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkKKyAg
ICAgICAgaWYgbG9nX2xldmVsICE9IGxvZ2dpbmcuTk9UU0VUOgorICAgICAgICAgICAgYXJncy5h
cHBlbmQoJy0tbG9nLWxldmVsJykKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGxvZ2dpbmcuZ2V0
TGV2ZWxOYW1lKGxvZ19sZXZlbCkubG93ZXIoKSkKKworICAgICAgICBpZiBhbGxvd19kcmFmdDc1
OgorICAgICAgICAgICAgYXJncy5hcHBlbmQoJy0tYWxsb3ctZHJhZnQ3NScpCisKKyAgICAgICAg
cmV0dXJuIHNlbGYuX3J1bl9weXRob25fY29tbWFuZChhcmdzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zZWxmLnNlcnZlcl9zdGRlcnIpCisKKyAgICBk
ZWYgX2tpbGxfcHJvY2VzcyhzZWxmLCBwaWQpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4g
KCd3aW4zMicsICdjeWd3aW4nKToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgKKyAgICAg
ICAgICAgICAgICAoJ3Rhc2traWxsLmV4ZScsICcvZicsICcvcGlkJywgc3RyKHBpZCkpLCBjbG9z
ZV9mZHM9VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWdu
YWwuU0lHS0lMTCkKKworICAgIGRlZiBfcnVuX2h5YmlfdGVzdF93aXRoX2NsaWVudF9vcHRpb25z
KHNlbGYsIHRlc3RfZnVuY3Rpb24sIG9wdGlvbnMpOgorICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9y
dW5fc2VydmVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBUT0RPKHR5b3NoaW5vKTog
YWRkIHNvbWUgbG9naWMgdG8gcG9sbCB0aGUgc2VydmVyIHVudGlsIGl0CisgICAgICAgICAgICAj
IGJlY29tZXMgcmVhZHkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQorCisgICAgICAgICAg
ICBjbGllbnQgPSBjbGllbnRfZm9yX3Rlc3RpbmcuY3JlYXRlX2NsaWVudChvcHRpb25zKQorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRlc3RfZnVuY3Rpb24oY2xpZW50KQorICAg
ICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjbGllbnQuY2xvc2Vfc29ja2V0KCkK
KyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2tpbGxfcHJvY2VzcyhzZXJ2ZXIu
cGlkKQorCisgICAgZGVmIF9ydW5faHliaV90ZXN0KHNlbGYsIHRlc3RfZnVuY3Rpb24pOgorICAg
ICAgICBzZWxmLl9ydW5faHliaV90ZXN0X3dpdGhfY2xpZW50X29wdGlvbnModGVzdF9mdW5jdGlv
biwgc2VsZi5fb3B0aW9ucykKKworICAgIGRlZiBfcnVuX2h5YmlfZGVmbGF0ZV90ZXN0KHNlbGYs
IHRlc3RfZnVuY3Rpb24pOgorICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9ydW5fc2VydmVyKCkKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpCisKKyAgICAgICAgICAgIHNl
bGYuX29wdGlvbnMudXNlX2RlZmxhdGVfc3RyZWFtID0gVHJ1ZQorICAgICAgICAgICAgY2xpZW50
ID0gY2xpZW50X2Zvcl90ZXN0aW5nLmNyZWF0ZV9jbGllbnQoc2VsZi5fb3B0aW9ucykKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZXN0X2Z1bmN0aW9uKGNsaWVudCkKKyAgICAg
ICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgY2xpZW50LmNsb3NlX3NvY2tldCgpCisg
ICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9raWxsX3Byb2Nlc3Moc2VydmVyLnBp
ZCkKKworICAgIGRlZiBfcnVuX2h5YmlfZGVmbGF0ZV9mcmFtZV90ZXN0KHNlbGYsIHRlc3RfZnVu
Y3Rpb24pOgorICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9ydW5fc2VydmVyKCkKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpCisKKyAgICAgICAgICAgIHNlbGYuX29wdGlv
bnMudXNlX2RlZmxhdGVfZnJhbWUgPSBUcnVlCisgICAgICAgICAgICBjbGllbnQgPSBjbGllbnRf
Zm9yX3Rlc3RpbmcuY3JlYXRlX2NsaWVudChzZWxmLl9vcHRpb25zKQorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIHRlc3RfZnVuY3Rpb24oY2xpZW50KQorICAgICAgICAgICAgZmlu
YWxseToKKyAgICAgICAgICAgICAgICBjbGllbnQuY2xvc2Vfc29ja2V0KCkKKyAgICAgICAgZmlu
YWxseToKKyAgICAgICAgICAgIHNlbGYuX2tpbGxfcHJvY2VzcyhzZXJ2ZXIucGlkKQorCisgICAg
ZGVmIF9ydW5faHliaV9jbG9zZV93aXRoX2NvZGVfYW5kX3JlYXNvbl90ZXN0KHNlbGYsIHRlc3Rf
ZnVuY3Rpb24sIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlYXNvbik6CisgICAgICAgIHNlcnZlciA9IHNlbGYuX3J1bl9zZXJ2ZXIoKQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMikKKworICAgICAgICAgICAg
Y2xpZW50ID0gY2xpZW50X2Zvcl90ZXN0aW5nLmNyZWF0ZV9jbGllbnQoc2VsZi5fb3B0aW9ucykK
KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZXN0X2Z1bmN0aW9uKGNsaWVudCwg
Y29kZSwgcmVhc29uKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjbGll
bnQuY2xvc2Vfc29ja2V0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2tp
bGxfcHJvY2VzcyhzZXJ2ZXIucGlkKQorCisgICAgZGVmIF9ydW5faHliaV9odHRwX2ZhbGxiYWNr
X3Rlc3Qoc2VsZiwgb3B0aW9ucywgc3RhdHVzKToKKyAgICAgICAgc2VydmVyID0gc2VsZi5fcnVu
X3NlcnZlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQorCisg
ICAgICAgICAgICBjbGllbnQgPSBjbGllbnRfZm9yX3Rlc3RpbmcuY3JlYXRlX2NsaWVudChvcHRp
b25zKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KCkK
KyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0NvdWxkIG5vdCBjYXRjaCBIdHRwU3RhdHVzRXhj
ZXB0aW9uJykKKyAgICAgICAgICAgIGV4Y2VwdCBjbGllbnRfZm9yX3Rlc3RpbmcuSHR0cFN0YXR1
c0V4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywg
ZS5zdGF0dXMpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAg
ICAgIHNlbGYuZmFpbCgnQ2F0Y2ggdW5leHBlY3RlZCBleGNlcHRpb24nKQorICAgICAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgICAgICBjbGllbnQuY2xvc2Vfc29ja2V0KCkKKyAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2tpbGxfcHJvY2VzcyhzZXJ2ZXIucGlkKQorCisg
ICAgZGVmIHRlc3RfZWNobyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2h5YmlfdGVzdChfZWNo
b19jaGVja19wcm9jZWR1cmUpCisKKyAgICBkZWYgdGVzdF9lY2hvX2JpbmFyeShzZWxmKToKKyAg
ICAgICAgc2VsZi5fcnVuX2h5YmlfdGVzdChfZWNob19jaGVja19wcm9jZWR1cmVfd2l0aF9iaW5h
cnkpCisKKyAgICBkZWYgdGVzdF9lY2hvX3NlcnZlcl9jbG9zZShzZWxmKToKKyAgICAgICAgc2Vs
Zi5fcnVuX2h5YmlfdGVzdChfZWNob19jaGVja19wcm9jZWR1cmVfd2l0aF9nb29kYnllKQorCisg
ICAgZGVmIHRlc3RfdW5tYXNrZWRfZnJhbWUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9oeWJp
X3Rlc3QoX3VubWFza2VkX2ZyYW1lX2NoZWNrX3Byb2NlZHVyZSkKKworICAgIGRlZiB0ZXN0X2Vj
aG9fZGVmbGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2h5YmlfZGVmbGF0ZV90ZXN0KF9l
Y2hvX2NoZWNrX3Byb2NlZHVyZSkKKworICAgIGRlZiB0ZXN0X2VjaG9fZGVmbGF0ZV9zZXJ2ZXJf
Y2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9oeWJpX2RlZmxhdGVfdGVzdChfZWNob19j
aGVja19wcm9jZWR1cmVfd2l0aF9nb29kYnllKQorCisgICAgZGVmIHRlc3RfZWNob19kZWZsYXRl
X2ZyYW1lKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5faHliaV9kZWZsYXRlX2ZyYW1lX3Rlc3Qo
X2VjaG9fY2hlY2tfcHJvY2VkdXJlKQorCisgICAgZGVmIHRlc3RfZWNob19kZWZsYXRlX2ZyYW1l
X3NlcnZlcl9jbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2h5YmlfZGVmbGF0ZV9mcmFt
ZV90ZXN0KAorICAgICAgICAgICAgX2VjaG9fY2hlY2tfcHJvY2VkdXJlX3dpdGhfZ29vZGJ5ZSkK
KworICAgIGRlZiB0ZXN0X2VjaG9fY2xvc2Vfd2l0aF9jb2RlX2FuZF9yZWFzb24oc2VsZik6Cisg
ICAgICAgIHNlbGYuX29wdGlvbnMucmVzb3VyY2UgPSAnL2Nsb3NlJworICAgICAgICBzZWxmLl9y
dW5faHliaV9jbG9zZV93aXRoX2NvZGVfYW5kX3JlYXNvbl90ZXN0KAorICAgICAgICAgICAgX2Vj
aG9fY2hlY2tfcHJvY2VkdXJlX3dpdGhfY29kZV9hbmRfcmVhc29uLCAzMzMzLCAic3Vuc3Vuc3Vu
c3VuIikKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29uX3Byb3RvY29sX2Vycm9yKHNlbGYpOgorICAg
ICAgICAiIiJUZXN0cyB0aGF0IHRoZSBzZXJ2ZXIgc2VuZHMgYSBjbG9zZSBmcmFtZSB3aXRoIHBy
b3RvY29sIGVycm9yIHN0YXR1cworICAgICAgICBjb2RlIHdoZW4gdGhlIGNsaWVudCBzZW5kcyBk
YXRhIHdpdGggc29tZSBwcm90b2NvbCBlcnJvci4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVm
IHRlc3RfZnVuY3Rpb24oY2xpZW50KToKKyAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KCkKKwor
ICAgICAgICAgICAgIyBJbnRlcm1lZGlhdGUgZnJhbWUgd2l0aG91dCBhbnkgcHJlY2VkaW5nIHN0
YXJ0IG9mIGZyYWdtZW50YXRpb24KKyAgICAgICAgICAgICMgZnJhbWUuCisgICAgICAgICAgICBj
bGllbnQuc2VuZF9mcmFtZV9vZl9hcmJpdHJhcnlfYnl0ZXMoJ1x4ODBceDgwJywgJycpCisgICAg
ICAgICAgICBjbGllbnQuYXNzZXJ0X3JlY2VpdmVfY2xvc2UoCisgICAgICAgICAgICAgICAgY2xp
ZW50X2Zvcl90ZXN0aW5nLlNUQVRVU19QUk9UT0NPTF9FUlJPUikKKworICAgICAgICBzZWxmLl9y
dW5faHliaV90ZXN0KHRlc3RfZnVuY3Rpb24pCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vbl91bnN1
cHBvcnRlZF9mcmFtZShzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgdGhhdCB0aGUgc2VydmVyIHNl
bmRzIGEgY2xvc2UgZnJhbWUgd2l0aCB1bnN1cHBvcnRlZCBvcGVyYXRpb24KKyAgICAgICAgc3Rh
dHVzIGNvZGUgd2hlbiB0aGUgY2xpZW50IHNlbmRzIGRhdGEgYXNraW5nIHNvbWUgb3BlcmF0aW9u
IHRoYXQgaXMKKyAgICAgICAgbm90IHN1cHBvcnRlZCBieSB0aGUgc2VydmVyLgorICAgICAgICAi
IiIKKworICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbihjbGllbnQpOgorICAgICAgICAgICAgY2xp
ZW50LmNvbm5lY3QoKQorCisgICAgICAgICAgICAjIFRleHQgZnJhbWUgd2l0aCBSU1YzIGJpdCBy
YWlzZWQuCisgICAgICAgICAgICBjbGllbnQuc2VuZF9mcmFtZV9vZl9hcmJpdHJhcnlfYnl0ZXMo
J1x4OTFceDgwJywgJycpCisgICAgICAgICAgICBjbGllbnQuYXNzZXJ0X3JlY2VpdmVfY2xvc2Uo
CisgICAgICAgICAgICAgICAgY2xpZW50X2Zvcl90ZXN0aW5nLlNUQVRVU19VTlNVUFBPUlRFRF9E
QVRBKQorCisgICAgICAgIHNlbGYuX3J1bl9oeWJpX3Rlc3QodGVzdF9mdW5jdGlvbikKKworICAg
IGRlZiB0ZXN0X2Nsb3NlX29uX2ludmFsaWRfZnJhbWUoc2VsZik6CisgICAgICAgICIiIlRlc3Rz
IHRoYXQgdGhlIHNlcnZlciBzZW5kcyBhIGNsb3NlIGZyYW1lIHdpdGggaW52YWxpZCBmcmFtZSBw
YXlsb2FkCisgICAgICAgIGRhdGEgc3RhdHVzIGNvZGUgd2hlbiB0aGUgY2xpZW50IHNlbmRzIGFu
IGludmFsaWQgZnJhbWUgbGlrZSBjb250YWluaW5nCisgICAgICAgIGludmFsaWQgVVRGLTggY2hh
cmFjdGVyLgorICAgICAgICAiIiIKKworICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbihjbGllbnQp
OgorICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKQorCisgICAgICAgICAgICAjIFRleHQgZnJh
bWUgd2l0aCBpbnZhbGlkIFVURi04IHN0cmluZy4KKyAgICAgICAgICAgIGNsaWVudC5zZW5kX21l
c3NhZ2UoJ1x4ODAnLCByYXc9VHJ1ZSkKKyAgICAgICAgICAgIGNsaWVudC5hc3NlcnRfcmVjZWl2
ZV9jbG9zZSgKKyAgICAgICAgICAgICAgICBjbGllbnRfZm9yX3Rlc3RpbmcuU1RBVFVTX0lOVkFM
SURfRlJBTUVfUEFZTE9BRF9EQVRBKQorCisgICAgICAgIHNlbGYuX3J1bl9oeWJpX3Rlc3QodGVz
dF9mdW5jdGlvbikKKworICAgIGRlZiBfcnVuX2h5YmkwMF90ZXN0KHNlbGYsIHRlc3RfZnVuY3Rp
b24pOgorICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9ydW5fc2VydmVyKCkKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpCisKKyAgICAgICAgICAgIGNsaWVudCA9IGNsaWVu
dF9mb3JfdGVzdGluZy5jcmVhdGVfY2xpZW50X2h5YmkwMChzZWxmLl9vcHRpb25zKQorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRlc3RfZnVuY3Rpb24oY2xpZW50KQorICAgICAg
ICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjbGllbnQuY2xvc2Vfc29ja2V0KCkKKyAg
ICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2tpbGxfcHJvY2VzcyhzZXJ2ZXIucGlk
KQorCisgICAgZGVmIHRlc3RfZWNob19oeWJpMDAoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9o
eWJpMDBfdGVzdChfZWNob19jaGVja19wcm9jZWR1cmUpCisKKyAgICBkZWYgdGVzdF9lY2hvX3Nl
cnZlcl9jbG9zZV9oeWJpMDAoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9oeWJpMDBfdGVzdChf
ZWNob19jaGVja19wcm9jZWR1cmVfd2l0aF9nb29kYnllKQorCisgICAgZGVmIF9ydW5faGl4aWU3
NV90ZXN0KHNlbGYsIHRlc3RfZnVuY3Rpb24pOgorICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9ydW5f
c2VydmVyKGFsbG93X2RyYWZ0NzU9VHJ1ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGlt
ZS5zbGVlcCgwLjIpCisKKyAgICAgICAgICAgIGNsaWVudCA9IGNsaWVudF9mb3JfdGVzdGluZy5j
cmVhdGVfY2xpZW50X2hpeGllNzUoc2VsZi5fb3B0aW9ucykKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICB0ZXN0X2Z1bmN0aW9uKGNsaWVudCkKKyAgICAgICAgICAgIGZpbmFsbHk6
CisgICAgICAgICAgICAgICAgY2xpZW50LmNsb3NlX3NvY2tldCgpCisgICAgICAgIGZpbmFsbHk6
CisgICAgICAgICAgICBzZWxmLl9raWxsX3Byb2Nlc3Moc2VydmVyLnBpZCkKKworICAgIGRlZiB0
ZXN0X2VjaG9faGl4aWU3NShzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgdGhhdCB0aGUgc2VydmVy
IGNhbiB0YWxrIGRyYWZ0LWhpeGllLXRoZXdlYnNvY2tldHByb3RvY29sLTc1CisgICAgICAgIHBy
b3RvY29sLgorICAgICAgICAiIiIKKworICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbihjbGllbnQp
OgorICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKQorCisgICAgICAgICAgICBjbGllbnQuc2Vu
ZF9tZXNzYWdlKCd0ZXN0JykKKyAgICAgICAgICAgIGNsaWVudC5hc3NlcnRfcmVjZWl2ZSgndGVz
dCcpCisKKyAgICAgICAgc2VsZi5fcnVuX2hpeGllNzVfdGVzdCh0ZXN0X2Z1bmN0aW9uKQorCisg
ICAgZGVmIHRlc3RfZWNob19zZXJ2ZXJfY2xvc2VfaGl4aWU3NShzZWxmKToKKyAgICAgICAgIiIi
VGVzdHMgdGhhdCB0aGUgc2VydmVyIGNhbiB0YWxrIGRyYWZ0LWhpeGllLXRoZXdlYnNvY2tldHBy
b3RvY29sLTc1CisgICAgICAgIHByb3RvY29sLiBBdCB0aGUgZW5kIG9mIG1lc3NhZ2UgZXhjaGFu
Z2luZywgdGhlIGNsaWVudCBzZW5kcyBhIGtleXdvcmQKKyAgICAgICAgbWVzc2FnZSB0aGF0IHJl
cXVlc3RzIHRoZSBzZXJ2ZXIgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24sIGFuZCB0aGVuCisgICAg
ICAgIGNoZWNrcyBpZiB0aGUgY29ubmVjdGlvbiBpcyByZWFsbHkgY2xvc2VkLgorICAgICAgICAi
IiIKKworICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbihjbGllbnQpOgorICAgICAgICAgICAgY2xp
ZW50LmNvbm5lY3QoKQorCisgICAgICAgICAgICBjbGllbnQuc2VuZF9tZXNzYWdlKCd0ZXN0JykK
KyAgICAgICAgICAgIGNsaWVudC5hc3NlcnRfcmVjZWl2ZSgndGVzdCcpCisKKyAgICAgICAgICAg
IGNsaWVudC5zZW5kX21lc3NhZ2UoX0dPT0RCWUVfTUVTU0FHRSkKKyAgICAgICAgICAgIGNsaWVu
dC5hc3NlcnRfcmVjZWl2ZShfR09PREJZRV9NRVNTQUdFKQorCisgICAgICAgIHNlbGYuX3J1bl9o
aXhpZTc1X3Rlc3QodGVzdF9mdW5jdGlvbikKKworICAgICMgVE9ETyh0b3lvc2hpbSk6IEFkZCB0
ZXN0cyB0byB2ZXJpZnkgaW52YWxpZCBhYnNvbHV0ZSB1cmkgaGFuZGxpbmcgbGlrZQorICAgICMg
aG9zdCB1bm1hdGNoLCBwb3J0IHVubWF0Y2ggYW5kIGludmFsaWQgcG9ydCBkZXNjcmlwdGlvbiAo
JzonIHdpdGhvdXQgcG9ydAorICAgICMgbnVtYmVyKS4KKworICAgIGRlZiB0ZXN0X2Fic29sdXRl
X3VyaShzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgYWJzb2x1dGUgdXJpIHJlcXVlc3QuIiIiCisK
KyAgICAgICAgb3B0aW9ucyA9IHNlbGYuX29wdGlvbnMKKyAgICAgICAgb3B0aW9ucy5yZXNvdXJj
ZSA9ICd3czovL2xvY2FsaG9zdDolZC9lY2hvJyAlIG9wdGlvbnMuc2VydmVyX3BvcnQKKyAgICAg
ICAgc2VsZi5fcnVuX2h5YmlfdGVzdF93aXRoX2NsaWVudF9vcHRpb25zKF9lY2hvX2NoZWNrX3By
b2NlZHVyZSwgb3B0aW9ucykKKworICAgIGRlZiB0ZXN0X29yaWdpbl9jaGVjayhzZWxmKToKKyAg
ICAgICAgIiIiVGVzdHMgaHR0cCBmYWxsYmFjayBvbiBvcmlnaW4gY2hlY2sgZmFpbC4iIiIKKwor
ICAgICAgICBvcHRpb25zID0gc2VsZi5fb3B0aW9ucworICAgICAgICBvcHRpb25zLnJlc291cmNl
ID0gJy9vcmlnaW5fY2hlY2snCisgICAgICAgICMgU2VydmVyIHNob3dzIHdhcm5pbmcgbWVzc2Fn
ZSBmb3IgaHR0cCA0MDMgZmFsbGJhY2suIFRoaXMgd2FybmluZworICAgICAgICAjIG1lc3NhZ2Ug
aXMgY29uZnVzaW5nLiBGb2xsb3dpbmcgcGlwZSBkaXNwb3NlcyB3YXJuaW5nIG1lc3NhZ2VzLgor
ICAgICAgICBzZWxmLnNlcnZlcl9zdGRlcnIgPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgc2Vs
Zi5fcnVuX2h5YmlfaHR0cF9mYWxsYmFja190ZXN0KG9wdGlvbnMsIDQwMykKKworICAgIGRlZiB0
ZXN0X3ZlcnNpb25fY2hlY2soc2VsZik6CisgICAgICAgICIiIlRlc3RzIGh0dHAgZmFsbGJhY2sg
b24gdmVyc2lvbiBjaGVjayBmYWlsLiIiIgorCisgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRp
b25zCisgICAgICAgIG9wdGlvbnMudmVyc2lvbiA9IDk5CisgICAgICAgIHNlbGYuc2VydmVyX3N0
ZGVyciA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICBzZWxmLl9ydW5faHliaV9odHRwX2ZhbGxi
YWNrX3Rlc3Qob3B0aW9ucywgNDAwKQorCisgICAgZGVmIF9jaGVja19leGFtcGxlX2VjaG9fY2xp
ZW50X3Jlc3VsdCgKKyAgICAgICAgc2VsZiwgZXhwZWN0ZWQsIHN0ZG91dGRhdGEsIHN0ZGVycmRh
dGEpOgorICAgICAgICBhY3R1YWwgPSBzdGRvdXRkYXRhLmRlY29kZSgidXRmLTgiKQorICAgICAg
ICBpZiBhY3R1YWwgIT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1Vu
ZXhwZWN0ZWQgcmVzdWx0IG9uIGV4YW1wbGUgZWNobyBjbGllbnQ6ICcKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnJXIgKGV4cGVjdGVkKSB2cyAlciAoYWN0dWFsKScgJQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChleHBlY3RlZCwgYWN0dWFsKSkKKyAgICAgICAgaWYgc3RkZXJy
ZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5leHBlY3Rl
ZCBlcnJvciBtZXNzYWdlIG9uIGV4YW1wbGUgZWNobyAnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2NsaWVudDogJXInICUgc3RkZXJyZGF0YSkKKworICAgIGRlZiB0ZXN0X2V4YW1wbGVf
ZWNob19jbGllbnQoc2VsZik6CisgICAgICAgICIiIlRlc3RzIHRoYXQgdGhlIGVjaG9fY2xpZW50
LnB5IGV4YW1wbGUgY2FuIHRhbGsgd2l0aCB0aGUgc2VydmVyLiIiIgorCisgICAgICAgIHNlcnZl
ciA9IHNlbGYuX3J1bl9zZXJ2ZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0aW1lLnNs
ZWVwKDAuMikKKworICAgICAgICAgICAgY2xpZW50X2NvbW1hbmQgPSBvcy5wYXRoLmpvaW4oCisg
ICAgICAgICAgICAgICAgc2VsZi50b3BfZGlyLCAnZXhhbXBsZScsICdlY2hvX2NsaWVudC5weScp
CisKKyAgICAgICAgICAgIGFyZ3MgPSBbY2xpZW50X2NvbW1hbmQsCisgICAgICAgICAgICAgICAg
ICAgICctcCcsIHN0cihzZWxmLl9vcHRpb25zLnNlcnZlcl9wb3J0KV0KKyAgICAgICAgICAgIGNs
aWVudCA9IHNlbGYuX3J1bl9weXRob25fY29tbWFuZChhcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5Q
SVBFKQorICAgICAgICAgICAgc3Rkb3V0ZGF0YSwgc3RkZXJyZGF0YSA9IGNsaWVudC5jb21tdW5p
Y2F0ZSgpCisgICAgICAgICAgICBleHBlY3RlZCA9ICgnU2VuZDogSGVsbG9cbicgJ1JlY3Y6IEhl
bGxvXG4nCisgICAgICAgICAgICAgICAgdSdTZW5kOiBcdTY1ZTVcdTY3MmNcbicgdSdSZWN2OiBc
dTY1ZTVcdTY3MmNcbicKKyAgICAgICAgICAgICAgICAnU2VuZCBjbG9zZVxuJyAnUmVjdiBhY2tc
bicpCisgICAgICAgICAgICBzZWxmLl9jaGVja19leGFtcGxlX2VjaG9fY2xpZW50X3Jlc3VsdCgK
KyAgICAgICAgICAgICAgICBleHBlY3RlZCwgc3Rkb3V0ZGF0YSwgc3RkZXJyZGF0YSkKKworICAg
ICAgICAgICAgIyBQcm9jZXNzIGEgYmlnIG1lc3NhZ2UgZm9yIHdoaWNoIGV4dGVuZGVkIHBheWxv
YWQgbGVuZ3RoIGlzIHVzZWQuCisgICAgICAgICAgICAjIFRvIGhhbmRsZSBleHRlbmRlZCBwYXls
b2FkIGxlbmd0aCwgd3NfdmVyc2lvbiBhdHRyaWJ1dGUgd2lsbCBiZQorICAgICAgICAgICAgIyBh
Y2Nlc3NlZC4gVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHdzX3ZlcnNpb24gaXMgY29ycmVjdGx5IHNl
dC4KKyAgICAgICAgICAgIGJpZ19tZXNzYWdlID0gJ2EnICogMTAyNAorICAgICAgICAgICAgYXJn
cyA9IFtjbGllbnRfY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgJy1wJywgc3RyKHNlbGYu
X29wdGlvbnMuc2VydmVyX3BvcnQpLAorICAgICAgICAgICAgICAgICAgICAnLW0nLCBiaWdfbWVz
c2FnZV0KKyAgICAgICAgICAgIGNsaWVudCA9IHNlbGYuX3J1bl9weXRob25fY29tbWFuZChhcmdz
LCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgc3Rkb3V0ZGF0YSwgc3RkZXJy
ZGF0YSA9IGNsaWVudC5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICBleHBlY3RlZCA9ICgnU2Vu
ZDogJXNcblJlY3Y6ICVzXG5TZW5kIGNsb3NlXG5SZWN2IGFja1xuJyAlCisgICAgICAgICAgICAg
ICAgICAgICAgICAoYmlnX21lc3NhZ2UsIGJpZ19tZXNzYWdlKSkKKyAgICAgICAgICAgIHNlbGYu
X2NoZWNrX2V4YW1wbGVfZWNob19jbGllbnRfcmVzdWx0KAorICAgICAgICAgICAgICAgIGV4cGVj
dGVkLCBzdGRvdXRkYXRhLCBzdGRlcnJkYXRhKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAg
ICAgc2VsZi5fa2lsbF9wcm9jZXNzKHNlcnZlci5waWQpCisKKworaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90
ZXN0L3Rlc3RfaGFuZHNoYWtlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9oYW5kc2hha2UucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTE4YTY1NmYw
YWQ0YzUzMTgzNWJlMjkzNWU2NThhODFkMzA0Mzc3YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RfaGFuZHNo
YWtlLnB5CkBAIC0wLDAgKzEsMjM4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29w
eXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZvciBoYW5kc2hha2UgbW9kdWxlLiIiIgorCisKK2lt
cG9ydCB1bml0dGVzdAorCitpbXBvcnQgc2V0X3N5c19wYXRoICAjIFVwZGF0ZSBzeXMucGF0aCB0
byBsb2NhdGUgbW9kX3B5d2Vic29ja2V0IG1vZHVsZS4KKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQu
Y29tbW9uIGltcG9ydCBFeHRlbnNpb25QYXJhbWV0ZXIKK2Zyb20gbW9kX3B5d2Vic29ja2V0Lmhh
bmRzaGFrZS5fYmFzZSBpbXBvcnQgZm9ybWF0X2V4dGVuc2lvbnMKK2Zyb20gbW9kX3B5d2Vic29j
a2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgSGFuZHNoYWtlRXhjZXB0aW9uCitmcm9tIG1vZF9w
eXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IHBhcnNlX2V4dGVuc2lvbnMKK2Zyb20g
bW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgdmFsaWRhdGVfc3VicHJvdG9j
b2wKKworCitjbGFzcyBIYW5kc2hha2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIi
QSB1bml0dGVzdCBmb3IgaGFuZHNoYWtlIG1vZHVsZS4iIiIKKworICAgIGRlZiB0ZXN0X3ZhbGlk
YXRlX3N1YnByb3RvY29sKHNlbGYpOgorICAgICAgICAjIHNob3VsZCBzdWNjZWVkLgorICAgICAg
ICB2YWxpZGF0ZV9zdWJwcm90b2NvbCgnc2FtcGxlJywgaGl4aWU9VHJ1ZSkKKyAgICAgICAgdmFs
aWRhdGVfc3VicHJvdG9jb2woJ1NhbXBsZScsIGhpeGllPVRydWUpCisgICAgICAgIHZhbGlkYXRl
X3N1YnByb3RvY29sKCdzYW1wbGVceDdlcHJvdG9jb2wnLCBoaXhpZT1UcnVlKQorICAgICAgICB2
YWxpZGF0ZV9zdWJwcm90b2NvbCgnc2FtcGxlXHgyMHByb3RvY29sJywgaGl4aWU9VHJ1ZSkKKyAg
ICAgICAgdmFsaWRhdGVfc3VicHJvdG9jb2woJ3NhbXBsZScsIGhpeGllPUZhbHNlKQorICAgICAg
ICB2YWxpZGF0ZV9zdWJwcm90b2NvbCgnU2FtcGxlJywgaGl4aWU9RmFsc2UpCisgICAgICAgIHZh
bGlkYXRlX3N1YnByb3RvY29sKCdzYW1wbGVceDdlcHJvdG9jb2wnLCBoaXhpZT1GYWxzZSkKKwor
ICAgICAgICAjIHNob3VsZCBmYWlsLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhIYW5kc2hh
a2VFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX3N1YnByb3Rv
Y29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGl4aWU9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSGFuZHNoYWtlRXhj
ZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9zdWJwcm90b2NvbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZVx4MTlwcm90b2NvbCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhpeGllPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KEhhbmRzaGFrZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVf
c3VicHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzYW1wbGVceDdmcHJvdG9j
b2wnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoaXhpZT1UcnVlKQorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhIYW5kc2hha2VFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRlX3N1YnByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAjICJK
YXBhbiIgaW4gSmFwYW5lc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdSdcdTY1ZTVcdTY3
MmMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoaXhpZT1UcnVlKQorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhIYW5kc2hha2VFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRlX3N1YnByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgaGl4aWU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKEhhbmRzaGFrZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsaWRhdGVfc3VicHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzYW1wbGVc
eDA5cHJvdG9jb2wnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoaXhpZT1GYWxzZSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSGFuZHNoYWtlRXhjZXB0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0ZV9zdWJwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3NhbXBsZVx4MTlwcm90b2NvbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhp
eGllPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhIYW5kc2hha2VFeGNlcHRpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX3N1YnByb3RvY29sLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAnc2FtcGxlXHgyMHByb3RvY29sJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGl4aWU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEhhbmRz
aGFrZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfc3VicHJv
dG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzYW1wbGVceDdmcHJvdG9jb2wnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBoaXhpZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoSGFuZHNoYWtlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0ZV9zdWJwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiSmFwYW4i
IGluIEphcGFuZXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHUnXHU2NWU1XHU2NzJjJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgaGl4aWU9RmFsc2UpCisKKworX1RFU1RfVE9LRU5f
RVhURU5TSU9OX0RBVEEgPSBbCisgICAgKCdmb28nLCBbKCdmb28nLCBbXSldKSwKKyAgICAoJ2Zv
bzsgYmFyJywgWygnZm9vJywgWygnYmFyJywgTm9uZSldKV0pLAorICAgICgnZm9vOyBiYXI9YmF6
JywgWygnZm9vJywgWygnYmFyJywgJ2JheicpXSldKSwKKyAgICAoJ2ZvbzsgYmFyPWJhejsgY2Fy
PWNkcicsIFsoJ2ZvbycsIFsoJ2JhcicsICdiYXonKSwgKCdjYXInLCAnY2RyJyldKV0pLAorICAg
ICgnZm9vOyBiYXI9YmF6LCBjYXI7IGNkcicsCisgICAgIFsoJ2ZvbycsIFsoJ2JhcicsICdiYXon
KV0pLCAoJ2NhcicsIFsoJ2NkcicsIE5vbmUpXSldKSwKKyAgICAoJ2EsIGIsIGMsIGQnLAorICAg
ICBbKCdhJywgW10pLCAoJ2InLCBbXSksICgnYycsIFtdKSwgKCdkJywgW10pXSksCisgICAgXQor
CisKK19URVNUX1FVT1RFRF9FWFRFTlNJT05fREFUQSA9IFsKKyAgICAoJ2ZvbzsgYmFyPSIiJywg
WygnZm9vJywgWygnYmFyJywgJycpXSldKSwKKyAgICAoJ2ZvbzsgYmFyPSIgYmF6ICInLCBbKCdm
b28nLCBbKCdiYXInLCAnIGJheiAnKV0pXSksCisgICAgKCdmb287IGJhcj0iLGJhejsiJywgWygn
Zm9vJywgWygnYmFyJywgJyxiYXo7JyldKV0pLAorICAgICgnZm9vOyBiYXI9IlxcXHJcXFxuYmF6
IicsIFsoJ2ZvbycsIFsoJ2JhcicsICdcclxuYmF6JyldKV0pLAorICAgICgnZm9vOyBiYXI9Ilxc
ImJheiInLCBbKCdmb28nLCBbKCdiYXInLCAnImJheicpXSldKSwKKyAgICAoJ2ZvbzsgYmFyPSJc
eGJiYmF6IicsIFsoJ2ZvbycsIFsoJ2JhcicsICdceGJiYmF6JyldKV0pLAorICAgIF0KKworCitf
VEVTVF9SRURVTkRBTlRfVE9LRU5fRVhURU5TSU9OX0RBVEEgPSBbCisgICAgKCdmb28gXHQgJywg
WygnZm9vJywgW10pXSksCisgICAgKCdmb287IFxyXG4gYmFyJywgWygnZm9vJywgWygnYmFyJywg
Tm9uZSldKV0pLAorICAgICgnZm9vOyBiYXI9XHJcbiBcclxuIGJheicsIFsoJ2ZvbycsIFsoJ2Jh
cicsICdiYXonKV0pXSksCisgICAgKCdmb28gO2JhciA9IGJheiAnLCBbKCdmb28nLCBbKCdiYXIn
LCAnYmF6JyldKV0pLAorICAgICgnZm9vLGJhciwsYmF6JywgWygnZm9vJywgW10pLCAoJ2Jhcics
IFtdKSwgKCdiYXonLCBbXSldKSwKKyAgICBdCisKKworX1RFU1RfUkVEVU5EQU5UX1FVT1RFRF9F
WFRFTlNJT05fREFUQSA9IFsKKyAgICAoJ2ZvbzsgYmFyPSJcclxuIFxyXG4gYmF6IicsIFsoJ2Zv
bycsIFsoJ2JhcicsICcgIGJheicpXSldKSwKKyAgICBdCisKKworY2xhc3MgRXh0ZW5zaW9uc1Bh
cnNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF92ZXJpZnlfZXh0ZW5zaW9u
X2xpc3Qoc2VsZiwgZXhwZWN0ZWRfbGlzdCwgYWN0dWFsX2xpc3QpOgorICAgICAgICAiIiJWZXJp
ZmllcyB0aGF0IEV4dGVuc2lvblBhcmFtZXRlciBvYmplY3RzIGluIGFjdHVhbF9saXN0IGhhdmUg
dGhlCisgICAgICAgIHNhbWUgbWVtYmVycyBhcyBleHRlbnNpb24gZGVmaW5pdGlvbnMgaW4gZXhw
ZWN0ZWRfbGlzdC4gRXh0ZW5zaW9uCisgICAgICAgIGRlZmluaXRpb24gdXNlZCBpbiB0aGlzIHRl
c3QgaXMgYSBwYWlyIG9mIGFuIGV4dGVuc2lvbiBuYW1lIGFuZCBhCisgICAgICAgIHBhcmFtZXRl
ciBkaWN0aW9uYXJ5LgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxl
bihleHBlY3RlZF9saXN0KSwgbGVuKGFjdHVhbF9saXN0KSkKKyAgICAgICAgZm9yIGV4cGVjdGVk
LCBhY3R1YWwgaW4gemlwKGV4cGVjdGVkX2xpc3QsIGFjdHVhbF9saXN0KToKKyAgICAgICAgICAg
IChuYW1lLCBwYXJhbWV0ZXJzKSA9IGV4cGVjdGVkCisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG5hbWUsIGFjdHVhbC5fbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFy
YW1ldGVycywgYWN0dWFsLl9wYXJhbWV0ZXJzKQorCisgICAgZGVmIHRlc3RfcGFyc2Uoc2VsZik6
CisgICAgICAgIGZvciBmb3JtYXR0ZWRfc3RyaW5nLCBkZWZpbml0aW9uIGluIF9URVNUX1RPS0VO
X0VYVEVOU0lPTl9EQVRBOgorICAgICAgICAgICAgc2VsZi5fdmVyaWZ5X2V4dGVuc2lvbl9saXN0
KAorICAgICAgICAgICAgICAgIGRlZmluaXRpb24sIHBhcnNlX2V4dGVuc2lvbnMoZm9ybWF0dGVk
X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFs
bG93X3F1b3RlZF9zdHJpbmc9RmFsc2UpKQorCisgICAgICAgIGZvciBmb3JtYXR0ZWRfc3RyaW5n
LCB1bnVzZWRfZGVmaW5pdGlvbiBpbiBfVEVTVF9RVU9URURfRVhURU5TSU9OX0RBVEE6CisgICAg
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICBIYW5kc2hha2VFeGNl
cHRpb24sIHBhcnNlX2V4dGVuc2lvbnMsIGZvcm1hdHRlZF9zdHJpbmcsIEZhbHNlKQorCisgICAg
ZGVmIHRlc3RfcGFyc2Vfd2l0aF9hbGxvd19xdW90ZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICBm
b3IgZm9ybWF0dGVkX3N0cmluZywgZGVmaW5pdGlvbiBpbiBfVEVTVF9UT0tFTl9FWFRFTlNJT05f
REFUQToKKyAgICAgICAgICAgIHNlbGYuX3ZlcmlmeV9leHRlbnNpb25fbGlzdCgKKyAgICAgICAg
ICAgICAgICBkZWZpbml0aW9uLCBwYXJzZV9leHRlbnNpb25zKGZvcm1hdHRlZF9zdHJpbmcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19xdW90ZWRf
c3RyaW5nPVRydWUpKQorCisgICAgICAgIGZvciBmb3JtYXR0ZWRfc3RyaW5nLCBkZWZpbml0aW9u
IGluIF9URVNUX1FVT1RFRF9FWFRFTlNJT05fREFUQToKKyAgICAgICAgICAgIHNlbGYuX3Zlcmlm
eV9leHRlbnNpb25fbGlzdCgKKyAgICAgICAgICAgICAgICBkZWZpbml0aW9uLCBwYXJzZV9leHRl
bnNpb25zKGZvcm1hdHRlZF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbGxvd19xdW90ZWRfc3RyaW5nPVRydWUpKQorCisgICAgZGVmIHRlc3Rf
cGFyc2VfcmVkdW5kYW50X2RhdGEoc2VsZik6CisgICAgICAgIGZvciAoZm9ybWF0dGVkX3N0cmlu
ZywKKyAgICAgICAgICAgICBkZWZpbml0aW9uKSBpbiBfVEVTVF9SRURVTkRBTlRfVE9LRU5fRVhU
RU5TSU9OX0RBVEE6CisgICAgICAgICAgICBzZWxmLl92ZXJpZnlfZXh0ZW5zaW9uX2xpc3QoCisg
ICAgICAgICAgICAgICAgZGVmaW5pdGlvbiwgcGFyc2VfZXh0ZW5zaW9ucyhmb3JtYXR0ZWRfc3Ry
aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3df
cXVvdGVkX3N0cmluZz1GYWxzZSkpCisKKyAgICAgICAgZm9yIChmb3JtYXR0ZWRfc3RyaW5nLAor
ICAgICAgICAgICAgIGRlZmluaXRpb24pIGluIF9URVNUX1JFRFVOREFOVF9RVU9URURfRVhURU5T
SU9OX0RBVEE6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAg
ICBIYW5kc2hha2VFeGNlcHRpb24sIHBhcnNlX2V4dGVuc2lvbnMsIGZvcm1hdHRlZF9zdHJpbmcs
IEZhbHNlKQorCisgICAgZGVmIHRlc3RfcGFyc2VfcmVkdW5kYW50X2RhdGFfd2l0aF9hbGxvd19x
dW90ZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICBmb3IgKGZvcm1hdHRlZF9zdHJpbmcsCisgICAg
ICAgICAgICAgZGVmaW5pdGlvbikgaW4gX1RFU1RfUkVEVU5EQU5UX1RPS0VOX0VYVEVOU0lPTl9E
QVRBOgorICAgICAgICAgICAgc2VsZi5fdmVyaWZ5X2V4dGVuc2lvbl9saXN0KAorICAgICAgICAg
ICAgICAgIGRlZmluaXRpb24sIHBhcnNlX2V4dGVuc2lvbnMoZm9ybWF0dGVkX3N0cmluZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3F1b3RlZF9z
dHJpbmc9VHJ1ZSkpCisKKyAgICAgICAgZm9yIChmb3JtYXR0ZWRfc3RyaW5nLAorICAgICAgICAg
ICAgIGRlZmluaXRpb24pIGluIF9URVNUX1JFRFVOREFOVF9RVU9URURfRVhURU5TSU9OX0RBVEE6
CisgICAgICAgICAgICBzZWxmLl92ZXJpZnlfZXh0ZW5zaW9uX2xpc3QoCisgICAgICAgICAgICAg
ICAgZGVmaW5pdGlvbiwgcGFyc2VfZXh0ZW5zaW9ucyhmb3JtYXR0ZWRfc3RyaW5nLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfcXVvdGVkX3N0cmlu
Zz1UcnVlKSkKKworICAgIGRlZiB0ZXN0X3BhcnNlX2JhZF9kYXRhKHNlbGYpOgorICAgICAgICBf
VEVTVF9CQURfRVhURU5TSU9OX0RBVEEgPSBbCisgICAgICAgICAgICAoJ2ZvbzsgOyAnKSwKKyAg
ICAgICAgICAgICgnZm9vOyBhIGEnKSwKKyAgICAgICAgICAgICgnZm9vIGZvbycpLAorICAgICAg
ICAgICAgKCcsLCwnKSwKKyAgICAgICAgICAgICgnZm9vOyBiYXI9JyksCisgICAgICAgICAgICAo
J2ZvbzsgYmFyPSJob2dlJyksCisgICAgICAgICAgICAoJ2ZvbzsgYmFyPSJhXHIiJyksCisgICAg
ICAgICAgICAoJ2ZvbzsgYmFyPSJcXFx4ZmYiJyksCisgICAgICAgICAgICAoJ2ZvbzsgYmFyPVxy
YScpLAorICAgICAgICAgICAgXQorCisgICAgICAgIGZvciBmb3JtYXR0ZWRfc3RyaW5nIGluIF9U
RVNUX0JBRF9FWFRFTlNJT05fREFUQToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAor
ICAgICAgICAgICAgICAgIEhhbmRzaGFrZUV4Y2VwdGlvbiwgcGFyc2VfZXh0ZW5zaW9ucywgZm9y
bWF0dGVkX3N0cmluZykKKworCitjbGFzcyBGb3JtYXRFeHRlbnNpb25zVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZXh0ZW5zaW9ucyhzZWxmKToKKyAgICAg
ICAgZm9yIGZvcm1hdHRlZF9zdHJpbmcsIGRlZmluaXRpb25zIGluIF9URVNUX1RPS0VOX0VYVEVO
U0lPTl9EQVRBOgorICAgICAgICAgICAgZXh0ZW5zaW9ucyA9IFtdCisgICAgICAgICAgICBmb3Ig
ZGVmaW5pdGlvbiBpbiBkZWZpbml0aW9uczoKKyAgICAgICAgICAgICAgICAobmFtZSwgcGFyYW1l
dGVycykgPSBkZWZpbml0aW9uCisgICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gRXh0ZW5zaW9u
UGFyYW1ldGVyKG5hbWUpCisgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLl9wYXJhbWV0ZXJzID0g
cGFyYW1ldGVycworICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMuYXBwZW5kKGV4dGVuc2lvbikK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgZm9ybWF0dGVk
X3N0cmluZywgZm9ybWF0X2V4dGVuc2lvbnMoZXh0ZW5zaW9ucykpCisKKworaWYgX19uYW1lX18g
PT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKKworCisjIHZpOnN0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNv
Y2tldC90ZXN0L3Rlc3RfaGFuZHNoYWtlX2RyYWZ0NzUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZV9kcmFmdDc1LnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmI1MDYwZmFiZTYxZjc1ZTdhZGQ4ZWU5MjcxMTBhODA4OTcyZmNkZmIKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJz
b2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZV9kcmFmdDc1LnB5CkBAIC0wLDAgKzEsNDg3IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisj
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZv
ciBoYW5kc2hha2UgbW9kdWxlLiIiIgorCisKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgc2V0
X3N5c19wYXRoICAjIFVwZGF0ZSBzeXMucGF0aCB0byBsb2NhdGUgbW9kX3B5d2Vic29ja2V0IG1v
ZHVsZS4KKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlIGltcG9ydCBkcmFmdDc1IGFz
IGhhbmRzaGFrZQorZnJvbSB0ZXN0IGltcG9ydCBtb2NrCisKKworX0dPT0RfUkVRVUVTVCA9ICgK
KyAgICA4MCwKKyAgICAnL2RlbW8nLAorICAgIHsKKyAgICAgICAgJ1VwZ3JhZGUnOiAnV2ViU29j
a2V0JywKKyAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnVXBncmFkZScsCisgICAgICAgICdIb3N0Jzog
J2V4YW1wbGUuY29tJywKKyAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vZXhhbXBsZS5jb20nLAor
ICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sJzogJ3NhbXBsZScsCisgICAgfSkKKworX0dPT0Rf
UkVTUE9OU0VfREVGQVVMVF9QT1JUID0gKAorICAgICdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQ
cm90b2NvbCBIYW5kc2hha2VcclxuJworICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJworICAg
ICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicKKyAgICAnV2ViU29ja2V0LU9yaWdpbjogaHR0cDov
L2V4YW1wbGUuY29tXHJcbicKKyAgICAnV2ViU29ja2V0LUxvY2F0aW9uOiB3czovL2V4YW1wbGUu
Y29tL2RlbW9cclxuJworICAgICdXZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBsZVxyXG4nCisgICAg
J1xyXG4nKQorCitfR09PRF9SRVNQT05TRV9TRUNVUkUgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBX
ZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisgICAgJ1VwZ3JhZGU6IFdlYlNvY2tl
dFxyXG4nCisgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgICdXZWJTb2NrZXQtT3Jp
Z2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJworICAgICdXZWJTb2NrZXQtTG9jYXRpb246IHdz
czovL2V4YW1wbGUuY29tL2RlbW9cclxuJworICAgICdXZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBs
ZVxyXG4nCisgICAgJ1xyXG4nKQorCitfR09PRF9SRVFVRVNUX05PTkRFRkFVTFRfUE9SVCA9ICgK
KyAgICA4MDgxLAorICAgICcvZGVtbycsCisgICAgeworICAgICAgICAnVXBncmFkZSc6ICdXZWJT
b2NrZXQnLAorICAgICAgICAnQ29ubmVjdGlvbic6ICdVcGdyYWRlJywKKyAgICAgICAgJ0hvc3Qn
OiAnZXhhbXBsZS5jb206ODA4MScsCisgICAgICAgICdPcmlnaW4nOiAnaHR0cDovL2V4YW1wbGUu
Y29tJywKKyAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6ICdzYW1wbGUnLAorICAgIH0pCisK
K19HT09EX1JFU1BPTlNFX05PTkRFRkFVTFRfUE9SVCA9ICgKKyAgICAnSFRUUC8xLjEgMTAxIFdl
YiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKKyAgICAnVXBncmFkZTogV2ViU29ja2V0
XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgJ1dlYlNvY2tldC1Pcmln
aW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nCisgICAgJ1dlYlNvY2tldC1Mb2NhdGlvbjogd3M6
Ly9leGFtcGxlLmNvbTo4MDgxL2RlbW9cclxuJworICAgICdXZWJTb2NrZXQtUHJvdG9jb2w6IHNh
bXBsZVxyXG4nCisgICAgJ1xyXG4nKQorCitfR09PRF9SRVNQT05TRV9TRUNVUkVfTk9OREVGID0g
KAorICAgICdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJwor
ICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJworICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJc
bicKKyAgICAnV2ViU29ja2V0LU9yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicKKyAgICAn
V2ViU29ja2V0LUxvY2F0aW9uOiB3c3M6Ly9leGFtcGxlLmNvbTo4MDgxL2RlbW9cclxuJworICAg
ICdXZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBsZVxyXG4nCisgICAgJ1xyXG4nKQorCitfR09PRF9S
RVFVRVNUX05PX1BST1RPQ09MID0gKAorICAgIDgwLAorICAgICcvZGVtbycsCisgICAgeworICAg
ICAgICAnVXBncmFkZSc6ICdXZWJTb2NrZXQnLAorICAgICAgICAnQ29ubmVjdGlvbic6ICdVcGdy
YWRlJywKKyAgICAgICAgJ0hvc3QnOiAnZXhhbXBsZS5jb20nLAorICAgICAgICAnT3JpZ2luJzog
J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgfSkKKworX0dPT0RfUkVTUE9OU0VfTk9fUFJPVE9D
T0wgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxy
XG4nCisgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nCisgICAgJ0Nvbm5lY3Rpb246IFVwZ3Jh
ZGVcclxuJworICAgICdXZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJwor
ICAgICdXZWJTb2NrZXQtTG9jYXRpb246IHdzOi8vZXhhbXBsZS5jb20vZGVtb1xyXG4nCisgICAg
J1xyXG4nKQorCitfR09PRF9SRVFVRVNUX1dJVEhfT1BUSU9OQUxfSEVBREVSUyA9ICgKKyAgICA4
MCwKKyAgICAnL2RlbW8nLAorICAgIHsKKyAgICAgICAgJ1VwZ3JhZGUnOiAnV2ViU29ja2V0JywK
KyAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnVXBncmFkZScsCisgICAgICAgICdIb3N0JzogJ2V4YW1w
bGUuY29tJywKKyAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vZXhhbXBsZS5jb20nLAorICAgICAg
ICAnV2ViU29ja2V0LVByb3RvY29sJzogJ3NhbXBsZScsCisgICAgICAgICdBS2V5JzogJ0FWYWx1
ZScsCisgICAgICAgICdFbXB0eVZhbHVlJzogJycsCisgICAgfSkKKworX0JBRF9SRVFVRVNUUyA9
ICgKKyAgICAoICAjIEhUVFAgcmVxdWVzdAorICAgICAgICA4MCwKKyAgICAgICAgJy9kZW1vJywK
KyAgICAgICAgeworICAgICAgICAgICAgJ0hvc3QnOiAnd3d3Lmdvb2dsZS5jb20nLAorICAgICAg
ICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKE1hY2ludG9zaDsgVTsgSW50ZWwgTWFj
IE9TIFggMTAuNTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICcgZW4tVVM7IHJ2OjEuOS4x
LjMpIEdlY2tvLzIwMDkwODI0IEZpcmVmb3gvMy41LjMnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICcgR1RCNiBHVEJBJywKKyAgICAgICAgICAgICdBY2NlcHQnOiAndGV4dC9odG1sLGFwcGxp
Y2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksJworICAgICAgICAgICAgICAg
ICAgICAgICcqLyo7cT0wLjgnLAorICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6ICdlbi11
cyxlbjtxPTAuNScsCisgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAsZGVmbGF0
ZScsCisgICAgICAgICAgICAnQWNjZXB0LUNoYXJzZXQnOiAnSVNPLTg4NTktMSx1dGYtODtxPTAu
NywqO3E9MC43JywKKyAgICAgICAgICAgICdLZWVwLUFsaXZlJzogJzMwMCcsCisgICAgICAgICAg
ICAnQ29ubmVjdGlvbic6ICdrZWVwLWFsaXZlJywKKyAgICAgICAgfSksCisgICAgKCAgIyBNaXNz
aW5nIFVwZ3JhZGUKKyAgICAgICAgODAsCisgICAgICAgICcvZGVtbycsCisgICAgICAgIHsKKyAg
ICAgICAgICAgICdDb25uZWN0aW9uJzogJ1VwZ3JhZGUnLAorICAgICAgICAgICAgJ0hvc3QnOiAn
ZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vZXhhbXBsZS5jb20n
LAorICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6ICdzYW1wbGUnLAorICAgICAgICB9
KSwKKyAgICAoICAjIFdyb25nIFVwZ3JhZGUKKyAgICAgICAgODAsCisgICAgICAgICcvZGVtbycs
CisgICAgICAgIHsKKyAgICAgICAgICAgICdVcGdyYWRlJzogJ05vbldlYlNvY2tldCcsCisgICAg
ICAgICAgICAnQ29ubmVjdGlvbic6ICdVcGdyYWRlJywKKyAgICAgICAgICAgICdIb3N0JzogJ2V4
YW1wbGUuY29tJywKKyAgICAgICAgICAgICdPcmlnaW4nOiAnaHR0cDovL2V4YW1wbGUuY29tJywK
KyAgICAgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOiAnc2FtcGxlJywKKyAgICAgICAgfSks
CisgICAgKCAgIyBFbXB0eSBXZWJTb2NrZXQtUHJvdG9jb2wKKyAgICAgICAgODAsCisgICAgICAg
ICcvZGVtbycsCisgICAgICAgIHsKKyAgICAgICAgICAgICdVcGdyYWRlJzogJ1dlYlNvY2tldCcs
CisgICAgICAgICAgICAnQ29ubmVjdGlvbic6ICdVcGdyYWRlJywKKyAgICAgICAgICAgICdIb3N0
JzogJ2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdPcmlnaW4nOiAnaHR0cDovL2V4YW1wbGUu
Y29tJywKKyAgICAgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOiAnJywKKyAgICAgICAgfSks
CisgICAgKCAgIyBXcm9uZyBwb3J0IG51bWJlciBmb3JtYXQKKyAgICAgICAgODAsCisgICAgICAg
ICcvZGVtbycsCisgICAgICAgIHsKKyAgICAgICAgICAgICdVcGdyYWRlJzogJ1dlYlNvY2tldCcs
CisgICAgICAgICAgICAnQ29ubmVjdGlvbic6ICdVcGdyYWRlJywKKyAgICAgICAgICAgICdIb3N0
JzogJ2V4YW1wbGUuY29tOjB4NTAnLAorICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vZXhh
bXBsZS5jb20nLAorICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6ICdzYW1wbGUnLAor
ICAgICAgICB9KSwKKyAgICAoICAjIEhlYWRlci9jb25uZWN0aW9uIHBvcnQgbWlzbWF0Y2gKKyAg
ICAgICAgODA4MCwKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ1Vw
Z3JhZGUnOiAnV2ViU29ja2V0JywKKyAgICAgICAgICAgICdDb25uZWN0aW9uJzogJ1VwZ3JhZGUn
LAorICAgICAgICAgICAgJ0hvc3QnOiAnZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ09yaWdp
bic6ICdodHRwOi8vZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2Nv
bCc6ICdzYW1wbGUnLAorICAgICAgICB9KSwKKyAgICAoICAjIElsbGVnYWwgV2ViU29ja2V0LVBy
b3RvY29sCisgICAgICAgIDgwLAorICAgICAgICAnL2RlbW8nLAorICAgICAgICB7CisgICAgICAg
ICAgICAnVXBncmFkZSc6ICdXZWJTb2NrZXQnLAorICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOiAn
VXBncmFkZScsCisgICAgICAgICAgICAnSG9zdCc6ICdleGFtcGxlLmNvbScsCisgICAgICAgICAg
ICAnT3JpZ2luJzogJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgICAgICAnV2ViU29ja2V0
LVByb3RvY29sJzogJ2lsbGVnYWxceDA5cHJvdG9jb2wnLAorICAgICAgICB9KSkKKworX1NUUklD
VExZX0dPT0RfUkVRVUVTVFMgPSAoCisgICAgKAorICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4x
XHJcbicsCisgICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKKyAgICAgICAgJ0Nvbm5l
Y3Rpb246IFVwZ3JhZGVcclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCisg
ICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnXHJcbics
CisgICAgKSwKKyAgICAoICAjIFdlYlNvY2tldC1Qcm90b2NvbAorICAgICAgICAnR0VUIC9kZW1v
IEhUVFAvMS4xXHJcbicsCisgICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKKyAgICAg
ICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29t
XHJcbicsCisgICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAg
ICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJywKKyAgICAgICAgJ1xyXG4nLAorICAg
ICksCisgICAgKCAgIyBXZWJTb2NrZXQtUHJvdG9jb2wgYW5kIENvb2tpZQorICAgICAgICAnR0VU
IC9kZW1vIEhUVFAvMS4xXHJcbicsCisgICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywK
KyAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1w
bGUuY29tXHJcbicsCisgICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAor
ICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJywKKyAgICAgICAgJ0Nvb2tp
ZTogeHl6XHJcbicKKyAgICAgICAgJ1xyXG4nLAorICAgICksCisgICAgKCAgIyBDb29raWUKKyAg
ICAgICAgJ0dFVCAvZGVtbyBIVFRQLzEuMVxyXG4nLAorICAgICAgICAnVXBncmFkZTogV2ViU29j
a2V0XHJcbicsCisgICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCisgICAgICAgICdI
b3N0OiBleGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5j
b21cclxuJywKKyAgICAgICAgJ0Nvb2tpZTogYWJjL3h5elxyXG4nCisgICAgICAgICdDb29raWUy
OiAkVmVyc2lvbj0xXHJcbicKKyAgICAgICAgJ0Nvb2tpZTogYWJjXHJcbicKKyAgICAgICAgJ1xy
XG4nLAorICAgICksCisgICAgKAorICAgICAgICAnR0VUIC8gSFRUUC8xLjFcclxuJywKKyAgICAg
ICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nLAorICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFk
ZVxyXG4nLAorICAgICAgICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywKKyAgICAgICAgJ09yaWdp
bjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdcclxuJywKKyAgICApLAorKQor
CitfTk9UX1NUUklDVExZX0dPT0RfUkVRVUVTVFMgPSAoCisgICAgKCAgIyBFeHRyYSBzcGFjZSBh
ZnRlciBHRVQKKyAgICAgICAgJ0dFVCAgL2RlbW8gSFRUUC8xLjFcclxuJywKKyAgICAgICAgJ1Vw
Z3JhZGU6IFdlYlNvY2tldFxyXG4nLAorICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4n
LAorICAgICAgICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywKKyAgICAgICAgJ09yaWdpbjogaHR0
cDovL2V4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdcclxuJywKKyAgICApLAorICAgICggICMg
UmVzb3VyY2UgbmFtZSBkb2Vzbid0IHN0YXQgd2l0aCAnLycKKyAgICAgICAgJ0dFVCBkZW1vIEhU
VFAvMS4xXHJcbicsCisgICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKKyAgICAgICAg
J0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJc
bicsCisgICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAn
XHJcbicsCisgICAgKSwKKyAgICAoICAjIE5vIHNwYWNlIGFmdGVyIDoKKyAgICAgICAgJ0dFVCAv
ZGVtbyBIVFRQLzEuMVxyXG4nLAorICAgICAgICAnVXBncmFkZTpXZWJTb2NrZXRcclxuJywKKyAg
ICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUu
Y29tXHJcbicsCisgICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAg
ICAgICAnXHJcbicsCisgICAgKSwKKyAgICAoICAjIExvd2VyIGNhc2UgVXBncmFkZSBoZWFkZXIK
KyAgICAgICAgJ0dFVCAvZGVtbyBIVFRQLzEuMVxyXG4nLAorICAgICAgICAndXBncmFkZTogV2Vi
U29ja2V0XHJcbicsCisgICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCisgICAgICAg
ICdIb3N0OiBleGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBs
ZS5jb21cclxuJywKKyAgICAgICAgJ1xyXG4nLAorICAgICksCisgICAgKCAgIyBDb25uZWN0aW9u
IGNvbWVzIGJlZm9yZSBVcGdyYWRlCisgICAgICAgICdHRVQgL2RlbW8gSFRUUC8xLjFcclxuJywK
KyAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKKyAgICAgICAgJ1VwZ3JhZGU6IFdl
YlNvY2tldFxyXG4nLAorICAgICAgICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywKKyAgICAgICAg
J09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdcclxuJywKKyAgICAp
LAorICAgICggICMgT3JpZ2luIGNvbWVzIGJlZm9yZSBIb3N0CisgICAgICAgICdHRVQgL2RlbW8g
SFRUUC8xLjFcclxuJywKKyAgICAgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nLAorICAgICAg
ICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAorICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhh
bXBsZS5jb21cclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCisgICAgICAg
ICdcclxuJywKKyAgICApLAorICAgICggICMgSG9zdCBjb250aW51ZWQgdG8gdGhlIG5leHQgbGlu
ZQorICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCisgICAgICAgICdVcGdyYWRlOiBX
ZWJTb2NrZXRcclxuJywKKyAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKKyAgICAg
ICAgJ0hvc3Q6IGV4YW1wbGVcclxuJywKKyAgICAgICAgJyAuY29tXHJcbicsCisgICAgICAgICdP
cmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnXHJcbicsCisgICAgKSwK
KyAgICAoICMgQ29va2llIGNvbWVzIGJlZm9yZSBXZWJTb2NrZXQtUHJvdG9jb2wKKyAgICAgICAg
J0dFVCAvZGVtbyBIVFRQLzEuMVxyXG4nLAorICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJc
bicsCisgICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCisgICAgICAgICdIb3N0OiBl
eGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxu
JywKKyAgICAgICAgJ0Nvb2tpZTogeHl6XHJcbicKKyAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2Nv
bDogc2FtcGxlXHJcbicsCisgICAgICAgICdcclxuJywKKyAgICApLAorICAgICggICMgVW5rbm93
biBoZWFkZXIKKyAgICAgICAgJ0dFVCAvZGVtbyBIVFRQLzEuMVxyXG4nLAorICAgICAgICAnVXBn
cmFkZTogV2ViU29ja2V0XHJcbicsCisgICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbics
CisgICAgICAgICdIb3N0OiBleGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnT3JpZ2luOiBodHRw
Oi8vZXhhbXBsZS5jb21cclxuJywKKyAgICAgICAgJ0NvbnRlbnQtVHlwZTogdGV4dC9odG1sXHJc
bicKKyAgICAgICAgJ1xyXG4nLAorICAgICksCisgICAgKCAgIyBDb29raWUgd2l0aCBjb250aW51
YXRpb24gbGluZXMKKyAgICAgICAgJ0dFVCAvZGVtbyBIVFRQLzEuMVxyXG4nLAorICAgICAgICAn
VXBncmFkZTogV2ViU29ja2V0XHJcbicsCisgICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJc
bicsCisgICAgICAgICdIb3N0OiBleGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnT3JpZ2luOiBo
dHRwOi8vZXhhbXBsZS5jb21cclxuJywKKyAgICAgICAgJ0Nvb2tpZTogeHl6XHJcbicsCisgICAg
ICAgICcgYWJjXHJcbicsCisgICAgICAgICcgZGVmZ1xyXG4nLAorICAgICAgICAnXHJcbicsCisg
ICAgKSwKKyAgICAoICAjIFdyb25nLWNhc2UgY29va2llCisgICAgICAgICdHRVQgL2RlbW8gSFRU
UC8xLjFcclxuJywKKyAgICAgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nLAorICAgICAgICAn
Q29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAorICAgICAgICAnSG9zdDogZXhhbXBsZS5jb21cclxu
JywKKyAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdj
b29raWU6IGFiYy94eXpcclxuJworICAgICAgICAnXHJcbicsCisgICAgKSwKKyAgICAoICAjIENv
b2tpZSwgbm8gc3BhY2UgYWZ0ZXIgY29sb24KKyAgICAgICAgJ0dFVCAvZGVtbyBIVFRQLzEuMVxy
XG4nLAorICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicsCisgICAgICAgICdDb25uZWN0
aW9uOiBVcGdyYWRlXHJcbicsCisgICAgICAgICdIb3N0OiBleGFtcGxlLmNvbVxyXG4nLAorICAg
ICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywKKyAgICAgICAgJ0Nvb2tpZTph
YmMveHl6XHJcbicKKyAgICAgICAgJ1xyXG4nLAorICAgICksCispCisKKworZGVmIF9jcmVhdGVf
cmVxdWVzdChyZXF1ZXN0X2RlZik6CisgICAgY29ubiA9IG1vY2suTW9ja0Nvbm4oJycpCisgICAg
Y29ubi5sb2NhbF9hZGRyID0gKCcwLjAuMC4wJywgcmVxdWVzdF9kZWZbMF0pCisgICAgcmV0dXJu
IG1vY2suTW9ja1JlcXVlc3QoCisgICAgICAgICAgICB1cmk9cmVxdWVzdF9kZWZbMV0sCisgICAg
ICAgICAgICBoZWFkZXJzX2luPXJlcXVlc3RfZGVmWzJdLAorICAgICAgICAgICAgY29ubmVjdGlv
bj1jb25uKQorCisKK2RlZiBfY3JlYXRlX2dldF9tZW1vcml6ZWRfbGluZXMobGluZXMpOgorICAg
ICIiIkNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGdpdmVuIHN0cmluZy4iIiIK
KworICAgIGRlZiBnZXRfbWVtb3JpemVkX2xpbmVzKCk6CisgICAgICAgIHJldHVybiBsaW5lcwor
ICAgIHJldHVybiBnZXRfbWVtb3JpemVkX2xpbmVzCisKKworZGVmIF9jcmVhdGVfcmVxdWVzdHNf
d2l0aF9saW5lcyhyZXF1ZXN0X2xpbmVzX3NldCk6CisgICAgcmVxdWVzdHMgPSBbXQorICAgIGZv
ciBsaW5lcyBpbiByZXF1ZXN0X2xpbmVzX3NldDoKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVf
cmVxdWVzdChfR09PRF9SRVFVRVNUKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24uZ2V0X21l
bW9yaXplZF9saW5lcyA9IF9jcmVhdGVfZ2V0X21lbW9yaXplZF9saW5lcygKKyAgICAgICAgICAg
ICAgICBsaW5lcykKKyAgICAgICAgcmVxdWVzdHMuYXBwZW5kKHJlcXVlc3QpCisgICAgcmV0dXJu
IHJlcXVlc3RzCisKKworY2xhc3MgSGFuZHNoYWtlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgICIiIkEgdW5pdHRlc3QgZm9yIGRyYWZ0NzUgbW9kdWxlLiIiIgorCisgICAgZGVmIHRlc3Rf
Z29vZF9yZXF1ZXN0X2RlZmF1bHRfcG9ydChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVh
dGVfcmVxdWVzdChfR09PRF9SRVFVRVNUKQorICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNoYWtl
LkhhbmRzaGFrZXIocmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgaGFuZHNoYWtlci5kb19oYW5k
c2hha2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9HT09EX1JFU1BPTlNFX0RFRkFVTFRf
UE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRl
bl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9kZW1vJywgcmVxdWVzdC53c19y
ZXNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaHR0cDovL2V4YW1wbGUuY29tJywg
cmVxdWVzdC53c19vcmlnaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3dzOi8vZXhhbXBs
ZS5jb20vZGVtbycsIHJlcXVlc3Qud3NfbG9jYXRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ3NhbXBsZScsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9nb29kX3Jl
cXVlc3Rfc2VjdXJlX2RlZmF1bHRfcG9ydChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVh
dGVfcmVxdWVzdChfR09PRF9SRVFVRVNUKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ubG9j
YWxfYWRkciA9ICgnMC4wLjAuMCcsIDQ0MykKKyAgICAgICAgcmVxdWVzdC5pc19odHRwc18gPSBU
cnVlCisgICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0
Y2hlcigpKQorICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoX0dPT0RfUkVTUE9OU0VfU0VDVVJFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnc2FtcGxlJywgcmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRlZiB0ZXN0X2dv
b2RfcmVxdWVzdF9ub25kZWZhdWx0X3BvcnQoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3Jl
YXRlX3JlcXVlc3QoX0dPT0RfUkVRVUVTVF9OT05ERUZBVUxUX1BPUlQpCisgICAgICAgIGhhbmRz
aGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICBo
YW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0Rf
UkVTUE9OU0VfTk9OREVGQVVMVF9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVl
c3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
c2FtcGxlJywgcmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVz
dF9zZWN1cmVfbm9uX2RlZmF1bHRfcG9ydChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVh
dGVfcmVxdWVzdChfR09PRF9SRVFVRVNUX05PTkRFRkFVTFRfUE9SVCkKKyAgICAgICAgcmVxdWVz
dC5pc19odHRwc18gPSBUcnVlCisgICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNo
YWtlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0RfUkVTUE9OU0VfU0VDVVJFX05PTkRFRiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRh
KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NhbXBsZScsIHJlcXVlc3Qud3NfcHJvdG9j
b2wpCisKKyAgICBkZWYgdGVzdF9nb29kX3JlcXVlc3RfZGVmYXVsdF9ub19wcm90b2NvbChzZWxm
KToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUX05PX1BS
T1RPQ09MKQorICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rp
c3BhdGNoZXIoKSkKKyAgICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKF9HT09EX1JFU1BPTlNFX05PX1BST1RPQ09MLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChOb25lLCByZXF1ZXN0LndzX3Byb3RvY29sKQorCisgICAgZGVmIHRl
c3RfZ29vZF9yZXF1ZXN0X29wdGlvbmFsX2hlYWRlcnMoc2VsZik6CisgICAgICAgIHJlcXVlc3Qg
PSBfY3JlYXRlX3JlcXVlc3QoX0dPT0RfUkVRVUVTVF9XSVRIX09QVElPTkFMX0hFQURFUlMpCisg
ICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigp
KQorICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ0FWYWx1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJz
X2luWydBS2V5J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzX2luWydFbXB0eVZhbHVlJ10pCisKKyAgICBkZWYg
dGVzdF9iYWRfcmVxdWVzdHMoc2VsZik6CisgICAgICAgIGZvciByZXF1ZXN0IGluIG1hcChfY3Jl
YXRlX3JlcXVlc3QsIF9CQURfUkVRVUVTVFMpOgorICAgICAgICAgICAgaGFuZHNoYWtlciA9IGhh
bmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgaGFuZHNoYWtlLkhhbmRzaGFrZUV4Y2Vw
dGlvbiwgaGFuZHNoYWtlci5kb19oYW5kc2hha2UpCisKKyAgICBkZWYgdGVzdF9zdHJpY3RseV9n
b29kX3JlcXVlc3RzKHNlbGYpOgorICAgICAgICBmb3IgcmVxdWVzdCBpbiBfY3JlYXRlX3JlcXVl
c3RzX3dpdGhfbGluZXMoX1NUUklDVExZX0dPT0RfUkVRVUVTVFMpOgorICAgICAgICAgICAgc3Ry
aWN0X2hhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNw
YXRjaGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRydWUpCisgICAgICAgICAgICBzdHJpY3RfaGFuZHNoYWtlci5kb19oYW5kc2hha2Uo
KQorCisgICAgZGVmIHRlc3Rfbm90X3N0cmljdGx5X2dvb2RfcmVxdWVzdHMoc2VsZik6CisgICAg
ICAgIGZvciByZXF1ZXN0IGluIF9jcmVhdGVfcmVxdWVzdHNfd2l0aF9saW5lcygKKyAgICAgICAg
ICAgIF9OT1RfU1RSSUNUTFlfR09PRF9SRVFVRVNUUyk6CisgICAgICAgICAgICBzdHJpY3RfaGFu
ZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5IYW5kc2hha2VF
eGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3RfaGFuZHNoYWtl
ci5kb19oYW5kc2hha2UpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0
dGVzdC5tYWluKCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RfaGFuZHNoYWtl
X2h5YmkucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0X2hhbmRzaGFrZV9oeWJpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2ZGMwOTkwYWFiNTEyMzI4
YTYxNjZhMjk4MGFlNDYwOWY1NWI2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZV9oeWJp
LnB5CkBAIC0wLDAgKzEsNDA1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJp
Z2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKKyIiIlRlc3RzIGZvciBoYW5kc2hha2UgbW9kdWxlLiIiIgorCisKK2ltcG9y
dCB1bml0dGVzdAorCitpbXBvcnQgc2V0X3N5c19wYXRoICAjIFVwZGF0ZSBzeXMucGF0aCB0byBs
b2NhdGUgbW9kX3B5d2Vic29ja2V0IG1vZHVsZS4KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9y
dCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgQWJv
cnRlZEJ5VXNlckV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNl
IGltcG9ydCBIYW5kc2hha2VFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFr
ZS5fYmFzZSBpbXBvcnQgVmVyc2lvbkV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFu
ZHNoYWtlLmh5YmkgaW1wb3J0IEhhbmRzaGFrZXIKKworaW1wb3J0IG1vY2sKKworCitjbGFzcyBS
ZXF1ZXN0RGVmaW5pdGlvbihvYmplY3QpOgorICAgICIiIkEgY2xhc3MgZm9yIGhvbGRpbmcgZGF0
YSBmb3IgY29uc3RydWN0aW5nIG9wZW5pbmcgaGFuZHNoYWtlIHN0cmluZ3MgZm9yCisgICAgdGVz
dGluZyB0aGUgb3BlbmluZyBoYW5kc2hha2UgcHJvY2Vzc29yLgorICAgICIiIgorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIG1ldGhvZCwgdXJpLCBoZWFkZXJzKToKKyAgICAgICAgc2VsZi5tZXRo
b2QgPSBtZXRob2QKKyAgICAgICAgc2VsZi51cmkgPSB1cmkKKyAgICAgICAgc2VsZi5oZWFkZXJz
ID0gaGVhZGVycworCisKK2RlZiBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKToKKyAgICByZXR1
cm4gUmVxdWVzdERlZmluaXRpb24oCisgICAgICAgICdHRVQnLCAnL2RlbW8nLAorICAgICAgICB7
J0hvc3QnOiAnc2VydmVyLmV4YW1wbGUuY29tJywKKyAgICAgICAgICdVcGdyYWRlJzogJ3dlYnNv
Y2tldCcsCisgICAgICAgICAnQ29ubmVjdGlvbic6ICdVcGdyYWRlJywKKyAgICAgICAgICdTZWMt
V2ViU29ja2V0LUtleSc6ICdkR2hsSUhOaGJYQnNaU0J1YjI1alpRPT0nLAorICAgICAgICAgJ1Nl
Yy1XZWJTb2NrZXQtVmVyc2lvbic6ICcxMycsCisgICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9l
eGFtcGxlLmNvbSd9KQorCisKK2RlZiBfY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9kZWYpOgorICAg
IGNvbm4gPSBtb2NrLk1vY2tDb25uKCcnKQorICAgIHJldHVybiBtb2NrLk1vY2tSZXF1ZXN0KAor
ICAgICAgICBtZXRob2Q9cmVxdWVzdF9kZWYubWV0aG9kLAorICAgICAgICB1cmk9cmVxdWVzdF9k
ZWYudXJpLAorICAgICAgICBoZWFkZXJzX2luPXJlcXVlc3RfZGVmLmhlYWRlcnMsCisgICAgICAg
IGNvbm5lY3Rpb249Y29ubikKKworCitkZWYgX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVlc3QpOgor
ICAgIGhhbmRzaGFrZXIgPSBIYW5kc2hha2VyKHJlcXVlc3QsIG1vY2suTW9ja0Rpc3BhdGNoZXIo
KSkKKyAgICByZXR1cm4gaGFuZHNoYWtlcgorCisKK2NsYXNzIFN1YnByb3RvY29sQ2hvb3NpbmdE
aXNwYXRjaGVyKG9iamVjdCk6CisgICAgIiIiQSBkaXNwYXRjaGVyIGZvciB0ZXN0aW5nLiBUaGlz
IGRpc3BhdGNoZXIgc2V0cyB0aGUgaS10aCBzdWJwcm90b2NvbAorICAgIG9mIHJlcXVlc3RlZCBv
bmVzIHRvIHdzX3Byb3RvY29sIHdoZXJlIGkgaXMgZ2l2ZW4gb24gY29uc3RydWN0aW9uIGFzIGlu
ZGV4CisgICAgYXJndW1lbnQuIElmIGluZGV4IGlzIG5lZ2F0aXZlLCBkZWZhdWx0X3ZhbHVlIHdp
bGwgYmUgc2V0IHRvIHdzX3Byb3RvY29sLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGluZGV4LCBkZWZhdWx0X3ZhbHVlPU5vbmUpOgorICAgICAgICBzZWxmLmluZGV4ID0gaW5k
ZXgKKyAgICAgICAgc2VsZi5kZWZhdWx0X3ZhbHVlID0gZGVmYXVsdF92YWx1ZQorCisgICAgZGVm
IGRvX2V4dHJhX2hhbmRzaGFrZShzZWxmLCBjb25uX2NvbnRleHQpOgorICAgICAgICBpZiBzZWxm
LmluZGV4ID49IDA6CisgICAgICAgICAgICBjb25uX2NvbnRleHQud3NfcHJvdG9jb2wgPSBjb25u
X2NvbnRleHQud3NfcmVxdWVzdGVkX3Byb3RvY29sc1sKKyAgICAgICAgICAgICAgICBzZWxmLmlu
ZGV4XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29ubl9jb250ZXh0LndzX3Byb3RvY29s
ID0gc2VsZi5kZWZhdWx0X3ZhbHVlCisKKyAgICBkZWYgdHJhbnNmZXJfZGF0YShzZWxmLCBjb25u
X2NvbnRleHQpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgSGFuZHNoYWtlQWJvcnRlZEV4Y2Vw
dGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBBYm9ydGluZ0Rpc3BhdGNoZXIo
b2JqZWN0KToKKyAgICAiIiJBIGRpc3BhdGNoZXIgZm9yIHRlc3RpbmcuIFRoaXMgZGlzcGF0Y2hl
ciByYWlzZXMgYW4gZXhjZXB0aW9uIGluCisgICAgZG9fZXh0cmFfaGFuZHNoYWtlIHRvIHJlamVj
dCB0aGUgcmVxdWVzdC4KKyAgICAiIiIKKworICAgIGRlZiBkb19leHRyYV9oYW5kc2hha2Uoc2Vs
ZiwgY29ubl9jb250ZXh0KToKKyAgICAgICAgcmFpc2UgSGFuZHNoYWtlQWJvcnRlZEV4Y2VwdGlv
bignQW4gZXhjZXB0aW9uIHRvIHJlamVjdCB0aGUgcmVxdWVzdCcpCisKKyAgICBkZWYgdHJhbnNm
ZXJfZGF0YShzZWxmLCBjb25uX2NvbnRleHQpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgQWJv
cnRlZEJ5VXNlckRpc3BhdGNoZXIob2JqZWN0KToKKyAgICAiIiJBIGRpc3BhdGNoZXIgZm9yIHRl
c3RpbmcuIFRoaXMgZGlzcGF0Y2hlciByYWlzZXMgYW4KKyAgICBBYm9ydGVkQnlVc2VyRXhjZXB0
aW9uIGluIGRvX2V4dHJhX2hhbmRzaGFrZSB0byByZWplY3QgdGhlIHJlcXVlc3QuCisgICAgIiIi
CisKKyAgICBkZWYgZG9fZXh0cmFfaGFuZHNoYWtlKHNlbGYsIGNvbm5fY29udGV4dCk6CisgICAg
ICAgIHJhaXNlIEFib3J0ZWRCeVVzZXJFeGNlcHRpb24oJ0FuIEFib3J0ZWRCeVVzZXJFeGNlcHRp
b24gdG8gcmVqZWN0IHRoZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3JlcXVlc3QnKQorCisgICAgZGVmIHRyYW5zZmVyX2RhdGEoc2VsZiwgY29ubl9jb250ZXh0KToK
KyAgICAgICAgcGFzcworCisKK19FWFBFQ1RFRF9SRVNQT05TRSA9ICgKKyAgICAnSFRUUC8xLjEg
MTAxIFN3aXRjaGluZyBQcm90b2NvbHNcclxuJworICAgICdVcGdyYWRlOiB3ZWJzb2NrZXRcclxu
JworICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicKKyAgICAnU2VjLVdlYlNvY2tldC1BY2Nl
cHQ6IHMzcFBMTUJpVHhhUTlrWUd6emhaUmJLK3hPbz1cclxuXHJcbicpCisKKworY2xhc3MgSGFu
ZHNoYWtlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkEgdW5pdHRlc3QgZm9yIGRy
YWZ0LWlldGYtaHliaS10aGV3ZWJzb2NrZXRwcm90b2NvbC0wNiBhbmQgbGF0ZXIKKyAgICBoYW5k
c2hha2UgcHJvY2Vzc29yLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfZG9faGFuZHNoYWtlKHNl
bGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9jcmVhdGVfZ29vZF9yZXF1
ZXN0X2RlZigpKQorICAgICAgICBkaXNwYXRjaGVyID0gbW9jay5Nb2NrRGlzcGF0Y2hlcigpCisg
ICAgICAgIGhhbmRzaGFrZXIgPSBIYW5kc2hha2VyKHJlcXVlc3QsIGRpc3BhdGNoZXIpCisgICAg
ICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUo
ZGlzcGF0Y2hlci5kb19leHRyYV9oYW5kc2hha2VfY2FsbGVkKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoCisgICAgICAgICAgICBfRVhQRUNURURfUkVTUE9OU0UsIHJlcXVlc3QuY29ubmVj
dGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2RlbW8nLCBy
ZXF1ZXN0LndzX3Jlc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdodHRwOi8vZXhh
bXBsZS5jb20nLCByZXF1ZXN0LndzX29yaWdpbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChO
b25lLCByZXF1ZXN0LndzX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUs
IHJlcXVlc3Qud3NfZXh0ZW5zaW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tb24u
VkVSU0lPTl9IWUJJX0xBVEVTVCwgcmVxdWVzdC53c192ZXJzaW9uKQorCisgICAgZGVmIHRlc3Rf
ZG9faGFuZHNoYWtlX3dpdGhfY2FwaXRhbGl6ZWRfdmFsdWUoc2VsZik6CisgICAgICAgIHJlcXVl
c3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYu
aGVhZGVyc1sndXBncmFkZSddID0gJ1dFQlNPQ0tFVCcKKworICAgICAgICByZXF1ZXN0ID0gX2Ny
ZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hha2VyID0gX2NyZWF0ZV9o
YW5kc2hha2VyKHJlcXVlc3QpCisgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIF9FWFBFQ1RFRF9SRVNQT05TRSwg
cmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgICAgIHJlcXVlc3RfZGVm
ID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVy
c1snQ29ubmVjdGlvbiddID0gJ1VQR1JBREUnCisKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVf
cmVxdWVzdChyZXF1ZXN0X2RlZikKKyAgICAgICAgaGFuZHNoYWtlciA9IF9jcmVhdGVfaGFuZHNo
YWtlcihyZXF1ZXN0KQorICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBfRVhQRUNURURfUkVTUE9OU0UsIHJlcXVl
c3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X2RvX2hhbmRzaGFr
ZV93aXRoX211bHRpcGxlX2Nvbm5lY3Rpb25fdmFsdWVzKHNlbGYpOgorICAgICAgICByZXF1ZXN0
X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3RfZGVmLmhl
YWRlcnNbJ0Nvbm5lY3Rpb24nXSA9ICdVcGdyYWRlLCBrZWVwLWFsaXZlLCAsICcKKworICAgICAg
ICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hh
a2VyID0gX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVlc3QpCisgICAgICAgIGhhbmRzaGFrZXIuZG9f
aGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIF9FWFBF
Q1RFRF9SRVNQT05TRSwgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAg
ZGVmIHRlc3RfYWJvcnRpbmdfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICBoYW5kc2hha2VyID0g
SGFuZHNoYWtlcigKKyAgICAgICAgICAgIF9jcmVhdGVfcmVxdWVzdChfY3JlYXRlX2dvb2RfcmVx
dWVzdF9kZWYoKSksCisgICAgICAgICAgICBBYm9ydGluZ0Rpc3BhdGNoZXIoKSkKKyAgICAgICAg
IyBkb19leHRyYV9oYW5kc2hha2UgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gQ2hlY2sgdGhhdCBpdCdz
IG5vdCBjYXVnaHQgYnkKKyAgICAgICAgIyBkb19oYW5kc2hha2UuCisgICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKEhhbmRzaGFrZUFib3J0ZWRFeGNlcHRpb24sIGhhbmRzaGFrZXIuZG9faGFuZHNo
YWtlKQorCisgICAgZGVmIHRlc3RfZG9faGFuZHNoYWtlX3dpdGhfcHJvdG9jb2woc2VsZik6Cisg
ICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAg
cmVxdWVzdF9kZWYuaGVhZGVyc1snU2VjLVdlYlNvY2tldC1Qcm90b2NvbCddID0gJ2NoYXQsIHN1
cGVyY2hhdCcKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVm
KQorICAgICAgICBoYW5kc2hha2VyID0gSGFuZHNoYWtlcihyZXF1ZXN0LCBTdWJwcm90b2NvbENo
b29zaW5nRGlzcGF0Y2hlcigwKSkKKyAgICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQor
CisgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFID0gKAorICAgICAgICAgICAgJ0hUVFAvMS4xIDEw
MSBTd2l0Y2hpbmcgUHJvdG9jb2xzXHJcbicKKyAgICAgICAgICAgICdVcGdyYWRlOiB3ZWJzb2Nr
ZXRcclxuJworICAgICAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgICAgICAg
ICAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0OiBzM3BQTE1CaVR4YVE5a1lHenpoWlJiSyt4T289XHJc
bicKKyAgICAgICAgICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29sOiBjaGF0XHJcblxyXG4nKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVhQRUNURURfUkVTUE9OU0UsIHJlcXVlc3QuY29u
bmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY2hhdCcs
IHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9kb19oYW5kc2hha2VfcHJvdG9j
b2xfbm90X2luX3JlcXVlc3RfYnV0X2luX3Jlc3BvbnNlKHNlbGYpOgorICAgICAgICByZXF1ZXN0
X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3QgPSBfY3Jl
YXRlX3JlcXVlc3QocmVxdWVzdF9kZWYpCisgICAgICAgIGhhbmRzaGFrZXIgPSBIYW5kc2hha2Vy
KAorICAgICAgICAgICAgcmVxdWVzdCwgU3VicHJvdG9jb2xDaG9vc2luZ0Rpc3BhdGNoZXIoLTEs
ICdmb29iYXInKSkKKyAgICAgICAgIyBObyByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgYnV0IHdzX3By
b3RvY29sIGlzIHNldC4gSGFuZHNoYWtlRXhjZXB0aW9uCisgICAgICAgICMgbXVzdCBiZSByYWlz
ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEhhbmRzaGFrZUV4Y2VwdGlvbiwgaGFuZHNo
YWtlci5kb19oYW5kc2hha2UpCisKKyAgICBkZWYgdGVzdF9kb19oYW5kc2hha2Vfd2l0aF9wcm90
b2NvbF9ub19wcm90b2NvbF9zZWxlY3Rpb24oc2VsZik6CisgICAgICAgIHJlcXVlc3RfZGVmID0g
X2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1sn
U2VjLVdlYlNvY2tldC1Qcm90b2NvbCddID0gJ2NoYXQsIHN1cGVyY2hhdCcKKworICAgICAgICBy
ZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hha2Vy
ID0gX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVlc3QpCisgICAgICAgICMgd3NfcHJvdG9jb2wgaXMg
bm90IHNldC4gSGFuZHNoYWtlRXhjZXB0aW9uIG11c3QgYmUgcmFpc2VkLgorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhIYW5kc2hha2VFeGNlcHRpb24sIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtl
KQorCisgICAgZGVmIHRlc3RfZG9faGFuZHNoYWtlX3dpdGhfZXh0ZW5zaW9ucyhzZWxmKToKKyAg
ICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICBy
ZXF1ZXN0X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnXSA9ICgKKyAgICAg
ICAgICAgICdkZWZsYXRlLXN0cmVhbSwgdW5rbm93bicpCisKKyAgICAgICAgRVhQRUNURURfUkVT
UE9OU0UgPSAoCisgICAgICAgICAgICAnSFRUUC8xLjEgMTAxIFN3aXRjaGluZyBQcm90b2NvbHNc
clxuJworICAgICAgICAgICAgJ1VwZ3JhZGU6IHdlYnNvY2tldFxyXG4nCisgICAgICAgICAgICAn
Q29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1BY2Nl
cHQ6IHMzcFBMTUJpVHhhUTlrWUd6emhaUmJLK3hPbz1cclxuJworICAgICAgICAgICAgJ1NlYy1X
ZWJTb2NrZXQtRXh0ZW5zaW9uczogZGVmbGF0ZS1zdHJlYW1cclxuXHJcbicpCisKKyAgICAgICAg
cmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChyZXF1ZXN0X2RlZikKKyAgICAgICAgaGFuZHNoYWtl
ciA9IF9jcmVhdGVfaGFuZHNoYWtlcihyZXF1ZXN0KQorICAgICAgICBoYW5kc2hha2VyLmRvX2hh
bmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVhQRUNURURfUkVTUE9OU0UsIHJl
cXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgxLCBsZW4ocmVxdWVzdC53c19leHRlbnNpb25zKSkKKyAgICAgICAgZXh0ZW5zaW9uID0gcmVx
dWVzdC53c19leHRlbnNpb25zWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2RlZmxhdGUt
c3RyZWFtJywgZXh0ZW5zaW9uLm5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBs
ZW4oZXh0ZW5zaW9uLmdldF9wYXJhbWV0ZXJfbmFtZXMoKSkpCisKKyAgICBkZWYgdGVzdF9kb19o
YW5kc2hha2Vfd2l0aF9xdW90ZWRfZXh0ZW5zaW9ucyhzZWxmKToKKyAgICAgICAgcmVxdWVzdF9k
ZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1ZXN0X2RlZi5oZWFk
ZXJzWydTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnXSA9ICgKKyAgICAgICAgICAgICdkZWZsYXRl
LXN0cmVhbSwgLCAnCisgICAgICAgICAgICAndW5rbm93bjsgZSAgID0gICAgIm1jXjIiOyBtYT0i
XHJcbiAgICAgIFxcXHJmICAiOyBwdj1ucnQnKQorCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRl
X3JlcXVlc3QocmVxdWVzdF9kZWYpCisgICAgICAgIGhhbmRzaGFrZXIgPSBfY3JlYXRlX2hhbmRz
aGFrZXIocmVxdWVzdCkKKyAgICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihyZXF1ZXN0LndzX3JlcXVlc3RlZF9leHRlbnNpb25z
KSkKKyAgICAgICAgZmlyc3RfZXh0ZW5zaW9uID0gcmVxdWVzdC53c19yZXF1ZXN0ZWRfZXh0ZW5z
aW9uc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdkZWZsYXRlLXN0cmVhbScsIGZpcnN0
X2V4dGVuc2lvbi5uYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKGZpcnN0
X2V4dGVuc2lvbi5nZXRfcGFyYW1ldGVyX25hbWVzKCkpKQorICAgICAgICBzZWNvbmRfZXh0ZW5z
aW9uID0gcmVxdWVzdC53c19yZXF1ZXN0ZWRfZXh0ZW5zaW9uc1sxXQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCd1bmtub3duJywgc2Vjb25kX2V4dGVuc2lvbi5uYW1lKCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbJ2UnLCAnbWEnLCAncHYnXSwgc2Vjb25kX2V4
dGVuc2lvbi5nZXRfcGFyYW1ldGVyX25hbWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J21jXjInLCBzZWNvbmRfZXh0ZW5zaW9uLmdldF9wYXJhbWV0ZXJfdmFsdWUoJ2UnKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnIFxyZiAnLCBzZWNvbmRfZXh0ZW5zaW9uLmdldF9wYXJhbWV0
ZXJfdmFsdWUoJ21hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ25ydCcsIHNlY29uZF9l
eHRlbnNpb24uZ2V0X3BhcmFtZXRlcl92YWx1ZSgncHYnKSkKKworICAgIGRlZiB0ZXN0X2RvX2hh
bmRzaGFrZV93aXRoX29wdGlvbmFsX2hlYWRlcnMoc2VsZik6CisgICAgICAgIHJlcXVlc3RfZGVm
ID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVy
c1snRW1wdHlWYWx1ZSddID0gJycKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snQUtleSdd
ID0gJ0FWYWx1ZScKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3Rf
ZGVmKQorICAgICAgICBoYW5kc2hha2VyID0gX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVlc3QpCisg
ICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgKKyAgICAgICAgICAgICdBVmFsdWUnLCByZXF1ZXN0LmhlYWRlcnNfaW5bJ0FLZXknXSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICcnLCByZXF1ZXN0LmhlYWRlcnNf
aW5bJ0VtcHR5VmFsdWUnXSkKKworICAgIGRlZiB0ZXN0X2Fib3J0X2V4dHJhX2hhbmRzaGFrZShz
ZWxmKToKKyAgICAgICAgaGFuZHNoYWtlciA9IEhhbmRzaGFrZXIoCisgICAgICAgICAgICBfY3Jl
YXRlX3JlcXVlc3QoX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkpLAorICAgICAgICAgICAgQWJv
cnRlZEJ5VXNlckRpc3BhdGNoZXIoKSkKKyAgICAgICAgIyBkb19leHRyYV9oYW5kc2hha2UgcmFp
c2VzIGFuIEFib3J0ZWRCeVVzZXJFeGNlcHRpb24uIENoZWNrIHRoYXQgaXQncworICAgICAgICAj
IG5vdCBjYXVnaHQgYnkgZG9faGFuZHNoYWtlLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhB
Ym9ydGVkQnlVc2VyRXhjZXB0aW9uLCBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSkKKworICAgIGRl
ZiB0ZXN0X2JhZF9yZXF1ZXN0cyhzZWxmKToKKyAgICAgICAgYmFkX2Nhc2VzID0gWworICAgICAg
ICAgICAgKCdIVFRQIHJlcXVlc3QnLAorICAgICAgICAgICAgIFJlcXVlc3REZWZpbml0aW9uKAor
ICAgICAgICAgICAgICAgICAnR0VUJywgJy9kZW1vJywKKyAgICAgICAgICAgICAgICAgeydIb3N0
JzogJ3d3dy5nb29nbGUuY29tJywKKyAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzoKKyAg
ICAgICAgICAgICAgICAgICAgICAnTW96aWxsYS81LjAgKE1hY2ludG9zaDsgVTsgSW50ZWwgTWFj
IE9TIFggMTAuNTsnCisgICAgICAgICAgICAgICAgICAgICAgJyBlbi1VUzsgcnY6MS45LjEuMykg
R2Vja28vMjAwOTA4MjQgRmlyZWZveC8zLjUuMycKKyAgICAgICAgICAgICAgICAgICAgICAnIEdU
QjYgR1RCQScsCisgICAgICAgICAgICAgICAgICAnQWNjZXB0JzoKKyAgICAgICAgICAgICAgICAg
ICAgICAndGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0w
LjksJworICAgICAgICAgICAgICAgICAgICAgICcqLyo7cT0wLjgnLAorICAgICAgICAgICAgICAg
ICAgJ0FjY2VwdC1MYW5ndWFnZSc6ICdlbi11cyxlbjtxPTAuNScsCisgICAgICAgICAgICAgICAg
ICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAsZGVmbGF0ZScsCisgICAgICAgICAgICAgICAgICAn
QWNjZXB0LUNoYXJzZXQnOiAnSVNPLTg4NTktMSx1dGYtODtxPTAuNywqO3E9MC43JywKKyAgICAg
ICAgICAgICAgICAgICdLZWVwLUFsaXZlJzogJzMwMCcsCisgICAgICAgICAgICAgICAgICAnQ29u
bmVjdGlvbic6ICdrZWVwLWFsaXZlJ30pLCBOb25lLCBUcnVlKV0KKworICAgICAgICByZXF1ZXN0
X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3RfZGVmLm1l
dGhvZCA9ICdQT1NUJworICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnV3JvbmcgbWV0aG9kJywg
cmVxdWVzdF9kZWYsIE5vbmUsIFRydWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0
ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgZGVsIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ0hv
c3QnXQorICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnTWlzc2luZyBIb3N0JywgcmVxdWVzdF9k
ZWYsIE5vbmUsIFRydWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3Jl
cXVlc3RfZGVmKCkKKyAgICAgICAgZGVsIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ1VwZ3JhZGUnXQor
ICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnTWlzc2luZyBVcGdyYWRlJywgcmVxdWVzdF9kZWYs
IE5vbmUsIFRydWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVl
c3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snVXBncmFkZSddID0gJ25vbndl
YnNvY2tldCcKKyAgICAgICAgYmFkX2Nhc2VzLmFwcGVuZCgoJ1dyb25nIFVwZ3JhZGUnLCByZXF1
ZXN0X2RlZiwgTm9uZSwgVHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dv
b2RfcmVxdWVzdF9kZWYoKQorICAgICAgICBkZWwgcmVxdWVzdF9kZWYuaGVhZGVyc1snQ29ubmVj
dGlvbiddCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdNaXNzaW5nIENvbm5lY3Rpb24nLCBy
ZXF1ZXN0X2RlZiwgTm9uZSwgVHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRl
X2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydDb25uZWN0
aW9uJ10gPSAnRG93bmdyYWRlJworICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnV3JvbmcgQ29u
bmVjdGlvbicsIHJlcXVlc3RfZGVmLCBOb25lLCBUcnVlKSkKKworICAgICAgICByZXF1ZXN0X2Rl
ZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIGRlbCByZXF1ZXN0X2RlZi5o
ZWFkZXJzWydTZWMtV2ViU29ja2V0LUtleSddCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdN
aXNzaW5nIFNlYy1XZWJTb2NrZXQtS2V5JywgcmVxdWVzdF9kZWYsIDQwMCwgVHJ1ZSkpCisKKyAg
ICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICBy
ZXF1ZXN0X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LUtleSddID0gKAorICAgICAgICAgICAg
J2RHaGxJSE5oYlhCc1pTQnViMjVqWlE9PWdhcmJhZ2UnKQorICAgICAgICBiYWRfY2FzZXMuYXBw
ZW5kKCgnV3JvbmcgU2VjLVdlYlNvY2tldC1LZXkgKHdpdGggZ2FyYmFnZSBvbiB0aGUgdGFpbCkn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2RlZiwgNDAwLCBUcnVlKSkKKwor
ICAgICAgICByZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAg
IHJlcXVlc3RfZGVmLmhlYWRlcnNbJ1NlYy1XZWJTb2NrZXQtS2V5J10gPSAnWVE9PScgICMgQkFT
RTY0IG9mICdhJworICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKAorICAgICAgICAgICAgKCdXcm9u
ZyBTZWMtV2ViU29ja2V0LUtleSAoZGVjb2RlZCB2YWx1ZSBpcyBub3QgMTYgb2N0ZXRzIGxvbmcp
JywKKyAgICAgICAgICAgICByZXF1ZXN0X2RlZiwgNDAwLCBUcnVlKSkKKworICAgICAgICByZXF1
ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgICMgVGhlIGxhc3Qg
Y2hhcmFjdGVyIHJpZ2h0IGJlZm9yZSA9PSBtdXN0IGJlIGFueSBvZiBBLCBRLCB3IGFuZCBnLgor
ICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LUtleSddID0gKAorICAg
ICAgICAgICAgJ0FRSURCQVVHQndnSkNnc01EUTRQRUM9PScpCisgICAgICAgIGJhZF9jYXNlcy5h
cHBlbmQoCisgICAgICAgICAgICAoJ1dyb25nIFNlYy1XZWJTb2NrZXQtS2V5IChwYWRkaW5nIGJp
dHMgYXJlIG5vdCB6ZXJvKScsCisgICAgICAgICAgICAgcmVxdWVzdF9kZWYsIDQwMCwgVHJ1ZSkp
CisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAg
ICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LUtleSddID0gKAorICAgICAg
ICAgICAgJ2RHaGxJSE5oYlhCc1pTQnViMjVqWlE9PSxkR2hsSUhOaGJYQnNaU0J1YjI1alpRPT0n
KQorICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKAorICAgICAgICAgICAgKCdXcm9uZyBTZWMtV2Vi
U29ja2V0LUtleSAobXVsdGlwbGUgdmFsdWVzKScsCisgICAgICAgICAgICAgcmVxdWVzdF9kZWYs
IDQwMCwgVHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVz
dF9kZWYoKQorICAgICAgICBkZWwgcmVxdWVzdF9kZWYuaGVhZGVyc1snU2VjLVdlYlNvY2tldC1W
ZXJzaW9uJ10KKyAgICAgICAgYmFkX2Nhc2VzLmFwcGVuZCgoJ01pc3NpbmcgU2VjLVdlYlNvY2tl
dC1WZXJzaW9uJywgcmVxdWVzdF9kZWYsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IFRydWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVm
KCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snU2VjLVdlYlNvY2tldC1WZXJzaW9uJ10g
PSAnMycKKyAgICAgICAgYmFkX2Nhc2VzLmFwcGVuZCgoJ1dyb25nIFNlYy1XZWJTb2NrZXQtVmVy
c2lvbicsIHJlcXVlc3RfZGVmLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxz
ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQor
ICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LVZlcnNpb24nXSA9ICcx
MywgMTMnCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdXcm9uZyBTZWMtV2ViU29ja2V0LVZl
cnNpb24gKG11bHRpcGxlIHZhbHVlcyknLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0X2RlZiwgNDAwLCBUcnVlKSkKKworICAgICAgICBmb3IgKGNhc2VfbmFtZSwgcmVxdWVzdF9k
ZWYsIGV4cGVjdGVkX3N0YXR1cywKKyAgICAgICAgICAgICBleHBlY3RfaGFuZHNoYWtlX2V4Y2Vw
dGlvbikgaW4gYmFkX2Nhc2VzOgorICAgICAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVz
dChyZXF1ZXN0X2RlZikKKyAgICAgICAgICAgIGhhbmRzaGFrZXIgPSBIYW5kc2hha2VyKHJlcXVl
c3QsIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICAgICAgc2VsZi5mYWls
KCdObyBleGNlcHRpb24gdGhyb3duIGZvciBcJyVzXCcgY2FzZScgJSBjYXNlX25hbWUpCisgICAg
ICAgICAgICBleGNlcHQgSGFuZHNoYWtlRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShleHBlY3RfaGFuZHNoYWtlX2V4Y2VwdGlvbikKKyAgICAgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3N0YXR1cywgZS5zdGF0dXMpCisgICAgICAgICAg
ICBleGNlcHQgVmVyc2lvbkV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKGV4cGVjdF9oYW5kc2hha2VfZXhjZXB0aW9uKQorCisKK2lmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0X2hhbmRzaGFrZV9oeWJpMDAucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZV9oeWJpMDAucHkKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTU3YmVjMjM4ZjAzZjAzNTkyYjBhZWEwMDRlNTkxYjUyZmM2MjU4NAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90
ZXN0L3Rlc3RfaGFuZHNoYWtlX2h5YmkwMC5weQpAQCAtMCwwICsxLDQzOCBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6Cisj
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0cyBmb3IgaGFuZHNo
YWtlLmh5YmkwMCBtb2R1bGUuIiIiCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBzZXRf
c3lzX3BhdGggICMgVXBkYXRlIHN5cy5wYXRoIHRvIGxvY2F0ZSBtb2RfcHl3ZWJzb2NrZXQgbW9k
dWxlLgorCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IEhhbmRz
aGFrZUV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlIGltcG9ydCBoeWJp
MDAgYXMgaGFuZHNoYWtlCitmcm9tIHRlc3QgaW1wb3J0IG1vY2sKKworCitfR09PRF9SRVFVRVNU
ID0gKAorICAgIDgwLAorICAgICdHRVQnLAorICAgICcvZGVtbycsCisgICAgeworICAgICAgICAn
SG9zdCc6ICdleGFtcGxlLmNvbScsCisgICAgICAgICdDb25uZWN0aW9uJzogJ1VwZ3JhZGUnLAor
ICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkyJzogJzEyOTk4IDUgWTMgMSAgLlAwMCcsCisgICAg
ICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29sJzogJ3NhbXBsZScsCisgICAgICAgICdVcGdyYWRl
JzogJ1dlYlNvY2tldCcsCisgICAgICAgICdTZWMtV2ViU29ja2V0LUtleTEnOiAnNCBAMSAgNDY1
NDZ4VyUwbCAxIDUnLAorICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisg
ICAgfSwKKyAgICAnXm46ZHNbNFUnKQorCitfR09PRF9SRVFVRVNUX0NBUElUQUxJWkVEX0hFQURF
Ul9WQUxVRVMgPSAoCisgICAgODAsCisgICAgJ0dFVCcsCisgICAgJy9kZW1vJywKKyAgICB7Cisg
ICAgICAgICdIb3N0JzogJ2V4YW1wbGUuY29tJywKKyAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnVVBH
UkFERScsCisgICAgICAgICdTZWMtV2ViU29ja2V0LUtleTInOiAnMTI5OTggNSBZMyAxICAuUDAw
JywKKyAgICAgICAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnOiAnc2FtcGxlJywKKyAgICAgICAg
J1VwZ3JhZGUnOiAnV0VCU09DS0VUJywKKyAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5MSc6ICc0
IEAxICA0NjU0NnhXJTBsIDEgNScsCisgICAgICAgICdPcmlnaW4nOiAnaHR0cDovL2V4YW1wbGUu
Y29tJywKKyAgICB9LAorICAgICdebjpkc1s0VScpCisKK19HT09EX1JFU1BPTlNFX0RFRkFVTFRf
UE9SVCA9ICgKKyAgICAnSFRUUC8xLjEgMTAxIFdlYlNvY2tldCBQcm90b2NvbCBIYW5kc2hha2Vc
clxuJworICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJworICAgICdDb25uZWN0aW9uOiBVcGdy
YWRlXHJcbicKKyAgICAnU2VjLVdlYlNvY2tldC1Mb2NhdGlvbjogd3M6Ly9leGFtcGxlLmNvbS9k
ZW1vXHJcbicKKyAgICAnU2VjLVdlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxy
XG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBsZVxyXG4nCisgICAgJ1xyXG4n
CisgICAgJzhqS1NcJ3k6RypDbyxXeGEtJykKKworX0dPT0RfUkVTUE9OU0VfU0VDVVJFID0gKAor
ICAgICdIVFRQLzEuMSAxMDEgV2ViU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisgICAg
J1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nCisgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJwor
ICAgICdTZWMtV2ViU29ja2V0LUxvY2F0aW9uOiB3c3M6Ly9leGFtcGxlLmNvbS9kZW1vXHJcbicK
KyAgICAnU2VjLVdlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nCisgICAg
J1NlYy1XZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBsZVxyXG4nCisgICAgJ1xyXG4nCisgICAgJzhq
S1NcJ3k6RypDbyxXeGEtJykKKworX0dPT0RfUkVRVUVTVF9OT05ERUZBVUxUX1BPUlQgPSAoCisg
ICAgODA4MSwKKyAgICAnR0VUJywKKyAgICAnL2RlbW8nLAorICAgIHsKKyAgICAgICAgJ0hvc3Qn
OiAnZXhhbXBsZS5jb206ODA4MScsCisgICAgICAgICdDb25uZWN0aW9uJzogJ1VwZ3JhZGUnLAor
ICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkyJzogJzEyOTk4IDUgWTMgMSAgLlAwMCcsCisgICAg
ICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29sJzogJ3NhbXBsZScsCisgICAgICAgICdVcGdyYWRl
JzogJ1dlYlNvY2tldCcsCisgICAgICAgICdTZWMtV2ViU29ja2V0LUtleTEnOiAnNCBAMSAgNDY1
NDZ4VyUwbCAxIDUnLAorICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisg
ICAgfSwKKyAgICAnXm46ZHNbNFUnKQorCitfR09PRF9SRVNQT05TRV9OT05ERUZBVUxUX1BPUlQg
PSAoCisgICAgJ0hUVFAvMS4xIDEwMSBXZWJTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicK
KyAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxy
XG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtTG9jYXRpb246IHdzOi8vZXhhbXBsZS5jb206ODA4MS9k
ZW1vXHJcbicKKyAgICAnU2VjLVdlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxy
XG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBsZVxyXG4nCisgICAgJ1xyXG4n
CisgICAgJzhqS1NcJ3k6RypDbyxXeGEtJykKKworX0dPT0RfUkVTUE9OU0VfU0VDVVJFX05PTkRF
RiA9ICgKKyAgICAnSFRUUC8xLjEgMTAxIFdlYlNvY2tldCBQcm90b2NvbCBIYW5kc2hha2Vcclxu
JworICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJworICAgICdDb25uZWN0aW9uOiBVcGdyYWRl
XHJcbicKKyAgICAnU2VjLVdlYlNvY2tldC1Mb2NhdGlvbjogd3NzOi8vZXhhbXBsZS5jb206ODA4
MS9kZW1vXHJcbicKKyAgICAnU2VjLVdlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNv
bVxyXG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBsZVxyXG4nCisgICAgJ1xy
XG4nCisgICAgJzhqS1NcJ3k6RypDbyxXeGEtJykKKworX0dPT0RfUkVRVUVTVF9OT19QUk9UT0NP
TCA9ICgKKyAgICA4MCwKKyAgICAnR0VUJywKKyAgICAnL2RlbW8nLAorICAgIHsKKyAgICAgICAg
J0hvc3QnOiAnZXhhbXBsZS5jb20nLAorICAgICAgICAnQ29ubmVjdGlvbic6ICdVcGdyYWRlJywK
KyAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5Mic6ICcxMjk5OCA1IFkzIDEgIC5QMDAnLAorICAg
ICAgICAnVXBncmFkZSc6ICdXZWJTb2NrZXQnLAorICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkx
JzogJzQgQDEgIDQ2NTQ2eFclMGwgMSA1JywKKyAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vZXhh
bXBsZS5jb20nLAorICAgIH0sCisgICAgJ15uOmRzWzRVJykKKworX0dPT0RfUkVTUE9OU0VfTk9f
UFJPVE9DT0wgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBXZWJTb2NrZXQgUHJvdG9jb2wgSGFuZHNo
YWtlXHJcbicKKyAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjog
VXBncmFkZVxyXG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtTG9jYXRpb246IHdzOi8vZXhhbXBsZS5j
b20vZGVtb1xyXG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5j
b21cclxuJworICAgICdcclxuJworICAgICc4aktTXCd5OkcqQ28sV3hhLScpCisKK19HT09EX1JF
UVVFU1RfV0lUSF9PUFRJT05BTF9IRUFERVJTID0gKAorICAgIDgwLAorICAgICdHRVQnLAorICAg
ICcvZGVtbycsCisgICAgeworICAgICAgICAnSG9zdCc6ICdleGFtcGxlLmNvbScsCisgICAgICAg
ICdDb25uZWN0aW9uJzogJ1VwZ3JhZGUnLAorICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkyJzog
JzEyOTk4IDUgWTMgMSAgLlAwMCcsCisgICAgICAgICdFbXB0eVZhbHVlJzogJycsCisgICAgICAg
ICdTZWMtV2ViU29ja2V0LVByb3RvY29sJzogJ3NhbXBsZScsCisgICAgICAgICdBS2V5JzogJ0FW
YWx1ZScsCisgICAgICAgICdVcGdyYWRlJzogJ1dlYlNvY2tldCcsCisgICAgICAgICdTZWMtV2Vi
U29ja2V0LUtleTEnOiAnNCBAMSAgNDY1NDZ4VyUwbCAxIDUnLAorICAgICAgICAnT3JpZ2luJzog
J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgfSwKKyAgICAnXm46ZHNbNFUnKQorCisjIFRPRE8o
dHlvc2hpbm8pOiBJbmNsdWRlIFxyIFxuIGluIGtleTMsIGNoYWxsZW5nZSByZXNwb25zZS4KKwor
X0dPT0RfUkVRVUVTVF9XSVRIX05PTlBSSU5UQUJMRV9LRVkgPSAoCisgICAgODAsCisgICAgJ0dF
VCcsCisgICAgJy9kZW1vJywKKyAgICB7CisgICAgICAgICdIb3N0JzogJ2V4YW1wbGUuY29tJywK
KyAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnVXBncmFkZScsCisgICAgICAgICdTZWMtV2ViU29ja2V0
LUtleTInOiAneSAgUjIgNDggUTFPNCAgZXxCVjMgaTUgMSAgdS0gNjUnLAorICAgICAgICAnU2Vj
LVdlYlNvY2tldC1Qcm90b2NvbCc6ICdzYW1wbGUnLAorICAgICAgICAnVXBncmFkZSc6ICdXZWJT
b2NrZXQnLAorICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkxJzogJzM2IDcgICA3NCBpICA5MiAy
XCdtIDkgMEcnLAorICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAg
fSwKKyAgICAnJy5qb2luKG1hcChjaHIsIFsweDAxLCAweGQxLCAweGRkLCAweDNiLCAweGQxLCAw
eDU2LCAweDYzLCAweGZmXSkpKQorCitfR09PRF9SRVNQT05TRV9XSVRIX05PTlBSSU5UQUJMRV9L
RVkgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBXZWJTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJc
bicKKyAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFk
ZVxyXG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtTG9jYXRpb246IHdzOi8vZXhhbXBsZS5jb20vZGVt
b1xyXG4nCisgICAgJ1NlYy1XZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxu
JworICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJworICAgICdcclxuJyAr
CisgICAgJycuam9pbihtYXAoY2hyLCBbMHgwYiwgMHg5OSwgMHhmYSwgMHg1NSwgMHhiZCwgMHgw
MSwgMHgyMywgMHg3YiwKKyAgICAgICAgICAgICAgICAgICAgICAweDQ1LCAweGEyLCAweGYxLCAw
eGQwLCAweDg3LCAweDhhLCAweGVlLCAweGViXSkpKQorCitfQkFEX1JFUVVFU1RTID0gKAorICAg
ICggICMgSFRUUCByZXF1ZXN0CisgICAgICAgIDgwLAorICAgICAgICAnR0VUJywKKyAgICAgICAg
Jy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ0hvc3QnOiAnd3d3Lmdvb2dsZS5jb20n
LAorICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKE1hY2ludG9zaDsgVTsg
SW50ZWwgTWFjIE9TIFggMTAuNTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICcgZW4tVVM7
IHJ2OjEuOS4xLjMpIEdlY2tvLzIwMDkwODI0IEZpcmVmb3gvMy41LjMnCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICcgR1RCNiBHVEJBJywKKyAgICAgICAgICAgICdBY2NlcHQnOiAndGV4dC9o
dG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksJworICAgICAg
ICAgICAgICAgICAgICAgICcqLyo7cT0wLjgnLAorICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFn
ZSc6ICdlbi11cyxlbjtxPTAuNScsCisgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6
aXAsZGVmbGF0ZScsCisgICAgICAgICAgICAnQWNjZXB0LUNoYXJzZXQnOiAnSVNPLTg4NTktMSx1
dGYtODtxPTAuNywqO3E9MC43JywKKyAgICAgICAgICAgICdLZWVwLUFsaXZlJzogJzMwMCcsCisg
ICAgICAgICAgICAnQ29ubmVjdGlvbic6ICdrZWVwLWFsaXZlJywKKyAgICAgICAgfSksCisgICAg
KCAgIyBXcm9uZyBtZXRob2QKKyAgICAgICAgODAsCisgICAgICAgICdQT1NUJywKKyAgICAgICAg
Jy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ0hvc3QnOiAnZXhhbXBsZS5jb20nLAor
ICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnVXBncmFkZScsCisgICAgICAgICAgICAnU2VjLVdl
YlNvY2tldC1LZXkyJzogJzEyOTk4IDUgWTMgMSAgLlAwMCcsCisgICAgICAgICAgICAnU2VjLVdl
YlNvY2tldC1Qcm90b2NvbCc6ICdzYW1wbGUnLAorICAgICAgICAgICAgJ1VwZ3JhZGUnOiAnV2Vi
U29ja2V0JywKKyAgICAgICAgICAgICdTZWMtV2ViU29ja2V0LUtleTEnOiAnNCBAMSAgNDY1NDZ4
VyUwbCAxIDUnLAorICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vZXhhbXBsZS5jb20nLAor
ICAgICAgICB9LAorICAgICAgICAnXm46ZHNbNFUnKSwKKyAgICAoICAjIE1pc3NpbmcgVXBncmFk
ZQorICAgICAgICA4MCwKKyAgICAgICAgJ0dFVCcsCisgICAgICAgICcvZGVtbycsCisgICAgICAg
IHsKKyAgICAgICAgICAgICdIb3N0JzogJ2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdDb25u
ZWN0aW9uJzogJ1VwZ3JhZGUnLAorICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5Mic6ICcx
Mjk5OCA1IFkzIDEgIC5QMDAnLAorICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wn
OiAnc2FtcGxlJywKKyAgICAgICAgICAgICdTZWMtV2ViU29ja2V0LUtleTEnOiAnNCBAMSAgNDY1
NDZ4VyUwbCAxIDUnLAorICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwOi8vZXhhbXBsZS5jb20n
LAorICAgICAgICB9LAorICAgICAgICAnXm46ZHNbNFUnKSwKKyAgICAoICAjIFdyb25nIFVwZ3Jh
ZGUKKyAgICAgICAgODAsCisgICAgICAgICdHRVQnLAorICAgICAgICAnL2RlbW8nLAorICAgICAg
ICB7CisgICAgICAgICAgICAnSG9zdCc6ICdleGFtcGxlLmNvbScsCisgICAgICAgICAgICAnQ29u
bmVjdGlvbic6ICdVcGdyYWRlJywKKyAgICAgICAgICAgICdTZWMtV2ViU29ja2V0LUtleTInOiAn
MTI5OTggNSBZMyAxICAuUDAwJywKKyAgICAgICAgICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29s
JzogJ3NhbXBsZScsCisgICAgICAgICAgICAnVXBncmFkZSc6ICdOb25XZWJTb2NrZXQnLAorICAg
ICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5MSc6ICc0IEAxICA0NjU0NnhXJTBsIDEgNScsCisg
ICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgIH0sCisg
ICAgICAgICdebjpkc1s0VScpLAorICAgICggICMgRW1wdHkgV2ViU29ja2V0LVByb3RvY29sCisg
ICAgICAgIDgwLAorICAgICAgICAnR0VUJywKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgewor
ICAgICAgICAgICAgJ0hvc3QnOiAnZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ0Nvbm5lY3Rp
b24nOiAnVXBncmFkZScsCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkyJzogJzEyOTk4
IDUgWTMgMSAgLlAwMCcsCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCc6ICcn
LAorICAgICAgICAgICAgJ1VwZ3JhZGUnOiAnV2ViU29ja2V0JywKKyAgICAgICAgICAgICdTZWMt
V2ViU29ja2V0LUtleTEnOiAnNCBAMSAgNDY1NDZ4VyUwbCAxIDUnLAorICAgICAgICAgICAgJ09y
aWdpbic6ICdodHRwOi8vZXhhbXBsZS5jb20nLAorICAgICAgICB9LAorICAgICAgICAnXm46ZHNb
NFUnKSwKKyAgICAoICAjIFdyb25nIHBvcnQgbnVtYmVyIGZvcm1hdAorICAgICAgICA4MCwKKyAg
ICAgICAgJ0dFVCcsCisgICAgICAgICcvZGVtbycsCisgICAgICAgIHsKKyAgICAgICAgICAgICdI
b3N0JzogJ2V4YW1wbGUuY29tOjB4NTAnLAorICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOiAnVXBn
cmFkZScsCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1LZXkyJzogJzEyOTk4IDUgWTMgMSAg
LlAwMCcsCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCc6ICdzYW1wbGUnLAor
ICAgICAgICAgICAgJ1VwZ3JhZGUnOiAnV2ViU29ja2V0JywKKyAgICAgICAgICAgICdTZWMtV2Vi
U29ja2V0LUtleTEnOiAnNCBAMSAgNDY1NDZ4VyUwbCAxIDUnLAorICAgICAgICAgICAgJ09yaWdp
bic6ICdodHRwOi8vZXhhbXBsZS5jb20nLAorICAgICAgICB9LAorICAgICAgICAnXm46ZHNbNFUn
KSwKKyAgICAoICAjIEhlYWRlci9jb25uZWN0aW9uIHBvcnQgbWlzbWF0Y2gKKyAgICAgICAgODA4
MCwKKyAgICAgICAgJ0dFVCcsCisgICAgICAgICcvZGVtbycsCisgICAgICAgIHsKKyAgICAgICAg
ICAgICdIb3N0JzogJ2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdDb25uZWN0aW9uJzogJ1Vw
Z3JhZGUnLAorICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5Mic6ICcxMjk5OCA1IFkzIDEg
IC5QMDAnLAorICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnOiAnc2FtcGxlJywK
KyAgICAgICAgICAgICdVcGdyYWRlJzogJ1dlYlNvY2tldCcsCisgICAgICAgICAgICAnU2VjLVdl
YlNvY2tldC1LZXkxJzogJzQgQDEgIDQ2NTQ2eFclMGwgMSA1JywKKyAgICAgICAgICAgICdPcmln
aW4nOiAnaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgfSwKKyAgICAgICAgJ15uOmRzWzRV
JyksCisgICAgKCAgIyBJbGxlZ2FsIFdlYlNvY2tldC1Qcm90b2NvbAorICAgICAgICA4MCwKKyAg
ICAgICAgJ0dFVCcsCisgICAgICAgICcvZGVtbycsCisgICAgICAgIHsKKyAgICAgICAgICAgICdI
b3N0JzogJ2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdDb25uZWN0aW9uJzogJ1VwZ3JhZGUn
LAorICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtS2V5Mic6ICcxMjk5OCA1IFkzIDEgIC5QMDAn
LAorICAgICAgICAgICAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnOiAnaWxsZWdhbFx4MDlwcm90
b2NvbCcsCisgICAgICAgICAgICAnVXBncmFkZSc6ICdXZWJTb2NrZXQnLAorICAgICAgICAgICAg
J1NlYy1XZWJTb2NrZXQtS2V5MSc6ICc0IEAxICA0NjU0NnhXJTBsIDEgNScsCisgICAgICAgICAg
ICAnT3JpZ2luJzogJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgIH0sCisgICAgICAgICde
bjpkc1s0VScpLAorKQorCisKK2RlZiBfY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9kZWYpOgorICAg
IGRhdGEgPSAnJworICAgIGlmIGxlbihyZXF1ZXN0X2RlZikgPiA0OgorICAgICAgICBkYXRhID0g
cmVxdWVzdF9kZWZbNF0KKyAgICBjb25uID0gbW9jay5Nb2NrQ29ubihkYXRhKQorICAgIGNvbm4u
bG9jYWxfYWRkciA9ICgnMC4wLjAuMCcsIHJlcXVlc3RfZGVmWzBdKQorICAgIHJldHVybiBtb2Nr
Lk1vY2tSZXF1ZXN0KAorICAgICAgICBtZXRob2Q9cmVxdWVzdF9kZWZbMV0sCisgICAgICAgIHVy
aT1yZXF1ZXN0X2RlZlsyXSwKKyAgICAgICAgaGVhZGVyc19pbj1yZXF1ZXN0X2RlZlszXSwKKyAg
ICAgICAgY29ubmVjdGlvbj1jb25uKQorCisKK2RlZiBfY3JlYXRlX2dldF9tZW1vcml6ZWRfbGlu
ZXMobGluZXMpOgorICAgICIiIkNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGdp
dmVuIHN0cmluZy4iIiIKKworICAgIGRlZiBnZXRfbWVtb3JpemVkX2xpbmVzKCk6CisgICAgICAg
IHJldHVybiBsaW5lcworICAgIHJldHVybiBnZXRfbWVtb3JpemVkX2xpbmVzCisKKworZGVmIF9j
cmVhdGVfcmVxdWVzdHNfd2l0aF9saW5lcyhyZXF1ZXN0X2xpbmVzX3NldCk6CisgICAgcmVxdWVz
dHMgPSBbXQorICAgIGZvciBsaW5lcyBpbiByZXF1ZXN0X2xpbmVzX3NldDoKKyAgICAgICAgcmVx
dWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUKQorICAgICAgICByZXF1ZXN0LmNv
bm5lY3Rpb24uZ2V0X21lbW9yaXplZF9saW5lcyA9IF9jcmVhdGVfZ2V0X21lbW9yaXplZF9saW5l
cygKKyAgICAgICAgICAgICAgICBsaW5lcykKKyAgICAgICAgcmVxdWVzdHMuYXBwZW5kKHJlcXVl
c3QpCisgICAgcmV0dXJuIHJlcXVlc3RzCisKKworY2xhc3MgSHliaTAwSGFuZHNoYWtlclRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZ29vZF9yZXF1ZXN0X2RlZmF1bHRf
cG9ydChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFV
RVNUKQorICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3Bh
dGNoZXIoKSkKKyAgICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKF9HT09EX1JFU1BPTlNFX0RFRkFVTFRfUE9SVCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJy9kZW1vJywgcmVxdWVzdC53c19yZXNvdXJjZSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnaHR0cDovL2V4YW1wbGUuY29tJywgcmVxdWVzdC53c19vcmlnaW4pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3dzOi8vZXhhbXBsZS5jb20vZGVtbycsIHJlcXVlc3Qu
d3NfbG9jYXRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NhbXBsZScsIHJlcXVlc3Qu
d3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9nb29kX3JlcXVlc3RfY2FwaXRhbGl6ZWRfaGVh
ZGVyX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09P
RF9SRVFVRVNUX0NBUElUQUxJWkVEX0hFQURFUl9WQUxVRVMpCisgICAgICAgIGhhbmRzaGFrZXIg
PSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICBoYW5kc2hh
a2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0RfUkVTUE9O
U0VfREVGQVVMVF9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9zZWN1cmVf
ZGVmYXVsdF9wb3J0KHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9H
T09EX1JFUVVFU1QpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5sb2NhbF9hZGRyID0gKCcw
LjAuMC4wJywgNDQzKQorICAgICAgICByZXF1ZXN0LmlzX2h0dHBzXyA9IFRydWUKKyAgICAgICAg
aGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisgICAg
ICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChf
R09PRF9SRVNQT05TRV9TRUNVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5j
b25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzYW1w
bGUnLCByZXF1ZXN0LndzX3Byb3RvY29sKQorCisgICAgZGVmIHRlc3RfZ29vZF9yZXF1ZXN0X25v
bmRlZmF1bHRfcG9ydChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChf
R09PRF9SRVFVRVNUX05PTkRFRkFVTFRfUE9SVCkKKyAgICAgICAgaGFuZHNoYWtlciA9IGhhbmRz
aGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisgICAgICAgIGhhbmRzaGFrZXIuZG9f
aGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfR09PRF9SRVNQT05TRV9OT05E
RUZBVUxUX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9u
LndyaXR0ZW5fZGF0YSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzYW1wbGUnLCByZXF1
ZXN0LndzX3Byb3RvY29sKQorCisgICAgZGVmIHRlc3RfZ29vZF9yZXF1ZXN0X3NlY3VyZV9ub25f
ZGVmYXVsdF9wb3J0KHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9H
T09EX1JFUVVFU1RfTk9OREVGQVVMVF9QT1JUKQorICAgICAgICByZXF1ZXN0LmlzX2h0dHBzXyA9
IFRydWUKKyAgICAgICAgaGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNw
YXRjaGVyKCkpCisgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChfR09PRF9SRVNQT05TRV9TRUNVUkVfTk9OREVGLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnc2FtcGxlJywgcmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRl
ZiB0ZXN0X2dvb2RfcmVxdWVzdF9kZWZhdWx0X25vX3Byb3RvY29sKHNlbGYpOgorICAgICAgICBy
ZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JFUVVFU1RfTk9fUFJPVE9DT0wpCisgICAg
ICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQor
ICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoX0dPT0RfUkVTUE9OU0VfTk9fUFJPVE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAg
cmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKE5vbmUsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9nb29kX3JlcXVl
c3Rfb3B0aW9uYWxfaGVhZGVycyhzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVx
dWVzdChfR09PRF9SRVFVRVNUX1dJVEhfT1BUSU9OQUxfSEVBREVSUykKKyAgICAgICAgaGFuZHNo
YWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisgICAgICAgIGhh
bmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQVZhbHVl
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnNfaW5bJ0FLZXknXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXF1ZXN0LmhlYWRlcnNfaW5bJ0VtcHR5VmFsdWUnXSkKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVx
dWVzdF93aXRoX25vbnByaW50YWJsZV9rZXkoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3Jl
YXRlX3JlcXVlc3QoX0dPT0RfUkVRVUVTVF9XSVRIX05PTlBSSU5UQUJMRV9LRVkpCisgICAgICAg
IGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAg
ICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
X0dPT0RfUkVTUE9OU0VfV0lUSF9OT05QUklOVEFCTEVfS0VZLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnc2FtcGxlJywgcmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRlZiB0ZXN0
X2JhZF9yZXF1ZXN0cyhzZWxmKToKKyAgICAgICAgZm9yIHJlcXVlc3QgaW4gbWFwKF9jcmVhdGVf
cmVxdWVzdCwgX0JBRF9SRVFVRVNUUyk6CisgICAgICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNo
YWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisgICAgICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhIYW5kc2hha2VFeGNlcHRpb24sIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKQor
CisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCisKKwor
IyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZV9oeWJpMDgucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRz
aGFrZV9oeWJpMDgucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjc0NGU2N2Q4NDg2MTE1NmJmYWE1Y2U2ZTY2Mzhk
NWEwZjE1OTRkOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RfaGFuZHNoYWtlX2h5YmkwOC5weQpAQCAtMCww
ICsxLDM3NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDExLCBH
b29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
CisiIiJUZXN0cyBmb3IgaGFuZHNoYWtlIG1vZHVsZS4iIiIKKworCitpbXBvcnQgdW5pdHRlc3QK
KworaW1wb3J0IHNldF9zeXNfcGF0aCAgIyBVcGRhdGUgc3lzLnBhdGggdG8gbG9jYXRlIG1vZF9w
eXdlYnNvY2tldCBtb2R1bGUuCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgY29tbW9uCitm
cm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IEFib3J0ZWRCeVVzZXJF
eGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgSGFu
ZHNoYWtlRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1w
b3J0IFZlcnNpb25FeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5oeWJp
IGltcG9ydCBIYW5kc2hha2VyCisKK2ltcG9ydCBtb2NrCisKKworY2xhc3MgUmVxdWVzdERlZmlu
aXRpb24ob2JqZWN0KToKKyAgICAiIiJBIGNsYXNzIGZvciBob2xkaW5nIGRhdGEgZm9yIGNvbnN0
cnVjdGluZyBvcGVuaW5nIGhhbmRzaGFrZSBzdHJpbmdzIGZvcgorICAgIHRlc3RpbmcgdGhlIG9w
ZW5pbmcgaGFuZHNoYWtlIHByb2Nlc3Nvci4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBtZXRob2QsIHVyaSwgaGVhZGVycyk6CisgICAgICAgIHNlbGYubWV0aG9kID0gbWV0aG9k
CisgICAgICAgIHNlbGYudXJpID0gdXJpCisgICAgICAgIHNlbGYuaGVhZGVycyA9IGhlYWRlcnMK
KworCitkZWYgX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCk6CisgICAgcmV0dXJuIFJlcXVlc3RE
ZWZpbml0aW9uKAorICAgICAgICAnR0VUJywgJy9kZW1vJywKKyAgICAgICAgeydIb3N0JzogJ3Nl
cnZlci5leGFtcGxlLmNvbScsCisgICAgICAgICAnVXBncmFkZSc6ICd3ZWJzb2NrZXQnLAorICAg
ICAgICAgJ0Nvbm5lY3Rpb24nOiAnVXBncmFkZScsCisgICAgICAgICAnU2VjLVdlYlNvY2tldC1L
ZXknOiAnZEdobElITmhiWEJzWlNCdWIyNWpaUT09JywKKyAgICAgICAgICdTZWMtV2ViU29ja2V0
LU9yaWdpbic6ICdodHRwOi8vZXhhbXBsZS5jb20nLAorICAgICAgICAgJ1NlYy1XZWJTb2NrZXQt
VmVyc2lvbic6ICc4J30pCisKKworZGVmIF9jcmVhdGVfcmVxdWVzdChyZXF1ZXN0X2RlZik6Cisg
ICAgY29ubiA9IG1vY2suTW9ja0Nvbm4oJycpCisgICAgcmV0dXJuIG1vY2suTW9ja1JlcXVlc3Qo
CisgICAgICAgIG1ldGhvZD1yZXF1ZXN0X2RlZi5tZXRob2QsCisgICAgICAgIHVyaT1yZXF1ZXN0
X2RlZi51cmksCisgICAgICAgIGhlYWRlcnNfaW49cmVxdWVzdF9kZWYuaGVhZGVycywKKyAgICAg
ICAgY29ubmVjdGlvbj1jb25uKQorCisKK2RlZiBfY3JlYXRlX2hhbmRzaGFrZXIocmVxdWVzdCk6
CisgICAgaGFuZHNoYWtlciA9IEhhbmRzaGFrZXIocmVxdWVzdCwgbW9jay5Nb2NrRGlzcGF0Y2hl
cigpKQorICAgIHJldHVybiBoYW5kc2hha2VyCisKKworY2xhc3MgU3VicHJvdG9jb2xDaG9vc2lu
Z0Rpc3BhdGNoZXIob2JqZWN0KToKKyAgICAiIiJBIGRpc3BhdGNoZXIgZm9yIHRlc3RpbmcuIFRo
aXMgZGlzcGF0Y2hlciBzZXRzIHRoZSBpLXRoIHN1YnByb3RvY29sCisgICAgb2YgcmVxdWVzdGVk
IG9uZXMgdG8gd3NfcHJvdG9jb2wgd2hlcmUgaSBpcyBnaXZlbiBvbiBjb25zdHJ1Y3Rpb24gYXMg
aW5kZXgKKyAgICBhcmd1bWVudC4gSWYgaW5kZXggaXMgbmVnYXRpdmUsIGRlZmF1bHRfdmFsdWUg
d2lsbCBiZSBzZXQgdG8gd3NfcHJvdG9jb2wuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgaW5kZXgsIGRlZmF1bHRfdmFsdWU9Tm9uZSk6CisgICAgICAgIHNlbGYuaW5kZXggPSBp
bmRleAorICAgICAgICBzZWxmLmRlZmF1bHRfdmFsdWUgPSBkZWZhdWx0X3ZhbHVlCisKKyAgICBk
ZWYgZG9fZXh0cmFfaGFuZHNoYWtlKHNlbGYsIGNvbm5fY29udGV4dCk6CisgICAgICAgIGlmIHNl
bGYuaW5kZXggPj0gMDoKKyAgICAgICAgICAgIGNvbm5fY29udGV4dC53c19wcm90b2NvbCA9IGNv
bm5fY29udGV4dC53c19yZXF1ZXN0ZWRfcHJvdG9jb2xzWworICAgICAgICAgICAgICAgIHNlbGYu
aW5kZXhdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25uX2NvbnRleHQud3NfcHJvdG9j
b2wgPSBzZWxmLmRlZmF1bHRfdmFsdWUKKworICAgIGRlZiB0cmFuc2Zlcl9kYXRhKHNlbGYsIGNv
bm5fY29udGV4dCk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBIYW5kc2hha2VBYm9ydGVkRXhj
ZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIEFib3J0aW5nRGlzcGF0Y2hl
cihvYmplY3QpOgorICAgICIiIkEgZGlzcGF0Y2hlciBmb3IgdGVzdGluZy4gVGhpcyBkaXNwYXRj
aGVyIHJhaXNlcyBhbiBleGNlcHRpb24gaW4KKyAgICBkb19leHRyYV9oYW5kc2hha2UgdG8gcmVq
ZWN0IHRoZSByZXF1ZXN0LgorICAgICIiIgorCisgICAgZGVmIGRvX2V4dHJhX2hhbmRzaGFrZShz
ZWxmLCBjb25uX2NvbnRleHQpOgorICAgICAgICByYWlzZSBIYW5kc2hha2VBYm9ydGVkRXhjZXB0
aW9uKCdBbiBleGNlcHRpb24gdG8gcmVqZWN0IHRoZSByZXF1ZXN0JykKKworICAgIGRlZiB0cmFu
c2Zlcl9kYXRhKHNlbGYsIGNvbm5fY29udGV4dCk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBB
Ym9ydGVkQnlVc2VyRGlzcGF0Y2hlcihvYmplY3QpOgorICAgICIiIkEgZGlzcGF0Y2hlciBmb3Ig
dGVzdGluZy4gVGhpcyBkaXNwYXRjaGVyIHJhaXNlcyBhbgorICAgIEFib3J0ZWRCeVVzZXJFeGNl
cHRpb24gaW4gZG9fZXh0cmFfaGFuZHNoYWtlIHRvIHJlamVjdCB0aGUgcmVxdWVzdC4KKyAgICAi
IiIKKworICAgIGRlZiBkb19leHRyYV9oYW5kc2hha2Uoc2VsZiwgY29ubl9jb250ZXh0KToKKyAg
ICAgICAgcmFpc2UgQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbignQW4gQWJvcnRlZEJ5VXNlckV4Y2Vw
dGlvbiB0byByZWplY3QgdGhlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAncmVxdWVzdCcpCisKKyAgICBkZWYgdHJhbnNmZXJfZGF0YShzZWxmLCBjb25uX2NvbnRleHQp
OgorICAgICAgICBwYXNzCisKKworX0VYUEVDVEVEX1JFU1BPTlNFID0gKAorICAgICdIVFRQLzEu
MSAxMDEgU3dpdGNoaW5nIFByb3RvY29sc1xyXG4nCisgICAgJ1VwZ3JhZGU6IHdlYnNvY2tldFxy
XG4nCisgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgICdTZWMtV2ViU29ja2V0LUFj
Y2VwdDogczNwUExNQmlUeGFROWtZR3p6aFpSYksreE9vPVxyXG5cclxuJykKKworCitjbGFzcyBI
YW5kc2hha2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSB1bml0dGVzdCBmb3Ig
ZHJhZnQtaWV0Zi1oeWJpLXRoZXdlYnNvY2tldHByb3RvY29sLTA2IGFuZCBsYXRlcgorICAgIGhh
bmRzaGFrZSBwcm9jZXNzb3IuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9kb19oYW5kc2hha2Uo
c2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoX2NyZWF0ZV9nb29kX3Jl
cXVlc3RfZGVmKCkpCisgICAgICAgIGRpc3BhdGNoZXIgPSBtb2NrLk1vY2tEaXNwYXRjaGVyKCkK
KyAgICAgICAgaGFuZHNoYWtlciA9IEhhbmRzaGFrZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikKKyAg
ICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShkaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFrZV9jYWxsZWQpCisKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgKKyAgICAgICAgICAgIF9FWFBFQ1RFRF9SRVNQT05TRSwgcmVxdWVzdC5jb25u
ZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvZGVtbycs
IHJlcXVlc3Qud3NfcmVzb3VyY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2h0dHA6Ly9l
eGFtcGxlLmNvbScsIHJlcXVlc3Qud3Nfb3JpZ2luKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KE5vbmUsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9u
ZSwgcmVxdWVzdC53c19leHRlbnNpb25zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1v
bi5WRVJTSU9OX0hZQkkwOCwgcmVxdWVzdC53c192ZXJzaW9uKQorCisgICAgZGVmIHRlc3RfZG9f
aGFuZHNoYWtlX3dpdGhfY2FwaXRhbGl6ZWRfdmFsdWUoc2VsZik6CisgICAgICAgIHJlcXVlc3Rf
ZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVh
ZGVyc1sndXBncmFkZSddID0gJ1dFQlNPQ0tFVCcKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0
ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hha2VyID0gX2NyZWF0ZV9oYW5k
c2hha2VyKHJlcXVlc3QpCisgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIF9FWFBFQ1RFRF9SRVNQT05TRSwgcmVx
dWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0g
X2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1sn
Q29ubmVjdGlvbiddID0gJ1VQR1JBREUnCisKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVx
dWVzdChyZXF1ZXN0X2RlZikKKyAgICAgICAgaGFuZHNoYWtlciA9IF9jcmVhdGVfaGFuZHNoYWtl
cihyZXF1ZXN0KQorICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBfRVhQRUNURURfUkVTUE9OU0UsIHJlcXVlc3Qu
Y29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X2RvX2hhbmRzaGFrZV93
aXRoX211bHRpcGxlX2Nvbm5lY3Rpb25fdmFsdWVzKHNlbGYpOgorICAgICAgICByZXF1ZXN0X2Rl
ZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3RfZGVmLmhlYWRl
cnNbJ0Nvbm5lY3Rpb24nXSA9ICdVcGdyYWRlLCBrZWVwLWFsaXZlLCAsICcKKworICAgICAgICBy
ZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hha2Vy
ID0gX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVlc3QpCisgICAgICAgIGhhbmRzaGFrZXIuZG9faGFu
ZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIF9FWFBFQ1RF
RF9SRVNQT05TRSwgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVm
IHRlc3RfYWJvcnRpbmdfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICBoYW5kc2hha2VyID0gSGFu
ZHNoYWtlcigKKyAgICAgICAgICAgIF9jcmVhdGVfcmVxdWVzdChfY3JlYXRlX2dvb2RfcmVxdWVz
dF9kZWYoKSksCisgICAgICAgICAgICBBYm9ydGluZ0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgIyBk
b19leHRyYV9oYW5kc2hha2UgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gQ2hlY2sgdGhhdCBpdCdzIG5v
dCBjYXVnaHQgYnkKKyAgICAgICAgIyBkb19oYW5kc2hha2UuCisgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKEhhbmRzaGFrZUFib3J0ZWRFeGNlcHRpb24sIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtl
KQorCisgICAgZGVmIHRlc3RfZG9faGFuZHNoYWtlX3dpdGhfcHJvdG9jb2woc2VsZik6CisgICAg
ICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVx
dWVzdF9kZWYuaGVhZGVyc1snU2VjLVdlYlNvY2tldC1Qcm90b2NvbCddID0gJ2NoYXQsIHN1cGVy
Y2hhdCcKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQor
ICAgICAgICBoYW5kc2hha2VyID0gSGFuZHNoYWtlcihyZXF1ZXN0LCBTdWJwcm90b2NvbENob29z
aW5nRGlzcGF0Y2hlcigwKSkKKyAgICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorCisg
ICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFID0gKAorICAgICAgICAgICAgJ0hUVFAvMS4xIDEwMSBT
d2l0Y2hpbmcgUHJvdG9jb2xzXHJcbicKKyAgICAgICAgICAgICdVcGdyYWRlOiB3ZWJzb2NrZXRc
clxuJworICAgICAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgICAgICAgICAg
J1NlYy1XZWJTb2NrZXQtQWNjZXB0OiBzM3BQTE1CaVR4YVE5a1lHenpoWlJiSyt4T289XHJcbicK
KyAgICAgICAgICAgICdTZWMtV2ViU29ja2V0LVByb3RvY29sOiBjaGF0XHJcblxyXG4nKQorCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVhQRUNURURfUkVTUE9OU0UsIHJlcXVlc3QuY29ubmVj
dGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnY2hhdCcsIHJl
cXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9kb19oYW5kc2hha2VfcHJvdG9jb2xf
bm90X2luX3JlcXVlc3RfYnV0X2luX3Jlc3BvbnNlKHNlbGYpOgorICAgICAgICByZXF1ZXN0X2Rl
ZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRl
X3JlcXVlc3QocmVxdWVzdF9kZWYpCisgICAgICAgIGhhbmRzaGFrZXIgPSBIYW5kc2hha2VyKAor
ICAgICAgICAgICAgcmVxdWVzdCwgU3VicHJvdG9jb2xDaG9vc2luZ0Rpc3BhdGNoZXIoLTEsICdm
b29iYXInKSkKKyAgICAgICAgIyBObyByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgYnV0IHdzX3Byb3Rv
Y29sIGlzIHNldC4gSGFuZHNoYWtlRXhjZXB0aW9uCisgICAgICAgICMgbXVzdCBiZSByYWlzZWQu
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEhhbmRzaGFrZUV4Y2VwdGlvbiwgaGFuZHNoYWtl
ci5kb19oYW5kc2hha2UpCisKKyAgICBkZWYgdGVzdF9kb19oYW5kc2hha2Vfd2l0aF9wcm90b2Nv
bF9ub19wcm90b2NvbF9zZWxlY3Rpb24oc2VsZik6CisgICAgICAgIHJlcXVlc3RfZGVmID0gX2Ny
ZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snU2Vj
LVdlYlNvY2tldC1Qcm90b2NvbCddID0gJ2NoYXQsIHN1cGVyY2hhdCcKKworICAgICAgICByZXF1
ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAgICAgICBoYW5kc2hha2VyID0g
X2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVlc3QpCisgICAgICAgICMgd3NfcHJvdG9jb2wgaXMgbm90
IHNldC4gSGFuZHNoYWtlRXhjZXB0aW9uIG11c3QgYmUgcmFpc2VkLgorICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhIYW5kc2hha2VFeGNlcHRpb24sIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKQor
CisgICAgZGVmIHRlc3RfZG9faGFuZHNoYWtlX3dpdGhfZXh0ZW5zaW9ucyhzZWxmKToKKyAgICAg
ICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1
ZXN0X2RlZi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnXSA9ICgKKyAgICAgICAg
ICAgICdkZWZsYXRlLXN0cmVhbSwgdW5rbm93bicpCisKKyAgICAgICAgRVhQRUNURURfUkVTUE9O
U0UgPSAoCisgICAgICAgICAgICAnSFRUUC8xLjEgMTAxIFN3aXRjaGluZyBQcm90b2NvbHNcclxu
JworICAgICAgICAgICAgJ1VwZ3JhZGU6IHdlYnNvY2tldFxyXG4nCisgICAgICAgICAgICAnQ29u
bmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgICAgICAgICAnU2VjLVdlYlNvY2tldC1BY2NlcHQ6
IHMzcFBMTUJpVHhhUTlrWUd6emhaUmJLK3hPbz1cclxuJworICAgICAgICAgICAgJ1NlYy1XZWJT
b2NrZXQtRXh0ZW5zaW9uczogZGVmbGF0ZS1zdHJlYW1cclxuXHJcbicpCisKKyAgICAgICAgcmVx
dWVzdCA9IF9jcmVhdGVfcmVxdWVzdChyZXF1ZXN0X2RlZikKKyAgICAgICAgaGFuZHNoYWtlciA9
IF9jcmVhdGVfaGFuZHNoYWtlcihyZXF1ZXN0KQorICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRz
aGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVhQRUNURURfUkVTUE9OU0UsIHJlcXVl
c3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgx
LCBsZW4ocmVxdWVzdC53c19leHRlbnNpb25zKSkKKyAgICAgICAgZXh0ZW5zaW9uID0gcmVxdWVz
dC53c19leHRlbnNpb25zWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2RlZmxhdGUtc3Ry
ZWFtJywgZXh0ZW5zaW9uLm5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4o
ZXh0ZW5zaW9uLmdldF9wYXJhbWV0ZXJfbmFtZXMoKSkpCisKKyAgICBkZWYgdGVzdF9kb19oYW5k
c2hha2Vfd2l0aF9xdW90ZWRfZXh0ZW5zaW9ucyhzZWxmKToKKyAgICAgICAgcmVxdWVzdF9kZWYg
PSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJz
WydTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnXSA9ICgKKyAgICAgICAgICAgICdkZWZsYXRlLXN0
cmVhbSwgLCAnCisgICAgICAgICAgICAndW5rbm93bjsgZSAgID0gICAgIm1jXjIiOyBtYT0iXHJc
biAgICAgIFxcXHJmICAiOyBwdj1ucnQnKQorCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3Jl
cXVlc3QocmVxdWVzdF9kZWYpCisgICAgICAgIGhhbmRzaGFrZXIgPSBfY3JlYXRlX2hhbmRzaGFr
ZXIocmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSGFuZHNoYWtlRXhjZXB0aW9u
LCBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSkKKworICAgIGRlZiB0ZXN0X2RvX2hhbmRzaGFrZV93
aXRoX29wdGlvbmFsX2hlYWRlcnMoc2VsZik6CisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0
ZV9nb29kX3JlcXVlc3RfZGVmKCkKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snRW1wdHlW
YWx1ZSddID0gJycKKyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snQUtleSddID0gJ0FWYWx1
ZScKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKQorICAg
ICAgICBoYW5kc2hha2VyID0gX2NyZWF0ZV9oYW5kc2hha2VyKHJlcXVlc3QpCisgICAgICAgIGhh
bmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgICdBVmFsdWUnLCByZXF1ZXN0LmhlYWRlcnNfaW5bJ0FLZXknXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICcnLCByZXF1ZXN0LmhlYWRlcnNfaW5bJ0VtcHR5
VmFsdWUnXSkKKworICAgIGRlZiB0ZXN0X2Fib3J0X2V4dHJhX2hhbmRzaGFrZShzZWxmKToKKyAg
ICAgICAgaGFuZHNoYWtlciA9IEhhbmRzaGFrZXIoCisgICAgICAgICAgICBfY3JlYXRlX3JlcXVl
c3QoX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkpLAorICAgICAgICAgICAgQWJvcnRlZEJ5VXNl
ckRpc3BhdGNoZXIoKSkKKyAgICAgICAgIyBkb19leHRyYV9oYW5kc2hha2UgcmFpc2VzIGFuIEFi
b3J0ZWRCeVVzZXJFeGNlcHRpb24uIENoZWNrIHRoYXQgaXQncworICAgICAgICAjIG5vdCBjYXVn
aHQgYnkgZG9faGFuZHNoYWtlLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBYm9ydGVkQnlV
c2VyRXhjZXB0aW9uLCBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSkKKworICAgIGRlZiB0ZXN0X2Jh
ZF9yZXF1ZXN0cyhzZWxmKToKKyAgICAgICAgYmFkX2Nhc2VzID0gWworICAgICAgICAgICAgKCdI
VFRQIHJlcXVlc3QnLAorICAgICAgICAgICAgIFJlcXVlc3REZWZpbml0aW9uKAorICAgICAgICAg
ICAgICAgICAnR0VUJywgJy9kZW1vJywKKyAgICAgICAgICAgICAgICAgeydIb3N0JzogJ3d3dy5n
b29nbGUuY29tJywKKyAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzoKKyAgICAgICAgICAg
ICAgICAgICAgICAnTW96aWxsYS81LjAgKE1hY2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFggMTAu
NTsnCisgICAgICAgICAgICAgICAgICAgICAgJyBlbi1VUzsgcnY6MS45LjEuMykgR2Vja28vMjAw
OTA4MjQgRmlyZWZveC8zLjUuMycKKyAgICAgICAgICAgICAgICAgICAgICAnIEdUQjYgR1RCQScs
CisgICAgICAgICAgICAgICAgICAnQWNjZXB0JzoKKyAgICAgICAgICAgICAgICAgICAgICAndGV4
dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksJworICAg
ICAgICAgICAgICAgICAgICAgICcqLyo7cT0wLjgnLAorICAgICAgICAgICAgICAgICAgJ0FjY2Vw
dC1MYW5ndWFnZSc6ICdlbi11cyxlbjtxPTAuNScsCisgICAgICAgICAgICAgICAgICAnQWNjZXB0
LUVuY29kaW5nJzogJ2d6aXAsZGVmbGF0ZScsCisgICAgICAgICAgICAgICAgICAnQWNjZXB0LUNo
YXJzZXQnOiAnSVNPLTg4NTktMSx1dGYtODtxPTAuNywqO3E9MC43JywKKyAgICAgICAgICAgICAg
ICAgICdLZWVwLUFsaXZlJzogJzMwMCcsCisgICAgICAgICAgICAgICAgICAnQ29ubmVjdGlvbic6
ICdrZWVwLWFsaXZlJ30pLCBOb25lLCBUcnVlKV0KKworICAgICAgICByZXF1ZXN0X2RlZiA9IF9j
cmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3RfZGVmLm1ldGhvZCA9ICdQ
T1NUJworICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnV3JvbmcgbWV0aG9kJywgcmVxdWVzdF9k
ZWYsIE5vbmUsIFRydWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3Jl
cXVlc3RfZGVmKCkKKyAgICAgICAgZGVsIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ0hvc3QnXQorICAg
ICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnTWlzc2luZyBIb3N0JywgcmVxdWVzdF9kZWYsIE5vbmUs
IFRydWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVm
KCkKKyAgICAgICAgZGVsIHJlcXVlc3RfZGVmLmhlYWRlcnNbJ1VwZ3JhZGUnXQorICAgICAgICBi
YWRfY2FzZXMuYXBwZW5kKCgnTWlzc2luZyBVcGdyYWRlJywgcmVxdWVzdF9kZWYsIE5vbmUsIFRy
dWUpKQorCisgICAgICAgIHJlcXVlc3RfZGVmID0gX2NyZWF0ZV9nb29kX3JlcXVlc3RfZGVmKCkK
KyAgICAgICAgcmVxdWVzdF9kZWYuaGVhZGVyc1snVXBncmFkZSddID0gJ25vbndlYnNvY2tldCcK
KyAgICAgICAgYmFkX2Nhc2VzLmFwcGVuZCgoJ1dyb25nIFVwZ3JhZGUnLCByZXF1ZXN0X2RlZiwg
Tm9uZSwgVHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVz
dF9kZWYoKQorICAgICAgICBkZWwgcmVxdWVzdF9kZWYuaGVhZGVyc1snQ29ubmVjdGlvbiddCisg
ICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdNaXNzaW5nIENvbm5lY3Rpb24nLCByZXF1ZXN0X2Rl
ZiwgTm9uZSwgVHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVx
dWVzdF9kZWYoKQorICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydDb25uZWN0aW9uJ10gPSAn
RG93bmdyYWRlJworICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnV3JvbmcgQ29ubmVjdGlvbics
IHJlcXVlc3RfZGVmLCBOb25lLCBUcnVlKSkKKworICAgICAgICByZXF1ZXN0X2RlZiA9IF9jcmVh
dGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIGRlbCByZXF1ZXN0X2RlZi5oZWFkZXJzWydT
ZWMtV2ViU29ja2V0LUtleSddCisgICAgICAgIGJhZF9jYXNlcy5hcHBlbmQoKCdNaXNzaW5nIFNl
Yy1XZWJTb2NrZXQtS2V5JywgcmVxdWVzdF9kZWYsIDQwMCwgVHJ1ZSkpCisKKyAgICAgICAgcmVx
dWVzdF9kZWYgPSBfY3JlYXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1ZXN0X2Rl
Zi5oZWFkZXJzWydTZWMtV2ViU29ja2V0LUtleSddID0gKAorICAgICAgICAgICAgJ2RHaGxJSE5o
YlhCc1pTQnViMjVqWlE9PWdhcmJhZ2UnKQorICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnV3Jv
bmcgU2VjLVdlYlNvY2tldC1LZXkgKHdpdGggZ2FyYmFnZSBvbiB0aGUgdGFpbCknLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2RlZiwgNDAwLCBUcnVlKSkKKworICAgICAgICBy
ZXF1ZXN0X2RlZiA9IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIHJlcXVlc3Rf
ZGVmLmhlYWRlcnNbJ1NlYy1XZWJTb2NrZXQtS2V5J10gPSAnWVE9PScgICMgQkFTRTY0IG9mICdh
JworICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKAorICAgICAgICAgICAgKCdXcm9uZyBTZWMtV2Vi
U29ja2V0LUtleSAoZGVjb2RlZCB2YWx1ZSBpcyBub3QgMTYgb2N0ZXRzIGxvbmcpJywKKyAgICAg
ICAgICAgICByZXF1ZXN0X2RlZiwgNDAwLCBUcnVlKSkKKworICAgICAgICByZXF1ZXN0X2RlZiA9
IF9jcmVhdGVfZ29vZF9yZXF1ZXN0X2RlZigpCisgICAgICAgIGRlbCByZXF1ZXN0X2RlZi5oZWFk
ZXJzWydTZWMtV2ViU29ja2V0LVZlcnNpb24nXQorICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgn
TWlzc2luZyBTZWMtV2ViU29ja2V0LVZlcnNpb24nLCByZXF1ZXN0X2RlZiwgTm9uZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkpCisKKyAgICAgICAgcmVxdWVzdF9kZWYgPSBfY3Jl
YXRlX2dvb2RfcmVxdWVzdF9kZWYoKQorICAgICAgICByZXF1ZXN0X2RlZi5oZWFkZXJzWydTZWMt
V2ViU29ja2V0LVZlcnNpb24nXSA9ICczJworICAgICAgICBiYWRfY2FzZXMuYXBwZW5kKCgnV3Jv
bmcgU2VjLVdlYlNvY2tldC1WZXJzaW9uJywgcmVxdWVzdF9kZWYsIE5vbmUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZhbHNlKSkKKworICAgICAgICBmb3IgKGNhc2VfbmFtZSwgcmVxdWVz
dF9kZWYsIGV4cGVjdGVkX3N0YXR1cywKKyAgICAgICAgICAgICBleHBlY3RfaGFuZHNoYWtlX2V4
Y2VwdGlvbikgaW4gYmFkX2Nhc2VzOgorICAgICAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVx
dWVzdChyZXF1ZXN0X2RlZikKKyAgICAgICAgICAgIGhhbmRzaGFrZXIgPSBIYW5kc2hha2VyKHJl
cXVlc3QsIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICAgICAgc2VsZi5m
YWlsKCdObyBleGNlcHRpb24gdGhyb3duIGZvciBcJyVzXCcgY2FzZScgJSBjYXNlX25hbWUpCisg
ICAgICAgICAgICBleGNlcHQgSGFuZHNoYWtlRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RfaGFuZHNoYWtlX2V4Y2VwdGlvbikKKyAgICAgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3N0YXR1cywgZS5zdGF0dXMpCisgICAgICAg
ICAgICBleGNlcHQgVmVyc2lvbkV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKGV4cGVjdF9oYW5kc2hha2VfZXhjZXB0aW9uKQorCisKK2lmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2Nr
ZXQvdGVzdC90ZXN0X2h0dHBfaGVhZGVyX3V0aWwucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2h0dHBfaGVhZGVyX3V0aWwucHkKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDM2ZGM1N2MzNzMxMDcxZmUyOTAxOTE5ZTMzZjI0YzFiNTU5ZjYwNQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tl
dC90ZXN0L3Rlc3RfaHR0cF9oZWFkZXJfdXRpbC5weQpAQCAtMCwwICsxLDkwIEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZvciBodHRw
X2hlYWRlcl91dGlsIG1vZHVsZS4iIiIKKworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBtb2Rf
cHl3ZWJzb2NrZXQgaW1wb3J0IGh0dHBfaGVhZGVyX3V0aWwKKworCitjbGFzcyBVbml0VGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSB1bml0dGVzdCBmb3IgaHR0cF9oZWFkZXJfdXRp
bCBtb2R1bGUuIiIiCisKKyAgICBkZWYgdGVzdF9wYXJzZV9yZWxhdGl2ZV91cmkoc2VsZik6Cisg
ICAgICAgIGhvc3QsIHBvcnQsIHJlc291cmNlID0gaHR0cF9oZWFkZXJfdXRpbC5wYXJzZV91cmko
Jy93cy90ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBob3N0KQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Jy93cy90ZXN0JywgcmVzb3VyY2UpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9hYnNvbHV0ZV91cmko
c2VsZik6CisgICAgICAgIGhvc3QsIHBvcnQsIHJlc291cmNlID0gaHR0cF9oZWFkZXJfdXRpbC5w
YXJzZV91cmkoCisgICAgICAgICAgICAnd3M6Ly9sb2NhbGhvc3Q6MTAwODAvd3MvdGVzdCcpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2xvY2FsaG9zdCcsIGhvc3QpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMTAwODAsIHBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy93cy90
ZXN0JywgcmVzb3VyY2UpCisKKyAgICAgICAgaG9zdCwgcG9ydCwgcmVzb3VyY2UgPSBodHRwX2hl
YWRlcl91dGlsLnBhcnNlX3VyaSgKKyAgICAgICAgICAgICd3czovL2V4YW1wbGUuY29tL3dzL3Rl
c3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdleGFtcGxlLmNvbScsIGhvc3QpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoODAsIHBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Jy93cy90ZXN0JywgcmVzb3VyY2UpCisKKyAgICAgICAgaG9zdCwgcG9ydCwgcmVzb3VyY2UgPSBo
dHRwX2hlYWRlcl91dGlsLnBhcnNlX3VyaSgKKyAgICAgICAgICAgICd3c3M6Ly9leGFtcGxlLmNv
bS8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdleGFtcGxlLmNvbScsIGhvc3QpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDQzLCBwb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCcvJywgcmVzb3VyY2UpCisKKyAgICAgICAgaG9zdCwgcG9ydCwgcmVzb3VyY2UgPSBodHRwX2hl
YWRlcl91dGlsLnBhcnNlX3VyaSgKKyAgICAgICAgICAgICd3czovL2V4YW1wbGUuY29tOjgwODAn
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdleGFtcGxlLmNvbScsIGhvc3QpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoODA4MCwgcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
LycsIHJlc291cmNlKQorCisgICAgZGVmIHRlc3RfcGFyc2VfaW52YWxpZF91cmkoc2VsZik6Cisg
ICAgICAgIGhvc3QsIHBvcnQsIHJlc291cmNlID0gaHR0cF9oZWFkZXJfdXRpbC5wYXJzZV91cmko
J3dzOi8vLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcmVzb3VyY2UpCisKKyAg
ICAgICAgaG9zdCwgcG9ydCwgcmVzb3VyY2UgPSBodHRwX2hlYWRlcl91dGlsLnBhcnNlX3VyaSgn
d3M6Ly9sb2NhbGhvc3Q6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCByZXNvdXJj
ZSkKKworICAgICAgICBob3N0LCBwb3J0LCByZXNvdXJjZSA9IGh0dHBfaGVhZGVyX3V0aWwucGFy
c2VfdXJpKCd3czovL2xvY2FsaG9zdDovd3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5v
bmUsIHJlc291cmNlKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRl
c3QubWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21lbW9yaXppbmdm
aWxlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rl
c3QvdGVzdF9tZW1vcml6aW5nZmlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjFiOGVlZjQzMzc4YTliMDA2
MjVmMjIwYzk3ZmUyMmY3NDBhOGY3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9tZW1vcml6aW5nZmlsZS5w
eQpAQCAtMCwwICsxLDEwNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdo
dCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworCisiIiJUZXN0cyBmb3IgbWVtb3JpemluZ2ZpbGUgbW9kdWxlLiIiIgorCisKK2lt
cG9ydCBTdHJpbmdJTworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBzZXRfc3lzX3BhdGggICMg
VXBkYXRlIHN5cy5wYXRoIHRvIGxvY2F0ZSBtb2RfcHl3ZWJzb2NrZXQgbW9kdWxlLgorCitmcm9t
IG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbWVtb3JpemluZ2ZpbGUKKworCitjbGFzcyBVdGlsVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSB1bml0dGVzdCBmb3IgbWVtb3JpemluZ2Zp
bGUgbW9kdWxlLiIiIgorCisgICAgZGVmIGNoZWNrKHNlbGYsIG1lbW9yaXppbmdfZmlsZSwgbnVt
X3JlYWQsIGV4cGVjdGVkX2xpc3QpOgorICAgICAgICBmb3IgdW51c2VkIGluIHJhbmdlKG51bV9y
ZWFkKToKKyAgICAgICAgICAgIG1lbW9yaXppbmdfZmlsZS5yZWFkbGluZSgpCisgICAgICAgIGFj
dHVhbF9saXN0ID0gbWVtb3JpemluZ19maWxlLmdldF9tZW1vcml6ZWRfbGluZXMoKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGxlbihleHBlY3RlZF9saXN0KSwgbGVuKGFjdHVhbF9saXN0KSkK
KyAgICAgICAgZm9yIGV4cGVjdGVkLCBhY3R1YWwgaW4gemlwKGV4cGVjdGVkX2xpc3QsIGFjdHVh
bF9saXN0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkK
KworICAgIGRlZiBjaGVja193aXRoX3NpemUoc2VsZiwgbWVtb3JpemluZ19maWxlLCByZWFkX3Np
emUsIGV4cGVjdGVkX2xpc3QpOgorICAgICAgICByZWFkX2xpc3QgPSBbXQorICAgICAgICByZWFk
X2xpbmUgPSAnJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgbGluZSA9IG1lbW9y
aXppbmdfZmlsZS5yZWFkbGluZShyZWFkX3NpemUpCisgICAgICAgICAgICBsaW5lX2xlbmd0aCA9
IGxlbihsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVfbGVuZ3RoIDw9IHJl
YWRfc2l6ZSkKKyAgICAgICAgICAgIGlmIGxpbmVfbGVuZ3RoID09IDA6CisgICAgICAgICAgICAg
ICAgaWYgcmVhZF9saW5lICE9ICcnOgorICAgICAgICAgICAgICAgICAgICByZWFkX2xpc3QuYXBw
ZW5kKHJlYWRfbGluZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmVhZF9s
aW5lICs9IGxpbmUKKyAgICAgICAgICAgIGlmIGxpbmVbbGluZV9sZW5ndGggLSAxXSA9PSAnXG4n
OgorICAgICAgICAgICAgICAgIHJlYWRfbGlzdC5hcHBlbmQocmVhZF9saW5lKQorICAgICAgICAg
ICAgICAgIHJlYWRfbGluZSA9ICcnCisgICAgICAgIGFjdHVhbF9saXN0ID0gbWVtb3JpemluZ19m
aWxlLmdldF9tZW1vcml6ZWRfbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihl
eHBlY3RlZF9saXN0KSwgbGVuKGFjdHVhbF9saXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChsZW4oZXhwZWN0ZWRfbGlzdCksIGxlbihyZWFkX2xpc3QpKQorICAgICAgICBmb3IgZXhwZWN0
ZWQsIGFjdHVhbCwgcmVhZCBpbiB6aXAoZXhwZWN0ZWRfbGlzdCwgYWN0dWFsX2xpc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2xpc3QpOgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVhZCkKKworICAgIGRlZiB0ZXN0X2dldF9tZW1vcml6
ZWRfbGluZXMoc2VsZik6CisgICAgICAgIG1lbW9yaXppbmdfZmlsZSA9IG1lbW9yaXppbmdmaWxl
Lk1lbW9yaXppbmdGaWxlKFN0cmluZ0lPLlN0cmluZ0lPKAorICAgICAgICAgICAgICAgICdIZWxs
b1xuV29ybGRcbldlbGNvbWUnKSkKKyAgICAgICAgc2VsZi5jaGVjayhtZW1vcml6aW5nX2ZpbGUs
IDMsIFsnSGVsbG9cbicsICdXb3JsZFxuJywgJ1dlbGNvbWUnXSkKKworICAgIGRlZiB0ZXN0X2dl
dF9tZW1vcml6ZWRfbGluZXNfbGltaXRfbWVtb3JpemVkX2xpbmVzKHNlbGYpOgorICAgICAgICBt
ZW1vcml6aW5nX2ZpbGUgPSBtZW1vcml6aW5nZmlsZS5NZW1vcml6aW5nRmlsZShTdHJpbmdJTy5T
dHJpbmdJTygKKyAgICAgICAgICAgICAgICAnSGVsbG9cbldvcmxkXG5XZWxjb21lJyksIDIpCisg
ICAgICAgIHNlbGYuY2hlY2sobWVtb3JpemluZ19maWxlLCAzLCBbJ0hlbGxvXG4nLCAnV29ybGRc
biddKQorCisgICAgZGVmIHRlc3RfZ2V0X21lbW9yaXplZF9saW5lc19lbXB0eV9maWxlKHNlbGYp
OgorICAgICAgICBtZW1vcml6aW5nX2ZpbGUgPSBtZW1vcml6aW5nZmlsZS5NZW1vcml6aW5nRmls
ZShTdHJpbmdJTy5TdHJpbmdJTygKKyAgICAgICAgICAgICAgICAnJykpCisgICAgICAgIHNlbGYu
Y2hlY2sobWVtb3JpemluZ19maWxlLCAxMCwgW10pCisKKyAgICBkZWYgdGVzdF9nZXRfbWVtb3Jp
emVkX2xpbmVzX3dpdGhfc2l6ZShzZWxmKToKKyAgICAgICAgZm9yIHNpemUgaW4gcmFuZ2UoMSwg
MTApOgorICAgICAgICAgICAgbWVtb3JpemluZ19maWxlID0gbWVtb3JpemluZ2ZpbGUuTWVtb3Jp
emluZ0ZpbGUoU3RyaW5nSU8uU3RyaW5nSU8oCisgICAgICAgICAgICAgICAgJ0hlbGxvXG5Xb3Js
ZFxuV2VsY29tZScpKQorICAgICAgICAgICAgc2VsZi5jaGVja193aXRoX3NpemUobWVtb3Jpemlu
Z19maWxlLCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydIZWxsb1xu
JywgJ1dvcmxkXG4nLCAnV2VsY29tZSddKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgor
ICAgIHVuaXR0ZXN0Lm1haW4oKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9t
b2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rl
c3QvdGVzdF9tb2NrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkYzIzYTczZDhmYjFhMDdhZWIzZTVhZTk0MDJj
Yzg2YjhmY2MzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21vY2sucHkKQEAgLTAsMCArMSwxNDUgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4K
KyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisj
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiVGVzdHMg
Zm9yIG1vY2sgbW9kdWxlLiIiIgorCisKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHRocmVhZGluZwor
aW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBzZXRfc3lzX3BhdGggICMgVXBkYXRlIHN5cy5wYXRo
IHRvIGxvY2F0ZSBtb2RfcHl3ZWJzb2NrZXQgbW9kdWxlLgorCitmcm9tIHRlc3QgaW1wb3J0IG1v
Y2sKKworCitjbGFzcyBNb2NrQ29ublRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkEg
dW5pdHRlc3QgZm9yIE1vY2tDb25uIGNsYXNzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgor
ICAgICAgICBzZWxmLl9jb25uID0gbW9jay5Nb2NrQ29ubignQUJDXHJcbkRFRkdcclxuXHJcbkhJ
SksnKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ0FCQ1xyXG4nLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ0RFRkdcclxuJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdcclxuJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdISUpLJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCcnLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisKKyAgICBkZWYgdGVzdF9y
ZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBQkNcclxuRCcsIHNlbGYuX2Nv
bm4ucmVhZCg2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRUZHXHJcblxyXG5ISScsIHNl
bGYuX2Nvbm4ucmVhZCg5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSksnLCBzZWxmLl9j
b25uLnJlYWQoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLl9jb25uLnJl
YWQoMTApKQorCisgICAgZGVmIHRlc3RfcmVhZF9hbmRfcmVhZGxpbmUoc2VsZik6CisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ0FCQ1xyXG5EJywgc2VsZi5fY29ubi5yZWFkKDYpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdFRkdcclxuJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdcclxuSElKSycsIHNlbGYuX2Nvbm4ucmVhZCg5KSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQorCisgICAg
ZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIHNlbGYuX2Nvbm4ud3JpdGUoJ0hlbGxvXHJc
bicpCisgICAgICAgIHNlbGYuX2Nvbm4ud3JpdGUoJ1dvcmxkXHJcbicpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ0hlbGxvXHJcbldvcmxkXHJcbicsIHNlbGYuX2Nvbm4ud3JpdHRlbl9kYXRh
KCkpCisKKworY2xhc3MgTW9ja0Jsb2NraW5nQ29ublRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgICIiIkEgdW5pdHRlc3QgZm9yIE1vY2tCbG9ja2luZ0Nvbm4gY2xhc3MuIiIiCisKKyAgICBk
ZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyB0aGF0IGRhdGEgcHV0IHRvIE1v
Y2tCbG9ja2luZ0Nvbm4gYnkgcHV0X2J5dGVzIG1ldGhvZCBjYW4gYmUKKyAgICAgICAgcmVhZCBm
cm9tIGl0LgorICAgICAgICAiIiIKKworICAgICAgICBjbGFzcyBMaW5lUmVhZGVyKHRocmVhZGlu
Zy5UaHJlYWQpOgorICAgICAgICAgICAgIiIiQSB0ZXN0IGNsYXNzIHRoYXQgbGF1bmNoZXMgYSB0
aHJlYWQsIGNhbGxzIHJlYWRsaW5lIG9uIHRoZQorICAgICAgICAgICAgc3BlY2lmaWVkIGNvbm4g
cmVwZWF0ZWRseSBhbmQgcHV0cyB0aGUgcmVhZCBkYXRhIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAg
ICAgICAgIHF1ZXVlLgorICAgICAgICAgICAgIiIiCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBjb25uLCBxdWV1ZSk6CisgICAgICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5f
X2luaXRfXyhzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuX3F1ZXVlID0gcXVldWUKKyAgICAg
ICAgICAgICAgICBzZWxmLl9jb25uID0gY29ubgorICAgICAgICAgICAgICAgIHNlbGYuc2V0RGFl
bW9uKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5zdGFydCgpCisKKyAgICAgICAgICAgIGRl
ZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YSA9IHNlbGYuX2Nvbm4ucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9xdWV1ZS5wdXQoZGF0YSkKKworICAgICAgICBjb25uID0gbW9jay5Nb2NrQmxvY2tpbmdD
b25uKCkKKyAgICAgICAgcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHJlYWRlciA9IExp
bmVSZWFkZXIoY29ubiwgcXVldWUpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhxdWV1ZS5lbXB0
eSgpKQorICAgICAgICBjb25uLnB1dF9ieXRlcygnRm9vIGJhclxyXG4nKQorICAgICAgICByZWFk
ID0gcXVldWUuZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRm9vIGJhclxyXG4nLCBy
ZWFkKQorCisKK2NsYXNzIE1vY2tUYWJsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIi
IkEgdW5pdHRlc3QgZm9yIE1vY2tUYWJsZSBjbGFzcy4iIiIKKworICAgIGRlZiB0ZXN0X2NyZWF0
ZV9mcm9tX2RpY3Qoc2VsZik6CisgICAgICAgIHRhYmxlID0gbW9jay5Nb2NrVGFibGUoeydLZXkn
OiAnVmFsdWUnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQo
J0tFWScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydrZXknXSkK
KworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2xpc3Qoc2VsZik6CisgICAgICAgIHRhYmxlID0g
bW9jay5Nb2NrVGFibGUoWygnS2V5JywgJ1ZhbHVlJyldKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdWYWx1ZScsIHRhYmxlLmdldCgnS0VZJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J1ZhbHVlJywgdGFibGVbJ2tleSddKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fdHVwbGUo
c2VsZik6CisgICAgICAgIHRhYmxlID0gbW9jay5Nb2NrVGFibGUoKCgnS2V5JywgJ1ZhbHVlJyks
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQoJ0tFWScpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydrZXknXSkKKworICAgIGRl
ZiB0ZXN0X3NldF9hbmRfZ2V0KHNlbGYpOgorICAgICAgICB0YWJsZSA9IG1vY2suTW9ja1RhYmxl
KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB0YWJsZS5nZXQoJ0tleScpKQorICAg
ICAgICB0YWJsZVsnS2V5J10gPSAnVmFsdWUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1Zh
bHVlJywgdGFibGUuZ2V0KCdLZXknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUn
LCB0YWJsZS5nZXQoJ2tleScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRh
YmxlLmdldCgnS0VZJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVb
J0tleSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydrZXknXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZVsnS0VZJ10pCisKKworaWYg
X19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKKworCisjIHZpOnN0
cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbXNndXRpbC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbXNndXRpbC5weQpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43YTNkYTA4Mzk4OTg1OTQzYTIxMWEzZjJlZGYwNGYwYmNkOWZhMTQ1Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3Qv
dGVzdF9tc2d1dGlsLnB5CkBAIC0wLDAgKzEsNzc5IEBACisjIS91c3IvYmluL2VudiBweXRob24K
KyMKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZvciBtc2d1dGlsIG1vZHVsZS4iIiIK
KworCitpbXBvcnQgYXJyYXkKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHVu
aXR0ZXN0CitpbXBvcnQgemxpYgorCitpbXBvcnQgc2V0X3N5c19wYXRoICAjIFVwZGF0ZSBzeXMu
cGF0aCB0byBsb2NhdGUgbW9kX3B5d2Vic29ja2V0IG1vZHVsZS4KKworZnJvbSBtb2RfcHl3ZWJz
b2NrZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuZXh0ZW5zaW9ucyBpbXBv
cnQgRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yCitmcm9tIG1vZF9weXdlYnNvY2tldCBp
bXBvcnQgbXNndXRpbAorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuc3RyZWFtIGltcG9ydCBJbnZhbGlk
VVRGOEV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuc3RyZWFtIGltcG9ydCBTdHJlYW0K
K2Zyb20gbW9kX3B5d2Vic29ja2V0LnN0cmVhbSBpbXBvcnQgU3RyZWFtSGl4aWU3NQorZnJvbSBt
b2RfcHl3ZWJzb2NrZXQuc3RyZWFtIGltcG9ydCBTdHJlYW1PcHRpb25zCitmcm9tIG1vZF9weXdl
YnNvY2tldCBpbXBvcnQgdXRpbAorZnJvbSB0ZXN0IGltcG9ydCBtb2NrCisKKworIyBXZSB1c2Ug
b25lIGZpeGVkIG5vbmNlIGZvciB0ZXN0aW5nIGluc3RlYWQgb2YgY3J5cHRvZ3JhcGhpY2FsbHkg
c2VjdXJlIFBSTkcuCitfTUFTS0lOR19OT05DRSA9ICdBQkNEJworCisKK2RlZiBfbWFza19oeWJp
KGZyYW1lKToKKyAgICBmcmFtZV9rZXkgPSBtYXAob3JkLCBfTUFTS0lOR19OT05DRSkKKyAgICBm
cmFtZV9rZXlfbGVuID0gbGVuKGZyYW1lX2tleSkKKyAgICByZXN1bHQgPSBhcnJheS5hcnJheSgn
QicpCisgICAgcmVzdWx0LmZyb21zdHJpbmcoZnJhbWUpCisgICAgY291bnQgPSAwCisgICAgZm9y
IGkgaW4geHJhbmdlKGxlbihyZXN1bHQpKToKKyAgICAgICAgcmVzdWx0W2ldIF49IGZyYW1lX2tl
eVtjb3VudF0KKyAgICAgICAgY291bnQgPSAoY291bnQgKyAxKSAlIGZyYW1lX2tleV9sZW4KKyAg
ICByZXR1cm4gX01BU0tJTkdfTk9OQ0UgKyByZXN1bHQudG9zdHJpbmcoKQorCisKK2RlZiBfY3Jl
YXRlX3JlcXVlc3RfZnJvbV9yYXdkYXRhKAorICAgIHJlYWRfZGF0YSwgZGVmbGF0ZV9zdHJlYW09
RmFsc2UsIGRlZmxhdGVfZnJhbWVfcmVxdWVzdD1Ob25lKToKKyAgICByZXEgPSBtb2NrLk1vY2tS
ZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubignJy5qb2luKHJlYWRfZGF0YSkpKQorICAg
IHJlcS53c192ZXJzaW9uID0gY29tbW9uLlZFUlNJT05fSFlCSV9MQVRFU1QKKyAgICBzdHJlYW1f
b3B0aW9ucyA9IFN0cmVhbU9wdGlvbnMoKQorICAgIHN0cmVhbV9vcHRpb25zLmRlZmxhdGVfc3Ry
ZWFtID0gZGVmbGF0ZV9zdHJlYW0KKyAgICByZXEud3NfZXh0ZW5zaW9uX3Byb2Nlc3NvcnMgPSBb
XQorICAgIGlmIGRlZmxhdGVfZnJhbWVfcmVxdWVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgcHJv
Y2Vzc29yID0gRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yKGRlZmxhdGVfZnJhbWVfcmVx
dWVzdCkKKyAgICAgICAgcmVzcG9uc2UgPSBwcm9jZXNzb3IuZ2V0X2V4dGVuc2lvbl9yZXNwb25z
ZSgpCisgICAgICAgIGlmIHJlc3BvbnNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJvY2Vz
c29yLnNldHVwX3N0cmVhbV9vcHRpb25zKHN0cmVhbV9vcHRpb25zKQorICAgICAgICAgICAgcmVx
LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzLmFwcGVuZChwcm9jZXNzb3IpCisgICAgcmVxLndzX3N0
cmVhbSA9IFN0cmVhbShyZXEsIHN0cmVhbV9vcHRpb25zKQorICAgIHJldHVybiByZXEKKworCitk
ZWYgX2NyZWF0ZV9yZXF1ZXN0KCpmcmFtZXMpOgorICAgICIiIkNyZWF0ZXMgTW9ja1JlcXVlc3Qg
dXNpbmcgZGF0YSBnaXZlbiBhcyBmcmFtZXMuCisKKyAgICBmcmFtZXMgd2lsbCBiZSByZXR1cm5l
ZCBvbiBjYWxsaW5nIHJlcXVlc3QuY29ubmVjdGlvbi5yZWFkKCkgd2hlcmUgcmVxdWVzdAorICAg
IGlzIE1vY2tSZXF1ZXN0IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgICAgIiIiCisKKyAg
ICByZWFkX2RhdGEgPSBbXQorICAgIGZvciAoaGVhZGVyLCBib2R5KSBpbiBmcmFtZXM6CisgICAg
ICAgIHJlYWRfZGF0YS5hcHBlbmQoaGVhZGVyICsgX21hc2tfaHliaShib2R5KSkKKworICAgIHJl
dHVybiBfY3JlYXRlX3JlcXVlc3RfZnJvbV9yYXdkYXRhKHJlYWRfZGF0YSkKKworCitkZWYgX2Ny
ZWF0ZV9ibG9ja2luZ19yZXF1ZXN0KCk6CisgICAgIiIiQ3JlYXRlcyBNb2NrUmVxdWVzdC4KKwor
ICAgIERhdGEgd3JpdHRlbiB0byBhIE1vY2tSZXF1ZXN0IGNhbiBiZSByZWFkIG91dCBieSBjYWxs
aW5nCisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpLgorICAgICIiIgorCisg
ICAgcmVxID0gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Jsb2NraW5nQ29u
bigpKQorICAgIHJlcS53c192ZXJzaW9uID0gY29tbW9uLlZFUlNJT05fSFlCSV9MQVRFU1QKKyAg
ICBzdHJlYW1fb3B0aW9ucyA9IFN0cmVhbU9wdGlvbnMoKQorICAgIHJlcS53c19zdHJlYW0gPSBT
dHJlYW0ocmVxLCBzdHJlYW1fb3B0aW9ucykKKyAgICByZXR1cm4gcmVxCisKKworZGVmIF9jcmVh
dGVfcmVxdWVzdF9oaXhpZTc1KHJlYWRfZGF0YT0nJyk6CisgICAgcmVxID0gbW9jay5Nb2NrUmVx
dWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Nvbm4ocmVhZF9kYXRhKSkKKyAgICByZXEud3Nfc3Ry
ZWFtID0gU3RyZWFtSGl4aWU3NShyZXEpCisgICAgcmV0dXJuIHJlcQorCisKK2RlZiBfY3JlYXRl
X2Jsb2NraW5nX3JlcXVlc3RfaGl4aWU3NSgpOgorICAgIHJlcSA9IG1vY2suTW9ja1JlcXVlc3Qo
Y29ubmVjdGlvbj1tb2NrLk1vY2tCbG9ja2luZ0Nvbm4oKSkKKyAgICByZXEud3Nfc3RyZWFtID0g
U3RyZWFtSGl4aWU3NShyZXEpCisgICAgcmV0dXJuIHJlcQorCisKK2NsYXNzIE1lc3NhZ2VUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3RzIGZvciBTdHJlYW0KKworICAgIGRlZiB0
ZXN0X3NlbmRfbWVzc2FnZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVz
dCgpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdIZWxsbycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ODFceDA1SGVsbG8nLCByZXF1ZXN0LmNvbm5lY3Rpb24u
d3JpdHRlbl9kYXRhKCkpCisKKyAgICAgICAgcGF5bG9hZCA9ICdhJyAqIDEyNQorICAgICAgICBy
ZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCkKKyAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2Uo
cmVxdWVzdCwgcGF5bG9hZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHg4MVx4N2QnICsg
cGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3Jp
dHRlbl9kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9zZW5kX21lZGl1bV9tZXNzYWdlKHNlbGYpOgor
ICAgICAgICBwYXlsb2FkID0gJ2EnICogMTI2CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3Jl
cXVlc3QoKQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCBwYXlsb2FkKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDgxXHg3ZVx4MDBceDdlJyArIHBheWxvYWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgp
KQorCisgICAgICAgIHBheWxvYWQgPSAnYScgKiAoKDEgPDwgMTYpIC0gMSkKKyAgICAgICAgcmVx
dWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJl
cXVlc3QsIHBheWxvYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ODFceDdlXHhmZlx4
ZmYnICsgcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rp
b24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9zZW5kX2xhcmdlX21lc3NhZ2Uoc2Vs
Zik6CisgICAgICAgIHBheWxvYWQgPSAnYScgKiAoMSA8PCAxNikKKyAgICAgICAgcmVxdWVzdCA9
IF9jcmVhdGVfcmVxdWVzdCgpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3Qs
IHBheWxvYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ODFceDdmXHgwMFx4MDBceDAw
XHgwMFx4MDBceDAxXHgwMFx4MDAnICsgcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9zZW5k
X21lc3NhZ2VfdW5pY29kZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVz
dCgpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsIHUnXHU2NWU1JykKKyAg
ICAgICAgIyBVKzY1ZTUgaXMgZW5jb2RlZCBhcyBlNiw5NyxhNSBpbiBVVEYtOAorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCdceDgxXHgwM1x4ZTZceDk3XHhhNScsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRl
c3Rfc2VuZF9tZXNzYWdlX2ZyYWdtZW50cyhzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVh
dGVfcmVxdWVzdCgpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdIZWxs
bycsIEZhbHNlKQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCAnICcsIEZh
bHNlKQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCAnV29ybGQnLCBGYWxz
ZSkKKyAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJyEnLCBUcnVlKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAxXHgwNUhlbGxvXHgwMFx4MDEgXHgwMFx4MDVXb3Js
ZFx4ODBceDAxIScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9u
LndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3Rfc2VuZF9mcmFnbWVudHNfaW1tZWRpYXRl
X3plcm9fdGVybWluYXRpb24oc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVl
c3QoKQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCAnSGVsbG8gV29ybGQh
JywgRmFsc2UpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICcnLCBUcnVl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAxXHgwY0hlbGxvIFdvcmxkIVx4ODBceDAw
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9k
YXRhKCkpCisKKyAgICBkZWYgdGVzdF9zZW5kX21lc3NhZ2VfZGVmbGF0ZV9zdHJlYW0oc2VsZik6
CisgICAgICAgIGNvbXByZXNzID0gemxpYi5jb21wcmVzc29iaigKKyAgICAgICAgICAgIHpsaWIu
Wl9ERUZBVUxUX0NPTVBSRVNTSU9OLCB6bGliLkRFRkxBVEVELCAtemxpYi5NQVhfV0JJVFMpCisK
KyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdF9mcm9tX3Jhd2RhdGEoJycsIGRlZmxh
dGVfc3RyZWFtPVRydWUpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdI
ZWxsbycpCisgICAgICAgIGV4cGVjdGVkID0gY29tcHJlc3MuY29tcHJlc3MoJ1x4ODFceDA1SGVs
bG8nKQorICAgICAgICBleHBlY3RlZCArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVT
SCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVxdWVzdC5jb25uZWN0aW9u
LndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3Rfc2VuZF9tZXNzYWdlX2RlZmxhdGVfZnJh
bWUoc2VsZik6CisgICAgICAgIGNvbXByZXNzID0gemxpYi5jb21wcmVzc29iaigKKyAgICAgICAg
ICAgIHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCB6bGliLkRFRkxBVEVELCAtemxpYi5NQVhf
V0JJVFMpCisKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihj
b21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04pCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRl
X3JlcXVlc3RfZnJvbV9yYXdkYXRhKAorICAgICAgICAgICAgJycsIGRlZmxhdGVfZnJhbWVfcmVx
dWVzdD1leHRlbnNpb24pCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdI
ZWxsbycpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdXb3JsZCcpCisK
KyAgICAgICAgZXhwZWN0ZWQgPSAnJworCisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21w
cmVzcy5jb21wcmVzcygnSGVsbG8nKQorICAgICAgICBjb21wcmVzc2VkX2hlbGxvICs9IGNvbXBy
ZXNzLmZsdXNoKHpsaWIuWl9TWU5DX0ZMVVNIKQorICAgICAgICBjb21wcmVzc2VkX2hlbGxvID0g
Y29tcHJlc3NlZF9oZWxsb1s6LTRdCisgICAgICAgIGV4cGVjdGVkICs9ICdceGMxJWMnICUgbGVu
KGNvbXByZXNzZWRfaGVsbG8pCisgICAgICAgIGV4cGVjdGVkICs9IGNvbXByZXNzZWRfaGVsbG8K
KworICAgICAgICBjb21wcmVzc2VkX3dvcmxkID0gY29tcHJlc3MuY29tcHJlc3MoJ1dvcmxkJykK
KyAgICAgICAgY29tcHJlc3NlZF93b3JsZCArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19G
TFVTSCkKKyAgICAgICAgY29tcHJlc3NlZF93b3JsZCA9IGNvbXByZXNzZWRfd29ybGRbOi00XQor
ICAgICAgICBleHBlY3RlZCArPSAnXHhjMSVjJyAlIGxlbihjb21wcmVzc2VkX3dvcmxkKQorICAg
ICAgICBleHBlY3RlZCArPSBjb21wcmVzc2VkX3dvcmxkCisKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChleHBlY3RlZCwgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAg
ZGVmIHRlc3Rfc2VuZF9tZXNzYWdlX2RlZmxhdGVfZnJhbWVfY29tcF9iaXQoc2VsZik6CisgICAg
ICAgIGNvbXByZXNzID0gemxpYi5jb21wcmVzc29iaigKKyAgICAgICAgICAgIHpsaWIuWl9ERUZB
VUxUX0NPTVBSRVNTSU9OLCB6bGliLkRFRkxBVEVELCAtemxpYi5NQVhfV0JJVFMpCisKKyAgICAg
ICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihjb21tb24uREVGTEFURV9G
UkFNRV9FWFRFTlNJT04pCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3RfZnJvbV9y
YXdkYXRhKAorICAgICAgICAgICAgJycsIGRlZmxhdGVfZnJhbWVfcmVxdWVzdD1leHRlbnNpb24p
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGxlbihyZXF1ZXN0LndzX2V4dGVuc2lvbl9w
cm9jZXNzb3JzKSkKKyAgICAgICAgZGVmbGF0ZV9mcmFtZV9wcm9jZXNzb3IgPSByZXF1ZXN0Lndz
X2V4dGVuc2lvbl9wcm9jZXNzb3JzWzBdCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJl
cXVlc3QsICdIZWxsbycpCisgICAgICAgIGRlZmxhdGVfZnJhbWVfcHJvY2Vzc29yLmRpc2FibGVf
b3V0Z29pbmdfY29tcHJlc3Npb24oKQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1
ZXN0LCAnSGVsbG8nKQorICAgICAgICBkZWZsYXRlX2ZyYW1lX3Byb2Nlc3Nvci5lbmFibGVfb3V0
Z29pbmdfY29tcHJlc3Npb24oKQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0
LCAnSGVsbG8nKQorCisgICAgICAgIGV4cGVjdGVkID0gJycKKworICAgICAgICBjb21wcmVzc2Vk
X2hlbGxvID0gY29tcHJlc3MuY29tcHJlc3MoJ0hlbGxvJykKKyAgICAgICAgY29tcHJlc3NlZF9o
ZWxsbyArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAgY29tcHJl
c3NlZF9oZWxsbyA9IGNvbXByZXNzZWRfaGVsbG9bOi00XQorICAgICAgICBleHBlY3RlZCArPSAn
XHhjMSVjJyAlIGxlbihjb21wcmVzc2VkX2hlbGxvKQorICAgICAgICBleHBlY3RlZCArPSBjb21w
cmVzc2VkX2hlbGxvCisKKyAgICAgICAgZXhwZWN0ZWQgKz0gJ1x4ODFceDA1SGVsbG8nCisKKyAg
ICAgICAgY29tcHJlc3NlZF8ybmRfaGVsbG8gPSBjb21wcmVzcy5jb21wcmVzcygnSGVsbG8nKQor
ICAgICAgICBjb21wcmVzc2VkXzJuZF9oZWxsbyArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lO
Q19GTFVTSCkKKyAgICAgICAgY29tcHJlc3NlZF8ybmRfaGVsbG8gPSBjb21wcmVzc2VkXzJuZF9o
ZWxsb1s6LTRdCisgICAgICAgIGV4cGVjdGVkICs9ICdceGMxJWMnICUgbGVuKGNvbXByZXNzZWRf
Mm5kX2hlbGxvKQorICAgICAgICBleHBlY3RlZCArPSBjb21wcmVzc2VkXzJuZF9oZWxsbworCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlcXVlc3QuY29ubmVjdGlvbi53cml0
dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X3NlbmRfbWVzc2FnZV9kZWZsYXRlX2ZyYW1lX25v
X2NvbnRleHRfdGFrZW92ZXJfcGFyYW1ldGVyKHNlbGYpOgorICAgICAgICBjb21wcmVzcyA9IHps
aWIuY29tcHJlc3NvYmooCisgICAgICAgICAgICB6bGliLlpfREVGQVVMVF9DT01QUkVTU0lPTiwg
emxpYi5ERUZMQVRFRCwgLXpsaWIuTUFYX1dCSVRTKQorCisgICAgICAgIGV4dGVuc2lvbiA9IGNv
bW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIoY29tbW9uLkRFRkxBVEVfRlJBTUVfRVhURU5TSU9OKQor
ICAgICAgICBleHRlbnNpb24uYWRkX3BhcmFtZXRlcignbm9fY29udGV4dF90YWtlb3ZlcicsIE5v
bmUpCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3RfZnJvbV9yYXdkYXRhKAorICAg
ICAgICAgICAgJycsIGRlZmxhdGVfZnJhbWVfcmVxdWVzdD1leHRlbnNpb24pCisgICAgICAgIGZv
ciBpIGluIHhyYW5nZSgzKToKKyAgICAgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVl
c3QsICdIZWxsbycpCisKKyAgICAgICAgY29tcHJlc3NlZF9tZXNzYWdlID0gY29tcHJlc3MuY29t
cHJlc3MoJ0hlbGxvJykKKyAgICAgICAgY29tcHJlc3NlZF9tZXNzYWdlICs9IGNvbXByZXNzLmZs
dXNoKHpsaWIuWl9TWU5DX0ZMVVNIKQorICAgICAgICBjb21wcmVzc2VkX21lc3NhZ2UgPSBjb21w
cmVzc2VkX21lc3NhZ2VbOi00XQorICAgICAgICBleHBlY3RlZCA9ICdceGMxJWMnICUgbGVuKGNv
bXByZXNzZWRfbWVzc2FnZSkKKyAgICAgICAgZXhwZWN0ZWQgKz0gY29tcHJlc3NlZF9tZXNzYWdl
CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGV4cGVjdGVkICsgZXhw
ZWN0ZWQgKyBleHBlY3RlZCwgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisg
ICAgZGVmIHRlc3RfZGVmbGF0ZV9mcmFtZV9iYWRfcmVxdWVzdF9wYXJhbWV0ZXJzKHNlbGYpOgor
ICAgICAgICAiIiJUZXN0cyB0aGF0IGlmIHRoZXJlJ3MgYW55dGhpbmcgd3Jvbmcgd2l0aCBkZWZs
YXRlLWZyYW1lIGV4dGVuc2lvbgorICAgICAgICByZXF1ZXN0LCBkZWZsYXRlLWZyYW1lIGlzIHJl
amVjdGVkLgorICAgICAgICAiIiIKKworICAgICAgICBleHRlbnNpb24gPSBjb21tb24uRXh0ZW5z
aW9uUGFyYW1ldGVyKGNvbW1vbi5ERUZMQVRFX0ZSQU1FX0VYVEVOU0lPTikKKyAgICAgICAgIyBt
YXhfd2luZG93X2JpdHMgbGVzcyB0aGFuIDggaXMgaWxsZWdhbC4KKyAgICAgICAgZXh0ZW5zaW9u
LmFkZF9wYXJhbWV0ZXIoJ21heF93aW5kb3dfYml0cycsICc3JykKKyAgICAgICAgcHJvY2Vzc29y
ID0gRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yKGV4dGVuc2lvbikKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChOb25lLCBwcm9jZXNzb3IuZ2V0X2V4dGVuc2lvbl9yZXNwb25zZSgpKQor
CisgICAgICAgIGV4dGVuc2lvbiA9IGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIoY29tbW9uLkRF
RkxBVEVfRlJBTUVfRVhURU5TSU9OKQorICAgICAgICAjIG1heF93aW5kb3dfYml0cyBncmVhdGVy
IHRoYW4gMTUgaXMgaWxsZWdhbC4KKyAgICAgICAgZXh0ZW5zaW9uLmFkZF9wYXJhbWV0ZXIoJ21h
eF93aW5kb3dfYml0cycsICcxNicpCisgICAgICAgIHByb2Nlc3NvciA9IERlZmxhdGVGcmFtZUV4
dGVuc2lvblByb2Nlc3NvcihleHRlbnNpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9u
ZSwgcHJvY2Vzc29yLmdldF9leHRlbnNpb25fcmVzcG9uc2UoKSkKKworICAgICAgICBleHRlbnNp
b24gPSBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKGNvbW1vbi5ERUZMQVRFX0ZSQU1FX0VYVEVO
U0lPTikKKyAgICAgICAgIyBOb24gaW50ZWdlciBtYXhfd2luZG93X2JpdHMgaXMgaWxsZWdhbC4K
KyAgICAgICAgZXh0ZW5zaW9uLmFkZF9wYXJhbWV0ZXIoJ21heF93aW5kb3dfYml0cycsICdmb29i
YXInKQorICAgICAgICBwcm9jZXNzb3IgPSBEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3Io
ZXh0ZW5zaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHByb2Nlc3Nvci5nZXRf
ZXh0ZW5zaW9uX3Jlc3BvbnNlKCkpCisKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVu
c2lvblBhcmFtZXRlcihjb21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04pCisgICAgICAgICMg
bm9fY29udGV4dF90YWtlb3ZlciBtdXN0IG5vdCBoYXZlIGFueSB2YWx1ZS4KKyAgICAgICAgZXh0
ZW5zaW9uLmFkZF9wYXJhbWV0ZXIoJ25vX2NvbnRleHRfdGFrZW92ZXInLCAnZm9vYmFyJykKKyAg
ICAgICAgcHJvY2Vzc29yID0gRGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yKGV4dGVuc2lv
bikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBwcm9jZXNzb3IuZ2V0X2V4dGVuc2lv
bl9yZXNwb25zZSgpKQorCisgICAgZGVmIHRlc3RfZGVmbGF0ZV9mcmFtZV9yZXNwb25zZV9wYXJh
bWV0ZXJzKHNlbGYpOgorICAgICAgICBleHRlbnNpb24gPSBjb21tb24uRXh0ZW5zaW9uUGFyYW1l
dGVyKGNvbW1vbi5ERUZMQVRFX0ZSQU1FX0VYVEVOU0lPTikKKyAgICAgICAgcHJvY2Vzc29yID0g
RGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yKGV4dGVuc2lvbikKKyAgICAgICAgcHJvY2Vz
c29yLnNldF9yZXNwb25zZV93aW5kb3dfYml0cyg4KQorICAgICAgICByZXNwb25zZSA9IHByb2Nl
c3Nvci5nZXRfZXh0ZW5zaW9uX3Jlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJl
c3BvbnNlLmhhc19wYXJhbWV0ZXIoJ21heF93aW5kb3dfYml0cycpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCc4JywgcmVzcG9uc2UuZ2V0X3BhcmFtZXRlcl92YWx1ZSgnbWF4X3dpbmRvd19i
aXRzJykpCisKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihj
b21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04pCisgICAgICAgIHByb2Nlc3NvciA9IERlZmxh
dGVGcmFtZUV4dGVuc2lvblByb2Nlc3NvcihleHRlbnNpb24pCisgICAgICAgIHByb2Nlc3Nvci5z
ZXRfcmVzcG9uc2Vfbm9fY29udGV4dF90YWtlb3ZlcihUcnVlKQorICAgICAgICByZXNwb25zZSA9
IHByb2Nlc3Nvci5nZXRfZXh0ZW5zaW9uX3Jlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHJlc3BvbnNlLmhhc19wYXJhbWV0ZXIoJ25vX2NvbnRleHRfdGFrZW92ZXInKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgcmVzcG9uc2UuZ2V0X3BhcmFtZXRlcl92
YWx1ZSgnbm9fY29udGV4dF90YWtlb3ZlcicpIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9yZWNl
aXZlX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoCisg
ICAgICAgICAgICAoJ1x4ODFceDg1JywgJ0hlbGxvJyksICgnXHg4MVx4ODYnLCAnV29ybGQhJykp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvJywgbXNndXRpbC5yZWNlaXZlX21lc3Nh
Z2UocmVxdWVzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1dvcmxkIScsIG1zZ3V0aWwu
cmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorCisgICAgICAgIHBheWxvYWQgPSAnYScgKiAxMjUK
KyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgoJ1x4ODFceGZkJywgcGF5bG9hZCkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF5bG9hZCwgbXNndXRpbC5yZWNlaXZlX21lc3Nh
Z2UocmVxdWVzdCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX21lZGl1bV9tZXNzYWdlKHNlbGYp
OgorICAgICAgICBwYXlsb2FkID0gJ2EnICogMTI2CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRl
X3JlcXVlc3QoKCdceDgxXHhmZVx4MDBceDdlJywgcGF5bG9hZCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocGF5bG9hZCwgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKyAg
ICAgICAgcGF5bG9hZCA9ICdhJyAqICgoMSA8PCAxNikgLSAxKQorICAgICAgICByZXF1ZXN0ID0g
X2NyZWF0ZV9yZXF1ZXN0KCgnXHg4MVx4ZmVceGZmXHhmZicsIHBheWxvYWQpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHBheWxvYWQsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3Qp
KQorCisgICAgZGVmIHRlc3RfcmVjZWl2ZV9sYXJnZV9tZXNzYWdlKHNlbGYpOgorICAgICAgICBw
YXlsb2FkID0gJ2EnICogKDEgPDwgMTYpCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVl
c3QoCisgICAgICAgICAgICAoJ1x4ODFceGZmXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4
MDAnLCBwYXlsb2FkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXlsb2FkLCBtc2d1dGls
LnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfbGVuZ3Ro
X25vdF9lbmNvZGVkX3VzaW5nX21pbmltYWxfbnVtYmVyX29mX2J5dGVzKHNlbGYpOgorICAgICAg
ICAjIExvZyB3YXJuaW5nIG9uIHJlY2VpdmluZyBiYWQgcGF5bG9hZCBsZW5ndGggZmllbGQgdGhh
dCBkb2Vzbid0IHVzZQorICAgICAgICAjIG1pbmltYWwgbnVtYmVyIG9mIGJ5dGVzIGJ1dCBjb250
aW51ZSBwcm9jZXNzaW5nLgorCisgICAgICAgIHBheWxvYWQgPSAnYScKKyAgICAgICAgIyAxIGJ5
dGUgY2FuIGJlIHJlcHJlc2VudGVkIHdpdGhvdXQgZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGggZmll
bGQuCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoCisgICAgICAgICAgICAoJ1x4
ODFceGZmXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDEnLCBwYXlsb2FkKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChwYXlsb2FkLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1
ZXN0KSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfbWVzc2FnZV91bmljb2RlKHNlbGYpOgorICAg
ICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCgnXHg4MVx4ODMnLCAnXHhlNlx4OWNceGFj
JykpCisgICAgICAgICMgVSs2NzJjIGlzIGVuY29kZWQgYXMgZTYsOWMsYWMgaW4gVVRGLTgKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1NjcyYycsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdl
KHJlcXVlc3QpKQorCisgICAgZGVmIHRlc3RfcmVjZWl2ZV9tZXNzYWdlX2Vycm9uZW91c191bmlj
b2RlKHNlbGYpOgorICAgICAgICAjIFx4ODAgYW5kIFx4ODEgYXJlIGludmFsaWQgYXMgVVRGLTgu
CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoKCdceDgxXHg4MicsICdceDgwXHg4
MScpKQorICAgICAgICAjIEludmFsaWQgY2hhcmFjdGVycyBzaG91bGQgcmFpc2UgSW52YWxpZFVU
RjhFeGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW52YWxpZFVURjhFeGNlcHRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0KQorCisgICAgZGVmIHRlc3RfcmVjZWl2
ZV9mcmFnbWVudHMoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoCisg
ICAgICAgICAgICAoJ1x4MDFceDg1JywgJ0hlbGxvJyksCisgICAgICAgICAgICAoJ1x4MDBceDgx
JywgJyAnKSwKKyAgICAgICAgICAgICgnXHgwMFx4ODUnLCAnV29ybGQnKSwKKyAgICAgICAgICAg
ICgnXHg4MFx4ODEnLCAnIScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWxsbyBXb3Js
ZCEnLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKworICAgIGRlZiB0ZXN0X3Jl
Y2VpdmVfZnJhZ21lbnRzX3VuaWNvZGUoc2VsZik6CisgICAgICAgICMgVVRGLTggZW5jb2RlcyBV
KzZmMjIgaW50byBlNmJjYTIgYW5kIFUrNWI1NyBpbnRvIGU1YWQ5Ny4KKyAgICAgICAgcmVxdWVz
dCA9IF9jcmVhdGVfcmVxdWVzdCgKKyAgICAgICAgICAgICgnXHgwMVx4ODInLCAnXHhlNlx4YmMn
KSwKKyAgICAgICAgICAgICgnXHgwMFx4ODInLCAnXHhhMlx4ZTUnKSwKKyAgICAgICAgICAgICgn
XHg4MFx4ODInLCAnXHhhZFx4OTcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1NmYy
Mlx1NWI1NycsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorCisgICAgZGVmIHRl
c3RfcmVjZWl2ZV9mcmFnbWVudHNfaW1tZWRpYXRlX3plcm9fdGVybWluYXRpb24oc2VsZik6Cisg
ICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoCisgICAgICAgICAgICAoJ1x4MDFceDhj
JywgJ0hlbGxvIFdvcmxkIScpLCAoJ1x4ODBceDgwJywgJycpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdIZWxsbyBXb3JsZCEnLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkK
KworICAgIGRlZiB0ZXN0X3JlY2VpdmVfZnJhZ21lbnRzX2R1cGxpY2F0ZV9zdGFydChzZWxmKToK
KyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgKKyAgICAgICAgICAgICgnXHgwMVx4
ODUnLCAnSGVsbG8nKSwgKCdceDAxXHg4NScsICdXb3JsZCcpKQorICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhtc2d1dGlsLkludmFsaWRGcmFtZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcXVlc3QpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX2ZyYWdtZW50c19pbnRlcm1lZGlh
dGVfYnV0X25vdF9zdGFydGVkKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1
ZXN0KCgnXHgwMFx4ODUnLCAnSGVsbG8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobXNn
dXRpbC5JbnZhbGlkRnJhbWVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1z
Z3V0aWwucmVjZWl2ZV9tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0
KQorCisgICAgZGVmIHRlc3RfcmVjZWl2ZV9mcmFnbWVudHNfZW5kX2J1dF9ub3Rfc3RhcnRlZChz
ZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgoJ1x4ODBceDg1JywgJ0hl
bGxvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1zZ3V0aWwuSW52YWxpZEZyYW1lRXhj
ZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtc2d1dGlsLnJlY2VpdmVfbWVzc2Fn
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCkKKworICAgIGRlZiB0ZXN0X3Jl
Y2VpdmVfbWVzc2FnZV9kaXNjYXJkKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9y
ZXF1ZXN0KAorICAgICAgICAgICAgKCdceDhmXHg4NicsICdJR05PUkUnKSwgKCdceDgxXHg4NScs
ICdIZWxsbycpLAorICAgICAgICAgICAgKCdceDhmXHg4OScsICdESVNSRUdBUkQnKSwgKCdceDgx
XHg4NicsICdXb3JsZCEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobXNndXRpbC5VbnN1
cHBvcnRlZEZyYW1lRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtc2d1dGls
LnJlY2VpdmVfbWVzc2FnZSwgcmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVs
bG8nLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMobXNndXRpbC5VbnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZSwgcmVxdWVzdCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnV29ybGQhJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVz
dCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX2Nsb3NlKHNlbGYpOgorICAgICAgICByZXF1ZXN0
ID0gX2NyZWF0ZV9yZXF1ZXN0KAorICAgICAgICAgICAgKCdceDg4XHg4YScsIHN0cnVjdC5wYWNr
KCchSCcsIDEwMDApICsgJ0dvb2QgYnllJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9u
ZSwgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoMTAwMCwgcmVxdWVzdC53c19jbG9zZV9jb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdHb29kIGJ5ZScsIHJlcXVlc3Qud3NfY2xvc2VfcmVhc29uKQorCisgICAgZGVmIHRlc3Rf
cmVjZWl2ZV9tZXNzYWdlX2RlZmxhdGVfc3RyZWFtKHNlbGYpOgorICAgICAgICBjb21wcmVzcyA9
IHpsaWIuY29tcHJlc3NvYmooCisgICAgICAgICAgICB6bGliLlpfREVGQVVMVF9DT01QUkVTU0lP
TiwgemxpYi5ERUZMQVRFRCwgLXpsaWIuTUFYX1dCSVRTKQorCisgICAgICAgIGRhdGEgPSBjb21w
cmVzcy5jb21wcmVzcygnXHg4MVx4ODUnICsgX21hc2tfaHliaSgnSGVsbG8nKSkKKyAgICAgICAg
ZGF0YSArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAgZGF0YSAr
PSBjb21wcmVzcy5jb21wcmVzcygnXHg4MVx4ODknICsgX21hc2tfaHliaSgnV2ViU29ja2V0Jykp
CisgICAgICAgIGRhdGEgKz0gY29tcHJlc3MuZmx1c2goemxpYi5aX0ZJTklTSCkKKworICAgICAg
ICBjb21wcmVzcyA9IHpsaWIuY29tcHJlc3NvYmooCisgICAgICAgICAgICB6bGliLlpfREVGQVVM
VF9DT01QUkVTU0lPTiwgemxpYi5ERUZMQVRFRCwgLXpsaWIuTUFYX1dCSVRTKQorCisgICAgICAg
IGRhdGEgKz0gY29tcHJlc3MuY29tcHJlc3MoJ1x4ODFceDg1JyArIF9tYXNrX2h5YmkoJ1dvcmxk
JykpCisgICAgICAgIGRhdGEgKz0gY29tcHJlc3MuZmx1c2goemxpYi5aX1NZTkNfRkxVU0gpCisg
ICAgICAgICMgQ2xvc2UgZnJhbWUKKyAgICAgICAgZGF0YSArPSBjb21wcmVzcy5jb21wcmVzcygK
KyAgICAgICAgICAgICdceDg4XHg4YScgKyBfbWFza19oeWJpKHN0cnVjdC5wYWNrKCchSCcsIDEw
MDApICsgJ0dvb2QgYnllJykpCisgICAgICAgIGRhdGEgKz0gY29tcHJlc3MuZmx1c2goemxpYi5a
X1NZTkNfRkxVU0gpCisKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdF9mcm9tX3Jh
d2RhdGEoZGF0YSwgZGVmbGF0ZV9zdHJlYW09VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnSGVsbG8nLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnV2ViU29ja2V0JywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVz
dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1dvcmxkJywgbXNndXRpbC5yZWNlaXZlX21l
c3NhZ2UocmVxdWVzdCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXF1ZXN0LmRyYWlu
X3JlY2VpdmVkX2RhdGFfY2FsbGVkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwg
bXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHJlcXVlc3QuZHJhaW5fcmVjZWl2ZWRfZGF0YV9jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9y
ZWNlaXZlX21lc3NhZ2VfZGVmbGF0ZV9mcmFtZShzZWxmKToKKyAgICAgICAgY29tcHJlc3MgPSB6
bGliLmNvbXByZXNzb2JqKAorICAgICAgICAgICAgemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04s
IHpsaWIuREVGTEFURUQsIC16bGliLk1BWF9XQklUUykKKworICAgICAgICBkYXRhID0gJycKKwor
ICAgICAgICBjb21wcmVzc2VkX2hlbGxvID0gY29tcHJlc3MuY29tcHJlc3MoJ0hlbGxvJykKKyAg
ICAgICAgY29tcHJlc3NlZF9oZWxsbyArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVT
SCkKKyAgICAgICAgY29tcHJlc3NlZF9oZWxsbyA9IGNvbXByZXNzZWRfaGVsbG9bOi00XQorICAg
ICAgICBkYXRhICs9ICdceGMxJWMnICUgKGxlbihjb21wcmVzc2VkX2hlbGxvKSB8IDB4ODApCisg
ICAgICAgIGRhdGEgKz0gX21hc2tfaHliaShjb21wcmVzc2VkX2hlbGxvKQorCisgICAgICAgIGNv
bXByZXNzZWRfd2Vic29ja2V0ID0gY29tcHJlc3MuY29tcHJlc3MoJ1dlYlNvY2tldCcpCisgICAg
ICAgIGNvbXByZXNzZWRfd2Vic29ja2V0ICs9IGNvbXByZXNzLmZsdXNoKHpsaWIuWl9GSU5JU0gp
CisgICAgICAgIGNvbXByZXNzZWRfd2Vic29ja2V0ICs9ICdceDAwJworICAgICAgICBkYXRhICs9
ICdceGMxJWMnICUgKGxlbihjb21wcmVzc2VkX3dlYnNvY2tldCkgfCAweDgwKQorICAgICAgICBk
YXRhICs9IF9tYXNrX2h5YmkoY29tcHJlc3NlZF93ZWJzb2NrZXQpCisKKyAgICAgICAgY29tcHJl
c3MgPSB6bGliLmNvbXByZXNzb2JqKAorICAgICAgICAgICAgemxpYi5aX0RFRkFVTFRfQ09NUFJF
U1NJT04sIHpsaWIuREVGTEFURUQsIC16bGliLk1BWF9XQklUUykKKworICAgICAgICBjb21wcmVz
c2VkX3dvcmxkID0gY29tcHJlc3MuY29tcHJlc3MoJ1dvcmxkJykKKyAgICAgICAgY29tcHJlc3Nl
ZF93b3JsZCArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAgY29t
cHJlc3NlZF93b3JsZCA9IGNvbXByZXNzZWRfd29ybGRbOi00XQorICAgICAgICBkYXRhICs9ICdc
eGMxJWMnICUgKGxlbihjb21wcmVzc2VkX3dvcmxkKSB8IDB4ODApCisgICAgICAgIGRhdGEgKz0g
X21hc2tfaHliaShjb21wcmVzc2VkX3dvcmxkKQorCisgICAgICAgICMgQ2xvc2UgZnJhbWUKKyAg
ICAgICAgZGF0YSArPSAnXHg4OFx4OGEnICsgX21hc2tfaHliaShzdHJ1Y3QucGFjaygnIUgnLCAx
MDAwKSArICdHb29kIGJ5ZScpCisKKyAgICAgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lv
blBhcmFtZXRlcihjb21tb24uREVGTEFURV9GUkFNRV9FWFRFTlNJT04pCisgICAgICAgIHJlcXVl
c3QgPSBfY3JlYXRlX3JlcXVlc3RfZnJvbV9yYXdkYXRhKAorICAgICAgICAgICAgZGF0YSwgZGVm
bGF0ZV9mcmFtZV9yZXF1ZXN0PWV4dGVuc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
SGVsbG8nLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnV2ViU29ja2V0JywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1dvcmxkJywgbXNndXRpbC5yZWNlaXZlX21lc3Nh
Z2UocmVxdWVzdCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBtc2d1dGlsLnJl
Y2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfbWVzc2FnZV9k
ZWZsYXRlX2ZyYW1lX2NsaWVudF91c2luZ19zbWFsbGVyX3dpbmRvdyhzZWxmKToKKyAgICAgICAg
IiIiVGVzdCB0aGF0IGZyYW1lcyBjb21pbmcgZnJvbSBhIGNsaWVudCB3aGljaCBpcyB1c2luZyBz
bWFsbGVyIHdpbmRvdworICAgICAgICBzaXplIHRoYXQgdGhlIHNlcnZlciBhcmUgY29ycmVjdGx5
IHJlY2VpdmVkLgorICAgICAgICAiIiIKKworICAgICAgICAjIFVzaW5nIHRoZSBzbWFsbGVzdCB3
aW5kb3cgYml0cyBvZiA4IGZvciBnZW5lcmF0aW5nIGlucHV0IGZyYW1lcy4KKyAgICAgICAgY29t
cHJlc3MgPSB6bGliLmNvbXByZXNzb2JqKAorICAgICAgICAgICAgemxpYi5aX0RFRkFVTFRfQ09N
UFJFU1NJT04sIHpsaWIuREVGTEFURUQsIC04KQorCisgICAgICAgIGRhdGEgPSAnJworCisgICAg
ICAgICMgVXNlIGEgZnJhbWUgd2hvc2UgY29udGVudCBpcyBiaWdnZXIgdGhhbiB0aGUgY2xpZW50
cycgREVGTEFURSB3aW5kb3cKKyAgICAgICAgIyBzaXplIGJlZm9yZSBjb21wcmVzc2lvbi4gVGhl
IGNvbnRlbnQgbWFpbmx5IGNvbnNpc3RzIG9mICdhJyBidXQKKyAgICAgICAgIyByZXBldGl0aW9u
IG9mICdiJyBpcyBwdXQgYXQgdGhlIGhlYWQgYW5kIHRhaWwgc28gdGhhdCBpZiB0aGUgd2luZG93
CisgICAgICAgICMgc2l6ZSBpcyBiaWcsIHRoZSBoZWFkIGlzIGJhY2stcmVmZXJlbmNlZCBidXQg
aWYgc21hbGwsIG5vdC4KKyAgICAgICAgcGF5bG9hZCA9ICdiJyAqIDY0ICsgJ2EnICogMTAyNCAr
ICdiJyAqIDY0CisgICAgICAgIGNvbXByZXNzZWRfaGVsbG8gPSBjb21wcmVzcy5jb21wcmVzcyhw
YXlsb2FkKQorICAgICAgICBjb21wcmVzc2VkX2hlbGxvICs9IGNvbXByZXNzLmZsdXNoKHpsaWIu
Wl9TWU5DX0ZMVVNIKQorICAgICAgICBjb21wcmVzc2VkX2hlbGxvID0gY29tcHJlc3NlZF9oZWxs
b1s6LTRdCisgICAgICAgIGRhdGEgKz0gJ1x4YzElYycgJSAobGVuKGNvbXByZXNzZWRfaGVsbG8p
IHwgMHg4MCkKKyAgICAgICAgZGF0YSArPSBfbWFza19oeWJpKGNvbXByZXNzZWRfaGVsbG8pCisK
KyAgICAgICAgIyBDbG9zZSBmcmFtZQorICAgICAgICBkYXRhICs9ICdceDg4XHg4YScgKyBfbWFz
a19oeWJpKHN0cnVjdC5wYWNrKCchSCcsIDEwMDApICsgJ0dvb2QgYnllJykKKworICAgICAgICBl
eHRlbnNpb24gPSBjb21tb24uRXh0ZW5zaW9uUGFyYW1ldGVyKGNvbW1vbi5ERUZMQVRFX0ZSQU1F
X0VYVEVOU0lPTikKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdF9mcm9tX3Jhd2Rh
dGEoCisgICAgICAgICAgICBkYXRhLCBkZWZsYXRlX2ZyYW1lX3JlcXVlc3Q9ZXh0ZW5zaW9uKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBheWxvYWQsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdl
KHJlcXVlc3QpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgbXNndXRpbC5yZWNl
aXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX21lc3NhZ2VfZGVm
bGF0ZV9mcmFtZV9jb21wX2JpdChzZWxmKToKKyAgICAgICAgY29tcHJlc3MgPSB6bGliLmNvbXBy
ZXNzb2JqKAorICAgICAgICAgICAgemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04sIHpsaWIuREVG
TEFURUQsIC16bGliLk1BWF9XQklUUykKKworICAgICAgICBkYXRhID0gJycKKworICAgICAgICBj
b21wcmVzc2VkX2hlbGxvID0gY29tcHJlc3MuY29tcHJlc3MoJ0hlbGxvJykKKyAgICAgICAgY29t
cHJlc3NlZF9oZWxsbyArPSBjb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAg
ICAgY29tcHJlc3NlZF9oZWxsbyA9IGNvbXByZXNzZWRfaGVsbG9bOi00XQorICAgICAgICBkYXRh
ICs9ICdceGMxJWMnICUgKGxlbihjb21wcmVzc2VkX2hlbGxvKSB8IDB4ODApCisgICAgICAgIGRh
dGEgKz0gX21hc2tfaHliaShjb21wcmVzc2VkX2hlbGxvKQorCisgICAgICAgIGRhdGEgKz0gJ1x4
ODFceDg1JyArIF9tYXNrX2h5YmkoJ0hlbGxvJykKKworICAgICAgICBjb21wcmVzcyA9IHpsaWIu
Y29tcHJlc3NvYmooCisgICAgICAgICAgICB6bGliLlpfREVGQVVMVF9DT01QUkVTU0lPTiwgemxp
Yi5ERUZMQVRFRCwgLXpsaWIuTUFYX1dCSVRTKQorCisgICAgICAgIGNvbXByZXNzZWRfMm5kX2hl
bGxvID0gY29tcHJlc3MuY29tcHJlc3MoJ0hlbGxvJykKKyAgICAgICAgY29tcHJlc3NlZF8ybmRf
aGVsbG8gKz0gY29tcHJlc3MuZmx1c2goemxpYi5aX1NZTkNfRkxVU0gpCisgICAgICAgIGNvbXBy
ZXNzZWRfMm5kX2hlbGxvID0gY29tcHJlc3NlZF8ybmRfaGVsbG9bOi00XQorICAgICAgICBkYXRh
ICs9ICdceGMxJWMnICUgKGxlbihjb21wcmVzc2VkXzJuZF9oZWxsbykgfCAweDgwKQorICAgICAg
ICBkYXRhICs9IF9tYXNrX2h5YmkoY29tcHJlc3NlZF8ybmRfaGVsbG8pCisKKyAgICAgICAgZXh0
ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihjb21tb24uREVGTEFURV9GUkFNRV9F
WFRFTlNJT04pCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3RfZnJvbV9yYXdkYXRh
KAorICAgICAgICAgICAgZGF0YSwgZGVmbGF0ZV9mcmFtZV9yZXF1ZXN0PWV4dGVuc2lvbikKKyAg
ICAgICAgZm9yIGkgaW4geHJhbmdlKDMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
SGVsbG8nLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKworICAgIGRlZiB0ZXN0
X3NlbmRfcGluZyhzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgpCisg
ICAgICAgIG1zZ3V0aWwuc2VuZF9waW5nKHJlcXVlc3QsICdIZWxsbyBXb3JsZCEnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdceDg5XHgwY0hlbGxvIFdvcmxkIScsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVm
IHRlc3RfcmVjZWl2ZV9waW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyByZWNlaXZpbmcgYSBw
aW5nIGNvbnRyb2wgZnJhbWUuIiIiCisKKyAgICAgICAgZGVmIGhhbmRsZXIocmVxdWVzdCwgbWVz
c2FnZSk6CisgICAgICAgICAgICByZXF1ZXN0LmNhbGxlZCA9IFRydWUKKworICAgICAgICAjIFN0
cmVhbSBhdXRvbWF0aWNhbGx5IHJlc3BvbmQgdG8gcGluZyB3aXRoIHBvbmcgd2l0aG91dCBhbnkg
YWN0aW9uCisgICAgICAgICMgYnkgYXBwbGljYXRpb24gbGF5ZXIuCisgICAgICAgIHJlcXVlc3Qg
PSBfY3JlYXRlX3JlcXVlc3QoCisgICAgICAgICAgICAoJ1x4ODlceDg1JywgJ0hlbGxvJyksICgn
XHg4MVx4ODUnLCAnV29ybGQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnV29ybGQnLCBt
c2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnXHg4YVx4MDVIZWxsbycsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25u
ZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVl
c3QoCisgICAgICAgICAgICAoJ1x4ODlceDg1JywgJ0hlbGxvJyksICgnXHg4MVx4ODUnLCAnV29y
bGQnKSkKKyAgICAgICAgcmVxdWVzdC5vbl9waW5nX2hhbmRsZXIgPSBoYW5kbGVyCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ1dvcmxkJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVz
dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXF1ZXN0LmNhbGxlZCkKKworICAgIGRlZiB0
ZXN0X3JlY2VpdmVfcG9uZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgcmVjZWl2aW5nIGEgcG9u
ZyBjb250cm9sIGZyYW1lLiIiIgorCisgICAgICAgIGRlZiBoYW5kbGVyKHJlcXVlc3QsIG1lc3Nh
Z2UpOgorICAgICAgICAgICAgcmVxdWVzdC5jYWxsZWQgPSBUcnVlCisKKyAgICAgICAgcmVxdWVz
dCA9IF9jcmVhdGVfcmVxdWVzdCgKKyAgICAgICAgICAgICgnXHg4YVx4ODUnLCAnSGVsbG8nKSwg
KCdceDgxXHg4NScsICdXb3JsZCcpKQorICAgICAgICByZXF1ZXN0Lm9uX3BvbmdfaGFuZGxlciA9
IGhhbmRsZXIKKyAgICAgICAgbXNndXRpbC5zZW5kX3BpbmcocmVxdWVzdCwgJ0hlbGxvJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHg4OVx4MDVIZWxsbycsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorICAgICAgICAjIFZh
bGlkIHBvbmcgaXMgcmVjZWl2ZWQsIGJ1dCByZWNlaXZlX21lc3NhZ2Ugd29uJ3QgcmV0dXJuIGZv
ciBpdC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnV29ybGQnLCBtc2d1dGlsLnJlY2VpdmVf
bWVzc2FnZShyZXF1ZXN0KSkKKyAgICAgICAgIyBDaGVjayB0aGF0IG5vdGhpbmcgd2FzIHdyaXR0
ZW4gYWZ0ZXIgcmVjZWl2ZV9tZXNzYWdlIGNhbGwuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J1x4ODlceDA1SGVsbG8nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVxdWVzdC5j
YWxsZWQpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX3Vuc29saWNpdGVkX3Bvbmcoc2VsZik6Cisg
ICAgICAgICMgVW5zb2xpY2l0ZWQgcG9uZyBpcyBhbGxvd2VkIGZyb20gSHlCaSAwNy4KKyAgICAg
ICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgKKyAgICAgICAgICAgICgnXHg4YVx4ODUnLCAn
SGVsbG8nKSwgKCdceDgxXHg4NScsICdXb3JsZCcpKQorICAgICAgICBtc2d1dGlsLnJlY2VpdmVf
bWVzc2FnZShyZXF1ZXN0KQorCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoCisg
ICAgICAgICAgICAoJ1x4OGFceDg1JywgJ0hlbGxvJyksICgnXHg4MVx4ODUnLCAnV29ybGQnKSkK
KyAgICAgICAgbXNndXRpbC5zZW5kX3BpbmcocmVxdWVzdCwgJ0p1bWJvJykKKyAgICAgICAgIyBC
b2R5IG1pc21hdGNoLgorICAgICAgICBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KQor
CisgICAgZGVmIHRlc3RfcGluZ19jYW5ub3RfYmVfZnJhZ21lbnRlZChzZWxmKToKKyAgICAgICAg
cmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgoJ1x4MDlceDg1JywgJ0hlbGxvJykpCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKG1zZ3V0aWwuSW52YWxpZEZyYW1lRXhjZXB0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdCkKKworICAgIGRlZiB0ZXN0X3Bpbmdfd2l0aF90b29fbG9u
Z19wYXlsb2FkKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCgnXHg4
OVx4ZmVceDAxXHgwMCcsICdhJyAqIDI1NikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1z
Z3V0aWwuSW52YWxpZEZyYW1lRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBt
c2d1dGlsLnJlY2VpdmVfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dCkKKworCitjbGFzcyBNZXNzYWdlVGVzdEhpeGllNzUodW5pdHRlc3QuVGVzdENhc2UpOgorICAg
ICIiIlRlc3RzIGZvciBkcmFmdC1oaXhpZS10aGV3ZWJzb2NrZXRwcm90b2NvbC03NiBzdHJlYW0g
Y2xhc3MuIiIiCisKKyAgICBkZWYgdGVzdF9zZW5kX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIHJl
cXVlc3QgPSBfY3JlYXRlX3JlcXVlc3RfaGl4aWU3NSgpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9t
ZXNzYWdlKHJlcXVlc3QsICdIZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBI
ZWxsb1x4ZmYnLCByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYg
dGVzdF9zZW5kX21lc3NhZ2VfdW5pY29kZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVh
dGVfcmVxdWVzdF9oaXhpZTc1KCkKKyAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVz
dCwgdSdcdTY1ZTUnKQorICAgICAgICAjIFUrNjVlNSBpcyBlbmNvZGVkIGFzIGU2LDk3LGE1IGlu
IFVURi04CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBceGU2XHg5N1x4YTVceGZmJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRh
KCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIHJlcXVl
c3QgPSBfY3JlYXRlX3JlcXVlc3RfaGl4aWU3NSgnXHgwMEhlbGxvXHhmZlx4MDBXb3JsZCFceGZm
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8nLCBtc2d1dGlsLnJlY2VpdmVfbWVz
c2FnZShyZXF1ZXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnV29ybGQhJywgbXNndXRp
bC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX21lc3Nh
Z2VfdW5pY29kZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdF9oaXhp
ZTc1KCdceDAwXHhlNlx4OWNceGFjXHhmZicpCisgICAgICAgICMgVSs2NzJjIGlzIGVuY29kZWQg
YXMgZTYsOWMsYWMgaW4gVVRGLTgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1NjcyYycs
IG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorCisgICAgZGVmIHRlc3RfcmVjZWl2
ZV9tZXNzYWdlX2Vycm9uZW91c191bmljb2RlKHNlbGYpOgorICAgICAgICAjIFx4ODAgYW5kIFx4
ODEgYXJlIGludmFsaWQgYXMgVVRGLTguCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVl
c3RfaGl4aWU3NSgnXHgwMFx4ODBceDgxXHhmZicpCisgICAgICAgICMgSW52YWxpZCBjaGFyYWN0
ZXJzIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoCisgICAgICAgICMgVStmZmZkIFJFUExBQ0VNRU5U
IENIQVJBQ1RFUgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXHVmZmZkXHVmZmZkJywgbXNn
dXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX21l
c3NhZ2VfZGlzY2FyZChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdF9o
aXhpZTc1KCdceDgwXHgwNklHTk9SRVx4MDBIZWxsb1x4ZmYnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnXHgwMURJU1JFR0FSRFx4ZmZceDAwV29ybGQhXHhmZicp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvJywgbXNndXRpbC5yZWNlaXZlX21lc3Nh
Z2UocmVxdWVzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1dvcmxkIScsIG1zZ3V0aWwu
cmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorCisKK2NsYXNzIE1lc3NhZ2VSZWNlaXZlclRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBTdHJlYW0gY2xhc3MgdXNpbmcg
TWVzc2FnZVJlY2VpdmVyLiIiIgorCisgICAgZGVmIHRlc3RfcXVldWUoc2VsZik6CisgICAgICAg
IHJlcXVlc3QgPSBfY3JlYXRlX2Jsb2NraW5nX3JlcXVlc3QoKQorICAgICAgICByZWNlaXZlciA9
IG1zZ3V0aWwuTWVzc2FnZVJlY2VpdmVyKHJlcXVlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChOb25lLCByZWNlaXZlci5yZWNlaXZlX25vd2FpdCgpKQorCisgICAgICAgIHJlcXVlc3Qu
Y29ubmVjdGlvbi5wdXRfYnl0ZXMoJ1x4ODFceDg2JyArIF9tYXNrX2h5YmkoJ0hlbGxvIScpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWxsbyEnLCByZWNlaXZlci5yZWNlaXZlKCkpCisK
KyAgICBkZWYgdGVzdF9vbm1lc3NhZ2Uoc2VsZik6CisgICAgICAgIG9ubWVzc2FnZV9xdWV1ZSA9
IFF1ZXVlLlF1ZXVlKCkKKworICAgICAgICBkZWYgb25tZXNzYWdlX2hhbmRsZXIobWVzc2FnZSk6
CisgICAgICAgICAgICBvbm1lc3NhZ2VfcXVldWUucHV0KG1lc3NhZ2UpCisKKyAgICAgICAgcmVx
dWVzdCA9IF9jcmVhdGVfYmxvY2tpbmdfcmVxdWVzdCgpCisgICAgICAgIHJlY2VpdmVyID0gbXNn
dXRpbC5NZXNzYWdlUmVjZWl2ZXIocmVxdWVzdCwgb25tZXNzYWdlX2hhbmRsZXIpCisKKyAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygnXHg4MVx4ODYnICsgX21hc2tfaHliaSgn
SGVsbG8hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvIScsIG9ubWVzc2FnZV9x
dWV1ZS5nZXQoKSkKKworCitjbGFzcyBNZXNzYWdlUmVjZWl2ZXJIaXhpZTc1VGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIFN0cmVhbUhpeGllNzUgY2xhc3MgdXNpbmcg
TWVzc2FnZVJlY2VpdmVyLiIiIgorCisgICAgZGVmIHRlc3RfcXVldWUoc2VsZik6CisgICAgICAg
IHJlcXVlc3QgPSBfY3JlYXRlX2Jsb2NraW5nX3JlcXVlc3RfaGl4aWU3NSgpCisgICAgICAgIHJl
Y2VpdmVyID0gbXNndXRpbC5NZXNzYWdlUmVjZWl2ZXIocmVxdWVzdCkKKworICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKE5vbmUsIHJlY2VpdmVyLnJlY2VpdmVfbm93YWl0KCkpCisKKyAgICAgICAg
cmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygnXHgwMEhlbGxvIVx4ZmYnKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCdIZWxsbyEnLCByZWNlaXZlci5yZWNlaXZlKCkpCisKKyAgICBkZWYg
dGVzdF9vbm1lc3NhZ2Uoc2VsZik6CisgICAgICAgIG9ubWVzc2FnZV9xdWV1ZSA9IFF1ZXVlLlF1
ZXVlKCkKKworICAgICAgICBkZWYgb25tZXNzYWdlX2hhbmRsZXIobWVzc2FnZSk6CisgICAgICAg
ICAgICBvbm1lc3NhZ2VfcXVldWUucHV0KG1lc3NhZ2UpCisKKyAgICAgICAgcmVxdWVzdCA9IF9j
cmVhdGVfYmxvY2tpbmdfcmVxdWVzdF9oaXhpZTc1KCkKKyAgICAgICAgcmVjZWl2ZXIgPSBtc2d1
dGlsLk1lc3NhZ2VSZWNlaXZlcihyZXF1ZXN0LCBvbm1lc3NhZ2VfaGFuZGxlcikKKworICAgICAg
ICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKCdceDAwSGVsbG8hXHhmZicpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvIScsIG9ubWVzc2FnZV9xdWV1ZS5nZXQoKSkKKworCitj
bGFzcyBNZXNzYWdlU2VuZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMg
dGhlIFN0cmVhbSBjbGFzcyB1c2luZyBNZXNzYWdlU2VuZGVyLiIiIgorCisgICAgZGVmIHRlc3Rf
c2VuZChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfYmxvY2tpbmdfcmVxdWVzdCgp
CisgICAgICAgIHNlbmRlciA9IG1zZ3V0aWwuTWVzc2FnZVNlbmRlcihyZXF1ZXN0KQorCisgICAg
ICAgIHNlbmRlci5zZW5kKCdXb3JsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ODFc
eDA1V29ybGQnLCByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYg
dGVzdF9zZW5kX25vd2FpdChzZWxmKToKKyAgICAgICAgIyBVc2UgYSBxdWV1ZSB0byBjaGVjayB0
aGUgYnl0ZXMgd3JpdHRlbiBieSBNZXNzYWdlU2VuZGVyLgorICAgICAgICAjIHJlcXVlc3QuY29u
bmVjdGlvbi53cml0dGVuX2RhdGEoKSBjYW5ub3QgYmUgdXNlZCBoZXJlIGJlY2F1c2UKKyAgICAg
ICAgIyBNZXNzYWdlU2VuZGVyIHJ1bnMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICAgIHNl
bmRfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisKKyAgICAgICAgZGVmIHdyaXRlKGJ5dGVzKToKKyAg
ICAgICAgICAgIHNlbmRfcXVldWUucHV0KGJ5dGVzKQorCisgICAgICAgIHJlcXVlc3QgPSBfY3Jl
YXRlX2Jsb2NraW5nX3JlcXVlc3QoKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUg
PSB3cml0ZQorCisgICAgICAgIHNlbmRlciA9IG1zZ3V0aWwuTWVzc2FnZVNlbmRlcihyZXF1ZXN0
KQorCisgICAgICAgIHNlbmRlci5zZW5kX25vd2FpdCgnSGVsbG8nKQorICAgICAgICBzZW5kZXIu
c2VuZF9ub3dhaXQoJ1dvcmxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHg4MVx4MDVI
ZWxsbycsIHNlbmRfcXVldWUuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ODFc
eDA1V29ybGQnLCBzZW5kX3F1ZXVlLmdldCgpKQorCisKK2NsYXNzIE1lc3NhZ2VTZW5kZXJIaXhp
ZTc1VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIFN0cmVhbUhpeGll
NzUgY2xhc3MgdXNpbmcgTWVzc2FnZVNlbmRlci4iIiIKKworICAgIGRlZiB0ZXN0X3NlbmQoc2Vs
Zik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX2Jsb2NraW5nX3JlcXVlc3RfaGl4aWU3NSgp
CisgICAgICAgIHNlbmRlciA9IG1zZ3V0aWwuTWVzc2FnZVNlbmRlcihyZXF1ZXN0KQorCisgICAg
ICAgIHNlbmRlci5zZW5kKCdXb3JsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBX
b3JsZFx4ZmYnLCByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYg
dGVzdF9zZW5kX25vd2FpdChzZWxmKToKKyAgICAgICAgIyBVc2UgYSBxdWV1ZSB0byBjaGVjayB0
aGUgYnl0ZXMgd3JpdHRlbiBieSBNZXNzYWdlU2VuZGVyLgorICAgICAgICAjIHJlcXVlc3QuY29u
bmVjdGlvbi53cml0dGVuX2RhdGEoKSBjYW5ub3QgYmUgdXNlZCBoZXJlIGJlY2F1c2UKKyAgICAg
ICAgIyBNZXNzYWdlU2VuZGVyIHJ1bnMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICAgIHNl
bmRfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisKKyAgICAgICAgZGVmIHdyaXRlKGJ5dGVzKToKKyAg
ICAgICAgICAgIHNlbmRfcXVldWUucHV0KGJ5dGVzKQorCisgICAgICAgIHJlcXVlc3QgPSBfY3Jl
YXRlX2Jsb2NraW5nX3JlcXVlc3RfaGl4aWU3NSgpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlv
bi53cml0ZSA9IHdyaXRlCisKKyAgICAgICAgc2VuZGVyID0gbXNndXRpbC5NZXNzYWdlU2VuZGVy
KHJlcXVlc3QpCisKKyAgICAgICAgc2VuZGVyLnNlbmRfbm93YWl0KCdIZWxsbycpCisgICAgICAg
IHNlbmRlci5zZW5kX25vd2FpdCgnV29ybGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdc
eDAwSGVsbG9ceGZmJywgc2VuZF9xdWV1ZS5nZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnXHgwMFdvcmxkXHhmZicsIHNlbmRfcXVldWUuZ2V0KCkpCisKKworaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tl
dC90ZXN0L3Rlc3Rfc3RyZWFtLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9zdHJlYW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODFhY2ZlYjA0OGQz
YjIwMzJhNzk0OGNmYTJhZGVhN2NlNjRmOTVhZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3Rfc3RyZWFtLnB5
CkBAIC0wLDAgKzEsNzcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQg
MjAxMSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKworIiIiVGVzdHMgZm9yIHN0cmVhbSBtb2R1bGUuIiIiCisKKworaW1wb3J0IHVuaXR0
ZXN0CisKK2ltcG9ydCBzZXRfc3lzX3BhdGggICMgVXBkYXRlIHN5cy5wYXRoIHRvIGxvY2F0ZSBt
b2RfcHl3ZWJzb2NrZXQgbW9kdWxlLgorCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgY29t
bW9uCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgc3RyZWFtCisKKworY2xhc3MgU3RyZWFt
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSB1bml0dGVzdCBmb3Igc3RyZWFtIG1v
ZHVsZS4iIiIKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9oZWFkZXIoc2VsZik6CisgICAgICAgICMg
bW9yZSwgcnN2MSwgLi4uLCByc3Y0IGFyZSBhbGwgdHJ1ZQorICAgICAgICBoZWFkZXIgPSBzdHJl
YW0uY3JlYXRlX2hlYWRlcihjb21tb24uT1BDT0RFX1RFWFQsIDEsIDEsIDEsIDEsIDEsIDEpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ZjFceDgxJywgaGVhZGVyKQorCisgICAgICAgICMg
TWF4aW11bSBwYXlsb2FkIHNpemUKKyAgICAgICAgaGVhZGVyID0gc3RyZWFtLmNyZWF0ZV9oZWFk
ZXIoCisgICAgICAgICAgICBjb21tb24uT1BDT0RFX1RFWFQsICgxIDw8IDYzKSAtIDEsIDAsIDAs
IDAsIDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDFceDdmXHg3Zlx4ZmZceGZm
XHhmZlx4ZmZceGZmXHhmZlx4ZmYnLCBoZWFkZXIpCisKKyAgICAgICAgIyBJbnZhbGlkIG9wY29k
ZSAweDEwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cmVhbS5jcmVhdGVfaGVhZGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDEwLCAwLCAwLCAwLCAwLCAwLCAwKQorCisgICAgICAgICMgSW52YWxpZCB2YWx1
ZSAweGYgcGFzc2VkIHRvIG1vcmUgcGFyYW1ldGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5jcmVhdGVfaGVh
ZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb24uT1BDT0RFX1RFWFQsIDAsIDB4
ZiwgMCwgMCwgMCwgMCkKKworICAgICAgICAjIFRvbyBsb25nIHBheWxvYWRfbGVuZ3RoCisgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cmVhbS5jcmVhdGVfaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb21t
b24uT1BDT0RFX1RFWFQsIDEgPDwgNjMsIDAsIDAsIDAsIDAsIDApCisKKworaWYgX19uYW1lX18g
PT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKKworCisjIHZpOnN0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNv
Y2tldC90ZXN0L3Rlc3Rfc3RyZWFtX2hpeGllNzUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X3N0cmVhbV9oaXhpZTc1LnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNhOWFjNzEzMGI3MzA0ZWI5MmRiYmJjMTUzM2FhNDE1NDVlMDI0NmQKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0X3N0cmVhbV9oaXhpZTc1LnB5CkBAIC0wLDAgKzEsNTkgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisj
IGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiVGVzdHMgZm9yIHN0cmVhbSBt
b2R1bGUuIiIiCisKKworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBzZXRfc3lzX3BhdGggICMg
VXBkYXRlIHN5cy5wYXRoIHRvIGxvY2F0ZSBtb2RfcHl3ZWJzb2NrZXQgbW9kdWxlLgorCitmcm9t
IG1vZF9weXdlYnNvY2tldC5zdHJlYW0gaW1wb3J0IFN0cmVhbUhpeGllNzUKK2Zyb20gdGVzdC50
ZXN0X21zZ3V0aWwgaW1wb3J0IF9jcmVhdGVfcmVxdWVzdF9oaXhpZTc1CisKKworY2xhc3MgU3Ry
ZWFtSGl4aWU3NVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkEgdW5pdHRlc3QgZm9y
IFN0cmVhbUhpeGllNzUgY2xhc3MuIiIiCisKKyAgICBkZWYgdGVzdF9wYXlsb2FkX2xlbmd0aChz
ZWxmKToKKyAgICAgICAgZm9yIGxlbmd0aCwgYnl0ZXMgaW4gKCgwLCAnXHgwMCcpLCAoMHg3Ziwg
J1x4N2YnKSwgKDB4ODAsICdceDgxXHgwMCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKDB4MTIzNCwgJ1x4ODBceGE0XHgzNCcpKToKKyAgICAgICAgICAgIHRlc3Rfc3RyZWFtID0g
U3RyZWFtSGl4aWU3NShfY3JlYXRlX3JlcXVlc3RfaGl4aWU3NShieXRlcykpCisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGxlbmd0aCwgdGVzdF9zdHJlYW0u
X3JlYWRfcGF5bG9hZF9sZW5ndGhfaGl4aWU3NSgpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVz
dC90ZXN0X3V0aWwucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJz
b2NrZXQvdGVzdC90ZXN0X3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjFlNWU0ZDEzNTRiOGUyMjg2YWQ2
YTRjZmIxZjQ3YWMzMGU3NWVkNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RfdXRpbC5weQpAQCAtMCwwICsx
LDExNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDExLCBHb29n
bGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisi
IiJUZXN0cyBmb3IgdXRpbCBtb2R1bGUuIiIiCisKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitp
bXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHNldF9zeXNfcGF0aCAgIyBVcGRhdGUgc3lzLnBhdGgg
dG8gbG9jYXRlIG1vZF9weXdlYnNvY2tldCBtb2R1bGUuCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0
IGltcG9ydCB1dGlsCisKKworX1RFU1RfREFUQV9ESVIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5z
cGxpdChfX2ZpbGVfXylbMF0sICd0ZXN0ZGF0YScpCisKKworY2xhc3MgVXRpbFRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgorICAgICIiIkEgdW5pdHRlc3QgZm9yIHV0aWwgbW9kdWxlLiIiIgorCisg
ICAgZGVmIHRlc3RfZ2V0X3N0YWNrX3RyYWNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdOb25lXG4nLCB1dGlsLmdldF9zdGFja190cmFjZSgpKQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICBhID0gMSAvIDAgICMgSW50ZW50aW9uYWxseSByYWlzZSBleGNlcHRpb24uCisgICAg
ICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICB0cmFjZSA9IHV0aWwuZ2V0X3N0YWNr
X3RyYWNlKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0cmFjZS5zdGFydHN3aXRoKCdU
cmFjZWJhY2snKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0cmFjZS5maW5kKCdaZXJv
RGl2aXNpb25FcnJvcicpICE9IC0xKQorCisgICAgZGVmIHRlc3RfcHJlcGVuZF9tZXNzYWdlX3Rv
X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXhjID0gRXhjZXB0aW9uKCdXb3JsZCcpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1dvcmxkJywgc3RyKGV4YykpCisgICAgICAgIHV0aWwucHJl
cGVuZF9tZXNzYWdlX3RvX2V4Y2VwdGlvbignSGVsbG8gJywgZXhjKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdIZWxsbyBXb3JsZCcsIHN0cihleGMpKQorCisgICAgZGVmIHRlc3RfZ2V0X3Nj
cmlwdF9pbnRlcnAoc2VsZik6CisgICAgICAgIGN5Z3dpbl9wYXRoID0gJ2M6XFxjeWd3aW5cXGJp
bicKKyAgICAgICAgY3lnd2luX3BlcmwgPSBvcy5wYXRoLmpvaW4oY3lnd2luX3BhdGgsICdwZXJs
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB1dGlsLmdldF9zY3JpcHRfaW50ZXJw
KAorICAgICAgICAgICAgb3MucGF0aC5qb2luKF9URVNUX0RBVEFfRElSLCAnUkVBRE1FJykpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHV0aWwuZ2V0X3NjcmlwdF9pbnRlcnAoCisg
ICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfREFUQV9ESVIsICdSRUFETUUnKSwgY3lnd2lu
X3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvdXNyL2Jpbi9wZXJsIC13VCcsIHV0
aWwuZ2V0X3NjcmlwdF9pbnRlcnAoCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfREFU
QV9ESVIsICdoZWxsby5wbCcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjeWd3aW5fcGVy
bCArICcgLXdUJywgdXRpbC5nZXRfc2NyaXB0X2ludGVycCgKKyAgICAgICAgICAgIG9zLnBhdGgu
am9pbihfVEVTVF9EQVRBX0RJUiwgJ2hlbGxvLnBsJyksIGN5Z3dpbl9wYXRoKSkKKworICAgIGRl
ZiB0ZXN0X2hleGlmeShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnNjEgN2EgNDEg
NWEgMzAgMzkgMjAgMDkgMGQgMGEgMDAgZmYnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHV0
aWwuaGV4aWZ5KCdhekFaMDkgXHRcclxuXHgwMFx4ZmYnKSkKKworCitjbGFzcyBSZXBlYXRlZFhv
ck1hc2tlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkEgdW5pdHRlc3QgZm9yIFJl
cGVhdGVkWG9yTWFza2VyIGNsYXNzLiIiIgorCisgICAgZGVmIHRlc3RfbWFzayhzZWxmKToKKyAg
ICAgICAgIyBTYW1wbGUgaW5wdXQgZTYsOTcsYTUgaXMgVSs2NWU1IGluIFVURi04CisgICAgICAg
IG1hc2tlciA9IHV0aWwuUmVwZWF0ZWRYb3JNYXNrZXIoJ1x4ZmZceGZmXHhmZicpCisgICAgICAg
IHJlc3VsdCA9IG1hc2tlci5tYXNrKCdceGU2XHg5N1x4YTUnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdceDE5XHg2OFx4NWEnLCByZXN1bHQpCisKKyAgICAgICAgbWFza2VyID0gdXRpbC5S
ZXBlYXRlZFhvck1hc2tlcignXHgwMFx4MDBceDAwJykKKyAgICAgICAgcmVzdWx0ID0gbWFza2Vy
Lm1hc2soJ1x4ZTZceDk3XHhhNScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ZTZceDk3
XHhhNScsIHJlc3VsdCkKKworICAgICAgICBtYXNrZXIgPSB1dGlsLlJlcGVhdGVkWG9yTWFza2Vy
KCdceGU2XHg5N1x4YTUnKQorICAgICAgICByZXN1bHQgPSBtYXNrZXIubWFzaygnXHhlNlx4OTdc
eGE1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMFx4MDBceDAwJywgcmVzdWx0KQor
CisgICAgZGVmIHRlc3RfbWFza190d2ljZShzZWxmKToKKyAgICAgICAgbWFza2VyID0gdXRpbC5S
ZXBlYXRlZFhvck1hc2tlcignXHgwMFx4N2ZceGZmJykKKyAgICAgICAgIyBtYXNrWzBdLCBtYXNr
WzFdLCAuLi4gd2lsbCBiZSB1c2VkLgorICAgICAgICByZXN1bHQgPSBtYXNrZXIubWFzaygnXHgw
MFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwXHg3Zlx4
ZmZceDAwXHg3ZicsIHJlc3VsdCkKKyAgICAgICAgIyBtYXNrWzJdLCBtYXNrWzBdLCAuLi4gd2ls
bCBiZSB1c2VkIGZvciB0aGUgbmV4dCBjYWxsLgorICAgICAgICByZXN1bHQgPSBtYXNrZXIubWFz
aygnXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGZm
XHgwMFx4N2ZceGZmXHgwMCcsIHJlc3VsdCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgorICAgIHVuaXR0ZXN0Lm1haW4oKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVz
dGRhdGEvUkVBRE1FIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29j
a2V0L3Rlc3QvdGVzdGRhdGEvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwMDFhYTU1OTVjZGQxMzQwN2Y1
NzI4ZWNkNTMyYTVkMTIyNjNlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9SRUFETUUKQEAgLTAs
MCArMSBAQAorVGVzdCBkYXRhIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvYWJv
cnRfYnlfdXNlcl93c2gucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3
ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9hYm9ydF9ieV91c2VyX3dzaC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zNjdmOTkzMGY3ODI0YzNhNTM1OTE0YTViMzc3OWY2YjZmYmEyNDNmCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0
L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvYWJvcnRfYnlfdXNlcl93c2gucHkKQEAgLTAsMCArMSw0
MiBAQAorIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGhh
bmRzaGFrZQorCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToK
KyAgICByYWlzZSBoYW5kc2hha2UuQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbigiYWJvcnQgZm9yIHRl
c3QiKQorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcmFp
c2UgaGFuZHNoYWtlLkFib3J0ZWRCeVVzZXJFeGNlcHRpb24oImFib3J0IGZvciB0ZXN0IikKKwor
CisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL2JsYW5rX3dzaC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rl
c3RkYXRhL2hhbmRsZXJzL2JsYW5rX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Zjg3YzZhZjIzZGYwOGVm
ZTM1NzVjYWUyMDhkZTUwMjJjYmFhNjYwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMv
Ymxhbmtfd3NoLnB5CkBAIC0wLDAgKzEsMzEgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJ
bmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyMgaW50
ZW50aW9uYWxseSBsZWZ0IGJsYW5rCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9vcmlnaW5fY2hl
Y2tfd3NoLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0
L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvb3JpZ2luX2NoZWNrX3dzaC5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
YzEzOWZhMTc2Y2MzNDE3YmU5NmRlNzk4ZTZhODFlZDE0OWIxOTkyCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVz
dGRhdGEvaGFuZGxlcnMvb3JpZ2luX2NoZWNrX3dzaC5weQpAQCAtMCwwICsxLDQyIEBACisjIENv
cHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVz
dCk6CisgICAgaWYgcmVxdWVzdC53c19vcmlnaW4gPT0gJ2h0dHA6Ly9leGFtcGxlLmNvbSc6Cisg
ICAgICAgIHJldHVybgorICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWNjZXB0YWJsZSBvcmlnaW46
ICVyJyAlIHJlcXVlc3Qud3Nfb3JpZ2luKQorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2Rh
dGEocmVxdWVzdCk6CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdvcmlnaW5fY2hlY2tf
d3NoLnB5IGlzIGNhbGxlZCBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZp
OnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9leGNlcHRpb25faW5f
dHJhbnNmZXJfd3NoLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vi
c29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2V4Y2VwdGlvbl9pbl90cmFuc2Zlcl93
c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjk4MmQwMjMxZWYwMGYwMmUwZDkwZGY2NzhlYjgwNGJhNDM4NjJk
OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9w
eXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9leGNlcHRpb25faW5fdHJhbnNm
ZXJfd3NoLnB5CkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMu
CisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIkV4Y2Vw
dGlvbiBpbiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEoKS4KKyIiIgorCisKK2RlZiB3ZWJfc29j
a2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICBwYXNzCisKKworZGVmIHdlYl9z
b2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICByYWlzZSBFeGNlcHRpb24oJ0ludGVu
dGlvbmFsIEV4Y2VwdGlvbiBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgIChyZXF1
ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3
PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdl
YnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9ub193c2hfYXRfdGhlX2VuZC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3Rk
YXRhL2hhbmRsZXJzL3N1Yi9ub193c2hfYXRfdGhlX2VuZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xN2U3YmUx
ODAyZTNjNjZjNjM4NDk4NzVlYTM1ZTI0MDZhMzgxZTYwCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEv
aGFuZGxlcnMvc3ViL25vX3dzaF9hdF90aGVfZW5kLnB5CkBAIC0wLDAgKzEsNDUgQEAKKyMgQ29w
eXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisKKyIiIkNvcnJlY3Qgc2lnbmF0dXJlcywgd3JvbmcgZmlsZSBuYW1lLgor
IiIiCisKKworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAg
IHBhc3MKKworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHJl
cXVlc3QuY29ubmVjdGlvbi53cml0ZSgKKyAgICAgICAgICAgICdzdWIvbm9fd3NoX2F0X3RoZV9l
bmQucHkgaXMgY2FsbGVkIGZvciAlcywgJXMnICUKKyAgICAgICAgICAgIChyZXF1ZXN0LndzX3Jl
c291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90
ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9ub25fY2FsbGFibGVfd3NoLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxl
cnMvc3ViL25vbl9jYWxsYWJsZV93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjYzNTJlYjRjYTIzODk1MjIz
OWUzNTQyNzI4Y2UzYjM4ZDgzZGQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1
Yi9ub25fY2FsbGFibGVfd3NoLnB5CkBAIC0wLDAgKzEsMzkgQEAKKyMgQ29weXJpZ2h0IDIwMDks
IEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisKKyIiIk5vbi1jYWxsYWJsZSBoYW5kbGVycy4KKyIiIgorCisKK3dlYl9zb2NrZXRfZG9fZXh0
cmFfaGFuZHNoYWtlID0gVHJ1ZQord2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhID0gMQorCisKKyMg
dmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL3BsYWluX3dzaC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rl
c3RkYXRhL2hhbmRsZXJzL3N1Yi9wbGFpbl93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGIzZmY2OTMwMjU2
YmMxYjEzZTJjNGMyZDFjODQzYzRiN2M4MGFhNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRs
ZXJzL3N1Yi9wbGFpbl93c2gucHkKQEAgLTAsMCArMSw0MCBAQAorIyBDb3B5cmlnaHQgMjAwOSwg
R29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MK
KworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHJlcXVlc3Qu
Y29ubmVjdGlvbi53cml0ZSgnc3ViL3BsYWluX3dzaC5weSBpcyBjYWxsZWQgZm9yICVzLCAlcycg
JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC53c19yZXNvdXJjZSwgcmVx
dWVzdC53c19wcm90b2NvbCkpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0
YS9oYW5kbGVycy9zdWIvd3JvbmdfaGFuZHNoYWtlX3NpZ193c2gucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9z
dWIvd3JvbmdfaGFuZHNoYWtlX3NpZ193c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJmNjU5YmM5YWYwMWMx
MDdlZjM1MDhiMmI1ZDAxNzNkY2Y1OTAwOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJz
L3N1Yi93cm9uZ19oYW5kc2hha2Vfc2lnX3dzaC5weQpAQCAtMCwwICsxLDQ1IEBACisjIENvcHly
aWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisiIiJXcm9uZyB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSBzaWdu
YXR1cmUuCisiIiIKKworCitkZWYgbm9fd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVx
dWVzdCk6CisgICAgcGFzcworCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVz
dCk6CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKAorICAgICAgICAgICAgJ3N1Yi93cm9u
Z19oYW5kc2hha2Vfc2lnX3dzaC5weSBpcyBjYWxsZWQgZm9yICVzLCAlcycgJQorICAgICAgICAg
ICAgIChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZp
OnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi93cm9uZ190cmFuc2Zl
cl9zaWdfd3NoLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29j
a2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL3dyb25nX3RyYW5zZmVyX3NpZ193c2gucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTBlMmU1NTA3OTRiN2I5OTBlMGI0NGIzM2NmYzJkNGQxNTJlNmMwNAotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNv
Y2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi93cm9uZ190cmFuc2Zlcl9zaWdfd3NoLnB5
CkBAIC0wLDAgKzEsNDUgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIldyb25nIHdlYl9zb2Nr
ZXRfdHJhbnNmZXJfZGF0YSgpIHNpZ25hdHVyZS4KKyIiIgorCisKK2RlZiB3ZWJfc29ja2V0X2Rv
X2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICBwYXNzCisKKworZGVmIG5vX3dlYl9zb2Nr
ZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUo
CisgICAgICAgICAgICAnc3ViL3dyb25nX3RyYW5zZmVyX3NpZ193c2gucHkgaXMgY2FsbGVkIGZv
ciAlcywgJXMnICUKKyAgICAgICAgICAgIChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0Lndz
X3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hlbGxv
LnBsIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L3B5d2Vic29ja2V0L3Rlc3Qv
dGVzdGRhdGEvaGVsbG8ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWRkMDFiNGFkODFjN2JmNjc0YWJjNTZjZjA4
M2FjYThlMTZmYmQ2NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hlbGxvLnBsCkBAIC0wLDAgKzEs
MiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13VAorcHJpbnQgIkhlbGxvXG4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141187</attachid>
            <date>2012-05-10 10:02:07 -0700</date>
            <delta_ts>2012-05-10 11:37:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86107-20120511020205.patch</filename>
            <type>text/plain</type>
            <size>234613</size>
            <attacher name="Takashi Toyoshima">toyoshim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NDA0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjkwYWFhM2Q0M2Q1ZmNhODk3NGRiMjRkMzg3MjJhZmNk
NDVkYzQ1MS4uM2IxMTkwMDJiNDM4OTE1NDcwZDM5NjIyMjcwNDczOTk5YjFmOGY3MCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1
MiBAQAorMjAxMi0wNS0xMCAgVGFrYXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgZG9uJ3QgdXNlIGF1dG9pbnN0YWxsIHRvIGltcG9ydCBweXdlYnNvY2tl
dCBidXQgY2hlY2sgaXQgaW4gV2ViS2l0IGRpcmVjdGx5LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYxMDcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSByZW1vdmVzIHB5d2Vic29ja2V0
IGZyb20gd2Via2l0cHkncyBhdXRvaW5zdGFsbCBsaXN0IGFuZAorICAgICAgICBpbXBvcnRzIHB5
d2Vic29ja2V0IDAuNy40IGRpcmVjdGx5IGludG8gd2Via2l0cHkvdGhpcnBhcnR5LgorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJzb2NrZXRfc2Vy
dmVyLnB5OgorICAgICAgICAoUHlXZWJTb2NrZXQuX3ByZXBhcmVfY29uZmlnKToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6CisgICAgICAgIChBdXRv
aW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOgorICAgICAgICAoQXV0b2luc3RhbGxJbXBv
cnRIb29rLl9pbnN0YWxsX2lyYyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L19faW5pdF9fX3VuaXR0ZXN0LnB5OgorICAgICAgICAoVGhpcmRwYXJ0eVRlc3QudGVzdF9p
bXBvcnRfaG9vay5Nb2NrSW1wb3J0SG9vay5fX2luaXRfXyk6CisgICAgICAgIChUaGlyZHBhcnR5
VGVzdC50ZXN0X2ltcG9ydF9ob29rLk1vY2tJbXBvcnRIb29rLl9pbnN0YWxsX2VsaXphKToKKyAg
ICAgICAgKFRoaXJkcGFydHlUZXN0KToKKyAgICAgICAgKFRoaXJkcGFydHlUZXN0LnRlc3RfaW1w
b3J0X2hvb2spOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3
ZWJzb2NrZXQvQ09QWUlORzogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L21vZF9weXdlYnNvY2tldC9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9fc3RyZWFtX2Jhc2UucHk6
IEFkZGVkLgorICAgICAgICAoQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24pOgorICAgICAg
ICAoSW52YWxpZEZyYW1lRXhjZXB0aW9uKToKKyAgICAgICAgKEJhZE9wZXJhdGlvbkV4Y2VwdGlv
bik6CisgICAgICAgIChVbnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9uKToKKyAgICAgICAgKEludmFs
aWRVVEY4RXhjZXB0aW9uKToKKyAgICAgICAgKFN0cmVhbUJhc2UpOgorICAgICAgICAoU3RyZWFt
QmFzZS5fX2luaXRfXyk6CisgICAgICAgIChTdHJlYW1CYXNlLl9yZWFkKToKKyAgICAgICAgKFN0
cmVhbUJhc2UuX3dyaXRlKToKKyAgICAgICAgKFN0cmVhbUJhc2UucmVjZWl2ZV9ieXRlcyk6Cisg
ICAgICAgIChTdHJlYW1CYXNlLl9yZWFkX3VudGlsKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L19zdHJlYW1faGl4aWU3NS5weTogQWRkZWQu
CisgICAgICAgIChmb3IpOgorICAgICAgICAoU3RyZWFtSGl4aWU3NSk6CisgICAgICAgIChTdHJl
YW1IaXhpZTc1LmZvcik6CisgICAgICAgIChTdHJlYW1IaXhpZTc1Ll9faW5pdF9fKToKKyAgICAg
ICAgKFN0cmVhbUhpeGllNzUuc2VuZF9tZXNzYWdlKToKKyAgICAgICAgKFN0cmVhbUhpeGllNzUu
X3JlYWRfcGF5bG9hZF9sZW5ndGhfaGl4aWU3NSk6CisgICAgICAgIChTdHJlYW1IaXhpZTc1LnJl
Y2VpdmVfbWVzc2FnZSk6CisgICAgICAgIChTdHJlYW1IaXhpZTc1Ll9zZW5kX2Nsb3NpbmdfaGFu
ZHNoYWtlKToKKyAgICAgICAgKFN0cmVhbUhpeGllNzUuY2xvc2VfY29ubmVjdGlvbik6CisgICAg
ICAgIChTdHJlYW1IaXhpZTc1LnNlbmRfcGluZyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9fc3RyZWFtX2h5YmkucHk6IEFkZGVkLgorICAg
ICAgICAoRnJhbWUpOgorICAgICAgICAoRnJhbWUuX19pbml0X18pOgorICAgICAgICAoY3JlYXRl
X2xlbmd0aF9oZWFkZXIpOgorICAgICAgICAoY3JlYXRlX2hlYWRlcik6CisgICAgICAgIChfYnVp
bGRfZnJhbWUpOgorICAgICAgICAoX2ZpbHRlcl9hbmRfZm9ybWF0X2ZyYW1lX29iamVjdCk6Cisg
ICAgICAgIChjcmVhdGVfYmluYXJ5X2ZyYW1lKToKKyAgICAgICAgKGNyZWF0ZV90ZXh0X2ZyYW1l
KToKKyAgICAgICAgKEZyYWdtZW50ZWRGcmFtZUJ1aWxkZXIpOgorICAgICAgICAoRnJhZ21lbnRl
ZEZyYW1lQnVpbGRlci50byk6CisgICAgICAgIChGcmFnbWVudGVkRnJhbWVCdWlsZGVyLl9faW5p
dF9fKToKKyAgICAgICAgKEZyYWdtZW50ZWRGcmFtZUJ1aWxkZXIuYnVpbGQpOgorICAgICAgICAo
X2NyZWF0ZV9jb250cm9sX2ZyYW1lKToKKyAgICAgICAgKGNyZWF0ZV9waW5nX2ZyYW1lKToKKyAg
ICAgICAgKGNyZWF0ZV9wb25nX2ZyYW1lKToKKyAgICAgICAgKGNyZWF0ZV9jbG9zZV9mcmFtZSk6
CisgICAgICAgIChTdHJlYW1PcHRpb25zKToKKyAgICAgICAgKFN0cmVhbU9wdGlvbnMuX19pbml0
X18pOgorICAgICAgICAoU3RyZWFtKToKKyAgICAgICAgKFN0cmVhbS5mb3IpOgorICAgICAgICAo
U3RyZWFtLl9faW5pdF9fKToKKyAgICAgICAgKFN0cmVhbS5fcmVjZWl2ZV9mcmFtZSk6CisgICAg
ICAgIChTdHJlYW0uX3JlY2VpdmVfZnJhbWVfYXNfZnJhbWVfb2JqZWN0KToKKyAgICAgICAgKFN0
cmVhbS5zZW5kX21lc3NhZ2UpOgorICAgICAgICAoU3RyZWFtLnJlY2VpdmVfbWVzc2FnZSk6Cisg
ICAgICAgIChTdHJlYW0uX3NlbmRfY2xvc2luZ19oYW5kc2hha2UpOgorICAgICAgICAoU3RyZWFt
LmNsb3NlX2Nvbm5lY3Rpb24pOgorICAgICAgICAoU3RyZWFtLnNlbmRfcGluZyk6CisgICAgICAg
IChTdHJlYW0uX3NlbmRfcG9uZyk6CisgICAgICAgIChTdHJlYW0uX2RyYWluX3JlY2VpdmVkX2Rh
dGEpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2Nr
ZXQvY29tbW9uLnB5OiBBZGRlZC4KKyAgICAgICAgKGlzX2NvbnRyb2xfb3Bjb2RlKToKKyAgICAg
ICAgKEV4dGVuc2lvblBhcmFtZXRlcik6CisgICAgICAgIChFeHRlbnNpb25QYXJhbWV0ZXIuX19p
bml0X18pOgorICAgICAgICAoRXh0ZW5zaW9uUGFyYW1ldGVyLm5hbWUpOgorICAgICAgICAoRXh0
ZW5zaW9uUGFyYW1ldGVyLmFkZF9wYXJhbWV0ZXIpOgorICAgICAgICAoRXh0ZW5zaW9uUGFyYW1l
dGVyLmdldF9wYXJhbWV0ZXJzKToKKyAgICAgICAgKEV4dGVuc2lvblBhcmFtZXRlci5nZXRfcGFy
YW1ldGVyX25hbWVzKToKKyAgICAgICAgKEV4dGVuc2lvblBhcmFtZXRlci5oYXNfcGFyYW1ldGVy
KToKKyAgICAgICAgKEV4dGVuc2lvblBhcmFtZXRlci5nZXRfcGFyYW1ldGVyX3ZhbHVlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L2Rpc3Bh
dGNoLnB5OiBBZGRlZC4KKyAgICAgICAgKERpc3BhdGNoRXhjZXB0aW9uKToKKyAgICAgICAgKERp
c3BhdGNoRXhjZXB0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKF9kZWZhdWx0X3Bhc3NpdmVfY2xv
c2luZ19oYW5kc2hha2VfaGFuZGxlcik6CisgICAgICAgIChfbm9ybWFsaXplX3BhdGgpOgorICAg
ICAgICAoX2NyZWF0ZV9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcik6CisgICAgICAgIChfY3Jl
YXRlX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyLmNvbnZlcnRlcik6CisgICAgICAgIChfZW51
bWVyYXRlX2hhbmRsZXJfZmlsZV9wYXRocyk6CisgICAgICAgIChfSGFuZGxlclN1aXRlKToKKyAg
ICAgICAgKF9IYW5kbGVyU3VpdGUuX19pbml0X18pOgorICAgICAgICAoX3NvdXJjZV9oYW5kbGVy
X2ZpbGUpOgorICAgICAgICAoX2V4dHJhY3RfaGFuZGxlcik6CisgICAgICAgIChEaXNwYXRjaGVy
KToKKyAgICAgICAgKERpc3BhdGNoZXIubWFpbnRhaW5zKToKKyAgICAgICAgKERpc3BhdGNoZXIu
X19pbml0X18pOgorICAgICAgICAoRGlzcGF0Y2hlci5hZGRfcmVzb3VyY2VfcGF0aF9hbGlhcyk6
CisgICAgICAgIChEaXNwYXRjaGVyLnNvdXJjZV93YXJuaW5ncyk6CisgICAgICAgIChEaXNwYXRj
aGVyLmRvX2V4dHJhX2hhbmRzaGFrZSk6CisgICAgICAgIChEaXNwYXRjaGVyLnRyYW5zZmVyX2Rh
dGEpOgorICAgICAgICAoRGlzcGF0Y2hlci5wYXNzaXZlX2Nsb3NpbmdfaGFuZHNoYWtlKToKKyAg
ICAgICAgKERpc3BhdGNoZXIuZ2V0X2hhbmRsZXJfc3VpdGUpOgorICAgICAgICAoRGlzcGF0Y2hl
ci5fc291cmNlX2hhbmRsZXJfZmlsZXNfaW5fZGlyKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L2V4dGVuc2lvbnMucHk6IEFkZGVkLgorICAg
ICAgICAoRXh0ZW5zaW9uUHJvY2Vzc29ySW50ZXJmYWNlKToKKyAgICAgICAgKEV4dGVuc2lvblBy
b2Nlc3NvckludGVyZmFjZS5nZXRfZXh0ZW5zaW9uX3Jlc3BvbnNlKToKKyAgICAgICAgKEV4dGVu
c2lvblByb2Nlc3NvckludGVyZmFjZS5zZXR1cF9zdHJlYW1fb3B0aW9ucyk6CisgICAgICAgIChE
ZWZsYXRlU3RyZWFtRXh0ZW5zaW9uUHJvY2Vzc29yKToKKyAgICAgICAgKERlZmxhdGVTdHJlYW1F
eHRlbnNpb25Qcm9jZXNzb3IuX19pbml0X18pOgorICAgICAgICAoRGVmbGF0ZVN0cmVhbUV4dGVu
c2lvblByb2Nlc3Nvci5nZXRfZXh0ZW5zaW9uX3Jlc3BvbnNlKToKKyAgICAgICAgKERlZmxhdGVT
dHJlYW1FeHRlbnNpb25Qcm9jZXNzb3Iuc2V0dXBfc3RyZWFtX29wdGlvbnMpOgorICAgICAgICAo
RGVmbGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yKToKKyAgICAgICAgKERlZmxhdGVGcmFtZUV4
dGVuc2lvblByb2Nlc3Nvci5fX2luaXRfXyk6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNp
b25Qcm9jZXNzb3IuZ2V0X2V4dGVuc2lvbl9yZXNwb25zZSk6CisgICAgICAgIChEZWZsYXRlRnJh
bWVFeHRlbnNpb25Qcm9jZXNzb3Iuc2V0dXBfc3RyZWFtX29wdGlvbnMpOgorICAgICAgICAoRGVm
bGF0ZUZyYW1lRXh0ZW5zaW9uUHJvY2Vzc29yLnNldHVwX3N0cmVhbV9vcHRpb25zLl9PdXRnb2lu
Z0ZpbHRlcik6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3Iuc2V0dXBf
c3RyZWFtX29wdGlvbnMuX091dGdvaW5nRmlsdGVyLl9faW5pdF9fKToKKyAgICAgICAgKERlZmxh
dGVGcmFtZUV4dGVuc2lvblByb2Nlc3Nvci5zZXR1cF9zdHJlYW1fb3B0aW9ucy5fT3V0Z29pbmdG
aWx0ZXIuZmlsdGVyKToKKyAgICAgICAgKERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3Nvci5z
ZXR1cF9zdHJlYW1fb3B0aW9ucy5fSW5jb21pbmdGaWx0ZXIpOgorICAgICAgICAoRGVmbGF0ZUZy
YW1lRXh0ZW5zaW9uUHJvY2Vzc29yLnNldHVwX3N0cmVhbV9vcHRpb25zLl9JbmNvbWluZ0ZpbHRl
ci5fX2luaXRfXyk6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3Iuc2V0
dXBfc3RyZWFtX29wdGlvbnMuX0luY29taW5nRmlsdGVyLmZpbHRlcik6CisgICAgICAgIChEZWZs
YXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3Iuc2V0X3Jlc3BvbnNlX3dpbmRvd19iaXRzKToKKyAg
ICAgICAgKERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3Nvci5zZXRfcmVzcG9uc2Vfbm9fY29u
dGV4dF90YWtlb3Zlcik6CisgICAgICAgIChEZWZsYXRlRnJhbWVFeHRlbnNpb25Qcm9jZXNzb3Iu
ZW5hYmxlX291dGdvaW5nX2NvbXByZXNzaW9uKToKKyAgICAgICAgKERlZmxhdGVGcmFtZUV4dGVu
c2lvblByb2Nlc3Nvci5kaXNhYmxlX291dGdvaW5nX2NvbXByZXNzaW9uKToKKyAgICAgICAgKERl
ZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3Nvci5fb3V0Z29pbmdfZmlsdGVyKToKKyAgICAgICAg
KERlZmxhdGVGcmFtZUV4dGVuc2lvblByb2Nlc3Nvci5faW5jb21pbmdfZmlsdGVyKToKKyAgICAg
ICAgKGdldF9leHRlbnNpb25fcHJvY2Vzc29yKToKKyAgICAgICAgKGdldF9leHRlbnNpb25fcHJv
Y2Vzc29yLmlzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5
d2Vic29ja2V0L2hhbmRzaGFrZS9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICh0cnkpOgor
ICAgICAgICAoZG9faGFuZHNoYWtlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9fYmFzZS5weTogQWRkZWQuCisgICAgICAg
IChBYm9ydGVkQnlVc2VyRXhjZXB0aW9uKToKKyAgICAgICAgKEhhbmRzaGFrZUV4Y2VwdGlvbik6
CisgICAgICAgIChIYW5kc2hha2VFeGNlcHRpb24uX19pbml0X18pOgorICAgICAgICAoVmVyc2lv
bkV4Y2VwdGlvbik6CisgICAgICAgIChWZXJzaW9uRXhjZXB0aW9uLl9faW5pdF9fKToKKyAgICAg
ICAgKGdldF9kZWZhdWx0X3BvcnQpOgorICAgICAgICAodmFsaWRhdGVfc3VicHJvdG9jb2wpOgor
ICAgICAgICAocGFyc2VfaG9zdF9oZWFkZXIpOgorICAgICAgICAoZm9ybWF0X2hlYWRlcik6Cisg
ICAgICAgIChidWlsZF9sb2NhdGlvbik6CisgICAgICAgIChnZXRfbWFuZGF0b3J5X2hlYWRlcik6
CisgICAgICAgICh2YWxpZGF0ZV9tYW5kYXRvcnlfaGVhZGVyKToKKyAgICAgICAgKGNoZWNrX3Jl
cXVlc3RfbGluZSk6CisgICAgICAgIChjaGVja19oZWFkZXJfbGluZXMpOgorICAgICAgICAocGFy
c2VfdG9rZW5fbGlzdCk6CisgICAgICAgIChfcGFyc2VfZXh0ZW5zaW9uX3BhcmFtKToKKyAgICAg
ICAgKF9wYXJzZV9leHRlbnNpb24pOgorICAgICAgICAocGFyc2VfZXh0ZW5zaW9ucyk6CisgICAg
ICAgIChmb3JtYXRfZXh0ZW5zaW9ucyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvZHJhZnQ3NS5weTogQWRkZWQuCisgICAg
ICAgIChIYW5kc2hha2VyKToKKyAgICAgICAgKEhhbmRzaGFrZXIucGVyZm9ybXMpOgorICAgICAg
ICAoSGFuZHNoYWtlci5fX2luaXRfXyk6CisgICAgICAgIChIYW5kc2hha2VyLmRvX2hhbmRzaGFr
ZSk6CisgICAgICAgIChIYW5kc2hha2VyLl9zZXRfcmVzb3VyY2UpOgorICAgICAgICAoSGFuZHNo
YWtlci5fc2V0X29yaWdpbik6CisgICAgICAgIChIYW5kc2hha2VyLl9zZXRfbG9jYXRpb24pOgor
ICAgICAgICAoSGFuZHNoYWtlci5fc2V0X3N1YnByb3RvY29sKToKKyAgICAgICAgKEhhbmRzaGFr
ZXIuX3NldF9wcm90b2NvbF92ZXJzaW9uKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX3NlbmRhbGwp
OgorICAgICAgICAoSGFuZHNoYWtlci5fc2VuZF9oYW5kc2hha2UpOgorICAgICAgICAoSGFuZHNo
YWtlci5fY2hlY2tfaGVhZGVyX2xpbmVzKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX2NoZWNrX2Zp
cnN0X2xpbmVzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5
d2Vic29ja2V0L2hhbmRzaGFrZS9oeWJpLnB5OiBBZGRlZC4KKyAgICAgICAgKGNvbXB1dGVfYWNj
ZXB0KToKKyAgICAgICAgKEhhbmRzaGFrZXIpOgorICAgICAgICAoSGFuZHNoYWtlci5fX2luaXRf
Xyk6CisgICAgICAgIChIYW5kc2hha2VyLl92YWxpZGF0ZV9jb25uZWN0aW9uX2hlYWRlcik6Cisg
ICAgICAgIChIYW5kc2hha2VyLmRvX2hhbmRzaGFrZSk6CisgICAgICAgIChIYW5kc2hha2VyLl9n
ZXRfb3JpZ2luKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX2NoZWNrX3ZlcnNpb24pOgorICAgICAg
ICAoSGFuZHNoYWtlci5fc2V0X3Byb3RvY29sKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX3BhcnNl
X2V4dGVuc2lvbnMpOgorICAgICAgICAoSGFuZHNoYWtlci5fdmFsaWRhdGVfa2V5KToKKyAgICAg
ICAgKEhhbmRzaGFrZXIuX2dldF9rZXkpOgorICAgICAgICAoSGFuZHNoYWtlci5fc2VuZF9oYW5k
c2hha2UpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJz
b2NrZXQvaGFuZHNoYWtlL2h5YmkwMC5weTogQWRkZWQuCisgICAgICAgIChIYW5kc2hha2VyKToK
KyAgICAgICAgKEhhbmRzaGFrZXIuX19pbml0X18pOgorICAgICAgICAoSGFuZHNoYWtlci5kb19o
YW5kc2hha2UpOgorICAgICAgICAoSGFuZHNoYWtlci5fc2V0X3Jlc291cmNlKToKKyAgICAgICAg
KEhhbmRzaGFrZXIuX3NldF9zdWJwcm90b2NvbCk6CisgICAgICAgIChIYW5kc2hha2VyLl9zZXRf
bG9jYXRpb24pOgorICAgICAgICAoSGFuZHNoYWtlci5fc2V0X29yaWdpbik6CisgICAgICAgIChI
YW5kc2hha2VyLl9zZXRfcHJvdG9jb2xfdmVyc2lvbik6CisgICAgICAgIChIYW5kc2hha2VyLl9z
ZXRfY2hhbGxlbmdlX3Jlc3BvbnNlKToKKyAgICAgICAgKEhhbmRzaGFrZXIuX2dldF9rZXlfdmFs
dWUpOgorICAgICAgICAoSGFuZHNoYWtlci5fZ2V0X2NoYWxsZW5nZSk6CisgICAgICAgIChIYW5k
c2hha2VyLl9zZW5kX2hhbmRzaGFrZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L21vZF9weXdlYnNvY2tldC9oZWFkZXJwYXJzZXJoYW5kbGVyLnB5OiBBZGRlZC4KKyAg
ICAgICAgKEFwYWNoZUxvZ0hhbmRsZXIpOgorICAgICAgICAoQXBhY2hlTG9nSGFuZGxlci5fX2lu
aXRfXyk6CisgICAgICAgIChBcGFjaGVMb2dIYW5kbGVyLmVtaXQpOgorICAgICAgICAoX2NvbmZp
Z3VyZV9sb2dnaW5nKToKKyAgICAgICAgKF9wYXJzZV9vcHRpb24pOgorICAgICAgICAoX2NyZWF0
ZV9kaXNwYXRjaGVyKToKKyAgICAgICAgKGhlYWRlcnBhcnNlcmhhbmRsZXIpOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvaHR0cF9oZWFkZXJf
dXRpbC5weTogQWRkZWQuCisgICAgICAgIChfaXNfY2hhcik6CisgICAgICAgIChfaXNfY3RsKToK
KyAgICAgICAgKFBhcnNpbmdTdGF0ZSk6CisgICAgICAgIChQYXJzaW5nU3RhdGUuX19pbml0X18p
OgorICAgICAgICAocGVlayk6CisgICAgICAgIChjb25zdW1lKToKKyAgICAgICAgKGNvbnN1bWVf
c3RyaW5nKToKKyAgICAgICAgKGNvbnN1bWVfbHdzKToKKyAgICAgICAgKGNvbnN1bWVfbHdzZXMp
OgorICAgICAgICAoY29uc3VtZV90b2tlbik6CisgICAgICAgIChjb25zdW1lX3Rva2VuX29yX3F1
b3RlZF9zdHJpbmcpOgorICAgICAgICAocXVvdGVfaWZfbmVjZXNzYXJ5KToKKyAgICAgICAgKHBh
cnNlX3VyaSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdl
YnNvY2tldC9tZW1vcml6aW5nZmlsZS5weTogQWRkZWQuCisgICAgICAgIChNZW1vcml6aW5nRmls
ZSk6CisgICAgICAgIChNZW1vcml6aW5nRmlsZS5fX2luaXRfXyk6CisgICAgICAgIChNZW1vcml6
aW5nRmlsZS5fX2dldGF0dHJpYnV0ZV9fKToKKyAgICAgICAgKE1lbW9yaXppbmdGaWxlLnJlYWRs
aW5lKToKKyAgICAgICAgKE1lbW9yaXppbmdGaWxlLmdldF9tZW1vcml6ZWRfbGluZXMpOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvbXNndXRp
bC5weTogQWRkZWQuCisgICAgICAgIChjbG9zZV9jb25uZWN0aW9uKToKKyAgICAgICAgKHNlbmRf
bWVzc2FnZSk6CisgICAgICAgIChyZWNlaXZlX21lc3NhZ2UpOgorICAgICAgICAoc2VuZF9waW5n
KToKKyAgICAgICAgKE1lc3NhZ2VSZWNlaXZlcik6CisgICAgICAgIChNZXNzYWdlUmVjZWl2ZXIu
cmVjZWl2ZXMpOgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVyLnByb3ZpZGVzKToKKyAgICAgICAg
KE1lc3NhZ2VSZWNlaXZlci5zaG91bGQpOgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVyLl9faW5p
dF9fKToKKyAgICAgICAgKE1lc3NhZ2VSZWNlaXZlci5ydW4pOgorICAgICAgICAoTWVzc2FnZVJl
Y2VpdmVyLnJlY2VpdmUpOgorICAgICAgICAoTWVzc2FnZVJlY2VpdmVyLnJlY2VpdmVfbm93YWl0
KToKKyAgICAgICAgKE1lc3NhZ2VSZWNlaXZlci5zdG9wKToKKyAgICAgICAgKE1lc3NhZ2VTZW5k
ZXIpOgorICAgICAgICAoTWVzc2FnZVNlbmRlci5zZW5kcyk6CisgICAgICAgIChNZXNzYWdlU2Vu
ZGVyLnByb3ZpZGVzKToKKyAgICAgICAgKE1lc3NhZ2VTZW5kZXIuc2hvdWxkKToKKyAgICAgICAg
KE1lc3NhZ2VTZW5kZXIuX19pbml0X18pOgorICAgICAgICAoTWVzc2FnZVNlbmRlci5ydW4pOgor
ICAgICAgICAoTWVzc2FnZVNlbmRlci5zZW5kKToKKyAgICAgICAgKE1lc3NhZ2VTZW5kZXIuc2Vu
ZF9ub3dhaXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3
ZWJzb2NrZXQvc3RhbmRhbG9uZS5weTogQWRkZWQuCisgICAgICAgIChfU3RhbmRhbG9uZUNvbm5l
Y3Rpb24pOgorICAgICAgICAoX1N0YW5kYWxvbmVDb25uZWN0aW9uLl9faW5pdF9fKToKKyAgICAg
ICAgKF9TdGFuZGFsb25lQ29ubmVjdGlvbi5nZXRfbG9jYWxfYWRkcik6CisgICAgICAgIChfU3Rh
bmRhbG9uZUNvbm5lY3Rpb24uZ2V0X3JlbW90ZV9hZGRyKToKKyAgICAgICAgKF9TdGFuZGFsb25l
Q29ubmVjdGlvbi53cml0ZSk6CisgICAgICAgIChfU3RhbmRhbG9uZUNvbm5lY3Rpb24ucmVhZCk6
CisgICAgICAgIChfU3RhbmRhbG9uZUNvbm5lY3Rpb24uZ2V0X21lbW9yaXplZF9saW5lcyk6Cisg
ICAgICAgIChfU3RhbmRhbG9uZVJlcXVlc3QpOgorICAgICAgICAoX1N0YW5kYWxvbmVSZXF1ZXN0
Ll9faW5pdF9fKToKKyAgICAgICAgKF9TdGFuZGFsb25lUmVxdWVzdC5nZXRfdXJpKToKKyAgICAg
ICAgKF9TdGFuZGFsb25lUmVxdWVzdC5nZXRfbWV0aG9kKToKKyAgICAgICAgKF9TdGFuZGFsb25l
UmVxdWVzdC5pc19odHRwcyk6CisgICAgICAgIChfU3RhbmRhbG9uZVJlcXVlc3QuX2RyYWluX3Jl
Y2VpdmVkX2RhdGEpOgorICAgICAgICAoX1N0YW5kYWxvbmVTU0xDb25uZWN0aW9uKToKKyAgICAg
ICAgKF9TdGFuZGFsb25lU1NMQ29ubmVjdGlvbi5mb3IpOgorICAgICAgICAoX1N0YW5kYWxvbmVT
U0xDb25uZWN0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKF9TdGFuZGFsb25lU1NMQ29ubmVjdGlv
bi5fX2dldGF0dHJpYnV0ZV9fKToKKyAgICAgICAgKF9TdGFuZGFsb25lU1NMQ29ubmVjdGlvbi5f
X3NldGF0dHJfXyk6CisgICAgICAgIChfU3RhbmRhbG9uZVNTTENvbm5lY3Rpb24ubWFrZWZpbGUp
OgorICAgICAgICAoV2ViU29ja2V0U2VydmVyKToKKyAgICAgICAgKFdlYlNvY2tldFNlcnZlci5f
X2luaXRfXyk6CisgICAgICAgIChXZWJTb2NrZXRTZXJ2ZXIuX2NyZWF0ZV9zb2NrZXRzKToKKyAg
ICAgICAgKFdlYlNvY2tldFNlcnZlci5zZXJ2ZXJfYmluZCk6CisgICAgICAgIChXZWJTb2NrZXRT
ZXJ2ZXIuc2VydmVyX2FjdGl2YXRlKToKKyAgICAgICAgKFdlYlNvY2tldFNlcnZlci5zZXJ2ZXJf
Y2xvc2UpOgorICAgICAgICAoV2ViU29ja2V0U2VydmVyLmZpbGVubyk6CisgICAgICAgIChXZWJT
b2NrZXRTZXJ2ZXIuaGFuZGxlX2Vycm9yKToKKyAgICAgICAgKFdlYlNvY2tldFNlcnZlci5nZXRf
cmVxdWVzdCk6CisgICAgICAgIChXZWJTb2NrZXRTZXJ2ZXIuc2VydmVfZm9yZXZlcik6CisgICAg
ICAgIChXZWJTb2NrZXRTZXJ2ZXIuc2h1dGRvd24pOgorICAgICAgICAoV2ViU29ja2V0UmVxdWVz
dEhhbmRsZXIpOgorICAgICAgICAoV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIuc2V0dXApOgorICAg
ICAgICAoV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIuc2V0dXAuU29ja2V0U2VydmVyKToKKyAgICAg
ICAgKFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyLl9faW5pdF9fKToKKyAgICAgICAgKFdlYlNvY2tl
dFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3QpOgorICAgICAgICAoV2ViU29ja2V0UmVxdWVz
dEhhbmRsZXIubG9nX3JlcXVlc3QpOgorICAgICAgICAoV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIu
bG9nX2Vycm9yKToKKyAgICAgICAgKFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyLmlzX2NnaSk6Cisg
ICAgICAgIChfY29uZmlndXJlX2xvZ2dpbmcpOgorICAgICAgICAoX2FsaWFzX2hhbmRsZXJzKToK
KyAgICAgICAgKF9idWlsZF9vcHRpb25fcGFyc2VyKToKKyAgICAgICAgKFRocmVhZE1vbml0b3Ip
OgorICAgICAgICAoVGhyZWFkTW9uaXRvci5fX2luaXRfXyk6CisgICAgICAgIChUaHJlYWRNb25p
dG9yLnJ1bik6CisgICAgICAgIChfcGFyc2VfYXJnc19hbmRfY29uZmlnKToKKyAgICAgICAgKF9t
YWluKToKKyAgICAgICAgKF9tYWluLmlmKToKKyAgICAgICAgKF9tYWluLmlmLl9fY2hlY2tfc2Ny
aXB0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29j
a2V0L3N0cmVhbS5weTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L19faW5pdF9fX3VuaXR0ZXN0LnB5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvdXRpbC5weTogQWRkZWQuCisgICAgICAgIChnZXRfc3Rh
Y2tfdHJhY2UpOgorICAgICAgICAocHJlcGVuZF9tZXNzYWdlX3RvX2V4Y2VwdGlvbik6CisgICAg
ICAgIChfX3RyYW5zbGF0ZV9pbnRlcnApOgorICAgICAgICAoZ2V0X3NjcmlwdF9pbnRlcnApOgor
ICAgICAgICAod3JhcF9wb3BlbjNfZm9yX3dpbik6CisgICAgICAgICh3cmFwX3BvcGVuM19mb3Jf
d2luLl9fd3JhcF9wb3BlbjMpOgorICAgICAgICAoaGV4aWZ5KToKKyAgICAgICAgKGdldF9jbGFz
c19sb2dnZXIpOgorICAgICAgICAoTm9vcE1hc2tlcik6CisgICAgICAgIChOb29wTWFza2VyLl9f
aW5pdF9fKToKKyAgICAgICAgKE5vb3BNYXNrZXIubWFzayk6CisgICAgICAgIChSZXBlYXRlZFhv
ck1hc2tlcik6CisgICAgICAgIChSZXBlYXRlZFhvck1hc2tlci5fX2luaXRfXyk6CisgICAgICAg
IChSZXBlYXRlZFhvck1hc2tlci5tYXNrKToKKyAgICAgICAgKERlZmxhdGVSZXF1ZXN0KToKKyAg
ICAgICAgKERlZmxhdGVSZXF1ZXN0LmZvcik6CisgICAgICAgIChEZWZsYXRlUmVxdWVzdC5fX2lu
aXRfXyk6CisgICAgICAgIChEZWZsYXRlUmVxdWVzdC5fX2dldGF0dHJpYnV0ZV9fKToKKyAgICAg
ICAgKERlZmxhdGVSZXF1ZXN0Ll9fc2V0YXR0cl9fKToKKyAgICAgICAgKF9EZWZsYXRlcik6Cisg
ICAgICAgIChfRGVmbGF0ZXIuX19pbml0X18pOgorICAgICAgICAoX0RlZmxhdGVyLmNvbXByZXNz
X2FuZF9mbHVzaCk6CisgICAgICAgIChfSW5mbGF0ZXIpOgorICAgICAgICAoX0luZmxhdGVyLl9f
aW5pdF9fKToKKyAgICAgICAgKF9JbmZsYXRlci5kZWNvbXByZXNzKToKKyAgICAgICAgKF9JbmZs
YXRlci5hcHBlbmQpOgorICAgICAgICAoX0luZmxhdGVyLnJlc2V0KToKKyAgICAgICAgKF9SRkMx
OTc5RGVmbGF0ZXIpOgorICAgICAgICAoX1JGQzE5NzlEZWZsYXRlci50aGF0KToKKyAgICAgICAg
KF9SRkMxOTc5RGVmbGF0ZXIuX19pbml0X18pOgorICAgICAgICAoX1JGQzE5NzlEZWZsYXRlci5m
aWx0ZXIpOgorICAgICAgICAoX1JGQzE5NzlJbmZsYXRlcik6CisgICAgICAgIChfUkZDMTk3OUlu
ZmxhdGVyLmZvcik6CisgICAgICAgIChfUkZDMTk3OUluZmxhdGVyLl9faW5pdF9fKToKKyAgICAg
ICAgKF9SRkMxOTc5SW5mbGF0ZXIuZmlsdGVyKToKKyAgICAgICAgKERlZmxhdGVTb2NrZXQpOgor
ICAgICAgICAoRGVmbGF0ZVNvY2tldC5mb3IpOgorICAgICAgICAoRGVmbGF0ZVNvY2tldC5fX2lu
aXRfXyk6CisgICAgICAgIChEZWZsYXRlU29ja2V0LnJlY3YpOgorICAgICAgICAoRGVmbGF0ZVNv
Y2tldC5zZW5kYWxsKToKKyAgICAgICAgKERlZmxhdGVTb2NrZXQuc2VuZCk6CisgICAgICAgIChE
ZWZsYXRlQ29ubmVjdGlvbik6CisgICAgICAgIChEZWZsYXRlQ29ubmVjdGlvbi5mb3IpOgorICAg
ICAgICAoRGVmbGF0ZUNvbm5lY3Rpb24uX19pbml0X18pOgorICAgICAgICAoRGVmbGF0ZUNvbm5l
Y3Rpb24uZ2V0X3JlbW90ZV9hZGRyKToKKyAgICAgICAgKERlZmxhdGVDb25uZWN0aW9uLnB1dF9i
eXRlcyk6CisgICAgICAgIChEZWZsYXRlQ29ubmVjdGlvbi5yZWFkKToKKyAgICAgICAgKERlZmxh
dGVDb25uZWN0aW9uLndyaXRlKToKKyAgICAgICAgKF9pc19ld291bGRibG9ja19lcnJubyk6Cisg
ICAgICAgIChkcmFpbl9yZWNlaXZlZF9kYXRhKToKKwogMjAxMi0wNS0wOCAgQmFsYXpzIEtlbGVt
ZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBYMTEgcGx1Z2lucyBuZWVk
IHRvIGJlIHJld29ya2VkIGZvciBRdDUrV0sxCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYnNvY2tldF9zZXJ2ZXIucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYnNvY2tldF9zZXJ2ZXIucHkK
aW5kZXggNzY3MWY2MDA2MTZlMzJiZGM5NzY4NTVhNDc0YjcxOWYyYmQ4NDE0ZC4uMjk2YWI5ODgy
ZmQwYjRiYjE2NzA5ZWYxMDk4NTgzNGMxZGU5OTU1MCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJzb2NrZXRfc2VydmVyLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2Vic29ja2V0X3Nl
cnZlci5weQpAQCAtMTA5LDExICsxMDksMTEgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2
ZXIuTGlnaHR0cGQpOgogICAgICAgICBvdXRwdXRfbG9nID0gc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUgKyAiLW91dC50eHQiKQogICAgICAgICBz
ZWxmLl93c291dCA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmco
b3V0cHV0X2xvZykKIAotICAgICAgICBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3Rh
bGxlZC5weXdlYnNvY2tldCBpbXBvcnQgbW9kX3B5d2Vic29ja2V0CisgICAgICAgIGZyb20gd2Vi
a2l0cHkudGhpcmRwYXJ0eSBpbXBvcnQgbW9kX3B5d2Vic29ja2V0CiAgICAgICAgIHB5dGhvbl9p
bnRlcnAgPSBzeXMuZXhlY3V0YWJsZQogICAgICAgICAjIEZJWE1FOiBVc2Ugc2VsZi5fZmlsZXN5
c3RlbS5wYXRoX3RvX21vZHVsZShzZWxmLl9fbW9kdWxlX18pIGluc3RlYWQgb2YgX19maWxlX18K
ICAgICAgICAgIyBJIHRoaW5rIHRoaXMgaXMgdHJ5aW5nIHRvIGdldCB0aGUgY2hyb21lIGRpcmVj
dG9yeT8gIERvZXNuJ3QgdGhlIHBvcnQgb2JqZWN0IGtub3cgdGhhdD8KLSAgICAgICAgcHl3ZWJz
b2NrZXRfYmFzZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9maWxlc3lzdGVtLmRpcm5h
bWUoc2VsZi5fZmlsZXN5c3RlbS5kaXJuYW1lKHNlbGYuX2ZpbGVzeXN0ZW0uZGlybmFtZShzZWxm
Ll9maWxlc3lzdGVtLmFic3BhdGgoX19maWxlX18pKSkpLCAndGhpcmRwYXJ0eScsICdhdXRvaW5z
dGFsbGVkJywgJ3B5d2Vic29ja2V0JykKKyAgICAgICAgcHl3ZWJzb2NrZXRfYmFzZSA9IHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9maWxlc3lzdGVtLmRpcm5hbWUoc2VsZi5fZmlsZXN5c3Rl
bS5kaXJuYW1lKHNlbGYuX2ZpbGVzeXN0ZW0uZGlybmFtZShzZWxmLl9maWxlc3lzdGVtLmFic3Bh
dGgoX19maWxlX18pKSkpLCAndGhpcmRwYXJ0eScpCiAgICAgICAgIHB5d2Vic29ja2V0X3Njcmlw
dCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihweXdlYnNvY2tldF9iYXNlLCAnbW9kX3B5d2Vic29j
a2V0JywgJ3N0YW5kYWxvbmUucHknKQogICAgICAgICBzdGFydF9jbWQgPSBbCiAgICAgICAgICAg
ICBweXRob25faW50ZXJwLCAnLXUnLCBweXdlYnNvY2tldF9zY3JpcHQsCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkKaW5kZXggYTBjZjBmNGQ0Y2IwYWEz
NGU5NDBlNDM1MWRjYzY2M2MyNDY0ZDVhNC4uMGRmMGNmN2I2ODc1ZmNlZjgyMzQ0ZWZlOTkyNjkz
MzlmMDRlZjFmZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L19faW5pdF9fLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2lu
aXRfXy5weQpAQCAtODAsOCArODAsNiBAQCBjbGFzcyBBdXRvaW5zdGFsbEltcG9ydEhvb2sob2Jq
ZWN0KToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfZWxpemEoKQogICAgICAgICBlbGlmICcu
aXJjJyBpbiBmdWxsbmFtZToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfaXJjKCkKLSAgICAg
ICAgZWxpZiAnLnB5d2Vic29ja2V0JyBpbiBmdWxsbmFtZToKLSAgICAgICAgICAgIHNlbGYuX2lu
c3RhbGxfcHl3ZWJzb2NrZXQoKQogICAgICAgICBlbGlmICcuYnVpbGRib3QnIGluIGZ1bGxuYW1l
OgogICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9idWlsZGJvdCgpCiAKQEAgLTEyOCwxMiArMTI2
LDYgQEAgY2xhc3MgQXV0b2luc3RhbGxJbXBvcnRIb29rKG9iamVjdCk6CiAgICAgICAgIGluc3Rh
bGxlci5pbnN0YWxsKHVybD0iaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVj
dC9weXRob24taXJjbGliL3B5dGhvbi1pcmNsaWIvMC40LjgvcHl0aG9uLWlyY2xpYi0wLjQuOC56
aXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxfc3VicGF0aD0iaXJjYm90LnB5IikK
IAotICAgIGRlZiBfaW5zdGFsbF9weXdlYnNvY2tldChzZWxmKToKLSAgICAgICAgcHl3ZWJzb2Nr
ZXRfZGlyID0gc2VsZi5fZnMuam9pbihfQVVUT0lOU1RBTExFRF9ESVIsICJweXdlYnNvY2tldCIp
Ci0gICAgICAgIGluc3RhbGxlciA9IEF1dG9JbnN0YWxsZXIodGFyZ2V0X2Rpcj1weXdlYnNvY2tl
dF9kaXIpCi0gICAgICAgIGluc3RhbGxlci5pbnN0YWxsKHVybD0iaHR0cDovL3B5d2Vic29ja2V0
Lmdvb2dsZWNvZGUuY29tL2ZpbGVzL21vZF9weXdlYnNvY2tldC0wLjcuNC50YXIuZ3oiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cmxfc3VicGF0aD0icHl3ZWJzb2NrZXQtMC43LjQvc3Jj
L21vZF9weXdlYnNvY2tldCIpCi0KICAgICBkZWYgX2luc3RhbGwoc2VsZiwgdXJsLCB1cmxfc3Vi
cGF0aCk6CiAgICAgICAgIGluc3RhbGxlciA9IEF1dG9JbnN0YWxsZXIodGFyZ2V0X2Rpcj1fQVVU
T0lOU1RBTExFRF9ESVIpCiAgICAgICAgIGluc3RhbGxlci5pbnN0YWxsKHVybD11cmwsIHVybF9z
dWJwYXRoPXVybF9zdWJwYXRoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L19faW5pdF9fX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L19faW5pdF9fX3VuaXR0ZXN0LnB5CmluZGV4IGIxOTY0ZTliY2IxNzJlY2U1N2Jm
ZDVlMjVkODZkNzNmNzA5ODFjNjAuLjM1ODNhYjQzMmE3MWI2ZjVlMTA5MGRhN2Y0NTdmYmQzOTYz
NzU4M2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2lu
aXRfX191bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
X19pbml0X19fdW5pdHRlc3QucHkKQEAgLTM5LDE0ICszOSwxMCBAQCBjbGFzcyBUaGlyZHBhcnR5
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6
CiAgICAgICAgICAgICAgICAgQXV0b2luc3RhbGxJbXBvcnRIb29rLl9faW5pdF9fKHNlbGYpCiAg
ICAgICAgICAgICAgICAgc2VsZi5fZWxpemFfaW5zdGFsbGVkID0gRmFsc2UKLSAgICAgICAgICAg
ICAgICBzZWxmLl9weXdlYnNvY2tldF9pbnN0YWxsZWQgPSBGYWxzZQogCiAgICAgICAgICAgICBk
ZWYgX2luc3RhbGxfZWxpemEoc2VsZik6CiAgICAgICAgICAgICAgICAgc2VsZi5lbGl6YV9pbnN0
YWxsZWQgPSBUcnVlCiAKLSAgICAgICAgICAgIGRlZiBfaW5zdGFsbF9weXdlYnNvY2tldChzZWxm
KToKLSAgICAgICAgICAgICAgICBzZWxmLnB5d2Vic29ja2V0X2luc3RhbGxlZCA9IFRydWUKLQog
ICAgICAgICBtb2NrX2ltcG9ydF9ob29rID0gTW9ja0ltcG9ydEhvb2soKQogICAgICAgICB0cnk6
CiAgICAgICAgICAgICAjIFRoZSBhY3R1YWwgQXV0b2luc3RhbGxJbXBvcnRIb29rIHNob3VsZCBi
ZSBpbnN0YWxsZWQgYmVmb3JlIHVzLApAQCAtNTUsOCArNTEsNiBAQCBjbGFzcyBUaGlyZHBhcnR5
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBmcm9tIHdlYmtpdHB5LnRoaXJk
cGFydHkuYXV0b2luc3RhbGxlZCBpbXBvcnQgZWxpemEKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShtb2NrX2ltcG9ydF9ob29rLmVsaXphX2luc3RhbGxlZCkKIAotICAgICAgICAgICAgZnJv
bSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQucHl3ZWJzb2NrZXQgaW1wb3J0IG1v
ZF9weXdlYnNvY2tldAotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfaW1wb3J0X2hv
b2sucHl3ZWJzb2NrZXRfaW5zdGFsbGVkKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAg
c3lzLm1ldGFfcGF0aC5yZW1vdmUobW9ja19pbXBvcnRfaG9vaykKIApkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9DT1BZSU5HIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9DT1BZSU5H
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFiOWQ1MmRkZjkzMDcyMDg2Y2JiYTIxMmNkYmJlZDdiMzhmYWE1M2EKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5
d2Vic29ja2V0L0NPUFlJTkcKQEAgLTAsMCArMSwyOCBAQAorQ29weXJpZ2h0IDIwMDksIEdvb2ds
ZSBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
K21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKK2luIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rp
c3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdlYnNv
Y2tldC9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2Rf
cHl3ZWJzb2NrZXQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzE1NGRhNGExNDBlOTI2NTc1Nzdj
MmNkMGEzMjYzOTQzMDMyOWVmNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHkKQEAgLTAsMCArMSwx
ODQgQEAKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIldlYlNvY2tldCBleHRlbnNpb24gZm9yIEFw
YWNoZSBIVFRQIFNlcnZlci4KKworbW9kX3B5d2Vic29ja2V0IGlzIGEgV2ViU29ja2V0IGV4dGVu
c2lvbiBmb3IgQXBhY2hlIEhUVFAgU2VydmVyCitpbnRlbmRlZCBmb3IgdGVzdGluZyBvciBleHBl
cmltZW50YWwgcHVycG9zZXMuIG1vZF9weXRob24gaXMgcmVxdWlyZWQuCisKKworSW5zdGFsbGF0
aW9uOgorCiswLiBQcmVwYXJlIGFuIEFwYWNoZSBIVFRQIFNlcnZlciBmb3Igd2hpY2ggbW9kX3B5
dGhvbiBpcyBlbmFibGVkLgorCisxLiBTcGVjaWZ5IHRoZSBmb2xsb3dpbmcgQXBhY2hlIEhUVFAg
U2VydmVyIGRpcmVjdGl2ZXMgdG8gc3VpdCB5b3VyCisgICBjb25maWd1cmF0aW9uLgorCisgICBJ
ZiBtb2RfcHl3ZWJzb2NrZXQgaXMgbm90IGluIHRoZSBQeXRob24gcGF0aCwgc3BlY2lmeSB0aGUg
Zm9sbG93aW5nLgorICAgPHdlYnNvY2tfbGliPiBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIG1vZF9w
eXdlYnNvY2tldCBpcyBpbnN0YWxsZWQuCisKKyAgICAgICBQeXRob25QYXRoICJzeXMucGF0aCtb
Jzx3ZWJzb2NrX2xpYj4nXSIKKworICAgQWx3YXlzIHNwZWNpZnkgdGhlIGZvbGxvd2luZy4gPHdl
YnNvY2tfaGFuZGxlcnM+IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUKKyAgIHVzZXItd3JpdHRlbiBX
ZWJTb2NrZXQgaGFuZGxlcnMgYXJlIHBsYWNlZC4KKworICAgICAgIFB5dGhvbk9wdGlvbiBtb2Rf
cHl3ZWJzb2NrZXQuaGFuZGxlcl9yb290IDx3ZWJzb2NrX2hhbmRsZXJzPgorICAgICAgIFB5dGhv
bkhlYWRlclBhcnNlckhhbmRsZXIgbW9kX3B5d2Vic29ja2V0LmhlYWRlcnBhcnNlcmhhbmRsZXIK
KworICAgVG8gbGltaXQgdGhlIHNlYXJjaCBmb3IgV2ViU29ja2V0IGhhbmRsZXJzIHRvIGEgZGly
ZWN0b3J5IDxzY2FuX2Rpcj4KKyAgIHVuZGVyIDx3ZWJzb2NrX2hhbmRsZXJzPiwgY29uZmlndXJl
IGFzIGZvbGxvd3M6CisKKyAgICAgICBQeXRob25PcHRpb24gbW9kX3B5d2Vic29ja2V0LmhhbmRs
ZXJfc2NhbiA8c2Nhbl9kaXI+CisKKyAgIDxzY2FuX2Rpcj4gaXMgdXNlZnVsIGluIHNhdmluZyBz
Y2FuIHRpbWUgd2hlbiA8d2Vic29ja19oYW5kbGVycz4KKyAgIGNvbnRhaW5zIG1hbnkgbm9uLVdl
YlNvY2tldCBoYW5kbGVyIGZpbGVzLgorCisgICBJZiB5b3Ugd2FudCB0byBzdXBwb3J0IG9sZCBo
YW5kc2hha2UgYmFzZWQgb24KKyAgIGRyYWZ0LWhpeGllLXRoZXdlYnNvY2tldHByb3RvY29sLTc1
OgorCisgICAgICAgUHl0aG9uT3B0aW9uIG1vZF9weXdlYnNvY2tldC5hbGxvd19kcmFmdDc1IE9u
CisKKyAgIElmIHlvdSB3YW50IHRvIGFsbG93IGhhbmRsZXJzIHdob3NlIGNhbm9uaWNhbCBwYXRo
IGlzIG5vdCB1bmRlciB0aGUgcm9vdAorICAgZGlyZWN0b3J5IChpLmUuIHN5bWJvbGljIGxpbmsg
aXMgaW4gcm9vdCBkaXJlY3RvcnkgYnV0IGl0cyB0YXJnZXQgaXMgbm90KSwKKyAgIGNvbmZpZ3Vy
ZSBhcyBmb2xsb3dzOgorCisgICAgICAgUHl0aG9uT3B0aW9uIG1vZF9weXdlYnNvY2tldC5hbGxv
d19oYW5kbGVyc19vdXRzaWRlX3Jvb3RfZGlyIE9uCisKKyAgIEV4YW1wbGUgc25pcHBldCBvZiBo
dHRwZC5jb25mOgorICAgKG1vZF9weXdlYnNvY2tldCBpcyBpbiAvd2Vic29ja19saWIsIFdlYlNv
Y2tldCBoYW5kbGVycyBhcmUgaW4KKyAgIC93ZWJzb2NrX2hhbmRsZXJzLCBwb3J0IGlzIDgwIGZv
ciB3cywgNDQzIGZvciB3c3MuKQorCisgICAgICAgPElmTW9kdWxlIHB5dGhvbl9tb2R1bGU+Cisg
ICAgICAgICBQeXRob25QYXRoICJzeXMucGF0aCtbJy93ZWJzb2NrX2xpYiddIgorICAgICAgICAg
UHl0aG9uT3B0aW9uIG1vZF9weXdlYnNvY2tldC5oYW5kbGVyX3Jvb3QgL3dlYnNvY2tfaGFuZGxl
cnMKKyAgICAgICAgIFB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIgbW9kX3B5d2Vic29ja2V0Lmhl
YWRlcnBhcnNlcmhhbmRsZXIKKyAgICAgICA8L0lmTW9kdWxlPgorCisyLiBUdW5lIEFwYWNoZSBw
YXJhbWV0ZXJzIGZvciBzZXJ2aW5nIFdlYlNvY2tldC4gV2UnZCBsaWtlIHRvIG5vdGUgdGhhdCBh
dAorICAgbGVhc3QgVGltZU91dCBkaXJlY3RpdmUgZnJvbSBjb3JlIGZlYXR1cmVzIGFuZCBSZXF1
ZXN0UmVhZFRpbWVvdXQKKyAgIGRpcmVjdGl2ZSBmcm9tIG1vZF9yZXF0aW1lb3V0IHNob3VsZCBi
ZSBtb2RpZmllZCBub3QgdG8ga2lsbCBjb25uZWN0aW9ucworICAgaW4gb25seSBhIGZldyBzZWNv
bmRzIG9mIGlkbGUgdGltZS4KKworMy4gVmVyaWZ5IGluc3RhbGxhdGlvbi4gWW91IGNhbiB1c2Ug
ZXhhbXBsZS9jb25zb2xlLmh0bWwgdG8gcG9rZSB0aGUgc2VydmVyLgorCisKK1dyaXRpbmcgV2Vi
U29ja2V0IGhhbmRsZXJzOgorCitXaGVuIGEgV2ViU29ja2V0IHJlcXVlc3QgY29tZXMgaW4sIHRo
ZSByZXNvdXJjZSBuYW1lCitzcGVjaWZpZWQgaW4gdGhlIGhhbmRzaGFrZSBpcyBjb25zaWRlcmVk
IGFzIGlmIGl0IGlzIGEgZmlsZSBwYXRoIHVuZGVyCis8d2Vic29ja19oYW5kbGVycz4gYW5kIHRo
ZSBoYW5kbGVyIGRlZmluZWQgaW4KKzx3ZWJzb2NrX2hhbmRsZXJzPi88cmVzb3VyY2VfbmFtZT5f
d3NoLnB5IGlzIGludm9rZWQuCisKK0ZvciBleGFtcGxlLCBpZiB0aGUgcmVzb3VyY2UgbmFtZSBp
cyAvZXhhbXBsZS9jaGF0LCB0aGUgaGFuZGxlciBkZWZpbmVkIGluCis8d2Vic29ja19oYW5kbGVy
cz4vZXhhbXBsZS9jaGF0X3dzaC5weSBpcyBpbnZva2VkLgorCitBIFdlYlNvY2tldCBoYW5kbGVy
IGlzIGNvbXBvc2VkIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgZnVuY3Rpb25zOgorCisgICAgd2Vi
X3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCkKKyAgICB3ZWJfc29ja2V0X3RyYW5z
ZmVyX2RhdGEocmVxdWVzdCkKKyAgICB3ZWJfc29ja2V0X3Bhc3NpdmVfY2xvc2luZ19oYW5kc2hh
a2UocmVxdWVzdCkKKword2hlcmU6CisgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0Lgor
Cit3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSBpcyBjYWxsZWQgZHVyaW5nIHRoZSBoYW5k
c2hha2UgYWZ0ZXIgdGhlCitoZWFkZXJzIGFyZSBzdWNjZXNzZnVsbHkgcGFyc2VkIGFuZCBXZWJT
b2NrZXQgcHJvcGVydGllcyAod3NfbG9jYXRpb24sCit3c19vcmlnaW4sIGFuZCB3c19yZXNvdXJj
ZSkgYXJlIGFkZGVkIHRvIHJlcXVlc3QuIEEgaGFuZGxlcgorY2FuIHJlamVjdCB0aGUgcmVxdWVz
dCBieSByYWlzaW5nIGFuIGV4Y2VwdGlvbi4KKworQSByZXF1ZXN0IG9iamVjdCBoYXMgdGhlIGZv
bGxvd2luZyBwcm9wZXJ0aWVzIHRoYXQgeW91IGNhbiB1c2UgZHVyaW5nIHRoZQorZXh0cmEgaGFu
ZHNoYWtlICh3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSk6CistIHdzX3Jlc291cmNlCist
IHdzX29yaWdpbgorLSB3c192ZXJzaW9uCistIHdzX2xvY2F0aW9uIChIaXhpZSA3NSBhbmQgSHlC
aSAwMCBvbmx5KQorLSB3c19leHRlbnNpb25zIChIeWJpIDA2IGFuZCBsYXRlcikKKy0gd3NfZGVm
bGF0ZSAoSHlCaSAwNiBhbmQgbGF0ZXIpCistIHdzX3Byb3RvY29sCistIHdzX3JlcXVlc3RlZF9w
cm90b2NvbHMgKEh5QmkgMDYgYW5kIGxhdGVyKQorCitUaGUgbGFzdCB0d28gYXJlIGEgYml0IHRy
aWNreS4KKworRm9yIEh5QmkgMDYgYW5kIGxhdGVyLCB3c19wcm90b2NvbCBpcyBhbHdheXMgc2V0
IHRvIE5vbmUgd2hlbgord2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UgaXMgY2FsbGVkLiBJ
ZiB3c19yZXF1ZXN0ZWRfcHJvdG9jb2xzIGlzIG5vdAorTm9uZSwgeW91IG11c3QgY2hvb3NlIG9u
ZSBzdWJwcm90b2NvbCBmcm9tIHRoaXMgbGlzdCBhbmQgc2V0IGl0IHRvCit3c19wcm90b2NvbC4K
KworRm9yIEhpeGllIDc1IGFuZCBIeUJpIDAwLCB3aGVuIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFu
ZHNoYWtlIGlzIGNhbGxlZCwKK3dzX3Byb3RvY29sIGlzIHNldCB0byB0aGUgdmFsdWUgZ2l2ZW4g
YnkgdGhlIGNsaWVudCBpbgorU2VjLVdlYlNvY2tldC1Qcm90b2NvbCAoV2ViU29ja2V0LVByb3Rv
Y29sIGZvciBIaXhpZSA3NSkgaGVhZGVyIG9yIE5vbmUgaWYKK3N1Y2ggaGVhZGVyIHdhcyBub3Qg
Zm91bmQgaW4gdGhlIG9wZW5pbmcgaGFuZHNoYWtlIHJlcXVlc3QuIEZpbmlzaCBleHRyYQoraGFu
ZHNoYWtlIHdpdGggd3NfcHJvdG9jb2wgdW50b3VjaGVkIHRvIGFjY2VwdCB0aGUgcmVxdWVzdCBz
dWJwcm90b2NvbC4KK1RoZW4sIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgKG9yIFdlYlNvY2tldC1Q
cm90b2NvbCkgaGVhZGVyIHdpbGwgYmUgc2VudCB0bwordGhlIGNsaWVudCBpbiByZXNwb25zZSB3
aXRoIHRoZSBzYW1lIHZhbHVlIGFzIHJlcXVlc3RlZC4gUmFpc2UgYW4gZXhjZXB0aW9uCitpbiB3
ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSB0byByZWplY3QgdGhlIHJlcXVlc3RlZCBzdWJw
cm90b2NvbC4KKword2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhIGlzIGNhbGxlZCBhZnRlciB0aGUg
aGFuZHNoYWtlIGNvbXBsZXRlZAorc3VjY2Vzc2Z1bGx5LiBBIGhhbmRsZXIgY2FuIHJlY2VpdmUv
c2VuZCBtZXNzYWdlcyBmcm9tL3RvIHRoZSBjbGllbnQKK3VzaW5nIHJlcXVlc3QuIG1vZF9weXdl
YnNvY2tldC5tc2d1dGlsIG1vZHVsZSBwcm92aWRlcyB1dGlsaXRpZXMKK2ZvciBkYXRhIHRyYW5z
ZmVyLgorCitZb3UgY2FuIHJlY2VpdmUgYSBtZXNzYWdlIGJ5IHRoZSBmb2xsb3dpbmcgc3RhdGVt
ZW50LgorCisgICAgbWVzc2FnZSA9IHJlcXVlc3Qud3Nfc3RyZWFtLnJlY2VpdmVfbWVzc2FnZSgp
CisKK1RoaXMgY2FsbCBibG9ja3MgdW50aWwgYW55IGNvbXBsZXRlIHRleHQgZnJhbWUgYXJyaXZl
cywgYW5kIHRoZSBwYXlsb2FkIGRhdGEKK29mIHRoZSBpbmNvbWluZyBmcmFtZSB3aWxsIGJlIHN0
b3JlZCBpbnRvIG1lc3NhZ2UuIFdoZW4geW91J3JlIHVzaW5nIElFVEYKK0h5QmkgMDAgb3IgbGF0
ZXIgcHJvdG9jb2wsIHJlY2VpdmVfbWVzc2FnZSgpIHdpbGwgcmV0dXJuIE5vbmUgb24gcmVjZWl2
aW5nCitjbGllbnQtaW5pdGlhdGVkIGNsb3NpbmcgaGFuZHNoYWtlLiBXaGVuIGFueSBlcnJvciBv
Y2N1cnMsIHJlY2VpdmVfbWVzc2FnZSgpCit3aWxsIHJhaXNlIHNvbWUgZXhjZXB0aW9uLgorCitZ
b3UgY2FuIHNlbmQgYSBtZXNzYWdlIGJ5IHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50LgorCisgICAg
cmVxdWVzdC53c19zdHJlYW0uc2VuZF9tZXNzYWdlKG1lc3NhZ2UpCisKK0V4ZWN1dGluZyB0aGUg
Zm9sbG93aW5nIHN0YXRlbWVudCBvciBqdXN0IHJldHVybi1pbmcgZnJvbQord2ViX3NvY2tldF90
cmFuc2Zlcl9kYXRhIGNhdXNlIGNvbm5lY3Rpb24gY2xvc2UuCisKKyAgICByZXF1ZXN0LndzX3N0
cmVhbS5jbG9zZV9jb25uZWN0aW9uKCkKKworV2hlbiB5b3UncmUgdXNpbmcgSUVURiBIeUJpIDAw
IG9yIGxhdGVyIHByb3RvY29sLCBjbG9zZV9jb25uZWN0aW9uIHdpbGwgd2FpdAorZm9yIGNsb3Np
bmcgaGFuZHNoYWtlIGFja25vd2xlZGdlbWVudCBjb21pbmcgZnJvbSB0aGUgY2xpZW50LiBXaGVu
IGl0Citjb3VsZG4ndCByZWNlaXZlIGEgdmFsaWQgYWNrbm93bGVkZ2VtZW50LCByYWlzZXMgYW4g
ZXhjZXB0aW9uLgorCit3ZWJfc29ja2V0X3Bhc3NpdmVfY2xvc2luZ19oYW5kc2hha2UgaXMgY2Fs
bGVkIGFmdGVyIHRoZSBzZXJ2ZXIgcmVjZWl2ZXMKK2luY29taW5nIGNsb3NpbmcgZnJhbWUgZnJv
bSB0aGUgY2xpZW50IHBlZXIgaW1tZWRpYXRlbHkuIFlvdSBjYW4gc3BlY2lmeQorY29kZSBhbmQg
cmVhc29uIGJ5IHJldHVybiB2YWx1ZXMuIFRoZXkgYXJlIHNlbnQgYXMgYSBvdXRnb2luZyBjbG9z
aW5nIGZyYW1lCitmcm9tIHRoZSBzZXJ2ZXIuIEEgcmVxdWVzdCBvYmplY3QgaGFzIHRoZSBmb2xs
b3dpbmcgcHJvcGVydGllcyB0aGF0IHlvdSBjYW4KK3VzZSBpbiB3ZWJfc29ja2V0X3Bhc3NpdmVf
Y2xvc2luZ19oYW5kc2hha2UuCistIHdzX2Nsb3NlX2NvZGUKKy0gd3NfY2xvc2VfcmVhc29uCisK
K0EgV2ViU29ja2V0IGhhbmRsZXIgbXVzdCBiZSB0aHJlYWQtc2FmZSBpZiB0aGUgc2VydmVyIChB
cGFjaGUgb3IKK3N0YW5kYWxvbmUucHkpIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRocmVhZHMuCisi
IiIKKworCisjIHZpOnN0cz00IHN3PTQgZXQgdHc9NzIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9iYXNlLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9fc3RyZWFt
X2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjBmYjMzZDJjNWMwNTVmYjY5ZWVkYmNkNzY1NjgyNWJiZGZi
ZmVhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9iYXNlLnB5CkBAIC0wLDAgKzEsMTY1IEBACisjIENv
cHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCisiIiJCYXNlIHN0cmVhbSBjbGFzcy4KKyIiIgorCisKKyMgTm90ZTog
cmVxdWVzdC5jb25uZWN0aW9uLndyaXRlL3JlYWQgYXJlIHVzZWQgaW4gdGhpcyBtb2R1bGUsIGV2
ZW4gdGhvdWdoCisjIG1vZF9weXRob24gZG9jdW1lbnQgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJl
IHVzZWQgb25seSBpbiBjb25uZWN0aW9uCisjIGhhbmRsZXJzLiBVbmZvcnR1bmF0ZWx5LCB3ZSBo
YXZlIG5vIG90aGVyIG9wdGlvbnMuIEZvciBleGFtcGxlLAorIyByZXF1ZXN0LndyaXRlL3JlYWQg
YXJlIG5vdCBzdWl0YWJsZSBiZWNhdXNlIHRoZXkgZG9uJ3QgYWxsb3cgZGlyZWN0IHJhdyBieXRl
cworIyB3cml0aW5nL3JlYWRpbmcuCisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IHV0
aWwKKworCisjIEV4Y2VwdGlvbnMKKworCitjbGFzcyBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2Vw
dGlvbihFeGNlcHRpb24pOgorICAgICIiIlRoaXMgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIHdo
ZW4gYSBjb25uZWN0aW9uIGlzIHRlcm1pbmF0ZWQKKyAgICB1bmV4cGVjdGVkbHkuCisgICAgIiIi
CisKKyAgICBwYXNzCisKKworY2xhc3MgSW52YWxpZEZyYW1lRXhjZXB0aW9uKENvbm5lY3Rpb25U
ZXJtaW5hdGVkRXhjZXB0aW9uKToKKyAgICAiIiJUaGlzIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNl
ZCB3aGVuIHdlIHJlY2VpdmVkIGFuIGludmFsaWQgZnJhbWUgd2UKKyAgICBjYW5ub3QgcGFyc2Uu
CisgICAgIiIiCisKKyAgICBwYXNzCisKKworY2xhc3MgQmFkT3BlcmF0aW9uRXhjZXB0aW9uKEV4
Y2VwdGlvbik6CisgICAgIiIiVGhpcyBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgd2hlbiBzZW5k
X21lc3NhZ2UoKSBpcyBjYWxsZWQgb24KKyAgICBzZXJ2ZXItdGVybWluYXRlZCBjb25uZWN0aW9u
IG9yIHJlY2VpdmVfbWVzc2FnZSgpIGlzIGNhbGxlZCBvbgorICAgIGNsaWVudC10ZXJtaW5hdGVk
IGNvbm5lY3Rpb24uCisgICAgIiIiCisKKyAgICBwYXNzCisKKworY2xhc3MgVW5zdXBwb3J0ZWRG
cmFtZUV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIlRoaXMgZXhjZXB0aW9uIHdpbGwgYmUg
cmFpc2VkIHdoZW4gd2UgcmVjZWl2ZSBhIGZyYW1lIHdpdGggZmxhZywgb3Bjb2RlCisgICAgd2Ug
Y2Fubm90IGhhbmRsZS4gSGFuZGxlcnMgY2FuIGp1c3QgY2F0Y2ggYW5kIGlnbm9yZSB0aGlzIGV4
Y2VwdGlvbiBhbmQKKyAgICBjYWxsIHJlY2VpdmVfbWVzc2FnZSgpIGFnYWluIHRvIGNvbnRpbnVl
IHByb2Nlc3NpbmcgdGhlIG5leHQgZnJhbWUuCisgICAgIiIiCisKKyAgICBwYXNzCisKKworY2xh
c3MgSW52YWxpZFVURjhFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAiIiJUaGlzIGV4Y2VwdGlv
biB3aWxsIGJlIHJhaXNlZCB3aGVuIHdlIHJlY2VpdmUgYSB0ZXh0IGZyYW1lIHdoaWNoCisgICAg
Y29udGFpbnMgaW52YWxpZCBVVEYtOCBzdHJpbmdzLgorICAgICIiIgorCisgICAgcGFzcworCisK
K2NsYXNzIFN0cmVhbUJhc2Uob2JqZWN0KToKKyAgICAiIiJCYXNlIHN0cmVhbSBjbGFzcy4iIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIiIiQ29uc3RydWN0
IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICByZXF1ZXN0OiBtb2Rf
cHl0aG9uIHJlcXVlc3QuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0
aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX3JlcXVlc3QgPSByZXF1
ZXN0CisKKyAgICBkZWYgX3JlYWQoc2VsZiwgbGVuZ3RoKToKKyAgICAgICAgIiIiUmVhZHMgbGVu
Z3RoIGJ5dGVzIGZyb20gY29ubmVjdGlvbi4gSW4gY2FzZSB3ZSBjYXRjaCBhbnkgZXhjZXB0aW9u
LAorICAgICAgICBwcmVwZW5kcyByZW1vdGUgYWRkcmVzcyB0byB0aGUgZXhjZXB0aW9uIG1lc3Nh
Z2UgYW5kIHJhaXNlIGFnYWluLgorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIENvbm5l
Y3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uOiB3aGVuIHJlYWQgcmV0dXJucyBlbXB0eSBzdHJpbmcu
CisgICAgICAgICIiIgorCisgICAgICAgIGJ5dGVzID0gc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9u
LnJlYWQobGVuZ3RoKQorICAgICAgICBpZiBub3QgYnl0ZXM6CisgICAgICAgICAgICByYWlzZSBD
b25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnUmVjZWl2aW5n
ICVkIGJ5dGUgZmFpbGVkLiBQZWVyICglcikgY2xvc2VkIGNvbm5lY3Rpb24nICUKKyAgICAgICAg
ICAgICAgICAobGVuZ3RoLCAoc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLnJlbW90ZV9hZGRyLCkp
KQorICAgICAgICByZXR1cm4gYnl0ZXMKKworICAgIGRlZiBfd3JpdGUoc2VsZiwgYnl0ZXMpOgor
ICAgICAgICAiIiJXcml0ZXMgZ2l2ZW4gYnl0ZXMgdG8gY29ubmVjdGlvbi4gSW4gY2FzZSB3ZSBj
YXRjaCBhbnkgZXhjZXB0aW9uLAorICAgICAgICBwcmVwZW5kcyByZW1vdGUgYWRkcmVzcyB0byB0
aGUgZXhjZXB0aW9uIG1lc3NhZ2UgYW5kIHJhaXNlIGFnYWluLgorICAgICAgICAiIiIKKworICAg
ICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoYnl0
ZXMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICB1dGlsLnByZXBl
bmRfbWVzc2FnZV90b19leGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICdGYWlsZWQgdG8g
c2VuZCBtZXNzYWdlIHRvICVyOiAnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2Vs
Zi5fcmVxdWVzdC5jb25uZWN0aW9uLnJlbW90ZV9hZGRyLCksCisgICAgICAgICAgICAgICAgICAg
IGUpCisgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHJlY2VpdmVfYnl0ZXMoc2VsZiwgbGVu
Z3RoKToKKyAgICAgICAgIiIiUmVjZWl2ZXMgbXVsdGlwbGUgYnl0ZXMuIFJldHJpZXMgcmVhZCB3
aGVuIHdlIGNvdWxkbid0IHJlY2VpdmUgdGhlCisgICAgICAgIHNwZWNpZmllZCBhbW91bnQuCisK
KyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRp
b246IHdoZW4gcmVhZCByZXR1cm5zIGVtcHR5IHN0cmluZy4KKyAgICAgICAgIiIiCisKKyAgICAg
ICAgYnl0ZXMgPSBbXQorICAgICAgICB3aGlsZSBsZW5ndGggPiAwOgorICAgICAgICAgICAgbmV3
X2J5dGVzID0gc2VsZi5fcmVhZChsZW5ndGgpCisgICAgICAgICAgICBieXRlcy5hcHBlbmQobmV3
X2J5dGVzKQorICAgICAgICAgICAgbGVuZ3RoIC09IGxlbihuZXdfYnl0ZXMpCisgICAgICAgIHJl
dHVybiAnJy5qb2luKGJ5dGVzKQorCisgICAgZGVmIF9yZWFkX3VudGlsKHNlbGYsIGRlbGltX2No
YXIpOgorICAgICAgICAiIiJSZWFkcyBieXRlcyB1bnRpbCB3ZSBlbmNvdW50ZXIgZGVsaW1fY2hh
ci4gVGhlIHJlc3VsdCB3aWxsIG5vdAorICAgICAgICBjb250YWluIGRlbGltX2NoYXIuCisKKyAg
ICAgICAgUmFpc2VzOgorICAgICAgICAgICAgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb246
IHdoZW4gcmVhZCByZXR1cm5zIGVtcHR5IHN0cmluZy4KKyAgICAgICAgIiIiCisKKyAgICAgICAg
Ynl0ZXMgPSBbXQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgY2ggPSBzZWxmLl9y
ZWFkKDEpCisgICAgICAgICAgICBpZiBjaCA9PSBkZWxpbV9jaGFyOgorICAgICAgICAgICAgICAg
IGJyZWFrCisgICAgICAgICAgICBieXRlcy5hcHBlbmQoY2gpCisgICAgICAgIHJldHVybiAnJy5q
b2luKGJ5dGVzKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9fc3RyZWFtX2hpeGllNzUu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L19z
dHJlYW1faGl4aWU3NS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODRjYTZlMDczYjZkYTZlZmVkMTg4Y2ZkZDZh
ZTcwNDEzOGM2MTc4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9fc3RyZWFtX2hpeGllNzUucHkKQEAgLTAsMCArMSwy
MjggQEAKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRoaXMgZmlsZSBwcm92aWRlcyBhIGNsYXNz
IGZvciBwYXJzaW5nL2J1aWxkaW5nIGZyYW1lcyBvZiB0aGUgV2ViU29ja2V0Citwcm90b2NvbCB2
ZXJzaW9uIEh5QmkgMDAgYW5kIEhpeGllIDc1LgorCitTcGVjaWZpY2F0aW9uOgoraHR0cDovL3Rv
b2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1oeWJpLXRoZXdlYnNvY2tldHByb3RvY29sLTAw
CisiIiIKKworCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgY29tbW9uCitmcm9tIG1vZF9w
eXdlYnNvY2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IEJhZE9wZXJhdGlvbkV4Y2VwdGlvbgorZnJv
bSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBDb25uZWN0aW9uVGVybWluYXRl
ZEV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBJbnZh
bGlkRnJhbWVFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1fYmFzZSBpbXBv
cnQgU3RyZWFtQmFzZQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBV
bnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgdXRp
bAorCisKK2NsYXNzIFN0cmVhbUhpeGllNzUoU3RyZWFtQmFzZSk6CisgICAgIiIiQSBjbGFzcyBm
b3IgcGFyc2luZy9idWlsZGluZyBmcmFtZXMgb2YgdGhlIFdlYlNvY2tldCBwcm90b2NvbCB2ZXJz
aW9uCisgICAgSHlCaSAwMCBhbmQgSGl4aWUgNzUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcmVxdWVzdCwgZW5hYmxlX2Nsb3NpbmdfaGFuZHNoYWtlPUZhbHNlKToKKyAgICAg
ICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
ICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgICAgICBlbmFibGVfY2xvc2lu
Z19oYW5kc2hha2U6IHRvIGxldCBTdHJlYW1IaXhpZTc1IHBlcmZvcm0gY2xvc2luZworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2UgYXMgc3BlY2lmaWVkIGlu
IEh5QmkgMDAsIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
IG9wdGlvbiB0byBUcnVlLgorICAgICAgICAiIiIKKworICAgICAgICBTdHJlYW1CYXNlLl9faW5p
dF9fKHNlbGYsIHJlcXVlc3QpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xh
c3NfbG9nZ2VyKHNlbGYpCisKKyAgICAgICAgc2VsZi5fZW5hYmxlX2Nsb3NpbmdfaGFuZHNoYWtl
ID0gZW5hYmxlX2Nsb3NpbmdfaGFuZHNoYWtlCisKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5jbGll
bnRfdGVybWluYXRlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3JlcXVlc3Quc2VydmVyX3Rlcm1p
bmF0ZWQgPSBGYWxzZQorCisgICAgZGVmIHNlbmRfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBlbmQ9
VHJ1ZSwgYmluYXJ5PUZhbHNlKToKKyAgICAgICAgIiIiU2VuZCBtZXNzYWdlLgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgICBtZXNzYWdlOiB1bmljb2RlIHN0cmluZyB0byBzZW5kLgorICAg
ICAgICAgICAgYmluYXJ5OiBub3QgdXNlZCBpbiBoaXhpZTc1LgorCisgICAgICAgIFJhaXNlczoK
KyAgICAgICAgICAgIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbjogd2hlbiBjYWxsZWQgb24gYSBzZXJ2
ZXItdGVybWluYXRlZAorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uCisgICAgICAgICIiIgor
CisgICAgICAgIGlmIG5vdCBlbmQ6CisgICAgICAgICAgICByYWlzZSBCYWRPcGVyYXRpb25FeGNl
cHRpb24oCisgICAgICAgICAgICAgICAgJ1N0cmVhbUhpeGllNzUgZG9lc25cJ3Qgc3VwcG9ydCBz
ZW5kX21lc3NhZ2Ugd2l0aCBlbmQ9RmFsc2UnKQorCisgICAgICAgIGlmIGJpbmFyeToKKyAgICAg
ICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnU3Ry
ZWFtSGl4aWU3NSBkb2VzblwndCBzdXBwb3J0IHNlbmRfbWVzc2FnZSB3aXRoIGJpbmFyeT1UcnVl
JykKKworICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LnNlcnZlcl90ZXJtaW5hdGVkOgorICAgICAg
ICAgICAgcmFpc2UgQmFkT3BlcmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdSZXF1
ZXN0ZWQgc2VuZF9tZXNzYWdlIGFmdGVyIHNlbmRpbmcgb3V0IGEgY2xvc2luZyBoYW5kc2hha2Un
KQorCisgICAgICAgIHNlbGYuX3dyaXRlKCcnLmpvaW4oWydceDAwJywgbWVzc2FnZS5lbmNvZGUo
J3V0Zi04JyksICdceGZmJ10pKQorCisgICAgZGVmIF9yZWFkX3BheWxvYWRfbGVuZ3RoX2hpeGll
NzUoc2VsZik6CisgICAgICAgICIiIlJlYWRzIGEgbGVuZ3RoIGhlYWRlciBpbiBhIEhpeGllNzUg
dmVyc2lvbiBmcmFtZSB3aXRoIGxlbmd0aC4KKworICAgICAgICBSYWlzZXM6CisgICAgICAgICAg
ICBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbjogd2hlbiByZWFkIHJldHVybnMgZW1wdHkg
c3RyaW5nLgorICAgICAgICAiIiIKKworICAgICAgICBsZW5ndGggPSAwCisgICAgICAgIHdoaWxl
IFRydWU6CisgICAgICAgICAgICBiX3N0ciA9IHNlbGYuX3JlYWQoMSkKKyAgICAgICAgICAgIGIg
PSBvcmQoYl9zdHIpCisgICAgICAgICAgICBsZW5ndGggPSBsZW5ndGggKiAxMjggKyAoYiAmIDB4
N2YpCisgICAgICAgICAgICBpZiAoYiAmIDB4ODApID09IDA6CisgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgcmV0dXJuIGxlbmd0aAorCisgICAgZGVmIHJlY2VpdmVfbWVzc2FnZShzZWxm
KToKKyAgICAgICAgIiIiUmVjZWl2ZSBhIFdlYlNvY2tldCBmcmFtZSBhbmQgcmV0dXJuIGl0cyBw
YXlsb2FkIGFuIHVuaWNvZGUgc3RyaW5nLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAg
ICBwYXlsb2FkIHVuaWNvZGUgc3RyaW5nIGluIGEgV2ViU29ja2V0IGZyYW1lLgorCisgICAgICAg
IFJhaXNlczoKKyAgICAgICAgICAgIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uOiB3aGVu
IHJlYWQgcmV0dXJucyBlbXB0eQorICAgICAgICAgICAgICAgIHN0cmluZy4KKyAgICAgICAgICAg
IEJhZE9wZXJhdGlvbkV4Y2VwdGlvbjogd2hlbiBjYWxsZWQgb24gYSBjbGllbnQtdGVybWluYXRl
ZAorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uCisgICAgICAgICIiIgorCisgICAgICAgIGlm
IHNlbGYuX3JlcXVlc3QuY2xpZW50X3Rlcm1pbmF0ZWQ6CisgICAgICAgICAgICByYWlzZSBCYWRP
cGVyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ1JlcXVlc3RlZCByZWNlaXZlX21l
c3NhZ2UgYWZ0ZXIgcmVjZWl2aW5nIGEgY2xvc2luZyAnCisgICAgICAgICAgICAgICAgJ2hhbmRz
aGFrZScpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICMgUmVhZCAxIGJ5dGUu
CisgICAgICAgICAgICAjIG1wX2Nvbm4ucmVhZCB3aWxsIGJsb2NrIGlmIG5vIGJ5dGVzIGFyZSBh
dmFpbGFibGUuCisgICAgICAgICAgICAjIFRpbWVvdXQgaXMgY29udHJvbGxlZCBieSBUaW1lT3V0
IGRpcmVjdGl2ZSBvZiBBcGFjaGUuCisgICAgICAgICAgICBmcmFtZV90eXBlX3N0ciA9IHNlbGYu
cmVjZWl2ZV9ieXRlcygxKQorICAgICAgICAgICAgZnJhbWVfdHlwZSA9IG9yZChmcmFtZV90eXBl
X3N0cikKKyAgICAgICAgICAgIGlmIChmcmFtZV90eXBlICYgMHg4MCkgPT0gMHg4MDoKKyAgICAg
ICAgICAgICAgICAjIFRoZSBwYXlsb2FkIGxlbmd0aCBpcyBzcGVjaWZpZWQgaW4gdGhlIGZyYW1l
LgorICAgICAgICAgICAgICAgICMgUmVhZCBhbmQgZGlzY2FyZC4KKyAgICAgICAgICAgICAgICBs
ZW5ndGggPSBzZWxmLl9yZWFkX3BheWxvYWRfbGVuZ3RoX2hpeGllNzUoKQorICAgICAgICAgICAg
ICAgIGlmIGxlbmd0aCA+IDA6CisgICAgICAgICAgICAgICAgICAgIF8gPSBzZWxmLnJlY2VpdmVf
Ynl0ZXMobGVuZ3RoKQorICAgICAgICAgICAgICAgICMgNS4zIDMuIDEyLiBpZiAvdHlwZS8gaXMg
MHhGRiBhbmQgL2xlbmd0aC8gaXMgMCwgdGhlbiBzZXQgdGhlCisgICAgICAgICAgICAgICAgIyAv
Y2xpZW50IHRlcm1pbmF0ZWQvIGZsYWcgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgICAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLl9lbmFibGVfY2xvc2luZ19oYW5kc2hha2U6CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBmcmFtZV90eXBlID09IDB4
RkYgYW5kIGxlbmd0aCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LmNs
aWVudF90ZXJtaW5hdGVkID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Jl
cXVlc3Quc2VydmVyX3Rlcm1pbmF0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9s
b2dnZXIuZGVidWcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIGFjayBm
b3Igc2VydmVyLWluaXRpYXRlZCBjbG9zaW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnaGFuZHNoYWtlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgICAgICAg
ICAgICAgJ1JlY2VpdmVkIGNsaWVudC1pbml0aWF0ZWQgY2xvc2luZyBoYW5kc2hha2UnKQorCisg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlbmRfY2xvc2luZ19oYW5kc2hha2UoKQorICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAgICAgICAgICAg
ICAnU2VudCBhY2sgZm9yIGNsaWVudC1pbml0aWF0ZWQgY2xvc2luZyBoYW5kc2hha2UnKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICAjIFRoZSBwYXlsb2FkIGlzIGRlbGltaXRlZCB3aXRoIFx4ZmYuCisgICAgICAgICAg
ICAgICAgYnl0ZXMgPSBzZWxmLl9yZWFkX3VudGlsKCdceGZmJykKKyAgICAgICAgICAgICAgICAj
IFRoZSBXZWJTb2NrZXQgcHJvdG9jb2wgc2VjdGlvbiA0LjQgc3BlY2lmaWVzIHRoYXQgaW52YWxp
ZAorICAgICAgICAgICAgICAgICMgY2hhcmFjdGVycyBtdXN0IGJlIHJlcGxhY2VkIHdpdGggVStm
ZmZkIFJFUExBQ0VNRU5UCisgICAgICAgICAgICAgICAgIyBDSEFSQUNURVIuCisgICAgICAgICAg
ICAgICAgbWVzc2FnZSA9IGJ5dGVzLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpCisgICAgICAg
ICAgICAgICAgaWYgZnJhbWVfdHlwZSA9PSAweDAwOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbWVzc2FnZQorICAgICAgICAgICAgICAgICMgRGlzY2FyZCBkYXRhIG9mIG90aGVyIHR5cGVz
LgorCisgICAgZGVmIF9zZW5kX2Nsb3NpbmdfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICBpZiBu
b3Qgc2VsZi5fZW5hYmxlX2Nsb3NpbmdfaGFuZHNoYWtlOgorICAgICAgICAgICAgcmFpc2UgQmFk
T3BlcmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdDbG9zaW5nIGhhbmRzaGFrZSBp
cyBub3Qgc3VwcG9ydGVkIGluIEhpeGllIDc1IHByb3RvY29sJykKKworICAgICAgICBzZWxmLl9y
ZXF1ZXN0LnNlcnZlcl90ZXJtaW5hdGVkID0gVHJ1ZQorCisgICAgICAgICMgNS4zIHRoZSBzZXJ2
ZXIgbWF5IGRlY2lkZSB0byB0ZXJtaW5hdGUgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGJ5Cisg
ICAgICAgICMgcnVubmluZyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgICAgICMg
MS4gc2VuZCBhIDB4RkYgYnl0ZSBhbmQgYSAweDAwIGJ5dGUgdG8gdGhlIGNsaWVudCB0byBpbmRp
Y2F0ZSB0aGUKKyAgICAgICAgIyBzdGFydCBvZiB0aGUgY2xvc2luZyBoYW5kc2hha2UuCisgICAg
ICAgIHNlbGYuX3dyaXRlKCdceGZmXHgwMCcpCisKKyAgICBkZWYgY2xvc2VfY29ubmVjdGlvbihz
ZWxmLCB1bnVzZWRfY29kZT0nJywgdW51c2VkX3JlYXNvbj0nJyk6CisgICAgICAgICIiIkNsb3Nl
cyBhIFdlYlNvY2tldCBjb25uZWN0aW9uLgorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAg
IENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uOiB3aGVuIGNsb3NpbmcgaGFuZHNoYWtlIHdh
cworICAgICAgICAgICAgICAgIG5vdCBzdWNjZXNzZnVsbC4KKyAgICAgICAgIiIiCisKKyAgICAg
ICAgaWYgc2VsZi5fcmVxdWVzdC5zZXJ2ZXJfdGVybWluYXRlZDoKKyAgICAgICAgICAgIHNlbGYu
X2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAnUmVxdWVzdGVkIGNsb3NlX2Nvbm5lY3Rp
b24gYnV0IHNlcnZlciBpcyBhbHJlYWR5IHRlcm1pbmF0ZWQnKQorICAgICAgICAgICAgcmV0dXJu
CisKKyAgICAgICAgaWYgbm90IHNlbGYuX2VuYWJsZV9jbG9zaW5nX2hhbmRzaGFrZToKKyAgICAg
ICAgICAgIHNlbGYuX3JlcXVlc3Quc2VydmVyX3Rlcm1pbmF0ZWQgPSBUcnVlCisgICAgICAgICAg
ICBzZWxmLl9sb2dnZXIuZGVidWcoJ0Nvbm5lY3Rpb24gY2xvc2VkJykKKyAgICAgICAgICAgIHJl
dHVybgorCisgICAgICAgIHNlbGYuX3NlbmRfY2xvc2luZ19oYW5kc2hha2UoKQorICAgICAgICBz
ZWxmLl9sb2dnZXIuZGVidWcoJ1NlbnQgc2VydmVyLWluaXRpYXRlZCBjbG9zaW5nIGhhbmRzaGFr
ZScpCisKKyAgICAgICAgIyBUT0RPKHVrYWkpOiAyLiB3YWl0IHVudGlsIHRoZSAvY2xpZW50IHRl
cm1pbmF0ZWQvIGZsYWcgaGFzIGJlZW4gc2V0LAorICAgICAgICAjIG9yIHVudGlsIGEgc2VydmVy
LWRlZmluZWQgdGltZW91dCBleHBpcmVzLgorICAgICAgICAjCisgICAgICAgICMgRm9yIG5vdywg
d2UgZXhwZWN0IHJlY2VpdmluZyBjbG9zaW5nIGhhbmRzaGFrZSByaWdodCBhZnRlciBzZW5kaW5n
CisgICAgICAgICMgb3V0IGNsb3NpbmcgaGFuZHNoYWtlLCBhbmQgaWYgd2UgY291bGRuJ3QgcmVj
ZWl2ZSBub24taGFuZHNoYWtlCisgICAgICAgICMgZnJhbWUsIHdlIHRha2UgaXQgYXMgQ29ubmVj
dGlvblRlcm1pbmF0ZWRFeGNlcHRpb24uCisgICAgICAgIG1lc3NhZ2UgPSBzZWxmLnJlY2VpdmVf
bWVzc2FnZSgpCisgICAgICAgIGlmIG1lc3NhZ2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBy
YWlzZSBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnRGlk
blwndCByZWNlaXZlIHZhbGlkIGFjayBmb3IgY2xvc2luZyBoYW5kc2hha2UnKQorICAgICAgICAj
IFRPRE86IDMuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4KKyAgICAgICAgIyBub3Rl
OiBtb2RfcHl0aG9uIENvbm5lY3Rpb24gKG1wX2Nvbm4pIGRvZXNuJ3QgaGF2ZSBjbG9zZSBtZXRo
b2QuCisKKyAgICBkZWYgc2VuZF9waW5nKHNlbGYsIGJvZHkpOgorICAgICAgICByYWlzZSBCYWRP
cGVyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAnU3RyZWFtSGl4aWU3NSBkb2VzblwndCBz
dXBwb3J0IHNlbmRfcGluZycpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L19zdHJlYW1f
aHliaS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2Nr
ZXQvX3N0cmVhbV9oeWJpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwMGY1NjkyYmRiZTNiZTk2OWRlYTkxMzZi
NzVhYzM4NGU5MWQ4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L19zdHJlYW1faHliaS5weQpAQCAtMCwwICsxLDY2
OCBAQAorIyBDb3B5cmlnaHQgMjAxMiwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiVGhpcyBmaWxlIHByb3ZpZGVzIGNsYXNzZXMg
YW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIHBhcnNpbmcvYnVpbGRpbmcgZnJhbWVzCitvZiB0aGUg
V2ViU29ja2V0IHByb3RvY29sIChSRkMgNjQ1NSkuCisKK1NwZWNpZmljYXRpb246CitodHRwOi8v
dG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU1CisiIiIKKworCitmcm9tIGNvbGxlY3Rpb25zIGlt
cG9ydCBkZXF1ZQoraW1wb3J0IG9zCitpbXBvcnQgc3RydWN0CisKK2Zyb20gbW9kX3B5d2Vic29j
a2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCB1dGlsCitmcm9t
IG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IEJhZE9wZXJhdGlvbkV4Y2VwdGlv
bgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBDb25uZWN0aW9uVGVy
bWluYXRlZEV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9y
dCBJbnZhbGlkRnJhbWVFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1fYmFz
ZSBpbXBvcnQgSW52YWxpZFVURjhFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJl
YW1fYmFzZSBpbXBvcnQgU3RyZWFtQmFzZQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9i
YXNlIGltcG9ydCBVbnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9uCisKKworX05PT1BfTUFTS0VSID0g
dXRpbC5Ob29wTWFza2VyKCkKKworCitjbGFzcyBGcmFtZShvYmplY3QpOgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGZpbj0xLCByc3YxPTAsIHJzdjI9MCwgcnN2Mz0wLAorICAgICAgICAgICAg
ICAgICBvcGNvZGU9Tm9uZSwgcGF5bG9hZD0nJyk6CisgICAgICAgIHNlbGYuZmluID0gZmluCisg
ICAgICAgIHNlbGYucnN2MSA9IHJzdjEKKyAgICAgICAgc2VsZi5yc3YyID0gcnN2MgorICAgICAg
ICBzZWxmLnJzdjMgPSByc3YzCisgICAgICAgIHNlbGYub3Bjb2RlID0gb3Bjb2RlCisgICAgICAg
IHNlbGYucGF5bG9hZCA9IHBheWxvYWQKKworCisjIEhlbHBlciBmdW5jdGlvbnMgbWFkZSBwdWJs
aWMgdG8gYmUgdXNlZCBmb3Igd3JpdGluZyB1bml0dGVzdHMgZm9yIFdlYlNvY2tldAorIyBjbGll
bnRzLgorCisKK2RlZiBjcmVhdGVfbGVuZ3RoX2hlYWRlcihsZW5ndGgsIG1hc2spOgorICAgICIi
IkNyZWF0ZXMgYSBsZW5ndGggaGVhZGVyLgorCisgICAgQXJnczoKKyAgICAgICAgbGVuZ3RoOiBG
cmFtZSBsZW5ndGguIE11c3QgYmUgbGVzcyB0aGFuIDJeNjMuCisgICAgICAgIG1hc2s6IE1hc2sg
Yml0LiBNdXN0IGJlIGJvb2xlYW4uCisKKyAgICBSYWlzZXM6CisgICAgICAgIFZhbHVlRXJyb3I6
IHdoZW4gYmFkIGRhdGEgaXMgZ2l2ZW4uCisgICAgIiIiCisKKyAgICBpZiBtYXNrOgorICAgICAg
ICBtYXNrX2JpdCA9IDEgPDwgNworICAgIGVsc2U6CisgICAgICAgIG1hc2tfYml0ID0gMAorCisg
ICAgaWYgbGVuZ3RoIDwgMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbGVuZ3RoIG11c3Qg
YmUgbm9uIG5lZ2F0aXZlIGludGVnZXInKQorICAgIGVsaWYgbGVuZ3RoIDw9IDEyNToKKyAgICAg
ICAgcmV0dXJuIGNocihtYXNrX2JpdCB8IGxlbmd0aCkKKyAgICBlbGlmIGxlbmd0aCA8ICgxIDw8
IDE2KToKKyAgICAgICAgcmV0dXJuIGNocihtYXNrX2JpdCB8IDEyNikgKyBzdHJ1Y3QucGFjaygn
IUgnLCBsZW5ndGgpCisgICAgZWxpZiBsZW5ndGggPCAoMSA8PCA2Myk6CisgICAgICAgIHJldHVy
biBjaHIobWFza19iaXQgfCAxMjcpICsgc3RydWN0LnBhY2soJyFRJywgbGVuZ3RoKQorICAgIGVs
c2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1BheWxvYWQgaXMgdG9vIGJpZyBmb3Igb25l
IGZyYW1lJykKKworCitkZWYgY3JlYXRlX2hlYWRlcihvcGNvZGUsIHBheWxvYWRfbGVuZ3RoLCBm
aW4sIHJzdjEsIHJzdjIsIHJzdjMsIG1hc2spOgorICAgICIiIkNyZWF0ZXMgYSBmcmFtZSBoZWFk
ZXIuCisKKyAgICBSYWlzZXM6CisgICAgICAgIEV4Y2VwdGlvbjogd2hlbiBiYWQgZGF0YSBpcyBn
aXZlbi4KKyAgICAiIiIKKworICAgIGlmIG9wY29kZSA8IDAgb3IgMHhmIDwgb3Bjb2RlOgorICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCdPcGNvZGUgb3V0IG9mIHJhbmdlJykKKworICAgIGlmIHBh
eWxvYWRfbGVuZ3RoIDwgMCBvciAoMSA8PCA2MykgPD0gcGF5bG9hZF9sZW5ndGg6CisgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoJ3BheWxvYWRfbGVuZ3RoIG91dCBvZiByYW5nZScpCisKKyAgICBp
ZiAoZmluIHwgcnN2MSB8IHJzdjIgfCByc3YzKSAmIH4xOgorICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCdGSU4gYml0IGFuZCBSZXNlcnZlZCBiaXQgcGFyYW1ldGVyIG11c3QgYmUgMCBvciAxJykK
KworICAgIGhlYWRlciA9ICcnCisKKyAgICBmaXJzdF9ieXRlID0gKChmaW4gPDwgNykKKyAgICAg
ICAgICAgICAgICAgIHwgKHJzdjEgPDwgNikgfCAocnN2MiA8PCA1KSB8IChyc3YzIDw8IDQpCisg
ICAgICAgICAgICAgICAgICB8IG9wY29kZSkKKyAgICBoZWFkZXIgKz0gY2hyKGZpcnN0X2J5dGUp
CisgICAgaGVhZGVyICs9IGNyZWF0ZV9sZW5ndGhfaGVhZGVyKHBheWxvYWRfbGVuZ3RoLCBtYXNr
KQorCisgICAgcmV0dXJuIGhlYWRlcgorCisKK2RlZiBfYnVpbGRfZnJhbWUoaGVhZGVyLCBib2R5
LCBtYXNrKToKKyAgICBpZiBub3QgbWFzazoKKyAgICAgICAgcmV0dXJuIGhlYWRlciArIGJvZHkK
KworICAgIG1hc2tpbmdfbm9uY2UgPSBvcy51cmFuZG9tKDQpCisgICAgbWFza2VyID0gdXRpbC5S
ZXBlYXRlZFhvck1hc2tlcihtYXNraW5nX25vbmNlKQorCisgICAgcmV0dXJuIGhlYWRlciArIG1h
c2tpbmdfbm9uY2UgKyBtYXNrZXIubWFzayhib2R5KQorCisKK2RlZiBfZmlsdGVyX2FuZF9mb3Jt
YXRfZnJhbWVfb2JqZWN0KGZyYW1lLCBtYXNrLCBmcmFtZV9maWx0ZXJzKToKKyAgICBmb3IgZnJh
bWVfZmlsdGVyIGluIGZyYW1lX2ZpbHRlcnM6CisgICAgICAgIGZyYW1lX2ZpbHRlci5maWx0ZXIo
ZnJhbWUpCisKKyAgICBoZWFkZXIgPSBjcmVhdGVfaGVhZGVyKAorICAgICAgICBmcmFtZS5vcGNv
ZGUsIGxlbihmcmFtZS5wYXlsb2FkKSwgZnJhbWUuZmluLAorICAgICAgICBmcmFtZS5yc3YxLCBm
cmFtZS5yc3YyLCBmcmFtZS5yc3YzLCBtYXNrKQorICAgIHJldHVybiBfYnVpbGRfZnJhbWUoaGVh
ZGVyLCBmcmFtZS5wYXlsb2FkLCBtYXNrKQorCisKK2RlZiBjcmVhdGVfYmluYXJ5X2ZyYW1lKAor
ICAgIG1lc3NhZ2UsIG9wY29kZT1jb21tb24uT1BDT0RFX0JJTkFSWSwgZmluPTEsIG1hc2s9RmFs
c2UsIGZyYW1lX2ZpbHRlcnM9W10pOgorICAgICIiIkNyZWF0ZXMgYSBzaW1wbGUgYmluYXJ5IGZy
YW1lIHdpdGggbm8gZXh0ZW5zaW9uLCByZXNlcnZlZCBiaXQuIiIiCisKKyAgICBmcmFtZSA9IEZy
YW1lKGZpbj1maW4sIG9wY29kZT1vcGNvZGUsIHBheWxvYWQ9bWVzc2FnZSkKKyAgICByZXR1cm4g
X2ZpbHRlcl9hbmRfZm9ybWF0X2ZyYW1lX29iamVjdChmcmFtZSwgbWFzaywgZnJhbWVfZmlsdGVy
cykKKworCitkZWYgY3JlYXRlX3RleHRfZnJhbWUoCisgICAgbWVzc2FnZSwgb3Bjb2RlPWNvbW1v
bi5PUENPREVfVEVYVCwgZmluPTEsIG1hc2s9RmFsc2UsIGZyYW1lX2ZpbHRlcnM9W10pOgorICAg
ICIiIkNyZWF0ZXMgYSBzaW1wbGUgdGV4dCBmcmFtZSB3aXRoIG5vIGV4dGVuc2lvbiwgcmVzZXJ2
ZWQgYml0LiIiIgorCisgICAgZW5jb2RlZF9tZXNzYWdlID0gbWVzc2FnZS5lbmNvZGUoJ3V0Zi04
JykKKyAgICByZXR1cm4gY3JlYXRlX2JpbmFyeV9mcmFtZShlbmNvZGVkX21lc3NhZ2UsIG9wY29k
ZSwgZmluLCBtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lX2ZpbHRl
cnMpCisKKworY2xhc3MgRnJhZ21lbnRlZEZyYW1lQnVpbGRlcihvYmplY3QpOgorICAgICIiIkEg
c3RhdGVmdWwgY2xhc3MgdG8gc2VuZCBhIG1lc3NhZ2UgYXMgZnJhZ21lbnRzLiIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1hc2ssIGZyYW1lX2ZpbHRlcnM9W10pOgorICAgICAgICAiIiJD
b25zdHJ1Y3RzIGFuIGluc3RhbmNlLiIiIgorCisgICAgICAgIHNlbGYuX21hc2sgPSBtYXNrCisg
ICAgICAgIHNlbGYuX2ZyYW1lX2ZpbHRlcnMgPSBmcmFtZV9maWx0ZXJzCisKKyAgICAgICAgc2Vs
Zi5fc3RhcnRlZCA9IEZhbHNlCisKKyAgICAgICAgIyBIb2xkIG9wY29kZSBvZiB0aGUgZmlyc3Qg
ZnJhbWUgaW4gbWVzc2FnZXMgdG8gdmVyaWZ5IHR5cGVzIG9mIG90aGVyCisgICAgICAgICMgZnJh
bWVzIGluIHRoZSBtZXNzYWdlIGFyZSBhbGwgdGhlIHNhbWUuCisgICAgICAgIHNlbGYuX29wY29k
ZSA9IGNvbW1vbi5PUENPREVfVEVYVAorCisgICAgZGVmIGJ1aWxkKHNlbGYsIG1lc3NhZ2UsIGVu
ZCwgYmluYXJ5KToKKyAgICAgICAgaWYgYmluYXJ5OgorICAgICAgICAgICAgZnJhbWVfdHlwZSA9
IGNvbW1vbi5PUENPREVfQklOQVJZCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcmFtZV90
eXBlID0gY29tbW9uLk9QQ09ERV9URVhUCisgICAgICAgIGlmIHNlbGYuX3N0YXJ0ZWQ6CisgICAg
ICAgICAgICBpZiBzZWxmLl9vcGNvZGUgIT0gZnJhbWVfdHlwZToKKyAgICAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCdNZXNzYWdlIHR5cGVzIGFyZSBkaWZmZXJlbnQgaW4gZnJhbWVzIGZv
ciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIHNhbWUgbWVzc2FnZScp
CisgICAgICAgICAgICBvcGNvZGUgPSBjb21tb24uT1BDT0RFX0NPTlRJTlVBVElPTgorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgb3Bjb2RlID0gZnJhbWVfdHlwZQorICAgICAgICAgICAgc2Vs
Zi5fb3Bjb2RlID0gZnJhbWVfdHlwZQorCisgICAgICAgIGlmIGVuZDoKKyAgICAgICAgICAgIHNl
bGYuX3N0YXJ0ZWQgPSBGYWxzZQorICAgICAgICAgICAgZmluID0gMQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgc2VsZi5fc3RhcnRlZCA9IFRydWUKKyAgICAgICAgICAgIGZpbiA9IDAKKwor
ICAgICAgICBpZiBiaW5hcnk6CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlX2JpbmFyeV9mcmFt
ZSgKKyAgICAgICAgICAgICAgICBtZXNzYWdlLCBvcGNvZGUsIGZpbiwgc2VsZi5fbWFzaywgc2Vs
Zi5fZnJhbWVfZmlsdGVycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjcmVh
dGVfdGV4dF9mcmFtZSgKKyAgICAgICAgICAgICAgICBtZXNzYWdlLCBvcGNvZGUsIGZpbiwgc2Vs
Zi5fbWFzaywgc2VsZi5fZnJhbWVfZmlsdGVycykKKworCitkZWYgX2NyZWF0ZV9jb250cm9sX2Zy
YW1lKG9wY29kZSwgYm9keSwgbWFzaywgZnJhbWVfZmlsdGVycyk6CisgICAgZnJhbWUgPSBGcmFt
ZShvcGNvZGU9b3Bjb2RlLCBwYXlsb2FkPWJvZHkpCisKKyAgICByZXR1cm4gX2ZpbHRlcl9hbmRf
Zm9ybWF0X2ZyYW1lX29iamVjdChmcmFtZSwgbWFzaywgZnJhbWVfZmlsdGVycykKKworCitkZWYg
Y3JlYXRlX3BpbmdfZnJhbWUoYm9keSwgbWFzaz1GYWxzZSwgZnJhbWVfZmlsdGVycz1bXSk6Cisg
ICAgcmV0dXJuIF9jcmVhdGVfY29udHJvbF9mcmFtZShjb21tb24uT1BDT0RFX1BJTkcsIGJvZHks
IG1hc2ssIGZyYW1lX2ZpbHRlcnMpCisKKworZGVmIGNyZWF0ZV9wb25nX2ZyYW1lKGJvZHksIG1h
c2s9RmFsc2UsIGZyYW1lX2ZpbHRlcnM9W10pOgorICAgIHJldHVybiBfY3JlYXRlX2NvbnRyb2xf
ZnJhbWUoY29tbW9uLk9QQ09ERV9QT05HLCBib2R5LCBtYXNrLCBmcmFtZV9maWx0ZXJzKQorCisK
K2RlZiBjcmVhdGVfY2xvc2VfZnJhbWUoYm9keSwgbWFzaz1GYWxzZSwgZnJhbWVfZmlsdGVycz1b
XSk6CisgICAgcmV0dXJuIF9jcmVhdGVfY29udHJvbF9mcmFtZSgKKyAgICAgICAgY29tbW9uLk9Q
Q09ERV9DTE9TRSwgYm9keSwgbWFzaywgZnJhbWVfZmlsdGVycykKKworCitjbGFzcyBTdHJlYW1P
cHRpb25zKG9iamVjdCk6CisgICAgIiIiSG9sZHMgb3B0aW9uIHZhbHVlcyB0byBjb25maWd1cmUg
U3RyZWFtIG9iamVjdHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICIi
IkNvbnN0cnVjdHMgU3RyZWFtT3B0aW9ucy4iIiIKKworICAgICAgICAjIEVuYWJsZXMgZGVmbGF0
ZS1zdHJlYW0gZXh0ZW5zaW9uLgorICAgICAgICBzZWxmLmRlZmxhdGVfc3RyZWFtID0gRmFsc2UK
KworICAgICAgICAjIEZpbHRlcnMgYXBwbGllZCB0byBmcmFtZXMuCisgICAgICAgIHNlbGYub3V0
Z29pbmdfZnJhbWVfZmlsdGVycyA9IFtdCisgICAgICAgIHNlbGYuaW5jb21pbmdfZnJhbWVfZmls
dGVycyA9IFtdCisKKyAgICAgICAgc2VsZi5tYXNrX3NlbmQgPSBGYWxzZQorICAgICAgICBzZWxm
LnVubWFza19yZWNlaXZlID0gVHJ1ZQorCisKK2NsYXNzIFN0cmVhbShTdHJlYW1CYXNlKToKKyAg
ICAiIiJBIGNsYXNzIGZvciBwYXJzaW5nL2J1aWxkaW5nIGZyYW1lcyBvZiB0aGUgV2ViU29ja2V0
IHByb3RvY29sCisgICAgKFJGQyA2NDU1KS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCByZXF1ZXN0LCBvcHRpb25zKToKKyAgICAgICAgIiIiQ29uc3RydWN0cyBhbiBpbnN0YW5j
ZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1
ZXN0LgorICAgICAgICAiIiIKKworICAgICAgICBTdHJlYW1CYXNlLl9faW5pdF9fKHNlbGYsIHJl
cXVlc3QpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNl
bGYpCisKKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKKworICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLmRlZmxhdGVfc3RyZWFtOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVn
KCdTZXR1cCBmaWx0ZXIgZm9yIGRlZmxhdGUtc3RyZWFtJykKKyAgICAgICAgICAgIHNlbGYuX3Jl
cXVlc3QgPSB1dGlsLkRlZmxhdGVSZXF1ZXN0KHNlbGYuX3JlcXVlc3QpCisKKyAgICAgICAgc2Vs
Zi5fcmVxdWVzdC5jbGllbnRfdGVybWluYXRlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3JlcXVl
c3Quc2VydmVyX3Rlcm1pbmF0ZWQgPSBGYWxzZQorCisgICAgICAgICMgSG9sZHMgYm9keSBvZiBy
ZWNlaXZlZCBmcmFnbWVudHMuCisgICAgICAgIHNlbGYuX3JlY2VpdmVkX2ZyYWdtZW50cyA9IFtd
CisgICAgICAgICMgSG9sZHMgdGhlIG9wY29kZSBvZiB0aGUgZmlyc3QgZnJhZ21lbnQuCisgICAg
ICAgIHNlbGYuX29yaWdpbmFsX29wY29kZSA9IE5vbmUKKworICAgICAgICBzZWxmLl93cml0ZXIg
PSBGcmFnbWVudGVkRnJhbWVCdWlsZGVyKAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5tYXNr
X3NlbmQsIHNlbGYuX29wdGlvbnMub3V0Z29pbmdfZnJhbWVfZmlsdGVycykKKworICAgICAgICBz
ZWxmLl9waW5nX3F1ZXVlID0gZGVxdWUoKQorCisgICAgZGVmIF9yZWNlaXZlX2ZyYW1lKHNlbGYp
OgorICAgICAgICAiIiJSZWNlaXZlcyBhIGZyYW1lIGFuZCByZXR1cm4gZGF0YSBpbiB0aGUgZnJh
bWUgYXMgYSB0dXBsZSBjb250YWluaW5nCisgICAgICAgIGVhY2ggaGVhZGVyIGZpZWxkIGFuZCBw
YXlsb2FkIHNlcGFyYXRlbHkuCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgQ29ubmVj
dGlvblRlcm1pbmF0ZWRFeGNlcHRpb246IHdoZW4gcmVhZCByZXR1cm5zIGVtcHR5CisgICAgICAg
ICAgICAgICAgc3RyaW5nLgorICAgICAgICAgICAgSW52YWxpZEZyYW1lRXhjZXB0aW9uOiB3aGVu
IHRoZSBmcmFtZSBjb250YWlucyBpbnZhbGlkIGRhdGEuCisgICAgICAgICIiIgorCisgICAgICAg
IHJlY2VpdmVkID0gc2VsZi5yZWNlaXZlX2J5dGVzKDIpCisKKyAgICAgICAgZmlyc3RfYnl0ZSA9
IG9yZChyZWNlaXZlZFswXSkKKyAgICAgICAgZmluID0gKGZpcnN0X2J5dGUgPj4gNykgJiAxCisg
ICAgICAgIHJzdjEgPSAoZmlyc3RfYnl0ZSA+PiA2KSAmIDEKKyAgICAgICAgcnN2MiA9IChmaXJz
dF9ieXRlID4+IDUpICYgMQorICAgICAgICByc3YzID0gKGZpcnN0X2J5dGUgPj4gNCkgJiAxCisg
ICAgICAgIG9wY29kZSA9IGZpcnN0X2J5dGUgJiAweGYKKworICAgICAgICBzZWNvbmRfYnl0ZSA9
IG9yZChyZWNlaXZlZFsxXSkKKyAgICAgICAgbWFzayA9IChzZWNvbmRfYnl0ZSA+PiA3KSAmIDEK
KyAgICAgICAgcGF5bG9hZF9sZW5ndGggPSBzZWNvbmRfYnl0ZSAmIDB4N2YKKworICAgICAgICBp
ZiAobWFzayA9PSAxKSAhPSBzZWxmLl9vcHRpb25zLnVubWFza19yZWNlaXZlOgorICAgICAgICAg
ICAgcmFpc2UgSW52YWxpZEZyYW1lRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdNYXNrIGJp
dCBvbiB0aGUgcmVjZWl2ZWQgZnJhbWUgZGlkXCdudCBtYXRjaCBtYXNraW5nICcKKyAgICAgICAg
ICAgICAgICAnY29uZmlndXJhdGlvbiBmb3IgcmVjZWl2ZWQgZnJhbWVzJykKKworICAgICAgICAj
IFRoZSBIeWJpLTEzIGFuZCBsYXRlciBzcGVjcyBkaXNhbGxvdyBwdXR0aW5nIGEgdmFsdWUgaW4g
MHgwLTB4RkZGRgorICAgICAgICAjIGludG8gdGhlIDgtb2N0ZXQgZXh0ZW5kZWQgcGF5bG9hZCBs
ZW5ndGggZmllbGQgKG9yIDB4MC0weEZEIGluCisgICAgICAgICMgMi1vY3RldCBmaWVsZCkuCisg
ICAgICAgIHZhbGlkX2xlbmd0aF9lbmNvZGluZyA9IFRydWUKKyAgICAgICAgbGVuZ3RoX2VuY29k
aW5nX2J5dGVzID0gMQorICAgICAgICBpZiBwYXlsb2FkX2xlbmd0aCA9PSAxMjc6CisgICAgICAg
ICAgICBleHRlbmRlZF9wYXlsb2FkX2xlbmd0aCA9IHNlbGYucmVjZWl2ZV9ieXRlcyg4KQorICAg
ICAgICAgICAgcGF5bG9hZF9sZW5ndGggPSBzdHJ1Y3QudW5wYWNrKAorICAgICAgICAgICAgICAg
ICchUScsIGV4dGVuZGVkX3BheWxvYWRfbGVuZ3RoKVswXQorICAgICAgICAgICAgaWYgcGF5bG9h
ZF9sZW5ndGggPiAweDdGRkZGRkZGRkZGRkZGRkY6CisgICAgICAgICAgICAgICAgcmFpc2UgSW52
YWxpZEZyYW1lRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAnRXh0ZW5kZWQgcGF5bG9h
ZCBsZW5ndGggPj0gMl42MycpCisgICAgICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LndzX3ZlcnNp
b24gPj0gMTMgYW5kIHBheWxvYWRfbGVuZ3RoIDwgMHgxMDAwMDoKKyAgICAgICAgICAgICAgICB2
YWxpZF9sZW5ndGhfZW5jb2RpbmcgPSBGYWxzZQorICAgICAgICAgICAgICAgIGxlbmd0aF9lbmNv
ZGluZ19ieXRlcyA9IDgKKyAgICAgICAgZWxpZiBwYXlsb2FkX2xlbmd0aCA9PSAxMjY6CisgICAg
ICAgICAgICBleHRlbmRlZF9wYXlsb2FkX2xlbmd0aCA9IHNlbGYucmVjZWl2ZV9ieXRlcygyKQor
ICAgICAgICAgICAgcGF5bG9hZF9sZW5ndGggPSBzdHJ1Y3QudW5wYWNrKAorICAgICAgICAgICAg
ICAgICchSCcsIGV4dGVuZGVkX3BheWxvYWRfbGVuZ3RoKVswXQorICAgICAgICAgICAgaWYgc2Vs
Zi5fcmVxdWVzdC53c192ZXJzaW9uID49IDEzIGFuZCBwYXlsb2FkX2xlbmd0aCA8IDEyNjoKKyAg
ICAgICAgICAgICAgICB2YWxpZF9sZW5ndGhfZW5jb2RpbmcgPSBGYWxzZQorICAgICAgICAgICAg
ICAgIGxlbmd0aF9lbmNvZGluZ19ieXRlcyA9IDIKKworICAgICAgICBpZiBub3QgdmFsaWRfbGVu
Z3RoX2VuY29kaW5nOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLndhcm5pbmcoCisgICAgICAg
ICAgICAgICAgJ1BheWxvYWQgbGVuZ3RoIGlzIG5vdCBlbmNvZGVkIHVzaW5nIHRoZSBtaW5pbWFs
IG51bWJlciBvZiAnCisgICAgICAgICAgICAgICAgJ2J5dGVzICglZCBpcyBlbmNvZGVkIHVzaW5n
ICVkIGJ5dGVzKScsCisgICAgICAgICAgICAgICAgcGF5bG9hZF9sZW5ndGgsCisgICAgICAgICAg
ICAgICAgbGVuZ3RoX2VuY29kaW5nX2J5dGVzKQorCisgICAgICAgIGlmIG1hc2sgPT0gMToKKyAg
ICAgICAgICAgIG1hc2tpbmdfbm9uY2UgPSBzZWxmLnJlY2VpdmVfYnl0ZXMoNCkKKyAgICAgICAg
ICAgIG1hc2tlciA9IHV0aWwuUmVwZWF0ZWRYb3JNYXNrZXIobWFza2luZ19ub25jZSkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIG1hc2tlciA9IF9OT09QX01BU0tFUgorCisgICAgICAgIGJ5
dGVzID0gbWFza2VyLm1hc2soc2VsZi5yZWNlaXZlX2J5dGVzKHBheWxvYWRfbGVuZ3RoKSkKKwor
ICAgICAgICByZXR1cm4gb3Bjb2RlLCBieXRlcywgZmluLCByc3YxLCByc3YyLCByc3YzCisKKyAg
ICBkZWYgX3JlY2VpdmVfZnJhbWVfYXNfZnJhbWVfb2JqZWN0KHNlbGYpOgorICAgICAgICBvcGNv
ZGUsIGJ5dGVzLCBmaW4sIHJzdjEsIHJzdjIsIHJzdjMgPSBzZWxmLl9yZWNlaXZlX2ZyYW1lKCkK
KworICAgICAgICByZXR1cm4gRnJhbWUoZmluPWZpbiwgcnN2MT1yc3YxLCByc3YyPXJzdjIsIHJz
djM9cnN2MywKKyAgICAgICAgICAgICAgICAgICAgIG9wY29kZT1vcGNvZGUsIHBheWxvYWQ9Ynl0
ZXMpCisKKyAgICBkZWYgc2VuZF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGVuZD1UcnVlLCBiaW5h
cnk9RmFsc2UpOgorICAgICAgICAiIiJTZW5kIG1lc3NhZ2UuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICAgIG1lc3NhZ2U6IHRleHQgaW4gdW5pY29kZSBvciBiaW5hcnkgaW4gc3RyIHRvIHNl
bmQuCisgICAgICAgICAgICBiaW5hcnk6IHNlbmQgbWVzc2FnZSBhcyBiaW5hcnkgZnJhbWUuCisK
KyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgQmFkT3BlcmF0aW9uRXhjZXB0aW9uOiB3aGVu
IGNhbGxlZCBvbiBhIHNlcnZlci10ZXJtaW5hdGVkCisgICAgICAgICAgICAgICAgY29ubmVjdGlv
biBvciBjYWxsZWQgd2l0aCBpbmNvbnNpc3RlbnQgbWVzc2FnZSB0eXBlIG9yIGJpbmFyeQorICAg
ICAgICAgICAgICAgIHBhcmFtZXRlci4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgc2VsZi5f
cmVxdWVzdC5zZXJ2ZXJfdGVybWluYXRlZDoKKyAgICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlv
bkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnUmVxdWVzdGVkIHNlbmRfbWVzc2FnZSBhZnRl
ciBzZW5kaW5nIG91dCBhIGNsb3NpbmcgaGFuZHNoYWtlJykKKworICAgICAgICBpZiBiaW5hcnkg
YW5kIGlzaW5zdGFuY2UobWVzc2FnZSwgdW5pY29kZSk6CisgICAgICAgICAgICByYWlzZSBCYWRP
cGVyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ01lc3NhZ2UgZm9yIGJpbmFyeSBm
cmFtZSBtdXN0IGJlIGluc3RhbmNlIG9mIHN0cicpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgc2VsZi5fd3JpdGUoc2VsZi5fd3JpdGVyLmJ1aWxkKG1lc3NhZ2UsIGVuZCwgYmluYXJ5KSkK
KyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICByYWlzZSBCYWRPcGVy
YXRpb25FeGNlcHRpb24oZSkKKworICAgIGRlZiByZWNlaXZlX21lc3NhZ2Uoc2VsZik6CisgICAg
ICAgICIiIlJlY2VpdmUgYSBXZWJTb2NrZXQgZnJhbWUgYW5kIHJldHVybiBpdHMgcGF5bG9hZCBh
cyBhIHRleHQgaW4KKyAgICAgICAgdW5pY29kZSBvciBhIGJpbmFyeSBpbiBzdHIuCisKKyAgICAg
ICAgUmV0dXJuczoKKyAgICAgICAgICAgIHBheWxvYWQgZGF0YSBvZiB0aGUgZnJhbWUKKyAgICAg
ICAgICAgIC0gYXMgdW5pY29kZSBpbnN0YW5jZSBpZiByZWNlaXZlZCB0ZXh0IGZyYW1lCisgICAg
ICAgICAgICAtIGFzIHN0ciBpbnN0YW5jZSBpZiByZWNlaXZlZCBiaW5hcnkgZnJhbWUKKyAgICAg
ICAgICAgIG9yIE5vbmUgaWZmIHJlY2VpdmVkIGNsb3NpbmcgaGFuZHNoYWtlLgorICAgICAgICBS
YWlzZXM6CisgICAgICAgICAgICBCYWRPcGVyYXRpb25FeGNlcHRpb246IHdoZW4gY2FsbGVkIG9u
IGEgY2xpZW50LXRlcm1pbmF0ZWQKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLgorICAgICAg
ICAgICAgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb246IHdoZW4gcmVhZCByZXR1cm5zIGVt
cHR5CisgICAgICAgICAgICAgICAgc3RyaW5nLgorICAgICAgICAgICAgSW52YWxpZEZyYW1lRXhj
ZXB0aW9uOiB3aGVuIHRoZSBmcmFtZSBjb250YWlucyBpbnZhbGlkCisgICAgICAgICAgICAgICAg
ZGF0YS4KKyAgICAgICAgICAgIFVuc3VwcG9ydGVkRnJhbWVFeGNlcHRpb246IHdoZW4gdGhlIHJl
Y2VpdmVkIGZyYW1lIGhhcworICAgICAgICAgICAgICAgIGZsYWdzLCBvcGNvZGUgd2UgY2Fubm90
IGhhbmRsZS4gWW91IGNhbiBpZ25vcmUgdGhpcworICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiBh
bmQgY29udGludWUgcmVjZWl2aW5nIHRoZSBuZXh0IGZyYW1lLgorICAgICAgICAiIiIKKworICAg
ICAgICBpZiBzZWxmLl9yZXF1ZXN0LmNsaWVudF90ZXJtaW5hdGVkOgorICAgICAgICAgICAgcmFp
c2UgQmFkT3BlcmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdSZXF1ZXN0ZWQgcmVj
ZWl2ZV9tZXNzYWdlIGFmdGVyIHJlY2VpdmluZyBhIGNsb3NpbmcgJworICAgICAgICAgICAgICAg
ICdoYW5kc2hha2UnKQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIG1wX2Nv
bm4ucmVhZCB3aWxsIGJsb2NrIGlmIG5vIGJ5dGVzIGFyZSBhdmFpbGFibGUuCisgICAgICAgICAg
ICAjIFRpbWVvdXQgaXMgY29udHJvbGxlZCBieSBUaW1lT3V0IGRpcmVjdGl2ZSBvZiBBcGFjaGUu
CisKKyAgICAgICAgICAgIGZyYW1lID0gc2VsZi5fcmVjZWl2ZV9mcmFtZV9hc19mcmFtZV9vYmpl
Y3QoKQorCisgICAgICAgICAgICBmb3IgZnJhbWVfZmlsdGVyIGluIHNlbGYuX29wdGlvbnMuaW5j
b21pbmdfZnJhbWVfZmlsdGVyczoKKyAgICAgICAgICAgICAgICBmcmFtZV9maWx0ZXIuZmlsdGVy
KGZyYW1lKQorCisgICAgICAgICAgICBpZiBmcmFtZS5yc3YxIG9yIGZyYW1lLnJzdjIgb3IgZnJh
bWUucnN2MzoKKyAgICAgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9u
KAorICAgICAgICAgICAgICAgICAgICAnVW5zdXBwb3J0ZWQgZmxhZyBpcyBzZXQgKHJzdiA9ICVk
JWQlZCknICUKKyAgICAgICAgICAgICAgICAgICAgKGZyYW1lLnJzdjEsIGZyYW1lLnJzdjIsIGZy
YW1lLnJzdjMpKQorCisgICAgICAgICAgICBpZiBmcmFtZS5vcGNvZGUgPT0gY29tbW9uLk9QQ09E
RV9DT05USU5VQVRJT046CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlY2VpdmVkX2Zy
YWdtZW50czoKKyAgICAgICAgICAgICAgICAgICAgaWYgZnJhbWUuZmluOgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZyYW1lRXhjZXB0aW9uKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdSZWNlaXZlZCBhIHRlcm1pbmF0aW9uIGZyYW1lIGJ1dCBmcmFnbWVudGF0
aW9uICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm90IHN0YXJ0ZWQnKQorICAgICAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW52YWxp
ZEZyYW1lRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWNlaXZlZCBh
biBpbnRlcm1lZGlhdGUgZnJhbWUgYnV0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
ZnJhZ21lbnRhdGlvbiBub3Qgc3RhcnRlZCcpCisKKyAgICAgICAgICAgICAgICBpZiBmcmFtZS5m
aW46CisgICAgICAgICAgICAgICAgICAgICMgRW5kIG9mIGZyYWdtZW50YXRpb24gZnJhbWUKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fcmVjZWl2ZWRfZnJhZ21lbnRzLmFwcGVuZChmcmFtZS5w
YXlsb2FkKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gJycuam9pbihzZWxmLl9yZWNl
aXZlZF9mcmFnbWVudHMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlY2VpdmVkX2ZyYWdt
ZW50cyA9IFtdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBJ
bnRlcm1lZGlhdGUgZnJhbWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVjZWl2ZWRfZnJh
Z21lbnRzLmFwcGVuZChmcmFtZS5wYXlsb2FkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9yZWNlaXZlZF9m
cmFnbWVudHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGZyYW1lLmZpbjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJhaXNlIEludmFsaWRGcmFtZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnUmVjZWl2ZWQgYW4gdW5mcmFnbWVudGVkIGZyYW1lIHdpdGhvdXQgJwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXJtaW5hdGluZyBleGlzdGluZyBmcmFnbWVu
dGF0aW9uJykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIEludmFsaWRGcmFtZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnTmV3IGZyYWdtZW50YXRpb24gc3RhcnRlZCB3aXRob3V0IHRlcm1pbmF0aW5nICcKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhpc3RpbmcgZnJhZ21lbnRhdGlvbicpCisKKyAg
ICAgICAgICAgICAgICBpZiBmcmFtZS5maW46CisgICAgICAgICAgICAgICAgICAgICMgVW5mcmFn
bWVudGVkIGZyYW1lCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1vbi5pc19jb250cm9s
X29wY29kZShmcmFtZS5vcGNvZGUpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGZy
YW1lLnBheWxvYWQpID4gMTI1KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEludmFs
aWRGcmFtZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXBwbGljYXRp
b24gZGF0YSBzaXplIG9mIGNvbnRyb2wgZnJhbWVzIG11c3QgYmUgJworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICcxMjUgYnl0ZXMgb3IgbGVzcycpCisKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5fb3JpZ2luYWxfb3Bjb2RlID0gZnJhbWUub3Bjb2RlCisgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2UgPSBmcmFtZS5wYXlsb2FkCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICAgICAgIyBTdGFydCBvZiBmcmFnbWVudGF0aW9uIGZyYW1lCisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgY29tbW9uLmlzX2NvbnRyb2xfb3Bjb2RlKGZyYW1lLm9wY29kZSk6CisgICAg
ICAgICAgICAgICAgICAgICAgICByYWlzZSBJbnZhbGlkRnJhbWVFeGNlcHRpb24oCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ0NvbnRyb2wgZnJhbWVzIG11c3Qgbm90IGJlIGZyYWdtZW50
ZWQnKQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX29yaWdpbmFsX29wY29kZSA9IGZyYW1l
Lm9wY29kZQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWNlaXZlZF9mcmFnbWVudHMuYXBw
ZW5kKGZyYW1lLnBheWxvYWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAg
ICAgICAgIGlmIHNlbGYuX29yaWdpbmFsX29wY29kZSA9PSBjb21tb24uT1BDT0RFX1RFWFQ6Cisg
ICAgICAgICAgICAgICAgIyBUaGUgV2ViU29ja2V0IHByb3RvY29sIHNlY3Rpb24gNC40IHNwZWNp
ZmllcyB0aGF0IGludmFsaWQKKyAgICAgICAgICAgICAgICAjIGNoYXJhY3RlcnMgbXVzdCBiZSBy
ZXBsYWNlZCB3aXRoIFUrZmZmZCBSRVBMQUNFTUVOVAorICAgICAgICAgICAgICAgICMgQ0hBUkFD
VEVSLgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1l
c3NhZ2UuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNv
ZGVFcnJvciwgZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW52YWxpZFVURjhFeGNlcHRp
b24oZSkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fb3JpZ2luYWxfb3Bjb2RlID09IGNvbW1vbi5P
UENPREVfQklOQVJZOgorICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlCisgICAgICAgICAg
ICBlbGlmIHNlbGYuX29yaWdpbmFsX29wY29kZSA9PSBjb21tb24uT1BDT0RFX0NMT1NFOgorICAg
ICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QuY2xpZW50X3Rlcm1pbmF0ZWQgPSBUcnVlCisKKyAg
ICAgICAgICAgICAgICAjIFN0YXR1cyBjb2RlIGlzIG9wdGlvbmFsLiBXZSBjYW4gaGF2ZSBzdGF0
dXMgcmVhc29uIG9ubHkgaWYgd2UKKyAgICAgICAgICAgICAgICAjIGhhdmUgc3RhdHVzIGNvZGUu
IFN0YXR1cyByZWFzb24gY2FuIGJlIGVtcHR5IHN0cmluZy4gU28sCisgICAgICAgICAgICAgICAg
IyBhbGxvd2VkIGNhc2VzIGFyZQorICAgICAgICAgICAgICAgICMgLSBubyBhcHBsaWNhdGlvbiBk
YXRhOiBubyBjb2RlIG5vIHJlYXNvbgorICAgICAgICAgICAgICAgICMgLSAyIG9jdGV0IG9mIGFw
cGxpY2F0aW9uIGRhdGE6IGhhcyBjb2RlIGJ1dCBubyByZWFzb24KKyAgICAgICAgICAgICAgICAj
IC0gMyBvciBtb3JlIG9jdGV0IG9mIGFwcGxpY2F0aW9uIGRhdGE6IGJvdGggY29kZSBhbmQgcmVh
c29uCisgICAgICAgICAgICAgICAgaWYgbGVuKG1lc3NhZ2UpID09IDE6CisgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIEludmFsaWRGcmFtZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICdJZiBhIGNsb3NlIGZyYW1lIGhhcyBzdGF0dXMgY29kZSwgdGhlIGxlbmd0aCBvZiAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzIGNvZGUgbXVzdCBiZSAyIG9jdGV0JykKKyAg
ICAgICAgICAgICAgICBlbGlmIGxlbihtZXNzYWdlKSA+PSAyOgorICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9yZXF1ZXN0LndzX2Nsb3NlX2NvZGUgPSBzdHJ1Y3QudW5wYWNrKAorICAgICAgICAg
ICAgICAgICAgICAgICAgJyFIJywgbWVzc2FnZVswOjJdKVswXQorICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9yZXF1ZXN0LndzX2Nsb3NlX3JlYXNvbiA9IG1lc3NhZ2VbMjpdLmRlY29kZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICd1dGYtOCcsICdyZXBsYWNlJykKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgICAgICAgICAgICAgJ1JlY2Vp
dmVkIGNsb3NlIGZyYW1lIChjb2RlPSVkLCByZWFzb249JXIpJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfY2xvc2VfY29kZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3JlcXVlc3Qud3NfY2xvc2VfcmVhc29uKQorCisgICAgICAgICAgICAgICAgIyBE
cmFpbiBqdW5rIGRhdGEgYWZ0ZXIgdGhlIGNsb3NlIGZyYW1lIGlmIG5lY2Vzc2FyeS4KKyAgICAg
ICAgICAgICAgICBzZWxmLl9kcmFpbl9yZWNlaXZlZF9kYXRhKCkKKworICAgICAgICAgICAgICAg
IGlmIHNlbGYuX3JlcXVlc3Quc2VydmVyX3Rlcm1pbmF0ZWQ6CisgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAgICAgICAgICdSZWNlaXZlZCBh
Y2sgZm9yIHNlcnZlci1pbml0aWF0ZWQgY2xvc2luZyAnCisgICAgICAgICAgICAgICAgICAgICAg
ICAnaGFuZHNoYWtlJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAg
ICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAgICAgJ1JlY2Vp
dmVkIGNsaWVudC1pbml0aWF0ZWQgY2xvc2luZyBoYW5kc2hha2UnKQorCisgICAgICAgICAgICAg
ICAgY29kZSA9IGNvbW1vbi5TVEFUVVNfTk9STUFMX0NMT1NVUkUKKyAgICAgICAgICAgICAgICBy
ZWFzb24gPSAnJworICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fcmVxdWVzdCwgJ19k
aXNwYXRjaGVyJyk6CisgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXIgPSBzZWxmLl9yZXF1
ZXN0Ll9kaXNwYXRjaGVyCisgICAgICAgICAgICAgICAgICAgIGNvZGUsIHJlYXNvbiA9IGRpc3Bh
dGNoZXIucGFzc2l2ZV9jbG9zaW5nX2hhbmRzaGFrZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3JlcXVlc3QpCisgICAgICAgICAgICAgICAgc2VsZi5fc2VuZF9jbG9zaW5nX2hhbmRz
aGFrZShjb2RlLCByZWFzb24pCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAor
ICAgICAgICAgICAgICAgICAgICAnU2VudCBhY2sgZm9yIGNsaWVudC1pbml0aWF0ZWQgY2xvc2lu
ZyBoYW5kc2hha2UnKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBl
bGlmIHNlbGYuX29yaWdpbmFsX29wY29kZSA9PSBjb21tb24uT1BDT0RFX1BJTkc6CisgICAgICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gc2VsZi5fcmVxdWVz
dC5vbl9waW5nX2hhbmRsZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgaGFuZGxlcjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZXIoc2VsZi5fcmVxdWVzdCwgbWVzc2FnZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJp
YnV0ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAg
c2VsZi5fc2VuZF9wb25nKG1lc3NhZ2UpCisgICAgICAgICAgICBlbGlmIHNlbGYuX29yaWdpbmFs
X29wY29kZSA9PSBjb21tb24uT1BDT0RFX1BPTkc6CisgICAgICAgICAgICAgICAgIyBUT0RPKHR5
b3NoaW5vKTogQWRkIHBpbmcgdGltZW91dCBoYW5kbGluZy4KKworICAgICAgICAgICAgICAgIGlu
ZmxpZ2h0X3BpbmdzID0gZGVxdWUoKQorCisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAg
ICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRf
Ym9keSA9IHNlbGYuX3BpbmdfcXVldWUucG9wbGVmdCgpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBleHBlY3RlZF9ib2R5ID09IG1lc3NhZ2U6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBpbmZsaWdodF9waW5ncyBjb250YWlucyBwaW5ncyBpZ25vcmVkIGJ5IHRoZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICMgb3RoZXIgcGVlci4gSnVzdCBmb3JnZXQgdGhlbS4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdQaW5nICVyIGlzIGFja2VkICglZCBwaW5ncyB3ZXJlIGln
bm9yZWQpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYm9keSwg
bGVuKGluZmxpZ2h0X3BpbmdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmZsaWdodF9waW5ncy5hcHBlbmQoZXhwZWN0ZWRfYm9keSkKKyAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0IEluZGV4RXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBy
ZWNlaXZlZCBwb25nIHdhcyB1bnNvbGljaXRlZCBwb25nLiBLZWVwIHRoZQorICAgICAgICAgICAg
ICAgICAgICAgICAgIyBwaW5nIHF1ZXVlIGFzIGlzLgorICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fcGluZ19xdWV1ZSA9IGluZmxpZ2h0X3BpbmdzCisgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9sb2dnZXIuZGVidWcoJ1JlY2VpdmVkIGEgdW5zb2xpY2l0ZWQgcG9uZycpCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVyID0gc2VsZi5fcmVxdWVzdC5vbl9wb25nX2hhbmRsZXIKKyAg
ICAgICAgICAgICAgICAgICAgaWYgaGFuZGxlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZXIoc2VsZi5fcmVxdWVzdCwgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgorICAgICAg
ICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9u
KAorICAgICAgICAgICAgICAgICAgICAnT3Bjb2RlICVkIGlzIG5vdCBzdXBwb3J0ZWQnICUgc2Vs
Zi5fb3JpZ2luYWxfb3Bjb2RlKQorCisgICAgZGVmIF9zZW5kX2Nsb3NpbmdfaGFuZHNoYWtlKHNl
bGYsIGNvZGUsIHJlYXNvbik6CisgICAgICAgIGlmIGNvZGUgPj0gKDEgPDwgMTYpIG9yIGNvZGUg
PCAwOgorICAgICAgICAgICAgcmFpc2UgQmFkT3BlcmF0aW9uRXhjZXB0aW9uKCdTdGF0dXMgY29k
ZSBpcyBvdXQgb2YgcmFuZ2UnKQorCisgICAgICAgIGVuY29kZWRfcmVhc29uID0gcmVhc29uLmVu
Y29kZSgndXRmLTgnKQorICAgICAgICBpZiBsZW4oZW5jb2RlZF9yZWFzb24pICsgMiA+IDEyNToK
KyAgICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAg
ICAnQXBwbGljYXRpb24gZGF0YSBzaXplIG9mIGNsb3NlIGZyYW1lcyBtdXN0IGJlIDEyNSBieXRl
cyBvciAnCisgICAgICAgICAgICAgICAgJ2xlc3MnKQorCisgICAgICAgIGZyYW1lID0gY3JlYXRl
X2Nsb3NlX2ZyYW1lKAorICAgICAgICAgICAgc3RydWN0LnBhY2soJyFIJywgY29kZSkgKyBlbmNv
ZGVkX3JlYXNvbiwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubWFza19zZW5kLAorICAgICAg
ICAgICAgc2VsZi5fb3B0aW9ucy5vdXRnb2luZ19mcmFtZV9maWx0ZXJzKQorCisgICAgICAgIHNl
bGYuX3JlcXVlc3Quc2VydmVyX3Rlcm1pbmF0ZWQgPSBUcnVlCisKKyAgICAgICAgc2VsZi5fd3Jp
dGUoZnJhbWUpCisKKyAgICBkZWYgY2xvc2VfY29ubmVjdGlvbihzZWxmLCBjb2RlPWNvbW1vbi5T
VEFUVVNfTk9STUFMX0NMT1NVUkUsIHJlYXNvbj0nJyk6CisgICAgICAgICIiIkNsb3NlcyBhIFdl
YlNvY2tldCBjb25uZWN0aW9uLiIiIgorCisgICAgICAgIGlmIHNlbGYuX3JlcXVlc3Quc2VydmVy
X3Rlcm1pbmF0ZWQ6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAg
ICAgICAgJ1JlcXVlc3RlZCBjbG9zZV9jb25uZWN0aW9uIGJ1dCBzZXJ2ZXIgaXMgYWxyZWFkeSB0
ZXJtaW5hdGVkJykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX3NlbmRfY2xv
c2luZ19oYW5kc2hha2UoY29kZSwgcmVhc29uKQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWco
J1NlbnQgc2VydmVyLWluaXRpYXRlZCBjbG9zaW5nIGhhbmRzaGFrZScpCisKKyAgICAgICAgaWYg
KGNvZGUgPT0gY29tbW9uLlNUQVRVU19HT0lOR19BV0FZIG9yCisgICAgICAgICAgICBjb2RlID09
IGNvbW1vbi5TVEFUVVNfUFJPVE9DT0xfRVJST1IpOgorICAgICAgICAgICAgIyBJdCBkb2Vzbid0
IG1ha2Ugc2Vuc2UgdG8gd2FpdCBmb3IgYSBjbG9zZSBmcmFtZSBpZiB0aGUgcmVhc29uIGlzCisg
ICAgICAgICAgICAjIHByb3RvY29sIGVycm9yIG9yIHRoYXQgdGhlIHNlcnZlciBpcyBnb2luZyBh
d2F5LiBGb3Igc29tZSBvZgorICAgICAgICAgICAgIyBvdGhlciByZWFzb25zLCBpdCBtaWdodCBu
b3QgbWFrZSBzZW5zZSB0byB3YWl0IGZvciBhIGNsb3NlIGZyYW1lLAorICAgICAgICAgICAgIyBi
dXQgaXQncyBub3QgY2xlYXIsIHlldC4KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMg
VE9ETyh1a2FpKTogMi4gd2FpdCB1bnRpbCB0aGUgL2NsaWVudCB0ZXJtaW5hdGVkLyBmbGFnIGhh
cyBiZWVuIHNldCwKKyAgICAgICAgIyBvciB1bnRpbCBhIHNlcnZlci1kZWZpbmVkIHRpbWVvdXQg
ZXhwaXJlcy4KKyAgICAgICAgIworICAgICAgICAjIEZvciBub3csIHdlIGV4cGVjdCByZWNlaXZp
bmcgY2xvc2luZyBoYW5kc2hha2UgcmlnaHQgYWZ0ZXIgc2VuZGluZworICAgICAgICAjIG91dCBj
bG9zaW5nIGhhbmRzaGFrZS4KKyAgICAgICAgbWVzc2FnZSA9IHNlbGYucmVjZWl2ZV9tZXNzYWdl
KCkKKyAgICAgICAgaWYgbWVzc2FnZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIENv
bm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdEaWRuXCd0IHJl
Y2VpdmUgdmFsaWQgYWNrIGZvciBjbG9zaW5nIGhhbmRzaGFrZScpCisgICAgICAgICMgVE9ETzog
My4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLgorICAgICAgICAjIG5vdGU6IG1vZF9w
eXRob24gQ29ubmVjdGlvbiAobXBfY29ubikgZG9lc24ndCBoYXZlIGNsb3NlIG1ldGhvZC4KKwor
ICAgIGRlZiBzZW5kX3Bpbmcoc2VsZiwgYm9keT0nJyk6CisgICAgICAgIGlmIGxlbihib2R5KSA+
IDEyNToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgJ0Fw
cGxpY2F0aW9uIGRhdGEgc2l6ZSBvZiBjb250cm9sIGZyYW1lcyBtdXN0IGJlIDEyNSBieXRlcyBv
ciAnCisgICAgICAgICAgICAgICAgJ2xlc3MnKQorICAgICAgICBmcmFtZSA9IGNyZWF0ZV9waW5n
X2ZyYW1lKAorICAgICAgICAgICAgYm9keSwKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbnMubWFz
a19zZW5kLAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5vdXRnb2luZ19mcmFtZV9maWx0ZXJz
KQorICAgICAgICBzZWxmLl93cml0ZShmcmFtZSkKKworICAgICAgICBzZWxmLl9waW5nX3F1ZXVl
LmFwcGVuZChib2R5KQorCisgICAgZGVmIF9zZW5kX3Bvbmcoc2VsZiwgYm9keSk6CisgICAgICAg
IGlmIGxlbihib2R5KSA+IDEyNToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAg
ICAgICAgICAgICAgJ0FwcGxpY2F0aW9uIGRhdGEgc2l6ZSBvZiBjb250cm9sIGZyYW1lcyBtdXN0
IGJlIDEyNSBieXRlcyBvciAnCisgICAgICAgICAgICAgICAgJ2xlc3MnKQorICAgICAgICBmcmFt
ZSA9IGNyZWF0ZV9wb25nX2ZyYW1lKAorICAgICAgICAgICAgYm9keSwKKyAgICAgICAgICAgIHNl
bGYuX29wdGlvbnMubWFza19zZW5kLAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5vdXRnb2lu
Z19mcmFtZV9maWx0ZXJzKQorICAgICAgICBzZWxmLl93cml0ZShmcmFtZSkKKworICAgIGRlZiBf
ZHJhaW5fcmVjZWl2ZWRfZGF0YShzZWxmKToKKyAgICAgICAgIiIiRHJhaW5zIHVucmVhZCBkYXRh
IGluIHRoZSByZWNlaXZlIGJ1ZmZlciB0byBhdm9pZCBzZW5kaW5nIG91dCBUQ1AKKyAgICAgICAg
UlNUIHBhY2tldC4gVGhpcyBpcyBiZWNhdXNlIHdoZW4gZGVmbGF0ZS1zdHJlYW0gaXMgZW5hYmxl
ZCwgc29tZQorICAgICAgICBERUZMQVRFIGJsb2NrIGZvciBmbHVzaGluZyBkYXRhIG1heSBmb2xs
b3cgYSBjbG9zZSBmcmFtZS4gSWYgYW55IGRhdGEKKyAgICAgICAgcmVtYWlucyBpbiB0aGUgcmVj
ZWl2ZSBidWZmZXIgb2YgYSBzb2NrZXQgd2hlbiB0aGUgc29ja2V0IGlzIGNsb3NlZCwKKyAgICAg
ICAgaXQgc2VuZHMgb3V0IFRDUCBSU1QgcGFja2V0IHRvIHRoZSBvdGhlciBwZWVyLgorCisgICAg
ICAgIFNpbmNlIG1vZF9weXRob24ncyBtcF9jb25uIG9iamVjdCBkb2Vzbid0IHN1cHBvcnQgbm9u
LWJsb2NraW5nIHJlYWQsCisgICAgICAgIHdlIHBlcmZvcm0gdGhpcyBvbmx5IHdoZW4gcHl3ZWJz
b2NrZXQgaXMgcnVubmluZyBpbiBzdGFuZGFsb25lIG1vZGUuCisgICAgICAgICIiIgorCisgICAg
ICAgICMgSWYgc2VsZi5fb3B0aW9ucy5kZWZsYXRlX3N0cmVhbSBpcyB0cnVlLCBzZWxmLl9yZXF1
ZXN0IGlzCisgICAgICAgICMgRGVmbGF0ZVJlcXVlc3QsIHNvIHdlIGNhbiBnZXQgd3JhcHBlZCBy
ZXF1ZXN0IG9iamVjdCBieQorICAgICAgICAjIHNlbGYuX3JlcXVlc3QuX3JlcXVlc3QuCisgICAg
ICAgICMKKyAgICAgICAgIyBPbmx5IF9TdGFuZGFsb25lUmVxdWVzdCBoYXMgX2RyYWluX3JlY2Vp
dmVkX2RhdGEgbWV0aG9kLgorICAgICAgICBpZiAoc2VsZi5fb3B0aW9ucy5kZWZsYXRlX3N0cmVh
bSBhbmQKKyAgICAgICAgICAgICgnX2RyYWluX3JlY2VpdmVkX2RhdGEnIGluIGRpcihzZWxmLl9y
ZXF1ZXN0Ll9yZXF1ZXN0KSkpOgorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC5fcmVxdWVzdC5f
ZHJhaW5fcmVjZWl2ZWRfZGF0YSgpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L2NvbW1v
bi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQv
Y29tbW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhNjcwYmI0MmVlYjE1MjYzODE5ODk5NzdmZDI3NGMzMDNi
ZGM0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvbW9kX3B5d2Vic29ja2V0L2NvbW1vbi5weQpAQCAtMCwwICsxLDE3OSBAQAorIyBDb3B5cmln
aHQgMjAxMiwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
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
QU1BR0UuCisKKworIyBDb25zdGFudHMgaW5kaWNhdGluZyBXZWJTb2NrZXQgcHJvdG9jb2wgdmVy
c2lvbi4KK1ZFUlNJT05fSElYSUU3NSA9IC0xCitWRVJTSU9OX0hZQkkwMCA9IDAKK1ZFUlNJT05f
SFlCSTAxID0gMQorVkVSU0lPTl9IWUJJMDIgPSAyCitWRVJTSU9OX0hZQkkwMyA9IDIKK1ZFUlNJ
T05fSFlCSTA0ID0gNAorVkVSU0lPTl9IWUJJMDUgPSA1CitWRVJTSU9OX0hZQkkwNiA9IDYKK1ZF
UlNJT05fSFlCSTA3ID0gNworVkVSU0lPTl9IWUJJMDggPSA4CitWRVJTSU9OX0hZQkkwOSA9IDgK
K1ZFUlNJT05fSFlCSTEwID0gOAorVkVSU0lPTl9IWUJJMTEgPSA4CitWRVJTSU9OX0hZQkkxMiA9
IDgKK1ZFUlNJT05fSFlCSTEzID0gMTMKK1ZFUlNJT05fSFlCSTE0ID0gMTMKK1ZFUlNJT05fSFlC
STE1ID0gMTMKK1ZFUlNJT05fSFlCSTE2ID0gMTMKK1ZFUlNJT05fSFlCSTE3ID0gMTMKKworIyBD
b25zdGFudHMgaW5kaWNhdGluZyBXZWJTb2NrZXQgcHJvdG9jb2wgbGF0ZXN0IHZlcnNpb24uCitW
RVJTSU9OX0hZQklfTEFURVNUID0gVkVSU0lPTl9IWUJJMTMKKworIyBQb3J0IG51bWJlcnMKK0RF
RkFVTFRfV0VCX1NPQ0tFVF9QT1JUID0gODAKK0RFRkFVTFRfV0VCX1NPQ0tFVF9TRUNVUkVfUE9S
VCA9IDQ0MworCisjIFNjaGVtZXMKK1dFQl9TT0NLRVRfU0NIRU1FID0gJ3dzJworV0VCX1NPQ0tF
VF9TRUNVUkVfU0NIRU1FID0gJ3dzcycKKworIyBGcmFtZSBvcGNvZGVzIGRlZmluZWQgaW4gdGhl
IHNwZWMuCitPUENPREVfQ09OVElOVUFUSU9OID0gMHgwCitPUENPREVfVEVYVCA9IDB4MQorT1BD
T0RFX0JJTkFSWSA9IDB4MgorT1BDT0RFX0NMT1NFID0gMHg4CitPUENPREVfUElORyA9IDB4OQor
T1BDT0RFX1BPTkcgPSAweGEKKworIyBVVUlEcyB1c2VkIGJ5IEh5QmkgMDQgYW5kIGxhdGVyIG9w
ZW5pbmcgaGFuZHNoYWtlIGFuZCBmcmFtZSBtYXNraW5nLgorV0VCU09DS0VUX0FDQ0VQVF9VVUlE
ID0gJzI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMScKKworIyBPcGVuaW5nIGhh
bmRzaGFrZSBoZWFkZXIgbmFtZXMgYW5kIGV4cGVjdGVkIHZhbHVlcy4KK1VQR1JBREVfSEVBREVS
ID0gJ1VwZ3JhZGUnCitXRUJTT0NLRVRfVVBHUkFERV9UWVBFID0gJ3dlYnNvY2tldCcKK1dFQlNP
Q0tFVF9VUEdSQURFX1RZUEVfSElYSUU3NSA9ICdXZWJTb2NrZXQnCitDT05ORUNUSU9OX0hFQURF
UiA9ICdDb25uZWN0aW9uJworVVBHUkFERV9DT05ORUNUSU9OX1RZUEUgPSAnVXBncmFkZScKK0hP
U1RfSEVBREVSID0gJ0hvc3QnCitPUklHSU5fSEVBREVSID0gJ09yaWdpbicKK1NFQ19XRUJTT0NL
RVRfT1JJR0lOX0hFQURFUiA9ICdTZWMtV2ViU29ja2V0LU9yaWdpbicKK1NFQ19XRUJTT0NLRVRf
S0VZX0hFQURFUiA9ICdTZWMtV2ViU29ja2V0LUtleScKK1NFQ19XRUJTT0NLRVRfQUNDRVBUX0hF
QURFUiA9ICdTZWMtV2ViU29ja2V0LUFjY2VwdCcKK1NFQ19XRUJTT0NLRVRfVkVSU0lPTl9IRUFE
RVIgPSAnU2VjLVdlYlNvY2tldC1WZXJzaW9uJworU0VDX1dFQlNPQ0tFVF9QUk9UT0NPTF9IRUFE
RVIgPSAnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcKK1NFQ19XRUJTT0NLRVRfRVhURU5TSU9OU19I
RUFERVIgPSAnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJworU0VDX1dFQlNPQ0tFVF9EUkFGVF9I
RUFERVIgPSAnU2VjLVdlYlNvY2tldC1EcmFmdCcKK1NFQ19XRUJTT0NLRVRfS0VZMV9IRUFERVIg
PSAnU2VjLVdlYlNvY2tldC1LZXkxJworU0VDX1dFQlNPQ0tFVF9LRVkyX0hFQURFUiA9ICdTZWMt
V2ViU29ja2V0LUtleTInCitTRUNfV0VCU09DS0VUX0xPQ0FUSU9OX0hFQURFUiA9ICdTZWMtV2Vi
U29ja2V0LUxvY2F0aW9uJworCisjIEV4dGVuc2lvbnMKK0RFRkxBVEVfU1RSRUFNX0VYVEVOU0lP
TiA9ICdkZWZsYXRlLXN0cmVhbScKK0RFRkxBVEVfRlJBTUVfRVhURU5TSU9OID0gJ2RlZmxhdGUt
ZnJhbWUnCitYX1dFQktJVF9ERUZMQVRFX0ZSQU1FX0VYVEVOU0lPTiA9ICd4LXdlYmtpdC1kZWZs
YXRlLWZyYW1lJworCisjIFN0YXR1cyBjb2RlcworIyBDb2RlIFNUQVRVU19OT19TVEFUVVNfUkVD
RUlWRUQsIFNUQVRVU19BQk5PUk1BTF9DTE9TVVJFLCBhbmQKKyMgU1RBVFVTX1RMU19IQU5EU0hB
S0UgYXJlIHBzZXVkbyBjb2RlcyB0byBpbmRpY2F0ZSBzcGVjaWZpYyBlcnJvciBjYXNlcy4KKyMg
Q291bGQgbm90IGJlIHVzZWQgZm9yIGNvZGVzIGluIGFjdHVhbCBjbG9zaW5nIGZyYW1lcy4KKyMg
QXBwbGljYXRpb24gbGV2ZWwgZXJyb3JzIG11c3QgdXNlIGNvZGVzIGluIHRoZSByYW5nZQorIyBT
VEFUVVNfVVNFUl9SRUdJU1RFUkVEX0JBU0UgdG8gU1RBVFVTX1VTRVJfUFJJVkFURV9NQVguIFRo
ZSBjb2RlcyBpbiB0aGUKKyMgcmFuZ2UgU1RBVFVTX1VTRVJfUkVHSVNURVJFRF9CQVNFIHRvIFNU
QVRVU19VU0VSX1JFR0lTVEVSRURfTUFYIGFyZSBtYW5hZ2VkCisjIGJ5IElBTkEuIFVzdWFsbHkg
YXBwbGljYXRpb24gbXVzdCBkZWZpbmUgdXNlciBwcm90b2NvbCBsZXZlbCBlcnJvcnMgaW4gdGhl
CisjIHJhbmdlIFNUQVRVU19VU0VSX1BSSVZBVEVfQkFTRSB0byBTVEFUVVNfVVNFUl9QUklWQVRF
X01BWC4KK1NUQVRVU19OT1JNQUxfQ0xPU1VSRSA9IDEwMDAKK1NUQVRVU19HT0lOR19BV0FZID0g
MTAwMQorU1RBVFVTX1BST1RPQ09MX0VSUk9SID0gMTAwMgorU1RBVFVTX1VOU1VQUE9SVEVEX0RB
VEEgPSAxMDAzCitTVEFUVVNfTk9fU1RBVFVTX1JFQ0VJVkVEID0gMTAwNQorU1RBVFVTX0FCTk9S
TUFMX0NMT1NVUkUgPSAxMDA2CitTVEFUVVNfSU5WQUxJRF9GUkFNRV9QQVlMT0FEX0RBVEEgPSAx
MDA3CitTVEFUVVNfUE9MSUNZX1ZJT0xBVElPTiA9IDEwMDgKK1NUQVRVU19NRVNTQUdFX1RPT19C
SUcgPSAxMDA5CitTVEFUVVNfTUFOREFUT1JZX0VYVEVOU0lPTiA9IDEwMTAKK1NUQVRVU19JTlRF
Uk5BTF9TRVJWRVJfRVJST1IgPSAxMDExCitTVEFUVVNfVExTX0hBTkRTSEFLRSA9IDEwMTUKK1NU
QVRVU19VU0VSX1JFR0lTVEVSRURfQkFTRSA9IDMwMDAKK1NUQVRVU19VU0VSX1JFR0lTVEVSRURf
TUFYID0gMzk5OQorU1RBVFVTX1VTRVJfUFJJVkFURV9CQVNFID0gNDAwMAorU1RBVFVTX1VTRVJf
UFJJVkFURV9NQVggPSA0OTk5CisjIEZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgYWxpYXNlcyB0
byBrZWVwIGNvbXBhdGliaWxpdHkuIEFwcGxpY2F0aW9ucyBtdXN0CisjIG5vdCB1c2UgdGhlc2Ug
b2Jzb2xldGVkIGRlZmluaXRpb25zIGFueW1vcmUuCitTVEFUVVNfTk9STUFMID0gU1RBVFVTX05P
Uk1BTF9DTE9TVVJFCitTVEFUVVNfVU5TVVBQT1JURUQgPSBTVEFUVVNfVU5TVVBQT1JURURfREFU
QQorU1RBVFVTX0NPREVfTk9UX0FWQUlMQUJMRSA9IFNUQVRVU19OT19TVEFUVVNfUkVDRUlWRUQK
K1NUQVRVU19BQk5PUk1BTF9DTE9TRSA9IFNUQVRVU19BQk5PUk1BTF9DTE9TVVJFCitTVEFUVVNf
SU5WQUxJRF9GUkFNRV9QQVlMT0FEID0gU1RBVFVTX0lOVkFMSURfRlJBTUVfUEFZTE9BRF9EQVRB
CitTVEFUVVNfTUFOREFUT1JZX0VYVCA9IFNUQVRVU19NQU5EQVRPUllfRVhURU5TSU9OCisKKyMg
SFRUUCBzdGF0dXMgY29kZXMKK0hUVFBfU1RBVFVTX0JBRF9SRVFVRVNUID0gNDAwCitIVFRQX1NU
QVRVU19GT1JCSURERU4gPSA0MDMKK0hUVFBfU1RBVFVTX05PVF9GT1VORCA9IDQwNAorCisKK2Rl
ZiBpc19jb250cm9sX29wY29kZShvcGNvZGUpOgorICAgIHJldHVybiAob3Bjb2RlID4+IDMpID09
IDEKKworCitjbGFzcyBFeHRlbnNpb25QYXJhbWV0ZXIob2JqZWN0KToKKyAgICAiIiJIb2xkcyBp
bmZvcm1hdGlvbiBhYm91dCBhbiBleHRlbnNpb24gd2hpY2ggaXMgZXhjaGFuZ2VkIG9uIGV4dGVu
c2lvbgorICAgIG5lZ290aWF0aW9uIGluIG9wZW5pbmcgaGFuZHNoYWtlLgorICAgICIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQor
ICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBDaGFuZ2UgdGhlIGRhdGEgc3RydWN0dXJlIHRvIG1v
cmUgZWZmaWNpZW50IG9uZSBzdWNoCisgICAgICAgICMgYXMgZGljdCB3aGVuIHRoZSBzcGVjIGNo
YW5nZXMgdG8gc2F5IGxpa2UKKyAgICAgICAgIyAtIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIHVu
aXF1ZQorICAgICAgICAjIC0gVGhlIG9yZGVyIG9mIHBhcmFtZXRlcnMgaXMgbm90IHNpZ25pZmlj
YW50CisgICAgICAgIHNlbGYuX3BhcmFtZXRlcnMgPSBbXQorCisgICAgZGVmIG5hbWUoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgYWRkX3BhcmFtZXRlcihzZWxm
LCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3BhcmFtZXRlcnMuYXBwZW5kKChuYW1lLCB2
YWx1ZSkpCisKKyAgICBkZWYgZ2V0X3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9wYXJhbWV0ZXJzCisKKyAgICBkZWYgZ2V0X3BhcmFtZXRlcl9uYW1lcyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuIFtuYW1lIGZvciBuYW1lLCB1bnVzZWRfdmFsdWUgaW4gc2VsZi5fcGFyYW1l
dGVyc10KKworICAgIGRlZiBoYXNfcGFyYW1ldGVyKHNlbGYsIG5hbWUpOgorICAgICAgICBmb3Ig
cGFyYW1fbmFtZSwgcGFyYW1fdmFsdWUgaW4gc2VsZi5fcGFyYW1ldGVyczoKKyAgICAgICAgICAg
IGlmIHBhcmFtX25hbWUgPT0gbmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBnZXRfcGFyYW1ldGVyX3ZhbHVlKHNlbGYsIG5h
bWUpOgorICAgICAgICBmb3IgcGFyYW1fbmFtZSwgcGFyYW1fdmFsdWUgaW4gc2VsZi5fcGFyYW1l
dGVyczoKKyAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgPT0gbmFtZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyYW1fdmFsdWUKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvZGlzcGF0
Y2gucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0
L2Rpc3BhdGNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiMWViNGZiM2MzNjI4OWYzZTdjZDE5OTM4ZjQ0Njg2
MTYxM2VhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvbW9kX3B5d2Vic29ja2V0L2Rpc3BhdGNoLnB5CkBAIC0wLDAgKzEsMzgxIEBACisjIENv
cHlyaWdodCAyMDEyLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCisiIiJEaXNwYXRjaCBXZWJTb2NrZXQgcmVxdWVzdC4KKyIiIgorCisK
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQorCitmcm9tIG1vZF9weXdlYnNv
Y2tldCBpbXBvcnQgY29tbW9uCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgaGFuZHNoYWtl
Citmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXNndXRpbAorZnJvbSBtb2RfcHl3ZWJzb2Nr
ZXQgaW1wb3J0IHN0cmVhbQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IHV0aWwKKworCitf
U09VUkNFX1BBVEhfUEFUVEVSTiA9IHJlLmNvbXBpbGUocicoP2kpX3dzaFwucHkkJykKK19TT1VS
Q0VfU1VGRklYID0gJ193c2gucHknCitfRE9fRVhUUkFfSEFORFNIQUtFX0hBTkRMRVJfTkFNRSA9
ICd3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZScKK19UUkFOU0ZFUl9EQVRBX0hBTkRMRVJf
TkFNRSA9ICd3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEnCitfUEFTU0lWRV9DTE9TSU5HX0hBTkRT
SEFLRV9IQU5ETEVSX05BTUUgPSAoCisgICAgJ3dlYl9zb2NrZXRfcGFzc2l2ZV9jbG9zaW5nX2hh
bmRzaGFrZScpCisKKworY2xhc3MgRGlzcGF0Y2hFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAi
IiJFeGNlcHRpb24gaW4gZGlzcGF0Y2hpbmcgV2ViU29ja2V0IHJlcXVlc3QuIiIiCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgbmFtZSwgc3RhdHVzPWNvbW1vbi5IVFRQX1NUQVRVU19OT1RfRk9V
TkQpOgorICAgICAgICBzdXBlcihEaXNwYXRjaEV4Y2VwdGlvbiwgc2VsZikuX19pbml0X18obmFt
ZSkKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzdGF0dXMKKworCitkZWYgX2RlZmF1bHRfcGFzc2l2
ZV9jbG9zaW5nX2hhbmRzaGFrZV9oYW5kbGVyKHJlcXVlc3QpOgorICAgICIiIkRlZmF1bHQgd2Vi
X3NvY2tldF9wYXNzaXZlX2Nsb3NpbmdfaGFuZHNoYWtlIGhhbmRsZXIuIiIiCisKKyAgICByZXR1
cm4gY29tbW9uLlNUQVRVU19OT1JNQUxfQ0xPU1VSRSwgJycKKworCitkZWYgX25vcm1hbGl6ZV9w
YXRoKHBhdGgpOgorICAgICIiIk5vcm1hbGl6ZSBwYXRoLgorCisgICAgQXJnczoKKyAgICAgICAg
cGF0aDogdGhlIHBhdGggdG8gbm9ybWFsaXplLgorCisgICAgUGF0aCBpcyBjb252ZXJ0ZWQgdG8g
dGhlIGFic29sdXRlIHBhdGguCisgICAgVGhlIGlucHV0IHBhdGggY2FuIHVzZSBlaXRoZXIgJ1xc
JyBvciAnLycgYXMgdGhlIHNlcGFyYXRvci4KKyAgICBUaGUgbm9ybWFsaXplZCBwYXRoIGFsd2F5
cyB1c2VzICcvJyByZWdhcmRsZXNzIG9mIHRoZSBwbGF0Zm9ybS4KKyAgICAiIiIKKworICAgIHBh
dGggPSBwYXRoLnJlcGxhY2UoJ1xcJywgb3MucGF0aC5zZXApCisgICAgcGF0aCA9IG9zLnBhdGgu
cmVhbHBhdGgocGF0aCkKKyAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCdcXCcsICcvJykKKyAgICBy
ZXR1cm4gcGF0aAorCisKK2RlZiBfY3JlYXRlX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKGJh
c2VfZGlyKToKKyAgICAiIiJSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyB0aGUgcGF0
aCBvZiBhIFdlYlNvY2tldCBoYW5kbGVyIHNvdXJjZQorICAgIGZpbGUgdG8gYSByZXNvdXJjZSBz
dHJpbmcgYnkgcmVtb3ZpbmcgdGhlIHBhdGggdG8gdGhlIGJhc2UgZGlyZWN0b3J5IGZyb20KKyAg
ICBpdHMgaGVhZCwgcmVtb3ZpbmcgX1NPVVJDRV9TVUZGSVggZnJvbSBpdHMgdGFpbCwgYW5kIHJl
cGxhY2luZyBwYXRoCisgICAgc2VwYXJhdG9ycyBpbiBpdCB3aXRoICcvJy4KKworICAgIEFyZ3M6
CisgICAgICAgIGJhc2VfZGlyOiB0aGUgcGF0aCB0byB0aGUgYmFzZSBkaXJlY3RvcnkuCisgICAg
IiIiCisKKyAgICBiYXNlX2RpciA9IF9ub3JtYWxpemVfcGF0aChiYXNlX2RpcikKKworICAgIGJh
c2VfbGVuID0gbGVuKGJhc2VfZGlyKQorICAgIHN1ZmZpeF9sZW4gPSBsZW4oX1NPVVJDRV9TVUZG
SVgpCisKKyAgICBkZWYgY29udmVydGVyKHBhdGgpOgorICAgICAgICBpZiBub3QgcGF0aC5lbmRz
d2l0aChfU09VUkNFX1NVRkZJWCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAj
IF9ub3JtYWxpemVfcGF0aCBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgcmVzb2x2aW5nIHN5bWxp
bmsgYnJlYWtzCisgICAgICAgICMgZm9sbG93aW5nIHBhdGggY2hlY2suCisgICAgICAgIHBhdGgg
PSBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQorICAgICAgICBpZiBub3QgcGF0aC5zdGFydHN3aXRo
KGJhc2VfZGlyKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBwYXRo
W2Jhc2VfbGVuOi1zdWZmaXhfbGVuXQorCisgICAgcmV0dXJuIGNvbnZlcnRlcgorCisKK2RlZiBf
ZW51bWVyYXRlX2hhbmRsZXJfZmlsZV9wYXRocyhkaXJlY3RvcnkpOgorICAgICIiIlJldHVybnMg
YSBnZW5lcmF0b3IgdGhhdCBlbnVtZXJhdGVzIFdlYlNvY2tldCBIYW5kbGVyIHNvdXJjZSBmaWxl
IG5hbWVzCisgICAgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAgICAiIiIKKworICAgIGZvciBy
b290LCB1bnVzZWRfZGlycywgZmlsZXMgaW4gb3Mud2FsayhkaXJlY3RvcnkpOgorICAgICAgICBm
b3IgYmFzZSBpbiBmaWxlczoKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwg
YmFzZSkKKyAgICAgICAgICAgIGlmIF9TT1VSQ0VfUEFUSF9QQVRURVJOLnNlYXJjaChwYXRoKToK
KyAgICAgICAgICAgICAgICB5aWVsZCBwYXRoCisKKworY2xhc3MgX0hhbmRsZXJTdWl0ZShvYmpl
Y3QpOgorICAgICIiIkEgaGFuZGxlciBzdWl0ZSBob2xkZXIgY2xhc3MuIiIiCisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgZG9fZXh0cmFfaGFuZHNoYWtlLCB0cmFuc2Zlcl9kYXRhLAorICAgICAg
ICAgICAgICAgICBwYXNzaXZlX2Nsb3NpbmdfaGFuZHNoYWtlKToKKyAgICAgICAgc2VsZi5kb19l
eHRyYV9oYW5kc2hha2UgPSBkb19leHRyYV9oYW5kc2hha2UKKyAgICAgICAgc2VsZi50cmFuc2Zl
cl9kYXRhID0gdHJhbnNmZXJfZGF0YQorICAgICAgICBzZWxmLnBhc3NpdmVfY2xvc2luZ19oYW5k
c2hha2UgPSBwYXNzaXZlX2Nsb3NpbmdfaGFuZHNoYWtlCisKKworZGVmIF9zb3VyY2VfaGFuZGxl
cl9maWxlKGhhbmRsZXJfZGVmaW5pdGlvbik6CisgICAgIiIiU291cmNlIGEgaGFuZGxlciBkZWZp
bml0aW9uIHN0cmluZy4KKworICAgIEFyZ3M6CisgICAgICAgIGhhbmRsZXJfZGVmaW5pdGlvbjog
YSBzdHJpbmcgY29udGFpbmluZyBQeXRob24gc3RhdGVtZW50cyB0aGF0IGRlZmluZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgZnVuY3Rpb25zLgorICAgICIiIgorCisgICAg
Z2xvYmFsX2RpYyA9IHt9CisgICAgdHJ5OgorICAgICAgICBleGVjIGhhbmRsZXJfZGVmaW5pdGlv
biBpbiBnbG9iYWxfZGljCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmFpc2UgRGlz
cGF0Y2hFeGNlcHRpb24oJ0Vycm9yIGluIHNvdXJjaW5nIGhhbmRsZXI6JyArCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCisgICAgcGFzc2l2
ZV9jbG9zaW5nX2hhbmRzaGFrZV9oYW5kbGVyID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgcGFz
c2l2ZV9jbG9zaW5nX2hhbmRzaGFrZV9oYW5kbGVyID0gX2V4dHJhY3RfaGFuZGxlcigKKyAgICAg
ICAgICAgIGdsb2JhbF9kaWMsIF9QQVNTSVZFX0NMT1NJTkdfSEFORFNIQUtFX0hBTkRMRVJfTkFN
RSkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBwYXNzaXZlX2Nsb3NpbmdfaGFuZHNo
YWtlX2hhbmRsZXIgPSAoCisgICAgICAgICAgICBfZGVmYXVsdF9wYXNzaXZlX2Nsb3NpbmdfaGFu
ZHNoYWtlX2hhbmRsZXIpCisgICAgcmV0dXJuIF9IYW5kbGVyU3VpdGUoCisgICAgICAgIF9leHRy
YWN0X2hhbmRsZXIoZ2xvYmFsX2RpYywgX0RPX0VYVFJBX0hBTkRTSEFLRV9IQU5ETEVSX05BTUUp
LAorICAgICAgICBfZXh0cmFjdF9oYW5kbGVyKGdsb2JhbF9kaWMsIF9UUkFOU0ZFUl9EQVRBX0hB
TkRMRVJfTkFNRSksCisgICAgICAgIHBhc3NpdmVfY2xvc2luZ19oYW5kc2hha2VfaGFuZGxlcikK
KworCitkZWYgX2V4dHJhY3RfaGFuZGxlcihkaWMsIG5hbWUpOgorICAgICIiIkV4dHJhY3RzIGEg
Y2FsbGFibGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZnJvbSB0aGUgZ2l2ZW4gZGljdGlvbmFy
eQorICAgIGRpYy4KKyAgICAiIiIKKworICAgIGlmIG5hbWUgbm90IGluIGRpYzoKKyAgICAgICAg
cmFpc2UgRGlzcGF0Y2hFeGNlcHRpb24oJyVzIGlzIG5vdCBkZWZpbmVkLicgJSBuYW1lKQorICAg
IGhhbmRsZXIgPSBkaWNbbmFtZV0KKyAgICBpZiBub3QgY2FsbGFibGUoaGFuZGxlcik6CisgICAg
ICAgIHJhaXNlIERpc3BhdGNoRXhjZXB0aW9uKCclcyBpcyBub3QgY2FsbGFibGUuJyAlIG5hbWUp
CisgICAgcmV0dXJuIGhhbmRsZXIKKworCitjbGFzcyBEaXNwYXRjaGVyKG9iamVjdCk6CisgICAg
IiIiRGlzcGF0Y2hlcyBXZWJTb2NrZXQgcmVxdWVzdHMuCisKKyAgICBUaGlzIGNsYXNzIG1haW50
YWlucyBhIG1hcCBmcm9tIHJlc291cmNlIG5hbWUgdG8gaGFuZGxlcnMuCisgICAgIiIiCisKKyAg
ICBkZWYgX19pbml0X18oCisgICAgICAgIHNlbGYsIHJvb3RfZGlyLCBzY2FuX2Rpcj1Ob25lLAor
ICAgICAgICBhbGxvd19oYW5kbGVyc19vdXRzaWRlX3Jvb3RfZGlyPVRydWUpOgorICAgICAgICAi
IiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJv
b3RfZGlyOiBUaGUgZGlyZWN0b3J5IHdoZXJlIGhhbmRsZXIgZGVmaW5pdGlvbiBmaWxlcyBhcmUK
KyAgICAgICAgICAgICAgICAgICAgICBwbGFjZWQuCisgICAgICAgICAgICBzY2FuX2RpcjogVGhl
IGRpcmVjdG9yeSB3aGVyZSBoYW5kbGVyIGRlZmluaXRpb24gZmlsZXMgYXJlCisgICAgICAgICAg
ICAgICAgICAgICAgc2VhcmNoZWQuIHNjYW5fZGlyIG11c3QgYmUgYSBkaXJlY3RvcnkgdW5kZXIg
cm9vdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHJvb3RfZGlyIGl0c2Vs
Zi4gIElmIHNjYW5fZGlyIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgcm9vdF9kaXIg
aXMgdXNlZCBhcyBzY2FuX2Rpci4gc2Nhbl9kaXIgY2FuIGJlIHVzZWZ1bAorICAgICAgICAgICAg
ICAgICAgICAgIGluIHNhdmluZyBzY2FuIHRpbWUgd2hlbiByb290X2RpciBjb250YWlucyBtYW55
CisgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMuCisgICAgICAgICAgICBhbGxv
d19oYW5kbGVyc19vdXRzaWRlX3Jvb3RfZGlyOiBTY2FucyBoYW5kbGVyIGZpbGVzIGV2ZW4gaWYg
dGhlaXIKKyAgICAgICAgICAgICAgICAgICAgICBjYW5vbmljYWwgcGF0aCBpcyBub3QgdW5kZXIg
cm9vdF9kaXIuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0
X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX2hhbmRsZXJfc3VpdGVfbWFwID0g
e30KKyAgICAgICAgc2VsZi5fc291cmNlX3dhcm5pbmdzID0gW10KKyAgICAgICAgaWYgc2Nhbl9k
aXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNjYW5fZGlyID0gcm9vdF9kaXIKKyAgICAgICAgaWYg
bm90IG9zLnBhdGgucmVhbHBhdGgoc2Nhbl9kaXIpLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAg
ICAgb3MucGF0aC5yZWFscGF0aChyb290X2RpcikpOgorICAgICAgICAgICAgcmFpc2UgRGlzcGF0
Y2hFeGNlcHRpb24oJ3NjYW5fZGlyOiVzIG11c3QgYmUgYSBkaXJlY3RvcnkgdW5kZXIgJworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jvb3RfZGlyOiVzLicgJSAoc2Nhbl9k
aXIsIHJvb3RfZGlyKSkKKyAgICAgICAgc2VsZi5fc291cmNlX2hhbmRsZXJfZmlsZXNfaW5fZGly
KAorICAgICAgICAgICAgcm9vdF9kaXIsIHNjYW5fZGlyLCBhbGxvd19oYW5kbGVyc19vdXRzaWRl
X3Jvb3RfZGlyKQorCisgICAgZGVmIGFkZF9yZXNvdXJjZV9wYXRoX2FsaWFzKHNlbGYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzX3Jlc291cmNlX3BhdGgsIGV4aXN0aW5n
X3Jlc291cmNlX3BhdGgpOgorICAgICAgICAiIiJBZGQgcmVzb3VyY2UgcGF0aCBhbGlhcy4KKwor
ICAgICAgICBPbmNlIGFkZGVkLCByZXF1ZXN0IHRvIGFsaWFzX3Jlc291cmNlX3BhdGggd291bGQg
YmUgaGFuZGxlZCBieQorICAgICAgICBoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yIGV4aXN0aW5nX3Jl
c291cmNlX3BhdGguCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGFsaWFzX3Jlc291cmNl
X3BhdGg6IGFsaWFzIHJlc291cmNlIHBhdGgKKyAgICAgICAgICAgIGV4aXN0aW5nX3Jlc291cmNl
X3BhdGg6IGV4aXN0aW5nIHJlc291cmNlIHBhdGgKKyAgICAgICAgIiIiCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGhhbmRsZXJfc3VpdGUgPSBzZWxmLl9oYW5kbGVyX3N1aXRlX21hcFtleGlz
dGluZ19yZXNvdXJjZV9wYXRoXQorICAgICAgICAgICAgc2VsZi5faGFuZGxlcl9zdWl0ZV9tYXBb
YWxpYXNfcmVzb3VyY2VfcGF0aF0gPSBoYW5kbGVyX3N1aXRlCisgICAgICAgIGV4Y2VwdCBLZXlF
cnJvcjoKKyAgICAgICAgICAgIHJhaXNlIERpc3BhdGNoRXhjZXB0aW9uKCdObyBoYW5kbGVyIGZv
cjogJXInICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nX3Jl
c291cmNlX3BhdGgpCisKKyAgICBkZWYgc291cmNlX3dhcm5pbmdzKHNlbGYpOgorICAgICAgICAi
IiJSZXR1cm4gd2FybmluZ3MgaW4gc291cmNpbmcgaGFuZGxlcnMuIiIiCisKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3NvdXJjZV93YXJuaW5ncworCisgICAgZGVmIGRvX2V4dHJhX2hhbmRzaGFrZShz
ZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIiIiRG8gZXh0cmEgY2hlY2tpbmcgaW4gV2ViU29ja2V0
IGhhbmRzaGFrZS4KKworICAgICAgICBTZWxlY3QgYSBoYW5kbGVyIGJhc2VkIG9uIHJlcXVlc3Qu
dXJpIGFuZCBjYWxsIGl0cworICAgICAgICB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSBm
dW5jdGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhv
biByZXF1ZXN0LgorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIERpc3BhdGNoRXhjZXB0
aW9uOiB3aGVuIGhhbmRsZXIgd2FzIG5vdCBmb3VuZAorICAgICAgICAgICAgQWJvcnRlZEJ5VXNl
ckV4Y2VwdGlvbjogd2hlbiB1c2VyIGhhbmRsZXIgYWJvcnQgY29ubmVjdGlvbgorICAgICAgICAg
ICAgSGFuZHNoYWtlRXhjZXB0aW9uOiB3aGVuIG9wZW5pbmcgaGFuZHNoYWtlIGZhaWxlZAorICAg
ICAgICAiIiIKKworICAgICAgICBoYW5kbGVyX3N1aXRlID0gc2VsZi5nZXRfaGFuZGxlcl9zdWl0
ZShyZXF1ZXN0LndzX3Jlc291cmNlKQorICAgICAgICBpZiBoYW5kbGVyX3N1aXRlIGlzIE5vbmU6
CisgICAgICAgICAgICByYWlzZSBEaXNwYXRjaEV4Y2VwdGlvbignTm8gaGFuZGxlciBmb3I6ICVy
JyAlIHJlcXVlc3Qud3NfcmVzb3VyY2UpCisgICAgICAgIGRvX2V4dHJhX2hhbmRzaGFrZV8gPSBo
YW5kbGVyX3N1aXRlLmRvX2V4dHJhX2hhbmRzaGFrZQorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBkb19leHRyYV9oYW5kc2hha2VfKHJlcXVlc3QpCisgICAgICAgIGV4Y2VwdCBoYW5kc2hha2Uu
QWJvcnRlZEJ5VXNlckV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4
Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICB1dGlsLnByZXBlbmRfbWVzc2FnZV90b19l
eGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICclcyByYWlzZWQgZXhjZXB0aW9uIGZvciAl
czogJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRE9fRVhUUkFfSEFORFNIQUtF
X0hBTkRMRVJfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LndzX3Jl
c291cmNlKSwKKyAgICAgICAgICAgICAgICAgICAgZSkKKyAgICAgICAgICAgIHJhaXNlIGhhbmRz
aGFrZS5IYW5kc2hha2VFeGNlcHRpb24oZSwgY29tbW9uLkhUVFBfU1RBVFVTX0ZPUkJJRERFTikK
KworICAgIGRlZiB0cmFuc2Zlcl9kYXRhKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICAiIiJMZXQg
YSBoYW5kbGVyIHRyYW5zZmVyX2RhdGEgd2l0aCBhIFdlYlNvY2tldCBjbGllbnQuCisKKyAgICAg
ICAgU2VsZWN0IGEgaGFuZGxlciBiYXNlZCBvbiByZXF1ZXN0LndzX3Jlc291cmNlIGFuZCBjYWxs
IGl0cworICAgICAgICB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEgZnVuY3Rpb24uCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KKworICAg
ICAgICBSYWlzZXM6CisgICAgICAgICAgICBEaXNwYXRjaEV4Y2VwdGlvbjogd2hlbiBoYW5kbGVy
IHdhcyBub3QgZm91bmQKKyAgICAgICAgICAgIEFib3J0ZWRCeVVzZXJFeGNlcHRpb246IHdoZW4g
dXNlciBoYW5kbGVyIGFib3J0IGNvbm5lY3Rpb24KKyAgICAgICAgIiIiCisKKyAgICAgICAgaGFu
ZGxlcl9zdWl0ZSA9IHNlbGYuZ2V0X2hhbmRsZXJfc3VpdGUocmVxdWVzdC53c19yZXNvdXJjZSkK
KyAgICAgICAgaWYgaGFuZGxlcl9zdWl0ZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgRGlz
cGF0Y2hFeGNlcHRpb24oJ05vIGhhbmRsZXIgZm9yOiAlcicgJSByZXF1ZXN0LndzX3Jlc291cmNl
KQorICAgICAgICB0cmFuc2Zlcl9kYXRhXyA9IGhhbmRsZXJfc3VpdGUudHJhbnNmZXJfZGF0YQor
ICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBUZXJtaW5hdGUgdW5kZXJseWluZyBUQ1AgY29ubmVj
dGlvbiBpZiBwb3NzaWJsZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJhbnNmZXJfZGF0
YV8ocmVxdWVzdCkKKyAgICAgICAgICAgIGlmIG5vdCByZXF1ZXN0LnNlcnZlcl90ZXJtaW5hdGVk
OgorICAgICAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5lY3Rpb24oKQor
ICAgICAgICAjIENhdGNoIG5vbi1jcml0aWNhbCBleGNlcHRpb25zIHRoZSBoYW5kbGVyIGRpZG4n
dCBoYW5kbGUuCisgICAgICAgIGV4Y2VwdCBoYW5kc2hha2UuQWJvcnRlZEJ5VXNlckV4Y2VwdGlv
biwgZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnJXMnLCBlKQorICAgICAgICAg
ICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IG1zZ3V0aWwuQmFkT3BlcmF0aW9uRXhjZXB0aW9uLCBl
OgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCclcycsIGUpCisgICAgICAgICAgICBy
ZXF1ZXN0LndzX3N0cmVhbS5jbG9zZV9jb25uZWN0aW9uKGNvbW1vbi5TVEFUVVNfQUJOT1JNQUxf
Q0xPU1VSRSkKKyAgICAgICAgZXhjZXB0IG1zZ3V0aWwuSW52YWxpZEZyYW1lRXhjZXB0aW9uLCBl
OgorICAgICAgICAgICAgIyBJbnZhbGlkRnJhbWVFeGNlcHRpb24gbXVzdCBiZSBjYXVnaHQgYmVm
b3JlCisgICAgICAgICAgICAjIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uIHRoYXQgY2F0
Y2hlcyBJbnZhbGlkRnJhbWVFeGNlcHRpb24uCisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVi
dWcoJyVzJywgZSkKKyAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5lY3Rp
b24oY29tbW9uLlNUQVRVU19QUk9UT0NPTF9FUlJPUikKKyAgICAgICAgZXhjZXB0IG1zZ3V0aWwu
VW5zdXBwb3J0ZWRGcmFtZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5k
ZWJ1ZygnJXMnLCBlKQorICAgICAgICAgICAgcmVxdWVzdC53c19zdHJlYW0uY2xvc2VfY29ubmVj
dGlvbihjb21tb24uU1RBVFVTX1VOU1VQUE9SVEVEX0RBVEEpCisgICAgICAgIGV4Y2VwdCBzdHJl
YW0uSW52YWxpZFVURjhFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVi
dWcoJyVzJywgZSkKKyAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5lY3Rp
b24oCisgICAgICAgICAgICAgICAgY29tbW9uLlNUQVRVU19JTlZBTElEX0ZSQU1FX1BBWUxPQURf
REFUQSkKKyAgICAgICAgZXhjZXB0IG1zZ3V0aWwuQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRp
b24sIGU6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJyVzJywgZSkKKyAgICAgICAg
ZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHV0aWwucHJlcGVuZF9tZXNzYWdlX3Rv
X2V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnJXMgcmFpc2VkIGV4Y2VwdGlvbiBmb3IgJXM6
ICcgJSAoCisgICAgICAgICAgICAgICAgICAgIF9UUkFOU0ZFUl9EQVRBX0hBTkRMRVJfTkFNRSwg
cmVxdWVzdC53c19yZXNvdXJjZSksCisgICAgICAgICAgICAgICAgZSkKKyAgICAgICAgICAgIHJh
aXNlCisKKyAgICBkZWYgcGFzc2l2ZV9jbG9zaW5nX2hhbmRzaGFrZShzZWxmLCByZXF1ZXN0KToK
KyAgICAgICAgIiIiUHJlcGFyZSBjb2RlIGFuZCByZWFzb24gZm9yIHJlc3BvbmRpbmcgY2xpZW50
IGluaXRpYXRlZCBjbG9zaW5nCisgICAgICAgIGhhbmRzaGFrZS4KKyAgICAgICAgIiIiCisKKyAg
ICAgICAgaGFuZGxlcl9zdWl0ZSA9IHNlbGYuZ2V0X2hhbmRsZXJfc3VpdGUocmVxdWVzdC53c19y
ZXNvdXJjZSkKKyAgICAgICAgaWYgaGFuZGxlcl9zdWl0ZSBpcyBOb25lOgorICAgICAgICAgICAg
cmV0dXJuIF9kZWZhdWx0X3Bhc3NpdmVfY2xvc2luZ19oYW5kc2hha2VfaGFuZGxlcihyZXF1ZXN0
KQorICAgICAgICByZXR1cm4gaGFuZGxlcl9zdWl0ZS5wYXNzaXZlX2Nsb3NpbmdfaGFuZHNoYWtl
KHJlcXVlc3QpCisKKyAgICBkZWYgZ2V0X2hhbmRsZXJfc3VpdGUoc2VsZiwgcmVzb3VyY2UpOgor
ICAgICAgICAiIiJSZXRyaWV2ZXMgdHdvIGhhbmRsZXJzIChvbmUgZm9yIGV4dHJhIGhhbmRzaGFr
ZSBwcm9jZXNzaW5nLCBhbmQgb25lCisgICAgICAgIGZvciBkYXRhIHRyYW5zZmVyKSBmb3IgdGhl
IGdpdmVuIHJlcXVlc3QgYXMgYSBIYW5kbGVyU3VpdGUgb2JqZWN0LgorICAgICAgICAiIiIKKwor
ICAgICAgICBmcmFnbWVudCA9IE5vbmUKKyAgICAgICAgaWYgJyMnIGluIHJlc291cmNlOgorICAg
ICAgICAgICAgcmVzb3VyY2UsIGZyYWdtZW50ID0gcmVzb3VyY2Uuc3BsaXQoJyMnLCAxKQorICAg
ICAgICBpZiAnPycgaW4gcmVzb3VyY2U6CisgICAgICAgICAgICByZXNvdXJjZSA9IHJlc291cmNl
LnNwbGl0KCc/JywgMSlbMF0KKyAgICAgICAgaGFuZGxlcl9zdWl0ZSA9IHNlbGYuX2hhbmRsZXJf
c3VpdGVfbWFwLmdldChyZXNvdXJjZSkKKyAgICAgICAgaWYgaGFuZGxlcl9zdWl0ZSBhbmQgZnJh
Z21lbnQ6CisgICAgICAgICAgICByYWlzZSBEaXNwYXRjaEV4Y2VwdGlvbignRnJhZ21lbnQgaWRl
bnRpZmllcnMgTVVTVCBOT1QgYmUgdXNlZCBvbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnV2ViU29ja2V0IFVSSXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29tbW9uLkhUVFBfU1RBVFVTX0JBRF9SRVFVRVNUKQorICAgICAgICByZXR1cm4g
aGFuZGxlcl9zdWl0ZQorCisgICAgZGVmIF9zb3VyY2VfaGFuZGxlcl9maWxlc19pbl9kaXIoCisg
ICAgICAgIHNlbGYsIHJvb3RfZGlyLCBzY2FuX2RpciwgYWxsb3dfaGFuZGxlcnNfb3V0c2lkZV9y
b290X2Rpcik6CisgICAgICAgICIiIlNvdXJjZSBhbGwgdGhlIGhhbmRsZXIgc291cmNlIGZpbGVz
IGluIHRoZSBzY2FuX2RpciBkaXJlY3RvcnkuCisKKyAgICAgICAgVGhlIHJlc291cmNlIHBhdGgg
aXMgZGV0ZXJtaW5lZCByZWxhdGl2ZSB0byByb290X2Rpci4KKyAgICAgICAgIiIiCisKKyAgICAg
ICAgIyBXZSBidWlsZCBhIG1hcCBmcm9tIHJlc291cmNlIHRvIGhhbmRsZXIgY29kZSBhc3N1bWlu
ZyB0aGF0IHRoZXJlJ3MKKyAgICAgICAgIyBvbmx5IG9uZSBwYXRoIGZyb20gcm9vdF9kaXIgdG8g
c2Nhbl9kaXIgYW5kIGl0IGNhbiBiZSBvYnRhaW5lZCBieQorICAgICAgICAjIGNvbXBhcmluZyBy
ZWFscGF0aCBvZiB0aGVtLgorCisgICAgICAgICMgSGVyZSB3ZSBjYW5ub3QgdXNlIGFic3BhdGgu
IFNlZQorICAgICAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MTYwMworCisgICAgICAgIGNvbnZlcnQgPSBfY3JlYXRlX3BhdGhfdG9fcmVzb3VyY2VfY29udmVy
dGVyKHJvb3RfZGlyKQorICAgICAgICBzY2FuX3JlYWxwYXRoID0gb3MucGF0aC5yZWFscGF0aChz
Y2FuX2RpcikKKyAgICAgICAgcm9vdF9yZWFscGF0aCA9IG9zLnBhdGgucmVhbHBhdGgocm9vdF9k
aXIpCisgICAgICAgIGZvciBwYXRoIGluIF9lbnVtZXJhdGVfaGFuZGxlcl9maWxlX3BhdGhzKHNj
YW5fcmVhbHBhdGgpOgorICAgICAgICAgICAgaWYgKG5vdCBhbGxvd19oYW5kbGVyc19vdXRzaWRl
X3Jvb3RfZGlyIGFuZAorICAgICAgICAgICAgICAgIChub3Qgb3MucGF0aC5yZWFscGF0aChwYXRo
KS5zdGFydHN3aXRoKHJvb3RfcmVhbHBhdGgpKSk6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9n
Z2VyLmRlYnVnKAorICAgICAgICAgICAgICAgICAgICAnQ2Fub25pY2FsIHBhdGggb2YgJXMgaXMg
bm90IHVuZGVyIHJvb3QgZGlyZWN0b3J5JyAlCisgICAgICAgICAgICAgICAgICAgIHBhdGgpCisg
ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICBoYW5kbGVyX3N1aXRlID0gX3NvdXJjZV9oYW5kbGVyX2ZpbGUob3BlbihwYXRoKS5yZWFkKCkp
CisgICAgICAgICAgICBleGNlcHQgRGlzcGF0Y2hFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAg
ICAgc2VsZi5fc291cmNlX3dhcm5pbmdzLmFwcGVuZCgnJXM6ICVzJyAlIChwYXRoLCBlKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmVzb3VyY2UgPSBjb252ZXJ0KHBh
dGgpCisgICAgICAgICAgICBpZiByZXNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNl
bGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAgICAgJ1BhdGggdG8gcmVzb3VyY2Ug
Y29udmVyc2lvbiBvbiAlcyBmYWlsZWQnICUgcGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgc2VsZi5faGFuZGxlcl9zdWl0ZV9tYXBbY29udmVydChwYXRoKV0gPSBoYW5k
bGVyX3N1aXRlCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L2V4dGVuc2lvbnMucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L2V4dGVuc2lv
bnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2UzNzg0NjU4MTA0YzY4MGI0ZmRiMjczYjIxYjljZWE0NjQ5MzA1
MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9t
b2RfcHl3ZWJzb2NrZXQvZXh0ZW5zaW9ucy5weQpAQCAtMCwwICsxLDI2NSBAQAorIyBDb3B5cmln
aHQgMjAxMSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
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
QU1BR0UuCisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2Rf
cHl3ZWJzb2NrZXQgaW1wb3J0IHV0aWwKKworCitfYXZhaWxhYmxlX3Byb2Nlc3NvcnMgPSB7fQor
CisKK2NsYXNzIEV4dGVuc2lvblByb2Nlc3NvckludGVyZmFjZShvYmplY3QpOgorCisgICAgZGVm
IGdldF9leHRlbnNpb25fcmVzcG9uc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICBkZWYgc2V0dXBfc3RyZWFtX29wdGlvbnMoc2VsZiwgc3RyZWFtX29wdGlvbnMpOgorICAgICAg
ICBwYXNzCisKKworY2xhc3MgRGVmbGF0ZVN0cmVhbUV4dGVuc2lvblByb2Nlc3NvcihFeHRlbnNp
b25Qcm9jZXNzb3JJbnRlcmZhY2UpOgorICAgICIiIldlYlNvY2tldCBERUZMQVRFIHN0cmVhbSBl
eHRlbnNpb24gcHJvY2Vzc29yLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3Qp
OgorICAgICAgICBzZWxmLl9sb2dnZXIgPSB1dGlsLmdldF9jbGFzc19sb2dnZXIoc2VsZikKKwor
ICAgICAgICBzZWxmLl9yZXF1ZXN0ID0gcmVxdWVzdAorCisgICAgZGVmIGdldF9leHRlbnNpb25f
cmVzcG9uc2Uoc2VsZik6CisgICAgICAgIGlmIGxlbihzZWxmLl9yZXF1ZXN0LmdldF9wYXJhbWV0
ZXJfbmFtZXMoKSkgIT0gMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgc2Vs
Zi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ0VuYWJsZSAlcyBleHRlbnNpb24nLCBjb21t
b24uREVGTEFURV9TVFJFQU1fRVhURU5TSU9OKQorCisgICAgICAgIHJldHVybiBjb21tb24uRXh0
ZW5zaW9uUGFyYW1ldGVyKGNvbW1vbi5ERUZMQVRFX1NUUkVBTV9FWFRFTlNJT04pCisKKyAgICBk
ZWYgc2V0dXBfc3RyZWFtX29wdGlvbnMoc2VsZiwgc3RyZWFtX29wdGlvbnMpOgorICAgICAgICBz
dHJlYW1fb3B0aW9ucy5kZWZsYXRlX3N0cmVhbSA9IFRydWUKKworCitfYXZhaWxhYmxlX3Byb2Nl
c3NvcnNbY29tbW9uLkRFRkxBVEVfU1RSRUFNX0VYVEVOU0lPTl0gPSAoCisgICAgRGVmbGF0ZVN0
cmVhbUV4dGVuc2lvblByb2Nlc3NvcikKKworCitjbGFzcyBEZWZsYXRlRnJhbWVFeHRlbnNpb25Q
cm9jZXNzb3IoRXh0ZW5zaW9uUHJvY2Vzc29ySW50ZXJmYWNlKToKKyAgICAiIiJXZWJTb2NrZXQg
UGVyLWZyYW1lIERFRkxBVEUgZXh0ZW5zaW9uIHByb2Nlc3Nvci4iIiIKKworICAgIF9XSU5ET1df
QklUU19QQVJBTSA9ICdtYXhfd2luZG93X2JpdHMnCisgICAgX05PX0NPTlRFWFRfVEFLRU9WRVJf
UEFSQU0gPSAnbm9fY29udGV4dF90YWtlb3ZlcicKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBy
ZXF1ZXN0KToKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2VyKHNl
bGYpCisKKyAgICAgICAgc2VsZi5fcmVxdWVzdCA9IHJlcXVlc3QKKworICAgICAgICBzZWxmLl9y
ZXNwb25zZV93aW5kb3dfYml0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5fcmVzcG9uc2Vfbm9fY29u
dGV4dF90YWtlb3ZlciA9IEZhbHNlCisKKyAgICAgICAgIyBDb3VudGVycyBmb3Igc3RhdGlzdGlj
cy4KKworICAgICAgICAjIFRvdGFsIG51bWJlciBvZiBvdXRnb2luZyBieXRlcyBzdXBwbGllZCB0
byB0aGlzIGZpbHRlci4KKyAgICAgICAgc2VsZi5fdG90YWxfb3V0Z29pbmdfcGF5bG9hZF9ieXRl
cyA9IDAKKyAgICAgICAgIyBUb3RhbCBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byB0aGUgbmV0d29y
ayBhZnRlciBhcHBseWluZyB0aGlzIGZpbHRlci4KKyAgICAgICAgc2VsZi5fdG90YWxfZmlsdGVy
ZWRfb3V0Z29pbmdfcGF5bG9hZF9ieXRlcyA9IDAKKworICAgICAgICAjIFRvdGFsIG51bWJlciBv
ZiBieXRlcyByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrLgorICAgICAgICBzZWxmLl90b3RhbF9p
bmNvbWluZ19wYXlsb2FkX2J5dGVzID0gMAorICAgICAgICAjIFRvdGFsIG51bWJlciBvZiBpbmNv
bWluZyBieXRlcyBvYnRhaW5lZCBhZnRlciBhcHBseWluZyB0aGlzIGZpbHRlci4KKyAgICAgICAg
c2VsZi5fdG90YWxfZmlsdGVyZWRfaW5jb21pbmdfcGF5bG9hZF9ieXRlcyA9IDAKKworICAgIGRl
ZiBnZXRfZXh0ZW5zaW9uX3Jlc3BvbnNlKHNlbGYpOgorICAgICAgICAjIEFueSB1bmtub3duIHBh
cmFtZXRlciB3aWxsIGJlIGp1c3QgaWdub3JlZC4KKworICAgICAgICB3aW5kb3dfYml0cyA9IHNl
bGYuX3JlcXVlc3QuZ2V0X3BhcmFtZXRlcl92YWx1ZSgKKyAgICAgICAgICAgIHNlbGYuX1dJTkRP
V19CSVRTX1BBUkFNKQorICAgICAgICBub19jb250ZXh0X3Rha2VvdmVyID0gc2VsZi5fcmVxdWVz
dC5oYXNfcGFyYW1ldGVyKAorICAgICAgICAgICAgc2VsZi5fTk9fQ09OVEVYVF9UQUtFT1ZFUl9Q
QVJBTSkKKyAgICAgICAgaWYgKG5vX2NvbnRleHRfdGFrZW92ZXIgYW5kCisgICAgICAgICAgICBz
ZWxmLl9yZXF1ZXN0LmdldF9wYXJhbWV0ZXJfdmFsdWUoCisgICAgICAgICAgICAgICAgc2VsZi5f
Tk9fQ09OVEVYVF9UQUtFT1ZFUl9QQVJBTSkgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgcmV0
dXJuIE5vbmUKKworICAgICAgICBpZiB3aW5kb3dfYml0cyBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aW5kb3dfYml0cyA9IGludCh3aW5kb3dfYml0cykK
KyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgIHJldHVy
biBOb25lCisgICAgICAgICAgICBpZiB3aW5kb3dfYml0cyA8IDggb3Igd2luZG93X2JpdHMgPiAx
NToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHNlbGYuX2RlZmxhdGVy
ID0gdXRpbC5fUkZDMTk3OURlZmxhdGVyKAorICAgICAgICAgICAgd2luZG93X2JpdHMsIG5vX2Nv
bnRleHRfdGFrZW92ZXIpCisKKyAgICAgICAgc2VsZi5faW5mbGF0ZXIgPSB1dGlsLl9SRkMxOTc5
SW5mbGF0ZXIoKQorCisgICAgICAgIHNlbGYuX2NvbXByZXNzX291dGdvaW5nID0gVHJ1ZQorCisg
ICAgICAgIHJlc3BvbnNlID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihzZWxmLl9yZXF1ZXN0
Lm5hbWUoKSkKKworICAgICAgICBpZiBzZWxmLl9yZXNwb25zZV93aW5kb3dfYml0cyBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgIHJlc3BvbnNlLmFkZF9wYXJhbWV0ZXIoCisgICAgICAgICAgICAg
ICAgc2VsZi5fV0lORE9XX0JJVFNfUEFSQU0sIHN0cihzZWxmLl9yZXNwb25zZV93aW5kb3dfYml0
cykpCisgICAgICAgIGlmIHNlbGYuX3Jlc3BvbnNlX25vX2NvbnRleHRfdGFrZW92ZXI6CisgICAg
ICAgICAgICByZXNwb25zZS5hZGRfcGFyYW1ldGVyKAorICAgICAgICAgICAgICAgIHNlbGYuX05P
X0NPTlRFWFRfVEFLRU9WRVJfUEFSQU0sIE5vbmUpCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRl
YnVnKAorICAgICAgICAgICAgJ0VuYWJsZSAlcyBleHRlbnNpb24gKCcKKyAgICAgICAgICAgICdy
ZXF1ZXN0OiB3aW5kb3dfYml0cz0lczsgbm9fY29udGV4dF90YWtlb3Zlcj0lciwgJworICAgICAg
ICAgICAgJ3Jlc3BvbnNlOiB3aW5kb3dfd2JpdHM9JXM7IG5vX2NvbnRleHRfdGFrZW92ZXI9JXIp
JyAlCisgICAgICAgICAgICAoc2VsZi5fcmVxdWVzdC5uYW1lKCksCisgICAgICAgICAgICAgd2lu
ZG93X2JpdHMsCisgICAgICAgICAgICAgbm9fY29udGV4dF90YWtlb3ZlciwKKyAgICAgICAgICAg
ICBzZWxmLl9yZXNwb25zZV93aW5kb3dfYml0cywKKyAgICAgICAgICAgICBzZWxmLl9yZXNwb25z
ZV9ub19jb250ZXh0X3Rha2VvdmVyKSkKKworICAgICAgICByZXR1cm4gcmVzcG9uc2UKKworICAg
IGRlZiBzZXR1cF9zdHJlYW1fb3B0aW9ucyhzZWxmLCBzdHJlYW1fb3B0aW9ucyk6CisKKyAgICAg
ICAgY2xhc3MgX091dGdvaW5nRmlsdGVyKG9iamVjdCk6CisKKyAgICAgICAgICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwYXJlbnQpOgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcmVudCA9IHBhcmVu
dAorCisgICAgICAgICAgICBkZWYgZmlsdGVyKHNlbGYsIGZyYW1lKToKKyAgICAgICAgICAgICAg
ICBzZWxmLl9wYXJlbnQuX291dGdvaW5nX2ZpbHRlcihmcmFtZSkKKworICAgICAgICBjbGFzcyBf
SW5jb21pbmdGaWx0ZXIob2JqZWN0KToKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBhcmVudCk6CisgICAgICAgICAgICAgICAgc2VsZi5fcGFyZW50ID0gcGFyZW50CisKKyAgICAg
ICAgICAgIGRlZiBmaWx0ZXIoc2VsZiwgZnJhbWUpOgorICAgICAgICAgICAgICAgIHNlbGYuX3Bh
cmVudC5faW5jb21pbmdfZmlsdGVyKGZyYW1lKQorCisgICAgICAgIHN0cmVhbV9vcHRpb25zLm91
dGdvaW5nX2ZyYW1lX2ZpbHRlcnMuYXBwZW5kKAorICAgICAgICAgICAgX091dGdvaW5nRmlsdGVy
KHNlbGYpKQorICAgICAgICBzdHJlYW1fb3B0aW9ucy5pbmNvbWluZ19mcmFtZV9maWx0ZXJzLmlu
c2VydCgKKyAgICAgICAgICAgIDAsIF9JbmNvbWluZ0ZpbHRlcihzZWxmKSkKKworICAgIGRlZiBz
ZXRfcmVzcG9uc2Vfd2luZG93X2JpdHMoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9yZXNw
b25zZV93aW5kb3dfYml0cyA9IHZhbHVlCisKKyAgICBkZWYgc2V0X3Jlc3BvbnNlX25vX2NvbnRl
eHRfdGFrZW92ZXIoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9yZXNwb25zZV9ub19jb250
ZXh0X3Rha2VvdmVyID0gdmFsdWUKKworICAgIGRlZiBlbmFibGVfb3V0Z29pbmdfY29tcHJlc3Np
b24oc2VsZik6CisgICAgICAgIHNlbGYuX2NvbXByZXNzX291dGdvaW5nID0gVHJ1ZQorCisgICAg
ZGVmIGRpc2FibGVfb3V0Z29pbmdfY29tcHJlc3Npb24oc2VsZik6CisgICAgICAgIHNlbGYuX2Nv
bXByZXNzX291dGdvaW5nID0gRmFsc2UKKworICAgIGRlZiBfb3V0Z29pbmdfZmlsdGVyKHNlbGYs
IGZyYW1lKToKKyAgICAgICAgIiIiVHJhbnNmb3JtIG91dGdvaW5nIGZyYW1lcy4gVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIG9ubHkgYnkKKyAgICAgICAgYW4gX091dGdvaW5nRmlsdGVyIGluc3RhbmNl
LgorICAgICAgICAiIiIKKworICAgICAgICBvcmlnaW5hbF9wYXlsb2FkX3NpemUgPSBsZW4oZnJh
bWUucGF5bG9hZCkKKyAgICAgICAgc2VsZi5fdG90YWxfb3V0Z29pbmdfcGF5bG9hZF9ieXRlcyAr
PSBvcmlnaW5hbF9wYXlsb2FkX3NpemUKKworICAgICAgICBpZiAobm90IHNlbGYuX2NvbXByZXNz
X291dGdvaW5nIG9yCisgICAgICAgICAgICBjb21tb24uaXNfY29udHJvbF9vcGNvZGUoZnJhbWUu
b3Bjb2RlKSk6CisgICAgICAgICAgICBzZWxmLl90b3RhbF9maWx0ZXJlZF9vdXRnb2luZ19wYXls
b2FkX2J5dGVzICs9ICgKKyAgICAgICAgICAgICAgICBvcmlnaW5hbF9wYXlsb2FkX3NpemUpCisg
ICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmcmFtZS5wYXlsb2FkID0gc2VsZi5fZGVmbGF0
ZXIuZmlsdGVyKGZyYW1lLnBheWxvYWQpCisgICAgICAgIGZyYW1lLnJzdjEgPSAxCisKKyAgICAg
ICAgZmlsdGVyZWRfcGF5bG9hZF9zaXplID0gbGVuKGZyYW1lLnBheWxvYWQpCisgICAgICAgIHNl
bGYuX3RvdGFsX2ZpbHRlcmVkX291dGdvaW5nX3BheWxvYWRfYnl0ZXMgKz0gZmlsdGVyZWRfcGF5
bG9hZF9zaXplCisKKyAgICAgICAgIyBQcmludCBpbmYgd2hlbiByYXRpbyBpcyBub3QgYXZhaWxh
YmxlLgorICAgICAgICByYXRpbyA9IGZsb2F0KCdpbmYnKQorICAgICAgICBhdmVyYWdlX3JhdGlv
ID0gZmxvYXQoJ2luZicpCisgICAgICAgIGlmIG9yaWdpbmFsX3BheWxvYWRfc2l6ZSAhPSAwOgor
ICAgICAgICAgICAgcmF0aW8gPSBmbG9hdChmaWx0ZXJlZF9wYXlsb2FkX3NpemUpIC8gb3JpZ2lu
YWxfcGF5bG9hZF9zaXplCisgICAgICAgIGlmIHNlbGYuX3RvdGFsX291dGdvaW5nX3BheWxvYWRf
Ynl0ZXMgIT0gMDoKKyAgICAgICAgICAgIGF2ZXJhZ2VfcmF0aW8gPSAoCisgICAgICAgICAgICAg
ICAgZmxvYXQoc2VsZi5fdG90YWxfZmlsdGVyZWRfb3V0Z29pbmdfcGF5bG9hZF9ieXRlcykgLwor
ICAgICAgICAgICAgICAgIHNlbGYuX3RvdGFsX291dGdvaW5nX3BheWxvYWRfYnl0ZXMpCisgICAg
ICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICdPdXRnb2luZyBjb21wcmVzcyBy
YXRpbzogJWYgKGF2ZXJhZ2U6ICVmKScgJQorICAgICAgICAgICAgKHJhdGlvLCBhdmVyYWdlX3Jh
dGlvKSkKKworICAgIGRlZiBfaW5jb21pbmdfZmlsdGVyKHNlbGYsIGZyYW1lKToKKyAgICAgICAg
IiIiVHJhbnNmb3JtIGluY29taW5nIGZyYW1lcy4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9ubHkg
YnkKKyAgICAgICAgYW4gX0luY29taW5nRmlsdGVyIGluc3RhbmNlLgorICAgICAgICAiIiIKKwor
ICAgICAgICByZWNlaXZlZF9wYXlsb2FkX3NpemUgPSBsZW4oZnJhbWUucGF5bG9hZCkKKyAgICAg
ICAgc2VsZi5fdG90YWxfaW5jb21pbmdfcGF5bG9hZF9ieXRlcyArPSByZWNlaXZlZF9wYXlsb2Fk
X3NpemUKKworICAgICAgICBpZiBmcmFtZS5yc3YxICE9IDEgb3IgY29tbW9uLmlzX2NvbnRyb2xf
b3Bjb2RlKGZyYW1lLm9wY29kZSk6CisgICAgICAgICAgICBzZWxmLl90b3RhbF9maWx0ZXJlZF9p
bmNvbWluZ19wYXlsb2FkX2J5dGVzICs9ICgKKyAgICAgICAgICAgICAgICByZWNlaXZlZF9wYXls
b2FkX3NpemUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmcmFtZS5wYXlsb2FkID0g
c2VsZi5faW5mbGF0ZXIuZmlsdGVyKGZyYW1lLnBheWxvYWQpCisgICAgICAgIGZyYW1lLnJzdjEg
PSAwCisKKyAgICAgICAgZmlsdGVyZWRfcGF5bG9hZF9zaXplID0gbGVuKGZyYW1lLnBheWxvYWQp
CisgICAgICAgIHNlbGYuX3RvdGFsX2ZpbHRlcmVkX2luY29taW5nX3BheWxvYWRfYnl0ZXMgKz0g
ZmlsdGVyZWRfcGF5bG9hZF9zaXplCisKKyAgICAgICAgIyBQcmludCBpbmYgd2hlbiByYXRpbyBp
cyBub3QgYXZhaWxhYmxlLgorICAgICAgICByYXRpbyA9IGZsb2F0KCdpbmYnKQorICAgICAgICBh
dmVyYWdlX3JhdGlvID0gZmxvYXQoJ2luZicpCisgICAgICAgIGlmIHJlY2VpdmVkX3BheWxvYWRf
c2l6ZSAhPSAwOgorICAgICAgICAgICAgcmF0aW8gPSBmbG9hdChyZWNlaXZlZF9wYXlsb2FkX3Np
emUpIC8gZmlsdGVyZWRfcGF5bG9hZF9zaXplCisgICAgICAgIGlmIHNlbGYuX3RvdGFsX2ZpbHRl
cmVkX2luY29taW5nX3BheWxvYWRfYnl0ZXMgIT0gMDoKKyAgICAgICAgICAgIGF2ZXJhZ2VfcmF0
aW8gPSAoCisgICAgICAgICAgICAgICAgZmxvYXQoc2VsZi5fdG90YWxfaW5jb21pbmdfcGF5bG9h
ZF9ieXRlcykgLworICAgICAgICAgICAgICAgIHNlbGYuX3RvdGFsX2ZpbHRlcmVkX2luY29taW5n
X3BheWxvYWRfYnl0ZXMpCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAg
ICdJbmNvbWluZyBjb21wcmVzcyByYXRpbzogJWYgKGF2ZXJhZ2U6ICVmKScgJQorICAgICAgICAg
ICAgKHJhdGlvLCBhdmVyYWdlX3JhdGlvKSkKKworCitfYXZhaWxhYmxlX3Byb2Nlc3NvcnNbY29t
bW9uLkRFRkxBVEVfRlJBTUVfRVhURU5TSU9OXSA9ICgKKyAgICBEZWZsYXRlRnJhbWVFeHRlbnNp
b25Qcm9jZXNzb3IpCisKKworIyBBZGRpbmcgdmVuZG9yLXByZWZpeGVkIGRlZmxhdGUtZnJhbWUg
ZXh0ZW5zaW9uLgorIyBUT0RPKGJhc2hpKTogUmVtb3ZlIHRoaXMgYWZ0ZXIgV2ViS2l0IHN0b3Bz
IHVzaW5nIHZlbmRlciBwcmVmaXguCitfYXZhaWxhYmxlX3Byb2Nlc3NvcnNbY29tbW9uLlhfV0VC
S0lUX0RFRkxBVEVfRlJBTUVfRVhURU5TSU9OXSA9ICgKKyAgICBEZWZsYXRlRnJhbWVFeHRlbnNp
b25Qcm9jZXNzb3IpCisKKworZGVmIGdldF9leHRlbnNpb25fcHJvY2Vzc29yKGV4dGVuc2lvbl9y
ZXF1ZXN0KToKKyAgICBnbG9iYWwgX2F2YWlsYWJsZV9wcm9jZXNzb3JzCisgICAgcHJvY2Vzc29y
X2NsYXNzID0gX2F2YWlsYWJsZV9wcm9jZXNzb3JzLmdldChleHRlbnNpb25fcmVxdWVzdC5uYW1l
KCkpCisgICAgaWYgcHJvY2Vzc29yX2NsYXNzIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25l
CisgICAgcmV0dXJuIHByb2Nlc3Nvcl9jbGFzcyhleHRlbnNpb25fcmVxdWVzdCkKKworCisjIHZp
OnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvX19pbml0X18u
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTBhMTc4MzE0NDQ0Y2M3Mjk3YTg4MjkwMzU4ZGRjYWNjMGEyZjI0Mwot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2Rf
cHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTE2IEBACisjIENv
cHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCisiIiJXZWJTb2NrZXQgb3BlbmluZyBoYW5kc2hha2UgcHJvY2Vzc29y
LiBUaGlzIGNsYXNzIHRyeSB0byBhcHBseSBhdmFpbGFibGUKK29wZW5pbmcgaGFuZHNoYWtlIHBy
b2Nlc3NvcnMgZm9yIGVhY2ggcHJvdG9jb2wgdmVyc2lvbiB1bnRpbCBhIGNvbm5lY3Rpb24gaXMK
K3N1Y2Nlc3NmdWxseSBlc3RhYmxpc2hlZC4KKyIiIgorCisKK2ltcG9ydCBsb2dnaW5nCisKK2Zy
b20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Lmhh
bmRzaGFrZSBpbXBvcnQgZHJhZnQ3NQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlIGlt
cG9ydCBoeWJpMDAKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZSBpbXBvcnQgaHliaQor
IyBFeHBvcnQgQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbiwgSGFuZHNoYWtlRXhjZXB0aW9uLCBhbmQg
VmVyc2lvbkV4Y2VwdGlvbgorIyBzeW1ib2wgZnJvbSB0aGlzIG1vZHVsZS4KK2Zyb20gbW9kX3B5
d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbgor
ZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBIYW5kc2hha2VFeGNl
cHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgVmVyc2lv
bkV4Y2VwdGlvbgorCisKK19MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKwor
CitkZWYgZG9faGFuZHNoYWtlKHJlcXVlc3QsIGRpc3BhdGNoZXIsIGFsbG93RHJhZnQ3NT1GYWxz
ZSwgc3RyaWN0PUZhbHNlKToKKyAgICAiIiJQZXJmb3JtcyBXZWJTb2NrZXQgaGFuZHNoYWtlLgor
CisgICAgQXJnczoKKyAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAg
ICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyIChkaXNwYXRjaC5EaXNwYXRjaGVyKS4KKyAgICAgICAg
YWxsb3dEcmFmdDc1OiBhbGxvdyBkcmFmdCA3NSBoYW5kc2hha2UgcHJvdG9jb2wuCisgICAgICAg
IHN0cmljdDogU3RyaWN0bHkgY2hlY2sgaGFuZHNoYWtlIHJlcXVlc3QgaW4gZHJhZnQgNzUuCisg
ICAgICAgICAgICBEZWZhdWx0OiBGYWxzZS4gSWYgVHJ1ZSwgcmVxdWVzdC5jb25uZWN0aW9uIG11
c3QgcHJvdmlkZQorICAgICAgICAgICAgZ2V0X21lbW9yaXplZF9saW5lcyBtZXRob2QuCisKKyAg
ICBIYW5kc2hha2VyIHdpbGwgYWRkIGF0dHJpYnV0ZXMgc3VjaCBhcyB3c19yZXNvdXJjZSBpbiBw
ZXJmb3JtaW5nCisgICAgaGFuZHNoYWtlLgorICAgICIiIgorCisgICAgX0xPR0dFUi5kZWJ1Zygn
Q2xpZW50XCdzIG9wZW5pbmcgaGFuZHNoYWtlIHJlc291cmNlOiAlcicsIHJlcXVlc3QudXJpKQor
ICAgICMgVG8gcHJpbnQgbWltZXRvb2xzLk1lc3NhZ2UgYXMgZXNjYXBlZCBvbmUtbGluZSBzdHJp
bmcsIHdlIGNvbnZlcnRzCisgICAgIyBoZWFkZXJzX2luIHRvIGRpY3Qgb2JqZWN0LiBXaXRob3V0
IGNvbnZlcnNpb24sIGlmIHdlIHVzZSAlciwgaXQganVzdAorICAgICMgcHJpbnRzIHRoZSB0eXBl
IGFuZCBhZGRyZXNzLCBhbmQgaWYgd2UgdXNlICVzLCBpdCBwcmludHMgdGhlIG9yaWdpbmFsCisg
ICAgIyBoZWFkZXIgc3RyaW5nIGFzIG11bHRpcGxlIGxpbmVzLgorICAgICMKKyAgICAjIEJvdGgg
bWltZXRvb2xzLk1lc3NhZ2UgYW5kIE1wVGFibGVfVHlwZSBvZiBtb2RfcHl0aG9uIGNhbiBiZQor
ICAgICMgY29udmVydGVkIHRvIGRpY3QuCisgICAgIworICAgICMgbWltZXRvb2xzLk1lc3NhZ2Uu
X19zdHJfXyByZXR1cm5zIHRoZSBvcmlnaW5hbCBoZWFkZXIgc3RyaW5nLgorICAgICMgZGljdCht
aW1ldG9vbHMuTWVzc2FnZSBvYmplY3QpIHJldHVybnMgdGhlIG1hcCBmcm9tIGhlYWRlciBuYW1l
cyB0bworICAgICMgaGVhZGVyIHZhbHVlcy4gV2hpbGUgTXBUYWJsZV9UeXBlIGRvZXNuJ3QgaGF2
ZSBzdWNoIF9fc3RyX18gYnV0IGp1c3QKKyAgICAjIF9fcmVwcl9fIHdoaWNoIGZvcm1hdHMgaXRz
ZWxmIGFzIHdlbGwgYXMgZGljdGlvbmFyeSBvYmplY3QuCisgICAgX0xPR0dFUi5kZWJ1ZygKKyAg
ICAgICAgJ0NsaWVudFwncyBvcGVuaW5nIGhhbmRzaGFrZSBoZWFkZXJzOiAlcicsIGRpY3QocmVx
dWVzdC5oZWFkZXJzX2luKSkKKworICAgIGhhbmRzaGFrZXJzID0gW10KKyAgICBoYW5kc2hha2Vy
cy5hcHBlbmQoCisgICAgICAgICgnUkZDIDY0NTUnLCBoeWJpLkhhbmRzaGFrZXIocmVxdWVzdCwg
ZGlzcGF0Y2hlcikpKQorICAgIGhhbmRzaGFrZXJzLmFwcGVuZCgKKyAgICAgICAgKCdIeUJpIDAw
JywgaHliaTAwLkhhbmRzaGFrZXIocmVxdWVzdCwgZGlzcGF0Y2hlcikpKQorICAgIGlmIGFsbG93
RHJhZnQ3NToKKyAgICAgICAgaGFuZHNoYWtlcnMuYXBwZW5kKAorICAgICAgICAgICAgKCdIaXhp
ZSA3NScsIGRyYWZ0NzUuSGFuZHNoYWtlcihyZXF1ZXN0LCBkaXNwYXRjaGVyLCBzdHJpY3QpKSkK
KworICAgIGZvciBuYW1lLCBoYW5kc2hha2VyIGluIGhhbmRzaGFrZXJzOgorICAgICAgICBfTE9H
R0VSLmRlYnVnKCdUcnlpbmcgcHJvdG9jb2wgdmVyc2lvbiAlcycsIG5hbWUpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgIF9M
T0dHRVIuaW5mbygnRXN0YWJsaXNoZWQgKCVzIHByb3RvY29sKScsIG5hbWUpCisgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgZXhjZXB0IEhhbmRzaGFrZUV4Y2VwdGlvbiwgZToKKyAgICAgICAg
ICAgIF9MT0dHRVIuZGVidWcoCisgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBjb21wbGV0ZSBv
cGVuaW5nIGhhbmRzaGFrZSBhcyAlcyBwcm90b2NvbDogJXInLAorICAgICAgICAgICAgICAgIG5h
bWUsIGUpCisgICAgICAgICAgICBpZiBlLnN0YXR1czoKKyAgICAgICAgICAgICAgICByYWlzZSBl
CisgICAgICAgIGV4Y2VwdCBBYm9ydGVkQnlVc2VyRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAg
cmFpc2UKKyAgICAgICAgZXhjZXB0IFZlcnNpb25FeGNlcHRpb24sIGU6CisgICAgICAgICAgICBy
YWlzZQorCisgICAgIyBUT0RPKHRveW9zaGltKTogQWRkIGEgdGVzdCB0byBjb3ZlciB0aGUgY2Fz
ZSBhbGwgaGFuZHNoYWtlcnMgZmFpbC4KKyAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisg
ICAgICAgICdGYWlsZWQgdG8gY29tcGxldGUgb3BlbmluZyBoYW5kc2hha2UgZm9yIGFsbCBhdmFp
bGFibGUgcHJvdG9jb2xzJywKKyAgICAgICAgc3RhdHVzPWNvbW1vbi5IVFRQX1NUQVRVU19CQURf
UkVRVUVTVCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19iYXNlLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9oYW5k
c2hha2UvX2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ3YzMyZTM1MDczOTFhOTRlMzhmMzQyMmU3ZjYz
ZWJlYzhkZjlmNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19iYXNlLnB5CkBAIC0wLDAgKzEsMzIz
IEBACisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0
aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJDb21tb24gZnVuY3Rpb25zIGFuZCBleGNlcHRp
b25zIHVzZWQgYnkgV2ViU29ja2V0IG9wZW5pbmcgaGFuZHNoYWtlCitwcm9jZXNzb3JzLgorIiIi
CisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJz
b2NrZXQgaW1wb3J0IGh0dHBfaGVhZGVyX3V0aWwKKworCitjbGFzcyBBYm9ydGVkQnlVc2VyRXhj
ZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIGZvciBhYm9ydGluZyBhIGNvbm5l
Y3Rpb24gaW50ZW50aW9uYWxseS4KKworICAgIElmIHRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCBp
biBkb19leHRyYV9oYW5kc2hha2UgaGFuZGxlciwgdGhlIGNvbm5lY3Rpb24KKyAgICB3aWxsIGJl
IGFiYW5kb25lZC4gTm8gb3RoZXIgV2ViU29ja2V0IG9yIEhUVFAoUykgaGFuZGxlciB3aWxsIGJl
IGludm9rZWQuCisKKyAgICBJZiB0aGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgaW4gdHJhbnNmZXJf
ZGF0YV9oYW5kbGVyLCB0aGUgY29ubmVjdGlvbiB3aWxsCisgICAgYmUgY2xvc2VkIHdpdGhvdXQg
Y2xvc2luZyBoYW5kc2hha2UuIE5vIG90aGVyIFdlYlNvY2tldCBvciBIVFRQKFMpIGhhbmRsZXIK
KyAgICB3aWxsIGJlIGludm9rZWQuCisgICAgIiIiCisKKyAgICBwYXNzCisKKworY2xhc3MgSGFu
ZHNoYWtlRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiVGhpcyBleGNlcHRpb24gd2lsbCBi
ZSByYWlzZWQgd2hlbiBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nCisgICAgV2Vi
U29ja2V0IGluaXRpYWwgaGFuZHNoYWtlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIG5hbWUsIHN0YXR1cz1Ob25lKToKKyAgICAgICAgc3VwZXIoSGFuZHNoYWtlRXhjZXB0aW9u
LCBzZWxmKS5fX2luaXRfXyhuYW1lKQorICAgICAgICBzZWxmLnN0YXR1cyA9IHN0YXR1cworCisK
K2NsYXNzIFZlcnNpb25FeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAiIiJUaGlzIGV4Y2VwdGlv
biB3aWxsIGJlIHJhaXNlZCB3aGVuIGEgdmVyc2lvbiBvZiBjbGllbnQgcmVxdWVzdCBkb2VzIG5v
dAorICAgIG1hdGNoIHdpdGggdmVyc2lvbiB0aGUgc2VydmVyIHN1cHBvcnRzLgorICAgICIiIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHN1cHBvcnRlZF92ZXJzaW9ucz0nJyk6Cisg
ICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgICAgc3VwcG9ydGVkX3ZlcnNpb246IGEgc3RyIG9iamVjdCB0byBzaG93IHN1cHBvcnRlZCBo
eWJpIHZlcnNpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICc4LCAx
MycpCisgICAgICAgICIiIgorICAgICAgICBzdXBlcihWZXJzaW9uRXhjZXB0aW9uLCBzZWxmKS5f
X2luaXRfXyhuYW1lKQorICAgICAgICBzZWxmLnN1cHBvcnRlZF92ZXJzaW9ucyA9IHN1cHBvcnRl
ZF92ZXJzaW9ucworCisKK2RlZiBnZXRfZGVmYXVsdF9wb3J0KGlzX3NlY3VyZSk6CisgICAgaWYg
aXNfc2VjdXJlOgorICAgICAgICByZXR1cm4gY29tbW9uLkRFRkFVTFRfV0VCX1NPQ0tFVF9TRUNV
UkVfUE9SVAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBjb21tb24uREVGQVVMVF9XRUJfU09D
S0VUX1BPUlQKKworCitkZWYgdmFsaWRhdGVfc3VicHJvdG9jb2woc3VicHJvdG9jb2wsIGhpeGll
KToKKyAgICAiIiJWYWxpZGF0ZSBhIHZhbHVlIGluIHN1YnByb3RvY29sIGZpZWxkcyBzdWNoIGFz
IFdlYlNvY2tldC1Qcm90b2NvbCwKKyAgICBTZWMtV2ViU29ja2V0LVByb3RvY29sLgorCisgICAg
U2VlCisgICAgLSBSRkMgNjQ1NTogU2VjdGlvbiA0LjEuLCA0LjIuMi4sIGFuZCA0LjMuCisgICAg
LSBIeUJpIDAwOiBTZWN0aW9uIDQuMS4gT3BlbmluZyBoYW5kc2hha2UKKyAgICAtIEhpeGllIDc1
OiBTZWN0aW9uIDQuMS4gSGFuZHNoYWtlCisgICAgIiIiCisKKyAgICBpZiBub3Qgc3VicHJvdG9j
b2w6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbignSW52YWxpZCBzdWJwcm90b2Nv
bCBuYW1lOiBlbXB0eScpCisgICAgaWYgaGl4aWU6CisgICAgICAgICMgUGFyYW1ldGVyIHNob3Vs
ZCBiZSBpbiB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RS4KKyAgICAgICAgZm9yIGMgaW4gc3Vi
cHJvdG9jb2w6CisgICAgICAgICAgICBpZiBub3QgMHgyMCA8PSBvcmQoYykgPD0gMHg3ZToKKyAg
ICAgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAg
ICAgICdJbGxlZ2FsIGNoYXJhY3RlciBpbiBzdWJwcm90b2NvbCBuYW1lOiAlcicgJSBjKQorICAg
IGVsc2U6CisgICAgICAgICMgUGFyYW1ldGVyIHNob3VsZCBiZSBlbmNvZGVkIEhUVFAgdG9rZW4u
CisgICAgICAgIHN0YXRlID0gaHR0cF9oZWFkZXJfdXRpbC5QYXJzaW5nU3RhdGUoc3VicHJvdG9j
b2wpCisgICAgICAgIHRva2VuID0gaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX3Rva2VuKHN0YXRl
KQorICAgICAgICByZXN0ID0gaHR0cF9oZWFkZXJfdXRpbC5wZWVrKHN0YXRlKQorICAgICAgICAj
IElmIHxyZXN0fCBpcyBub3QgTm9uZSwgfHN1YnByb3RvY29sfCBpcyBub3Qgb25lIHRva2VuIG9y
IGludmFsaWQuIElmCisgICAgICAgICMgfHJlc3R8IGlzIE5vbmUsIHx0b2tlbnwgbXVzdCBub3Qg
YmUgTm9uZSBiZWNhdXNlIHxzdWJwcm90b2NvbHwgaXMKKyAgICAgICAgIyBjb25jYXRlbmF0aW9u
IG9mIHx0b2tlbnwgYW5kIHxyZXN0fCBhbmQgaXMgbm90IE5vbmUuCisgICAgICAgIGlmIHJlc3Qg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oJ0ludmFs
aWQgbm9uLXRva2VuIHN0cmluZyBpbiBzdWJwcm90b2NvbCAnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ25hbWU6ICVyJyAlIHJlc3QpCisKKworZGVmIHBhcnNlX2hvc3Rf
aGVhZGVyKHJlcXVlc3QpOgorICAgIGZpZWxkcyA9IHJlcXVlc3QuaGVhZGVyc19pblsnSG9zdCdd
LnNwbGl0KCc6JywgMSkKKyAgICBpZiBsZW4oZmllbGRzKSA9PSAxOgorICAgICAgICByZXR1cm4g
ZmllbGRzWzBdLCBnZXRfZGVmYXVsdF9wb3J0KHJlcXVlc3QuaXNfaHR0cHMoKSkKKyAgICB0cnk6
CisgICAgICAgIHJldHVybiBmaWVsZHNbMF0sIGludChmaWVsZHNbMV0pCisgICAgZXhjZXB0IFZh
bHVlRXJyb3IsIGU6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbignSW52YWxpZCBw
b3J0IG51bWJlciBmb3JtYXQ6ICVyJyAlIGUpCisKKworZGVmIGZvcm1hdF9oZWFkZXIobmFtZSwg
dmFsdWUpOgorICAgIHJldHVybiAnJXM6ICVzXHJcbicgJSAobmFtZSwgdmFsdWUpCisKKworZGVm
IGJ1aWxkX2xvY2F0aW9uKHJlcXVlc3QpOgorICAgICIiIkJ1aWxkIFdlYlNvY2tldCBsb2NhdGlv
biBmb3IgcmVxdWVzdC4iIiIKKyAgICBsb2NhdGlvbl9wYXJ0cyA9IFtdCisgICAgaWYgcmVxdWVz
dC5pc19odHRwcygpOgorICAgICAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoY29tbW9uLldFQl9T
T0NLRVRfU0VDVVJFX1NDSEVNRSkKKyAgICBlbHNlOgorICAgICAgICBsb2NhdGlvbl9wYXJ0cy5h
cHBlbmQoY29tbW9uLldFQl9TT0NLRVRfU0NIRU1FKQorICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVu
ZCgnOi8vJykKKyAgICBob3N0LCBwb3J0ID0gcGFyc2VfaG9zdF9oZWFkZXIocmVxdWVzdCkKKyAg
ICBjb25uZWN0aW9uX3BvcnQgPSByZXF1ZXN0LmNvbm5lY3Rpb24ubG9jYWxfYWRkclsxXQorICAg
IGlmIHBvcnQgIT0gY29ubmVjdGlvbl9wb3J0OgorICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNl
cHRpb24oJ0hlYWRlci9jb25uZWN0aW9uIHBvcnQgbWlzbWF0Y2g6ICVkLyVkJyAlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAocG9ydCwgY29ubmVjdGlvbl9wb3J0KSkKKyAgICBs
b2NhdGlvbl9wYXJ0cy5hcHBlbmQoaG9zdCkKKyAgICBpZiAocG9ydCAhPSBnZXRfZGVmYXVsdF9w
b3J0KHJlcXVlc3QuaXNfaHR0cHMoKSkpOgorICAgICAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQo
JzonKQorICAgICAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoc3RyKHBvcnQpKQorICAgIGxvY2F0
aW9uX3BhcnRzLmFwcGVuZChyZXF1ZXN0LnVyaSkKKyAgICByZXR1cm4gJycuam9pbihsb2NhdGlv
bl9wYXJ0cykKKworCitkZWYgZ2V0X21hbmRhdG9yeV9oZWFkZXIocmVxdWVzdCwga2V5KToKKyAg
ICB2YWx1ZSA9IHJlcXVlc3QuaGVhZGVyc19pbi5nZXQoa2V5KQorICAgIGlmIHZhbHVlIGlzIE5v
bmU6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbignSGVhZGVyICVzIGlzIG5vdCBk
ZWZpbmVkJyAlIGtleSkKKyAgICByZXR1cm4gdmFsdWUKKworCitkZWYgdmFsaWRhdGVfbWFuZGF0
b3J5X2hlYWRlcihyZXF1ZXN0LCBrZXksIGV4cGVjdGVkX3ZhbHVlLCBmYWlsX3N0YXR1cz1Ob25l
KToKKyAgICB2YWx1ZSA9IGdldF9tYW5kYXRvcnlfaGVhZGVyKHJlcXVlc3QsIGtleSkKKworICAg
IGlmIHZhbHVlLmxvd2VyKCkgIT0gZXhwZWN0ZWRfdmFsdWUubG93ZXIoKToKKyAgICAgICAgcmFp
c2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAgICAgICAgJ0V4cGVjdGVkICVyIGZvciBoZWFk
ZXIgJXMgYnV0IGZvdW5kICVyIChjYXNlLWluc2Vuc2l0aXZlKScgJQorICAgICAgICAgICAgKGV4
cGVjdGVkX3ZhbHVlLCBrZXksIHZhbHVlKSwgc3RhdHVzPWZhaWxfc3RhdHVzKQorCisKK2RlZiBj
aGVja19yZXF1ZXN0X2xpbmUocmVxdWVzdCk6CisgICAgIyA1LjEgMS4gVGhlIHRocmVlIGNoYXJh
Y3RlciBVVEYtOCBzdHJpbmcgIkdFVCIuCisgICAgIyA1LjEgMi4gQSBVVEYtOC1lbmNvZGVkIFUr
MDAyMCBTUEFDRSBjaGFyYWN0ZXIgKDB4MjAgYnl0ZSkuCisgICAgaWYgcmVxdWVzdC5tZXRob2Qg
IT0gJ0dFVCc6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbignTWV0aG9kIGlzIG5v
dCBHRVQnKQorCisKK2RlZiBjaGVja19oZWFkZXJfbGluZXMocmVxdWVzdCwgbWFuZGF0b3J5X2hl
YWRlcnMpOgorICAgIGNoZWNrX3JlcXVlc3RfbGluZShyZXF1ZXN0KQorCisgICAgIyBUaGUgZXhw
ZWN0ZWQgZmllbGQgbmFtZXMsIGFuZCB0aGUgbWVhbmluZyBvZiB0aGVpciBjb3JyZXNwb25kaW5n
CisgICAgIyB2YWx1ZXMsIGFyZSBhcyBmb2xsb3dzLgorICAgICMgIHxVcGdyYWRlfCBhbmQgfENv
bm5lY3Rpb258CisgICAgZm9yIGtleSwgZXhwZWN0ZWRfdmFsdWUgaW4gbWFuZGF0b3J5X2hlYWRl
cnM6CisgICAgICAgIHZhbGlkYXRlX21hbmRhdG9yeV9oZWFkZXIocmVxdWVzdCwga2V5LCBleHBl
Y3RlZF92YWx1ZSkKKworCitkZWYgcGFyc2VfdG9rZW5fbGlzdChkYXRhKToKKyAgICAiIiJQYXJz
ZXMgYSBoZWFkZXIgdmFsdWUgd2hpY2ggZm9sbG93cyAxI3Rva2VuIGFuZCByZXR1cm5zIHBhcnNl
ZCBlbGVtZW50cworICAgIGFzIGEgbGlzdCBvZiBzdHJpbmdzLgorCisgICAgTGVhZGluZyBMV1Nl
cyBtdXN0IGJlIHRyaW1tZWQuCisgICAgIiIiCisKKyAgICBzdGF0ZSA9IGh0dHBfaGVhZGVyX3V0
aWwuUGFyc2luZ1N0YXRlKGRhdGEpCisKKyAgICB0b2tlbl9saXN0ID0gW10KKworICAgIHdoaWxl
IFRydWU6CisgICAgICAgIHRva2VuID0gaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX3Rva2VuKHN0
YXRlKQorICAgICAgICBpZiB0b2tlbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRva2VuX2xp
c3QuYXBwZW5kKHRva2VuKQorCisgICAgICAgIGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9sd3Nl
cyhzdGF0ZSkKKworICAgICAgICBpZiBodHRwX2hlYWRlcl91dGlsLnBlZWsoc3RhdGUpIGlzIE5v
bmU6CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5vdCBodHRwX2hlYWRlcl91dGls
LmNvbnN1bWVfc3RyaW5nKHN0YXRlLCAnLCcpOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtl
RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdFeHBlY3RlZCBhIGNvbW1hIGJ1dCBmb3VuZCAl
cicgJSBodHRwX2hlYWRlcl91dGlsLnBlZWsoc3RhdGUpKQorCisgICAgICAgIGh0dHBfaGVhZGVy
X3V0aWwuY29uc3VtZV9sd3NlcyhzdGF0ZSkKKworICAgIGlmIGxlbih0b2tlbl9saXN0KSA9PSAw
OgorICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oJ05vIHZhbGlkIHRva2VuIGZvdW5k
JykKKworICAgIHJldHVybiB0b2tlbl9saXN0CisKKworZGVmIF9wYXJzZV9leHRlbnNpb25fcGFy
YW0oc3RhdGUsIGRlZmluaXRpb24sIGFsbG93X3F1b3RlZF9zdHJpbmcpOgorICAgIHBhcmFtX25h
bWUgPSBodHRwX2hlYWRlcl91dGlsLmNvbnN1bWVfdG9rZW4oc3RhdGUpCisKKyAgICBpZiBwYXJh
bV9uYW1lIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbignTm8gdmFs
aWQgcGFyYW1ldGVyIG5hbWUgZm91bmQnKQorCisgICAgaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1l
X2x3c2VzKHN0YXRlKQorCisgICAgaWYgbm90IGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9zdHJp
bmcoc3RhdGUsICc9Jyk6CisgICAgICAgIGRlZmluaXRpb24uYWRkX3BhcmFtZXRlcihwYXJhbV9u
YW1lLCBOb25lKQorICAgICAgICByZXR1cm4KKworICAgIGh0dHBfaGVhZGVyX3V0aWwuY29uc3Vt
ZV9sd3NlcyhzdGF0ZSkKKworICAgIGlmIGFsbG93X3F1b3RlZF9zdHJpbmc6CisgICAgICAgICMg
VE9ETyh0b3lvc2hpbSk6IEFkZCBjb2RlIHRvIHZhbGlkYXRlIHRoYXQgcGFyc2VkIHBhcmFtX3Zh
bHVlIGlzIHRva2VuCisgICAgICAgIHBhcmFtX3ZhbHVlID0gaHR0cF9oZWFkZXJfdXRpbC5jb25z
dW1lX3Rva2VuX29yX3F1b3RlZF9zdHJpbmcoc3RhdGUpCisgICAgZWxzZToKKyAgICAgICAgcGFy
YW1fdmFsdWUgPSBodHRwX2hlYWRlcl91dGlsLmNvbnN1bWVfdG9rZW4oc3RhdGUpCisgICAgaWYg
cGFyYW1fdmFsdWUgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAor
ICAgICAgICAgICAgJ05vIHZhbGlkIHBhcmFtZXRlciB2YWx1ZSBmb3VuZCBvbiB0aGUgcmlnaHQt
aGFuZCBzaWRlIG9mICcKKyAgICAgICAgICAgICdwYXJhbWV0ZXIgJXInICUgcGFyYW1fbmFtZSkK
KworICAgIGRlZmluaXRpb24uYWRkX3BhcmFtZXRlcihwYXJhbV9uYW1lLCBwYXJhbV92YWx1ZSkK
KworCitkZWYgX3BhcnNlX2V4dGVuc2lvbihzdGF0ZSwgYWxsb3dfcXVvdGVkX3N0cmluZyk6Cisg
ICAgZXh0ZW5zaW9uX3Rva2VuID0gaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX3Rva2VuKHN0YXRl
KQorICAgIGlmIGV4dGVuc2lvbl90b2tlbiBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgZXh0ZW5zaW9uID0gY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlcihleHRlbnNpb25fdG9r
ZW4pCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBodHRwX2hlYWRlcl91dGlsLmNvbnN1bWVf
bHdzZXMoc3RhdGUpCisKKyAgICAgICAgaWYgbm90IGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9z
dHJpbmcoc3RhdGUsICc7Jyk6CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGh0dHBfaGVh
ZGVyX3V0aWwuY29uc3VtZV9sd3NlcyhzdGF0ZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAg
ICBfcGFyc2VfZXh0ZW5zaW9uX3BhcmFtKHN0YXRlLCBleHRlbnNpb24sIGFsbG93X3F1b3RlZF9z
dHJpbmcpCisgICAgICAgIGV4Y2VwdCBIYW5kc2hha2VFeGNlcHRpb24sIGU6CisgICAgICAgICAg
ICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBw
YXJzZSBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMgaGVhZGVyOiAnCisgICAgICAgICAgICAgICAg
J0ZhaWxlZCB0byBwYXJzZSBwYXJhbWV0ZXIgZm9yICVyICglciknICUKKyAgICAgICAgICAgICAg
ICAoZXh0ZW5zaW9uX3Rva2VuLCBlKSkKKworICAgIHJldHVybiBleHRlbnNpb24KKworCitkZWYg
cGFyc2VfZXh0ZW5zaW9ucyhkYXRhLCBhbGxvd19xdW90ZWRfc3RyaW5nPUZhbHNlKToKKyAgICAi
IiJQYXJzZXMgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zIGhlYWRlciB2YWx1ZSByZXR1cm5zIGEg
bGlzdCBvZgorICAgIGNvbW1vbi5FeHRlbnNpb25QYXJhbWV0ZXIgb2JqZWN0cy4KKworICAgIExl
YWRpbmcgTFdTZXMgbXVzdCBiZSB0cmltbWVkLgorICAgICIiIgorCisgICAgc3RhdGUgPSBodHRw
X2hlYWRlcl91dGlsLlBhcnNpbmdTdGF0ZShkYXRhKQorCisgICAgZXh0ZW5zaW9uX2xpc3QgPSBb
XQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGV4dGVuc2lvbiA9IF9wYXJzZV9leHRlbnNpb24o
c3RhdGUsIGFsbG93X3F1b3RlZF9zdHJpbmcpCisgICAgICAgIGlmIGV4dGVuc2lvbiBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgIGV4dGVuc2lvbl9saXN0LmFwcGVuZChleHRlbnNpb24pCisKKyAg
ICAgICAgaHR0cF9oZWFkZXJfdXRpbC5jb25zdW1lX2x3c2VzKHN0YXRlKQorCisgICAgICAgIGlm
IGh0dHBfaGVhZGVyX3V0aWwucGVlayhzdGF0ZSkgaXMgTm9uZToKKyAgICAgICAgICAgIGJyZWFr
CisKKyAgICAgICAgaWYgbm90IGh0dHBfaGVhZGVyX3V0aWwuY29uc3VtZV9zdHJpbmcoc3RhdGUs
ICcsJyk6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAg
ICAgICAgJ0ZhaWxlZCB0byBwYXJzZSBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMgaGVhZGVyOiAn
CisgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIGEgY29tbWEgYnV0IGZvdW5kICVyJyAlCisgICAg
ICAgICAgICAgICAgaHR0cF9oZWFkZXJfdXRpbC5wZWVrKHN0YXRlKSkKKworICAgICAgICBodHRw
X2hlYWRlcl91dGlsLmNvbnN1bWVfbHdzZXMoc3RhdGUpCisKKyAgICBpZiBsZW4oZXh0ZW5zaW9u
X2xpc3QpID09IDA6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbigKKyAgICAgICAg
ICAgICdTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMgaGVhZGVyIGNvbnRhaW5zIG5vIHZhbGlkIGV4
dGVuc2lvbicpCisKKyAgICByZXR1cm4gZXh0ZW5zaW9uX2xpc3QKKworCitkZWYgZm9ybWF0X2V4
dGVuc2lvbnMoZXh0ZW5zaW9uX2xpc3QpOgorICAgIGZvcm1hdHRlZF9leHRlbnNpb25fbGlzdCA9
IFtdCisgICAgZm9yIGV4dGVuc2lvbiBpbiBleHRlbnNpb25fbGlzdDoKKyAgICAgICAgZm9ybWF0
dGVkX3BhcmFtcyA9IFtleHRlbnNpb24ubmFtZSgpXQorICAgICAgICBmb3IgcGFyYW1fbmFtZSwg
cGFyYW1fdmFsdWUgaW4gZXh0ZW5zaW9uLmdldF9wYXJhbWV0ZXJzKCk6CisgICAgICAgICAgICBp
ZiBwYXJhbV92YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGZvcm1hdHRlZF9wYXJhbXMu
YXBwZW5kKHBhcmFtX25hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHF1
b3RlZF92YWx1ZSA9IGh0dHBfaGVhZGVyX3V0aWwucXVvdGVfaWZfbmVjZXNzYXJ5KHBhcmFtX3Zh
bHVlKQorICAgICAgICAgICAgICAgIGZvcm1hdHRlZF9wYXJhbXMuYXBwZW5kKCclcz0lcycgJSAo
cGFyYW1fbmFtZSwgcXVvdGVkX3ZhbHVlKSkKKworICAgICAgICBmb3JtYXR0ZWRfZXh0ZW5zaW9u
X2xpc3QuYXBwZW5kKCc7ICcuam9pbihmb3JtYXR0ZWRfcGFyYW1zKSkKKworICAgIHJldHVybiAn
LCAnLmpvaW4oZm9ybWF0dGVkX2V4dGVuc2lvbl9saXN0KQorCisKKyMgdmk6c3RzPTQgc3c9NCBl
dApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdl
YnNvY2tldC9oYW5kc2hha2UvZHJhZnQ3NS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL2RyYWZ0NzUucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODAyYTMxYzlhOTZlMGVkZTZiOTUxNDM3YTFlYWYzMzNmMmY5MDQxYwotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvaGFu
ZHNoYWtlL2RyYWZ0NzUucHkKQEAgLTAsMCArMSwxOTAgQEAKKyMgQ29weXJpZ2h0IDIwMTEsIEdv
b2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisK
KyIiIldlYlNvY2tldCBoYW5kc2hha2luZyBkZWZpbmVkIGluIGRyYWZ0LWhpeGllLXRoZXdlYnNv
Y2tldHByb3RvY29sLTc1LiIiIgorCisKKyMgTm90ZTogcmVxdWVzdC5jb25uZWN0aW9uLndyaXRl
IGlzIHVzZWQgaW4gdGhpcyBtb2R1bGUsIGV2ZW4gdGhvdWdoIG1vZF9weXRob24KKyMgZG9jdW1l
bnQgc2F5cyB0aGF0IGl0IHNob3VsZCBiZSB1c2VkIG9ubHkgaW4gY29ubmVjdGlvbiBoYW5kbGVy
cy4KKyMgVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSBubyBvdGhlciBvcHRpb25zLiBGb3IgZXhhbXBs
ZSwgcmVxdWVzdC53cml0ZSBpcyBub3QKKyMgc3VpdGFibGUgYmVjYXVzZSBpdCBkb2Vzbid0IGFs
bG93IGRpcmVjdCByYXcgYnl0ZXMgd3JpdGluZy4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IHJlCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vi
c29ja2V0LnN0cmVhbSBpbXBvcnQgU3RyZWFtSGl4aWU3NQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQg
aW1wb3J0IHV0aWwKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQg
SGFuZHNoYWtlRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2Ug
aW1wb3J0IGJ1aWxkX2xvY2F0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jh
c2UgaW1wb3J0IHZhbGlkYXRlX3N1YnByb3RvY29sCisKKworX01BTkRBVE9SWV9IRUFERVJTID0g
WworICAgICMga2V5LCBleHBlY3RlZCB2YWx1ZSBvciBOb25lCisgICAgWydVcGdyYWRlJywgJ1dl
YlNvY2tldCddLAorICAgIFsnQ29ubmVjdGlvbicsICdVcGdyYWRlJ10sCisgICAgWydIb3N0Jywg
Tm9uZV0sCisgICAgWydPcmlnaW4nLCBOb25lXSwKK10KKworX0ZJUlNUX0ZJVkVfTElORVMgPSBt
YXAocmUuY29tcGlsZSwgWworICAgIHInXkdFVCAvW1xTXSogSFRUUC8xLjFcclxuJCcsCisgICAg
cideVXBncmFkZTogV2ViU29ja2V0XHJcbiQnLAorICAgIHInXkNvbm5lY3Rpb246IFVwZ3JhZGVc
clxuJCcsCisgICAgcideSG9zdDogW1xTXStcclxuJCcsCisgICAgcideT3JpZ2luOiBbXFNdK1xy
XG4kJywKK10pCisKK19TSVhUSF9BTkRfTEFURVIgPSByZS5jb21waWxlKAorICAgIHInXicKKyAg
ICByJyhXZWJTb2NrZXQtUHJvdG9jb2w6IFtceDIwLVx4N2VdK1xyXG4pPycKKyAgICByJyhDb29r
aWU6IFteXHJdKlxyXG4pKicKKyAgICByJyhDb29raWUyOiBbXlxyXSpcclxuKT8nCisgICAgcico
Q29va2llOiBbXlxyXSpcclxuKSonCisgICAgcidcclxuJykKKworCitjbGFzcyBIYW5kc2hha2Vy
KG9iamVjdCk6CisgICAgIiIiVGhpcyBjbGFzcyBwZXJmb3JtcyBXZWJTb2NrZXQgaGFuZHNoYWtl
LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIGRpc3BhdGNoZXIsIHN0cmlj
dD1GYWxzZSk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAg
ICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciAoZGlzcGF0Y2guRGlzcGF0Y2hlcikuCisgICAgICAg
ICAgICBzdHJpY3Q6IFN0cmljdGx5IGNoZWNrIGhhbmRzaGFrZSByZXF1ZXN0LiBEZWZhdWx0OiBG
YWxzZS4KKyAgICAgICAgICAgICAgICBJZiBUcnVlLCByZXF1ZXN0LmNvbm5lY3Rpb24gbXVzdCBw
cm92aWRlIGdldF9tZW1vcml6ZWRfbGluZXMKKyAgICAgICAgICAgICAgICBtZXRob2QuCisKKyAg
ICAgICAgSGFuZHNoYWtlciB3aWxsIGFkZCBhdHRyaWJ1dGVzIHN1Y2ggYXMgd3NfcmVzb3VyY2Ug
aW4gcGVyZm9ybWluZworICAgICAgICBoYW5kc2hha2UuCisgICAgICAgICIiIgorCisgICAgICAg
IHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNl
bGYuX3JlcXVlc3QgPSByZXF1ZXN0CisgICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIgPSBkaXNwYXRj
aGVyCisgICAgICAgIHNlbGYuX3N0cmljdCA9IHN0cmljdAorCisgICAgZGVmIGRvX2hhbmRzaGFr
ZShzZWxmKToKKyAgICAgICAgIiIiUGVyZm9ybSBXZWJTb2NrZXQgSGFuZHNoYWtlLgorCisgICAg
ICAgIE9uIF9yZXF1ZXN0LCB3ZSBzZXQKKyAgICAgICAgICAgIHdzX3Jlc291cmNlLCB3c19vcmln
aW4sIHdzX2xvY2F0aW9uLCB3c19wcm90b2NvbAorICAgICAgICAgICAgd3NfY2hhbGxlbmdlX21k
NTogV2ViU29ja2V0IGhhbmRzaGFrZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIHdzX3N0cmVh
bTogRnJhbWUgZ2VuZXJhdGlvbi9wYXJzaW5nIGNsYXNzLgorICAgICAgICAgICAgd3NfdmVyc2lv
bjogUHJvdG9jb2wgdmVyc2lvbi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fY2hlY2tf
aGVhZGVyX2xpbmVzKCkKKyAgICAgICAgc2VsZi5fc2V0X3Jlc291cmNlKCkKKyAgICAgICAgc2Vs
Zi5fc2V0X29yaWdpbigpCisgICAgICAgIHNlbGYuX3NldF9sb2NhdGlvbigpCisgICAgICAgIHNl
bGYuX3NldF9zdWJwcm90b2NvbCgpCisgICAgICAgIHNlbGYuX3NldF9wcm90b2NvbF92ZXJzaW9u
KCkKKworICAgICAgICBzZWxmLl9kaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFrZShzZWxmLl9y
ZXF1ZXN0KQorCisgICAgICAgIHNlbGYuX3NlbmRfaGFuZHNoYWtlKCkKKworICAgICAgICBzZWxm
Ll9sb2dnZXIuZGVidWcoJ1NlbnQgb3BlbmluZyBoYW5kc2hha2UgcmVzcG9uc2UnKQorCisgICAg
ZGVmIF9zZXRfcmVzb3VyY2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcmVzb3Vy
Y2UgPSBzZWxmLl9yZXF1ZXN0LnVyaQorCisgICAgZGVmIF9zZXRfb3JpZ2luKHNlbGYpOgorICAg
ICAgICBzZWxmLl9yZXF1ZXN0LndzX29yaWdpbiA9IHNlbGYuX3JlcXVlc3QuaGVhZGVyc19pblsn
T3JpZ2luJ10KKworICAgIGRlZiBfc2V0X2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl9y
ZXF1ZXN0LndzX2xvY2F0aW9uID0gYnVpbGRfbG9jYXRpb24oc2VsZi5fcmVxdWVzdCkKKworICAg
IGRlZiBfc2V0X3N1YnByb3RvY29sKHNlbGYpOgorICAgICAgICBzdWJwcm90b2NvbCA9IHNlbGYu
X3JlcXVlc3QuaGVhZGVyc19pbi5nZXQoJ1dlYlNvY2tldC1Qcm90b2NvbCcpCisgICAgICAgIGlm
IHN1YnByb3RvY29sIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdmFsaWRhdGVfc3VicHJvdG9j
b2woc3VicHJvdG9jb2wsIGhpeGllPVRydWUpCisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcHJv
dG9jb2wgPSBzdWJwcm90b2NvbAorCisgICAgZGVmIF9zZXRfcHJvdG9jb2xfdmVyc2lvbihzZWxm
KToKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdJRVRGIEhpeGllIDc1IHByb3RvY29sJykK
KyAgICAgICAgc2VsZi5fcmVxdWVzdC53c192ZXJzaW9uID0gY29tbW9uLlZFUlNJT05fSElYSUU3
NQorICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX3N0cmVhbSA9IFN0cmVhbUhpeGllNzUoc2VsZi5f
cmVxdWVzdCkKKworICAgIGRlZiBfc2VuZGFsbChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5f
cmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKGRhdGEpCisKKyAgICBkZWYgX3NlbmRfaGFuZHNoYWtl
KHNlbGYpOgorICAgICAgICBzZWxmLl9zZW5kYWxsKCdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQ
cm90b2NvbCBIYW5kc2hha2VcclxuJykKKyAgICAgICAgc2VsZi5fc2VuZGFsbCgnVXBncmFkZTog
V2ViU29ja2V0XHJcbicpCisgICAgICAgIHNlbGYuX3NlbmRhbGwoJ0Nvbm5lY3Rpb246IFVwZ3Jh
ZGVcclxuJykKKyAgICAgICAgc2VsZi5fc2VuZGFsbCgnV2ViU29ja2V0LU9yaWdpbjogJXNcclxu
JyAlIHNlbGYuX3JlcXVlc3Qud3Nfb3JpZ2luKQorICAgICAgICBzZWxmLl9zZW5kYWxsKCdXZWJT
b2NrZXQtTG9jYXRpb246ICVzXHJcbicgJSBzZWxmLl9yZXF1ZXN0LndzX2xvY2F0aW9uKQorICAg
ICAgICBpZiBzZWxmLl9yZXF1ZXN0LndzX3Byb3RvY29sOgorICAgICAgICAgICAgc2VsZi5fc2Vu
ZGFsbCgKKyAgICAgICAgICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sOiAlc1xyXG4nICUgc2Vs
Zi5fcmVxdWVzdC53c19wcm90b2NvbCkKKyAgICAgICAgc2VsZi5fc2VuZGFsbCgnXHJcbicpCisK
KyAgICBkZWYgX2NoZWNrX2hlYWRlcl9saW5lcyhzZWxmKToKKyAgICAgICAgZm9yIGtleSwgZXhw
ZWN0ZWRfdmFsdWUgaW4gX01BTkRBVE9SWV9IRUFERVJTOgorICAgICAgICAgICAgYWN0dWFsX3Zh
bHVlID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luLmdldChrZXkpCisgICAgICAgICAgICBpZiBu
b3QgYWN0dWFsX3ZhbHVlOgorICAgICAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlv
bignSGVhZGVyICVzIGlzIG5vdCBkZWZpbmVkJyAlIGtleSkKKyAgICAgICAgICAgIGlmIGV4cGVj
dGVkX3ZhbHVlOgorICAgICAgICAgICAgICAgIGlmIGFjdHVhbF92YWx1ZSAhPSBleHBlY3RlZF92
YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAg
ICAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkICVyIGZvciBoZWFkZXIgJXMgYnV0IGZvdW5k
ICVyJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfdmFsdWUsIGtleSwgYWN0
dWFsX3ZhbHVlKSkKKyAgICAgICAgaWYgc2VsZi5fc3RyaWN0OgorICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgIGxpbmVzID0gc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLmdldF9tZW1v
cml6ZWRfbGluZXMoKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgorICAg
ICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAn
U3RyaWN0IGhhbmRzaGFrZSBpcyBzcGVjaWZpZWQgYnV0IHRoZSBjb25uZWN0aW9uICcKKyAgICAg
ICAgICAgICAgICAgICAgJ2RvZXNuXCd0IHByb3ZpZGUgZ2V0X21lbW9yaXplZF9saW5lcygpJykK
KyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2ZpcnN0X2xpbmVzKGxpbmVzKQorCisgICAgZGVmIF9j
aGVja19maXJzdF9saW5lcyhzZWxmLCBsaW5lcyk6CisgICAgICAgIGlmIGxlbihsaW5lcykgPCBs
ZW4oX0ZJUlNUX0ZJVkVfTElORVMpOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0
aW9uKCdUb28gZmV3IGhlYWRlciBsaW5lczogJWQnICUgbGVuKGxpbmVzKSkKKyAgICAgICAgZm9y
IGxpbmUsIHJlZ2V4cCBpbiB6aXAobGluZXMsIF9GSVJTVF9GSVZFX0xJTkVTKToKKyAgICAgICAg
ICAgIGlmIG5vdCByZWdleHAuc2VhcmNoKGxpbmUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEhh
bmRzaGFrZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgaGVhZGVy
OiAlciBkb2VzblwndCBtYXRjaCAlcicKKyAgICAgICAgICAgICAgICAgICAgJSAobGluZSwgcmVn
ZXhwLnBhdHRlcm4pKQorICAgICAgICBzaXh0aF9hbmRfbGF0ZXIgPSAnJy5qb2luKGxpbmVzWzU6
XSkKKyAgICAgICAgaWYgbm90IF9TSVhUSF9BTkRfTEFURVIuc2VhcmNoKHNpeHRoX2FuZF9sYXRl
cik6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAg
ICAgJ1VuZXhwZWN0ZWQgaGVhZGVyOiAlciBkb2VzblwndCBtYXRjaCAlcicKKyAgICAgICAgICAg
ICAgICAlIChzaXh0aF9hbmRfbGF0ZXIsIF9TSVhUSF9BTkRfTEFURVIucGF0dGVybikpCisKKwor
IyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9oeWJpLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvaHliaS5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zYmM4NGJkMjY1NjkyZmY5Y2RjOTMxZmIyNzRlZGI4MzhiZjk1ZmVkCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdl
YnNvY2tldC9oYW5kc2hha2UvaHliaS5weQpAQCAtMCwwICsxLDM3MCBAQAorIyBDb3B5cmlnaHQg
MjAxMSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKworIiIiVGhpcyBmaWxlIHByb3ZpZGVzIHRoZSBvcGVuaW5nIGhhbmRzaGFrZSBwcm9j
ZXNzb3IgZm9yIHRoZSBXZWJTb2NrZXQKK3Byb3RvY29sIChSRkMgNjQ1NSkuCisKK1NwZWNpZmlj
YXRpb246CitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU1CisiIiIKKworCisjIE5v
dGU6IHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZSBpcyB1c2VkIGluIHRoaXMgbW9kdWxlLCBldmVu
IHRob3VnaCBtb2RfcHl0aG9uCisjIGRvY3VtZW50IHNheXMgdGhhdCBpdCBzaG91bGQgYmUgdXNl
ZCBvbmx5IGluIGNvbm5lY3Rpb24gaGFuZGxlcnMuCisjIFVuZm9ydHVuYXRlbHksIHdlIGhhdmUg
bm8gb3RoZXIgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIHJlcXVlc3Qud3JpdGUgaXMgbm90CisjIHN1
aXRhYmxlIGJlY2F1c2UgaXQgZG9lc24ndCBhbGxvdyBkaXJlY3QgcmF3IGJ5dGVzIHdyaXRpbmcu
CisKKworaW1wb3J0IGJhc2U2NAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJl
CisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29j
a2V0LmV4dGVuc2lvbnMgaW1wb3J0IGdldF9leHRlbnNpb25fcHJvY2Vzc29yCitmcm9tIG1vZF9w
eXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IGNoZWNrX3JlcXVlc3RfbGluZQorZnJv
bSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBmb3JtYXRfZXh0ZW5zaW9u
cworZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBmb3JtYXRfaGVh
ZGVyCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IGdldF9tYW5k
YXRvcnlfaGVhZGVyCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0
IEhhbmRzaGFrZUV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNl
IGltcG9ydCBwYXJzZV9leHRlbnNpb25zCitmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2Uu
X2Jhc2UgaW1wb3J0IHBhcnNlX3Rva2VuX2xpc3QKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRz
aGFrZS5fYmFzZSBpbXBvcnQgdmFsaWRhdGVfbWFuZGF0b3J5X2hlYWRlcgorZnJvbSBtb2RfcHl3
ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCB2YWxpZGF0ZV9zdWJwcm90b2NvbAorZnJv
bSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBWZXJzaW9uRXhjZXB0aW9u
Citmcm9tIG1vZF9weXdlYnNvY2tldC5zdHJlYW0gaW1wb3J0IFN0cmVhbQorZnJvbSBtb2RfcHl3
ZWJzb2NrZXQuc3RyZWFtIGltcG9ydCBTdHJlYW1PcHRpb25zCitmcm9tIG1vZF9weXdlYnNvY2tl
dCBpbXBvcnQgdXRpbAorCisKKyMgVXNlZCB0byB2YWxpZGF0ZSB0aGUgdmFsdWUgaW4gdGhlIFNl
Yy1XZWJTb2NrZXQtS2V5IGhlYWRlciBzdHJpY3RseS4gUkZDIDQ2NDgKKyMgZGlzYWxsb3dzIG5v
bi16ZXJvIHBhZGRpbmcsIHNvIHRoZSBjaGFyYWN0ZXIgcmlnaHQgYmVmb3JlID09IG11c3QgYmUg
YW55IG9mCisjIEEsIFEsIGcgYW5kIHcuCitfU0VDX1dFQlNPQ0tFVF9LRVlfUkVHRVggPSByZS5j
b21waWxlKCdeWysvMC05QS1aYS16XXsyMX1bQVFnd109PSQnKQorCisjIERlZmluaW5nIGFsaWFz
ZXMgZm9yIHZhbHVlcyB1c2VkIGZyZXF1ZW50bHkuCitfVkVSU0lPTl9IWUJJMDggPSBjb21tb24u
VkVSU0lPTl9IWUJJMDgKK19WRVJTSU9OX0hZQkkwOF9TVFJJTkcgPSBzdHIoX1ZFUlNJT05fSFlC
STA4KQorX1ZFUlNJT05fTEFURVNUID0gY29tbW9uLlZFUlNJT05fSFlCSV9MQVRFU1QKK19WRVJT
SU9OX0xBVEVTVF9TVFJJTkcgPSBzdHIoX1ZFUlNJT05fTEFURVNUKQorX1NVUFBPUlRFRF9WRVJT
SU9OUyA9IFsKKyAgICBfVkVSU0lPTl9MQVRFU1QsCisgICAgX1ZFUlNJT05fSFlCSTA4LAorXQor
CisKK2RlZiBjb21wdXRlX2FjY2VwdChrZXkpOgorICAgICIiIkNvbXB1dGVzIHZhbHVlIGZvciB0
aGUgU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyIGZyb20gdmFsdWUgb2YgdGhlCisgICAgU2Vj
LVdlYlNvY2tldC1LZXkgaGVhZGVyLgorICAgICIiIgorCisgICAgYWNjZXB0X2JpbmFyeSA9IHV0
aWwuc2hhMV9oYXNoKAorICAgICAgICBrZXkgKyBjb21tb24uV0VCU09DS0VUX0FDQ0VQVF9VVUlE
KS5kaWdlc3QoKQorICAgIGFjY2VwdCA9IGJhc2U2NC5iNjRlbmNvZGUoYWNjZXB0X2JpbmFyeSkK
KworICAgIHJldHVybiAoYWNjZXB0LCBhY2NlcHRfYmluYXJ5KQorCisKK2NsYXNzIEhhbmRzaGFr
ZXIob2JqZWN0KToKKyAgICAiIiJPcGVuaW5nIGhhbmRzaGFrZSBwcm9jZXNzb3IgZm9yIHRoZSBX
ZWJTb2NrZXQgcHJvdG9jb2wgKFJGQyA2NDU1KS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCByZXF1ZXN0LCBkaXNwYXRjaGVyKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNl
LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVl
c3QuCisgICAgICAgICAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyIChkaXNwYXRjaC5EaXNwYXRj
aGVyKS4KKworICAgICAgICBIYW5kc2hha2VyIHdpbGwgYWRkIGF0dHJpYnV0ZXMgc3VjaCBhcyB3
c19yZXNvdXJjZSBkdXJpbmcgaGFuZHNoYWtlLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxm
Ll9sb2dnZXIgPSB1dGlsLmdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBzZWxmLl9y
ZXF1ZXN0ID0gcmVxdWVzdAorICAgICAgICBzZWxmLl9kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcgor
CisgICAgZGVmIF92YWxpZGF0ZV9jb25uZWN0aW9uX2hlYWRlcihzZWxmKToKKyAgICAgICAgY29u
bmVjdGlvbiA9IGdldF9tYW5kYXRvcnlfaGVhZGVyKAorICAgICAgICAgICAgc2VsZi5fcmVxdWVz
dCwgY29tbW9uLkNPTk5FQ1RJT05fSEVBREVSKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IGNvbm5lY3Rpb25fdG9rZW5zID0gcGFyc2VfdG9rZW5fbGlzdChjb25uZWN0aW9uKQorICAgICAg
ICBleGNlcHQgSGFuZHNoYWtlRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNo
YWtlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gcGFyc2UgJXM6ICVzJyAl
IChjb21tb24uQ09OTkVDVElPTl9IRUFERVIsIGUpKQorCisgICAgICAgIGNvbm5lY3Rpb25faXNf
dmFsaWQgPSBGYWxzZQorICAgICAgICBmb3IgdG9rZW4gaW4gY29ubmVjdGlvbl90b2tlbnM6Cisg
ICAgICAgICAgICBpZiB0b2tlbi5sb3dlcigpID09IGNvbW1vbi5VUEdSQURFX0NPTk5FQ1RJT05f
VFlQRS5sb3dlcigpOgorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25faXNfdmFsaWQgPSBUcnVl
CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb25faXNfdmFs
aWQ6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAg
ICAgJyVzIGhlYWRlciBkb2VzblwndCBjb250YWluICIlcyInICUKKyAgICAgICAgICAgICAgICAo
Y29tbW9uLkNPTk5FQ1RJT05fSEVBREVSLCBjb21tb24uVVBHUkFERV9DT05ORUNUSU9OX1RZUEUp
KQorCisgICAgZGVmIGRvX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53
c19jbG9zZV9jb2RlID0gTm9uZQorICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2Nsb3NlX3JlYXNv
biA9IE5vbmUKKworICAgICAgICAjIFBhcnNpbmcuCisKKyAgICAgICAgY2hlY2tfcmVxdWVzdF9s
aW5lKHNlbGYuX3JlcXVlc3QpCisKKyAgICAgICAgdmFsaWRhdGVfbWFuZGF0b3J5X2hlYWRlcigK
KyAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QsCisgICAgICAgICAgICBjb21tb24uVVBHUkFERV9I
RUFERVIsCisgICAgICAgICAgICBjb21tb24uV0VCU09DS0VUX1VQR1JBREVfVFlQRSkKKworICAg
ICAgICBzZWxmLl92YWxpZGF0ZV9jb25uZWN0aW9uX2hlYWRlcigpCisKKyAgICAgICAgc2VsZi5f
cmVxdWVzdC53c19yZXNvdXJjZSA9IHNlbGYuX3JlcXVlc3QudXJpCisKKyAgICAgICAgdW51c2Vk
X2hvc3QgPSBnZXRfbWFuZGF0b3J5X2hlYWRlcihzZWxmLl9yZXF1ZXN0LCBjb21tb24uSE9TVF9I
RUFERVIpCisKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c192ZXJzaW9uID0gc2VsZi5fY2hlY2tf
dmVyc2lvbigpCisKKyAgICAgICAgIyBUaGlzIGhhbmRzaGFrZSBtdXN0IGJlIGJhc2VkIG9uIGxh
dGVzdCBoeWJpLiBXZSBhcmUgcmVzcG9uc2libGUgdG8KKyAgICAgICAgIyBmYWxsYmFjayB0byBI
VFRQIG9uIGhhbmRzaGFrZSBmYWlsdXJlIGFzIGxhdGVzdCBoeWJpIGhhbmRzaGFrZQorICAgICAg
ICAjIHNwZWNpZmllcy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZ2V0X29yaWdp
bigpCisgICAgICAgICAgICBzZWxmLl9zZXRfcHJvdG9jb2woKQorICAgICAgICAgICAgc2VsZi5f
cGFyc2VfZXh0ZW5zaW9ucygpCisKKyAgICAgICAgICAgICMgS2V5IHZhbGlkYXRpb24sIHJlc3Bv
bnNlIGdlbmVyYXRpb24uCisKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2dldF9rZXkoKQorICAg
ICAgICAgICAgKGFjY2VwdCwgYWNjZXB0X2JpbmFyeSkgPSBjb21wdXRlX2FjY2VwdChrZXkpCisg
ICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAgICAgJyVzOiAlciAo
JXMpJywKKyAgICAgICAgICAgICAgICBjb21tb24uU0VDX1dFQlNPQ0tFVF9BQ0NFUFRfSEVBREVS
LAorICAgICAgICAgICAgICAgIGFjY2VwdCwKKyAgICAgICAgICAgICAgICB1dGlsLmhleGlmeShh
Y2NlcHRfYmluYXJ5KSkKKworICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdQcm90b2Nv
bCB2ZXJzaW9uIGlzIFJGQyA2NDU1JykKKworICAgICAgICAgICAgIyBTZXR1cCBleHRlbnNpb24g
cHJvY2Vzc29ycy4KKworICAgICAgICAgICAgcHJvY2Vzc29ycyA9IFtdCisgICAgICAgICAgICBp
ZiBzZWxmLl9yZXF1ZXN0LndzX3JlcXVlc3RlZF9leHRlbnNpb25zIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgICAgIGZvciBleHRlbnNpb25fcmVxdWVzdCBpbiBzZWxmLl9yZXF1ZXN0LndzX3Jl
cXVlc3RlZF9leHRlbnNpb25zOgorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3IgPSBnZXRf
ZXh0ZW5zaW9uX3Byb2Nlc3NvcihleHRlbnNpb25fcmVxdWVzdCkKKyAgICAgICAgICAgICAgICAg
ICAgIyBVbmtub3duIGV4dGVuc2lvbiByZXF1ZXN0cyBhcmUganVzdCBpZ25vcmVkLgorICAgICAg
ICAgICAgICAgICAgICBpZiBwcm9jZXNzb3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzb3JzLmFwcGVuZChwcm9jZXNzb3IpCisgICAgICAgICAgICBzZWxmLl9y
ZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzID0gcHJvY2Vzc29ycworCisgICAgICAgICAg
ICAjIEV4dHJhIGhhbmRzaGFrZSBoYW5kbGVyIG1heSBtb2RpZnkvcmVtb3ZlIHByb2Nlc3NvcnMu
CisgICAgICAgICAgICBzZWxmLl9kaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFrZShzZWxmLl9y
ZXF1ZXN0KQorCisgICAgICAgICAgICBzdHJlYW1fb3B0aW9ucyA9IFN0cmVhbU9wdGlvbnMoKQor
CisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2V4dGVuc2lvbnMgPSBOb25lCisgICAgICAg
ICAgICBmb3IgcHJvY2Vzc29yIGluIHNlbGYuX3JlcXVlc3Qud3NfZXh0ZW5zaW9uX3Byb2Nlc3Nv
cnM6CisgICAgICAgICAgICAgICAgaWYgcHJvY2Vzc29yIGlzIE5vbmU6CisgICAgICAgICAgICAg
ICAgICAgICMgU29tZSBwcm9jZXNzb3JzIG1heSBiZSByZW1vdmVkIGJ5IGV4dHJhIGhhbmRzaGFr
ZQorICAgICAgICAgICAgICAgICAgICAjIGhhbmRsZXIuCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlCisKKyAgICAgICAgICAgICAgICBleHRlbnNpb25fcmVzcG9uc2UgPSBwcm9jZXNzb3Iu
Z2V0X2V4dGVuc2lvbl9yZXNwb25zZSgpCisgICAgICAgICAgICAgICAgaWYgZXh0ZW5zaW9uX3Jl
c3BvbnNlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgUmVqZWN0ZWQuCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0
LndzX2V4dGVuc2lvbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVz
dC53c19leHRlbnNpb25zID0gW10KKyAgICAgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2V4
dGVuc2lvbnMuYXBwZW5kKGV4dGVuc2lvbl9yZXNwb25zZSkKKworICAgICAgICAgICAgICAgIHBy
b2Nlc3Nvci5zZXR1cF9zdHJlYW1fb3B0aW9ucyhzdHJlYW1fb3B0aW9ucykKKworICAgICAgICAg
ICAgaWYgc2VsZi5fcmVxdWVzdC53c19leHRlbnNpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAgICAgJ0V4dGVuc2lv
bnMgYWNjZXB0ZWQ6ICVyJywKKyAgICAgICAgICAgICAgICAgICAgbWFwKGNvbW1vbi5FeHRlbnNp
b25QYXJhbWV0ZXIubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3Qu
d3NfZXh0ZW5zaW9ucykpCisKKyAgICAgICAgICAgIHNlbGYuX3JlcXVlc3Qud3Nfc3RyZWFtID0g
U3RyZWFtKHNlbGYuX3JlcXVlc3QsIHN0cmVhbV9vcHRpb25zKQorCisgICAgICAgICAgICBpZiBz
ZWxmLl9yZXF1ZXN0LndzX3JlcXVlc3RlZF9wcm90b2NvbHMgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCBpcyBOb25lOgorICAgICAgICAg
ICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAg
ICAgICAnZG9fZXh0cmFfaGFuZHNoYWtlIG11c3QgY2hvb3NlIG9uZSBzdWJwcm90b2NvbCBmcm9t
ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICd3c19yZXF1ZXN0ZWRfcHJvdG9jb2xzIGFuZCBz
ZXQgaXQgdG8gd3NfcHJvdG9jb2wnKQorICAgICAgICAgICAgICAgIHZhbGlkYXRlX3N1YnByb3Rv
Y29sKHNlbGYuX3JlcXVlc3Qud3NfcHJvdG9jb2wsIGhpeGllPUZhbHNlKQorCisgICAgICAgICAg
ICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgICAgICAgICAnU3VicHJvdG9j
b2wgYWNjZXB0ZWQ6ICVyJywKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53c19w
cm90b2NvbCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fcmVx
dWVzdC53c19wcm90b2NvbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ug
SGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgJ3dzX3Byb3RvY29s
IG11c3QgYmUgTm9uZSB3aGVuIHRoZSBjbGllbnQgZGlkblwndCAnCisgICAgICAgICAgICAgICAg
ICAgICAgICAncmVxdWVzdCBhbnkgc3VicHJvdG9jb2wnKQorCisgICAgICAgICAgICBzZWxmLl9z
ZW5kX2hhbmRzaGFrZShhY2NlcHQpCisgICAgICAgIGV4Y2VwdCBIYW5kc2hha2VFeGNlcHRpb24s
IGU6CisgICAgICAgICAgICBpZiBub3QgZS5zdGF0dXM6CisgICAgICAgICAgICAgICAgIyBGYWxs
YmFjayB0byA0MDAgYmFkIHJlcXVlc3QgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBlLnN0
YXR1cyA9IGNvbW1vbi5IVFRQX1NUQVRVU19CQURfUkVRVUVTVAorICAgICAgICAgICAgcmFpc2Ug
ZQorCisgICAgZGVmIF9nZXRfb3JpZ2luKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0
LndzX3ZlcnNpb24gaXMgX1ZFUlNJT05fSFlCSTA4OgorICAgICAgICAgICAgb3JpZ2luX2hlYWRl
ciA9IGNvbW1vbi5TRUNfV0VCU09DS0VUX09SSUdJTl9IRUFERVIKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIG9yaWdpbl9oZWFkZXIgPSBjb21tb24uT1JJR0lOX0hFQURFUgorICAgICAgICBv
cmlnaW4gPSBzZWxmLl9yZXF1ZXN0LmhlYWRlcnNfaW4uZ2V0KG9yaWdpbl9oZWFkZXIpCisgICAg
ICAgIGlmIG9yaWdpbiBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdD
bGllbnQgcmVxdWVzdCBkb2VzIG5vdCBoYXZlIG9yaWdpbiBoZWFkZXInKQorICAgICAgICBzZWxm
Ll9yZXF1ZXN0LndzX29yaWdpbiA9IG9yaWdpbgorCisgICAgZGVmIF9jaGVja192ZXJzaW9uKHNl
bGYpOgorICAgICAgICB2ZXJzaW9uID0gZ2V0X21hbmRhdG9yeV9oZWFkZXIoc2VsZi5fcmVxdWVz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbi5TRUNfV0VC
U09DS0VUX1ZFUlNJT05fSEVBREVSKQorICAgICAgICBpZiB2ZXJzaW9uID09IF9WRVJTSU9OX0hZ
QkkwOF9TVFJJTkc6CisgICAgICAgICAgICByZXR1cm4gX1ZFUlNJT05fSFlCSTA4CisgICAgICAg
IGlmIHZlcnNpb24gPT0gX1ZFUlNJT05fTEFURVNUX1NUUklORzoKKyAgICAgICAgICAgIHJldHVy
biBfVkVSU0lPTl9MQVRFU1QKKworICAgICAgICBpZiB2ZXJzaW9uLmZpbmQoJywnKSA+PSAwOgor
ICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdN
dWx0aXBsZSB2ZXJzaW9ucyAoJXIpIGFyZSBub3QgYWxsb3dlZCBmb3IgaGVhZGVyICVzJyAlCisg
ICAgICAgICAgICAgICAgKHZlcnNpb24sIGNvbW1vbi5TRUNfV0VCU09DS0VUX1ZFUlNJT05fSEVB
REVSKSwKKyAgICAgICAgICAgICAgICBzdGF0dXM9Y29tbW9uLkhUVFBfU1RBVFVTX0JBRF9SRVFV
RVNUKQorICAgICAgICByYWlzZSBWZXJzaW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgJ1Vuc3Vw
cG9ydGVkIHZlcnNpb24gJXIgZm9yIGhlYWRlciAlcycgJQorICAgICAgICAgICAgKHZlcnNpb24s
IGNvbW1vbi5TRUNfV0VCU09DS0VUX1ZFUlNJT05fSEVBREVSKSwKKyAgICAgICAgICAgIHN1cHBv
cnRlZF92ZXJzaW9ucz0nLCAnLmpvaW4obWFwKHN0ciwgX1NVUFBPUlRFRF9WRVJTSU9OUykpKQor
CisgICAgZGVmIF9zZXRfcHJvdG9jb2woc2VsZik6CisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3Nf
cHJvdG9jb2wgPSBOb25lCisKKyAgICAgICAgcHJvdG9jb2xfaGVhZGVyID0gc2VsZi5fcmVxdWVz
dC5oZWFkZXJzX2luLmdldCgKKyAgICAgICAgICAgIGNvbW1vbi5TRUNfV0VCU09DS0VUX1BST1RP
Q09MX0hFQURFUikKKworICAgICAgICBpZiBub3QgcHJvdG9jb2xfaGVhZGVyOgorICAgICAgICAg
ICAgc2VsZi5fcmVxdWVzdC53c19yZXF1ZXN0ZWRfcHJvdG9jb2xzID0gTm9uZQorICAgICAgICAg
ICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19yZXF1ZXN0ZWRfcHJvdG9jb2xz
ID0gcGFyc2VfdG9rZW5fbGlzdCgKKyAgICAgICAgICAgIHByb3RvY29sX2hlYWRlcikKKyAgICAg
ICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdTdWJwcm90b2NvbHMgcmVxdWVzdGVkOiAlcicsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX3JlcXVlc3RlZF9wcm90b2Nv
bHMpCisKKyAgICBkZWYgX3BhcnNlX2V4dGVuc2lvbnMoc2VsZik6CisgICAgICAgIGV4dGVuc2lv
bnNfaGVhZGVyID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luLmdldCgKKyAgICAgICAgICAgIGNv
bW1vbi5TRUNfV0VCU09DS0VUX0VYVEVOU0lPTlNfSEVBREVSKQorICAgICAgICBpZiBub3QgZXh0
ZW5zaW9uc19oZWFkZXI6CisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX3JlcXVlc3RlZF9l
eHRlbnNpb25zID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5f
cmVxdWVzdC53c192ZXJzaW9uIGlzIGNvbW1vbi5WRVJTSU9OX0hZQkkwODoKKyAgICAgICAgICAg
IGFsbG93X3F1b3RlZF9zdHJpbmc9RmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFs
bG93X3F1b3RlZF9zdHJpbmc9VHJ1ZQorICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX3JlcXVlc3Rl
ZF9leHRlbnNpb25zID0gcGFyc2VfZXh0ZW5zaW9ucygKKyAgICAgICAgICAgIGV4dGVuc2lvbnNf
aGVhZGVyLCBhbGxvd19xdW90ZWRfc3RyaW5nPWFsbG93X3F1b3RlZF9zdHJpbmcpCisKKyAgICAg
ICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAgJ0V4dGVuc2lvbnMgcmVxdWVzdGVk
OiAlcicsCisgICAgICAgICAgICBtYXAoY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlci5uYW1lLAor
ICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcmVxdWVzdGVkX2V4dGVuc2lvbnMpKQor
CisgICAgZGVmIF92YWxpZGF0ZV9rZXkoc2VsZiwga2V5KToKKyAgICAgICAgaWYga2V5LmZpbmQo
JywnKSA+PSAwOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKCdSZXF1ZXN0
IGhhcyBtdWx0aXBsZSAlcyBoZWFkZXIgbGluZXMgb3IgJworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlciBcJyxcJzogJXInICUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tbW9uLlNFQ19XRUJTT0NL
RVRfS0VZX0hFQURFUiwga2V5KSkKKworICAgICAgICAjIFZhbGlkYXRlCisgICAgICAgIGtleV9p
c192YWxpZCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgVmFsaWRhdGUga2V5
IGJ5IHF1aWNrIHJlZ2V4IG1hdGNoIGJlZm9yZSBwYXJzaW5nIGJ5IGJhc2U2NAorICAgICAgICAg
ICAgIyBtb2R1bGUuIEJlY2F1c2UgYmFzZTY0IG1vZHVsZSBza2lwcyBpbnZhbGlkIGNoYXJhY3Rl
cnMsIHdlIGhhdmUKKyAgICAgICAgICAgICMgdG8gZG8gdGhpcyBpbiBhZHZhbmNlIHRvIG1ha2Ug
dGhpcyBzZXJ2ZXIgc3RyaWN0bHkgcmVqZWN0IGlsbGVnYWwKKyAgICAgICAgICAgICMga2V5cy4K
KyAgICAgICAgICAgIGlmIF9TRUNfV0VCU09DS0VUX0tFWV9SRUdFWC5tYXRjaChrZXkpOgorICAg
ICAgICAgICAgICAgIGRlY29kZWRfa2V5ID0gYmFzZTY0LmI2NGRlY29kZShrZXkpCisgICAgICAg
ICAgICAgICAgaWYgbGVuKGRlY29kZWRfa2V5KSA9PSAxNjoKKyAgICAgICAgICAgICAgICAgICAg
a2V5X2lzX3ZhbGlkID0gVHJ1ZQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOgorICAgICAg
ICAgICAgcGFzcworCisgICAgICAgIGlmIG5vdCBrZXlfaXNfdmFsaWQ6CisgICAgICAgICAgICBy
YWlzZSBIYW5kc2hha2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ0lsbGVnYWwgdmFsdWUg
Zm9yIGhlYWRlciAlczogJXInICUKKyAgICAgICAgICAgICAgICAoY29tbW9uLlNFQ19XRUJTT0NL
RVRfS0VZX0hFQURFUiwga2V5KSkKKworICAgICAgICByZXR1cm4gZGVjb2RlZF9rZXkKKworICAg
IGRlZiBfZ2V0X2tleShzZWxmKToKKyAgICAgICAga2V5ID0gZ2V0X21hbmRhdG9yeV9oZWFkZXIo
CisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LCBjb21tb24uU0VDX1dFQlNPQ0tFVF9LRVlfSEVB
REVSKQorCisgICAgICAgIGRlY29kZWRfa2V5ID0gc2VsZi5fdmFsaWRhdGVfa2V5KGtleSkKKwor
ICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAnJXM6ICVyICglcyknLAor
ICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJTT0NLRVRfS0VZX0hFQURFUiwKKyAgICAgICAgICAg
IGtleSwKKyAgICAgICAgICAgIHV0aWwuaGV4aWZ5KGRlY29kZWRfa2V5KSkKKworICAgICAgICBy
ZXR1cm4ga2V5CisKKyAgICBkZWYgX3NlbmRfaGFuZHNoYWtlKHNlbGYsIGFjY2VwdCk6CisgICAg
ICAgIHJlc3BvbnNlID0gW10KKworICAgICAgICByZXNwb25zZS5hcHBlbmQoJ0hUVFAvMS4xIDEw
MSBTd2l0Y2hpbmcgUHJvdG9jb2xzXHJcbicpCisKKyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKGZv
cm1hdF9oZWFkZXIoCisgICAgICAgICAgICBjb21tb24uVVBHUkFERV9IRUFERVIsIGNvbW1vbi5X
RUJTT0NLRVRfVVBHUkFERV9UWVBFKSkKKyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKGZvcm1hdF9o
ZWFkZXIoCisgICAgICAgICAgICBjb21tb24uQ09OTkVDVElPTl9IRUFERVIsIGNvbW1vbi5VUEdS
QURFX0NPTk5FQ1RJT05fVFlQRSkpCisgICAgICAgIHJlc3BvbnNlLmFwcGVuZChmb3JtYXRfaGVh
ZGVyKAorICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJTT0NLRVRfQUNDRVBUX0hFQURFUiwgYWNj
ZXB0KSkKKyAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIHJlc3BvbnNlLmFwcGVuZChmb3JtYXRfaGVhZGVyKAorICAgICAgICAgICAg
ICAgIGNvbW1vbi5TRUNfV0VCU09DS0VUX1BST1RPQ09MX0hFQURFUiwKKyAgICAgICAgICAgICAg
ICBzZWxmLl9yZXF1ZXN0LndzX3Byb3RvY29sKSkKKyAgICAgICAgaWYgKHNlbGYuX3JlcXVlc3Qu
d3NfZXh0ZW5zaW9ucyBpcyBub3QgTm9uZSBhbmQKKyAgICAgICAgICAgIGxlbihzZWxmLl9yZXF1
ZXN0LndzX2V4dGVuc2lvbnMpICE9IDApOgorICAgICAgICAgICAgcmVzcG9uc2UuYXBwZW5kKGZv
cm1hdF9oZWFkZXIoCisgICAgICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJTT0NLRVRfRVhURU5T
SU9OU19IRUFERVIsCisgICAgICAgICAgICAgICAgZm9ybWF0X2V4dGVuc2lvbnMoc2VsZi5fcmVx
dWVzdC53c19leHRlbnNpb25zKSkpCisgICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnXHJcbicpCisK
KyAgICAgICAgcmF3X3Jlc3BvbnNlID0gJycuam9pbihyZXNwb25zZSkKKyAgICAgICAgc2VsZi5f
cmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKHJhd19yZXNwb25zZSkKKyAgICAgICAgc2VsZi5fbG9n
Z2VyLmRlYnVnKCdTZW50IHNlcnZlclwncyBvcGVuaW5nIGhhbmRzaGFrZTogJXInLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmF3X3Jlc3BvbnNlKQorCisKKyMgdmk6c3RzPTQgc3c9NCBl
dApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdl
YnNvY2tldC9oYW5kc2hha2UvaHliaTAwLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvaHliaTAwLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNj
NmY4ZGM0MzZkNTkyZWExZjBlYTNjMTY0ZDM2MWE1NzY4NWE1ZGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L2hhbmRz
aGFrZS9oeWJpMDAucHkKQEAgLTAsMCArMSwyNDIgQEAKKyMgQ29weXJpZ2h0IDIwMTEsIEdvb2ds
ZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIi
IlRoaXMgZmlsZSBwcm92aWRlcyB0aGUgb3BlbmluZyBoYW5kc2hha2UgcHJvY2Vzc29yIGZvciB0
aGUgV2ViU29ja2V0Citwcm90b2NvbCB2ZXJzaW9uIEh5QmkgMDAuCisKK1NwZWNpZmljYXRpb246
CitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLWh5YmktdGhld2Vic29ja2V0
cHJvdG9jb2wtMDAKKyIiIgorCisKKyMgTm90ZTogcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlL3Jl
YWQgYXJlIHVzZWQgaW4gdGhpcyBtb2R1bGUsIGV2ZW4gdGhvdWdoCisjIG1vZF9weXRob24gZG9j
dW1lbnQgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBjb25uZWN0aW9uCisj
IGhhbmRsZXJzLiBVbmZvcnR1bmF0ZWx5LCB3ZSBoYXZlIG5vIG90aGVyIG9wdGlvbnMuIEZvciBl
eGFtcGxlLAorIyByZXF1ZXN0LndyaXRlL3JlYWQgYXJlIG5vdCBzdWl0YWJsZSBiZWNhdXNlIHRo
ZXkgZG9uJ3QgYWxsb3cgZGlyZWN0IHJhdyBieXRlcworIyB3cml0aW5nL3JlYWRpbmcuCisKKwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHN0cnVjdAorCitmcm9tIG1vZF9weXdl
YnNvY2tldCBpbXBvcnQgY29tbW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5zdHJlYW0gaW1wb3J0
IFN0cmVhbUhpeGllNzUKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCB1dGlsCitmcm9tIG1v
ZF9weXdlYnNvY2tldC5oYW5kc2hha2UuX2Jhc2UgaW1wb3J0IEhhbmRzaGFrZUV4Y2VwdGlvbgor
ZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBidWlsZF9sb2NhdGlv
bgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBjaGVja19oZWFk
ZXJfbGluZXMKK2Zyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZS5fYmFzZSBpbXBvcnQgZm9y
bWF0X2hlYWRlcgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNlIGltcG9ydCBn
ZXRfbWFuZGF0b3J5X2hlYWRlcgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuaGFuZHNoYWtlLl9iYXNl
IGltcG9ydCB2YWxpZGF0ZV9zdWJwcm90b2NvbAorCisKK19NQU5EQVRPUllfSEVBREVSUyA9IFsK
KyAgICAjIGtleSwgZXhwZWN0ZWQgdmFsdWUgb3IgTm9uZQorICAgIFtjb21tb24uVVBHUkFERV9I
RUFERVIsIGNvbW1vbi5XRUJTT0NLRVRfVVBHUkFERV9UWVBFX0hJWElFNzVdLAorICAgIFtjb21t
b24uQ09OTkVDVElPTl9IRUFERVIsIGNvbW1vbi5VUEdSQURFX0NPTk5FQ1RJT05fVFlQRV0sCitd
CisKKworY2xhc3MgSGFuZHNoYWtlcihvYmplY3QpOgorICAgICIiIk9wZW5pbmcgaGFuZHNoYWtl
IHByb2Nlc3NvciBmb3IgdGhlIFdlYlNvY2tldCBwcm90b2NvbCB2ZXJzaW9uIEh5QmkgMDAuCisg
ICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgZGlzcGF0Y2hlcik6Cisg
ICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAgICAgZGlzcGF0Y2hl
cjogRGlzcGF0Y2hlciAoZGlzcGF0Y2guRGlzcGF0Y2hlcikuCisKKyAgICAgICAgSGFuZHNoYWtl
ciB3aWxsIGFkZCBhdHRyaWJ1dGVzIHN1Y2ggYXMgd3NfcmVzb3VyY2UgaW4gcGVyZm9ybWluZwor
ICAgICAgICBoYW5kc2hha2UuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9
IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX3JlcXVlc3QgPSBy
ZXF1ZXN0CisgICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIgPSBkaXNwYXRjaGVyCisKKyAgICBkZWYg
ZG9faGFuZHNoYWtlKHNlbGYpOgorICAgICAgICAiIiJQZXJmb3JtIFdlYlNvY2tldCBIYW5kc2hh
a2UuCisKKyAgICAgICAgT24gX3JlcXVlc3QsIHdlIHNldAorICAgICAgICAgICAgd3NfcmVzb3Vy
Y2UsIHdzX3Byb3RvY29sLCB3c19sb2NhdGlvbiwgd3Nfb3JpZ2luLCB3c19jaGFsbGVuZ2UsCisg
ICAgICAgICAgICB3c19jaGFsbGVuZ2VfbWQ1OiBXZWJTb2NrZXQgaGFuZHNoYWtlIGluZm9ybWF0
aW9uLgorICAgICAgICAgICAgd3Nfc3RyZWFtOiBGcmFtZSBnZW5lcmF0aW9uL3BhcnNpbmcgY2xh
c3MuCisgICAgICAgICAgICB3c192ZXJzaW9uOiBQcm90b2NvbCB2ZXJzaW9uLgorCisgICAgICAg
IFJhaXNlczoKKyAgICAgICAgICAgIEhhbmRzaGFrZUV4Y2VwdGlvbjogd2hlbiBhbnkgZXJyb3Ig
aGFwcGVuZWQgaW4gcGFyc2luZyB0aGUgb3BlbmluZworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYW5kc2hha2UgcmVxdWVzdC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyA1LjEg
UmVhZGluZyB0aGUgY2xpZW50J3Mgb3BlbmluZyBoYW5kc2hha2UuCisgICAgICAgICMgZGlzcGF0
Y2hlciBzZXRzIGl0IGluIHNlbGYuX3JlcXVlc3QuCisgICAgICAgIGNoZWNrX2hlYWRlcl9saW5l
cyhzZWxmLl9yZXF1ZXN0LCBfTUFOREFUT1JZX0hFQURFUlMpCisgICAgICAgIHNlbGYuX3NldF9y
ZXNvdXJjZSgpCisgICAgICAgIHNlbGYuX3NldF9zdWJwcm90b2NvbCgpCisgICAgICAgIHNlbGYu
X3NldF9sb2NhdGlvbigpCisgICAgICAgIHNlbGYuX3NldF9vcmlnaW4oKQorICAgICAgICBzZWxm
Ll9zZXRfY2hhbGxlbmdlX3Jlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5fc2V0X3Byb3RvY29sX3Zl
cnNpb24oKQorCisgICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIuZG9fZXh0cmFfaGFuZHNoYWtlKHNl
bGYuX3JlcXVlc3QpCisKKyAgICAgICAgc2VsZi5fc2VuZF9oYW5kc2hha2UoKQorCisgICAgZGVm
IF9zZXRfcmVzb3VyY2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcmVzb3VyY2Ug
PSBzZWxmLl9yZXF1ZXN0LnVyaQorCisgICAgZGVmIF9zZXRfc3VicHJvdG9jb2woc2VsZik6Cisg
ICAgICAgICMgfFNlYy1XZWJTb2NrZXQtUHJvdG9jb2x8CisgICAgICAgIHN1YnByb3RvY29sID0g
c2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luLmdldCgKKyAgICAgICAgICAgIGNvbW1vbi5TRUNfV0VC
U09DS0VUX1BST1RPQ09MX0hFQURFUikKKyAgICAgICAgaWYgc3VicHJvdG9jb2wgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICB2YWxpZGF0ZV9zdWJwcm90b2NvbChzdWJwcm90b2NvbCwgaGl4aWU9
VHJ1ZSkKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCA9IHN1YnByb3RvY29sCisK
KyAgICBkZWYgX3NldF9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgIyB8SG9zdHwKKyAgICAgICAg
aG9zdCA9IHNlbGYuX3JlcXVlc3QuaGVhZGVyc19pbi5nZXQoY29tbW9uLkhPU1RfSEVBREVSKQor
ICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53
c19sb2NhdGlvbiA9IGJ1aWxkX2xvY2F0aW9uKHNlbGYuX3JlcXVlc3QpCisgICAgICAgICMgVE9E
Tyh1a2FpKTogY2hlY2sgaG9zdCBpcyB0aGlzIGhvc3QuCisKKyAgICBkZWYgX3NldF9vcmlnaW4o
c2VsZik6CisgICAgICAgICMgfE9yaWdpbnwKKyAgICAgICAgb3JpZ2luID0gc2VsZi5fcmVxdWVz
dC5oZWFkZXJzX2luLmdldChjb21tb24uT1JJR0lOX0hFQURFUikKKyAgICAgICAgaWYgb3JpZ2lu
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53c19vcmlnaW4gPSBvcmln
aW4KKworICAgIGRlZiBfc2V0X3Byb3RvY29sX3ZlcnNpb24oc2VsZik6CisgICAgICAgICMgfFNl
Yy1XZWJTb2NrZXQtRHJhZnR8CisgICAgICAgIGRyYWZ0ID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJz
X2luLmdldChjb21tb24uU0VDX1dFQlNPQ0tFVF9EUkFGVF9IRUFERVIpCisgICAgICAgIGlmIGRy
YWZ0IGlzIG5vdCBOb25lIGFuZCBkcmFmdCAhPSAnMCc6CisgICAgICAgICAgICByYWlzZSBIYW5k
c2hha2VFeGNlcHRpb24oJ0lsbGVnYWwgdmFsdWUgZm9yICVzOiAlcycgJQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjb21tb24uU0VDX1dFQlNPQ0tFVF9EUkFGVF9IRUFE
RVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWZ0KSkKKworICAg
ICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1Byb3RvY29sIHZlcnNpb24gaXMgSHlCaSAwMCcpCisg
ICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfdmVyc2lvbiA9IGNvbW1vbi5WRVJTSU9OX0hZQkkwMAor
ICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX3N0cmVhbSA9IFN0cmVhbUhpeGllNzUoc2VsZi5fcmVx
dWVzdCwgVHJ1ZSkKKworICAgIGRlZiBfc2V0X2NoYWxsZW5nZV9yZXNwb25zZShzZWxmKToKKyAg
ICAgICAgIyA1LjIgNC04LgorICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2NoYWxsZW5nZSA9IHNl
bGYuX2dldF9jaGFsbGVuZ2UoKQorICAgICAgICAjIDUuMiA5LiBsZXQgL3Jlc3BvbnNlLyBiZSB0
aGUgTUQ1IGZpbnRlcnByaW50IG9mIC9jaGFsbGVuZ2UvCisgICAgICAgIHNlbGYuX3JlcXVlc3Qu
d3NfY2hhbGxlbmdlX21kNSA9IHV0aWwubWQ1X2hhc2goCisgICAgICAgICAgICBzZWxmLl9yZXF1
ZXN0LndzX2NoYWxsZW5nZSkuZGlnZXN0KCkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAor
ICAgICAgICAgICAgJ0NoYWxsZW5nZTogJXIgKCVzKScsCisgICAgICAgICAgICBzZWxmLl9yZXF1
ZXN0LndzX2NoYWxsZW5nZSwKKyAgICAgICAgICAgIHV0aWwuaGV4aWZ5KHNlbGYuX3JlcXVlc3Qu
d3NfY2hhbGxlbmdlKSkKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAorICAgICAgICAgICAg
J0NoYWxsZW5nZSByZXNwb25zZTogJXIgKCVzKScsCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0
LndzX2NoYWxsZW5nZV9tZDUsCisgICAgICAgICAgICB1dGlsLmhleGlmeShzZWxmLl9yZXF1ZXN0
LndzX2NoYWxsZW5nZV9tZDUpKQorCisgICAgZGVmIF9nZXRfa2V5X3ZhbHVlKHNlbGYsIGtleV9m
aWVsZCk6CisgICAgICAgIGtleV92YWx1ZSA9IGdldF9tYW5kYXRvcnlfaGVhZGVyKHNlbGYuX3Jl
cXVlc3QsIGtleV9maWVsZCkKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJyVzOiAlcics
IGtleV9maWVsZCwga2V5X3ZhbHVlKQorCisgICAgICAgICMgNS4yIDQuIGxldCAva2V5LW51bWJl
cl9uLyBiZSB0aGUgZGlnaXRzIChjaGFyYWN0ZXJzIGluIHRoZSByYW5nZQorICAgICAgICAjIFUr
MDAzMCBESUdJVCBaRVJPICgwKSB0byBVKzAwMzkgRElHSVQgTklORSAoOSkpIGluIC9rZXlfbi8s
CisgICAgICAgICMgaW50ZXJwcmV0ZWQgYXMgYSBiYXNlIHRlbiBpbnRlZ2VyLCBpZ25vcmluZyBh
bGwgb3RoZXIgY2hhcmFjdGVycworICAgICAgICAjIGluIC9rZXlfbi8uCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGtleV9udW1iZXIgPSBpbnQocmUuc3ViKCJcXEQiLCAiIiwga2V5X3ZhbHVl
KSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9u
KCclcyBmaWVsZCBjb250YWlucyBubyBkaWdpdCcgJSBrZXlfZmllbGQpCisgICAgICAgICMgNS4y
IDUuIGxldCAvc3BhY2VzX24vIGJlIHRoZSBudW1iZXIgb2YgVSswMDIwIFNQQUNFIGNoYXJhY3Rl
cnMKKyAgICAgICAgIyBpbiAva2V5X24vLgorICAgICAgICBzcGFjZXMgPSByZS5zdWJuKCIgIiwg
IiIsIGtleV92YWx1ZSlbMV0KKyAgICAgICAgaWYgc3BhY2VzID09IDA6CisgICAgICAgICAgICBy
YWlzZSBIYW5kc2hha2VFeGNlcHRpb24oJyVzIGZpZWxkIGNvbnRhaW5zIG5vIHNwYWNlJyAlIGtl
eV9maWVsZCkKKworICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoCisgICAgICAgICAgICAnJXM6
IEtleS1udW1iZXIgaXMgJWQgYW5kIG51bWJlciBvZiBzcGFjZXMgaXMgJWQnLAorICAgICAgICAg
ICAga2V5X2ZpZWxkLCBrZXlfbnVtYmVyLCBzcGFjZXMpCisKKyAgICAgICAgIyA1LjIgNi4gaWYg
L2tleS1udW1iZXJfbi8gaXMgbm90IGFuIGludGVncmFsIG11bHRpcGxlIG9mIC9zcGFjZXNfbi8K
KyAgICAgICAgIyB0aGVuIGFib3J0IHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4KKyAgICAgICAg
aWYga2V5X251bWJlciAlIHNwYWNlcyAhPSAwOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtl
RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICclczogS2V5LW51bWJlciAoJWQpIGlzIG5vdCBh
biBpbnRlZ3JhbCBtdWx0aXBsZSBvZiBzcGFjZXMgJworICAgICAgICAgICAgICAgICcoJWQpJyAl
IChrZXlfZmllbGQsIGtleV9udW1iZXIsIHNwYWNlcykpCisgICAgICAgICMgNS4yIDcuIGxldCAv
cGFydF9uLyBiZSAva2V5LW51bWJlcl9uLyBkaXZpZGVkIGJ5IC9zcGFjZXNfbi8uCisgICAgICAg
IHBhcnQgPSBrZXlfbnVtYmVyIC8gc3BhY2VzCisgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1Zygn
JXM6IFBhcnQgaXMgJWQnLCBrZXlfZmllbGQsIHBhcnQpCisgICAgICAgIHJldHVybiBwYXJ0CisK
KyAgICBkZWYgX2dldF9jaGFsbGVuZ2Uoc2VsZik6CisgICAgICAgICMgNS4yIDQtNy4KKyAgICAg
ICAga2V5MSA9IHNlbGYuX2dldF9rZXlfdmFsdWUoY29tbW9uLlNFQ19XRUJTT0NLRVRfS0VZMV9I
RUFERVIpCisgICAgICAgIGtleTIgPSBzZWxmLl9nZXRfa2V5X3ZhbHVlKGNvbW1vbi5TRUNfV0VC
U09DS0VUX0tFWTJfSEVBREVSKQorICAgICAgICAjIDUuMiA4LiBsZXQgL2NoYWxsZW5nZS8gYmUg
dGhlIGNvbmNhdGVuYXRpb24gb2YgL3BhcnRfMS8sCisgICAgICAgIGNoYWxsZW5nZSA9ICcnCisg
ICAgICAgIGNoYWxsZW5nZSArPSBzdHJ1Y3QucGFjaygnIUknLCBrZXkxKSAgIyBuZXR3b3JrIGJ5
dGVvcmRlciBpbnQKKyAgICAgICAgY2hhbGxlbmdlICs9IHN0cnVjdC5wYWNrKCchSScsIGtleTIp
ICAjIG5ldHdvcmsgYnl0ZW9yZGVyIGludAorICAgICAgICBjaGFsbGVuZ2UgKz0gc2VsZi5fcmVx
dWVzdC5jb25uZWN0aW9uLnJlYWQoOCkKKyAgICAgICAgcmV0dXJuIGNoYWxsZW5nZQorCisgICAg
ZGVmIF9zZW5kX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgcmVzcG9uc2UgPSBbXQorCisgICAg
ICAgICMgNS4yIDEwLiBzZW5kIHRoZSBmb2xsb3dpbmcgbGluZS4KKyAgICAgICAgcmVzcG9uc2Uu
YXBwZW5kKCdIVFRQLzEuMSAxMDEgV2ViU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nKQor
CisgICAgICAgICMgNS4yIDExLiBzZW5kIHRoZSBmb2xsb3dpbmcgZmllbGRzIHRvIHRoZSBjbGll
bnQuCisgICAgICAgIHJlc3BvbnNlLmFwcGVuZChmb3JtYXRfaGVhZGVyKAorICAgICAgICAgICAg
Y29tbW9uLlVQR1JBREVfSEVBREVSLCBjb21tb24uV0VCU09DS0VUX1VQR1JBREVfVFlQRV9ISVhJ
RTc1KSkKKyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKGZvcm1hdF9oZWFkZXIoCisgICAgICAgICAg
ICBjb21tb24uQ09OTkVDVElPTl9IRUFERVIsIGNvbW1vbi5VUEdSQURFX0NPTk5FQ1RJT05fVFlQ
RSkpCisgICAgICAgIHJlc3BvbnNlLmFwcGVuZChmb3JtYXRfaGVhZGVyKAorICAgICAgICAgICAg
Y29tbW9uLlNFQ19XRUJTT0NLRVRfTE9DQVRJT05fSEVBREVSLCBzZWxmLl9yZXF1ZXN0LndzX2xv
Y2F0aW9uKSkKKyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKGZvcm1hdF9oZWFkZXIoCisgICAgICAg
ICAgICBjb21tb24uU0VDX1dFQlNPQ0tFVF9PUklHSU5fSEVBREVSLCBzZWxmLl9yZXF1ZXN0Lndz
X29yaWdpbikpCisgICAgICAgIGlmIHNlbGYuX3JlcXVlc3Qud3NfcHJvdG9jb2w6CisgICAgICAg
ICAgICByZXNwb25zZS5hcHBlbmQoZm9ybWF0X2hlYWRlcigKKyAgICAgICAgICAgICAgICBjb21t
b24uU0VDX1dFQlNPQ0tFVF9QUk9UT0NPTF9IRUFERVIsCisgICAgICAgICAgICAgICAgc2VsZi5f
cmVxdWVzdC53c19wcm90b2NvbCkpCisgICAgICAgICMgNS4yIDEyLiBzZW5kIHR3byBieXRlcyAw
eDBEIDB4MEEuCisgICAgICAgIHJlc3BvbnNlLmFwcGVuZCgnXHJcbicpCisgICAgICAgICMgNS4y
IDEzLiBzZW5kIC9yZXNwb25zZS8KKyAgICAgICAgcmVzcG9uc2UuYXBwZW5kKHNlbGYuX3JlcXVl
c3Qud3NfY2hhbGxlbmdlX21kNSkKKworICAgICAgICByYXdfcmVzcG9uc2UgPSAnJy5qb2luKHJl
c3BvbnNlKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUocmF3X3Jlc3Bv
bnNlKQorICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1NlbnQgc2VydmVyXCdzIG9wZW5pbmcg
aGFuZHNoYWtlOiAlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdfcmVzcG9uc2Up
CisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L2hlYWRlcnBhcnNlcmhhbmRsZXIucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L2hlYWRlcnBh
cnNlcmhhbmRsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjY4YzI0MGUxNjVlZDhlNDJkOTlkMzU5YTAyODIx
OTM5YjkyMjBkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhp
cmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVycGFyc2VyaGFuZGxlci5weQpAQCAtMCwwICsx
LDI0MyBAQAorIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiUHl0aG9uSGVhZGVyUGFyc2VySGFuZGxl
ciBmb3IgbW9kX3B5d2Vic29ja2V0LgorCitBcGFjaGUgSFRUUCBTZXJ2ZXIgYW5kIG1vZF9weXRo
b24gbXVzdCBiZSBjb25maWd1cmVkIHN1Y2ggdGhhdCB0aGlzCitmdW5jdGlvbiBpcyBjYWxsZWQg
dG8gaGFuZGxlIFdlYlNvY2tldCByZXF1ZXN0LgorIiIiCisKKworaW1wb3J0IGxvZ2dpbmcKKwor
ZnJvbSBtb2RfcHl0aG9uIGltcG9ydCBhcGFjaGUKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1w
b3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGRpc3BhdGNoCitmcm9tIG1v
ZF9weXdlYnNvY2tldCBpbXBvcnQgaGFuZHNoYWtlCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBv
cnQgdXRpbAorCisKKyMgUHl0aG9uT3B0aW9uIHRvIHNwZWNpZnkgdGhlIGhhbmRsZXIgcm9vdCBk
aXJlY3RvcnkuCitfUFlPUFRfSEFORExFUl9ST09UID0gJ21vZF9weXdlYnNvY2tldC5oYW5kbGVy
X3Jvb3QnCisKKyMgUHl0aG9uT3B0aW9uIHRvIHNwZWNpZnkgdGhlIGhhbmRsZXIgc2NhbiBkaXJl
Y3RvcnkuCisjIFRoaXMgbXVzdCBiZSBhIGRpcmVjdG9yeSB1bmRlciB0aGUgcm9vdCBkaXJlY3Rv
cnkuCisjIFRoZSBkZWZhdWx0IGlzIHRoZSByb290IGRpcmVjdG9yeS4KK19QWU9QVF9IQU5ETEVS
X1NDQU4gPSAnbW9kX3B5d2Vic29ja2V0LmhhbmRsZXJfc2NhbicKKworIyBQeXRob25PcHRpb24g
dG8gYWxsb3cgaGFuZGxlcnMgd2hvc2UgY2Fub25pY2FsIHBhdGggaXMKKyMgbm90IHVuZGVyIHRo
ZSByb290IGRpcmVjdG9yeS4gSXQncyBkaXNhbGxvd2VkIGJ5IGRlZmF1bHQuCisjIFNldCB0aGlz
IG9wdGlvbiB3aXRoIHZhbHVlIG9mICd5ZXMnIHRvIGFsbG93LgorX1BZT1BUX0FMTE9XX0hBTkRM
RVJTX09VVFNJREVfUk9PVCA9ICgKKyAgICAnbW9kX3B5d2Vic29ja2V0LmFsbG93X2hhbmRsZXJz
X291dHNpZGVfcm9vdF9kaXInKQorIyBNYXAgZnJvbSB2YWx1ZXMgdG8gdGhlaXIgbWVhbmluZ3Mu
ICdZZXMnIGFuZCAnTm8nIGFyZSBhbGxvd2VkIGp1c3QgZm9yCisjIGNvbXBhdGliaWxpdHkuCitf
UFlPUFRfQUxMT1dfSEFORExFUlNfT1VUU0lERV9ST09UX0RFRklOSVRJT04gPSB7CisgICAgJ29m
Zic6IEZhbHNlLCAnbm8nOiBGYWxzZSwgJ29uJzogVHJ1ZSwgJ3llcyc6IFRydWV9CisKKyMgUHl0
aG9uT3B0aW9uIHRvIHNwZWNpZnkgdG8gYWxsb3cgZHJhZnQ3NSBoYW5kc2hha2UuCisjIFRoZSBk
ZWZhdWx0IGlzIE5vbmUgKE9mZikKK19QWU9QVF9BTExPV19EUkFGVDc1ID0gJ21vZF9weXdlYnNv
Y2tldC5hbGxvd19kcmFmdDc1JworIyBNYXAgZnJvbSB2YWx1ZXMgdG8gdGhlaXIgbWVhbmluZ3Mu
CitfUFlPUFRfQUxMT1dfRFJBRlQ3NV9ERUZJTklUSU9OID0geydvZmYnOiBGYWxzZSwgJ29uJzog
VHJ1ZX0KKworCitjbGFzcyBBcGFjaGVMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAg
IiIiV3JhcHBlciBsb2dnaW5nLkhhbmRsZXIgdG8gZW1pdCBsb2cgbWVzc2FnZSB0byBhcGFjaGUn
cyBlcnJvci5sb2cuIiIiCisKKyAgICBfTEVWRUxTID0geworICAgICAgICBsb2dnaW5nLkRFQlVH
OiBhcGFjaGUuQVBMT0dfREVCVUcsCisgICAgICAgIGxvZ2dpbmcuSU5GTzogYXBhY2hlLkFQTE9H
X0lORk8sCisgICAgICAgIGxvZ2dpbmcuV0FSTklORzogYXBhY2hlLkFQTE9HX1dBUk5JTkcsCisg
ICAgICAgIGxvZ2dpbmcuRVJST1I6IGFwYWNoZS5BUExPR19FUlIsCisgICAgICAgIGxvZ2dpbmcu
Q1JJVElDQUw6IGFwYWNoZS5BUExPR19DUklULAorICAgICAgICB9CisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcmVxdWVzdD1Ob25lKToKKyAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9f
KHNlbGYpCisgICAgICAgIHNlbGYuX2xvZ19lcnJvciA9IGFwYWNoZS5sb2dfZXJyb3IKKyAgICAg
ICAgaWYgcmVxdWVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ19lcnJvciA9
IHJlcXVlc3QubG9nX2Vycm9yCisKKyAgICAgICAgIyBUaW1lIGFuZCBsZXZlbCB3aWxsIGJlIHBy
aW50ZWQgYnkgQXBhY2hlLgorICAgICAgICBzZWxmLl9mb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1h
dHRlcignJShuYW1lKXM6ICUobWVzc2FnZSlzJykKKworICAgIGRlZiBlbWl0KHNlbGYsIHJlY29y
ZCk6CisgICAgICAgIGFwYWNoZV9sZXZlbCA9IGFwYWNoZS5BUExPR19ERUJVRworICAgICAgICBp
ZiByZWNvcmQubGV2ZWxubyBpbiBBcGFjaGVMb2dIYW5kbGVyLl9MRVZFTFM6CisgICAgICAgICAg
ICBhcGFjaGVfbGV2ZWwgPSBBcGFjaGVMb2dIYW5kbGVyLl9MRVZFTFNbcmVjb3JkLmxldmVsbm9d
CisKKyAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0dGVyLmZvcm1hdChyZWNvcmQpCisKKyAgICAg
ICAgIyAic2VydmVyIiBwYXJhbWV0ZXIgbXVzdCBiZSBwYXNzZWQgdG8gaGF2ZSAibGV2ZWwiIHBh
cmFtZXRlciB3b3JrLgorICAgICAgICAjIElmIG9ubHkgImxldmVsIiBwYXJhbWV0ZXIgaXMgcGFz
c2VkLCBub3RoaW5nIHNob3dzIHVwIG9uIEFwYWNoZSdzCisgICAgICAgICMgbG9nLiBIb3dldmVy
LCBhdCB0aGlzIHBvaW50LCB3ZSBjYW5ub3QgZ2V0IHRoZSBzZXJ2ZXIgb2JqZWN0IG9mIHRoZQor
ICAgICAgICAjIHZpcnR1YWwgaG9zdCB3aGljaCB3aWxsIHByb2Nlc3MgV2ViU29ja2V0IHJlcXVl
c3RzLiBUaGUgb25seSBzZXJ2ZXIKKyAgICAgICAgIyBvYmplY3Qgd2UgY2FuIGdldCBoZXJlIGlz
IGFwYWNoZS5tYWluX3NlcnZlci4gQnV0IFdoZXJldmVyIChzZXJ2ZXIKKyAgICAgICAgIyBjb25m
aWd1cmF0aW9uIGNvbnRleHQgb3IgdmlydHVhbCBob3N0IGNvbnRleHQpIHdlIHB1dAorICAgICAg
ICAjIFB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIgZGlyZWN0aXZlLCBhcGFjaGUubWFpbl9zZXJ2
ZXIganVzdCBwb2ludHMKKyAgICAgICAgIyB0aGUgbWFpbiBzZXJ2ZXIgaW5zdGFuY2UgKG5vdCBh
bnkgb2YgdmlydHVhbCBzZXJ2ZXIgaW5zdGFuY2UpLiBUaGVuLAorICAgICAgICAjIEFwYWNoZSBm
b2xsb3dzIExvZ0xldmVsIGRpcmVjdGl2ZSBpbiB0aGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gY29u
dGV4dAorICAgICAgICAjIHRvIGZpbHRlciBsb2dzLiBTbywgd2UgbmVlZCB0byBzcGVjaWZ5IExv
Z0xldmVsIGluIHRoZSBzZXJ2ZXIKKyAgICAgICAgIyBjb25maWd1cmF0aW9uIGNvbnRleHQuIEV2
ZW4gaWYgd2Ugc3BlY2lmeSAiTG9nTGV2ZWwgZGVidWciIGluIHRoZQorICAgICAgICAjIHZpcnR1
YWwgaG9zdCBjb250ZXh0IHdoaWNoIGFjdHVhbGx5IGhhbmRsZXMgV2ViU29ja2V0IGNvbm5lY3Rp
b25zLAorICAgICAgICAjIERFQlVHIGxldmVsIGxvZ3MgbmV2ZXIgc2hvdyB1cCB1bmxlc3MgIkxv
Z0xldmVsIGRlYnVnIiBpcyBzcGVjaWZpZWQKKyAgICAgICAgIyBpbiB0aGUgc2VydmVyIGNvbmZp
Z3VyYXRpb24gY29udGV4dC4KKyAgICAgICAgIworICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBQ
cm92aWRlIGxvZ2dpbmcgbWV0aG9kcyBvbiByZXF1ZXN0IG9iamVjdC4gV2hlbgorICAgICAgICAj
IHJlcXVlc3QgaXMgbXBfcmVxdWVzdCBvYmplY3QgKHdoZW4gdXNlZCB0b2dldGhlciB3aXRoIEFw
YWNoZSksIHRoZQorICAgICAgICAjIG1ldGhvZHMgY2FsbCByZXF1ZXN0LmxvZ19lcnJvciBpbmRp
cmVjdGx5LiBXaGVuIHJlcXVlc3QgaXMKKyAgICAgICAgIyBfU3RhbmRhbG9uZVJlcXVlc3QsIHRo
ZSBtZXRob2RzIGNhbGwgUHl0aG9uJ3MgbG9nZ2luZyBmYWNpbGl0eSB3aGljaAorICAgICAgICAj
IHdlIGNyZWF0ZSBpbiBzdGFuZGFsb25lLnB5LgorICAgICAgICBzZWxmLl9sb2dfZXJyb3IobXNn
LCBhcGFjaGVfbGV2ZWwsIGFwYWNoZS5tYWluX3NlcnZlcikKKworCitkZWYgX2NvbmZpZ3VyZV9s
b2dnaW5nKCk6CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICMgTG9ncyBh
cmUgZmlsdGVyZWQgYnkgQXBhY2hlIGJhc2VkIG9uIExvZ0xldmVsIGRpcmVjdGl2ZSBpbiBBcGFj
aGUKKyAgICAjIGNvbmZpZ3VyYXRpb24gZmlsZS4gV2UgbXVzdCBqdXN0IHBhc3MgbG9ncyBmb3Ig
YWxsIGxldmVscyB0bworICAgICMgQXBhY2hlTG9nSGFuZGxlci4KKyAgICBsb2dnZXIuc2V0TGV2
ZWwobG9nZ2luZy5ERUJVRykKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihBcGFjaGVMb2dIYW5kbGVy
KCkpCisKKworX2NvbmZpZ3VyZV9sb2dnaW5nKCkKKworX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKF9fbmFtZV9fKQorCisKK2RlZiBfcGFyc2Vfb3B0aW9uKG5hbWUsIHZhbHVlLCBkZWZpbml0
aW9uKToKKyAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
IG1lYW5pbmcgPSBkZWZpbml0aW9uLmdldCh2YWx1ZS5sb3dlcigpKQorICAgIGlmIG1lYW5pbmcg
aXMgTm9uZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdJbnZhbGlkIHZhbHVlIGZvciBQeXRo
b25PcHRpb24gJXM6ICVyJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgdmFsdWUp
KQorICAgIHJldHVybiBtZWFuaW5nCisKKworZGVmIF9jcmVhdGVfZGlzcGF0Y2hlcigpOgorICAg
IF9MT0dHRVIuaW5mbygnSW5pdGlhbGl6aW5nIERpc3BhdGNoZXInKQorCisgICAgb3B0aW9ucyA9
IGFwYWNoZS5tYWluX3NlcnZlci5nZXRfb3B0aW9ucygpCisKKyAgICBoYW5kbGVyX3Jvb3QgPSBv
cHRpb25zLmdldChfUFlPUFRfSEFORExFUl9ST09ULCBOb25lKQorICAgIGlmIG5vdCBoYW5kbGVy
X3Jvb3Q6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignUHl0aG9uT3B0aW9uICVzIGlzIG5vdCBk
ZWZpbmVkJyAlIF9QWU9QVF9IQU5ETEVSX1JPT1QsCisgICAgICAgICAgICAgICAgICAgICAgICBh
cGFjaGUuQVBMT0dfRVJSKQorCisgICAgaGFuZGxlcl9zY2FuID0gb3B0aW9ucy5nZXQoX1BZT1BU
X0hBTkRMRVJfU0NBTiwgaGFuZGxlcl9yb290KQorCisgICAgYWxsb3dfaGFuZGxlcnNfb3V0c2lk
ZV9yb290ID0gX3BhcnNlX29wdGlvbigKKyAgICAgICAgX1BZT1BUX0FMTE9XX0hBTkRMRVJTX09V
VFNJREVfUk9PVCwKKyAgICAgICAgb3B0aW9ucy5nZXQoX1BZT1BUX0FMTE9XX0hBTkRMRVJTX09V
VFNJREVfUk9PVCksCisgICAgICAgIF9QWU9QVF9BTExPV19IQU5ETEVSU19PVVRTSURFX1JPT1Rf
REVGSU5JVElPTikKKworICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKAorICAg
ICAgICBoYW5kbGVyX3Jvb3QsIGhhbmRsZXJfc2NhbiwgYWxsb3dfaGFuZGxlcnNfb3V0c2lkZV9y
b290KQorCisgICAgZm9yIHdhcm5pbmcgaW4gZGlzcGF0Y2hlci5zb3VyY2Vfd2FybmluZ3MoKToK
KyAgICAgICAgYXBhY2hlLmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0OiAlcycgJSB3YXJuaW5n
LCBhcGFjaGUuQVBMT0dfV0FSTklORykKKworICAgIHJldHVybiBkaXNwYXRjaGVyCisKKworIyBJ
bml0aWFsaXplCitfZGlzcGF0Y2hlciA9IF9jcmVhdGVfZGlzcGF0Y2hlcigpCisKKworZGVmIGhl
YWRlcnBhcnNlcmhhbmRsZXIocmVxdWVzdCk6CisgICAgIiIiSGFuZGxlIHJlcXVlc3QuCisKKyAg
ICBBcmdzOgorICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisKKyAgICBUaGlz
IGZ1bmN0aW9uIGlzIG5hbWVkIGhlYWRlcnBhcnNlcmhhbmRsZXIgYmVjYXVzZSBpdCBpcyB0aGUg
ZGVmYXVsdAorICAgIG5hbWUgZm9yIGEgUHl0aG9uSGVhZGVyUGFyc2VySGFuZGxlci4KKyAgICAi
IiIKKworICAgIGhhbmRzaGFrZV9pc19kb25lID0gRmFsc2UKKyAgICB0cnk6CisgICAgICAgICMg
RmFsbGJhY2sgdG8gZGVmYXVsdCBodHRwIGhhbmRsZXIgZm9yIHJlcXVlc3QgcGF0aHMgZm9yIHdo
aWNoCisgICAgICAgICMgd2UgZG9uJ3QgaGF2ZSByZXF1ZXN0IGhhbmRsZXJzLgorICAgICAgICBp
ZiBub3QgX2Rpc3BhdGNoZXIuZ2V0X2hhbmRsZXJfc3VpdGUocmVxdWVzdC51cmkpOgorICAgICAg
ICAgICAgcmVxdWVzdC5sb2dfZXJyb3IoJ05vIGhhbmRsZXIgZm9yIHJlc291cmNlOiAlcicgJSBy
ZXF1ZXN0LnVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwYWNoZS5BUExPR19J
TkZPKQorICAgICAgICAgICAgcmVxdWVzdC5sb2dfZXJyb3IoJ0ZhbGxiYWNrIHRvIEFwYWNoZScs
IGFwYWNoZS5BUExPR19JTkZPKQorICAgICAgICAgICAgcmV0dXJuIGFwYWNoZS5ERUNMSU5FRAor
ICAgIGV4Y2VwdCBkaXNwYXRjaC5EaXNwYXRjaEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcmVxdWVz
dC5sb2dfZXJyb3IoJ21vZF9weXdlYnNvY2tldDogJXMnICUgZSwgYXBhY2hlLkFQTE9HX0lORk8p
CisgICAgICAgIGlmIG5vdCBoYW5kc2hha2VfaXNfZG9uZToKKyAgICAgICAgICAgIHJldHVybiBl
LnN0YXR1cworCisgICAgdHJ5OgorICAgICAgICBhbGxvd19kcmFmdDc1ID0gX3BhcnNlX29wdGlv
bigKKyAgICAgICAgICAgIF9QWU9QVF9BTExPV19EUkFGVDc1LAorICAgICAgICAgICAgYXBhY2hl
Lm1haW5fc2VydmVyLmdldF9vcHRpb25zKCkuZ2V0KF9QWU9QVF9BTExPV19EUkFGVDc1KSwKKyAg
ICAgICAgICAgIF9QWU9QVF9BTExPV19EUkFGVDc1X0RFRklOSVRJT04pCisKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgaGFuZHNoYWtlLmRvX2hhbmRzaGFrZSgKKyAgICAgICAgICAgICAgICBy
ZXF1ZXN0LCBfZGlzcGF0Y2hlciwgYWxsb3dEcmFmdDc1PWFsbG93X2RyYWZ0NzUpCisgICAgICAg
IGV4Y2VwdCBoYW5kc2hha2UuVmVyc2lvbkV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHJlcXVl
c3QubG9nX2Vycm9yKCdtb2RfcHl3ZWJzb2NrZXQ6ICVzJyAlIGUsIGFwYWNoZS5BUExPR19JTkZP
KQorICAgICAgICAgICAgcmVxdWVzdC5lcnJfaGVhZGVyc19vdXQuYWRkKGNvbW1vbi5TRUNfV0VC
U09DS0VUX1ZFUlNJT05fSEVBREVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGUuc3VwcG9ydGVkX3ZlcnNpb25zKQorICAgICAgICAgICAgcmV0dXJuIGFwYWNoZS5I
VFRQX0JBRF9SRVFVRVNUCisgICAgICAgIGV4Y2VwdCBoYW5kc2hha2UuSGFuZHNoYWtlRXhjZXB0
aW9uLCBlOgorICAgICAgICAgICAgIyBIYW5kc2hha2UgZm9yIHdzL3dzcyBmYWlsZWQuCisgICAg
ICAgICAgICAjIFNlbmQgaHR0cCByZXNwb25zZSB3aXRoIGVycm9yIHN0YXR1cy4KKyAgICAgICAg
ICAgIHJlcXVlc3QubG9nX2Vycm9yKCdtb2RfcHl3ZWJzb2NrZXQ6ICVzJyAlIGUsIGFwYWNoZS5B
UExPR19JTkZPKQorICAgICAgICAgICAgcmV0dXJuIGUuc3RhdHVzCisKKyAgICAgICAgaGFuZHNo
YWtlX2lzX2RvbmUgPSBUcnVlCisgICAgICAgIHJlcXVlc3QuX2Rpc3BhdGNoZXIgPSBfZGlzcGF0
Y2hlcgorICAgICAgICBfZGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKHJlcXVlc3QpCisgICAgZXhj
ZXB0IGhhbmRzaGFrZS5BYm9ydGVkQnlVc2VyRXhjZXB0aW9uLCBlOgorICAgICAgICByZXF1ZXN0
LmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0OiAlcycgJSBlLCBhcGFjaGUuQVBMT0dfSU5GTykK
KyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAjIERpc3BhdGNoRXhjZXB0aW9uIGNh
biBhbHNvIGJlIHRocm93biBpZiBzb21ldGhpbmcgaXMgd3JvbmcgaW4KKyAgICAgICAgIyBweXdl
YnNvY2tldCBjb2RlLiBJdCdzIGNhdWdodCBoZXJlLCB0aGVuLgorCisgICAgICAgIHJlcXVlc3Qu
bG9nX2Vycm9yKCdtb2RfcHl3ZWJzb2NrZXQ6ICVzXG4lcycgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAoZSwgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwYWNoZS5BUExPR19FUlIpCisgICAgICAgICMgVW5rbm93biBleGNlcHRpb25zIGJl
Zm9yZSBoYW5kc2hha2UgbWVhbiBBcGFjaGUgbXVzdCBoYW5kbGUgaXRzCisgICAgICAgICMgcmVx
dWVzdCB3aXRoIGFub3RoZXIgaGFuZGxlci4KKyAgICAgICAgaWYgbm90IGhhbmRzaGFrZV9pc19k
b25lOgorICAgICAgICAgICAgcmV0dXJuIGFwYWNoZS5ERUNMSU5FRAorICAgICMgU2V0IGFzc2Jh
Y2t3YXJkcyB0byBzdXBwcmVzcyByZXNwb25zZSBoZWFkZXIgZ2VuZXJhdGlvbiBieSBBcGFjaGUu
CisgICAgcmVxdWVzdC5hc3NiYWNrd2FyZHMgPSAxCisgICAgcmV0dXJuIGFwYWNoZS5ET05FICAj
IFJldHVybiBET05FIHN1Y2ggdGhhdCBubyBvdGhlciBoYW5kbGVycyBhcmUgaW52b2tlZC4KKwor
CisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvaHR0cF9oZWFkZXJfdXRpbC5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvaHR0cF9oZWFkZXJfdXRp
bC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNzc0NjUzOTMyODVmZjFiZDZiZjhkOTk0MDFjYzY3NDQyMTI1ZTBi
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21v
ZF9weXdlYnNvY2tldC9odHRwX2hlYWRlcl91dGlsLnB5CkBAIC0wLDAgKzEsMjYzIEBACisjIENv
cHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCisiIiJVdGlsaXRpZXMgZm9yIHBhcnNpbmcgYW5kIGZvcm1hdHRpbmcg
aGVhZGVycyB0aGF0IGZvbGxvdyB0aGUgZ3JhbW1hciBkZWZpbmVkCitpbiBIVFRQIFJGQyBodHRw
Oi8vd3d3LmlldGYub3JnL3JmYy9yZmMyNjE2LnR4dC4KKyIiIgorCisKK2ltcG9ydCB1cmxwYXJz
ZQorCisKK19TRVBBUkFUT1JTID0gJygpPD5ALDs6XFwiL1tdPz17fSBcdCcKKworCitkZWYgX2lz
X2NoYXIoYyk6CisgICAgIiIiUmV0dXJucyB0cnVlIGlmZiBjIGlzIGluIENIQVIgYXMgc3BlY2lm
aWVkIGluIEhUVFAgUkZDLiIiIgorCisgICAgcmV0dXJuIG9yZChjKSA8PSAxMjcKKworCitkZWYg
X2lzX2N0bChjKToKKyAgICAiIiJSZXR1cm5zIHRydWUgaWZmIGMgaXMgaW4gQ1RMIGFzIHNwZWNp
ZmllZCBpbiBIVFRQIFJGQy4iIiIKKworICAgIHJldHVybiBvcmQoYykgPD0gMzEgb3Igb3JkKGMp
ID09IDEyNworCisKK2NsYXNzIFBhcnNpbmdTdGF0ZShvYmplY3QpOgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgIHNlbGYu
aGVhZCA9IDAKKworCitkZWYgcGVlayhzdGF0ZSwgcG9zPTApOgorICAgICIiIlBlZWtzIHRoZSBj
aGFyYWN0ZXIgYXQgcG9zIGZyb20gdGhlIGhlYWQgb2YgZGF0YS4iIiIKKworICAgIGlmIHN0YXRl
LmhlYWQgKyBwb3MgPj0gbGVuKHN0YXRlLmRhdGEpOgorICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgcmV0dXJuIHN0YXRlLmRhdGFbc3RhdGUuaGVhZCArIHBvc10KKworCitkZWYgY29uc3VtZShz
dGF0ZSwgYW1vdW50PTEpOgorICAgICIiIkNvbnN1bWVzIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0
ZXMgZnJvbSB0aGUgaGVhZCBhbmQgcmV0dXJucyB0aGUKKyAgICBjb25zdW1lZCBieXRlcy4gSWYg
dGhlcmUncyBub3QgZW5vdWdoIGJ5dGVzIHRvIGNvbnN1bWUsIHJldHVybnMgTm9uZS4KKyAgICAi
IiIKKworICAgIGlmIHN0YXRlLmhlYWQgKyBhbW91bnQgPiBsZW4oc3RhdGUuZGF0YSk6CisgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICByZXN1bHQgPSBzdGF0ZS5kYXRhW3N0YXRlLmhlYWQ6c3Rh
dGUuaGVhZCArIGFtb3VudF0KKyAgICBzdGF0ZS5oZWFkID0gc3RhdGUuaGVhZCArIGFtb3VudAor
ICAgIHJldHVybiByZXN1bHQKKworCitkZWYgY29uc3VtZV9zdHJpbmcoc3RhdGUsIGV4cGVjdGVk
KToKKyAgICAiIiJHaXZlbiBhIHBhcnNpbmcgc3RhdGUgYW5kIGEgZXhwZWN0ZWQgc3RyaW5nLCBj
b25zdW1lcyB0aGUgc3RyaW5nIGZyb20KKyAgICB0aGUgaGVhZC4gUmV0dXJucyBUcnVlIGlmIGNv
bnN1bWVkIHN1Y2Nlc3NmdWxseS4gT3RoZXJ3aXNlLCByZXR1cm5zCisgICAgRmFsc2UuCisgICAg
IiIiCisKKyAgICBwb3MgPSAwCisKKyAgICBmb3IgYyBpbiBleHBlY3RlZDoKKyAgICAgICAgaWYg
YyAhPSBwZWVrKHN0YXRlLCBwb3MpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAg
IHBvcyArPSAxCisKKyAgICBjb25zdW1lKHN0YXRlLCBwb3MpCisgICAgcmV0dXJuIFRydWUKKwor
CitkZWYgY29uc3VtZV9sd3Moc3RhdGUpOgorICAgICIiIkNvbnN1bWVzIGEgTFdTIGZyb20gdGhl
IGhlYWQuIFJldHVybnMgVHJ1ZSBpZiBhbnkgTFdTIGlzIGNvbnN1bWVkLgorICAgIE90aGVyd2lz
ZSwgcmV0dXJucyBGYWxzZS4KKworICAgIExXUyA9IFtDUkxGXSAxKiggU1AgfCBIVCApCisgICAg
IiIiCisKKyAgICBvcmlnaW5hbF9oZWFkID0gc3RhdGUuaGVhZAorCisgICAgY29uc3VtZV9zdHJp
bmcoc3RhdGUsICdcclxuJykKKworICAgIHBvcyA9IDAKKworICAgIHdoaWxlIFRydWU6CisgICAg
ICAgIGMgPSBwZWVrKHN0YXRlLCBwb3MpCisgICAgICAgIGlmIGMgPT0gJyAnIG9yIGMgPT0gJ1x0
JzoKKyAgICAgICAgICAgIHBvcyArPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBw
b3MgPT0gMDoKKyAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkID0gb3JpZ2luYWxfaGVhZAorICAg
ICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBjb25zdW1lKHN0YXRlLCBwb3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKwor
CitkZWYgY29uc3VtZV9sd3NlcyhzdGF0ZSk6CisgICAgIiIiQ29uc3VtZXMgKkxXUyBmcm9tIHRo
ZSBoZWFkLiIiIgorCisgICAgd2hpbGUgY29uc3VtZV9sd3Moc3RhdGUpOgorICAgICAgICBwYXNz
CisKKworZGVmIGNvbnN1bWVfdG9rZW4oc3RhdGUpOgorICAgICIiIkNvbnN1bWVzIGEgdG9rZW4g
ZnJvbSB0aGUgaGVhZC4gUmV0dXJucyB0aGUgdG9rZW4gb3IgTm9uZSBpZiBubyB0b2tlbgorICAg
IHdhcyBmb3VuZC4KKyAgICAiIiIKKworICAgIHBvcyA9IDAKKworICAgIHdoaWxlIFRydWU6Cisg
ICAgICAgIGMgPSBwZWVrKHN0YXRlLCBwb3MpCisgICAgICAgIGlmIGMgaXMgTm9uZSBvciBjIGlu
IF9TRVBBUkFUT1JTIG9yIF9pc19jdGwoYykgb3Igbm90IF9pc19jaGFyKGMpOgorICAgICAgICAg
ICAgaWYgcG9zID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAg
ICAgcmV0dXJuIGNvbnN1bWUoc3RhdGUsIHBvcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHBvcyArPSAxCisKKworZGVmIGNvbnN1bWVfdG9rZW5fb3JfcXVvdGVkX3N0cmluZyhzdGF0ZSk6
CisgICAgIiIiQ29uc3VtZXMgYSB0b2tlbiBvciBhIHF1b3RlZC1zdHJpbmcsIGFuZCByZXR1cm5z
IHRoZSB0b2tlbiBvciB1bnF1b3RlZAorICAgIHN0cmluZy4gSWYgbm8gdG9rZW4gb3IgcXVvdGVk
LXN0cmluZyB3YXMgZm91bmQsIHJldHVybnMgTm9uZS4KKyAgICAiIiIKKworICAgIG9yaWdpbmFs
X2hlYWQgPSBzdGF0ZS5oZWFkCisKKyAgICBpZiBub3QgY29uc3VtZV9zdHJpbmcoc3RhdGUsICci
Jyk6CisgICAgICAgIHJldHVybiBjb25zdW1lX3Rva2VuKHN0YXRlKQorCisgICAgcmVzdWx0ID0g
W10KKworICAgIGV4cGVjdF9xdW90ZWRfcGFpciA9IEZhbHNlCisKKyAgICB3aGlsZSBUcnVlOgor
ICAgICAgICBpZiBub3QgZXhwZWN0X3F1b3RlZF9wYWlyIGFuZCBjb25zdW1lX2x3cyhzdGF0ZSk6
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJykKKyAgICAgICAgICAgIGNvbnRpbnVlCisK
KyAgICAgICAgYyA9IGNvbnN1bWUoc3RhdGUpCisgICAgICAgIGlmIGMgaXMgTm9uZToKKyAgICAg
ICAgICAgICMgcXVvdGVkLXN0cmluZyBpcyBub3QgZW5jbG9zZWQgd2l0aCBkb3VibGUgcXVvdGF0
aW9uCisgICAgICAgICAgICBzdGF0ZS5oZWFkID0gb3JpZ2luYWxfaGVhZAorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgZWxpZiBleHBlY3RfcXVvdGVkX3BhaXI6CisgICAgICAgICAg
ICBleHBlY3RfcXVvdGVkX3BhaXIgPSBGYWxzZQorICAgICAgICAgICAgaWYgX2lzX2NoYXIoYyk6
CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICAjIE5vbiBDSEFSIGNoYXJhY3RlciBmb3VuZCBpbiBxdW90ZWQtcGFpcgor
ICAgICAgICAgICAgICAgIHN0YXRlLmhlYWQgPSBvcmlnaW5hbF9oZWFkCisgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxpZiBjID09ICdcXCc6CisgICAgICAgICAgICBleHBl
Y3RfcXVvdGVkX3BhaXIgPSBUcnVlCisgICAgICAgIGVsaWYgYyA9PSAnIic6CisgICAgICAgICAg
ICByZXR1cm4gJycuam9pbihyZXN1bHQpCisgICAgICAgIGVsaWYgX2lzX2N0bChjKToKKyAgICAg
ICAgICAgICMgSW52YWxpZCBjaGFyYWN0ZXIgJXIgZm91bmQgaW4gcWR0ZXh0CisgICAgICAgICAg
ICBzdGF0ZS5oZWFkID0gb3JpZ2luYWxfaGVhZAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYykKKworCitkZWYgcXVvdGVf
aWZfbmVjZXNzYXJ5KHMpOgorICAgICIiIlF1b3RlcyBhcmJpdHJhcnkgc3RyaW5nIGludG8gcXVv
dGVkLXN0cmluZy4iIiIKKworICAgIHF1b3RlID0gRmFsc2UKKyAgICBpZiBzID09ICcnOgorICAg
ICAgICByZXR1cm4gJyIiJworCisgICAgcmVzdWx0ID0gW10KKyAgICBmb3IgYyBpbiBzOgorICAg
ICAgICBpZiBjID09ICciJyBvciBjIGluIF9TRVBBUkFUT1JTIG9yIF9pc19jdGwoYykgb3Igbm90
IF9pc19jaGFyKGMpOgorICAgICAgICAgICAgcXVvdGUgPSBUcnVlCisKKyAgICAgICAgaWYgYyA9
PSAnIicgb3IgX2lzX2N0bChjKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xcJyArIGMp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGMpCisKKyAgICBpZiBx
dW90ZToKKyAgICAgICAgcmV0dXJuICciJyArICcnLmpvaW4ocmVzdWx0KSArICciJworICAgIGVs
c2U6CisgICAgICAgIHJldHVybiAnJy5qb2luKHJlc3VsdCkKKworCitkZWYgcGFyc2VfdXJpKHVy
aSk6CisgICAgIiIiUGFyc2UgYWJzb2x1dGUgVVJJIHRoZW4gcmV0dXJuIGhvc3QsIHBvcnQgYW5k
IHJlc291cmNlLiIiIgorCisgICAgcGFyc2VkID0gdXJscGFyc2UudXJsc3BsaXQodXJpKQorICAg
IGlmIHBhcnNlZC5zY2hlbWUgIT0gJ3dzcycgYW5kIHBhcnNlZC5zY2hlbWUgIT0gJ3dzJzoKKyAg
ICAgICAgIyB8dXJpfCBtdXN0IGJlIGEgcmVsYXRpdmUgVVJJLgorICAgICAgICAjIFRPRE8odG95
b3NoaW0pOiBTaG91bGQgdmFsaWRhdGUgfHVyaXwuCisgICAgICAgIHJldHVybiBOb25lLCBOb25l
LCB1cmkKKworICAgIGlmIHBhcnNlZC5ob3N0bmFtZSBpcyBOb25lOgorICAgICAgICByZXR1cm4g
Tm9uZSwgTm9uZSwgTm9uZQorCisgICAgcG9ydCA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIHBv
cnQgPSBwYXJzZWQucG9ydAorICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAjIHBv
cnQgcHJvcGVydHkgY2F1c2UgVmFsdWVFcnJvciBvbiBpbnZhbGlkIG51bGwgcG9ydCBkZXNjcmlw
dGlvbiBsaWtlCisgICAgICAgICMgJ3dzOi8vaG9zdDovcGF0aCcuCisgICAgICAgIHJldHVybiBO
b25lLCBOb25lLCBOb25lCisKKyAgICBpZiBwb3J0IGlzIE5vbmU6CisgICAgICAgIGlmIHBhcnNl
ZC5zY2hlbWUgPT0gJ3dzJzoKKyAgICAgICAgICAgIHBvcnQgPSA4MAorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcG9ydCA9IDQ0MworCisgICAgcGF0aCA9IHBhcnNlZC5wYXRoCisgICAgaWYg
bm90IHBhdGg6CisgICAgICAgIHBhdGggKz0gJy8nCisgICAgaWYgcGFyc2VkLnF1ZXJ5OgorICAg
ICAgICBwYXRoICs9ICc/JyArIHBhcnNlZC5xdWVyeQorICAgIGlmIHBhcnNlZC5mcmFnbWVudDoK
KyAgICAgICAgcGF0aCArPSAnIycgKyBwYXJzZWQuZnJhZ21lbnQKKworICAgIHJldHVybiBwYXJz
ZWQuaG9zdG5hbWUsIHBvcnQsIHBhdGgKKworCit0cnk6CisgICAgdXJscGFyc2UudXNlc19uZXRs
b2MuaW5kZXgoJ3dzJykKK2V4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICMgdXJscGFyc2UgaW4g
UHl0aG9uMi41LjEgZG9lc24ndCBoYXZlICd3cycgYW5kICd3c3MnIGVudHJpZXMuCisgICAgdXJs
cGFyc2UudXNlc19uZXRsb2MuYXBwZW5kKCd3cycpCisgICAgdXJscGFyc2UudXNlc19uZXRsb2Mu
YXBwZW5kKCd3c3MnKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9tZW1vcml6aW5nZmls
ZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQv
bWVtb3JpemluZ2ZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ0Y2Q5NTg1OTVhYmRmYzBjNDBkNDMwODQ4
ODcwMGI3YjkzYzZiNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvbWVtb3JpemluZ2ZpbGUucHkKQEAgLTAsMCArMSw5
OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDExLCBHb29nbGUg
SW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJN
ZW1vcml6aW5nIGZpbGUuCisKK0EgbWVtb3JpemluZyBmaWxlIHdyYXBzIGEgZmlsZSBhbmQgbWVt
b3JpemVzIGxpbmVzIHJlYWQgYnkgcmVhZGxpbmUuCisiIiIKKworCitpbXBvcnQgc3lzCisKKwor
Y2xhc3MgTWVtb3JpemluZ0ZpbGUob2JqZWN0KToKKyAgICAiIiJNZW1vcml6aW5nRmlsZSB3cmFw
cyBhIGZpbGUgYW5kIG1lbW9yaXplcyBsaW5lcyByZWFkIGJ5IHJlYWRsaW5lLgorCisgICAgTm90
ZSB0aGF0IGRhdGEgcmVhZCBieSBvdGhlciBtZXRob2RzIGFyZSBub3QgbWVtb3JpemVkLiBUaGlz
IGJlaGF2aW9yCisgICAgaXMgZ29vZCBlbm91Z2ggZm9yIG1lbW9yaXppbmcgbGluZXMgU2ltcGxl
SFRUUFNlcnZlciByZWFkcyBiZWZvcmUKKyAgICB0aGUgY29udHJvbCByZWFjaGVzIFdlYlNvY2tl
dFJlcXVlc3RIYW5kbGVyLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVf
LCBtYXhfbWVtb3JpemVkX2xpbmVzPXN5cy5tYXhpbnQpOgorICAgICAgICAiIiJDb25zdHJ1Y3Qg
YW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGZpbGVfOiB0aGUgZmls
ZSBvYmplY3QgdG8gd3JhcC4KKyAgICAgICAgICAgIG1heF9tZW1vcml6ZWRfbGluZXM6IHRoZSBt
YXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBtZW1vcml6ZS4KKyAgICAgICAgICAgICAgICBPbmx5
IHRoZSBmaXJzdCBtYXhfbWVtb3JpemVkX2xpbmVzIGFyZSBtZW1vcml6ZWQuCisgICAgICAgICAg
ICAgICAgRGVmYXVsdDogc3lzLm1heGludC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5f
ZmlsZSA9IGZpbGVfCisgICAgICAgIHNlbGYuX21lbW9yaXplZF9saW5lcyA9IFtdCisgICAgICAg
IHNlbGYuX21heF9tZW1vcml6ZWRfbGluZXMgPSBtYXhfbWVtb3JpemVkX2xpbmVzCisgICAgICAg
IHNlbGYuX2J1ZmZlcmVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fYnVmZmVyZWRfbGluZSA9IE5v
bmUKKworICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBu
YW1lIGluICgnX2ZpbGUnLCAnX21lbW9yaXplZF9saW5lcycsICdfbWF4X21lbW9yaXplZF9saW5l
cycsCisgICAgICAgICAgICAgICAgICAgICdfYnVmZmVyZWQnLCAnX2J1ZmZlcmVkX2xpbmUnLCAn
cmVhZGxpbmUnLAorICAgICAgICAgICAgICAgICAgICAnZ2V0X21lbW9yaXplZF9saW5lcycpOgor
ICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpCisg
ICAgICAgIHJldHVybiBzZWxmLl9maWxlLl9fZ2V0YXR0cmlidXRlX18obmFtZSkKKworICAgIGRl
ZiByZWFkbGluZShzZWxmLCBzaXplPS0xKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgZmlsZS5yZWFk
bGluZSBhbmQgbWVtb3JpemUgdGhlIGxpbmUgcmVhZC4KKworICAgICAgICBOb3RlIHRoYXQgZXZl
biBpZiBzaXplIGlzIHNwZWNpZmllZCBhbmQgc21hbGxlciB0aGFuIGFjdHVhbCBzaXplLAorICAg
ICAgICB0aGUgd2hvbGUgbGluZSB3aWxsIGJlIHJlYWQgb3V0IGZyb20gdW5kZXJseWluZyBmaWxl
IG9iamVjdCBieQorICAgICAgICBzdWJzZXF1ZW50IHJlYWRsaW5lIGNhbGxzLgorICAgICAgICAi
IiIKKworICAgICAgICBpZiBzZWxmLl9idWZmZXJlZDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxm
Ll9idWZmZXJlZF9saW5lCisgICAgICAgICAgICBzZWxmLl9idWZmZXJlZCA9IEZhbHNlCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fZmlsZS5yZWFkbGluZSgpCisgICAg
ICAgICAgICBpZiBsaW5lIGFuZCBsZW4oc2VsZi5fbWVtb3JpemVkX2xpbmVzKSA8IHNlbGYuX21h
eF9tZW1vcml6ZWRfbGluZXM6CisgICAgICAgICAgICAgICAgc2VsZi5fbWVtb3JpemVkX2xpbmVz
LmFwcGVuZChsaW5lKQorICAgICAgICBpZiBzaXplID49IDAgYW5kIHNpemUgPCBsZW4obGluZSk6
CisgICAgICAgICAgICBzZWxmLl9idWZmZXJlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2J1
ZmZlcmVkX2xpbmUgPSBsaW5lW3NpemU6XQorICAgICAgICAgICAgcmV0dXJuIGxpbmVbOnNpemVd
CisgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBkZWYgZ2V0X21lbW9yaXplZF9saW5lcyhzZWxm
KToKKyAgICAgICAgIiIiR2V0IGxpbmVzIG1lbW9yaXplZCBzbyBmYXIuIiIiCisgICAgICAgIHJl
dHVybiBzZWxmLl9tZW1vcml6ZWRfbGluZXMKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQv
bXNndXRpbC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJz
b2NrZXQvbXNndXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMWZmZGFjZjYzMjY2MjU1NDlkNTVlMTczYjRk
OTkwNDJmNzE4Y2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9tc2d1dGlsLnB5CkBAIC0wLDAgKzEsMjE5IEBACisj
IENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworCisiIiJNZXNzYWdlIHJlbGF0ZWQgdXRpbGl0aWVzLgorCitOb3Rl
OiByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUvcmVhZCBhcmUgdXNlZCBpbiB0aGlzIG1vZHVsZSwg
ZXZlbiB0aG91Z2gKK21vZF9weXRob24gZG9jdW1lbnQgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJl
IHVzZWQgb25seSBpbiBjb25uZWN0aW9uCitoYW5kbGVycy4gVW5mb3J0dW5hdGVseSwgd2UgaGF2
ZSBubyBvdGhlciBvcHRpb25zLiBGb3IgZXhhbXBsZSwKK3JlcXVlc3Qud3JpdGUvcmVhZCBhcmUg
bm90IHN1aXRhYmxlIGJlY2F1c2UgdGhleSBkb24ndCBhbGxvdyBkaXJlY3QgcmF3CitieXRlcyB3
cml0aW5nL3JlYWRpbmcuCisiIiIKKworCitpbXBvcnQgUXVldWUKK2ltcG9ydCB0aHJlYWRpbmcK
KworCisjIEV4cG9ydCBFeGNlcHRpb24gc3ltYm9scyBmcm9tIG1zZ3V0aWwgZm9yIGJhY2t3YXJk
IGNvbXBhdGliaWxpdHkKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1fYmFzZSBpbXBvcnQg
Q29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJl
YW1fYmFzZSBpbXBvcnQgSW52YWxpZEZyYW1lRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tl
dC5fc3RyZWFtX2Jhc2UgaW1wb3J0IEJhZE9wZXJhdGlvbkV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3
ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBVbnN1cHBvcnRlZEZyYW1lRXhjZXB0aW9uCisK
KworIyBBbiBBUEkgZm9yIGhhbmRsZXIgdG8gc2VuZC9yZWNlaXZlIFdlYlNvY2tldCBtZXNzYWdl
cy4KK2RlZiBjbG9zZV9jb25uZWN0aW9uKHJlcXVlc3QpOgorICAgICIiIkNsb3NlIGNvbm5lY3Rp
b24uCisKKyAgICBBcmdzOgorICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisg
ICAgIiIiCisgICAgcmVxdWVzdC53c19zdHJlYW0uY2xvc2VfY29ubmVjdGlvbigpCisKKworZGVm
IHNlbmRfbWVzc2FnZShyZXF1ZXN0LCBtZXNzYWdlLCBlbmQ9VHJ1ZSwgYmluYXJ5PUZhbHNlKToK
KyAgICAiIiJTZW5kIG1lc3NhZ2UuCisKKyAgICBBcmdzOgorICAgICAgICByZXF1ZXN0OiBtb2Rf
cHl0aG9uIHJlcXVlc3QuCisgICAgICAgIG1lc3NhZ2U6IHVuaWNvZGUgdGV4dCBvciBzdHIgYmlu
YXJ5IHRvIHNlbmQuCisgICAgICAgIGVuZDogRmFsc2UgdG8gc2VuZCBtZXNzYWdlIGFzIGEgZnJh
Z21lbnQuIEFsbCBtZXNzYWdlcyB1bnRpbCB0aGUKKyAgICAgICAgICAgICBmaXJzdCBjYWxsIHdp
dGggZW5kPVRydWUgKGluY2x1c2l2ZSkgd2lsbCBiZSBkZWxpdmVyZWQgdG8gdGhlCisgICAgICAg
ICAgICAgY2xpZW50IGluIHNlcGFyYXRlIGZyYW1lcyBidXQgYXMgb25lIFdlYlNvY2tldCBtZXNz
YWdlLgorICAgICAgICBiaW5hcnk6IHNlbmQgbWVzc2FnZSBhcyBiaW5hcnkgZnJhbWUuCisgICAg
UmFpc2VzOgorICAgICAgICBCYWRPcGVyYXRpb25FeGNlcHRpb246IHdoZW4gc2VydmVyIGFscmVh
ZHkgdGVybWluYXRlZC4KKyAgICAiIiIKKyAgICByZXF1ZXN0LndzX3N0cmVhbS5zZW5kX21lc3Nh
Z2UobWVzc2FnZSwgZW5kLCBiaW5hcnkpCisKKworZGVmIHJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0
KToKKyAgICAiIiJSZWNlaXZlIGEgV2ViU29ja2V0IGZyYW1lIGFuZCByZXR1cm4gaXRzIHBheWxv
YWQgYXMgYSB0ZXh0IGluCisgICAgdW5pY29kZSBvciBhIGJpbmFyeSBpbiBzdHIuCisKKyAgICBB
cmdzOgorICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgUmFpc2VzOgor
ICAgICAgICBJbnZhbGlkRnJhbWVFeGNlcHRpb246ICAgICB3aGVuIGNsaWVudCBzZW5kIGludmFs
aWQgZnJhbWUuCisgICAgICAgIFVuc3VwcG9ydGVkRnJhbWVFeGNlcHRpb246IHdoZW4gY2xpZW50
IHNlbmQgdW5zdXBwb3J0ZWQgZnJhbWUgZS5nLiBzb21lCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9mIHJlc2VydmVkIGJpdCBpcyBzZXQgYnV0IG5vIGV4dGVuc2lvbiBjYW4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplIGl0LgorICAgICAg
ICBJbnZhbGlkVVRGOEV4Y2VwdGlvbjogICAgICB3aGVuIGNsaWVudCBzZW5kIGEgdGV4dCBmcmFt
ZSBjb250YWluaW5nIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZh
bGlkIFVURi04IHN0cmluZy4KKyAgICAgICAgQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb246
IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuZXhwZWN0ZWRseS4KKyAgICAgICAgQmFkT3BlcmF0aW9uRXhjZXB0aW9uOiAg
ICAgd2hlbiBjbGllbnQgYWxyZWFkeSB0ZXJtaW5hdGVkLgorICAgICIiIgorICAgIHJldHVybiBy
ZXF1ZXN0LndzX3N0cmVhbS5yZWNlaXZlX21lc3NhZ2UoKQorCisKK2RlZiBzZW5kX3BpbmcocmVx
dWVzdCwgYm9keT0nJyk6CisgICAgcmVxdWVzdC53c19zdHJlYW0uc2VuZF9waW5nKGJvZHkpCisK
KworY2xhc3MgTWVzc2FnZVJlY2VpdmVyKHRocmVhZGluZy5UaHJlYWQpOgorICAgICIiIlRoaXMg
Y2xhc3MgcmVjZWl2ZXMgbWVzc2FnZXMgZnJvbSB0aGUgY2xpZW50LgorCisgICAgVGhpcyBjbGFz
cyBwcm92aWRlcyB0aHJlZSB3YXlzIHRvIHJlY2VpdmUgbWVzc2FnZXM6IGJsb2NraW5nLAorICAg
IG5vbi1ibG9ja2luZywgYW5kIHZpYSBjYWxsYmFjay4gQ2FsbGJhY2sgaGFzIHRoZSBoaWdoZXN0
IHByZWNlZGVuY2UuCisKKyAgICBOb3RlOiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgdXNlZCB3
aXRoIHRoZSBzdGFuZGFsb25lIHNlcnZlciBmb3Igd3NzCisgICAgYmVjYXVzZSBweU9wZW5TU0wg
dXNlZCBieSB0aGUgc2VydmVyIHJhaXNlcyBhIGZhdGFsIGVycm9yIGlmIHRoZSBzb2NrZXQKKyAg
ICBpcyBhY2Nlc3NlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCisgICAgIiIiCisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcmVxdWVzdCwgb25tZXNzYWdlPU5vbmUpOgorICAgICAgICAiIiJDb25z
dHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3Q6
IG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAgICAgICAgIG9ubWVzc2FnZTogYSBmdW5jdGlvbiB0
byBiZSBjYWxsZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCisgICAgICAgICAgICAgICAg
ICAgICAgIE1heSBiZSBOb25lLiBJZiBub3QgTm9uZSwgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBv
bgorICAgICAgICAgICAgICAgICAgICAgICBhbm90aGVyIHRocmVhZC4gSW4gdGhhdCBjYXNlLCBN
ZXNzYWdlUmVjZWl2ZXIucmVjZWl2ZQorICAgICAgICAgICAgICAgICAgICAgICBhbmQgTWVzc2Fn
ZVJlY2VpdmVyLnJlY2VpdmVfbm93YWl0IGFyZSB1c2VsZXNzCisgICAgICAgICAgICAgICAgICAg
ICAgIGJlY2F1c2UgdGhleSB3aWxsIG5ldmVyIHJldHVybiBhbnkgbWVzc2FnZXMuCisgICAgICAg
ICIiIgorCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAg
c2VsZi5fcmVxdWVzdCA9IHJlcXVlc3QKKyAgICAgICAgc2VsZi5fcXVldWUgPSBRdWV1ZS5RdWV1
ZSgpCisgICAgICAgIHNlbGYuX29ubWVzc2FnZSA9IG9ubWVzc2FnZQorICAgICAgICBzZWxmLl9z
dG9wX3JlcXVlc3RlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuc2V0RGFlbW9uKFRydWUpCisgICAg
ICAgIHNlbGYuc3RhcnQoKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3BfcmVxdWVzdGVkOgorICAgICAgICAgICAgICAg
IG1lc3NhZ2UgPSByZWNlaXZlX21lc3NhZ2Uoc2VsZi5fcmVxdWVzdCkKKyAgICAgICAgICAgICAg
ICBpZiBzZWxmLl9vbm1lc3NhZ2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX29ubWVzc2Fn
ZShtZXNzYWdlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNl
bGYuX3F1ZXVlLnB1dChtZXNzYWdlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY2xv
c2VfY29ubmVjdGlvbihzZWxmLl9yZXF1ZXN0KQorCisgICAgZGVmIHJlY2VpdmUoc2VsZik6Cisg
ICAgICAgICIiIiBSZWNlaXZlIGEgbWVzc2FnZSBmcm9tIHRoZSBjaGFubmVsLCBibG9ja2luZy4K
KworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgbWVzc2FnZSBhcyBhIHVuaWNvZGUgc3Ry
aW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3F1ZXVlLmdldCgpCisKKyAg
ICBkZWYgcmVjZWl2ZV9ub3dhaXQoc2VsZik6CisgICAgICAgICIiIiBSZWNlaXZlIGEgbWVzc2Fn
ZSBmcm9tIHRoZSBjaGFubmVsLCBub24tYmxvY2tpbmcuCisKKyAgICAgICAgUmV0dXJuczoKKyAg
ICAgICAgICAgIG1lc3NhZ2UgYXMgYSB1bmljb2RlIHN0cmluZyBpZiBhdmFpbGFibGUuIE5vbmUg
b3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWVzc2Fn
ZSA9IHNlbGYuX3F1ZXVlLmdldF9ub3dhaXQoKQorICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6
CisgICAgICAgICAgICBtZXNzYWdlID0gTm9uZQorICAgICAgICByZXR1cm4gbWVzc2FnZQorCisg
ICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlJlcXVlc3QgdG8gc3RvcCB0aGlzIGluc3Rh
bmNlLgorCisgICAgICAgIFRoZSBpbnN0YW5jZSB3aWxsIGJlIHN0b3BwZWQgYWZ0ZXIgcmVjZWl2
aW5nIHRoZSBuZXh0IG1lc3NhZ2UuCisgICAgICAgIFRoaXMgbWV0aG9kIG1heSBub3QgYmUgdmVy
eSB1c2VmdWwsIGJ1dCB0aGVyZSBpcyBubyBjbGVhbiB3YXkKKyAgICAgICAgaW4gUHl0aG9uIHRv
IGZvcmNlZnVsbHkgc3RvcCBhIHJ1bm5pbmcgdGhyZWFkLgorICAgICAgICAiIiIKKyAgICAgICAg
c2VsZi5fc3RvcF9yZXF1ZXN0ZWQgPSBUcnVlCisKKworY2xhc3MgTWVzc2FnZVNlbmRlcih0aHJl
YWRpbmcuVGhyZWFkKToKKyAgICAiIiJUaGlzIGNsYXNzIHNlbmRzIG1lc3NhZ2VzIHRvIHRoZSBj
bGllbnQuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGJvdGggc3luY2hyb25vdXMgYW5kIGFz
eW5jaHJvbm91cyB3YXlzIHRvIHNlbmQKKyAgICBtZXNzYWdlcy4KKworICAgIE5vdGU6IFRoaXMg
Y2xhc3Mgc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggdGhlIHN0YW5kYWxvbmUgc2VydmVyIGZvciB3
c3MKKyAgICBiZWNhdXNlIHB5T3BlblNTTCB1c2VkIGJ5IHRoZSBzZXJ2ZXIgcmFpc2VzIGEgZmF0
YWwgZXJyb3IgaWYgdGhlIHNvY2tldAorICAgIGlzIGFjY2Vzc2VkIGZyb20gbXVsdGlwbGUgdGhy
ZWFkcy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0KToKKyAgICAg
ICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
ICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgICIiIgorICAgICAgICB0aHJl
YWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3JlcXVlc3QgPSByZXF1
ZXN0CisgICAgICAgIHNlbGYuX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLnNl
dERhZW1vbihUcnVlKQorICAgICAgICBzZWxmLnN0YXJ0KCkKKworICAgIGRlZiBydW4oc2VsZik6
CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBtZXNzYWdlLCBjb25kaXRpb24gPSBz
ZWxmLl9xdWV1ZS5nZXQoKQorICAgICAgICAgICAgY29uZGl0aW9uLmFjcXVpcmUoKQorICAgICAg
ICAgICAgc2VuZF9tZXNzYWdlKHNlbGYuX3JlcXVlc3QsIG1lc3NhZ2UpCisgICAgICAgICAgICBj
b25kaXRpb24ubm90aWZ5KCkKKyAgICAgICAgICAgIGNvbmRpdGlvbi5yZWxlYXNlKCkKKworICAg
IGRlZiBzZW5kKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICAiIiJTZW5kIGEgbWVzc2FnZSwgYmxv
Y2tpbmcuIiIiCisKKyAgICAgICAgY29uZGl0aW9uID0gdGhyZWFkaW5nLkNvbmRpdGlvbigpCisg
ICAgICAgIGNvbmRpdGlvbi5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5fcXVldWUucHV0KChtZXNz
YWdlLCBjb25kaXRpb24pKQorICAgICAgICBjb25kaXRpb24ud2FpdCgpCisKKyAgICBkZWYgc2Vu
ZF9ub3dhaXQoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICIiIlNlbmQgYSBtZXNzYWdlLCBub24t
YmxvY2tpbmcuIiIiCisKKyAgICAgICAgc2VsZi5fcXVldWUucHV0KChtZXNzYWdlLCB0aHJlYWRp
bmcuQ29uZGl0aW9uKCkpKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25l
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L21vZF9weXdlYnNvY2tldC9z
dGFuZGFsb25lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjMTQzZWEwMDY5M2NlMjU3ODc2MDU2MDhhZWYzMTZl
NGE5OWNiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKQEAgLTAsMCArMSw4NzAgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KKyMg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiU3RhbmRhbG9u
ZSBXZWJTb2NrZXQgc2VydmVyLgorCitCQVNJQyBVU0FHRQorCitVc2UgdGhpcyBzZXJ2ZXIgdG8g
cnVuIG1vZF9weXdlYnNvY2tldCB3aXRob3V0IEFwYWNoZSBIVFRQIFNlcnZlci4KKworVXNhZ2U6
CisgICAgcHl0aG9uIHN0YW5kYWxvbmUucHkgWy1wIDx3c19wb3J0Pl0gWy13IDx3ZWJzb2NrX2hh
bmRsZXJzPl0KKyAgICAgICAgICAgICAgICAgICAgICAgICBbLXMgPHNjYW5fZGlyPl0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICBbLWQgPGRvY3VtZW50X3Jvb3Q+XQorICAgICAgICAgICAgICAg
ICAgICAgICAgIFstbSA8d2Vic29ja19oYW5kbGVyc19tYXBfZmlsZT5dCisgICAgICAgICAgICAg
ICAgICAgICAgICAgLi4uIGZvciBvdGhlciBvcHRpb25zLCBzZWUgX21haW4gYmVsb3cgLi4uCisK
Kzx3c19wb3J0PiBpcyB0aGUgcG9ydCBudW1iZXIgdG8gdXNlIGZvciB3czovLyBjb25uZWN0aW9u
LgorCis8ZG9jdW1lbnRfcm9vdD4gaXMgdGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9m
IEhUTUwgZmlsZXMuCisKKzx3ZWJzb2NrX2hhbmRsZXJzPiBpcyB0aGUgcGF0aCB0byB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgV2ViU29ja2V0IGhhbmRsZXJzLgorU2VlIF9faW5pdF9fLnB5IGZvciBk
ZXRhaWxzIG9mIDx3ZWJzb2NrX2hhbmRsZXJzPiBhbmQgaG93IHRvIHdyaXRlIFdlYlNvY2tldAor
aGFuZGxlcnMuIElmIHRoaXMgcGF0aCBpcyByZWxhdGl2ZSwgPGRvY3VtZW50X3Jvb3Q+IGlzIHVz
ZWQgYXMgdGhlIGJhc2UuCisKKzxzY2FuX2Rpcj4gaXMgYSBwYXRoIHVuZGVyIHRoZSByb290IGRp
cmVjdG9yeS4gSWYgc3BlY2lmaWVkLCBvbmx5IHRoZQoraGFuZGxlcnMgdW5kZXIgc2Nhbl9kaXIg
YXJlIHNjYW5uZWQuIFRoaXMgaXMgdXNlZnVsIGluIHNhdmluZyBzY2FuIHRpbWUuCisKKworQ09O
RklHVVJBVElPTiBGSUxFCisKK1lvdSBjYW4gYWxzbyB3cml0ZSBhIGNvbmZpZ3VyYXRpb24gZmls
ZSBhbmQgdXNlIGl0IGJ5IHNwZWNpZnlpbmcgdGhlIHBhdGggdG8KK3RoZSBjb25maWd1cmF0aW9u
IGZpbGUgYnkgLS1jb25maWcgb3B0aW9uLiBQbGVhc2Ugd3JpdGUgYSBjb25maWd1cmF0aW9uIGZp
bGUKK2ZvbGxvd2luZyB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgUHl0aG9uIENvbmZpZ1BhcnNl
ciBsaWJyYXJ5LiBOYW1lIG9mIGVhY2gKK2VudHJ5IG11c3QgYmUgdGhlIGxvbmcgdmVyc2lvbiBh
cmd1bWVudCBuYW1lLiBFLmcuIHRvIHNldCBsb2cgbGV2ZWwgdG8gZGVidWcsCithZGQgdGhlIGZv
bGxvd2luZyBsaW5lOgorCitsb2dfbGV2ZWw9ZGVidWcKKworRm9yIG9wdGlvbnMgd2hpY2ggZG9l
c24ndCB0YWtlIHZhbHVlLCBwbGVhc2UgYWRkIHNvbWUgZmFrZSB2YWx1ZS4gRS5nLiBmb3IKKy0t
dGxzIG9wdGlvbiwgYWRkIHRoZSBmb2xsb3dpbmcgbGluZToKKwordGxzPVRydWUKKworTm90ZSB0
aGF0IHRscyB3aWxsIGJlIGVuYWJsZWQgZXZlbiBpZiB5b3Ugd3JpdGUgdGxzPUZhbHNlIGFzIHRo
ZSB2YWx1ZSBwYXJ0IGlzCitmYWtlLgorCitXaGVuIGJvdGggYSBjb21tYW5kIGxpbmUgYXJndW1l
bnQgYW5kIGEgY29uZmlndXJhdGlvbiBmaWxlIGVudHJ5IGFyZSBzZXQgZm9yCit0aGUgc2FtZSBj
b25maWd1cmF0aW9uIGl0ZW0sIHRoZSBjb21tYW5kIGxpbmUgdmFsdWUgd2lsbCBvdmVycmlkZSBv
bmUgaW4gdGhlCitjb25maWd1cmF0aW9uIGZpbGUuCisKKworVEhSRUFESU5HCisKK1RoaXMgc2Vy
dmVyIGlzIGRlcml2ZWQgZnJvbSBTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nTWl4SW4uIEhlbmNlIGEg
dGhyZWFkIGlzCit1c2VkIGZvciBlYWNoIHJlcXVlc3QuCisKKworU0VDVVJJVFkgV0FSTklORwor
CitUaGlzIHVzZXMgQ0dJSFRUUFNlcnZlciBhbmQgQ0dJSFRUUFNlcnZlciBpcyBub3Qgc2VjdXJl
LgorSXQgbWF5IGV4ZWN1dGUgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIG9yIGV4dGVybmFsIHByb2dy
YW1zLiBJdCBzaG91bGQgbm90IGJlCit1c2VkIG91dHNpZGUgYSBmaXJld2FsbC4KKyIiIgorCitp
bXBvcnQgQmFzZUhUVFBTZXJ2ZXIKK2ltcG9ydCBDR0lIVFRQU2VydmVyCitpbXBvcnQgU2ltcGxl
SFRUUFNlcnZlcgoraW1wb3J0IFNvY2tldFNlcnZlcgoraW1wb3J0IENvbmZpZ1BhcnNlcgoraW1w
b3J0IGh0dHBsaWIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbG9nZ2luZy5oYW5kbGVycworaW1w
b3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNlbGVjdAoraW1wb3J0
IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKKworX0hB
U19TU0wgPSBGYWxzZQorX0hBU19PUEVOX1NTTCA9IEZhbHNlCit0cnk6CisgICAgaW1wb3J0IHNz
bAorICAgIF9IQVNfU1NMID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRyeToKKyAg
ICAgICAgaW1wb3J0IE9wZW5TU0wuU1NMCisgICAgICAgIF9IQVNfT1BFTl9TU0wgPSBUcnVlCisg
ICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwYXNzCisKK2Zyb20gbW9kX3B5d2Vic29j
a2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBkaXNwYXRjaAor
ZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGhhbmRzaGFrZQorZnJvbSBtb2RfcHl3ZWJzb2Nr
ZXQgaW1wb3J0IGh0dHBfaGVhZGVyX3V0aWwKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBt
ZW1vcml6aW5nZmlsZQorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IHV0aWwKKworCitfREVG
QVVMVF9MT0dfTUFYX0JZVEVTID0gMTAyNCAqIDI1NgorX0RFRkFVTFRfTE9HX0JBQ0tVUF9DT1VO
VCA9IDUKKworX0RFRkFVTFRfUkVRVUVTVF9RVUVVRV9TSVpFID0gMTI4CisKKyMgMTAyNCBpcyBw
cmFjdGljYWxseSBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBXZWJTb2NrZXQgaGFuZHNoYWtlIGxp
bmVzLgorX01BWF9NRU1PUklaRURfTElORVMgPSAxMDI0CisKKworY2xhc3MgX1N0YW5kYWxvbmVD
b25uZWN0aW9uKG9iamVjdCk6CisgICAgIiIiTWltaWMgbW9kX3B5dGhvbiBtcF9jb25uLiIiIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3RfaGFuZGxlcik6CisgICAgICAgICIiIkNv
bnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxdWVz
dF9oYW5kbGVyOiBBIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyIGluc3RhbmNlLgorICAgICAgICAi
IiIKKworICAgICAgICBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIgPSByZXF1ZXN0X2hhbmRsZXIKKwor
ICAgIGRlZiBnZXRfbG9jYWxfYWRkcihzZWxmKToKKyAgICAgICAgIiIiR2V0dGVyIHRvIG1pbWlj
IG1wX2Nvbm4ubG9jYWxfYWRkci4iIiIKKworICAgICAgICByZXR1cm4gKHNlbGYuX3JlcXVlc3Rf
aGFuZGxlci5zZXJ2ZXIuc2VydmVyX25hbWUsCisgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVz
dF9oYW5kbGVyLnNlcnZlci5zZXJ2ZXJfcG9ydCkKKyAgICBsb2NhbF9hZGRyID0gcHJvcGVydHko
Z2V0X2xvY2FsX2FkZHIpCisKKyAgICBkZWYgZ2V0X3JlbW90ZV9hZGRyKHNlbGYpOgorICAgICAg
ICAiIiJHZXR0ZXIgdG8gbWltaWMgbXBfY29ubi5yZW1vdGVfYWRkci4KKworICAgICAgICBTZXR0
aW5nIHRoZSBwcm9wZXJ0eSBpbiBfX2luaXRfXyB3b24ndCB3b3JrIGJlY2F1c2UgdGhlIHJlcXVl
c3QKKyAgICAgICAgaGFuZGxlciBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0IHRoZXJlLiIiIgorCisg
ICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIuY2xpZW50X2FkZHJlc3MKKyAgICBy
ZW1vdGVfYWRkciA9IHByb3BlcnR5KGdldF9yZW1vdGVfYWRkcikKKworICAgIGRlZiB3cml0ZShz
ZWxmLCBkYXRhKToKKyAgICAgICAgIiIiTWltaWMgbXBfY29ubi53cml0ZSgpLiIiIgorCisgICAg
ICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIud2ZpbGUud3JpdGUoZGF0YSkKKworICAg
IGRlZiByZWFkKHNlbGYsIGxlbmd0aCk6CisgICAgICAgICIiIk1pbWljIG1wX2Nvbm4ucmVhZCgp
LiIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIucmZpbGUucmVhZChs
ZW5ndGgpCisKKyAgICBkZWYgZ2V0X21lbW9yaXplZF9saW5lcyhzZWxmKToKKyAgICAgICAgIiIi
R2V0IG1lbW9yaXplZCBsaW5lcy4iIiIKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9o
YW5kbGVyLnJmaWxlLmdldF9tZW1vcml6ZWRfbGluZXMoKQorCisKK2NsYXNzIF9TdGFuZGFsb25l
UmVxdWVzdChvYmplY3QpOgorICAgICIiIk1pbWljIG1vZF9weXRob24gcmVxdWVzdC4iIiIKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0X2hhbmRsZXIsIHVzZV90bHMpOgorICAgICAg
ICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAg
IHJlcXVlc3RfaGFuZGxlcjogQSBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlciBpbnN0YW5jZS4KKyAg
ICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gdXRpbC5nZXRfY2xhc3NfbG9nZ2Vy
KHNlbGYpCisKKyAgICAgICAgc2VsZi5fcmVxdWVzdF9oYW5kbGVyID0gcmVxdWVzdF9oYW5kbGVy
CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IF9TdGFuZGFsb25lQ29ubmVjdGlvbihyZXF1ZXN0
X2hhbmRsZXIpCisgICAgICAgIHNlbGYuX3VzZV90bHMgPSB1c2VfdGxzCisgICAgICAgIHNlbGYu
aGVhZGVyc19pbiA9IHJlcXVlc3RfaGFuZGxlci5oZWFkZXJzCisKKyAgICBkZWYgZ2V0X3VyaShz
ZWxmKToKKyAgICAgICAgIiIiR2V0dGVyIHRvIG1pbWljIHJlcXVlc3QudXJpLiIiIgorCisgICAg
ICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIucGF0aAorICAgIHVyaSA9IHByb3BlcnR5
KGdldF91cmkpCisKKyAgICBkZWYgZ2V0X21ldGhvZChzZWxmKToKKyAgICAgICAgIiIiR2V0dGVy
IHRvIG1pbWljIHJlcXVlc3QubWV0aG9kLiIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9yZXF1
ZXN0X2hhbmRsZXIuY29tbWFuZAorICAgIG1ldGhvZCA9IHByb3BlcnR5KGdldF9tZXRob2QpCisK
KyAgICBkZWYgaXNfaHR0cHMoc2VsZik6CisgICAgICAgICIiIk1pbWljIHJlcXVlc3QuaXNfaHR0
cHMoKS4iIiIKKworICAgICAgICByZXR1cm4gc2VsZi5fdXNlX3RscworCisgICAgZGVmIF9kcmFp
bl9yZWNlaXZlZF9kYXRhKHNlbGYpOgorICAgICAgICAiIiJEb24ndCB1c2UgdGhpcyBtZXRob2Qg
ZnJvbSBXZWJTb2NrZXQgaGFuZGxlci4gRHJhaW5zIHVucmVhZCBkYXRhCisgICAgICAgIGluIHRo
ZSByZWNlaXZlIGJ1ZmZlci4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmF3X3NvY2tldCA9IHNl
bGYuX3JlcXVlc3RfaGFuZGxlci5jb25uZWN0aW9uCisgICAgICAgIGRyYWluZWRfZGF0YSA9IHV0
aWwuZHJhaW5fcmVjZWl2ZWRfZGF0YShyYXdfc29ja2V0KQorCisgICAgICAgIGlmIGRyYWluZWRf
ZGF0YToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygKKyAgICAgICAgICAgICAgICAn
RHJhaW5lZCBkYXRhIGZvbGxvd2luZyBjbG9zZSBmcmFtZTogJXInLCBkcmFpbmVkX2RhdGEpCisK
KworY2xhc3MgX1N0YW5kYWxvbmVTU0xDb25uZWN0aW9uKG9iamVjdCk6CisgICAgIiIiQSB3cmFw
cGVyIGNsYXNzIGZvciBPcGVuU1NMLlNTTC5Db25uZWN0aW9uIHRvIHByb3ZpZGUgbWFrZWZpbGUg
bWV0aG9kCisgICAgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY2xhc3MuCisgICAgIiIi
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubmVjdGlvbik6CisgICAgICAgIHNlbGYuX2Nv
bm5lY3Rpb24gPSBjb25uZWN0aW9uCisKKyAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBu
YW1lKToKKyAgICAgICAgaWYgbmFtZSBpbiAoJ19jb25uZWN0aW9uJywgJ21ha2VmaWxlJyk6Cisg
ICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rpb24uX19nZXRhdHRyaWJ1dGVfXyhuYW1lKQorCisg
ICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgaWYgbmFtZSBp
biAoJ19jb25uZWN0aW9uJywgJ21ha2VmaWxlJyk6CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0
Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZi5fY29u
bmVjdGlvbi5fX3NldGF0dHJfXyhuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBtYWtlZmlsZShzZWxm
LCBtb2RlPSdyJywgYnVmc2l6ZT0tMSk6CisgICAgICAgIHJldHVybiBzb2NrZXQuX2ZpbGVvYmpl
Y3Qoc2VsZi5fY29ubmVjdGlvbiwgbW9kZSwgYnVmc2l6ZSkKKworCitjbGFzcyBXZWJTb2NrZXRT
ZXJ2ZXIoU29ja2V0U2VydmVyLlRocmVhZGluZ01peEluLCBCYXNlSFRUUFNlcnZlci5IVFRQU2Vy
dmVyKToKKyAgICAiIiJIVFRQU2VydmVyIHNwZWNpYWxpemVkIGZvciBXZWJTb2NrZXQuIiIiCisK
KyAgICAjIE92ZXJyaWRlcyBTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nTWl4SW4uZGFlbW9uX3RocmVh
ZHMKKyAgICBkYWVtb25fdGhyZWFkcyA9IFRydWUKKyAgICAjIE92ZXJyaWRlcyBCYXNlSFRUUFNl
cnZlci5IVFRQU2VydmVyLmFsbG93X3JldXNlX2FkZHJlc3MKKyAgICBhbGxvd19yZXVzZV9hZGRy
ZXNzID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICAi
IiJPdmVycmlkZSBTb2NrZXRTZXJ2ZXIuVENQU2VydmVyLl9faW5pdF9fIHRvIHNldCBTU0wgZW5h
YmxlZAorICAgICAgICBzb2NrZXQgb2JqZWN0IHRvIHNlbGYuc29ja2V0IGJlZm9yZSBzZXJ2ZXJf
YmluZCBhbmQgc2VydmVyX2FjdGl2YXRlLAorICAgICAgICBpZiBuZWNlc3NhcnkuCisgICAgICAg
ICIiIgorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dlcihzZWxm
KQorCisgICAgICAgIHNlbGYucmVxdWVzdF9xdWV1ZV9zaXplID0gb3B0aW9ucy5yZXF1ZXN0X3F1
ZXVlX3NpemUKKyAgICAgICAgc2VsZi5fX3dzX2lzX3NodXRfZG93biA9IHRocmVhZGluZy5FdmVu
dCgpCisgICAgICAgIHNlbGYuX193c19zZXJ2aW5nID0gRmFsc2UKKworICAgICAgICBTb2NrZXRT
ZXJ2ZXIuQmFzZVNlcnZlci5fX2luaXRfXygKKyAgICAgICAgICAgIHNlbGYsIChvcHRpb25zLnNl
cnZlcl9ob3N0LCBvcHRpb25zLnBvcnQpLCBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcikKKworICAg
ICAgICAjIEV4cG9zZSB0aGUgb3B0aW9ucyBvYmplY3QgdG8gYWxsb3cgaGFuZGxlciBvYmplY3Rz
IGFjY2VzcyBpdC4gV2UgbmFtZQorICAgICAgICAjIGl0IHdpdGggd2Vic29ja2V0XyBwcmVmaXgg
dG8gYXZvaWQgY29uZmxpY3QuCisgICAgICAgIHNlbGYud2Vic29ja2V0X3NlcnZlcl9vcHRpb25z
ID0gb3B0aW9ucworCisgICAgICAgIHNlbGYuX2NyZWF0ZV9zb2NrZXRzKCkKKyAgICAgICAgc2Vs
Zi5zZXJ2ZXJfYmluZCgpCisgICAgICAgIHNlbGYuc2VydmVyX2FjdGl2YXRlKCkKKworICAgIGRl
ZiBfY3JlYXRlX3NvY2tldHMoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyX25hbWUsIHNlbGYu
c2VydmVyX3BvcnQgPSBzZWxmLnNlcnZlcl9hZGRyZXNzCisgICAgICAgIHNlbGYuX3NvY2tldHMg
PSBbXQorICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJfbmFtZToKKyAgICAgICAgICAgICMgT24g
cGxhdGZvcm1zIHRoYXQgZG9lc24ndCBzdXBwb3J0IElQdjYsIHRoZSBmaXJzdCBiaW5kIGZhaWxz
LgorICAgICAgICAgICAgIyBPbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0cyBJUHY2CisgICAgICAg
ICAgICAjIC0gSWYgaXQgYmluZHMgYm90aCBJUHY0IGFuZCBJUHY2IG9uIGNhbGwgd2l0aCBBRl9J
TkVUNiwgdGhlCisgICAgICAgICAgICAjICAgZmlyc3QgYmluZCBzdWNjZWVkcyBhbmQgdGhlIHNl
Y29uZCBmYWlscyAod2UnbGwgc2VlICdBZGRyZXNzCisgICAgICAgICAgICAjICAgYWxyZWFkeSBp
biB1c2UnIGVycm9yKS4KKyAgICAgICAgICAgICMgLSBJZiBpdCBiaW5kcyBvbmx5IElQdjYgb24g
Y2FsbCB3aXRoIEFGX0lORVQ2LCBib3RoIGNhbGwgYXJlCisgICAgICAgICAgICAjICAgZXhwZWN0
ZWQgdG8gc3VjY2VlZCB0byBsaXN0ZW4gYm90aCBwcm90b2NvbC4KKyAgICAgICAgICAgIGFkZHJp
bmZvX2FycmF5ID0gWworICAgICAgICAgICAgICAgIChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5T
T0NLX1NUUkVBTSwgJycsICcnLCAnJyksCisgICAgICAgICAgICAgICAgKHNvY2tldC5BRl9JTkVU
LCBzb2NrZXQuU09DS19TVFJFQU0sICcnLCAnJywgJycpXQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgYWRkcmluZm9fYXJyYXkgPSBzb2NrZXQuZ2V0YWRkcmluZm8oc2VsZi5zZXJ2ZXJfbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
c2VydmVyX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzb2NrZXQuQUZfVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc29ja2V0LlNPQ0tfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fVENQKQorICAgICAgICBm
b3IgYWRkcmluZm8gaW4gYWRkcmluZm9fYXJyYXk6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIu
aW5mbygnQ3JlYXRlIHNvY2tldCBvbjogJXInLCBhZGRyaW5mbykKKyAgICAgICAgICAgIGZhbWls
eSwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNvY2thZGRyID0gYWRkcmluZm8KKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzb2NrZXRfID0gc29ja2V0LnNvY2tldChmYW1p
bHksIHNvY2t0eXBlKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAg
ICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnU2tpcCBieSBmYWlsdXJlOiAlcicsIGUpCisgICAg
ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHNlbGYud2Vic29ja2V0X3NlcnZl
cl9vcHRpb25zLnVzZV90bHM6CisgICAgICAgICAgICAgICAgaWYgX0hBU19TU0w6CisgICAgICAg
ICAgICAgICAgICAgIHNvY2tldF8gPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0XywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGtleWZpbGU9c2VsZi53ZWJzb2NrZXRfc2VydmVyX29wdGlvbnMucHJp
dmF0ZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1zZWxmLndlYnNvY2tl
dF9zZXJ2ZXJfb3B0aW9ucy5jZXJ0aWZpY2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNz
bF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICAgICAgaWYgX0hBU19P
UEVOX1NTTDoKKyAgICAgICAgICAgICAgICAgICAgY3R4ID0gT3BlblNTTC5TU0wuQ29udGV4dChP
cGVuU1NMLlNTTC5TU0x2MjNfTUVUSE9EKQorICAgICAgICAgICAgICAgICAgICBjdHgudXNlX3By
aXZhdGVrZXlfZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2Vic29ja2V0X3Nl
cnZlcl9vcHRpb25zLnByaXZhdGVfa2V5KQorICAgICAgICAgICAgICAgICAgICBjdHgudXNlX2Nl
cnRpZmljYXRlX2ZpbGUoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndlYnNvY2tldF9z
ZXJ2ZXJfb3B0aW9ucy5jZXJ0aWZpY2F0ZSkKKyAgICAgICAgICAgICAgICAgICAgc29ja2V0XyA9
IE9wZW5TU0wuU1NMLkNvbm5lY3Rpb24oY3R4LCBzb2NrZXRfKQorICAgICAgICAgICAgc2VsZi5f
c29ja2V0cy5hcHBlbmQoKHNvY2tldF8sIGFkZHJpbmZvKSkKKworICAgIGRlZiBzZXJ2ZXJfYmlu
ZChzZWxmKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgU29ja2V0U2VydmVyLlRDUFNlcnZlci5zZXJ2
ZXJfYmluZCB0byBlbmFibGUgbXVsdGlwbGUKKyAgICAgICAgc29ja2V0cyBiaW5kLgorICAgICAg
ICAiIiIKKworICAgICAgICBmYWlsZWRfc29ja2V0cyA9IFtdCisKKyAgICAgICAgZm9yIHNvY2tl
dGluZm8gaW4gc2VsZi5fc29ja2V0czoKKyAgICAgICAgICAgIHNvY2tldF8sIGFkZHJpbmZvID0g
c29ja2V0aW5mbworICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0JpbmQgb246ICVyJywg
YWRkcmluZm8pCisgICAgICAgICAgICBpZiBzZWxmLmFsbG93X3JldXNlX2FkZHJlc3M6CisgICAg
ICAgICAgICAgICAgc29ja2V0Xy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQu
U09fUkVVU0VBRERSLCAxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2tl
dF8uYmluZChzZWxmLnNlcnZlcl9hZGRyZXNzKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
biwgZToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnU2tpcCBieSBmYWlsdXJl
OiAlcicsIGUpCisgICAgICAgICAgICAgICAgc29ja2V0Xy5jbG9zZSgpCisgICAgICAgICAgICAg
ICAgZmFpbGVkX3NvY2tldHMuYXBwZW5kKHNvY2tldGluZm8pCisKKyAgICAgICAgZm9yIHNvY2tl
dGluZm8gaW4gZmFpbGVkX3NvY2tldHM6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXRzLnJlbW92
ZShzb2NrZXRpbmZvKQorCisgICAgZGVmIHNlcnZlcl9hY3RpdmF0ZShzZWxmKToKKyAgICAgICAg
IiIiT3ZlcnJpZGUgU29ja2V0U2VydmVyLlRDUFNlcnZlci5zZXJ2ZXJfYWN0aXZhdGUgdG8gZW5h
YmxlIG11bHRpcGxlCisgICAgICAgIHNvY2tldHMgbGlzdGVuLgorICAgICAgICAiIiIKKworICAg
ICAgICBmYWlsZWRfc29ja2V0cyA9IFtdCisKKyAgICAgICAgZm9yIHNvY2tldGluZm8gaW4gc2Vs
Zi5fc29ja2V0czoKKyAgICAgICAgICAgIHNvY2tldF8sIGFkZHJpbmZvID0gc29ja2V0aW5mbwor
ICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0xpc3RlbiBvbjogJXInLCBhZGRyaW5mbykK
KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzb2NrZXRfLmxpc3RlbihzZWxmLnJl
cXVlc3RfcXVldWVfc2l6ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAg
ICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ1NraXAgYnkgZmFpbHVyZTogJXInLCBlKQor
ICAgICAgICAgICAgICAgIHNvY2tldF8uY2xvc2UoKQorICAgICAgICAgICAgICAgIGZhaWxlZF9z
b2NrZXRzLmFwcGVuZChzb2NrZXRpbmZvKQorCisgICAgICAgIGZvciBzb2NrZXRpbmZvIGluIGZh
aWxlZF9zb2NrZXRzOgorICAgICAgICAgICAgc2VsZi5fc29ja2V0cy5yZW1vdmUoc29ja2V0aW5m
bykKKworICAgIGRlZiBzZXJ2ZXJfY2xvc2Uoc2VsZik6CisgICAgICAgICIiIk92ZXJyaWRlIFNv
Y2tldFNlcnZlci5UQ1BTZXJ2ZXIuc2VydmVyX2Nsb3NlIHRvIGVuYWJsZSBtdWx0aXBsZQorICAg
ICAgICBzb2NrZXRzIGNsb3NlLgorICAgICAgICAiIiIKKworICAgICAgICBmb3Igc29ja2V0aW5m
byBpbiBzZWxmLl9zb2NrZXRzOgorICAgICAgICAgICAgc29ja2V0XywgYWRkcmluZm8gPSBzb2Nr
ZXRpbmZvCisgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnQ2xvc2Ugb246ICVyJywgYWRk
cmluZm8pCisgICAgICAgICAgICBzb2NrZXRfLmNsb3NlKCkKKworICAgIGRlZiBmaWxlbm8oc2Vs
Zik6CisgICAgICAgICIiIk92ZXJyaWRlIFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIuZmlsZW5vLiIi
IgorCisgICAgICAgIHNlbGYuX2xvZ2dlci5jcml0aWNhbCgnTm90IHN1cHBvcnRlZDogZmlsZW5v
JykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2tldHNbMF1bMF0uZmlsZW5vKCkKKworICAgIGRl
ZiBoYW5kbGVfZXJyb3Ioc2VsZiwgcnF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgICIi
Ik92ZXJyaWRlIFNvY2tldFNlcnZlci5oYW5kbGVfZXJyb3IuIiIiCisKKyAgICAgICAgc2VsZi5f
bG9nZ2VyLmVycm9yKAorICAgICAgICAgICAgJ0V4Y2VwdGlvbiBpbiBwcm9jZXNzaW5nIHJlcXVl
c3QgZnJvbTogJXJcbiVzJywKKyAgICAgICAgICAgIGNsaWVudF9hZGRyZXNzLAorICAgICAgICAg
ICAgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSkKKyAgICAgICAgIyBOb3RlOiBjbGllbnRfYWRkcmVz
cyBpcyBhIHR1cGxlLgorCisgICAgZGVmIGdldF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAiIiJP
dmVycmlkZSBUQ1BTZXJ2ZXIuZ2V0X3JlcXVlc3QgdG8gd3JhcCBPcGVuU1NMLlNTTC5Db25uZWN0
aW9uCisgICAgICAgIG9iamVjdCB3aXRoIF9TdGFuZGFsb25lU1NMQ29ubmVjdGlvbiB0byBwcm92
aWRlIG1ha2VmaWxlIG1ldGhvZC4gV2UKKyAgICAgICAgY2Fubm90IHN1YnN0aXR1dGUgT3BlblNT
TC5TU0wuQ29ubmVjdGlvbi5tYWtlZmlsZSBzaW5jZSBpdCdzIHJlYWRvbmx5CisgICAgICAgIGF0
dHJpYnV0ZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgYWNjZXB0ZWRfc29ja2V0LCBjbGllbnRf
YWRkcmVzcyA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCisgICAgICAgIGlmIHNlbGYud2Vic29ja2V0
X3NlcnZlcl9vcHRpb25zLnVzZV90bHMgYW5kIF9IQVNfT1BFTl9TU0w6CisgICAgICAgICAgICBh
Y2NlcHRlZF9zb2NrZXQgPSBfU3RhbmRhbG9uZVNTTENvbm5lY3Rpb24oYWNjZXB0ZWRfc29ja2V0
KQorICAgICAgICByZXR1cm4gYWNjZXB0ZWRfc29ja2V0LCBjbGllbnRfYWRkcmVzcworCisgICAg
ZGVmIHNlcnZlX2ZvcmV2ZXIoc2VsZiwgcG9sbF9pbnRlcnZhbD0wLjUpOgorICAgICAgICAiIiJP
dmVycmlkZSBTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2ZV9mb3JldmVyLiIiIgorCisgICAg
ICAgIHNlbGYuX193c19zZXJ2aW5nID0gVHJ1ZQorICAgICAgICBzZWxmLl9fd3NfaXNfc2h1dF9k
b3duLmNsZWFyKCkKKyAgICAgICAgaGFuZGxlX3JlcXVlc3QgPSBzZWxmLmhhbmRsZV9yZXF1ZXN0
CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ19oYW5kbGVfcmVxdWVzdF9ub2Jsb2NrJyk6Cisg
ICAgICAgICAgICBoYW5kbGVfcmVxdWVzdCA9IHNlbGYuX2hhbmRsZV9yZXF1ZXN0X25vYmxvY2sK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci53YXJuaW5nKCdGYWxsYmFj
ayB0byBibG9ja2luZyByZXF1ZXN0IGhhbmRsZXInKQorICAgICAgICB0cnk6CisgICAgICAgICAg
ICB3aGlsZSBzZWxmLl9fd3Nfc2VydmluZzoKKyAgICAgICAgICAgICAgICByLCB3LCBlID0gc2Vs
ZWN0LnNlbGVjdCgKKyAgICAgICAgICAgICAgICAgICAgW3NvY2tldF9bMF0gZm9yIHNvY2tldF8g
aW4gc2VsZi5fc29ja2V0c10sCisgICAgICAgICAgICAgICAgICAgIFtdLCBbXSwgcG9sbF9pbnRl
cnZhbCkKKyAgICAgICAgICAgICAgICBmb3Igc29ja2V0XyBpbiByOgorICAgICAgICAgICAgICAg
ICAgICBzZWxmLnNvY2tldCA9IHNvY2tldF8KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlX3Jl
cXVlc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gTm9uZQorICAgICAgICBmaW5h
bGx5OgorICAgICAgICAgICAgc2VsZi5fX3dzX2lzX3NodXRfZG93bi5zZXQoKQorCisgICAgZGVm
IHNodXRkb3duKHNlbGYpOgorICAgICAgICAiIiJPdmVycmlkZSBTb2NrZXRTZXJ2ZXIuQmFzZVNl
cnZlci5zaHV0ZG93bi4iIiIKKworICAgICAgICBzZWxmLl9fd3Nfc2VydmluZyA9IEZhbHNlCisg
ICAgICAgIHNlbGYuX193c19pc19zaHV0X2Rvd24ud2FpdCgpCisKKworY2xhc3MgV2ViU29ja2V0
UmVxdWVzdEhhbmRsZXIoQ0dJSFRUUFNlcnZlci5DR0lIVFRQUmVxdWVzdEhhbmRsZXIpOgorICAg
ICIiIkNHSUhUVFBSZXF1ZXN0SGFuZGxlciBzcGVjaWFsaXplZCBmb3IgV2ViU29ja2V0LiIiIgor
CisgICAgIyBVc2UgaHR0cGxpYi5IVFRQTWVzc2FnZSBpbnN0ZWFkIG9mIG1pbWV0b29scy5NZXNz
YWdlLgorICAgIE1lc3NhZ2VDbGFzcyA9IGh0dHBsaWIuSFRUUE1lc3NhZ2UKKworICAgIGRlZiBz
ZXR1cChzZWxmKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgU29ja2V0U2VydmVyLlN0cmVhbVJlcXVl
c3RIYW5kbGVyLnNldHVwIHRvIHdyYXAgcmZpbGUKKyAgICAgICAgd2l0aCBNZW1vcml6aW5nRmls
ZS4KKworICAgICAgICBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBieSBCYXNlUmVxdWVzdEhh
bmRsZXIncyBjb25zdHJ1Y3RvcgorICAgICAgICBiZWZvcmUgY2FsbGluZyBCYXNlSFRUUFJlcXVl
c3RIYW5kbGVyLmhhbmRsZS4KKyAgICAgICAgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5oYW5kbGUg
d2lsbCBjYWxsCisgICAgICAgIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuaGFuZGxlX29uZV9yZXF1
ZXN0IGFuZCBpdCB3aWxsIGNhbGwKKyAgICAgICAgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIucGFy
c2VfcmVxdWVzdC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBDYWxsIHN1cGVyY2xhc3MncyBz
ZXR1cCB0byBwcmVwYXJlIHJmaWxlLCB3ZmlsZSwgZXRjLiBTZWUgc2V0dXAKKyAgICAgICAgIyBk
ZWZpbml0aW9uIG9uIHRoZSByb290IGNsYXNzIFNvY2tldFNlcnZlci5TdHJlYW1SZXF1ZXN0SGFu
ZGxlciB0bworICAgICAgICAjIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGRvZXMuCisgICAgICAgIENH
SUhUVFBTZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLnNldHVwKHNlbGYpCisKKyAgICAgICAg
c2VsZi5yZmlsZSA9IG1lbW9yaXppbmdmaWxlLk1lbW9yaXppbmdGaWxlKAorICAgICAgICAgICAg
c2VsZi5yZmlsZSwKKyAgICAgICAgICAgIG1heF9tZW1vcml6ZWRfbGluZXM9X01BWF9NRU1PUkla
RURfTElORVMpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJl
c3MsIHNlcnZlcik6CisgICAgICAgIHNlbGYuX2xvZ2dlciA9IHV0aWwuZ2V0X2NsYXNzX2xvZ2dl
cihzZWxmKQorCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBzZXJ2ZXIud2Vic29ja2V0X3NlcnZl
cl9vcHRpb25zCisKKyAgICAgICAgIyBPdmVycmlkZXMgQ0dJSFRUUFNlcnZlclJlcXVlc3RIYW5k
bGVyLmNnaV9kaXJlY3Rvcmllcy4KKyAgICAgICAgc2VsZi5jZ2lfZGlyZWN0b3JpZXMgPSBzZWxm
Ll9vcHRpb25zLmNnaV9kaXJlY3RvcmllcworICAgICAgICAjIFJlcGxhY2UgQ0dJSFRUUFJlcXVl
c3RIYW5kbGVyLmlzX2V4ZWN1dGFibGUgbWV0aG9kLgorICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LmlzX2V4ZWN1dGFibGVfbWV0aG9kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5pc19l
eGVjdXRhYmxlID0gc2VsZi5fb3B0aW9ucy5pc19leGVjdXRhYmxlX21ldGhvZAorCisgICAgICAg
ICMgVGhpcyBhY3R1YWxseSBjYWxscyBCYXNlUmVxdWVzdEhhbmRsZXIuX19pbml0X18uCisgICAg
ICAgIENHSUhUVFBTZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLl9faW5pdF9fKAorICAgICAg
ICAgICAgc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MsIHNlcnZlcikKKworICAgIGRlZiBw
YXJzZV9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAiIiJPdmVycmlkZSBCYXNlSFRUUFNlcnZlci5C
YXNlSFRUUFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3QuCisKKyAgICAgICAgUmV0dXJuIFRy
dWUgdG8gY29udGludWUgcHJvY2Vzc2luZyBmb3IgSFRUUChTKSwgRmFsc2Ugb3RoZXJ3aXNlLgor
CisgICAgICAgIFNlZSBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmhhbmRsZV9vbmVfcmVxdWVzdCBt
ZXRob2Qgd2hpY2ggY2FsbHMKKyAgICAgICAgdGhpcyBtZXRob2QgdG8gdW5kZXJzdGFuZCBob3cg
dGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGhhbmRsZWQuCisgICAgICAgICIiIgorCisgICAgICAg
ICMgV2UgaG9vayBwYXJzZV9yZXF1ZXN0IG1ldGhvZCwgYnV0IGFsc28gY2FsbCB0aGUgb3JpZ2lu
YWwKKyAgICAgICAgIyBDR0lIVFRQUmVxdWVzdEhhbmRsZXIucGFyc2VfcmVxdWVzdCBzaW5jZSB3
aGVuIHdlIHJldHVybiBGYWxzZSwKKyAgICAgICAgIyBDR0lIVFRQUmVxdWVzdEhhbmRsZXIuaGFu
ZGxlX29uZV9yZXF1ZXN0IGNvbnRpbnVlcyBwcm9jZXNzaW5nIGFuZAorICAgICAgICAjIGl0IG5l
ZWRzIHZhcmlhYmxlcyBzZXQgYnkgQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3Qu
CisgICAgICAgICMKKyAgICAgICAgIyBWYXJpYWJsZXMgc2V0IGJ5IHRoaXMgbWV0aG9kIHdpbGwg
YmUgYWxzbyB1c2VkIGJ5IFdlYlNvY2tldCByZXF1ZXN0CisgICAgICAgICMgaGFuZGxpbmcgKHNl
bGYucGF0aCwgc2VsZi5jb21tYW5kLCBzZWxmLnJlcXVlc3RsaW5lLCBldGMuIFNlZSBhbHNvCisg
ICAgICAgICMgaG93IF9TdGFuZGFsb25lUmVxdWVzdCdzIG1lbWJlcnMgYXJlIGltcGxlbWVudGVk
IHVzaW5nIHRoZXNlCisgICAgICAgICMgYXR0cmlidXRlcykuCisgICAgICAgIGlmIG5vdCBDR0lI
VFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlci5wYXJzZV9yZXF1ZXN0KHNlbGYpOgorICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGhvc3QsIHBvcnQsIHJlc291cmNlID0gaHR0
cF9oZWFkZXJfdXRpbC5wYXJzZV91cmkoc2VsZi5wYXRoKQorICAgICAgICBpZiByZXNvdXJjZSBp
cyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0ludmFsaWQgVVJJOiAlcics
IHNlbGYucGF0aCkKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdGYWxsYmFjayB0byBD
R0lIVFRQUmVxdWVzdEhhbmRsZXInKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAg
c2VydmVyX29wdGlvbnMgPSBzZWxmLnNlcnZlci53ZWJzb2NrZXRfc2VydmVyX29wdGlvbnMKKyAg
ICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbGlkYXRpb25faG9zdCA9
IHNlcnZlcl9vcHRpb25zLnZhbGlkYXRpb25faG9zdAorICAgICAgICAgICAgaWYgdmFsaWRhdGlv
bl9ob3N0IGlzIG5vdCBOb25lIGFuZCBob3N0ICE9IHZhbGlkYXRpb25faG9zdDoKKyAgICAgICAg
ICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnSW52YWxpZCBob3N0OiAlciAoZXhwZWN0ZWQ6ICVy
KScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uX2hvc3QpCisgICAgICAgICAgICAgICAg
c2VsZi5fbG9nZ2VyLmluZm8oJ0ZhbGxiYWNrIHRvIENHSUhUVFBSZXF1ZXN0SGFuZGxlcicpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgcG9ydCBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIHZhbGlkYXRpb25fcG9ydCA9IHNlcnZlcl9vcHRpb25zLnZhbGlkYXRpb25f
cG9ydAorICAgICAgICAgICAgaWYgdmFsaWRhdGlvbl9wb3J0IGlzIG5vdCBOb25lIGFuZCBwb3J0
ICE9IHZhbGlkYXRpb25fcG9ydDoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygn
SW52YWxpZCBwb3J0OiAlciAoZXhwZWN0ZWQ6ICVyKScsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0aW9uX3BvcnQpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0ZhbGxiYWNr
IHRvIENHSUhUVFBSZXF1ZXN0SGFuZGxlcicpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUK
KyAgICAgICAgc2VsZi5wYXRoID0gcmVzb3VyY2UKKworICAgICAgICByZXF1ZXN0ID0gX1N0YW5k
YWxvbmVSZXF1ZXN0KHNlbGYsIHNlbGYuX29wdGlvbnMudXNlX3RscykKKworICAgICAgICB0cnk6
CisgICAgICAgICAgICAjIEZhbGxiYWNrIHRvIGRlZmF1bHQgaHR0cCBoYW5kbGVyIGZvciByZXF1
ZXN0IHBhdGhzIGZvciB3aGljaAorICAgICAgICAgICAgIyB3ZSBkb24ndCBoYXZlIHJlcXVlc3Qg
aGFuZGxlcnMuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5kaXNwYXRjaGVyLmdl
dF9oYW5kbGVyX3N1aXRlKHNlbGYucGF0aCk6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2Vy
LmluZm8oJ05vIGhhbmRsZXIgZm9yIHJlc291cmNlOiAlcicsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5wYXRoKQorICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5p
bmZvKCdGYWxsYmFjayB0byBDR0lIVFRQUmVxdWVzdEhhbmRsZXInKQorICAgICAgICAgICAgICAg
IHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBkaXNwYXRjaC5EaXNwYXRjaEV4Y2VwdGlvbiwg
ZToKKyAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCclcycsIGUpCisgICAgICAgICAgICBz
ZWxmLnNlbmRfZXJyb3IoZS5zdGF0dXMpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
ICAgICAjIElmIGFueSBFeGNlcHRpb25zIHdpdGhvdXQgZXhjZXB0IGNsYXVzZSBzZXR1cCAoaW5j
bHVkaW5nCisgICAgICAgICMgRGlzcGF0Y2hFeGNlcHRpb24pIGlzIHJhaXNlZCBiZWxvdyB0aGlz
IHBvaW50LCBpdCB3aWxsIGJlIGNhdWdodAorICAgICAgICAjIGFuZCBsb2dnZWQgYnkgV2ViU29j
a2V0U2VydmVyLgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBoYW5kc2hha2UuZG9faGFuZHNoYWtlKAorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0
LAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmRpc3BhdGNoZXIsCisgICAgICAg
ICAgICAgICAgICAgIGFsbG93RHJhZnQ3NT1zZWxmLl9vcHRpb25zLmFsbG93X2RyYWZ0NzUsCisg
ICAgICAgICAgICAgICAgICAgIHN0cmljdD1zZWxmLl9vcHRpb25zLnN0cmljdCkKKyAgICAgICAg
ICAgIGV4Y2VwdCBoYW5kc2hha2UuVmVyc2lvbkV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAg
ICBzZWxmLl9sb2dnZXIuaW5mbygnJXMnLCBlKQorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9y
ZXNwb25zZShjb21tb24uSFRUUF9TVEFUVVNfQkFEX1JFUVVFU1QpCisgICAgICAgICAgICAgICAg
c2VsZi5zZW5kX2hlYWRlcihjb21tb24uU0VDX1dFQlNPQ0tFVF9WRVJTSU9OX0hFQURFUiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3VwcG9ydGVkX3ZlcnNpb25zKQorICAg
ICAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorICAgICAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5IYW5kc2hha2VFeGNlcHRpb24sIGU6
CisgICAgICAgICAgICAgICAgIyBIYW5kc2hha2UgZm9yIHdzKHMpIGZhaWxlZC4KKyAgICAgICAg
ICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnJXMnLCBlKQorICAgICAgICAgICAgICAgIHNlbGYu
c2VuZF9lcnJvcihlLnN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
ICAgICAgICAgcmVxdWVzdC5fZGlzcGF0Y2hlciA9IHNlbGYuX29wdGlvbnMuZGlzcGF0Y2hlcgor
ICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5kaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVz
dCkKKyAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5BYm9ydGVkQnlVc2VyRXhjZXB0aW9uLCBlOgor
ICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJyVzJywgZSkKKyAgICAgICAgcmV0dXJuIEZh
bHNlCisKKyAgICBkZWYgbG9nX3JlcXVlc3Qoc2VsZiwgY29kZT0nLScsIHNpemU9Jy0nKToKKyAg
ICAgICAgIiIiT3ZlcnJpZGUgQmFzZUhUVFBTZXJ2ZXIubG9nX3JlcXVlc3QuIiIiCisKKyAgICAg
ICAgc2VsZi5fbG9nZ2VyLmluZm8oJyIlcyIgJXMgJXMnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLnJlcXVlc3RsaW5lLCBzdHIoY29kZSksIHN0cihzaXplKSkKKworICAgIGRlZiBs
b2dfZXJyb3Ioc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJPdmVycmlkZSBCYXNlSFRUUFNlcnZl
ci5sb2dfZXJyb3IuIiIiCisKKyAgICAgICAgIyBEZXNwaXRlIHRoZSBuYW1lLCB0aGlzIG1ldGhv
ZCBpcyBmb3Igd2FybmluZ3MgdGhhbiBmb3IgZXJyb3JzLgorICAgICAgICAjIEZvciBleGFtcGxl
LCBIVFRQIHN0YXR1cyBjb2RlIGlzIGxvZ2dlZCBieSB0aGlzIG1ldGhvZC4KKyAgICAgICAgc2Vs
Zi5fbG9nZ2VyLndhcm5pbmcoJyVzIC0gJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLmFkZHJlc3Nfc3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
Z3NbMF0gJSBhcmdzWzE6XSkKKworICAgIGRlZiBpc19jZ2koc2VsZik6CisgICAgICAgICIiIlRl
c3Qgd2hldGhlciBzZWxmLnBhdGggY29ycmVzcG9uZHMgdG8gYSBDR0kgc2NyaXB0LgorCisgICAg
ICAgIEFkZCBleHRyYSBjaGVjayB0aGF0IHNlbGYucGF0aCBkb2Vzbid0IGNvbnRhaW5zIC4uCisg
ICAgICAgIEFsc28gY2hlY2sgaWYgdGhlIGZpbGUgaXMgYSBleGVjdXRhYmxlIGZpbGUgb3Igbm90
LgorICAgICAgICBJZiB0aGUgZmlsZSBpcyBub3QgZXhlY3V0YWJsZSwgaXQgaXMgaGFuZGxlZCBh
cyBzdGF0aWMgZmlsZSBvciBkaXIKKyAgICAgICAgcmF0aGVyIHRoYW4gYSBDR0kgc2NyaXB0Lgor
ICAgICAgICAiIiIKKworICAgICAgICBpZiBDR0lIVFRQU2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFu
ZGxlci5pc19jZ2koc2VsZik6CisgICAgICAgICAgICBpZiAnLi4nIGluIHNlbGYucGF0aDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICMgc3RyaXAgcXVlcnkgcGFy
YW1ldGVyIGZyb20gcmVxdWVzdCBwYXRoCisgICAgICAgICAgICByZXNvdXJjZV9uYW1lID0gc2Vs
Zi5wYXRoLnNwbGl0KCc/JywgMilbMF0KKyAgICAgICAgICAgICMgY29udmVydCByZXNvdXJjZV9u
YW1lIGludG8gcmVhbCBwYXRoIG5hbWUgaW4gZmlsZXN5c3RlbS4KKyAgICAgICAgICAgIHNjcmlw
dGZpbGUgPSBzZWxmLnRyYW5zbGF0ZV9wYXRoKHJlc291cmNlX25hbWUpCisgICAgICAgICAgICBp
ZiBub3Qgb3MucGF0aC5pc2ZpbGUoc2NyaXB0ZmlsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5pc19leGVjdXRhYmxlKHNjcmlwdGZpbGUp
OgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIFRydWUK
KyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIF9jb25maWd1cmVfbG9nZ2luZyhvcHRpb25z
KToKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9nZ2VyLnNldExldmVs
KGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKG9wdGlvbnMubG9nX2xldmVsLnVwcGVyKCkpKQorICAgIGlm
IG9wdGlvbnMubG9nX2ZpbGU6CisgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLmhhbmRsZXJzLlJv
dGF0aW5nRmlsZUhhbmRsZXIoCisgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2dfZmlsZSwgJ2En
LCBvcHRpb25zLmxvZ19tYXgsIG9wdGlvbnMubG9nX2NvdW50KQorICAgIGVsc2U6CisgICAgICAg
IGhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorICAgIGZvcm1hdHRlciA9IGxvZ2dp
bmcuRm9ybWF0dGVyKAorICAgICAgICAgICAgJ1slKGFzY3RpbWUpc10gWyUobGV2ZWxuYW1lKXNd
ICUobmFtZSlzOiAlKG1lc3NhZ2UpcycpCisgICAgaGFuZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0
dGVyKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKworZGVmIF9hbGlhc19oYW5k
bGVycyhkaXNwYXRjaGVyLCB3ZWJzb2NrX2hhbmRsZXJzX21hcF9maWxlKToKKyAgICAiIiJTZXQg
YWxpYXNlcyBzcGVjaWZpZWQgaW4gd2Vic29ja19oYW5kbGVyX21hcF9maWxlIGluIGRpc3BhdGNo
ZXIuCisKKyAgICBBcmdzOgorICAgICAgICBkaXNwYXRjaGVyOiBkaXNwYXRjaC5EaXNwYXRjaGVy
IGluc3RhbmNlCisgICAgICAgIHdlYnNvY2tfaGFuZGxlcl9tYXBfZmlsZTogYWxpYXMgbWFwIGZp
bGUKKyAgICAiIiIKKworICAgIGZwID0gb3Blbih3ZWJzb2NrX2hhbmRsZXJzX21hcF9maWxlKQor
ICAgIHRyeToKKyAgICAgICAgZm9yIGxpbmUgaW4gZnA6CisgICAgICAgICAgICBpZiBsaW5lWzBd
ID09ICcjJyBvciBsaW5lLmlzc3BhY2UoKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICAgICAgbSA9IHJlLm1hdGNoKCcoXFMrKVxzKyhcUyspJywgbGluZSkKKyAgICAgICAgICAg
IGlmIG5vdCBtOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnV3JvbmcgZm9ybWF0
IGluIG1hcCBmaWxlOicgKyBsaW5lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGlzcGF0Y2hlci5hZGRfcmVzb3VyY2VfcGF0aF9h
bGlhcygKKyAgICAgICAgICAgICAgICAgICAgbS5ncm91cCgxKSwgbS5ncm91cCgyKSkKKyAgICAg
ICAgICAgIGV4Y2VwdCBkaXNwYXRjaC5EaXNwYXRjaEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAg
ICAgICBsb2dnaW5nLmVycm9yKHN0cihlKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBmcC5jbG9z
ZSgpCisKKworZGVmIF9idWlsZF9vcHRpb25fcGFyc2VyKCk6CisgICAgcGFyc2VyID0gb3B0cGFy
c2UuT3B0aW9uUGFyc2VyKCkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLWNvbmZpZycsIGRl
c3Q9J2NvbmZpZ19maWxlJywgdHlwZT0nc3RyaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1BhdGggdG8gY29uZmln
dXJhdGlvbiBmaWxlLiBTZWUgdGhlIGZpbGUgY29tbWVudCAnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2F0IHRoZSB0b3Agb2YgdGhpcyBmaWxlIGZvciB0aGUgY29uZmlndXJhdGlvbiAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGUgZm9ybWF0JykpCisgICAgcGFyc2Vy
LmFkZF9vcHRpb24oJy1IJywgJy0tc2VydmVyLWhvc3QnLCAnLS1zZXJ2ZXJfaG9zdCcsCisgICAg
ICAgICAgICAgICAgICAgICAgZGVzdD0nc2VydmVyX2hvc3QnLAorICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ9JycsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2VydmVyIGhvc3Ru
YW1lIHRvIGxpc3RlbiB0bycpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1WJywgJy0tdmFsaWRh
dGlvbi1ob3N0JywgJy0tdmFsaWRhdGlvbl9ob3N0JywKKyAgICAgICAgICAgICAgICAgICAgICBk
ZXN0PSd2YWxpZGF0aW9uX2hvc3QnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9u
ZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzZXJ2ZXIgaG9zdG5hbWUgdG8gdmFsaWRh
dGUgaW4gYWJzb2x1dGUgcGF0aC4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBv
cnQnLCBkZXN0PSdwb3J0JywgdHlwZT0naW50JywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0PWNvbW1vbi5ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSdwb3J0IHRvIGxpc3RlbiB0bycpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1QJywg
Jy0tdmFsaWRhdGlvbi1wb3J0JywgJy0tdmFsaWRhdGlvbl9wb3J0JywKKyAgICAgICAgICAgICAg
ICAgICAgICBkZXN0PSd2YWxpZGF0aW9uX3BvcnQnLCB0eXBlPSdpbnQnLAorICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzZXJ2
ZXIgcG9ydCB0byB2YWxpZGF0ZSBpbiBhYnNvbHV0ZSBwYXRoLicpCisgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy13JywgJy0td2Vic29jay1oYW5kbGVycycsICctLXdlYnNvY2tfaGFuZGxlcnMnLAor
ICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3dlYnNvY2tfaGFuZGxlcnMnLAorICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9Jy4nLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1dl
YlNvY2tldCBoYW5kbGVycyByb290IGRpcmVjdG9yeS4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9u
KCctbScsICctLXdlYnNvY2staGFuZGxlcnMtbWFwLWZpbGUnLAorICAgICAgICAgICAgICAgICAg
ICAgICctLXdlYnNvY2tfaGFuZGxlcnNfbWFwX2ZpbGUnLAorICAgICAgICAgICAgICAgICAgICAg
IGRlc3Q9J3dlYnNvY2tfaGFuZGxlcnNfbWFwX2ZpbGUnLAorICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnV2ViU29ja2V0IGhh
bmRsZXJzIG1hcCBmaWxlLiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VhY2ggbGlu
ZSBjb25zaXN0cyBvZiBhbGlhc19yZXNvdXJjZV9wYXRoIGFuZCAnCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2V4aXN0aW5nX3Jlc291cmNlX3BhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMu
JykpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc2Nhbi1kaXInLCAnLS1zY2FuX2Rp
cicsIGRlc3Q9J3NjYW5fZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUs
CisgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ1dlYlNvY2tldCBoYW5kbGVycyBzY2FuIGRp
cmVjdG9yeS4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdXN0IGJlIGEgZGlyZWN0
b3J5IHVuZGVyIHdlYnNvY2tfaGFuZGxlcnMuJykpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0t
YWxsb3ctaGFuZGxlcnMtb3V0c2lkZS1yb290LWRpcicsCisgICAgICAgICAgICAgICAgICAgICAg
Jy0tYWxsb3dfaGFuZGxlcnNfb3V0c2lkZV9yb290X2RpcicsCisgICAgICAgICAgICAgICAgICAg
ICAgZGVzdD0nYWxsb3dfaGFuZGxlcnNfb3V0c2lkZV9yb290X2RpcicsCisgICAgICAgICAgICAg
ICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdTY2FucyBXZWJTb2NrZXQg
aGFuZGxlcnMgZXZlbiBpZiB0aGVpciBjYW5vbmljYWwgJworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdwYXRoIGlzIG5vdCB1bmRlciB3ZWJzb2NrX2hhbmRsZXJzLicpKQorICAgIHBhcnNl
ci5hZGRfb3B0aW9uKCctZCcsICctLWRvY3VtZW50LXJvb3QnLCAnLS1kb2N1bWVudF9yb290JywK
KyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdkb2N1bWVudF9yb290JywgZGVmYXVsdD0nLics
CisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRG9jdW1lbnQgcm9vdCBkaXJlY3RvcnkuJykK
KyAgICBwYXJzZXIuYWRkX29wdGlvbignLXgnLCAnLS1jZ2ktcGF0aHMnLCAnLS1jZ2lfcGF0aHMn
LCBkZXN0PSdjZ2lfcGF0aHMnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwK
KyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnQ0dJIHBhdGhzIHJlbGF0aXZlIHRvIGRvY3Vt
ZW50X3Jvb3QuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb21tYS1zZXBhcmF0ZWQu
IChlLmcgLXggL2NnaSwvaHRiaW4pICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmls
ZXMgdW5kZXIgZG9jdW1lbnRfcm9vdC9jZ2lfcGF0aCBhcmUgaGFuZGxlZCAnCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2FzIENHSSBwcm9ncmFtcy4gTXVzdCBiZSBleGVjdXRhYmxlLicp
KQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXRscycsIGRlc3Q9J3VzZV90bHMnLCBh
Y3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2Us
IGhlbHA9J3VzZSBUTFMgKHdzczovLyknKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctaycsICct
LXByaXZhdGUta2V5JywgJy0tcHJpdmF0ZV9rZXknLAorICAgICAgICAgICAgICAgICAgICAgIGRl
c3Q9J3ByaXZhdGVfa2V5JywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxw
PSdUTFMgcHJpdmF0ZSBrZXkgZmlsZS4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYycsICct
LWNlcnRpZmljYXRlJywgZGVzdD0nY2VydGlmaWNhdGUnLAorICAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ9JycsIGhlbHA9J1RMUyBjZXJ0aWZpY2F0ZSBmaWxlLicpCisgICAgcGFyc2VyLmFk
ZF9vcHRpb24oJy1sJywgJy0tbG9nLWZpbGUnLCAnLS1sb2dfZmlsZScsIGRlc3Q9J2xvZ19maWxl
JywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxwPSdMb2cgZmlsZS4nKQor
ICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLWxvZy1sZXZlbCcsICctLWxvZ19sZXZlbCcsIHR5cGU9
J2Nob2ljZScsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nbG9nX2xldmVsJywgZGVmYXVs
dD0nd2FybicsCisgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bJ2RlYnVnJywgJ2luZm8n
LCAnd2FybmluZycsICd3YXJuJywgJ2Vycm9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnY3JpdGljYWwnXSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdMb2cgbGV2ZWwu
JykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS10aHJlYWQtbW9uaXRvci1pbnRlcnZhbC1pbi1z
ZWMnLAorICAgICAgICAgICAgICAgICAgICAgICctLXRocmVhZF9tb25pdG9yX2ludGVydmFsX2lu
X3NlYycsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ndGhyZWFkX21vbml0b3JfaW50ZXJ2
YWxfaW5fc2VjJywKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdpbnQnLCBkZWZhdWx0PS0x
LAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdJZiBwb3NpdGl2ZSBpbnRlZ2VyIGlzIHNw
ZWNpZmllZCwgcnVuIGEgdGhyZWFkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9u
aXRvciB0byBzaG93IHRoZSBzdGF0dXMgb2Ygc2VydmVyIHRocmVhZHMgJworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdwZXJpb2RpY2FsbHkgaW4gdGhlIHNwZWNpZmllZCBpbnRldmFsIGlu
ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2Vjb25kLiBJZiBub24tcG9zaXRpdmUg
aW50ZWdlciBpcyBzcGVjaWZpZWQsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlz
YWJsZSB0aGUgdGhyZWFkIG1vbml0b3IuJykpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tbG9n
LW1heCcsICctLWxvZ19tYXgnLCBkZXN0PSdsb2dfbWF4JywgdHlwZT0naW50JywKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PV9ERUZBVUxUX0xPR19NQVhfQllURVMsCisgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0nTG9nIG1heGltdW0gYnl0ZXMnKQorICAgIHBhcnNlci5hZGRfb3B0
aW9uKCctLWxvZy1jb3VudCcsICctLWxvZ19jb3VudCcsIGRlc3Q9J2xvZ19jb3VudCcsCisgICAg
ICAgICAgICAgICAgICAgICAgdHlwZT0naW50JywgZGVmYXVsdD1fREVGQVVMVF9MT0dfQkFDS1VQ
X0NPVU5ULAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0xvZyBiYWNrdXAgY291bnQnKQor
ICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLWFsbG93LWRyYWZ0NzUnLCBkZXN0PSdhbGxvd19kcmFm
dDc1JywKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0
PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0FsbG93IGRyYWZ0IDc1IGhhbmRz
aGFrZScpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tc3RyaWN0JywgZGVzdD0nc3RyaWN0Jywg
YWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNl
LCBoZWxwPSdTdHJpY3RseSBjaGVjayBoYW5kc2hha2UgcmVxdWVzdCcpCisgICAgcGFyc2VyLmFk
ZF9vcHRpb24oJy1xJywgJy0tcXVldWUnLCBkZXN0PSdyZXF1ZXN0X3F1ZXVlX3NpemUnLCB0eXBl
PSdpbnQnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9X0RFRkFVTFRfUkVRVUVTVF9R
VUVVRV9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3JlcXVlc3QgcXVldWUgc2l6
ZScpCisKKyAgICByZXR1cm4gcGFyc2VyCisKKworY2xhc3MgVGhyZWFkTW9uaXRvcih0aHJlYWRp
bmcuVGhyZWFkKToKKyAgICBkYWVtb24gPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
aW50ZXJ2YWxfaW5fc2VjKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxm
LCBuYW1lPSdUaHJlYWRNb25pdG9yJykKKworICAgICAgICBzZWxmLl9sb2dnZXIgPSB1dGlsLmdl
dF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBzZWxmLl9pbnRlcnZhbF9pbl9zZWMgPSBp
bnRlcnZhbF9pbl9zZWMKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6
CisgICAgICAgICAgICB0aHJlYWRfbmFtZV9saXN0ID0gW10KKyAgICAgICAgICAgIGZvciB0aHJl
YWQgaW4gdGhyZWFkaW5nLmVudW1lcmF0ZSgpOgorICAgICAgICAgICAgICAgIHRocmVhZF9uYW1l
X2xpc3QuYXBwZW5kKHRocmVhZC5uYW1lKQorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8o
CisgICAgICAgICAgICAgICAgIiVkIGFjdGl2ZSB0aHJlYWRzOiAlcyIsCisgICAgICAgICAgICAg
ICAgdGhyZWFkaW5nLmFjdGl2ZV9jb3VudCgpLAorICAgICAgICAgICAgICAgICcsICcuam9pbih0
aHJlYWRfbmFtZV9saXN0KSkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5faW50ZXJ2YWxf
aW5fc2VjKQorCisKK2RlZiBfcGFyc2VfYXJnc19hbmRfY29uZmlnKGFyZ3MpOgorICAgIHBhcnNl
ciA9IF9idWlsZF9vcHRpb25fcGFyc2VyKCkKKworICAgICMgRmlyc3QsIHBhcnNlIG9wdGlvbnMg
d2l0aG91dCBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgdGVtcG9yYXJ5X29wdGlvbnMsIHRlbXBv
cmFyeV9hcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1hcmdzKQorICAgIGlmIHRlbXBvcmFy
eV9hcmdzOgorICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKAorICAgICAgICAgICAgJ1VucmVjb2du
aXplZCBwb3NpdGlvbmFsIGFyZ3VtZW50czogJXInLCB0ZW1wb3JhcnlfYXJncykKKyAgICAgICAg
c3lzLmV4aXQoMSkKKworICAgIGlmIHRlbXBvcmFyeV9vcHRpb25zLmNvbmZpZ19maWxlOgorICAg
ICAgICB0cnk6CisgICAgICAgICAgICBjb25maWdfZnAgPSBvcGVuKHRlbXBvcmFyeV9vcHRpb25z
LmNvbmZpZ19maWxlLCAncicpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAg
ICAgbG9nZ2luZy5jcml0aWNhbCgKKyAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIG9wZW4gY29u
ZmlndXJhdGlvbiBmaWxlICVyOiAlcicsCisgICAgICAgICAgICAgICAgdGVtcG9yYXJ5X29wdGlv
bnMuY29uZmlnX2ZpbGUsCisgICAgICAgICAgICAgICAgZSkKKyAgICAgICAgICAgIHN5cy5leGl0
KDEpCisKKyAgICAgICAgY29uZmlnX3BhcnNlciA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFy
c2VyKCkKKyAgICAgICAgY29uZmlnX3BhcnNlci5yZWFkZnAoY29uZmlnX2ZwKQorICAgICAgICBj
b25maWdfZnAuY2xvc2UoKQorCisgICAgICAgIGFyZ3NfZnJvbV9jb25maWcgPSBbXQorICAgICAg
ICBmb3IgbmFtZSwgdmFsdWUgaW4gY29uZmlnX3BhcnNlci5pdGVtcygncHl3ZWJzb2NrZXQnKToK
KyAgICAgICAgICAgIGFyZ3NfZnJvbV9jb25maWcuYXBwZW5kKCctLScgKyBuYW1lKQorICAgICAg
ICAgICAgYXJnc19mcm9tX2NvbmZpZy5hcHBlbmQodmFsdWUpCisgICAgICAgIGlmIGFyZ3MgaXMg
Tm9uZToKKyAgICAgICAgICAgIGFyZ3MgPSBhcmdzX2Zyb21fY29uZmlnCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBhcmdzID0gYXJnc19mcm9tX2NvbmZpZyArIGFyZ3MKKyAgICAgICAgcmV0
dXJuIHBhcnNlci5wYXJzZV9hcmdzKGFyZ3M9YXJncykKKyAgICBlbHNlOgorICAgICAgICByZXR1
cm4gdGVtcG9yYXJ5X29wdGlvbnMsIHRlbXBvcmFyeV9hcmdzCisKKworZGVmIF9tYWluKGFyZ3M9
Tm9uZSk6CisgICAgb3B0aW9ucywgYXJncyA9IF9wYXJzZV9hcmdzX2FuZF9jb25maWcoYXJncz1h
cmdzKQorCisgICAgb3MuY2hkaXIob3B0aW9ucy5kb2N1bWVudF9yb290KQorCisgICAgX2NvbmZp
Z3VyZV9sb2dnaW5nKG9wdGlvbnMpCisKKyAgICAjIFRPRE8odHlvc2hpbm8pOiBDbGVhbiB1cCBp
bml0aWFsaXphdGlvbiBvZiBDR0kgcmVsYXRlZCB2YWx1ZXMuIE1vdmUgc29tZQorICAgICMgb2Yg
Y29kZSBoZXJlIHRvIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyIGNsYXNzIGlmIGl0J3MgYmV0dGVy
LgorICAgIG9wdGlvbnMuY2dpX2RpcmVjdG9yaWVzID0gW10KKyAgICBvcHRpb25zLmlzX2V4ZWN1
dGFibGVfbWV0aG9kID0gTm9uZQorICAgIGlmIG9wdGlvbnMuY2dpX3BhdGhzOgorICAgICAgICBv
cHRpb25zLmNnaV9kaXJlY3RvcmllcyA9IG9wdGlvbnMuY2dpX3BhdGhzLnNwbGl0KCcsJykKKyAg
ICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnY3lnd2luJywgJ3dpbjMyJyk6CisgICAgICAgICAg
ICBjeWd3aW5fcGF0aCA9IE5vbmUKKyAgICAgICAgICAgICMgRm9yIFdpbjMyIFB5dGhvbiwgaXQg
aXMgZXhwZWN0ZWQgdGhhdCBDWUdXSU5fUEFUSAorICAgICAgICAgICAgIyBpcyBzZXQgdG8gYSBk
aXJlY3Rvcnkgb2YgY3lnd2luIGJpbmFyaWVzLgorICAgICAgICAgICAgIyBGb3IgZXhhbXBsZSwg
d2Vic29ja2V0X3NlcnZlci5weSBpbiBDaHJvbWl1bSBzZXRzIENZR1dJTl9QQVRIIHRvCisgICAg
ICAgICAgICAjIGZ1bGwgcGF0aCBvZiB0aGlyZF9wYXJ0eS9jeWd3aW4vYmluLgorICAgICAgICAg
ICAgaWYgJ0NZR1dJTl9QQVRIJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgICAgIGN5Z3dp
bl9wYXRoID0gb3MuZW52aXJvblsnQ1lHV0lOX1BBVEgnXQorICAgICAgICAgICAgdXRpbC53cmFw
X3BvcGVuM19mb3Jfd2luKGN5Z3dpbl9wYXRoKQorCisgICAgICAgICAgICBkZWYgX19jaGVja19z
Y3JpcHQoc2NyaXB0cGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwuZ2V0X3Njcmlw
dF9pbnRlcnAoc2NyaXB0cGF0aCwgY3lnd2luX3BhdGgpCisKKyAgICAgICAgICAgIG9wdGlvbnMu
aXNfZXhlY3V0YWJsZV9tZXRob2QgPSBfX2NoZWNrX3NjcmlwdAorCisgICAgaWYgb3B0aW9ucy51
c2VfdGxzOgorICAgICAgICBpZiBub3QgKF9IQVNfU1NMIG9yIF9IQVNfT1BFTl9TU0wpOgorICAg
ICAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgnVExTIHN1cHBvcnQgcmVxdWlyZXMgc3NsIG9yIHB5
T3BlblNTTC4nKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgbm90IG9wdGlv
bnMucHJpdmF0ZV9rZXkgb3Igbm90IG9wdGlvbnMuY2VydGlmaWNhdGU6CisgICAgICAgICAgICBs
b2dnaW5nLmNyaXRpY2FsKAorICAgICAgICAgICAgICAgICAgICAnVG8gdXNlIFRMUywgc3BlY2lm
eSBwcml2YXRlX2tleSBhbmQgY2VydGlmaWNhdGUuJykKKyAgICAgICAgICAgIHN5cy5leGl0KDEp
CisKKyAgICBpZiBub3Qgb3B0aW9ucy5zY2FuX2RpcjoKKyAgICAgICAgb3B0aW9ucy5zY2FuX2Rp
ciA9IG9wdGlvbnMud2Vic29ja19oYW5kbGVycworCisgICAgdHJ5OgorICAgICAgICBpZiBvcHRp
b25zLnRocmVhZF9tb25pdG9yX2ludGVydmFsX2luX3NlYyA+IDA6CisgICAgICAgICAgICAjIFJ1
biBhIHRocmVhZCBtb25pdG9yIHRvIHNob3cgdGhlIHN0YXR1cyBvZiBzZXJ2ZXIgdGhyZWFkcyBm
b3IKKyAgICAgICAgICAgICMgZGVidWdnaW5nLgorICAgICAgICAgICAgVGhyZWFkTW9uaXRvcihv
cHRpb25zLnRocmVhZF9tb25pdG9yX2ludGVydmFsX2luX3NlYykuc3RhcnQoKQorCisgICAgICAg
ICMgU2hhcmUgYSBEaXNwYXRjaGVyIGFtb25nIHJlcXVlc3QgaGFuZGxlcnMgdG8gc2F2ZSB0aW1l
IGZvcgorICAgICAgICAjIGluc3RhbnRpYXRpb24uICBEaXNwYXRjaGVyIGNhbiBiZSBzaGFyZWQg
YmVjYXVzZSBpdCBpcyB0aHJlYWQtc2FmZS4KKyAgICAgICAgb3B0aW9ucy5kaXNwYXRjaGVyID0g
ZGlzcGF0Y2guRGlzcGF0Y2hlcigKKyAgICAgICAgICAgIG9wdGlvbnMud2Vic29ja19oYW5kbGVy
cywKKyAgICAgICAgICAgIG9wdGlvbnMuc2Nhbl9kaXIsCisgICAgICAgICAgICBvcHRpb25zLmFs
bG93X2hhbmRsZXJzX291dHNpZGVfcm9vdF9kaXIpCisgICAgICAgIGlmIG9wdGlvbnMud2Vic29j
a19oYW5kbGVyc19tYXBfZmlsZToKKyAgICAgICAgICAgIF9hbGlhc19oYW5kbGVycyhvcHRpb25z
LmRpc3BhdGNoZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy53ZWJzb2Nr
X2hhbmRsZXJzX21hcF9maWxlKQorICAgICAgICB3YXJuaW5ncyA9IG9wdGlvbnMuZGlzcGF0Y2hl
ci5zb3VyY2Vfd2FybmluZ3MoKQorICAgICAgICBpZiB3YXJuaW5nczoKKyAgICAgICAgICAgIGZv
ciB3YXJuaW5nIGluIHdhcm5pbmdzOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygn
bW9kX3B5d2Vic29ja2V0OiAlcycgJSB3YXJuaW5nKQorCisgICAgICAgIHNlcnZlciA9IFdlYlNv
Y2tldFNlcnZlcihvcHRpb25zKQorICAgICAgICBzZXJ2ZXIuc2VydmVfZm9yZXZlcigpCisgICAg
ZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgnbW9kX3B5d2Vi
c29ja2V0OiAlcycgJSBlKQorICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKCdtb2RfcHl3ZWJzb2Nr
ZXQ6ICVzJyAlIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCisgICAgICAgIHN5cy5leGl0KDEpCisK
KworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBfbWFpbihzeXMuYXJndlsxOl0pCisK
KworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L3N0cmVhbS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvc3RyZWFtLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQw
NTFlZWUyMDllZTJkMDZjMTM0YmYzODZjYzlmM2JjODMxNzIwYTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L3N0cmVh
bS5weQpAQCAtMCwwICsxLDU2IEBACisjIENvcHlyaWdodCAyMDExLCBHb29nbGUgSW5jLgorIyBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUaGlzIGZpbGUg
ZXhwb3J0cyBwdWJsaWMgc3ltYm9scy4KKyIiIgorCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9z
dHJlYW1fYmFzZSBpbXBvcnQgQmFkT3BlcmF0aW9uRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNv
Y2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uCitm
cm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2Jhc2UgaW1wb3J0IEludmFsaWRGcmFtZUV4Y2Vw
dGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBJbnZhbGlkVVRG
OEV4Y2VwdGlvbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVhbV9iYXNlIGltcG9ydCBVbnN1
cHBvcnRlZEZyYW1lRXhjZXB0aW9uCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2hpeGll
NzUgaW1wb3J0IFN0cmVhbUhpeGllNzUKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faHli
aSBpbXBvcnQgRnJhbWUKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9zdHJlYW1faHliaSBpbXBvcnQg
U3RyZWFtCitmcm9tIG1vZF9weXdlYnNvY2tldC5fc3RyZWFtX2h5YmkgaW1wb3J0IFN0cmVhbU9w
dGlvbnMKKworIyBUaGVzZSBtZXRob2RzIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IFdlYlNv
Y2tldCBjbGllbnQgZGV2ZWxvcGVycyB0byBoYXZlCisjIHRoZWlyIGltcGxlbWVudGF0aW9ucyBy
ZWNlaXZlIGJyb2tlbiBkYXRhIGluIHRlc3RzLgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0cmVh
bV9oeWJpIGltcG9ydCBjcmVhdGVfY2xvc2VfZnJhbWUKK2Zyb20gbW9kX3B5d2Vic29ja2V0Ll9z
dHJlYW1faHliaSBpbXBvcnQgY3JlYXRlX2hlYWRlcgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQuX3N0
cmVhbV9oeWJpIGltcG9ydCBjcmVhdGVfbGVuZ3RoX2hlYWRlcgorZnJvbSBtb2RfcHl3ZWJzb2Nr
ZXQuX3N0cmVhbV9oeWJpIGltcG9ydCBjcmVhdGVfcGluZ19mcmFtZQorZnJvbSBtb2RfcHl3ZWJz
b2NrZXQuX3N0cmVhbV9oeWJpIGltcG9ydCBjcmVhdGVfcG9uZ19mcmFtZQorZnJvbSBtb2RfcHl3
ZWJzb2NrZXQuX3N0cmVhbV9oeWJpIGltcG9ydCBjcmVhdGVfYmluYXJ5X2ZyYW1lCitmcm9tIG1v
ZF9weXdlYnNvY2tldC5fc3RyZWFtX2h5YmkgaW1wb3J0IGNyZWF0ZV90ZXh0X2ZyYW1lCisKKwor
IyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L3V0aWwucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvbW9kX3B5d2Vic29ja2V0L3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWEwYWI1ZGU2
OTdhY2IxMzc3ZjllYjBkYWY4MzIxM2NkOTVkMmJhNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9tb2RfcHl3ZWJzb2NrZXQvdXRpbC5weQpAQCAt
MCwwICsxLDQ4OSBAQAorIyBDb3B5cmlnaHQgMjAxMSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisj
IGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiV2ViU29ja2V0IHV0aWxpdGll
cy4KKyIiIgorCisKK2ltcG9ydCBhcnJheQoraW1wb3J0IGVycm5vCisKKyMgSW1wb3J0IGhhc2gg
Y2xhc3NlcyBmcm9tIGEgbW9kdWxlIGF2YWlsYWJsZSBhbmQgcmVjb21tZW5kZWQgZm9yIGVhY2gg
UHl0aG9uCisjIHZlcnNpb24gYW5kIHJlLWV4cG9ydCB0aG9zZSBzeW1ib2wuIFVzZSBzaGEgYW5k
IG1kNSBtb2R1bGUgaW4gUHl0aG9uIDIuNCwgYW5kCisjIGhhc2hsaWIgbW9kdWxlIGluIFB5dGhv
biAyLjYuCit0cnk6CisgICAgaW1wb3J0IGhhc2hsaWIKKyAgICBtZDVfaGFzaCA9IGhhc2hsaWIu
bWQ1CisgICAgc2hhMV9oYXNoID0gaGFzaGxpYi5zaGExCitleGNlcHQgSW1wb3J0RXJyb3I6Cisg
ICAgaW1wb3J0IG1kNQorICAgIGltcG9ydCBzaGEKKyAgICBtZDVfaGFzaCA9IG1kNS5tZDUKKyAg
ICBzaGExX2hhc2ggPSBzaGEuc2hhCisKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IGxvZ2dpbmcK
K2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgdHJhY2ViYWNrCitp
bXBvcnQgemxpYgorCisKK2RlZiBnZXRfc3RhY2tfdHJhY2UoKToKKyAgICAiIiJHZXQgdGhlIGN1
cnJlbnQgc3RhY2sgdHJhY2UgYXMgc3RyaW5nLgorCisgICAgVGhpcyBpcyBuZWVkZWQgdG8gc3Vw
cG9ydCBQeXRob24gMi4zLgorICAgIFRPRE86IFJlbW92ZSB0aGlzIHdoZW4gd2Ugb25seSBzdXBw
b3J0IFB5dGhvbiAyLjQgYW5kIGFib3ZlLgorICAgICAgICAgIFVzZSB0cmFjZWJhY2suZm9ybWF0
X2V4YyBpbnN0ZWFkLgorICAgICIiIgorCisgICAgb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQor
ICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1vdXQpCisgICAgcmV0dXJuIG91dC5nZXR2YWx1
ZSgpCisKKworZGVmIHByZXBlbmRfbWVzc2FnZV90b19leGNlcHRpb24obWVzc2FnZSwgZXhjKToK
KyAgICAiIiJQcmVwZW5kIG1lc3NhZ2UgdG8gdGhlIGV4Y2VwdGlvbi4iIiIKKworICAgIGV4Yy5h
cmdzID0gKG1lc3NhZ2UgKyBzdHIoZXhjKSwpCisgICAgcmV0dXJuCisKKworZGVmIF9fdHJhbnNs
YXRlX2ludGVycChpbnRlcnAsIGN5Z3dpbl9wYXRoKToKKyAgICAiIiJUcmFuc2xhdGUgaW50ZXJw
IHByb2dyYW0gcGF0aCBmb3IgV2luMzIgcHl0aG9uIHRvIHJ1biBjeWd3aW4gcHJvZ3JhbQorICAg
IChlLmcuIHBlcmwpLiAgTm90ZSB0aGF0IGl0IGRvZXNuJ3Qgc3VwcG9ydCBwYXRoIHRoYXQgY29u
dGFpbnMgc3BhY2UsCisgICAgd2hpY2ggaXMgdHlwaWNhbGx5IHRydWUgZm9yIFVuaXgsIHdoZXJl
ICMhLXNjcmlwdCBpcyB3cml0dGVuLgorICAgIEZvciBXaW4zMiBweXRob24sIGN5Z3dpbl9wYXRo
IGlzIGEgZGlyZWN0b3J5IG9mIGN5Z3dpbiBiaW5hcmllcy4KKworICAgIEFyZ3M6CisgICAgICBp
bnRlcnA6IGludGVycCBjb21tYW5kIGxpbmUKKyAgICAgIGN5Z3dpbl9wYXRoOiBkaXJlY3Rvcnkg
bmFtZSBvZiBjeWd3aW4gYmluYXJ5LCBvciBOb25lCisgICAgUmV0dXJuczoKKyAgICAgIHRyYW5z
bGF0ZWQgaW50ZXJwIGNvbW1hbmQgbGluZS4KKyAgICAiIiIKKyAgICBpZiBub3QgY3lnd2luX3Bh
dGg6CisgICAgICAgIHJldHVybiBpbnRlcnAKKyAgICBtID0gcmUubWF0Y2goJ15bXiBdKi8oW14g
XSspKCAuKik/JywgaW50ZXJwKQorICAgIGlmIG06CisgICAgICAgIGNtZCA9IG9zLnBhdGguam9p
bihjeWd3aW5fcGF0aCwgbS5ncm91cCgxKSkKKyAgICAgICAgcmV0dXJuIGNtZCArIG0uZ3JvdXAo
MikKKyAgICByZXR1cm4gaW50ZXJwCisKKworZGVmIGdldF9zY3JpcHRfaW50ZXJwKHNjcmlwdF9w
YXRoLCBjeWd3aW5fcGF0aD1Ob25lKToKKyAgICAiIiJHZXRzICMhLWludGVycHJldGVyIGNvbW1h
bmQgbGluZSBmcm9tIHRoZSBzY3JpcHQuCisKKyAgICBJdCBhbHNvIGZpeGVzIGNvbW1hbmQgcGF0
aC4gIFdoZW4gQ3lnd2luIFB5dGhvbiBpcyB1c2VkLCBlLmcuIGluIFdlYktpdCwKKyAgICBpdCBj
b3VsZCBydW4gIi91c3IvYmluL3BlcmwgLXdUIGhlbGxvLnBsIi4KKyAgICBXaGVuIFdpbjMyIFB5
dGhvbiBpcyB1c2VkLCBlLmcuIGluIENocm9taXVtLCBpdCBjb3VsZG4ndC4gIFNvLCBmaXgKKyAg
ICAiL3Vzci9iaW4vcGVybCIgdG8gIjxjeWd3aW5fcGF0aD5ccGVybC5leGUiLgorCisgICAgQXJn
czoKKyAgICAgIHNjcmlwdF9wYXRoOiBwYXRobmFtZSBvZiB0aGUgc2NyaXB0CisgICAgICBjeWd3
aW5fcGF0aDogZGlyZWN0b3J5IG5hbWUgb2YgY3lnd2luIGJpbmFyeSwgb3IgTm9uZQorICAgIFJl
dHVybnM6CisgICAgICAjIS1pbnRlcnByZXRlciBjb21tYW5kIGxpbmUsIG9yIE5vbmUgaWYgaXQg
aXMgbm90ICMhLXNjcmlwdC4KKyAgICAiIiIKKyAgICBmcCA9IG9wZW4oc2NyaXB0X3BhdGgpCisg
ICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKKyAgICBmcC5jbG9zZSgpCisgICAgbSA9IHJlLm1hdGNo
KCdeIyEoLiopJywgbGluZSkKKyAgICBpZiBtOgorICAgICAgICByZXR1cm4gX190cmFuc2xhdGVf
aW50ZXJwKG0uZ3JvdXAoMSksIGN5Z3dpbl9wYXRoKQorICAgIHJldHVybiBOb25lCisKKworZGVm
IHdyYXBfcG9wZW4zX2Zvcl93aW4oY3lnd2luX3BhdGgpOgorICAgICIiIldyYXAgcG9wZW4zIHRv
IHN1cHBvcnQgIyEtc2NyaXB0IG9uIFdpbmRvd3MuCisKKyAgICBBcmdzOgorICAgICAgY3lnd2lu
X3BhdGg6ICBwYXRoIGZvciBjeWd3aW4gYmluYXJ5IGlmIGNvbW1hbmQgcGF0aCBpcyBuZWVkZWQg
dG8gYmUKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC4gIE5vbmUgaWYgbm8gdHJhbnNs
YXRpb24gcmVxdWlyZWQuCisgICAgIiIiCisKKyAgICBfX29yaWdfcG9wZW4zID0gb3MucG9wZW4z
CisKKyAgICBkZWYgX193cmFwX3BvcGVuMyhjbWQsIG1vZGU9J3QnLCBidWZzaXplPS0xKToKKyAg
ICAgICAgY21kbGluZSA9IGNtZC5zcGxpdCgnICcpCisgICAgICAgIGludGVycCA9IGdldF9zY3Jp
cHRfaW50ZXJwKGNtZGxpbmVbMF0sIGN5Z3dpbl9wYXRoKQorICAgICAgICBpZiBpbnRlcnA6Cisg
ICAgICAgICAgICBjbWQgPSBpbnRlcnAgKyAnICcgKyBjbWQKKyAgICAgICAgcmV0dXJuIF9fb3Jp
Z19wb3BlbjMoY21kLCBtb2RlLCBidWZzaXplKQorCisgICAgb3MucG9wZW4zID0gX193cmFwX3Bv
cGVuMworCisKK2RlZiBoZXhpZnkocyk6CisgICAgcmV0dXJuICcgJy5qb2luKG1hcChsYW1iZGEg
eDogJyUwMngnICUgb3JkKHgpLCBzKSkKKworCitkZWYgZ2V0X2NsYXNzX2xvZ2dlcihvKToKKyAg
ICByZXR1cm4gbG9nZ2luZy5nZXRMb2dnZXIoCisgICAgICAgICclcy4lcycgJSAoby5fX2NsYXNz
X18uX19tb2R1bGVfXywgby5fX2NsYXNzX18uX19uYW1lX18pKQorCisKK2NsYXNzIE5vb3BNYXNr
ZXIob2JqZWN0KToKKyAgICAiIiJBIG1hc2tpbmcgb2JqZWN0IHRoYXQgaGFzIHRoZSBzYW1lIGlu
dGVyZmFjZSBhcyBSZXBlYXRlZFhvck1hc2tlciBidXQKKyAgICBqdXN0IHJldHVybnMgdGhlIHN0
cmluZyBwYXNzZWQgaW4gd2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZS4KKyAgICAiIiIKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIG1hc2soc2VsZiwg
cyk6CisgICAgICAgIHJldHVybiBzCisKKworY2xhc3MgUmVwZWF0ZWRYb3JNYXNrZXIob2JqZWN0
KToKKyAgICAiIiJBIG1hc2tpbmcgb2JqZWN0IHRoYXQgYXBwbGllcyBYT1Igb24gdGhlIHN0cmlu
ZyBnaXZlbiB0byBtYXNrIG1ldGhvZAorICAgIHdpdGggdGhlIG1hc2tpbmcgYnl0ZXMgZ2l2ZW4g
dG8gdGhlIGNvbnN0cnVjdG9yIHJlcGVhdGVkbHkuIFRoaXMgb2JqZWN0CisgICAgcmVtZW1iZXJz
IHRoZSBwb3NpdGlvbiBpbiB0aGUgbWFza2luZyBieXRlcyB0aGUgbGFzdCBtYXNrIG1ldGhvZCBj
YWxsCisgICAgZW5kZWQgYW5kIHJlc3VtZXMgZnJvbSB0aGF0IHBvaW50IG9uIHRoZSBuZXh0IG1h
c2sgbWV0aG9kIGNhbGwuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzayk6
CisgICAgICAgIHNlbGYuX21hc2sgPSBtYXAob3JkLCBtYXNrKQorICAgICAgICBzZWxmLl9tYXNr
X3NpemUgPSBsZW4oc2VsZi5fbWFzaykKKyAgICAgICAgc2VsZi5fY291bnQgPSAwCisKKyAgICBk
ZWYgbWFzayhzZWxmLCBzKToKKyAgICAgICAgcmVzdWx0ID0gYXJyYXkuYXJyYXkoJ0InKQorICAg
ICAgICByZXN1bHQuZnJvbXN0cmluZyhzKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHJl
c3VsdCkpOgorICAgICAgICAgICAgcmVzdWx0W2ldIF49IHNlbGYuX21hc2tbc2VsZi5fY291bnRd
CisgICAgICAgICAgICBzZWxmLl9jb3VudCA9IChzZWxmLl9jb3VudCArIDEpICUgc2VsZi5fbWFz
a19zaXplCisgICAgICAgIHJldHVybiByZXN1bHQudG9zdHJpbmcoKQorCisKK2NsYXNzIERlZmxh
dGVSZXF1ZXN0KG9iamVjdCk6CisgICAgIiIiQSB3cmFwcGVyIGNsYXNzIGZvciByZXF1ZXN0IG9i
amVjdCB0byBpbnRlcmNlcHQgc2VuZCBhbmQgcmVjdiB0byBwZXJmb3JtCisgICAgZGVmbGF0ZSBj
b21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiB0cmFuc3BhcmVudGx5LgorICAgICIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICBzZWxmLl9yZXF1ZXN0ID0g
cmVxdWVzdAorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBEZWZsYXRlQ29ubmVjdGlvbihyZXF1
ZXN0LmNvbm5lY3Rpb24pCisKKyAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKToK
KyAgICAgICAgaWYgbmFtZSBpbiAoJ19yZXF1ZXN0JywgJ2Nvbm5lY3Rpb24nKToKKyAgICAgICAg
ICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKQorICAgICAgICBy
ZXR1cm4gc2VsZi5fcmVxdWVzdC5fX2dldGF0dHJpYnV0ZV9fKG5hbWUpCisKKyAgICBkZWYgX19z
ZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICBpZiBuYW1lIGluICgnX3JlcXVl
c3QnLCAnY29ubmVjdGlvbicpOgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX3NldGF0dHJf
XyhzZWxmLCBuYW1lLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcXVlc3QuX19zZXRh
dHRyX18obmFtZSwgdmFsdWUpCisKKworIyBCeSBtYWtpbmcgd2JpdHMgb3B0aW9uIG5lZ2F0aXZl
LCB3ZSBjYW4gc3VwcHJlc3MgQ01GL0ZMRyAoMiBvY3RldCkgYW5kCisjIEFETEVSMzIgKDQgb2N0
ZXQpIGZpZWxkcyBvZiB6bGliIHNvIHRoYXQgd2UgY2FuIHVzZSB6bGliIG1vZHVsZSBqdXN0IGFz
CisjIGRlZmxhdGUgbGlicmFyeS4gRElDVElEIHdvbid0IGJlIGFkZGVkIGFzIGZhciBhcyB3ZSBk
b24ndCBzZXQgZGljdGlvbmFyeS4KKyMgTFo3NyB3aW5kb3cgb2YgMzJLIHdpbGwgYmUgdXNlZCBm
b3IgYm90aCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbi4KKyMgRm9yIGRlY29tcHJlc3Np
b24sIHdlIGNhbiBqdXN0IHVzZSAzMksgdG8gY292ZXIgYW55IHdpbmRvd3Mgc2l6ZS4gRm9yCisj
IGNvbXByZXNzaW9uLCB3ZSB1c2UgMzJLIHNvIHJlY2VpdmVycyBtdXN0IHVzZSAzMksuCisjCisj
IENvbXByZXNzaW9uIGxldmVsIGlzIFpfREVGQVVMVF9DT01QUkVTU0lPTi4gV2UgZG9uJ3QgaGF2
ZSB0byBtYXRjaCBsZXZlbAorIyB0byBkZWNvZGUuCisjCisjIFNlZSB6Y29uZi5oLCBkZWZsYXRl
LmNjLCBpbmZsYXRlLmNjIG9mIHpsaWIgbGlicmFyeSwgYW5kIHpsaWJtb2R1bGUuYyBvZgorIyBQ
eXRob24uIFNlZSBhbHNvIFJGQzE5NTAgKFpMSUIgMy4zKS4KKworCitjbGFzcyBfRGVmbGF0ZXIo
b2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dfYml0cyk6CisgICAgICAg
IHNlbGYuX2xvZ2dlciA9IGdldF9jbGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBzZWxmLl9j
b21wcmVzcyA9IHpsaWIuY29tcHJlc3NvYmooCisgICAgICAgICAgICB6bGliLlpfREVGQVVMVF9D
T01QUkVTU0lPTiwgemxpYi5ERUZMQVRFRCwgLXdpbmRvd19iaXRzKQorCisgICAgZGVmIGNvbXBy
ZXNzX2FuZF9mbHVzaChzZWxmLCBieXRlcyk6CisgICAgICAgIGNvbXByZXNzZWRfYnl0ZXMgPSBz
ZWxmLl9jb21wcmVzcy5jb21wcmVzcyhieXRlcykKKyAgICAgICAgY29tcHJlc3NlZF9ieXRlcyAr
PSBzZWxmLl9jb21wcmVzcy5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAgc2VsZi5f
bG9nZ2VyLmRlYnVnKCdDb21wcmVzcyBpbnB1dCAlcicsIGJ5dGVzKQorICAgICAgICBzZWxmLl9s
b2dnZXIuZGVidWcoJ0NvbXByZXNzIHJlc3VsdCAlcicsIGNvbXByZXNzZWRfYnl0ZXMpCisgICAg
ICAgIHJldHVybiBjb21wcmVzc2VkX2J5dGVzCisKKworY2xhc3MgX0luZmxhdGVyKG9iamVjdCk6
CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ2dlciA9IGdldF9j
bGFzc19sb2dnZXIoc2VsZikKKworICAgICAgICBzZWxmLl91bmNvbnN1bWVkID0gJycKKworICAg
ICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIHNpemUpOgorICAg
ICAgICBpZiBub3QgKHNpemUgPT0gLTEgb3Igc2l6ZSA+IDApOgorICAgICAgICAgICAgcmFpc2Ug
RXhjZXB0aW9uKCdzaXplIG11c3QgYmUgLTEgb3IgcG9zaXRpdmUnKQorCisgICAgICAgIGRhdGEg
PSAnJworCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiBzaXplID09IC0xOgor
ICAgICAgICAgICAgICAgIGRhdGEgKz0gc2VsZi5fZGVjb21wcmVzcy5kZWNvbXByZXNzKHNlbGYu
X3VuY29uc3VtZWQpCisgICAgICAgICAgICAgICAgIyBTZWUgUHl0aG9uIGJ1ZyBodHRwOi8vYnVn
cy5weXRob24ub3JnL2lzc3VlMTIwNTAgdG8KKyAgICAgICAgICAgICAgICAjIHVuZGVyc3RhbmQg
d2h5IHRoZSBzYW1lIGNvZGUgY2Fubm90IGJlIHVzZWQgZm9yIHVwZGF0aW5nCisgICAgICAgICAg
ICAgICAgIyBzZWxmLl91bmNvbnN1bWVkIGZvciBoZXJlIGFuZCBlbHNlIGJsb2NrLgorICAgICAg
ICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWQgPSAnJworICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBkYXRhICs9IHNlbGYuX2RlY29tcHJlc3MuZGVjb21wcmVzcygKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fdW5jb25zdW1lZCwgc2l6ZSAtIGxlbihkYXRhKSkKKyAgICAgICAg
ICAgICAgICBzZWxmLl91bmNvbnN1bWVkID0gc2VsZi5fZGVjb21wcmVzcy51bmNvbnN1bWVkX3Rh
aWwKKyAgICAgICAgICAgIGlmIHNlbGYuX2RlY29tcHJlc3MudW51c2VkX2RhdGE6CisgICAgICAg
ICAgICAgICAgIyBFbmNvdW50ZXJlZCBhIGxhc3QgYmxvY2sgKGkuZS4gYSBibG9jayB3aXRoIEJG
SU5BTCA9IDEpIGFuZAorICAgICAgICAgICAgICAgICMgZm91bmQgYSBuZXcgc3RyZWFtICh1bnVz
ZWRfZGF0YSkuIFdlIGNhbm5vdCB1c2UgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAjIHpsaWIu
RGVjb21wcmVzcyBvYmplY3QgZm9yIHRoZSBuZXcgc3RyZWFtLiBDcmVhdGUgYSBuZXcKKyAgICAg
ICAgICAgICAgICAjIERlY29tcHJlc3Mgb2JqZWN0IHRvIGRlY29tcHJlc3MgdGhlIG5ldyBvbmUu
CisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgSXQncyBmaW5lIHRvIGlnbm9y
ZSB1bmNvbnN1bWVkX3RhaWwgaWYgdW51c2VkX2RhdGEgaXMgbm90CisgICAgICAgICAgICAgICAg
IyBlbXB0eS4KKyAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkID0gc2VsZi5fZGVjb21w
cmVzcy51bnVzZWRfZGF0YQorICAgICAgICAgICAgICAgIHNlbGYucmVzZXQoKQorICAgICAgICAg
ICAgICAgIGlmIHNpemUgPj0gMCBhbmQgbGVuKGRhdGEpID09IHNpemU6CisgICAgICAgICAgICAg
ICAgICAgICMgZGF0YSBpcyBmaWxsZWQuIERvbid0IGNhbGwgZGVjb21wcmVzcyBhZ2Fpbi4KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgICAgICAjIFJlLWludm9rZSBEZWNvbXByZXNzLmRlY29tcHJlc3MgdG8gdHJ5IHRvIGRl
Y29tcHJlc3MgYWxsCisgICAgICAgICAgICAgICAgICAgICMgYXZhaWxhYmxlIGJ5dGVzIGJlZm9y
ZSBpbnZva2luZyByZWFkIHdoaWNoIGJsb2NrcyB1bnRpbAorICAgICAgICAgICAgICAgICAgICAj
IGFueSBuZXcgYnl0ZSBpcyBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSGVyZSwgc2luY2UgdW51c2Vk
X2RhdGEgaXMgZW1wdHksIGV2ZW4gaWYgdW5jb25zdW1lZF90YWlsIGlzCisgICAgICAgICAgICAg
ICAgIyBub3QgZW1wdHksIGJ5dGVzIG9mIHJlcXVlc3RlZCBsZW5ndGggYXJlIGFscmVhZHkgaW4g
ZGF0YS4gV2UKKyAgICAgICAgICAgICAgICAjIGRvbid0IGhhdmUgdG8gImNvbnRpbnVlIiBoZXJl
LgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAg
IHNlbGYuX2xvZ2dlci5kZWJ1ZygnRGVjb21wcmVzc2VkICVyJywgZGF0YSkKKyAgICAgICAgcmV0
dXJuIGRhdGEKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX2xv
Z2dlci5kZWJ1ZygnQXBwZW5kZWQgJXInLCBkYXRhKQorICAgICAgICBzZWxmLl91bmNvbnN1bWVk
ICs9IGRhdGEKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nZ2VyLmRl
YnVnKCdSZXNldCcpCisgICAgICAgIHNlbGYuX2RlY29tcHJlc3MgPSB6bGliLmRlY29tcHJlc3Nv
YmooLXpsaWIuTUFYX1dCSVRTKQorCisKKyMgQ29tcHJlc3Nlcy9kZWNvbXByZXNzZXMgZ2l2ZW4g
b2N0ZXRzIHVzaW5nIHRoZSBtZXRob2QgaW50cm9kdWNlZCBpbiBSRkMxOTc5LgorCisKK2NsYXNz
IF9SRkMxOTc5RGVmbGF0ZXIob2JqZWN0KToKKyAgICAiIiJBIGNvbXByZXNzb3IgY2xhc3MgdGhh
dCBhcHBsaWVzIERFRkxBVEUgdG8gZ2l2ZW4gYnl0ZSBzZXF1ZW5jZSBhbmQKKyAgICBmbHVzaGVz
IHVzaW5nIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGluIHRoZSBSRkMxOTc5IHNlY3Rpb24gMi4x
LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd19iaXRzLCBub19jb250
ZXh0X3Rha2VvdmVyKToKKyAgICAgICAgc2VsZi5fZGVmbGF0ZXIgPSBOb25lCisgICAgICAgIGlm
IHdpbmRvd19iaXRzIGlzIE5vbmU6CisgICAgICAgICAgICB3aW5kb3dfYml0cyA9IHpsaWIuTUFY
X1dCSVRTCisgICAgICAgIHNlbGYuX3dpbmRvd19iaXRzID0gd2luZG93X2JpdHMKKyAgICAgICAg
c2VsZi5fbm9fY29udGV4dF90YWtlb3ZlciA9IG5vX2NvbnRleHRfdGFrZW92ZXIKKworICAgIGRl
ZiBmaWx0ZXIoc2VsZiwgYnl0ZXMpOgorICAgICAgICBpZiBzZWxmLl9kZWZsYXRlciBpcyBOb25l
IG9yIHNlbGYuX25vX2NvbnRleHRfdGFrZW92ZXI6CisgICAgICAgICAgICBzZWxmLl9kZWZsYXRl
ciA9IF9EZWZsYXRlcihzZWxmLl93aW5kb3dfYml0cykKKworICAgICAgICAjIFN0cmlwIGxhc3Qg
NCBvY3RldHMgd2hpY2ggaXMgTEVOIGFuZCBOTEVOIGZpZWxkIG9mIGEgbm9uLWNvbXByZXNzZWQK
KyAgICAgICAgIyBibG9jayBhZGRlZCBmb3IgWl9TWU5DX0ZMVVNILgorICAgICAgICByZXR1cm4g
c2VsZi5fZGVmbGF0ZXIuY29tcHJlc3NfYW5kX2ZsdXNoKGJ5dGVzKVs6LTRdCisKKworY2xhc3Mg
X1JGQzE5NzlJbmZsYXRlcihvYmplY3QpOgorICAgICIiIkEgZGVjb21wcmVzc29yIGNsYXNzIGZv
ciBieXRlIHNlcXVlbmNlIGNvbXByZXNzZWQgYW5kIGZsdXNoZWQgZm9sbG93aW5nCisgICAgdGhl
IGFsZ29yaXRobSBkZXNjcmliZWQgaW4gdGhlIFJGQzE5Nzkgc2VjdGlvbiAyLjEuCisgICAgIiIi
CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2luZmxhdGVyID0gX0lu
ZmxhdGVyKCkKKworICAgIGRlZiBmaWx0ZXIoc2VsZiwgYnl0ZXMpOgorICAgICAgICAjIFJlc3Rv
cmUgc3RyaXBwZWQgTEVOIGFuZCBOTEVOIGZpZWxkIG9mIGEgbm9uLWNvbXByZXNzZWQgYmxvY2sg
YWRkZWQKKyAgICAgICAgIyBmb3IgWl9TWU5DX0ZMVVNILgorICAgICAgICBzZWxmLl9pbmZsYXRl
ci5hcHBlbmQoYnl0ZXMgKyAnXHgwMFx4MDBceGZmXHhmZicpCisgICAgICAgIHJldHVybiBzZWxm
Ll9pbmZsYXRlci5kZWNvbXByZXNzKC0xKQorCisKK2NsYXNzIERlZmxhdGVTb2NrZXQob2JqZWN0
KToKKyAgICAiIiJBIHdyYXBwZXIgY2xhc3MgZm9yIHNvY2tldCBvYmplY3QgdG8gaW50ZXJjZXB0
IHNlbmQgYW5kIHJlY3YgdG8gcGVyZm9ybQorICAgIGRlZmxhdGUgY29tcHJlc3Npb24gYW5kIGRl
Y29tcHJlc3Npb24gdHJhbnNwYXJlbnRseS4KKyAgICAiIiIKKworICAgICMgU2l6ZSBvZiB0aGUg
YnVmZmVyIHBhc3NlZCB0byByZWN2IHRvIHJlY2VpdmUgY29tcHJlc3NlZCBkYXRhLgorICAgIF9S
RUNWX1NJWkUgPSA0MDk2CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc29ja2V0KToKKyAgICAg
ICAgc2VsZi5fc29ja2V0ID0gc29ja2V0CisKKyAgICAgICAgc2VsZi5fbG9nZ2VyID0gZ2V0X2Ns
YXNzX2xvZ2dlcihzZWxmKQorCisgICAgICAgIHNlbGYuX2RlZmxhdGVyID0gX0RlZmxhdGVyKHps
aWIuTUFYX1dCSVRTKQorICAgICAgICBzZWxmLl9pbmZsYXRlciA9IF9JbmZsYXRlcigpCisKKyAg
ICBkZWYgcmVjdihzZWxmLCBzaXplKToKKyAgICAgICAgIiIiUmVjZWl2ZXMgZGF0YSBmcm9tIHRo
ZSBzb2NrZXQgc3BlY2lmaWVkIG9uIHRoZSBjb25zdHJ1Y3Rpb24gdXAKKyAgICAgICAgdG8gdGhl
IHNwZWNpZmllZCBzaXplLiBPbmNlIGFueSBkYXRhIGlzIGF2YWlsYWJsZSwgcmV0dXJucyBpdCBl
dmVuCisgICAgICAgIGlmIGl0J3Mgc21hbGxlciB0aGFuIHRoZSBzcGVjaWZpZWQgc2l6ZS4KKyAg
ICAgICAgIiIiCisKKyAgICAgICAgIyBUT0RPKHR5b3NoaW5vKTogQWxsb3cgY2FsbCB3aXRoIHNp
emU9MC4gSXQgc2hvdWxkIGJsb2NrIHVudGlsIGFueQorICAgICAgICAjIGRlY29tcHJlc3NlZCBk
YXRhIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgc2l6ZSA8PSAwOgorICAgICAgICAgICAgcmFp
c2UgRXhjZXB0aW9uKCdOb24tcG9zaXRpdmUgc2l6ZSBwYXNzZWQnKQorICAgICAgICB3aGlsZSBU
cnVlOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2luZmxhdGVyLmRlY29tcHJlc3Moc2l6ZSkK
KyAgICAgICAgICAgIGlmIGxlbihkYXRhKSAhPSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBk
YXRhCisKKyAgICAgICAgICAgIHJlYWRfZGF0YSA9IHNlbGYuX3NvY2tldC5yZWN2KERlZmxhdGVT
b2NrZXQuX1JFQ1ZfU0laRSkKKyAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICcnCisgICAgICAgICAgICBzZWxmLl9pbmZsYXRlci5hcHBlbmQocmVh
ZF9kYXRhKQorCisgICAgZGVmIHNlbmRhbGwoc2VsZiwgYnl0ZXMpOgorICAgICAgICBzZWxmLnNl
bmQoYnl0ZXMpCisKKyAgICBkZWYgc2VuZChzZWxmLCBieXRlcyk6CisgICAgICAgIHNlbGYuX3Nv
Y2tldC5zZW5kYWxsKHNlbGYuX2RlZmxhdGVyLmNvbXByZXNzX2FuZF9mbHVzaChieXRlcykpCisg
ICAgICAgIHJldHVybiBsZW4oYnl0ZXMpCisKKworY2xhc3MgRGVmbGF0ZUNvbm5lY3Rpb24ob2Jq
ZWN0KToKKyAgICAiIiJBIHdyYXBwZXIgY2xhc3MgZm9yIHJlcXVlc3Qgb2JqZWN0IHRvIGludGVy
Y2VwdCB3cml0ZSBhbmQgcmVhZCB0bworICAgIHBlcmZvcm0gZGVmbGF0ZSBjb21wcmVzc2lvbiBh
bmQgZGVjb21wcmVzc2lvbiB0cmFuc3BhcmVudGx5LgorICAgICIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGNvbm5lY3Rpb24pOgorICAgICAgICBzZWxmLl9jb25uZWN0aW9uID0gY29ubmVj
dGlvbgorCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IGdldF9jbGFzc19sb2dnZXIoc2VsZikKKwor
ICAgICAgICBzZWxmLl9kZWZsYXRlciA9IF9EZWZsYXRlcih6bGliLk1BWF9XQklUUykKKyAgICAg
ICAgc2VsZi5faW5mbGF0ZXIgPSBfSW5mbGF0ZXIoKQorCisgICAgZGVmIGdldF9yZW1vdGVfYWRk
cihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rpb24ucmVtb3RlX2FkZHIKKyAg
ICByZW1vdGVfYWRkciA9IHByb3BlcnR5KGdldF9yZW1vdGVfYWRkcikKKworICAgIGRlZiBwdXRf
Ynl0ZXMoc2VsZiwgYnl0ZXMpOgorICAgICAgICBzZWxmLndyaXRlKGJ5dGVzKQorCisgICAgZGVm
IHJlYWQoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgICIiIlJlYWRzIGF0IG1vc3Qgc2l6ZSBieXRl
cy4gQmxvY2tzIHVudGlsIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGJ5dGUKKyAgICAgICAgYXZhaWxh
YmxlLgorICAgICAgICAiIiIKKworICAgICAgICAjIFRPRE8odHlvc2hpbm8pOiBBbGxvdyBjYWxs
IHdpdGggc2l6ZT0wLgorICAgICAgICBpZiBub3QgKHNpemUgPT0gLTEgb3Igc2l6ZSA+IDApOgor
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdzaXplIG11c3QgYmUgLTEgb3IgcG9zaXRpdmUn
KQorCisgICAgICAgIGRhdGEgPSAnJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAg
aWYgc2l6ZSA9PSAtMToKKyAgICAgICAgICAgICAgICBkYXRhICs9IHNlbGYuX2luZmxhdGVyLmRl
Y29tcHJlc3MoLTEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGEgKz0g
c2VsZi5faW5mbGF0ZXIuZGVjb21wcmVzcyhzaXplIC0gbGVuKGRhdGEpKQorCisgICAgICAgICAg
ICBpZiBzaXplID49IDAgYW5kIGxlbihkYXRhKSAhPSAwOgorICAgICAgICAgICAgICAgIGJyZWFr
CisKKyAgICAgICAgICAgICMgVE9ETyh0eW9zaGlubyk6IE1ha2UgdGhpcyByZWFkIGVmZmljaWVu
dCBieSBzb21lIHdvcmthcm91bmQuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIEluIDMu
MC4zIGFuZCBwcmlvciBvZiBtb2RfcHl0aG9uLCByZWFkIGJsb2NrcyB1bnRpbCBsZW5ndGggYnl0
ZXMKKyAgICAgICAgICAgICMgd2FzIHJlYWQuIFdlIGRvbid0IGtub3cgdGhlIGV4YWN0IHNpemUg
dG8gcmVhZCB3aGlsZSB1c2luZworICAgICAgICAgICAgIyBkZWZsYXRlLCBzbyByZWFkIGJ5dGUt
YnktYnl0ZS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgX1N0YW5kYWxvbmVSZXF1ZXN0
LnJlYWQgdGhhdCB1bHRpbWF0ZWx5IHBlcmZvcm1zCisgICAgICAgICAgICAjIHNvY2tldC5fZmls
ZW9iamVjdC5yZWFkIGFsc28gYmxvY2tzIHVudGlsIGxlbmd0aCBieXRlcyB3YXMgcmVhZAorICAg
ICAgICAgICAgcmVhZF9kYXRhID0gc2VsZi5fY29ubmVjdGlvbi5yZWFkKDEpCisgICAgICAgICAg
ICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBz
ZWxmLl9pbmZsYXRlci5hcHBlbmQocmVhZF9kYXRhKQorICAgICAgICByZXR1cm4gZGF0YQorCisg
ICAgZGVmIHdyaXRlKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbi53cml0
ZShzZWxmLl9kZWZsYXRlci5jb21wcmVzc19hbmRfZmx1c2goYnl0ZXMpKQorCisKK2RlZiBfaXNf
ZXdvdWxkYmxvY2tfZXJybm8oZXJyb3JfbnVtYmVyKToKKyAgICAiIiJSZXR1cm5zIFRydWUgaWZm
IGVycm9yX251bWJlciBpbmRpY2F0ZXMgdGhhdCByZWNlaXZlIG9wZXJhdGlvbiB3b3VsZAorICAg
IGJsb2NrLiBUbyBtYWtlIHRoaXMgcG9ydGFibGUsIHdlIGNoZWNrIGF2YWlsYWJpbGl0eSBvZiBl
cnJubyBhbmQgdGhlbgorICAgIGNvbXBhcmUgdGhlbS4KKyAgICAiIiIKKworICAgIGZvciBlcnJv
cl9uYW1lIGluIFsnV1NBRVdPVUxEQkxPQ0snLCAnRVdPVUxEQkxPQ0snLCAnRUFHQUlOJ106Cisg
ICAgICAgIGlmIChlcnJvcl9uYW1lIGluIGRpcihlcnJubykgYW5kCisgICAgICAgICAgICBlcnJv
cl9udW1iZXIgPT0gZ2V0YXR0cihlcnJubywgZXJyb3JfbmFtZSkpOgorICAgICAgICAgICAgcmV0
dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworCitkZWYgZHJhaW5fcmVjZWl2ZWRfZGF0YShy
YXdfc29ja2V0KToKKyAgICAjIFNldCB0aGUgc29ja2V0IG5vbi1ibG9ja2luZy4KKyAgICBvcmln
aW5hbF90aW1lb3V0ID0gcmF3X3NvY2tldC5nZXR0aW1lb3V0KCkKKyAgICByYXdfc29ja2V0LnNl
dHRpbWVvdXQoMC4wKQorCisgICAgZHJhaW5lZF9kYXRhID0gW10KKworICAgICMgRHJhaW4gdW50
aWwgdGhlIHNvY2tldCBpcyBjbG9zZWQgb3Igbm8gZGF0YSBpcyBpbW1lZGlhdGVseQorICAgICMg
YXZhaWxhYmxlIGZvciByZWFkLgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIGRhdGEgPSByYXdfc29ja2V0LnJlY3YoMSkKKyAgICAgICAgICAgIGlmIG5vdCBkYXRh
OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBkcmFpbmVkX2RhdGEuYXBwZW5k
KGRhdGEpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CisgICAgICAgICAgICAjIGUg
Y2FuIGJlIGVpdGhlciBhIHBhaXIgKGVycm5vLCBzdHJpbmcpIG9yIGp1c3QgYSBzdHJpbmcgKG9y
CisgICAgICAgICAgICAjIHNvbWV0aGluZyBlbHNlKSB0ZWxsaW5nIHdoYXQgd2VudCB3cm9uZy4g
V2Ugc3VwcHJlc3Mgb25seQorICAgICAgICAgICAgIyB0aGUgZXJyb3JzIHRoYXQgaW5kaWNhdGVz
IHRoYXQgdGhlIHNvY2tldCBibG9ja3MuIFRob3NlCisgICAgICAgICAgICAjIGV4Y2VwdGlvbnMg
Y2FuIGJlIHBhcnNlZCBhcyBhIHBhaXIgKGVycm5vLCBzdHJpbmcpLgorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIGVycm9yX251bWJlciwgbWVzc2FnZSA9IGUKKyAgICAgICAgICAg
IGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAjIEZhaWxlZCB0byBwYXJzZSBzb2NrZXQuZXJyb3Iu
CisgICAgICAgICAgICAgICAgcmFpc2UgZQorCisgICAgICAgICAgICBpZiBfaXNfZXdvdWxkYmxv
Y2tfZXJybm8oZXJyb3JfbnVtYmVyKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBlCisKKyAgICAjIFJvbGxiYWNrIHRpbWVv
dXQgdmFsdWUuCisgICAgcmF3X3NvY2tldC5zZXR0aW1lb3V0KG9yaWdpbmFsX3RpbWVvdXQpCisK
KyAgICByZXR1cm4gJycuam9pbihkcmFpbmVkX2RhdGEpCisKKworIyB2aTpzdHM9NCBzdz00IGV0
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>