<?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>191942</bug_id>
          
          <creation_ts>2018-11-24 08:47:02 -0800</creation_ts>
          <short_desc>[ews-app] Add support to get list of Bugzilla patches needing review</short_desc>
          <delta_ts>2018-11-28 14:01:02 -0800</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>Other</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="Aakash Jain">aakash_jain</reporter>
          <assigned_to name="Aakash Jain">aakash_jain</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>kocsen_chung</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1481300</commentid>
    <comment_count>0</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2018-11-24 08:47:02 -0800</bug_when>
    <thetext>We should add support to ews-app to get list of Bugzilla patches needing review, so that ews-app can send the patches to Buildbot appropriately.

Unfortunately Bugzilla doesn&apos;t seems to have a proper REST API to get list of attachment. Tracking that issue in: https://bugzilla.mozilla.org/show_bug.cgi?id=1508531

We would need to follow webkitpy approach of using BeautifulSoup and parse http://bugs.webkit.org/request.cgi?action=queue&amp;type=review&amp;group=type</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481614</commentid>
    <comment_count>1</comment_count>
      <attachid>355662</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2018-11-26 11:59:52 -0800</bug_when>
    <thetext>Created attachment 355662
Proposed patch

Part of patch series. Therefore wouldn&apos;t apply to ToT without applying other patches first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481618</commentid>
    <comment_count>2</comment_count>
      <attachid>355663</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2018-11-26 12:03:46 -0800</bug_when>
    <thetext>Created attachment 355663
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481650</commentid>
    <comment_count>3</comment_count>
      <attachid>355663</attachid>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2018-11-26 13:10:02 -0800</bug_when>
    <thetext>Comment on attachment 355663
Proposed patch

could we add the BeautifulSoup dependency in a separate patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481816</commentid>
    <comment_count>4</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2018-11-26 19:52:42 -0800</bug_when>
    <thetext>&gt; could we add the BeautifulSoup dependency in a separate patch?
Added in https://bugs.webkit.org/show_bug.cgi?id=191994</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481818</commentid>
    <comment_count>5</comment_count>
      <attachid>355706</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2018-11-26 20:01:08 -0800</bug_when>
    <thetext>Created attachment 355706
Updated patch

Updated patch after moving BeautifulSoup code to https://bugs.webkit.org/show_bug.cgi?id=191994</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482639</commentid>
    <comment_count>6</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2018-11-28 14:01:02 -0800</bug_when>
    <thetext>Committed r238636: &lt;http://trac.webkit.org/changeset/238636&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355662</attachid>
            <date>2018-11-26 11:59:52 -0800</date>
            <delta_ts>2018-11-26 12:03:46 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0007-ews-app-Add-support-to-get-list-of-Bugzilla-patches-.patch</filename>
            <type>text/plain</type>
            <size>88912</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">RnJvbSAxODlkZTJjOWY2MDIwMmMyOGU5YmJlNmY1Nzg5OTU5ZjI1ZWI5N2E4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBYWthc2ggSmFpbiA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgpE
YXRlOiBTYXQsIDI0IE5vdiAyMDE4IDA5OjIwOjU3IC0wODAwClN1YmplY3Q6IFtQQVRDSCA3Lzdd
IFtld3MtYXBwXSBBZGQgc3VwcG9ydCB0byBnZXQgbGlzdCBvZiBCdWd6aWxsYSBwYXRjaGVzCiBu
ZWVkaW5nIHJldmlldyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkx
OTQyCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiogQnVpbGRTbGF2ZVN1cHBvcnQvZXdz
LWFwcC9ld3MvY29tbW9uL2J1Z3ppbGxhLnB5OgooQnVnemlsbGEuZ2V0X2xpc3Rfb2ZfcGF0Y2hl
c19uZWVkaW5nX3Jldmlld3MpOiBHZXQgbGlzdCBvZiBwYXRjaGVzIG5lZWRpbmcgcmV2aWV3Lgoo
QnVnemlsbGFCZWF1dGlmdWxTb3VwLmZldGNoX2F0dGFjaG1lbnRfaWRzX2Zyb21fcmV2aWV3X3F1
ZXVlKTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3pp
bGxhL2J1Z3ppbGxhLnB5CihCdWd6aWxsYUJlYXV0aWZ1bFNvdXAuX2xvYWRfcXVlcnkpOiBEaXR0
by4KKEJ1Z3ppbGxhQmVhdXRpZnVsU291cC5fcGFyc2VfYXR0YWNobWVudF9pZHNfcmVxdWVzdF9x
dWVyeSk6IERpdHRvLgoqIEJ1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL3RoaXJkcGFydHkv
QmVhdXRpZnVsU291cC5weTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L0JlYXV0aWZ1bFNvdXAucHkKKiBCdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90
aGlyZHBhcnR5L19faW5pdF9fLnB5OiBBZGRlZC4KLS0tCiAuLi4vZXdzLWFwcC9ld3MvY29tbW9u
L2J1Z3ppbGxhLnB5ICAgICAgICAgICAgfCAgIDcxICsKIC4uLi9ld3MtYXBwL2V3cy90aGlyZHBh
cnR5L0JlYXV0aWZ1bFNvdXAucHkgICB8IDIwMTQgKysrKysrKysrKysrKysrKysKIC4uLi9ld3Mt
YXBwL2V3cy90aGlyZHBhcnR5L19faW5pdF9fLnB5ICAgICAgICB8ICAgIDAKIFRvb2xzL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzYgKwogNCBmaWxlcyBjaGFu
Z2VkLCAyMTIxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9CdWlsZFNs
YXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90aGlyZHBhcnR5L0JlYXV0aWZ1bFNvdXAucHkKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90aGlyZHBh
cnR5L19faW5pdF9fLnB5CgpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdz
LWFwcC9ld3MvY29tbW9uL2J1Z3ppbGxhLnB5IGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdz
LWFwcC9ld3MvY29tbW9uL2J1Z3ppbGxhLnB5CmluZGV4IDNhMjU0ZGU0YzZlLi5lOWIzZjgxZjdm
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvY29tbW9u
L2J1Z3ppbGxhLnB5CisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL2Nv
bW1vbi9idWd6aWxsYS5weQpAQCAtMjIsOCArMjIsMTQgQEAKIAogaW1wb3J0IGJhc2U2NAogaW1w
b3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CisKK2Zyb20g
ZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lZGVsdGEKIAogZnJvbSBld3MubW9kZWxzLnBh
dGNoIGltcG9ydCBQYXRjaAorZnJvbSBld3MudGhpcmRwYXJ0eS5CZWF1dGlmdWxTb3VwIGltcG9y
dCBCZWF1dGlmdWxTb3VwLCBTb3VwU3RyYWluZXIKIGltcG9ydCBld3MuY29tbW9uLnV0aWwgYXMg
dXRpbAogaW1wb3J0IGV3cy5jb25maWcgYXMgY29uZmlnCiAKQEAgLTY3LDMgKzczLDY4IEBAIGNs
YXNzIEJ1Z3ppbGxhKCk6CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjb25maWcuUEFU
Q0hfRk9MREVSKToKICAgICAgICAgICAgIG9zLm1rZGlyKGNvbmZpZy5QQVRDSF9GT0xERVIpCiAg
ICAgICAgIHJldHVybiBjb25maWcuUEFUQ0hfRk9MREVSICsgJ3t9LnBhdGNoJy5mb3JtYXQocGF0
Y2hfaWQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0X2xpc3Rfb2ZfcGF0Y2hlc19u
ZWVkaW5nX3Jldmlld3MoY2xzKToKKyAgICAgICAgY3VycmVudF90aW1lID0gZGF0ZXRpbWUudG9k
YXkoKQorICAgICAgICBpZHNfbmVlZGluZ19yZXZpZXcgPSBzZXQoQnVnemlsbGFCZWF1dGlmdWxT
b3VwKCkuZmV0Y2hfYXR0YWNobWVudF9pZHNfZnJvbV9yZXZpZXdfcXVldWUoY3VycmVudF90aW1l
IC0gdGltZWRlbHRhKDcpKSkKKyAgICAgICAgI1RPRE86IGFkZCBzZWN1cml0eSBidWdzIHN1cHBv
cnQgaGVlcmUuCisgICAgICAgIHJldHVybiBpZHNfbmVlZGluZ19yZXZpZXcKKworCitjbGFzcyBC
dWd6aWxsYUJlYXV0aWZ1bFNvdXAoKToKKyAgICAjIEZJWE1FOiBEZXByZWNhdGUgdGhpcyBjbGFz
cyB3aGVuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDg1
MzEgaXMgZml4ZWQuCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9icm93
c2VyID0gTm9uZQorCisgICAgZGVmIF9nZXRfYnJvd3NlcihzZWxmKToKKyAgICAgICAgaWYgbm90
IHNlbGYuX2Jyb3dzZXI6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjAw
KQorICAgICAgICAgICAgZnJvbSBtZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKKyAgICAgICAgICAg
IHNlbGYuX2Jyb3dzZXIgPSBCcm93c2VyKCkKKyAgICAgICAgICAgIHNlbGYuX2Jyb3dzZXIuc2V0
X2hhbmRsZV9yb2JvdHMoRmFsc2UpCisgICAgICAgIHJldHVybiBzZWxmLl9icm93c2VyCisKKyAg
ICBkZWYgX3NldF9icm93c2VyKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fYnJvd3NlciA9
IHZhbHVlCisKKyAgICBicm93c2VyID0gcHJvcGVydHkoX2dldF9icm93c2VyLCBfc2V0X2Jyb3dz
ZXIpCisKKyAgICBkZWYgZmV0Y2hfYXR0YWNobWVudF9pZHNfZnJvbV9yZXZpZXdfcXVldWUoc2Vs
Ziwgc2luY2U9Tm9uZSwgb25seV9zZWN1cml0eV9idWdzPUZhbHNlKToKKyAgICAgICAgcmV2aWV3
X3F1ZXVlX3VybCA9ICdyZXF1ZXN0LmNnaT9hY3Rpb249cXVldWUmdHlwZT1yZXZpZXcmZ3JvdXA9
dHlwZScKKyAgICAgICAgaWYgb25seV9zZWN1cml0eV9idWdzOgorICAgICAgICAgICAgcmV2aWV3
X3F1ZXVlX3VybCArPSAnJnByb2R1Y3Q9U2VjdXJpdHknCisgICAgICAgIHJldHVybiBzZWxmLl9w
YXJzZV9hdHRhY2htZW50X2lkc19yZXF1ZXN0X3F1ZXJ5KHNlbGYuX2xvYWRfcXVlcnkocmV2aWV3
X3F1ZXVlX3VybCksIHNpbmNlKQorCisgICAgZGVmIF9sb2FkX3F1ZXJ5KHNlbGYsIHF1ZXJ5KToK
KyAgICAgICAgIyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGF1dGhlbnRpY2F0ZQorICAgICAg
ICBmdWxsX3VybCA9ICd7fXt9Jy5mb3JtYXQoY29uZmlnLkJVR19TRVJWRVJfVVJMLCBxdWVyeSkK
KyAgICAgICAgX2xvZy5pbmZvKCdHZXR0aW5nIGxpc3Qgb2YgcGF0Y2hlcyBuZWVkaW5nIHJldmll
dywgVVJMOiB7fScuZm9ybWF0KGZ1bGxfdXJsKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuYnJvd3Nl
ci5vcGVuKGZ1bGxfdXJsKQorCisgICAgZGVmIF9wYXJzZV9hdHRhY2htZW50X2lkc19yZXF1ZXN0
X3F1ZXJ5KHNlbGYsIHBhZ2UsIHNpbmNlPU5vbmUpOgorICAgICAgICAjIEZvcm1hdHMKKyAgICAg
ICAgZGlnaXRzID0gcmUuY29tcGlsZSgiXGQrIikKKyAgICAgICAgYXR0YWNobWVudF9ocmVmID0g
cmUuY29tcGlsZSgiYXR0YWNobWVudC5jZ2lcP2lkPVxkKyZhY3Rpb249cmV2aWV3IikKKyAgICAg
ICAgIyBpZiBubyBkYXRlIGlzIGdpdmVuLCByZXR1cm4gYWxsIGlkcworICAgICAgICBpZiBub3Qg
c2luY2U6CisgICAgICAgICAgICBhdHRhY2htZW50X2xpbmtzID0gU291cFN0cmFpbmVyKCJhIiwg
aHJlZj1hdHRhY2htZW50X2hyZWYpCisgICAgICAgICAgICByZXR1cm4gW2ludChkaWdpdHMuc2Vh
cmNoKHRhZ1siaHJlZiJdKS5ncm91cCgwKSkKKyAgICAgICAgICAgICAgICBmb3IgdGFnIGluIEJl
YXV0aWZ1bFNvdXAocGFnZSwgcGFyc2VPbmx5VGhlc2U9YXR0YWNobWVudF9saW5rcyldCisKKyAg
ICAgICAgIyBQYXJzZSB0aGUgbWFpbiB0YWJsZSBvbmx5CisgICAgICAgIGRhdGVfZm9ybWF0ID0g
cmUuY29tcGlsZSgiXGR7NH0tXGR7Mn0tXGR7Mn0gXGR7Mn06XGR7Mn0iKQorICAgICAgICBtdGFi
ID0gU291cFN0cmFpbmVyKCJ0YWJsZSIsIHsiY2xhc3MiOiAicmVxdWVzdHMifSkKKyAgICAgICAg
c291cCA9IEJlYXV0aWZ1bFNvdXAocGFnZSwgcGFyc2VPbmx5VGhlc2U9bXRhYikKKyAgICAgICAg
cGF0Y2hfaWRzID0gW10KKworICAgICAgICBmb3Igcm93IGluIHNvdXAuZmluZEFsbCgidHIiKToK
KyAgICAgICAgICAgIHBhdGNoX3RhZyA9IHJvdy5maW5kKCJhIiwgeyJocmVmIjogYXR0YWNobWVu
dF9ocmVmfSkKKyAgICAgICAgICAgIGlmIG5vdCBwYXRjaF90YWc6CisgICAgICAgICAgICAgICAg
Y29udGludWUKKyAgICAgICAgICAgIHBhdGNoX2lkID0gaW50KGRpZ2l0cy5zZWFyY2gocGF0Y2hf
dGFnWyJocmVmIl0pLmdyb3VwKDApKQorICAgICAgICAgICAgZGF0ZV90YWcgPSByb3cuZmluZCgi
dGQiLCB0ZXh0PWRhdGVfZm9ybWF0KQorICAgICAgICAgICAgaWYgZGF0ZV90YWcgYW5kIGRhdGV0
aW1lLnN0cnB0aW1lKGRhdGVfZm9ybWF0LnNlYXJjaChkYXRlX3RhZykuZ3JvdXAoMCksICIlWS0l
bS0lZCAlSDolTSIpIDwgc2luY2U6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAg
ICAgIHBhdGNoX2lkcy5hcHBlbmQocGF0Y2hfaWQpCisgICAgICAgIHJldHVybiBwYXRjaF9pZHMK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL3RoaXJkcGFy
dHkvQmVhdXRpZnVsU291cC5weSBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdz
L3RoaXJkcGFydHkvQmVhdXRpZnVsU291cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uNGIxN2I4NTNkMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9CdWlsZFNs
YXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90aGlyZHBhcnR5L0JlYXV0aWZ1bFNvdXAucHkKQEAgLTAs
MCArMSwyMDE0IEBACisiIiJCZWF1dGlmdWwgU291cAorRWxpeGlyIGFuZCBUb25pYworIlRoZSBT
Y3JlZW4tU2NyYXBlcidzIEZyaWVuZCIKK2h0dHA6Ly93d3cuY3J1bW15LmNvbS9zb2Z0d2FyZS9C
ZWF1dGlmdWxTb3VwLworCitCZWF1dGlmdWwgU291cCBwYXJzZXMgYSAocG9zc2libHkgaW52YWxp
ZCkgWE1MIG9yIEhUTUwgZG9jdW1lbnQgaW50byBhCit0cmVlIHJlcHJlc2VudGF0aW9uLiBJdCBw
cm92aWRlcyBtZXRob2RzIGFuZCBQeXRob25pYyBpZGlvbXMgdGhhdCBtYWtlCitpdCBlYXN5IHRv
IG5hdmlnYXRlLCBzZWFyY2gsIGFuZCBtb2RpZnkgdGhlIHRyZWUuCisKK0Egd2VsbC1mb3JtZWQg
WE1ML0hUTUwgZG9jdW1lbnQgeWllbGRzIGEgd2VsbC1mb3JtZWQgZGF0YQorc3RydWN0dXJlLiBB
biBpbGwtZm9ybWVkIFhNTC9IVE1MIGRvY3VtZW50IHlpZWxkcyBhIGNvcnJlc3BvbmRpbmdseQor
aWxsLWZvcm1lZCBkYXRhIHN0cnVjdHVyZS4gSWYgeW91ciBkb2N1bWVudCBpcyBvbmx5IGxvY2Fs
bHkKK3dlbGwtZm9ybWVkLCB5b3UgY2FuIHVzZSB0aGlzIGxpYnJhcnkgdG8gZmluZCBhbmQgcHJv
Y2VzcyB0aGUKK3dlbGwtZm9ybWVkIHBhcnQgb2YgaXQuCisKK0JlYXV0aWZ1bCBTb3VwIHdvcmtz
IHdpdGggUHl0aG9uIDIuMiBhbmQgdXAuIEl0IGhhcyBubyBleHRlcm5hbAorZGVwZW5kZW5jaWVz
LCBidXQgeW91J2xsIGhhdmUgbW9yZSBzdWNjZXNzIGF0IGNvbnZlcnRpbmcgZGF0YSB0byBVVEYt
OAoraWYgeW91IGFsc28gaW5zdGFsbCB0aGVzZSB0aHJlZSBwYWNrYWdlczoKKworKiBjaGFyZGV0
LCBmb3IgYXV0by1kZXRlY3RpbmcgY2hhcmFjdGVyIGVuY29kaW5ncworICBodHRwOi8vY2hhcmRl
dC5mZWVkcGFyc2VyLm9yZy8KKyogY2prY29kZWNzIGFuZCBpY29udl9jb2RlYywgd2hpY2ggYWRk
IG1vcmUgZW5jb2RpbmdzIHRvIHRoZSBvbmVzIHN1cHBvcnRlZAorICBieSBzdG9jayBQeXRob24u
CisgIGh0dHA6Ly9jamtweXRob24uaTE4bi5vcmcvCisKK0JlYXV0aWZ1bCBTb3VwIGRlZmluZXMg
Y2xhc3NlcyBmb3IgdHdvIG1haW4gcGFyc2luZyBzdHJhdGVnaWVzOgorCisgKiBCZWF1dGlmdWxT
dG9uZVNvdXAsIGZvciBwYXJzaW5nIFhNTCwgU0dNTCwgb3IgeW91ciBkb21haW4tc3BlY2lmaWMK
KyAgIGxhbmd1YWdlIHRoYXQga2luZCBvZiBsb29rcyBsaWtlIFhNTC4KKworICogQmVhdXRpZnVs
U291cCwgZm9yIHBhcnNpbmcgcnVuLW9mLXRoZS1taWxsIEhUTUwgY29kZSwgYmUgaXQgdmFsaWQK
KyAgIG9yIGludmFsaWQuIFRoaXMgY2xhc3MgaGFzIHdlYiBicm93c2VyLWxpa2UgaGV1cmlzdGlj
cyBmb3IKKyAgIG9idGFpbmluZyBhIHNlbnNpYmxlIHBhcnNlIHRyZWUgaW4gdGhlIGZhY2Ugb2Yg
Y29tbW9uIEhUTUwgZXJyb3JzLgorCitCZWF1dGlmdWwgU291cCBhbHNvIGRlZmluZXMgYSBjbGFz
cyAoVW5pY29kZURhbW1pdCkgZm9yIGF1dG9kZXRlY3RpbmcKK3RoZSBlbmNvZGluZyBvZiBhbiBI
VE1MIG9yIFhNTCBkb2N1bWVudCwgYW5kIGNvbnZlcnRpbmcgaXQgdG8KK1VuaWNvZGUuIE11Y2gg
b2YgdGhpcyBjb2RlIGlzIHRha2VuIGZyb20gTWFyayBQaWxncmltJ3MgVW5pdmVyc2FsIEZlZWQg
UGFyc2VyLgorCitGb3IgbW9yZSB0aGFuIHlvdSBldmVyIHdhbnRlZCB0byBrbm93IGFib3V0IEJl
YXV0aWZ1bCBTb3VwLCBzZWUgdGhlCitkb2N1bWVudGF0aW9uOgoraHR0cDovL3d3dy5jcnVtbXku
Y29tL3NvZnR3YXJlL0JlYXV0aWZ1bFNvdXAvZG9jdW1lbnRhdGlvbi5odG1sCisKK0hlcmUsIGhh
dmUgc29tZSBsZWdhbGVzZToKKworQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAsIExlb25hcmQgUmlj
aGFyZHNvbgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKK21ldDoKKworICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgdGhlIEJlYXV0aWZ1bCBTb3VwIENvbnNvcnRpdW0gYW5kIEFsbAorICAgIE5pZ2h0IEtvc2hl
ciBCYWtlcnkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQorICAgIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCisgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCitD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UsIERBTU1JVC4KKworIiIiCitmcm9tIF9fZnV0dXJlX18gaW1w
b3J0IGdlbmVyYXRvcnMKKworX19hdXRob3JfXyA9ICJMZW9uYXJkIFJpY2hhcmRzb24gKGxlb25h
cmRyQHNlZ2ZhdWx0Lm9yZykiCitfX3ZlcnNpb25fXyA9ICIzLjIuMCIKK19fY29weXJpZ2h0X18g
PSAiQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgTGVvbmFyZCBSaWNoYXJkc29uIgorX19saWNlbnNl
X18gPSAiTmV3LXN0eWxlIEJTRCIKKworZnJvbSBzZ21sbGliIGltcG9ydCBTR01MUGFyc2VyLCBT
R01MUGFyc2VFcnJvcgoraW1wb3J0IGNvZGVjcworaW1wb3J0IG1hcmt1cGJhc2UKK2ltcG9ydCB0
eXBlcworaW1wb3J0IHJlCitpbXBvcnQgc2dtbGxpYgordHJ5OgorICBmcm9tIGh0bWxlbnRpdHlk
ZWZzIGltcG9ydCBuYW1lMmNvZGVwb2ludAorZXhjZXB0IEltcG9ydEVycm9yOgorICBuYW1lMmNv
ZGVwb2ludCA9IHt9Cit0cnk6CisgICAgc2V0CitleGNlcHQgTmFtZUVycm9yOgorICAgIGZyb20g
c2V0cyBpbXBvcnQgU2V0IGFzIHNldAorCisjVGhlc2UgaGFja3MgbWFrZSBCZWF1dGlmdWwgU291
cCBhYmxlIHRvIHBhcnNlIFhNTCB3aXRoIG5hbWVzcGFjZXMKK3NnbWxsaWIudGFnZmluZCA9IHJl
LmNvbXBpbGUoJ1thLXpBLVpdWy1fLjphLXpBLVowLTldKicpCittYXJrdXBiYXNlLl9kZWNsbmFt
ZV9tYXRjaCA9IHJlLmNvbXBpbGUocidbYS16QS1aXVstXy46YS16QS1aMC05XSpccyonKS5tYXRj
aAorCitERUZBVUxUX09VVFBVVF9FTkNPRElORyA9ICJ1dGYtOCIKKworZGVmIF9tYXRjaF9jc3Nf
Y2xhc3Moc3RyKToKKyAgICAiIiJCdWlsZCBhIFJFIHRvIG1hdGNoIHRoZSBnaXZlbiBDU1MgY2xh
c3MuIiIiCisgICAgcmV0dXJuIHJlLmNvbXBpbGUociIoXnwuKlxzKSVzKCR8XHMpIiAlIHN0cikK
KworIyBGaXJzdCwgdGhlIGNsYXNzZXMgdGhhdCByZXByZXNlbnQgbWFya3VwIGVsZW1lbnRzLgor
CitjbGFzcyBQYWdlRWxlbWVudChvYmplY3QpOgorICAgICIiIkNvbnRhaW5zIHRoZSBuYXZpZ2F0
aW9uYWwgaW5mb3JtYXRpb24gZm9yIHNvbWUgcGFydCBvZiB0aGUgcGFnZQorICAgIChlaXRoZXIg
YSB0YWcgb3IgYSBwaWVjZSBvZiB0ZXh0KSIiIgorCisgICAgZGVmIHNldHVwKHNlbGYsIHBhcmVu
dD1Ob25lLCBwcmV2aW91cz1Ob25lKToKKyAgICAgICAgIiIiU2V0cyB1cCB0aGUgaW5pdGlhbCBy
ZWxhdGlvbnMgYmV0d2VlbiB0aGlzIGVsZW1lbnQgYW5kCisgICAgICAgIG90aGVyIGVsZW1lbnRz
LiIiIgorICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAorICAgICAgICBzZWxmLnByZXZpb3Vz
ID0gcHJldmlvdXMKKyAgICAgICAgc2VsZi5uZXh0ID0gTm9uZQorICAgICAgICBzZWxmLnByZXZp
b3VzU2libGluZyA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0U2libGluZyA9IE5vbmUKKyAgICAg
ICAgaWYgc2VsZi5wYXJlbnQgYW5kIHNlbGYucGFyZW50LmNvbnRlbnRzOgorICAgICAgICAgICAg
c2VsZi5wcmV2aW91c1NpYmxpbmcgPSBzZWxmLnBhcmVudC5jb250ZW50c1stMV0KKyAgICAgICAg
ICAgIHNlbGYucHJldmlvdXNTaWJsaW5nLm5leHRTaWJsaW5nID0gc2VsZgorCisgICAgZGVmIHJl
cGxhY2VXaXRoKHNlbGYsIHJlcGxhY2VXaXRoKToKKyAgICAgICAgb2xkUGFyZW50ID0gc2VsZi5w
YXJlbnQKKyAgICAgICAgbXlJbmRleCA9IHNlbGYucGFyZW50LmluZGV4KHNlbGYpCisgICAgICAg
IGlmIGhhc2F0dHIocmVwbGFjZVdpdGgsICJwYXJlbnQiKVwKKyAgICAgICAgICAgICAgICAgIGFu
ZCByZXBsYWNlV2l0aC5wYXJlbnQgaXMgc2VsZi5wYXJlbnQ6CisgICAgICAgICAgICAjIFdlJ3Jl
IHJlcGxhY2luZyB0aGlzIGVsZW1lbnQgd2l0aCBvbmUgb2YgaXRzIHNpYmxpbmdzLgorICAgICAg
ICAgICAgaW5kZXggPSByZXBsYWNlV2l0aC5wYXJlbnQuaW5kZXgocmVwbGFjZVdpdGgpCisgICAg
ICAgICAgICBpZiBpbmRleCBhbmQgaW5kZXggPCBteUluZGV4OgorICAgICAgICAgICAgICAgICMg
RnVydGhlcm1vcmUsIGl0IGNvbWVzIGJlZm9yZSB0aGlzIGVsZW1lbnQuIFRoYXQKKyAgICAgICAg
ICAgICAgICAjIG1lYW5zIHRoYXQgd2hlbiB3ZSBleHRyYWN0IGl0LCB0aGUgaW5kZXggb2YgdGhp
cworICAgICAgICAgICAgICAgICMgZWxlbWVudCB3aWxsIGNoYW5nZS4KKyAgICAgICAgICAgICAg
ICBteUluZGV4ID0gbXlJbmRleCAtIDEKKyAgICAgICAgc2VsZi5leHRyYWN0KCkKKyAgICAgICAg
b2xkUGFyZW50Lmluc2VydChteUluZGV4LCByZXBsYWNlV2l0aCkKKworICAgIGRlZiByZXBsYWNl
V2l0aENoaWxkcmVuKHNlbGYpOgorICAgICAgICBteVBhcmVudCA9IHNlbGYucGFyZW50CisgICAg
ICAgIG15SW5kZXggPSBzZWxmLnBhcmVudC5pbmRleChzZWxmKQorICAgICAgICBzZWxmLmV4dHJh
Y3QoKQorICAgICAgICByZXZlcnNlZENoaWxkcmVuID0gbGlzdChzZWxmLmNvbnRlbnRzKQorICAg
ICAgICByZXZlcnNlZENoaWxkcmVuLnJldmVyc2UoKQorICAgICAgICBmb3IgY2hpbGQgaW4gcmV2
ZXJzZWRDaGlsZHJlbjoKKyAgICAgICAgICAgIG15UGFyZW50Lmluc2VydChteUluZGV4LCBjaGls
ZCkKKworICAgIGRlZiBleHRyYWN0KHNlbGYpOgorICAgICAgICAiIiJEZXN0cnVjdGl2ZWx5IHJp
cHMgdGhpcyBlbGVtZW50IG91dCBvZiB0aGUgdHJlZS4iIiIKKyAgICAgICAgaWYgc2VsZi5wYXJl
bnQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYucGFyZW50LmNv
bnRlbnRzW3NlbGYucGFyZW50LmluZGV4KHNlbGYpXQorICAgICAgICAgICAgZXhjZXB0IFZhbHVl
RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICNGaW5kIHRoZSB0d28gZWxl
bWVudHMgdGhhdCB3b3VsZCBiZSBuZXh0IHRvIGVhY2ggb3RoZXIgaWYKKyAgICAgICAgI3RoaXMg
ZWxlbWVudCAoYW5kIGFueSBjaGlsZHJlbikgaGFkbid0IGJlZW4gcGFyc2VkLiBDb25uZWN0Cisg
ICAgICAgICN0aGUgdHdvLgorICAgICAgICBsYXN0Q2hpbGQgPSBzZWxmLl9sYXN0UmVjdXJzaXZl
Q2hpbGQoKQorICAgICAgICBuZXh0RWxlbWVudCA9IGxhc3RDaGlsZC5uZXh0CisKKyAgICAgICAg
aWYgc2VsZi5wcmV2aW91czoKKyAgICAgICAgICAgIHNlbGYucHJldmlvdXMubmV4dCA9IG5leHRF
bGVtZW50CisgICAgICAgIGlmIG5leHRFbGVtZW50OgorICAgICAgICAgICAgbmV4dEVsZW1lbnQu
cHJldmlvdXMgPSBzZWxmLnByZXZpb3VzCisgICAgICAgIHNlbGYucHJldmlvdXMgPSBOb25lCisg
ICAgICAgIGxhc3RDaGlsZC5uZXh0ID0gTm9uZQorCisgICAgICAgIHNlbGYucGFyZW50ID0gTm9u
ZQorICAgICAgICBpZiBzZWxmLnByZXZpb3VzU2libGluZzoKKyAgICAgICAgICAgIHNlbGYucHJl
dmlvdXNTaWJsaW5nLm5leHRTaWJsaW5nID0gc2VsZi5uZXh0U2libGluZworICAgICAgICBpZiBz
ZWxmLm5leHRTaWJsaW5nOgorICAgICAgICAgICAgc2VsZi5uZXh0U2libGluZy5wcmV2aW91c1Np
YmxpbmcgPSBzZWxmLnByZXZpb3VzU2libGluZworICAgICAgICBzZWxmLnByZXZpb3VzU2libGlu
ZyA9IHNlbGYubmV4dFNpYmxpbmcgPSBOb25lCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBk
ZWYgX2xhc3RSZWN1cnNpdmVDaGlsZChzZWxmKToKKyAgICAgICAgIkZpbmRzIHRoZSBsYXN0IGVs
ZW1lbnQgYmVuZWF0aCB0aGlzIG9iamVjdCB0byBiZSBwYXJzZWQuIgorICAgICAgICBsYXN0Q2hp
bGQgPSBzZWxmCisgICAgICAgIHdoaWxlIGhhc2F0dHIobGFzdENoaWxkLCAnY29udGVudHMnKSBh
bmQgbGFzdENoaWxkLmNvbnRlbnRzOgorICAgICAgICAgICAgbGFzdENoaWxkID0gbGFzdENoaWxk
LmNvbnRlbnRzWy0xXQorICAgICAgICByZXR1cm4gbGFzdENoaWxkCisKKyAgICBkZWYgaW5zZXJ0
KHNlbGYsIHBvc2l0aW9uLCBuZXdDaGlsZCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobmV3Q2hp
bGQsIGJhc2VzdHJpbmcpIFwKKyAgICAgICAgICAgIGFuZCBub3QgaXNpbnN0YW5jZShuZXdDaGls
ZCwgTmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgICAgIG5ld0NoaWxkID0gTmF2aWdhYmxlU3Ry
aW5nKG5ld0NoaWxkKQorCisgICAgICAgIHBvc2l0aW9uID0gIG1pbihwb3NpdGlvbiwgbGVuKHNl
bGYuY29udGVudHMpKQorICAgICAgICBpZiBoYXNhdHRyKG5ld0NoaWxkLCAncGFyZW50JykgYW5k
IG5ld0NoaWxkLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgV2UncmUgJ2luc2Vy
dGluZycgYW4gZWxlbWVudCB0aGF0J3MgYWxyZWFkeSBvbmUKKyAgICAgICAgICAgICMgb2YgdGhp
cyBvYmplY3QncyBjaGlsZHJlbi4KKyAgICAgICAgICAgIGlmIG5ld0NoaWxkLnBhcmVudCBpcyBz
ZWxmOgorICAgICAgICAgICAgICAgIGluZGV4ID0gc2VsZi5pbmRleChuZXdDaGlsZCkKKyAgICAg
ICAgICAgICAgICBpZiBpbmRleCA+IHBvc2l0aW9uOgorICAgICAgICAgICAgICAgICAgICAjIEZ1
cnRoZXJtb3JlIHdlJ3JlIG1vdmluZyBpdCBmdXJ0aGVyIGRvd24gdGhlCisgICAgICAgICAgICAg
ICAgICAgICMgbGlzdCBvZiB0aGlzIG9iamVjdCdzIGNoaWxkcmVuLiBUaGF0IG1lYW5zIHRoYXQK
KyAgICAgICAgICAgICAgICAgICAgIyB3aGVuIHdlIGV4dHJhY3QgdGhpcyBlbGVtZW50LCBvdXIg
dGFyZ2V0IGluZGV4CisgICAgICAgICAgICAgICAgICAgICMgd2lsbCBqdW1wIGRvd24gb25lLgor
ICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIC0gMQorICAgICAgICAgICAg
bmV3Q2hpbGQuZXh0cmFjdCgpCisKKyAgICAgICAgbmV3Q2hpbGQucGFyZW50ID0gc2VsZgorICAg
ICAgICBwcmV2aW91c0NoaWxkID0gTm9uZQorICAgICAgICBpZiBwb3NpdGlvbiA9PSAwOgorICAg
ICAgICAgICAgbmV3Q2hpbGQucHJldmlvdXNTaWJsaW5nID0gTm9uZQorICAgICAgICAgICAgbmV3
Q2hpbGQucHJldmlvdXMgPSBzZWxmCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmV2aW91
c0NoaWxkID0gc2VsZi5jb250ZW50c1twb3NpdGlvbi0xXQorICAgICAgICAgICAgbmV3Q2hpbGQu
cHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXNDaGlsZAorICAgICAgICAgICAgbmV3Q2hpbGQucHJl
dmlvdXNTaWJsaW5nLm5leHRTaWJsaW5nID0gbmV3Q2hpbGQKKyAgICAgICAgICAgIG5ld0NoaWxk
LnByZXZpb3VzID0gcHJldmlvdXNDaGlsZC5fbGFzdFJlY3Vyc2l2ZUNoaWxkKCkKKyAgICAgICAg
aWYgbmV3Q2hpbGQucHJldmlvdXM6CisgICAgICAgICAgICBuZXdDaGlsZC5wcmV2aW91cy5uZXh0
ID0gbmV3Q2hpbGQKKworICAgICAgICBuZXdDaGlsZHNMYXN0RWxlbWVudCA9IG5ld0NoaWxkLl9s
YXN0UmVjdXJzaXZlQ2hpbGQoKQorCisgICAgICAgIGlmIHBvc2l0aW9uID49IGxlbihzZWxmLmNv
bnRlbnRzKToKKyAgICAgICAgICAgIG5ld0NoaWxkLm5leHRTaWJsaW5nID0gTm9uZQorCisgICAg
ICAgICAgICBwYXJlbnQgPSBzZWxmCisgICAgICAgICAgICBwYXJlbnRzTmV4dFNpYmxpbmcgPSBO
b25lCisgICAgICAgICAgICB3aGlsZSBub3QgcGFyZW50c05leHRTaWJsaW5nOgorICAgICAgICAg
ICAgICAgIHBhcmVudHNOZXh0U2libGluZyA9IHBhcmVudC5uZXh0U2libGluZworICAgICAgICAg
ICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQKKyAgICAgICAgICAgICAgICBpZiBub3QgcGFy
ZW50OiAjIFRoaXMgaXMgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBwYXJlbnRzTmV4dFNpYmxpbmc6Cisg
ICAgICAgICAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1lbnQubmV4dCA9IHBhcmVudHNOZXh0U2li
bGluZworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdDaGlsZHNMYXN0RWxl
bWVudC5uZXh0ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV4dENoaWxkID0g
c2VsZi5jb250ZW50c1twb3NpdGlvbl0KKyAgICAgICAgICAgIG5ld0NoaWxkLm5leHRTaWJsaW5n
ID0gbmV4dENoaWxkCisgICAgICAgICAgICBpZiBuZXdDaGlsZC5uZXh0U2libGluZzoKKyAgICAg
ICAgICAgICAgICBuZXdDaGlsZC5uZXh0U2libGluZy5wcmV2aW91c1NpYmxpbmcgPSBuZXdDaGls
ZAorICAgICAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1lbnQubmV4dCA9IG5leHRDaGlsZAorCisg
ICAgICAgIGlmIG5ld0NoaWxkc0xhc3RFbGVtZW50Lm5leHQ6CisgICAgICAgICAgICBuZXdDaGls
ZHNMYXN0RWxlbWVudC5uZXh0LnByZXZpb3VzID0gbmV3Q2hpbGRzTGFzdEVsZW1lbnQKKyAgICAg
ICAgc2VsZi5jb250ZW50cy5pbnNlcnQocG9zaXRpb24sIG5ld0NoaWxkKQorCisgICAgZGVmIGFw
cGVuZChzZWxmLCB0YWcpOgorICAgICAgICAiIiJBcHBlbmRzIHRoZSBnaXZlbiB0YWcgdG8gdGhl
IGNvbnRlbnRzIG9mIHRoaXMgdGFnLiIiIgorICAgICAgICBzZWxmLmluc2VydChsZW4oc2VsZi5j
b250ZW50cyksIHRhZykKKworICAgIGRlZiBmaW5kTmV4dChzZWxmLCBuYW1lPU5vbmUsIGF0dHJz
PXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZmlyc3Qg
aXRlbSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGNyaXRlcmlhIGFuZAorICAgICAgICBhcHBlYXJz
IGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2ZpbmRPbmUoc2VsZi5maW5kQWxsTmV4dCwgbmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKQor
CisgICAgZGVmIGZpbmRBbGxOZXh0KHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9u
ZSwgbGltaXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICAi
IiJSZXR1cm5zIGFsbCBpdGVtcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQgYXBw
ZWFyCisgICAgICAgIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LCBzZWxmLm5leHRH
ZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorCisgICAg
ZGVmIGZpbmROZXh0U2libGluZyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUs
ICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgY2xvc2VzdCBzaWJsaW5nIHRvIHRo
aXMgVGFnIHRoYXQgbWF0Y2hlcyB0aGUKKyAgICAgICAgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVh
cnMgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2Vs
Zi5fZmluZE9uZShzZWxmLmZpbmROZXh0U2libGluZ3MsIG5hbWUsIGF0dHJzLCB0ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKworICAgIGRlZiBmaW5kTmV4dFNp
YmxpbmdzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgbGltaXQ9Tm9uZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMg
dGhlIHNpYmxpbmdzIG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNy
aXRlcmlhIGFuZCBhcHBlYXIgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV4dFNpYmxpbmdHZW5lcmF0b3IsICoqa3dh
cmdzKQorICAgIGZldGNoTmV4dFNpYmxpbmdzID0gZmluZE5leHRTaWJsaW5ncyAjIENvbXBhdGli
aWxpdHkgd2l0aCBwcmUtMy54CisKKyAgICBkZWYgZmluZFByZXZpb3VzKHNlbGYsIG5hbWU9Tm9u
ZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRo
ZSBmaXJzdCBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kCisgICAgICAg
IGFwcGVhcnMgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2ZpbmRPbmUoc2VsZi5maW5kQWxsUHJldmlvdXMsIG5hbWUsIGF0dHJzLCB0ZXh0
LCAqKmt3YXJncykKKworICAgIGRlZiBmaW5kQWxsUHJldmlvdXMoc2VsZiwgbmFtZT1Ob25lLCBh
dHRycz17fSwgdGV4dD1Ob25lLCBsaW1pdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAg
Kiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIGFsbCBpdGVtcyB0aGF0IG1hdGNoIHRoZSBn
aXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFyCisgICAgICAgIGJlZm9yZSB0aGlzIFRhZyBpbiB0aGUg
ZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kQWxsKG5hbWUsIGF0dHJzLCB0
ZXh0LCBsaW1pdCwgc2VsZi5wcmV2aW91c0dlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICoqa3dhcmdzKQorICAgIGZldGNoUHJldmlvdXMgPSBmaW5kQWxsUHJldmlvdXMgIyBD
b21wYXRpYmlsaXR5IHdpdGggcHJlLTMueAorCisgICAgZGVmIGZpbmRQcmV2aW91c1NpYmxpbmco
c2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAg
ICIiIlJldHVybnMgdGhlIGNsb3Nlc3Qgc2libGluZyB0byB0aGlzIFRhZyB0aGF0IG1hdGNoZXMg
dGhlCisgICAgICAgIGdpdmVuIGNyaXRlcmlhIGFuZCBhcHBlYXJzIGJlZm9yZSB0aGlzIFRhZyBp
biB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kT25lKHNlbGYuZmlu
ZFByZXZpb3VzU2libGluZ3MsIG5hbWUsIGF0dHJzLCB0ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqKmt3YXJncykKKworICAgIGRlZiBmaW5kUHJldmlvdXNTaWJsaW5ncyhzZWxm
LCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc2li
bGluZ3Mgb2YgdGhpcyBUYWcgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEg
YW5kIGFwcGVhciBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYucHJldmlvdXNTaWJsaW5nR2VuZXJhdG9yLCAqKmt3YXJn
cykKKyAgICBmZXRjaFByZXZpb3VzU2libGluZ3MgPSBmaW5kUHJldmlvdXNTaWJsaW5ncyAjIENv
bXBhdGliaWxpdHkgd2l0aCBwcmUtMy54CisKKyAgICBkZWYgZmluZFBhcmVudChzZWxmLCBuYW1l
PU5vbmUsIGF0dHJzPXt9LCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGNsb3Nl
c3QgcGFyZW50IG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4KKyAgICAgICAgY3Jp
dGVyaWEuIiIiCisgICAgICAgICMgTk9URTogV2UgY2FuJ3QgdXNlIF9maW5kT25lIGJlY2F1c2Ug
ZmluZFBhcmVudHMgdGFrZXMgYSBkaWZmZXJlbnQKKyAgICAgICAgIyBzZXQgb2YgYXJndW1lbnRz
LgorICAgICAgICByID0gTm9uZQorICAgICAgICBsID0gc2VsZi5maW5kUGFyZW50cyhuYW1lLCBh
dHRycywgMSkKKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHIgPSBsWzBdCisgICAgICAgIHJl
dHVybiByCisKKyAgICBkZWYgZmluZFBhcmVudHMoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwg
bGltaXQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXJlbnRzIG9m
IHRoaXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiIiIgorCisg
ICAgICAgIHJldHVybiBzZWxmLl9maW5kQWxsKG5hbWUsIGF0dHJzLCBOb25lLCBsaW1pdCwgc2Vs
Zi5wYXJlbnRHZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdz
KQorICAgIGZldGNoUGFyZW50cyA9IGZpbmRQYXJlbnRzICMgQ29tcGF0aWJpbGl0eSB3aXRoIHBy
ZS0zLngKKworICAgICNUaGVzZSBtZXRob2RzIGRvIHRoZSByZWFsIGhlYXZ5IGxpZnRpbmcuCisK
KyAgICBkZWYgX2ZpbmRPbmUoc2VsZiwgbWV0aG9kLCBuYW1lLCBhdHRycywgdGV4dCwgKiprd2Fy
Z3MpOgorICAgICAgICByID0gTm9uZQorICAgICAgICBsID0gbWV0aG9kKG5hbWUsIGF0dHJzLCB0
ZXh0LCAxLCAqKmt3YXJncykKKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHIgPSBsWzBdCisg
ICAgICAgIHJldHVybiByCisKKyAgICBkZWYgX2ZpbmRBbGwoc2VsZiwgbmFtZSwgYXR0cnMsIHRl
eHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdzKToKKyAgICAgICAgIkl0ZXJhdGVzIG92ZXIg
YSBnZW5lcmF0b3IgbG9va2luZyBmb3IgdGhpbmdzIHRoYXQgbWF0Y2guIgorCisgICAgICAgIGlm
IGlzaW5zdGFuY2UobmFtZSwgU291cFN0cmFpbmVyKToKKyAgICAgICAgICAgIHN0cmFpbmVyID0g
bmFtZQorICAgICAgICAjIChQb3NzaWJseSkgc3BlY2lhbCBjYXNlIHNvbWUgZmluZEFsbCooLi4u
KSBzZWFyY2hlcworICAgICAgICBlbGlmIHRleHQgaXMgTm9uZSBhbmQgbm90IGxpbWl0IGFuZCBu
b3QgYXR0cnMgYW5kIG5vdCBrd2FyZ3M6CisgICAgICAgICAgICAjIGZpbmRBbGwqKFRydWUpCisg
ICAgICAgICAgICBpZiBuYW1lIGlzIFRydWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtlbGVt
ZW50IGZvciBlbGVtZW50IGluIGdlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKGVsZW1lbnQsIFRhZyldCisgICAgICAgICAgICAjIGZpbmRBbGwqKCd0YWct
bmFtZScpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UobmFtZSwgYmFzZXN0cmluZyk6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFtlbGVtZW50IGZvciBlbGVtZW50IGluIGdlbmVyYXRvcigp
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIFRhZykgYW5k
CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm5hbWUgPT0gbmFtZV0KKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3RyYWluZXIgPSBTb3VwU3RyYWluZXIobmFtZSwg
YXR0cnMsIHRleHQsICoqa3dhcmdzKQorICAgICAgICAjIEJ1aWxkIGEgU291cFN0cmFpbmVyCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdHJhaW5lciA9IFNvdXBTdHJhaW5lcihuYW1lLCBh
dHRycywgdGV4dCwgKiprd2FyZ3MpCisgICAgICAgIHJlc3VsdHMgPSBSZXN1bHRTZXQoc3RyYWlu
ZXIpCisgICAgICAgIGcgPSBnZW5lcmF0b3IoKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGkgPSBnLm5leHQoKQorICAgICAgICAgICAgZXhj
ZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlm
IGk6CisgICAgICAgICAgICAgICAgZm91bmQgPSBzdHJhaW5lci5zZWFyY2goaSkKKyAgICAgICAg
ICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoZm91
bmQpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0IGFuZCBsZW4ocmVzdWx0cykgPj0gbGlt
aXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gcmVzdWx0
cworCisgICAgI1RoZXNlIEdlbmVyYXRvcnMgY2FuIGJlIHVzZWQgdG8gbmF2aWdhdGUgc3RhcnRp
bmcgZnJvbSBib3RoCisgICAgI05hdmlnYWJsZVN0cmluZ3MgYW5kIFRhZ3MuCisgICAgZGVmIG5l
eHRHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmCisgICAgICAgIHdoaWxlIGkgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBpID0gaS5uZXh0CisgICAgICAgICAgICB5aWVsZCBpCisK
KyAgICBkZWYgbmV4dFNpYmxpbmdHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmCisg
ICAgICAgIHdoaWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpID0gaS5uZXh0U2libGlu
ZworICAgICAgICAgICAgeWllbGQgaQorCisgICAgZGVmIHByZXZpb3VzR2VuZXJhdG9yKHNlbGYp
OgorICAgICAgICBpID0gc2VsZgorICAgICAgICB3aGlsZSBpIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgaSA9IGkucHJldmlvdXMKKyAgICAgICAgICAgIHlpZWxkIGkKKworICAgIGRlZiBwcmV2
aW91c1NpYmxpbmdHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmCisgICAgICAgIHdo
aWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpID0gaS5wcmV2aW91c1NpYmxpbmcKKyAg
ICAgICAgICAgIHlpZWxkIGkKKworICAgIGRlZiBwYXJlbnRHZW5lcmF0b3Ioc2VsZik6CisgICAg
ICAgIGkgPSBzZWxmCisgICAgICAgIHdoaWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBp
ID0gaS5wYXJlbnQKKyAgICAgICAgICAgIHlpZWxkIGkKKworICAgICMgVXRpbGl0eSBtZXRob2Rz
CisgICAgZGVmIHN1YnN0aXR1dGVFbmNvZGluZyhzZWxmLCBzdHIsIGVuY29kaW5nPU5vbmUpOgor
ICAgICAgICBlbmNvZGluZyA9IGVuY29kaW5nIG9yICJ1dGYtOCIKKyAgICAgICAgcmV0dXJuIHN0
ci5yZXBsYWNlKCIlU09VUC1FTkNPRElORyUiLCBlbmNvZGluZykKKworICAgIGRlZiB0b0VuY29k
aW5nKHNlbGYsIHMsIGVuY29kaW5nPU5vbmUpOgorICAgICAgICAiIiJFbmNvZGVzIGFuIG9iamVj
dCB0byBhIHN0cmluZyBpbiBzb21lIGVuY29kaW5nLCBvciB0byBVbmljb2RlLgorICAgICAgICAu
IiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UocywgdW5pY29kZSk6CisgICAgICAgICAgICBpZiBl
bmNvZGluZzoKKyAgICAgICAgICAgICAgICBzID0gcy5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAg
IGVsaWYgaXNpbnN0YW5jZShzLCBzdHIpOgorICAgICAgICAgICAgaWYgZW5jb2Rpbmc6CisgICAg
ICAgICAgICAgICAgcyA9IHMuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBzID0gdW5pY29kZShzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
aWYgZW5jb2Rpbmc6CisgICAgICAgICAgICAgICAgcyAgPSBzZWxmLnRvRW5jb2Rpbmcoc3RyKHMp
LCBlbmNvZGluZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcyA9IHVuaWNv
ZGUocykKKyAgICAgICAgcmV0dXJuIHMKKworY2xhc3MgTmF2aWdhYmxlU3RyaW5nKHVuaWNvZGUs
IFBhZ2VFbGVtZW50KToKKworICAgIGRlZiBfX25ld19fKGNscywgdmFsdWUpOgorICAgICAgICAi
IiJDcmVhdGUgYSBuZXcgTmF2aWdhYmxlU3RyaW5nLgorCisgICAgICAgIFdoZW4gdW5waWNrbGlu
ZyBhIE5hdmlnYWJsZVN0cmluZywgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdpdGgKKyAgICAgICAg
dGhlIHN0cmluZyBpbiBERUZBVUxUX09VVFBVVF9FTkNPRElORy4gVGhhdCBlbmNvZGluZyBuZWVk
cyB0byBiZQorICAgICAgICBwYXNzZWQgaW4gdG8gdGhlIHN1cGVyY2xhc3MncyBfX25ld19fIG9y
IHRoZSBzdXBlcmNsYXNzIHdvbid0IGtub3cKKyAgICAgICAgaG93IHRvIGhhbmRsZSBub24tQVND
SUkgY2hhcmFjdGVycy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUs
IHVuaWNvZGUpOgorICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGUuX19uZXdfXyhjbHMsIHZhbHVl
KQorICAgICAgICByZXR1cm4gdW5pY29kZS5fX25ld19fKGNscywgdmFsdWUsIERFRkFVTFRfT1VU
UFVUX0VOQ09ESU5HKQorCisgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gKE5hdmlnYWJsZVN0cmluZy5fX3N0cl9fKHNlbGYpLCkKKworICAgIGRlZiBfX2dldGF0
dHJfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgIiIidGV4dC5zdHJpbmcgZ2l2ZXMgeW91IHRleHQu
IFRoaXMgaXMgZm9yIGJhY2t3YXJkcworICAgICAgICBjb21wYXRpYmlsaXR5IGZvciBOYXZpZ2Fi
bGUqU3RyaW5nLCBidXQgZm9yIENEYXRhKiBpdCBsZXRzIHlvdQorICAgICAgICBnZXQgdGhlIHN0
cmluZyB3aXRob3V0IHRoZSBDRGF0YSB3cmFwcGVyLiIiIgorICAgICAgICBpZiBhdHRyID09ICdz
dHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAiJyVzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAn
JXMnIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgYXR0cikKKworICAgIGRlZiBfX3VuaWNv
ZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmKS5kZWNvZGUoREVGQVVMVF9PVVRQ
VVRfRU5DT0RJTkcpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09V
VFBVVF9FTkNPRElORyk6CisgICAgICAgIGlmIGVuY29kaW5nOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYKKworY2xhc3MgQ0RhdGEoTmF2aWdhYmxlU3RyaW5nKToKKworICAgIGRlZiBfX3N0cl9f
KHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKKyAgICAgICAgcmV0dXJu
ICI8IVtDREFUQVslc11dPiIgJSBOYXZpZ2FibGVTdHJpbmcuX19zdHJfXyhzZWxmLCBlbmNvZGlu
ZykKKworY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9uKE5hdmlnYWJsZVN0cmluZyk6CisgICAg
ZGVmIF9fc3RyX18oc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpOgorICAg
ICAgICBvdXRwdXQgPSBzZWxmCisgICAgICAgIGlmICIlU09VUC1FTkNPRElORyUiIGluIG91dHB1
dDoKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuc3Vic3RpdHV0ZUVuY29kaW5nKG91dHB1dCwg
ZW5jb2RpbmcpCisgICAgICAgIHJldHVybiAiPD8lcz8+IiAlIHNlbGYudG9FbmNvZGluZyhvdXRw
dXQsIGVuY29kaW5nKQorCitjbGFzcyBDb21tZW50KE5hdmlnYWJsZVN0cmluZyk6CisgICAgZGVm
IF9fc3RyX18oc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpOgorICAgICAg
ICByZXR1cm4gIjwhLS0lcy0tPiIgJSBOYXZpZ2FibGVTdHJpbmcuX19zdHJfXyhzZWxmLCBlbmNv
ZGluZykKKworY2xhc3MgRGVjbGFyYXRpb24oTmF2aWdhYmxlU3RyaW5nKToKKyAgICBkZWYgX19z
dHJfXyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6CisgICAgICAgIHJl
dHVybiAiPCElcz4iICUgTmF2aWdhYmxlU3RyaW5nLl9fc3RyX18oc2VsZiwgZW5jb2RpbmcpCisK
K2NsYXNzIFRhZyhQYWdlRWxlbWVudCk6CisKKyAgICAiIiJSZXByZXNlbnRzIGEgZm91bmQgSFRN
TCB0YWcgd2l0aCBpdHMgYXR0cmlidXRlcyBhbmQgY29udGVudHMuIiIiCisKKyAgICBkZWYgX2lu
dmVydChoKToKKyAgICAgICAgIkNoZWFwIGZ1bmN0aW9uIHRvIGludmVydCBhIGhhc2guIgorICAg
ICAgICBpID0ge30KKyAgICAgICAgZm9yIGssdiBpbiBoLml0ZW1zKCk6CisgICAgICAgICAgICBp
W3ZdID0gaworICAgICAgICByZXR1cm4gaQorCisgICAgWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxf
Q0hBUlMgPSB7ICJhcG9zIiA6ICInIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInF1b3QiIDogJyInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiYW1wIiA6ICImIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImx0
IiA6ICI8IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImd0IiA6ICI+
IiB9CisKKyAgICBYTUxfU1BFQ0lBTF9DSEFSU19UT19FTlRJVElFUyA9IF9pbnZlcnQoWE1MX0VO
VElUSUVTX1RPX1NQRUNJQUxfQ0hBUlMpCisKKyAgICBkZWYgX2NvbnZlcnRFbnRpdGllcyhzZWxm
LCBtYXRjaCk6CisgICAgICAgICIiIlVzZWQgaW4gYSBjYWxsIHRvIHJlLnN1YiB0byByZXBsYWNl
IEhUTUwsIFhNTCwgYW5kIG51bWVyaWMKKyAgICAgICAgZW50aXRpZXMgd2l0aCB0aGUgYXBwcm9w
cmlhdGUgVW5pY29kZSBjaGFyYWN0ZXJzLiBJZiBIVE1MCisgICAgICAgIGVudGl0aWVzIGFyZSBi
ZWluZyBjb252ZXJ0ZWQsIGFueSB1bnJlY29nbml6ZWQgZW50aXRpZXMgYXJlCisgICAgICAgIGVz
Y2FwZWQuIiIiCisgICAgICAgIHggPSBtYXRjaC5ncm91cCgxKQorICAgICAgICBpZiBzZWxmLmNv
bnZlcnRIVE1MRW50aXRpZXMgYW5kIHggaW4gbmFtZTJjb2RlcG9pbnQ6CisgICAgICAgICAgICBy
ZXR1cm4gdW5pY2hyKG5hbWUyY29kZXBvaW50W3hdKQorICAgICAgICBlbGlmIHggaW4gc2VsZi5Y
TUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9DSEFSUzoKKyAgICAgICAgICAgIGlmIHNlbGYuY29udmVy
dFhNTEVudGl0aWVzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLlhNTF9FTlRJVElFU19U
T19TUEVDSUFMX0NIQVJTW3hdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJl
dHVybiB1JyYlczsnICUgeAorICAgICAgICBlbGlmIGxlbih4KSA+IDAgYW5kIHhbMF0gPT0gJyMn
OgorICAgICAgICAgICAgIyBIYW5kbGUgbnVtZXJpYyBlbnRpdGllcworICAgICAgICAgICAgaWYg
bGVuKHgpID4gMSBhbmQgeFsxXSA9PSAneCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNo
cihpbnQoeFsyOl0sIDE2KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHVuaWNocihpbnQoeFsxOl0pKQorCisgICAgICAgIGVsaWYgc2VsZi5lc2NhcGVVbnJlY29n
bml6ZWRFbnRpdGllczoKKyAgICAgICAgICAgIHJldHVybiB1JyZhbXA7JXM7JyAlIHgKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB1JyYlczsnICUgeAorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBhcnNlciwgbmFtZSwgYXR0cnM9Tm9uZSwgcGFyZW50PU5vbmUsCisgICAgICAg
ICAgICAgICAgIHByZXZpb3VzPU5vbmUpOgorICAgICAgICAiQmFzaWMgY29uc3RydWN0b3IuIgor
CisgICAgICAgICMgV2UgZG9uJ3QgYWN0dWFsbHkgc3RvcmUgdGhlIHBhcnNlciBvYmplY3Q6IHRo
YXQgbGV0cyBleHRyYWN0ZWQKKyAgICAgICAgIyBjaHVua3MgYmUgZ2FyYmFnZS1jb2xsZWN0ZWQK
KyAgICAgICAgc2VsZi5wYXJzZXJDbGFzcyA9IHBhcnNlci5fX2NsYXNzX18KKyAgICAgICAgc2Vs
Zi5pc1NlbGZDbG9zaW5nID0gcGFyc2VyLmlzU2VsZkNsb3NpbmdUYWcobmFtZSkKKyAgICAgICAg
c2VsZi5uYW1lID0gbmFtZQorICAgICAgICBpZiBhdHRycyBpcyBOb25lOgorICAgICAgICAgICAg
YXR0cnMgPSBbXQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoYXR0cnMsIGRpY3QpOgorICAgICAg
ICAgICAgYXR0cnMgPSBhdHRycy5pdGVtcygpCisgICAgICAgIHNlbGYuYXR0cnMgPSBhdHRycwor
ICAgICAgICBzZWxmLmNvbnRlbnRzID0gW10KKyAgICAgICAgc2VsZi5zZXR1cChwYXJlbnQsIHBy
ZXZpb3VzKQorICAgICAgICBzZWxmLmhpZGRlbiA9IEZhbHNlCisgICAgICAgIHNlbGYuY29udGFp
bnNTdWJzdGl0dXRpb25zID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb252ZXJ0SFRNTEVudGl0aWVz
ID0gcGFyc2VyLmNvbnZlcnRIVE1MRW50aXRpZXMKKyAgICAgICAgc2VsZi5jb252ZXJ0WE1MRW50
aXRpZXMgPSBwYXJzZXIuY29udmVydFhNTEVudGl0aWVzCisgICAgICAgIHNlbGYuZXNjYXBlVW5y
ZWNvZ25pemVkRW50aXRpZXMgPSBwYXJzZXIuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMKKwor
ICAgICAgICAjIENvbnZlcnQgYW55IEhUTUwsIFhNTCwgb3IgbnVtZXJpYyBlbnRpdGllcyBpbiB0
aGUgYXR0cmlidXRlIHZhbHVlcy4KKyAgICAgICAgY29udmVydCA9IGxhbWJkYShrLCB2YWwpOiAo
aywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUuc3ViKCImKCNcZCt8I3hb
MC05YS1mQS1GXSt8XHcrKTsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fY29udmVydEVudGl0aWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsKSkKKyAgICAgICAgc2VsZi5hdHRycyA9IG1hcChjb252ZXJ0LCBz
ZWxmLmF0dHJzKQorCisgICAgZGVmIGdldFN0cmluZyhzZWxmKToKKyAgICAgICAgaWYgKGxlbihz
ZWxmLmNvbnRlbnRzKSA9PSAxCisgICAgICAgICAgICBhbmQgaXNpbnN0YW5jZShzZWxmLmNvbnRl
bnRzWzBdLCBOYXZpZ2FibGVTdHJpbmcpKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbnRl
bnRzWzBdCisKKyAgICBkZWYgc2V0U3RyaW5nKHNlbGYsIHN0cmluZyk6CisgICAgICAgICIiIlJl
cGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWcgd2l0aCBhIHN0cmluZyIiIgorICAgICAgICBz
ZWxmLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hcHBlbmQoc3RyaW5nKQorCisgICAgc3RyaW5nID0g
cHJvcGVydHkoZ2V0U3RyaW5nLCBzZXRTdHJpbmcpCisKKyAgICBkZWYgZ2V0VGV4dChzZWxmLCBz
ZXBhcmF0b3I9dSIiKToKKyAgICAgICAgaWYgbm90IGxlbihzZWxmLmNvbnRlbnRzKToKKyAgICAg
ICAgICAgIHJldHVybiB1IiIKKyAgICAgICAgc3RvcE5vZGUgPSBzZWxmLl9sYXN0UmVjdXJzaXZl
Q2hpbGQoKS5uZXh0CisgICAgICAgIHN0cmluZ3MgPSBbXQorICAgICAgICBjdXJyZW50ID0gc2Vs
Zi5jb250ZW50c1swXQorICAgICAgICB3aGlsZSBjdXJyZW50IGlzIG5vdCBzdG9wTm9kZToKKyAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY3VycmVudCwgTmF2aWdhYmxlU3RyaW5nKToKKyAgICAg
ICAgICAgICAgICBzdHJpbmdzLmFwcGVuZChjdXJyZW50LnN0cmlwKCkpCisgICAgICAgICAgICBj
dXJyZW50ID0gY3VycmVudC5uZXh0CisgICAgICAgIHJldHVybiBzZXBhcmF0b3Iuam9pbihzdHJp
bmdzKQorCisgICAgdGV4dCA9IHByb3BlcnR5KGdldFRleHQpCisKKyAgICBkZWYgZ2V0KHNlbGYs
IGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhl
ICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlIHRhZywgb3IKKyAgICAgICAgdGhlIHZhbHVlIGdpdmVu
IGZvciAnZGVmYXVsdCcgaWYgaXQgZG9lc24ndCBoYXZlIHRoYXQKKyAgICAgICAgYXR0cmlidXRl
LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0QXR0ck1hcCgpLmdldChrZXksIGRlZmF1bHQp
CisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIkV4dHJhY3QgYWxsIGNoaWxkcmVu
LiIiIgorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jb250ZW50c1s6XToKKyAgICAgICAgICAg
IGNoaWxkLmV4dHJhY3QoKQorCisgICAgZGVmIGluZGV4KHNlbGYsIGVsZW1lbnQpOgorICAgICAg
ICBmb3IgaSwgY2hpbGQgaW4gZW51bWVyYXRlKHNlbGYuY29udGVudHMpOgorICAgICAgICAgICAg
aWYgY2hpbGQgaXMgZWxlbWVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCJUYWcuaW5kZXg6IGVsZW1lbnQgbm90IGluIHRhZyIpCisKKyAgICBk
ZWYgaGFzX2tleShzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0QXR0ck1hcCgp
Lmhhc19rZXkoa2V5KQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAg
ICIiInRhZ1trZXldIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAna2V5JyBhdHRyaWJ1dGUgZm9y
IHRoZSB0YWcsCisgICAgICAgIGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIGl0J3Mgbm90IHRo
ZXJlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0QXR0ck1hcCgpW2tleV0KKworICAgIGRl
ZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgIkl0ZXJhdGluZyBvdmVyIGEgdGFnIGl0ZXJhdGVz
IG92ZXIgaXRzIGNvbnRlbnRzLiIKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5jb250ZW50cykK
KworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAiVGhlIGxlbmd0aCBvZiBhIHRhZyBp
cyB0aGUgbGVuZ3RoIG9mIGl0cyBsaXN0IG9mIGNvbnRlbnRzLiIKKyAgICAgICAgcmV0dXJuIGxl
bihzZWxmLmNvbnRlbnRzKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB4KToKKyAgICAg
ICAgcmV0dXJuIHggaW4gc2VsZi5jb250ZW50cworCisgICAgZGVmIF9fbm9uemVyb19fKHNlbGYp
OgorICAgICAgICAiQSB0YWcgaXMgbm9uLU5vbmUgZXZlbiBpZiBpdCBoYXMgbm8gY29udGVudHMu
IgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwg
dmFsdWUpOgorICAgICAgICAiIiJTZXR0aW5nIHRhZ1trZXldIHNldHMgdGhlIHZhbHVlIG9mIHRo
ZSAna2V5JyBhdHRyaWJ1dGUgZm9yIHRoZQorICAgICAgICB0YWcuIiIiCisgICAgICAgIHNlbGYu
X2dldEF0dHJNYXAoKQorICAgICAgICBzZWxmLmF0dHJNYXBba2V5XSA9IHZhbHVlCisgICAgICAg
IGZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNlbGYuYXR0cnMp
KToKKyAgICAgICAgICAgIGlmIHNlbGYuYXR0cnNbaV1bMF0gPT0ga2V5OgorICAgICAgICAgICAg
ICAgIHNlbGYuYXR0cnNbaV0gPSAoa2V5LCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBmb3VuZCA9
IFRydWUKKyAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgc2VsZi5hdHRycy5hcHBl
bmQoKGtleSwgdmFsdWUpKQorICAgICAgICBzZWxmLl9nZXRBdHRyTWFwKClba2V5XSA9IHZhbHVl
CisKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgIkRlbGV0aW5nIHRh
Z1trZXldIGRlbGV0ZXMgYWxsICdrZXknIGF0dHJpYnV0ZXMgZm9yIHRoZSB0YWcuIgorICAgICAg
ICBmb3IgaXRlbSBpbiBzZWxmLmF0dHJzOgorICAgICAgICAgICAgaWYgaXRlbVswXSA9PSBrZXk6
CisgICAgICAgICAgICAgICAgc2VsZi5hdHRycy5yZW1vdmUoaXRlbSkKKyAgICAgICAgICAgICAg
ICAjV2UgZG9uJ3QgYnJlYWsgYmVjYXVzZSBiYWQgSFRNTCBjYW4gZGVmaW5lIHRoZSBzYW1lCisg
ICAgICAgICAgICAgICAgI2F0dHJpYnV0ZSBtdWx0aXBsZSB0aW1lcy4KKyAgICAgICAgICAgIHNl
bGYuX2dldEF0dHJNYXAoKQorICAgICAgICAgICAgaWYgc2VsZi5hdHRyTWFwLmhhc19rZXkoa2V5
KToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5hdHRyTWFwW2tleV0KKworICAgIGRlZiBfX2Nh
bGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDYWxsaW5nIGEgdGFnIGxp
a2UgYSBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIGl0cworICAgICAgICBmaW5kQWxs
KCkgbWV0aG9kLiBFZy4gdGFnKCdhJykgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRoZSBBIHRhZ3MK
KyAgICAgICAgZm91bmQgd2l0aGluIHRoaXMgdGFnLiIiIgorICAgICAgICByZXR1cm4gYXBwbHko
c2VsZi5maW5kQWxsLCBhcmdzLCBrd2FyZ3MpCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwg
dGFnKToKKyAgICAgICAgI3ByaW50ICJHZXRhdHRyICVzLiVzIiAlIChzZWxmLl9fY2xhc3NfXywg
dGFnKQorICAgICAgICBpZiBsZW4odGFnKSA+IDMgYW5kIHRhZy5yZmluZCgnVGFnJykgPT0gbGVu
KHRhZyktMzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbmQodGFnWzotM10pCisgICAgICAg
IGVsaWYgdGFnLmZpbmQoJ19fJykgIT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbmQo
dGFnKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgIiclcycgb2JqZWN0IGhhcyBubyBh
dHRyaWJ1dGUgJyVzJyIgJSAoc2VsZi5fX2NsYXNzX18sIHRhZykKKworICAgIGRlZiBfX2VxX18o
c2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIHRoaXMgdGFnIGhhcyB0
aGUgc2FtZSBuYW1lLCB0aGUgc2FtZSBhdHRyaWJ1dGVzLAorICAgICAgICBhbmQgdGhlIHNhbWUg
Y29udGVudHMgKHJlY3Vyc2l2ZWx5KSBhcyB0aGUgZ2l2ZW4gdGFnLgorCisgICAgICAgIE5PVEU6
IHJpZ2h0IG5vdyB0aGlzIHdpbGwgcmV0dXJuIGZhbHNlIGlmIHR3byB0YWdzIGhhdmUgdGhlCisg
ICAgICAgIHNhbWUgYXR0cmlidXRlcyBpbiBhIGRpZmZlcmVudCBvcmRlci4gU2hvdWxkIHRoaXMg
YmUgZml4ZWQ/IiIiCisgICAgICAgIGlmIG90aGVyIGlzIHNlbGY6CisgICAgICAgICAgICByZXR1
cm4gVHJ1ZQorICAgICAgICBpZiBub3QgaGFzYXR0cihvdGhlciwgJ25hbWUnKSBvciBub3QgaGFz
YXR0cihvdGhlciwgJ2F0dHJzJykgb3Igbm90IGhhc2F0dHIob3RoZXIsICdjb250ZW50cycpIG9y
IHNlbGYubmFtZSAhPSBvdGhlci5uYW1lIG9yIHNlbGYuYXR0cnMgIT0gb3RoZXIuYXR0cnMgb3Ig
bGVuKHNlbGYpICE9IGxlbihvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNlbGYuY29udGVudHMpKToKKyAgICAgICAgICAgIGlm
IHNlbGYuY29udGVudHNbaV0gIT0gb3RoZXIuY29udGVudHNbaV06CisgICAgICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19uZV9fKHNlbGYs
IG90aGVyKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmZiB0aGlzIHRhZyBpcyBub3QgaWRl
bnRpY2FsIHRvIHRoZSBvdGhlciB0YWcsCisgICAgICAgIGFzIGRlZmluZWQgaW4gX19lcV9fLiIi
IgorICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgIGRlZiBfX3JlcHJfXyhz
ZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6CisgICAgICAgICIiIlJlbmRl
cnMgdGhpcyB0YWcgYXMgYSBzdHJpbmcuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9fc3RyX18o
ZW5jb2RpbmcpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9fc3RyX18oTm9uZSkKKworICAgIEJBUkVfQU1QRVJTQU5EX09SX0JSQUNLRVQgPSByZS5j
b21waWxlKCIoWzw+XXwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKyAiJig/ISNcZCs7fCN4WzAtOWEtZkEtRl0rO3xcdys7KSIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICArICIpIikKKworICAgIGRlZiBfc3ViX2VudGl0eShz
ZWxmLCB4KToKKyAgICAgICAgIiIiVXNlZCB3aXRoIGEgcmVndWxhciBleHByZXNzaW9uIHRvIHN1
YnN0aXR1dGUgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIFhNTCBlbnRpdHkgZm9yIGFuIFhNTCBz
cGVjaWFsIGNoYXJhY3Rlci4iIiIKKyAgICAgICAgcmV0dXJuICImIiArIHNlbGYuWE1MX1NQRUNJ
QUxfQ0hBUlNfVE9fRU5USVRJRVNbeC5ncm91cCgwKVswXV0gKyAiOyIKKworICAgIGRlZiBfX3N0
cl9fKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAorICAgICAgICAgICAg
ICAgIHByZXR0eVByaW50PUZhbHNlLCBpbmRlbnRMZXZlbD0wKToKKyAgICAgICAgIiIiUmV0dXJu
cyBhIHN0cmluZyBvciBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdGFnIGFuZAorICAg
ICAgICBpdHMgY29udGVudHMuIFRvIGdldCBVbmljb2RlLCBwYXNzIE5vbmUgZm9yIGVuY29kaW5n
LgorCisgICAgICAgIE5PVEU6IHNpbmNlIFB5dGhvbidzIEhUTUwgcGFyc2VyIGNvbnN1bWVzIHdo
aXRlc3BhY2UsIHRoaXMKKyAgICAgICAgbWV0aG9kIGlzIG5vdCBjZXJ0YWluIHRvIHJlcHJvZHVj
ZSB0aGUgd2hpdGVzcGFjZSBwcmVzZW50IGluCisgICAgICAgIHRoZSBvcmlnaW5hbCBzdHJpbmcu
IiIiCisKKyAgICAgICAgZW5jb2RlZE5hbWUgPSBzZWxmLnRvRW5jb2Rpbmcoc2VsZi5uYW1lLCBl
bmNvZGluZykKKworICAgICAgICBhdHRycyA9IFtdCisgICAgICAgIGlmIHNlbGYuYXR0cnM6Cisg
ICAgICAgICAgICBmb3Iga2V5LCB2YWwgaW4gc2VsZi5hdHRyczoKKyAgICAgICAgICAgICAgICBm
bXQgPSAnJXM9IiVzIicKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgYmFzZXN0
cmluZyk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udGFpbnNTdWJzdGl0dXRpb25z
IGFuZCAnJVNPVVAtRU5DT0RJTkclJyBpbiB2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICB2
YWwgPSBzZWxmLnN1YnN0aXR1dGVFbmNvZGluZyh2YWwsIGVuY29kaW5nKQorCisgICAgICAgICAg
ICAgICAgICAgICMgVGhlIGF0dHJpYnV0ZSB2YWx1ZSBlaXRoZXI6CisgICAgICAgICAgICAgICAg
ICAgICMKKyAgICAgICAgICAgICAgICAgICAgIyAqIENvbnRhaW5zIG5vIGVtYmVkZGVkIGRvdWJs
ZSBxdW90ZXMgb3Igc2luZ2xlIHF1b3Rlcy4KKyAgICAgICAgICAgICAgICAgICAgIyAgIE5vIHBy
b2JsZW06IHdlIGVuY2xvc2UgaXQgaW4gZG91YmxlIHF1b3Rlcy4KKyAgICAgICAgICAgICAgICAg
ICAgIyAqIENvbnRhaW5zIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMuIE5vIHByb2JsZW06CisgICAg
ICAgICAgICAgICAgICAgICMgICBkb3VibGUgcXVvdGVzIHdvcmsgaGVyZSB0b28uCisgICAgICAg
ICAgICAgICAgICAgICMgKiBDb250YWlucyBlbWJlZGRlZCBkb3VibGUgcXVvdGVzLiBObyBwcm9i
bGVtOgorICAgICAgICAgICAgICAgICAgICAjICAgd2UgZW5jbG9zZSBpdCBpbiBzaW5nbGUgcXVv
dGVzLgorICAgICAgICAgICAgICAgICAgICAjICogRW1iZWRzIGJvdGggc2luZ2xlIF9hbmRfIGRv
dWJsZSBxdW90ZXMuIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgIyAgIGNhbid0IGhhcHBlbiBu
YXR1cmFsbHksIGJ1dCBpdCBjYW4gaGFwcGVuIGlmCisgICAgICAgICAgICAgICAgICAgICMgICB5
b3UgbW9kaWZ5IGFuIGF0dHJpYnV0ZSB2YWx1ZSBhZnRlciBwYXJzaW5nCisgICAgICAgICAgICAg
ICAgICAgICMgICB0aGUgZG9jdW1lbnQuIE5vdyB3ZSBoYXZlIGEgYml0IG9mIGEKKyAgICAgICAg
ICAgICAgICAgICAgIyAgIHByb2JsZW0uIFdlIHNvbHZlIGl0IGJ5IGVuY2xvc2luZyB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgIyAgIGF0dHJpYnV0ZSBpbiBzaW5nbGUgcXVvdGVzLCBhbmQgZXNj
YXBpbmcgYW55CisgICAgICAgICAgICAgICAgICAgICMgICBlbWJlZGRlZCBzaW5nbGUgcXVvdGVz
IHRvIFhNTCBlbnRpdGllcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgJyInIGluIHZhbDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZtdCA9ICIlcz0nJXMnIgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgIiciIGluIHZhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE86
IHJlcGxhY2Ugd2l0aCBhcG9zIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFw
cHJvcHJpYXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNl
KCInIiwgIiZzcXVvdDsiKQorCisgICAgICAgICAgICAgICAgICAgICMgTm93IHdlJ3JlIG9rYXkg
dy9yL3QgcXVvdGVzLiBCdXQgdGhlIGF0dHJpYnV0ZQorICAgICAgICAgICAgICAgICAgICAjIHZh
bHVlIG1pZ2h0IGFsc28gY29udGFpbiBhbmdsZSBicmFja2V0cywgb3IKKyAgICAgICAgICAgICAg
ICAgICAgIyBhbXBlcnNhbmRzIHRoYXQgYXJlbid0IHBhcnQgb2YgZW50aXRpZXMuIFdlIG5lZWQK
KyAgICAgICAgICAgICAgICAgICAgIyB0byBlc2NhcGUgdGhvc2UgdG8gWE1MIGVudGl0aWVzIHRv
by4KKyAgICAgICAgICAgICAgICAgICAgdmFsID0gc2VsZi5CQVJFX0FNUEVSU0FORF9PUl9CUkFD
S0VULnN1YihzZWxmLl9zdWJfZW50aXR5LCB2YWwpCisKKyAgICAgICAgICAgICAgICBhdHRycy5h
cHBlbmQoZm10ICUgKHNlbGYudG9FbmNvZGluZyhrZXksIGVuY29kaW5nKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9FbmNvZGluZyh2YWwsIGVuY29kaW5nKSkp
CisgICAgICAgIGNsb3NlID0gJycKKyAgICAgICAgY2xvc2VUYWcgPSAnJworICAgICAgICBpZiBz
ZWxmLmlzU2VsZkNsb3Npbmc6CisgICAgICAgICAgICBjbG9zZSA9ICcgLycKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGNsb3NlVGFnID0gJzwvJXM+JyAlIGVuY29kZWROYW1lCisKKyAgICAg
ICAgaW5kZW50VGFnLCBpbmRlbnRDb250ZW50cyA9IDAsIDAKKyAgICAgICAgaWYgcHJldHR5UHJp
bnQ6CisgICAgICAgICAgICBpbmRlbnRUYWcgPSBpbmRlbnRMZXZlbAorICAgICAgICAgICAgc3Bh
Y2UgPSAoJyAnICogKGluZGVudFRhZy0xKSkKKyAgICAgICAgICAgIGluZGVudENvbnRlbnRzID0g
aW5kZW50VGFnICsgMQorICAgICAgICBjb250ZW50cyA9IHNlbGYucmVuZGVyQ29udGVudHMoZW5j
b2RpbmcsIHByZXR0eVByaW50LCBpbmRlbnRDb250ZW50cykKKyAgICAgICAgaWYgc2VsZi5oaWRk
ZW46CisgICAgICAgICAgICBzID0gY29udGVudHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHMgPSBbXQorICAgICAgICAgICAgYXR0cmlidXRlU3RyaW5nID0gJycKKyAgICAgICAgICAgIGlm
IGF0dHJzOgorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVN0cmluZyA9ICcgJyArICcgJy5qb2lu
KGF0dHJzKQorICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQ6CisgICAgICAgICAgICAgICAgcy5h
cHBlbmQoc3BhY2UpCisgICAgICAgICAgICBzLmFwcGVuZCgnPCVzJXMlcz4nICUgKGVuY29kZWRO
YW1lLCBhdHRyaWJ1dGVTdHJpbmcsIGNsb3NlKSkKKyAgICAgICAgICAgIGlmIHByZXR0eVByaW50
OgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCisgICAgICAgICAgICBzLmFwcGVuZChj
b250ZW50cykKKyAgICAgICAgICAgIGlmIHByZXR0eVByaW50IGFuZCBjb250ZW50cyBhbmQgY29u
dGVudHNbLTFdICE9ICJcbiI6CisgICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAgICAg
ICAgICAgIGlmIHByZXR0eVByaW50IGFuZCBjbG9zZVRhZzoKKyAgICAgICAgICAgICAgICBzLmFw
cGVuZChzcGFjZSkKKyAgICAgICAgICAgIHMuYXBwZW5kKGNsb3NlVGFnKQorICAgICAgICAgICAg
aWYgcHJldHR5UHJpbnQgYW5kIGNsb3NlVGFnIGFuZCBzZWxmLm5leHRTaWJsaW5nOgorICAgICAg
ICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCisgICAgICAgICAgICBzID0gJycuam9pbihzKQorICAg
ICAgICByZXR1cm4gcworCisgICAgZGVmIGRlY29tcG9zZShzZWxmKToKKyAgICAgICAgIiIiUmVj
dXJzaXZlbHkgZGVzdHJveXMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdHJlZS4iIiIKKyAgICAgICAg
c2VsZi5leHRyYWN0KCkKKyAgICAgICAgaWYgbGVuKHNlbGYuY29udGVudHMpID09IDA6CisgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgY3VycmVudCA9IHNlbGYuY29udGVudHNbMF0KKyAgICAg
ICAgd2hpbGUgY3VycmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5leHQgPSBjdXJyZW50
Lm5leHQKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY3VycmVudCwgVGFnKToKKyAgICAgICAg
ICAgICAgICBkZWwgY3VycmVudC5jb250ZW50c1s6XQorICAgICAgICAgICAgY3VycmVudC5wYXJl
bnQgPSBOb25lCisgICAgICAgICAgICBjdXJyZW50LnByZXZpb3VzID0gTm9uZQorICAgICAgICAg
ICAgY3VycmVudC5wcmV2aW91c1NpYmxpbmcgPSBOb25lCisgICAgICAgICAgICBjdXJyZW50Lm5l
eHQgPSBOb25lCisgICAgICAgICAgICBjdXJyZW50Lm5leHRTaWJsaW5nID0gTm9uZQorICAgICAg
ICAgICAgY3VycmVudCA9IG5leHQKKworICAgIGRlZiBwcmV0dGlmeShzZWxmLCBlbmNvZGluZz1E
RUZBVUxUX09VVFBVVF9FTkNPRElORyk6CisgICAgICAgIHJldHVybiBzZWxmLl9fc3RyX18oZW5j
b2RpbmcsIFRydWUpCisKKyAgICBkZWYgcmVuZGVyQ29udGVudHMoc2VsZiwgZW5jb2Rpbmc9REVG
QVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAgICAgICAgICAgICAgICAgIHByZXR0eVByaW50
PUZhbHNlLCBpbmRlbnRMZXZlbD0wKToKKyAgICAgICAgIiIiUmVuZGVycyB0aGUgY29udGVudHMg
b2YgdGhpcyB0YWcgYXMgYSBzdHJpbmcgaW4gdGhlIGdpdmVuCisgICAgICAgIGVuY29kaW5nLiBJ
ZiBlbmNvZGluZyBpcyBOb25lLCByZXR1cm5zIGEgVW5pY29kZSBzdHJpbmcuLiIiIgorICAgICAg
ICBzPVtdCisgICAgICAgIGZvciBjIGluIHNlbGY6CisgICAgICAgICAgICB0ZXh0ID0gTm9uZQor
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjLCBOYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICAg
ICAgICAgIHRleHQgPSBjLl9fc3RyX18oZW5jb2RpbmcpCisgICAgICAgICAgICBlbGlmIGlzaW5z
dGFuY2UoYywgVGFnKToKKyAgICAgICAgICAgICAgICBzLmFwcGVuZChjLl9fc3RyX18oZW5jb2Rp
bmcsIHByZXR0eVByaW50LCBpbmRlbnRMZXZlbCkpCisgICAgICAgICAgICBpZiB0ZXh0IGFuZCBw
cmV0dHlQcmludDoKKyAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdHJpcCgpCisgICAgICAg
ICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgICAgIGlmIHByZXR0eVByaW50OgorICAgICAgICAg
ICAgICAgICAgICBzLmFwcGVuZCgiICIgKiAoaW5kZW50TGV2ZWwtMSkpCisgICAgICAgICAgICAg
ICAgcy5hcHBlbmQodGV4dCkKKyAgICAgICAgICAgICAgICBpZiBwcmV0dHlQcmludDoKKyAgICAg
ICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAgICAgICAgcmV0dXJuICcnLmpvaW4ocykK
KworICAgICNTb3VwIG1ldGhvZHMKKworICAgIGRlZiBmaW5kKHNlbGYsIG5hbWU9Tm9uZSwgYXR0
cnM9e30sIHJlY3Vyc2l2ZT1UcnVlLCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgKiprd2FyZ3Mp
OgorICAgICAgICAiIiJSZXR1cm4gb25seSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhpcyBUYWcgbWF0
Y2hpbmcgdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiIiIgorICAgICAgICByID0gTm9uZQor
ICAgICAgICBsID0gc2VsZi5maW5kQWxsKG5hbWUsIGF0dHJzLCByZWN1cnNpdmUsIHRleHQsIDEs
ICoqa3dhcmdzKQorICAgICAgICBpZiBsOgorICAgICAgICAgICAgciA9IGxbMF0KKyAgICAgICAg
cmV0dXJuIHIKKyAgICBmaW5kQ2hpbGQgPSBmaW5kCisKKyAgICBkZWYgZmluZEFsbChzZWxmLCBu
YW1lPU5vbmUsIGF0dHJzPXt9LCByZWN1cnNpdmU9VHJ1ZSwgdGV4dD1Ob25lLAorICAgICAgICAg
ICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiRXh0cmFjdHMgYSBsaXN0
IG9mIFRhZyBvYmplY3RzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiAg
WW91IGNhbiBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBUYWcgYW5kIGFueQorICAgICAgICBhdHRy
aWJ1dGVzIHlvdSB3YW50IHRoZSBUYWcgdG8gaGF2ZS4KKworICAgICAgICBUaGUgdmFsdWUgb2Yg
YSBrZXktdmFsdWUgcGFpciBpbiB0aGUgJ2F0dHJzJyBtYXAgY2FuIGJlIGEKKyAgICAgICAgc3Ry
aW5nLCBhIGxpc3Qgb2Ygc3RyaW5ncywgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LCBvciBh
CisgICAgICAgIGNhbGxhYmxlIHRoYXQgdGFrZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgd2hldGhl
ciBvciBub3QgdGhlCisgICAgICAgIHN0cmluZyBtYXRjaGVzIGZvciBzb21lIGN1c3RvbSBkZWZp
bml0aW9uIG9mICdtYXRjaGVzJy4gVGhlCisgICAgICAgIHNhbWUgaXMgdHJ1ZSBvZiB0aGUgdGFn
IG5hbWUuIiIiCisgICAgICAgIGdlbmVyYXRvciA9IHNlbGYucmVjdXJzaXZlQ2hpbGRHZW5lcmF0
b3IKKyAgICAgICAgaWYgbm90IHJlY3Vyc2l2ZToKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHNl
bGYuY2hpbGRHZW5lcmF0b3IKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0
cnMsIHRleHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdzKQorICAgIGZpbmRDaGlsZHJlbiA9
IGZpbmRBbGwKKworICAgICMgUHJlLTMueCBjb21wYXRpYmlsaXR5IG1ldGhvZHMKKyAgICBmaXJz
dCA9IGZpbmQKKyAgICBmZXRjaCA9IGZpbmRBbGwKKworICAgIGRlZiBmZXRjaFRleHQoc2VsZiwg
dGV4dD1Ob25lLCByZWN1cnNpdmU9VHJ1ZSwgbGltaXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBz
ZWxmLmZpbmRBbGwodGV4dD10ZXh0LCByZWN1cnNpdmU9cmVjdXJzaXZlLCBsaW1pdD1saW1pdCkK
KworICAgIGRlZiBmaXJzdFRleHQoc2VsZiwgdGV4dD1Ob25lLCByZWN1cnNpdmU9VHJ1ZSk6Cisg
ICAgICAgIHJldHVybiBzZWxmLmZpbmQodGV4dD10ZXh0LCByZWN1cnNpdmU9cmVjdXJzaXZlKQor
CisgICAgI1ByaXZhdGUgbWV0aG9kcworCisgICAgZGVmIF9nZXRBdHRyTWFwKHNlbGYpOgorICAg
ICAgICAiIiJJbml0aWFsaXplcyBhIG1hcCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRhZydzIGF0
dHJpYnV0ZXMsCisgICAgICAgIGlmIG5vdCBhbHJlYWR5IGluaXRpYWxpemVkLiIiIgorICAgICAg
ICBpZiBub3QgZ2V0YXR0cihzZWxmLCAnYXR0ck1hcCcpOgorICAgICAgICAgICAgc2VsZi5hdHRy
TWFwID0ge30KKyAgICAgICAgICAgIGZvciAoa2V5LCB2YWx1ZSkgaW4gc2VsZi5hdHRyczoKKyAg
ICAgICAgICAgICAgICBzZWxmLmF0dHJNYXBba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiBz
ZWxmLmF0dHJNYXAKKworICAgICNHZW5lcmF0b3IgbWV0aG9kcworICAgIGRlZiBjaGlsZEdlbmVy
YXRvcihzZWxmKToKKyAgICAgICAgIyBKdXN0IHVzZSB0aGUgaXRlcmF0b3IgZnJvbSB0aGUgY29u
dGVudHMKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5jb250ZW50cykKKworICAgIGRlZiByZWN1
cnNpdmVDaGlsZEdlbmVyYXRvcihzZWxmKToKKyAgICAgICAgaWYgbm90IGxlbihzZWxmLmNvbnRl
bnRzKToKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgc3RvcE5vZGUg
PSBzZWxmLl9sYXN0UmVjdXJzaXZlQ2hpbGQoKS5uZXh0CisgICAgICAgIGN1cnJlbnQgPSBzZWxm
LmNvbnRlbnRzWzBdCisgICAgICAgIHdoaWxlIGN1cnJlbnQgaXMgbm90IHN0b3BOb2RlOgorICAg
ICAgICAgICAgeWllbGQgY3VycmVudAorICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4
dAorCisKKyMgTmV4dCwgYSBjb3VwbGUgY2xhc3NlcyB0byByZXByZXNlbnQgcXVlcmllcyBhbmQg
dGhlaXIgcmVzdWx0cy4KK2NsYXNzIFNvdXBTdHJhaW5lcjoKKyAgICAiIiJFbmNhcHN1bGF0ZXMg
YSBudW1iZXIgb2Ygd2F5cyBvZiBtYXRjaGluZyBhIG1hcmt1cCBlbGVtZW50ICh0YWcgb3IKKyAg
ICB0ZXh0KS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9
LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAg
ICBpZiBpc2luc3RhbmNlKGF0dHJzLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGt3YXJnc1sn
Y2xhc3MnXSA9IF9tYXRjaF9jc3NfY2xhc3MoYXR0cnMpCisgICAgICAgICAgICBhdHRycyA9IE5v
bmUKKyAgICAgICAgaWYga3dhcmdzOgorICAgICAgICAgICAgaWYgYXR0cnM6CisgICAgICAgICAg
ICAgICAgYXR0cnMgPSBhdHRycy5jb3B5KCkKKyAgICAgICAgICAgICAgICBhdHRycy51cGRhdGUo
a3dhcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhdHRycyA9IGt3YXJn
cworICAgICAgICBzZWxmLmF0dHJzID0gYXR0cnMKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAor
CisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYudGV4dDoKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLnRleHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAi
JXN8JXMiICUgKHNlbGYubmFtZSwgc2VsZi5hdHRycykKKworICAgIGRlZiBzZWFyY2hUYWcoc2Vs
ZiwgbWFya3VwTmFtZT1Ob25lLCBtYXJrdXBBdHRycz17fSk6CisgICAgICAgIGZvdW5kID0gTm9u
ZQorICAgICAgICBtYXJrdXAgPSBOb25lCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwTmFt
ZSwgVGFnKToKKyAgICAgICAgICAgIG1hcmt1cCA9IG1hcmt1cE5hbWUKKyAgICAgICAgICAgIG1h
cmt1cEF0dHJzID0gbWFya3VwCisgICAgICAgIGNhbGxGdW5jdGlvbldpdGhUYWdEYXRhID0gY2Fs
bGFibGUoc2VsZi5uYW1lKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBu
b3QgaXNpbnN0YW5jZShtYXJrdXBOYW1lLCBUYWcpCisKKyAgICAgICAgaWYgKG5vdCBzZWxmLm5h
bWUpIFwKKyAgICAgICAgICAgICAgIG9yIGNhbGxGdW5jdGlvbldpdGhUYWdEYXRhIFwKKyAgICAg
ICAgICAgICAgIG9yIChtYXJrdXAgYW5kIHNlbGYuX21hdGNoZXMobWFya3VwLCBzZWxmLm5hbWUp
KSBcCisgICAgICAgICAgICAgICBvciAobm90IG1hcmt1cCBhbmQgc2VsZi5fbWF0Y2hlcyhtYXJr
dXBOYW1lLCBzZWxmLm5hbWUpKToKKyAgICAgICAgICAgIGlmIGNhbGxGdW5jdGlvbldpdGhUYWdE
YXRhOgorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5uYW1lKG1hcmt1cE5hbWUsIG1hcmt1
cEF0dHJzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IFRydWUK
KyAgICAgICAgICAgICAgICBtYXJrdXBBdHRyTWFwID0gTm9uZQorICAgICAgICAgICAgICAgIGZv
ciBhdHRyLCBtYXRjaEFnYWluc3QgaW4gc2VsZi5hdHRycy5pdGVtcygpOgorICAgICAgICAgICAg
ICAgICAgICBpZiBub3QgbWFya3VwQXR0ck1hcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBoYXNhdHRyKG1hcmt1cEF0dHJzLCAnZ2V0Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFya3VwQXR0ck1hcCA9IG1hcmt1cEF0dHJzCisgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBBdHRyTWFwID0ge30KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igayx2IGluIG1hcmt1cEF0dHJzOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBBdHRyTWFwW2tdID0gdgorICAgICAgICAg
ICAgICAgICAgICBhdHRyVmFsdWUgPSBtYXJrdXBBdHRyTWFwLmdldChhdHRyKQorICAgICAgICAg
ICAgICAgICAgICBpZiBub3Qgc2VsZi5fbWF0Y2hlcyhhdHRyVmFsdWUsIG1hdGNoQWdhaW5zdCk6
CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IEZhbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgaWYg
bWFya3VwOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcmt1cAorICAgICAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwTmFtZQorICAgICAg
ICByZXR1cm4gZm91bmQKKworICAgIGRlZiBzZWFyY2goc2VsZiwgbWFya3VwKToKKyAgICAgICAg
I3ByaW50ICdsb29raW5nIGZvciAlcyBpbiAlcycgJSAoc2VsZiwgbWFya3VwKQorICAgICAgICBm
b3VuZCA9IE5vbmUKKyAgICAgICAgIyBJZiBnaXZlbiBhIGxpc3Qgb2YgaXRlbXMsIHNjYW4gaXQg
Zm9yIGEgdGV4dCBlbGVtZW50IHRoYXQKKyAgICAgICAgIyBtYXRjaGVzLgorICAgICAgICBpZiBo
YXNhdHRyKG1hcmt1cCwgIl9faXRlcl9fIikgXAorICAgICAgICAgICAgICAgIGFuZCBub3QgaXNp
bnN0YW5jZShtYXJrdXAsIFRhZyk6CisgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBtYXJrdXA6
CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBOYXZpZ2FibGVTdHJpbmcp
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYuc2VhcmNoKGVsZW1lbnQpOgorICAg
ICAgICAgICAgICAgICAgICBmb3VuZCA9IGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgIyBJZiBpdCdzIGEgVGFnLCBtYWtlIHN1cmUgaXRzIG5hbWUgb3IgYXR0cmli
dXRlcyBtYXRjaC4KKyAgICAgICAgIyBEb24ndCBib3RoZXIgd2l0aCBUYWdzIGlmIHdlJ3JlIHNl
YXJjaGluZyBmb3IgdGV4dC4KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG1hcmt1cCwgVGFnKToK
KyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnRleHQ6CisgICAgICAgICAgICAgICAgZm91bmQgPSBz
ZWxmLnNlYXJjaFRhZyhtYXJrdXApCisgICAgICAgICMgSWYgaXQncyB0ZXh0LCBtYWtlIHN1cmUg
dGhlIHRleHQgbWF0Y2hlcy4KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG1hcmt1cCwgTmF2aWdh
YmxlU3RyaW5nKSBvciBcCisgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UobWFya3VwLCBiYXNl
c3RyaW5nKToKKyAgICAgICAgICAgIGlmIHNlbGYuX21hdGNoZXMobWFya3VwLCBzZWxmLnRleHQp
OgorICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByYWlzZSBFeGNlcHRpb24sICJJIGRvbid0IGtub3cgaG93IHRvIG1hdGNoIGFnYWluc3Qg
YSAlcyIgXAorICAgICAgICAgICAgICAgICAgJSBtYXJrdXAuX19jbGFzc19fCisgICAgICAgIHJl
dHVybiBmb3VuZAorCisgICAgZGVmIF9tYXRjaGVzKHNlbGYsIG1hcmt1cCwgbWF0Y2hBZ2FpbnN0
KToKKyAgICAgICAgI3ByaW50ICJNYXRjaGluZyAlcyBhZ2FpbnN0ICVzIiAlIChtYXJrdXAsIG1h
dGNoQWdhaW5zdCkKKyAgICAgICAgcmVzdWx0ID0gRmFsc2UKKyAgICAgICAgaWYgbWF0Y2hBZ2Fp
bnN0IGlzIFRydWU6CisgICAgICAgICAgICByZXN1bHQgPSBtYXJrdXAgaXMgbm90IE5vbmUKKyAg
ICAgICAgZWxpZiBjYWxsYWJsZShtYXRjaEFnYWluc3QpOgorICAgICAgICAgICAgcmVzdWx0ID0g
bWF0Y2hBZ2FpbnN0KG1hcmt1cCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNDdXN0b20g
bWF0Y2ggbWV0aG9kcyB0YWtlIHRoZSB0YWcgYXMgYW4gYXJndW1lbnQsIGJ1dCBhbGwKKyAgICAg
ICAgICAgICNvdGhlciB3YXlzIG9mIG1hdGNoaW5nIG1hdGNoIHRoZSB0YWcgbmFtZSBhcyBhIHN0
cmluZy4KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCBUYWcpOgorICAgICAgICAg
ICAgICAgIG1hcmt1cCA9IG1hcmt1cC5uYW1lCisgICAgICAgICAgICBpZiBtYXJrdXAgYW5kIG5v
dCBpc2luc3RhbmNlKG1hcmt1cCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgbWFya3Vw
ID0gdW5pY29kZShtYXJrdXApCisgICAgICAgICAgICAjTm93IHdlIGtub3cgdGhhdCBjaHVuayBp
cyBlaXRoZXIgYSBzdHJpbmcsIG9yIE5vbmUuCisgICAgICAgICAgICBpZiBoYXNhdHRyKG1hdGNo
QWdhaW5zdCwgJ21hdGNoJyk6CisgICAgICAgICAgICAgICAgIyBJdCdzIGEgcmVnZXhwIG9iamVj
dC4KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXJrdXAgYW5kIG1hdGNoQWdhaW5zdC5zZWFy
Y2gobWFya3VwKQorICAgICAgICAgICAgZWxpZiBoYXNhdHRyKG1hdGNoQWdhaW5zdCwgJ19faXRl
cl9fJyk6ICMgbGlzdC1saWtlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFya3VwIGluIG1h
dGNoQWdhaW5zdAorICAgICAgICAgICAgZWxpZiBoYXNhdHRyKG1hdGNoQWdhaW5zdCwgJ2l0ZW1z
Jyk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFya3VwLmhhc19rZXkobWF0Y2hBZ2FpbnN0
KQorICAgICAgICAgICAgZWxpZiBtYXRjaEFnYWluc3QgYW5kIGlzaW5zdGFuY2UobWFya3VwLCBi
YXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29k
ZSk6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoQWdhaW5zdCA9IHVuaWNvZGUobWF0Y2hBZ2Fp
bnN0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoQWdh
aW5zdCA9IHN0cihtYXRjaEFnYWluc3QpCisKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHQ6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbWF0Y2hBZ2FpbnN0ID09IG1hcmt1cAorICAgICAgICBy
ZXR1cm4gcmVzdWx0CisKK2NsYXNzIFJlc3VsdFNldChsaXN0KToKKyAgICAiIiJBIFJlc3VsdFNl
dCBpcyBqdXN0IGEgbGlzdCB0aGF0IGtlZXBzIHRyYWNrIG9mIHRoZSBTb3VwU3RyYWluZXIKKyAg
ICB0aGF0IGNyZWF0ZWQgaXQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSk6Cisg
ICAgICAgIGxpc3QuX19pbml0X18oW10pCisgICAgICAgIHNlbGYuc291cmNlID0gc291cmNlCisK
KyMgTm93LCBzb21lIGhlbHBlciBmdW5jdGlvbnMuCisKK2RlZiBidWlsZFRhZ01hcChkZWZhdWx0
LCAqYXJncyk6CisgICAgIiIiVHVybnMgYSBsaXN0IG9mIG1hcHMsIGxpc3RzLCBvciBzY2FsYXJz
IGludG8gYSBzaW5nbGUgbWFwLgorICAgIFVzZWQgdG8gYnVpbGQgdGhlIFNFTEZfQ0xPU0lOR19U
QUdTLCBORVNUQUJMRV9UQUdTLCBhbmQKKyAgICBORVNUSU5HX1JFU0VUX1RBR1MgbWFwcyBvdXQg
b2YgbGlzdHMgYW5kIHBhcnRpYWwgbWFwcy4iIiIKKyAgICBidWlsdCA9IHt9CisgICAgZm9yIHBv
cnRpb24gaW4gYXJnczoKKyAgICAgICAgaWYgaGFzYXR0cihwb3J0aW9uLCAnaXRlbXMnKToKKyAg
ICAgICAgICAgICNJdCdzIGEgbWFwLiBNZXJnZSBpdC4KKyAgICAgICAgICAgIGZvciBrLHYgaW4g
cG9ydGlvbi5pdGVtcygpOgorICAgICAgICAgICAgICAgIGJ1aWx0W2tdID0gdgorICAgICAgICBl
bGlmIGhhc2F0dHIocG9ydGlvbiwgJ19faXRlcl9fJyk6ICMgaXMgYSBsaXN0CisgICAgICAgICAg
ICAjSXQncyBhIGxpc3QuIE1hcCBlYWNoIGl0ZW0gdG8gdGhlIGRlZmF1bHQuCisgICAgICAgICAg
ICBmb3IgayBpbiBwb3J0aW9uOgorICAgICAgICAgICAgICAgIGJ1aWx0W2tdID0gZGVmYXVsdAor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgI0l0J3MgYSBzY2FsYXIuIE1hcCBpdCB0byB0aGUg
ZGVmYXVsdC4KKyAgICAgICAgICAgIGJ1aWx0W3BvcnRpb25dID0gZGVmYXVsdAorICAgIHJldHVy
biBidWlsdAorCisjIE5vdywgdGhlIHBhcnNlciBjbGFzc2VzLgorCitjbGFzcyBCZWF1dGlmdWxT
dG9uZVNvdXAoVGFnLCBTR01MUGFyc2VyKToKKworICAgICIiIlRoaXMgY2xhc3MgY29udGFpbnMg
dGhlIGJhc2ljIHBhcnNlciBhbmQgc2VhcmNoIGNvZGUuIEl0IGRlZmluZXMKKyAgICBhIHBhcnNl
ciB0aGF0IGtub3dzIG5vdGhpbmcgYWJvdXQgdGFnIGJlaGF2aW9yIGV4Y2VwdCBmb3IgdGhlCisg
ICAgZm9sbG93aW5nOgorCisgICAgICBZb3UgY2FuJ3QgY2xvc2UgYSB0YWcgd2l0aG91dCBjbG9z
aW5nIGFsbCB0aGUgdGFncyBpdCBlbmNsb3Nlcy4KKyAgICAgIFRoYXQgaXMsICI8Zm9vPjxiYXI+
PC9mb28+IiBhY3R1YWxseSBtZWFucworICAgICAgIjxmb28+PGJhcj48L2Jhcj48L2Zvbz4iLgor
CisgICAgW0Fub3RoZXIgcG9zc2libGUgZXhwbGFuYXRpb24gaXMgIjxmb28+PGJhciAvPjwvZm9v
PiIsIGJ1dCBzaW5jZQorICAgIHRoaXMgY2xhc3MgZGVmaW5lcyBubyBTRUxGX0NMT1NJTkdfVEFH
UywgaXQgd2lsbCBuZXZlciB1c2UgdGhhdAorICAgIGV4cGxhbmF0aW9uLl0KKworICAgIFRoaXMg
Y2xhc3MgaXMgdXNlZnVsIGZvciBwYXJzaW5nIFhNTCBvciBtYWRlLXVwIG1hcmt1cCBsYW5ndWFn
ZXMsCisgICAgb3Igd2hlbiBCZWF1dGlmdWxTb3VwIG1ha2VzIGFuIGFzc3VtcHRpb24gY291bnRl
ciB0byB3aGF0IHlvdSB3ZXJlCisgICAgZXhwZWN0aW5nLiIiIgorCisgICAgU0VMRl9DTE9TSU5H
X1RBR1MgPSB7fQorICAgIE5FU1RBQkxFX1RBR1MgPSB7fQorICAgIFJFU0VUX05FU1RJTkdfVEFH
UyA9IHt9CisgICAgUVVPVEVfVEFHUyA9IHt9CisgICAgUFJFU0VSVkVfV0hJVEVTUEFDRV9UQUdT
ID0gW10KKworICAgIE1BUktVUF9NQVNTQUdFID0gWyhyZS5jb21waWxlKCcoPFtePD5dKikvPicp
LAorICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogeC5ncm91cCgxKSArICcgLz4nKSwK
KyAgICAgICAgICAgICAgICAgICAgICAocmUuY29tcGlsZSgnPCFccysoW148Pl0qKT4nKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHg6ICc8IScgKyB4Lmdyb3VwKDEpICsgJz4nKQor
ICAgICAgICAgICAgICAgICAgICAgIF0KKworICAgIFJPT1RfVEFHX05BTUUgPSB1J1tkb2N1bWVu
dF0nCisKKyAgICBIVE1MX0VOVElUSUVTID0gImh0bWwiCisgICAgWE1MX0VOVElUSUVTID0gInht
bCIKKyAgICBYSFRNTF9FTlRJVElFUyA9ICJ4aHRtbCIKKyAgICAjIFRPRE86IFRoaXMgb25seSBl
eGlzdHMgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5CisgICAgQUxMX0VOVElUSUVTID0gWEhU
TUxfRU5USVRJRVMKKworICAgICMgVXNlZCB3aGVuIGRldGVybWluaW5nIHdoZXRoZXIgYSB0ZXh0
IG5vZGUgaXMgYWxsIHdoaXRlc3BhY2UgYW5kCisgICAgIyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBh
IHNpbmdsZSBzcGFjZS4gQSB0ZXh0IG5vZGUgdGhhdCBjb250YWlucworICAgICMgZmFuY3kgVW5p
Y29kZSBzcGFjZXMgKHVzdWFsbHkgbm9uLWJyZWFraW5nKSBzaG91bGQgYmUgbGVmdAorICAgICMg
YWxvbmUuCisgICAgU1RSSVBfQVNDSUlfU1BBQ0VTID0geyA5OiBOb25lLCAxMDogTm9uZSwgMTI6
IE5vbmUsIDEzOiBOb25lLCAzMjogTm9uZSwgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1h
cmt1cD0iIiwgcGFyc2VPbmx5VGhlc2U9Tm9uZSwgZnJvbUVuY29kaW5nPU5vbmUsCisgICAgICAg
ICAgICAgICAgIG1hcmt1cE1hc3NhZ2U9VHJ1ZSwgc21hcnRRdW90ZXNUbz1YTUxfRU5USVRJRVMs
CisgICAgICAgICAgICAgICAgIGNvbnZlcnRFbnRpdGllcz1Ob25lLCBzZWxmQ2xvc2luZ1RhZ3M9
Tm9uZSwgaXNIVE1MPUZhbHNlKToKKyAgICAgICAgIiIiVGhlIFNvdXAgb2JqZWN0IGlzIGluaXRp
YWxpemVkIGFzIHRoZSAncm9vdCB0YWcnLCBhbmQgdGhlCisgICAgICAgIHByb3ZpZGVkIG1hcmt1
cCAod2hpY2ggY2FuIGJlIGEgc3RyaW5nIG9yIGEgZmlsZS1saWtlIG9iamVjdCkKKyAgICAgICAg
aXMgZmVkIGludG8gdGhlIHVuZGVybHlpbmcgcGFyc2VyLgorCisgICAgICAgIHNnbWxsaWIgd2ls
bCBwcm9jZXNzIG1vc3QgYmFkIEhUTUwsIGFuZCB0aGUgQmVhdXRpZnVsU291cAorICAgICAgICBj
bGFzcyBoYXMgc29tZSB0cmlja3MgZm9yIGRlYWxpbmcgd2l0aCBzb21lIEhUTUwgdGhhdCBraWxs
cworICAgICAgICBzZ21sbGliLCBidXQgQmVhdXRpZnVsIFNvdXAgY2FuIG5vbmV0aGVsZXNzIGNo
b2tlIG9yIGxvc2UgZGF0YQorICAgICAgICBpZiB5b3VyIGRhdGEgdXNlcyBzZWxmLWNsb3Npbmcg
dGFncyBvciBkZWNsYXJhdGlvbnMKKyAgICAgICAgaW5jb3JyZWN0bHkuCisKKyAgICAgICAgQnkg
ZGVmYXVsdCwgQmVhdXRpZnVsIFNvdXAgdXNlcyByZWdleGVzIHRvIHNhbml0aXplIGlucHV0LAor
ICAgICAgICBhdm9pZGluZyB0aGUgdmFzdCBtYWpvcml0eSBvZiB0aGVzZSBwcm9ibGVtcy4gSWYg
dGhlIHByb2JsZW1zCisgICAgICAgIGRvbid0IGFwcGx5IHRvIHlvdSwgcGFzcyBpbiBGYWxzZSBm
b3IgbWFya3VwTWFzc2FnZSwgYW5kCisgICAgICAgIHlvdSdsbCBnZXQgYmV0dGVyIHBlcmZvcm1h
bmNlLgorCisgICAgICAgIFRoZSBkZWZhdWx0IHBhcnNlciBtYXNzYWdlIHRlY2huaXF1ZXMgZml4
IHRoZSB0d28gbW9zdCBjb21tb24KKyAgICAgICAgaW5zdGFuY2VzIG9mIGludmFsaWQgSFRNTCB0
aGF0IGNob2tlIHNnbWxsaWI6CisKKyAgICAgICAgIDxici8+IChObyBzcGFjZSBiZXR3ZWVuIG5h
bWUgb2YgY2xvc2luZyB0YWcgYW5kIHRhZyBjbG9zZSkKKyAgICAgICAgIDwhIC0tQ29tbWVudC0t
PiAoRXh0cmFuZW91cyB3aGl0ZXNwYWNlIGluIGRlY2xhcmF0aW9uKQorCisgICAgICAgIFlvdSBj
YW4gcGFzcyBpbiBhIGN1c3RvbSBsaXN0IG9mIChSRSBvYmplY3QsIHJlcGxhY2UgbWV0aG9kKQor
ICAgICAgICB0dXBsZXMgdG8gZ2V0IEJlYXV0aWZ1bCBTb3VwIHRvIHNjcnViIHlvdXIgaW5wdXQg
dGhlIHdheSB5b3UKKyAgICAgICAgd2FudC4iIiIKKworICAgICAgICBzZWxmLnBhcnNlT25seVRo
ZXNlID0gcGFyc2VPbmx5VGhlc2UKKyAgICAgICAgc2VsZi5mcm9tRW5jb2RpbmcgPSBmcm9tRW5j
b2RpbmcKKyAgICAgICAgc2VsZi5zbWFydFF1b3Rlc1RvID0gc21hcnRRdW90ZXNUbworICAgICAg
ICBzZWxmLmNvbnZlcnRFbnRpdGllcyA9IGNvbnZlcnRFbnRpdGllcworICAgICAgICAjIFNldCB0
aGUgcnVsZXMgZm9yIGhvdyB3ZSdsbCBkZWFsIHdpdGggdGhlIGVudGl0aWVzIHdlCisgICAgICAg
ICMgZW5jb3VudGVyCisgICAgICAgIGlmIHNlbGYuY29udmVydEVudGl0aWVzOgorICAgICAgICAg
ICAgIyBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gY29udmVydCBlbmNvZGVkIGNoYXJhY3RlcnMg
dG8KKyAgICAgICAgICAgICMgZW50aXRpZXMgZXZlbiB3aGlsZSB5b3UncmUgY29udmVydGluZyBl
bnRpdGllcyB0byBVbmljb2RlLgorICAgICAgICAgICAgIyBKdXN0IGNvbnZlcnQgaXQgYWxsIHRv
IFVuaWNvZGUuCisgICAgICAgICAgICBzZWxmLnNtYXJ0UXVvdGVzVG8gPSBOb25lCisgICAgICAg
ICAgICBpZiBjb252ZXJ0RW50aXRpZXMgPT0gc2VsZi5IVE1MX0VOVElUSUVTOgorICAgICAgICAg
ICAgICAgIHNlbGYuY29udmVydFhNTEVudGl0aWVzID0gRmFsc2UKKyAgICAgICAgICAgICAgICBz
ZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5lc2Nh
cGVVbnJlY29nbml6ZWRFbnRpdGllcyA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgY29udmVydEVu
dGl0aWVzID09IHNlbGYuWEhUTUxfRU5USVRJRVM6CisgICAgICAgICAgICAgICAgc2VsZi5jb252
ZXJ0WE1MRW50aXRpZXMgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5jb252ZXJ0SFRNTEVu
dGl0aWVzID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50
aXRpZXMgPSBGYWxzZQorICAgICAgICAgICAgZWxpZiBjb252ZXJ0RW50aXRpZXMgPT0gc2VsZi5Y
TUxfRU5USVRJRVM6CisgICAgICAgICAgICAgICAgc2VsZi5jb252ZXJ0WE1MRW50aXRpZXMgPSBU
cnVlCisgICAgICAgICAgICAgICAgc2VsZi5jb252ZXJ0SFRNTEVudGl0aWVzID0gRmFsc2UKKyAg
ICAgICAgICAgICAgICBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzID0gRmFsc2UKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY29udmVydFhNTEVudGl0aWVzID0gRmFsc2UK
KyAgICAgICAgICAgIHNlbGYuY29udmVydEhUTUxFbnRpdGllcyA9IEZhbHNlCisgICAgICAgICAg
ICBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzID0gRmFsc2UKKworICAgICAgICBzZWxm
Lmluc3RhbmNlU2VsZkNsb3NpbmdUYWdzID0gYnVpbGRUYWdNYXAoTm9uZSwgc2VsZkNsb3NpbmdU
YWdzKQorICAgICAgICBTR01MUGFyc2VyLl9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgaWYgaGFz
YXR0cihtYXJrdXAsICdyZWFkJyk6ICAgICAgICAjIEl0J3MgYSBmaWxlLXR5cGUgb2JqZWN0Lgor
ICAgICAgICAgICAgbWFya3VwID0gbWFya3VwLnJlYWQoKQorICAgICAgICBzZWxmLm1hcmt1cCA9
IG1hcmt1cAorICAgICAgICBzZWxmLm1hcmt1cE1hc3NhZ2UgPSBtYXJrdXBNYXNzYWdlCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2ZlZWQoaXNIVE1MPWlzSFRNTCkKKyAgICAgICAg
ZXhjZXB0IFN0b3BQYXJzaW5nOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLm1hcmt1
cCA9IE5vbmUgICAgICAgICAgICAgICAgICMgVGhlIG1hcmt1cCBjYW4gbm93IGJlIEdDZWQKKwor
ICAgIGRlZiBjb252ZXJ0X2NoYXJyZWYoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIlRoaXMgbWV0
aG9kIGZpeGVzIGEgYnVnIGluIFB5dGhvbidzIFNHTUxQYXJzZXIuIiIiCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIG4gPSBpbnQobmFtZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Cisg
ICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IDAgPD0gbiA8PSAxMjcgOiAjIEFTQ0lJ
IGVuZHMgYXQgMTI3LCBub3QgMjU1CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmV0dXJu
IHNlbGYuY29udmVydF9jb2RlcG9pbnQobikKKworICAgIGRlZiBfZmVlZChzZWxmLCBpbkRvY3Vt
ZW50RW5jb2Rpbmc9Tm9uZSwgaXNIVE1MPUZhbHNlKToKKyAgICAgICAgIyBDb252ZXJ0IHRoZSBk
b2N1bWVudCB0byBVbmljb2RlLgorICAgICAgICBtYXJrdXAgPSBzZWxmLm1hcmt1cAorICAgICAg
ICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgICAgICBpZiBub3QgaGFz
YXR0cihzZWxmLCAnb3JpZ2luYWxFbmNvZGluZycpOgorICAgICAgICAgICAgICAgIHNlbGYub3Jp
Z2luYWxFbmNvZGluZyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhbW1pdCA9
IFVuaWNvZGVEYW1taXRcCisgICAgICAgICAgICAgICAgICAgICAobWFya3VwLCBbc2VsZi5mcm9t
RW5jb2RpbmcsIGluRG9jdW1lbnRFbmNvZGluZ10sCisgICAgICAgICAgICAgICAgICAgICAgc21h
cnRRdW90ZXNUbz1zZWxmLnNtYXJ0UXVvdGVzVG8sIGlzSFRNTD1pc0hUTUwpCisgICAgICAgICAg
ICBtYXJrdXAgPSBkYW1taXQudW5pY29kZQorICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVuY29k
aW5nID0gZGFtbWl0Lm9yaWdpbmFsRW5jb2RpbmcKKyAgICAgICAgICAgIHNlbGYuZGVjbGFyZWRI
VE1MRW5jb2RpbmcgPSBkYW1taXQuZGVjbGFyZWRIVE1MRW5jb2RpbmcKKyAgICAgICAgaWYgbWFy
a3VwOgorICAgICAgICAgICAgaWYgc2VsZi5tYXJrdXBNYXNzYWdlOgorICAgICAgICAgICAgICAg
IGlmIG5vdCBoYXNhdHRyKHNlbGYubWFya3VwTWFzc2FnZSwgIl9faXRlcl9fIik6CisgICAgICAg
ICAgICAgICAgICAgIHNlbGYubWFya3VwTWFzc2FnZSA9IHNlbGYuTUFSS1VQX01BU1NBR0UKKyAg
ICAgICAgICAgICAgICBmb3IgZml4LCBtIGluIHNlbGYubWFya3VwTWFzc2FnZToKKyAgICAgICAg
ICAgICAgICAgICAgbWFya3VwID0gZml4LnN1YihtLCBtYXJrdXApCisgICAgICAgICAgICAgICAg
IyBUT0RPOiBXZSBnZXQgcmlkIG9mIG1hcmt1cE1hc3NhZ2Ugc28gdGhhdCB0aGUKKyAgICAgICAg
ICAgICAgICAjIHNvdXAgb2JqZWN0IGNhbiBiZSBkZWVwY29waWVkIGxhdGVyIG9uLiBTb21lCisg
ICAgICAgICAgICAgICAgIyBQeXRob24gaW5zdGFsbGF0aW9ucyBjYW4ndCBjb3B5IHJlZ2V4ZXMu
IElmIGFueW9uZQorICAgICAgICAgICAgICAgICMgd2FzIHJlbHlpbmcgb24gdGhlIGV4aXN0ZW5j
ZSBvZiBtYXJrdXBNYXNzYWdlLCB0aGlzCisgICAgICAgICAgICAgICAgIyBtaWdodCBjYXVzZSBw
cm9ibGVtcy4KKyAgICAgICAgICAgICAgICBkZWwoc2VsZi5tYXJrdXBNYXNzYWdlKQorICAgICAg
ICBzZWxmLnJlc2V0KCkKKworICAgICAgICBTR01MUGFyc2VyLmZlZWQoc2VsZiwgbWFya3VwKQor
ICAgICAgICAjIENsb3NlIG91dCBhbnkgdW5maW5pc2hlZCBzdHJpbmdzIGFuZCBjbG9zZSBhbGwg
dGhlIG9wZW4gdGFncy4KKyAgICAgICAgc2VsZi5lbmREYXRhKCkKKyAgICAgICAgd2hpbGUgc2Vs
Zi5jdXJyZW50VGFnLm5hbWUgIT0gc2VsZi5ST09UX1RBR19OQU1FOgorICAgICAgICAgICAgc2Vs
Zi5wb3BUYWcoKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG1ldGhvZE5hbWUpOgorICAg
ICAgICAiIiJUaGlzIG1ldGhvZCByb3V0ZXMgbWV0aG9kIGNhbGwgcmVxdWVzdHMgdG8gZWl0aGVy
IHRoZSBTR01MUGFyc2VyCisgICAgICAgIHN1cGVyY2xhc3Mgb3IgdGhlIFRhZyBzdXBlcmNsYXNz
LCBkZXBlbmRpbmcgb24gdGhlIG1ldGhvZCBuYW1lLiIiIgorICAgICAgICAjcHJpbnQgIl9fZ2V0
YXR0cl9fIGNhbGxlZCBvbiAlcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18sIG1ldGhvZE5hbWUpCisK
KyAgICAgICAgaWYgbWV0aG9kTmFtZS5zdGFydHN3aXRoKCdzdGFydF8nKSBvciBtZXRob2ROYW1l
LnN0YXJ0c3dpdGgoJ2VuZF8nKSBcCisgICAgICAgICAgICAgICBvciBtZXRob2ROYW1lLnN0YXJ0
c3dpdGgoJ2RvXycpOgorICAgICAgICAgICAgcmV0dXJuIFNHTUxQYXJzZXIuX19nZXRhdHRyX18o
c2VsZiwgbWV0aG9kTmFtZSkKKyAgICAgICAgZWxpZiBub3QgbWV0aG9kTmFtZS5zdGFydHN3aXRo
KCdfXycpOgorICAgICAgICAgICAgcmV0dXJuIFRhZy5fX2dldGF0dHJfXyhzZWxmLCBtZXRob2RO
YW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKwor
ICAgIGRlZiBpc1NlbGZDbG9zaW5nVGFnKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJSZXR1cm5z
IHRydWUgaWZmIHRoZSBnaXZlbiBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgYQorICAgICAgICBzZWxm
LWNsb3NpbmcgdGFnIGFjY29yZGluZyB0byB0aGlzIHBhcnNlci4iIiIKKyAgICAgICAgcmV0dXJu
IHNlbGYuU0VMRl9DTE9TSU5HX1RBR1MuaGFzX2tleShuYW1lKSBcCisgICAgICAgICAgICAgICBv
ciBzZWxmLmluc3RhbmNlU2VsZkNsb3NpbmdUYWdzLmhhc19rZXkobmFtZSkKKworICAgIGRlZiBy
ZXNldChzZWxmKToKKyAgICAgICAgVGFnLl9faW5pdF9fKHNlbGYsIHNlbGYsIHNlbGYuUk9PVF9U
QUdfTkFNRSkKKyAgICAgICAgc2VsZi5oaWRkZW4gPSAxCisgICAgICAgIFNHTUxQYXJzZXIucmVz
ZXQoc2VsZikKKyAgICAgICAgc2VsZi5jdXJyZW50RGF0YSA9IFtdCisgICAgICAgIHNlbGYuY3Vy
cmVudFRhZyA9IE5vbmUKKyAgICAgICAgc2VsZi50YWdTdGFjayA9IFtdCisgICAgICAgIHNlbGYu
cXVvdGVTdGFjayA9IFtdCisgICAgICAgIHNlbGYucHVzaFRhZyhzZWxmKQorCisgICAgZGVmIHBv
cFRhZyhzZWxmKToKKyAgICAgICAgdGFnID0gc2VsZi50YWdTdGFjay5wb3AoKQorCisgICAgICAg
ICNwcmludCAiUG9wIiwgdGFnLm5hbWUKKyAgICAgICAgaWYgc2VsZi50YWdTdGFjazoKKyAgICAg
ICAgICAgIHNlbGYuY3VycmVudFRhZyA9IHNlbGYudGFnU3RhY2tbLTFdCisgICAgICAgIHJldHVy
biBzZWxmLmN1cnJlbnRUYWcKKworICAgIGRlZiBwdXNoVGFnKHNlbGYsIHRhZyk6CisgICAgICAg
ICNwcmludCAiUHVzaCIsIHRhZy5uYW1lCisgICAgICAgIGlmIHNlbGYuY3VycmVudFRhZzoKKyAg
ICAgICAgICAgIHNlbGYuY3VycmVudFRhZy5jb250ZW50cy5hcHBlbmQodGFnKQorICAgICAgICBz
ZWxmLnRhZ1N0YWNrLmFwcGVuZCh0YWcpCisgICAgICAgIHNlbGYuY3VycmVudFRhZyA9IHNlbGYu
dGFnU3RhY2tbLTFdCisKKyAgICBkZWYgZW5kRGF0YShzZWxmLCBjb250YWluZXJDbGFzcz1OYXZp
Z2FibGVTdHJpbmcpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnREYXRhOgorICAgICAgICAgICAg
Y3VycmVudERhdGEgPSB1Jycuam9pbihzZWxmLmN1cnJlbnREYXRhKQorICAgICAgICAgICAgaWYg
KGN1cnJlbnREYXRhLnRyYW5zbGF0ZShzZWxmLlNUUklQX0FTQ0lJX1NQQUNFUykgPT0gJycgYW5k
CisgICAgICAgICAgICAgICAgbm90IHNldChbdGFnLm5hbWUgZm9yIHRhZyBpbiBzZWxmLnRhZ1N0
YWNrXSkuaW50ZXJzZWN0aW9uKAorICAgICAgICAgICAgICAgICAgICBzZWxmLlBSRVNFUlZFX1dI
SVRFU1BBQ0VfVEFHUykpOgorICAgICAgICAgICAgICAgIGlmICdcbicgaW4gY3VycmVudERhdGE6
CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnREYXRhID0gJ1xuJworICAgICAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnREYXRhID0gJyAnCisgICAgICAgICAg
ICBzZWxmLmN1cnJlbnREYXRhID0gW10KKyAgICAgICAgICAgIGlmIHNlbGYucGFyc2VPbmx5VGhl
c2UgYW5kIGxlbihzZWxmLnRhZ1N0YWNrKSA8PSAxIGFuZCBcCisgICAgICAgICAgICAgICAgICAg
KG5vdCBzZWxmLnBhcnNlT25seVRoZXNlLnRleHQgb3IgXAorICAgICAgICAgICAgICAgICAgICBu
b3Qgc2VsZi5wYXJzZU9ubHlUaGVzZS5zZWFyY2goY3VycmVudERhdGEpKToKKyAgICAgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgICAgIG8gPSBjb250YWluZXJDbGFzcyhjdXJyZW50RGF0YSkK
KyAgICAgICAgICAgIG8uc2V0dXAoc2VsZi5jdXJyZW50VGFnLCBzZWxmLnByZXZpb3VzKQorICAg
ICAgICAgICAgaWYgc2VsZi5wcmV2aW91czoKKyAgICAgICAgICAgICAgICBzZWxmLnByZXZpb3Vz
Lm5leHQgPSBvCisgICAgICAgICAgICBzZWxmLnByZXZpb3VzID0gbworICAgICAgICAgICAgc2Vs
Zi5jdXJyZW50VGFnLmNvbnRlbnRzLmFwcGVuZChvKQorCisKKyAgICBkZWYgX3BvcFRvVGFnKHNl
bGYsIG5hbWUsIGluY2x1c2l2ZVBvcD1UcnVlKToKKyAgICAgICAgIiIiUG9wcyB0aGUgdGFnIHN0
YWNrIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIG1vc3QgcmVjZW50CisgICAgICAgIGluc3RhbmNl
IG9mIHRoZSBnaXZlbiB0YWcuIElmIGluY2x1c2l2ZVBvcCBpcyBmYWxzZSwgcG9wcyB0aGUgdGFn
CisgICAgICAgIHN0YWNrIHVwIHRvIGJ1dCAqbm90KiBpbmNsdWRpbmcgdGhlIG1vc3QgcmVjZW50
IGluc3RxYW5jZSBvZgorICAgICAgICB0aGUgZ2l2ZW4gdGFnLiIiIgorICAgICAgICAjcHJpbnQg
IlBvcHBpbmcgdG8gJXMiICUgbmFtZQorICAgICAgICBpZiBuYW1lID09IHNlbGYuUk9PVF9UQUdf
TkFNRToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG51bVBvcHMgPSAwCisgICAgICAg
IG1vc3RSZWNlbnRUYWcgPSBOb25lCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLnRh
Z1N0YWNrKS0xLCAwLCAtMSk6CisgICAgICAgICAgICBpZiBuYW1lID09IHNlbGYudGFnU3RhY2tb
aV0ubmFtZToKKyAgICAgICAgICAgICAgICBudW1Qb3BzID0gbGVuKHNlbGYudGFnU3RhY2spLWkK
KyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgaW5jbHVzaXZlUG9wOgorICAg
ICAgICAgICAgbnVtUG9wcyA9IG51bVBvcHMgLSAxCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uo
MCwgbnVtUG9wcyk6CisgICAgICAgICAgICBtb3N0UmVjZW50VGFnID0gc2VsZi5wb3BUYWcoKQor
ICAgICAgICByZXR1cm4gbW9zdFJlY2VudFRhZworCisgICAgZGVmIF9zbWFydFBvcChzZWxmLCBu
YW1lKToKKworICAgICAgICAiIiJXZSBuZWVkIHRvIHBvcCB1cCB0byB0aGUgcHJldmlvdXMgdGFn
IG9mIHRoaXMgdHlwZSwgdW5sZXNzCisgICAgICAgIG9uZSBvZiB0aGlzIHRhZydzIG5lc3Rpbmcg
cmVzZXQgdHJpZ2dlcnMgY29tZXMgYmV0d2VlbiB0aGlzCisgICAgICAgIHRhZyBhbmQgdGhlIHBy
ZXZpb3VzIHRhZyBvZiB0aGlzIHR5cGUsIE9SIHVubGVzcyB0aGlzIHRhZyBpcyBhCisgICAgICAg
IGdlbmVyaWMgbmVzdGluZyB0cmlnZ2VyIGFuZCBhbm90aGVyIGdlbmVyaWMgbmVzdGluZyB0cmln
Z2VyCisgICAgICAgIGNvbWVzIGJldHdlZW4gdGhpcyB0YWcgYW5kIHRoZSBwcmV2aW91cyB0YWcg
b2YgdGhpcyB0eXBlLgorCisgICAgICAgIEV4YW1wbGVzOgorICAgICAgICAgPHA+Rm9vPGI+QmFy
ICo8cD4qIHNob3VsZCBwb3AgdG8gJ3AnLCBub3QgJ2InLgorICAgICAgICAgPHA+Rm9vPHRhYmxl
PkJhciAqPHA+KiBzaG91bGQgcG9wIHRvICd0YWJsZScsIG5vdCAncCcuCisgICAgICAgICA8cD5G
b288dGFibGU+PHRyPkJhciAqPHA+KiBzaG91bGQgcG9wIHRvICd0cicsIG5vdCAncCcuCisKKyAg
ICAgICAgIDxsaT48dWw+PGxpPiAqPGxpPiogc2hvdWxkIHBvcCB0byAndWwnLCBub3QgdGhlIGZp
cnN0ICdsaScuCisgICAgICAgICA8dHI+PHRhYmxlPjx0cj4gKjx0cj4qIHNob3VsZCBwb3AgdG8g
J3RhYmxlJywgbm90IHRoZSBmaXJzdCAndHInCisgICAgICAgICA8dGQ+PHRyPjx0ZD4gKjx0ZD4q
IHNob3VsZCBwb3AgdG8gJ3RyJywgbm90IHRoZSBmaXJzdCAndGQnCisgICAgICAgICIiIgorCisg
ICAgICAgIG5lc3RpbmdSZXNldFRyaWdnZXJzID0gc2VsZi5ORVNUQUJMRV9UQUdTLmdldChuYW1l
KQorICAgICAgICBpc05lc3RhYmxlID0gbmVzdGluZ1Jlc2V0VHJpZ2dlcnMgIT0gTm9uZQorICAg
ICAgICBpc1Jlc2V0TmVzdGluZyA9IHNlbGYuUkVTRVRfTkVTVElOR19UQUdTLmhhc19rZXkobmFt
ZSkKKyAgICAgICAgcG9wVG8gPSBOb25lCisgICAgICAgIGluY2x1c2l2ZSA9IFRydWUKKyAgICAg
ICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYudGFnU3RhY2spLTEsIDAsIC0xKToKKyAgICAgICAg
ICAgIHAgPSBzZWxmLnRhZ1N0YWNrW2ldCisgICAgICAgICAgICBpZiAobm90IHAgb3IgcC5uYW1l
ID09IG5hbWUpIGFuZCBub3QgaXNOZXN0YWJsZToKKyAgICAgICAgICAgICAgICAjTm9uLW5lc3Rh
YmxlIHRhZ3MgZ2V0IHBvcHBlZCB0byB0aGUgdG9wIG9yIHRvIHRoZWlyCisgICAgICAgICAgICAg
ICAgI2xhc3Qgb2NjdXJhbmNlLgorICAgICAgICAgICAgICAgIHBvcFRvID0gbmFtZQorICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiAobmVzdGluZ1Jlc2V0VHJpZ2dlcnMgaXMg
bm90IE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcC5uYW1lIGluIG5lc3RpbmdSZXNldFRyaWdn
ZXJzKSBcCisgICAgICAgICAgICAgICAgb3IgKG5lc3RpbmdSZXNldFRyaWdnZXJzIGlzIE5vbmUg
YW5kIGlzUmVzZXROZXN0aW5nCisgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLlJFU0VUX05F
U1RJTkdfVEFHUy5oYXNfa2V5KHAubmFtZSkpOgorCisgICAgICAgICAgICAgICAgI0lmIHdlIGVu
Y291bnRlciBvbmUgb2YgdGhlIG5lc3RpbmcgcmVzZXQgdHJpZ2dlcnMKKyAgICAgICAgICAgICAg
ICAjcGVjdWxpYXIgdG8gdGhpcyB0YWcsIG9yIHdlIGVuY291bnRlciBhbm90aGVyIHRhZworICAg
ICAgICAgICAgICAgICN0aGF0IGNhdXNlcyBuZXN0aW5nIHRvIHJlc2V0LCBwb3AgdXAgdG8gYnV0
IG5vdAorICAgICAgICAgICAgICAgICNpbmNsdWRpbmcgdGhhdCB0YWcuCisgICAgICAgICAgICAg
ICAgcG9wVG8gPSBwLm5hbWUKKyAgICAgICAgICAgICAgICBpbmNsdXNpdmUgPSBGYWxzZQorICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwID0gcC5wYXJlbnQKKyAgICAgICAgaWYg
cG9wVG86CisgICAgICAgICAgICBzZWxmLl9wb3BUb1RhZyhwb3BUbywgaW5jbHVzaXZlKQorCisg
ICAgZGVmIHVua25vd25fc3RhcnR0YWcoc2VsZiwgbmFtZSwgYXR0cnMsIHNlbGZDbG9zaW5nPTAp
OgorICAgICAgICAjcHJpbnQgIlN0YXJ0IHRhZyAlczogJXMiICUgKG5hbWUsIGF0dHJzKQorICAg
ICAgICBpZiBzZWxmLnF1b3RlU3RhY2s6CisgICAgICAgICAgICAjVGhpcyBpcyBub3QgYSByZWFs
IHRhZy4KKyAgICAgICAgICAgICNwcmludCAiPCVzPiBpcyBub3QgcmVhbCEiICUgbmFtZQorICAg
ICAgICAgICAgYXR0cnMgPSAnJy5qb2luKFsnICVzPSIlcyInICUgKHgsIHkpIGZvciB4LCB5IGlu
IGF0dHJzXSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEoJzwlcyVzPicgJSAobmFtZSwg
YXR0cnMpKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZW5kRGF0YSgpCisKKyAg
ICAgICAgaWYgbm90IHNlbGYuaXNTZWxmQ2xvc2luZ1RhZyhuYW1lKSBhbmQgbm90IHNlbGZDbG9z
aW5nOgorICAgICAgICAgICAgc2VsZi5fc21hcnRQb3AobmFtZSkKKworICAgICAgICBpZiBzZWxm
LnBhcnNlT25seVRoZXNlIGFuZCBsZW4oc2VsZi50YWdTdGFjaykgPD0gMSBcCisgICAgICAgICAg
ICAgICBhbmQgKHNlbGYucGFyc2VPbmx5VGhlc2UudGV4dCBvciBub3Qgc2VsZi5wYXJzZU9ubHlU
aGVzZS5zZWFyY2hUYWcobmFtZSwgYXR0cnMpKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAg
ICAgIHRhZyA9IFRhZyhzZWxmLCBuYW1lLCBhdHRycywgc2VsZi5jdXJyZW50VGFnLCBzZWxmLnBy
ZXZpb3VzKQorICAgICAgICBpZiBzZWxmLnByZXZpb3VzOgorICAgICAgICAgICAgc2VsZi5wcmV2
aW91cy5uZXh0ID0gdGFnCisgICAgICAgIHNlbGYucHJldmlvdXMgPSB0YWcKKyAgICAgICAgc2Vs
Zi5wdXNoVGFnKHRhZykKKyAgICAgICAgaWYgc2VsZkNsb3Npbmcgb3Igc2VsZi5pc1NlbGZDbG9z
aW5nVGFnKG5hbWUpOgorICAgICAgICAgICAgc2VsZi5wb3BUYWcoKQorICAgICAgICBpZiBuYW1l
IGluIHNlbGYuUVVPVEVfVEFHUzoKKyAgICAgICAgICAgICNwcmludCAiQmVnaW5uaW5nIHF1b3Rl
ICglcykiICUgbmFtZQorICAgICAgICAgICAgc2VsZi5xdW90ZVN0YWNrLmFwcGVuZChuYW1lKQor
ICAgICAgICAgICAgc2VsZi5saXRlcmFsID0gMQorICAgICAgICByZXR1cm4gdGFnCisKKyAgICBk
ZWYgdW5rbm93bl9lbmR0YWcoc2VsZiwgbmFtZSk6CisgICAgICAgICNwcmludCAiRW5kIHRhZyAl
cyIgJSBuYW1lCisgICAgICAgIGlmIHNlbGYucXVvdGVTdGFjayBhbmQgc2VsZi5xdW90ZVN0YWNr
Wy0xXSAhPSBuYW1lOgorICAgICAgICAgICAgI1RoaXMgaXMgbm90IGEgcmVhbCBlbmQgdGFnLgor
ICAgICAgICAgICAgI3ByaW50ICI8LyVzPiBpcyBub3QgcmVhbCEiICUgbmFtZQorICAgICAgICAg
ICAgc2VsZi5oYW5kbGVfZGF0YSgnPC8lcz4nICUgbmFtZSkKKyAgICAgICAgICAgIHJldHVybgor
ICAgICAgICBzZWxmLmVuZERhdGEoKQorICAgICAgICBzZWxmLl9wb3BUb1RhZyhuYW1lKQorICAg
ICAgICBpZiBzZWxmLnF1b3RlU3RhY2sgYW5kIHNlbGYucXVvdGVTdGFja1stMV0gPT0gbmFtZToK
KyAgICAgICAgICAgIHNlbGYucXVvdGVTdGFjay5wb3AoKQorICAgICAgICAgICAgc2VsZi5saXRl
cmFsID0gKGxlbihzZWxmLnF1b3RlU3RhY2spID4gMCkKKworICAgIGRlZiBoYW5kbGVfZGF0YShz
ZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5jdXJyZW50RGF0YS5hcHBlbmQoZGF0YSkKKworICAg
IGRlZiBfdG9TdHJpbmdTdWJjbGFzcyhzZWxmLCB0ZXh0LCBzdWJjbGFzcyk6CisgICAgICAgICIi
IkFkZHMgYSBjZXJ0YWluIHBpZWNlIG9mIHRleHQgdG8gdGhlIHRyZWUgYXMgYSBOYXZpZ2FibGVT
dHJpbmcKKyAgICAgICAgc3ViY2xhc3MuIiIiCisgICAgICAgIHNlbGYuZW5kRGF0YSgpCisgICAg
ICAgIHNlbGYuaGFuZGxlX2RhdGEodGV4dCkKKyAgICAgICAgc2VsZi5lbmREYXRhKHN1YmNsYXNz
KQorCisgICAgZGVmIGhhbmRsZV9waShzZWxmLCB0ZXh0KToKKyAgICAgICAgIiIiSGFuZGxlIGEg
cHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBhcyBhIFByb2Nlc3NpbmdJbnN0cnVjdGlvbgorICAgICAg
ICBvYmplY3QsIHBvc3NpYmx5IG9uZSB3aXRoIGEgJVNPVVAtRU5DT0RJTkclIHNsb3QgaW50byB3
aGljaCBhbgorICAgICAgICBlbmNvZGluZyB3aWxsIGJlIHBsdWdnZWQgbGF0ZXIuIiIiCisgICAg
ICAgIGlmIHRleHRbOjNdID09ICJ4bWwiOgorICAgICAgICAgICAgdGV4dCA9IHUieG1sIHZlcnNp
b249JzEuMCcgZW5jb2Rpbmc9JyVTT1VQLUVOQ09ESU5HJSciCisgICAgICAgIHNlbGYuX3RvU3Ry
aW5nU3ViY2xhc3ModGV4dCwgUHJvY2Vzc2luZ0luc3RydWN0aW9uKQorCisgICAgZGVmIGhhbmRs
ZV9jb21tZW50KHNlbGYsIHRleHQpOgorICAgICAgICAiSGFuZGxlIGNvbW1lbnRzIGFzIENvbW1l
bnQgb2JqZWN0cy4iCisgICAgICAgIHNlbGYuX3RvU3RyaW5nU3ViY2xhc3ModGV4dCwgQ29tbWVu
dCkKKworICAgIGRlZiBoYW5kbGVfY2hhcnJlZihzZWxmLCByZWYpOgorICAgICAgICAiSGFuZGxl
IGNoYXJhY3RlciByZWZlcmVuY2VzIGFzIGRhdGEuIgorICAgICAgICBpZiBzZWxmLmNvbnZlcnRF
bnRpdGllczoKKyAgICAgICAgICAgIGRhdGEgPSB1bmljaHIoaW50KHJlZikpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBkYXRhID0gJyYjJXM7JyAlIHJlZgorICAgICAgICBzZWxmLmhhbmRs
ZV9kYXRhKGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2VudGl0eXJlZihzZWxmLCByZWYpOgorICAg
ICAgICAiIiJIYW5kbGUgZW50aXR5IHJlZmVyZW5jZXMgYXMgZGF0YSwgcG9zc2libHkgY29udmVy
dGluZyBrbm93bgorICAgICAgICBIVE1MIGFuZC9vciBYTUwgZW50aXR5IHJlZmVyZW5jZXMgdG8g
dGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZQorICAgICAgICBjaGFyYWN0ZXJzLiIiIgorICAgICAg
ICBkYXRhID0gTm9uZQorICAgICAgICBpZiBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXM6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHVuaWNocihuYW1lMmNvZGVwb2lu
dFtyZWZdKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBh
c3MKKworICAgICAgICBpZiBub3QgZGF0YSBhbmQgc2VsZi5jb252ZXJ0WE1MRW50aXRpZXM6Cisg
ICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxfQ0hBUlMu
Z2V0KHJlZikKKworICAgICAgICBpZiBub3QgZGF0YSBhbmQgc2VsZi5jb252ZXJ0SFRNTEVudGl0
aWVzIGFuZCBcCisgICAgICAgICAgICBub3Qgc2VsZi5YTUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9D
SEFSUy5nZXQocmVmKToKKyAgICAgICAgICAgICAgICAjIFRPRE86IFdlJ3ZlIGdvdCBhIHByb2Js
ZW0gaGVyZS4gV2UncmUgdG9sZCB0aGlzIGlzCisgICAgICAgICAgICAgICAgIyBhbiBlbnRpdHkg
cmVmZXJlbmNlLCBidXQgaXQncyBub3QgYW4gWE1MIGVudGl0eQorICAgICAgICAgICAgICAgICMg
cmVmZXJlbmNlIG9yIGFuIEhUTUwgZW50aXR5IHJlZmVyZW5jZS4gTm9uZXRoZWxlc3MsCisgICAg
ICAgICAgICAgICAgIyB0aGUgbG9naWNhbCB0aGluZyB0byBkbyBpcyB0byBwYXNzIGl0IHRocm91
Z2ggYXMgYW4KKyAgICAgICAgICAgICAgICAjIHVucmVjb2duaXplZCBlbnRpdHkgcmVmZXJlbmNl
LgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIEV4Y2VwdDogd2hlbiB0aGUg
aW5wdXQgaXMgIiZjYXJvbDsiIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAjIHdpbGwg
YmUgY2FsbGVkIHdpdGggaW5wdXQgImNhcm9sIi4gV2hlbiB0aGUgaW5wdXQgaXMKKyAgICAgICAg
ICAgICAgICAjICJBVCZUIiwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIGlucHV0
CisgICAgICAgICAgICAgICAgIyAiVCIuIFdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhl
ciBhIHNlbWljb2xvbgorICAgICAgICAgICAgICAgICMgd2FzIHByZXNlbnQgb3JpZ2luYWxseSwg
c28gd2UgZG9uJ3Qga25vdyB3aGV0aGVyCisgICAgICAgICAgICAgICAgIyB0aGlzIGlzIGFuIHVu
a25vd24gZW50aXR5IG9yIGp1c3QgYSBtaXNwbGFjZWQKKyAgICAgICAgICAgICAgICAjIGFtcGVy
c2FuZC4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBUaGUgbW9yZSBjb21t
b24gY2FzZSBpcyBhIG1pc3BsYWNlZCBhbXBlcnNhbmQsIHNvIEkKKyAgICAgICAgICAgICAgICAj
IGVzY2FwZSB0aGUgYW1wZXJzYW5kIGFuZCBvbWl0IHRoZSB0cmFpbGluZyBzZW1pY29sb24uCisg
ICAgICAgICAgICAgICAgZGF0YSA9ICImYW1wOyVzIiAlIHJlZgorICAgICAgICBpZiBub3QgZGF0
YToKKyAgICAgICAgICAgICMgVGhpcyBjYXNlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgYWJv
dmUsIGJlY2F1c2Ugd2UKKyAgICAgICAgICAgICMgaGF2ZW4ndCBhbHJlYWR5IGdvbmUgdGhyb3Vn
aCBhIHN1cHBvc2VkbHkgY29tcHJlaGVuc2l2ZQorICAgICAgICAgICAgIyBtYXBwaW5nIG9mIGVu
dGl0aWVzIHRvIFVuaWNvZGUgY2hhcmFjdGVycy4gV2UgbWlnaHQgbm90CisgICAgICAgICAgICAj
IGhhdmUgZ29uZSB0aHJvdWdoIGFueSBtYXBwaW5nIGF0IGFsbC4gU28gdGhlIGNoYW5jZXMgYXJl
CisgICAgICAgICAgICAjIHZlcnkgaGlnaCB0aGF0IHRoaXMgaXMgYSByZWFsIGVudGl0eSwgYW5k
IG5vdCBhCisgICAgICAgICAgICAjIG1pc3BsYWNlZCBhbXBlcnNhbmQuCisgICAgICAgICAgICBk
YXRhID0gIiYlczsiICUgcmVmCisgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEoZGF0YSkKKworICAg
IGRlZiBoYW5kbGVfZGVjbChzZWxmLCBkYXRhKToKKyAgICAgICAgIkhhbmRsZSBET0NUWVBFcyBh
bmQgdGhlIGxpa2UgYXMgRGVjbGFyYXRpb24gb2JqZWN0cy4iCisgICAgICAgIHNlbGYuX3RvU3Ry
aW5nU3ViY2xhc3MoZGF0YSwgRGVjbGFyYXRpb24pCisKKyAgICBkZWYgcGFyc2VfZGVjbGFyYXRp
b24oc2VsZiwgaSk6CisgICAgICAgICIiIlRyZWF0IGEgYm9ndXMgU0dNTCBkZWNsYXJhdGlvbiBh
cyByYXcgZGF0YS4gVHJlYXQgYSBDREFUQQorICAgICAgICBkZWNsYXJhdGlvbiBhcyBhIENEYXRh
IG9iamVjdC4iIiIKKyAgICAgICAgaiA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5yYXdkYXRhW2k6
aSs5XSA9PSAnPCFbQ0RBVEFbJzoKKyAgICAgICAgICAgICBrID0gc2VsZi5yYXdkYXRhLmZpbmQo
J11dPicsIGkpCisgICAgICAgICAgICAgaWYgayA9PSAtMToKKyAgICAgICAgICAgICAgICAgayA9
IGxlbihzZWxmLnJhd2RhdGEpCisgICAgICAgICAgICAgZGF0YSA9IHNlbGYucmF3ZGF0YVtpKzk6
a10KKyAgICAgICAgICAgICBqID0gayszCisgICAgICAgICAgICAgc2VsZi5fdG9TdHJpbmdTdWJj
bGFzcyhkYXRhLCBDRGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICBqID0gU0dNTFBhcnNlci5wYXJzZV9kZWNsYXJhdGlvbihzZWxmLCBpKQorICAg
ICAgICAgICAgZXhjZXB0IFNHTUxQYXJzZUVycm9yOgorICAgICAgICAgICAgICAgIHRvSGFuZGxl
ID0gc2VsZi5yYXdkYXRhW2k6XQorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodG9I
YW5kbGUpCisgICAgICAgICAgICAgICAgaiA9IGkgKyBsZW4odG9IYW5kbGUpCisgICAgICAgIHJl
dHVybiBqCisKK2NsYXNzIEJlYXV0aWZ1bFNvdXAoQmVhdXRpZnVsU3RvbmVTb3VwKToKKworICAg
ICIiIlRoaXMgcGFyc2VyIGtub3dzIHRoZSBmb2xsb3dpbmcgZmFjdHMgYWJvdXQgSFRNTDoKKwor
ICAgICogU29tZSB0YWdzIGhhdmUgbm8gY2xvc2luZyB0YWcgYW5kIHNob3VsZCBiZSBpbnRlcnBy
ZXRlZCBhcyBiZWluZworICAgICAgY2xvc2VkIGFzIHNvb24gYXMgdGhleSBhcmUgZW5jb3VudGVy
ZWQuCisKKyAgICAqIFRoZSB0ZXh0IGluc2lkZSBzb21lIHRhZ3MgKGllLiAnc2NyaXB0JykgbWF5
IGNvbnRhaW4gdGFncyB3aGljaAorICAgICAgYXJlIG5vdCByZWFsbHkgcGFydCBvZiB0aGUgZG9j
dW1lbnQgYW5kIHdoaWNoIHNob3VsZCBiZSBwYXJzZWQKKyAgICAgIGFzIHRleHQsIG5vdCB0YWdz
LiBJZiB5b3Ugd2FudCB0byBwYXJzZSB0aGUgdGV4dCBhcyB0YWdzLCB5b3UgY2FuCisgICAgICBh
bHdheXMgZmV0Y2ggaXQgYW5kIHBhcnNlIGl0IGV4cGxpY2l0bHkuCisKKyAgICAqIFRhZyBuZXN0
aW5nIHJ1bGVzOgorCisgICAgICBNb3N0IHRhZ3MgY2FuJ3QgYmUgbmVzdGVkIGF0IGFsbC4gRm9y
IGluc3RhbmNlLCB0aGUgb2NjdXJhbmNlIG9mCisgICAgICBhIDxwPiB0YWcgc2hvdWxkIGltcGxp
Y2l0bHkgY2xvc2UgdGhlIHByZXZpb3VzIDxwPiB0YWcuCisKKyAgICAgICA8cD5QYXJhMTxwPlBh
cmEyCisgICAgICAgIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCBpbnRvOgorICAgICAgIDxwPlBhcmEx
PC9wPjxwPlBhcmEyCisKKyAgICAgIFNvbWUgdGFncyBjYW4gYmUgbmVzdGVkIGFyYml0cmFyaWx5
LiBGb3IgaW5zdGFuY2UsIHRoZSBvY2N1cmFuY2UKKyAgICAgIG9mIGEgPGJsb2NrcXVvdGU+IHRh
ZyBzaG91bGQgX25vdF8gaW1wbGljaXRseSBjbG9zZSB0aGUgcHJldmlvdXMKKyAgICAgIDxibG9j
a3F1b3RlPiB0YWcuCisKKyAgICAgICBBbGljZSBzYWlkOiA8YmxvY2txdW90ZT5Cb2Igc2FpZDog
PGJsb2NrcXVvdGU+QmxhaAorICAgICAgICBzaG91bGQgTk9UIGJlIHRyYW5zZm9ybWVkIGludG86
CisgICAgICAgQWxpY2Ugc2FpZDogPGJsb2NrcXVvdGU+Qm9iIHNhaWQ6IDwvYmxvY2txdW90ZT48
YmxvY2txdW90ZT5CbGFoCisKKyAgICAgIFNvbWUgdGFncyBjYW4gYmUgbmVzdGVkLCBidXQgdGhl
IG5lc3RpbmcgaXMgcmVzZXQgYnkgdGhlCisgICAgICBpbnRlcnBvc2l0aW9uIG9mIG90aGVyIHRh
Z3MuIEZvciBpbnN0YW5jZSwgYSA8dHI+IHRhZyBzaG91bGQKKyAgICAgIGltcGxpY2l0bHkgY2xv
c2UgdGhlIHByZXZpb3VzIDx0cj4gdGFnIHdpdGhpbiB0aGUgc2FtZSA8dGFibGU+LAorICAgICAg
YnV0IG5vdCBjbG9zZSBhIDx0cj4gdGFnIGluIGFub3RoZXIgdGFibGUuCisKKyAgICAgICA8dGFi
bGU+PHRyPkJsYWg8dHI+QmxhaAorICAgICAgICBzaG91bGQgYmUgdHJhbnNmb3JtZWQgaW50bzoK
KyAgICAgICA8dGFibGU+PHRyPkJsYWg8L3RyPjx0cj5CbGFoCisgICAgICAgIGJ1dCwKKyAgICAg
ICA8dHI+QmxhaDx0YWJsZT48dHI+QmxhaAorICAgICAgICBzaG91bGQgTk9UIGJlIHRyYW5zZm9y
bWVkIGludG8KKyAgICAgICA8dHI+QmxhaDx0YWJsZT48L3RyPjx0cj5CbGFoCisKKyAgICBEaWZm
ZXJpbmcgYXNzdW1wdGlvbnMgYWJvdXQgdGFnIG5lc3RpbmcgcnVsZXMgYXJlIGEgbWFqb3Igc291
cmNlCisgICAgb2YgcHJvYmxlbXMgd2l0aCB0aGUgQmVhdXRpZnVsU291cCBjbGFzcy4gSWYgQmVh
dXRpZnVsU291cCBpcyBub3QKKyAgICB0cmVhdGluZyBhcyBuZXN0YWJsZSBhIHRhZyB5b3VyIHBh
Z2UgYXV0aG9yIHRyZWF0cyBhcyBuZXN0YWJsZSwKKyAgICB0cnkgSUNhbnRCZWxpZXZlSXRzQmVh
dXRpZnVsU291cCwgTWluaW1hbFNvdXAsIG9yCisgICAgQmVhdXRpZnVsU3RvbmVTb3VwIGJlZm9y
ZSB3cml0aW5nIHlvdXIgb3duIHN1YmNsYXNzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
ICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBrd2FyZ3MuaGFzX2tleSgnc21hcnRR
dW90ZXNUbycpOgorICAgICAgICAgICAga3dhcmdzWydzbWFydFF1b3Rlc1RvJ10gPSBzZWxmLkhU
TUxfRU5USVRJRVMKKyAgICAgICAga3dhcmdzWydpc0hUTUwnXSA9IFRydWUKKyAgICAgICAgQmVh
dXRpZnVsU3RvbmVTb3VwLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgIFNF
TEZfQ0xPU0lOR19UQUdTID0gYnVpbGRUYWdNYXAoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICgnYnInICwgJ2hyJywgJ2lucHV0JywgJ2ltZycsICdtZXRhJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFjZXInLCAnbGluaycsICdmcmFt
ZScsICdiYXNlJywgJ2NvbCcpKQorCisgICAgUFJFU0VSVkVfV0hJVEVTUEFDRV9UQUdTID0gc2V0
KFsncHJlJywgJ3RleHRhcmVhJ10pCisKKyAgICBRVU9URV9UQUdTID0geydzY3JpcHQnIDogTm9u
ZSwgJ3RleHRhcmVhJyA6IE5vbmV9CisKKyAgICAjQWNjb3JkaW5nIHRvIHRoZSBIVE1MIHN0YW5k
YXJkLCBlYWNoIG9mIHRoZXNlIGlubGluZSB0YWdzIGNhbgorICAgICNjb250YWluIGFub3RoZXIg
dGFnIG9mIHRoZSBzYW1lIHR5cGUuIEZ1cnRoZXJtb3JlLCBpdCdzIGNvbW1vbgorICAgICN0byBh
Y3R1YWxseSB1c2UgdGhlc2UgdGFncyB0aGlzIHdheS4KKyAgICBORVNUQUJMRV9JTkxJTkVfVEFH
UyA9ICgnc3BhbicsICdmb250JywgJ3EnLCAnb2JqZWN0JywgJ2JkbycsICdzdWInLCAnc3VwJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyJykKKworICAgICNBY2NvcmRpbmcg
dG8gdGhlIEhUTUwgc3RhbmRhcmQsIHRoZXNlIGJsb2NrIHRhZ3MgY2FuIGNvbnRhaW4KKyAgICAj
YW5vdGhlciB0YWcgb2YgdGhlIHNhbWUgdHlwZS4gRnVydGhlcm1vcmUsIGl0J3MgY29tbW9uCisg
ICAgI3RvIGFjdHVhbGx5IHVzZSB0aGVzZSB0YWdzIHRoaXMgd2F5LgorICAgIE5FU1RBQkxFX0JM
T0NLX1RBR1MgPSAoJ2Jsb2NrcXVvdGUnLCAnZGl2JywgJ2ZpZWxkc2V0JywgJ2lucycsICdkZWwn
KQorCisgICAgI0xpc3RzIGNhbiBjb250YWluIG90aGVyIGxpc3RzLCBidXQgdGhlcmUgYXJlIHJl
c3RyaWN0aW9ucy4KKyAgICBORVNUQUJMRV9MSVNUX1RBR1MgPSB7ICdvbCcgOiBbXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICd1bCcgOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdsaScgOiBbJ3VsJywgJ29sJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGwn
IDogW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGQnIDogWydkbCddLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2R0JyA6IFsnZGwnXSB9CisKKyAgICAjVGFibGVzIGNhbiBj
b250YWluIG90aGVyIHRhYmxlcywgYnV0IHRoZXJlIGFyZSByZXN0cmljdGlvbnMuCisgICAgTkVT
VEFCTEVfVEFCTEVfVEFHUyA9IHsndGFibGUnIDogW10sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAndHInIDogWyd0YWJsZScsICd0Ym9keScsICd0Zm9vdCcsICd0aGVhZCddLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3RkJyA6IFsndHInXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd0aCcgOiBbJ3RyJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlYWQn
IDogWyd0YWJsZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rib2R5JyA6IFsndGFi
bGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd0Zm9vdCcgOiBbJ3RhYmxlJ10sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICBOT05fTkVTVEFCTEVfQkxPQ0tfVEFH
UyA9ICgnYWRkcmVzcycsICdmb3JtJywgJ3AnLCAncHJlJykKKworICAgICNJZiBvbmUgb2YgdGhl
c2UgdGFncyBpcyBlbmNvdW50ZXJlZCwgYWxsIHRhZ3MgdXAgdG8gdGhlIG5leHQgdGFnIG9mCisg
ICAgI3RoaXMgdHlwZSBhcmUgcG9wcGVkLgorICAgIFJFU0VUX05FU1RJTkdfVEFHUyA9IGJ1aWxk
VGFnTWFwKE5vbmUsIE5FU1RBQkxFX0JMT0NLX1RBR1MsICdub3NjcmlwdCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9OX05FU1RBQkxFX0JMT0NLX1RBR1MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVTVEFCTEVfTElTVF9UQUdTLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FU1RBQkxFX1RBQkxFX1RBR1MpCisK
KyAgICBORVNUQUJMRV9UQUdTID0gYnVpbGRUYWdNYXAoW10sIE5FU1RBQkxFX0lOTElORV9UQUdT
LCBORVNUQUJMRV9CTE9DS19UQUdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
RVNUQUJMRV9MSVNUX1RBR1MsIE5FU1RBQkxFX1RBQkxFX1RBR1MpCisKKyAgICAjIFVzZWQgdG8g
ZGV0ZWN0IHRoZSBjaGFyc2V0IGluIGEgTUVUQSB0YWc7IHNlZSBzdGFydF9tZXRhCisgICAgQ0hB
UlNFVF9SRSA9IHJlLmNvbXBpbGUoIigoXnw7KVxzKmNoYXJzZXQ9KShbXjtdKikiLCByZS5NKQor
CisgICAgZGVmIHN0YXJ0X21ldGEoc2VsZiwgYXR0cnMpOgorICAgICAgICAiIiJCZWF1dGlmdWwg
U291cCBjYW4gZGV0ZWN0IGEgY2hhcnNldCBpbmNsdWRlZCBpbiBhIE1FVEEgdGFnLAorICAgICAg
ICB0cnkgdG8gY29udmVydCB0aGUgZG9jdW1lbnQgdG8gdGhhdCBjaGFyc2V0LCBhbmQgcmUtcGFy
c2UgdGhlCisgICAgICAgIGRvY3VtZW50IGZyb20gdGhlIGJlZ2lubmluZy4iIiIKKyAgICAgICAg
aHR0cEVxdWl2ID0gTm9uZQorICAgICAgICBjb250ZW50VHlwZSA9IE5vbmUKKyAgICAgICAgY29u
dGVudFR5cGVJbmRleCA9IE5vbmUKKyAgICAgICAgdGFnTmVlZHNFbmNvZGluZ1N1YnN0aXR1dGlv
biA9IEZhbHNlCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGF0dHJzKSk6CisgICAg
ICAgICAgICBrZXksIHZhbHVlID0gYXR0cnNbaV0KKyAgICAgICAgICAgIGtleSA9IGtleS5sb3dl
cigpCisgICAgICAgICAgICBpZiBrZXkgPT0gJ2h0dHAtZXF1aXYnOgorICAgICAgICAgICAgICAg
IGh0dHBFcXVpdiA9IHZhbHVlCisgICAgICAgICAgICBlbGlmIGtleSA9PSAnY29udGVudCc6Cisg
ICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGNvbnRl
bnRUeXBlSW5kZXggPSBpCisKKyAgICAgICAgaWYgaHR0cEVxdWl2IGFuZCBjb250ZW50VHlwZTog
IyBJdCdzIGFuIGludGVyZXN0aW5nIG1ldGEgdGFnLgorICAgICAgICAgICAgbWF0Y2ggPSBzZWxm
LkNIQVJTRVRfUkUuc2VhcmNoKGNvbnRlbnRUeXBlKQorICAgICAgICAgICAgaWYgbWF0Y2g6Cisg
ICAgICAgICAgICAgICAgaWYgKHNlbGYuZGVjbGFyZWRIVE1MRW5jb2RpbmcgaXMgbm90IE5vbmUg
b3IKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVuY29kaW5nID09IHNlbGYuZnJv
bUVuY29kaW5nKToKKyAgICAgICAgICAgICAgICAgICAgIyBBbiBIVE1MIGVuY29kaW5nIHdhcyBz
bmlmZmVkIHdoaWxlIGNvbnZlcnRpbmcKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgZG9jdW1l
bnQgdG8gVW5pY29kZSwgb3IgYW4gSFRNTCBlbmNvZGluZyB3YXMKKyAgICAgICAgICAgICAgICAg
ICAgIyBzbmlmZmVkIGR1cmluZyBhIHByZXZpb3VzIHBhc3MgdGhyb3VnaCB0aGUKKyAgICAgICAg
ICAgICAgICAgICAgIyBkb2N1bWVudCwgb3IgYW4gZW5jb2Rpbmcgd2FzIHNwZWNpZmllZAorICAg
ICAgICAgICAgICAgICAgICAjIGV4cGxpY2l0bHkgYW5kIGl0IHdvcmtlZC4gUmV3cml0ZSB0aGUg
bWV0YSB0YWcuCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXdyaXRlKG1hdGNoKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKSArICIlU09VUC1FTkNPRElO
RyUiCisgICAgICAgICAgICAgICAgICAgIG5ld0F0dHIgPSBzZWxmLkNIQVJTRVRfUkUuc3ViKHJl
d3JpdGUsIGNvbnRlbnRUeXBlKQorICAgICAgICAgICAgICAgICAgICBhdHRyc1tjb250ZW50VHlw
ZUluZGV4XSA9IChhdHRyc1tjb250ZW50VHlwZUluZGV4XVswXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXR0cikKKyAgICAgICAgICAgICAgICAg
ICAgdGFnTmVlZHNFbmNvZGluZ1N1YnN0aXR1dGlvbiA9IFRydWUKKyAgICAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgb3VyIGZpcnN0IHBhc3MgdGhyb3Vn
aCB0aGUgZG9jdW1lbnQuCisgICAgICAgICAgICAgICAgICAgICMgR28gdGhyb3VnaCBpdCBhZ2Fp
biB3aXRoIHRoZSBlbmNvZGluZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgbmV3
Q2hhcnNldCA9IG1hdGNoLmdyb3VwKDMpCisgICAgICAgICAgICAgICAgICAgIGlmIG5ld0NoYXJz
ZXQgYW5kIG5ld0NoYXJzZXQgIT0gc2VsZi5vcmlnaW5hbEVuY29kaW5nOgorICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyA9IG5ld0NoYXJzZXQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQoc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BQYXJzaW5nCisgICAgICAgICAgICAg
ICAgICAgIHBhc3MKKyAgICAgICAgdGFnID0gc2VsZi51bmtub3duX3N0YXJ0dGFnKCJtZXRhIiwg
YXR0cnMpCisgICAgICAgIGlmIHRhZyBhbmQgdGFnTmVlZHNFbmNvZGluZ1N1YnN0aXR1dGlvbjoK
KyAgICAgICAgICAgIHRhZy5jb250YWluc1N1YnN0aXR1dGlvbnMgPSBUcnVlCisKK2NsYXNzIFN0
b3BQYXJzaW5nKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBJQ2FudEJlbGlldmVJdHNC
ZWF1dGlmdWxTb3VwKEJlYXV0aWZ1bFNvdXApOgorCisgICAgIiIiVGhlIEJlYXV0aWZ1bFNvdXAg
Y2xhc3MgaXMgb3JpZW50ZWQgdG93YXJkcyBza2lwcGluZyBvdmVyCisgICAgY29tbW9uIEhUTUwg
ZXJyb3JzIGxpa2UgdW5jbG9zZWQgdGFncy4gSG93ZXZlciwgc29tZXRpbWVzIGl0IG1ha2VzCisg
ICAgZXJyb3JzIG9mIGl0cyBvd24uIEZvciBpbnN0YW5jZSwgY29uc2lkZXIgdGhpcyBmcmFnbWVu
dDoKKworICAgICA8Yj5Gb288Yj5CYXI8L2I+PC9iPgorCisgICAgVGhpcyBpcyBwZXJmZWN0bHkg
dmFsaWQgKGlmIGJpemFycmUpIEhUTUwuIEhvd2V2ZXIsIHRoZQorICAgIEJlYXV0aWZ1bFNvdXAg
Y2xhc3Mgd2lsbCBpbXBsaWNpdGx5IGNsb3NlIHRoZSBmaXJzdCBiIHRhZyB3aGVuIGl0CisgICAg
ZW5jb3VudGVycyB0aGUgc2Vjb25kICdiJy4gSXQgd2lsbCB0aGluayB0aGUgYXV0aG9yIHdyb3Rl
CisgICAgIjxiPkZvbzxiPkJhciIsIGFuZCBkaWRuJ3QgY2xvc2UgdGhlIGZpcnN0ICdiJyB0YWcs
IGJlY2F1c2UKKyAgICB0aGVyZSdzIG5vIHJlYWwtd29ybGQgcmVhc29uIHRvIGJvbGQgc29tZXRo
aW5nIHRoYXQncyBhbHJlYWR5CisgICAgYm9sZC4gV2hlbiBpdCBlbmNvdW50ZXJzICc8L2I+PC9i
PicgaXQgd2lsbCBjbG9zZSB0d28gbW9yZSAnYicKKyAgICB0YWdzLCBmb3IgYSBncmFuZCB0b3Rh
bCBvZiB0aHJlZSB0YWdzIGNsb3NlZCBpbnN0ZWFkIG9mIHR3by4gVGhpcworICAgIGNhbiB0aHJv
dyBvZmYgdGhlIHJlc3Qgb2YgeW91ciBkb2N1bWVudCBzdHJ1Y3R1cmUuIFRoZSBzYW1lIGlzCisg
ICAgdHJ1ZSBvZiBhIG51bWJlciBvZiBvdGhlciB0YWdzLCBsaXN0ZWQgYmVsb3cuCisKKyAgICBJ
dCdzIG11Y2ggbW9yZSBjb21tb24gZm9yIHNvbWVvbmUgdG8gZm9yZ2V0IHRvIGNsb3NlIGEgJ2In
IHRhZworICAgIHRoYW4gdG8gYWN0dWFsbHkgdXNlIG5lc3RlZCAnYicgdGFncywgYW5kIHRoZSBC
ZWF1dGlmdWxTb3VwIGNsYXNzCisgICAgaGFuZGxlcyB0aGUgY29tbW9uIGNhc2UuIFRoaXMgY2xh
c3MgaGFuZGxlcyB0aGUgbm90LWNvLWNvbW1vbgorICAgIGNhc2U6IHdoZXJlIHlvdSBjYW4ndCBi
ZWxpZXZlIHNvbWVvbmUgd3JvdGUgd2hhdCB0aGV5IGRpZCwgYnV0CisgICAgaXQncyB2YWxpZCBI
VE1MIGFuZCBCZWF1dGlmdWxTb3VwIHNjcmV3ZWQgdXAgYnkgYXNzdW1pbmcgaXQKKyAgICB3b3Vs
ZG4ndCBiZS4iIiIKKworICAgIElfQ0FOVF9CRUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9JTkxJTkVf
VEFHUyA9IFwKKyAgICAgKCdlbScsICdiaWcnLCAnaScsICdzbWFsbCcsICd0dCcsICdhYmJyJywg
J2Fjcm9ueW0nLCAnc3Ryb25nJywKKyAgICAgICdjaXRlJywgJ2NvZGUnLCAnZGZuJywgJ2tiZCcs
ICdzYW1wJywgJ3N0cm9uZycsICd2YXInLCAnYicsCisgICAgICAnYmlnJykKKworICAgIElfQ0FO
VF9CRUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9CTE9DS19UQUdTID0gKCdub3NjcmlwdCcsKQorCisg
ICAgTkVTVEFCTEVfVEFHUyA9IGJ1aWxkVGFnTWFwKFtdLCBCZWF1dGlmdWxTb3VwLk5FU1RBQkxF
X1RBR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElfQ0FOVF9CRUxJRVZFX1RI
RVlSRV9ORVNUQUJMRV9CTE9DS19UQUdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJX0NBTlRfQkVMSUVWRV9USEVZUkVfTkVTVEFCTEVfSU5MSU5FX1RBR1MpCisKK2NsYXNzIE1p
bmltYWxTb3VwKEJlYXV0aWZ1bFNvdXApOgorICAgICIiIlRoZSBNaW5pbWFsU291cCBjbGFzcyBp
cyBmb3IgcGFyc2luZyBIVE1MIHRoYXQgY29udGFpbnMKKyAgICBwYXRob2xvZ2ljYWxseSBiYWQg
bWFya3VwLiBJdCBtYWtlcyBubyBhc3N1bXB0aW9ucyBhYm91dCB0YWcKKyAgICBuZXN0aW5nLCBi
dXQgaXQgZG9lcyBrbm93IHdoaWNoIHRhZ3MgYXJlIHNlbGYtY2xvc2luZywgdGhhdAorICAgIDxz
Y3JpcHQ+IHRhZ3MgY29udGFpbiBKYXZhc2NyaXB0IGFuZCBzaG91bGQgbm90IGJlIHBhcnNlZCwg
dGhhdAorICAgIE1FVEEgdGFncyBtYXkgY29udGFpbiBlbmNvZGluZyBpbmZvcm1hdGlvbiwgYW5k
IHNvIG9uLgorCisgICAgVGhpcyBhbHNvIG1ha2VzIGl0IGJldHRlciBmb3Igc3ViY2xhc3Npbmcg
dGhhbiBCZWF1dGlmdWxTdG9uZVNvdXAKKyAgICBvciBCZWF1dGlmdWxTb3VwLiIiIgorCisgICAg
UkVTRVRfTkVTVElOR19UQUdTID0gYnVpbGRUYWdNYXAoJ25vc2NyaXB0JykKKyAgICBORVNUQUJM
RV9UQUdTID0ge30KKworY2xhc3MgQmVhdXRpZnVsU09BUChCZWF1dGlmdWxTdG9uZVNvdXApOgor
ICAgICIiIlRoaXMgY2xhc3Mgd2lsbCBwdXNoIGEgdGFnIHdpdGggb25seSBhIHNpbmdsZSBzdHJp
bmcgY2hpbGQgaW50bworICAgIHRoZSB0YWcncyBwYXJlbnQgYXMgYW4gYXR0cmlidXRlLiBUaGUg
YXR0cmlidXRlJ3MgbmFtZSBpcyB0aGUgdGFnCisgICAgbmFtZSwgYW5kIHRoZSB2YWx1ZSBpcyB0
aGUgc3RyaW5nIGNoaWxkLiBBbiBleGFtcGxlIHNob3VsZCBnaXZlCisgICAgdGhlIGZsYXZvciBv
ZiB0aGUgY2hhbmdlOgorCisgICAgPGZvbz48YmFyPmJhejwvYmFyPjwvZm9vPgorICAgICA9Pgor
ICAgIDxmb28gYmFyPSJiYXoiPjxiYXI+YmF6PC9iYXI+PC9mb28+CisKKyAgICBZb3UgY2FuIHRo
ZW4gYWNjZXNzIGZvb1RhZ1snYmFyJ10gaW5zdGVhZCBvZiBmb29UYWcuYmFyVGFnLnN0cmluZy4K
KworICAgIFRoaXMgaXMsIG9mIGNvdXJzZSwgdXNlZnVsIGZvciBzY3JhcGluZyBzdHJ1Y3R1cmVz
IHRoYXQgdGVuZCB0bworICAgIHVzZSBzdWJlbGVtZW50cyBpbnN0ZWFkIG9mIGF0dHJpYnV0ZXMs
IHN1Y2ggYXMgU09BUCBtZXNzYWdlcy4gTm90ZQorICAgIHRoYXQgaXQgbW9kaWZpZXMgaXRzIGlu
cHV0LCBzbyBkb24ndCBwcmludCB0aGUgbW9kaWZpZWQgdmVyc2lvbgorICAgIG91dC4KKworICAg
IEknbSBub3Qgc3VyZSBob3cgbWFueSBwZW9wbGUgcmVhbGx5IHdhbnQgdG8gdXNlIHRoaXMgY2xh
c3M7IGxldCBtZQorICAgIGtub3cgaWYgeW91IGRvLiBNYWlubHkgSSBsaWtlIHRoZSBuYW1lLiIi
IgorCisgICAgZGVmIHBvcFRhZyhzZWxmKToKKyAgICAgICAgaWYgbGVuKHNlbGYudGFnU3RhY2sp
ID4gMToKKyAgICAgICAgICAgIHRhZyA9IHNlbGYudGFnU3RhY2tbLTFdCisgICAgICAgICAgICBw
YXJlbnQgPSBzZWxmLnRhZ1N0YWNrWy0yXQorICAgICAgICAgICAgcGFyZW50Ll9nZXRBdHRyTWFw
KCkKKyAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKHRhZywgVGFnKSBhbmQgbGVuKHRhZy5jb250
ZW50cykgPT0gMSBhbmQKKyAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHRhZy5jb250ZW50c1sw
XSwgTmF2aWdhYmxlU3RyaW5nKSBhbmQKKyAgICAgICAgICAgICAgICBub3QgcGFyZW50LmF0dHJN
YXAuaGFzX2tleSh0YWcubmFtZSkpOgorICAgICAgICAgICAgICAgIHBhcmVudFt0YWcubmFtZV0g
PSB0YWcuY29udGVudHNbMF0KKyAgICAgICAgQmVhdXRpZnVsU3RvbmVTb3VwLnBvcFRhZyhzZWxm
KQorCisjRW50ZXJwcmlzZSBjbGFzcyBuYW1lcyEgSXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlv
biB0aGF0IHNvbWUgcGVvcGxlCisjdGhpbmsgdGhlIG5hbWVzIG9mIHRoZSBCZWF1dGlmdWwgU291
cCBwYXJzZXIgY2xhc3NlcyBhcmUgdG9vIHNpbGx5CisjYW5kICJ1bnByb2Zlc3Npb25hbCIgZm9y
IHVzZSBpbiBlbnRlcnByaXNlIHNjcmVlbi1zY3JhcGluZy4gV2UgZmVlbAorI3lvdXIgcGFpbiEg
Rm9yIHN1Y2gtbWluZGVkIGZvbGssIHRoZSBCZWF1dGlmdWwgU291cCBDb25zb3J0aXVtIEFuZAor
I0FsbC1OaWdodCBLb3NoZXIgQmFrZXJ5IHJlY29tbWVuZHMgcmVuYW1pbmcgdGhpcyBmaWxlIHRv
CisjIlJvYnVzdFBhcnNlci5weSIgKG9yLCBpbiBjYXNlcyBvZiBleHRyZW1lIGVudGVycHJpc2lu
ZXNzLAorIyJSb2J1c3RQYXJzZXJCZWFuSW50ZXJmYWNlLmNsYXNzIikgYW5kIHVzaW5nIHRoZSBm
b2xsb3dpbmcKKyNlbnRlcnByaXNlLWZyaWVuZGx5IGNsYXNzIGFsaWFzZXM6CitjbGFzcyBSb2J1
c3RYTUxQYXJzZXIoQmVhdXRpZnVsU3RvbmVTb3VwKToKKyAgICBwYXNzCitjbGFzcyBSb2J1c3RI
VE1MUGFyc2VyKEJlYXV0aWZ1bFNvdXApOgorICAgIHBhc3MKK2NsYXNzIFJvYnVzdFdhY2tBc3NI
VE1MUGFyc2VyKElDYW50QmVsaWV2ZUl0c0JlYXV0aWZ1bFNvdXApOgorICAgIHBhc3MKK2NsYXNz
IFJvYnVzdEluc2FuZWx5V2Fja0Fzc0hUTUxQYXJzZXIoTWluaW1hbFNvdXApOgorICAgIHBhc3MK
K2NsYXNzIFNpbXBsaWZ5aW5nU09BUFBhcnNlcihCZWF1dGlmdWxTT0FQKToKKyAgICBwYXNzCisK
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
IworIyBCb251cyBsaWJyYXJ5OiBVbmljb2RlLCBEYW1taXQKKyMKKyMgVGhpcyBjbGFzcyBmb3Jj
ZXMgWE1MIGRhdGEgaW50byBhIHN0YW5kYXJkIGZvcm1hdCAodXN1YWxseSB0byBVVEYtOAorIyBv
ciBVbmljb2RlKS4gIEl0IGlzIGhlYXZpbHkgYmFzZWQgb24gY29kZSBmcm9tIE1hcmsgUGlsZ3Jp
bSdzCisjIFVuaXZlcnNhbCBGZWVkIFBhcnNlci4gSXQgZG9lcyBub3QgcmV3cml0ZSB0aGUgWE1M
IG9yIEhUTUwgdG8KKyMgcmVmbGVjdCBhIG5ldyBlbmNvZGluZzogdGhhdCBoYXBwZW5zIGluIEJl
YXV0aWZ1bFN0b25lU291cC5oYW5kbGVfcGkKKyMgKFhNTCkgYW5kIEJlYXV0aWZ1bFNvdXAuc3Rh
cnRfbWV0YSAoSFRNTCkuCisKKyMgQXV0b2RldGVjdHMgY2hhcmFjdGVyIGVuY29kaW5ncy4KKyMg
RG93bmxvYWQgZnJvbSBodHRwOi8vY2hhcmRldC5mZWVkcGFyc2VyLm9yZy8KK3RyeToKKyAgICBp
bXBvcnQgY2hhcmRldAorIyAgICBpbXBvcnQgY2hhcmRldC5jb25zdGFudHMKKyMgICAgY2hhcmRl
dC5jb25zdGFudHMuX2RlYnVnID0gMQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGNoYXJkZXQg
PSBOb25lCisKKyMgY2prY29kZWNzIGFuZCBpY29udl9jb2RlYyBtYWtlIFB5dGhvbiBrbm93IGFi
b3V0IG1vcmUgY2hhcmFjdGVyIGVuY29kaW5ncy4KKyMgQm90aCBhcmUgYXZhaWxhYmxlIGZyb20g
aHR0cDovL2Nqa3B5dGhvbi5pMThuLm9yZy8KKyMgVGhleSdyZSBidWlsdCBpbiBpZiB5b3UgdXNl
IFB5dGhvbiAyLjQuCit0cnk6CisgICAgaW1wb3J0IGNqa2NvZGVjcy5hbGlhc2VzCitleGNlcHQg
SW1wb3J0RXJyb3I6CisgICAgcGFzcwordHJ5OgorICAgIGltcG9ydCBpY29udl9jb2RlYworZXhj
ZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKKworY2xhc3MgVW5pY29kZURhbW1pdDoKKyAgICAi
IiJBIGNsYXNzIGZvciBkZXRlY3RpbmcgdGhlIGVuY29kaW5nIG9mIGEgKk1MIGRvY3VtZW50IGFu
ZAorICAgIGNvbnZlcnRpbmcgaXQgdG8gYSBVbmljb2RlIHN0cmluZy4gSWYgdGhlIHNvdXJjZSBl
bmNvZGluZyBpcworICAgIHdpbmRvd3MtMTI1MiwgY2FuIHJlcGxhY2UgTVMgc21hcnQgcXVvdGVz
IHdpdGggdGhlaXIgSFRNTCBvciBYTUwKKyAgICBlcXVpdmFsZW50cy4iIiIKKworICAgICMgVGhp
cyBkaWN0aW9uYXJ5IG1hcHMgY29tbW9ubHkgc2VlbiB2YWx1ZXMgZm9yICJjaGFyc2V0IiBpbiBI
VE1MCisgICAgIyBtZXRhIHRhZ3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgUHl0aG9uIGNvZGVjIG5h
bWVzLiBJdCBvbmx5IGNvdmVycworICAgICMgdmFsdWVzIHRoYXQgYXJlbid0IGluIFB5dGhvbidz
IGFsaWFzZXMgYW5kIGNhbid0IGJlIGRldGVybWluZWQKKyAgICAjIGJ5IHRoZSBoZXVyaXN0aWNz
IGluIGZpbmRfY29kZWMuCisgICAgQ0hBUlNFVF9BTElBU0VTID0geyAibWFjaW50b3NoIiA6ICJt
YWMtcm9tYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIngtc2ppcyIgOiAic2hpZnQtamlz
IiB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwLCBvdmVycmlkZUVuY29kaW5ncz1b
XSwKKyAgICAgICAgICAgICAgICAgc21hcnRRdW90ZXNUbz0neG1sJywgaXNIVE1MPUZhbHNlKToK
KyAgICAgICAgc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyA9IE5vbmUKKyAgICAgICAgc2VsZi5t
YXJrdXAsIGRvY3VtZW50RW5jb2RpbmcsIHNuaWZmZWRFbmNvZGluZyA9IFwKKyAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2RldGVjdEVuY29kaW5nKG1hcmt1cCwgaXNIVE1MKQorICAgICAgICBz
ZWxmLnNtYXJ0UXVvdGVzVG8gPSBzbWFydFF1b3Rlc1RvCisgICAgICAgIHNlbGYudHJpZWRFbmNv
ZGluZ3MgPSBbXQorICAgICAgICBpZiBtYXJrdXAgPT0gJycgb3IgaXNpbnN0YW5jZShtYXJrdXAs
IHVuaWNvZGUpOgorICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVuY29kaW5nID0gTm9uZQorICAg
ICAgICAgICAgc2VsZi51bmljb2RlID0gdW5pY29kZShtYXJrdXApCisgICAgICAgICAgICByZXR1
cm4KKworICAgICAgICB1ID0gTm9uZQorICAgICAgICBmb3IgcHJvcG9zZWRFbmNvZGluZyBpbiBv
dmVycmlkZUVuY29kaW5nczoKKyAgICAgICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0RnJvbShwcm9w
b3NlZEVuY29kaW5nKQorICAgICAgICAgICAgaWYgdTogYnJlYWsKKyAgICAgICAgaWYgbm90IHU6
CisgICAgICAgICAgICBmb3IgcHJvcG9zZWRFbmNvZGluZyBpbiAoZG9jdW1lbnRFbmNvZGluZywg
c25pZmZlZEVuY29kaW5nKToKKyAgICAgICAgICAgICAgICB1ID0gc2VsZi5fY29udmVydEZyb20o
cHJvcG9zZWRFbmNvZGluZykKKyAgICAgICAgICAgICAgICBpZiB1OiBicmVhaworCisgICAgICAg
ICMgSWYgbm8gbHVjayBhbmQgd2UgaGF2ZSBhdXRvLWRldGVjdGlvbiBsaWJyYXJ5LCB0cnkgdGhh
dDoKKyAgICAgICAgaWYgbm90IHUgYW5kIGNoYXJkZXQgYW5kIG5vdCBpc2luc3RhbmNlKHNlbGYu
bWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0RnJvbShjaGFy
ZGV0LmRldGVjdChzZWxmLm1hcmt1cClbJ2VuY29kaW5nJ10pCisKKyAgICAgICAgIyBBcyBhIGxh
c3QgcmVzb3J0LCB0cnkgdXRmLTggYW5kIHdpbmRvd3MtMTI1MjoKKyAgICAgICAgaWYgbm90IHU6
CisgICAgICAgICAgICBmb3IgcHJvcG9zZWRfZW5jb2RpbmcgaW4gKCJ1dGYtOCIsICJ3aW5kb3dz
LTEyNTIiKToKKyAgICAgICAgICAgICAgICB1ID0gc2VsZi5fY29udmVydEZyb20ocHJvcG9zZWRf
ZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgaWYgdTogYnJlYWsKKworICAgICAgICBzZWxmLnVu
aWNvZGUgPSB1CisgICAgICAgIGlmIG5vdCB1OiBzZWxmLm9yaWdpbmFsRW5jb2RpbmcgPSBOb25l
CisKKyAgICBkZWYgX3N1Yk1TQ2hhcihzZWxmLCBvcmlnKToKKyAgICAgICAgIiIiQ2hhbmdlcyBh
IE1TIHNtYXJ0IHF1b3RlIGNoYXJhY3RlciB0byBhbiBYTUwgb3IgSFRNTAorICAgICAgICBlbnRp
dHkuIiIiCisgICAgICAgIHN1YiA9IHNlbGYuTVNfQ0hBUlMuZ2V0KG9yaWcpCisgICAgICAgIGlm
IGlzaW5zdGFuY2Uoc3ViLCB0dXBsZSk6CisgICAgICAgICAgICBpZiBzZWxmLnNtYXJ0UXVvdGVz
VG8gPT0gJ3htbCc6CisgICAgICAgICAgICAgICAgc3ViID0gJyYjeCVzOycgJSBzdWJbMV0KKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3ViID0gJyYlczsnICUgc3ViWzBdCisg
ICAgICAgIHJldHVybiBzdWIKKworICAgIGRlZiBfY29udmVydEZyb20oc2VsZiwgcHJvcG9zZWQp
OgorICAgICAgICBwcm9wb3NlZCA9IHNlbGYuZmluZF9jb2RlYyhwcm9wb3NlZCkKKyAgICAgICAg
aWYgbm90IHByb3Bvc2VkIG9yIHByb3Bvc2VkIGluIHNlbGYudHJpZWRFbmNvZGluZ3M6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLnRyaWVkRW5jb2RpbmdzLmFwcGVuZChw
cm9wb3NlZCkKKyAgICAgICAgbWFya3VwID0gc2VsZi5tYXJrdXAKKworICAgICAgICAjIENvbnZl
cnQgc21hcnQgcXVvdGVzIHRvIEhUTUwgaWYgY29taW5nIGZyb20gYW4gZW5jb2RpbmcKKyAgICAg
ICAgIyB0aGF0IG1pZ2h0IGhhdmUgdGhlbS4KKyAgICAgICAgaWYgc2VsZi5zbWFydFF1b3Rlc1Rv
IGFuZCBwcm9wb3NlZC5sb3dlcigpIGluKCJ3aW5kb3dzLTEyNTIiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzby04ODU5LTEiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzby04
ODU5LTIiKToKKyAgICAgICAgICAgIG1hcmt1cCA9IHJlLmNvbXBpbGUoIihbXHg4MC1ceDlmXSki
KS5zdWIgXAorICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSh4KTogc2VsZi5fc3ViTVNDaGFy
KHguZ3JvdXAoMSkpLAorICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cCkKKworICAgICAgICB0
cnk6CisgICAgICAgICAgICAjIHByaW50ICJUcnlpbmcgdG8gY29udmVydCBkb2N1bWVudCB0byAl
cyIgJSBwcm9wb3NlZAorICAgICAgICAgICAgdSA9IHNlbGYuX3RvVW5pY29kZShtYXJrdXAsIHBy
b3Bvc2VkKQorICAgICAgICAgICAgc2VsZi5tYXJrdXAgPSB1CisgICAgICAgICAgICBzZWxmLm9y
aWdpbmFsRW5jb2RpbmcgPSBwcm9wb3NlZAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgor
ICAgICAgICAgICAgIyBwcmludCAiVGhhdCBkaWRuJ3Qgd29yayEiCisgICAgICAgICAgICAjIHBy
aW50IGUKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICNwcmludCAiQ29ycmVjdCBl
bmNvZGluZzogJXMiICUgcHJvcG9zZWQKKyAgICAgICAgcmV0dXJuIHNlbGYubWFya3VwCisKKyAg
ICBkZWYgX3RvVW5pY29kZShzZWxmLCBkYXRhLCBlbmNvZGluZyk6CisgICAgICAgICcnJ0dpdmVu
IGEgc3RyaW5nIGFuZCBpdHMgZW5jb2RpbmcsIGRlY29kZXMgdGhlIHN0cmluZyBpbnRvIFVuaWNv
ZGUuCisgICAgICAgICVlbmNvZGluZyBpcyBhIHN0cmluZyByZWNvZ25pemVkIGJ5IGVuY29kaW5n
cy5hbGlhc2VzJycnCisKKyAgICAgICAgIyBzdHJpcCBCeXRlIE9yZGVyIE1hcmsgKGlmIHByZXNl
bnQpCisgICAgICAgIGlmIChsZW4oZGF0YSkgPj0gNCkgYW5kIChkYXRhWzoyXSA9PSAnXHhmZVx4
ZmYnKSBcCisgICAgICAgICAgICAgICBhbmQgKGRhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAg
ICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0xNmJlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFb
MjpdCisgICAgICAgIGVsaWYgKGxlbihkYXRhKSA+PSA0KSBhbmQgKGRhdGFbOjJdID09ICdceGZm
XHhmZScpIFwKKyAgICAgICAgICAgICAgICAgYW5kIChkYXRhWzI6NF0gIT0gJ1x4MDBceDAwJyk6
CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMTZsZScKKyAgICAgICAgICAgIGRhdGEgPSBk
YXRhWzI6XQorICAgICAgICBlbGlmIGRhdGFbOjNdID09ICdceGVmXHhiYlx4YmYnOgorICAgICAg
ICAgICAgZW5jb2RpbmcgPSAndXRmLTgnCisgICAgICAgICAgICBkYXRhID0gZGF0YVszOl0KKyAg
ICAgICAgZWxpZiBkYXRhWzo0XSA9PSAnXHgwMFx4MDBceGZlXHhmZic6CisgICAgICAgICAgICBl
bmNvZGluZyA9ICd1dGYtMzJiZScKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzQ6XQorICAgICAg
ICBlbGlmIGRhdGFbOjRdID09ICdceGZmXHhmZVx4MDBceDAwJzoKKyAgICAgICAgICAgIGVuY29k
aW5nID0gJ3V0Zi0zMmxlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFbNDpdCisgICAgICAgIG5l
d2RhdGEgPSB1bmljb2RlKGRhdGEsIGVuY29kaW5nKQorICAgICAgICByZXR1cm4gbmV3ZGF0YQor
CisgICAgZGVmIF9kZXRlY3RFbmNvZGluZyhzZWxmLCB4bWxfZGF0YSwgaXNIVE1MPUZhbHNlKToK
KyAgICAgICAgIiIiR2l2ZW4gYSBkb2N1bWVudCwgdHJpZXMgdG8gZGV0ZWN0IGl0cyBYTUwgZW5j
b2RpbmcuIiIiCisgICAgICAgIHhtbF9lbmNvZGluZyA9IHNuaWZmZWRfeG1sX2VuY29kaW5nID0g
Tm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB4bWxfZGF0YVs6NF0gPT0gJ1x4NGNc
eDZmXHhhN1x4OTQnOgorICAgICAgICAgICAgICAgICMgRUJDRElDCisgICAgICAgICAgICAgICAg
eG1sX2RhdGEgPSBzZWxmLl9lYmNkaWNfdG9fYXNjaWkoeG1sX2RhdGEpCisgICAgICAgICAgICBl
bGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgwMFx4M2NceDAwXHgzZic6CisgICAgICAgICAgICAgICAg
IyBVVEYtMTZCRQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0x
NmJlJworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0x
NmJlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIChsZW4oeG1sX2RhdGEpID49
IDQpIGFuZCAoeG1sX2RhdGFbOjJdID09ICdceGZlXHhmZicpIFwKKyAgICAgICAgICAgICAgICAg
ICAgIGFuZCAoeG1sX2RhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAgICAgICAgICAgICAgICAj
IFVURi0xNkJFIHdpdGggQk9NCisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2Rpbmcg
PSAndXRmLTE2YmUnCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRh
WzI6XSwgJ3V0Zi0xNmJlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIHhtbF9k
YXRhWzo0XSA9PSAnXHgzY1x4MDBceDNmXHgwMCc6CisgICAgICAgICAgICAgICAgIyBVVEYtMTZM
RQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0xNmxlJworICAg
ICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0xNmxlJykuZW5j
b2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIChsZW4oeG1sX2RhdGEpID49IDQpIGFuZCAo
eG1sX2RhdGFbOjJdID09ICdceGZmXHhmZScpIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAo
eG1sX2RhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAgICAgICAgICAgICAgICAjIFVURi0xNkxF
IHdpdGggQk9NCisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2
bGUnCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhWzI6XSwgJ3V0
Zi0xNmxlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9
PSAnXHgwMFx4MDBceDAwXHgzYyc6CisgICAgICAgICAgICAgICAgIyBVVEYtMzJCRQorICAgICAg
ICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0zMmJlJworICAgICAgICAgICAg
ICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0zMmJlJykuZW5jb2RlKCd1dGYt
OCcpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgzY1x4MDBceDAwXHgwMCc6
CisgICAgICAgICAgICAgICAgIyBVVEYtMzJMRQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1s
X2VuY29kaW5nID0gJ3V0Zi0zMmxlJworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29k
ZSh4bWxfZGF0YSwgJ3V0Zi0zMmxlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlm
IHhtbF9kYXRhWzo0XSA9PSAnXHgwMFx4MDBceGZlXHhmZic6CisgICAgICAgICAgICAgICAgIyBV
VEYtMzJCRSB3aXRoIEJPTQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0g
J3V0Zi0zMmJlJworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YVs0
Ol0sICd1dGYtMzJiZScpLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgZWxpZiB4bWxfZGF0
YVs6NF0gPT0gJ1x4ZmZceGZlXHgwMFx4MDAnOgorICAgICAgICAgICAgICAgICMgVVRGLTMyTEUg
d2l0aCBCT00KKyAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICd1dGYtMzJs
ZScKKyAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGFbNDpdLCAndXRm
LTMybGUnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgeG1sX2RhdGFbOjNdID09
ICdceGVmXHhiYlx4YmYnOgorICAgICAgICAgICAgICAgICMgVVRGLTggd2l0aCBCT00KKyAgICAg
ICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICd1dGYtOCcKKyAgICAgICAgICAgICAg
ICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGFbMzpdLCAndXRmLTgnKS5lbmNvZGUoJ3V0Zi04
JykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2Rp
bmcgPSAnYXNjaWknCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAg
ICAgICAgICB4bWxfZW5jb2RpbmdfbWF0Y2ggPSBOb25lCisgICAgICAgIHhtbF9lbmNvZGluZ19t
YXRjaCA9IHJlLmNvbXBpbGUoCisgICAgICAgICAgICAnXjxcPy4qZW5jb2Rpbmc9W1wnIl0oLio/
KVtcJyJdLipcPz4nKS5tYXRjaCh4bWxfZGF0YSkKKyAgICAgICAgaWYgbm90IHhtbF9lbmNvZGlu
Z19tYXRjaCBhbmQgaXNIVE1MOgorICAgICAgICAgICAgcmVnZXhwID0gcmUuY29tcGlsZSgnPFxz
Km1ldGFbXj5dK2NoYXJzZXQ9KFtePl0qPylbO1wnIj5dJywgcmUuSSkKKyAgICAgICAgICAgIHht
bF9lbmNvZGluZ19tYXRjaCA9IHJlZ2V4cC5zZWFyY2goeG1sX2RhdGEpCisgICAgICAgIGlmIHht
bF9lbmNvZGluZ19tYXRjaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHhtbF9lbmNvZGluZyA9
IHhtbF9lbmNvZGluZ19tYXRjaC5ncm91cHMoKVswXS5sb3dlcigpCisgICAgICAgICAgICBpZiBp
c0hUTUw6CisgICAgICAgICAgICAgICAgc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyA9IHhtbF9l
bmNvZGluZworICAgICAgICAgICAgaWYgc25pZmZlZF94bWxfZW5jb2RpbmcgYW5kIFwKKyAgICAg
ICAgICAgICAgICh4bWxfZW5jb2RpbmcgaW4gKCdpc28tMTA2NDYtdWNzLTInLCAndWNzLTInLCAn
Y3N1bmljb2RlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc28tMTA2NDYt
dWNzLTQnLCAndWNzLTQnLCAnY3N1Y3M0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd1dGYtMTYnLCAndXRmLTMyJywgJ3V0Zl8xNicsICd1dGZfMzInLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3V0ZjE2JywgJ3UxNicpKToKKyAgICAgICAgICAgICAgICB4
bWxfZW5jb2RpbmcgPSBzbmlmZmVkX3htbF9lbmNvZGluZworICAgICAgICByZXR1cm4geG1sX2Rh
dGEsIHhtbF9lbmNvZGluZywgc25pZmZlZF94bWxfZW5jb2RpbmcKKworCisgICAgZGVmIGZpbmRf
Y29kZWMoc2VsZiwgY2hhcnNldCk6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2RlYyhzZWxmLkNI
QVJTRVRfQUxJQVNFUy5nZXQoY2hhcnNldCwgY2hhcnNldCkpIFwKKyAgICAgICAgICAgICAgIG9y
IChjaGFyc2V0IGFuZCBzZWxmLl9jb2RlYyhjaGFyc2V0LnJlcGxhY2UoIi0iLCAiIikpKSBcCisg
ICAgICAgICAgICAgICBvciAoY2hhcnNldCBhbmQgc2VsZi5fY29kZWMoY2hhcnNldC5yZXBsYWNl
KCItIiwgIl8iKSkpIFwKKyAgICAgICAgICAgICAgIG9yIGNoYXJzZXQKKworICAgIGRlZiBfY29k
ZWMoc2VsZiwgY2hhcnNldCk6CisgICAgICAgIGlmIG5vdCBjaGFyc2V0OiByZXR1cm4gY2hhcnNl
dAorICAgICAgICBjb2RlYyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29kZWNz
Lmxvb2t1cChjaGFyc2V0KQorICAgICAgICAgICAgY29kZWMgPSBjaGFyc2V0CisgICAgICAgIGV4
Y2VwdCAoTG9va3VwRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAg
ICByZXR1cm4gY29kZWMKKworICAgIEVCQ0RJQ19UT19BU0NJSV9NQVAgPSBOb25lCisgICAgZGVm
IF9lYmNkaWNfdG9fYXNjaWkoc2VsZiwgcyk6CisgICAgICAgIGMgPSBzZWxmLl9fY2xhc3NfXwor
ICAgICAgICBpZiBub3QgYy5FQkNESUNfVE9fQVNDSUlfTUFQOgorICAgICAgICAgICAgZW1hcCA9
ICgwLDEsMiwzLDE1Niw5LDEzNCwxMjcsMTUxLDE0MSwxNDIsMTEsMTIsMTMsMTQsMTUsCisgICAg
ICAgICAgICAgICAgICAgIDE2LDE3LDE4LDE5LDE1NywxMzMsOCwxMzUsMjQsMjUsMTQ2LDE0Mywy
OCwyOSwzMCwzMSwKKyAgICAgICAgICAgICAgICAgICAgMTI4LDEyOSwxMzAsMTMxLDEzMiwxMCwy
MywyNywxMzYsMTM3LDEzOCwxMzksMTQwLDUsNiw3LAorICAgICAgICAgICAgICAgICAgICAxNDQs
MTQ1LDIyLDE0NywxNDgsMTQ5LDE1MCw0LDE1MiwxNTMsMTU0LDE1NSwyMCwyMSwxNTgsMjYsCisg
ICAgICAgICAgICAgICAgICAgIDMyLDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4
LDkxLDQ2LDYwLDQwLDQzLDMzLAorICAgICAgICAgICAgICAgICAgICAzOCwxNjksMTcwLDE3MSwx
NzIsMTczLDE3NCwxNzUsMTc2LDE3Nyw5MywzNiw0Miw0MSw1OSw5NCwKKyAgICAgICAgICAgICAg
ICAgICAgNDUsNDcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxMjQsNDQsMzcsOTUs
NjIsNjMsCisgICAgICAgICAgICAgICAgICAgIDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5Miwx
OTMsMTk0LDk2LDU4LDM1LDY0LDM5LDYxLDM0LAorICAgICAgICAgICAgICAgICAgICAxOTUsOTcs
OTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTk2LDE5NywxOTgsMTk5LDIwMCwKKyAgICAg
ICAgICAgICAgICAgICAgMjAxLDIwMiwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDEx
NCwyMDMsMjA0LDIwNSwKKyAgICAgICAgICAgICAgICAgICAgMjA2LDIwNywyMDgsMjA5LDEyNiwx
MTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDIxMCwKKyAgICAgICAgICAgICAgICAgICAg
MjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwK
KyAgICAgICAgICAgICAgICAgICAgMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDEyMyw2NSw2
Niw2Nyw2OCw2OSw3MCw3MSw3MiwKKyAgICAgICAgICAgICAgICAgICAgNzMsMjMyLDIzMywyMzQs
MjM1LDIzNiwyMzcsMTI1LDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLAorICAgICAgICAgICAgICAg
ICAgICA4MiwyMzgsMjM5LDI0MCwyNDEsMjQyLDI0Myw5MiwxNTksODMsODQsODUsODYsODcsODgs
ODksCisgICAgICAgICAgICAgICAgICAgIDkwLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDQ4LDQ5
LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LAorICAgICAgICAgICAgICAgICAgICAyNTAsMjUxLDI1
MiwyNTMsMjU0LDI1NSkKKyAgICAgICAgICAgIGltcG9ydCBzdHJpbmcKKyAgICAgICAgICAgIGMu
RUJDRElDX1RPX0FTQ0lJX01BUCA9IHN0cmluZy5tYWtldHJhbnMoIFwKKyAgICAgICAgICAgICcn
LmpvaW4obWFwKGNociwgcmFuZ2UoMjU2KSkpLCAnJy5qb2luKG1hcChjaHIsIGVtYXApKSkKKyAg
ICAgICAgcmV0dXJuIHMudHJhbnNsYXRlKGMuRUJDRElDX1RPX0FTQ0lJX01BUCkKKworICAgIE1T
X0NIQVJTID0geyAnXHg4MCcgOiAoJ2V1cm8nLCAnMjBBQycpLAorICAgICAgICAgICAgICAgICAn
XHg4MScgOiAnICcsCisgICAgICAgICAgICAgICAgICdceDgyJyA6ICgnc2JxdW8nLCAnMjAxQScp
LAorICAgICAgICAgICAgICAgICAnXHg4MycgOiAoJ2Zub2YnLCAnMTkyJyksCisgICAgICAgICAg
ICAgICAgICdceDg0JyA6ICgnYmRxdW8nLCAnMjAxRScpLAorICAgICAgICAgICAgICAgICAnXHg4
NScgOiAoJ2hlbGxpcCcsICcyMDI2JyksCisgICAgICAgICAgICAgICAgICdceDg2JyA6ICgnZGFn
Z2VyJywgJzIwMjAnKSwKKyAgICAgICAgICAgICAgICAgJ1x4ODcnIDogKCdEYWdnZXInLCAnMjAy
MScpLAorICAgICAgICAgICAgICAgICAnXHg4OCcgOiAoJ2NpcmMnLCAnMkM2JyksCisgICAgICAg
ICAgICAgICAgICdceDg5JyA6ICgncGVybWlsJywgJzIwMzAnKSwKKyAgICAgICAgICAgICAgICAg
J1x4OEEnIDogKCdTY2Fyb24nLCAnMTYwJyksCisgICAgICAgICAgICAgICAgICdceDhCJyA6ICgn
bHNhcXVvJywgJzIwMzknKSwKKyAgICAgICAgICAgICAgICAgJ1x4OEMnIDogKCdPRWxpZycsICcx
NTInKSwKKyAgICAgICAgICAgICAgICAgJ1x4OEQnIDogJz8nLAorICAgICAgICAgICAgICAgICAn
XHg4RScgOiAoJyN4MTdEJywgJzE3RCcpLAorICAgICAgICAgICAgICAgICAnXHg4RicgOiAnPycs
CisgICAgICAgICAgICAgICAgICdceDkwJyA6ICc/JywKKyAgICAgICAgICAgICAgICAgJ1x4OTEn
IDogKCdsc3F1bycsICcyMDE4JyksCisgICAgICAgICAgICAgICAgICdceDkyJyA6ICgncnNxdW8n
LCAnMjAxOScpLAorICAgICAgICAgICAgICAgICAnXHg5MycgOiAoJ2xkcXVvJywgJzIwMUMnKSwK
KyAgICAgICAgICAgICAgICAgJ1x4OTQnIDogKCdyZHF1bycsICcyMDFEJyksCisgICAgICAgICAg
ICAgICAgICdceDk1JyA6ICgnYnVsbCcsICcyMDIyJyksCisgICAgICAgICAgICAgICAgICdceDk2
JyA6ICgnbmRhc2gnLCAnMjAxMycpLAorICAgICAgICAgICAgICAgICAnXHg5NycgOiAoJ21kYXNo
JywgJzIwMTQnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OTgnIDogKCd0aWxkZScsICcyREMnKSwK
KyAgICAgICAgICAgICAgICAgJ1x4OTknIDogKCd0cmFkZScsICcyMTIyJyksCisgICAgICAgICAg
ICAgICAgICdceDlhJyA6ICgnc2Nhcm9uJywgJzE2MScpLAorICAgICAgICAgICAgICAgICAnXHg5
YicgOiAoJ3JzYXF1bycsICcyMDNBJyksCisgICAgICAgICAgICAgICAgICdceDljJyA6ICgnb2Vs
aWcnLCAnMTUzJyksCisgICAgICAgICAgICAgICAgICdceDlkJyA6ICc/JywKKyAgICAgICAgICAg
ICAgICAgJ1x4OWUnIDogKCcjeDE3RScsICcxN0UnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OWYn
IDogKCdZdW1sJywgJycpLH0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjQnkgZGVmYXVsdCwgYWN0
IGFzIGFuIEhUTUwgcHJldHR5LXByaW50ZXIuCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgor
ICAgIGltcG9ydCBzeXMKKyAgICBzb3VwID0gQmVhdXRpZnVsU291cChzeXMuc3RkaW4pCisgICAg
cHJpbnQgc291cC5wcmV0dGlmeSgpCmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9y
dC9ld3MtYXBwL2V3cy90aGlyZHBhcnR5L19faW5pdF9fLnB5IGIvVG9vbHMvQnVpbGRTbGF2ZVN1
cHBvcnQvZXdzLWFwcC9ld3MvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwMTQwY2QzMWM1ZC4uYmQ0NGEyZDVjZTgg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxOC0xMS0yNCAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgW2V3cy1hcHBdIEFkZCBzdXBwb3J0IHRvIGdldCBsaXN0IG9mIEJ1Z3pp
bGxhIHBhdGNoZXMgbmVlZGluZyByZXZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5MTk0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvY29tbW9u
L2J1Z3ppbGxhLnB5OgorICAgICAgICAoQnVnemlsbGEuZ2V0X2xpc3Rfb2ZfcGF0Y2hlc19uZWVk
aW5nX3Jldmlld3MpOiBHZXQgbGlzdCBvZiBwYXRjaGVzIG5lZWRpbmcgcmV2aWV3LgorICAgICAg
ICAoQnVnemlsbGFCZWF1dGlmdWxTb3VwLmZldGNoX2F0dGFjaG1lbnRfaWRzX2Zyb21fcmV2aWV3
X3F1ZXVlKTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1
Z3ppbGxhL2J1Z3ppbGxhLnB5CisgICAgICAgIChCdWd6aWxsYUJlYXV0aWZ1bFNvdXAuX2xvYWRf
cXVlcnkpOiBEaXR0by4KKyAgICAgICAgKEJ1Z3ppbGxhQmVhdXRpZnVsU291cC5fcGFyc2VfYXR0
YWNobWVudF9pZHNfcmVxdWVzdF9xdWVyeSk6IERpdHRvLgorICAgICAgICAqIEJ1aWxkU2xhdmVT
dXBwb3J0L2V3cy1hcHAvZXdzL3RoaXJkcGFydHkvQmVhdXRpZnVsU291cC5weTogQ29waWVkIGZy
b20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L0JlYXV0aWZ1bFNvdXAucHkKKyAg
ICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90aGlyZHBhcnR5L19faW5pdF9f
LnB5OiBBZGRlZC4KKworMjAxOC0xMS0yNCAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW2V3cy1hcHBdIEFkZCBzdXBwb3J0IHRvIGdldCBsaXN0IG9mIEJ1
Z3ppbGxhIHBhdGNoZXMgbmVlZGluZyByZXZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTk0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvY29t
bW9uL2J1Z3ppbGxhLnB5OgorICAgICAgICAoQnVnemlsbGEuZmlsZV9wYXRoX2Zvcl9wYXRjaCk6
CisgICAgICAgIChCdWd6aWxsYSk6CisgICAgICAgIChCdWd6aWxsYS5nZXRfbGlzdF9vZl9wYXRj
aGVzX25lZWRpbmdfcmV2aWV3cyk6CisgICAgICAgIChCdWd6aWxsYUJlYXV0aWZ1bFNvdXApOgor
ICAgICAgICAoQnVnemlsbGFCZWF1dGlmdWxTb3VwLl9faW5pdF9fKToKKyAgICAgICAgKEJ1Z3pp
bGxhQmVhdXRpZnVsU291cC5fZ2V0X2Jyb3dzZXIpOgorICAgICAgICAoQnVnemlsbGFCZWF1dGlm
dWxTb3VwLl9zZXRfYnJvd3Nlcik6CisgICAgICAgIChCdWd6aWxsYUJlYXV0aWZ1bFNvdXAuZmV0
Y2hfYXR0YWNobWVudF9pZHNfZnJvbV9yZXZpZXdfcXVldWUpOgorICAgICAgICAoQnVnemlsbGFC
ZWF1dGlmdWxTb3VwLl9sb2FkX3F1ZXJ5KToKKyAgICAgICAgKEJ1Z3ppbGxhQmVhdXRpZnVsU291
cC5fcGFyc2VfYXR0YWNobWVudF9pZHNfcmVxdWVzdF9xdWVyeSk6CisgICAgICAgICogQnVpbGRT
bGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvdGhpcmRwYXJ0eS9CZWF1dGlmdWxTb3VwLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90aGlyZHBhcnR5L19f
aW5pdF9fLnB5OiBBZGRlZC4KKwogMjAxOC0xMS0yNCAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW2V3cy1hcHBdIEFkZCBzdXBwb3J0IHRvIGRvd25sb2Fk
IFBhdGNoIGZyb20gQnVnemlsbGEKLS0gCjIuMTcuMiAoQXBwbGUgR2l0LTExMykKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355663</attachid>
            <date>2018-11-26 12:03:46 -0800</date>
            <delta_ts>2018-11-26 20:01:08 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0007-ews-app-Add-support-to-get-list-of-Bugzilla-patches-.patch</filename>
            <type>text/plain</type>
            <size>87994</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">RnJvbSA0ODM1ZTI4Y2NlMmQ2ZTk1ZjcwOWMwNjRmMGI5OTFjZmZiMTRmOGRhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBYWthc2ggSmFpbiA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgpE
YXRlOiBNb24sIDI2IE5vdiAyMDE4IDEyOjAxOjQ4IC0wODAwClN1YmplY3Q6IFtQQVRDSCA3Lzdd
IFtld3MtYXBwXSBBZGQgc3VwcG9ydCB0byBnZXQgbGlzdCBvZiBCdWd6aWxsYSBwYXRjaGVzCiBu
ZWVkaW5nIHJldmlldyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkx
OTQyCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiogQnVpbGRTbGF2ZVN1cHBvcnQvZXdz
LWFwcC9ld3MvY29tbW9uL2J1Z3ppbGxhLnB5OgooQnVnemlsbGEuZ2V0X2xpc3Rfb2ZfcGF0Y2hl
c19uZWVkaW5nX3Jldmlld3MpOiBHZXQgbGlzdCBvZiBwYXRjaGVzIG5lZWRpbmcgcmV2aWV3Lgoo
QnVnemlsbGFCZWF1dGlmdWxTb3VwLmZldGNoX2F0dGFjaG1lbnRfaWRzX2Zyb21fcmV2aWV3X3F1
ZXVlKTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1Z3pp
bGxhL2J1Z3ppbGxhLnB5CihCdWd6aWxsYUJlYXV0aWZ1bFNvdXAuX2xvYWRfcXVlcnkpOiBEaXR0
by4KKEJ1Z3ppbGxhQmVhdXRpZnVsU291cC5fcGFyc2VfYXR0YWNobWVudF9pZHNfcmVxdWVzdF9x
dWVyeSk6IERpdHRvLgoqIEJ1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL3RoaXJkcGFydHkv
QmVhdXRpZnVsU291cC5weTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L0JlYXV0aWZ1bFNvdXAucHkKKiBCdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90
aGlyZHBhcnR5L19faW5pdF9fLnB5OiBBZGRlZC4KLS0tCiAuLi4vZXdzLWFwcC9ld3MvY29tbW9u
L2J1Z3ppbGxhLnB5ICAgICAgICAgICAgfCAgIDcxICsKIC4uLi9ld3MtYXBwL2V3cy90aGlyZHBh
cnR5L0JlYXV0aWZ1bFNvdXAucHkgICB8IDIwMTQgKysrKysrKysrKysrKysrKysKIC4uLi9ld3Mt
YXBwL2V3cy90aGlyZHBhcnR5L19faW5pdF9fLnB5ICAgICAgICB8ICAgIDAKIFRvb2xzL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTUgKwogNCBmaWxlcyBjaGFu
Z2VkLCAyMTAwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9CdWlsZFNs
YXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90aGlyZHBhcnR5L0JlYXV0aWZ1bFNvdXAucHkKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90aGlyZHBh
cnR5L19faW5pdF9fLnB5CgpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdz
LWFwcC9ld3MvY29tbW9uL2J1Z3ppbGxhLnB5IGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdz
LWFwcC9ld3MvY29tbW9uL2J1Z3ppbGxhLnB5CmluZGV4IDNhMjU0ZGU0YzZlLi5lOWIzZjgxZjdm
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvY29tbW9u
L2J1Z3ppbGxhLnB5CisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL2Nv
bW1vbi9idWd6aWxsYS5weQpAQCAtMjIsOCArMjIsMTQgQEAKIAogaW1wb3J0IGJhc2U2NAogaW1w
b3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CisKK2Zyb20g
ZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lZGVsdGEKIAogZnJvbSBld3MubW9kZWxzLnBh
dGNoIGltcG9ydCBQYXRjaAorZnJvbSBld3MudGhpcmRwYXJ0eS5CZWF1dGlmdWxTb3VwIGltcG9y
dCBCZWF1dGlmdWxTb3VwLCBTb3VwU3RyYWluZXIKIGltcG9ydCBld3MuY29tbW9uLnV0aWwgYXMg
dXRpbAogaW1wb3J0IGV3cy5jb25maWcgYXMgY29uZmlnCiAKQEAgLTY3LDMgKzczLDY4IEBAIGNs
YXNzIEJ1Z3ppbGxhKCk6CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjb25maWcuUEFU
Q0hfRk9MREVSKToKICAgICAgICAgICAgIG9zLm1rZGlyKGNvbmZpZy5QQVRDSF9GT0xERVIpCiAg
ICAgICAgIHJldHVybiBjb25maWcuUEFUQ0hfRk9MREVSICsgJ3t9LnBhdGNoJy5mb3JtYXQocGF0
Y2hfaWQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0X2xpc3Rfb2ZfcGF0Y2hlc19u
ZWVkaW5nX3Jldmlld3MoY2xzKToKKyAgICAgICAgY3VycmVudF90aW1lID0gZGF0ZXRpbWUudG9k
YXkoKQorICAgICAgICBpZHNfbmVlZGluZ19yZXZpZXcgPSBzZXQoQnVnemlsbGFCZWF1dGlmdWxT
b3VwKCkuZmV0Y2hfYXR0YWNobWVudF9pZHNfZnJvbV9yZXZpZXdfcXVldWUoY3VycmVudF90aW1l
IC0gdGltZWRlbHRhKDcpKSkKKyAgICAgICAgI1RPRE86IGFkZCBzZWN1cml0eSBidWdzIHN1cHBv
cnQgaGVlcmUuCisgICAgICAgIHJldHVybiBpZHNfbmVlZGluZ19yZXZpZXcKKworCitjbGFzcyBC
dWd6aWxsYUJlYXV0aWZ1bFNvdXAoKToKKyAgICAjIEZJWE1FOiBEZXByZWNhdGUgdGhpcyBjbGFz
cyB3aGVuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDg1
MzEgaXMgZml4ZWQuCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9icm93
c2VyID0gTm9uZQorCisgICAgZGVmIF9nZXRfYnJvd3NlcihzZWxmKToKKyAgICAgICAgaWYgbm90
IHNlbGYuX2Jyb3dzZXI6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjAw
KQorICAgICAgICAgICAgZnJvbSBtZWNoYW5pemUgaW1wb3J0IEJyb3dzZXIKKyAgICAgICAgICAg
IHNlbGYuX2Jyb3dzZXIgPSBCcm93c2VyKCkKKyAgICAgICAgICAgIHNlbGYuX2Jyb3dzZXIuc2V0
X2hhbmRsZV9yb2JvdHMoRmFsc2UpCisgICAgICAgIHJldHVybiBzZWxmLl9icm93c2VyCisKKyAg
ICBkZWYgX3NldF9icm93c2VyKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fYnJvd3NlciA9
IHZhbHVlCisKKyAgICBicm93c2VyID0gcHJvcGVydHkoX2dldF9icm93c2VyLCBfc2V0X2Jyb3dz
ZXIpCisKKyAgICBkZWYgZmV0Y2hfYXR0YWNobWVudF9pZHNfZnJvbV9yZXZpZXdfcXVldWUoc2Vs
Ziwgc2luY2U9Tm9uZSwgb25seV9zZWN1cml0eV9idWdzPUZhbHNlKToKKyAgICAgICAgcmV2aWV3
X3F1ZXVlX3VybCA9ICdyZXF1ZXN0LmNnaT9hY3Rpb249cXVldWUmdHlwZT1yZXZpZXcmZ3JvdXA9
dHlwZScKKyAgICAgICAgaWYgb25seV9zZWN1cml0eV9idWdzOgorICAgICAgICAgICAgcmV2aWV3
X3F1ZXVlX3VybCArPSAnJnByb2R1Y3Q9U2VjdXJpdHknCisgICAgICAgIHJldHVybiBzZWxmLl9w
YXJzZV9hdHRhY2htZW50X2lkc19yZXF1ZXN0X3F1ZXJ5KHNlbGYuX2xvYWRfcXVlcnkocmV2aWV3
X3F1ZXVlX3VybCksIHNpbmNlKQorCisgICAgZGVmIF9sb2FkX3F1ZXJ5KHNlbGYsIHF1ZXJ5KToK
KyAgICAgICAgIyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGF1dGhlbnRpY2F0ZQorICAgICAg
ICBmdWxsX3VybCA9ICd7fXt9Jy5mb3JtYXQoY29uZmlnLkJVR19TRVJWRVJfVVJMLCBxdWVyeSkK
KyAgICAgICAgX2xvZy5pbmZvKCdHZXR0aW5nIGxpc3Qgb2YgcGF0Y2hlcyBuZWVkaW5nIHJldmll
dywgVVJMOiB7fScuZm9ybWF0KGZ1bGxfdXJsKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuYnJvd3Nl
ci5vcGVuKGZ1bGxfdXJsKQorCisgICAgZGVmIF9wYXJzZV9hdHRhY2htZW50X2lkc19yZXF1ZXN0
X3F1ZXJ5KHNlbGYsIHBhZ2UsIHNpbmNlPU5vbmUpOgorICAgICAgICAjIEZvcm1hdHMKKyAgICAg
ICAgZGlnaXRzID0gcmUuY29tcGlsZSgiXGQrIikKKyAgICAgICAgYXR0YWNobWVudF9ocmVmID0g
cmUuY29tcGlsZSgiYXR0YWNobWVudC5jZ2lcP2lkPVxkKyZhY3Rpb249cmV2aWV3IikKKyAgICAg
ICAgIyBpZiBubyBkYXRlIGlzIGdpdmVuLCByZXR1cm4gYWxsIGlkcworICAgICAgICBpZiBub3Qg
c2luY2U6CisgICAgICAgICAgICBhdHRhY2htZW50X2xpbmtzID0gU291cFN0cmFpbmVyKCJhIiwg
aHJlZj1hdHRhY2htZW50X2hyZWYpCisgICAgICAgICAgICByZXR1cm4gW2ludChkaWdpdHMuc2Vh
cmNoKHRhZ1siaHJlZiJdKS5ncm91cCgwKSkKKyAgICAgICAgICAgICAgICBmb3IgdGFnIGluIEJl
YXV0aWZ1bFNvdXAocGFnZSwgcGFyc2VPbmx5VGhlc2U9YXR0YWNobWVudF9saW5rcyldCisKKyAg
ICAgICAgIyBQYXJzZSB0aGUgbWFpbiB0YWJsZSBvbmx5CisgICAgICAgIGRhdGVfZm9ybWF0ID0g
cmUuY29tcGlsZSgiXGR7NH0tXGR7Mn0tXGR7Mn0gXGR7Mn06XGR7Mn0iKQorICAgICAgICBtdGFi
ID0gU291cFN0cmFpbmVyKCJ0YWJsZSIsIHsiY2xhc3MiOiAicmVxdWVzdHMifSkKKyAgICAgICAg
c291cCA9IEJlYXV0aWZ1bFNvdXAocGFnZSwgcGFyc2VPbmx5VGhlc2U9bXRhYikKKyAgICAgICAg
cGF0Y2hfaWRzID0gW10KKworICAgICAgICBmb3Igcm93IGluIHNvdXAuZmluZEFsbCgidHIiKToK
KyAgICAgICAgICAgIHBhdGNoX3RhZyA9IHJvdy5maW5kKCJhIiwgeyJocmVmIjogYXR0YWNobWVu
dF9ocmVmfSkKKyAgICAgICAgICAgIGlmIG5vdCBwYXRjaF90YWc6CisgICAgICAgICAgICAgICAg
Y29udGludWUKKyAgICAgICAgICAgIHBhdGNoX2lkID0gaW50KGRpZ2l0cy5zZWFyY2gocGF0Y2hf
dGFnWyJocmVmIl0pLmdyb3VwKDApKQorICAgICAgICAgICAgZGF0ZV90YWcgPSByb3cuZmluZCgi
dGQiLCB0ZXh0PWRhdGVfZm9ybWF0KQorICAgICAgICAgICAgaWYgZGF0ZV90YWcgYW5kIGRhdGV0
aW1lLnN0cnB0aW1lKGRhdGVfZm9ybWF0LnNlYXJjaChkYXRlX3RhZykuZ3JvdXAoMCksICIlWS0l
bS0lZCAlSDolTSIpIDwgc2luY2U6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAg
ICAgIHBhdGNoX2lkcy5hcHBlbmQocGF0Y2hfaWQpCisgICAgICAgIHJldHVybiBwYXRjaF9pZHMK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL3RoaXJkcGFy
dHkvQmVhdXRpZnVsU291cC5weSBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdz
L3RoaXJkcGFydHkvQmVhdXRpZnVsU291cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uNGIxN2I4NTNkMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9CdWlsZFNs
YXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90aGlyZHBhcnR5L0JlYXV0aWZ1bFNvdXAucHkKQEAgLTAs
MCArMSwyMDE0IEBACisiIiJCZWF1dGlmdWwgU291cAorRWxpeGlyIGFuZCBUb25pYworIlRoZSBT
Y3JlZW4tU2NyYXBlcidzIEZyaWVuZCIKK2h0dHA6Ly93d3cuY3J1bW15LmNvbS9zb2Z0d2FyZS9C
ZWF1dGlmdWxTb3VwLworCitCZWF1dGlmdWwgU291cCBwYXJzZXMgYSAocG9zc2libHkgaW52YWxp
ZCkgWE1MIG9yIEhUTUwgZG9jdW1lbnQgaW50byBhCit0cmVlIHJlcHJlc2VudGF0aW9uLiBJdCBw
cm92aWRlcyBtZXRob2RzIGFuZCBQeXRob25pYyBpZGlvbXMgdGhhdCBtYWtlCitpdCBlYXN5IHRv
IG5hdmlnYXRlLCBzZWFyY2gsIGFuZCBtb2RpZnkgdGhlIHRyZWUuCisKK0Egd2VsbC1mb3JtZWQg
WE1ML0hUTUwgZG9jdW1lbnQgeWllbGRzIGEgd2VsbC1mb3JtZWQgZGF0YQorc3RydWN0dXJlLiBB
biBpbGwtZm9ybWVkIFhNTC9IVE1MIGRvY3VtZW50IHlpZWxkcyBhIGNvcnJlc3BvbmRpbmdseQor
aWxsLWZvcm1lZCBkYXRhIHN0cnVjdHVyZS4gSWYgeW91ciBkb2N1bWVudCBpcyBvbmx5IGxvY2Fs
bHkKK3dlbGwtZm9ybWVkLCB5b3UgY2FuIHVzZSB0aGlzIGxpYnJhcnkgdG8gZmluZCBhbmQgcHJv
Y2VzcyB0aGUKK3dlbGwtZm9ybWVkIHBhcnQgb2YgaXQuCisKK0JlYXV0aWZ1bCBTb3VwIHdvcmtz
IHdpdGggUHl0aG9uIDIuMiBhbmQgdXAuIEl0IGhhcyBubyBleHRlcm5hbAorZGVwZW5kZW5jaWVz
LCBidXQgeW91J2xsIGhhdmUgbW9yZSBzdWNjZXNzIGF0IGNvbnZlcnRpbmcgZGF0YSB0byBVVEYt
OAoraWYgeW91IGFsc28gaW5zdGFsbCB0aGVzZSB0aHJlZSBwYWNrYWdlczoKKworKiBjaGFyZGV0
LCBmb3IgYXV0by1kZXRlY3RpbmcgY2hhcmFjdGVyIGVuY29kaW5ncworICBodHRwOi8vY2hhcmRl
dC5mZWVkcGFyc2VyLm9yZy8KKyogY2prY29kZWNzIGFuZCBpY29udl9jb2RlYywgd2hpY2ggYWRk
IG1vcmUgZW5jb2RpbmdzIHRvIHRoZSBvbmVzIHN1cHBvcnRlZAorICBieSBzdG9jayBQeXRob24u
CisgIGh0dHA6Ly9jamtweXRob24uaTE4bi5vcmcvCisKK0JlYXV0aWZ1bCBTb3VwIGRlZmluZXMg
Y2xhc3NlcyBmb3IgdHdvIG1haW4gcGFyc2luZyBzdHJhdGVnaWVzOgorCisgKiBCZWF1dGlmdWxT
dG9uZVNvdXAsIGZvciBwYXJzaW5nIFhNTCwgU0dNTCwgb3IgeW91ciBkb21haW4tc3BlY2lmaWMK
KyAgIGxhbmd1YWdlIHRoYXQga2luZCBvZiBsb29rcyBsaWtlIFhNTC4KKworICogQmVhdXRpZnVs
U291cCwgZm9yIHBhcnNpbmcgcnVuLW9mLXRoZS1taWxsIEhUTUwgY29kZSwgYmUgaXQgdmFsaWQK
KyAgIG9yIGludmFsaWQuIFRoaXMgY2xhc3MgaGFzIHdlYiBicm93c2VyLWxpa2UgaGV1cmlzdGlj
cyBmb3IKKyAgIG9idGFpbmluZyBhIHNlbnNpYmxlIHBhcnNlIHRyZWUgaW4gdGhlIGZhY2Ugb2Yg
Y29tbW9uIEhUTUwgZXJyb3JzLgorCitCZWF1dGlmdWwgU291cCBhbHNvIGRlZmluZXMgYSBjbGFz
cyAoVW5pY29kZURhbW1pdCkgZm9yIGF1dG9kZXRlY3RpbmcKK3RoZSBlbmNvZGluZyBvZiBhbiBI
VE1MIG9yIFhNTCBkb2N1bWVudCwgYW5kIGNvbnZlcnRpbmcgaXQgdG8KK1VuaWNvZGUuIE11Y2gg
b2YgdGhpcyBjb2RlIGlzIHRha2VuIGZyb20gTWFyayBQaWxncmltJ3MgVW5pdmVyc2FsIEZlZWQg
UGFyc2VyLgorCitGb3IgbW9yZSB0aGFuIHlvdSBldmVyIHdhbnRlZCB0byBrbm93IGFib3V0IEJl
YXV0aWZ1bCBTb3VwLCBzZWUgdGhlCitkb2N1bWVudGF0aW9uOgoraHR0cDovL3d3dy5jcnVtbXku
Y29tL3NvZnR3YXJlL0JlYXV0aWZ1bFNvdXAvZG9jdW1lbnRhdGlvbi5odG1sCisKK0hlcmUsIGhh
dmUgc29tZSBsZWdhbGVzZToKKworQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAsIExlb25hcmQgUmlj
aGFyZHNvbgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKK21ldDoKKworICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgdGhlIEJlYXV0aWZ1bCBTb3VwIENvbnNvcnRpdW0gYW5kIEFsbAorICAgIE5pZ2h0IEtvc2hl
ciBCYWtlcnkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQorICAgIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCisgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCitD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UsIERBTU1JVC4KKworIiIiCitmcm9tIF9fZnV0dXJlX18gaW1w
b3J0IGdlbmVyYXRvcnMKKworX19hdXRob3JfXyA9ICJMZW9uYXJkIFJpY2hhcmRzb24gKGxlb25h
cmRyQHNlZ2ZhdWx0Lm9yZykiCitfX3ZlcnNpb25fXyA9ICIzLjIuMCIKK19fY29weXJpZ2h0X18g
PSAiQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgTGVvbmFyZCBSaWNoYXJkc29uIgorX19saWNlbnNl
X18gPSAiTmV3LXN0eWxlIEJTRCIKKworZnJvbSBzZ21sbGliIGltcG9ydCBTR01MUGFyc2VyLCBT
R01MUGFyc2VFcnJvcgoraW1wb3J0IGNvZGVjcworaW1wb3J0IG1hcmt1cGJhc2UKK2ltcG9ydCB0
eXBlcworaW1wb3J0IHJlCitpbXBvcnQgc2dtbGxpYgordHJ5OgorICBmcm9tIGh0bWxlbnRpdHlk
ZWZzIGltcG9ydCBuYW1lMmNvZGVwb2ludAorZXhjZXB0IEltcG9ydEVycm9yOgorICBuYW1lMmNv
ZGVwb2ludCA9IHt9Cit0cnk6CisgICAgc2V0CitleGNlcHQgTmFtZUVycm9yOgorICAgIGZyb20g
c2V0cyBpbXBvcnQgU2V0IGFzIHNldAorCisjVGhlc2UgaGFja3MgbWFrZSBCZWF1dGlmdWwgU291
cCBhYmxlIHRvIHBhcnNlIFhNTCB3aXRoIG5hbWVzcGFjZXMKK3NnbWxsaWIudGFnZmluZCA9IHJl
LmNvbXBpbGUoJ1thLXpBLVpdWy1fLjphLXpBLVowLTldKicpCittYXJrdXBiYXNlLl9kZWNsbmFt
ZV9tYXRjaCA9IHJlLmNvbXBpbGUocidbYS16QS1aXVstXy46YS16QS1aMC05XSpccyonKS5tYXRj
aAorCitERUZBVUxUX09VVFBVVF9FTkNPRElORyA9ICJ1dGYtOCIKKworZGVmIF9tYXRjaF9jc3Nf
Y2xhc3Moc3RyKToKKyAgICAiIiJCdWlsZCBhIFJFIHRvIG1hdGNoIHRoZSBnaXZlbiBDU1MgY2xh
c3MuIiIiCisgICAgcmV0dXJuIHJlLmNvbXBpbGUociIoXnwuKlxzKSVzKCR8XHMpIiAlIHN0cikK
KworIyBGaXJzdCwgdGhlIGNsYXNzZXMgdGhhdCByZXByZXNlbnQgbWFya3VwIGVsZW1lbnRzLgor
CitjbGFzcyBQYWdlRWxlbWVudChvYmplY3QpOgorICAgICIiIkNvbnRhaW5zIHRoZSBuYXZpZ2F0
aW9uYWwgaW5mb3JtYXRpb24gZm9yIHNvbWUgcGFydCBvZiB0aGUgcGFnZQorICAgIChlaXRoZXIg
YSB0YWcgb3IgYSBwaWVjZSBvZiB0ZXh0KSIiIgorCisgICAgZGVmIHNldHVwKHNlbGYsIHBhcmVu
dD1Ob25lLCBwcmV2aW91cz1Ob25lKToKKyAgICAgICAgIiIiU2V0cyB1cCB0aGUgaW5pdGlhbCBy
ZWxhdGlvbnMgYmV0d2VlbiB0aGlzIGVsZW1lbnQgYW5kCisgICAgICAgIG90aGVyIGVsZW1lbnRz
LiIiIgorICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAorICAgICAgICBzZWxmLnByZXZpb3Vz
ID0gcHJldmlvdXMKKyAgICAgICAgc2VsZi5uZXh0ID0gTm9uZQorICAgICAgICBzZWxmLnByZXZp
b3VzU2libGluZyA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0U2libGluZyA9IE5vbmUKKyAgICAg
ICAgaWYgc2VsZi5wYXJlbnQgYW5kIHNlbGYucGFyZW50LmNvbnRlbnRzOgorICAgICAgICAgICAg
c2VsZi5wcmV2aW91c1NpYmxpbmcgPSBzZWxmLnBhcmVudC5jb250ZW50c1stMV0KKyAgICAgICAg
ICAgIHNlbGYucHJldmlvdXNTaWJsaW5nLm5leHRTaWJsaW5nID0gc2VsZgorCisgICAgZGVmIHJl
cGxhY2VXaXRoKHNlbGYsIHJlcGxhY2VXaXRoKToKKyAgICAgICAgb2xkUGFyZW50ID0gc2VsZi5w
YXJlbnQKKyAgICAgICAgbXlJbmRleCA9IHNlbGYucGFyZW50LmluZGV4KHNlbGYpCisgICAgICAg
IGlmIGhhc2F0dHIocmVwbGFjZVdpdGgsICJwYXJlbnQiKVwKKyAgICAgICAgICAgICAgICAgIGFu
ZCByZXBsYWNlV2l0aC5wYXJlbnQgaXMgc2VsZi5wYXJlbnQ6CisgICAgICAgICAgICAjIFdlJ3Jl
IHJlcGxhY2luZyB0aGlzIGVsZW1lbnQgd2l0aCBvbmUgb2YgaXRzIHNpYmxpbmdzLgorICAgICAg
ICAgICAgaW5kZXggPSByZXBsYWNlV2l0aC5wYXJlbnQuaW5kZXgocmVwbGFjZVdpdGgpCisgICAg
ICAgICAgICBpZiBpbmRleCBhbmQgaW5kZXggPCBteUluZGV4OgorICAgICAgICAgICAgICAgICMg
RnVydGhlcm1vcmUsIGl0IGNvbWVzIGJlZm9yZSB0aGlzIGVsZW1lbnQuIFRoYXQKKyAgICAgICAg
ICAgICAgICAjIG1lYW5zIHRoYXQgd2hlbiB3ZSBleHRyYWN0IGl0LCB0aGUgaW5kZXggb2YgdGhp
cworICAgICAgICAgICAgICAgICMgZWxlbWVudCB3aWxsIGNoYW5nZS4KKyAgICAgICAgICAgICAg
ICBteUluZGV4ID0gbXlJbmRleCAtIDEKKyAgICAgICAgc2VsZi5leHRyYWN0KCkKKyAgICAgICAg
b2xkUGFyZW50Lmluc2VydChteUluZGV4LCByZXBsYWNlV2l0aCkKKworICAgIGRlZiByZXBsYWNl
V2l0aENoaWxkcmVuKHNlbGYpOgorICAgICAgICBteVBhcmVudCA9IHNlbGYucGFyZW50CisgICAg
ICAgIG15SW5kZXggPSBzZWxmLnBhcmVudC5pbmRleChzZWxmKQorICAgICAgICBzZWxmLmV4dHJh
Y3QoKQorICAgICAgICByZXZlcnNlZENoaWxkcmVuID0gbGlzdChzZWxmLmNvbnRlbnRzKQorICAg
ICAgICByZXZlcnNlZENoaWxkcmVuLnJldmVyc2UoKQorICAgICAgICBmb3IgY2hpbGQgaW4gcmV2
ZXJzZWRDaGlsZHJlbjoKKyAgICAgICAgICAgIG15UGFyZW50Lmluc2VydChteUluZGV4LCBjaGls
ZCkKKworICAgIGRlZiBleHRyYWN0KHNlbGYpOgorICAgICAgICAiIiJEZXN0cnVjdGl2ZWx5IHJp
cHMgdGhpcyBlbGVtZW50IG91dCBvZiB0aGUgdHJlZS4iIiIKKyAgICAgICAgaWYgc2VsZi5wYXJl
bnQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYucGFyZW50LmNv
bnRlbnRzW3NlbGYucGFyZW50LmluZGV4KHNlbGYpXQorICAgICAgICAgICAgZXhjZXB0IFZhbHVl
RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICNGaW5kIHRoZSB0d28gZWxl
bWVudHMgdGhhdCB3b3VsZCBiZSBuZXh0IHRvIGVhY2ggb3RoZXIgaWYKKyAgICAgICAgI3RoaXMg
ZWxlbWVudCAoYW5kIGFueSBjaGlsZHJlbikgaGFkbid0IGJlZW4gcGFyc2VkLiBDb25uZWN0Cisg
ICAgICAgICN0aGUgdHdvLgorICAgICAgICBsYXN0Q2hpbGQgPSBzZWxmLl9sYXN0UmVjdXJzaXZl
Q2hpbGQoKQorICAgICAgICBuZXh0RWxlbWVudCA9IGxhc3RDaGlsZC5uZXh0CisKKyAgICAgICAg
aWYgc2VsZi5wcmV2aW91czoKKyAgICAgICAgICAgIHNlbGYucHJldmlvdXMubmV4dCA9IG5leHRF
bGVtZW50CisgICAgICAgIGlmIG5leHRFbGVtZW50OgorICAgICAgICAgICAgbmV4dEVsZW1lbnQu
cHJldmlvdXMgPSBzZWxmLnByZXZpb3VzCisgICAgICAgIHNlbGYucHJldmlvdXMgPSBOb25lCisg
ICAgICAgIGxhc3RDaGlsZC5uZXh0ID0gTm9uZQorCisgICAgICAgIHNlbGYucGFyZW50ID0gTm9u
ZQorICAgICAgICBpZiBzZWxmLnByZXZpb3VzU2libGluZzoKKyAgICAgICAgICAgIHNlbGYucHJl
dmlvdXNTaWJsaW5nLm5leHRTaWJsaW5nID0gc2VsZi5uZXh0U2libGluZworICAgICAgICBpZiBz
ZWxmLm5leHRTaWJsaW5nOgorICAgICAgICAgICAgc2VsZi5uZXh0U2libGluZy5wcmV2aW91c1Np
YmxpbmcgPSBzZWxmLnByZXZpb3VzU2libGluZworICAgICAgICBzZWxmLnByZXZpb3VzU2libGlu
ZyA9IHNlbGYubmV4dFNpYmxpbmcgPSBOb25lCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBk
ZWYgX2xhc3RSZWN1cnNpdmVDaGlsZChzZWxmKToKKyAgICAgICAgIkZpbmRzIHRoZSBsYXN0IGVs
ZW1lbnQgYmVuZWF0aCB0aGlzIG9iamVjdCB0byBiZSBwYXJzZWQuIgorICAgICAgICBsYXN0Q2hp
bGQgPSBzZWxmCisgICAgICAgIHdoaWxlIGhhc2F0dHIobGFzdENoaWxkLCAnY29udGVudHMnKSBh
bmQgbGFzdENoaWxkLmNvbnRlbnRzOgorICAgICAgICAgICAgbGFzdENoaWxkID0gbGFzdENoaWxk
LmNvbnRlbnRzWy0xXQorICAgICAgICByZXR1cm4gbGFzdENoaWxkCisKKyAgICBkZWYgaW5zZXJ0
KHNlbGYsIHBvc2l0aW9uLCBuZXdDaGlsZCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobmV3Q2hp
bGQsIGJhc2VzdHJpbmcpIFwKKyAgICAgICAgICAgIGFuZCBub3QgaXNpbnN0YW5jZShuZXdDaGls
ZCwgTmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgICAgIG5ld0NoaWxkID0gTmF2aWdhYmxlU3Ry
aW5nKG5ld0NoaWxkKQorCisgICAgICAgIHBvc2l0aW9uID0gIG1pbihwb3NpdGlvbiwgbGVuKHNl
bGYuY29udGVudHMpKQorICAgICAgICBpZiBoYXNhdHRyKG5ld0NoaWxkLCAncGFyZW50JykgYW5k
IG5ld0NoaWxkLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgV2UncmUgJ2luc2Vy
dGluZycgYW4gZWxlbWVudCB0aGF0J3MgYWxyZWFkeSBvbmUKKyAgICAgICAgICAgICMgb2YgdGhp
cyBvYmplY3QncyBjaGlsZHJlbi4KKyAgICAgICAgICAgIGlmIG5ld0NoaWxkLnBhcmVudCBpcyBz
ZWxmOgorICAgICAgICAgICAgICAgIGluZGV4ID0gc2VsZi5pbmRleChuZXdDaGlsZCkKKyAgICAg
ICAgICAgICAgICBpZiBpbmRleCA+IHBvc2l0aW9uOgorICAgICAgICAgICAgICAgICAgICAjIEZ1
cnRoZXJtb3JlIHdlJ3JlIG1vdmluZyBpdCBmdXJ0aGVyIGRvd24gdGhlCisgICAgICAgICAgICAg
ICAgICAgICMgbGlzdCBvZiB0aGlzIG9iamVjdCdzIGNoaWxkcmVuLiBUaGF0IG1lYW5zIHRoYXQK
KyAgICAgICAgICAgICAgICAgICAgIyB3aGVuIHdlIGV4dHJhY3QgdGhpcyBlbGVtZW50LCBvdXIg
dGFyZ2V0IGluZGV4CisgICAgICAgICAgICAgICAgICAgICMgd2lsbCBqdW1wIGRvd24gb25lLgor
ICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIC0gMQorICAgICAgICAgICAg
bmV3Q2hpbGQuZXh0cmFjdCgpCisKKyAgICAgICAgbmV3Q2hpbGQucGFyZW50ID0gc2VsZgorICAg
ICAgICBwcmV2aW91c0NoaWxkID0gTm9uZQorICAgICAgICBpZiBwb3NpdGlvbiA9PSAwOgorICAg
ICAgICAgICAgbmV3Q2hpbGQucHJldmlvdXNTaWJsaW5nID0gTm9uZQorICAgICAgICAgICAgbmV3
Q2hpbGQucHJldmlvdXMgPSBzZWxmCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmV2aW91
c0NoaWxkID0gc2VsZi5jb250ZW50c1twb3NpdGlvbi0xXQorICAgICAgICAgICAgbmV3Q2hpbGQu
cHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXNDaGlsZAorICAgICAgICAgICAgbmV3Q2hpbGQucHJl
dmlvdXNTaWJsaW5nLm5leHRTaWJsaW5nID0gbmV3Q2hpbGQKKyAgICAgICAgICAgIG5ld0NoaWxk
LnByZXZpb3VzID0gcHJldmlvdXNDaGlsZC5fbGFzdFJlY3Vyc2l2ZUNoaWxkKCkKKyAgICAgICAg
aWYgbmV3Q2hpbGQucHJldmlvdXM6CisgICAgICAgICAgICBuZXdDaGlsZC5wcmV2aW91cy5uZXh0
ID0gbmV3Q2hpbGQKKworICAgICAgICBuZXdDaGlsZHNMYXN0RWxlbWVudCA9IG5ld0NoaWxkLl9s
YXN0UmVjdXJzaXZlQ2hpbGQoKQorCisgICAgICAgIGlmIHBvc2l0aW9uID49IGxlbihzZWxmLmNv
bnRlbnRzKToKKyAgICAgICAgICAgIG5ld0NoaWxkLm5leHRTaWJsaW5nID0gTm9uZQorCisgICAg
ICAgICAgICBwYXJlbnQgPSBzZWxmCisgICAgICAgICAgICBwYXJlbnRzTmV4dFNpYmxpbmcgPSBO
b25lCisgICAgICAgICAgICB3aGlsZSBub3QgcGFyZW50c05leHRTaWJsaW5nOgorICAgICAgICAg
ICAgICAgIHBhcmVudHNOZXh0U2libGluZyA9IHBhcmVudC5uZXh0U2libGluZworICAgICAgICAg
ICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQKKyAgICAgICAgICAgICAgICBpZiBub3QgcGFy
ZW50OiAjIFRoaXMgaXMgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBwYXJlbnRzTmV4dFNpYmxpbmc6Cisg
ICAgICAgICAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1lbnQubmV4dCA9IHBhcmVudHNOZXh0U2li
bGluZworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdDaGlsZHNMYXN0RWxl
bWVudC5uZXh0ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV4dENoaWxkID0g
c2VsZi5jb250ZW50c1twb3NpdGlvbl0KKyAgICAgICAgICAgIG5ld0NoaWxkLm5leHRTaWJsaW5n
ID0gbmV4dENoaWxkCisgICAgICAgICAgICBpZiBuZXdDaGlsZC5uZXh0U2libGluZzoKKyAgICAg
ICAgICAgICAgICBuZXdDaGlsZC5uZXh0U2libGluZy5wcmV2aW91c1NpYmxpbmcgPSBuZXdDaGls
ZAorICAgICAgICAgICAgbmV3Q2hpbGRzTGFzdEVsZW1lbnQubmV4dCA9IG5leHRDaGlsZAorCisg
ICAgICAgIGlmIG5ld0NoaWxkc0xhc3RFbGVtZW50Lm5leHQ6CisgICAgICAgICAgICBuZXdDaGls
ZHNMYXN0RWxlbWVudC5uZXh0LnByZXZpb3VzID0gbmV3Q2hpbGRzTGFzdEVsZW1lbnQKKyAgICAg
ICAgc2VsZi5jb250ZW50cy5pbnNlcnQocG9zaXRpb24sIG5ld0NoaWxkKQorCisgICAgZGVmIGFw
cGVuZChzZWxmLCB0YWcpOgorICAgICAgICAiIiJBcHBlbmRzIHRoZSBnaXZlbiB0YWcgdG8gdGhl
IGNvbnRlbnRzIG9mIHRoaXMgdGFnLiIiIgorICAgICAgICBzZWxmLmluc2VydChsZW4oc2VsZi5j
b250ZW50cyksIHRhZykKKworICAgIGRlZiBmaW5kTmV4dChzZWxmLCBuYW1lPU5vbmUsIGF0dHJz
PXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZmlyc3Qg
aXRlbSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGNyaXRlcmlhIGFuZAorICAgICAgICBhcHBlYXJz
IGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2ZpbmRPbmUoc2VsZi5maW5kQWxsTmV4dCwgbmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKQor
CisgICAgZGVmIGZpbmRBbGxOZXh0KHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9u
ZSwgbGltaXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICAi
IiJSZXR1cm5zIGFsbCBpdGVtcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQgYXBw
ZWFyCisgICAgICAgIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LCBzZWxmLm5leHRH
ZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorCisgICAg
ZGVmIGZpbmROZXh0U2libGluZyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUs
ICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgY2xvc2VzdCBzaWJsaW5nIHRvIHRo
aXMgVGFnIHRoYXQgbWF0Y2hlcyB0aGUKKyAgICAgICAgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVh
cnMgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2Vs
Zi5fZmluZE9uZShzZWxmLmZpbmROZXh0U2libGluZ3MsIG5hbWUsIGF0dHJzLCB0ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKworICAgIGRlZiBmaW5kTmV4dFNp
YmxpbmdzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgbGltaXQ9Tm9uZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMg
dGhlIHNpYmxpbmdzIG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNy
aXRlcmlhIGFuZCBhcHBlYXIgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV4dFNpYmxpbmdHZW5lcmF0b3IsICoqa3dh
cmdzKQorICAgIGZldGNoTmV4dFNpYmxpbmdzID0gZmluZE5leHRTaWJsaW5ncyAjIENvbXBhdGli
aWxpdHkgd2l0aCBwcmUtMy54CisKKyAgICBkZWYgZmluZFByZXZpb3VzKHNlbGYsIG5hbWU9Tm9u
ZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRo
ZSBmaXJzdCBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kCisgICAgICAg
IGFwcGVhcnMgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2ZpbmRPbmUoc2VsZi5maW5kQWxsUHJldmlvdXMsIG5hbWUsIGF0dHJzLCB0ZXh0
LCAqKmt3YXJncykKKworICAgIGRlZiBmaW5kQWxsUHJldmlvdXMoc2VsZiwgbmFtZT1Ob25lLCBh
dHRycz17fSwgdGV4dD1Ob25lLCBsaW1pdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAg
Kiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIGFsbCBpdGVtcyB0aGF0IG1hdGNoIHRoZSBn
aXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFyCisgICAgICAgIGJlZm9yZSB0aGlzIFRhZyBpbiB0aGUg
ZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kQWxsKG5hbWUsIGF0dHJzLCB0
ZXh0LCBsaW1pdCwgc2VsZi5wcmV2aW91c0dlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICoqa3dhcmdzKQorICAgIGZldGNoUHJldmlvdXMgPSBmaW5kQWxsUHJldmlvdXMgIyBD
b21wYXRpYmlsaXR5IHdpdGggcHJlLTMueAorCisgICAgZGVmIGZpbmRQcmV2aW91c1NpYmxpbmco
c2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAg
ICIiIlJldHVybnMgdGhlIGNsb3Nlc3Qgc2libGluZyB0byB0aGlzIFRhZyB0aGF0IG1hdGNoZXMg
dGhlCisgICAgICAgIGdpdmVuIGNyaXRlcmlhIGFuZCBhcHBlYXJzIGJlZm9yZSB0aGlzIFRhZyBp
biB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kT25lKHNlbGYuZmlu
ZFByZXZpb3VzU2libGluZ3MsIG5hbWUsIGF0dHJzLCB0ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqKmt3YXJncykKKworICAgIGRlZiBmaW5kUHJldmlvdXNTaWJsaW5ncyhzZWxm
LCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc2li
bGluZ3Mgb2YgdGhpcyBUYWcgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEg
YW5kIGFwcGVhciBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYucHJldmlvdXNTaWJsaW5nR2VuZXJhdG9yLCAqKmt3YXJn
cykKKyAgICBmZXRjaFByZXZpb3VzU2libGluZ3MgPSBmaW5kUHJldmlvdXNTaWJsaW5ncyAjIENv
bXBhdGliaWxpdHkgd2l0aCBwcmUtMy54CisKKyAgICBkZWYgZmluZFBhcmVudChzZWxmLCBuYW1l
PU5vbmUsIGF0dHJzPXt9LCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGNsb3Nl
c3QgcGFyZW50IG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4KKyAgICAgICAgY3Jp
dGVyaWEuIiIiCisgICAgICAgICMgTk9URTogV2UgY2FuJ3QgdXNlIF9maW5kT25lIGJlY2F1c2Ug
ZmluZFBhcmVudHMgdGFrZXMgYSBkaWZmZXJlbnQKKyAgICAgICAgIyBzZXQgb2YgYXJndW1lbnRz
LgorICAgICAgICByID0gTm9uZQorICAgICAgICBsID0gc2VsZi5maW5kUGFyZW50cyhuYW1lLCBh
dHRycywgMSkKKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHIgPSBsWzBdCisgICAgICAgIHJl
dHVybiByCisKKyAgICBkZWYgZmluZFBhcmVudHMoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwg
bGltaXQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXJlbnRzIG9m
IHRoaXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiIiIgorCisg
ICAgICAgIHJldHVybiBzZWxmLl9maW5kQWxsKG5hbWUsIGF0dHJzLCBOb25lLCBsaW1pdCwgc2Vs
Zi5wYXJlbnRHZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdz
KQorICAgIGZldGNoUGFyZW50cyA9IGZpbmRQYXJlbnRzICMgQ29tcGF0aWJpbGl0eSB3aXRoIHBy
ZS0zLngKKworICAgICNUaGVzZSBtZXRob2RzIGRvIHRoZSByZWFsIGhlYXZ5IGxpZnRpbmcuCisK
KyAgICBkZWYgX2ZpbmRPbmUoc2VsZiwgbWV0aG9kLCBuYW1lLCBhdHRycywgdGV4dCwgKiprd2Fy
Z3MpOgorICAgICAgICByID0gTm9uZQorICAgICAgICBsID0gbWV0aG9kKG5hbWUsIGF0dHJzLCB0
ZXh0LCAxLCAqKmt3YXJncykKKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHIgPSBsWzBdCisg
ICAgICAgIHJldHVybiByCisKKyAgICBkZWYgX2ZpbmRBbGwoc2VsZiwgbmFtZSwgYXR0cnMsIHRl
eHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdzKToKKyAgICAgICAgIkl0ZXJhdGVzIG92ZXIg
YSBnZW5lcmF0b3IgbG9va2luZyBmb3IgdGhpbmdzIHRoYXQgbWF0Y2guIgorCisgICAgICAgIGlm
IGlzaW5zdGFuY2UobmFtZSwgU291cFN0cmFpbmVyKToKKyAgICAgICAgICAgIHN0cmFpbmVyID0g
bmFtZQorICAgICAgICAjIChQb3NzaWJseSkgc3BlY2lhbCBjYXNlIHNvbWUgZmluZEFsbCooLi4u
KSBzZWFyY2hlcworICAgICAgICBlbGlmIHRleHQgaXMgTm9uZSBhbmQgbm90IGxpbWl0IGFuZCBu
b3QgYXR0cnMgYW5kIG5vdCBrd2FyZ3M6CisgICAgICAgICAgICAjIGZpbmRBbGwqKFRydWUpCisg
ICAgICAgICAgICBpZiBuYW1lIGlzIFRydWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtlbGVt
ZW50IGZvciBlbGVtZW50IGluIGdlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKGVsZW1lbnQsIFRhZyldCisgICAgICAgICAgICAjIGZpbmRBbGwqKCd0YWct
bmFtZScpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UobmFtZSwgYmFzZXN0cmluZyk6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFtlbGVtZW50IGZvciBlbGVtZW50IGluIGdlbmVyYXRvcigp
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIFRhZykgYW5k
CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm5hbWUgPT0gbmFtZV0KKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3RyYWluZXIgPSBTb3VwU3RyYWluZXIobmFtZSwg
YXR0cnMsIHRleHQsICoqa3dhcmdzKQorICAgICAgICAjIEJ1aWxkIGEgU291cFN0cmFpbmVyCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdHJhaW5lciA9IFNvdXBTdHJhaW5lcihuYW1lLCBh
dHRycywgdGV4dCwgKiprd2FyZ3MpCisgICAgICAgIHJlc3VsdHMgPSBSZXN1bHRTZXQoc3RyYWlu
ZXIpCisgICAgICAgIGcgPSBnZW5lcmF0b3IoKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGkgPSBnLm5leHQoKQorICAgICAgICAgICAgZXhj
ZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlm
IGk6CisgICAgICAgICAgICAgICAgZm91bmQgPSBzdHJhaW5lci5zZWFyY2goaSkKKyAgICAgICAg
ICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoZm91
bmQpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0IGFuZCBsZW4ocmVzdWx0cykgPj0gbGlt
aXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gcmVzdWx0
cworCisgICAgI1RoZXNlIEdlbmVyYXRvcnMgY2FuIGJlIHVzZWQgdG8gbmF2aWdhdGUgc3RhcnRp
bmcgZnJvbSBib3RoCisgICAgI05hdmlnYWJsZVN0cmluZ3MgYW5kIFRhZ3MuCisgICAgZGVmIG5l
eHRHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmCisgICAgICAgIHdoaWxlIGkgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBpID0gaS5uZXh0CisgICAgICAgICAgICB5aWVsZCBpCisK
KyAgICBkZWYgbmV4dFNpYmxpbmdHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmCisg
ICAgICAgIHdoaWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpID0gaS5uZXh0U2libGlu
ZworICAgICAgICAgICAgeWllbGQgaQorCisgICAgZGVmIHByZXZpb3VzR2VuZXJhdG9yKHNlbGYp
OgorICAgICAgICBpID0gc2VsZgorICAgICAgICB3aGlsZSBpIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgaSA9IGkucHJldmlvdXMKKyAgICAgICAgICAgIHlpZWxkIGkKKworICAgIGRlZiBwcmV2
aW91c1NpYmxpbmdHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmCisgICAgICAgIHdo
aWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpID0gaS5wcmV2aW91c1NpYmxpbmcKKyAg
ICAgICAgICAgIHlpZWxkIGkKKworICAgIGRlZiBwYXJlbnRHZW5lcmF0b3Ioc2VsZik6CisgICAg
ICAgIGkgPSBzZWxmCisgICAgICAgIHdoaWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBp
ID0gaS5wYXJlbnQKKyAgICAgICAgICAgIHlpZWxkIGkKKworICAgICMgVXRpbGl0eSBtZXRob2Rz
CisgICAgZGVmIHN1YnN0aXR1dGVFbmNvZGluZyhzZWxmLCBzdHIsIGVuY29kaW5nPU5vbmUpOgor
ICAgICAgICBlbmNvZGluZyA9IGVuY29kaW5nIG9yICJ1dGYtOCIKKyAgICAgICAgcmV0dXJuIHN0
ci5yZXBsYWNlKCIlU09VUC1FTkNPRElORyUiLCBlbmNvZGluZykKKworICAgIGRlZiB0b0VuY29k
aW5nKHNlbGYsIHMsIGVuY29kaW5nPU5vbmUpOgorICAgICAgICAiIiJFbmNvZGVzIGFuIG9iamVj
dCB0byBhIHN0cmluZyBpbiBzb21lIGVuY29kaW5nLCBvciB0byBVbmljb2RlLgorICAgICAgICAu
IiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UocywgdW5pY29kZSk6CisgICAgICAgICAgICBpZiBl
bmNvZGluZzoKKyAgICAgICAgICAgICAgICBzID0gcy5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAg
IGVsaWYgaXNpbnN0YW5jZShzLCBzdHIpOgorICAgICAgICAgICAgaWYgZW5jb2Rpbmc6CisgICAg
ICAgICAgICAgICAgcyA9IHMuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBzID0gdW5pY29kZShzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
aWYgZW5jb2Rpbmc6CisgICAgICAgICAgICAgICAgcyAgPSBzZWxmLnRvRW5jb2Rpbmcoc3RyKHMp
LCBlbmNvZGluZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcyA9IHVuaWNv
ZGUocykKKyAgICAgICAgcmV0dXJuIHMKKworY2xhc3MgTmF2aWdhYmxlU3RyaW5nKHVuaWNvZGUs
IFBhZ2VFbGVtZW50KToKKworICAgIGRlZiBfX25ld19fKGNscywgdmFsdWUpOgorICAgICAgICAi
IiJDcmVhdGUgYSBuZXcgTmF2aWdhYmxlU3RyaW5nLgorCisgICAgICAgIFdoZW4gdW5waWNrbGlu
ZyBhIE5hdmlnYWJsZVN0cmluZywgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdpdGgKKyAgICAgICAg
dGhlIHN0cmluZyBpbiBERUZBVUxUX09VVFBVVF9FTkNPRElORy4gVGhhdCBlbmNvZGluZyBuZWVk
cyB0byBiZQorICAgICAgICBwYXNzZWQgaW4gdG8gdGhlIHN1cGVyY2xhc3MncyBfX25ld19fIG9y
IHRoZSBzdXBlcmNsYXNzIHdvbid0IGtub3cKKyAgICAgICAgaG93IHRvIGhhbmRsZSBub24tQVND
SUkgY2hhcmFjdGVycy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUs
IHVuaWNvZGUpOgorICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGUuX19uZXdfXyhjbHMsIHZhbHVl
KQorICAgICAgICByZXR1cm4gdW5pY29kZS5fX25ld19fKGNscywgdmFsdWUsIERFRkFVTFRfT1VU
UFVUX0VOQ09ESU5HKQorCisgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gKE5hdmlnYWJsZVN0cmluZy5fX3N0cl9fKHNlbGYpLCkKKworICAgIGRlZiBfX2dldGF0
dHJfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgIiIidGV4dC5zdHJpbmcgZ2l2ZXMgeW91IHRleHQu
IFRoaXMgaXMgZm9yIGJhY2t3YXJkcworICAgICAgICBjb21wYXRpYmlsaXR5IGZvciBOYXZpZ2Fi
bGUqU3RyaW5nLCBidXQgZm9yIENEYXRhKiBpdCBsZXRzIHlvdQorICAgICAgICBnZXQgdGhlIHN0
cmluZyB3aXRob3V0IHRoZSBDRGF0YSB3cmFwcGVyLiIiIgorICAgICAgICBpZiBhdHRyID09ICdz
dHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAiJyVzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAn
JXMnIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgYXR0cikKKworICAgIGRlZiBfX3VuaWNv
ZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmKS5kZWNvZGUoREVGQVVMVF9PVVRQ
VVRfRU5DT0RJTkcpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09V
VFBVVF9FTkNPRElORyk6CisgICAgICAgIGlmIGVuY29kaW5nOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYKKworY2xhc3MgQ0RhdGEoTmF2aWdhYmxlU3RyaW5nKToKKworICAgIGRlZiBfX3N0cl9f
KHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKKyAgICAgICAgcmV0dXJu
ICI8IVtDREFUQVslc11dPiIgJSBOYXZpZ2FibGVTdHJpbmcuX19zdHJfXyhzZWxmLCBlbmNvZGlu
ZykKKworY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9uKE5hdmlnYWJsZVN0cmluZyk6CisgICAg
ZGVmIF9fc3RyX18oc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpOgorICAg
ICAgICBvdXRwdXQgPSBzZWxmCisgICAgICAgIGlmICIlU09VUC1FTkNPRElORyUiIGluIG91dHB1
dDoKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuc3Vic3RpdHV0ZUVuY29kaW5nKG91dHB1dCwg
ZW5jb2RpbmcpCisgICAgICAgIHJldHVybiAiPD8lcz8+IiAlIHNlbGYudG9FbmNvZGluZyhvdXRw
dXQsIGVuY29kaW5nKQorCitjbGFzcyBDb21tZW50KE5hdmlnYWJsZVN0cmluZyk6CisgICAgZGVm
IF9fc3RyX18oc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpOgorICAgICAg
ICByZXR1cm4gIjwhLS0lcy0tPiIgJSBOYXZpZ2FibGVTdHJpbmcuX19zdHJfXyhzZWxmLCBlbmNv
ZGluZykKKworY2xhc3MgRGVjbGFyYXRpb24oTmF2aWdhYmxlU3RyaW5nKToKKyAgICBkZWYgX19z
dHJfXyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6CisgICAgICAgIHJl
dHVybiAiPCElcz4iICUgTmF2aWdhYmxlU3RyaW5nLl9fc3RyX18oc2VsZiwgZW5jb2RpbmcpCisK
K2NsYXNzIFRhZyhQYWdlRWxlbWVudCk6CisKKyAgICAiIiJSZXByZXNlbnRzIGEgZm91bmQgSFRN
TCB0YWcgd2l0aCBpdHMgYXR0cmlidXRlcyBhbmQgY29udGVudHMuIiIiCisKKyAgICBkZWYgX2lu
dmVydChoKToKKyAgICAgICAgIkNoZWFwIGZ1bmN0aW9uIHRvIGludmVydCBhIGhhc2guIgorICAg
ICAgICBpID0ge30KKyAgICAgICAgZm9yIGssdiBpbiBoLml0ZW1zKCk6CisgICAgICAgICAgICBp
W3ZdID0gaworICAgICAgICByZXR1cm4gaQorCisgICAgWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxf
Q0hBUlMgPSB7ICJhcG9zIiA6ICInIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInF1b3QiIDogJyInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiYW1wIiA6ICImIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImx0
IiA6ICI8IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImd0IiA6ICI+
IiB9CisKKyAgICBYTUxfU1BFQ0lBTF9DSEFSU19UT19FTlRJVElFUyA9IF9pbnZlcnQoWE1MX0VO
VElUSUVTX1RPX1NQRUNJQUxfQ0hBUlMpCisKKyAgICBkZWYgX2NvbnZlcnRFbnRpdGllcyhzZWxm
LCBtYXRjaCk6CisgICAgICAgICIiIlVzZWQgaW4gYSBjYWxsIHRvIHJlLnN1YiB0byByZXBsYWNl
IEhUTUwsIFhNTCwgYW5kIG51bWVyaWMKKyAgICAgICAgZW50aXRpZXMgd2l0aCB0aGUgYXBwcm9w
cmlhdGUgVW5pY29kZSBjaGFyYWN0ZXJzLiBJZiBIVE1MCisgICAgICAgIGVudGl0aWVzIGFyZSBi
ZWluZyBjb252ZXJ0ZWQsIGFueSB1bnJlY29nbml6ZWQgZW50aXRpZXMgYXJlCisgICAgICAgIGVz
Y2FwZWQuIiIiCisgICAgICAgIHggPSBtYXRjaC5ncm91cCgxKQorICAgICAgICBpZiBzZWxmLmNv
bnZlcnRIVE1MRW50aXRpZXMgYW5kIHggaW4gbmFtZTJjb2RlcG9pbnQ6CisgICAgICAgICAgICBy
ZXR1cm4gdW5pY2hyKG5hbWUyY29kZXBvaW50W3hdKQorICAgICAgICBlbGlmIHggaW4gc2VsZi5Y
TUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9DSEFSUzoKKyAgICAgICAgICAgIGlmIHNlbGYuY29udmVy
dFhNTEVudGl0aWVzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLlhNTF9FTlRJVElFU19U
T19TUEVDSUFMX0NIQVJTW3hdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJl
dHVybiB1JyYlczsnICUgeAorICAgICAgICBlbGlmIGxlbih4KSA+IDAgYW5kIHhbMF0gPT0gJyMn
OgorICAgICAgICAgICAgIyBIYW5kbGUgbnVtZXJpYyBlbnRpdGllcworICAgICAgICAgICAgaWYg
bGVuKHgpID4gMSBhbmQgeFsxXSA9PSAneCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNo
cihpbnQoeFsyOl0sIDE2KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHVuaWNocihpbnQoeFsxOl0pKQorCisgICAgICAgIGVsaWYgc2VsZi5lc2NhcGVVbnJlY29n
bml6ZWRFbnRpdGllczoKKyAgICAgICAgICAgIHJldHVybiB1JyZhbXA7JXM7JyAlIHgKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB1JyYlczsnICUgeAorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBhcnNlciwgbmFtZSwgYXR0cnM9Tm9uZSwgcGFyZW50PU5vbmUsCisgICAgICAg
ICAgICAgICAgIHByZXZpb3VzPU5vbmUpOgorICAgICAgICAiQmFzaWMgY29uc3RydWN0b3IuIgor
CisgICAgICAgICMgV2UgZG9uJ3QgYWN0dWFsbHkgc3RvcmUgdGhlIHBhcnNlciBvYmplY3Q6IHRo
YXQgbGV0cyBleHRyYWN0ZWQKKyAgICAgICAgIyBjaHVua3MgYmUgZ2FyYmFnZS1jb2xsZWN0ZWQK
KyAgICAgICAgc2VsZi5wYXJzZXJDbGFzcyA9IHBhcnNlci5fX2NsYXNzX18KKyAgICAgICAgc2Vs
Zi5pc1NlbGZDbG9zaW5nID0gcGFyc2VyLmlzU2VsZkNsb3NpbmdUYWcobmFtZSkKKyAgICAgICAg
c2VsZi5uYW1lID0gbmFtZQorICAgICAgICBpZiBhdHRycyBpcyBOb25lOgorICAgICAgICAgICAg
YXR0cnMgPSBbXQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoYXR0cnMsIGRpY3QpOgorICAgICAg
ICAgICAgYXR0cnMgPSBhdHRycy5pdGVtcygpCisgICAgICAgIHNlbGYuYXR0cnMgPSBhdHRycwor
ICAgICAgICBzZWxmLmNvbnRlbnRzID0gW10KKyAgICAgICAgc2VsZi5zZXR1cChwYXJlbnQsIHBy
ZXZpb3VzKQorICAgICAgICBzZWxmLmhpZGRlbiA9IEZhbHNlCisgICAgICAgIHNlbGYuY29udGFp
bnNTdWJzdGl0dXRpb25zID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb252ZXJ0SFRNTEVudGl0aWVz
ID0gcGFyc2VyLmNvbnZlcnRIVE1MRW50aXRpZXMKKyAgICAgICAgc2VsZi5jb252ZXJ0WE1MRW50
aXRpZXMgPSBwYXJzZXIuY29udmVydFhNTEVudGl0aWVzCisgICAgICAgIHNlbGYuZXNjYXBlVW5y
ZWNvZ25pemVkRW50aXRpZXMgPSBwYXJzZXIuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMKKwor
ICAgICAgICAjIENvbnZlcnQgYW55IEhUTUwsIFhNTCwgb3IgbnVtZXJpYyBlbnRpdGllcyBpbiB0
aGUgYXR0cmlidXRlIHZhbHVlcy4KKyAgICAgICAgY29udmVydCA9IGxhbWJkYShrLCB2YWwpOiAo
aywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUuc3ViKCImKCNcZCt8I3hb
MC05YS1mQS1GXSt8XHcrKTsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fY29udmVydEVudGl0aWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsKSkKKyAgICAgICAgc2VsZi5hdHRycyA9IG1hcChjb252ZXJ0LCBz
ZWxmLmF0dHJzKQorCisgICAgZGVmIGdldFN0cmluZyhzZWxmKToKKyAgICAgICAgaWYgKGxlbihz
ZWxmLmNvbnRlbnRzKSA9PSAxCisgICAgICAgICAgICBhbmQgaXNpbnN0YW5jZShzZWxmLmNvbnRl
bnRzWzBdLCBOYXZpZ2FibGVTdHJpbmcpKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbnRl
bnRzWzBdCisKKyAgICBkZWYgc2V0U3RyaW5nKHNlbGYsIHN0cmluZyk6CisgICAgICAgICIiIlJl
cGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWcgd2l0aCBhIHN0cmluZyIiIgorICAgICAgICBz
ZWxmLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hcHBlbmQoc3RyaW5nKQorCisgICAgc3RyaW5nID0g
cHJvcGVydHkoZ2V0U3RyaW5nLCBzZXRTdHJpbmcpCisKKyAgICBkZWYgZ2V0VGV4dChzZWxmLCBz
ZXBhcmF0b3I9dSIiKToKKyAgICAgICAgaWYgbm90IGxlbihzZWxmLmNvbnRlbnRzKToKKyAgICAg
ICAgICAgIHJldHVybiB1IiIKKyAgICAgICAgc3RvcE5vZGUgPSBzZWxmLl9sYXN0UmVjdXJzaXZl
Q2hpbGQoKS5uZXh0CisgICAgICAgIHN0cmluZ3MgPSBbXQorICAgICAgICBjdXJyZW50ID0gc2Vs
Zi5jb250ZW50c1swXQorICAgICAgICB3aGlsZSBjdXJyZW50IGlzIG5vdCBzdG9wTm9kZToKKyAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY3VycmVudCwgTmF2aWdhYmxlU3RyaW5nKToKKyAgICAg
ICAgICAgICAgICBzdHJpbmdzLmFwcGVuZChjdXJyZW50LnN0cmlwKCkpCisgICAgICAgICAgICBj
dXJyZW50ID0gY3VycmVudC5uZXh0CisgICAgICAgIHJldHVybiBzZXBhcmF0b3Iuam9pbihzdHJp
bmdzKQorCisgICAgdGV4dCA9IHByb3BlcnR5KGdldFRleHQpCisKKyAgICBkZWYgZ2V0KHNlbGYs
IGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhl
ICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlIHRhZywgb3IKKyAgICAgICAgdGhlIHZhbHVlIGdpdmVu
IGZvciAnZGVmYXVsdCcgaWYgaXQgZG9lc24ndCBoYXZlIHRoYXQKKyAgICAgICAgYXR0cmlidXRl
LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0QXR0ck1hcCgpLmdldChrZXksIGRlZmF1bHQp
CisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIkV4dHJhY3QgYWxsIGNoaWxkcmVu
LiIiIgorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jb250ZW50c1s6XToKKyAgICAgICAgICAg
IGNoaWxkLmV4dHJhY3QoKQorCisgICAgZGVmIGluZGV4KHNlbGYsIGVsZW1lbnQpOgorICAgICAg
ICBmb3IgaSwgY2hpbGQgaW4gZW51bWVyYXRlKHNlbGYuY29udGVudHMpOgorICAgICAgICAgICAg
aWYgY2hpbGQgaXMgZWxlbWVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCJUYWcuaW5kZXg6IGVsZW1lbnQgbm90IGluIHRhZyIpCisKKyAgICBk
ZWYgaGFzX2tleShzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0QXR0ck1hcCgp
Lmhhc19rZXkoa2V5KQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAg
ICIiInRhZ1trZXldIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAna2V5JyBhdHRyaWJ1dGUgZm9y
IHRoZSB0YWcsCisgICAgICAgIGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIGl0J3Mgbm90IHRo
ZXJlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0QXR0ck1hcCgpW2tleV0KKworICAgIGRl
ZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgIkl0ZXJhdGluZyBvdmVyIGEgdGFnIGl0ZXJhdGVz
IG92ZXIgaXRzIGNvbnRlbnRzLiIKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5jb250ZW50cykK
KworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAiVGhlIGxlbmd0aCBvZiBhIHRhZyBp
cyB0aGUgbGVuZ3RoIG9mIGl0cyBsaXN0IG9mIGNvbnRlbnRzLiIKKyAgICAgICAgcmV0dXJuIGxl
bihzZWxmLmNvbnRlbnRzKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB4KToKKyAgICAg
ICAgcmV0dXJuIHggaW4gc2VsZi5jb250ZW50cworCisgICAgZGVmIF9fbm9uemVyb19fKHNlbGYp
OgorICAgICAgICAiQSB0YWcgaXMgbm9uLU5vbmUgZXZlbiBpZiBpdCBoYXMgbm8gY29udGVudHMu
IgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwg
dmFsdWUpOgorICAgICAgICAiIiJTZXR0aW5nIHRhZ1trZXldIHNldHMgdGhlIHZhbHVlIG9mIHRo
ZSAna2V5JyBhdHRyaWJ1dGUgZm9yIHRoZQorICAgICAgICB0YWcuIiIiCisgICAgICAgIHNlbGYu
X2dldEF0dHJNYXAoKQorICAgICAgICBzZWxmLmF0dHJNYXBba2V5XSA9IHZhbHVlCisgICAgICAg
IGZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNlbGYuYXR0cnMp
KToKKyAgICAgICAgICAgIGlmIHNlbGYuYXR0cnNbaV1bMF0gPT0ga2V5OgorICAgICAgICAgICAg
ICAgIHNlbGYuYXR0cnNbaV0gPSAoa2V5LCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBmb3VuZCA9
IFRydWUKKyAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgc2VsZi5hdHRycy5hcHBl
bmQoKGtleSwgdmFsdWUpKQorICAgICAgICBzZWxmLl9nZXRBdHRyTWFwKClba2V5XSA9IHZhbHVl
CisKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgIkRlbGV0aW5nIHRh
Z1trZXldIGRlbGV0ZXMgYWxsICdrZXknIGF0dHJpYnV0ZXMgZm9yIHRoZSB0YWcuIgorICAgICAg
ICBmb3IgaXRlbSBpbiBzZWxmLmF0dHJzOgorICAgICAgICAgICAgaWYgaXRlbVswXSA9PSBrZXk6
CisgICAgICAgICAgICAgICAgc2VsZi5hdHRycy5yZW1vdmUoaXRlbSkKKyAgICAgICAgICAgICAg
ICAjV2UgZG9uJ3QgYnJlYWsgYmVjYXVzZSBiYWQgSFRNTCBjYW4gZGVmaW5lIHRoZSBzYW1lCisg
ICAgICAgICAgICAgICAgI2F0dHJpYnV0ZSBtdWx0aXBsZSB0aW1lcy4KKyAgICAgICAgICAgIHNl
bGYuX2dldEF0dHJNYXAoKQorICAgICAgICAgICAgaWYgc2VsZi5hdHRyTWFwLmhhc19rZXkoa2V5
KToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5hdHRyTWFwW2tleV0KKworICAgIGRlZiBfX2Nh
bGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDYWxsaW5nIGEgdGFnIGxp
a2UgYSBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIGl0cworICAgICAgICBmaW5kQWxs
KCkgbWV0aG9kLiBFZy4gdGFnKCdhJykgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRoZSBBIHRhZ3MK
KyAgICAgICAgZm91bmQgd2l0aGluIHRoaXMgdGFnLiIiIgorICAgICAgICByZXR1cm4gYXBwbHko
c2VsZi5maW5kQWxsLCBhcmdzLCBrd2FyZ3MpCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwg
dGFnKToKKyAgICAgICAgI3ByaW50ICJHZXRhdHRyICVzLiVzIiAlIChzZWxmLl9fY2xhc3NfXywg
dGFnKQorICAgICAgICBpZiBsZW4odGFnKSA+IDMgYW5kIHRhZy5yZmluZCgnVGFnJykgPT0gbGVu
KHRhZyktMzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbmQodGFnWzotM10pCisgICAgICAg
IGVsaWYgdGFnLmZpbmQoJ19fJykgIT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbmQo
dGFnKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgIiclcycgb2JqZWN0IGhhcyBubyBh
dHRyaWJ1dGUgJyVzJyIgJSAoc2VsZi5fX2NsYXNzX18sIHRhZykKKworICAgIGRlZiBfX2VxX18o
c2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIHRoaXMgdGFnIGhhcyB0
aGUgc2FtZSBuYW1lLCB0aGUgc2FtZSBhdHRyaWJ1dGVzLAorICAgICAgICBhbmQgdGhlIHNhbWUg
Y29udGVudHMgKHJlY3Vyc2l2ZWx5KSBhcyB0aGUgZ2l2ZW4gdGFnLgorCisgICAgICAgIE5PVEU6
IHJpZ2h0IG5vdyB0aGlzIHdpbGwgcmV0dXJuIGZhbHNlIGlmIHR3byB0YWdzIGhhdmUgdGhlCisg
ICAgICAgIHNhbWUgYXR0cmlidXRlcyBpbiBhIGRpZmZlcmVudCBvcmRlci4gU2hvdWxkIHRoaXMg
YmUgZml4ZWQ/IiIiCisgICAgICAgIGlmIG90aGVyIGlzIHNlbGY6CisgICAgICAgICAgICByZXR1
cm4gVHJ1ZQorICAgICAgICBpZiBub3QgaGFzYXR0cihvdGhlciwgJ25hbWUnKSBvciBub3QgaGFz
YXR0cihvdGhlciwgJ2F0dHJzJykgb3Igbm90IGhhc2F0dHIob3RoZXIsICdjb250ZW50cycpIG9y
IHNlbGYubmFtZSAhPSBvdGhlci5uYW1lIG9yIHNlbGYuYXR0cnMgIT0gb3RoZXIuYXR0cnMgb3Ig
bGVuKHNlbGYpICE9IGxlbihvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNlbGYuY29udGVudHMpKToKKyAgICAgICAgICAgIGlm
IHNlbGYuY29udGVudHNbaV0gIT0gb3RoZXIuY29udGVudHNbaV06CisgICAgICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19uZV9fKHNlbGYs
IG90aGVyKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmZiB0aGlzIHRhZyBpcyBub3QgaWRl
bnRpY2FsIHRvIHRoZSBvdGhlciB0YWcsCisgICAgICAgIGFzIGRlZmluZWQgaW4gX19lcV9fLiIi
IgorICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgIGRlZiBfX3JlcHJfXyhz
ZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6CisgICAgICAgICIiIlJlbmRl
cnMgdGhpcyB0YWcgYXMgYSBzdHJpbmcuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9fc3RyX18o
ZW5jb2RpbmcpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9fc3RyX18oTm9uZSkKKworICAgIEJBUkVfQU1QRVJTQU5EX09SX0JSQUNLRVQgPSByZS5j
b21waWxlKCIoWzw+XXwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKyAiJig/ISNcZCs7fCN4WzAtOWEtZkEtRl0rO3xcdys7KSIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICArICIpIikKKworICAgIGRlZiBfc3ViX2VudGl0eShz
ZWxmLCB4KToKKyAgICAgICAgIiIiVXNlZCB3aXRoIGEgcmVndWxhciBleHByZXNzaW9uIHRvIHN1
YnN0aXR1dGUgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIFhNTCBlbnRpdHkgZm9yIGFuIFhNTCBz
cGVjaWFsIGNoYXJhY3Rlci4iIiIKKyAgICAgICAgcmV0dXJuICImIiArIHNlbGYuWE1MX1NQRUNJ
QUxfQ0hBUlNfVE9fRU5USVRJRVNbeC5ncm91cCgwKVswXV0gKyAiOyIKKworICAgIGRlZiBfX3N0
cl9fKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAorICAgICAgICAgICAg
ICAgIHByZXR0eVByaW50PUZhbHNlLCBpbmRlbnRMZXZlbD0wKToKKyAgICAgICAgIiIiUmV0dXJu
cyBhIHN0cmluZyBvciBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdGFnIGFuZAorICAg
ICAgICBpdHMgY29udGVudHMuIFRvIGdldCBVbmljb2RlLCBwYXNzIE5vbmUgZm9yIGVuY29kaW5n
LgorCisgICAgICAgIE5PVEU6IHNpbmNlIFB5dGhvbidzIEhUTUwgcGFyc2VyIGNvbnN1bWVzIHdo
aXRlc3BhY2UsIHRoaXMKKyAgICAgICAgbWV0aG9kIGlzIG5vdCBjZXJ0YWluIHRvIHJlcHJvZHVj
ZSB0aGUgd2hpdGVzcGFjZSBwcmVzZW50IGluCisgICAgICAgIHRoZSBvcmlnaW5hbCBzdHJpbmcu
IiIiCisKKyAgICAgICAgZW5jb2RlZE5hbWUgPSBzZWxmLnRvRW5jb2Rpbmcoc2VsZi5uYW1lLCBl
bmNvZGluZykKKworICAgICAgICBhdHRycyA9IFtdCisgICAgICAgIGlmIHNlbGYuYXR0cnM6Cisg
ICAgICAgICAgICBmb3Iga2V5LCB2YWwgaW4gc2VsZi5hdHRyczoKKyAgICAgICAgICAgICAgICBm
bXQgPSAnJXM9IiVzIicKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgYmFzZXN0
cmluZyk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udGFpbnNTdWJzdGl0dXRpb25z
IGFuZCAnJVNPVVAtRU5DT0RJTkclJyBpbiB2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICB2
YWwgPSBzZWxmLnN1YnN0aXR1dGVFbmNvZGluZyh2YWwsIGVuY29kaW5nKQorCisgICAgICAgICAg
ICAgICAgICAgICMgVGhlIGF0dHJpYnV0ZSB2YWx1ZSBlaXRoZXI6CisgICAgICAgICAgICAgICAg
ICAgICMKKyAgICAgICAgICAgICAgICAgICAgIyAqIENvbnRhaW5zIG5vIGVtYmVkZGVkIGRvdWJs
ZSBxdW90ZXMgb3Igc2luZ2xlIHF1b3Rlcy4KKyAgICAgICAgICAgICAgICAgICAgIyAgIE5vIHBy
b2JsZW06IHdlIGVuY2xvc2UgaXQgaW4gZG91YmxlIHF1b3Rlcy4KKyAgICAgICAgICAgICAgICAg
ICAgIyAqIENvbnRhaW5zIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMuIE5vIHByb2JsZW06CisgICAg
ICAgICAgICAgICAgICAgICMgICBkb3VibGUgcXVvdGVzIHdvcmsgaGVyZSB0b28uCisgICAgICAg
ICAgICAgICAgICAgICMgKiBDb250YWlucyBlbWJlZGRlZCBkb3VibGUgcXVvdGVzLiBObyBwcm9i
bGVtOgorICAgICAgICAgICAgICAgICAgICAjICAgd2UgZW5jbG9zZSBpdCBpbiBzaW5nbGUgcXVv
dGVzLgorICAgICAgICAgICAgICAgICAgICAjICogRW1iZWRzIGJvdGggc2luZ2xlIF9hbmRfIGRv
dWJsZSBxdW90ZXMuIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgIyAgIGNhbid0IGhhcHBlbiBu
YXR1cmFsbHksIGJ1dCBpdCBjYW4gaGFwcGVuIGlmCisgICAgICAgICAgICAgICAgICAgICMgICB5
b3UgbW9kaWZ5IGFuIGF0dHJpYnV0ZSB2YWx1ZSBhZnRlciBwYXJzaW5nCisgICAgICAgICAgICAg
ICAgICAgICMgICB0aGUgZG9jdW1lbnQuIE5vdyB3ZSBoYXZlIGEgYml0IG9mIGEKKyAgICAgICAg
ICAgICAgICAgICAgIyAgIHByb2JsZW0uIFdlIHNvbHZlIGl0IGJ5IGVuY2xvc2luZyB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgIyAgIGF0dHJpYnV0ZSBpbiBzaW5nbGUgcXVvdGVzLCBhbmQgZXNj
YXBpbmcgYW55CisgICAgICAgICAgICAgICAgICAgICMgICBlbWJlZGRlZCBzaW5nbGUgcXVvdGVz
IHRvIFhNTCBlbnRpdGllcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgJyInIGluIHZhbDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZtdCA9ICIlcz0nJXMnIgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgIiciIGluIHZhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE86
IHJlcGxhY2Ugd2l0aCBhcG9zIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFw
cHJvcHJpYXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNl
KCInIiwgIiZzcXVvdDsiKQorCisgICAgICAgICAgICAgICAgICAgICMgTm93IHdlJ3JlIG9rYXkg
dy9yL3QgcXVvdGVzLiBCdXQgdGhlIGF0dHJpYnV0ZQorICAgICAgICAgICAgICAgICAgICAjIHZh
bHVlIG1pZ2h0IGFsc28gY29udGFpbiBhbmdsZSBicmFja2V0cywgb3IKKyAgICAgICAgICAgICAg
ICAgICAgIyBhbXBlcnNhbmRzIHRoYXQgYXJlbid0IHBhcnQgb2YgZW50aXRpZXMuIFdlIG5lZWQK
KyAgICAgICAgICAgICAgICAgICAgIyB0byBlc2NhcGUgdGhvc2UgdG8gWE1MIGVudGl0aWVzIHRv
by4KKyAgICAgICAgICAgICAgICAgICAgdmFsID0gc2VsZi5CQVJFX0FNUEVSU0FORF9PUl9CUkFD
S0VULnN1YihzZWxmLl9zdWJfZW50aXR5LCB2YWwpCisKKyAgICAgICAgICAgICAgICBhdHRycy5h
cHBlbmQoZm10ICUgKHNlbGYudG9FbmNvZGluZyhrZXksIGVuY29kaW5nKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9FbmNvZGluZyh2YWwsIGVuY29kaW5nKSkp
CisgICAgICAgIGNsb3NlID0gJycKKyAgICAgICAgY2xvc2VUYWcgPSAnJworICAgICAgICBpZiBz
ZWxmLmlzU2VsZkNsb3Npbmc6CisgICAgICAgICAgICBjbG9zZSA9ICcgLycKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGNsb3NlVGFnID0gJzwvJXM+JyAlIGVuY29kZWROYW1lCisKKyAgICAg
ICAgaW5kZW50VGFnLCBpbmRlbnRDb250ZW50cyA9IDAsIDAKKyAgICAgICAgaWYgcHJldHR5UHJp
bnQ6CisgICAgICAgICAgICBpbmRlbnRUYWcgPSBpbmRlbnRMZXZlbAorICAgICAgICAgICAgc3Bh
Y2UgPSAoJyAnICogKGluZGVudFRhZy0xKSkKKyAgICAgICAgICAgIGluZGVudENvbnRlbnRzID0g
aW5kZW50VGFnICsgMQorICAgICAgICBjb250ZW50cyA9IHNlbGYucmVuZGVyQ29udGVudHMoZW5j
b2RpbmcsIHByZXR0eVByaW50LCBpbmRlbnRDb250ZW50cykKKyAgICAgICAgaWYgc2VsZi5oaWRk
ZW46CisgICAgICAgICAgICBzID0gY29udGVudHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHMgPSBbXQorICAgICAgICAgICAgYXR0cmlidXRlU3RyaW5nID0gJycKKyAgICAgICAgICAgIGlm
IGF0dHJzOgorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVN0cmluZyA9ICcgJyArICcgJy5qb2lu
KGF0dHJzKQorICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQ6CisgICAgICAgICAgICAgICAgcy5h
cHBlbmQoc3BhY2UpCisgICAgICAgICAgICBzLmFwcGVuZCgnPCVzJXMlcz4nICUgKGVuY29kZWRO
YW1lLCBhdHRyaWJ1dGVTdHJpbmcsIGNsb3NlKSkKKyAgICAgICAgICAgIGlmIHByZXR0eVByaW50
OgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCisgICAgICAgICAgICBzLmFwcGVuZChj
b250ZW50cykKKyAgICAgICAgICAgIGlmIHByZXR0eVByaW50IGFuZCBjb250ZW50cyBhbmQgY29u
dGVudHNbLTFdICE9ICJcbiI6CisgICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAgICAg
ICAgICAgIGlmIHByZXR0eVByaW50IGFuZCBjbG9zZVRhZzoKKyAgICAgICAgICAgICAgICBzLmFw
cGVuZChzcGFjZSkKKyAgICAgICAgICAgIHMuYXBwZW5kKGNsb3NlVGFnKQorICAgICAgICAgICAg
aWYgcHJldHR5UHJpbnQgYW5kIGNsb3NlVGFnIGFuZCBzZWxmLm5leHRTaWJsaW5nOgorICAgICAg
ICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCisgICAgICAgICAgICBzID0gJycuam9pbihzKQorICAg
ICAgICByZXR1cm4gcworCisgICAgZGVmIGRlY29tcG9zZShzZWxmKToKKyAgICAgICAgIiIiUmVj
dXJzaXZlbHkgZGVzdHJveXMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdHJlZS4iIiIKKyAgICAgICAg
c2VsZi5leHRyYWN0KCkKKyAgICAgICAgaWYgbGVuKHNlbGYuY29udGVudHMpID09IDA6CisgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgY3VycmVudCA9IHNlbGYuY29udGVudHNbMF0KKyAgICAg
ICAgd2hpbGUgY3VycmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5leHQgPSBjdXJyZW50
Lm5leHQKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY3VycmVudCwgVGFnKToKKyAgICAgICAg
ICAgICAgICBkZWwgY3VycmVudC5jb250ZW50c1s6XQorICAgICAgICAgICAgY3VycmVudC5wYXJl
bnQgPSBOb25lCisgICAgICAgICAgICBjdXJyZW50LnByZXZpb3VzID0gTm9uZQorICAgICAgICAg
ICAgY3VycmVudC5wcmV2aW91c1NpYmxpbmcgPSBOb25lCisgICAgICAgICAgICBjdXJyZW50Lm5l
eHQgPSBOb25lCisgICAgICAgICAgICBjdXJyZW50Lm5leHRTaWJsaW5nID0gTm9uZQorICAgICAg
ICAgICAgY3VycmVudCA9IG5leHQKKworICAgIGRlZiBwcmV0dGlmeShzZWxmLCBlbmNvZGluZz1E
RUZBVUxUX09VVFBVVF9FTkNPRElORyk6CisgICAgICAgIHJldHVybiBzZWxmLl9fc3RyX18oZW5j
b2RpbmcsIFRydWUpCisKKyAgICBkZWYgcmVuZGVyQ29udGVudHMoc2VsZiwgZW5jb2Rpbmc9REVG
QVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAgICAgICAgICAgICAgICAgIHByZXR0eVByaW50
PUZhbHNlLCBpbmRlbnRMZXZlbD0wKToKKyAgICAgICAgIiIiUmVuZGVycyB0aGUgY29udGVudHMg
b2YgdGhpcyB0YWcgYXMgYSBzdHJpbmcgaW4gdGhlIGdpdmVuCisgICAgICAgIGVuY29kaW5nLiBJ
ZiBlbmNvZGluZyBpcyBOb25lLCByZXR1cm5zIGEgVW5pY29kZSBzdHJpbmcuLiIiIgorICAgICAg
ICBzPVtdCisgICAgICAgIGZvciBjIGluIHNlbGY6CisgICAgICAgICAgICB0ZXh0ID0gTm9uZQor
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjLCBOYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICAg
ICAgICAgIHRleHQgPSBjLl9fc3RyX18oZW5jb2RpbmcpCisgICAgICAgICAgICBlbGlmIGlzaW5z
dGFuY2UoYywgVGFnKToKKyAgICAgICAgICAgICAgICBzLmFwcGVuZChjLl9fc3RyX18oZW5jb2Rp
bmcsIHByZXR0eVByaW50LCBpbmRlbnRMZXZlbCkpCisgICAgICAgICAgICBpZiB0ZXh0IGFuZCBw
cmV0dHlQcmludDoKKyAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdHJpcCgpCisgICAgICAg
ICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgICAgIGlmIHByZXR0eVByaW50OgorICAgICAgICAg
ICAgICAgICAgICBzLmFwcGVuZCgiICIgKiAoaW5kZW50TGV2ZWwtMSkpCisgICAgICAgICAgICAg
ICAgcy5hcHBlbmQodGV4dCkKKyAgICAgICAgICAgICAgICBpZiBwcmV0dHlQcmludDoKKyAgICAg
ICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAgICAgICAgcmV0dXJuICcnLmpvaW4ocykK
KworICAgICNTb3VwIG1ldGhvZHMKKworICAgIGRlZiBmaW5kKHNlbGYsIG5hbWU9Tm9uZSwgYXR0
cnM9e30sIHJlY3Vyc2l2ZT1UcnVlLCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgKiprd2FyZ3Mp
OgorICAgICAgICAiIiJSZXR1cm4gb25seSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhpcyBUYWcgbWF0
Y2hpbmcgdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiIiIgorICAgICAgICByID0gTm9uZQor
ICAgICAgICBsID0gc2VsZi5maW5kQWxsKG5hbWUsIGF0dHJzLCByZWN1cnNpdmUsIHRleHQsIDEs
ICoqa3dhcmdzKQorICAgICAgICBpZiBsOgorICAgICAgICAgICAgciA9IGxbMF0KKyAgICAgICAg
cmV0dXJuIHIKKyAgICBmaW5kQ2hpbGQgPSBmaW5kCisKKyAgICBkZWYgZmluZEFsbChzZWxmLCBu
YW1lPU5vbmUsIGF0dHJzPXt9LCByZWN1cnNpdmU9VHJ1ZSwgdGV4dD1Ob25lLAorICAgICAgICAg
ICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiRXh0cmFjdHMgYSBsaXN0
IG9mIFRhZyBvYmplY3RzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiAg
WW91IGNhbiBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBUYWcgYW5kIGFueQorICAgICAgICBhdHRy
aWJ1dGVzIHlvdSB3YW50IHRoZSBUYWcgdG8gaGF2ZS4KKworICAgICAgICBUaGUgdmFsdWUgb2Yg
YSBrZXktdmFsdWUgcGFpciBpbiB0aGUgJ2F0dHJzJyBtYXAgY2FuIGJlIGEKKyAgICAgICAgc3Ry
aW5nLCBhIGxpc3Qgb2Ygc3RyaW5ncywgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LCBvciBh
CisgICAgICAgIGNhbGxhYmxlIHRoYXQgdGFrZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgd2hldGhl
ciBvciBub3QgdGhlCisgICAgICAgIHN0cmluZyBtYXRjaGVzIGZvciBzb21lIGN1c3RvbSBkZWZp
bml0aW9uIG9mICdtYXRjaGVzJy4gVGhlCisgICAgICAgIHNhbWUgaXMgdHJ1ZSBvZiB0aGUgdGFn
IG5hbWUuIiIiCisgICAgICAgIGdlbmVyYXRvciA9IHNlbGYucmVjdXJzaXZlQ2hpbGRHZW5lcmF0
b3IKKyAgICAgICAgaWYgbm90IHJlY3Vyc2l2ZToKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHNl
bGYuY2hpbGRHZW5lcmF0b3IKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0
cnMsIHRleHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdzKQorICAgIGZpbmRDaGlsZHJlbiA9
IGZpbmRBbGwKKworICAgICMgUHJlLTMueCBjb21wYXRpYmlsaXR5IG1ldGhvZHMKKyAgICBmaXJz
dCA9IGZpbmQKKyAgICBmZXRjaCA9IGZpbmRBbGwKKworICAgIGRlZiBmZXRjaFRleHQoc2VsZiwg
dGV4dD1Ob25lLCByZWN1cnNpdmU9VHJ1ZSwgbGltaXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBz
ZWxmLmZpbmRBbGwodGV4dD10ZXh0LCByZWN1cnNpdmU9cmVjdXJzaXZlLCBsaW1pdD1saW1pdCkK
KworICAgIGRlZiBmaXJzdFRleHQoc2VsZiwgdGV4dD1Ob25lLCByZWN1cnNpdmU9VHJ1ZSk6Cisg
ICAgICAgIHJldHVybiBzZWxmLmZpbmQodGV4dD10ZXh0LCByZWN1cnNpdmU9cmVjdXJzaXZlKQor
CisgICAgI1ByaXZhdGUgbWV0aG9kcworCisgICAgZGVmIF9nZXRBdHRyTWFwKHNlbGYpOgorICAg
ICAgICAiIiJJbml0aWFsaXplcyBhIG1hcCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRhZydzIGF0
dHJpYnV0ZXMsCisgICAgICAgIGlmIG5vdCBhbHJlYWR5IGluaXRpYWxpemVkLiIiIgorICAgICAg
ICBpZiBub3QgZ2V0YXR0cihzZWxmLCAnYXR0ck1hcCcpOgorICAgICAgICAgICAgc2VsZi5hdHRy
TWFwID0ge30KKyAgICAgICAgICAgIGZvciAoa2V5LCB2YWx1ZSkgaW4gc2VsZi5hdHRyczoKKyAg
ICAgICAgICAgICAgICBzZWxmLmF0dHJNYXBba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiBz
ZWxmLmF0dHJNYXAKKworICAgICNHZW5lcmF0b3IgbWV0aG9kcworICAgIGRlZiBjaGlsZEdlbmVy
YXRvcihzZWxmKToKKyAgICAgICAgIyBKdXN0IHVzZSB0aGUgaXRlcmF0b3IgZnJvbSB0aGUgY29u
dGVudHMKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5jb250ZW50cykKKworICAgIGRlZiByZWN1
cnNpdmVDaGlsZEdlbmVyYXRvcihzZWxmKToKKyAgICAgICAgaWYgbm90IGxlbihzZWxmLmNvbnRl
bnRzKToKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgc3RvcE5vZGUg
PSBzZWxmLl9sYXN0UmVjdXJzaXZlQ2hpbGQoKS5uZXh0CisgICAgICAgIGN1cnJlbnQgPSBzZWxm
LmNvbnRlbnRzWzBdCisgICAgICAgIHdoaWxlIGN1cnJlbnQgaXMgbm90IHN0b3BOb2RlOgorICAg
ICAgICAgICAgeWllbGQgY3VycmVudAorICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4
dAorCisKKyMgTmV4dCwgYSBjb3VwbGUgY2xhc3NlcyB0byByZXByZXNlbnQgcXVlcmllcyBhbmQg
dGhlaXIgcmVzdWx0cy4KK2NsYXNzIFNvdXBTdHJhaW5lcjoKKyAgICAiIiJFbmNhcHN1bGF0ZXMg
YSBudW1iZXIgb2Ygd2F5cyBvZiBtYXRjaGluZyBhIG1hcmt1cCBlbGVtZW50ICh0YWcgb3IKKyAg
ICB0ZXh0KS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9
LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAg
ICBpZiBpc2luc3RhbmNlKGF0dHJzLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGt3YXJnc1sn
Y2xhc3MnXSA9IF9tYXRjaF9jc3NfY2xhc3MoYXR0cnMpCisgICAgICAgICAgICBhdHRycyA9IE5v
bmUKKyAgICAgICAgaWYga3dhcmdzOgorICAgICAgICAgICAgaWYgYXR0cnM6CisgICAgICAgICAg
ICAgICAgYXR0cnMgPSBhdHRycy5jb3B5KCkKKyAgICAgICAgICAgICAgICBhdHRycy51cGRhdGUo
a3dhcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhdHRycyA9IGt3YXJn
cworICAgICAgICBzZWxmLmF0dHJzID0gYXR0cnMKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAor
CisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYudGV4dDoKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLnRleHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAi
JXN8JXMiICUgKHNlbGYubmFtZSwgc2VsZi5hdHRycykKKworICAgIGRlZiBzZWFyY2hUYWcoc2Vs
ZiwgbWFya3VwTmFtZT1Ob25lLCBtYXJrdXBBdHRycz17fSk6CisgICAgICAgIGZvdW5kID0gTm9u
ZQorICAgICAgICBtYXJrdXAgPSBOb25lCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwTmFt
ZSwgVGFnKToKKyAgICAgICAgICAgIG1hcmt1cCA9IG1hcmt1cE5hbWUKKyAgICAgICAgICAgIG1h
cmt1cEF0dHJzID0gbWFya3VwCisgICAgICAgIGNhbGxGdW5jdGlvbldpdGhUYWdEYXRhID0gY2Fs
bGFibGUoc2VsZi5uYW1lKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBu
b3QgaXNpbnN0YW5jZShtYXJrdXBOYW1lLCBUYWcpCisKKyAgICAgICAgaWYgKG5vdCBzZWxmLm5h
bWUpIFwKKyAgICAgICAgICAgICAgIG9yIGNhbGxGdW5jdGlvbldpdGhUYWdEYXRhIFwKKyAgICAg
ICAgICAgICAgIG9yIChtYXJrdXAgYW5kIHNlbGYuX21hdGNoZXMobWFya3VwLCBzZWxmLm5hbWUp
KSBcCisgICAgICAgICAgICAgICBvciAobm90IG1hcmt1cCBhbmQgc2VsZi5fbWF0Y2hlcyhtYXJr
dXBOYW1lLCBzZWxmLm5hbWUpKToKKyAgICAgICAgICAgIGlmIGNhbGxGdW5jdGlvbldpdGhUYWdE
YXRhOgorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5uYW1lKG1hcmt1cE5hbWUsIG1hcmt1
cEF0dHJzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IFRydWUK
KyAgICAgICAgICAgICAgICBtYXJrdXBBdHRyTWFwID0gTm9uZQorICAgICAgICAgICAgICAgIGZv
ciBhdHRyLCBtYXRjaEFnYWluc3QgaW4gc2VsZi5hdHRycy5pdGVtcygpOgorICAgICAgICAgICAg
ICAgICAgICBpZiBub3QgbWFya3VwQXR0ck1hcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBoYXNhdHRyKG1hcmt1cEF0dHJzLCAnZ2V0Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFya3VwQXR0ck1hcCA9IG1hcmt1cEF0dHJzCisgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBBdHRyTWFwID0ge30KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igayx2IGluIG1hcmt1cEF0dHJzOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBBdHRyTWFwW2tdID0gdgorICAgICAgICAg
ICAgICAgICAgICBhdHRyVmFsdWUgPSBtYXJrdXBBdHRyTWFwLmdldChhdHRyKQorICAgICAgICAg
ICAgICAgICAgICBpZiBub3Qgc2VsZi5fbWF0Y2hlcyhhdHRyVmFsdWUsIG1hdGNoQWdhaW5zdCk6
CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IEZhbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgaWYg
bWFya3VwOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcmt1cAorICAgICAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwTmFtZQorICAgICAg
ICByZXR1cm4gZm91bmQKKworICAgIGRlZiBzZWFyY2goc2VsZiwgbWFya3VwKToKKyAgICAgICAg
I3ByaW50ICdsb29raW5nIGZvciAlcyBpbiAlcycgJSAoc2VsZiwgbWFya3VwKQorICAgICAgICBm
b3VuZCA9IE5vbmUKKyAgICAgICAgIyBJZiBnaXZlbiBhIGxpc3Qgb2YgaXRlbXMsIHNjYW4gaXQg
Zm9yIGEgdGV4dCBlbGVtZW50IHRoYXQKKyAgICAgICAgIyBtYXRjaGVzLgorICAgICAgICBpZiBo
YXNhdHRyKG1hcmt1cCwgIl9faXRlcl9fIikgXAorICAgICAgICAgICAgICAgIGFuZCBub3QgaXNp
bnN0YW5jZShtYXJrdXAsIFRhZyk6CisgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBtYXJrdXA6
CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBOYXZpZ2FibGVTdHJpbmcp
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYuc2VhcmNoKGVsZW1lbnQpOgorICAg
ICAgICAgICAgICAgICAgICBmb3VuZCA9IGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgIyBJZiBpdCdzIGEgVGFnLCBtYWtlIHN1cmUgaXRzIG5hbWUgb3IgYXR0cmli
dXRlcyBtYXRjaC4KKyAgICAgICAgIyBEb24ndCBib3RoZXIgd2l0aCBUYWdzIGlmIHdlJ3JlIHNl
YXJjaGluZyBmb3IgdGV4dC4KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG1hcmt1cCwgVGFnKToK
KyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnRleHQ6CisgICAgICAgICAgICAgICAgZm91bmQgPSBz
ZWxmLnNlYXJjaFRhZyhtYXJrdXApCisgICAgICAgICMgSWYgaXQncyB0ZXh0LCBtYWtlIHN1cmUg
dGhlIHRleHQgbWF0Y2hlcy4KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG1hcmt1cCwgTmF2aWdh
YmxlU3RyaW5nKSBvciBcCisgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UobWFya3VwLCBiYXNl
c3RyaW5nKToKKyAgICAgICAgICAgIGlmIHNlbGYuX21hdGNoZXMobWFya3VwLCBzZWxmLnRleHQp
OgorICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICByYWlzZSBFeGNlcHRpb24sICJJIGRvbid0IGtub3cgaG93IHRvIG1hdGNoIGFnYWluc3Qg
YSAlcyIgXAorICAgICAgICAgICAgICAgICAgJSBtYXJrdXAuX19jbGFzc19fCisgICAgICAgIHJl
dHVybiBmb3VuZAorCisgICAgZGVmIF9tYXRjaGVzKHNlbGYsIG1hcmt1cCwgbWF0Y2hBZ2FpbnN0
KToKKyAgICAgICAgI3ByaW50ICJNYXRjaGluZyAlcyBhZ2FpbnN0ICVzIiAlIChtYXJrdXAsIG1h
dGNoQWdhaW5zdCkKKyAgICAgICAgcmVzdWx0ID0gRmFsc2UKKyAgICAgICAgaWYgbWF0Y2hBZ2Fp
bnN0IGlzIFRydWU6CisgICAgICAgICAgICByZXN1bHQgPSBtYXJrdXAgaXMgbm90IE5vbmUKKyAg
ICAgICAgZWxpZiBjYWxsYWJsZShtYXRjaEFnYWluc3QpOgorICAgICAgICAgICAgcmVzdWx0ID0g
bWF0Y2hBZ2FpbnN0KG1hcmt1cCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNDdXN0b20g
bWF0Y2ggbWV0aG9kcyB0YWtlIHRoZSB0YWcgYXMgYW4gYXJndW1lbnQsIGJ1dCBhbGwKKyAgICAg
ICAgICAgICNvdGhlciB3YXlzIG9mIG1hdGNoaW5nIG1hdGNoIHRoZSB0YWcgbmFtZSBhcyBhIHN0
cmluZy4KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCBUYWcpOgorICAgICAgICAg
ICAgICAgIG1hcmt1cCA9IG1hcmt1cC5uYW1lCisgICAgICAgICAgICBpZiBtYXJrdXAgYW5kIG5v
dCBpc2luc3RhbmNlKG1hcmt1cCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgbWFya3Vw
ID0gdW5pY29kZShtYXJrdXApCisgICAgICAgICAgICAjTm93IHdlIGtub3cgdGhhdCBjaHVuayBp
cyBlaXRoZXIgYSBzdHJpbmcsIG9yIE5vbmUuCisgICAgICAgICAgICBpZiBoYXNhdHRyKG1hdGNo
QWdhaW5zdCwgJ21hdGNoJyk6CisgICAgICAgICAgICAgICAgIyBJdCdzIGEgcmVnZXhwIG9iamVj
dC4KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXJrdXAgYW5kIG1hdGNoQWdhaW5zdC5zZWFy
Y2gobWFya3VwKQorICAgICAgICAgICAgZWxpZiBoYXNhdHRyKG1hdGNoQWdhaW5zdCwgJ19faXRl
cl9fJyk6ICMgbGlzdC1saWtlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFya3VwIGluIG1h
dGNoQWdhaW5zdAorICAgICAgICAgICAgZWxpZiBoYXNhdHRyKG1hdGNoQWdhaW5zdCwgJ2l0ZW1z
Jyk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFya3VwLmhhc19rZXkobWF0Y2hBZ2FpbnN0
KQorICAgICAgICAgICAgZWxpZiBtYXRjaEFnYWluc3QgYW5kIGlzaW5zdGFuY2UobWFya3VwLCBi
YXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29k
ZSk6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoQWdhaW5zdCA9IHVuaWNvZGUobWF0Y2hBZ2Fp
bnN0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoQWdh
aW5zdCA9IHN0cihtYXRjaEFnYWluc3QpCisKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHQ6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbWF0Y2hBZ2FpbnN0ID09IG1hcmt1cAorICAgICAgICBy
ZXR1cm4gcmVzdWx0CisKK2NsYXNzIFJlc3VsdFNldChsaXN0KToKKyAgICAiIiJBIFJlc3VsdFNl
dCBpcyBqdXN0IGEgbGlzdCB0aGF0IGtlZXBzIHRyYWNrIG9mIHRoZSBTb3VwU3RyYWluZXIKKyAg
ICB0aGF0IGNyZWF0ZWQgaXQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSk6Cisg
ICAgICAgIGxpc3QuX19pbml0X18oW10pCisgICAgICAgIHNlbGYuc291cmNlID0gc291cmNlCisK
KyMgTm93LCBzb21lIGhlbHBlciBmdW5jdGlvbnMuCisKK2RlZiBidWlsZFRhZ01hcChkZWZhdWx0
LCAqYXJncyk6CisgICAgIiIiVHVybnMgYSBsaXN0IG9mIG1hcHMsIGxpc3RzLCBvciBzY2FsYXJz
IGludG8gYSBzaW5nbGUgbWFwLgorICAgIFVzZWQgdG8gYnVpbGQgdGhlIFNFTEZfQ0xPU0lOR19U
QUdTLCBORVNUQUJMRV9UQUdTLCBhbmQKKyAgICBORVNUSU5HX1JFU0VUX1RBR1MgbWFwcyBvdXQg
b2YgbGlzdHMgYW5kIHBhcnRpYWwgbWFwcy4iIiIKKyAgICBidWlsdCA9IHt9CisgICAgZm9yIHBv
cnRpb24gaW4gYXJnczoKKyAgICAgICAgaWYgaGFzYXR0cihwb3J0aW9uLCAnaXRlbXMnKToKKyAg
ICAgICAgICAgICNJdCdzIGEgbWFwLiBNZXJnZSBpdC4KKyAgICAgICAgICAgIGZvciBrLHYgaW4g
cG9ydGlvbi5pdGVtcygpOgorICAgICAgICAgICAgICAgIGJ1aWx0W2tdID0gdgorICAgICAgICBl
bGlmIGhhc2F0dHIocG9ydGlvbiwgJ19faXRlcl9fJyk6ICMgaXMgYSBsaXN0CisgICAgICAgICAg
ICAjSXQncyBhIGxpc3QuIE1hcCBlYWNoIGl0ZW0gdG8gdGhlIGRlZmF1bHQuCisgICAgICAgICAg
ICBmb3IgayBpbiBwb3J0aW9uOgorICAgICAgICAgICAgICAgIGJ1aWx0W2tdID0gZGVmYXVsdAor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgI0l0J3MgYSBzY2FsYXIuIE1hcCBpdCB0byB0aGUg
ZGVmYXVsdC4KKyAgICAgICAgICAgIGJ1aWx0W3BvcnRpb25dID0gZGVmYXVsdAorICAgIHJldHVy
biBidWlsdAorCisjIE5vdywgdGhlIHBhcnNlciBjbGFzc2VzLgorCitjbGFzcyBCZWF1dGlmdWxT
dG9uZVNvdXAoVGFnLCBTR01MUGFyc2VyKToKKworICAgICIiIlRoaXMgY2xhc3MgY29udGFpbnMg
dGhlIGJhc2ljIHBhcnNlciBhbmQgc2VhcmNoIGNvZGUuIEl0IGRlZmluZXMKKyAgICBhIHBhcnNl
ciB0aGF0IGtub3dzIG5vdGhpbmcgYWJvdXQgdGFnIGJlaGF2aW9yIGV4Y2VwdCBmb3IgdGhlCisg
ICAgZm9sbG93aW5nOgorCisgICAgICBZb3UgY2FuJ3QgY2xvc2UgYSB0YWcgd2l0aG91dCBjbG9z
aW5nIGFsbCB0aGUgdGFncyBpdCBlbmNsb3Nlcy4KKyAgICAgIFRoYXQgaXMsICI8Zm9vPjxiYXI+
PC9mb28+IiBhY3R1YWxseSBtZWFucworICAgICAgIjxmb28+PGJhcj48L2Jhcj48L2Zvbz4iLgor
CisgICAgW0Fub3RoZXIgcG9zc2libGUgZXhwbGFuYXRpb24gaXMgIjxmb28+PGJhciAvPjwvZm9v
PiIsIGJ1dCBzaW5jZQorICAgIHRoaXMgY2xhc3MgZGVmaW5lcyBubyBTRUxGX0NMT1NJTkdfVEFH
UywgaXQgd2lsbCBuZXZlciB1c2UgdGhhdAorICAgIGV4cGxhbmF0aW9uLl0KKworICAgIFRoaXMg
Y2xhc3MgaXMgdXNlZnVsIGZvciBwYXJzaW5nIFhNTCBvciBtYWRlLXVwIG1hcmt1cCBsYW5ndWFn
ZXMsCisgICAgb3Igd2hlbiBCZWF1dGlmdWxTb3VwIG1ha2VzIGFuIGFzc3VtcHRpb24gY291bnRl
ciB0byB3aGF0IHlvdSB3ZXJlCisgICAgZXhwZWN0aW5nLiIiIgorCisgICAgU0VMRl9DTE9TSU5H
X1RBR1MgPSB7fQorICAgIE5FU1RBQkxFX1RBR1MgPSB7fQorICAgIFJFU0VUX05FU1RJTkdfVEFH
UyA9IHt9CisgICAgUVVPVEVfVEFHUyA9IHt9CisgICAgUFJFU0VSVkVfV0hJVEVTUEFDRV9UQUdT
ID0gW10KKworICAgIE1BUktVUF9NQVNTQUdFID0gWyhyZS5jb21waWxlKCcoPFtePD5dKikvPicp
LAorICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogeC5ncm91cCgxKSArICcgLz4nKSwK
KyAgICAgICAgICAgICAgICAgICAgICAocmUuY29tcGlsZSgnPCFccysoW148Pl0qKT4nKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHg6ICc8IScgKyB4Lmdyb3VwKDEpICsgJz4nKQor
ICAgICAgICAgICAgICAgICAgICAgIF0KKworICAgIFJPT1RfVEFHX05BTUUgPSB1J1tkb2N1bWVu
dF0nCisKKyAgICBIVE1MX0VOVElUSUVTID0gImh0bWwiCisgICAgWE1MX0VOVElUSUVTID0gInht
bCIKKyAgICBYSFRNTF9FTlRJVElFUyA9ICJ4aHRtbCIKKyAgICAjIFRPRE86IFRoaXMgb25seSBl
eGlzdHMgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5CisgICAgQUxMX0VOVElUSUVTID0gWEhU
TUxfRU5USVRJRVMKKworICAgICMgVXNlZCB3aGVuIGRldGVybWluaW5nIHdoZXRoZXIgYSB0ZXh0
IG5vZGUgaXMgYWxsIHdoaXRlc3BhY2UgYW5kCisgICAgIyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBh
IHNpbmdsZSBzcGFjZS4gQSB0ZXh0IG5vZGUgdGhhdCBjb250YWlucworICAgICMgZmFuY3kgVW5p
Y29kZSBzcGFjZXMgKHVzdWFsbHkgbm9uLWJyZWFraW5nKSBzaG91bGQgYmUgbGVmdAorICAgICMg
YWxvbmUuCisgICAgU1RSSVBfQVNDSUlfU1BBQ0VTID0geyA5OiBOb25lLCAxMDogTm9uZSwgMTI6
IE5vbmUsIDEzOiBOb25lLCAzMjogTm9uZSwgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1h
cmt1cD0iIiwgcGFyc2VPbmx5VGhlc2U9Tm9uZSwgZnJvbUVuY29kaW5nPU5vbmUsCisgICAgICAg
ICAgICAgICAgIG1hcmt1cE1hc3NhZ2U9VHJ1ZSwgc21hcnRRdW90ZXNUbz1YTUxfRU5USVRJRVMs
CisgICAgICAgICAgICAgICAgIGNvbnZlcnRFbnRpdGllcz1Ob25lLCBzZWxmQ2xvc2luZ1RhZ3M9
Tm9uZSwgaXNIVE1MPUZhbHNlKToKKyAgICAgICAgIiIiVGhlIFNvdXAgb2JqZWN0IGlzIGluaXRp
YWxpemVkIGFzIHRoZSAncm9vdCB0YWcnLCBhbmQgdGhlCisgICAgICAgIHByb3ZpZGVkIG1hcmt1
cCAod2hpY2ggY2FuIGJlIGEgc3RyaW5nIG9yIGEgZmlsZS1saWtlIG9iamVjdCkKKyAgICAgICAg
aXMgZmVkIGludG8gdGhlIHVuZGVybHlpbmcgcGFyc2VyLgorCisgICAgICAgIHNnbWxsaWIgd2ls
bCBwcm9jZXNzIG1vc3QgYmFkIEhUTUwsIGFuZCB0aGUgQmVhdXRpZnVsU291cAorICAgICAgICBj
bGFzcyBoYXMgc29tZSB0cmlja3MgZm9yIGRlYWxpbmcgd2l0aCBzb21lIEhUTUwgdGhhdCBraWxs
cworICAgICAgICBzZ21sbGliLCBidXQgQmVhdXRpZnVsIFNvdXAgY2FuIG5vbmV0aGVsZXNzIGNo
b2tlIG9yIGxvc2UgZGF0YQorICAgICAgICBpZiB5b3VyIGRhdGEgdXNlcyBzZWxmLWNsb3Npbmcg
dGFncyBvciBkZWNsYXJhdGlvbnMKKyAgICAgICAgaW5jb3JyZWN0bHkuCisKKyAgICAgICAgQnkg
ZGVmYXVsdCwgQmVhdXRpZnVsIFNvdXAgdXNlcyByZWdleGVzIHRvIHNhbml0aXplIGlucHV0LAor
ICAgICAgICBhdm9pZGluZyB0aGUgdmFzdCBtYWpvcml0eSBvZiB0aGVzZSBwcm9ibGVtcy4gSWYg
dGhlIHByb2JsZW1zCisgICAgICAgIGRvbid0IGFwcGx5IHRvIHlvdSwgcGFzcyBpbiBGYWxzZSBm
b3IgbWFya3VwTWFzc2FnZSwgYW5kCisgICAgICAgIHlvdSdsbCBnZXQgYmV0dGVyIHBlcmZvcm1h
bmNlLgorCisgICAgICAgIFRoZSBkZWZhdWx0IHBhcnNlciBtYXNzYWdlIHRlY2huaXF1ZXMgZml4
IHRoZSB0d28gbW9zdCBjb21tb24KKyAgICAgICAgaW5zdGFuY2VzIG9mIGludmFsaWQgSFRNTCB0
aGF0IGNob2tlIHNnbWxsaWI6CisKKyAgICAgICAgIDxici8+IChObyBzcGFjZSBiZXR3ZWVuIG5h
bWUgb2YgY2xvc2luZyB0YWcgYW5kIHRhZyBjbG9zZSkKKyAgICAgICAgIDwhIC0tQ29tbWVudC0t
PiAoRXh0cmFuZW91cyB3aGl0ZXNwYWNlIGluIGRlY2xhcmF0aW9uKQorCisgICAgICAgIFlvdSBj
YW4gcGFzcyBpbiBhIGN1c3RvbSBsaXN0IG9mIChSRSBvYmplY3QsIHJlcGxhY2UgbWV0aG9kKQor
ICAgICAgICB0dXBsZXMgdG8gZ2V0IEJlYXV0aWZ1bCBTb3VwIHRvIHNjcnViIHlvdXIgaW5wdXQg
dGhlIHdheSB5b3UKKyAgICAgICAgd2FudC4iIiIKKworICAgICAgICBzZWxmLnBhcnNlT25seVRo
ZXNlID0gcGFyc2VPbmx5VGhlc2UKKyAgICAgICAgc2VsZi5mcm9tRW5jb2RpbmcgPSBmcm9tRW5j
b2RpbmcKKyAgICAgICAgc2VsZi5zbWFydFF1b3Rlc1RvID0gc21hcnRRdW90ZXNUbworICAgICAg
ICBzZWxmLmNvbnZlcnRFbnRpdGllcyA9IGNvbnZlcnRFbnRpdGllcworICAgICAgICAjIFNldCB0
aGUgcnVsZXMgZm9yIGhvdyB3ZSdsbCBkZWFsIHdpdGggdGhlIGVudGl0aWVzIHdlCisgICAgICAg
ICMgZW5jb3VudGVyCisgICAgICAgIGlmIHNlbGYuY29udmVydEVudGl0aWVzOgorICAgICAgICAg
ICAgIyBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gY29udmVydCBlbmNvZGVkIGNoYXJhY3RlcnMg
dG8KKyAgICAgICAgICAgICMgZW50aXRpZXMgZXZlbiB3aGlsZSB5b3UncmUgY29udmVydGluZyBl
bnRpdGllcyB0byBVbmljb2RlLgorICAgICAgICAgICAgIyBKdXN0IGNvbnZlcnQgaXQgYWxsIHRv
IFVuaWNvZGUuCisgICAgICAgICAgICBzZWxmLnNtYXJ0UXVvdGVzVG8gPSBOb25lCisgICAgICAg
ICAgICBpZiBjb252ZXJ0RW50aXRpZXMgPT0gc2VsZi5IVE1MX0VOVElUSUVTOgorICAgICAgICAg
ICAgICAgIHNlbGYuY29udmVydFhNTEVudGl0aWVzID0gRmFsc2UKKyAgICAgICAgICAgICAgICBz
ZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5lc2Nh
cGVVbnJlY29nbml6ZWRFbnRpdGllcyA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgY29udmVydEVu
dGl0aWVzID09IHNlbGYuWEhUTUxfRU5USVRJRVM6CisgICAgICAgICAgICAgICAgc2VsZi5jb252
ZXJ0WE1MRW50aXRpZXMgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5jb252ZXJ0SFRNTEVu
dGl0aWVzID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50
aXRpZXMgPSBGYWxzZQorICAgICAgICAgICAgZWxpZiBjb252ZXJ0RW50aXRpZXMgPT0gc2VsZi5Y
TUxfRU5USVRJRVM6CisgICAgICAgICAgICAgICAgc2VsZi5jb252ZXJ0WE1MRW50aXRpZXMgPSBU
cnVlCisgICAgICAgICAgICAgICAgc2VsZi5jb252ZXJ0SFRNTEVudGl0aWVzID0gRmFsc2UKKyAg
ICAgICAgICAgICAgICBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzID0gRmFsc2UKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY29udmVydFhNTEVudGl0aWVzID0gRmFsc2UK
KyAgICAgICAgICAgIHNlbGYuY29udmVydEhUTUxFbnRpdGllcyA9IEZhbHNlCisgICAgICAgICAg
ICBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVudGl0aWVzID0gRmFsc2UKKworICAgICAgICBzZWxm
Lmluc3RhbmNlU2VsZkNsb3NpbmdUYWdzID0gYnVpbGRUYWdNYXAoTm9uZSwgc2VsZkNsb3NpbmdU
YWdzKQorICAgICAgICBTR01MUGFyc2VyLl9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgaWYgaGFz
YXR0cihtYXJrdXAsICdyZWFkJyk6ICAgICAgICAjIEl0J3MgYSBmaWxlLXR5cGUgb2JqZWN0Lgor
ICAgICAgICAgICAgbWFya3VwID0gbWFya3VwLnJlYWQoKQorICAgICAgICBzZWxmLm1hcmt1cCA9
IG1hcmt1cAorICAgICAgICBzZWxmLm1hcmt1cE1hc3NhZ2UgPSBtYXJrdXBNYXNzYWdlCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2ZlZWQoaXNIVE1MPWlzSFRNTCkKKyAgICAgICAg
ZXhjZXB0IFN0b3BQYXJzaW5nOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLm1hcmt1
cCA9IE5vbmUgICAgICAgICAgICAgICAgICMgVGhlIG1hcmt1cCBjYW4gbm93IGJlIEdDZWQKKwor
ICAgIGRlZiBjb252ZXJ0X2NoYXJyZWYoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIlRoaXMgbWV0
aG9kIGZpeGVzIGEgYnVnIGluIFB5dGhvbidzIFNHTUxQYXJzZXIuIiIiCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIG4gPSBpbnQobmFtZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Cisg
ICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IDAgPD0gbiA8PSAxMjcgOiAjIEFTQ0lJ
IGVuZHMgYXQgMTI3LCBub3QgMjU1CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmV0dXJu
IHNlbGYuY29udmVydF9jb2RlcG9pbnQobikKKworICAgIGRlZiBfZmVlZChzZWxmLCBpbkRvY3Vt
ZW50RW5jb2Rpbmc9Tm9uZSwgaXNIVE1MPUZhbHNlKToKKyAgICAgICAgIyBDb252ZXJ0IHRoZSBk
b2N1bWVudCB0byBVbmljb2RlLgorICAgICAgICBtYXJrdXAgPSBzZWxmLm1hcmt1cAorICAgICAg
ICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgICAgICBpZiBub3QgaGFz
YXR0cihzZWxmLCAnb3JpZ2luYWxFbmNvZGluZycpOgorICAgICAgICAgICAgICAgIHNlbGYub3Jp
Z2luYWxFbmNvZGluZyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhbW1pdCA9
IFVuaWNvZGVEYW1taXRcCisgICAgICAgICAgICAgICAgICAgICAobWFya3VwLCBbc2VsZi5mcm9t
RW5jb2RpbmcsIGluRG9jdW1lbnRFbmNvZGluZ10sCisgICAgICAgICAgICAgICAgICAgICAgc21h
cnRRdW90ZXNUbz1zZWxmLnNtYXJ0UXVvdGVzVG8sIGlzSFRNTD1pc0hUTUwpCisgICAgICAgICAg
ICBtYXJrdXAgPSBkYW1taXQudW5pY29kZQorICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVuY29k
aW5nID0gZGFtbWl0Lm9yaWdpbmFsRW5jb2RpbmcKKyAgICAgICAgICAgIHNlbGYuZGVjbGFyZWRI
VE1MRW5jb2RpbmcgPSBkYW1taXQuZGVjbGFyZWRIVE1MRW5jb2RpbmcKKyAgICAgICAgaWYgbWFy
a3VwOgorICAgICAgICAgICAgaWYgc2VsZi5tYXJrdXBNYXNzYWdlOgorICAgICAgICAgICAgICAg
IGlmIG5vdCBoYXNhdHRyKHNlbGYubWFya3VwTWFzc2FnZSwgIl9faXRlcl9fIik6CisgICAgICAg
ICAgICAgICAgICAgIHNlbGYubWFya3VwTWFzc2FnZSA9IHNlbGYuTUFSS1VQX01BU1NBR0UKKyAg
ICAgICAgICAgICAgICBmb3IgZml4LCBtIGluIHNlbGYubWFya3VwTWFzc2FnZToKKyAgICAgICAg
ICAgICAgICAgICAgbWFya3VwID0gZml4LnN1YihtLCBtYXJrdXApCisgICAgICAgICAgICAgICAg
IyBUT0RPOiBXZSBnZXQgcmlkIG9mIG1hcmt1cE1hc3NhZ2Ugc28gdGhhdCB0aGUKKyAgICAgICAg
ICAgICAgICAjIHNvdXAgb2JqZWN0IGNhbiBiZSBkZWVwY29waWVkIGxhdGVyIG9uLiBTb21lCisg
ICAgICAgICAgICAgICAgIyBQeXRob24gaW5zdGFsbGF0aW9ucyBjYW4ndCBjb3B5IHJlZ2V4ZXMu
IElmIGFueW9uZQorICAgICAgICAgICAgICAgICMgd2FzIHJlbHlpbmcgb24gdGhlIGV4aXN0ZW5j
ZSBvZiBtYXJrdXBNYXNzYWdlLCB0aGlzCisgICAgICAgICAgICAgICAgIyBtaWdodCBjYXVzZSBw
cm9ibGVtcy4KKyAgICAgICAgICAgICAgICBkZWwoc2VsZi5tYXJrdXBNYXNzYWdlKQorICAgICAg
ICBzZWxmLnJlc2V0KCkKKworICAgICAgICBTR01MUGFyc2VyLmZlZWQoc2VsZiwgbWFya3VwKQor
ICAgICAgICAjIENsb3NlIG91dCBhbnkgdW5maW5pc2hlZCBzdHJpbmdzIGFuZCBjbG9zZSBhbGwg
dGhlIG9wZW4gdGFncy4KKyAgICAgICAgc2VsZi5lbmREYXRhKCkKKyAgICAgICAgd2hpbGUgc2Vs
Zi5jdXJyZW50VGFnLm5hbWUgIT0gc2VsZi5ST09UX1RBR19OQU1FOgorICAgICAgICAgICAgc2Vs
Zi5wb3BUYWcoKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG1ldGhvZE5hbWUpOgorICAg
ICAgICAiIiJUaGlzIG1ldGhvZCByb3V0ZXMgbWV0aG9kIGNhbGwgcmVxdWVzdHMgdG8gZWl0aGVy
IHRoZSBTR01MUGFyc2VyCisgICAgICAgIHN1cGVyY2xhc3Mgb3IgdGhlIFRhZyBzdXBlcmNsYXNz
LCBkZXBlbmRpbmcgb24gdGhlIG1ldGhvZCBuYW1lLiIiIgorICAgICAgICAjcHJpbnQgIl9fZ2V0
YXR0cl9fIGNhbGxlZCBvbiAlcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18sIG1ldGhvZE5hbWUpCisK
KyAgICAgICAgaWYgbWV0aG9kTmFtZS5zdGFydHN3aXRoKCdzdGFydF8nKSBvciBtZXRob2ROYW1l
LnN0YXJ0c3dpdGgoJ2VuZF8nKSBcCisgICAgICAgICAgICAgICBvciBtZXRob2ROYW1lLnN0YXJ0
c3dpdGgoJ2RvXycpOgorICAgICAgICAgICAgcmV0dXJuIFNHTUxQYXJzZXIuX19nZXRhdHRyX18o
c2VsZiwgbWV0aG9kTmFtZSkKKyAgICAgICAgZWxpZiBub3QgbWV0aG9kTmFtZS5zdGFydHN3aXRo
KCdfXycpOgorICAgICAgICAgICAgcmV0dXJuIFRhZy5fX2dldGF0dHJfXyhzZWxmLCBtZXRob2RO
YW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKwor
ICAgIGRlZiBpc1NlbGZDbG9zaW5nVGFnKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJSZXR1cm5z
IHRydWUgaWZmIHRoZSBnaXZlbiBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgYQorICAgICAgICBzZWxm
LWNsb3NpbmcgdGFnIGFjY29yZGluZyB0byB0aGlzIHBhcnNlci4iIiIKKyAgICAgICAgcmV0dXJu
IHNlbGYuU0VMRl9DTE9TSU5HX1RBR1MuaGFzX2tleShuYW1lKSBcCisgICAgICAgICAgICAgICBv
ciBzZWxmLmluc3RhbmNlU2VsZkNsb3NpbmdUYWdzLmhhc19rZXkobmFtZSkKKworICAgIGRlZiBy
ZXNldChzZWxmKToKKyAgICAgICAgVGFnLl9faW5pdF9fKHNlbGYsIHNlbGYsIHNlbGYuUk9PVF9U
QUdfTkFNRSkKKyAgICAgICAgc2VsZi5oaWRkZW4gPSAxCisgICAgICAgIFNHTUxQYXJzZXIucmVz
ZXQoc2VsZikKKyAgICAgICAgc2VsZi5jdXJyZW50RGF0YSA9IFtdCisgICAgICAgIHNlbGYuY3Vy
cmVudFRhZyA9IE5vbmUKKyAgICAgICAgc2VsZi50YWdTdGFjayA9IFtdCisgICAgICAgIHNlbGYu
cXVvdGVTdGFjayA9IFtdCisgICAgICAgIHNlbGYucHVzaFRhZyhzZWxmKQorCisgICAgZGVmIHBv
cFRhZyhzZWxmKToKKyAgICAgICAgdGFnID0gc2VsZi50YWdTdGFjay5wb3AoKQorCisgICAgICAg
ICNwcmludCAiUG9wIiwgdGFnLm5hbWUKKyAgICAgICAgaWYgc2VsZi50YWdTdGFjazoKKyAgICAg
ICAgICAgIHNlbGYuY3VycmVudFRhZyA9IHNlbGYudGFnU3RhY2tbLTFdCisgICAgICAgIHJldHVy
biBzZWxmLmN1cnJlbnRUYWcKKworICAgIGRlZiBwdXNoVGFnKHNlbGYsIHRhZyk6CisgICAgICAg
ICNwcmludCAiUHVzaCIsIHRhZy5uYW1lCisgICAgICAgIGlmIHNlbGYuY3VycmVudFRhZzoKKyAg
ICAgICAgICAgIHNlbGYuY3VycmVudFRhZy5jb250ZW50cy5hcHBlbmQodGFnKQorICAgICAgICBz
ZWxmLnRhZ1N0YWNrLmFwcGVuZCh0YWcpCisgICAgICAgIHNlbGYuY3VycmVudFRhZyA9IHNlbGYu
dGFnU3RhY2tbLTFdCisKKyAgICBkZWYgZW5kRGF0YShzZWxmLCBjb250YWluZXJDbGFzcz1OYXZp
Z2FibGVTdHJpbmcpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnREYXRhOgorICAgICAgICAgICAg
Y3VycmVudERhdGEgPSB1Jycuam9pbihzZWxmLmN1cnJlbnREYXRhKQorICAgICAgICAgICAgaWYg
KGN1cnJlbnREYXRhLnRyYW5zbGF0ZShzZWxmLlNUUklQX0FTQ0lJX1NQQUNFUykgPT0gJycgYW5k
CisgICAgICAgICAgICAgICAgbm90IHNldChbdGFnLm5hbWUgZm9yIHRhZyBpbiBzZWxmLnRhZ1N0
YWNrXSkuaW50ZXJzZWN0aW9uKAorICAgICAgICAgICAgICAgICAgICBzZWxmLlBSRVNFUlZFX1dI
SVRFU1BBQ0VfVEFHUykpOgorICAgICAgICAgICAgICAgIGlmICdcbicgaW4gY3VycmVudERhdGE6
CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnREYXRhID0gJ1xuJworICAgICAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnREYXRhID0gJyAnCisgICAgICAgICAg
ICBzZWxmLmN1cnJlbnREYXRhID0gW10KKyAgICAgICAgICAgIGlmIHNlbGYucGFyc2VPbmx5VGhl
c2UgYW5kIGxlbihzZWxmLnRhZ1N0YWNrKSA8PSAxIGFuZCBcCisgICAgICAgICAgICAgICAgICAg
KG5vdCBzZWxmLnBhcnNlT25seVRoZXNlLnRleHQgb3IgXAorICAgICAgICAgICAgICAgICAgICBu
b3Qgc2VsZi5wYXJzZU9ubHlUaGVzZS5zZWFyY2goY3VycmVudERhdGEpKToKKyAgICAgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgICAgIG8gPSBjb250YWluZXJDbGFzcyhjdXJyZW50RGF0YSkK
KyAgICAgICAgICAgIG8uc2V0dXAoc2VsZi5jdXJyZW50VGFnLCBzZWxmLnByZXZpb3VzKQorICAg
ICAgICAgICAgaWYgc2VsZi5wcmV2aW91czoKKyAgICAgICAgICAgICAgICBzZWxmLnByZXZpb3Vz
Lm5leHQgPSBvCisgICAgICAgICAgICBzZWxmLnByZXZpb3VzID0gbworICAgICAgICAgICAgc2Vs
Zi5jdXJyZW50VGFnLmNvbnRlbnRzLmFwcGVuZChvKQorCisKKyAgICBkZWYgX3BvcFRvVGFnKHNl
bGYsIG5hbWUsIGluY2x1c2l2ZVBvcD1UcnVlKToKKyAgICAgICAgIiIiUG9wcyB0aGUgdGFnIHN0
YWNrIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIG1vc3QgcmVjZW50CisgICAgICAgIGluc3RhbmNl
IG9mIHRoZSBnaXZlbiB0YWcuIElmIGluY2x1c2l2ZVBvcCBpcyBmYWxzZSwgcG9wcyB0aGUgdGFn
CisgICAgICAgIHN0YWNrIHVwIHRvIGJ1dCAqbm90KiBpbmNsdWRpbmcgdGhlIG1vc3QgcmVjZW50
IGluc3RxYW5jZSBvZgorICAgICAgICB0aGUgZ2l2ZW4gdGFnLiIiIgorICAgICAgICAjcHJpbnQg
IlBvcHBpbmcgdG8gJXMiICUgbmFtZQorICAgICAgICBpZiBuYW1lID09IHNlbGYuUk9PVF9UQUdf
TkFNRToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG51bVBvcHMgPSAwCisgICAgICAg
IG1vc3RSZWNlbnRUYWcgPSBOb25lCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLnRh
Z1N0YWNrKS0xLCAwLCAtMSk6CisgICAgICAgICAgICBpZiBuYW1lID09IHNlbGYudGFnU3RhY2tb
aV0ubmFtZToKKyAgICAgICAgICAgICAgICBudW1Qb3BzID0gbGVuKHNlbGYudGFnU3RhY2spLWkK
KyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgaW5jbHVzaXZlUG9wOgorICAg
ICAgICAgICAgbnVtUG9wcyA9IG51bVBvcHMgLSAxCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uo
MCwgbnVtUG9wcyk6CisgICAgICAgICAgICBtb3N0UmVjZW50VGFnID0gc2VsZi5wb3BUYWcoKQor
ICAgICAgICByZXR1cm4gbW9zdFJlY2VudFRhZworCisgICAgZGVmIF9zbWFydFBvcChzZWxmLCBu
YW1lKToKKworICAgICAgICAiIiJXZSBuZWVkIHRvIHBvcCB1cCB0byB0aGUgcHJldmlvdXMgdGFn
IG9mIHRoaXMgdHlwZSwgdW5sZXNzCisgICAgICAgIG9uZSBvZiB0aGlzIHRhZydzIG5lc3Rpbmcg
cmVzZXQgdHJpZ2dlcnMgY29tZXMgYmV0d2VlbiB0aGlzCisgICAgICAgIHRhZyBhbmQgdGhlIHBy
ZXZpb3VzIHRhZyBvZiB0aGlzIHR5cGUsIE9SIHVubGVzcyB0aGlzIHRhZyBpcyBhCisgICAgICAg
IGdlbmVyaWMgbmVzdGluZyB0cmlnZ2VyIGFuZCBhbm90aGVyIGdlbmVyaWMgbmVzdGluZyB0cmln
Z2VyCisgICAgICAgIGNvbWVzIGJldHdlZW4gdGhpcyB0YWcgYW5kIHRoZSBwcmV2aW91cyB0YWcg
b2YgdGhpcyB0eXBlLgorCisgICAgICAgIEV4YW1wbGVzOgorICAgICAgICAgPHA+Rm9vPGI+QmFy
ICo8cD4qIHNob3VsZCBwb3AgdG8gJ3AnLCBub3QgJ2InLgorICAgICAgICAgPHA+Rm9vPHRhYmxl
PkJhciAqPHA+KiBzaG91bGQgcG9wIHRvICd0YWJsZScsIG5vdCAncCcuCisgICAgICAgICA8cD5G
b288dGFibGU+PHRyPkJhciAqPHA+KiBzaG91bGQgcG9wIHRvICd0cicsIG5vdCAncCcuCisKKyAg
ICAgICAgIDxsaT48dWw+PGxpPiAqPGxpPiogc2hvdWxkIHBvcCB0byAndWwnLCBub3QgdGhlIGZp
cnN0ICdsaScuCisgICAgICAgICA8dHI+PHRhYmxlPjx0cj4gKjx0cj4qIHNob3VsZCBwb3AgdG8g
J3RhYmxlJywgbm90IHRoZSBmaXJzdCAndHInCisgICAgICAgICA8dGQ+PHRyPjx0ZD4gKjx0ZD4q
IHNob3VsZCBwb3AgdG8gJ3RyJywgbm90IHRoZSBmaXJzdCAndGQnCisgICAgICAgICIiIgorCisg
ICAgICAgIG5lc3RpbmdSZXNldFRyaWdnZXJzID0gc2VsZi5ORVNUQUJMRV9UQUdTLmdldChuYW1l
KQorICAgICAgICBpc05lc3RhYmxlID0gbmVzdGluZ1Jlc2V0VHJpZ2dlcnMgIT0gTm9uZQorICAg
ICAgICBpc1Jlc2V0TmVzdGluZyA9IHNlbGYuUkVTRVRfTkVTVElOR19UQUdTLmhhc19rZXkobmFt
ZSkKKyAgICAgICAgcG9wVG8gPSBOb25lCisgICAgICAgIGluY2x1c2l2ZSA9IFRydWUKKyAgICAg
ICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYudGFnU3RhY2spLTEsIDAsIC0xKToKKyAgICAgICAg
ICAgIHAgPSBzZWxmLnRhZ1N0YWNrW2ldCisgICAgICAgICAgICBpZiAobm90IHAgb3IgcC5uYW1l
ID09IG5hbWUpIGFuZCBub3QgaXNOZXN0YWJsZToKKyAgICAgICAgICAgICAgICAjTm9uLW5lc3Rh
YmxlIHRhZ3MgZ2V0IHBvcHBlZCB0byB0aGUgdG9wIG9yIHRvIHRoZWlyCisgICAgICAgICAgICAg
ICAgI2xhc3Qgb2NjdXJhbmNlLgorICAgICAgICAgICAgICAgIHBvcFRvID0gbmFtZQorICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiAobmVzdGluZ1Jlc2V0VHJpZ2dlcnMgaXMg
bm90IE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcC5uYW1lIGluIG5lc3RpbmdSZXNldFRyaWdn
ZXJzKSBcCisgICAgICAgICAgICAgICAgb3IgKG5lc3RpbmdSZXNldFRyaWdnZXJzIGlzIE5vbmUg
YW5kIGlzUmVzZXROZXN0aW5nCisgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLlJFU0VUX05F
U1RJTkdfVEFHUy5oYXNfa2V5KHAubmFtZSkpOgorCisgICAgICAgICAgICAgICAgI0lmIHdlIGVu
Y291bnRlciBvbmUgb2YgdGhlIG5lc3RpbmcgcmVzZXQgdHJpZ2dlcnMKKyAgICAgICAgICAgICAg
ICAjcGVjdWxpYXIgdG8gdGhpcyB0YWcsIG9yIHdlIGVuY291bnRlciBhbm90aGVyIHRhZworICAg
ICAgICAgICAgICAgICN0aGF0IGNhdXNlcyBuZXN0aW5nIHRvIHJlc2V0LCBwb3AgdXAgdG8gYnV0
IG5vdAorICAgICAgICAgICAgICAgICNpbmNsdWRpbmcgdGhhdCB0YWcuCisgICAgICAgICAgICAg
ICAgcG9wVG8gPSBwLm5hbWUKKyAgICAgICAgICAgICAgICBpbmNsdXNpdmUgPSBGYWxzZQorICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwID0gcC5wYXJlbnQKKyAgICAgICAgaWYg
cG9wVG86CisgICAgICAgICAgICBzZWxmLl9wb3BUb1RhZyhwb3BUbywgaW5jbHVzaXZlKQorCisg
ICAgZGVmIHVua25vd25fc3RhcnR0YWcoc2VsZiwgbmFtZSwgYXR0cnMsIHNlbGZDbG9zaW5nPTAp
OgorICAgICAgICAjcHJpbnQgIlN0YXJ0IHRhZyAlczogJXMiICUgKG5hbWUsIGF0dHJzKQorICAg
ICAgICBpZiBzZWxmLnF1b3RlU3RhY2s6CisgICAgICAgICAgICAjVGhpcyBpcyBub3QgYSByZWFs
IHRhZy4KKyAgICAgICAgICAgICNwcmludCAiPCVzPiBpcyBub3QgcmVhbCEiICUgbmFtZQorICAg
ICAgICAgICAgYXR0cnMgPSAnJy5qb2luKFsnICVzPSIlcyInICUgKHgsIHkpIGZvciB4LCB5IGlu
IGF0dHJzXSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEoJzwlcyVzPicgJSAobmFtZSwg
YXR0cnMpKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZW5kRGF0YSgpCisKKyAg
ICAgICAgaWYgbm90IHNlbGYuaXNTZWxmQ2xvc2luZ1RhZyhuYW1lKSBhbmQgbm90IHNlbGZDbG9z
aW5nOgorICAgICAgICAgICAgc2VsZi5fc21hcnRQb3AobmFtZSkKKworICAgICAgICBpZiBzZWxm
LnBhcnNlT25seVRoZXNlIGFuZCBsZW4oc2VsZi50YWdTdGFjaykgPD0gMSBcCisgICAgICAgICAg
ICAgICBhbmQgKHNlbGYucGFyc2VPbmx5VGhlc2UudGV4dCBvciBub3Qgc2VsZi5wYXJzZU9ubHlU
aGVzZS5zZWFyY2hUYWcobmFtZSwgYXR0cnMpKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAg
ICAgIHRhZyA9IFRhZyhzZWxmLCBuYW1lLCBhdHRycywgc2VsZi5jdXJyZW50VGFnLCBzZWxmLnBy
ZXZpb3VzKQorICAgICAgICBpZiBzZWxmLnByZXZpb3VzOgorICAgICAgICAgICAgc2VsZi5wcmV2
aW91cy5uZXh0ID0gdGFnCisgICAgICAgIHNlbGYucHJldmlvdXMgPSB0YWcKKyAgICAgICAgc2Vs
Zi5wdXNoVGFnKHRhZykKKyAgICAgICAgaWYgc2VsZkNsb3Npbmcgb3Igc2VsZi5pc1NlbGZDbG9z
aW5nVGFnKG5hbWUpOgorICAgICAgICAgICAgc2VsZi5wb3BUYWcoKQorICAgICAgICBpZiBuYW1l
IGluIHNlbGYuUVVPVEVfVEFHUzoKKyAgICAgICAgICAgICNwcmludCAiQmVnaW5uaW5nIHF1b3Rl
ICglcykiICUgbmFtZQorICAgICAgICAgICAgc2VsZi5xdW90ZVN0YWNrLmFwcGVuZChuYW1lKQor
ICAgICAgICAgICAgc2VsZi5saXRlcmFsID0gMQorICAgICAgICByZXR1cm4gdGFnCisKKyAgICBk
ZWYgdW5rbm93bl9lbmR0YWcoc2VsZiwgbmFtZSk6CisgICAgICAgICNwcmludCAiRW5kIHRhZyAl
cyIgJSBuYW1lCisgICAgICAgIGlmIHNlbGYucXVvdGVTdGFjayBhbmQgc2VsZi5xdW90ZVN0YWNr
Wy0xXSAhPSBuYW1lOgorICAgICAgICAgICAgI1RoaXMgaXMgbm90IGEgcmVhbCBlbmQgdGFnLgor
ICAgICAgICAgICAgI3ByaW50ICI8LyVzPiBpcyBub3QgcmVhbCEiICUgbmFtZQorICAgICAgICAg
ICAgc2VsZi5oYW5kbGVfZGF0YSgnPC8lcz4nICUgbmFtZSkKKyAgICAgICAgICAgIHJldHVybgor
ICAgICAgICBzZWxmLmVuZERhdGEoKQorICAgICAgICBzZWxmLl9wb3BUb1RhZyhuYW1lKQorICAg
ICAgICBpZiBzZWxmLnF1b3RlU3RhY2sgYW5kIHNlbGYucXVvdGVTdGFja1stMV0gPT0gbmFtZToK
KyAgICAgICAgICAgIHNlbGYucXVvdGVTdGFjay5wb3AoKQorICAgICAgICAgICAgc2VsZi5saXRl
cmFsID0gKGxlbihzZWxmLnF1b3RlU3RhY2spID4gMCkKKworICAgIGRlZiBoYW5kbGVfZGF0YShz
ZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5jdXJyZW50RGF0YS5hcHBlbmQoZGF0YSkKKworICAg
IGRlZiBfdG9TdHJpbmdTdWJjbGFzcyhzZWxmLCB0ZXh0LCBzdWJjbGFzcyk6CisgICAgICAgICIi
IkFkZHMgYSBjZXJ0YWluIHBpZWNlIG9mIHRleHQgdG8gdGhlIHRyZWUgYXMgYSBOYXZpZ2FibGVT
dHJpbmcKKyAgICAgICAgc3ViY2xhc3MuIiIiCisgICAgICAgIHNlbGYuZW5kRGF0YSgpCisgICAg
ICAgIHNlbGYuaGFuZGxlX2RhdGEodGV4dCkKKyAgICAgICAgc2VsZi5lbmREYXRhKHN1YmNsYXNz
KQorCisgICAgZGVmIGhhbmRsZV9waShzZWxmLCB0ZXh0KToKKyAgICAgICAgIiIiSGFuZGxlIGEg
cHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBhcyBhIFByb2Nlc3NpbmdJbnN0cnVjdGlvbgorICAgICAg
ICBvYmplY3QsIHBvc3NpYmx5IG9uZSB3aXRoIGEgJVNPVVAtRU5DT0RJTkclIHNsb3QgaW50byB3
aGljaCBhbgorICAgICAgICBlbmNvZGluZyB3aWxsIGJlIHBsdWdnZWQgbGF0ZXIuIiIiCisgICAg
ICAgIGlmIHRleHRbOjNdID09ICJ4bWwiOgorICAgICAgICAgICAgdGV4dCA9IHUieG1sIHZlcnNp
b249JzEuMCcgZW5jb2Rpbmc9JyVTT1VQLUVOQ09ESU5HJSciCisgICAgICAgIHNlbGYuX3RvU3Ry
aW5nU3ViY2xhc3ModGV4dCwgUHJvY2Vzc2luZ0luc3RydWN0aW9uKQorCisgICAgZGVmIGhhbmRs
ZV9jb21tZW50KHNlbGYsIHRleHQpOgorICAgICAgICAiSGFuZGxlIGNvbW1lbnRzIGFzIENvbW1l
bnQgb2JqZWN0cy4iCisgICAgICAgIHNlbGYuX3RvU3RyaW5nU3ViY2xhc3ModGV4dCwgQ29tbWVu
dCkKKworICAgIGRlZiBoYW5kbGVfY2hhcnJlZihzZWxmLCByZWYpOgorICAgICAgICAiSGFuZGxl
IGNoYXJhY3RlciByZWZlcmVuY2VzIGFzIGRhdGEuIgorICAgICAgICBpZiBzZWxmLmNvbnZlcnRF
bnRpdGllczoKKyAgICAgICAgICAgIGRhdGEgPSB1bmljaHIoaW50KHJlZikpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBkYXRhID0gJyYjJXM7JyAlIHJlZgorICAgICAgICBzZWxmLmhhbmRs
ZV9kYXRhKGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2VudGl0eXJlZihzZWxmLCByZWYpOgorICAg
ICAgICAiIiJIYW5kbGUgZW50aXR5IHJlZmVyZW5jZXMgYXMgZGF0YSwgcG9zc2libHkgY29udmVy
dGluZyBrbm93bgorICAgICAgICBIVE1MIGFuZC9vciBYTUwgZW50aXR5IHJlZmVyZW5jZXMgdG8g
dGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZQorICAgICAgICBjaGFyYWN0ZXJzLiIiIgorICAgICAg
ICBkYXRhID0gTm9uZQorICAgICAgICBpZiBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXM6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHVuaWNocihuYW1lMmNvZGVwb2lu
dFtyZWZdKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBh
c3MKKworICAgICAgICBpZiBub3QgZGF0YSBhbmQgc2VsZi5jb252ZXJ0WE1MRW50aXRpZXM6Cisg
ICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuWE1MX0VOVElUSUVTX1RPX1NQRUNJQUxfQ0hBUlMu
Z2V0KHJlZikKKworICAgICAgICBpZiBub3QgZGF0YSBhbmQgc2VsZi5jb252ZXJ0SFRNTEVudGl0
aWVzIGFuZCBcCisgICAgICAgICAgICBub3Qgc2VsZi5YTUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9D
SEFSUy5nZXQocmVmKToKKyAgICAgICAgICAgICAgICAjIFRPRE86IFdlJ3ZlIGdvdCBhIHByb2Js
ZW0gaGVyZS4gV2UncmUgdG9sZCB0aGlzIGlzCisgICAgICAgICAgICAgICAgIyBhbiBlbnRpdHkg
cmVmZXJlbmNlLCBidXQgaXQncyBub3QgYW4gWE1MIGVudGl0eQorICAgICAgICAgICAgICAgICMg
cmVmZXJlbmNlIG9yIGFuIEhUTUwgZW50aXR5IHJlZmVyZW5jZS4gTm9uZXRoZWxlc3MsCisgICAg
ICAgICAgICAgICAgIyB0aGUgbG9naWNhbCB0aGluZyB0byBkbyBpcyB0byBwYXNzIGl0IHRocm91
Z2ggYXMgYW4KKyAgICAgICAgICAgICAgICAjIHVucmVjb2duaXplZCBlbnRpdHkgcmVmZXJlbmNl
LgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIEV4Y2VwdDogd2hlbiB0aGUg
aW5wdXQgaXMgIiZjYXJvbDsiIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAjIHdpbGwg
YmUgY2FsbGVkIHdpdGggaW5wdXQgImNhcm9sIi4gV2hlbiB0aGUgaW5wdXQgaXMKKyAgICAgICAg
ICAgICAgICAjICJBVCZUIiwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIGlucHV0
CisgICAgICAgICAgICAgICAgIyAiVCIuIFdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhl
ciBhIHNlbWljb2xvbgorICAgICAgICAgICAgICAgICMgd2FzIHByZXNlbnQgb3JpZ2luYWxseSwg
c28gd2UgZG9uJ3Qga25vdyB3aGV0aGVyCisgICAgICAgICAgICAgICAgIyB0aGlzIGlzIGFuIHVu
a25vd24gZW50aXR5IG9yIGp1c3QgYSBtaXNwbGFjZWQKKyAgICAgICAgICAgICAgICAjIGFtcGVy
c2FuZC4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBUaGUgbW9yZSBjb21t
b24gY2FzZSBpcyBhIG1pc3BsYWNlZCBhbXBlcnNhbmQsIHNvIEkKKyAgICAgICAgICAgICAgICAj
IGVzY2FwZSB0aGUgYW1wZXJzYW5kIGFuZCBvbWl0IHRoZSB0cmFpbGluZyBzZW1pY29sb24uCisg
ICAgICAgICAgICAgICAgZGF0YSA9ICImYW1wOyVzIiAlIHJlZgorICAgICAgICBpZiBub3QgZGF0
YToKKyAgICAgICAgICAgICMgVGhpcyBjYXNlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgYWJv
dmUsIGJlY2F1c2Ugd2UKKyAgICAgICAgICAgICMgaGF2ZW4ndCBhbHJlYWR5IGdvbmUgdGhyb3Vn
aCBhIHN1cHBvc2VkbHkgY29tcHJlaGVuc2l2ZQorICAgICAgICAgICAgIyBtYXBwaW5nIG9mIGVu
dGl0aWVzIHRvIFVuaWNvZGUgY2hhcmFjdGVycy4gV2UgbWlnaHQgbm90CisgICAgICAgICAgICAj
IGhhdmUgZ29uZSB0aHJvdWdoIGFueSBtYXBwaW5nIGF0IGFsbC4gU28gdGhlIGNoYW5jZXMgYXJl
CisgICAgICAgICAgICAjIHZlcnkgaGlnaCB0aGF0IHRoaXMgaXMgYSByZWFsIGVudGl0eSwgYW5k
IG5vdCBhCisgICAgICAgICAgICAjIG1pc3BsYWNlZCBhbXBlcnNhbmQuCisgICAgICAgICAgICBk
YXRhID0gIiYlczsiICUgcmVmCisgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEoZGF0YSkKKworICAg
IGRlZiBoYW5kbGVfZGVjbChzZWxmLCBkYXRhKToKKyAgICAgICAgIkhhbmRsZSBET0NUWVBFcyBh
bmQgdGhlIGxpa2UgYXMgRGVjbGFyYXRpb24gb2JqZWN0cy4iCisgICAgICAgIHNlbGYuX3RvU3Ry
aW5nU3ViY2xhc3MoZGF0YSwgRGVjbGFyYXRpb24pCisKKyAgICBkZWYgcGFyc2VfZGVjbGFyYXRp
b24oc2VsZiwgaSk6CisgICAgICAgICIiIlRyZWF0IGEgYm9ndXMgU0dNTCBkZWNsYXJhdGlvbiBh
cyByYXcgZGF0YS4gVHJlYXQgYSBDREFUQQorICAgICAgICBkZWNsYXJhdGlvbiBhcyBhIENEYXRh
IG9iamVjdC4iIiIKKyAgICAgICAgaiA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5yYXdkYXRhW2k6
aSs5XSA9PSAnPCFbQ0RBVEFbJzoKKyAgICAgICAgICAgICBrID0gc2VsZi5yYXdkYXRhLmZpbmQo
J11dPicsIGkpCisgICAgICAgICAgICAgaWYgayA9PSAtMToKKyAgICAgICAgICAgICAgICAgayA9
IGxlbihzZWxmLnJhd2RhdGEpCisgICAgICAgICAgICAgZGF0YSA9IHNlbGYucmF3ZGF0YVtpKzk6
a10KKyAgICAgICAgICAgICBqID0gayszCisgICAgICAgICAgICAgc2VsZi5fdG9TdHJpbmdTdWJj
bGFzcyhkYXRhLCBDRGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICBqID0gU0dNTFBhcnNlci5wYXJzZV9kZWNsYXJhdGlvbihzZWxmLCBpKQorICAg
ICAgICAgICAgZXhjZXB0IFNHTUxQYXJzZUVycm9yOgorICAgICAgICAgICAgICAgIHRvSGFuZGxl
ID0gc2VsZi5yYXdkYXRhW2k6XQorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodG9I
YW5kbGUpCisgICAgICAgICAgICAgICAgaiA9IGkgKyBsZW4odG9IYW5kbGUpCisgICAgICAgIHJl
dHVybiBqCisKK2NsYXNzIEJlYXV0aWZ1bFNvdXAoQmVhdXRpZnVsU3RvbmVTb3VwKToKKworICAg
ICIiIlRoaXMgcGFyc2VyIGtub3dzIHRoZSBmb2xsb3dpbmcgZmFjdHMgYWJvdXQgSFRNTDoKKwor
ICAgICogU29tZSB0YWdzIGhhdmUgbm8gY2xvc2luZyB0YWcgYW5kIHNob3VsZCBiZSBpbnRlcnBy
ZXRlZCBhcyBiZWluZworICAgICAgY2xvc2VkIGFzIHNvb24gYXMgdGhleSBhcmUgZW5jb3VudGVy
ZWQuCisKKyAgICAqIFRoZSB0ZXh0IGluc2lkZSBzb21lIHRhZ3MgKGllLiAnc2NyaXB0JykgbWF5
IGNvbnRhaW4gdGFncyB3aGljaAorICAgICAgYXJlIG5vdCByZWFsbHkgcGFydCBvZiB0aGUgZG9j
dW1lbnQgYW5kIHdoaWNoIHNob3VsZCBiZSBwYXJzZWQKKyAgICAgIGFzIHRleHQsIG5vdCB0YWdz
LiBJZiB5b3Ugd2FudCB0byBwYXJzZSB0aGUgdGV4dCBhcyB0YWdzLCB5b3UgY2FuCisgICAgICBh
bHdheXMgZmV0Y2ggaXQgYW5kIHBhcnNlIGl0IGV4cGxpY2l0bHkuCisKKyAgICAqIFRhZyBuZXN0
aW5nIHJ1bGVzOgorCisgICAgICBNb3N0IHRhZ3MgY2FuJ3QgYmUgbmVzdGVkIGF0IGFsbC4gRm9y
IGluc3RhbmNlLCB0aGUgb2NjdXJhbmNlIG9mCisgICAgICBhIDxwPiB0YWcgc2hvdWxkIGltcGxp
Y2l0bHkgY2xvc2UgdGhlIHByZXZpb3VzIDxwPiB0YWcuCisKKyAgICAgICA8cD5QYXJhMTxwPlBh
cmEyCisgICAgICAgIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCBpbnRvOgorICAgICAgIDxwPlBhcmEx
PC9wPjxwPlBhcmEyCisKKyAgICAgIFNvbWUgdGFncyBjYW4gYmUgbmVzdGVkIGFyYml0cmFyaWx5
LiBGb3IgaW5zdGFuY2UsIHRoZSBvY2N1cmFuY2UKKyAgICAgIG9mIGEgPGJsb2NrcXVvdGU+IHRh
ZyBzaG91bGQgX25vdF8gaW1wbGljaXRseSBjbG9zZSB0aGUgcHJldmlvdXMKKyAgICAgIDxibG9j
a3F1b3RlPiB0YWcuCisKKyAgICAgICBBbGljZSBzYWlkOiA8YmxvY2txdW90ZT5Cb2Igc2FpZDog
PGJsb2NrcXVvdGU+QmxhaAorICAgICAgICBzaG91bGQgTk9UIGJlIHRyYW5zZm9ybWVkIGludG86
CisgICAgICAgQWxpY2Ugc2FpZDogPGJsb2NrcXVvdGU+Qm9iIHNhaWQ6IDwvYmxvY2txdW90ZT48
YmxvY2txdW90ZT5CbGFoCisKKyAgICAgIFNvbWUgdGFncyBjYW4gYmUgbmVzdGVkLCBidXQgdGhl
IG5lc3RpbmcgaXMgcmVzZXQgYnkgdGhlCisgICAgICBpbnRlcnBvc2l0aW9uIG9mIG90aGVyIHRh
Z3MuIEZvciBpbnN0YW5jZSwgYSA8dHI+IHRhZyBzaG91bGQKKyAgICAgIGltcGxpY2l0bHkgY2xv
c2UgdGhlIHByZXZpb3VzIDx0cj4gdGFnIHdpdGhpbiB0aGUgc2FtZSA8dGFibGU+LAorICAgICAg
YnV0IG5vdCBjbG9zZSBhIDx0cj4gdGFnIGluIGFub3RoZXIgdGFibGUuCisKKyAgICAgICA8dGFi
bGU+PHRyPkJsYWg8dHI+QmxhaAorICAgICAgICBzaG91bGQgYmUgdHJhbnNmb3JtZWQgaW50bzoK
KyAgICAgICA8dGFibGU+PHRyPkJsYWg8L3RyPjx0cj5CbGFoCisgICAgICAgIGJ1dCwKKyAgICAg
ICA8dHI+QmxhaDx0YWJsZT48dHI+QmxhaAorICAgICAgICBzaG91bGQgTk9UIGJlIHRyYW5zZm9y
bWVkIGludG8KKyAgICAgICA8dHI+QmxhaDx0YWJsZT48L3RyPjx0cj5CbGFoCisKKyAgICBEaWZm
ZXJpbmcgYXNzdW1wdGlvbnMgYWJvdXQgdGFnIG5lc3RpbmcgcnVsZXMgYXJlIGEgbWFqb3Igc291
cmNlCisgICAgb2YgcHJvYmxlbXMgd2l0aCB0aGUgQmVhdXRpZnVsU291cCBjbGFzcy4gSWYgQmVh
dXRpZnVsU291cCBpcyBub3QKKyAgICB0cmVhdGluZyBhcyBuZXN0YWJsZSBhIHRhZyB5b3VyIHBh
Z2UgYXV0aG9yIHRyZWF0cyBhcyBuZXN0YWJsZSwKKyAgICB0cnkgSUNhbnRCZWxpZXZlSXRzQmVh
dXRpZnVsU291cCwgTWluaW1hbFNvdXAsIG9yCisgICAgQmVhdXRpZnVsU3RvbmVTb3VwIGJlZm9y
ZSB3cml0aW5nIHlvdXIgb3duIHN1YmNsYXNzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
ICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBrd2FyZ3MuaGFzX2tleSgnc21hcnRR
dW90ZXNUbycpOgorICAgICAgICAgICAga3dhcmdzWydzbWFydFF1b3Rlc1RvJ10gPSBzZWxmLkhU
TUxfRU5USVRJRVMKKyAgICAgICAga3dhcmdzWydpc0hUTUwnXSA9IFRydWUKKyAgICAgICAgQmVh
dXRpZnVsU3RvbmVTb3VwLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgIFNF
TEZfQ0xPU0lOR19UQUdTID0gYnVpbGRUYWdNYXAoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICgnYnInICwgJ2hyJywgJ2lucHV0JywgJ2ltZycsICdtZXRhJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFjZXInLCAnbGluaycsICdmcmFt
ZScsICdiYXNlJywgJ2NvbCcpKQorCisgICAgUFJFU0VSVkVfV0hJVEVTUEFDRV9UQUdTID0gc2V0
KFsncHJlJywgJ3RleHRhcmVhJ10pCisKKyAgICBRVU9URV9UQUdTID0geydzY3JpcHQnIDogTm9u
ZSwgJ3RleHRhcmVhJyA6IE5vbmV9CisKKyAgICAjQWNjb3JkaW5nIHRvIHRoZSBIVE1MIHN0YW5k
YXJkLCBlYWNoIG9mIHRoZXNlIGlubGluZSB0YWdzIGNhbgorICAgICNjb250YWluIGFub3RoZXIg
dGFnIG9mIHRoZSBzYW1lIHR5cGUuIEZ1cnRoZXJtb3JlLCBpdCdzIGNvbW1vbgorICAgICN0byBh
Y3R1YWxseSB1c2UgdGhlc2UgdGFncyB0aGlzIHdheS4KKyAgICBORVNUQUJMRV9JTkxJTkVfVEFH
UyA9ICgnc3BhbicsICdmb250JywgJ3EnLCAnb2JqZWN0JywgJ2JkbycsICdzdWInLCAnc3VwJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyJykKKworICAgICNBY2NvcmRpbmcg
dG8gdGhlIEhUTUwgc3RhbmRhcmQsIHRoZXNlIGJsb2NrIHRhZ3MgY2FuIGNvbnRhaW4KKyAgICAj
YW5vdGhlciB0YWcgb2YgdGhlIHNhbWUgdHlwZS4gRnVydGhlcm1vcmUsIGl0J3MgY29tbW9uCisg
ICAgI3RvIGFjdHVhbGx5IHVzZSB0aGVzZSB0YWdzIHRoaXMgd2F5LgorICAgIE5FU1RBQkxFX0JM
T0NLX1RBR1MgPSAoJ2Jsb2NrcXVvdGUnLCAnZGl2JywgJ2ZpZWxkc2V0JywgJ2lucycsICdkZWwn
KQorCisgICAgI0xpc3RzIGNhbiBjb250YWluIG90aGVyIGxpc3RzLCBidXQgdGhlcmUgYXJlIHJl
c3RyaWN0aW9ucy4KKyAgICBORVNUQUJMRV9MSVNUX1RBR1MgPSB7ICdvbCcgOiBbXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICd1bCcgOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdsaScgOiBbJ3VsJywgJ29sJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGwn
IDogW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGQnIDogWydkbCddLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2R0JyA6IFsnZGwnXSB9CisKKyAgICAjVGFibGVzIGNhbiBj
b250YWluIG90aGVyIHRhYmxlcywgYnV0IHRoZXJlIGFyZSByZXN0cmljdGlvbnMuCisgICAgTkVT
VEFCTEVfVEFCTEVfVEFHUyA9IHsndGFibGUnIDogW10sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAndHInIDogWyd0YWJsZScsICd0Ym9keScsICd0Zm9vdCcsICd0aGVhZCddLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3RkJyA6IFsndHInXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd0aCcgOiBbJ3RyJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlYWQn
IDogWyd0YWJsZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rib2R5JyA6IFsndGFi
bGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd0Zm9vdCcgOiBbJ3RhYmxlJ10sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICBOT05fTkVTVEFCTEVfQkxPQ0tfVEFH
UyA9ICgnYWRkcmVzcycsICdmb3JtJywgJ3AnLCAncHJlJykKKworICAgICNJZiBvbmUgb2YgdGhl
c2UgdGFncyBpcyBlbmNvdW50ZXJlZCwgYWxsIHRhZ3MgdXAgdG8gdGhlIG5leHQgdGFnIG9mCisg
ICAgI3RoaXMgdHlwZSBhcmUgcG9wcGVkLgorICAgIFJFU0VUX05FU1RJTkdfVEFHUyA9IGJ1aWxk
VGFnTWFwKE5vbmUsIE5FU1RBQkxFX0JMT0NLX1RBR1MsICdub3NjcmlwdCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9OX05FU1RBQkxFX0JMT0NLX1RBR1MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVTVEFCTEVfTElTVF9UQUdTLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FU1RBQkxFX1RBQkxFX1RBR1MpCisK
KyAgICBORVNUQUJMRV9UQUdTID0gYnVpbGRUYWdNYXAoW10sIE5FU1RBQkxFX0lOTElORV9UQUdT
LCBORVNUQUJMRV9CTE9DS19UQUdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
RVNUQUJMRV9MSVNUX1RBR1MsIE5FU1RBQkxFX1RBQkxFX1RBR1MpCisKKyAgICAjIFVzZWQgdG8g
ZGV0ZWN0IHRoZSBjaGFyc2V0IGluIGEgTUVUQSB0YWc7IHNlZSBzdGFydF9tZXRhCisgICAgQ0hB
UlNFVF9SRSA9IHJlLmNvbXBpbGUoIigoXnw7KVxzKmNoYXJzZXQ9KShbXjtdKikiLCByZS5NKQor
CisgICAgZGVmIHN0YXJ0X21ldGEoc2VsZiwgYXR0cnMpOgorICAgICAgICAiIiJCZWF1dGlmdWwg
U291cCBjYW4gZGV0ZWN0IGEgY2hhcnNldCBpbmNsdWRlZCBpbiBhIE1FVEEgdGFnLAorICAgICAg
ICB0cnkgdG8gY29udmVydCB0aGUgZG9jdW1lbnQgdG8gdGhhdCBjaGFyc2V0LCBhbmQgcmUtcGFy
c2UgdGhlCisgICAgICAgIGRvY3VtZW50IGZyb20gdGhlIGJlZ2lubmluZy4iIiIKKyAgICAgICAg
aHR0cEVxdWl2ID0gTm9uZQorICAgICAgICBjb250ZW50VHlwZSA9IE5vbmUKKyAgICAgICAgY29u
dGVudFR5cGVJbmRleCA9IE5vbmUKKyAgICAgICAgdGFnTmVlZHNFbmNvZGluZ1N1YnN0aXR1dGlv
biA9IEZhbHNlCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGF0dHJzKSk6CisgICAg
ICAgICAgICBrZXksIHZhbHVlID0gYXR0cnNbaV0KKyAgICAgICAgICAgIGtleSA9IGtleS5sb3dl
cigpCisgICAgICAgICAgICBpZiBrZXkgPT0gJ2h0dHAtZXF1aXYnOgorICAgICAgICAgICAgICAg
IGh0dHBFcXVpdiA9IHZhbHVlCisgICAgICAgICAgICBlbGlmIGtleSA9PSAnY29udGVudCc6Cisg
ICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGNvbnRl
bnRUeXBlSW5kZXggPSBpCisKKyAgICAgICAgaWYgaHR0cEVxdWl2IGFuZCBjb250ZW50VHlwZTog
IyBJdCdzIGFuIGludGVyZXN0aW5nIG1ldGEgdGFnLgorICAgICAgICAgICAgbWF0Y2ggPSBzZWxm
LkNIQVJTRVRfUkUuc2VhcmNoKGNvbnRlbnRUeXBlKQorICAgICAgICAgICAgaWYgbWF0Y2g6Cisg
ICAgICAgICAgICAgICAgaWYgKHNlbGYuZGVjbGFyZWRIVE1MRW5jb2RpbmcgaXMgbm90IE5vbmUg
b3IKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVuY29kaW5nID09IHNlbGYuZnJv
bUVuY29kaW5nKToKKyAgICAgICAgICAgICAgICAgICAgIyBBbiBIVE1MIGVuY29kaW5nIHdhcyBz
bmlmZmVkIHdoaWxlIGNvbnZlcnRpbmcKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgZG9jdW1l
bnQgdG8gVW5pY29kZSwgb3IgYW4gSFRNTCBlbmNvZGluZyB3YXMKKyAgICAgICAgICAgICAgICAg
ICAgIyBzbmlmZmVkIGR1cmluZyBhIHByZXZpb3VzIHBhc3MgdGhyb3VnaCB0aGUKKyAgICAgICAg
ICAgICAgICAgICAgIyBkb2N1bWVudCwgb3IgYW4gZW5jb2Rpbmcgd2FzIHNwZWNpZmllZAorICAg
ICAgICAgICAgICAgICAgICAjIGV4cGxpY2l0bHkgYW5kIGl0IHdvcmtlZC4gUmV3cml0ZSB0aGUg
bWV0YSB0YWcuCisgICAgICAgICAgICAgICAgICAgIGRlZiByZXdyaXRlKG1hdGNoKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKSArICIlU09VUC1FTkNPRElO
RyUiCisgICAgICAgICAgICAgICAgICAgIG5ld0F0dHIgPSBzZWxmLkNIQVJTRVRfUkUuc3ViKHJl
d3JpdGUsIGNvbnRlbnRUeXBlKQorICAgICAgICAgICAgICAgICAgICBhdHRyc1tjb250ZW50VHlw
ZUluZGV4XSA9IChhdHRyc1tjb250ZW50VHlwZUluZGV4XVswXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXR0cikKKyAgICAgICAgICAgICAgICAg
ICAgdGFnTmVlZHNFbmNvZGluZ1N1YnN0aXR1dGlvbiA9IFRydWUKKyAgICAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgb3VyIGZpcnN0IHBhc3MgdGhyb3Vn
aCB0aGUgZG9jdW1lbnQuCisgICAgICAgICAgICAgICAgICAgICMgR28gdGhyb3VnaCBpdCBhZ2Fp
biB3aXRoIHRoZSBlbmNvZGluZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgbmV3
Q2hhcnNldCA9IG1hdGNoLmdyb3VwKDMpCisgICAgICAgICAgICAgICAgICAgIGlmIG5ld0NoYXJz
ZXQgYW5kIG5ld0NoYXJzZXQgIT0gc2VsZi5vcmlnaW5hbEVuY29kaW5nOgorICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyA9IG5ld0NoYXJzZXQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQoc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BQYXJzaW5nCisgICAgICAgICAgICAg
ICAgICAgIHBhc3MKKyAgICAgICAgdGFnID0gc2VsZi51bmtub3duX3N0YXJ0dGFnKCJtZXRhIiwg
YXR0cnMpCisgICAgICAgIGlmIHRhZyBhbmQgdGFnTmVlZHNFbmNvZGluZ1N1YnN0aXR1dGlvbjoK
KyAgICAgICAgICAgIHRhZy5jb250YWluc1N1YnN0aXR1dGlvbnMgPSBUcnVlCisKK2NsYXNzIFN0
b3BQYXJzaW5nKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBJQ2FudEJlbGlldmVJdHNC
ZWF1dGlmdWxTb3VwKEJlYXV0aWZ1bFNvdXApOgorCisgICAgIiIiVGhlIEJlYXV0aWZ1bFNvdXAg
Y2xhc3MgaXMgb3JpZW50ZWQgdG93YXJkcyBza2lwcGluZyBvdmVyCisgICAgY29tbW9uIEhUTUwg
ZXJyb3JzIGxpa2UgdW5jbG9zZWQgdGFncy4gSG93ZXZlciwgc29tZXRpbWVzIGl0IG1ha2VzCisg
ICAgZXJyb3JzIG9mIGl0cyBvd24uIEZvciBpbnN0YW5jZSwgY29uc2lkZXIgdGhpcyBmcmFnbWVu
dDoKKworICAgICA8Yj5Gb288Yj5CYXI8L2I+PC9iPgorCisgICAgVGhpcyBpcyBwZXJmZWN0bHkg
dmFsaWQgKGlmIGJpemFycmUpIEhUTUwuIEhvd2V2ZXIsIHRoZQorICAgIEJlYXV0aWZ1bFNvdXAg
Y2xhc3Mgd2lsbCBpbXBsaWNpdGx5IGNsb3NlIHRoZSBmaXJzdCBiIHRhZyB3aGVuIGl0CisgICAg
ZW5jb3VudGVycyB0aGUgc2Vjb25kICdiJy4gSXQgd2lsbCB0aGluayB0aGUgYXV0aG9yIHdyb3Rl
CisgICAgIjxiPkZvbzxiPkJhciIsIGFuZCBkaWRuJ3QgY2xvc2UgdGhlIGZpcnN0ICdiJyB0YWcs
IGJlY2F1c2UKKyAgICB0aGVyZSdzIG5vIHJlYWwtd29ybGQgcmVhc29uIHRvIGJvbGQgc29tZXRo
aW5nIHRoYXQncyBhbHJlYWR5CisgICAgYm9sZC4gV2hlbiBpdCBlbmNvdW50ZXJzICc8L2I+PC9i
PicgaXQgd2lsbCBjbG9zZSB0d28gbW9yZSAnYicKKyAgICB0YWdzLCBmb3IgYSBncmFuZCB0b3Rh
bCBvZiB0aHJlZSB0YWdzIGNsb3NlZCBpbnN0ZWFkIG9mIHR3by4gVGhpcworICAgIGNhbiB0aHJv
dyBvZmYgdGhlIHJlc3Qgb2YgeW91ciBkb2N1bWVudCBzdHJ1Y3R1cmUuIFRoZSBzYW1lIGlzCisg
ICAgdHJ1ZSBvZiBhIG51bWJlciBvZiBvdGhlciB0YWdzLCBsaXN0ZWQgYmVsb3cuCisKKyAgICBJ
dCdzIG11Y2ggbW9yZSBjb21tb24gZm9yIHNvbWVvbmUgdG8gZm9yZ2V0IHRvIGNsb3NlIGEgJ2In
IHRhZworICAgIHRoYW4gdG8gYWN0dWFsbHkgdXNlIG5lc3RlZCAnYicgdGFncywgYW5kIHRoZSBC
ZWF1dGlmdWxTb3VwIGNsYXNzCisgICAgaGFuZGxlcyB0aGUgY29tbW9uIGNhc2UuIFRoaXMgY2xh
c3MgaGFuZGxlcyB0aGUgbm90LWNvLWNvbW1vbgorICAgIGNhc2U6IHdoZXJlIHlvdSBjYW4ndCBi
ZWxpZXZlIHNvbWVvbmUgd3JvdGUgd2hhdCB0aGV5IGRpZCwgYnV0CisgICAgaXQncyB2YWxpZCBI
VE1MIGFuZCBCZWF1dGlmdWxTb3VwIHNjcmV3ZWQgdXAgYnkgYXNzdW1pbmcgaXQKKyAgICB3b3Vs
ZG4ndCBiZS4iIiIKKworICAgIElfQ0FOVF9CRUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9JTkxJTkVf
VEFHUyA9IFwKKyAgICAgKCdlbScsICdiaWcnLCAnaScsICdzbWFsbCcsICd0dCcsICdhYmJyJywg
J2Fjcm9ueW0nLCAnc3Ryb25nJywKKyAgICAgICdjaXRlJywgJ2NvZGUnLCAnZGZuJywgJ2tiZCcs
ICdzYW1wJywgJ3N0cm9uZycsICd2YXInLCAnYicsCisgICAgICAnYmlnJykKKworICAgIElfQ0FO
VF9CRUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9CTE9DS19UQUdTID0gKCdub3NjcmlwdCcsKQorCisg
ICAgTkVTVEFCTEVfVEFHUyA9IGJ1aWxkVGFnTWFwKFtdLCBCZWF1dGlmdWxTb3VwLk5FU1RBQkxF
X1RBR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElfQ0FOVF9CRUxJRVZFX1RI
RVlSRV9ORVNUQUJMRV9CTE9DS19UQUdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJX0NBTlRfQkVMSUVWRV9USEVZUkVfTkVTVEFCTEVfSU5MSU5FX1RBR1MpCisKK2NsYXNzIE1p
bmltYWxTb3VwKEJlYXV0aWZ1bFNvdXApOgorICAgICIiIlRoZSBNaW5pbWFsU291cCBjbGFzcyBp
cyBmb3IgcGFyc2luZyBIVE1MIHRoYXQgY29udGFpbnMKKyAgICBwYXRob2xvZ2ljYWxseSBiYWQg
bWFya3VwLiBJdCBtYWtlcyBubyBhc3N1bXB0aW9ucyBhYm91dCB0YWcKKyAgICBuZXN0aW5nLCBi
dXQgaXQgZG9lcyBrbm93IHdoaWNoIHRhZ3MgYXJlIHNlbGYtY2xvc2luZywgdGhhdAorICAgIDxz
Y3JpcHQ+IHRhZ3MgY29udGFpbiBKYXZhc2NyaXB0IGFuZCBzaG91bGQgbm90IGJlIHBhcnNlZCwg
dGhhdAorICAgIE1FVEEgdGFncyBtYXkgY29udGFpbiBlbmNvZGluZyBpbmZvcm1hdGlvbiwgYW5k
IHNvIG9uLgorCisgICAgVGhpcyBhbHNvIG1ha2VzIGl0IGJldHRlciBmb3Igc3ViY2xhc3Npbmcg
dGhhbiBCZWF1dGlmdWxTdG9uZVNvdXAKKyAgICBvciBCZWF1dGlmdWxTb3VwLiIiIgorCisgICAg
UkVTRVRfTkVTVElOR19UQUdTID0gYnVpbGRUYWdNYXAoJ25vc2NyaXB0JykKKyAgICBORVNUQUJM
RV9UQUdTID0ge30KKworY2xhc3MgQmVhdXRpZnVsU09BUChCZWF1dGlmdWxTdG9uZVNvdXApOgor
ICAgICIiIlRoaXMgY2xhc3Mgd2lsbCBwdXNoIGEgdGFnIHdpdGggb25seSBhIHNpbmdsZSBzdHJp
bmcgY2hpbGQgaW50bworICAgIHRoZSB0YWcncyBwYXJlbnQgYXMgYW4gYXR0cmlidXRlLiBUaGUg
YXR0cmlidXRlJ3MgbmFtZSBpcyB0aGUgdGFnCisgICAgbmFtZSwgYW5kIHRoZSB2YWx1ZSBpcyB0
aGUgc3RyaW5nIGNoaWxkLiBBbiBleGFtcGxlIHNob3VsZCBnaXZlCisgICAgdGhlIGZsYXZvciBv
ZiB0aGUgY2hhbmdlOgorCisgICAgPGZvbz48YmFyPmJhejwvYmFyPjwvZm9vPgorICAgICA9Pgor
ICAgIDxmb28gYmFyPSJiYXoiPjxiYXI+YmF6PC9iYXI+PC9mb28+CisKKyAgICBZb3UgY2FuIHRo
ZW4gYWNjZXNzIGZvb1RhZ1snYmFyJ10gaW5zdGVhZCBvZiBmb29UYWcuYmFyVGFnLnN0cmluZy4K
KworICAgIFRoaXMgaXMsIG9mIGNvdXJzZSwgdXNlZnVsIGZvciBzY3JhcGluZyBzdHJ1Y3R1cmVz
IHRoYXQgdGVuZCB0bworICAgIHVzZSBzdWJlbGVtZW50cyBpbnN0ZWFkIG9mIGF0dHJpYnV0ZXMs
IHN1Y2ggYXMgU09BUCBtZXNzYWdlcy4gTm90ZQorICAgIHRoYXQgaXQgbW9kaWZpZXMgaXRzIGlu
cHV0LCBzbyBkb24ndCBwcmludCB0aGUgbW9kaWZpZWQgdmVyc2lvbgorICAgIG91dC4KKworICAg
IEknbSBub3Qgc3VyZSBob3cgbWFueSBwZW9wbGUgcmVhbGx5IHdhbnQgdG8gdXNlIHRoaXMgY2xh
c3M7IGxldCBtZQorICAgIGtub3cgaWYgeW91IGRvLiBNYWlubHkgSSBsaWtlIHRoZSBuYW1lLiIi
IgorCisgICAgZGVmIHBvcFRhZyhzZWxmKToKKyAgICAgICAgaWYgbGVuKHNlbGYudGFnU3RhY2sp
ID4gMToKKyAgICAgICAgICAgIHRhZyA9IHNlbGYudGFnU3RhY2tbLTFdCisgICAgICAgICAgICBw
YXJlbnQgPSBzZWxmLnRhZ1N0YWNrWy0yXQorICAgICAgICAgICAgcGFyZW50Ll9nZXRBdHRyTWFw
KCkKKyAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKHRhZywgVGFnKSBhbmQgbGVuKHRhZy5jb250
ZW50cykgPT0gMSBhbmQKKyAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHRhZy5jb250ZW50c1sw
XSwgTmF2aWdhYmxlU3RyaW5nKSBhbmQKKyAgICAgICAgICAgICAgICBub3QgcGFyZW50LmF0dHJN
YXAuaGFzX2tleSh0YWcubmFtZSkpOgorICAgICAgICAgICAgICAgIHBhcmVudFt0YWcubmFtZV0g
PSB0YWcuY29udGVudHNbMF0KKyAgICAgICAgQmVhdXRpZnVsU3RvbmVTb3VwLnBvcFRhZyhzZWxm
KQorCisjRW50ZXJwcmlzZSBjbGFzcyBuYW1lcyEgSXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlv
biB0aGF0IHNvbWUgcGVvcGxlCisjdGhpbmsgdGhlIG5hbWVzIG9mIHRoZSBCZWF1dGlmdWwgU291
cCBwYXJzZXIgY2xhc3NlcyBhcmUgdG9vIHNpbGx5CisjYW5kICJ1bnByb2Zlc3Npb25hbCIgZm9y
IHVzZSBpbiBlbnRlcnByaXNlIHNjcmVlbi1zY3JhcGluZy4gV2UgZmVlbAorI3lvdXIgcGFpbiEg
Rm9yIHN1Y2gtbWluZGVkIGZvbGssIHRoZSBCZWF1dGlmdWwgU291cCBDb25zb3J0aXVtIEFuZAor
I0FsbC1OaWdodCBLb3NoZXIgQmFrZXJ5IHJlY29tbWVuZHMgcmVuYW1pbmcgdGhpcyBmaWxlIHRv
CisjIlJvYnVzdFBhcnNlci5weSIgKG9yLCBpbiBjYXNlcyBvZiBleHRyZW1lIGVudGVycHJpc2lu
ZXNzLAorIyJSb2J1c3RQYXJzZXJCZWFuSW50ZXJmYWNlLmNsYXNzIikgYW5kIHVzaW5nIHRoZSBm
b2xsb3dpbmcKKyNlbnRlcnByaXNlLWZyaWVuZGx5IGNsYXNzIGFsaWFzZXM6CitjbGFzcyBSb2J1
c3RYTUxQYXJzZXIoQmVhdXRpZnVsU3RvbmVTb3VwKToKKyAgICBwYXNzCitjbGFzcyBSb2J1c3RI
VE1MUGFyc2VyKEJlYXV0aWZ1bFNvdXApOgorICAgIHBhc3MKK2NsYXNzIFJvYnVzdFdhY2tBc3NI
VE1MUGFyc2VyKElDYW50QmVsaWV2ZUl0c0JlYXV0aWZ1bFNvdXApOgorICAgIHBhc3MKK2NsYXNz
IFJvYnVzdEluc2FuZWx5V2Fja0Fzc0hUTUxQYXJzZXIoTWluaW1hbFNvdXApOgorICAgIHBhc3MK
K2NsYXNzIFNpbXBsaWZ5aW5nU09BUFBhcnNlcihCZWF1dGlmdWxTT0FQKToKKyAgICBwYXNzCisK
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
IworIyBCb251cyBsaWJyYXJ5OiBVbmljb2RlLCBEYW1taXQKKyMKKyMgVGhpcyBjbGFzcyBmb3Jj
ZXMgWE1MIGRhdGEgaW50byBhIHN0YW5kYXJkIGZvcm1hdCAodXN1YWxseSB0byBVVEYtOAorIyBv
ciBVbmljb2RlKS4gIEl0IGlzIGhlYXZpbHkgYmFzZWQgb24gY29kZSBmcm9tIE1hcmsgUGlsZ3Jp
bSdzCisjIFVuaXZlcnNhbCBGZWVkIFBhcnNlci4gSXQgZG9lcyBub3QgcmV3cml0ZSB0aGUgWE1M
IG9yIEhUTUwgdG8KKyMgcmVmbGVjdCBhIG5ldyBlbmNvZGluZzogdGhhdCBoYXBwZW5zIGluIEJl
YXV0aWZ1bFN0b25lU291cC5oYW5kbGVfcGkKKyMgKFhNTCkgYW5kIEJlYXV0aWZ1bFNvdXAuc3Rh
cnRfbWV0YSAoSFRNTCkuCisKKyMgQXV0b2RldGVjdHMgY2hhcmFjdGVyIGVuY29kaW5ncy4KKyMg
RG93bmxvYWQgZnJvbSBodHRwOi8vY2hhcmRldC5mZWVkcGFyc2VyLm9yZy8KK3RyeToKKyAgICBp
bXBvcnQgY2hhcmRldAorIyAgICBpbXBvcnQgY2hhcmRldC5jb25zdGFudHMKKyMgICAgY2hhcmRl
dC5jb25zdGFudHMuX2RlYnVnID0gMQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGNoYXJkZXQg
PSBOb25lCisKKyMgY2prY29kZWNzIGFuZCBpY29udl9jb2RlYyBtYWtlIFB5dGhvbiBrbm93IGFi
b3V0IG1vcmUgY2hhcmFjdGVyIGVuY29kaW5ncy4KKyMgQm90aCBhcmUgYXZhaWxhYmxlIGZyb20g
aHR0cDovL2Nqa3B5dGhvbi5pMThuLm9yZy8KKyMgVGhleSdyZSBidWlsdCBpbiBpZiB5b3UgdXNl
IFB5dGhvbiAyLjQuCit0cnk6CisgICAgaW1wb3J0IGNqa2NvZGVjcy5hbGlhc2VzCitleGNlcHQg
SW1wb3J0RXJyb3I6CisgICAgcGFzcwordHJ5OgorICAgIGltcG9ydCBpY29udl9jb2RlYworZXhj
ZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKKworY2xhc3MgVW5pY29kZURhbW1pdDoKKyAgICAi
IiJBIGNsYXNzIGZvciBkZXRlY3RpbmcgdGhlIGVuY29kaW5nIG9mIGEgKk1MIGRvY3VtZW50IGFu
ZAorICAgIGNvbnZlcnRpbmcgaXQgdG8gYSBVbmljb2RlIHN0cmluZy4gSWYgdGhlIHNvdXJjZSBl
bmNvZGluZyBpcworICAgIHdpbmRvd3MtMTI1MiwgY2FuIHJlcGxhY2UgTVMgc21hcnQgcXVvdGVz
IHdpdGggdGhlaXIgSFRNTCBvciBYTUwKKyAgICBlcXVpdmFsZW50cy4iIiIKKworICAgICMgVGhp
cyBkaWN0aW9uYXJ5IG1hcHMgY29tbW9ubHkgc2VlbiB2YWx1ZXMgZm9yICJjaGFyc2V0IiBpbiBI
VE1MCisgICAgIyBtZXRhIHRhZ3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgUHl0aG9uIGNvZGVjIG5h
bWVzLiBJdCBvbmx5IGNvdmVycworICAgICMgdmFsdWVzIHRoYXQgYXJlbid0IGluIFB5dGhvbidz
IGFsaWFzZXMgYW5kIGNhbid0IGJlIGRldGVybWluZWQKKyAgICAjIGJ5IHRoZSBoZXVyaXN0aWNz
IGluIGZpbmRfY29kZWMuCisgICAgQ0hBUlNFVF9BTElBU0VTID0geyAibWFjaW50b3NoIiA6ICJt
YWMtcm9tYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIngtc2ppcyIgOiAic2hpZnQtamlz
IiB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwLCBvdmVycmlkZUVuY29kaW5ncz1b
XSwKKyAgICAgICAgICAgICAgICAgc21hcnRRdW90ZXNUbz0neG1sJywgaXNIVE1MPUZhbHNlKToK
KyAgICAgICAgc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyA9IE5vbmUKKyAgICAgICAgc2VsZi5t
YXJrdXAsIGRvY3VtZW50RW5jb2RpbmcsIHNuaWZmZWRFbmNvZGluZyA9IFwKKyAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2RldGVjdEVuY29kaW5nKG1hcmt1cCwgaXNIVE1MKQorICAgICAgICBz
ZWxmLnNtYXJ0UXVvdGVzVG8gPSBzbWFydFF1b3Rlc1RvCisgICAgICAgIHNlbGYudHJpZWRFbmNv
ZGluZ3MgPSBbXQorICAgICAgICBpZiBtYXJrdXAgPT0gJycgb3IgaXNpbnN0YW5jZShtYXJrdXAs
IHVuaWNvZGUpOgorICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVuY29kaW5nID0gTm9uZQorICAg
ICAgICAgICAgc2VsZi51bmljb2RlID0gdW5pY29kZShtYXJrdXApCisgICAgICAgICAgICByZXR1
cm4KKworICAgICAgICB1ID0gTm9uZQorICAgICAgICBmb3IgcHJvcG9zZWRFbmNvZGluZyBpbiBv
dmVycmlkZUVuY29kaW5nczoKKyAgICAgICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0RnJvbShwcm9w
b3NlZEVuY29kaW5nKQorICAgICAgICAgICAgaWYgdTogYnJlYWsKKyAgICAgICAgaWYgbm90IHU6
CisgICAgICAgICAgICBmb3IgcHJvcG9zZWRFbmNvZGluZyBpbiAoZG9jdW1lbnRFbmNvZGluZywg
c25pZmZlZEVuY29kaW5nKToKKyAgICAgICAgICAgICAgICB1ID0gc2VsZi5fY29udmVydEZyb20o
cHJvcG9zZWRFbmNvZGluZykKKyAgICAgICAgICAgICAgICBpZiB1OiBicmVhaworCisgICAgICAg
ICMgSWYgbm8gbHVjayBhbmQgd2UgaGF2ZSBhdXRvLWRldGVjdGlvbiBsaWJyYXJ5LCB0cnkgdGhh
dDoKKyAgICAgICAgaWYgbm90IHUgYW5kIGNoYXJkZXQgYW5kIG5vdCBpc2luc3RhbmNlKHNlbGYu
bWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0RnJvbShjaGFy
ZGV0LmRldGVjdChzZWxmLm1hcmt1cClbJ2VuY29kaW5nJ10pCisKKyAgICAgICAgIyBBcyBhIGxh
c3QgcmVzb3J0LCB0cnkgdXRmLTggYW5kIHdpbmRvd3MtMTI1MjoKKyAgICAgICAgaWYgbm90IHU6
CisgICAgICAgICAgICBmb3IgcHJvcG9zZWRfZW5jb2RpbmcgaW4gKCJ1dGYtOCIsICJ3aW5kb3dz
LTEyNTIiKToKKyAgICAgICAgICAgICAgICB1ID0gc2VsZi5fY29udmVydEZyb20ocHJvcG9zZWRf
ZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgaWYgdTogYnJlYWsKKworICAgICAgICBzZWxmLnVu
aWNvZGUgPSB1CisgICAgICAgIGlmIG5vdCB1OiBzZWxmLm9yaWdpbmFsRW5jb2RpbmcgPSBOb25l
CisKKyAgICBkZWYgX3N1Yk1TQ2hhcihzZWxmLCBvcmlnKToKKyAgICAgICAgIiIiQ2hhbmdlcyBh
IE1TIHNtYXJ0IHF1b3RlIGNoYXJhY3RlciB0byBhbiBYTUwgb3IgSFRNTAorICAgICAgICBlbnRp
dHkuIiIiCisgICAgICAgIHN1YiA9IHNlbGYuTVNfQ0hBUlMuZ2V0KG9yaWcpCisgICAgICAgIGlm
IGlzaW5zdGFuY2Uoc3ViLCB0dXBsZSk6CisgICAgICAgICAgICBpZiBzZWxmLnNtYXJ0UXVvdGVz
VG8gPT0gJ3htbCc6CisgICAgICAgICAgICAgICAgc3ViID0gJyYjeCVzOycgJSBzdWJbMV0KKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3ViID0gJyYlczsnICUgc3ViWzBdCisg
ICAgICAgIHJldHVybiBzdWIKKworICAgIGRlZiBfY29udmVydEZyb20oc2VsZiwgcHJvcG9zZWQp
OgorICAgICAgICBwcm9wb3NlZCA9IHNlbGYuZmluZF9jb2RlYyhwcm9wb3NlZCkKKyAgICAgICAg
aWYgbm90IHByb3Bvc2VkIG9yIHByb3Bvc2VkIGluIHNlbGYudHJpZWRFbmNvZGluZ3M6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLnRyaWVkRW5jb2RpbmdzLmFwcGVuZChw
cm9wb3NlZCkKKyAgICAgICAgbWFya3VwID0gc2VsZi5tYXJrdXAKKworICAgICAgICAjIENvbnZl
cnQgc21hcnQgcXVvdGVzIHRvIEhUTUwgaWYgY29taW5nIGZyb20gYW4gZW5jb2RpbmcKKyAgICAg
ICAgIyB0aGF0IG1pZ2h0IGhhdmUgdGhlbS4KKyAgICAgICAgaWYgc2VsZi5zbWFydFF1b3Rlc1Rv
IGFuZCBwcm9wb3NlZC5sb3dlcigpIGluKCJ3aW5kb3dzLTEyNTIiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzby04ODU5LTEiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzby04
ODU5LTIiKToKKyAgICAgICAgICAgIG1hcmt1cCA9IHJlLmNvbXBpbGUoIihbXHg4MC1ceDlmXSki
KS5zdWIgXAorICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSh4KTogc2VsZi5fc3ViTVNDaGFy
KHguZ3JvdXAoMSkpLAorICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cCkKKworICAgICAgICB0
cnk6CisgICAgICAgICAgICAjIHByaW50ICJUcnlpbmcgdG8gY29udmVydCBkb2N1bWVudCB0byAl
cyIgJSBwcm9wb3NlZAorICAgICAgICAgICAgdSA9IHNlbGYuX3RvVW5pY29kZShtYXJrdXAsIHBy
b3Bvc2VkKQorICAgICAgICAgICAgc2VsZi5tYXJrdXAgPSB1CisgICAgICAgICAgICBzZWxmLm9y
aWdpbmFsRW5jb2RpbmcgPSBwcm9wb3NlZAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgor
ICAgICAgICAgICAgIyBwcmludCAiVGhhdCBkaWRuJ3Qgd29yayEiCisgICAgICAgICAgICAjIHBy
aW50IGUKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICNwcmludCAiQ29ycmVjdCBl
bmNvZGluZzogJXMiICUgcHJvcG9zZWQKKyAgICAgICAgcmV0dXJuIHNlbGYubWFya3VwCisKKyAg
ICBkZWYgX3RvVW5pY29kZShzZWxmLCBkYXRhLCBlbmNvZGluZyk6CisgICAgICAgICcnJ0dpdmVu
IGEgc3RyaW5nIGFuZCBpdHMgZW5jb2RpbmcsIGRlY29kZXMgdGhlIHN0cmluZyBpbnRvIFVuaWNv
ZGUuCisgICAgICAgICVlbmNvZGluZyBpcyBhIHN0cmluZyByZWNvZ25pemVkIGJ5IGVuY29kaW5n
cy5hbGlhc2VzJycnCisKKyAgICAgICAgIyBzdHJpcCBCeXRlIE9yZGVyIE1hcmsgKGlmIHByZXNl
bnQpCisgICAgICAgIGlmIChsZW4oZGF0YSkgPj0gNCkgYW5kIChkYXRhWzoyXSA9PSAnXHhmZVx4
ZmYnKSBcCisgICAgICAgICAgICAgICBhbmQgKGRhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAg
ICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0xNmJlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFb
MjpdCisgICAgICAgIGVsaWYgKGxlbihkYXRhKSA+PSA0KSBhbmQgKGRhdGFbOjJdID09ICdceGZm
XHhmZScpIFwKKyAgICAgICAgICAgICAgICAgYW5kIChkYXRhWzI6NF0gIT0gJ1x4MDBceDAwJyk6
CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMTZsZScKKyAgICAgICAgICAgIGRhdGEgPSBk
YXRhWzI6XQorICAgICAgICBlbGlmIGRhdGFbOjNdID09ICdceGVmXHhiYlx4YmYnOgorICAgICAg
ICAgICAgZW5jb2RpbmcgPSAndXRmLTgnCisgICAgICAgICAgICBkYXRhID0gZGF0YVszOl0KKyAg
ICAgICAgZWxpZiBkYXRhWzo0XSA9PSAnXHgwMFx4MDBceGZlXHhmZic6CisgICAgICAgICAgICBl
bmNvZGluZyA9ICd1dGYtMzJiZScKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzQ6XQorICAgICAg
ICBlbGlmIGRhdGFbOjRdID09ICdceGZmXHhmZVx4MDBceDAwJzoKKyAgICAgICAgICAgIGVuY29k
aW5nID0gJ3V0Zi0zMmxlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFbNDpdCisgICAgICAgIG5l
d2RhdGEgPSB1bmljb2RlKGRhdGEsIGVuY29kaW5nKQorICAgICAgICByZXR1cm4gbmV3ZGF0YQor
CisgICAgZGVmIF9kZXRlY3RFbmNvZGluZyhzZWxmLCB4bWxfZGF0YSwgaXNIVE1MPUZhbHNlKToK
KyAgICAgICAgIiIiR2l2ZW4gYSBkb2N1bWVudCwgdHJpZXMgdG8gZGV0ZWN0IGl0cyBYTUwgZW5j
b2RpbmcuIiIiCisgICAgICAgIHhtbF9lbmNvZGluZyA9IHNuaWZmZWRfeG1sX2VuY29kaW5nID0g
Tm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB4bWxfZGF0YVs6NF0gPT0gJ1x4NGNc
eDZmXHhhN1x4OTQnOgorICAgICAgICAgICAgICAgICMgRUJDRElDCisgICAgICAgICAgICAgICAg
eG1sX2RhdGEgPSBzZWxmLl9lYmNkaWNfdG9fYXNjaWkoeG1sX2RhdGEpCisgICAgICAgICAgICBl
bGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgwMFx4M2NceDAwXHgzZic6CisgICAgICAgICAgICAgICAg
IyBVVEYtMTZCRQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0x
NmJlJworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0x
NmJlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIChsZW4oeG1sX2RhdGEpID49
IDQpIGFuZCAoeG1sX2RhdGFbOjJdID09ICdceGZlXHhmZicpIFwKKyAgICAgICAgICAgICAgICAg
ICAgIGFuZCAoeG1sX2RhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAgICAgICAgICAgICAgICAj
IFVURi0xNkJFIHdpdGggQk9NCisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2Rpbmcg
PSAndXRmLTE2YmUnCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRh
WzI6XSwgJ3V0Zi0xNmJlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIHhtbF9k
YXRhWzo0XSA9PSAnXHgzY1x4MDBceDNmXHgwMCc6CisgICAgICAgICAgICAgICAgIyBVVEYtMTZM
RQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0xNmxlJworICAg
ICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0xNmxlJykuZW5j
b2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIChsZW4oeG1sX2RhdGEpID49IDQpIGFuZCAo
eG1sX2RhdGFbOjJdID09ICdceGZmXHhmZScpIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAo
eG1sX2RhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAgICAgICAgICAgICAgICAjIFVURi0xNkxF
IHdpdGggQk9NCisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2
bGUnCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhWzI6XSwgJ3V0
Zi0xNmxlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9
PSAnXHgwMFx4MDBceDAwXHgzYyc6CisgICAgICAgICAgICAgICAgIyBVVEYtMzJCRQorICAgICAg
ICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0zMmJlJworICAgICAgICAgICAg
ICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YSwgJ3V0Zi0zMmJlJykuZW5jb2RlKCd1dGYt
OCcpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9PSAnXHgzY1x4MDBceDAwXHgwMCc6
CisgICAgICAgICAgICAgICAgIyBVVEYtMzJMRQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1s
X2VuY29kaW5nID0gJ3V0Zi0zMmxlJworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29k
ZSh4bWxfZGF0YSwgJ3V0Zi0zMmxlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlm
IHhtbF9kYXRhWzo0XSA9PSAnXHgwMFx4MDBceGZlXHhmZic6CisgICAgICAgICAgICAgICAgIyBV
VEYtMzJCRSB3aXRoIEJPTQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0g
J3V0Zi0zMmJlJworICAgICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YVs0
Ol0sICd1dGYtMzJiZScpLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgZWxpZiB4bWxfZGF0
YVs6NF0gPT0gJ1x4ZmZceGZlXHgwMFx4MDAnOgorICAgICAgICAgICAgICAgICMgVVRGLTMyTEUg
d2l0aCBCT00KKyAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICd1dGYtMzJs
ZScKKyAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGFbNDpdLCAndXRm
LTMybGUnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgeG1sX2RhdGFbOjNdID09
ICdceGVmXHhiYlx4YmYnOgorICAgICAgICAgICAgICAgICMgVVRGLTggd2l0aCBCT00KKyAgICAg
ICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICd1dGYtOCcKKyAgICAgICAgICAgICAg
ICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGFbMzpdLCAndXRmLTgnKS5lbmNvZGUoJ3V0Zi04
JykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2Rp
bmcgPSAnYXNjaWknCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAg
ICAgICAgICB4bWxfZW5jb2RpbmdfbWF0Y2ggPSBOb25lCisgICAgICAgIHhtbF9lbmNvZGluZ19t
YXRjaCA9IHJlLmNvbXBpbGUoCisgICAgICAgICAgICAnXjxcPy4qZW5jb2Rpbmc9W1wnIl0oLio/
KVtcJyJdLipcPz4nKS5tYXRjaCh4bWxfZGF0YSkKKyAgICAgICAgaWYgbm90IHhtbF9lbmNvZGlu
Z19tYXRjaCBhbmQgaXNIVE1MOgorICAgICAgICAgICAgcmVnZXhwID0gcmUuY29tcGlsZSgnPFxz
Km1ldGFbXj5dK2NoYXJzZXQ9KFtePl0qPylbO1wnIj5dJywgcmUuSSkKKyAgICAgICAgICAgIHht
bF9lbmNvZGluZ19tYXRjaCA9IHJlZ2V4cC5zZWFyY2goeG1sX2RhdGEpCisgICAgICAgIGlmIHht
bF9lbmNvZGluZ19tYXRjaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHhtbF9lbmNvZGluZyA9
IHhtbF9lbmNvZGluZ19tYXRjaC5ncm91cHMoKVswXS5sb3dlcigpCisgICAgICAgICAgICBpZiBp
c0hUTUw6CisgICAgICAgICAgICAgICAgc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyA9IHhtbF9l
bmNvZGluZworICAgICAgICAgICAgaWYgc25pZmZlZF94bWxfZW5jb2RpbmcgYW5kIFwKKyAgICAg
ICAgICAgICAgICh4bWxfZW5jb2RpbmcgaW4gKCdpc28tMTA2NDYtdWNzLTInLCAndWNzLTInLCAn
Y3N1bmljb2RlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc28tMTA2NDYt
dWNzLTQnLCAndWNzLTQnLCAnY3N1Y3M0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd1dGYtMTYnLCAndXRmLTMyJywgJ3V0Zl8xNicsICd1dGZfMzInLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3V0ZjE2JywgJ3UxNicpKToKKyAgICAgICAgICAgICAgICB4
bWxfZW5jb2RpbmcgPSBzbmlmZmVkX3htbF9lbmNvZGluZworICAgICAgICByZXR1cm4geG1sX2Rh
dGEsIHhtbF9lbmNvZGluZywgc25pZmZlZF94bWxfZW5jb2RpbmcKKworCisgICAgZGVmIGZpbmRf
Y29kZWMoc2VsZiwgY2hhcnNldCk6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2RlYyhzZWxmLkNI
QVJTRVRfQUxJQVNFUy5nZXQoY2hhcnNldCwgY2hhcnNldCkpIFwKKyAgICAgICAgICAgICAgIG9y
IChjaGFyc2V0IGFuZCBzZWxmLl9jb2RlYyhjaGFyc2V0LnJlcGxhY2UoIi0iLCAiIikpKSBcCisg
ICAgICAgICAgICAgICBvciAoY2hhcnNldCBhbmQgc2VsZi5fY29kZWMoY2hhcnNldC5yZXBsYWNl
KCItIiwgIl8iKSkpIFwKKyAgICAgICAgICAgICAgIG9yIGNoYXJzZXQKKworICAgIGRlZiBfY29k
ZWMoc2VsZiwgY2hhcnNldCk6CisgICAgICAgIGlmIG5vdCBjaGFyc2V0OiByZXR1cm4gY2hhcnNl
dAorICAgICAgICBjb2RlYyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29kZWNz
Lmxvb2t1cChjaGFyc2V0KQorICAgICAgICAgICAgY29kZWMgPSBjaGFyc2V0CisgICAgICAgIGV4
Y2VwdCAoTG9va3VwRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAg
ICByZXR1cm4gY29kZWMKKworICAgIEVCQ0RJQ19UT19BU0NJSV9NQVAgPSBOb25lCisgICAgZGVm
IF9lYmNkaWNfdG9fYXNjaWkoc2VsZiwgcyk6CisgICAgICAgIGMgPSBzZWxmLl9fY2xhc3NfXwor
ICAgICAgICBpZiBub3QgYy5FQkNESUNfVE9fQVNDSUlfTUFQOgorICAgICAgICAgICAgZW1hcCA9
ICgwLDEsMiwzLDE1Niw5LDEzNCwxMjcsMTUxLDE0MSwxNDIsMTEsMTIsMTMsMTQsMTUsCisgICAg
ICAgICAgICAgICAgICAgIDE2LDE3LDE4LDE5LDE1NywxMzMsOCwxMzUsMjQsMjUsMTQ2LDE0Mywy
OCwyOSwzMCwzMSwKKyAgICAgICAgICAgICAgICAgICAgMTI4LDEyOSwxMzAsMTMxLDEzMiwxMCwy
MywyNywxMzYsMTM3LDEzOCwxMzksMTQwLDUsNiw3LAorICAgICAgICAgICAgICAgICAgICAxNDQs
MTQ1LDIyLDE0NywxNDgsMTQ5LDE1MCw0LDE1MiwxNTMsMTU0LDE1NSwyMCwyMSwxNTgsMjYsCisg
ICAgICAgICAgICAgICAgICAgIDMyLDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4
LDkxLDQ2LDYwLDQwLDQzLDMzLAorICAgICAgICAgICAgICAgICAgICAzOCwxNjksMTcwLDE3MSwx
NzIsMTczLDE3NCwxNzUsMTc2LDE3Nyw5MywzNiw0Miw0MSw1OSw5NCwKKyAgICAgICAgICAgICAg
ICAgICAgNDUsNDcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxMjQsNDQsMzcsOTUs
NjIsNjMsCisgICAgICAgICAgICAgICAgICAgIDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5Miwx
OTMsMTk0LDk2LDU4LDM1LDY0LDM5LDYxLDM0LAorICAgICAgICAgICAgICAgICAgICAxOTUsOTcs
OTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTk2LDE5NywxOTgsMTk5LDIwMCwKKyAgICAg
ICAgICAgICAgICAgICAgMjAxLDIwMiwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDEx
NCwyMDMsMjA0LDIwNSwKKyAgICAgICAgICAgICAgICAgICAgMjA2LDIwNywyMDgsMjA5LDEyNiwx
MTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDIxMCwKKyAgICAgICAgICAgICAgICAgICAg
MjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwK
KyAgICAgICAgICAgICAgICAgICAgMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDEyMyw2NSw2
Niw2Nyw2OCw2OSw3MCw3MSw3MiwKKyAgICAgICAgICAgICAgICAgICAgNzMsMjMyLDIzMywyMzQs
MjM1LDIzNiwyMzcsMTI1LDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLAorICAgICAgICAgICAgICAg
ICAgICA4MiwyMzgsMjM5LDI0MCwyNDEsMjQyLDI0Myw5MiwxNTksODMsODQsODUsODYsODcsODgs
ODksCisgICAgICAgICAgICAgICAgICAgIDkwLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDQ4LDQ5
LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LAorICAgICAgICAgICAgICAgICAgICAyNTAsMjUxLDI1
MiwyNTMsMjU0LDI1NSkKKyAgICAgICAgICAgIGltcG9ydCBzdHJpbmcKKyAgICAgICAgICAgIGMu
RUJDRElDX1RPX0FTQ0lJX01BUCA9IHN0cmluZy5tYWtldHJhbnMoIFwKKyAgICAgICAgICAgICcn
LmpvaW4obWFwKGNociwgcmFuZ2UoMjU2KSkpLCAnJy5qb2luKG1hcChjaHIsIGVtYXApKSkKKyAg
ICAgICAgcmV0dXJuIHMudHJhbnNsYXRlKGMuRUJDRElDX1RPX0FTQ0lJX01BUCkKKworICAgIE1T
X0NIQVJTID0geyAnXHg4MCcgOiAoJ2V1cm8nLCAnMjBBQycpLAorICAgICAgICAgICAgICAgICAn
XHg4MScgOiAnICcsCisgICAgICAgICAgICAgICAgICdceDgyJyA6ICgnc2JxdW8nLCAnMjAxQScp
LAorICAgICAgICAgICAgICAgICAnXHg4MycgOiAoJ2Zub2YnLCAnMTkyJyksCisgICAgICAgICAg
ICAgICAgICdceDg0JyA6ICgnYmRxdW8nLCAnMjAxRScpLAorICAgICAgICAgICAgICAgICAnXHg4
NScgOiAoJ2hlbGxpcCcsICcyMDI2JyksCisgICAgICAgICAgICAgICAgICdceDg2JyA6ICgnZGFn
Z2VyJywgJzIwMjAnKSwKKyAgICAgICAgICAgICAgICAgJ1x4ODcnIDogKCdEYWdnZXInLCAnMjAy
MScpLAorICAgICAgICAgICAgICAgICAnXHg4OCcgOiAoJ2NpcmMnLCAnMkM2JyksCisgICAgICAg
ICAgICAgICAgICdceDg5JyA6ICgncGVybWlsJywgJzIwMzAnKSwKKyAgICAgICAgICAgICAgICAg
J1x4OEEnIDogKCdTY2Fyb24nLCAnMTYwJyksCisgICAgICAgICAgICAgICAgICdceDhCJyA6ICgn
bHNhcXVvJywgJzIwMzknKSwKKyAgICAgICAgICAgICAgICAgJ1x4OEMnIDogKCdPRWxpZycsICcx
NTInKSwKKyAgICAgICAgICAgICAgICAgJ1x4OEQnIDogJz8nLAorICAgICAgICAgICAgICAgICAn
XHg4RScgOiAoJyN4MTdEJywgJzE3RCcpLAorICAgICAgICAgICAgICAgICAnXHg4RicgOiAnPycs
CisgICAgICAgICAgICAgICAgICdceDkwJyA6ICc/JywKKyAgICAgICAgICAgICAgICAgJ1x4OTEn
IDogKCdsc3F1bycsICcyMDE4JyksCisgICAgICAgICAgICAgICAgICdceDkyJyA6ICgncnNxdW8n
LCAnMjAxOScpLAorICAgICAgICAgICAgICAgICAnXHg5MycgOiAoJ2xkcXVvJywgJzIwMUMnKSwK
KyAgICAgICAgICAgICAgICAgJ1x4OTQnIDogKCdyZHF1bycsICcyMDFEJyksCisgICAgICAgICAg
ICAgICAgICdceDk1JyA6ICgnYnVsbCcsICcyMDIyJyksCisgICAgICAgICAgICAgICAgICdceDk2
JyA6ICgnbmRhc2gnLCAnMjAxMycpLAorICAgICAgICAgICAgICAgICAnXHg5NycgOiAoJ21kYXNo
JywgJzIwMTQnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OTgnIDogKCd0aWxkZScsICcyREMnKSwK
KyAgICAgICAgICAgICAgICAgJ1x4OTknIDogKCd0cmFkZScsICcyMTIyJyksCisgICAgICAgICAg
ICAgICAgICdceDlhJyA6ICgnc2Nhcm9uJywgJzE2MScpLAorICAgICAgICAgICAgICAgICAnXHg5
YicgOiAoJ3JzYXF1bycsICcyMDNBJyksCisgICAgICAgICAgICAgICAgICdceDljJyA6ICgnb2Vs
aWcnLCAnMTUzJyksCisgICAgICAgICAgICAgICAgICdceDlkJyA6ICc/JywKKyAgICAgICAgICAg
ICAgICAgJ1x4OWUnIDogKCcjeDE3RScsICcxN0UnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OWYn
IDogKCdZdW1sJywgJycpLH0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjQnkgZGVmYXVsdCwgYWN0
IGFzIGFuIEhUTUwgcHJldHR5LXByaW50ZXIuCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgor
ICAgIGltcG9ydCBzeXMKKyAgICBzb3VwID0gQmVhdXRpZnVsU291cChzeXMuc3RkaW4pCisgICAg
cHJpbnQgc291cC5wcmV0dGlmeSgpCmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9y
dC9ld3MtYXBwL2V3cy90aGlyZHBhcnR5L19faW5pdF9fLnB5IGIvVG9vbHMvQnVpbGRTbGF2ZVN1
cHBvcnQvZXdzLWFwcC9ld3MvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJiMmQKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwMTQwY2QzMWM1ZC4uMWZhNWRmMjUwYzYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxOC0xMS0yNCAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgW2V3cy1hcHBdIEFkZCBzdXBwb3J0IHRvIGdldCBsaXN0IG9mIEJ1Z3pp
bGxhIHBhdGNoZXMgbmVlZGluZyByZXZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5MTk0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvY29tbW9u
L2J1Z3ppbGxhLnB5OgorICAgICAgICAoQnVnemlsbGEuZ2V0X2xpc3Rfb2ZfcGF0Y2hlc19uZWVk
aW5nX3Jldmlld3MpOiBHZXQgbGlzdCBvZiBwYXRjaGVzIG5lZWRpbmcgcmV2aWV3LgorICAgICAg
ICAoQnVnemlsbGFCZWF1dGlmdWxTb3VwLmZldGNoX2F0dGFjaG1lbnRfaWRzX2Zyb21fcmV2aWV3
X3F1ZXVlKTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1
Z3ppbGxhL2J1Z3ppbGxhLnB5CisgICAgICAgIChCdWd6aWxsYUJlYXV0aWZ1bFNvdXAuX2xvYWRf
cXVlcnkpOiBEaXR0by4KKyAgICAgICAgKEJ1Z3ppbGxhQmVhdXRpZnVsU291cC5fcGFyc2VfYXR0
YWNobWVudF9pZHNfcmVxdWVzdF9xdWVyeSk6IERpdHRvLgorICAgICAgICAqIEJ1aWxkU2xhdmVT
dXBwb3J0L2V3cy1hcHAvZXdzL3RoaXJkcGFydHkvQmVhdXRpZnVsU291cC5weTogQ29waWVkIGZy
b20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L0JlYXV0aWZ1bFNvdXAucHkKKyAg
ICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90aGlyZHBhcnR5L19faW5pdF9f
LnB5OiBBZGRlZC4KKwogMjAxOC0xMS0yNCAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW2V3cy1hcHBdIEFkZCBzdXBwb3J0IHRvIGRvd25sb2FkIFBhdGNo
IGZyb20gQnVnemlsbGEKLS0gCjIuMTcuMiAoQXBwbGUgR2l0LTExMykKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355706</attachid>
            <date>2018-11-26 20:01:08 -0800</date>
            <delta_ts>2018-11-28 11:42:41 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>0001-ews-app-Add-support-to-get-list-of-Bugzilla-patches-.patch</filename>
            <type>text/plain</type>
            <size>5351</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">RnJvbSA3ZDg2YzJmZTkwZWQ1MDY0MDNhMjZmN2I4ZWEyMjYwZGViODIxMzE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBYWthc2ggSmFpbiA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgpE
YXRlOiBNb24sIDI2IE5vdiAyMDE4IDE5OjU4OjQ2IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gW2V3
cy1hcHBdIEFkZCBzdXBwb3J0IHRvIGdldCBsaXN0IG9mIEJ1Z3ppbGxhIHBhdGNoZXMgbmVlZGlu
ZwogcmV2aWV3IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE5NDIK
ClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKKiBCdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBw
L2V3cy9jb21tb24vYnVnemlsbGEucHk6CihCdWd6aWxsYS5nZXRfbGlzdF9vZl9wYXRjaGVzX25l
ZWRpbmdfcmV2aWV3cyk6IEdldCBsaXN0IG9mIHBhdGNoZXMgbmVlZGluZyByZXZpZXcuCihCdWd6
aWxsYUJlYXV0aWZ1bFNvdXAuZmV0Y2hfYXR0YWNobWVudF9pZHNfZnJvbV9yZXZpZXdfcXVldWUp
OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVnemlsbGEv
YnVnemlsbGEucHkKKEJ1Z3ppbGxhQmVhdXRpZnVsU291cC5fbG9hZF9xdWVyeSk6IERpdHRvLgoo
QnVnemlsbGFCZWF1dGlmdWxTb3VwLl9wYXJzZV9hdHRhY2htZW50X2lkc19yZXF1ZXN0X3F1ZXJ5
KTogRGl0dG8uCi0tLQogLi4uL2V3cy1hcHAvZXdzL2NvbW1vbi9idWd6aWxsYS5weSAgICAgICAg
ICAgIHwgNzAgKysrKysrKysrKysrKysrKysrKwogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgMTMgKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA4MyBpbnNlcnRp
b25zKCspCgpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3Mv
Y29tbW9uL2J1Z3ppbGxhLnB5IGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3Mv
Y29tbW9uL2J1Z3ppbGxhLnB5CmluZGV4IDQ5NWYyYTk2MTdjLi41NzE5YWRhMzk4MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvY29tbW9uL2J1Z3ppbGxh
LnB5CisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL2NvbW1vbi9idWd6
aWxsYS5weQpAQCAtMjMsOCArMjMsMTMgQEAKIGltcG9ydCBiYXNlNjQKIGltcG9ydCBsb2dnaW5n
CiBpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNvY2tldAorCitmcm9tIGRhdGV0aW1lIGlt
cG9ydCBkYXRldGltZSwgdGltZWRlbHRhCiAKIGZyb20gZXdzLm1vZGVscy5wYXRjaCBpbXBvcnQg
UGF0Y2gKK2Zyb20gZXdzLnRoaXJkcGFydHkuQmVhdXRpZnVsU291cCBpbXBvcnQgQmVhdXRpZnVs
U291cCwgU291cFN0cmFpbmVyCiBpbXBvcnQgZXdzLmNvbW1vbi51dGlsIGFzIHV0aWwKIGltcG9y
dCBld3MuY29uZmlnIGFzIGNvbmZpZwogCkBAIC02OSwzICs3NCw2OCBAQCBjbGFzcyBCdWd6aWxs
YSgpOgogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY29uZmlnLlBBVENIX0ZPTERFUik6
CiAgICAgICAgICAgICBvcy5ta2Rpcihjb25maWcuUEFUQ0hfRk9MREVSKQogICAgICAgICByZXR1
cm4gY29uZmlnLlBBVENIX0ZPTERFUiArICd7fS5wYXRjaCcuZm9ybWF0KHBhdGNoX2lkKQorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9saXN0X29mX3BhdGNoZXNfbmVlZGluZ19yZXZp
ZXdzKGNscyk6CisgICAgICAgIGN1cnJlbnRfdGltZSA9IGRhdGV0aW1lLnRvZGF5KCkKKyAgICAg
ICAgaWRzX25lZWRpbmdfcmV2aWV3ID0gc2V0KEJ1Z3ppbGxhQmVhdXRpZnVsU291cCgpLmZldGNo
X2F0dGFjaG1lbnRfaWRzX2Zyb21fcmV2aWV3X3F1ZXVlKGN1cnJlbnRfdGltZSAtIHRpbWVkZWx0
YSg3KSkpCisgICAgICAgICNUT0RPOiBhZGQgc2VjdXJpdHkgYnVncyBzdXBwb3J0IGhlZXJlLgor
ICAgICAgICByZXR1cm4gaWRzX25lZWRpbmdfcmV2aWV3CisKKworY2xhc3MgQnVnemlsbGFCZWF1
dGlmdWxTb3VwKCk6CisgICAgIyBGSVhNRTogRGVwcmVjYXRlIHRoaXMgY2xhc3Mgd2hlbiBodHRw
czovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA4NTMxIGlzIGZpeGVk
LgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fYnJvd3NlciA9IE5vbmUK
KworICAgIGRlZiBfZ2V0X2Jyb3dzZXIoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9icm93
c2VyOgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDYwMCkKKyAgICAgICAg
ICAgIGZyb20gbWVjaGFuaXplIGltcG9ydCBCcm93c2VyCisgICAgICAgICAgICBzZWxmLl9icm93
c2VyID0gQnJvd3NlcigpCisgICAgICAgICAgICBzZWxmLl9icm93c2VyLnNldF9oYW5kbGVfcm9i
b3RzKEZhbHNlKQorICAgICAgICByZXR1cm4gc2VsZi5fYnJvd3NlcgorCisgICAgZGVmIF9zZXRf
YnJvd3NlcihzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX2Jyb3dzZXIgPSB2YWx1ZQorCisg
ICAgYnJvd3NlciA9IHByb3BlcnR5KF9nZXRfYnJvd3NlciwgX3NldF9icm93c2VyKQorCisgICAg
ZGVmIGZldGNoX2F0dGFjaG1lbnRfaWRzX2Zyb21fcmV2aWV3X3F1ZXVlKHNlbGYsIHNpbmNlPU5v
bmUsIG9ubHlfc2VjdXJpdHlfYnVncz1GYWxzZSk6CisgICAgICAgIHJldmlld19xdWV1ZV91cmwg
PSAncmVxdWVzdC5jZ2k/YWN0aW9uPXF1ZXVlJnR5cGU9cmV2aWV3Jmdyb3VwPXR5cGUnCisgICAg
ICAgIGlmIG9ubHlfc2VjdXJpdHlfYnVnczoKKyAgICAgICAgICAgIHJldmlld19xdWV1ZV91cmwg
Kz0gJyZwcm9kdWN0PVNlY3VyaXR5JworICAgICAgICByZXR1cm4gc2VsZi5fcGFyc2VfYXR0YWNo
bWVudF9pZHNfcmVxdWVzdF9xdWVyeShzZWxmLl9sb2FkX3F1ZXJ5KHJldmlld19xdWV1ZV91cmwp
LCBzaW5jZSkKKworICAgIGRlZiBfbG9hZF9xdWVyeShzZWxmLCBxdWVyeSk6CisgICAgICAgICMg
VE9ETzogY2hlY2sgaWYgd2UgbmVlZCB0byBhdXRoZW50aWNhdGUKKyAgICAgICAgZnVsbF91cmwg
PSAne317fScuZm9ybWF0KGNvbmZpZy5CVUdfU0VSVkVSX1VSTCwgcXVlcnkpCisgICAgICAgIF9s
b2cuaW5mbygnR2V0dGluZyBsaXN0IG9mIHBhdGNoZXMgbmVlZGluZyByZXZpZXcsIFVSTDoge30n
LmZvcm1hdChmdWxsX3VybCkpCisgICAgICAgIHJldHVybiBzZWxmLmJyb3dzZXIub3BlbihmdWxs
X3VybCkKKworICAgIGRlZiBfcGFyc2VfYXR0YWNobWVudF9pZHNfcmVxdWVzdF9xdWVyeShzZWxm
LCBwYWdlLCBzaW5jZT1Ob25lKToKKyAgICAgICAgIyBGb3JtYXRzCisgICAgICAgIGRpZ2l0cyA9
IHJlLmNvbXBpbGUoIlxkKyIpCisgICAgICAgIGF0dGFjaG1lbnRfaHJlZiA9IHJlLmNvbXBpbGUo
ImF0dGFjaG1lbnQuY2dpXD9pZD1cZCsmYWN0aW9uPXJldmlldyIpCisgICAgICAgICMgaWYgbm8g
ZGF0ZSBpcyBnaXZlbiwgcmV0dXJuIGFsbCBpZHMKKyAgICAgICAgaWYgbm90IHNpbmNlOgorICAg
ICAgICAgICAgYXR0YWNobWVudF9saW5rcyA9IFNvdXBTdHJhaW5lcigiYSIsIGhyZWY9YXR0YWNo
bWVudF9ocmVmKQorICAgICAgICAgICAgcmV0dXJuIFtpbnQoZGlnaXRzLnNlYXJjaCh0YWdbImhy
ZWYiXSkuZ3JvdXAoMCkpCisgICAgICAgICAgICAgICAgZm9yIHRhZyBpbiBCZWF1dGlmdWxTb3Vw
KHBhZ2UsIHBhcnNlT25seVRoZXNlPWF0dGFjaG1lbnRfbGlua3MpXQorCisgICAgICAgICMgUGFy
c2UgdGhlIG1haW4gdGFibGUgb25seQorICAgICAgICBkYXRlX2Zvcm1hdCA9IHJlLmNvbXBpbGUo
IlxkezR9LVxkezJ9LVxkezJ9IFxkezJ9OlxkezJ9IikKKyAgICAgICAgbXRhYiA9IFNvdXBTdHJh
aW5lcigidGFibGUiLCB7ImNsYXNzIjogInJlcXVlc3RzIn0pCisgICAgICAgIHNvdXAgPSBCZWF1
dGlmdWxTb3VwKHBhZ2UsIHBhcnNlT25seVRoZXNlPW10YWIpCisgICAgICAgIHBhdGNoX2lkcyA9
IFtdCisKKyAgICAgICAgZm9yIHJvdyBpbiBzb3VwLmZpbmRBbGwoInRyIik6CisgICAgICAgICAg
ICBwYXRjaF90YWcgPSByb3cuZmluZCgiYSIsIHsiaHJlZiI6IGF0dGFjaG1lbnRfaHJlZn0pCisg
ICAgICAgICAgICBpZiBub3QgcGF0Y2hfdGFnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisg
ICAgICAgICAgICBwYXRjaF9pZCA9IGludChkaWdpdHMuc2VhcmNoKHBhdGNoX3RhZ1siaHJlZiJd
KS5ncm91cCgwKSkKKyAgICAgICAgICAgIGRhdGVfdGFnID0gcm93LmZpbmQoInRkIiwgdGV4dD1k
YXRlX2Zvcm1hdCkKKyAgICAgICAgICAgIGlmIGRhdGVfdGFnIGFuZCBkYXRldGltZS5zdHJwdGlt
ZShkYXRlX2Zvcm1hdC5zZWFyY2goZGF0ZV90YWcpLmdyb3VwKDApLCAiJVktJW0tJWQgJUg6JU0i
KSA8IHNpbmNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwYXRjaF9p
ZHMuYXBwZW5kKHBhdGNoX2lkKQorICAgICAgICByZXR1cm4gcGF0Y2hfaWRzCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODAxNTFhNTU5NWUuLmYw
YjkwYmQ3ZjAyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTgtMTEtMjYgIEFha2FzaCBKYWluICA8YWFrYXNoX2ph
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFtld3MtYXBwXSBBZGQgc3VwcG9ydCB0byBnZXQgbGlz
dCBvZiBCdWd6aWxsYSBwYXRjaGVzIG5lZWRpbmcgcmV2aWV3CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE5NDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAv
ZXdzL2NvbW1vbi9idWd6aWxsYS5weToKKyAgICAgICAgKEJ1Z3ppbGxhLmdldF9saXN0X29mX3Bh
dGNoZXNfbmVlZGluZ19yZXZpZXdzKTogR2V0IGxpc3Qgb2YgcGF0Y2hlcyBuZWVkaW5nIHJldmll
dy4KKyAgICAgICAgKEJ1Z3ppbGxhQmVhdXRpZnVsU291cC5mZXRjaF9hdHRhY2htZW50X2lkc19m
cm9tX3Jldmlld19xdWV1ZSk6IENvcGllZCBmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL25ldC9idWd6aWxsYS9idWd6aWxsYS5weQorICAgICAgICAoQnVnemlsbGFCZWF1dGlmdWxT
b3VwLl9sb2FkX3F1ZXJ5KTogRGl0dG8uCisgICAgICAgIChCdWd6aWxsYUJlYXV0aWZ1bFNvdXAu
X3BhcnNlX2F0dGFjaG1lbnRfaWRzX3JlcXVlc3RfcXVlcnkpOiBEaXR0by4KKwogMjAxOC0xMS0y
NiAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2V3cy1h
cHBdIEFkZCBCZWF1dGlmdWxTb3VwCi0tIAoyLjE3LjIgKEFwcGxlIEdpdC0xMTMpCgo=
</data>
<flag name="review"
          id="372770"
          type_id="1"
          status="+"
          setter="lforschler"
    />
          </attachment>
      

    </bug>

</bugzilla>