<?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>35196</bug_id>
          
          <creation_ts>2010-02-20 11:56:58 -0800</creation_ts>
          <short_desc>Move simplejson into webkitpy/thirdparty directory</short_desc>
          <delta_ts>2010-02-20 12:45:51 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>192203</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 11:56:58 -0800</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192204</commentid>
    <comment_count>1</comment_count>
      <attachid>49132</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 12:07:25 -0800</bug_when>
    <thetext>Created attachment 49132
Proposed patch

cq- since svn-create-patch does not support svn directory moves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192205</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 12:08:43 -0800</bug_when>
    <thetext>I will fix the typo: simpleson -&gt; simplejson in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192207</commentid>
    <comment_count>3</comment_count>
      <attachid>49132</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-20 12:19:26 -0800</bug_when>
    <thetext>Comment on attachment 49132
Proposed patch

This change is fine, but I don&apos;t think you added the files back...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192209</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 12:36:33 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 49132 [details])
&gt; This change is fine, but I don&apos;t think you added the files back...

Thanks again, Adam!

I think the patch looks like that because svn-create-patch doesn&apos;t support moving directories.  The svn-create-patch code has the following comment--

# Missing features:
#
#   Handle copied and moved directories.

I used svn move, and svn status shows the directory being added with history (and the files got moved on my local machine):

svn status
D       WebKitTools/simplejson
D       WebKitTools/simplejson/LICENSE.txt
...
A  +    WebKitTools/Scripts/webkitpy/thirdparty/simplejson
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192210</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-20 12:45:51 -0800</bug_when>
    <thetext>Manually committed using &quot;svn commit&quot; (to preserve history):

