#!/usr/bin/python3.5

import os, sys, base64

VERSIONEER_b64 = """
CiMgVmVyc2lvbjogMC4xNgoKIiIiVGhlIFZlcnNpb25lZXIgLSBsaWtlIGEg
cm9ja2V0ZWVyLCBidXQgZm9yIHZlcnNpb25zLgoKVGhlIFZlcnNpb25lZXIK
PT09PT09PT09PT09PT0KCiogbGlrZSBhIHJvY2tldGVlciwgYnV0IGZvciB2
ZXJzaW9ucyEKKiBodHRwczovL2dpdGh1Yi5jb20vd2FybmVyL3B5dGhvbi12
ZXJzaW9uZWVyCiogQnJpYW4gV2FybmVyCiogTGljZW5zZTogUHVibGljIERv
bWFpbgoqIENvbXBhdGlibGUgV2l0aDogcHl0aG9uMi42LCAyLjcsIDMuMywg
My40LCAzLjUsIGFuZCBweXB5CiogWyFbTGF0ZXN0IFZlcnNpb25dCihodHRw
czovL3B5cGlwLmluL3ZlcnNpb24vdmVyc2lvbmVlci9iYWRnZS5zdmc/c3R5
bGU9ZmxhdCkKXShodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3ZlcnNp
b25lZXIvKQoqIFshW0J1aWxkIFN0YXR1c10KKGh0dHBzOi8vdHJhdmlzLWNp
Lm9yZy93YXJuZXIvcHl0aG9uLXZlcnNpb25lZXIucG5nP2JyYW5jaD1tYXN0
ZXIpCl0oaHR0cHM6Ly90cmF2aXMtY2kub3JnL3dhcm5lci9weXRob24tdmVy
c2lvbmVlcikKClRoaXMgaXMgYSB0b29sIGZvciBtYW5hZ2luZyBhIHJlY29y
ZGVkIHZlcnNpb24gbnVtYmVyIGluIGRpc3R1dGlscy1iYXNlZApweXRob24g
cHJvamVjdHMuIFRoZSBnb2FsIGlzIHRvIHJlbW92ZSB0aGUgdGVkaW91cyBh
bmQgZXJyb3ItcHJvbmUgInVwZGF0ZQp0aGUgZW1iZWRkZWQgdmVyc2lvbiBz
dHJpbmciIHN0ZXAgZnJvbSB5b3VyIHJlbGVhc2UgcHJvY2Vzcy4gTWFraW5n
IGEgbmV3CnJlbGVhc2Ugc2hvdWxkIGJlIGFzIGVhc3kgYXMgcmVjb3JkaW5n
IGEgbmV3IHRhZyBpbiB5b3VyIHZlcnNpb24tY29udHJvbApzeXN0ZW0sIGFu
ZCBtYXliZSBtYWtpbmcgbmV3IHRhcmJhbGxzLgoKCiMjIFF1aWNrIEluc3Rh
bGwKCiogYHBpcCBpbnN0YWxsIHZlcnNpb25lZXJgIHRvIHNvbWV3aGVyZSB0
byB5b3VyICRQQVRICiogYWRkIGEgYFt2ZXJzaW9uZWVyXWAgc2VjdGlvbiB0
byB5b3VyIHNldHVwLmNmZyAoc2VlIGJlbG93KQoqIHJ1biBgdmVyc2lvbmVl
ciBpbnN0YWxsYCBpbiB5b3VyIHNvdXJjZSB0cmVlLCBjb21taXQgdGhlIHJl
c3VsdHMKCiMjIFZlcnNpb24gSWRlbnRpZmllcnMKClNvdXJjZSB0cmVlcyBj
b21lIGZyb20gYSB2YXJpZXR5IG9mIHBsYWNlczoKCiogYSB2ZXJzaW9uLWNv
bnRyb2wgc3lzdGVtIGNoZWNrb3V0IChtb3N0bHkgdXNlZCBieSBkZXZlbG9w
ZXJzKQoqIGEgbmlnaHRseSB0YXJiYWxsLCBwcm9kdWNlZCBieSBidWlsZCBh
dXRvbWF0aW9uCiogYSBzbmFwc2hvdCB0YXJiYWxsLCBwcm9kdWNlZCBieSBh
IHdlYi1iYXNlZCBWQ1MgYnJvd3NlciwgbGlrZSBnaXRodWIncwogICJ0YXJi
YWxsIGZyb20gdGFnIiBmZWF0dXJlCiogYSByZWxlYXNlIHRhcmJhbGwsIHBy
b2R1Y2VkIGJ5ICJzZXR1cC5weSBzZGlzdCIsIGRpc3RyaWJ1dGVkIHRocm91
Z2ggUHlQSQoKV2l0aGluIGVhY2ggc291cmNlIHRyZWUsIHRoZSB2ZXJzaW9u
IGlkZW50aWZpZXIgKGVpdGhlciBhIHN0cmluZyBvciBhIG51bWJlciwKdGhp
cyB0b29sIGlzIGZvcm1hdC1hZ25vc3RpYykgY2FuIGNvbWUgZnJvbSBhIHZh
cmlldHkgb2YgcGxhY2VzOgoKKiBhc2sgdGhlIFZDUyB0b29sIGl0c2VsZiwg
ZS5nLiAiZ2l0IGRlc2NyaWJlIiAoZm9yIGNoZWNrb3V0cyksIHdoaWNoIGtu
b3dzCiAgYWJvdXQgcmVjZW50ICJ0YWdzIiBhbmQgYW4gYWJzb2x1dGUgcmV2
aXNpb24taWQKKiB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGludG8gd2hp
Y2ggdGhlIHRhcmJhbGwgd2FzIHVucGFja2VkCiogYW4gZXhwYW5kZWQgVkNT
IGtleXdvcmQgKCRJZCQsIGV0YykKKiBhIGBfdmVyc2lvbi5weWAgY3JlYXRl
ZCBieSBzb21lIGVhcmxpZXIgYnVpbGQgc3RlcAoKRm9yIHJlbGVhc2VkIHNv
ZnR3YXJlLCB0aGUgdmVyc2lvbiBpZGVudGlmaWVyIGlzIGNsb3NlbHkgcmVs
YXRlZCB0byBhIFZDUwp0YWcuIFNvbWUgcHJvamVjdHMgdXNlIHRhZyBuYW1l
cyB0aGF0IGluY2x1ZGUgbW9yZSB0aGFuIGp1c3QgdGhlIHZlcnNpb24Kc3Ry
aW5nIChlLmcuICJteXByb2plY3QtMS4yIiBpbnN0ZWFkIG9mIGp1c3QgIjEu
MiIpLCBpbiB3aGljaCBjYXNlIHRoZSB0b29sCm5lZWRzIHRvIHN0cmlwIHRo
ZSB0YWcgcHJlZml4IHRvIGV4dHJhY3QgdGhlIHZlcnNpb24gaWRlbnRpZmll
ci4gRm9yCnVucmVsZWFzZWQgc29mdHdhcmUgKGJldHdlZW4gdGFncyksIHRo
ZSB2ZXJzaW9uIGlkZW50aWZpZXIgc2hvdWxkIHByb3ZpZGUKZW5vdWdoIGlu
Zm9ybWF0aW9uIHRvIGhlbHAgZGV2ZWxvcGVycyByZWNyZWF0ZSB0aGUgc2Ft
ZSB0cmVlLCB3aGlsZSBhbHNvCmdpdmluZyB0aGVtIGFuIGlkZWEgb2Ygcm91
Z2hseSBob3cgb2xkIHRoZSB0cmVlIGlzIChhZnRlciB2ZXJzaW9uIDEuMiwg
YmVmb3JlCnZlcnNpb24gMS4zKS4gTWFueSBWQ1Mgc3lzdGVtcyBjYW4gcmVw
b3J0IGEgZGVzY3JpcHRpb24gdGhhdCBjYXB0dXJlcyB0aGlzLApmb3IgZXhh
bXBsZSBgZ2l0IGRlc2NyaWJlIC0tdGFncyAtLWRpcnR5IC0tYWx3YXlzYCBy
ZXBvcnRzIHRoaW5ncyBsaWtlCiIwLjctMS1nNTc0YWI5OC1kaXJ0eSIgdG8g
aW5kaWNhdGUgdGhhdCB0aGUgY2hlY2tvdXQgaXMgb25lIHJldmlzaW9uIHBh
c3QgdGhlCjAuNyB0YWcsIGhhcyBhIHVuaXF1ZSByZXZpc2lvbiBpZCBvZiAi
NTc0YWI5OCIsIGFuZCBpcyAiZGlydHkiIChpdCBoYXMKdW5jb21taXR0ZWQg
Y2hhbmdlcy4KClRoZSB2ZXJzaW9uIGlkZW50aWZpZXIgaXMgdXNlZCBmb3Ig
bXVsdGlwbGUgcHVycG9zZXM6CgoqIHRvIGFsbG93IHRoZSBtb2R1bGUgdG8g
c2VsZi1pZGVudGlmeSBpdHMgdmVyc2lvbjogYG15cHJvamVjdC5fX3ZlcnNp
b25fX2AKKiB0byBjaG9vc2UgYSBuYW1lIGFuZCBwcmVmaXggZm9yIGEgJ3Nl
dHVwLnB5IHNkaXN0JyB0YXJiYWxsCgojIyBUaGVvcnkgb2YgT3BlcmF0aW9u
CgpWZXJzaW9uZWVyIHdvcmtzIGJ5IGFkZGluZyBhIHNwZWNpYWwgYF92ZXJz
aW9uLnB5YCBmaWxlIGludG8geW91ciBzb3VyY2UKdHJlZSwgd2hlcmUgeW91
ciBgX19pbml0X18ucHlgIGNhbiBpbXBvcnQgaXQuIFRoaXMgYF92ZXJzaW9u
LnB5YCBrbm93cyBob3cgdG8KZHluYW1pY2FsbHkgYXNrIHRoZSBWQ1MgdG9v
bCBmb3IgdmVyc2lvbiBpbmZvcm1hdGlvbiBhdCBpbXBvcnQgdGltZS4KCmBf
dmVyc2lvbi5weWAgYWxzbyBjb250YWlucyBgJFJldmlzaW9uJGAgbWFya2Vy
cywgYW5kIHRoZSBpbnN0YWxsYXRpb24KcHJvY2VzcyBtYXJrcyBgX3ZlcnNp
b24ucHlgIHRvIGhhdmUgdGhpcyBtYXJrZXIgcmV3cml0dGVuIHdpdGggYSB0
YWcgbmFtZQpkdXJpbmcgdGhlIGBnaXQgYXJjaGl2ZWAgY29tbWFuZC4gQXMg
YSByZXN1bHQsIGdlbmVyYXRlZCB0YXJiYWxscyB3aWxsCmNvbnRhaW4gZW5v
dWdoIGluZm9ybWF0aW9uIHRvIGdldCB0aGUgcHJvcGVyIHZlcnNpb24uCgpU
byBhbGxvdyBgc2V0dXAucHlgIHRvIGNvbXB1dGUgYSB2ZXJzaW9uIHRvbywg
YSBgdmVyc2lvbmVlci5weWAgaXMgYWRkZWQgdG8KdGhlIHRvcCBsZXZlbCBv
ZiB5b3VyIHNvdXJjZSB0cmVlLCBuZXh0IHRvIGBzZXR1cC5weWAgYW5kIHRo
ZSBgc2V0dXAuY2ZnYAp0aGF0IGNvbmZpZ3VyZXMgaXQuIFRoaXMgb3ZlcnJp
ZGVzIHNldmVyYWwgZGlzdHV0aWxzL3NldHVwdG9vbHMgY29tbWFuZHMgdG8K
Y29tcHV0ZSB0aGUgdmVyc2lvbiB3aGVuIGludm9rZWQsIGFuZCBjaGFuZ2Vz
IGBzZXR1cC5weSBidWlsZGAgYW5kIGBzZXR1cC5weQpzZGlzdGAgdG8gcmVw
bGFjZSBgX3ZlcnNpb24ucHlgIHdpdGggYSBzbWFsbCBzdGF0aWMgZmlsZSB0
aGF0IGNvbnRhaW5zIGp1c3QKdGhlIGdlbmVyYXRlZCB2ZXJzaW9uIGRhdGEu
CgojIyBJbnN0YWxsYXRpb24KCkZpcnN0LCBkZWNpZGUgb24gdmFsdWVzIGZv
ciB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzOgoKKiBg
VkNTYDogdGhlIHZlcnNpb24gY29udHJvbCBzeXN0ZW0geW91IHVzZS4gQ3Vy
cmVudGx5IGFjY2VwdHMgImdpdCIuCgoqIGBzdHlsZWA6IHRoZSBzdHlsZSBv
ZiB2ZXJzaW9uIHN0cmluZyB0byBiZSBwcm9kdWNlZC4gU2VlICJTdHlsZXMi
IGJlbG93IGZvcgogIGRldGFpbHMuIERlZmF1bHRzIHRvICJwZXA0NDAiLCB3
aGljaCBsb29rcyBsaWtlCiAgYFRBR1srRElTVEFOQ0UuZ1NIT1JUSEFTSFsu
ZGlydHldXWAuCgoqIGB2ZXJzaW9uZmlsZV9zb3VyY2VgOgoKICBBIHByb2pl
Y3QtcmVsYXRpdmUgcGF0aG5hbWUgaW50byB3aGljaCB0aGUgZ2VuZXJhdGVk
IHZlcnNpb24gc3RyaW5ncyBzaG91bGQKICBiZSB3cml0dGVuLiBUaGlzIGlz
IHVzdWFsbHkgYSBgX3ZlcnNpb24ucHlgIG5leHQgdG8geW91ciBwcm9qZWN0
J3MgbWFpbgogIGBfX2luaXRfXy5weWAgZmlsZSwgc28gaXQgY2FuIGJlIGlt
cG9ydGVkIGF0IHJ1bnRpbWUuIElmIHlvdXIgcHJvamVjdCB1c2VzCiAgYHNy
Yy9teXByb2plY3QvX19pbml0X18ucHlgLCB0aGlzIHNob3VsZCBiZSBgc3Jj
L215cHJvamVjdC9fdmVyc2lvbi5weWAuCiAgVGhpcyBmaWxlIHNob3VsZCBi
ZSBjaGVja2VkIGluIHRvIHlvdXIgVkNTIGFzIHVzdWFsOiB0aGUgY29weSBj
cmVhdGVkIGJlbG93CiAgYnkgYHNldHVwLnB5IHNldHVwX3ZlcnNpb25lZXJg
IHdpbGwgaW5jbHVkZSBjb2RlIHRoYXQgcGFyc2VzIGV4cGFuZGVkIFZDUwog
IGtleXdvcmRzIGluIGdlbmVyYXRlZCB0YXJiYWxscy4gVGhlICdidWlsZCcg
YW5kICdzZGlzdCcgY29tbWFuZHMgd2lsbAogIHJlcGxhY2UgaXQgd2l0aCBh
IGNvcHkgdGhhdCBoYXMganVzdCB0aGUgY2FsY3VsYXRlZCB2ZXJzaW9uIHN0
cmluZy4KCiAgVGhpcyBtdXN0IGJlIHNldCBldmVuIGlmIHlvdXIgcHJvamVj
dCBkb2VzIG5vdCBoYXZlIGFueSBtb2R1bGVzIChhbmQgd2lsbAogIHRoZXJl
Zm9yZSBuZXZlciBpbXBvcnQgYF92ZXJzaW9uLnB5YCksIHNpbmNlICJzZXR1
cC5weSBzZGlzdCIgLWJhc2VkIHRyZWVzCiAgc3RpbGwgbmVlZCBzb21ld2hl
cmUgdG8gcmVjb3JkIHRoZSBwcmUtY2FsY3VsYXRlZCB2ZXJzaW9uIHN0cmlu
Z3MuIEFueXdoZXJlCiAgaW4gdGhlIHNvdXJjZSB0cmVlIHNob3VsZCBkby4g
SWYgdGhlcmUgaXMgYSBgX19pbml0X18ucHlgIG5leHQgdG8geW91cgogIGBf
dmVyc2lvbi5weWAsIHRoZSBgc2V0dXAucHkgc2V0dXBfdmVyc2lvbmVlcmAg
Y29tbWFuZCAoZGVzY3JpYmVkIGJlbG93KQogIHdpbGwgYXBwZW5kIHNvbWUg
YF9fdmVyc2lvbl9fYC1zZXR0aW5nIGFzc2lnbm1lbnRzLCBpZiB0aGV5IGFy
ZW4ndCBhbHJlYWR5CiAgcHJlc2VudC4KCiogYHZlcnNpb25maWxlX2J1aWxk
YDoKCiAgTGlrZSBgdmVyc2lvbmZpbGVfc291cmNlYCwgYnV0IHJlbGF0aXZl
IHRvIHRoZSBidWlsZCBkaXJlY3RvcnkgaW5zdGVhZCBvZgogIHRoZSBzb3Vy
Y2UgZGlyZWN0b3J5LiBUaGVzZSB3aWxsIGRpZmZlciB3aGVuIHlvdXIgc2V0
dXAucHkgdXNlcwogICdwYWNrYWdlX2Rpcj0nLiBJZiB5b3UgaGF2ZSBgcGFj
a2FnZV9kaXI9eydteXByb2plY3QnOiAnc3JjL215cHJvamVjdCd9YCwKICB0
aGVuIHlvdSB3aWxsIHByb2JhYmx5IGhhdmUgYHZlcnNpb25maWxlX2J1aWxk
PSdteXByb2plY3QvX3ZlcnNpb24ucHknYCBhbmQKICBgdmVyc2lvbmZpbGVf
c291cmNlPSdzcmMvbXlwcm9qZWN0L192ZXJzaW9uLnB5J2AuCgogIElmIHRo
aXMgaXMgc2V0IHRvIE5vbmUsIHRoZW4gYHNldHVwLnB5IGJ1aWxkYCB3aWxs
IG5vdCBhdHRlbXB0IHRvIHJld3JpdGUKICBhbnkgYF92ZXJzaW9uLnB5YCBp
biB0aGUgYnVpbHQgdHJlZS4gSWYgeW91ciBwcm9qZWN0IGRvZXMgbm90IGhh
dmUgYW55CiAgbGlicmFyaWVzIChlLmcuIGlmIGl0IG9ubHkgYnVpbGRzIGEg
c2NyaXB0KSwgdGhlbiB5b3Ugc2hvdWxkIHVzZQogIGB2ZXJzaW9uZmlsZV9i
dWlsZCA9IE5vbmVgLiBUbyBhY3R1YWxseSB1c2UgdGhlIGNvbXB1dGVkIHZl
cnNpb24gc3RyaW5nLAogIHlvdXIgYHNldHVwLnB5YCB3aWxsIG5lZWQgdG8g
b3ZlcnJpZGUgYGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3NjcmlwdHNgCiAg
d2l0aCBhIHN1YmNsYXNzIHRoYXQgZXhwbGljaXRseSBpbnNlcnRzIGEgY29w
eSBvZgogIGB2ZXJzaW9uZWVyLmdldF92ZXJzaW9uKClgIGludG8geW91ciBz
Y3JpcHQgZmlsZS4gU2VlCiAgYHRlc3QvZGVtb2FwcC1zY3JpcHQtb25seS9z
ZXR1cC5weWAgZm9yIGFuIGV4YW1wbGUuCgoqIGB0YWdfcHJlZml4YDoKCiAg
YSBzdHJpbmcsIGxpa2UgJ1BST0pFQ1ROQU1FLScsIHdoaWNoIGFwcGVhcnMg
YXQgdGhlIHN0YXJ0IG9mIGFsbCBWQ1MgdGFncy4KICBJZiB5b3VyIHRhZ3Mg
bG9vayBsaWtlICdteXByb2plY3QtMS4yLjAnLCB0aGVuIHlvdSBzaG91bGQg
dXNlCiAgdGFnX3ByZWZpeD0nbXlwcm9qZWN0LScuIElmIHlvdSB1c2UgdW5w
cmVmaXhlZCB0YWdzIGxpa2UgJzEuMi4wJywgdGhpcwogIHNob3VsZCBiZSBh
biBlbXB0eSBzdHJpbmcsIHVzaW5nIGVpdGhlciBgdGFnX3ByZWZpeD1gIG9y
IGB0YWdfcHJlZml4PScnYC4KCiogYHBhcmVudGRpcl9wcmVmaXhgOgoKICBh
IG9wdGlvbmFsIHN0cmluZywgZnJlcXVlbnRseSB0aGUgc2FtZSBhcyB0YWdf
cHJlZml4LCB3aGljaCBhcHBlYXJzIGF0IHRoZQogIHN0YXJ0IG9mIGFsbCB1
bnBhY2tlZCB0YXJiYWxsIGZpbGVuYW1lcy4gSWYgeW91ciB0YXJiYWxsIHVu
cGFja3MgaW50bwogICdteXByb2plY3QtMS4yLjAnLCB0aGlzIHNob3VsZCBi
ZSAnbXlwcm9qZWN0LScuIFRvIGRpc2FibGUgdGhpcyBmZWF0dXJlLAogIGp1
c3Qgb21pdCB0aGUgZmllbGQgZnJvbSB5b3VyIGBzZXR1cC5jZmdgLgoKVGhp
cyB0b29sIHByb3ZpZGVzIG9uZSBzY3JpcHQsIG5hbWVkIGB2ZXJzaW9uZWVy
YC4gVGhhdCBzY3JpcHQgaGFzIG9uZSBtb2RlLAoiaW5zdGFsbCIsIHdoaWNo
IHdyaXRlcyBhIGNvcHkgb2YgYHZlcnNpb25lZXIucHlgIGludG8gdGhlIGN1
cnJlbnQgZGlyZWN0b3J5CmFuZCBydW5zIGB2ZXJzaW9uZWVyLnB5IHNldHVw
YCB0byBmaW5pc2ggdGhlIGluc3RhbGxhdGlvbi4KClRvIHZlcnNpb25lZXIt
ZW5hYmxlIHlvdXIgcHJvamVjdDoKCiogMTogTW9kaWZ5IHlvdXIgYHNldHVw
LmNmZ2AsIGFkZGluZyBhIHNlY3Rpb24gbmFtZWQgYFt2ZXJzaW9uZWVyXWAg
YW5kCiAgcG9wdWxhdGluZyBpdCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIHZh
bHVlcyB5b3UgZGVjaWRlZCBlYXJsaWVyIChub3RlIHRoYXQKICB0aGUgb3B0
aW9uIG5hbWVzIGFyZSBub3QgY2FzZS1zZW5zaXRpdmUpOgoKICBgYGBgCiAg
W3ZlcnNpb25lZXJdCiAgVkNTID0gZ2l0CiAgc3R5bGUgPSBwZXA0NDAKICB2
ZXJzaW9uZmlsZV9zb3VyY2UgPSBzcmMvbXlwcm9qZWN0L192ZXJzaW9uLnB5
CiAgdmVyc2lvbmZpbGVfYnVpbGQgPSBteXByb2plY3QvX3ZlcnNpb24ucHkK
ICB0YWdfcHJlZml4ID0KICBwYXJlbnRkaXJfcHJlZml4ID0gbXlwcm9qZWN0
LQogIGBgYGAKCiogMjogUnVuIGB2ZXJzaW9uZWVyIGluc3RhbGxgLiBUaGlz
IHdpbGwgZG8gdGhlIGZvbGxvd2luZzoKCiAgKiBjb3B5IGB2ZXJzaW9uZWVy
LnB5YCBpbnRvIHRoZSB0b3Agb2YgeW91ciBzb3VyY2UgdHJlZQogICogY3Jl
YXRlIGBfdmVyc2lvbi5weWAgaW4gdGhlIHJpZ2h0IHBsYWNlIChgdmVyc2lv
bmZpbGVfc291cmNlYCkKICAqIG1vZGlmeSB5b3VyIGBfX2luaXRfXy5weWAg
KGlmIG9uZSBleGlzdHMgbmV4dCB0byBgX3ZlcnNpb24ucHlgKSB0byBkZWZp
bmUKICAgIGBfX3ZlcnNpb25fX2AgKGJ5IGNhbGxpbmcgYSBmdW5jdGlvbiBm
cm9tIGBfdmVyc2lvbi5weWApCiAgKiBtb2RpZnkgeW91ciBgTUFOSUZFU1Qu
aW5gIHRvIGluY2x1ZGUgYm90aCBgdmVyc2lvbmVlci5weWAgYW5kIHRoZQog
ICAgZ2VuZXJhdGVkIGBfdmVyc2lvbi5weWAgaW4gc2Rpc3QgdGFyYmFsbHMK
CiAgYHZlcnNpb25lZXIgaW5zdGFsbGAgd2lsbCBjb21wbGFpbiBhYm91dCBh
bnkgcHJvYmxlbXMgaXQgZmluZHMgd2l0aCB5b3VyCiAgYHNldHVwLnB5YCBv
ciBgc2V0dXAuY2ZnYC4gUnVuIGl0IG11bHRpcGxlIHRpbWVzIHVudGlsIHlv
dSBoYXZlIGZpeGVkIGFsbAogIHRoZSBwcm9ibGVtcy4KCiogMzogYWRkIGEg
YGltcG9ydCB2ZXJzaW9uZWVyYCB0byB5b3VyIHNldHVwLnB5LCBhbmQgYWRk
IHRoZSBmb2xsb3dpbmcKICBhcmd1bWVudHMgdG8gdGhlIHNldHVwKCkgY2Fs
bDoKCiAgICAgICAgdmVyc2lvbj12ZXJzaW9uZWVyLmdldF92ZXJzaW9uKCks
CiAgICAgICAgY21kY2xhc3M9dmVyc2lvbmVlci5nZXRfY21kY2xhc3MoKSwK
CiogNDogY29tbWl0IHRoZXNlIGNoYW5nZXMgdG8geW91ciBWQ1MuIFRvIG1h
a2Ugc3VyZSB5b3Ugd29uJ3QgZm9yZ2V0LAogIGB2ZXJzaW9uZWVyIGluc3Rh
bGxgIHdpbGwgbWFyayBldmVyeXRoaW5nIGl0IHRvdWNoZWQgZm9yIGFkZGl0
aW9uIHVzaW5nCiAgYGdpdCBhZGRgLiBEb24ndCBmb3JnZXQgdG8gYWRkIGBz
ZXR1cC5weWAgYW5kIGBzZXR1cC5jZmdgIHRvby4KCiMjIFBvc3QtSW5zdGFs
bGF0aW9uIFVzYWdlCgpPbmNlIGVzdGFibGlzaGVkLCBhbGwgdXNlcyBvZiB5
b3VyIHRyZWUgZnJvbSBhIFZDUyBjaGVja291dCBzaG91bGQgZ2V0IHRoZQpj
dXJyZW50IHZlcnNpb24gc3RyaW5nLiBBbGwgZ2VuZXJhdGVkIHRhcmJhbGxz
IHNob3VsZCBpbmNsdWRlIGFuIGVtYmVkZGVkCnZlcnNpb24gc3RyaW5nIChz
byB1c2VycyB3aG8gdW5wYWNrIHRoZW0gd2lsbCBub3QgbmVlZCBhIFZDUyB0
b29sIGluc3RhbGxlZCkuCgpJZiB5b3UgZGlzdHJpYnV0ZSB5b3VyIHByb2pl
Y3QgdGhyb3VnaCBQeVBJLCB0aGVuIHRoZSByZWxlYXNlIHByb2Nlc3Mgc2hv
dWxkCmJvaWwgZG93biB0byB0d28gc3RlcHM6CgoqIDE6IGdpdCB0YWcgMS4w
CiogMjogcHl0aG9uIHNldHVwLnB5IHJlZ2lzdGVyIHNkaXN0IHVwbG9hZAoK
SWYgeW91IGRpc3RyaWJ1dGUgaXQgdGhyb3VnaCBnaXRodWIgKGkuZS4gdXNl
cnMgdXNlIGdpdGh1YiB0byBnZW5lcmF0ZQp0YXJiYWxscyB3aXRoIGBnaXQg
YXJjaGl2ZWApLCB0aGUgcHJvY2VzcyBpczoKCiogMTogZ2l0IHRhZyAxLjAK
KiAyOiBnaXQgcHVzaDsgZ2l0IHB1c2ggLS10YWdzCgpWZXJzaW9uZWVyIHdp
bGwgcmVwb3J0ICIwK3VudGFnZ2VkLk5VTUNPTU1JVFMuZ0hBU0giIHVudGls
IHlvdXIgdHJlZSBoYXMgYXQKbGVhc3Qgb25lIHRhZyBpbiBpdHMgaGlzdG9y
eS4KCiMjIFZlcnNpb24tU3RyaW5nIEZsYXZvcnMKCkNvZGUgd2hpY2ggdXNl
cyBWZXJzaW9uZWVyIGNhbiBsZWFybiBhYm91dCBpdHMgdmVyc2lvbiBzdHJp
bmcgYXQgcnVudGltZSBieQppbXBvcnRpbmcgYF92ZXJzaW9uYCBmcm9tIHlv
dXIgbWFpbiBgX19pbml0X18ucHlgIGZpbGUgYW5kIHJ1bm5pbmcgdGhlCmBn
ZXRfdmVyc2lvbnMoKWAgZnVuY3Rpb24uIEZyb20gdGhlICJvdXRzaWRlIiAo
ZS5nLiBpbiBgc2V0dXAucHlgKSwgeW91IGNhbgppbXBvcnQgdGhlIHRvcC1s
ZXZlbCBgdmVyc2lvbmVlci5weWAgYW5kIHJ1biBgZ2V0X3ZlcnNpb25zKClg
LgoKQm90aCBmdW5jdGlvbnMgcmV0dXJuIGEgZGljdGlvbmFyeSB3aXRoIGRp
ZmZlcmVudCBmbGF2b3JzIG9mIHZlcnNpb24KaW5mb3JtYXRpb246CgoqIGBb
J3ZlcnNpb24nXWA6IEEgY29uZGVuc2VkIHZlcnNpb24gc3RyaW5nLCByZW5k
ZXJlZCB1c2luZyB0aGUgc2VsZWN0ZWQKICBzdHlsZS4gVGhpcyBpcyB0aGUg
bW9zdCBjb21tb25seSB1c2VkIHZhbHVlIGZvciB0aGUgcHJvamVjdCdzIHZl
cnNpb24KICBzdHJpbmcuIFRoZSBkZWZhdWx0ICJwZXA0NDAiIHN0eWxlIHlp
ZWxkcyBzdHJpbmdzIGxpa2UgYDAuMTFgLAogIGAwLjExKzIuZzEwNzZjOTdg
LCBvciBgMC4xMSsyLmcxMDc2Yzk3LmRpcnR5YC4gU2VlIHRoZSAiU3R5bGVz
IiBzZWN0aW9uCiAgYmVsb3cgZm9yIGFsdGVybmF0aXZlIHN0eWxlcy4KCiog
YFsnZnVsbC1yZXZpc2lvbmlkJ11gOiBkZXRhaWxlZCByZXZpc2lvbiBpZGVu
dGlmaWVyLiBGb3IgR2l0LCB0aGlzIGlzIHRoZQogIGZ1bGwgU0hBMSBjb21t
aXQgaWQsIGUuZy4gIjEwNzZjOTc4YThkM2NmYzcwZjQwOGZlNTk3NGFhNmMw
OTJjOTQ5YWMiLgoKKiBgWydkaXJ0eSddYDogYSBib29sZWFuLCBUcnVlIGlm
IHRoZSB0cmVlIGhhcyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiBOb3RlIHRoYXQK
ICB0aGlzIGlzIG9ubHkgYWNjdXJhdGUgaWYgcnVuIGluIGEgVkNTIGNoZWNr
b3V0LCBvdGhlcndpc2UgaXQgaXMgbGlrZWx5IHRvCiAgYmUgRmFsc2Ugb3Ig
Tm9uZQoKKiBgWydlcnJvciddYDogaWYgdGhlIHZlcnNpb24gc3RyaW5nIGNv
dWxkIG5vdCBiZSBjb21wdXRlZCwgdGhpcyB3aWxsIGJlIHNldAogIHRvIGEg
c3RyaW5nIGRlc2NyaWJpbmcgdGhlIHByb2JsZW0sIG90aGVyd2lzZSBpdCB3
aWxsIGJlIE5vbmUuIEl0IG1heSBiZQogIHVzZWZ1bCB0byB0aHJvdyBhbiBl
eGNlcHRpb24gaW4gc2V0dXAucHkgaWYgdGhpcyBpcyBzZXQsIHRvIGF2b2lk
IGUuZy4KICBjcmVhdGluZyB0YXJiYWxscyB3aXRoIGEgdmVyc2lvbiBzdHJp
bmcgb2YgInVua25vd24iLgoKU29tZSB2YXJpYW50cyBhcmUgbW9yZSB1c2Vm
dWwgdGhhbiBvdGhlcnMuIEluY2x1ZGluZyBgZnVsbC1yZXZpc2lvbmlkYCBp
biBhCmJ1ZyByZXBvcnQgc2hvdWxkIGFsbG93IGRldmVsb3BlcnMgdG8gcmVj
b25zdHJ1Y3QgdGhlIGV4YWN0IGNvZGUgYmVpbmcgdGVzdGVkCihvciBpbmRp
Y2F0ZSB0aGUgcHJlc2VuY2Ugb2YgbG9jYWwgY2hhbmdlcyB0aGF0IHNob3Vs
ZCBiZSBzaGFyZWQgd2l0aCB0aGUKZGV2ZWxvcGVycykuIGB2ZXJzaW9uYCBp
cyBzdWl0YWJsZSBmb3IgZGlzcGxheSBpbiBhbiAiYWJvdXQiIGJveCBvciBh
IENMSQpgLS12ZXJzaW9uYCBvdXRwdXQ6IGl0IGNhbiBiZSBlYXNpbHkgY29t
cGFyZWQgYWdhaW5zdCByZWxlYXNlIG5vdGVzIGFuZCBsaXN0cwpvZiBidWdz
IGZpeGVkIGluIHZhcmlvdXMgcmVsZWFzZXMuCgpUaGUgaW5zdGFsbGVyIGFk
ZHMgdGhlIGZvbGxvd2luZyB0ZXh0IHRvIHlvdXIgYF9faW5pdF9fLnB5YCB0
byBwbGFjZSBhIGJhc2ljCnZlcnNpb24gaW4gYFlPVVJQUk9KRUNULl9fdmVy
c2lvbl9fYDoKCiAgICBmcm9tIC5fdmVyc2lvbiBpbXBvcnQgZ2V0X3ZlcnNp
b25zCiAgICBfX3ZlcnNpb25fXyA9IGdldF92ZXJzaW9ucygpWyd2ZXJzaW9u
J10KICAgIGRlbCBnZXRfdmVyc2lvbnMKCiMjIFN0eWxlcwoKVGhlIHNldHVw
LmNmZyBgc3R5bGU9YCBjb25maWd1cmF0aW9uIGNvbnRyb2xzIGhvdyB0aGUg
VkNTIGluZm9ybWF0aW9uIGlzCnJlbmRlcmVkIGludG8gYSB2ZXJzaW9uIHN0
cmluZy4KClRoZSBkZWZhdWx0IHN0eWxlLCAicGVwNDQwIiwgcHJvZHVjZXMg
YSBQRVA0NDAtY29tcGxpYW50IHN0cmluZywgZXF1YWwgdG8gdGhlCnVuLXBy
ZWZpeGVkIHRhZyBuYW1lIGZvciBhY3R1YWwgcmVsZWFzZXMsIGFuZCBjb250
YWluaW5nIGFuIGFkZGl0aW9uYWwgImxvY2FsCnZlcnNpb24iIHNlY3Rpb24g
d2l0aCBtb3JlIGRldGFpbCBmb3IgaW4tYmV0d2VlbiBidWlsZHMuIEZvciBH
aXQsIHRoaXMgaXMKVEFHWytESVNUQU5DRS5nSEVYWy5kaXJ0eV1dICwgdXNp
bmcgaW5mb3JtYXRpb24gZnJvbSBgZ2l0IGRlc2NyaWJlIC0tdGFncwotLWRp
cnR5IC0tYWx3YXlzYC4gRm9yIGV4YW1wbGUgIjAuMTErMi5nMTA3NmM5Ny5k
aXJ0eSIgaW5kaWNhdGVzIHRoYXQgdGhlCnRyZWUgaXMgbGlrZSB0aGUgIjEw
NzZjOTciIGNvbW1pdCBidXQgaGFzIHVuY29tbWl0dGVkIGNoYW5nZXMgKCIu
ZGlydHkiKSwgYW5kCnRoYXQgdGhpcyBjb21taXQgaXMgdHdvIHJldmlzaW9u
cyAoIisyIikgYmV5b25kIHRoZSAiMC4xMSIgdGFnLiBGb3IgcmVsZWFzZWQK
c29mdHdhcmUgKGV4YWN0bHkgZXF1YWwgdG8gYSBrbm93biB0YWcpLCB0aGUg
aWRlbnRpZmllciB3aWxsIG9ubHkgY29udGFpbiB0aGUKc3RyaXBwZWQgdGFn
LCBlLmcuICIwLjExIi4KCk90aGVyIHN0eWxlcyBhcmUgYXZhaWxhYmxlLiBT
ZWUgZGV0YWlscy5tZCBpbiB0aGUgVmVyc2lvbmVlciBzb3VyY2UgdHJlZSBm
b3IKZGVzY3JpcHRpb25zLgoKIyMgRGVidWdnaW5nCgpWZXJzaW9uZWVyIHRy
aWVzIHRvIGF2b2lkIGZhdGFsIGVycm9yczogaWYgc29tZXRoaW5nIGdvZXMg
d3JvbmcsIGl0IHdpbGwgdGVuZAp0byByZXR1cm4gYSB2ZXJzaW9uIG9mICIw
K3Vua25vd24iLiBUbyBpbnZlc3RpZ2F0ZSB0aGUgcHJvYmxlbSwgcnVuIGBz
ZXR1cC5weQp2ZXJzaW9uYCwgd2hpY2ggd2lsbCBydW4gdGhlIHZlcnNpb24t
bG9va3VwIGNvZGUgaW4gYSB2ZXJib3NlIG1vZGUsIGFuZCB3aWxsCmRpc3Bs
YXkgdGhlIGZ1bGwgY29udGVudHMgb2YgYGdldF92ZXJzaW9ucygpYCAoaW5j
bHVkaW5nIHRoZSBgZXJyb3JgIHN0cmluZywKd2hpY2ggbWF5IGhlbHAgaWRl
bnRpZnkgd2hhdCB3ZW50IHdyb25nKS4KCiMjIFVwZGF0aW5nIFZlcnNpb25l
ZXIKClRvIHVwZ3JhZGUgeW91ciBwcm9qZWN0IHRvIGEgbmV3IHJlbGVhc2Ug
b2YgVmVyc2lvbmVlciwgZG8gdGhlIGZvbGxvd2luZzoKCiogaW5zdGFsbCB0
aGUgbmV3IFZlcnNpb25lZXIgKGBwaXAgaW5zdGFsbCAtVSB2ZXJzaW9uZWVy
YCBvciBlcXVpdmFsZW50KQoqIGVkaXQgYHNldHVwLmNmZ2AsIGlmIG5lY2Vz
c2FyeSwgdG8gaW5jbHVkZSBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gc2V0dGlu
Z3MKICBpbmRpY2F0ZWQgYnkgdGhlIHJlbGVhc2Ugbm90ZXMKKiByZS1ydW4g
YHZlcnNpb25lZXIgaW5zdGFsbGAgaW4geW91ciBzb3VyY2UgdHJlZSwgdG8g
cmVwbGFjZQogIGBTUkMvX3ZlcnNpb24ucHlgCiogY29tbWl0IGFueSBjaGFu
Z2VkIGZpbGVzCgojIyMgVXBncmFkaW5nIHRvIDAuMTYKCk5vdGhpbmcgc3Bl
Y2lhbC4KCiMjIyBVcGdyYWRpbmcgdG8gMC4xNQoKU3RhcnRpbmcgd2l0aCB0
aGlzIHZlcnNpb24sIFZlcnNpb25lZXIgaXMgY29uZmlndXJlZCB3aXRoIGEg
YFt2ZXJzaW9uZWVyXWAKc2VjdGlvbiBpbiB5b3VyIGBzZXR1cC5jZmdgIGZp
bGUuIEVhcmxpZXIgdmVyc2lvbnMgcmVxdWlyZWQgdGhlIGBzZXR1cC5weWAg
dG8Kc2V0IGF0dHJpYnV0ZXMgb24gdGhlIGB2ZXJzaW9uZWVyYCBtb2R1bGUg
aW1tZWRpYXRlbHkgYWZ0ZXIgaW1wb3J0LiBUaGUgbmV3CnZlcnNpb24gd2ls
bCByZWZ1c2UgdG8gcnVuIChyYWlzaW5nIGFuIGV4Y2VwdGlvbiBkdXJpbmcg
aW1wb3J0KSB1bnRpbCB5b3UKaGF2ZSBwcm92aWRlZCB0aGUgbmVjZXNzYXJ5
IGBzZXR1cC5jZmdgIHNlY3Rpb24uCgpJbiBhZGRpdGlvbiwgdGhlIFZlcnNp
b25lZXIgcGFja2FnZSBwcm92aWRlcyBhbiBleGVjdXRhYmxlIG5hbWVkCmB2
ZXJzaW9uZWVyYCwgYW5kIHRoZSBpbnN0YWxsYXRpb24gcHJvY2VzcyBpcyBk
cml2ZW4gYnkgcnVubmluZyBgdmVyc2lvbmVlcgppbnN0YWxsYC4gSW4gMC4x
NCBhbmQgZWFybGllciwgdGhlIGV4ZWN1dGFibGUgd2FzIG5hbWVkCmB2ZXJz
aW9uZWVyLWluc3RhbGxlcmAgYW5kIHdhcyBydW4gd2l0aG91dCBhbiBhcmd1
bWVudC4KCiMjIyBVcGdyYWRpbmcgdG8gMC4xNAoKMC4xNCBjaGFuZ2VzIHRo
ZSBmb3JtYXQgb2YgdGhlIHZlcnNpb24gc3RyaW5nLiAwLjEzIGFuZCBlYXJs
aWVyIHVzZWQKaHlwaGVuLXNlcGFyYXRlZCBzdHJpbmdzIGxpa2UgIjAuMTEt
Mi1nMTA3NmM5Ny1kaXJ0eSIuIDAuMTQgYW5kIGJleW9uZCB1c2UgYQpwbHVz
LXNlcGFyYXRlZCAibG9jYWwgdmVyc2lvbiIgc2VjdGlvbiBzdHJpbmdzLCB3
aXRoIGRvdC1zZXBhcmF0ZWQKY29tcG9uZW50cywgbGlrZSAiMC4xMSsyLmcx
MDc2Yzk3Ii4gUEVQNDQwLXN0cmljdCB0b29scyBkaWQgbm90IGxpa2UgdGhl
IG9sZApmb3JtYXQsIGJ1dCBzaG91bGQgYmUgb2sgd2l0aCB0aGUgbmV3IG9u
ZS4KCiMjIyBVcGdyYWRpbmcgZnJvbSAwLjExIHRvIDAuMTIKCk5vdGhpbmcg
c3BlY2lhbC4KCiMjIyBVcGdyYWRpbmcgZnJvbSAwLjEwIHRvIDAuMTEKCllv
dSBtdXN0IGFkZCBhIGB2ZXJzaW9uZWVyLlZDUyA9ICJnaXQiYCB0byB5b3Vy
IGBzZXR1cC5weWAgYmVmb3JlIHJlLXJ1bm5pbmcKYHNldHVwLnB5IHNldHVw
X3ZlcnNpb25lZXJgLiBUaGlzIHdpbGwgZW5hYmxlIHRoZSB1c2Ugb2YgYWRk
aXRpb25hbAp2ZXJzaW9uLWNvbnRyb2wgc3lzdGVtcyAoU1ZOLCBldGMpIGlu
IHRoZSBmdXR1cmUuCgojIyBGdXR1cmUgRGlyZWN0aW9ucwoKVGhpcyB0b29s
IGlzIGRlc2lnbmVkIHRvIG1ha2UgaXQgZWFzaWx5IGV4dGVuZGVkIHRvIG90
aGVyIHZlcnNpb24tY29udHJvbApzeXN0ZW1zOiBhbGwgVkNTLXNwZWNpZmlj
IGNvbXBvbmVudHMgYXJlIGluIHNlcGFyYXRlIGRpcmVjdG9yaWVzIGxpa2UK
c3JjL2dpdC8gLiBUaGUgdG9wLWxldmVsIGB2ZXJzaW9uZWVyLnB5YCBzY3Jp
cHQgaXMgYXNzZW1ibGVkIGZyb20gdGhlc2UKY29tcG9uZW50cyBieSBydW5u
aW5nIG1ha2UtdmVyc2lvbmVlci5weSAuIEluIHRoZSBmdXR1cmUsIG1ha2Ut
dmVyc2lvbmVlci5weQp3aWxsIHRha2UgYSBWQ1MgbmFtZSBhcyBhbiBhcmd1
bWVudCwgYW5kIHdpbGwgY29uc3RydWN0IGEgdmVyc2lvbiBvZgpgdmVyc2lv
bmVlci5weWAgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgZ2l2ZW4gVkNTLiBJ
dCBtaWdodCBhbHNvIHRha2UgdGhlCmNvbmZpZ3VyYXRpb24gYXJndW1lbnRz
IHRoYXQgYXJlIGN1cnJlbnRseSBwcm92aWRlZCBtYW51YWxseSBkdXJpbmcK
aW5zdGFsbGF0aW9uIGJ5IGVkaXRpbmcgc2V0dXAucHkgLiBBbHRlcm5hdGl2
ZWx5LCBpdCBtaWdodCBnbyB0aGUgb3RoZXIKZGlyZWN0aW9uIGFuZCBpbmNs
dWRlIGNvZGUgZnJvbSBhbGwgc3VwcG9ydGVkIFZDUyBzeXN0ZW1zLCByZWR1
Y2luZyB0aGUKbnVtYmVyIG9mIGludGVybWVkaWF0ZSBzY3JpcHRzLgoKCiMj
IExpY2Vuc2UKClRvIG1ha2UgVmVyc2lvbmVlciBlYXNpZXIgdG8gZW1iZWQs
IGFsbCBpdHMgY29kZSBpcyBkZWRpY2F0ZWQgdG8gdGhlIHB1YmxpYwpkb21h
aW4uIFRoZSBgX3ZlcnNpb24ucHlgIHRoYXQgaXQgY3JlYXRlcyBpcyBhbHNv
IGluIHRoZSBwdWJsaWMgZG9tYWluLgpTcGVjaWZpY2FsbHksIGJvdGggYXJl
IHJlbGVhc2VkIHVuZGVyIHRoZSBDcmVhdGl2ZSBDb21tb25zICJQdWJsaWMg
RG9tYWluCkRlZGljYXRpb24iIGxpY2Vuc2UgKENDMC0xLjApLCBhcyBkZXNj
cmliZWQgaW4KaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2Rv
bWFpbi96ZXJvLzEuMC8gLgoKIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0
IHByaW50X2Z1bmN0aW9uCnRyeToKICAgIGltcG9ydCBjb25maWdwYXJzZXIK
ZXhjZXB0IEltcG9ydEVycm9yOgogICAgaW1wb3J0IENvbmZpZ1BhcnNlciBh
cyBjb25maWdwYXJzZXIKaW1wb3J0IGVycm5vCmltcG9ydCBqc29uCmltcG9y
dCBvcwppbXBvcnQgcmUKaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IHN5cwoK
CmNsYXNzIFZlcnNpb25lZXJDb25maWc6CiAgICAiIiJDb250YWluZXIgZm9y
IFZlcnNpb25lZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiIiIgoKCmRl
ZiBnZXRfcm9vdCgpOgogICAgIiIiR2V0IHRoZSBwcm9qZWN0IHJvb3QgZGly
ZWN0b3J5LgoKICAgIFdlIHJlcXVpcmUgdGhhdCBhbGwgY29tbWFuZHMgYXJl
IHJ1biBmcm9tIHRoZSBwcm9qZWN0IHJvb3QsIGkuZS4gdGhlCiAgICBkaXJl
Y3RvcnkgdGhhdCBjb250YWlucyBzZXR1cC5weSwgc2V0dXAuY2ZnLCBhbmQg
dmVyc2lvbmVlci5weSAuCiAgICAiIiIKICAgIHJvb3QgPSBvcy5wYXRoLnJl
YWxwYXRoKG9zLnBhdGguYWJzcGF0aChvcy5nZXRjd2QoKSkpCiAgICBzZXR1
cF9weSA9IG9zLnBhdGguam9pbihyb290LCAic2V0dXAucHkiKQogICAgdmVy
c2lvbmVlcl9weSA9IG9zLnBhdGguam9pbihyb290LCAidmVyc2lvbmVlci5w
eSIpCiAgICBpZiBub3QgKG9zLnBhdGguZXhpc3RzKHNldHVwX3B5KSBvciBv
cy5wYXRoLmV4aXN0cyh2ZXJzaW9uZWVyX3B5KSk6CiAgICAgICAgIyBhbGxv
dyAncHl0aG9uIHBhdGgvdG8vc2V0dXAucHkgQ09NTUFORCcKICAgICAgICBy
b290ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgob3MucGF0
aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpCiAgICAgICAgc2V0dXBfcHkgPSBv
cy5wYXRoLmpvaW4ocm9vdCwgInNldHVwLnB5IikKICAgICAgICB2ZXJzaW9u
ZWVyX3B5ID0gb3MucGF0aC5qb2luKHJvb3QsICJ2ZXJzaW9uZWVyLnB5IikK
ICAgIGlmIG5vdCAob3MucGF0aC5leGlzdHMoc2V0dXBfcHkpIG9yIG9zLnBh
dGguZXhpc3RzKHZlcnNpb25lZXJfcHkpKToKICAgICAgICBlcnIgPSAoIlZl
cnNpb25lZXIgd2FzIHVuYWJsZSB0byBydW4gdGhlIHByb2plY3Qgcm9vdCBk
aXJlY3RvcnkuICIKICAgICAgICAgICAgICAgIlZlcnNpb25lZXIgcmVxdWly
ZXMgc2V0dXAucHkgdG8gYmUgZXhlY3V0ZWQgZnJvbSAiCiAgICAgICAgICAg
ICAgICJpdHMgaW1tZWRpYXRlIGRpcmVjdG9yeSAobGlrZSAncHl0aG9uIHNl
dHVwLnB5IENPTU1BTkQnKSwgIgogICAgICAgICAgICAgICAib3IgaW4gYSB3
YXkgdGhhdCBsZXRzIGl0IHVzZSBzeXMuYXJndlswXSB0byBmaW5kIHRoZSBy
b290ICIKICAgICAgICAgICAgICAgIihsaWtlICdweXRob24gcGF0aC90by9z
ZXR1cC5weSBDT01NQU5EJykuIikKICAgICAgICByYWlzZSBWZXJzaW9uZWVy
QmFkUm9vdEVycm9yKGVycikKICAgIHRyeToKICAgICAgICAjIENlcnRhaW4g
cnVudGltZSB3b3JrZmxvd3MgKHNldHVwLnB5IGluc3RhbGwvZGV2ZWxvcCBp
biBhIHNldHVwdG9vbHMKICAgICAgICAjIHRyZWUpIGV4ZWN1dGUgYWxsIGRl
cGVuZGVuY2llcyBpbiBhIHNpbmdsZSBweXRob24gcHJvY2Vzcywgc28KICAg
ICAgICAjICJ2ZXJzaW9uZWVyIiBtYXkgYmUgaW1wb3J0ZWQgbXVsdGlwbGUg
dGltZXMsIGFuZCBweXRob24ncyBzaGFyZWQKICAgICAgICAjIG1vZHVsZS1p
bXBvcnQgdGFibGUgd2lsbCBjYWNoZSB0aGUgZmlyc3Qgb25lLiBTbyB3ZSBj
YW4ndCB1c2UKICAgICAgICAjIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyks
IGFzIHRoYXQgd2lsbCBmaW5kIHdoaWNoZXZlcgogICAgICAgICMgdmVyc2lv
bmVlci5weSB3YXMgZmlyc3QgaW1wb3J0ZWQsIGV2ZW4gaW4gbGF0ZXIgcHJv
amVjdHMuCiAgICAgICAgbWUgPSBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGgu
YWJzcGF0aChfX2ZpbGVfXykpCiAgICAgICAgaWYgb3MucGF0aC5zcGxpdGV4
dChtZSlbMF0gIT0gb3MucGF0aC5zcGxpdGV4dCh2ZXJzaW9uZWVyX3B5KVsw
XToKICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IGJ1aWxkIGluICVzIGlz
IHVzaW5nIHZlcnNpb25lZXIucHkgZnJvbSAlcyIKICAgICAgICAgICAgICAg
ICAgJSAob3MucGF0aC5kaXJuYW1lKG1lKSwgdmVyc2lvbmVlcl9weSkpCiAg
ICBleGNlcHQgTmFtZUVycm9yOgogICAgICAgIHBhc3MKICAgIHJldHVybiBy
b290CgoKZGVmIGdldF9jb25maWdfZnJvbV9yb290KHJvb3QpOgogICAgIiIi
UmVhZCB0aGUgcHJvamVjdCBzZXR1cC5jZmcgZmlsZSB0byBkZXRlcm1pbmUg
VmVyc2lvbmVlciBjb25maWcuIiIiCiAgICAjIFRoaXMgbWlnaHQgcmFpc2Ug
RW52aXJvbm1lbnRFcnJvciAoaWYgc2V0dXAuY2ZnIGlzIG1pc3NpbmcpLCBv
cgogICAgIyBjb25maWdwYXJzZXIuTm9TZWN0aW9uRXJyb3IgKGlmIGl0IGxh
Y2tzIGEgW3ZlcnNpb25lZXJdIHNlY3Rpb24pLCBvcgogICAgIyBjb25maWdw
YXJzZXIuTm9PcHRpb25FcnJvciAoaWYgaXQgbGFja3MgIlZDUz0iKS4gU2Vl
IHRoZSBkb2NzdHJpbmcgYXQKICAgICMgdGhlIHRvcCBvZiB2ZXJzaW9uZWVy
LnB5IGZvciBpbnN0cnVjdGlvbnMgb24gd3JpdGluZyB5b3VyIHNldHVwLmNm
ZyAuCiAgICBzZXR1cF9jZmcgPSBvcy5wYXRoLmpvaW4ocm9vdCwgInNldHVw
LmNmZyIpCiAgICBwYXJzZXIgPSBjb25maWdwYXJzZXIuU2FmZUNvbmZpZ1Bh
cnNlcigpCiAgICB3aXRoIG9wZW4oc2V0dXBfY2ZnLCAiciIpIGFzIGY6CiAg
ICAgICAgcGFyc2VyLnJlYWRmcChmKQogICAgVkNTID0gcGFyc2VyLmdldCgi
dmVyc2lvbmVlciIsICJWQ1MiKSAgIyBtYW5kYXRvcnkKCiAgICBkZWYgZ2V0
KHBhcnNlciwgbmFtZSk6CiAgICAgICAgaWYgcGFyc2VyLmhhc19vcHRpb24o
InZlcnNpb25lZXIiLCBuYW1lKToKICAgICAgICAgICAgcmV0dXJuIHBhcnNl
ci5nZXQoInZlcnNpb25lZXIiLCBuYW1lKQogICAgICAgIHJldHVybiBOb25l
CiAgICBjZmcgPSBWZXJzaW9uZWVyQ29uZmlnKCkKICAgIGNmZy5WQ1MgPSBW
Q1MKICAgIGNmZy5zdHlsZSA9IGdldChwYXJzZXIsICJzdHlsZSIpIG9yICIi
CiAgICBjZmcudmVyc2lvbmZpbGVfc291cmNlID0gZ2V0KHBhcnNlciwgInZl
cnNpb25maWxlX3NvdXJjZSIpCiAgICBjZmcudmVyc2lvbmZpbGVfYnVpbGQg
PSBnZXQocGFyc2VyLCAidmVyc2lvbmZpbGVfYnVpbGQiKQogICAgY2ZnLnRh
Z19wcmVmaXggPSBnZXQocGFyc2VyLCAidGFnX3ByZWZpeCIpCiAgICBpZiBj
ZmcudGFnX3ByZWZpeCBpbiAoIicnIiwgJyIiJyk6CiAgICAgICAgY2ZnLnRh
Z19wcmVmaXggPSAiIgogICAgY2ZnLnBhcmVudGRpcl9wcmVmaXggPSBnZXQo
cGFyc2VyLCAicGFyZW50ZGlyX3ByZWZpeCIpCiAgICBjZmcudmVyYm9zZSA9
IGdldChwYXJzZXIsICJ2ZXJib3NlIikKICAgIHJldHVybiBjZmcKCgpjbGFz
cyBOb3RUaGlzTWV0aG9kKEV4Y2VwdGlvbik6CiAgICAiIiJFeGNlcHRpb24g
cmFpc2VkIGlmIGEgbWV0aG9kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGN1cnJl
bnQgc2NlbmFyaW8uIiIiCgojIHRoZXNlIGRpY3Rpb25hcmllcyBjb250YWlu
IFZDUy1zcGVjaWZpYyB0b29scwpMT05HX1ZFUlNJT05fUFkgPSB7fQpIQU5E
TEVSUyA9IHt9CgoKZGVmIHJlZ2lzdGVyX3Zjc19oYW5kbGVyKHZjcywgbWV0
aG9kKTogICMgZGVjb3JhdG9yCiAgICAiIiJEZWNvcmF0b3IgdG8gbWFyayBh
IG1ldGhvZCBhcyB0aGUgaGFuZGxlciBmb3IgYSBwYXJ0aWN1bGFyIFZDUy4i
IiIKICAgIGRlZiBkZWNvcmF0ZShmKToKICAgICAgICAiIiJTdG9yZSBmIGlu
IEhBTkRMRVJTW3Zjc11bbWV0aG9kXS4iIiIKICAgICAgICBpZiB2Y3Mgbm90
IGluIEhBTkRMRVJTOgogICAgICAgICAgICBIQU5ETEVSU1t2Y3NdID0ge30K
ICAgICAgICBIQU5ETEVSU1t2Y3NdW21ldGhvZF0gPSBmCiAgICAgICAgcmV0
dXJuIGYKICAgIHJldHVybiBkZWNvcmF0ZQoKCmRlZiBydW5fY29tbWFuZChj
b21tYW5kcywgYXJncywgY3dkPU5vbmUsIHZlcmJvc2U9RmFsc2UsIGhpZGVf
c3RkZXJyPUZhbHNlKToKICAgICIiIkNhbGwgdGhlIGdpdmVuIGNvbW1hbmQo
cykuIiIiCiAgICBhc3NlcnQgaXNpbnN0YW5jZShjb21tYW5kcywgbGlzdCkK
ICAgIHAgPSBOb25lCiAgICBmb3IgYyBpbiBjb21tYW5kczoKICAgICAgICB0
cnk6CiAgICAgICAgICAgIGRpc3BjbWQgPSBzdHIoW2NdICsgYXJncykKICAg
ICAgICAgICAgIyByZW1lbWJlciBzaGVsbD1GYWxzZSwgc28gdXNlIGdpdC5j
bWQgb24gd2luZG93cywgbm90IGp1c3QgZ2l0CiAgICAgICAgICAgIHAgPSBz
dWJwcm9jZXNzLlBvcGVuKFtjXSArIGFyZ3MsIGN3ZD1jd2QsIHN0ZG91dD1z
dWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZGVycj0oc3VicHJvY2Vzcy5QSVBFIGlmIGhpZGVfc3RkZXJyCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBO
b25lKSkKICAgICAgICAgICAgYnJlYWsKICAgICAgICBleGNlcHQgRW52aXJv
bm1lbnRFcnJvcjoKICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFd
CiAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAg
ICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgdmVyYm9zZToK
ICAgICAgICAgICAgICAgIHByaW50KCJ1bmFibGUgdG8gcnVuICVzIiAlIGRp
c3BjbWQpCiAgICAgICAgICAgICAgICBwcmludChlKQogICAgICAgICAgICBy
ZXR1cm4gTm9uZQogICAgZWxzZToKICAgICAgICBpZiB2ZXJib3NlOgogICAg
ICAgICAgICBwcmludCgidW5hYmxlIHRvIGZpbmQgY29tbWFuZCwgdHJpZWQg
JXMiICUgKGNvbW1hbmRzLCkpCiAgICAgICAgcmV0dXJuIE5vbmUKICAgIHN0
ZG91dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCiAgICBpZiBzeXMu
dmVyc2lvbl9pbmZvWzBdID49IDM6CiAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0
LmRlY29kZSgpCiAgICBpZiBwLnJldHVybmNvZGUgIT0gMDoKICAgICAgICBp
ZiB2ZXJib3NlOgogICAgICAgICAgICBwcmludCgidW5hYmxlIHRvIHJ1biAl
cyAoZXJyb3IpIiAlIGRpc3BjbWQpCiAgICAgICAgcmV0dXJuIE5vbmUKICAg
IHJldHVybiBzdGRvdXQKTE9OR19WRVJTSU9OX1BZWydnaXQnXSA9ICcnJwoj
IFRoaXMgZmlsZSBoZWxwcyB0byBjb21wdXRlIGEgdmVyc2lvbiBudW1iZXIg
aW4gc291cmNlIHRyZWVzIG9idGFpbmVkIGZyb20KIyBnaXQtYXJjaGl2ZSB0
YXJiYWxsIChzdWNoIGFzIHRob3NlIHByb3ZpZGVkIGJ5IGdpdGh1YnMgZG93
bmxvYWQtZnJvbS10YWcKIyBmZWF0dXJlKS4gRGlzdHJpYnV0aW9uIHRhcmJh
bGxzIChidWlsdCBieSBzZXR1cC5weSBzZGlzdCkgYW5kIGJ1aWxkCiMgZGly
ZWN0b3JpZXMgKHByb2R1Y2VkIGJ5IHNldHVwLnB5IGJ1aWxkKSB3aWxsIGNv
bnRhaW4gYSBtdWNoIHNob3J0ZXIgZmlsZQojIHRoYXQganVzdCBjb250YWlu
cyB0aGUgY29tcHV0ZWQgdmVyc2lvbiBudW1iZXIuCgojIFRoaXMgZmlsZSBp
cyByZWxlYXNlZCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluLiBHZW5lcmF0ZWQg
YnkKIyB2ZXJzaW9uZWVyLTAuMTYgKGh0dHBzOi8vZ2l0aHViLmNvbS93YXJu
ZXIvcHl0aG9uLXZlcnNpb25lZXIpCgoiIiJHaXQgaW1wbGVtZW50YXRpb24g
b2YgX3ZlcnNpb24ucHkuIiIiCgppbXBvcnQgZXJybm8KaW1wb3J0IG9zCmlt
cG9ydCByZQppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgc3lzCgoKZGVmIGdl
dF9rZXl3b3JkcygpOgogICAgIiIiR2V0IHRoZSBrZXl3b3JkcyBuZWVkZWQg
dG8gbG9vayB1cCB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbi4iIiIKICAgICMg
dGhlc2Ugc3RyaW5ncyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGdpdCBkdXJpbmcg
Z2l0LWFyY2hpdmUuCiAgICAjIHNldHVwLnB5L3ZlcnNpb25lZXIucHkgd2ls
bCBncmVwIGZvciB0aGUgdmFyaWFibGUgbmFtZXMsIHNvIHRoZXkgbXVzdAog
ICAgIyBlYWNoIGJlIGRlZmluZWQgb24gYSBsaW5lIG9mIHRoZWlyIG93bi4g
X3ZlcnNpb24ucHkgd2lsbCBqdXN0IGNhbGwKICAgICMgZ2V0X2tleXdvcmRz
KCkuCiAgICBnaXRfcmVmbmFtZXMgPSAiJShET0xMQVIpc0Zvcm1hdDolJWQl
KERPTExBUilzIgogICAgZ2l0X2Z1bGwgPSAiJShET0xMQVIpc0Zvcm1hdDol
JUglKERPTExBUilzIgogICAga2V5d29yZHMgPSB7InJlZm5hbWVzIjogZ2l0
X3JlZm5hbWVzLCAiZnVsbCI6IGdpdF9mdWxsfQogICAgcmV0dXJuIGtleXdv
cmRzCgoKY2xhc3MgVmVyc2lvbmVlckNvbmZpZzoKICAgICIiIkNvbnRhaW5l
ciBmb3IgVmVyc2lvbmVlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIiIi
CgoKZGVmIGdldF9jb25maWcoKToKICAgICIiIkNyZWF0ZSwgcG9wdWxhdGUg
YW5kIHJldHVybiB0aGUgVmVyc2lvbmVlckNvbmZpZygpIG9iamVjdC4iIiIK
ICAgICMgdGhlc2Ugc3RyaW5ncyBhcmUgZmlsbGVkIGluIHdoZW4gJ3NldHVw
LnB5IHZlcnNpb25lZXInIGNyZWF0ZXMKICAgICMgX3ZlcnNpb24ucHkKICAg
IGNmZyA9IFZlcnNpb25lZXJDb25maWcoKQogICAgY2ZnLlZDUyA9ICJnaXQi
CiAgICBjZmcuc3R5bGUgPSAiJShTVFlMRSlzIgogICAgY2ZnLnRhZ19wcmVm
aXggPSAiJShUQUdfUFJFRklYKXMiCiAgICBjZmcucGFyZW50ZGlyX3ByZWZp
eCA9ICIlKFBBUkVOVERJUl9QUkVGSVgpcyIKICAgIGNmZy52ZXJzaW9uZmls
ZV9zb3VyY2UgPSAiJShWRVJTSU9ORklMRV9TT1VSQ0UpcyIKICAgIGNmZy52
ZXJib3NlID0gRmFsc2UKICAgIHJldHVybiBjZmcKCgpjbGFzcyBOb3RUaGlz
TWV0aG9kKEV4Y2VwdGlvbik6CiAgICAiIiJFeGNlcHRpb24gcmFpc2VkIGlm
IGEgbWV0aG9kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGN1cnJlbnQgc2NlbmFy
aW8uIiIiCgoKTE9OR19WRVJTSU9OX1BZID0ge30KSEFORExFUlMgPSB7fQoK
CmRlZiByZWdpc3Rlcl92Y3NfaGFuZGxlcih2Y3MsIG1ldGhvZCk6ICAjIGRl
Y29yYXRvcgogICAgIiIiRGVjb3JhdG9yIHRvIG1hcmsgYSBtZXRob2QgYXMg
dGhlIGhhbmRsZXIgZm9yIGEgcGFydGljdWxhciBWQ1MuIiIiCiAgICBkZWYg
ZGVjb3JhdGUoZik6CiAgICAgICAgIiIiU3RvcmUgZiBpbiBIQU5ETEVSU1t2
Y3NdW21ldGhvZF0uIiIiCiAgICAgICAgaWYgdmNzIG5vdCBpbiBIQU5ETEVS
UzoKICAgICAgICAgICAgSEFORExFUlNbdmNzXSA9IHt9CiAgICAgICAgSEFO
RExFUlNbdmNzXVttZXRob2RdID0gZgogICAgICAgIHJldHVybiBmCiAgICBy
ZXR1cm4gZGVjb3JhdGUKCgpkZWYgcnVuX2NvbW1hbmQoY29tbWFuZHMsIGFy
Z3MsIGN3ZD1Ob25lLCB2ZXJib3NlPUZhbHNlLCBoaWRlX3N0ZGVycj1GYWxz
ZSk6CiAgICAiIiJDYWxsIHRoZSBnaXZlbiBjb21tYW5kKHMpLiIiIgogICAg
YXNzZXJ0IGlzaW5zdGFuY2UoY29tbWFuZHMsIGxpc3QpCiAgICBwID0gTm9u
ZQogICAgZm9yIGMgaW4gY29tbWFuZHM6CiAgICAgICAgdHJ5OgogICAgICAg
ICAgICBkaXNwY21kID0gc3RyKFtjXSArIGFyZ3MpCiAgICAgICAgICAgICMg
cmVtZW1iZXIgc2hlbGw9RmFsc2UsIHNvIHVzZSBnaXQuY21kIG9uIHdpbmRv
d3MsIG5vdCBqdXN0IGdpdAogICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Q
b3BlbihbY10gKyBhcmdzLCBjd2Q9Y3dkLCBzdGRvdXQ9c3VicHJvY2Vzcy5Q
SVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9
KHN1YnByb2Nlc3MuUElQRSBpZiBoaWRlX3N0ZGVycgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgTm9uZSkpCiAgICAg
ICAgICAgIGJyZWFrCiAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6
CiAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQogICAgICAgICAg
ICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAg
IGNvbnRpbnVlCiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAg
ICAgICBwcmludCgidW5hYmxlIHRvIHJ1biAlJXMiICUlIGRpc3BjbWQpCiAg
ICAgICAgICAgICAgICBwcmludChlKQogICAgICAgICAgICByZXR1cm4gTm9u
ZQogICAgZWxzZToKICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICBw
cmludCgidW5hYmxlIHRvIGZpbmQgY29tbWFuZCwgdHJpZWQgJSVzIiAlJSAo
Y29tbWFuZHMsKSkKICAgICAgICByZXR1cm4gTm9uZQogICAgc3Rkb3V0ID0g
cC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKICAgIGlmIHN5cy52ZXJzaW9u
X2luZm9bMF0gPj0gMzoKICAgICAgICBzdGRvdXQgPSBzdGRvdXQuZGVjb2Rl
KCkKICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgogICAgICAgIGlmIHZlcmJv
c2U6CiAgICAgICAgICAgIHByaW50KCJ1bmFibGUgdG8gcnVuICUlcyAoZXJy
b3IpIiAlJSBkaXNwY21kKQogICAgICAgIHJldHVybiBOb25lCiAgICByZXR1
cm4gc3Rkb3V0CgoKZGVmIHZlcnNpb25zX2Zyb21fcGFyZW50ZGlyKHBhcmVu
dGRpcl9wcmVmaXgsIHJvb3QsIHZlcmJvc2UpOgogICAgIiIiVHJ5IHRvIGRl
dGVybWluZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSBwYXJlbnQgZGlyZWN0b3J5
IG5hbWUuCgogICAgU291cmNlIHRhcmJhbGxzIGNvbnZlbnRpb25hbGx5IHVu
cGFjayBpbnRvIGEgZGlyZWN0b3J5IHRoYXQgaW5jbHVkZXMKICAgIGJvdGgg
dGhlIHByb2plY3QgbmFtZSBhbmQgYSB2ZXJzaW9uIHN0cmluZy4KICAgICIi
IgogICAgZGlybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocm9vdCkKICAgIGlm
IG5vdCBkaXJuYW1lLnN0YXJ0c3dpdGgocGFyZW50ZGlyX3ByZWZpeCk6CiAg
ICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQoImd1ZXNzaW5n
IHJvb3RkaXIgaXMgJyUlcycsIGJ1dCAnJSVzJyBkb2Vzbid0IHN0YXJ0IHdp
dGggIgogICAgICAgICAgICAgICAgICAicHJlZml4ICclJXMnIiAlJSAocm9v
dCwgZGlybmFtZSwgcGFyZW50ZGlyX3ByZWZpeCkpCiAgICAgICAgcmFpc2Ug
Tm90VGhpc01ldGhvZCgicm9vdGRpciBkb2Vzbid0IHN0YXJ0IHdpdGggcGFy
ZW50ZGlyX3ByZWZpeCIpCiAgICByZXR1cm4geyJ2ZXJzaW9uIjogZGlybmFt
ZVtsZW4ocGFyZW50ZGlyX3ByZWZpeCk6XSwKICAgICAgICAgICAgImZ1bGwt
cmV2aXNpb25pZCI6IE5vbmUsCiAgICAgICAgICAgICJkaXJ0eSI6IEZhbHNl
LCAiZXJyb3IiOiBOb25lfQoKCkByZWdpc3Rlcl92Y3NfaGFuZGxlcigiZ2l0
IiwgImdldF9rZXl3b3JkcyIpCmRlZiBnaXRfZ2V0X2tleXdvcmRzKHZlcnNp
b25maWxlX2Ficyk6CiAgICAiIiJFeHRyYWN0IHZlcnNpb24gaW5mb3JtYXRp
b24gZnJvbSB0aGUgZ2l2ZW4gZmlsZS4iIiIKICAgICMgdGhlIGNvZGUgZW1i
ZWRkZWQgaW4gX3ZlcnNpb24ucHkgY2FuIGp1c3QgZmV0Y2ggdGhlIHZhbHVl
IG9mIHRoZXNlCiAgICAjIGtleXdvcmRzLiBXaGVuIHVzZWQgZnJvbSBzZXR1
cC5weSwgd2UgZG9uJ3Qgd2FudCB0byBpbXBvcnQgX3ZlcnNpb24ucHksCiAg
ICAjIHNvIHdlIGRvIGl0IHdpdGggYSByZWdleHAgaW5zdGVhZC4gVGhpcyBm
dW5jdGlvbiBpcyBub3QgdXNlZCBmcm9tCiAgICAjIF92ZXJzaW9uLnB5Lgog
ICAga2V5d29yZHMgPSB7fQogICAgdHJ5OgogICAgICAgIGYgPSBvcGVuKHZl
cnNpb25maWxlX2FicywgInIiKQogICAgICAgIGZvciBsaW5lIGluIGYucmVh
ZGxpbmVzKCk6CiAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKS5zdGFydHN3
aXRoKCJnaXRfcmVmbmFtZXMgPSIpOgogICAgICAgICAgICAgICAgbW8gPSBy
ZS5zZWFyY2gocic9XHMqIiguKikiJywgbGluZSkKICAgICAgICAgICAgICAg
IGlmIG1vOgogICAgICAgICAgICAgICAgICAgIGtleXdvcmRzWyJyZWZuYW1l
cyJdID0gbW8uZ3JvdXAoMSkKICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgp
LnN0YXJ0c3dpdGgoImdpdF9mdWxsID0iKToKICAgICAgICAgICAgICAgIG1v
ID0gcmUuc2VhcmNoKHInPVxzKiIoLiopIicsIGxpbmUpCiAgICAgICAgICAg
ICAgICBpZiBtbzoKICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkc1siZnVs
bCJdID0gbW8uZ3JvdXAoMSkKICAgICAgICBmLmNsb3NlKCkKICAgIGV4Y2Vw
dCBFbnZpcm9ubWVudEVycm9yOgogICAgICAgIHBhc3MKICAgIHJldHVybiBr
ZXl3b3JkcwoKCkByZWdpc3Rlcl92Y3NfaGFuZGxlcigiZ2l0IiwgImtleXdv
cmRzIikKZGVmIGdpdF92ZXJzaW9uc19mcm9tX2tleXdvcmRzKGtleXdvcmRz
LCB0YWdfcHJlZml4LCB2ZXJib3NlKToKICAgICIiIkdldCB2ZXJzaW9uIGlu
Zm9ybWF0aW9uIGZyb20gZ2l0IGtleXdvcmRzLiIiIgogICAgaWYgbm90IGtl
eXdvcmRzOgogICAgICAgIHJhaXNlIE5vdFRoaXNNZXRob2QoIm5vIGtleXdv
cmRzIGF0IGFsbCwgd2VpcmQiKQogICAgcmVmbmFtZXMgPSBrZXl3b3Jkc1si
cmVmbmFtZXMiXS5zdHJpcCgpCiAgICBpZiByZWZuYW1lcy5zdGFydHN3aXRo
KCIkRm9ybWF0Iik6CiAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAg
cHJpbnQoImtleXdvcmRzIGFyZSB1bmV4cGFuZGVkLCBub3QgdXNpbmciKQog
ICAgICAgIHJhaXNlIE5vdFRoaXNNZXRob2QoInVuZXhwYW5kZWQga2V5d29y
ZHMsIG5vdCBhIGdpdC1hcmNoaXZlIHRhcmJhbGwiKQogICAgcmVmcyA9IHNl
dChbci5zdHJpcCgpIGZvciByIGluIHJlZm5hbWVzLnN0cmlwKCIoKSIpLnNw
bGl0KCIsIildKQogICAgIyBzdGFydGluZyBpbiBnaXQtMS44LjMsIHRhZ3Mg
YXJlIGxpc3RlZCBhcyAidGFnOiBmb28tMS4wIiBpbnN0ZWFkIG9mCiAgICAj
IGp1c3QgImZvby0xLjAiLiBJZiB3ZSBzZWUgYSAidGFnOiAiIHByZWZpeCwg
cHJlZmVyIHRob3NlLgogICAgVEFHID0gInRhZzogIgogICAgdGFncyA9IHNl
dChbcltsZW4oVEFHKTpdIGZvciByIGluIHJlZnMgaWYgci5zdGFydHN3aXRo
KFRBRyldKQogICAgaWYgbm90IHRhZ3M6CiAgICAgICAgIyBFaXRoZXIgd2Un
cmUgdXNpbmcgZ2l0IDwgMS44LjMsIG9yIHRoZXJlIHJlYWxseSBhcmUgbm8g
dGFncy4gV2UgdXNlCiAgICAgICAgIyBhIGhldXJpc3RpYzogYXNzdW1lIGFs
bCB2ZXJzaW9uIHRhZ3MgaGF2ZSBhIGRpZ2l0LiBUaGUgb2xkIGdpdCAlJWQK
ICAgICAgICAjIGV4cGFuc2lvbiBiZWhhdmVzIGxpa2UgZ2l0IGxvZyAtLWRl
Y29yYXRlPXNob3J0IGFuZCBzdHJpcHMgb3V0IHRoZQogICAgICAgICMgcmVm
cy9oZWFkcy8gYW5kIHJlZnMvdGFncy8gcHJlZml4ZXMgdGhhdCB3b3VsZCBs
ZXQgdXMgZGlzdGluZ3Vpc2gKICAgICAgICAjIGJldHdlZW4gYnJhbmNoZXMg
YW5kIHRhZ3MuIEJ5IGlnbm9yaW5nIHJlZm5hbWVzIHdpdGhvdXQgZGlnaXRz
LCB3ZQogICAgICAgICMgZmlsdGVyIG91dCBtYW55IGNvbW1vbiBicmFuY2gg
bmFtZXMgbGlrZSAicmVsZWFzZSIgYW5kCiAgICAgICAgIyAic3RhYmlsaXph
dGlvbiIsIGFzIHdlbGwgYXMgIkhFQUQiIGFuZCAibWFzdGVyIi4KICAgICAg
ICB0YWdzID0gc2V0KFtyIGZvciByIGluIHJlZnMgaWYgcmUuc2VhcmNoKHIn
XGQnLCByKV0pCiAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJp
bnQoImRpc2NhcmRpbmcgJyUlcycsIG5vIGRpZ2l0cyIgJSUgIiwiLmpvaW4o
cmVmcy10YWdzKSkKICAgIGlmIHZlcmJvc2U6CiAgICAgICAgcHJpbnQoImxp
a2VseSB0YWdzOiAlJXMiICUlICIsIi5qb2luKHNvcnRlZCh0YWdzKSkpCiAg
ICBmb3IgcmVmIGluIHNvcnRlZCh0YWdzKToKICAgICAgICAjIHNvcnRpbmcg
d2lsbCBwcmVmZXIgZS5nLiAiMi4wIiBvdmVyICIyLjByYzEiCiAgICAgICAg
aWYgcmVmLnN0YXJ0c3dpdGgodGFnX3ByZWZpeCk6CiAgICAgICAgICAgIHIg
PSByZWZbbGVuKHRhZ19wcmVmaXgpOl0KICAgICAgICAgICAgaWYgdmVyYm9z
ZToKICAgICAgICAgICAgICAgIHByaW50KCJwaWNraW5nICUlcyIgJSUgcikK
ICAgICAgICAgICAgcmV0dXJuIHsidmVyc2lvbiI6IHIsCiAgICAgICAgICAg
ICAgICAgICAgImZ1bGwtcmV2aXNpb25pZCI6IGtleXdvcmRzWyJmdWxsIl0u
c3RyaXAoKSwKICAgICAgICAgICAgICAgICAgICAiZGlydHkiOiBGYWxzZSwg
ImVycm9yIjogTm9uZQogICAgICAgICAgICAgICAgICAgIH0KICAgICMgbm8g
c3VpdGFibGUgdGFncywgc28gdmVyc2lvbiBpcyAiMCt1bmtub3duIiwgYnV0
IGZ1bGwgaGV4IGlzIHN0aWxsIHRoZXJlCiAgICBpZiB2ZXJib3NlOgogICAg
ICAgIHByaW50KCJubyBzdWl0YWJsZSB0YWdzLCB1c2luZyB1bmtub3duICsg
ZnVsbCByZXZpc2lvbiBpZCIpCiAgICByZXR1cm4geyJ2ZXJzaW9uIjogIjAr
dW5rbm93biIsCiAgICAgICAgICAgICJmdWxsLXJldmlzaW9uaWQiOiBrZXl3
b3Jkc1siZnVsbCJdLnN0cmlwKCksCiAgICAgICAgICAgICJkaXJ0eSI6IEZh
bHNlLCAiZXJyb3IiOiAibm8gc3VpdGFibGUgdGFncyJ9CgoKQHJlZ2lzdGVy
X3Zjc19oYW5kbGVyKCJnaXQiLCAicGllY2VzX2Zyb21fdmNzIikKZGVmIGdp
dF9waWVjZXNfZnJvbV92Y3ModGFnX3ByZWZpeCwgcm9vdCwgdmVyYm9zZSwg
cnVuX2NvbW1hbmQ9cnVuX2NvbW1hbmQpOgogICAgIiIiR2V0IHZlcnNpb24g
ZnJvbSAnZ2l0IGRlc2NyaWJlJyBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCgogICAgVGhpcyBvbmx5IGdldHMgY2FsbGVkIGlmIHRoZSBnaXQt
YXJjaGl2ZSAnc3Vic3QnIGtleXdvcmRzIHdlcmUgKm5vdCoKICAgIGV4cGFu
ZGVkLCBhbmQgX3ZlcnNpb24ucHkgaGFzbid0IGFscmVhZHkgYmVlbiByZXdy
aXR0ZW4gd2l0aCBhIHNob3J0CiAgICB2ZXJzaW9uIHN0cmluZywgbWVhbmlu
ZyB3ZSdyZSBpbnNpZGUgYSBjaGVja2VkIG91dCBzb3VyY2UgdHJlZS4KICAg
ICIiIgogICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihy
b290LCAiLmdpdCIpKToKICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAg
ICBwcmludCgibm8gLmdpdCBpbiAlJXMiICUlIHJvb3QpCiAgICAgICAgcmFp
c2UgTm90VGhpc01ldGhvZCgibm8gLmdpdCBkaXJlY3RvcnkiKQoKICAgIEdJ
VFMgPSBbImdpdCJdCiAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoK
ICAgICAgICBHSVRTID0gWyJnaXQuY21kIiwgImdpdC5leGUiXQogICAgIyBp
ZiB0aGVyZSBpcyBhIHRhZyBtYXRjaGluZyB0YWdfcHJlZml4LCB0aGlzIHlp
ZWxkcyBUQUctTlVNLWdIRVhbLWRpcnR5XQogICAgIyBpZiB0aGVyZSBpc24n
dCBvbmUsIHRoaXMgeWllbGRzIEhFWFstZGlydHldIChubyBOVU0pCiAgICBk
ZXNjcmliZV9vdXQgPSBydW5fY29tbWFuZChHSVRTLCBbImRlc2NyaWJlIiwg
Ii0tdGFncyIsICItLWRpcnR5IiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiLS1hbHdheXMiLCAiLS1sb25nIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1tYXRjaCIsICIlJXMq
IiAlJSB0YWdfcHJlZml4XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN3ZD1yb290KQogICAgIyAtLWxvbmcgd2FzIGFkZGVkIGluIGdpdC0x
LjUuNQogICAgaWYgZGVzY3JpYmVfb3V0IGlzIE5vbmU6CiAgICAgICAgcmFp
c2UgTm90VGhpc01ldGhvZCgiJ2dpdCBkZXNjcmliZScgZmFpbGVkIikKICAg
IGRlc2NyaWJlX291dCA9IGRlc2NyaWJlX291dC5zdHJpcCgpCiAgICBmdWxs
X291dCA9IHJ1bl9jb21tYW5kKEdJVFMsIFsicmV2LXBhcnNlIiwgIkhFQUQi
XSwgY3dkPXJvb3QpCiAgICBpZiBmdWxsX291dCBpcyBOb25lOgogICAgICAg
IHJhaXNlIE5vdFRoaXNNZXRob2QoIidnaXQgcmV2LXBhcnNlJyBmYWlsZWQi
KQogICAgZnVsbF9vdXQgPSBmdWxsX291dC5zdHJpcCgpCgogICAgcGllY2Vz
ID0ge30KICAgIHBpZWNlc1sibG9uZyJdID0gZnVsbF9vdXQKICAgIHBpZWNl
c1sic2hvcnQiXSA9IGZ1bGxfb3V0Wzo3XSAgIyBtYXliZSBpbXByb3ZlZCBs
YXRlcgogICAgcGllY2VzWyJlcnJvciJdID0gTm9uZQoKICAgICMgcGFyc2Ug
ZGVzY3JpYmVfb3V0LiBJdCB3aWxsIGJlIGxpa2UgVEFHLU5VTS1nSEVYWy1k
aXJ0eV0gb3IgSEVYWy1kaXJ0eV0KICAgICMgVEFHIG1pZ2h0IGhhdmUgaHlw
aGVucy4KICAgIGdpdF9kZXNjcmliZSA9IGRlc2NyaWJlX291dAoKICAgICMg
bG9vayBmb3IgLWRpcnR5IHN1ZmZpeAogICAgZGlydHkgPSBnaXRfZGVzY3Jp
YmUuZW5kc3dpdGgoIi1kaXJ0eSIpCiAgICBwaWVjZXNbImRpcnR5Il0gPSBk
aXJ0eQogICAgaWYgZGlydHk6CiAgICAgICAgZ2l0X2Rlc2NyaWJlID0gZ2l0
X2Rlc2NyaWJlWzpnaXRfZGVzY3JpYmUucmluZGV4KCItZGlydHkiKV0KCiAg
ICAjIG5vdyB3ZSBoYXZlIFRBRy1OVU0tZ0hFWCBvciBIRVgKCiAgICBpZiAi
LSIgaW4gZ2l0X2Rlc2NyaWJlOgogICAgICAgICMgVEFHLU5VTS1nSEVYCiAg
ICAgICAgbW8gPSByZS5zZWFyY2gocideKC4rKS0oXGQrKS1nKFswLTlhLWZd
KykkJywgZ2l0X2Rlc2NyaWJlKQogICAgICAgIGlmIG5vdCBtbzoKICAgICAg
ICAgICAgIyB1bnBhcnNlYWJsZS4gTWF5YmUgZ2l0LWRlc2NyaWJlIGlzIG1p
c2JlaGF2aW5nPwogICAgICAgICAgICBwaWVjZXNbImVycm9yIl0gPSAoInVu
YWJsZSB0byBwYXJzZSBnaXQtZGVzY3JpYmUgb3V0cHV0OiAnJSVzJyIKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICUlIGRlc2NyaWJlX291dCkK
ICAgICAgICAgICAgcmV0dXJuIHBpZWNlcwoKICAgICAgICAjIHRhZwogICAg
ICAgIGZ1bGxfdGFnID0gbW8uZ3JvdXAoMSkKICAgICAgICBpZiBub3QgZnVs
bF90YWcuc3RhcnRzd2l0aCh0YWdfcHJlZml4KToKICAgICAgICAgICAgaWYg
dmVyYm9zZToKICAgICAgICAgICAgICAgIGZtdCA9ICJ0YWcgJyUlcycgZG9l
c24ndCBzdGFydCB3aXRoIHByZWZpeCAnJSVzJyIKICAgICAgICAgICAgICAg
IHByaW50KGZtdCAlJSAoZnVsbF90YWcsIHRhZ19wcmVmaXgpKQogICAgICAg
ICAgICBwaWVjZXNbImVycm9yIl0gPSAoInRhZyAnJSVzJyBkb2Vzbid0IHN0
YXJ0IHdpdGggcHJlZml4ICclJXMnIgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJSUgKGZ1bGxfdGFnLCB0YWdfcHJlZml4KSkKICAgICAgICAg
ICAgcmV0dXJuIHBpZWNlcwogICAgICAgIHBpZWNlc1siY2xvc2VzdC10YWci
XSA9IGZ1bGxfdGFnW2xlbih0YWdfcHJlZml4KTpdCgogICAgICAgICMgZGlz
dGFuY2U6IG51bWJlciBvZiBjb21taXRzIHNpbmNlIHRhZwogICAgICAgIHBp
ZWNlc1siZGlzdGFuY2UiXSA9IGludChtby5ncm91cCgyKSkKCiAgICAgICAg
IyBjb21taXQ6IHNob3J0IGhleCByZXZpc2lvbiBJRAogICAgICAgIHBpZWNl
c1sic2hvcnQiXSA9IG1vLmdyb3VwKDMpCgogICAgZWxzZToKICAgICAgICAj
IEhFWDogbm8gdGFncwogICAgICAgIHBpZWNlc1siY2xvc2VzdC10YWciXSA9
IE5vbmUKICAgICAgICBjb3VudF9vdXQgPSBydW5fY29tbWFuZChHSVRTLCBb
InJldi1saXN0IiwgIkhFQUQiLCAiLS1jb3VudCJdLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGN3ZD1yb290KQogICAgICAgIHBpZWNlc1si
ZGlzdGFuY2UiXSA9IGludChjb3VudF9vdXQpICAjIHRvdGFsIG51bWJlciBv
ZiBjb21taXRzCgogICAgcmV0dXJuIHBpZWNlcwoKCmRlZiBwbHVzX29yX2Rv
dChwaWVjZXMpOgogICAgIiIiUmV0dXJuIGEgKyBpZiB3ZSBkb24ndCBhbHJl
YWR5IGhhdmUgb25lLCBlbHNlIHJldHVybiBhIC4iIiIKICAgIGlmICIrIiBp
biBwaWVjZXMuZ2V0KCJjbG9zZXN0LXRhZyIsICIiKToKICAgICAgICByZXR1
cm4gIi4iCiAgICByZXR1cm4gIisiCgoKZGVmIHJlbmRlcl9wZXA0NDAocGll
Y2VzKToKICAgICIiIkJ1aWxkIHVwIHZlcnNpb24gc3RyaW5nLCB3aXRoIHBv
c3QtcmVsZWFzZSAibG9jYWwgdmVyc2lvbiBpZGVudGlmaWVyIi4KCiAgICBP
dXIgZ29hbDogVEFHWytESVNUQU5DRS5nSEVYWy5kaXJ0eV1dIC4gTm90ZSB0
aGF0IGlmIHlvdQogICAgZ2V0IGEgdGFnZ2VkIGJ1aWxkIGFuZCB0aGVuIGRp
cnR5IGl0LCB5b3UnbGwgZ2V0IFRBRyswLmdIRVguZGlydHkKCiAgICBFeGNl
cHRpb25zOgogICAgMTogbm8gdGFncy4gZ2l0X2Rlc2NyaWJlIHdhcyBqdXN0
IEhFWC4gMCt1bnRhZ2dlZC5ESVNUQU5DRS5nSEVYWy5kaXJ0eV0KICAgICIi
IgogICAgaWYgcGllY2VzWyJjbG9zZXN0LXRhZyJdOgogICAgICAgIHJlbmRl
cmVkID0gcGllY2VzWyJjbG9zZXN0LXRhZyJdCiAgICAgICAgaWYgcGllY2Vz
WyJkaXN0YW5jZSJdIG9yIHBpZWNlc1siZGlydHkiXToKICAgICAgICAgICAg
cmVuZGVyZWQgKz0gcGx1c19vcl9kb3QocGllY2VzKQogICAgICAgICAgICBy
ZW5kZXJlZCArPSAiJSVkLmclJXMiICUlIChwaWVjZXNbImRpc3RhbmNlIl0s
IHBpZWNlc1sic2hvcnQiXSkKICAgICAgICAgICAgaWYgcGllY2VzWyJkaXJ0
eSJdOgogICAgICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5kaXJ0eSIKICAg
IGVsc2U6CiAgICAgICAgIyBleGNlcHRpb24gIzEKICAgICAgICByZW5kZXJl
ZCA9ICIwK3VudGFnZ2VkLiUlZC5nJSVzIiAlJSAocGllY2VzWyJkaXN0YW5j
ZSJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwaWVjZXNbInNob3J0Il0pCiAgICAgICAgaWYgcGllY2VzWyJkaXJ0eSJd
OgogICAgICAgICAgICByZW5kZXJlZCArPSAiLmRpcnR5IgogICAgcmV0dXJu
IHJlbmRlcmVkCgoKZGVmIHJlbmRlcl9wZXA0NDBfcHJlKHBpZWNlcyk6CiAg
ICAiIiJUQUdbLnBvc3QuZGV2RElTVEFOQ0VdIC0tIE5vIC1kaXJ0eS4KCiAg
ICBFeGNlcHRpb25zOgogICAgMTogbm8gdGFncy4gMC5wb3N0LmRldkRJU1RB
TkNFCiAgICAiIiIKICAgIGlmIHBpZWNlc1siY2xvc2VzdC10YWciXToKICAg
ICAgICByZW5kZXJlZCA9IHBpZWNlc1siY2xvc2VzdC10YWciXQogICAgICAg
IGlmIHBpZWNlc1siZGlzdGFuY2UiXToKICAgICAgICAgICAgcmVuZGVyZWQg
Kz0gIi5wb3N0LmRldiUlZCIgJSUgcGllY2VzWyJkaXN0YW5jZSJdCiAgICBl
bHNlOgogICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQg
PSAiMC5wb3N0LmRldiUlZCIgJSUgcGllY2VzWyJkaXN0YW5jZSJdCiAgICBy
ZXR1cm4gcmVuZGVyZWQKCgpkZWYgcmVuZGVyX3BlcDQ0MF9wb3N0KHBpZWNl
cyk6CiAgICAiIiJUQUdbLnBvc3RESVNUQU5DRVsuZGV2MF0rZ0hFWF0gLgoK
ICAgIFRoZSAiLmRldjAiIG1lYW5zIGRpcnR5LiBOb3RlIHRoYXQgLmRldjAg
c29ydHMgYmFja3dhcmRzCiAgICAoYSBkaXJ0eSB0cmVlIHdpbGwgYXBwZWFy
ICJvbGRlciIgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBjbGVhbiBvbmUpLAog
ICAgYnV0IHlvdSBzaG91bGRuJ3QgYmUgcmVsZWFzaW5nIHNvZnR3YXJlIHdp
dGggLWRpcnR5IGFueXdheXMuCgogICAgRXhjZXB0aW9uczoKICAgIDE6IG5v
IHRhZ3MuIDAucG9zdERJU1RBTkNFWy5kZXYwXQogICAgIiIiCiAgICBpZiBw
aWVjZXNbImNsb3Nlc3QtdGFnIl06CiAgICAgICAgcmVuZGVyZWQgPSBwaWVj
ZXNbImNsb3Nlc3QtdGFnIl0KICAgICAgICBpZiBwaWVjZXNbImRpc3RhbmNl
Il0gb3IgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICByZW5kZXJlZCAr
PSAiLnBvc3QlJWQiICUlIHBpZWNlc1siZGlzdGFuY2UiXQogICAgICAgICAg
ICBpZiBwaWVjZXNbImRpcnR5Il06CiAgICAgICAgICAgICAgICByZW5kZXJl
ZCArPSAiLmRldjAiCiAgICAgICAgICAgIHJlbmRlcmVkICs9IHBsdXNfb3Jf
ZG90KHBpZWNlcykKICAgICAgICAgICAgcmVuZGVyZWQgKz0gImclJXMiICUl
IHBpZWNlc1sic2hvcnQiXQogICAgZWxzZToKICAgICAgICAjIGV4Y2VwdGlv
biAjMQogICAgICAgIHJlbmRlcmVkID0gIjAucG9zdCUlZCIgJSUgcGllY2Vz
WyJkaXN0YW5jZSJdCiAgICAgICAgaWYgcGllY2VzWyJkaXJ0eSJdOgogICAg
ICAgICAgICByZW5kZXJlZCArPSAiLmRldjAiCiAgICAgICAgcmVuZGVyZWQg
Kz0gIitnJSVzIiAlJSBwaWVjZXNbInNob3J0Il0KICAgIHJldHVybiByZW5k
ZXJlZAoKCmRlZiByZW5kZXJfcGVwNDQwX29sZChwaWVjZXMpOgogICAgIiIi
VEFHWy5wb3N0RElTVEFOQ0VbLmRldjBdXSAuCgogICAgVGhlICIuZGV2MCIg
bWVhbnMgZGlydHkuCgogICAgRWV4Y2VwdGlvbnM6CiAgICAxOiBubyB0YWdz
LiAwLnBvc3RESVNUQU5DRVsuZGV2MF0KICAgICIiIgogICAgaWYgcGllY2Vz
WyJjbG9zZXN0LXRhZyJdOgogICAgICAgIHJlbmRlcmVkID0gcGllY2VzWyJj
bG9zZXN0LXRhZyJdCiAgICAgICAgaWYgcGllY2VzWyJkaXN0YW5jZSJdIG9y
IHBpZWNlc1siZGlydHkiXToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5w
b3N0JSVkIiAlJSBwaWVjZXNbImRpc3RhbmNlIl0KICAgICAgICAgICAgaWYg
cGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICAgICAgcmVuZGVyZWQgKz0g
Ii5kZXYwIgogICAgZWxzZToKICAgICAgICAjIGV4Y2VwdGlvbiAjMQogICAg
ICAgIHJlbmRlcmVkID0gIjAucG9zdCUlZCIgJSUgcGllY2VzWyJkaXN0YW5j
ZSJdCiAgICAgICAgaWYgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICBy
ZW5kZXJlZCArPSAiLmRldjAiCiAgICByZXR1cm4gcmVuZGVyZWQKCgpkZWYg
cmVuZGVyX2dpdF9kZXNjcmliZShwaWVjZXMpOgogICAgIiIiVEFHWy1ESVNU
QU5DRS1nSEVYXVstZGlydHldLgoKICAgIExpa2UgJ2dpdCBkZXNjcmliZSAt
LXRhZ3MgLS1kaXJ0eSAtLWFsd2F5cycuCgogICAgRXhjZXB0aW9uczoKICAg
IDE6IG5vIHRhZ3MuIEhFWFstZGlydHldICAobm90ZTogbm8gJ2cnIHByZWZp
eCkKICAgICIiIgogICAgaWYgcGllY2VzWyJjbG9zZXN0LXRhZyJdOgogICAg
ICAgIHJlbmRlcmVkID0gcGllY2VzWyJjbG9zZXN0LXRhZyJdCiAgICAgICAg
aWYgcGllY2VzWyJkaXN0YW5jZSJdOgogICAgICAgICAgICByZW5kZXJlZCAr
PSAiLSUlZC1nJSVzIiAlJSAocGllY2VzWyJkaXN0YW5jZSJdLCBwaWVjZXNb
InNob3J0Il0pCiAgICBlbHNlOgogICAgICAgICMgZXhjZXB0aW9uICMxCiAg
ICAgICAgcmVuZGVyZWQgPSBwaWVjZXNbInNob3J0Il0KICAgIGlmIHBpZWNl
c1siZGlydHkiXToKICAgICAgICByZW5kZXJlZCArPSAiLWRpcnR5IgogICAg
cmV0dXJuIHJlbmRlcmVkCgoKZGVmIHJlbmRlcl9naXRfZGVzY3JpYmVfbG9u
ZyhwaWVjZXMpOgogICAgIiIiVEFHLURJU1RBTkNFLWdIRVhbLWRpcnR5XS4K
CiAgICBMaWtlICdnaXQgZGVzY3JpYmUgLS10YWdzIC0tZGlydHkgLS1hbHdh
eXMgLWxvbmcnLgogICAgVGhlIGRpc3RhbmNlL2hhc2ggaXMgdW5jb25kaXRp
b25hbC4KCiAgICBFeGNlcHRpb25zOgogICAgMTogbm8gdGFncy4gSEVYWy1k
aXJ0eV0gIChub3RlOiBubyAnZycgcHJlZml4KQogICAgIiIiCiAgICBpZiBw
aWVjZXNbImNsb3Nlc3QtdGFnIl06CiAgICAgICAgcmVuZGVyZWQgPSBwaWVj
ZXNbImNsb3Nlc3QtdGFnIl0KICAgICAgICByZW5kZXJlZCArPSAiLSUlZC1n
JSVzIiAlJSAocGllY2VzWyJkaXN0YW5jZSJdLCBwaWVjZXNbInNob3J0Il0p
CiAgICBlbHNlOgogICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVu
ZGVyZWQgPSBwaWVjZXNbInNob3J0Il0KICAgIGlmIHBpZWNlc1siZGlydHki
XToKICAgICAgICByZW5kZXJlZCArPSAiLWRpcnR5IgogICAgcmV0dXJuIHJl
bmRlcmVkCgoKZGVmIHJlbmRlcihwaWVjZXMsIHN0eWxlKToKICAgICIiIlJl
bmRlciB0aGUgZ2l2ZW4gdmVyc2lvbiBwaWVjZXMgaW50byB0aGUgcmVxdWVz
dGVkIHN0eWxlLiIiIgogICAgaWYgcGllY2VzWyJlcnJvciJdOgogICAgICAg
IHJldHVybiB7InZlcnNpb24iOiAidW5rbm93biIsCiAgICAgICAgICAgICAg
ICAiZnVsbC1yZXZpc2lvbmlkIjogcGllY2VzLmdldCgibG9uZyIpLAogICAg
ICAgICAgICAgICAgImRpcnR5IjogTm9uZSwKICAgICAgICAgICAgICAgICJl
cnJvciI6IHBpZWNlc1siZXJyb3IiXX0KCiAgICBpZiBub3Qgc3R5bGUgb3Ig
c3R5bGUgPT0gImRlZmF1bHQiOgogICAgICAgIHN0eWxlID0gInBlcDQ0MCIg
ICMgdGhlIGRlZmF1bHQKCiAgICBpZiBzdHlsZSA9PSAicGVwNDQwIjoKICAg
ICAgICByZW5kZXJlZCA9IHJlbmRlcl9wZXA0NDAocGllY2VzKQogICAgZWxp
ZiBzdHlsZSA9PSAicGVwNDQwLXByZSI6CiAgICAgICAgcmVuZGVyZWQgPSBy
ZW5kZXJfcGVwNDQwX3ByZShwaWVjZXMpCiAgICBlbGlmIHN0eWxlID09ICJw
ZXA0NDAtcG9zdCI6CiAgICAgICAgcmVuZGVyZWQgPSByZW5kZXJfcGVwNDQw
X3Bvc3QocGllY2VzKQogICAgZWxpZiBzdHlsZSA9PSAicGVwNDQwLW9sZCI6
CiAgICAgICAgcmVuZGVyZWQgPSByZW5kZXJfcGVwNDQwX29sZChwaWVjZXMp
CiAgICBlbGlmIHN0eWxlID09ICJnaXQtZGVzY3JpYmUiOgogICAgICAgIHJl
bmRlcmVkID0gcmVuZGVyX2dpdF9kZXNjcmliZShwaWVjZXMpCiAgICBlbGlm
IHN0eWxlID09ICJnaXQtZGVzY3JpYmUtbG9uZyI6CiAgICAgICAgcmVuZGVy
ZWQgPSByZW5kZXJfZ2l0X2Rlc2NyaWJlX2xvbmcocGllY2VzKQogICAgZWxz
ZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHN0eWxlICcl
JXMnIiAlJSBzdHlsZSkKCiAgICByZXR1cm4geyJ2ZXJzaW9uIjogcmVuZGVy
ZWQsICJmdWxsLXJldmlzaW9uaWQiOiBwaWVjZXNbImxvbmciXSwKICAgICAg
ICAgICAgImRpcnR5IjogcGllY2VzWyJkaXJ0eSJdLCAiZXJyb3IiOiBOb25l
fQoKCmRlZiBnZXRfdmVyc2lvbnMoKToKICAgICIiIkdldCB2ZXJzaW9uIGlu
Zm9ybWF0aW9uIG9yIHJldHVybiBkZWZhdWx0IGlmIHVuYWJsZSB0byBkbyBz
by4iIiIKICAgICMgSSBhbSBpbiBfdmVyc2lvbi5weSwgd2hpY2ggbGl2ZXMg
YXQgUk9PVC9WRVJTSU9ORklMRV9TT1VSQ0UuIElmIHdlIGhhdmUKICAgICMg
X19maWxlX18sIHdlIGNhbiB3b3JrIGJhY2t3YXJkcyBmcm9tIHRoZXJlIHRv
IHRoZSByb290LiBTb21lCiAgICAjIHB5MmV4ZS9iYmZyZWV6ZS9ub24tQ1B5
dGhvbiBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgZG8gX19maWxlX18sIGluIHdo
aWNoCiAgICAjIGNhc2Ugd2UgY2FuIG9ubHkgdXNlIGV4cGFuZGVkIGtleXdv
cmRzLgoKICAgIGNmZyA9IGdldF9jb25maWcoKQogICAgdmVyYm9zZSA9IGNm
Zy52ZXJib3NlCgogICAgdHJ5OgogICAgICAgIHJldHVybiBnaXRfdmVyc2lv
bnNfZnJvbV9rZXl3b3JkcyhnZXRfa2V5d29yZHMoKSwgY2ZnLnRhZ19wcmVm
aXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZlcmJvc2UpCiAgICBleGNlcHQgTm90VGhpc01ldGhvZDoKICAgICAgICBw
YXNzCgogICAgdHJ5OgogICAgICAgIHJvb3QgPSBvcy5wYXRoLnJlYWxwYXRo
KF9fZmlsZV9fKQogICAgICAgICMgdmVyc2lvbmZpbGVfc291cmNlIGlzIHRo
ZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIHRvcCBvZiB0aGUgc291cmNlCiAg
ICAgICAgIyB0cmVlICh3aGVyZSB0aGUgLmdpdCBkaXJlY3RvcnkgbWlnaHQg
bGl2ZSkgdG8gdGhpcyBmaWxlLiBJbnZlcnQKICAgICAgICAjIHRoaXMgdG8g
ZmluZCB0aGUgcm9vdCBmcm9tIF9fZmlsZV9fLgogICAgICAgIGZvciBpIGlu
IGNmZy52ZXJzaW9uZmlsZV9zb3VyY2Uuc3BsaXQoJy8nKToKICAgICAgICAg
ICAgcm9vdCA9IG9zLnBhdGguZGlybmFtZShyb290KQogICAgZXhjZXB0IE5h
bWVFcnJvcjoKICAgICAgICByZXR1cm4geyJ2ZXJzaW9uIjogIjArdW5rbm93
biIsICJmdWxsLXJldmlzaW9uaWQiOiBOb25lLAogICAgICAgICAgICAgICAg
ImRpcnR5IjogTm9uZSwKICAgICAgICAgICAgICAgICJlcnJvciI6ICJ1bmFi
bGUgdG8gZmluZCByb290IG9mIHNvdXJjZSB0cmVlIn0KCiAgICB0cnk6CiAg
ICAgICAgcGllY2VzID0gZ2l0X3BpZWNlc19mcm9tX3ZjcyhjZmcudGFnX3By
ZWZpeCwgcm9vdCwgdmVyYm9zZSkKICAgICAgICByZXR1cm4gcmVuZGVyKHBp
ZWNlcywgY2ZnLnN0eWxlKQogICAgZXhjZXB0IE5vdFRoaXNNZXRob2Q6CiAg
ICAgICAgcGFzcwoKICAgIHRyeToKICAgICAgICBpZiBjZmcucGFyZW50ZGly
X3ByZWZpeDoKICAgICAgICAgICAgcmV0dXJuIHZlcnNpb25zX2Zyb21fcGFy
ZW50ZGlyKGNmZy5wYXJlbnRkaXJfcHJlZml4LCByb290LCB2ZXJib3NlKQog
ICAgZXhjZXB0IE5vdFRoaXNNZXRob2Q6CiAgICAgICAgcGFzcwoKICAgIHJl
dHVybiB7InZlcnNpb24iOiAiMCt1bmtub3duIiwgImZ1bGwtcmV2aXNpb25p
ZCI6IE5vbmUsCiAgICAgICAgICAgICJkaXJ0eSI6IE5vbmUsCiAgICAgICAg
ICAgICJlcnJvciI6ICJ1bmFibGUgdG8gY29tcHV0ZSB2ZXJzaW9uIn0KJycn
CgoKQHJlZ2lzdGVyX3Zjc19oYW5kbGVyKCJnaXQiLCAiZ2V0X2tleXdvcmRz
IikKZGVmIGdpdF9nZXRfa2V5d29yZHModmVyc2lvbmZpbGVfYWJzKToKICAg
ICIiIkV4dHJhY3QgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZl
biBmaWxlLiIiIgogICAgIyB0aGUgY29kZSBlbWJlZGRlZCBpbiBfdmVyc2lv
bi5weSBjYW4ganVzdCBmZXRjaCB0aGUgdmFsdWUgb2YgdGhlc2UKICAgICMg
a2V5d29yZHMuIFdoZW4gdXNlZCBmcm9tIHNldHVwLnB5LCB3ZSBkb24ndCB3
YW50IHRvIGltcG9ydCBfdmVyc2lvbi5weSwKICAgICMgc28gd2UgZG8gaXQg
d2l0aCBhIHJlZ2V4cCBpbnN0ZWFkLiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCB1
c2VkIGZyb20KICAgICMgX3ZlcnNpb24ucHkuCiAgICBrZXl3b3JkcyA9IHt9
CiAgICB0cnk6CiAgICAgICAgZiA9IG9wZW4odmVyc2lvbmZpbGVfYWJzLCAi
ciIpCiAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKICAgICAg
ICAgICAgaWYgbGluZS5zdHJpcCgpLnN0YXJ0c3dpdGgoImdpdF9yZWZuYW1l
cyA9Iik6CiAgICAgICAgICAgICAgICBtbyA9IHJlLnNlYXJjaChyJz1ccyoi
KC4qKSInLCBsaW5lKQogICAgICAgICAgICAgICAgaWYgbW86CiAgICAgICAg
ICAgICAgICAgICAga2V5d29yZHNbInJlZm5hbWVzIl0gPSBtby5ncm91cCgx
KQogICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkuc3RhcnRzd2l0aCgiZ2l0
X2Z1bGwgPSIpOgogICAgICAgICAgICAgICAgbW8gPSByZS5zZWFyY2gocic9
XHMqIiguKikiJywgbGluZSkKICAgICAgICAgICAgICAgIGlmIG1vOgogICAg
ICAgICAgICAgICAgICAgIGtleXdvcmRzWyJmdWxsIl0gPSBtby5ncm91cCgx
KQogICAgICAgIGYuY2xvc2UoKQogICAgZXhjZXB0IEVudmlyb25tZW50RXJy
b3I6CiAgICAgICAgcGFzcwogICAgcmV0dXJuIGtleXdvcmRzCgoKQHJlZ2lz
dGVyX3Zjc19oYW5kbGVyKCJnaXQiLCAia2V5d29yZHMiKQpkZWYgZ2l0X3Zl
cnNpb25zX2Zyb21fa2V5d29yZHMoa2V5d29yZHMsIHRhZ19wcmVmaXgsIHZl
cmJvc2UpOgogICAgIiIiR2V0IHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSBn
aXQga2V5d29yZHMuIiIiCiAgICBpZiBub3Qga2V5d29yZHM6CiAgICAgICAg
cmFpc2UgTm90VGhpc01ldGhvZCgibm8ga2V5d29yZHMgYXQgYWxsLCB3ZWly
ZCIpCiAgICByZWZuYW1lcyA9IGtleXdvcmRzWyJyZWZuYW1lcyJdLnN0cmlw
KCkKICAgIGlmIHJlZm5hbWVzLnN0YXJ0c3dpdGgoIiRGb3JtYXQiKToKICAg
ICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICBwcmludCgia2V5d29yZHMg
YXJlIHVuZXhwYW5kZWQsIG5vdCB1c2luZyIpCiAgICAgICAgcmFpc2UgTm90
VGhpc01ldGhvZCgidW5leHBhbmRlZCBrZXl3b3Jkcywgbm90IGEgZ2l0LWFy
Y2hpdmUgdGFyYmFsbCIpCiAgICByZWZzID0gc2V0KFtyLnN0cmlwKCkgZm9y
IHIgaW4gcmVmbmFtZXMuc3RyaXAoIigpIikuc3BsaXQoIiwiKV0pCiAgICAj
IHN0YXJ0aW5nIGluIGdpdC0xLjguMywgdGFncyBhcmUgbGlzdGVkIGFzICJ0
YWc6IGZvby0xLjAiIGluc3RlYWQgb2YKICAgICMganVzdCAiZm9vLTEuMCIu
IElmIHdlIHNlZSBhICJ0YWc6ICIgcHJlZml4LCBwcmVmZXIgdGhvc2UuCiAg
ICBUQUcgPSAidGFnOiAiCiAgICB0YWdzID0gc2V0KFtyW2xlbihUQUcpOl0g
Zm9yIHIgaW4gcmVmcyBpZiByLnN0YXJ0c3dpdGgoVEFHKV0pCiAgICBpZiBu
b3QgdGFnczoKICAgICAgICAjIEVpdGhlciB3ZSdyZSB1c2luZyBnaXQgPCAx
LjguMywgb3IgdGhlcmUgcmVhbGx5IGFyZSBubyB0YWdzLiBXZSB1c2UKICAg
ICAgICAjIGEgaGV1cmlzdGljOiBhc3N1bWUgYWxsIHZlcnNpb24gdGFncyBo
YXZlIGEgZGlnaXQuIFRoZSBvbGQgZ2l0ICVkCiAgICAgICAgIyBleHBhbnNp
b24gYmVoYXZlcyBsaWtlIGdpdCBsb2cgLS1kZWNvcmF0ZT1zaG9ydCBhbmQg
c3RyaXBzIG91dCB0aGUKICAgICAgICAjIHJlZnMvaGVhZHMvIGFuZCByZWZz
L3RhZ3MvIHByZWZpeGVzIHRoYXQgd291bGQgbGV0IHVzIGRpc3Rpbmd1aXNo
CiAgICAgICAgIyBiZXR3ZWVuIGJyYW5jaGVzIGFuZCB0YWdzLiBCeSBpZ25v
cmluZyByZWZuYW1lcyB3aXRob3V0IGRpZ2l0cywgd2UKICAgICAgICAjIGZp
bHRlciBvdXQgbWFueSBjb21tb24gYnJhbmNoIG5hbWVzIGxpa2UgInJlbGVh
c2UiIGFuZAogICAgICAgICMgInN0YWJpbGl6YXRpb24iLCBhcyB3ZWxsIGFz
ICJIRUFEIiBhbmQgIm1hc3RlciIuCiAgICAgICAgdGFncyA9IHNldChbciBm
b3IgciBpbiByZWZzIGlmIHJlLnNlYXJjaChyJ1xkJywgcildKQogICAgICAg
IGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJkaXNjYXJkaW5nICcl
cycsIG5vIGRpZ2l0cyIgJSAiLCIuam9pbihyZWZzLXRhZ3MpKQogICAgaWYg
dmVyYm9zZToKICAgICAgICBwcmludCgibGlrZWx5IHRhZ3M6ICVzIiAlICIs
Ii5qb2luKHNvcnRlZCh0YWdzKSkpCiAgICBmb3IgcmVmIGluIHNvcnRlZCh0
YWdzKToKICAgICAgICAjIHNvcnRpbmcgd2lsbCBwcmVmZXIgZS5nLiAiMi4w
IiBvdmVyICIyLjByYzEiCiAgICAgICAgaWYgcmVmLnN0YXJ0c3dpdGgodGFn
X3ByZWZpeCk6CiAgICAgICAgICAgIHIgPSByZWZbbGVuKHRhZ19wcmVmaXgp
Ol0KICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgIHBy
aW50KCJwaWNraW5nICVzIiAlIHIpCiAgICAgICAgICAgIHJldHVybiB7InZl
cnNpb24iOiByLAogICAgICAgICAgICAgICAgICAgICJmdWxsLXJldmlzaW9u
aWQiOiBrZXl3b3Jkc1siZnVsbCJdLnN0cmlwKCksCiAgICAgICAgICAgICAg
ICAgICAgImRpcnR5IjogRmFsc2UsICJlcnJvciI6IE5vbmUKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAjIG5vIHN1aXRhYmxlIHRhZ3MsIHNvIHZlcnNp
b24gaXMgIjArdW5rbm93biIsIGJ1dCBmdWxsIGhleCBpcyBzdGlsbCB0aGVy
ZQogICAgaWYgdmVyYm9zZToKICAgICAgICBwcmludCgibm8gc3VpdGFibGUg
dGFncywgdXNpbmcgdW5rbm93biArIGZ1bGwgcmV2aXNpb24gaWQiKQogICAg
cmV0dXJuIHsidmVyc2lvbiI6ICIwK3Vua25vd24iLAogICAgICAgICAgICAi
ZnVsbC1yZXZpc2lvbmlkIjoga2V5d29yZHNbImZ1bGwiXS5zdHJpcCgpLAog
ICAgICAgICAgICAiZGlydHkiOiBGYWxzZSwgImVycm9yIjogIm5vIHN1aXRh
YmxlIHRhZ3MifQoKCkByZWdpc3Rlcl92Y3NfaGFuZGxlcigiZ2l0IiwgInBp
ZWNlc19mcm9tX3ZjcyIpCmRlZiBnaXRfcGllY2VzX2Zyb21fdmNzKHRhZ19w
cmVmaXgsIHJvb3QsIHZlcmJvc2UsIHJ1bl9jb21tYW5kPXJ1bl9jb21tYW5k
KToKICAgICIiIkdldCB2ZXJzaW9uIGZyb20gJ2dpdCBkZXNjcmliZScgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgoKICAgIFRoaXMgb25seSBn
ZXRzIGNhbGxlZCBpZiB0aGUgZ2l0LWFyY2hpdmUgJ3N1YnN0JyBrZXl3b3Jk
cyB3ZXJlICpub3QqCiAgICBleHBhbmRlZCwgYW5kIF92ZXJzaW9uLnB5IGhh
c24ndCBhbHJlYWR5IGJlZW4gcmV3cml0dGVuIHdpdGggYSBzaG9ydAogICAg
dmVyc2lvbiBzdHJpbmcsIG1lYW5pbmcgd2UncmUgaW5zaWRlIGEgY2hlY2tl
ZCBvdXQgc291cmNlIHRyZWUuCiAgICAiIiIKICAgIGlmIG5vdCBvcy5wYXRo
LmV4aXN0cyhvcy5wYXRoLmpvaW4ocm9vdCwgIi5naXQiKSk6CiAgICAgICAg
aWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQoIm5vIC5naXQgaW4gJXMi
ICUgcm9vdCkKICAgICAgICByYWlzZSBOb3RUaGlzTWV0aG9kKCJubyAuZ2l0
IGRpcmVjdG9yeSIpCgogICAgR0lUUyA9IFsiZ2l0Il0KICAgIGlmIHN5cy5w
bGF0Zm9ybSA9PSAid2luMzIiOgogICAgICAgIEdJVFMgPSBbImdpdC5jbWQi
LCAiZ2l0LmV4ZSJdCiAgICAjIGlmIHRoZXJlIGlzIGEgdGFnIG1hdGNoaW5n
IHRhZ19wcmVmaXgsIHRoaXMgeWllbGRzIFRBRy1OVU0tZ0hFWFstZGlydHld
CiAgICAjIGlmIHRoZXJlIGlzbid0IG9uZSwgdGhpcyB5aWVsZHMgSEVYWy1k
aXJ0eV0gKG5vIE5VTSkKICAgIGRlc2NyaWJlX291dCA9IHJ1bl9jb21tYW5k
KEdJVFMsIFsiZGVzY3JpYmUiLCAiLS10YWdzIiwgIi0tZGlydHkiLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWFsd2F5cyIs
ICItLWxvbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICItLW1hdGNoIiwgIiVzKiIgJSB0YWdfcHJlZml4XSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN3ZD1yb290KQogICAgIyAtLWxvbmcg
d2FzIGFkZGVkIGluIGdpdC0xLjUuNQogICAgaWYgZGVzY3JpYmVfb3V0IGlz
IE5vbmU6CiAgICAgICAgcmFpc2UgTm90VGhpc01ldGhvZCgiJ2dpdCBkZXNj
cmliZScgZmFpbGVkIikKICAgIGRlc2NyaWJlX291dCA9IGRlc2NyaWJlX291
dC5zdHJpcCgpCiAgICBmdWxsX291dCA9IHJ1bl9jb21tYW5kKEdJVFMsIFsi
cmV2LXBhcnNlIiwgIkhFQUQiXSwgY3dkPXJvb3QpCiAgICBpZiBmdWxsX291
dCBpcyBOb25lOgogICAgICAgIHJhaXNlIE5vdFRoaXNNZXRob2QoIidnaXQg
cmV2LXBhcnNlJyBmYWlsZWQiKQogICAgZnVsbF9vdXQgPSBmdWxsX291dC5z
dHJpcCgpCgogICAgcGllY2VzID0ge30KICAgIHBpZWNlc1sibG9uZyJdID0g
ZnVsbF9vdXQKICAgIHBpZWNlc1sic2hvcnQiXSA9IGZ1bGxfb3V0Wzo3XSAg
IyBtYXliZSBpbXByb3ZlZCBsYXRlcgogICAgcGllY2VzWyJlcnJvciJdID0g
Tm9uZQoKICAgICMgcGFyc2UgZGVzY3JpYmVfb3V0LiBJdCB3aWxsIGJlIGxp
a2UgVEFHLU5VTS1nSEVYWy1kaXJ0eV0gb3IgSEVYWy1kaXJ0eV0KICAgICMg
VEFHIG1pZ2h0IGhhdmUgaHlwaGVucy4KICAgIGdpdF9kZXNjcmliZSA9IGRl
c2NyaWJlX291dAoKICAgICMgbG9vayBmb3IgLWRpcnR5IHN1ZmZpeAogICAg
ZGlydHkgPSBnaXRfZGVzY3JpYmUuZW5kc3dpdGgoIi1kaXJ0eSIpCiAgICBw
aWVjZXNbImRpcnR5Il0gPSBkaXJ0eQogICAgaWYgZGlydHk6CiAgICAgICAg
Z2l0X2Rlc2NyaWJlID0gZ2l0X2Rlc2NyaWJlWzpnaXRfZGVzY3JpYmUucmlu
ZGV4KCItZGlydHkiKV0KCiAgICAjIG5vdyB3ZSBoYXZlIFRBRy1OVU0tZ0hF
WCBvciBIRVgKCiAgICBpZiAiLSIgaW4gZ2l0X2Rlc2NyaWJlOgogICAgICAg
ICMgVEFHLU5VTS1nSEVYCiAgICAgICAgbW8gPSByZS5zZWFyY2gocideKC4r
KS0oXGQrKS1nKFswLTlhLWZdKykkJywgZ2l0X2Rlc2NyaWJlKQogICAgICAg
IGlmIG5vdCBtbzoKICAgICAgICAgICAgIyB1bnBhcnNlYWJsZS4gTWF5YmUg
Z2l0LWRlc2NyaWJlIGlzIG1pc2JlaGF2aW5nPwogICAgICAgICAgICBwaWVj
ZXNbImVycm9yIl0gPSAoInVuYWJsZSB0byBwYXJzZSBnaXQtZGVzY3JpYmUg
b3V0cHV0OiAnJXMnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JSBkZXNjcmliZV9vdXQpCiAgICAgICAgICAgIHJldHVybiBwaWVjZXMKCiAg
ICAgICAgIyB0YWcKICAgICAgICBmdWxsX3RhZyA9IG1vLmdyb3VwKDEpCiAg
ICAgICAgaWYgbm90IGZ1bGxfdGFnLnN0YXJ0c3dpdGgodGFnX3ByZWZpeCk6
CiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBmbXQg
PSAidGFnICclcycgZG9lc24ndCBzdGFydCB3aXRoIHByZWZpeCAnJXMnIgog
ICAgICAgICAgICAgICAgcHJpbnQoZm10ICUgKGZ1bGxfdGFnLCB0YWdfcHJl
Zml4KSkKICAgICAgICAgICAgcGllY2VzWyJlcnJvciJdID0gKCJ0YWcgJyVz
JyBkb2Vzbid0IHN0YXJ0IHdpdGggcHJlZml4ICclcyciCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAlIChmdWxsX3RhZywgdGFnX3ByZWZpeCkp
CiAgICAgICAgICAgIHJldHVybiBwaWVjZXMKICAgICAgICBwaWVjZXNbImNs
b3Nlc3QtdGFnIl0gPSBmdWxsX3RhZ1tsZW4odGFnX3ByZWZpeCk6XQoKICAg
ICAgICAjIGRpc3RhbmNlOiBudW1iZXIgb2YgY29tbWl0cyBzaW5jZSB0YWcK
ICAgICAgICBwaWVjZXNbImRpc3RhbmNlIl0gPSBpbnQobW8uZ3JvdXAoMikp
CgogICAgICAgICMgY29tbWl0OiBzaG9ydCBoZXggcmV2aXNpb24gSUQKICAg
ICAgICBwaWVjZXNbInNob3J0Il0gPSBtby5ncm91cCgzKQoKICAgIGVsc2U6
CiAgICAgICAgIyBIRVg6IG5vIHRhZ3MKICAgICAgICBwaWVjZXNbImNsb3Nl
c3QtdGFnIl0gPSBOb25lCiAgICAgICAgY291bnRfb3V0ID0gcnVuX2NvbW1h
bmQoR0lUUywgWyJyZXYtbGlzdCIsICJIRUFEIiwgIi0tY291bnQiXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9cm9vdCkKICAgICAg
ICBwaWVjZXNbImRpc3RhbmNlIl0gPSBpbnQoY291bnRfb3V0KSAgIyB0b3Rh
bCBudW1iZXIgb2YgY29tbWl0cwoKICAgIHJldHVybiBwaWVjZXMKCgpkZWYg
ZG9fdmNzX2luc3RhbGwobWFuaWZlc3RfaW4sIHZlcnNpb25maWxlX3NvdXJj
ZSwgaXB5KToKICAgICIiIkdpdC1zcGVjaWZpYyBpbnN0YWxsYXRpb24gbG9n
aWMgZm9yIFZlcnNpb25lZXIuCgogICAgRm9yIEdpdCwgdGhpcyBtZWFucyBj
cmVhdGluZy9jaGFuZ2luZyAuZ2l0YXR0cmlidXRlcyB0byBtYXJrIF92ZXJz
aW9uLnB5CiAgICBmb3IgZXhwb3J0LXRpbWUga2V5d29yZCBzdWJzdGl0dXRp
b24uCiAgICAiIiIKICAgIEdJVFMgPSBbImdpdCJdCiAgICBpZiBzeXMucGxh
dGZvcm0gPT0gIndpbjMyIjoKICAgICAgICBHSVRTID0gWyJnaXQuY21kIiwg
ImdpdC5leGUiXQogICAgZmlsZXMgPSBbbWFuaWZlc3RfaW4sIHZlcnNpb25m
aWxlX3NvdXJjZV0KICAgIGlmIGlweToKICAgICAgICBmaWxlcy5hcHBlbmQo
aXB5KQogICAgdHJ5OgogICAgICAgIG1lID0gX19maWxlX18KICAgICAgICBp
ZiBtZS5lbmRzd2l0aCgiLnB5YyIpIG9yIG1lLmVuZHN3aXRoKCIucHlvIik6
CiAgICAgICAgICAgIG1lID0gb3MucGF0aC5zcGxpdGV4dChtZSlbMF0gKyAi
LnB5IgogICAgICAgIHZlcnNpb25lZXJfZmlsZSA9IG9zLnBhdGgucmVscGF0
aChtZSkKICAgIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgICAgdmVyc2lvbmVl
cl9maWxlID0gInZlcnNpb25lZXIucHkiCiAgICBmaWxlcy5hcHBlbmQodmVy
c2lvbmVlcl9maWxlKQogICAgcHJlc2VudCA9IEZhbHNlCiAgICB0cnk6CiAg
ICAgICAgZiA9IG9wZW4oIi5naXRhdHRyaWJ1dGVzIiwgInIiKQogICAgICAg
IGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CiAgICAgICAgICAgIGlmIGxp
bmUuc3RyaXAoKS5zdGFydHN3aXRoKHZlcnNpb25maWxlX3NvdXJjZSk6CiAg
ICAgICAgICAgICAgICBpZiAiZXhwb3J0LXN1YnN0IiBpbiBsaW5lLnN0cmlw
KCkuc3BsaXQoKVsxOl06CiAgICAgICAgICAgICAgICAgICAgcHJlc2VudCA9
IFRydWUKICAgICAgICBmLmNsb3NlKCkKICAgIGV4Y2VwdCBFbnZpcm9ubWVu
dEVycm9yOgogICAgICAgIHBhc3MKICAgIGlmIG5vdCBwcmVzZW50OgogICAg
ICAgIGYgPSBvcGVuKCIuZ2l0YXR0cmlidXRlcyIsICJhKyIpCiAgICAgICAg
Zi53cml0ZSgiJXMgZXhwb3J0LXN1YnN0XG4iICUgdmVyc2lvbmZpbGVfc291
cmNlKQogICAgICAgIGYuY2xvc2UoKQogICAgICAgIGZpbGVzLmFwcGVuZCgi
LmdpdGF0dHJpYnV0ZXMiKQogICAgcnVuX2NvbW1hbmQoR0lUUywgWyJhZGQi
LCAiLS0iXSArIGZpbGVzKQoKCmRlZiB2ZXJzaW9uc19mcm9tX3BhcmVudGRp
cihwYXJlbnRkaXJfcHJlZml4LCByb290LCB2ZXJib3NlKToKICAgICIiIlRy
eSB0byBkZXRlcm1pbmUgdGhlIHZlcnNpb24gZnJvbSB0aGUgcGFyZW50IGRp
cmVjdG9yeSBuYW1lLgoKICAgIFNvdXJjZSB0YXJiYWxscyBjb252ZW50aW9u
YWxseSB1bnBhY2sgaW50byBhIGRpcmVjdG9yeSB0aGF0IGluY2x1ZGVzCiAg
ICBib3RoIHRoZSBwcm9qZWN0IG5hbWUgYW5kIGEgdmVyc2lvbiBzdHJpbmcu
CiAgICAiIiIKICAgIGRpcm5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHJvb3Qp
CiAgICBpZiBub3QgZGlybmFtZS5zdGFydHN3aXRoKHBhcmVudGRpcl9wcmVm
aXgpOgogICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJn
dWVzc2luZyByb290ZGlyIGlzICclcycsIGJ1dCAnJXMnIGRvZXNuJ3Qgc3Rh
cnQgd2l0aCAiCiAgICAgICAgICAgICAgICAgICJwcmVmaXggJyVzJyIgJSAo
cm9vdCwgZGlybmFtZSwgcGFyZW50ZGlyX3ByZWZpeCkpCiAgICAgICAgcmFp
c2UgTm90VGhpc01ldGhvZCgicm9vdGRpciBkb2Vzbid0IHN0YXJ0IHdpdGgg
cGFyZW50ZGlyX3ByZWZpeCIpCiAgICByZXR1cm4geyJ2ZXJzaW9uIjogZGly
bmFtZVtsZW4ocGFyZW50ZGlyX3ByZWZpeCk6XSwKICAgICAgICAgICAgImZ1
bGwtcmV2aXNpb25pZCI6IE5vbmUsCiAgICAgICAgICAgICJkaXJ0eSI6IEZh
bHNlLCAiZXJyb3IiOiBOb25lfQoKU0hPUlRfVkVSU0lPTl9QWSA9ICIiIgoj
IFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5ICd2ZXJzaW9uZWVyLnB5JyAo
MC4xNikgZnJvbQojIHJldmlzaW9uLWNvbnRyb2wgc3lzdGVtIGRhdGEsIG9y
IGZyb20gdGhlIHBhcmVudCBkaXJlY3RvcnkgbmFtZSBvZiBhbgojIHVucGFj
a2VkIHNvdXJjZSBhcmNoaXZlLiBEaXN0cmlidXRpb24gdGFyYmFsbHMgY29u
dGFpbiBhIHByZS1nZW5lcmF0ZWQgY29weQojIG9mIHRoaXMgZmlsZS4KCmlt
cG9ydCBqc29uCmltcG9ydCBzeXMKCnZlcnNpb25fanNvbiA9ICcnJwolcwon
JycgICMgRU5EIFZFUlNJT05fSlNPTgoKCmRlZiBnZXRfdmVyc2lvbnMoKToK
ICAgIHJldHVybiBqc29uLmxvYWRzKHZlcnNpb25fanNvbikKIiIiCgoKZGVm
IHZlcnNpb25zX2Zyb21fZmlsZShmaWxlbmFtZSk6CiAgICAiIiJUcnkgdG8g
ZGV0ZXJtaW5lIHRoZSB2ZXJzaW9uIGZyb20gX3ZlcnNpb24ucHkgaWYgcHJl
c2VudC4iIiIKICAgIHRyeToKICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUp
IGFzIGY6CiAgICAgICAgICAgIGNvbnRlbnRzID0gZi5yZWFkKCkKICAgIGV4
Y2VwdCBFbnZpcm9ubWVudEVycm9yOgogICAgICAgIHJhaXNlIE5vdFRoaXNN
ZXRob2QoInVuYWJsZSB0byByZWFkIF92ZXJzaW9uLnB5IikKICAgIG1vID0g
cmUuc2VhcmNoKHIidmVyc2lvbl9qc29uID0gJycnXG4oLiopJycnICAjIEVO
RCBWRVJTSU9OX0pTT04iLAogICAgICAgICAgICAgICAgICAgY29udGVudHMs
IHJlLk0gfCByZS5TKQogICAgaWYgbm90IG1vOgogICAgICAgIHJhaXNlIE5v
dFRoaXNNZXRob2QoIm5vIHZlcnNpb25fanNvbiBpbiBfdmVyc2lvbi5weSIp
CiAgICByZXR1cm4ganNvbi5sb2Fkcyhtby5ncm91cCgxKSkKCgpkZWYgd3Jp
dGVfdG9fdmVyc2lvbl9maWxlKGZpbGVuYW1lLCB2ZXJzaW9ucyk6CiAgICAi
IiJXcml0ZSB0aGUgZ2l2ZW4gdmVyc2lvbiBudW1iZXIgdG8gdGhlIGdpdmVu
IF92ZXJzaW9uLnB5IGZpbGUuIiIiCiAgICBvcy51bmxpbmsoZmlsZW5hbWUp
CiAgICBjb250ZW50cyA9IGpzb24uZHVtcHModmVyc2lvbnMsIHNvcnRfa2V5
cz1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudD0xLCBz
ZXBhcmF0b3JzPSgiLCIsICI6ICIpKQogICAgd2l0aCBvcGVuKGZpbGVuYW1l
LCAidyIpIGFzIGY6CiAgICAgICAgZi53cml0ZShTSE9SVF9WRVJTSU9OX1BZ
ICUgY29udGVudHMpCgogICAgcHJpbnQoInNldCAlcyB0byAnJXMnIiAlIChm
aWxlbmFtZSwgdmVyc2lvbnNbInZlcnNpb24iXSkpCgoKZGVmIHBsdXNfb3Jf
ZG90KHBpZWNlcyk6CiAgICAiIiJSZXR1cm4gYSArIGlmIHdlIGRvbid0IGFs
cmVhZHkgaGF2ZSBvbmUsIGVsc2UgcmV0dXJuIGEgLiIiIgogICAgaWYgIisi
IGluIHBpZWNlcy5nZXQoImNsb3Nlc3QtdGFnIiwgIiIpOgogICAgICAgIHJl
dHVybiAiLiIKICAgIHJldHVybiAiKyIKCgpkZWYgcmVuZGVyX3BlcDQ0MChw
aWVjZXMpOgogICAgIiIiQnVpbGQgdXAgdmVyc2lvbiBzdHJpbmcsIHdpdGgg
cG9zdC1yZWxlYXNlICJsb2NhbCB2ZXJzaW9uIGlkZW50aWZpZXIiLgoKICAg
IE91ciBnb2FsOiBUQUdbK0RJU1RBTkNFLmdIRVhbLmRpcnR5XV0gLiBOb3Rl
IHRoYXQgaWYgeW91CiAgICBnZXQgYSB0YWdnZWQgYnVpbGQgYW5kIHRoZW4g
ZGlydHkgaXQsIHlvdSdsbCBnZXQgVEFHKzAuZ0hFWC5kaXJ0eQoKICAgIEV4
Y2VwdGlvbnM6CiAgICAxOiBubyB0YWdzLiBnaXRfZGVzY3JpYmUgd2FzIGp1
c3QgSEVYLiAwK3VudGFnZ2VkLkRJU1RBTkNFLmdIRVhbLmRpcnR5XQogICAg
IiIiCiAgICBpZiBwaWVjZXNbImNsb3Nlc3QtdGFnIl06CiAgICAgICAgcmVu
ZGVyZWQgPSBwaWVjZXNbImNsb3Nlc3QtdGFnIl0KICAgICAgICBpZiBwaWVj
ZXNbImRpc3RhbmNlIl0gb3IgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAg
ICByZW5kZXJlZCArPSBwbHVzX29yX2RvdChwaWVjZXMpCiAgICAgICAgICAg
IHJlbmRlcmVkICs9ICIlZC5nJXMiICUgKHBpZWNlc1siZGlzdGFuY2UiXSwg
cGllY2VzWyJzaG9ydCJdKQogICAgICAgICAgICBpZiBwaWVjZXNbImRpcnR5
Il06CiAgICAgICAgICAgICAgICByZW5kZXJlZCArPSAiLmRpcnR5IgogICAg
ZWxzZToKICAgICAgICAjIGV4Y2VwdGlvbiAjMQogICAgICAgIHJlbmRlcmVk
ID0gIjArdW50YWdnZWQuJWQuZyVzIiAlIChwaWVjZXNbImRpc3RhbmNlIl0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
ZWNlc1sic2hvcnQiXSkKICAgICAgICBpZiBwaWVjZXNbImRpcnR5Il06CiAg
ICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGlydHkiCiAgICByZXR1cm4gcmVu
ZGVyZWQKCgpkZWYgcmVuZGVyX3BlcDQ0MF9wcmUocGllY2VzKToKICAgICIi
IlRBR1sucG9zdC5kZXZESVNUQU5DRV0gLS0gTm8gLWRpcnR5LgoKICAgIEV4
Y2VwdGlvbnM6CiAgICAxOiBubyB0YWdzLiAwLnBvc3QuZGV2RElTVEFOQ0UK
ICAgICIiIgogICAgaWYgcGllY2VzWyJjbG9zZXN0LXRhZyJdOgogICAgICAg
IHJlbmRlcmVkID0gcGllY2VzWyJjbG9zZXN0LXRhZyJdCiAgICAgICAgaWYg
cGllY2VzWyJkaXN0YW5jZSJdOgogICAgICAgICAgICByZW5kZXJlZCArPSAi
LnBvc3QuZGV2JWQiICUgcGllY2VzWyJkaXN0YW5jZSJdCiAgICBlbHNlOgog
ICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSAiMC5w
b3N0LmRldiVkIiAlIHBpZWNlc1siZGlzdGFuY2UiXQogICAgcmV0dXJuIHJl
bmRlcmVkCgoKZGVmIHJlbmRlcl9wZXA0NDBfcG9zdChwaWVjZXMpOgogICAg
IiIiVEFHWy5wb3N0RElTVEFOQ0VbLmRldjBdK2dIRVhdIC4KCiAgICBUaGUg
Ii5kZXYwIiBtZWFucyBkaXJ0eS4gTm90ZSB0aGF0IC5kZXYwIHNvcnRzIGJh
Y2t3YXJkcwogICAgKGEgZGlydHkgdHJlZSB3aWxsIGFwcGVhciAib2xkZXIi
IHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgY2xlYW4gb25lKSwKICAgIGJ1dCB5
b3Ugc2hvdWxkbid0IGJlIHJlbGVhc2luZyBzb2Z0d2FyZSB3aXRoIC1kaXJ0
eSBhbnl3YXlzLgoKICAgIEV4Y2VwdGlvbnM6CiAgICAxOiBubyB0YWdzLiAw
LnBvc3RESVNUQU5DRVsuZGV2MF0KICAgICIiIgogICAgaWYgcGllY2VzWyJj
bG9zZXN0LXRhZyJdOgogICAgICAgIHJlbmRlcmVkID0gcGllY2VzWyJjbG9z
ZXN0LXRhZyJdCiAgICAgICAgaWYgcGllY2VzWyJkaXN0YW5jZSJdIG9yIHBp
ZWNlc1siZGlydHkiXToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5wb3N0
JWQiICUgcGllY2VzWyJkaXN0YW5jZSJdCiAgICAgICAgICAgIGlmIHBpZWNl
c1siZGlydHkiXToKICAgICAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGV2
MCIKICAgICAgICAgICAgcmVuZGVyZWQgKz0gcGx1c19vcl9kb3QocGllY2Vz
KQogICAgICAgICAgICByZW5kZXJlZCArPSAiZyVzIiAlIHBpZWNlc1sic2hv
cnQiXQogICAgZWxzZToKICAgICAgICAjIGV4Y2VwdGlvbiAjMQogICAgICAg
IHJlbmRlcmVkID0gIjAucG9zdCVkIiAlIHBpZWNlc1siZGlzdGFuY2UiXQog
ICAgICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAgICAgICAgICAgcmVuZGVy
ZWQgKz0gIi5kZXYwIgogICAgICAgIHJlbmRlcmVkICs9ICIrZyVzIiAlIHBp
ZWNlc1sic2hvcnQiXQogICAgcmV0dXJuIHJlbmRlcmVkCgoKZGVmIHJlbmRl
cl9wZXA0NDBfb2xkKHBpZWNlcyk6CiAgICAiIiJUQUdbLnBvc3RESVNUQU5D
RVsuZGV2MF1dIC4KCiAgICBUaGUgIi5kZXYwIiBtZWFucyBkaXJ0eS4KCiAg
ICBFZXhjZXB0aW9uczoKICAgIDE6IG5vIHRhZ3MuIDAucG9zdERJU1RBTkNF
Wy5kZXYwXQogICAgIiIiCiAgICBpZiBwaWVjZXNbImNsb3Nlc3QtdGFnIl06
CiAgICAgICAgcmVuZGVyZWQgPSBwaWVjZXNbImNsb3Nlc3QtdGFnIl0KICAg
ICAgICBpZiBwaWVjZXNbImRpc3RhbmNlIl0gb3IgcGllY2VzWyJkaXJ0eSJd
OgogICAgICAgICAgICByZW5kZXJlZCArPSAiLnBvc3QlZCIgJSBwaWVjZXNb
ImRpc3RhbmNlIl0KICAgICAgICAgICAgaWYgcGllY2VzWyJkaXJ0eSJdOgog
ICAgICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5kZXYwIgogICAgZWxzZToK
ICAgICAgICAjIGV4Y2VwdGlvbiAjMQogICAgICAgIHJlbmRlcmVkID0gIjAu
cG9zdCVkIiAlIHBpZWNlc1siZGlzdGFuY2UiXQogICAgICAgIGlmIHBpZWNl
c1siZGlydHkiXToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5kZXYwIgog
ICAgcmV0dXJuIHJlbmRlcmVkCgoKZGVmIHJlbmRlcl9naXRfZGVzY3JpYmUo
cGllY2VzKToKICAgICIiIlRBR1stRElTVEFOQ0UtZ0hFWF1bLWRpcnR5XS4K
CiAgICBMaWtlICdnaXQgZGVzY3JpYmUgLS10YWdzIC0tZGlydHkgLS1hbHdh
eXMnLgoKICAgIEV4Y2VwdGlvbnM6CiAgICAxOiBubyB0YWdzLiBIRVhbLWRp
cnR5XSAgKG5vdGU6IG5vICdnJyBwcmVmaXgpCiAgICAiIiIKICAgIGlmIHBp
ZWNlc1siY2xvc2VzdC10YWciXToKICAgICAgICByZW5kZXJlZCA9IHBpZWNl
c1siY2xvc2VzdC10YWciXQogICAgICAgIGlmIHBpZWNlc1siZGlzdGFuY2Ui
XToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi0lZC1nJXMiICUgKHBpZWNl
c1siZGlzdGFuY2UiXSwgcGllY2VzWyJzaG9ydCJdKQogICAgZWxzZToKICAg
ICAgICAjIGV4Y2VwdGlvbiAjMQogICAgICAgIHJlbmRlcmVkID0gcGllY2Vz
WyJzaG9ydCJdCiAgICBpZiBwaWVjZXNbImRpcnR5Il06CiAgICAgICAgcmVu
ZGVyZWQgKz0gIi1kaXJ0eSIKICAgIHJldHVybiByZW5kZXJlZAoKCmRlZiBy
ZW5kZXJfZ2l0X2Rlc2NyaWJlX2xvbmcocGllY2VzKToKICAgICIiIlRBRy1E
SVNUQU5DRS1nSEVYWy1kaXJ0eV0uCgogICAgTGlrZSAnZ2l0IGRlc2NyaWJl
IC0tdGFncyAtLWRpcnR5IC0tYWx3YXlzIC1sb25nJy4KICAgIFRoZSBkaXN0
YW5jZS9oYXNoIGlzIHVuY29uZGl0aW9uYWwuCgogICAgRXhjZXB0aW9uczoK
ICAgIDE6IG5vIHRhZ3MuIEhFWFstZGlydHldICAobm90ZTogbm8gJ2cnIHBy
ZWZpeCkKICAgICIiIgogICAgaWYgcGllY2VzWyJjbG9zZXN0LXRhZyJdOgog
ICAgICAgIHJlbmRlcmVkID0gcGllY2VzWyJjbG9zZXN0LXRhZyJdCiAgICAg
ICAgcmVuZGVyZWQgKz0gIi0lZC1nJXMiICUgKHBpZWNlc1siZGlzdGFuY2Ui
XSwgcGllY2VzWyJzaG9ydCJdKQogICAgZWxzZToKICAgICAgICAjIGV4Y2Vw
dGlvbiAjMQogICAgICAgIHJlbmRlcmVkID0gcGllY2VzWyJzaG9ydCJdCiAg
ICBpZiBwaWVjZXNbImRpcnR5Il06CiAgICAgICAgcmVuZGVyZWQgKz0gIi1k
aXJ0eSIKICAgIHJldHVybiByZW5kZXJlZAoKCmRlZiByZW5kZXIocGllY2Vz
LCBzdHlsZSk6CiAgICAiIiJSZW5kZXIgdGhlIGdpdmVuIHZlcnNpb24gcGll
Y2VzIGludG8gdGhlIHJlcXVlc3RlZCBzdHlsZS4iIiIKICAgIGlmIHBpZWNl
c1siZXJyb3IiXToKICAgICAgICByZXR1cm4geyJ2ZXJzaW9uIjogInVua25v
d24iLAogICAgICAgICAgICAgICAgImZ1bGwtcmV2aXNpb25pZCI6IHBpZWNl
cy5nZXQoImxvbmciKSwKICAgICAgICAgICAgICAgICJkaXJ0eSI6IE5vbmUs
CiAgICAgICAgICAgICAgICAiZXJyb3IiOiBwaWVjZXNbImVycm9yIl19Cgog
ICAgaWYgbm90IHN0eWxlIG9yIHN0eWxlID09ICJkZWZhdWx0IjoKICAgICAg
ICBzdHlsZSA9ICJwZXA0NDAiICAjIHRoZSBkZWZhdWx0CgogICAgaWYgc3R5
bGUgPT0gInBlcDQ0MCI6CiAgICAgICAgcmVuZGVyZWQgPSByZW5kZXJfcGVw
NDQwKHBpZWNlcykKICAgIGVsaWYgc3R5bGUgPT0gInBlcDQ0MC1wcmUiOgog
ICAgICAgIHJlbmRlcmVkID0gcmVuZGVyX3BlcDQ0MF9wcmUocGllY2VzKQog
ICAgZWxpZiBzdHlsZSA9PSAicGVwNDQwLXBvc3QiOgogICAgICAgIHJlbmRl
cmVkID0gcmVuZGVyX3BlcDQ0MF9wb3N0KHBpZWNlcykKICAgIGVsaWYgc3R5
bGUgPT0gInBlcDQ0MC1vbGQiOgogICAgICAgIHJlbmRlcmVkID0gcmVuZGVy
X3BlcDQ0MF9vbGQocGllY2VzKQogICAgZWxpZiBzdHlsZSA9PSAiZ2l0LWRl
c2NyaWJlIjoKICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9naXRfZGVzY3Jp
YmUocGllY2VzKQogICAgZWxpZiBzdHlsZSA9PSAiZ2l0LWRlc2NyaWJlLWxv
bmciOgogICAgICAgIHJlbmRlcmVkID0gcmVuZGVyX2dpdF9kZXNjcmliZV9s
b25nKHBpZWNlcykKICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigidW5rbm93biBzdHlsZSAnJXMnIiAlIHN0eWxlKQoKICAgIHJldHVybiB7
InZlcnNpb24iOiByZW5kZXJlZCwgImZ1bGwtcmV2aXNpb25pZCI6IHBpZWNl
c1sibG9uZyJdLAogICAgICAgICAgICAiZGlydHkiOiBwaWVjZXNbImRpcnR5
Il0sICJlcnJvciI6IE5vbmV9CgoKY2xhc3MgVmVyc2lvbmVlckJhZFJvb3RF
cnJvcihFeGNlcHRpb24pOgogICAgIiIiVGhlIHByb2plY3Qgcm9vdCBkaXJl
Y3RvcnkgaXMgdW5rbm93biBvciBtaXNzaW5nIGtleSBmaWxlcy4iIiIKCgpk
ZWYgZ2V0X3ZlcnNpb25zKHZlcmJvc2U9RmFsc2UpOgogICAgIiIiR2V0IHRo
ZSBwcm9qZWN0IHZlcnNpb24gZnJvbSB3aGF0ZXZlciBzb3VyY2UgaXMgYXZh
aWxhYmxlLgoKICAgIFJldHVybnMgZGljdCB3aXRoIHR3byBrZXlzOiAndmVy
c2lvbicgYW5kICdmdWxsJy4KICAgICIiIgogICAgaWYgInZlcnNpb25lZXIi
IGluIHN5cy5tb2R1bGVzOgogICAgICAgICMgc2VlIHRoZSBkaXNjdXNzaW9u
IGluIGNtZGNsYXNzLnB5OmdldF9jbWRjbGFzcygpCiAgICAgICAgZGVsIHN5
cy5tb2R1bGVzWyJ2ZXJzaW9uZWVyIl0KCiAgICByb290ID0gZ2V0X3Jvb3Qo
KQogICAgY2ZnID0gZ2V0X2NvbmZpZ19mcm9tX3Jvb3Qocm9vdCkKCiAgICBh
c3NlcnQgY2ZnLlZDUyBpcyBub3QgTm9uZSwgInBsZWFzZSBzZXQgW3ZlcnNp
b25lZXJdVkNTPSBpbiBzZXR1cC5jZmciCiAgICBoYW5kbGVycyA9IEhBTkRM
RVJTLmdldChjZmcuVkNTKQogICAgYXNzZXJ0IGhhbmRsZXJzLCAidW5yZWNv
Z25pemVkIFZDUyAnJXMnIiAlIGNmZy5WQ1MKICAgIHZlcmJvc2UgPSB2ZXJi
b3NlIG9yIGNmZy52ZXJib3NlCiAgICBhc3NlcnQgY2ZnLnZlcnNpb25maWxl
X3NvdXJjZSBpcyBub3QgTm9uZSwgXAogICAgICAgICJwbGVhc2Ugc2V0IHZl
cnNpb25lZXIudmVyc2lvbmZpbGVfc291cmNlIgogICAgYXNzZXJ0IGNmZy50
YWdfcHJlZml4IGlzIG5vdCBOb25lLCAicGxlYXNlIHNldCB2ZXJzaW9uZWVy
LnRhZ19wcmVmaXgiCgogICAgdmVyc2lvbmZpbGVfYWJzID0gb3MucGF0aC5q
b2luKHJvb3QsIGNmZy52ZXJzaW9uZmlsZV9zb3VyY2UpCgogICAgIyBleHRy
YWN0IHZlcnNpb24gZnJvbSBmaXJzdCBvZjogX3ZlcnNpb24ucHksIFZDUyBj
b21tYW5kIChlLmcuICdnaXQKICAgICMgZGVzY3JpYmUnKSwgcGFyZW50ZGly
LiBUaGlzIGlzIG1lYW50IHRvIHdvcmsgZm9yIGRldmVsb3BlcnMgdXNpbmcg
YQogICAgIyBzb3VyY2UgY2hlY2tvdXQsIGZvciB1c2VycyBvZiBhIHRhcmJh
bGwgY3JlYXRlZCBieSAnc2V0dXAucHkgc2Rpc3QnLAogICAgIyBhbmQgZm9y
IHVzZXJzIG9mIGEgdGFyYmFsbC96aXBiYWxsIGNyZWF0ZWQgYnkgJ2dpdCBh
cmNoaXZlJyBvciBnaXRodWIncwogICAgIyBkb3dubG9hZC1mcm9tLXRhZyBm
ZWF0dXJlIG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIFZDU2VzLgoKICAg
IGdldF9rZXl3b3Jkc19mID0gaGFuZGxlcnMuZ2V0KCJnZXRfa2V5d29yZHMi
KQogICAgZnJvbV9rZXl3b3Jkc19mID0gaGFuZGxlcnMuZ2V0KCJrZXl3b3Jk
cyIpCiAgICBpZiBnZXRfa2V5d29yZHNfZiBhbmQgZnJvbV9rZXl3b3Jkc19m
OgogICAgICAgIHRyeToKICAgICAgICAgICAga2V5d29yZHMgPSBnZXRfa2V5
d29yZHNfZih2ZXJzaW9uZmlsZV9hYnMpCiAgICAgICAgICAgIHZlciA9IGZy
b21fa2V5d29yZHNfZihrZXl3b3JkcywgY2ZnLnRhZ19wcmVmaXgsIHZlcmJv
c2UpCiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBw
cmludCgiZ290IHZlcnNpb24gZnJvbSBleHBhbmRlZCBrZXl3b3JkICVzIiAl
IHZlcikKICAgICAgICAgICAgcmV0dXJuIHZlcgogICAgICAgIGV4Y2VwdCBO
b3RUaGlzTWV0aG9kOgogICAgICAgICAgICBwYXNzCgogICAgdHJ5OgogICAg
ICAgIHZlciA9IHZlcnNpb25zX2Zyb21fZmlsZSh2ZXJzaW9uZmlsZV9hYnMp
CiAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQoImdvdCB2
ZXJzaW9uIGZyb20gZmlsZSAlcyAlcyIgJSAodmVyc2lvbmZpbGVfYWJzLCB2
ZXIpKQogICAgICAgIHJldHVybiB2ZXIKICAgIGV4Y2VwdCBOb3RUaGlzTWV0
aG9kOgogICAgICAgIHBhc3MKCiAgICBmcm9tX3Zjc19mID0gaGFuZGxlcnMu
Z2V0KCJwaWVjZXNfZnJvbV92Y3MiKQogICAgaWYgZnJvbV92Y3NfZjoKICAg
ICAgICB0cnk6CiAgICAgICAgICAgIHBpZWNlcyA9IGZyb21fdmNzX2YoY2Zn
LnRhZ19wcmVmaXgsIHJvb3QsIHZlcmJvc2UpCiAgICAgICAgICAgIHZlciA9
IHJlbmRlcihwaWVjZXMsIGNmZy5zdHlsZSkKICAgICAgICAgICAgaWYgdmVy
Ym9zZToKICAgICAgICAgICAgICAgIHByaW50KCJnb3QgdmVyc2lvbiBmcm9t
IFZDUyAlcyIgJSB2ZXIpCiAgICAgICAgICAgIHJldHVybiB2ZXIKICAgICAg
ICBleGNlcHQgTm90VGhpc01ldGhvZDoKICAgICAgICAgICAgcGFzcwoKICAg
IHRyeToKICAgICAgICBpZiBjZmcucGFyZW50ZGlyX3ByZWZpeDoKICAgICAg
ICAgICAgdmVyID0gdmVyc2lvbnNfZnJvbV9wYXJlbnRkaXIoY2ZnLnBhcmVu
dGRpcl9wcmVmaXgsIHJvb3QsIHZlcmJvc2UpCiAgICAgICAgICAgIGlmIHZl
cmJvc2U6CiAgICAgICAgICAgICAgICBwcmludCgiZ290IHZlcnNpb24gZnJv
bSBwYXJlbnRkaXIgJXMiICUgdmVyKQogICAgICAgICAgICByZXR1cm4gdmVy
CiAgICBleGNlcHQgTm90VGhpc01ldGhvZDoKICAgICAgICBwYXNzCgogICAg
aWYgdmVyYm9zZToKICAgICAgICBwcmludCgidW5hYmxlIHRvIGNvbXB1dGUg
dmVyc2lvbiIpCgogICAgcmV0dXJuIHsidmVyc2lvbiI6ICIwK3Vua25vd24i
LCAiZnVsbC1yZXZpc2lvbmlkIjogTm9uZSwKICAgICAgICAgICAgImRpcnR5
IjogTm9uZSwgImVycm9yIjogInVuYWJsZSB0byBjb21wdXRlIHZlcnNpb24i
fQoKCmRlZiBnZXRfdmVyc2lvbigpOgogICAgIiIiR2V0IHRoZSBzaG9ydCB2
ZXJzaW9uIHN0cmluZyBmb3IgdGhpcyBwcm9qZWN0LiIiIgogICAgcmV0dXJu
IGdldF92ZXJzaW9ucygpWyJ2ZXJzaW9uIl0KCgpkZWYgZ2V0X2NtZGNsYXNz
KCk6CiAgICAiIiJHZXQgdGhlIGN1c3RvbSBzZXR1cHRvb2xzL2Rpc3R1dGls
cyBzdWJjbGFzc2VzIHVzZWQgYnkgVmVyc2lvbmVlci4iIiIKICAgIGlmICJ2
ZXJzaW9uZWVyIiBpbiBzeXMubW9kdWxlczoKICAgICAgICBkZWwgc3lzLm1v
ZHVsZXNbInZlcnNpb25lZXIiXQogICAgICAgICMgdGhpcyBmaXhlcyB0aGUg
InB5dGhvbiBzZXR1cC5weSBkZXZlbG9wIiBjYXNlIChhbHNvICdpbnN0YWxs
JyBhbmQKICAgICAgICAjICdlYXN5X2luc3RhbGwgLicpLCBpbiB3aGljaCBz
dWJkZXBlbmRlbmNpZXMgb2YgdGhlIG1haW4gcHJvamVjdCBhcmUKICAgICAg
ICAjIGJ1aWx0ICh1c2luZyBzZXR1cC5weSBiZGlzdF9lZ2cpIGluIHRoZSBz
YW1lIHB5dGhvbiBwcm9jZXNzLiBBc3N1bWUKICAgICAgICAjIGEgbWFpbiBw
cm9qZWN0IEEgYW5kIGEgZGVwZW5kZW5jeSBCLCB3aGljaCB1c2UgZGlmZmVy
ZW50IHZlcnNpb25zCiAgICAgICAgIyBvZiBWZXJzaW9uZWVyLiBBJ3Mgc2V0
dXAucHkgaW1wb3J0cyBBJ3MgVmVyc2lvbmVlciwgbGVhdmluZyBpdCBpbgog
ICAgICAgICMgc3lzLm1vZHVsZXMgYnkgdGhlIHRpbWUgQidzIHNldHVwLnB5
IGlzIGV4ZWN1dGVkLCBjYXVzaW5nIEIgdG8gcnVuCiAgICAgICAgIyB3aXRo
IHRoZSB3cm9uZyB2ZXJzaW9uZWVyLiBTZXR1cHRvb2xzIHdyYXBzIHRoZSBz
dWItZGVwIGJ1aWxkcyBpbiBhCiAgICAgICAgIyBzYW5kYm94IHRoYXQgcmVz
dG9yZXMgc3lzLm1vZHVsZXMgdG8gaXQncyBwcmUtYnVpbGQgc3RhdGUsIHNv
IHRoZQogICAgICAgICMgcGFyZW50IGlzIHByb3RlY3RlZCBhZ2FpbnN0IHRo
ZSBjaGlsZCdzICJpbXBvcnQgdmVyc2lvbmVlciIuIEJ5CiAgICAgICAgIyBy
ZW1vdmluZyBvdXJzZWx2ZXMgZnJvbSBzeXMubW9kdWxlcyBoZXJlLCBiZWZv
cmUgdGhlIGNoaWxkIGJ1aWxkCiAgICAgICAgIyBoYXBwZW5zLCB3ZSBwcm90
ZWN0IHRoZSBjaGlsZCBmcm9tIHRoZSBwYXJlbnQncyB2ZXJzaW9uZWVyIHRv
by4KICAgICAgICAjIEFsc28gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93YXJu
ZXIvcHl0aG9uLXZlcnNpb25lZXIvaXNzdWVzLzUyCgogICAgY21kcyA9IHt9
CgogICAgIyB3ZSBhZGQgInZlcnNpb24iIHRvIGJvdGggZGlzdHV0aWxzIGFu
ZCBzZXR1cHRvb2xzCiAgICBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBD
b21tYW5kCgogICAgY2xhc3MgY21kX3ZlcnNpb24oQ29tbWFuZCk6CiAgICAg
ICAgZGVzY3JpcHRpb24gPSAicmVwb3J0IGdlbmVyYXRlZCB2ZXJzaW9uIHN0
cmluZyIKICAgICAgICB1c2VyX29wdGlvbnMgPSBbXQogICAgICAgIGJvb2xl
YW5fb3B0aW9ucyA9IFtdCgogICAgICAgIGRlZiBpbml0aWFsaXplX29wdGlv
bnMoc2VsZik6CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgZGVmIGZpbmFs
aXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAg
ZGVmIHJ1bihzZWxmKToKICAgICAgICAgICAgdmVycyA9IGdldF92ZXJzaW9u
cyh2ZXJib3NlPVRydWUpCiAgICAgICAgICAgIHByaW50KCJWZXJzaW9uOiAl
cyIgJSB2ZXJzWyJ2ZXJzaW9uIl0pCiAgICAgICAgICAgIHByaW50KCIgZnVs
bC1yZXZpc2lvbmlkOiAlcyIgJSB2ZXJzLmdldCgiZnVsbC1yZXZpc2lvbmlk
IikpCiAgICAgICAgICAgIHByaW50KCIgZGlydHk6ICVzIiAlIHZlcnMuZ2V0
KCJkaXJ0eSIpKQogICAgICAgICAgICBpZiB2ZXJzWyJlcnJvciJdOgogICAg
ICAgICAgICAgICAgcHJpbnQoIiBlcnJvcjogJXMiICUgdmVyc1siZXJyb3Ii
XSkKICAgIGNtZHNbInZlcnNpb24iXSA9IGNtZF92ZXJzaW9uCgogICAgIyB3
ZSBvdmVycmlkZSAiYnVpbGRfcHkiIGluIGJvdGggZGlzdHV0aWxzIGFuZCBz
ZXR1cHRvb2xzCiAgICAjCiAgICAjIG1vc3QgaW52b2NhdGlvbiBwYXRod2F5
cyBlbmQgdXAgcnVubmluZyBidWlsZF9weToKICAgICMgIGRpc3R1dGlscy9i
dWlsZCAtPiBidWlsZF9weQogICAgIyAgZGlzdHV0aWxzL2luc3RhbGwgLT4g
ZGlzdHV0aWxzL2J1aWxkIC0+Li4KICAgICMgIHNldHVwdG9vbHMvYmRpc3Rf
d2hlZWwgLT4gZGlzdHV0aWxzL2luc3RhbGwgLT4uLgogICAgIyAgc2V0dXB0
b29scy9iZGlzdF9lZ2cgLT4gZGlzdHV0aWxzL2luc3RhbGxfbGliIC0+IGJ1
aWxkX3B5CiAgICAjICBzZXR1cHRvb2xzL2luc3RhbGwgLT4gYmRpc3RfZWdn
IC0+Li4KICAgICMgIHNldHVwdG9vbHMvZGV2ZWxvcCAtPiA/CgogICAgIyB3
ZSBvdmVycmlkZSBkaWZmZXJlbnQgImJ1aWxkX3B5IiBjb21tYW5kcyBmb3Ig
Ym90aCBlbnZpcm9ubWVudHMKICAgIGlmICJzZXR1cHRvb2xzIiBpbiBzeXMu
bW9kdWxlczoKICAgICAgICBmcm9tIHNldHVwdG9vbHMuY29tbWFuZC5idWls
ZF9weSBpbXBvcnQgYnVpbGRfcHkgYXMgX2J1aWxkX3B5CiAgICBlbHNlOgog
ICAgICAgIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfcHkgaW1wb3J0
IGJ1aWxkX3B5IGFzIF9idWlsZF9weQoKICAgIGNsYXNzIGNtZF9idWlsZF9w
eShfYnVpbGRfcHkpOgogICAgICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAg
ICAgIHJvb3QgPSBnZXRfcm9vdCgpCiAgICAgICAgICAgIGNmZyA9IGdldF9j
b25maWdfZnJvbV9yb290KHJvb3QpCiAgICAgICAgICAgIHZlcnNpb25zID0g
Z2V0X3ZlcnNpb25zKCkKICAgICAgICAgICAgX2J1aWxkX3B5LnJ1bihzZWxm
KQogICAgICAgICAgICAjIG5vdyBsb2NhdGUgX3ZlcnNpb24ucHkgaW4gdGhl
IG5ldyBidWlsZC8gZGlyZWN0b3J5IGFuZCByZXBsYWNlCiAgICAgICAgICAg
ICMgaXQgd2l0aCBhbiB1cGRhdGVkIHZhbHVlCiAgICAgICAgICAgIGlmIGNm
Zy52ZXJzaW9uZmlsZV9idWlsZDoKICAgICAgICAgICAgICAgIHRhcmdldF92
ZXJzaW9uZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2xpYiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjZmcudmVyc2lvbmZpbGVfYnVpbGQpCiAgICAgICAgICAgICAgICBwcmlu
dCgiVVBEQVRJTkcgJXMiICUgdGFyZ2V0X3ZlcnNpb25maWxlKQogICAgICAg
ICAgICAgICAgd3JpdGVfdG9fdmVyc2lvbl9maWxlKHRhcmdldF92ZXJzaW9u
ZmlsZSwgdmVyc2lvbnMpCiAgICBjbWRzWyJidWlsZF9weSJdID0gY21kX2J1
aWxkX3B5CgogICAgaWYgImN4X0ZyZWV6ZSIgaW4gc3lzLm1vZHVsZXM6ICAj
IGN4X2ZyZWV6ZSBlbmFibGVkPwogICAgICAgIGZyb20gY3hfRnJlZXplLmRp
c3QgaW1wb3J0IGJ1aWxkX2V4ZSBhcyBfYnVpbGRfZXhlCgogICAgICAgIGNs
YXNzIGNtZF9idWlsZF9leGUoX2J1aWxkX2V4ZSk6CiAgICAgICAgICAgIGRl
ZiBydW4oc2VsZik6CiAgICAgICAgICAgICAgICByb290ID0gZ2V0X3Jvb3Qo
KQogICAgICAgICAgICAgICAgY2ZnID0gZ2V0X2NvbmZpZ19mcm9tX3Jvb3Qo
cm9vdCkKICAgICAgICAgICAgICAgIHZlcnNpb25zID0gZ2V0X3ZlcnNpb25z
KCkKICAgICAgICAgICAgICAgIHRhcmdldF92ZXJzaW9uZmlsZSA9IGNmZy52
ZXJzaW9uZmlsZV9zb3VyY2UKICAgICAgICAgICAgICAgIHByaW50KCJVUERB
VElORyAlcyIgJSB0YXJnZXRfdmVyc2lvbmZpbGUpCiAgICAgICAgICAgICAg
ICB3cml0ZV90b192ZXJzaW9uX2ZpbGUodGFyZ2V0X3ZlcnNpb25maWxlLCB2
ZXJzaW9ucykKCiAgICAgICAgICAgICAgICBfYnVpbGRfZXhlLnJ1bihzZWxm
KQogICAgICAgICAgICAgICAgb3MudW5saW5rKHRhcmdldF92ZXJzaW9uZmls
ZSkKICAgICAgICAgICAgICAgIHdpdGggb3BlbihjZmcudmVyc2lvbmZpbGVf
c291cmNlLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgTE9ORyA9
IExPTkdfVkVSU0lPTl9QWVtjZmcuVkNTXQogICAgICAgICAgICAgICAgICAg
IGYud3JpdGUoTE9ORyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
IkRPTExBUiI6ICIkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
U1RZTEUiOiBjZmcuc3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIlRBR19QUkVGSVgiOiBjZmcudGFnX3ByZWZpeCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiUEFSRU5URElSX1BSRUZJWCI6IGNmZy5wYXJl
bnRkaXJfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJW
RVJTSU9ORklMRV9TT1VSQ0UiOiBjZmcudmVyc2lvbmZpbGVfc291cmNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgY21kc1si
YnVpbGRfZXhlIl0gPSBjbWRfYnVpbGRfZXhlCiAgICAgICAgZGVsIGNtZHNb
ImJ1aWxkX3B5Il0KCiAgICAjIHdlIG92ZXJyaWRlIGRpZmZlcmVudCAic2Rp
c3QiIGNvbW1hbmRzIGZvciBib3RoIGVudmlyb25tZW50cwogICAgaWYgInNl
dHVwdG9vbHMiIGluIHN5cy5tb2R1bGVzOgogICAgICAgIGZyb20gc2V0dXB0
b29scy5jb21tYW5kLnNkaXN0IGltcG9ydCBzZGlzdCBhcyBfc2Rpc3QKICAg
IGVsc2U6CiAgICAgICAgZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5zZGlzdCBp
bXBvcnQgc2Rpc3QgYXMgX3NkaXN0CgogICAgY2xhc3MgY21kX3NkaXN0KF9z
ZGlzdCk6CiAgICAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgICAgdmVy
c2lvbnMgPSBnZXRfdmVyc2lvbnMoKQogICAgICAgICAgICBzZWxmLl92ZXJz
aW9uZWVyX2dlbmVyYXRlZF92ZXJzaW9ucyA9IHZlcnNpb25zCiAgICAgICAg
ICAgICMgdW5sZXNzIHdlIHVwZGF0ZSB0aGlzLCB0aGUgY29tbWFuZCB3aWxs
IGtlZXAgdXNpbmcgdGhlIG9sZAogICAgICAgICAgICAjIHZlcnNpb24KICAg
ICAgICAgICAgc2VsZi5kaXN0cmlidXRpb24ubWV0YWRhdGEudmVyc2lvbiA9
IHZlcnNpb25zWyJ2ZXJzaW9uIl0KICAgICAgICAgICAgcmV0dXJuIF9zZGlz
dC5ydW4oc2VsZikKCiAgICAgICAgZGVmIG1ha2VfcmVsZWFzZV90cmVlKHNl
bGYsIGJhc2VfZGlyLCBmaWxlcyk6CiAgICAgICAgICAgIHJvb3QgPSBnZXRf
cm9vdCgpCiAgICAgICAgICAgIGNmZyA9IGdldF9jb25maWdfZnJvbV9yb290
KHJvb3QpCiAgICAgICAgICAgIF9zZGlzdC5tYWtlX3JlbGVhc2VfdHJlZShz
ZWxmLCBiYXNlX2RpciwgZmlsZXMpCiAgICAgICAgICAgICMgbm93IGxvY2F0
ZSBfdmVyc2lvbi5weSBpbiB0aGUgbmV3IGJhc2VfZGlyIGRpcmVjdG9yeQog
ICAgICAgICAgICAjIChyZW1lbWJlcmluZyB0aGF0IGl0IG1heSBiZSBhIGhh
cmRsaW5rKSBhbmQgcmVwbGFjZSBpdCB3aXRoIGFuCiAgICAgICAgICAgICMg
dXBkYXRlZCB2YWx1ZQogICAgICAgICAgICB0YXJnZXRfdmVyc2lvbmZpbGUg
PSBvcy5wYXRoLmpvaW4oYmFzZV9kaXIsIGNmZy52ZXJzaW9uZmlsZV9zb3Vy
Y2UpCiAgICAgICAgICAgIHByaW50KCJVUERBVElORyAlcyIgJSB0YXJnZXRf
dmVyc2lvbmZpbGUpCiAgICAgICAgICAgIHdyaXRlX3RvX3ZlcnNpb25fZmls
ZSh0YXJnZXRfdmVyc2lvbmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl92ZXJzaW9uZWVyX2dlbmVyYXRlZF92ZXJzaW9u
cykKICAgIGNtZHNbInNkaXN0Il0gPSBjbWRfc2Rpc3QKCiAgICByZXR1cm4g
Y21kcwoKCkNPTkZJR19FUlJPUiA9ICIiIgpzZXR1cC5jZmcgaXMgbWlzc2lu
ZyB0aGUgbmVjZXNzYXJ5IFZlcnNpb25lZXIgY29uZmlndXJhdGlvbi4gWW91
IG5lZWQKYSBzZWN0aW9uIGxpa2U6CgogW3ZlcnNpb25lZXJdCiBWQ1MgPSBn
aXQKIHN0eWxlID0gcGVwNDQwCiB2ZXJzaW9uZmlsZV9zb3VyY2UgPSBzcmMv
bXlwcm9qZWN0L192ZXJzaW9uLnB5CiB2ZXJzaW9uZmlsZV9idWlsZCA9IG15
cHJvamVjdC9fdmVyc2lvbi5weQogdGFnX3ByZWZpeCA9CiBwYXJlbnRkaXJf
cHJlZml4ID0gbXlwcm9qZWN0LQoKWW91IHdpbGwgYWxzbyBuZWVkIHRvIGVk
aXQgeW91ciBzZXR1cC5weSB0byB1c2UgdGhlIHJlc3VsdHM6CgogaW1wb3J0
IHZlcnNpb25lZXIKIHNldHVwKHZlcnNpb249dmVyc2lvbmVlci5nZXRfdmVy
c2lvbigpLAogICAgICAgY21kY2xhc3M9dmVyc2lvbmVlci5nZXRfY21kY2xh
c3MoKSwgLi4uKQoKUGxlYXNlIHJlYWQgdGhlIGRvY3N0cmluZyBpbiAuL3Zl
cnNpb25lZXIucHkgZm9yIGNvbmZpZ3VyYXRpb24gaW5zdHJ1Y3Rpb25zLApl
ZGl0IHNldHVwLmNmZywgYW5kIHJlLXJ1biB0aGUgaW5zdGFsbGVyIG9yICdw
eXRob24gdmVyc2lvbmVlci5weSBzZXR1cCcuCiIiIgoKU0FNUExFX0NPTkZJ
RyA9ICIiIgojIFNlZSB0aGUgZG9jc3RyaW5nIGluIHZlcnNpb25lZXIucHkg
Zm9yIGluc3RydWN0aW9ucy4gTm90ZSB0aGF0IHlvdSBtdXN0CiMgcmUtcnVu
ICd2ZXJzaW9uZWVyLnB5IHNldHVwJyBhZnRlciBjaGFuZ2luZyB0aGlzIHNl
Y3Rpb24sIGFuZCBjb21taXQgdGhlCiMgcmVzdWx0aW5nIGZpbGVzLgoKW3Zl
cnNpb25lZXJdCiNWQ1MgPSBnaXQKI3N0eWxlID0gcGVwNDQwCiN2ZXJzaW9u
ZmlsZV9zb3VyY2UgPQojdmVyc2lvbmZpbGVfYnVpbGQgPQojdGFnX3ByZWZp
eCA9CiNwYXJlbnRkaXJfcHJlZml4ID0KCiIiIgoKSU5JVF9QWV9TTklQUEVU
ID0gIiIiCmZyb20gLl92ZXJzaW9uIGltcG9ydCBnZXRfdmVyc2lvbnMKX192
ZXJzaW9uX18gPSBnZXRfdmVyc2lvbnMoKVsndmVyc2lvbiddCmRlbCBnZXRf
dmVyc2lvbnMKIiIiCgoKZGVmIGRvX3NldHVwKCk6CiAgICAiIiJNYWluIFZD
Uy1pbmRlcGVuZGVudCBzZXR1cCBmdW5jdGlvbiBmb3IgaW5zdGFsbGluZyBW
ZXJzaW9uZWVyLiIiIgogICAgcm9vdCA9IGdldF9yb290KCkKICAgIHRyeToK
ICAgICAgICBjZmcgPSBnZXRfY29uZmlnX2Zyb21fcm9vdChyb290KQogICAg
ZXhjZXB0IChFbnZpcm9ubWVudEVycm9yLCBjb25maWdwYXJzZXIuTm9TZWN0
aW9uRXJyb3IsCiAgICAgICAgICAgIGNvbmZpZ3BhcnNlci5Ob09wdGlvbkVy
cm9yKSBhcyBlOgogICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgKEVudmlyb25t
ZW50RXJyb3IsIGNvbmZpZ3BhcnNlci5Ob1NlY3Rpb25FcnJvcikpOgogICAg
ICAgICAgICBwcmludCgiQWRkaW5nIHNhbXBsZSB2ZXJzaW9uZWVyIGNvbmZp
ZyB0byBzZXR1cC5jZmciLAogICAgICAgICAgICAgICAgICBmaWxlPXN5cy5z
dGRlcnIpCiAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocm9v
dCwgInNldHVwLmNmZyIpLCAiYSIpIGFzIGY6CiAgICAgICAgICAgICAgICBm
LndyaXRlKFNBTVBMRV9DT05GSUcpCiAgICAgICAgcHJpbnQoQ09ORklHX0VS
Uk9SLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgcmV0dXJuIDEKCiAgICBw
cmludCgiIGNyZWF0aW5nICVzIiAlIGNmZy52ZXJzaW9uZmlsZV9zb3VyY2Up
CiAgICB3aXRoIG9wZW4oY2ZnLnZlcnNpb25maWxlX3NvdXJjZSwgInciKSBh
cyBmOgogICAgICAgIExPTkcgPSBMT05HX1ZFUlNJT05fUFlbY2ZnLlZDU10K
ICAgICAgICBmLndyaXRlKExPTkcgJSB7IkRPTExBUiI6ICIkIiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIlNUWUxFIjogY2ZnLnN0eWxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAiVEFHX1BSRUZJWCI6IGNmZy50YWdfcHJlZml4
LAogICAgICAgICAgICAgICAgICAgICAgICAiUEFSRU5URElSX1BSRUZJWCI6
IGNmZy5wYXJlbnRkaXJfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAg
ICAiVkVSU0lPTkZJTEVfU09VUkNFIjogY2ZnLnZlcnNpb25maWxlX3NvdXJj
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgfSkKCiAgICBpcHkgPSBvcy5w
YXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGNmZy52ZXJzaW9uZmlsZV9zb3Vy
Y2UpLAogICAgICAgICAgICAgICAgICAgICAgICJfX2luaXRfXy5weSIpCiAg
ICBpZiBvcy5wYXRoLmV4aXN0cyhpcHkpOgogICAgICAgIHRyeToKICAgICAg
ICAgICAgd2l0aCBvcGVuKGlweSwgInIiKSBhcyBmOgogICAgICAgICAgICAg
ICAgb2xkID0gZi5yZWFkKCkKICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRF
cnJvcjoKICAgICAgICAgICAgb2xkID0gIiIKICAgICAgICBpZiBJTklUX1BZ
X1NOSVBQRVQgbm90IGluIG9sZDoKICAgICAgICAgICAgcHJpbnQoIiBhcHBl
bmRpbmcgdG8gJXMiICUgaXB5KQogICAgICAgICAgICB3aXRoIG9wZW4oaXB5
LCAiYSIpIGFzIGY6CiAgICAgICAgICAgICAgICBmLndyaXRlKElOSVRfUFlf
U05JUFBFVCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgiICVz
IHVubW9kaWZpZWQiICUgaXB5KQogICAgZWxzZToKICAgICAgICBwcmludCgi
ICVzIGRvZXNuJ3QgZXhpc3QsIG9rIiAlIGlweSkKICAgICAgICBpcHkgPSBO
b25lCgogICAgIyBNYWtlIHN1cmUgYm90aCB0aGUgdG9wLWxldmVsICJ2ZXJz
aW9uZWVyLnB5IiBhbmQgdmVyc2lvbmZpbGVfc291cmNlCiAgICAjIChQS0cv
X3ZlcnNpb24ucHksIHVzZWQgYnkgcnVudGltZSBjb2RlKSBhcmUgaW4gTUFO
SUZFU1QuaW4sIHNvCiAgICAjIHRoZXknbGwgYmUgY29waWVkIGludG8gc291
cmNlIGRpc3RyaWJ1dGlvbnMuIFBpcCB3b24ndCBiZSBhYmxlIHRvCiAgICAj
IGluc3RhbGwgdGhlIHBhY2thZ2Ugd2l0aG91dCB0aGlzLgogICAgbWFuaWZl
c3RfaW4gPSBvcy5wYXRoLmpvaW4ocm9vdCwgIk1BTklGRVNULmluIikKICAg
IHNpbXBsZV9pbmNsdWRlcyA9IHNldCgpCiAgICB0cnk6CiAgICAgICAgd2l0
aCBvcGVuKG1hbmlmZXN0X2luLCAiciIpIGFzIGY6CiAgICAgICAgICAgIGZv
ciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dp
dGgoImluY2x1ZGUgIik6CiAgICAgICAgICAgICAgICAgICAgZm9yIGluY2x1
ZGUgaW4gbGluZS5zcGxpdCgpWzE6XToKICAgICAgICAgICAgICAgICAgICAg
ICAgc2ltcGxlX2luY2x1ZGVzLmFkZChpbmNsdWRlKQogICAgZXhjZXB0IEVu
dmlyb25tZW50RXJyb3I6CiAgICAgICAgcGFzcwogICAgIyBUaGF0IGRvZXNu
J3QgY292ZXIgZXZlcnl0aGluZyBNQU5JRkVTVC5pbiBjYW4gZG8KICAgICMg
KGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMi9kaXN0dXRpbHMvc291cmNlZGlz
dC5odG1sI2NvbW1hbmRzKSwgc28KICAgICMgaXQgbWlnaHQgZ2l2ZSBzb21l
IGZhbHNlIG5lZ2F0aXZlcy4gQXBwZW5kaW5nIHJlZHVuZGFudCAnaW5jbHVk
ZScKICAgICMgbGluZXMgaXMgc2FmZSwgdGhvdWdoLgogICAgaWYgInZlcnNp
b25lZXIucHkiIG5vdCBpbiBzaW1wbGVfaW5jbHVkZXM6CiAgICAgICAgcHJp
bnQoIiBhcHBlbmRpbmcgJ3ZlcnNpb25lZXIucHknIHRvIE1BTklGRVNULmlu
IikKICAgICAgICB3aXRoIG9wZW4obWFuaWZlc3RfaW4sICJhIikgYXMgZjoK
ICAgICAgICAgICAgZi53cml0ZSgiaW5jbHVkZSB2ZXJzaW9uZWVyLnB5XG4i
KQogICAgZWxzZToKICAgICAgICBwcmludCgiICd2ZXJzaW9uZWVyLnB5JyBh
bHJlYWR5IGluIE1BTklGRVNULmluIikKICAgIGlmIGNmZy52ZXJzaW9uZmls
ZV9zb3VyY2Ugbm90IGluIHNpbXBsZV9pbmNsdWRlczoKICAgICAgICBwcmlu
dCgiIGFwcGVuZGluZyB2ZXJzaW9uZmlsZV9zb3VyY2UgKCclcycpIHRvIE1B
TklGRVNULmluIiAlCiAgICAgICAgICAgICAgY2ZnLnZlcnNpb25maWxlX3Nv
dXJjZSkKICAgICAgICB3aXRoIG9wZW4obWFuaWZlc3RfaW4sICJhIikgYXMg
ZjoKICAgICAgICAgICAgZi53cml0ZSgiaW5jbHVkZSAlc1xuIiAlIGNmZy52
ZXJzaW9uZmlsZV9zb3VyY2UpCiAgICBlbHNlOgogICAgICAgIHByaW50KCIg
dmVyc2lvbmZpbGVfc291cmNlIGFscmVhZHkgaW4gTUFOSUZFU1QuaW4iKQoK
ICAgICMgTWFrZSBWQ1Mtc3BlY2lmaWMgY2hhbmdlcy4gRm9yIGdpdCwgdGhp
cyBtZWFucyBjcmVhdGluZy9jaGFuZ2luZwogICAgIyAuZ2l0YXR0cmlidXRl
cyB0byBtYXJrIF92ZXJzaW9uLnB5IGZvciBleHBvcnQtdGltZSBrZXl3b3Jk
CiAgICAjIHN1YnN0aXR1dGlvbi4KICAgIGRvX3Zjc19pbnN0YWxsKG1hbmlm
ZXN0X2luLCBjZmcudmVyc2lvbmZpbGVfc291cmNlLCBpcHkpCiAgICByZXR1
cm4gMAoKCmRlZiBzY2FuX3NldHVwX3B5KCk6CiAgICAiIiJWYWxpZGF0ZSB0
aGUgY29udGVudHMgb2Ygc2V0dXAucHkgYWdhaW5zdCBWZXJzaW9uZWVyJ3Mg
ZXhwZWN0YXRpb25zLiIiIgogICAgZm91bmQgPSBzZXQoKQogICAgc2V0dGVy
cyA9IEZhbHNlCiAgICBlcnJvcnMgPSAwCiAgICB3aXRoIG9wZW4oInNldHVw
LnB5IiwgInIiKSBhcyBmOgogICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxp
bmVzKCk6CiAgICAgICAgICAgIGlmICJpbXBvcnQgdmVyc2lvbmVlciIgaW4g
bGluZToKICAgICAgICAgICAgICAgIGZvdW5kLmFkZCgiaW1wb3J0IikKICAg
ICAgICAgICAgaWYgInZlcnNpb25lZXIuZ2V0X2NtZGNsYXNzKCkiIGluIGxp
bmU6CiAgICAgICAgICAgICAgICBmb3VuZC5hZGQoImNtZGNsYXNzIikKICAg
ICAgICAgICAgaWYgInZlcnNpb25lZXIuZ2V0X3ZlcnNpb24oKSIgaW4gbGlu
ZToKICAgICAgICAgICAgICAgIGZvdW5kLmFkZCgiZ2V0X3ZlcnNpb24iKQog
ICAgICAgICAgICBpZiAidmVyc2lvbmVlci5WQ1MiIGluIGxpbmU6CiAgICAg
ICAgICAgICAgICBzZXR0ZXJzID0gVHJ1ZQogICAgICAgICAgICBpZiAidmVy
c2lvbmVlci52ZXJzaW9uZmlsZV9zb3VyY2UiIGluIGxpbmU6CiAgICAgICAg
ICAgICAgICBzZXR0ZXJzID0gVHJ1ZQogICAgaWYgbGVuKGZvdW5kKSAhPSAz
OgogICAgICAgIHByaW50KCIiKQogICAgICAgIHByaW50KCJZb3VyIHNldHVw
LnB5IGFwcGVhcnMgdG8gYmUgbWlzc2luZyBzb21lIGltcG9ydGFudCBpdGVt
cyIpCiAgICAgICAgcHJpbnQoIihidXQgSSBtaWdodCBiZSB3cm9uZykuIFBs
ZWFzZSBtYWtlIHN1cmUgaXQgaGFzIHNvbWV0aGluZyIpCiAgICAgICAgcHJp
bnQoInJvdWdobHkgbGlrZSB0aGUgZm9sbG93aW5nOiIpCiAgICAgICAgcHJp
bnQoIiIpCiAgICAgICAgcHJpbnQoIiBpbXBvcnQgdmVyc2lvbmVlciIpCiAg
ICAgICAgcHJpbnQoIiBzZXR1cCggdmVyc2lvbj12ZXJzaW9uZWVyLmdldF92
ZXJzaW9uKCksIikKICAgICAgICBwcmludCgiICAgICAgICBjbWRjbGFzcz12
ZXJzaW9uZWVyLmdldF9jbWRjbGFzcygpLCAgLi4uKSIpCiAgICAgICAgcHJp
bnQoIiIpCiAgICAgICAgZXJyb3JzICs9IDEKICAgIGlmIHNldHRlcnM6CiAg
ICAgICAgcHJpbnQoIllvdSBzaG91bGQgcmVtb3ZlIGxpbmVzIGxpa2UgJ3Zl
cnNpb25lZXIuVkNTID0gJyBhbmQiKQogICAgICAgIHByaW50KCIndmVyc2lv
bmVlci52ZXJzaW9uZmlsZV9zb3VyY2UgPSAnIC4gVGhpcyBjb25maWd1cmF0
aW9uIikKICAgICAgICBwcmludCgibm93IGxpdmVzIGluIHNldHVwLmNmZywg
YW5kIHNob3VsZCBiZSByZW1vdmVkIGZyb20gc2V0dXAucHkiKQogICAgICAg
IHByaW50KCIiKQogICAgICAgIGVycm9ycyArPSAxCiAgICByZXR1cm4gZXJy
b3JzCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgY21kID0gc3lz
LmFyZ3ZbMV0KICAgIGlmIGNtZCA9PSAic2V0dXAiOgogICAgICAgIGVycm9y
cyA9IGRvX3NldHVwKCkKICAgICAgICBlcnJvcnMgKz0gc2Nhbl9zZXR1cF9w
eSgpCiAgICAgICAgaWYgZXJyb3JzOgogICAgICAgICAgICBzeXMuZXhpdCgx
KQo=

"""
newver = "0.16"

if len(sys.argv) < 2:
    print("Usage: versioneer install")
    sys.exit(1)

command = sys.argv[1]
if command == "version":
    print("versioneer (installer) %s" % newver)
    sys.exit(0)

if command != "install":
    print("Usage: versioneer install")
    sys.exit(1)

v = base64.b64decode(VERSIONEER_b64)
if os.path.exists("versioneer.py"):
    for line in open("versioneer.py").readlines()[:5]:
        if line.startswith("# Version: "):
            oldver = line[len("# Version: "):].strip()
            if oldver != newver:
                print("replacing old versioneer.py (%s)" % oldver)
            break
    else:
        print("overwriting existing versioneer.py")
with open("versioneer.py", "wb") as f:
    f.write(v)
print("versioneer.py (%s) installed into local tree" % newver)
print("Now running 'versioneer.py setup' to install the generated files..")
os.execl(sys.executable, sys.executable, "versioneer.py", "setup")