http://trac.webkit.org/changeset/55057</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49132</attachid>
            <date>2010-02-20 12:07:25 -0800</date>
            <delta_ts>2010-02-20 12:19:26 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-35196-1.diff</filename>
            <type>text/plain</type>
            <size>49396</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU1MDU1KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDItMjAgIENocmlzIEplcmRvbmVrICA8
Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92ZWQgc2ltcGxlanNvbiBpbnRvIHdlYmtpdHB5L3RoaXJkcGFydHkg
ZGlyZWN0b3J5LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTE5NgorCisgICAgICAgICogU2NyaXB0cy9ydW4tY2hyb21pdW0td2Via2l0LXRlc3Rz
OgorICAgICAgICAgIC0gQWRkZWQgd2Via2l0cHkvdGhpcmRwYXJ0eSB0byB0aGUgc2NyaXB0J3Mg
c2VhcmNoIHBhdGguCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvc2lt
cGxlanNvbjogQ29waWVkIGZyb20gV2ViS2l0VG9vbHMvc2ltcGxlanNvbi4KKyAgICAgICAgICAt
IENvcGllZCBzaW1wbGVzb24gZGlyZWN0b3J5LgorCisgICAgICAgICogc2ltcGxlanNvbjogUmVt
b3ZlZC4KKyAgICAgICAgKiBzaW1wbGVqc29uL0xJQ0VOU0UudHh0OiBSZW1vdmVkLgorICAgICAg
ICAqIHNpbXBsZWpzb24vUkVBRE1FLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBzaW1wbGVqc29u
L19faW5pdF9fLnB5OiBSZW1vdmVkLgorICAgICAgICAqIHNpbXBsZWpzb24vX3NwZWVkdXBzLmM6
IFJlbW92ZWQuCisgICAgICAgICogc2ltcGxlanNvbi9kZWNvZGVyLnB5OiBSZW1vdmVkLgorICAg
ICAgICAqIHNpbXBsZWpzb24vZW5jb2Rlci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBzaW1wbGVq
c29uL2pzb25maWx0ZXIucHk6IFJlbW92ZWQuCisgICAgICAgICogc2ltcGxlanNvbi9zY2FubmVy
LnB5OiBSZW1vdmVkLgorCiAyMDEwLTAyLTIwICBDaHJpcyBKZXJkb25layAgPGNqZXJkb25la0B3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJL
aXRUb29scy9TY3JpcHRzL3J1bi1jaHJvbWl1bS13ZWJraXQtdGVzdHMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tY2hyb21pdW0td2Via2l0LXRlc3RzCShyZXZpc2lvbiA1
NTA1NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWNocm9taXVtLXdlYmtpdC10ZXN0cwko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQCBpbXBvcnQgc3lzCiAKIHN5cy5wYXRoLmFw
cGVuZChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJn
dlswXSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0cHkiLCAibGF5b3V0
X3Rlc3RzIikpCitzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShv
cy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIndlYmtpdHB5IiwgInRoaXJkcGFydHkiKSkgICMgRm9yIHNpbXBsZWpzb24uCiBzeXMucGF0
aC5hcHBlbmQob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgo
c3lzLmFyZ3ZbMF0pKSkpCiBpbXBvcnQgcnVuX2Nocm9taXVtX3dlYmtpdF90ZXN0cwogCkluZGV4
OiBXZWJLaXRUb29scy9zaW1wbGVqc29uL0xJQ0VOU0UudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL3NpbXBsZWpzb24vTElDRU5TRS50eHQJKHJldmlzaW9uIDU1MDU0KQorKysgV2ViS2l0
VG9vbHMvc2ltcGxlanNvbi9MSUNFTlNFLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxOSArMCww
IEBACi1Db3B5cmlnaHQgKGMpIDIwMDYgQm9iIElwcG9saXRvCi0KLVBlcm1pc3Npb24gaXMgaGVy
ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNv
cHkgb2YKLXRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo
dGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCi10aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj
dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCi11c2UsIGNv
cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9v
ciBzZWxsIGNvcGllcwotb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g
d2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCi1zbywgc3ViamVjdCB0byB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0
aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotY29waWVzIG9y
IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLQotVEhFIFNPRlRXQVJFIElT
IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg
T1IKLUlNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZLAotRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E
IE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi1BVVRIT1JTIE9SIENPUFlS
SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi1M
SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS
V0lTRSwgQVJJU0lORyBGUk9NLAotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G
VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLVNPRlRXQVJFLgpJbmRl
eDogV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9SRUFETUUudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL3NpbXBsZWpzb24vUkVBRE1FLnR4dAkocmV2aXNpb24gNTUwNTQpCisrKyBXZWJLaXRU
b29scy9zaW1wbGVqc29uL1JFQURNRS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzAsMCBA
QAotVVJMOiBodHRwOi8vdW5kZWZpbmVkLm9yZy9weXRob24vI3NpbXBsZWpzb24KLVZlcnNpb246
IDEuNy4zCi1MaWNlbnNlOiBNSVQKLUxpY2Vuc2UgRmlsZTogTElDRU5TRS50eHQKLQotRGVzY3Jp
cHRpb246Ci1zaW1wbGVqc29uIGlzIGEgSlNPTiBlbmNvZGVyIGFuZCBkZWNvZGVyIGZvciBQeXRo
b24uCi0KLQotTG9jYWwgTW9kaWZpY2F0aW9uczoKLVJlbW92ZWQgdW5pdCB0ZXN0cyBmcm9tIGN1
cnJlbnQgZGlzdHJpYnV0aW9uLgpJbmRleDogV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9fX2luaXRf
Xy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9zaW1wbGVqc29uL19faW5pdF9fLnB5CShy
ZXZpc2lvbiA1NTA1NCkKKysrIFdlYktpdFRvb2xzL3NpbXBsZWpzb24vX19pbml0X18ucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsMjg3ICswLDAgQEAKLXIiIiIKLUEgc2ltcGxlLCBmYXN0LCBleHRl
bnNpYmxlIEpTT04gZW5jb2RlciBhbmQgZGVjb2RlcgotCi1KU09OIChKYXZhU2NyaXB0IE9iamVj
dCBOb3RhdGlvbikgPGh0dHA6Ly9qc29uLm9yZz4gaXMgYSBzdWJzZXQgb2YKLUphdmFTY3JpcHQg
c3ludGF4IChFQ01BLTI2MiAzcmQgZWRpdGlvbikgdXNlZCBhcyBhIGxpZ2h0d2VpZ2h0IGRhdGEK
LWludGVyY2hhbmdlIGZvcm1hdC4KLQotc2ltcGxlanNvbiBleHBvc2VzIGFuIEFQSSBmYW1pbGlh
ciB0byB1c2VzIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5Ci1tYXJzaGFsIGFuZCBwaWNrbGUgbW9k
dWxlcy4KLQotRW5jb2RpbmcgYmFzaWMgUHl0aG9uIG9iamVjdCBoaWVyYXJjaGllczo6Ci0gICAg
Ci0gICAgPj4+IGltcG9ydCBzaW1wbGVqc29uCi0gICAgPj4+IHNpbXBsZWpzb24uZHVtcHMoWydm
b28nLCB7J2Jhcic6ICgnYmF6JywgTm9uZSwgMS4wLCAyKX1dKQotICAgICdbImZvbyIsIHsiYmFy
IjogWyJiYXoiLCBudWxsLCAxLjAsIDJdfV0nCi0gICAgPj4+IHByaW50IHNpbXBsZWpzb24uZHVt
cHMoIlwiZm9vXGJhciIpCi0gICAgIlwiZm9vXGJhciIKLSAgICA+Pj4gcHJpbnQgc2ltcGxlanNv
bi5kdW1wcyh1J1x1MTIzNCcpCi0gICAgIlx1MTIzNCIKLSAgICA+Pj4gcHJpbnQgc2ltcGxlanNv
bi5kdW1wcygnXFwnKQotICAgICJcXCIKLSAgICA+Pj4gcHJpbnQgc2ltcGxlanNvbi5kdW1wcyh7
ImMiOiAwLCAiYiI6IDAsICJhIjogMH0sIHNvcnRfa2V5cz1UcnVlKQotICAgIHsiYSI6IDAsICJi
IjogMCwgImMiOiAwfQotICAgID4+PiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwotICAg
ID4+PiBpbyA9IFN0cmluZ0lPKCkKLSAgICA+Pj4gc2ltcGxlanNvbi5kdW1wKFsnc3RyZWFtaW5n
IEFQSSddLCBpbykKLSAgICA+Pj4gaW8uZ2V0dmFsdWUoKQotICAgICdbInN0cmVhbWluZyBBUEki
XScKLQotQ29tcGFjdCBlbmNvZGluZzo6Ci0KLSAgICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24KLSAg
ICA+Pj4gc2ltcGxlanNvbi5kdW1wcyhbMSwyLDMseyc0JzogNSwgJzYnOiA3fV0sIHNlcGFyYXRv
cnM9KCcsJywnOicpKQotICAgICdbMSwyLDMseyI0Ijo1LCI2Ijo3fV0nCi0KLVByZXR0eSBwcmlu
dGluZzo6Ci0KLSAgICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24KLSAgICA+Pj4gcHJpbnQgc2ltcGxl
anNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpCi0g
ICAgewotICAgICAgICAiNCI6IDUsIAotICAgICAgICAiNiI6IDcKLSAgICB9Ci0KLURlY29kaW5n
IEpTT046OgotICAgIAotICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgotICAgID4+PiBzaW1wbGVq
c29uLmxvYWRzKCdbImZvbyIsIHsiYmFyIjpbImJheiIsIG51bGwsIDEuMCwgMl19XScpCi0gICAg
W3UnZm9vJywge3UnYmFyJzogW3UnYmF6JywgTm9uZSwgMS4wLCAyXX1dCi0gICAgPj4+IHNpbXBs
ZWpzb24ubG9hZHMoJyJcXCJmb29cXGJhciInKQotICAgIHUnImZvb1x4MDhhcicKLSAgICA+Pj4g
ZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KLSAgICA+Pj4gaW8gPSBTdHJpbmdJTygnWyJz
dHJlYW1pbmcgQVBJIl0nKQotICAgID4+PiBzaW1wbGVqc29uLmxvYWQoaW8pCi0gICAgW3Unc3Ry
ZWFtaW5nIEFQSSddCi0KLVNwZWNpYWxpemluZyBKU09OIG9iamVjdCBkZWNvZGluZzo6Ci0KLSAg
ICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24KLSAgICA+Pj4gZGVmIGFzX2NvbXBsZXgoZGN0KToKLSAg
ICAuLi4gICAgIGlmICdfX2NvbXBsZXhfXycgaW4gZGN0OgotICAgIC4uLiAgICAgICAgIHJldHVy
biBjb21wbGV4KGRjdFsncmVhbCddLCBkY3RbJ2ltYWcnXSkKLSAgICAuLi4gICAgIHJldHVybiBk
Y3QKLSAgICAuLi4gCi0gICAgPj4+IHNpbXBsZWpzb24ubG9hZHMoJ3siX19jb21wbGV4X18iOiB0
cnVlLCAicmVhbCI6IDEsICJpbWFnIjogMn0nLAotICAgIC4uLiAgICAgb2JqZWN0X2hvb2s9YXNf
Y29tcGxleCkKLSAgICAoMSsyaikKLQotRXh0ZW5kaW5nIEpTT05FbmNvZGVyOjoKLSAgICAKLSAg
ICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24KLSAgICA+Pj4gY2xhc3MgQ29tcGxleEVuY29kZXIoc2lt
cGxlanNvbi5KU09ORW5jb2Rlcik6Ci0gICAgLi4uICAgICBkZWYgZGVmYXVsdChzZWxmLCBvYmop
OgotICAgIC4uLiAgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBjb21wbGV4KToKLSAgICAuLi4g
ICAgICAgICAgICAgcmV0dXJuIFtvYmoucmVhbCwgb2JqLmltYWddCi0gICAgLi4uICAgICAgICAg
cmV0dXJuIHNpbXBsZWpzb24uSlNPTkVuY29kZXIuZGVmYXVsdChzZWxmLCBvYmopCi0gICAgLi4u
IAotICAgID4+PiBkdW1wcygyICsgMWosIGNscz1Db21wbGV4RW5jb2RlcikKLSAgICAnWzIuMCwg
MS4wXScKLSAgICA+Pj4gQ29tcGxleEVuY29kZXIoKS5lbmNvZGUoMiArIDFqKQotICAgICdbMi4w
LCAxLjBdJwotICAgID4+PiBsaXN0KENvbXBsZXhFbmNvZGVyKCkuaXRlcmVuY29kZSgyICsgMWop
KQotICAgIFsnWycsICcyLjAnLCAnLCAnLCAnMS4wJywgJ10nXQotICAgIAotCi1Ob3RlIHRoYXQg
dGhlIEpTT04gcHJvZHVjZWQgYnkgdGhpcyBtb2R1bGUncyBkZWZhdWx0IHNldHRpbmdzCi1pcyBh
IHN1YnNldCBvZiBZQU1MLCBzbyBpdCBtYXkgYmUgdXNlZCBhcyBhIHNlcmlhbGl6ZXIgZm9yIHRo
YXQgYXMgd2VsbC4KLSIiIgotX192ZXJzaW9uX18gPSAnMS43LjMnCi1fX2FsbF9fID0gWwotICAg
ICdkdW1wJywgJ2R1bXBzJywgJ2xvYWQnLCAnbG9hZHMnLAotICAgICdKU09ORGVjb2RlcicsICdK
U09ORW5jb2RlcicsCi1dCi0KLWZyb20gZGVjb2RlciBpbXBvcnQgSlNPTkRlY29kZXIKLWZyb20g
ZW5jb2RlciBpbXBvcnQgSlNPTkVuY29kZXIKLQotX2RlZmF1bHRfZW5jb2RlciA9IEpTT05FbmNv
ZGVyKAotICAgIHNraXBrZXlzPUZhbHNlLAotICAgIGVuc3VyZV9hc2NpaT1UcnVlLAotICAgIGNo
ZWNrX2NpcmN1bGFyPVRydWUsCi0gICAgYWxsb3dfbmFuPVRydWUsCi0gICAgaW5kZW50PU5vbmUs
Ci0gICAgc2VwYXJhdG9ycz1Ob25lLAotICAgIGVuY29kaW5nPSd1dGYtOCcKLSkKLQotZGVmIGR1
bXAob2JqLCBmcCwgc2tpcGtleXM9RmFsc2UsIGVuc3VyZV9hc2NpaT1UcnVlLCBjaGVja19jaXJj
dWxhcj1UcnVlLAotICAgICAgICBhbGxvd19uYW49VHJ1ZSwgY2xzPU5vbmUsIGluZGVudD1Ob25l
LCBzZXBhcmF0b3JzPU5vbmUsCi0gICAgICAgIGVuY29kaW5nPSd1dGYtOCcsICoqa3cpOgotICAg
ICIiIgotICAgIFNlcmlhbGl6ZSBgYG9iamBgIGFzIGEgSlNPTiBmb3JtYXR0ZWQgc3RyZWFtIHRv
IGBgZnBgYCAoYQotICAgIGBgLndyaXRlKClgYC1zdXBwb3J0aW5nIGZpbGUtbGlrZSBvYmplY3Qp
LgotCi0gICAgSWYgYGBza2lwa2V5c2BgIGlzIGBgVHJ1ZWBgIHRoZW4gYGBkaWN0YGAga2V5cyB0
aGF0IGFyZSBub3QgYmFzaWMgdHlwZXMKLSAgICAoYGBzdHJgYCwgYGB1bmljb2RlYGAsIGBgaW50
YGAsIGBgbG9uZ2BgLCBgYGZsb2F0YGAsIGBgYm9vbGBgLCBgYE5vbmVgYCkgCi0gICAgd2lsbCBi
ZSBza2lwcGVkIGluc3RlYWQgb2YgcmFpc2luZyBhIGBgVHlwZUVycm9yYGAuCi0KLSAgICBJZiBg
YGVuc3VyZV9hc2NpaWBgIGlzIGBgRmFsc2VgYCwgdGhlbiB0aGUgc29tZSBjaHVua3Mgd3JpdHRl
biB0byBgYGZwYGAKLSAgICBtYXkgYmUgYGB1bmljb2RlYGAgaW5zdGFuY2VzLCBzdWJqZWN0IHRv
IG5vcm1hbCBQeXRob24gYGBzdHJgYCB0bwotICAgIGBgdW5pY29kZWBgIGNvZXJjaW9uIHJ1bGVz
LiBVbmxlc3MgYGBmcC53cml0ZSgpYGAgZXhwbGljaXRseQotICAgIHVuZGVyc3RhbmRzIGBgdW5p
Y29kZWBgIChhcyBpbiBgYGNvZGVjcy5nZXR3cml0ZXIoKWBgKSB0aGlzIGlzIGxpa2VseQotICAg
IHRvIGNhdXNlIGFuIGVycm9yLgotCi0gICAgSWYgYGBjaGVja19jaXJjdWxhcmBgIGlzIGBgRmFs
c2VgYCwgdGhlbiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCi0gICAgZm9yIGNvbnRhaW5l
ciB0eXBlcyB3aWxsIGJlIHNraXBwZWQgYW5kIGEgY2lyY3VsYXIgcmVmZXJlbmNlIHdpbGwKLSAg
ICByZXN1bHQgaW4gYW4gYGBPdmVyZmxvd0Vycm9yYGAgKG9yIHdvcnNlKS4KLQotICAgIElmIGBg
YWxsb3dfbmFuYGAgaXMgYGBGYWxzZWBgLCB0aGVuIGl0IHdpbGwgYmUgYSBgYFZhbHVlRXJyb3Jg
YCB0bwotICAgIHNlcmlhbGl6ZSBvdXQgb2YgcmFuZ2UgYGBmbG9hdGBgIHZhbHVlcyAoYGBuYW5g
YCwgYGBpbmZgYCwgYGAtaW5mYGApCi0gICAgaW4gc3RyaWN0IGNvbXBsaWFuY2Ugb2YgdGhlIEpT
T04gc3BlY2lmaWNhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyB0aGUKLSAgICBKYXZhU2NyaXB0IGVx
dWl2YWxlbnRzIChgYE5hTmBgLCBgYEluZmluaXR5YGAsIGBgLUluZmluaXR5YGApLgotCi0gICAg
SWYgYGBpbmRlbnRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkg
ZWxlbWVudHMgYW5kIG9iamVjdAotICAgIG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3
aXRoIHRoYXQgaW5kZW50IGxldmVsLiBBbiBpbmRlbnQgbGV2ZWwKLSAgICBvZiAwIHdpbGwgb25s
eSBpbnNlcnQgbmV3bGluZXMuIGBgTm9uZWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgcmVwcmVzZW50
YXRpb24uCi0KLSAgICBJZiBgYHNlcGFyYXRvcnNgYCBpcyBhbiBgYChpdGVtX3NlcGFyYXRvciwg
ZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUKLSAgICB0aGVuIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFk
IG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6ICcpYGAgc2VwYXJhdG9ycy4KLSAgICBgYCgnLCcs
ICc6JylgYCBpcyB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24uCi0KLSAgICBg
YGVuY29kaW5nYGAgaXMgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBmb3Igc3RyIGluc3RhbmNlcywg
ZGVmYXVsdCBpcyBVVEYtOC4KLQotICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpTT05FbmNvZGVyYGAg
c3ViY2xhc3MgKGUuZy4gb25lIHRoYXQgb3ZlcnJpZGVzIHRoZQotICAgIGBgLmRlZmF1bHQoKWBg
IG1ldGhvZCB0byBzZXJpYWxpemUgYWRkaXRpb25hbCB0eXBlcyksIHNwZWNpZnkgaXQgd2l0aAot
ICAgIHRoZSBgYGNsc2BgIGt3YXJnLgotICAgICIiIgotICAgICMgY2FjaGVkIGVuY29kZXIKLSAg
ICBpZiAoc2tpcGtleXMgaXMgRmFsc2UgYW5kIGVuc3VyZV9hc2NpaSBpcyBUcnVlIGFuZAotICAg
ICAgICBjaGVja19jaXJjdWxhciBpcyBUcnVlIGFuZCBhbGxvd19uYW4gaXMgVHJ1ZSBhbmQKLSAg
ICAgICAgY2xzIGlzIE5vbmUgYW5kIGluZGVudCBpcyBOb25lIGFuZCBzZXBhcmF0b3JzIGlzIE5v
bmUgYW5kCi0gICAgICAgIGVuY29kaW5nID09ICd1dGYtOCcgYW5kIG5vdCBrdyk6Ci0gICAgICAg
IGl0ZXJhYmxlID0gX2RlZmF1bHRfZW5jb2Rlci5pdGVyZW5jb2RlKG9iaikKLSAgICBlbHNlOgot
ICAgICAgICBpZiBjbHMgaXMgTm9uZToKLSAgICAgICAgICAgIGNscyA9IEpTT05FbmNvZGVyCi0g
ICAgICAgIGl0ZXJhYmxlID0gY2xzKHNraXBrZXlzPXNraXBrZXlzLCBlbnN1cmVfYXNjaWk9ZW5z
dXJlX2FzY2lpLAotICAgICAgICAgICAgY2hlY2tfY2lyY3VsYXI9Y2hlY2tfY2lyY3VsYXIsIGFs
bG93X25hbj1hbGxvd19uYW4sIGluZGVudD1pbmRlbnQsCi0gICAgICAgICAgICBzZXBhcmF0b3Jz
PXNlcGFyYXRvcnMsIGVuY29kaW5nPWVuY29kaW5nLCAqKmt3KS5pdGVyZW5jb2RlKG9iaikKLSAg
ICAjIGNvdWxkIGFjY2VsZXJhdGUgd2l0aCB3cml0ZWxpbmVzIGluIHNvbWUgdmVyc2lvbnMgb2Yg
UHl0aG9uLCBhdAotICAgICMgYSBkZWJ1Z2dhYmlsaXR5IGNvc3QKLSAgICBmb3IgY2h1bmsgaW4g
aXRlcmFibGU6Ci0gICAgICAgIGZwLndyaXRlKGNodW5rKQotCi0KLWRlZiBkdW1wcyhvYmosIHNr
aXBrZXlzPUZhbHNlLCBlbnN1cmVfYXNjaWk9VHJ1ZSwgY2hlY2tfY2lyY3VsYXI9VHJ1ZSwKLSAg
ICAgICAgYWxsb3dfbmFuPVRydWUsIGNscz1Ob25lLCBpbmRlbnQ9Tm9uZSwgc2VwYXJhdG9ycz1O
b25lLAotICAgICAgICBlbmNvZGluZz0ndXRmLTgnLCAqKmt3KToKLSAgICAiIiIKLSAgICBTZXJp
YWxpemUgYGBvYmpgYCB0byBhIEpTT04gZm9ybWF0dGVkIGBgc3RyYGAuCi0KLSAgICBJZiBgYHNr
aXBrZXlzYGAgaXMgYGBUcnVlYGAgdGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNp
YyB0eXBlcwotICAgIChgYHN0cmBgLCBgYHVuaWNvZGVgYCwgYGBpbnRgYCwgYGBsb25nYGAsIGBg
ZmxvYXRgYCwgYGBib29sYGAsIGBgTm9uZWBgKSAKLSAgICB3aWxsIGJlIHNraXBwZWQgaW5zdGVh
ZCBvZiByYWlzaW5nIGEgYGBUeXBlRXJyb3JgYC4KLQotICAgIElmIGBgZW5zdXJlX2FzY2lpYGAg
aXMgYGBGYWxzZWBgLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBhCi0gICAgYGB1bmlj
b2RlYGAgaW5zdGFuY2Ugc3ViamVjdCB0byBub3JtYWwgUHl0aG9uIGBgc3RyYGAgdG8gYGB1bmlj
b2RlYGAKLSAgICBjb2VyY2lvbiBydWxlcyBpbnN0ZWFkIG9mIGJlaW5nIGVzY2FwZWQgdG8gYW4g
QVNDSUkgYGBzdHJgYC4KLQotICAgIElmIGBgY2hlY2tfY2lyY3VsYXJgYCBpcyBgYEZhbHNlYGAs
IHRoZW4gdGhlIGNpcmN1bGFyIHJlZmVyZW5jZSBjaGVjawotICAgIGZvciBjb250YWluZXIgdHlw
ZXMgd2lsbCBiZSBza2lwcGVkIGFuZCBhIGNpcmN1bGFyIHJlZmVyZW5jZSB3aWxsCi0gICAgcmVz
dWx0IGluIGFuIGBgT3ZlcmZsb3dFcnJvcmBgIChvciB3b3JzZSkuCi0KLSAgICBJZiBgYGFsbG93
X25hbmBgIGlzIGBgRmFsc2VgYCwgdGhlbiBpdCB3aWxsIGJlIGEgYGBWYWx1ZUVycm9yYGAgdG8K
LSAgICBzZXJpYWxpemUgb3V0IG9mIHJhbmdlIGBgZmxvYXRgYCB2YWx1ZXMgKGBgbmFuYGAsIGBg
aW5mYGAsIGBgLWluZmBgKSBpbgotICAgIHN0cmljdCBjb21wbGlhbmNlIG9mIHRoZSBKU09OIHNw
ZWNpZmljYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgdGhlCi0gICAgSmF2YVNjcmlwdCBlcXVpdmFs
ZW50cyAoYGBOYU5gYCwgYGBJbmZpbml0eWBgLCBgYC1JbmZpbml0eWBgKS4KLQotICAgIElmIGBg
aW5kZW50YGAgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5IGVsZW1l
bnRzIGFuZAotICAgIG9iamVjdCBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0
aGF0IGluZGVudCBsZXZlbC4gQW4gaW5kZW50Ci0gICAgbGV2ZWwgb2YgMCB3aWxsIG9ubHkgaW5z
ZXJ0IG5ld2xpbmVzLiBgYE5vbmVgYCBpcyB0aGUgbW9zdCBjb21wYWN0Ci0gICAgcmVwcmVzZW50
YXRpb24uCi0KLSAgICBJZiBgYHNlcGFyYXRvcnNgYCBpcyBhbiBgYChpdGVtX3NlcGFyYXRvciwg
ZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUKLSAgICB0aGVuIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFk
IG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6ICcpYGAgc2VwYXJhdG9ycy4KLSAgICBgYCgnLCcs
ICc6JylgYCBpcyB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24uCi0KLSAgICBg
YGVuY29kaW5nYGAgaXMgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBmb3Igc3RyIGluc3RhbmNlcywg
ZGVmYXVsdCBpcyBVVEYtOC4KLQotICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpTT05FbmNvZGVyYGAg
c3ViY2xhc3MgKGUuZy4gb25lIHRoYXQgb3ZlcnJpZGVzIHRoZQotICAgIGBgLmRlZmF1bHQoKWBg
IG1ldGhvZCB0byBzZXJpYWxpemUgYWRkaXRpb25hbCB0eXBlcyksIHNwZWNpZnkgaXQgd2l0aAot
ICAgIHRoZSBgYGNsc2BgIGt3YXJnLgotICAgICIiIgotICAgICMgY2FjaGVkIGVuY29kZXIKLSAg
ICBpZiAoc2tpcGtleXMgaXMgRmFsc2UgYW5kIGVuc3VyZV9hc2NpaSBpcyBUcnVlIGFuZAotICAg
ICAgICBjaGVja19jaXJjdWxhciBpcyBUcnVlIGFuZCBhbGxvd19uYW4gaXMgVHJ1ZSBhbmQKLSAg
ICAgICAgY2xzIGlzIE5vbmUgYW5kIGluZGVudCBpcyBOb25lIGFuZCBzZXBhcmF0b3JzIGlzIE5v
bmUgYW5kCi0gICAgICAgIGVuY29kaW5nID09ICd1dGYtOCcgYW5kIG5vdCBrdyk6Ci0gICAgICAg
IHJldHVybiBfZGVmYXVsdF9lbmNvZGVyLmVuY29kZShvYmopCi0gICAgaWYgY2xzIGlzIE5vbmU6
Ci0gICAgICAgIGNscyA9IEpTT05FbmNvZGVyCi0gICAgcmV0dXJuIGNscygKLSAgICAgICAgc2tp
cGtleXM9c2tpcGtleXMsIGVuc3VyZV9hc2NpaT1lbnN1cmVfYXNjaWksCi0gICAgICAgIGNoZWNr
X2NpcmN1bGFyPWNoZWNrX2NpcmN1bGFyLCBhbGxvd19uYW49YWxsb3dfbmFuLCBpbmRlbnQ9aW5k
ZW50LAotICAgICAgICBzZXBhcmF0b3JzPXNlcGFyYXRvcnMsIGVuY29kaW5nPWVuY29kaW5nLAot
ICAgICAgICAqKmt3KS5lbmNvZGUob2JqKQotCi1fZGVmYXVsdF9kZWNvZGVyID0gSlNPTkRlY29k
ZXIoZW5jb2Rpbmc9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSkKLQotZGVmIGxvYWQoZnAsIGVuY29k
aW5nPU5vbmUsIGNscz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lLCAqKmt3KToKLSAgICAiIiIKLSAg
ICBEZXNlcmlhbGl6ZSBgYGZwYGAgKGEgYGAucmVhZCgpYGAtc3VwcG9ydGluZyBmaWxlLWxpa2Ug
b2JqZWN0IGNvbnRhaW5pbmcKLSAgICBhIEpTT04gZG9jdW1lbnQpIHRvIGEgUHl0aG9uIG9iamVj
dC4KLQotICAgIElmIHRoZSBjb250ZW50cyBvZiBgYGZwYGAgaXMgZW5jb2RlZCB3aXRoIGFuIEFT
Q0lJIGJhc2VkIGVuY29kaW5nIG90aGVyCi0gICAgdGhhbiB1dGYtOCAoZS5nLiBsYXRpbi0xKSwg
dGhlbiBhbiBhcHByb3ByaWF0ZSBgYGVuY29kaW5nYGAgbmFtZSBtdXN0Ci0gICAgYmUgc3BlY2lm
aWVkLiBFbmNvZGluZ3MgdGhhdCBhcmUgbm90IEFTQ0lJIGJhc2VkIChzdWNoIGFzIFVDUy0yKSBh
cmUKLSAgICBub3QgYWxsb3dlZCwgYW5kIHNob3VsZCBiZSB3cmFwcGVkIHdpdGgKLSAgICBgYGNv
ZGVjcy5nZXRyZWFkZXIoZnApKGVuY29kaW5nKWBgLCBvciBzaW1wbHkgZGVjb2RlZCB0byBhIGBg
dW5pY29kZWBgCi0gICAgb2JqZWN0IGFuZCBwYXNzZWQgdG8gYGBsb2FkcygpYGAKLQotICAgIGBg
b2JqZWN0X2hvb2tgYCBpcyBhbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVk
IHdpdGggdGhlCi0gICAgcmVzdWx0IG9mIGFueSBvYmplY3QgbGl0ZXJhbCBkZWNvZGUgKGEgYGBk
aWN0YGApLiBUaGUgcmV0dXJuIHZhbHVlIG9mCi0gICAgYGBvYmplY3RfaG9va2BgIHdpbGwgYmUg
dXNlZCBpbnN0ZWFkIG9mIHRoZSBgYGRpY3RgYC4gVGhpcyBmZWF0dXJlCi0gICAgY2FuIGJlIHVz
ZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycyAoZS5nLiBKU09OLVJQQyBjbGFzcyBoaW50
aW5nKS4KLSAgICAKLSAgICBUbyB1c2UgYSBjdXN0b20gYGBKU09ORGVjb2RlcmBgIHN1YmNsYXNz
LCBzcGVjaWZ5IGl0IHdpdGggdGhlIGBgY2xzYGAKLSAgICBrd2FyZy4KLSAgICAiIiIKLSAgICBy
ZXR1cm4gbG9hZHMoZnAucmVhZCgpLAotICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgY2xzPWNs
cywgb2JqZWN0X2hvb2s9b2JqZWN0X2hvb2ssICoqa3cpCi0KLWRlZiBsb2FkcyhzLCBlbmNvZGlu
Zz1Ob25lLCBjbHM9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgKiprdyk6Ci0gICAgIiIiCi0gICAg
RGVzZXJpYWxpemUgYGBzYGAgKGEgYGBzdHJgYCBvciBgYHVuaWNvZGVgYCBpbnN0YW5jZSBjb250
YWluaW5nIGEgSlNPTgotICAgIGRvY3VtZW50KSB0byBhIFB5dGhvbiBvYmplY3QuCi0KLSAgICBJ
ZiBgYHNgYCBpcyBhIGBgc3RyYGAgaW5zdGFuY2UgYW5kIGlzIGVuY29kZWQgd2l0aCBhbiBBU0NJ
SSBiYXNlZCBlbmNvZGluZwotICAgIG90aGVyIHRoYW4gdXRmLTggKGUuZy4gbGF0aW4tMSkgdGhl
biBhbiBhcHByb3ByaWF0ZSBgYGVuY29kaW5nYGAgbmFtZQotICAgIG11c3QgYmUgc3BlY2lmaWVk
LiBFbmNvZGluZ3MgdGhhdCBhcmUgbm90IEFTQ0lJIGJhc2VkIChzdWNoIGFzIFVDUy0yKQotICAg
IGFyZSBub3QgYWxsb3dlZCBhbmQgc2hvdWxkIGJlIGRlY29kZWQgdG8gYGB1bmljb2RlYGAgZmly
c3QuCi0KLSAgICBgYG9iamVjdF9ob29rYGAgaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCB3
aWxsIGJlIGNhbGxlZCB3aXRoIHRoZQotICAgIHJlc3VsdCBvZiBhbnkgb2JqZWN0IGxpdGVyYWwg
ZGVjb2RlIChhIGBgZGljdGBgKS4gVGhlIHJldHVybiB2YWx1ZSBvZgotICAgIGBgb2JqZWN0X2hv
b2tgYCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgYGBkaWN0YGAuIFRoaXMgZmVhdHVyZQot
ICAgIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBjdXN0b20gZGVjb2RlcnMgKGUuZy4gSlNPTi1S
UEMgY2xhc3MgaGludGluZykuCi0KLSAgICBUbyB1c2UgYSBjdXN0b20gYGBKU09ORGVjb2RlcmBg
IHN1YmNsYXNzLCBzcGVjaWZ5IGl0IHdpdGggdGhlIGBgY2xzYGAKLSAgICBrd2FyZy4KLSAgICAi
IiIKLSAgICBpZiBjbHMgaXMgTm9uZSBhbmQgZW5jb2RpbmcgaXMgTm9uZSBhbmQgb2JqZWN0X2hv
b2sgaXMgTm9uZSBhbmQgbm90IGt3OgotICAgICAgICByZXR1cm4gX2RlZmF1bHRfZGVjb2Rlci5k
ZWNvZGUocykKLSAgICBpZiBjbHMgaXMgTm9uZToKLSAgICAgICAgY2xzID0gSlNPTkRlY29kZXIK
LSAgICBpZiBvYmplY3RfaG9vayBpcyBub3QgTm9uZToKLSAgICAgICAga3dbJ29iamVjdF9ob29r
J10gPSBvYmplY3RfaG9vawotICAgIHJldHVybiBjbHMoZW5jb2Rpbmc9ZW5jb2RpbmcsICoqa3cp
LmRlY29kZShzKQotCi1kZWYgcmVhZChzKToKLSAgICAiIiIKLSAgICBqc29uLXB5IEFQSSBjb21w
YXRpYmlsaXR5IGhvb2suIFVzZSBsb2FkcyhzKSBpbnN0ZWFkLgotICAgICIiIgotICAgIGltcG9y
dCB3YXJuaW5ncwotICAgIHdhcm5pbmdzLndhcm4oInNpbXBsZWpzb24ubG9hZHMocykgc2hvdWxk
IGJlIHVzZWQgaW5zdGVhZCBvZiByZWFkKHMpIiwKLSAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5n
KQotICAgIHJldHVybiBsb2FkcyhzKQotCi1kZWYgd3JpdGUob2JqKToKLSAgICAiIiIKLSAgICBq
c29uLXB5IEFQSSBjb21wYXRpYmlsaXR5IGhvb2suIFVzZSBkdW1wcyhzKSBpbnN0ZWFkLgotICAg
ICIiIgotICAgIGltcG9ydCB3YXJuaW5ncwotICAgIHdhcm5pbmdzLndhcm4oInNpbXBsZWpzb24u
ZHVtcHMocykgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiB3cml0ZShzKSIsCi0gICAgICAgIERl
cHJlY2F0aW9uV2FybmluZykKLSAgICByZXR1cm4gZHVtcHMob2JqKQotCi0KSW5kZXg6IFdlYktp
dFRvb2xzL3NpbXBsZWpzb24vX3NwZWVkdXBzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
c2ltcGxlanNvbi9fc3BlZWR1cHMuYwkocmV2aXNpb24gNTUwNTQpCisrKyBXZWJLaXRUb29scy9z
aW1wbGVqc29uL19zcGVlZHVwcy5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxNSArMCwwIEBACi0j
aW5jbHVkZSAiUHl0aG9uLmgiCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwICYmICFk
ZWZpbmVkKFBZX1NTSVpFX1RfTUlOKQotdHlwZWRlZiBpbnQgUHlfc3NpemVfdDsKLSNkZWZpbmUg
UFlfU1NJWkVfVF9NQVggSU5UX01BWAotI2RlZmluZSBQWV9TU0laRV9UX01JTiBJTlRfTUlOCi0j
ZW5kaWYKLQotc3RhdGljIFB5X3NzaXplX3QKLWFzY2lpX2VzY2FwZV9jaGFyKFB5X1VOSUNPREUg
YywgY2hhciAqb3V0cHV0LCBQeV9zc2l6ZV90IGNoYXJzKTsKLXN0YXRpYyBQeU9iamVjdCAqCi1h
c2NpaV9lc2NhcGVfdW5pY29kZShQeU9iamVjdCAqcHlzdHIpOwotc3RhdGljIFB5T2JqZWN0ICoK
LWFzY2lpX2VzY2FwZV9zdHIoUHlPYmplY3QgKnB5c3RyKTsKLXN0YXRpYyBQeU9iamVjdCAqCi1w
eV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShQeU9iamVjdCogc2VsZiBfX2F0dHJpYnV0ZV9fKChf
X3VudXNlZF9fKSksIFB5T2JqZWN0ICpweXN0cik7Ci12b2lkIGluaXRfc3BlZWR1cHModm9pZCk7
Ci0KLSNkZWZpbmUgU19DSEFSKGMpIChjID49ICcgJyAmJiBjIDw9ICd+JyAmJiBjICE9ICdcXCcg
JiYgYyAhPSAnLycgJiYgYyAhPSAnIicpCi0KLSNkZWZpbmUgTUlOX0VYUEFOU0lPTiA2Ci0jaWZk
ZWYgUHlfVU5JQ09ERV9XSURFCi0jZGVmaW5lIE1BWF9FWFBBTlNJT04gKDIgKiBNSU5fRVhQQU5T
SU9OKQotI2Vsc2UKLSNkZWZpbmUgTUFYX0VYUEFOU0lPTiBNSU5fRVhQQU5TSU9OCi0jZW5kaWYK
LQotc3RhdGljIFB5X3NzaXplX3QKLWFzY2lpX2VzY2FwZV9jaGFyKFB5X1VOSUNPREUgYywgY2hh
ciAqb3V0cHV0LCBQeV9zc2l6ZV90IGNoYXJzKSB7Ci0gICAgUHlfVU5JQ09ERSB4OwotICAgIG91
dHB1dFtjaGFycysrXSA9ICdcXCc7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICAgIGNhc2UgJy8n
OiBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOyBicmVhazsKLSAgICAgICAgY2FzZSAnXFwnOiBv
dXRwdXRbY2hhcnMrK10gPSAoY2hhciljOyBicmVhazsKLSAgICAgICAgY2FzZSAnIic6IG91dHB1
dFtjaGFycysrXSA9IChjaGFyKWM7IGJyZWFrOwotICAgICAgICBjYXNlICdcYic6IG91dHB1dFtj
aGFycysrXSA9ICdiJzsgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xmJzogb3V0cHV0W2NoYXJzKytd
ID0gJ2YnOyBicmVhazsKLSAgICAgICAgY2FzZSAnXG4nOiBvdXRwdXRbY2hhcnMrK10gPSAnbic7
IGJyZWFrOwotICAgICAgICBjYXNlICdccic6IG91dHB1dFtjaGFycysrXSA9ICdyJzsgYnJlYWs7
Ci0gICAgICAgIGNhc2UgJ1x0Jzogb3V0cHV0W2NoYXJzKytdID0gJ3QnOyBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICAgICAgICAgIGlmIChjID49
IDB4MTAwMDApIHsKLSAgICAgICAgICAgICAgICAvKiBVVEYtMTYgc3Vycm9nYXRlIHBhaXIgKi8K
LSAgICAgICAgICAgICAgICBQeV9VTklDT0RFIHYgPSBjIC0gMHgxMDAwMDsKLSAgICAgICAgICAg
ICAgICBjID0gMHhkODAwIHwgKCh2ID4+IDEwKSAmIDB4M2ZmKTsKLSAgICAgICAgICAgICAgICBv
dXRwdXRbY2hhcnMrK10gPSAndSc7Ci0gICAgICAgICAgICAgICAgeCA9IChjICYgMHhmMDAwKSA+
PiAxMjsKLSAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyAr
IHggOiAnYScgKyAoeCAtIDEwKTsKLSAgICAgICAgICAgICAgICB4ID0gKGMgJiAweDBmMDApID4+
IDg7Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4
IDogJ2EnICsgKHggLSAxMCk7Ci0gICAgICAgICAgICAgICAgeCA9IChjICYgMHgwMGYwKSA+PiA0
OwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6
ICdhJyArICh4IC0gMTApOwotICAgICAgICAgICAgICAgIHggPSAoYyAmIDB4MDAwZik7Ci0gICAg
ICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsg
KHggLSAxMCk7Ci0gICAgICAgICAgICAgICAgYyA9IDB4ZGMwMCB8ICh2ICYgMHgzZmYpOwotICAg
ICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICdcXCc7Ci0gICAgICAgICAgICB9Ci0jZW5k
aWYKLSAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICd1JzsKLSAgICAgICAgICAgIHggPSAo
YyAmIDB4ZjAwMCkgPj4gMTI7Ci0gICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEw
KSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKLSAgICAgICAgICAgIHggPSAoYyAmIDB4MGYw
MCkgPj4gODsKLSAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsg
eCA6ICdhJyArICh4IC0gMTApOwotICAgICAgICAgICAgeCA9IChjICYgMHgwMGYwKSA+PiA0Owot
ICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsg
KHggLSAxMCk7Ci0gICAgICAgICAgICB4ID0gKGMgJiAweDAwMGYpOwotICAgICAgICAgICAgb3V0
cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7Ci0gICAg
fQotICAgIHJldHVybiBjaGFyczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLWFzY2lpX2VzY2Fw
ZV91bmljb2RlKFB5T2JqZWN0ICpweXN0cikgewotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeV9z
c2l6ZV90IGlucHV0X2NoYXJzOwotICAgIFB5X3NzaXplX3Qgb3V0cHV0X3NpemU7Ci0gICAgUHlf
c3NpemVfdCBjaGFyczsKLSAgICBQeU9iamVjdCAqcnZhbDsKLSAgICBjaGFyICpvdXRwdXQ7Ci0g
ICAgUHlfVU5JQ09ERSAqaW5wdXRfdW5pY29kZTsKLQotICAgIGlucHV0X2NoYXJzID0gUHlVbmlj
b2RlX0dFVF9TSVpFKHB5c3RyKTsKLSAgICBpbnB1dF91bmljb2RlID0gUHlVbmljb2RlX0FTX1VO
SUNPREUocHlzdHIpOwotICAgIC8qIE9uZSBjaGFyIGlucHV0IGNhbiBiZSB1cCB0byA2IGNoYXJz
IG91dHB1dCwgZXN0aW1hdGUgNCBvZiB0aGVzZSAqLwotICAgIG91dHB1dF9zaXplID0gMiArIChN
SU5fRVhQQU5TSU9OICogNCkgKyBpbnB1dF9jaGFyczsKLSAgICBydmFsID0gUHlTdHJpbmdfRnJv
bVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0cHV0X3NpemUpOwotICAgIGlmIChydmFsID09IE5VTEwp
IHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIG91dHB1dCA9IFB5U3RyaW5nX0FT
X1NUUklORyhydmFsKTsKLSAgICBjaGFycyA9IDA7Ci0gICAgb3V0cHV0W2NoYXJzKytdID0gJyIn
OwotICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dF9jaGFyczsgaSsrKSB7Ci0gICAgICAgIFB5X1VO
SUNPREUgYyA9IGlucHV0X3VuaWNvZGVbaV07Ci0gICAgICAgIGlmIChTX0NIQVIoYykpIHsKLSAg
ICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IChjaGFyKWM7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBjaGFycyA9IGFzY2lpX2VzY2FwZV9jaGFyKGMsIG91dHB1dCwgY2hhcnMpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChvdXRwdXRfc2l6ZSAtIGNoYXJzIDwgKDEgKyBNQVhfRVhQ
QU5TSU9OKSkgewotICAgICAgICAgICAgLyogVGhlcmUncyBtb3JlIHRoYW4gZm91ciwgc28gbGV0
J3MgcmVzaXplIGJ5IGEgbG90ICovCi0gICAgICAgICAgICBvdXRwdXRfc2l6ZSAqPSAyOwotICAg
ICAgICAgICAgLyogVGhpcyBpcyBhbiB1cHBlciBib3VuZCAqLwotICAgICAgICAgICAgaWYgKG91
dHB1dF9zaXplID4gMiArIChpbnB1dF9jaGFycyAqIE1BWF9FWFBBTlNJT04pKSB7Ci0gICAgICAg
ICAgICAgICAgb3V0cHV0X3NpemUgPSAyICsgKGlucHV0X2NoYXJzICogTUFYX0VYUEFOU0lPTik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnZhbCwg
b3V0cHV0X3NpemUpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBvdXRwdXQgPSBQeVN0cmluZ19BU19TVFJJTkcocnZhbCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgb3V0cHV0W2NoYXJzKytdID0gJyInOwotICAgIGlmIChf
UHlTdHJpbmdfUmVzaXplKCZydmFsLCBjaGFycykgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgfQotICAgIHJldHVybiBydmFsOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotYXNj
aWlfZXNjYXBlX3N0cihQeU9iamVjdCAqcHlzdHIpIHsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAg
UHlfc3NpemVfdCBpbnB1dF9jaGFyczsKLSAgICBQeV9zc2l6ZV90IG91dHB1dF9zaXplOwotICAg
IFB5X3NzaXplX3QgY2hhcnM7Ci0gICAgUHlPYmplY3QgKnJ2YWw7Ci0gICAgY2hhciAqb3V0cHV0
OwotICAgIGNoYXIgKmlucHV0X3N0cjsKLQotICAgIGlucHV0X2NoYXJzID0gUHlTdHJpbmdfR0VU
X1NJWkUocHlzdHIpOwotICAgIGlucHV0X3N0ciA9IFB5U3RyaW5nX0FTX1NUUklORyhweXN0cik7
Ci0gICAgLyogT25lIGNoYXIgaW5wdXQgY2FuIGJlIHVwIHRvIDYgY2hhcnMgb3V0cHV0LCBlc3Rp
bWF0ZSA0IG9mIHRoZXNlICovCi0gICAgb3V0cHV0X3NpemUgPSAyICsgKE1JTl9FWFBBTlNJT04g
KiA0KSArIGlucHV0X2NoYXJzOwotICAgIHJ2YWwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6
ZShOVUxMLCBvdXRwdXRfc2l6ZSk7Ci0gICAgaWYgKHJ2YWwgPT0gTlVMTCkgewotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgb3V0cHV0ID0gUHlTdHJpbmdfQVNfU1RSSU5HKHJ2YWwp
OwotICAgIGNoYXJzID0gMDsKLSAgICBvdXRwdXRbY2hhcnMrK10gPSAnIic7Ci0gICAgZm9yIChp
ID0gMDsgaSA8IGlucHV0X2NoYXJzOyBpKyspIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gKFB5
X1VOSUNPREUpaW5wdXRfc3RyW2ldOwotICAgICAgICBpZiAoU19DSEFSKGMpKSB7Ci0gICAgICAg
ICAgICBvdXRwdXRbY2hhcnMrK10gPSAoY2hhciljOwotICAgICAgICB9IGVsc2UgaWYgKGMgPiAw
eDdGKSB7Ci0gICAgICAgICAgICAvKiBXZSBoaXQgYSBub24tQVNDSUkgY2hhcmFjdGVyLCBiYWls
IHRvIHVuaWNvZGUgbW9kZSAqLwotICAgICAgICAgICAgUHlPYmplY3QgKnVuaTsKLSAgICAgICAg
ICAgIFB5X0RFQ1JFRihydmFsKTsKLSAgICAgICAgICAgIHVuaSA9IFB5VW5pY29kZV9EZWNvZGVV
VEY4KGlucHV0X3N0ciwgaW5wdXRfY2hhcnMsICJzdHJpY3QiKTsKLSAgICAgICAgICAgIGlmICh1
bmkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcnZhbCA9IGFzY2lpX2VzY2FwZV91bmljb2RlKHVuaSk7Ci0gICAgICAg
ICAgICBQeV9ERUNSRUYodW5pKTsKLSAgICAgICAgICAgIHJldHVybiBydmFsOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgY2hhcnMgPSBhc2NpaV9lc2NhcGVfY2hhcihjLCBvdXRwdXQs
IGNoYXJzKTsKLSAgICAgICAgfQotICAgICAgICAvKiBBbiBBU0NJSSBjaGFyIGNhbid0IHBvc3Np
Ymx5IGV4cGFuZCB0byBhIHN1cnJvZ2F0ZSEgKi8KLSAgICAgICAgaWYgKG91dHB1dF9zaXplIC0g
Y2hhcnMgPCAoMSArIE1JTl9FWFBBTlNJT04pKSB7Ci0gICAgICAgICAgICAvKiBUaGVyZSdzIG1v
cmUgdGhhbiBmb3VyLCBzbyBsZXQncyByZXNpemUgYnkgYSBsb3QgKi8KLSAgICAgICAgICAgIG91
dHB1dF9zaXplICo9IDI7Ci0gICAgICAgICAgICBpZiAob3V0cHV0X3NpemUgPiAyICsgKGlucHV0
X2NoYXJzICogTUlOX0VYUEFOU0lPTikpIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSA9
IDIgKyAoaW5wdXRfY2hhcnMgKiBNSU5fRVhQQU5TSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZydmFsLCBvdXRwdXRfc2l6ZSkgPT0gLTEpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG91dHB1dCA9IFB5U3RyaW5nX0FTX1NUUklORyhydmFsKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBvdXRwdXRbY2hhcnMrK10gPSAnIic7Ci0gICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2YWws
IGNoYXJzKSA9PSAtMSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJu
IHJ2YWw7Ci19Ci0KLVB5RG9jX1NUUlZBUihweWRvY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSwK
LSAgICAiZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoYmFzZXN0cmluZykgLT4gc3RyXG4iCi0gICAg
IlxuIgotICAgICIuLi4iCi0pOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcHlfZW5jb2RlX2Jhc2Vz
dHJpbmdfYXNjaWkoUHlPYmplY3QqIHNlbGYgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpLCBQ
eU9iamVjdCAqcHlzdHIpIHsKLSAgICAvKiBNRVRIX08gKi8KLSAgICBpZiAoUHlTdHJpbmdfQ2hl
Y2socHlzdHIpKSB7Ci0gICAgICAgIHJldHVybiBhc2NpaV9lc2NhcGVfc3RyKHB5c3RyKTsKLSAg
ICB9IGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0cikpIHsKLSAgICAgICAgcmV0dXJuIGFz
Y2lpX2VzY2FwZV91bmljb2RlKHB5c3RyKTsKLSAgICB9Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5
RXhjX1R5cGVFcnJvciwgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTsKLSAgICBy
ZXR1cm4gTlVMTDsKLX0KLQotI2RlZmluZSBERUZOKG4sIGspIFwKLSAgICB7ICBcCi0gICAgICAg
ICNuLCBcCi0gICAgICAgIChQeUNGdW5jdGlvbilweV8gIyNuLCBcCi0gICAgICAgIGssIFwKLSAg
ICAgICAgcHlkb2NfICMjbiBcCi0gICAgfQotc3RhdGljIFB5TWV0aG9kRGVmIHNwZWVkdXBzX21l
dGhvZHNbXSA9IHsKLSAgICBERUZOKGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpLCBNRVRIX08pLAot
ICAgIHt9Ci19OwotI3VuZGVmIERFRk4KLQotdm9pZAotaW5pdF9zcGVlZHVwcyh2b2lkKQotewot
ICAgIFB5T2JqZWN0ICptOwotICAgIG0gPSBQeV9Jbml0TW9kdWxlNCgiX3NwZWVkdXBzIiwgc3Bl
ZWR1cHNfbWV0aG9kcywgTlVMTCwgTlVMTCwgUFlUSE9OX0FQSV9WRVJTSU9OKTsKLX0KSW5kZXg6
IFdlYktpdFRvb2xzL3NpbXBsZWpzb24vZGVjb2Rlci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9zaW1wbGVqc29uL2RlY29kZXIucHkJKHJldmlzaW9uIDU1MDU0KQorKysgV2ViS2l0VG9v
bHMvc2ltcGxlanNvbi9kZWNvZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDI3MyArMCwwIEBA
Ci0iIiIKLUltcGxlbWVudGF0aW9uIG9mIEpTT05EZWNvZGVyCi0iIiIKLWltcG9ydCByZQotCi1m
cm9tIHNpbXBsZWpzb24uc2Nhbm5lciBpbXBvcnQgU2Nhbm5lciwgcGF0dGVybgotCi1GTEFHUyA9
IHJlLlZFUkJPU0UgfCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwKLQotZGVmIF9mbG9hdGNvbnN0
YW50cygpOgotICAgIGltcG9ydCBzdHJ1Y3QKLSAgICBpbXBvcnQgc3lzCi0gICAgX0JZVEVTID0g
JzdGRjgwMDAwMDAwMDAwMDA3RkYwMDAwMDAwMDAwMDAwJy5kZWNvZGUoJ2hleCcpCi0gICAgaWYg
c3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgX0JZVEVTID0gX0JZVEVTWzo4XVs6Oi0x
XSArIF9CWVRFU1s4Ol1bOjotMV0KLSAgICBuYW4sIGluZiA9IHN0cnVjdC51bnBhY2soJ2RkJywg
X0JZVEVTKQotICAgIHJldHVybiBuYW4sIGluZiwgLWluZgotCi1OYU4sIFBvc0luZiwgTmVnSW5m
ID0gX2Zsb2F0Y29uc3RhbnRzKCkKLQotZGVmIGxpbmVjb2woZG9jLCBwb3MpOgotICAgIGxpbmVu
byA9IGRvYy5jb3VudCgnXG4nLCAwLCBwb3MpICsgMQotICAgIGlmIGxpbmVubyA9PSAxOgotICAg
ICAgICBjb2xubyA9IHBvcwotICAgIGVsc2U6Ci0gICAgICAgIGNvbG5vID0gcG9zIC0gZG9jLnJp
bmRleCgnXG4nLCAwLCBwb3MpCi0gICAgcmV0dXJuIGxpbmVubywgY29sbm8KLQotZGVmIGVycm1z
Zyhtc2csIGRvYywgcG9zLCBlbmQ9Tm9uZSk6Ci0gICAgbGluZW5vLCBjb2xubyA9IGxpbmVjb2wo
ZG9jLCBwb3MpCi0gICAgaWYgZW5kIGlzIE5vbmU6Ci0gICAgICAgIHJldHVybiAnJXM6IGxpbmUg
JWQgY29sdW1uICVkIChjaGFyICVkKScgJSAobXNnLCBsaW5lbm8sIGNvbG5vLCBwb3MpCi0gICAg
ZW5kbGluZW5vLCBlbmRjb2xubyA9IGxpbmVjb2woZG9jLCBlbmQpCi0gICAgcmV0dXJuICclczog
bGluZSAlZCBjb2x1bW4gJWQgLSBsaW5lICVkIGNvbHVtbiAlZCAoY2hhciAlZCAtICVkKScgJSAo
Ci0gICAgICAgIG1zZywgbGluZW5vLCBjb2xubywgZW5kbGluZW5vLCBlbmRjb2xubywgcG9zLCBl
bmQpCi0KLV9DT05TVEFOVFMgPSB7Ci0gICAgJy1JbmZpbml0eSc6IE5lZ0luZiwKLSAgICAnSW5m
aW5pdHknOiBQb3NJbmYsCi0gICAgJ05hTic6IE5hTiwKLSAgICAndHJ1ZSc6IFRydWUsCi0gICAg
J2ZhbHNlJzogRmFsc2UsCi0gICAgJ251bGwnOiBOb25lLAotfQotCi1kZWYgSlNPTkNvbnN0YW50
KG1hdGNoLCBjb250ZXh0LCBjPV9DT05TVEFOVFMpOgotICAgIHJldHVybiBjW21hdGNoLmdyb3Vw
KDApXSwgTm9uZQotcGF0dGVybignKC0/SW5maW5pdHl8TmFOfHRydWV8ZmFsc2V8bnVsbCknKShK
U09OQ29uc3RhbnQpCi0KLWRlZiBKU09OTnVtYmVyKG1hdGNoLCBjb250ZXh0KToKLSAgICBtYXRj
aCA9IEpTT05OdW1iZXIucmVnZXgubWF0Y2gobWF0Y2guc3RyaW5nLCAqbWF0Y2guc3BhbigpKQot
ICAgIGludGVnZXIsIGZyYWMsIGV4cCA9IG1hdGNoLmdyb3VwcygpCi0gICAgaWYgZnJhYyBvciBl
eHA6Ci0gICAgICAgIHJlcyA9IGZsb2F0KGludGVnZXIgKyAoZnJhYyBvciAnJykgKyAoZXhwIG9y
ICcnKSkKLSAgICBlbHNlOgotICAgICAgICByZXMgPSBpbnQoaW50ZWdlcikKLSAgICByZXR1cm4g
cmVzLCBOb25lCi1wYXR0ZXJuKHInKC0/KD86MHxbMS05XVxkKikpKFwuXGQrKT8oW2VFXVstK10/
XGQrKT8nKShKU09OTnVtYmVyKQotCi1TVFJJTkdDSFVOSyA9IHJlLmNvbXBpbGUocicoLio/KShb
IlxcXSknLCBGTEFHUykKLUJBQ0tTTEFTSCA9IHsKLSAgICAnIic6IHUnIicsICdcXCc6IHUnXFwn
LCAnLyc6IHUnLycsCi0gICAgJ2InOiB1J1xiJywgJ2YnOiB1J1xmJywgJ24nOiB1J1xuJywgJ3In
OiB1J1xyJywgJ3QnOiB1J1x0JywKLX0KLQotREVGQVVMVF9FTkNPRElORyA9ICJ1dGYtOCIKLQot
ZGVmIHNjYW5zdHJpbmcocywgZW5kLCBlbmNvZGluZz1Ob25lLCBfYj1CQUNLU0xBU0gsIF9tPVNU
UklOR0NIVU5LLm1hdGNoKToKLSAgICBpZiBlbmNvZGluZyBpcyBOb25lOgotICAgICAgICBlbmNv
ZGluZyA9IERFRkFVTFRfRU5DT0RJTkcKLSAgICBjaHVua3MgPSBbXQotICAgIF9hcHBlbmQgPSBj
aHVua3MuYXBwZW5kCi0gICAgYmVnaW4gPSBlbmQgLSAxCi0gICAgd2hpbGUgMToKLSAgICAgICAg
Y2h1bmsgPSBfbShzLCBlbmQpCi0gICAgICAgIGlmIGNodW5rIGlzIE5vbmU6Ci0gICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKAotICAgICAgICAgICAgICAgIGVycm1zZygiVW50ZXJtaW5hdGVk
IHN0cmluZyBzdGFydGluZyBhdCIsIHMsIGJlZ2luKSkKLSAgICAgICAgZW5kID0gY2h1bmsuZW5k
KCkKLSAgICAgICAgY29udGVudCwgdGVybWluYXRvciA9IGNodW5rLmdyb3VwcygpCi0gICAgICAg
IGlmIGNvbnRlbnQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjb250ZW50LCB1bmlj
b2RlKToKLSAgICAgICAgICAgICAgICBjb250ZW50ID0gdW5pY29kZShjb250ZW50LCBlbmNvZGlu
ZykKLSAgICAgICAgICAgIF9hcHBlbmQoY29udGVudCkKLSAgICAgICAgaWYgdGVybWluYXRvciA9
PSAnIic6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBlc2Mg
PSBzW2VuZF0KLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKAotICAgICAgICAgICAgICAgIGVycm1zZygiVW50ZXJtaW5hdGVkIHN0cmluZyBz
dGFydGluZyBhdCIsIHMsIGJlZ2luKSkKLSAgICAgICAgaWYgZXNjICE9ICd1JzoKLSAgICAgICAg
ICAgIHRyeToKLSAgICAgICAgICAgICAgICBtID0gX2JbZXNjXQotICAgICAgICAgICAgZXhjZXB0
IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCi0gICAgICAgICAg
ICAgICAgICAgIGVycm1zZygiSW52YWxpZCBcXGVzY2FwZTogJXIiICUgKGVzYywpLCBzLCBlbmQp
KQotICAgICAgICAgICAgZW5kICs9IDEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGVzYyA9
IHNbZW5kICsgMTplbmQgKyA1XQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG0g
PSB1bmljaHIoaW50KGVzYywgMTYpKQotICAgICAgICAgICAgICAgIGlmIGxlbihlc2MpICE9IDQg
b3Igbm90IGVzYy5pc2FsbnVtKCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoZXJybXNnKCJJbnZhbGlkIFxcdVhYWFggZXNjYXBlIiwgcywgZW5kKSkKLSAg
ICAgICAgICAgIGVuZCArPSA1Ci0gICAgICAgIF9hcHBlbmQobSkKLSAgICByZXR1cm4gdScnLmpv
aW4oY2h1bmtzKSwgZW5kCi0KLWRlZiBKU09OU3RyaW5nKG1hdGNoLCBjb250ZXh0KToKLSAgICBl
bmNvZGluZyA9IGdldGF0dHIoY29udGV4dCwgJ2VuY29kaW5nJywgTm9uZSkKLSAgICByZXR1cm4g
c2NhbnN0cmluZyhtYXRjaC5zdHJpbmcsIG1hdGNoLmVuZCgpLCBlbmNvZGluZykKLXBhdHRlcm4o
ciciJykoSlNPTlN0cmluZykKLQotV0hJVEVTUEFDRSA9IHJlLmNvbXBpbGUocidccyonLCBGTEFH
UykKLQotZGVmIEpTT05PYmplY3QobWF0Y2gsIGNvbnRleHQsIF93PVdISVRFU1BBQ0UubWF0Y2gp
OgotICAgIHBhaXJzID0ge30KLSAgICBzID0gbWF0Y2guc3RyaW5nCi0gICAgZW5kID0gX3cocywg
bWF0Y2guZW5kKCkpLmVuZCgpCi0gICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQotICAgICMg
dHJpdmlhbCBlbXB0eSBvYmplY3QKLSAgICBpZiBuZXh0Y2hhciA9PSAnfSc6Ci0gICAgICAgIHJl
dHVybiBwYWlycywgZW5kICsgMQotICAgIGlmIG5leHRjaGFyICE9ICciJzoKLSAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwgcywgZW5kKSkK
LSAgICBlbmQgKz0gMQotICAgIGVuY29kaW5nID0gZ2V0YXR0cihjb250ZXh0LCAnZW5jb2Rpbmcn
LCBOb25lKQotICAgIGl0ZXJzY2FuID0gSlNPTlNjYW5uZXIuaXRlcnNjYW4KLSAgICB3aGlsZSBU
cnVlOgotICAgICAgICBrZXksIGVuZCA9IHNjYW5zdHJpbmcocywgZW5kLCBlbmNvZGluZykKLSAg
ICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQoKQotICAgICAgICBpZiBzW2VuZDplbmQgKyAxXSAh
PSAnOic6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIDog
ZGVsaW1pdGVyIiwgcywgZW5kKSkKLSAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkK
LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUsIGVuZCA9IGl0ZXJzY2FuKHMsIGlkeD1l
bmQsIGNvbnRleHQ9Y29udGV4dCkubmV4dCgpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9u
OgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBvYmplY3Qi
LCBzLCBlbmQpKQotICAgICAgICBwYWlyc1trZXldID0gdmFsdWUKLSAgICAgICAgZW5kID0gX3co
cywgZW5kKS5lbmQoKQotICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCi0gICAgICAg
IGVuZCArPSAxCi0gICAgICAgIGlmIG5leHRjaGFyID09ICd9JzoKLSAgICAgICAgICAgIGJyZWFr
Ci0gICAgICAgIGlmIG5leHRjaGFyICE9ICcsJzoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoZXJybXNnKCJFeHBlY3RpbmcgLCBkZWxpbWl0ZXIiLCBzLCBlbmQgLSAxKSkKLSAgICAgICAg
ZW5kID0gX3cocywgZW5kKS5lbmQoKQotICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFd
Ci0gICAgICAgIGVuZCArPSAxCi0gICAgICAgIGlmIG5leHRjaGFyICE9ICciJzoKLSAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSIsIHMs
IGVuZCAtIDEpKQotICAgIG9iamVjdF9ob29rID0gZ2V0YXR0cihjb250ZXh0LCAnb2JqZWN0X2hv
b2snLCBOb25lKQotICAgIGlmIG9iamVjdF9ob29rIGlzIG5vdCBOb25lOgotICAgICAgICBwYWly
cyA9IG9iamVjdF9ob29rKHBhaXJzKQotICAgIHJldHVybiBwYWlycywgZW5kCi1wYXR0ZXJuKHIn
eycpKEpTT05PYmplY3QpCi0gICAgICAgICAgICAKLWRlZiBKU09OQXJyYXkobWF0Y2gsIGNvbnRl
eHQsIF93PVdISVRFU1BBQ0UubWF0Y2gpOgotICAgIHZhbHVlcyA9IFtdCi0gICAgcyA9IG1hdGNo
LnN0cmluZwotICAgIGVuZCA9IF93KHMsIG1hdGNoLmVuZCgpKS5lbmQoKQotICAgICMgbG9vay1h
aGVhZCBmb3IgdHJpdmlhbCBlbXB0eSBhcnJheQotICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsg
MV0KLSAgICBpZiBuZXh0Y2hhciA9PSAnXSc6Ci0gICAgICAgIHJldHVybiB2YWx1ZXMsIGVuZCAr
IDEKLSAgICBpdGVyc2NhbiA9IEpTT05TY2FubmVyLml0ZXJzY2FuCi0gICAgd2hpbGUgVHJ1ZToK
LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUsIGVuZCA9IGl0ZXJzY2FuKHMsIGlkeD1l
bmQsIGNvbnRleHQ9Y29udGV4dCkubmV4dCgpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9u
OgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBvYmplY3Qi
LCBzLCBlbmQpKQotICAgICAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKQotICAgICAgICBlbmQgPSBf
dyhzLCBlbmQpLmVuZCgpCi0gICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KLSAgICAg
ICAgZW5kICs9IDEKLSAgICAgICAgaWYgbmV4dGNoYXIgPT0gJ10nOgotICAgICAgICAgICAgYnJl
YWsKLSAgICAgICAgaWYgbmV4dGNoYXIgIT0gJywnOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcihlcnJtc2coIkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHMsIGVuZCkpCi0gICAgICAgIGVu
ZCA9IF93KHMsIGVuZCkuZW5kKCkKLSAgICByZXR1cm4gdmFsdWVzLCBlbmQKLXBhdHRlcm4ocidc
WycpKEpTT05BcnJheSkKLSAKLUFOWVRISU5HID0gWwotICAgIEpTT05PYmplY3QsCi0gICAgSlNP
TkFycmF5LAotICAgIEpTT05TdHJpbmcsCi0gICAgSlNPTkNvbnN0YW50LAotICAgIEpTT05OdW1i
ZXIsCi1dCi0KLUpTT05TY2FubmVyID0gU2Nhbm5lcihBTllUSElORykKLQotY2xhc3MgSlNPTkRl
Y29kZXIob2JqZWN0KToKLSAgICAiIiIKLSAgICBTaW1wbGUgSlNPTiA8aHR0cDovL2pzb24ub3Jn
PiBkZWNvZGVyCi0KLSAgICBQZXJmb3JtcyB0aGUgZm9sbG93aW5nIHRyYW5zbGF0aW9ucyBpbiBk
ZWNvZGluZzoKLSAgICAKLSAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0r
Ci0gICAgfCBKU09OICAgICAgICAgIHwgUHl0aG9uICAgICAgICAgICAgfAotICAgICs9PT09PT09
PT09PT09PT0rPT09PT09PT09PT09PT09PT09PSsKLSAgICB8IG9iamVjdCAgICAgICAgfCBkaWN0
ICAgICAgICAgICAgICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t
KwotICAgIHwgYXJyYXkgICAgICAgICB8IGxpc3QgICAgICAgICAgICAgIHwKLSAgICArLS0tLS0t
LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgfCBzdHJpbmcgICAgICAgIHwgdW5p
Y29kZSAgICAgICAgICAgfAotICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t
LSsKLSAgICB8IG51bWJlciAoaW50KSAgfCBpbnQsIGxvbmcgICAgICAgICB8Ci0gICAgKy0tLS0t
LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgIHwgbnVtYmVyIChyZWFsKSB8IGZs
b2F0ICAgICAgICAgICAgIHwKLSAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t
LS0rCi0gICAgfCB0cnVlICAgICAgICAgIHwgVHJ1ZSAgICAgICAgICAgICAgfAotICAgICstLS0t
LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICB8IGZhbHNlICAgICAgICAgfCBG
YWxzZSAgICAgICAgICAgICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t
LS0tKwotICAgIHwgbnVsbCAgICAgICAgICB8IE5vbmUgICAgICAgICAgICAgIHwKLSAgICArLS0t
LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLSAgICBJdCBhbHNvIHVuZGVyc3Rh
bmRzIGBgTmFOYGAsIGBgSW5maW5pdHlgYCwgYW5kIGBgLUluZmluaXR5YGAgYXMKLSAgICB0aGVp
ciBjb3JyZXNwb25kaW5nIGBgZmxvYXRgYCB2YWx1ZXMsIHdoaWNoIGlzIG91dHNpZGUgdGhlIEpT
T04gc3BlYy4KLSAgICAiIiIKLQotICAgIF9zY2FubmVyID0gU2Nhbm5lcihBTllUSElORykKLSAg
ICBfX2FsbF9fID0gWydfX2luaXRfXycsICdkZWNvZGUnLCAncmF3X2RlY29kZSddCi0KLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgZW5jb2Rpbmc9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSk6Ci0gICAg
ICAgICIiIgotICAgICAgICBgYGVuY29kaW5nYGAgZGV0ZXJtaW5lcyB0aGUgZW5jb2RpbmcgdXNl
ZCB0byBpbnRlcnByZXQgYW55IGBgc3RyYGAKLSAgICAgICAgb2JqZWN0cyBkZWNvZGVkIGJ5IHRo
aXMgaW5zdGFuY2UgKHV0Zi04IGJ5IGRlZmF1bHQpLiAgSXQgaGFzIG5vCi0gICAgICAgIGVmZmVj
dCB3aGVuIGRlY29kaW5nIGBgdW5pY29kZWBgIG9iamVjdHMuCi0gICAgICAgIAotICAgICAgICBO
b3RlIHRoYXQgY3VycmVudGx5IG9ubHkgZW5jb2RpbmdzIHRoYXQgYXJlIGEgc3VwZXJzZXQgb2Yg
QVNDSUkgd29yaywKLSAgICAgICAgc3RyaW5ncyBvZiBvdGhlciBlbmNvZGluZ3Mgc2hvdWxkIGJl
IHBhc3NlZCBpbiBhcyBgYHVuaWNvZGVgYC4KLQotICAgICAgICBgYG9iamVjdF9ob29rYGAsIGlm
IHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0Ci0gICAgICAgIG9mIGV2
ZXJ5IEpTT04gb2JqZWN0IGRlY29kZWQgYW5kIGl0cyByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2Vk
IGluCi0gICAgICAgIHBsYWNlIG9mIHRoZSBnaXZlbiBgYGRpY3RgYC4gIFRoaXMgY2FuIGJlIHVz
ZWQgdG8gcHJvdmlkZSBjdXN0b20KLSAgICAgICAgZGVzZXJpYWxpemF0aW9ucyAoZS5nLiB0byBz
dXBwb3J0IEpTT04tUlBDIGNsYXNzIGhpbnRpbmcpLgotICAgICAgICAiIiIKLSAgICAgICAgc2Vs
Zi5lbmNvZGluZyA9IGVuY29kaW5nCi0gICAgICAgIHNlbGYub2JqZWN0X2hvb2sgPSBvYmplY3Rf
aG9vawotCi0gICAgZGVmIGRlY29kZShzZWxmLCBzLCBfdz1XSElURVNQQUNFLm1hdGNoKToKLSAg
ICAgICAgIiIiCi0gICAgICAgIFJldHVybiB0aGUgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIGBg
c2BgIChhIGBgc3RyYGAgb3IgYGB1bmljb2RlYGAKLSAgICAgICAgaW5zdGFuY2UgY29udGFpbmlu
ZyBhIEpTT04gZG9jdW1lbnQpCi0gICAgICAgICIiIgotICAgICAgICBvYmosIGVuZCA9IHNlbGYu
cmF3X2RlY29kZShzLCBpZHg9X3cocywgMCkuZW5kKCkpCi0gICAgICAgIGVuZCA9IF93KHMsIGVu
ZCkuZW5kKCkKLSAgICAgICAgaWYgZW5kICE9IGxlbihzKToKLSAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoZXJybXNnKCJFeHRyYSBkYXRhIiwgcywgZW5kLCBsZW4ocykpKQotICAgICAgICBy
ZXR1cm4gb2JqCi0KLSAgICBkZWYgcmF3X2RlY29kZShzZWxmLCBzLCAqKmt3KToKLSAgICAgICAg
IiIiCi0gICAgICAgIERlY29kZSBhIEpTT04gZG9jdW1lbnQgZnJvbSBgYHNgYCAoYSBgYHN0cmBg
IG9yIGBgdW5pY29kZWBgIGJlZ2lubmluZwotICAgICAgICB3aXRoIGEgSlNPTiBkb2N1bWVudCkg
YW5kIHJldHVybiBhIDItdHVwbGUgb2YgdGhlIFB5dGhvbgotICAgICAgICByZXByZXNlbnRhdGlv
biBhbmQgdGhlIGluZGV4IGluIGBgc2BgIHdoZXJlIHRoZSBkb2N1bWVudCBlbmRlZC4KLQotICAg
ICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGRlY29kZSBhIEpTT04gZG9jdW1lbnQgZnJvbSBhIHN0
cmluZyB0aGF0IG1heQotICAgICAgICBoYXZlIGV4dHJhbmVvdXMgZGF0YSBhdCB0aGUgZW5kLgot
ICAgICAgICAiIiIKLSAgICAgICAga3cuc2V0ZGVmYXVsdCgnY29udGV4dCcsIHNlbGYpCi0gICAg
ICAgIHRyeToKLSAgICAgICAgICAgIG9iaiwgZW5kID0gc2VsZi5fc2Nhbm5lci5pdGVyc2Nhbihz
LCAqKmt3KS5uZXh0KCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCJObyBKU09OIG9iamVjdCBjb3VsZCBiZSBkZWNvZGVkIikKLSAg
ICAgICAgcmV0dXJuIG9iaiwgZW5kCi0KLV9fYWxsX18gPSBbJ0pTT05EZWNvZGVyJ10KSW5kZXg6
IFdlYktpdFRvb2xzL3NpbXBsZWpzb24vZW5jb2Rlci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9zaW1wbGVqc29uL2VuY29kZXIucHkJKHJldmlzaW9uIDU1MDU0KQorKysgV2ViS2l0VG9v
bHMvc2ltcGxlanNvbi9lbmNvZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM3MSArMCwwIEBA
Ci0iIiIKLUltcGxlbWVudGF0aW9uIG9mIEpTT05FbmNvZGVyCi0iIiIKLWltcG9ydCByZQotdHJ5
OgotICAgIGZyb20gc2ltcGxlanNvbiBpbXBvcnQgX3NwZWVkdXBzCi1leGNlcHQgSW1wb3J0RXJy
b3I6Ci0gICAgX3NwZWVkdXBzID0gTm9uZQotCi1FU0NBUEUgPSByZS5jb21waWxlKHInW1x4MDAt
XHgxOVxcIlxiXGZcblxyXHRdJykKLUVTQ0FQRV9BU0NJSSA9IHJlLmNvbXBpbGUocicoW1xcIi9d
fFteXCAtfl0pJykKLUVTQ0FQRV9EQ1QgPSB7Ci0gICAgIyBlc2NhcGUgYWxsIGZvcndhcmQgc2xh
c2hlcyB0byBwcmV2ZW50IDwvc2NyaXB0PiBhdHRhY2sKLSAgICAnLyc6ICdcXC8nLAotICAgICdc
XCc6ICdcXFxcJywKLSAgICAnIic6ICdcXCInLAotICAgICdcYic6ICdcXGInLAotICAgICdcZic6
ICdcXGYnLAotICAgICdcbic6ICdcXG4nLAotICAgICdccic6ICdcXHInLAotICAgICdcdCc6ICdc
XHQnLAotfQotZm9yIGkgaW4gcmFuZ2UoMHgyMCk6Ci0gICAgRVNDQVBFX0RDVC5zZXRkZWZhdWx0
KGNocihpKSwgJ1xcdSUwNHgnICUgKGksKSkKLQotIyBhc3N1bWUgdGhpcyBwcm9kdWNlcyBhbiBp
bmZpbml0eSBvbiBhbGwgbWFjaGluZXMgKHByb2JhYmx5IG5vdCBndWFyYW50ZWVkKQotSU5GSU5J
VFkgPSBmbG9hdCgnMWU2NjY2NicpCi0KLWRlZiBmbG9hdHN0cihvLCBhbGxvd19uYW49VHJ1ZSk6
Ci0gICAgIyBDaGVjayBmb3Igc3BlY2lhbHMuICBOb3RlIHRoYXQgdGhpcyB0eXBlIG9mIHRlc3Qg
aXMgcHJvY2Vzc29yLSBhbmQvb3IKLSAgICAjIHBsYXRmb3JtLXNwZWNpZmljLCBzbyBkbyB0ZXN0
cyB3aGljaCBkb24ndCBkZXBlbmQgb24gdGhlIGludGVybmFscy4KLQotICAgIGlmIG8gIT0gbzoK
LSAgICAgICAgdGV4dCA9ICdOYU4nCi0gICAgZWxpZiBvID09IElORklOSVRZOgotICAgICAgICB0
ZXh0ID0gJ0luZmluaXR5JwotICAgIGVsaWYgbyA9PSAtSU5GSU5JVFk6Ci0gICAgICAgIHRleHQg
PSAnLUluZmluaXR5JwotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiByZXByKG8pCi0KLSAgICBp
ZiBub3QgYWxsb3dfbmFuOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJPdXQgb2YgcmFuZ2Ug
ZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQ6ICVyIgotICAgICAgICAgICAgJSAo
bywpKQotCi0gICAgcmV0dXJuIHRleHQKLQotCi1kZWYgZW5jb2RlX2Jhc2VzdHJpbmcocyk6Ci0g
ICAgIiIiCi0gICAgUmV0dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBzdHJp
bmcKLSAgICAiIiIKLSAgICBkZWYgcmVwbGFjZShtYXRjaCk6Ci0gICAgICAgIHJldHVybiBFU0NB
UEVfRENUW21hdGNoLmdyb3VwKDApXQotICAgIHJldHVybiAnIicgKyBFU0NBUEUuc3ViKHJlcGxh
Y2UsIHMpICsgJyInCi0KLWRlZiBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaShzKToKLSAgICBkZWYg
cmVwbGFjZShtYXRjaCk6Ci0gICAgICAgIHMgPSBtYXRjaC5ncm91cCgwKQotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICByZXR1cm4gRVNDQVBFX0RDVFtzXQotICAgICAgICBleGNlcHQgS2V5RXJy
b3I6Ci0gICAgICAgICAgICBuID0gb3JkKHMpCi0gICAgICAgICAgICBpZiBuIDwgMHgxMDAwMDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdSUwNHgnICUgKG4sKQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICAjIHN1cnJvZ2F0ZSBwYWlyCi0gICAgICAgICAgICAgICAgbiAt
PSAweDEwMDAwCi0gICAgICAgICAgICAgICAgczEgPSAweGQ4MDAgfCAoKG4gPj4gMTApICYgMHgz
ZmYpCi0gICAgICAgICAgICAgICAgczIgPSAweGRjMDAgfCAobiAmIDB4M2ZmKQotICAgICAgICAg
ICAgICAgIHJldHVybiAnXFx1JTA0eFxcdSUwNHgnICUgKHMxLCBzMikKLSAgICByZXR1cm4gJyIn
ICsgc3RyKEVTQ0FQRV9BU0NJSS5zdWIocmVwbGFjZSwgcykpICsgJyInCi0gICAgICAgIAotdHJ5
OgotICAgIGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpID0gX3NwZWVkdXBzLmVuY29kZV9iYXNlc3Ry
aW5nX2FzY2lpCi0gICAgX25lZWRfdXRmOCA9IFRydWUKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoK
LSAgICBfbmVlZF91dGY4ID0gRmFsc2UKLQotY2xhc3MgSlNPTkVuY29kZXIob2JqZWN0KToKLSAg
ICAiIiIKLSAgICBFeHRlbnNpYmxlIEpTT04gPGh0dHA6Ly9qc29uLm9yZz4gZW5jb2RlciBmb3Ig
UHl0aG9uIGRhdGEgc3RydWN0dXJlcy4KLQotICAgIFN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgb2Jq
ZWN0cyBhbmQgdHlwZXMgYnkgZGVmYXVsdDoKLSAgICAKLSAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LSstLS0tLS0tLS0tLS0tLS0rCi0gICAgfCBQeXRob24gICAgICAgICAgICB8IEpTT04gICAgICAg
ICAgfAotICAgICs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSsKLSAgICB8IGRp
Y3QgICAgICAgICAgICAgIHwgb2JqZWN0ICAgICAgICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0rLS0tLS0tLS0tLS0tLS0tKwotICAgIHwgbGlzdCwgdHVwbGUgICAgICAgfCBhcnJheSAgICAg
ICAgIHwKLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgfCBz
dHIsIHVuaWNvZGUgICAgICB8IHN0cmluZyAgICAgICAgfAotICAgICstLS0tLS0tLS0tLS0tLS0t
LS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICB8IGludCwgbG9uZywgZmxvYXQgIHwgbnVtYmVyICAg
ICAgICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgIHwg
VHJ1ZSAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAgIHwKLSAgICArLS0tLS0tLS0tLS0tLS0t
LS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgfCBGYWxzZSAgICAgICAgICAgICB8IGZhbHNlICAg
ICAgICAgfAotICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICB8
IE5vbmUgICAgICAgICAgICAgIHwgbnVsbCAgICAgICAgICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0t
LS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotCi0gICAgVG8gZXh0ZW5kIHRoaXMgdG8gcmVjb2duaXpl
IG90aGVyIG9iamVjdHMsIHN1YmNsYXNzIGFuZCBpbXBsZW1lbnQgYQotICAgIGBgLmRlZmF1bHQo
KWBgIG1ldGhvZCB3aXRoIGFub3RoZXIgbWV0aG9kIHRoYXQgcmV0dXJucyBhIHNlcmlhbGl6YWJs
ZQotICAgIG9iamVjdCBmb3IgYGBvYGAgaWYgcG9zc2libGUsIG90aGVyd2lzZSBpdCBzaG91bGQg
Y2FsbCB0aGUgc3VwZXJjbGFzcwotICAgIGltcGxlbWVudGF0aW9uICh0byByYWlzZSBgYFR5cGVF
cnJvcmBgKS4KLSAgICAiIiIKLSAgICBfX2FsbF9fID0gWydfX2luaXRfXycsICdkZWZhdWx0Jywg
J2VuY29kZScsICdpdGVyZW5jb2RlJ10KLSAgICBpdGVtX3NlcGFyYXRvciA9ICcsICcKLSAgICBr
ZXlfc2VwYXJhdG9yID0gJzogJwotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBza2lwa2V5cz1GYWxz
ZSwgZW5zdXJlX2FzY2lpPVRydWUsCi0gICAgICAgICAgICBjaGVja19jaXJjdWxhcj1UcnVlLCBh
bGxvd19uYW49VHJ1ZSwgc29ydF9rZXlzPUZhbHNlLAotICAgICAgICAgICAgaW5kZW50PU5vbmUs
IHNlcGFyYXRvcnM9Tm9uZSwgZW5jb2Rpbmc9J3V0Zi04Jyk6Ci0gICAgICAgICIiIgotICAgICAg
ICBDb25zdHJ1Y3RvciBmb3IgSlNPTkVuY29kZXIsIHdpdGggc2Vuc2libGUgZGVmYXVsdHMuCi0K
LSAgICAgICAgSWYgc2tpcGtleXMgaXMgRmFsc2UsIHRoZW4gaXQgaXMgYSBUeXBlRXJyb3IgdG8g
YXR0ZW1wdAotICAgICAgICBlbmNvZGluZyBvZiBrZXlzIHRoYXQgYXJlIG5vdCBzdHIsIGludCwg
bG9uZywgZmxvYXQgb3IgTm9uZS4gIElmCi0gICAgICAgIHNraXBrZXlzIGlzIFRydWUsIHN1Y2gg
aXRlbXMgYXJlIHNpbXBseSBza2lwcGVkLgotCi0gICAgICAgIElmIGVuc3VyZV9hc2NpaSBpcyBU
cnVlLCB0aGUgb3V0cHV0IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RyCi0gICAgICAgIG9iamVjdHMg
d2l0aCBhbGwgaW5jb21pbmcgdW5pY29kZSBjaGFyYWN0ZXJzIGVzY2FwZWQuICBJZgotICAgICAg
ICBlbnN1cmVfYXNjaWkgaXMgZmFsc2UsIHRoZSBvdXRwdXQgd2lsbCBiZSB1bmljb2RlIG9iamVj
dC4KLQotICAgICAgICBJZiBjaGVja19jaXJjdWxhciBpcyBUcnVlLCB0aGVuIGxpc3RzLCBkaWN0
cywgYW5kIGN1c3RvbSBlbmNvZGVkCi0gICAgICAgIG9iamVjdHMgd2lsbCBiZSBjaGVja2VkIGZv
ciBjaXJjdWxhciByZWZlcmVuY2VzIGR1cmluZyBlbmNvZGluZyB0bwotICAgICAgICBwcmV2ZW50
IGFuIGluZmluaXRlIHJlY3Vyc2lvbiAod2hpY2ggd291bGQgY2F1c2UgYW4gT3ZlcmZsb3dFcnJv
cikuCi0gICAgICAgIE90aGVyd2lzZSwgbm8gc3VjaCBjaGVjayB0YWtlcyBwbGFjZS4KLQotICAg
ICAgICBJZiBhbGxvd19uYW4gaXMgVHJ1ZSwgdGhlbiBOYU4sIEluZmluaXR5LCBhbmQgLUluZmlu
aXR5IHdpbGwgYmUKLSAgICAgICAgZW5jb2RlZCBhcyBzdWNoLiAgVGhpcyBiZWhhdmlvciBpcyBu
b3QgSlNPTiBzcGVjaWZpY2F0aW9uIGNvbXBsaWFudCwKLSAgICAgICAgYnV0IGlzIGNvbnNpc3Rl
bnQgd2l0aCBtb3N0IEphdmFTY3JpcHQgYmFzZWQgZW5jb2RlcnMgYW5kIGRlY29kZXJzLgotICAg
ICAgICBPdGhlcndpc2UsIGl0IHdpbGwgYmUgYSBWYWx1ZUVycm9yIHRvIGVuY29kZSBzdWNoIGZs
b2F0cy4KLQotICAgICAgICBJZiBzb3J0X2tleXMgaXMgVHJ1ZSwgdGhlbiB0aGUgb3V0cHV0IG9m
IGRpY3Rpb25hcmllcyB3aWxsIGJlCi0gICAgICAgIHNvcnRlZCBieSBrZXk7IHRoaXMgaXMgdXNl
ZnVsIGZvciByZWdyZXNzaW9uIHRlc3RzIHRvIGVuc3VyZQotICAgICAgICB0aGF0IEpTT04gc2Vy
aWFsaXphdGlvbnMgY2FuIGJlIGNvbXBhcmVkIG9uIGEgZGF5LXRvLWRheSBiYXNpcy4KLQotICAg
ICAgICBJZiBpbmRlbnQgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5
Ci0gICAgICAgIGVsZW1lbnRzIGFuZCBvYmplY3QgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmlu
dGVkIHdpdGggdGhhdAotICAgICAgICBpbmRlbnQgbGV2ZWwuICBBbiBpbmRlbnQgbGV2ZWwgb2Yg
MCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLgotICAgICAgICBOb25lIGlzIHRoZSBtb3N0IGNv
bXBhY3QgcmVwcmVzZW50YXRpb24uCi0KLSAgICAgICAgSWYgc3BlY2lmaWVkLCBzZXBhcmF0b3Jz
IHNob3VsZCBiZSBhIChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcikKLSAgICAgICAgdHVw
bGUuIFRoZSBkZWZhdWx0IGlzICgnLCAnLCAnOiAnKS4gVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3Qg
SlNPTgotICAgICAgICByZXByZXNlbnRhdGlvbiB5b3Ugc2hvdWxkIHNwZWNpZnkgKCcsJywgJzon
KSB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KLQotICAgICAgICBJZiBlbmNvZGluZyBpcyBub3Qg
Tm9uZSwgdGhlbiBhbGwgaW5wdXQgc3RyaW5ncyB3aWxsIGJlCi0gICAgICAgIHRyYW5zZm9ybWVk
IGludG8gdW5pY29kZSB1c2luZyB0aGF0IGVuY29kaW5nIHByaW9yIHRvIEpTT04tZW5jb2Rpbmcu
IAotICAgICAgICBUaGUgZGVmYXVsdCBpcyBVVEYtOC4KLSAgICAgICAgIiIiCi0KLSAgICAgICAg
c2VsZi5za2lwa2V5cyA9IHNraXBrZXlzCi0gICAgICAgIHNlbGYuZW5zdXJlX2FzY2lpID0gZW5z
dXJlX2FzY2lpCi0gICAgICAgIHNlbGYuY2hlY2tfY2lyY3VsYXIgPSBjaGVja19jaXJjdWxhcgot
ICAgICAgICBzZWxmLmFsbG93X25hbiA9IGFsbG93X25hbgotICAgICAgICBzZWxmLnNvcnRfa2V5
cyA9IHNvcnRfa2V5cwotICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAotICAgICAgICBzZWxm
LmN1cnJlbnRfaW5kZW50X2xldmVsID0gMAotICAgICAgICBpZiBzZXBhcmF0b3JzIGlzIG5vdCBO
b25lOgotICAgICAgICAgICAgc2VsZi5pdGVtX3NlcGFyYXRvciwgc2VsZi5rZXlfc2VwYXJhdG9y
ID0gc2VwYXJhdG9ycwotICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKLQotICAgIGRl
ZiBfbmV3bGluZV9pbmRlbnQoc2VsZik6Ci0gICAgICAgIHJldHVybiAnXG4nICsgKCcgJyAqIChz
ZWxmLmluZGVudCAqIHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwpKQotCi0gICAgZGVmIF9pdGVy
ZW5jb2RlX2xpc3Qoc2VsZiwgbHN0LCBtYXJrZXJzPU5vbmUpOgotICAgICAgICBpZiBub3QgbHN0
OgotICAgICAgICAgICAgeWllbGQgJ1tdJwotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlm
IG1hcmtlcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBtYXJrZXJpZCA9IGlkKGxzdCkKLSAg
ICAgICAgICAgIGlmIG1hcmtlcmlkIGluIG1hcmtlcnM6Ci0gICAgICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIikKLSAgICAgICAgICAgIG1h
cmtlcnNbbWFya2VyaWRdID0gbHN0Ci0gICAgICAgIHlpZWxkICdbJwotICAgICAgICBpZiBzZWxm
LmluZGVudCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY3VycmVudF9pbmRlbnRfbGV2
ZWwgKz0gMQotICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSBzZWxmLl9uZXdsaW5lX2luZGVu
dCgpCi0gICAgICAgICAgICBzZXBhcmF0b3IgPSBzZWxmLml0ZW1fc2VwYXJhdG9yICsgbmV3bGlu
ZV9pbmRlbnQKLSAgICAgICAgICAgIHlpZWxkIG5ld2xpbmVfaW5kZW50Ci0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9IE5vbmUKLSAgICAgICAgICAgIHNlcGFyYXRv
ciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IKLSAgICAgICAgZmlyc3QgPSBUcnVlCi0gICAgICAgIGZv
ciB2YWx1ZSBpbiBsc3Q6Ci0gICAgICAgICAgICBpZiBmaXJzdDoKLSAgICAgICAgICAgICAgICBm
aXJzdCA9IEZhbHNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHlpZWxkIHNl
cGFyYXRvcgotICAgICAgICAgICAgZm9yIGNodW5rIGluIHNlbGYuX2l0ZXJlbmNvZGUodmFsdWUs
IG1hcmtlcnMpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCi0gICAgICAgIGlmIG5ld2xp
bmVfaW5kZW50IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5jdXJyZW50X2luZGVudF9s
ZXZlbCAtPSAxCi0gICAgICAgICAgICB5aWVsZCBzZWxmLl9uZXdsaW5lX2luZGVudCgpCi0gICAg
ICAgIHlpZWxkICddJwotICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgotICAgICAgICAg
ICAgZGVsIG1hcmtlcnNbbWFya2VyaWRdCi0KLSAgICBkZWYgX2l0ZXJlbmNvZGVfZGljdChzZWxm
LCBkY3QsIG1hcmtlcnM9Tm9uZSk6Ci0gICAgICAgIGlmIG5vdCBkY3Q6Ci0gICAgICAgICAgICB5
aWVsZCAne30nCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbWFya2VycyBpcyBub3Qg
Tm9uZToKLSAgICAgICAgICAgIG1hcmtlcmlkID0gaWQoZGN0KQotICAgICAgICAgICAgaWYgbWFy
a2VyaWQgaW4gbWFya2VyczoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJj
dWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQotICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0g
PSBkY3QKLSAgICAgICAgeWllbGQgJ3snCi0gICAgICAgIGtleV9zZXBhcmF0b3IgPSBzZWxmLmtl
eV9zZXBhcmF0b3IKLSAgICAgICAgaWYgc2VsZi5pbmRlbnQgaXMgbm90IE5vbmU6Ci0gICAgICAg
ICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsICs9IDEKLSAgICAgICAgICAgIG5ld2xpbmVf
aW5kZW50ID0gc2VsZi5fbmV3bGluZV9pbmRlbnQoKQotICAgICAgICAgICAgaXRlbV9zZXBhcmF0
b3IgPSBzZWxmLml0ZW1fc2VwYXJhdG9yICsgbmV3bGluZV9pbmRlbnQKLSAgICAgICAgICAgIHlp
ZWxkIG5ld2xpbmVfaW5kZW50Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuZXdsaW5lX2lu
ZGVudCA9IE5vbmUKLSAgICAgICAgICAgIGl0ZW1fc2VwYXJhdG9yID0gc2VsZi5pdGVtX3NlcGFy
YXRvcgotICAgICAgICBmaXJzdCA9IFRydWUKLSAgICAgICAgaWYgc2VsZi5lbnN1cmVfYXNjaWk6
Ci0gICAgICAgICAgICBlbmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIGVuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZwotICAgICAgICBh
bGxvd19uYW4gPSBzZWxmLmFsbG93X25hbgotICAgICAgICBpZiBzZWxmLnNvcnRfa2V5czoKLSAg
ICAgICAgICAgIGtleXMgPSBkY3Qua2V5cygpCi0gICAgICAgICAgICBrZXlzLnNvcnQoKQotICAg
ICAgICAgICAgaXRlbXMgPSBbKGssIGRjdFtrXSkgZm9yIGsgaW4ga2V5c10KLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIGl0ZW1zID0gZGN0Lml0ZXJpdGVtcygpCi0gICAgICAgIF9lbmNvZGlu
ZyA9IHNlbGYuZW5jb2RpbmcKLSAgICAgICAgX2RvX2RlY29kZSA9IChfZW5jb2RpbmcgaXMgbm90
IE5vbmUKLSAgICAgICAgICAgIGFuZCBub3QgKF9uZWVkX3V0ZjggYW5kIF9lbmNvZGluZyA9PSAn
dXRmLTgnKSkKLSAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gaXRlbXM6Ci0gICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKGtleSwgc3RyKToKLSAgICAgICAgICAgICAgICBpZiBfZG9fZGVjb2RlOgot
ICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkuZGVjb2RlKF9lbmNvZGluZykKLSAgICAgICAg
ICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgICAgIHBh
c3MKLSAgICAgICAgICAgICMgSmF2YVNjcmlwdCBpcyB3ZWFrbHkgdHlwZWQgZm9yIHRoZXNlLCBz
byBpdCBtYWtlcyBzZW5zZSB0bwotICAgICAgICAgICAgIyBhbHNvIGFsbG93IHRoZW0uICBNYW55
IGVuY29kZXJzIHNlZW0gdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpcy4KLSAgICAgICAgICAgIGVs
aWYgaXNpbnN0YW5jZShrZXksIGZsb2F0KToKLSAgICAgICAgICAgICAgICBrZXkgPSBmbG9hdHN0
cihrZXksIGFsbG93X25hbikKLSAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIChpbnQs
IGxvbmcpKToKLSAgICAgICAgICAgICAgICBrZXkgPSBzdHIoa2V5KQotICAgICAgICAgICAgZWxp
ZiBrZXkgaXMgVHJ1ZToKLSAgICAgICAgICAgICAgICBrZXkgPSAndHJ1ZScKLSAgICAgICAgICAg
IGVsaWYga2V5IGlzIEZhbHNlOgotICAgICAgICAgICAgICAgIGtleSA9ICdmYWxzZScKLSAgICAg
ICAgICAgIGVsaWYga2V5IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAga2V5ID0gJ251bGwnCi0g
ICAgICAgICAgICBlbGlmIHNlbGYuc2tpcGtleXM6Ci0gICAgICAgICAgICAgICAgY29udGludWUK
LSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXkg
JXIgaXMgbm90IGEgc3RyaW5nIiAlIChrZXksKSkKLSAgICAgICAgICAgIGlmIGZpcnN0OgotICAg
ICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgeWllbGQgaXRlbV9zZXBhcmF0b3IKLSAgICAgICAgICAgIHlpZWxkIGVuY29kZXIoa2V5
KQotICAgICAgICAgICAgeWllbGQga2V5X3NlcGFyYXRvcgotICAgICAgICAgICAgZm9yIGNodW5r
IGluIHNlbGYuX2l0ZXJlbmNvZGUodmFsdWUsIG1hcmtlcnMpOgotICAgICAgICAgICAgICAgIHlp
ZWxkIGNodW5rCi0gICAgICAgIGlmIG5ld2xpbmVfaW5kZW50IGlzIG5vdCBOb25lOgotICAgICAg
ICAgICAgc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCAtPSAxCi0gICAgICAgICAgICB5aWVsZCBz
ZWxmLl9uZXdsaW5lX2luZGVudCgpCi0gICAgICAgIHlpZWxkICd9JwotICAgICAgICBpZiBtYXJr
ZXJzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZGVsIG1hcmtlcnNbbWFya2VyaWRdCi0KLSAg
ICBkZWYgX2l0ZXJlbmNvZGUoc2VsZiwgbywgbWFya2Vycz1Ob25lKToKLSAgICAgICAgaWYgaXNp
bnN0YW5jZShvLCBiYXNlc3RyaW5nKToKLSAgICAgICAgICAgIGlmIHNlbGYuZW5zdXJlX2FzY2lp
OgotICAgICAgICAgICAgICAgIGVuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBlbmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJp
bmcKLSAgICAgICAgICAgIF9lbmNvZGluZyA9IHNlbGYuZW5jb2RpbmcKLSAgICAgICAgICAgIGlm
IChfZW5jb2RpbmcgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2Uobywgc3RyKQotICAgICAgICAg
ICAgICAgICAgICBhbmQgbm90IChfbmVlZF91dGY4IGFuZCBfZW5jb2RpbmcgPT0gJ3V0Zi04Jykp
OgotICAgICAgICAgICAgICAgIG8gPSBvLmRlY29kZShfZW5jb2RpbmcpCi0gICAgICAgICAgICB5
aWVsZCBlbmNvZGVyKG8pCi0gICAgICAgIGVsaWYgbyBpcyBOb25lOgotICAgICAgICAgICAgeWll
bGQgJ251bGwnCi0gICAgICAgIGVsaWYgbyBpcyBUcnVlOgotICAgICAgICAgICAgeWllbGQgJ3Ry
dWUnCi0gICAgICAgIGVsaWYgbyBpcyBGYWxzZToKLSAgICAgICAgICAgIHlpZWxkICdmYWxzZScK
LSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIChpbnQsIGxvbmcpKToKLSAgICAgICAgICAgIHlp
ZWxkIHN0cihvKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZmxvYXQpOgotICAgICAgICAg
ICAgeWllbGQgZmxvYXRzdHIobywgc2VsZi5hbGxvd19uYW4pCi0gICAgICAgIGVsaWYgaXNpbnN0
YW5jZShvLCAobGlzdCwgdHVwbGUpKToKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBzZWxmLl9p
dGVyZW5jb2RlX2xpc3QobywgbWFya2Vycyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsK
LSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGRpY3QpOgotICAgICAgICAgICAgZm9yIGNodW5r
IGluIHNlbGYuX2l0ZXJlbmNvZGVfZGljdChvLCBtYXJrZXJzKToKLSAgICAgICAgICAgICAgICB5
aWVsZCBjaHVuawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3Qg
Tm9uZToKLSAgICAgICAgICAgICAgICBtYXJrZXJpZCA9IGlkKG8pCi0gICAgICAgICAgICAgICAg
aWYgbWFya2VyaWQgaW4gbWFya2VyczoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIikKLSAgICAgICAgICAgICAgICBtYXJr
ZXJzW21hcmtlcmlkXSA9IG8KLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBzZWxmLl9pdGVyZW5j
b2RlX2RlZmF1bHQobywgbWFya2Vycyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKLSAg
ICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZGVsIG1h
cmtlcnNbbWFya2VyaWRdCi0KLSAgICBkZWYgX2l0ZXJlbmNvZGVfZGVmYXVsdChzZWxmLCBvLCBt
YXJrZXJzPU5vbmUpOgotICAgICAgICBuZXdvYmogPSBzZWxmLmRlZmF1bHQobykKLSAgICAgICAg
cmV0dXJuIHNlbGYuX2l0ZXJlbmNvZGUobmV3b2JqLCBtYXJrZXJzKQotCi0gICAgZGVmIGRlZmF1
bHQoc2VsZiwgbyk6Ci0gICAgICAgICIiIgotICAgICAgICBJbXBsZW1lbnQgdGhpcyBtZXRob2Qg
aW4gYSBzdWJjbGFzcyBzdWNoIHRoYXQgaXQgcmV0dXJucwotICAgICAgICBhIHNlcmlhbGl6YWJs
ZSBvYmplY3QgZm9yIGBgb2BgLCBvciBjYWxscyB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbgotICAg
ICAgICAodG8gcmFpc2UgYSBgYFR5cGVFcnJvcmBgKS4KLQotICAgICAgICBGb3IgZXhhbXBsZSwg
dG8gc3VwcG9ydCBhcmJpdHJhcnkgaXRlcmF0b3JzLCB5b3UgY291bGQKLSAgICAgICAgaW1wbGVt
ZW50IGRlZmF1bHQgbGlrZSB0aGlzOjoKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmIGRl
ZmF1bHQoc2VsZiwgbyk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAg
ICBpdGVyYWJsZSA9IGl0ZXIobykKLSAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgot
ICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGxpc3QoaXRlcmFibGUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEpTT05FbmNvZGVyLmRlZmF1bHQoc2VsZiwgbykKLSAgICAgICAgIiIiCi0gICAgICAgIHJhaXNl
IFR5cGVFcnJvcigiJXIgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlIiAlIChvLCkpCi0KLSAgICBk
ZWYgZW5jb2RlKHNlbGYsIG8pOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJuIGEgSlNPTiBz
dHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gZGF0YSBzdHJ1Y3R1cmUuCi0KLSAgICAg
ICAgPj4+IEpTT05FbmNvZGVyKCkuZW5jb2RlKHsiZm9vIjogWyJiYXIiLCAiYmF6Il19KQotICAg
ICAgICAneyJmb28iOlsiYmFyIiwgImJheiJdfScKLSAgICAgICAgIiIiCi0gICAgICAgICMgVGhp
cyBpcyBmb3IgZXh0cmVtZWx5IHNpbXBsZSBjYXNlcyBhbmQgYmVuY2htYXJrcy4uLgotICAgICAg
ICBpZiBpc2luc3RhbmNlKG8sIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5j
ZShvLCBzdHIpOgotICAgICAgICAgICAgICAgIF9lbmNvZGluZyA9IHNlbGYuZW5jb2RpbmcKLSAg
ICAgICAgICAgICAgICBpZiAoX2VuY29kaW5nIGlzIG5vdCBOb25lIAotICAgICAgICAgICAgICAg
ICAgICAgICAgYW5kIG5vdCAoX2VuY29kaW5nID09ICd1dGYtOCcgYW5kIF9uZWVkX3V0ZjgpKToK
LSAgICAgICAgICAgICAgICAgICAgbyA9IG8uZGVjb2RlKF9lbmNvZGluZykKLSAgICAgICAgICAg
IHJldHVybiBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaShvKQotICAgICAgICAjIFRoaXMgZG9lc24n
dCBwYXNzIHRoZSBpdGVyYXRvciBkaXJlY3RseSB0byAnJy5qb2luKCkgYmVjYXVzZSBpdAotICAg
ICAgICAjIHN1Y2tzIGF0IHJlcG9ydGluZyBleGNlcHRpb25zLiAgSXQncyBnb2luZyB0byBkbyB0
aGlzIGludGVybmFsbHkKLSAgICAgICAgIyBhbnl3YXkgYmVjYXVzZSBpdCB1c2VzIFB5U2VxdWVu
Y2VfRmFzdCBvciBzaW1pbGFyLgotICAgICAgICBjaHVua3MgPSBsaXN0KHNlbGYuaXRlcmVuY29k
ZShvKSkKLSAgICAgICAgcmV0dXJuICcnLmpvaW4oY2h1bmtzKQotCi0gICAgZGVmIGl0ZXJlbmNv
ZGUoc2VsZiwgbyk6Ci0gICAgICAgICIiIgotICAgICAgICBFbmNvZGUgdGhlIGdpdmVuIG9iamVj
dCBhbmQgeWllbGQgZWFjaCBzdHJpbmcKLSAgICAgICAgcmVwcmVzZW50YXRpb24gYXMgYXZhaWxh
YmxlLgotICAgICAgICAKLSAgICAgICAgRm9yIGV4YW1wbGU6OgotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBmb3IgY2h1bmsgaW4gSlNPTkVuY29kZXIoKS5pdGVyZW5jb2RlKGJpZ29iamVjdCk6
Ci0gICAgICAgICAgICAgICAgbXlzb2NrZXQud3JpdGUoY2h1bmspCi0gICAgICAgICIiIgotICAg
ICAgICBpZiBzZWxmLmNoZWNrX2NpcmN1bGFyOgotICAgICAgICAgICAgbWFya2VycyA9IHt9Ci0g
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYXJrZXJzID0gTm9uZQotICAgICAgICByZXR1cm4g
c2VsZi5faXRlcmVuY29kZShvLCBtYXJrZXJzKQotCi1fX2FsbF9fID0gWydKU09ORW5jb2Rlcidd
CkluZGV4OiBXZWJLaXRUb29scy9zaW1wbGVqc29uL2pzb25maWx0ZXIucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9qc29uZmlsdGVyLnB5CShyZXZpc2lvbiA1NTA1NCkK
KysrIFdlYktpdFRvb2xzL3NpbXBsZWpzb24vanNvbmZpbHRlci5weQkod29ya2luZyBjb3B5KQpA
QCAtMSw0MCArMCwwIEBACi1pbXBvcnQgc2ltcGxlanNvbgotaW1wb3J0IGNnaQotCi1jbGFzcyBK
U09ORmlsdGVyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwcCwgbWltZV90eXBl
PSd0ZXh0L3gtanNvbicpOgotICAgICAgICBzZWxmLmFwcCA9IGFwcAotICAgICAgICBzZWxmLm1p
bWVfdHlwZSA9IG1pbWVfdHlwZQotCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYsIGVudmlyb24sIHN0
YXJ0X3Jlc3BvbnNlKToKLSAgICAgICAgIyBSZWFkIEpTT04gUE9TVCBpbnB1dCB0byBqc29uZmls
dGVyLmpzb24gaWYgbWF0Y2hpbmcgbWltZSB0eXBlCi0gICAgICAgIHJlc3BvbnNlID0geydzdGF0
dXMnOiAnMjAwIE9LJywgJ2hlYWRlcnMnOiBbXX0KLSAgICAgICAgZGVmIGpzb25fc3RhcnRfcmVz
cG9uc2Uoc3RhdHVzLCBoZWFkZXJzKToKLSAgICAgICAgICAgIHJlc3BvbnNlWydzdGF0dXMnXSA9
IHN0YXR1cwotICAgICAgICAgICAgcmVzcG9uc2VbJ2hlYWRlcnMnXS5leHRlbmQoaGVhZGVycykK
LSAgICAgICAgZW52aXJvblsnanNvbmZpbHRlci5taW1lX3R5cGUnXSA9IHNlbGYubWltZV90eXBl
Ci0gICAgICAgIGlmIGVudmlyb24uZ2V0KCdSRVFVRVNUX01FVEhPRCcsICcnKSA9PSAnUE9TVCc6
Ci0gICAgICAgICAgICBpZiBlbnZpcm9uLmdldCgnQ09OVEVOVF9UWVBFJywgJycpID09IHNlbGYu
bWltZV90eXBlOgotICAgICAgICAgICAgICAgIGFyZ3MgPSBbXyBmb3IgXyBpbiBbZW52aXJvbi5n
ZXQoJ0NPTlRFTlRfTEVOR1RIJyldIGlmIF9dCi0gICAgICAgICAgICAgICAgZGF0YSA9IGVudmly
b25bJ3dzZ2kuaW5wdXQnXS5yZWFkKCptYXAoaW50LCBhcmdzKSkKLSAgICAgICAgICAgICAgICBl
bnZpcm9uWydqc29uZmlsdGVyLmpzb24nXSA9IHNpbXBsZWpzb24ubG9hZHMoZGF0YSkKLSAgICAg
ICAgcmVzID0gc2ltcGxlanNvbi5kdW1wcyhzZWxmLmFwcChlbnZpcm9uLCBqc29uX3N0YXJ0X3Jl
c3BvbnNlKSkKLSAgICAgICAganNvbnAgPSBjZ2kucGFyc2VfcXMoZW52aXJvbi5nZXQoJ1FVRVJZ
X1NUUklORycsICcnKSkuZ2V0KCdqc29ucCcpCi0gICAgICAgIGlmIGpzb25wOgotICAgICAgICAg
ICAgY29udGVudF90eXBlID0gJ3RleHQvamF2YXNjcmlwdCcKLSAgICAgICAgICAgIHJlcyA9ICcn
LmpvaW4oanNvbnAgKyBbJygnLCByZXMsICcpJ10pCi0gICAgICAgIGVsaWYgJ09wZXJhJyBpbiBl
bnZpcm9uLmdldCgnSFRUUF9VU0VSX0FHRU5UJywgJycpOgotICAgICAgICAgICAgIyBPcGVyYSBo
YXMgYnVuayBYTUxIdHRwUmVxdWVzdCBzdXBwb3J0IGZvciBtb3N0IG1pbWUgdHlwZXMKLSAgICAg
ICAgICAgIGNvbnRlbnRfdHlwZSA9ICd0ZXh0L3BsYWluJwotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgY29udGVudF90eXBlID0gc2VsZi5taW1lX3R5cGUKLSAgICAgICAgaGVhZGVycyA9IFsK
LSAgICAgICAgICAgICgnQ29udGVudC10eXBlJywgY29udGVudF90eXBlKSwKLSAgICAgICAgICAg
ICgnQ29udGVudC1sZW5ndGgnLCBsZW4ocmVzKSksCi0gICAgICAgIF0KLSAgICAgICAgaGVhZGVy
cy5leHRlbmQocmVzcG9uc2VbJ2hlYWRlcnMnXSkKLSAgICAgICAgc3RhcnRfcmVzcG9uc2UocmVz
cG9uc2VbJ3N0YXR1cyddLCBoZWFkZXJzKQotICAgICAgICByZXR1cm4gW3Jlc10KLQotZGVmIGZh
Y3RvcnkoYXBwLCBnbG9iYWxfY29uZiwgKiprdyk6Ci0gICAgcmV0dXJuIEpTT05GaWx0ZXIoYXBw
LCAqKmt3KQpJbmRleDogV2ViS2l0VG9vbHMvc2ltcGxlanNvbi9zY2FubmVyLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL3NpbXBsZWpzb24vc2Nhbm5lci5weQkocmV2aXNpb24gNTUwNTQp
CisrKyBXZWJLaXRUb29scy9zaW1wbGVqc29uL3NjYW5uZXIucHkJKHdvcmtpbmcgY29weSkKQEAg
LTEsNjMgKzAsMCBAQAotIiIiCi1JdGVyYXRvciBiYXNlZCBzcmUgdG9rZW4gc2Nhbm5lcgotIiIi
Ci1pbXBvcnQgc3JlX3BhcnNlLCBzcmVfY29tcGlsZSwgc3JlX2NvbnN0YW50cwotZnJvbSBzcmVf
Y29uc3RhbnRzIGltcG9ydCBCUkFOQ0gsIFNVQlBBVFRFUk4KLWZyb20gcmUgaW1wb3J0IFZFUkJP
U0UsIE1VTFRJTElORSwgRE9UQUxMCi1pbXBvcnQgcmUKLQotX19hbGxfXyA9IFsnU2Nhbm5lcics
ICdwYXR0ZXJuJ10KLQotRkxBR1MgPSAoVkVSQk9TRSB8IE1VTFRJTElORSB8IERPVEFMTCkKLWNs
YXNzIFNjYW5uZXIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbGV4aWNvbiwgZmxh
Z3M9RkxBR1MpOgotICAgICAgICBzZWxmLmFjdGlvbnMgPSBbTm9uZV0KLSAgICAgICAgIyBjb21i
aW5lIHBocmFzZXMgaW50byBhIGNvbXBvdW5kIHBhdHRlcm4KLSAgICAgICAgcyA9IHNyZV9wYXJz
ZS5QYXR0ZXJuKCkKLSAgICAgICAgcy5mbGFncyA9IGZsYWdzCi0gICAgICAgIHAgPSBbXQotICAg
ICAgICBmb3IgaWR4LCB0b2tlbiBpbiBlbnVtZXJhdGUobGV4aWNvbik6Ci0gICAgICAgICAgICBw
aHJhc2UgPSB0b2tlbi5wYXR0ZXJuCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAg
c3VicGF0dGVybiA9IHNyZV9wYXJzZS5TdWJQYXR0ZXJuKHMsCi0gICAgICAgICAgICAgICAgICAg
IFsoU1VCUEFUVEVSTiwgKGlkeCArIDEsIHNyZV9wYXJzZS5wYXJzZShwaHJhc2UsIGZsYWdzKSkp
XSkKLSAgICAgICAgICAgIGV4Y2VwdCBzcmVfY29uc3RhbnRzLmVycm9yOgotICAgICAgICAgICAg
ICAgIHJhaXNlCi0gICAgICAgICAgICBwLmFwcGVuZChzdWJwYXR0ZXJuKQotICAgICAgICAgICAg
c2VsZi5hY3Rpb25zLmFwcGVuZCh0b2tlbikKLQotICAgICAgICBwID0gc3JlX3BhcnNlLlN1YlBh
dHRlcm4ocywgWyhCUkFOQ0gsIChOb25lLCBwKSldKQotICAgICAgICBzZWxmLnNjYW5uZXIgPSBz
cmVfY29tcGlsZS5jb21waWxlKHApCi0KLQotICAgIGRlZiBpdGVyc2NhbihzZWxmLCBzdHJpbmcs
IGlkeD0wLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiIKLSAgICAgICAgWWllbGQgbWF0Y2gs
IGVuZF9pZHggZm9yIGVhY2ggbWF0Y2gKLSAgICAgICAgIiIiCi0gICAgICAgIG1hdGNoID0gc2Vs
Zi5zY2FubmVyLnNjYW5uZXIoc3RyaW5nLCBpZHgpLm1hdGNoCi0gICAgICAgIGFjdGlvbnMgPSBz
ZWxmLmFjdGlvbnMKLSAgICAgICAgbGFzdGVuZCA9IGlkeAotICAgICAgICBlbmQgPSBsZW4oc3Ry
aW5nKQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgbSA9IG1hdGNoKCkKLSAgICAg
ICAgICAgIGlmIG0gaXMgTm9uZToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAg
bWF0Y2hiZWdpbiwgbWF0Y2hlbmQgPSBtLnNwYW4oKQotICAgICAgICAgICAgaWYgbGFzdGVuZCA9
PSBtYXRjaGVuZDoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgYWN0aW9uID0g
YWN0aW9uc1ttLmxhc3RpbmRleF0KLSAgICAgICAgICAgIGlmIGFjdGlvbiBpcyBub3QgTm9uZToK
LSAgICAgICAgICAgICAgICBydmFsLCBuZXh0X3BvcyA9IGFjdGlvbihtLCBjb250ZXh0KQotICAg
ICAgICAgICAgICAgIGlmIG5leHRfcG9zIGlzIG5vdCBOb25lIGFuZCBuZXh0X3BvcyAhPSBtYXRj
aGVuZDoKLSAgICAgICAgICAgICAgICAgICAgIyAiZmFzdCBmb3J3YXJkIiB0aGUgc2Nhbm5lcgot
ICAgICAgICAgICAgICAgICAgICBtYXRjaGVuZCA9IG5leHRfcG9zCi0gICAgICAgICAgICAgICAg
ICAgIG1hdGNoID0gc2VsZi5zY2FubmVyLnNjYW5uZXIoc3RyaW5nLCBtYXRjaGVuZCkubWF0Y2gK
LSAgICAgICAgICAgICAgICB5aWVsZCBydmFsLCBtYXRjaGVuZAotICAgICAgICAgICAgbGFzdGVu
ZCA9IG1hdGNoZW5kCi0gICAgICAgICAgICAKLWRlZiBwYXR0ZXJuKHBhdHRlcm4sIGZsYWdzPUZM
QUdTKToKLSAgICBkZWYgZGVjb3JhdG9yKGZuKToKLSAgICAgICAgZm4ucGF0dGVybiA9IHBhdHRl
cm4KLSAgICAgICAgZm4ucmVnZXggPSByZS5jb21waWxlKHBhdHRlcm4sIGZsYWdzKQotICAgICAg
ICByZXR1cm4gZm4KLSAgICByZXR1cm4gZGVjb3JhdG9yCg==
</data>
<flag name="review"
          id="31917"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="31918"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
      

    </bug>

</bugzilla>