#!python

import os, sys, base64

VERSIONEER_b64 = """
CiMgVmVyc2lvbjogMC4xNwoKIiIiVGhlIFZlcnNpb25lZXIgLSBsaWtlIGEg
cm9ja2V0ZWVyLCBidXQgZm9yIHZlcnNpb25zLgoKVGhlIFZlcnNpb25lZXIK
PT09PT09PT09PT09PT0KCiogbGlrZSBhIHJvY2tldGVlciwgYnV0IGZvciB2
ZXJzaW9ucyEKKiBodHRwczovL2dpdGh1Yi5jb20vd2FybmVyL3B5dGhvbi12
ZXJzaW9uZWVyCiogQnJpYW4gV2FybmVyCiogTGljZW5zZTogUHVibGljIERv
bWFpbgoqIENvbXBhdGlibGUgV2l0aDogcHl0aG9uMi42LCAyLjcsIDMuMiwg
My4zLCAzLjQsIDMuNSwgYW5kIHB5cHkKKiBbIVtMYXRlc3QgVmVyc2lvbl0K
KGh0dHBzOi8vcHlwaXAuaW4vdmVyc2lvbi92ZXJzaW9uZWVyL2JhZGdlLnN2
Zz9zdHlsZT1mbGF0KQpdKGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkv
dmVyc2lvbmVlci8pCiogWyFbQnVpbGQgU3RhdHVzXQooaHR0cHM6Ly90cmF2
aXMtY2kub3JnL3dhcm5lci9weXRob24tdmVyc2lvbmVlci5wbmc/YnJhbmNo
PW1hc3RlcikKXShodHRwczovL3RyYXZpcy1jaS5vcmcvd2FybmVyL3B5dGhv
bi12ZXJzaW9uZWVyKQoKVGhpcyBpcyBhIHRvb2wgZm9yIG1hbmFnaW5nIGEg
cmVjb3JkZWQgdmVyc2lvbiBudW1iZXIgaW4gZGlzdHV0aWxzLWJhc2VkCnB5
dGhvbiBwcm9qZWN0cy4gVGhlIGdvYWwgaXMgdG8gcmVtb3ZlIHRoZSB0ZWRp
b3VzIGFuZCBlcnJvci1wcm9uZSAidXBkYXRlCnRoZSBlbWJlZGRlZCB2ZXJz
aW9uIHN0cmluZyIgc3RlcCBmcm9tIHlvdXIgcmVsZWFzZSBwcm9jZXNzLiBN
YWtpbmcgYSBuZXcKcmVsZWFzZSBzaG91bGQgYmUgYXMgZWFzeSBhcyByZWNv
cmRpbmcgYSBuZXcgdGFnIGluIHlvdXIgdmVyc2lvbi1jb250cm9sCnN5c3Rl
bSwgYW5kIG1heWJlIG1ha2luZyBuZXcgdGFyYmFsbHMuCgoKIyMgUXVpY2sg
SW5zdGFsbAoKKiBgcGlwIGluc3RhbGwgdmVyc2lvbmVlcmAgdG8gc29tZXdo
ZXJlIHRvIHlvdXIgJFBBVEgKKiBhZGQgYSBgW3ZlcnNpb25lZXJdYCBzZWN0
aW9uIHRvIHlvdXIgc2V0dXAuY2ZnIChzZWUgYmVsb3cpCiogcnVuIGB2ZXJz
aW9uZWVyIGluc3RhbGxgIGluIHlvdXIgc291cmNlIHRyZWUsIGNvbW1pdCB0
aGUgcmVzdWx0cwoKIyMgVmVyc2lvbiBJZGVudGlmaWVycwoKU291cmNlIHRy
ZWVzIGNvbWUgZnJvbSBhIHZhcmlldHkgb2YgcGxhY2VzOgoKKiBhIHZlcnNp
b24tY29udHJvbCBzeXN0ZW0gY2hlY2tvdXQgKG1vc3RseSB1c2VkIGJ5IGRl
dmVsb3BlcnMpCiogYSBuaWdodGx5IHRhcmJhbGwsIHByb2R1Y2VkIGJ5IGJ1
aWxkIGF1dG9tYXRpb24KKiBhIHNuYXBzaG90IHRhcmJhbGwsIHByb2R1Y2Vk
IGJ5IGEgd2ViLWJhc2VkIFZDUyBicm93c2VyLCBsaWtlIGdpdGh1YidzCiAg
InRhcmJhbGwgZnJvbSB0YWciIGZlYXR1cmUKKiBhIHJlbGVhc2UgdGFyYmFs
bCwgcHJvZHVjZWQgYnkgInNldHVwLnB5IHNkaXN0IiwgZGlzdHJpYnV0ZWQg
dGhyb3VnaCBQeVBJCgpXaXRoaW4gZWFjaCBzb3VyY2UgdHJlZSwgdGhlIHZl
cnNpb24gaWRlbnRpZmllciAoZWl0aGVyIGEgc3RyaW5nIG9yIGEgbnVtYmVy
LAp0aGlzIHRvb2wgaXMgZm9ybWF0LWFnbm9zdGljKSBjYW4gY29tZSBmcm9t
IGEgdmFyaWV0eSBvZiBwbGFjZXM6CgoqIGFzayB0aGUgVkNTIHRvb2wgaXRz
ZWxmLCBlLmcuICJnaXQgZGVzY3JpYmUiIChmb3IgY2hlY2tvdXRzKSwgd2hp
Y2gga25vd3MKICBhYm91dCByZWNlbnQgInRhZ3MiIGFuZCBhbiBhYnNvbHV0
ZSByZXZpc2lvbi1pZAoqIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgaW50
byB3aGljaCB0aGUgdGFyYmFsbCB3YXMgdW5wYWNrZWQKKiBhbiBleHBhbmRl
ZCBWQ1Mga2V5d29yZCAoJElkJCwgZXRjKQoqIGEgYF92ZXJzaW9uLnB5YCBj
cmVhdGVkIGJ5IHNvbWUgZWFybGllciBidWlsZCBzdGVwCgpGb3IgcmVsZWFz
ZWQgc29mdHdhcmUsIHRoZSB2ZXJzaW9uIGlkZW50aWZpZXIgaXMgY2xvc2Vs
eSByZWxhdGVkIHRvIGEgVkNTCnRhZy4gU29tZSBwcm9qZWN0cyB1c2UgdGFn
IG5hbWVzIHRoYXQgaW5jbHVkZSBtb3JlIHRoYW4ganVzdCB0aGUgdmVyc2lv
bgpzdHJpbmcgKGUuZy4gIm15cHJvamVjdC0xLjIiIGluc3RlYWQgb2YganVz
dCAiMS4yIiksIGluIHdoaWNoIGNhc2UgdGhlIHRvb2wKbmVlZHMgdG8gc3Ry
aXAgdGhlIHRhZyBwcmVmaXggdG8gZXh0cmFjdCB0aGUgdmVyc2lvbiBpZGVu
dGlmaWVyLiBGb3IKdW5yZWxlYXNlZCBzb2Z0d2FyZSAoYmV0d2VlbiB0YWdz
KSwgdGhlIHZlcnNpb24gaWRlbnRpZmllciBzaG91bGQgcHJvdmlkZQplbm91
Z2ggaW5mb3JtYXRpb24gdG8gaGVscCBkZXZlbG9wZXJzIHJlY3JlYXRlIHRo
ZSBzYW1lIHRyZWUsIHdoaWxlIGFsc28KZ2l2aW5nIHRoZW0gYW4gaWRlYSBv
ZiByb3VnaGx5IGhvdyBvbGQgdGhlIHRyZWUgaXMgKGFmdGVyIHZlcnNpb24g
MS4yLCBiZWZvcmUKdmVyc2lvbiAxLjMpLiBNYW55IFZDUyBzeXN0ZW1zIGNh
biByZXBvcnQgYSBkZXNjcmlwdGlvbiB0aGF0IGNhcHR1cmVzIHRoaXMsCmZv
ciBleGFtcGxlIGBnaXQgZGVzY3JpYmUgLS10YWdzIC0tZGlydHkgLS1hbHdh
eXNgIHJlcG9ydHMgdGhpbmdzIGxpa2UKIjAuNy0xLWc1NzRhYjk4LWRpcnR5
IiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjaGVja291dCBpcyBvbmUgcmV2aXNp
b24gcGFzdCB0aGUKMC43IHRhZywgaGFzIGEgdW5pcXVlIHJldmlzaW9uIGlk
IG9mICI1NzRhYjk4IiwgYW5kIGlzICJkaXJ0eSIgKGl0IGhhcwp1bmNvbW1p
dHRlZCBjaGFuZ2VzLgoKVGhlIHZlcnNpb24gaWRlbnRpZmllciBpcyB1c2Vk
IGZvciBtdWx0aXBsZSBwdXJwb3NlczoKCiogdG8gYWxsb3cgdGhlIG1vZHVs
ZSB0byBzZWxmLWlkZW50aWZ5IGl0cyB2ZXJzaW9uOiBgbXlwcm9qZWN0Ll9f
dmVyc2lvbl9fYAoqIHRvIGNob29zZSBhIG5hbWUgYW5kIHByZWZpeCBmb3Ig
YSAnc2V0dXAucHkgc2Rpc3QnIHRhcmJhbGwKCiMjIFRoZW9yeSBvZiBPcGVy
YXRpb24KClZlcnNpb25lZXIgd29ya3MgYnkgYWRkaW5nIGEgc3BlY2lhbCBg
X3ZlcnNpb24ucHlgIGZpbGUgaW50byB5b3VyIHNvdXJjZQp0cmVlLCB3aGVy
ZSB5b3VyIGBfX2luaXRfXy5weWAgY2FuIGltcG9ydCBpdC4gVGhpcyBgX3Zl
cnNpb24ucHlgIGtub3dzIGhvdyB0bwpkeW5hbWljYWxseSBhc2sgdGhlIFZD
UyB0b29sIGZvciB2ZXJzaW9uIGluZm9ybWF0aW9uIGF0IGltcG9ydCB0aW1l
LgoKYF92ZXJzaW9uLnB5YCBhbHNvIGNvbnRhaW5zIGAkUmV2aXNpb24kYCBt
YXJrZXJzLCBhbmQgdGhlIGluc3RhbGxhdGlvbgpwcm9jZXNzIG1hcmtzIGBf
dmVyc2lvbi5weWAgdG8gaGF2ZSB0aGlzIG1hcmtlciByZXdyaXR0ZW4gd2l0
aCBhIHRhZyBuYW1lCmR1cmluZyB0aGUgYGdpdCBhcmNoaXZlYCBjb21tYW5k
LiBBcyBhIHJlc3VsdCwgZ2VuZXJhdGVkIHRhcmJhbGxzIHdpbGwKY29udGFp
biBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZ2V0IHRoZSBwcm9wZXIgdmVyc2lv
bi4KClRvIGFsbG93IGBzZXR1cC5weWAgdG8gY29tcHV0ZSBhIHZlcnNpb24g
dG9vLCBhIGB2ZXJzaW9uZWVyLnB5YCBpcyBhZGRlZCB0bwp0aGUgdG9wIGxl
dmVsIG9mIHlvdXIgc291cmNlIHRyZWUsIG5leHQgdG8gYHNldHVwLnB5YCBh
bmQgdGhlIGBzZXR1cC5jZmdgCnRoYXQgY29uZmlndXJlcyBpdC4gVGhpcyBv
dmVycmlkZXMgc2V2ZXJhbCBkaXN0dXRpbHMvc2V0dXB0b29scyBjb21tYW5k
cyB0bwpjb21wdXRlIHRoZSB2ZXJzaW9uIHdoZW4gaW52b2tlZCwgYW5kIGNo
YW5nZXMgYHNldHVwLnB5IGJ1aWxkYCBhbmQgYHNldHVwLnB5CnNkaXN0YCB0
byByZXBsYWNlIGBfdmVyc2lvbi5weWAgd2l0aCBhIHNtYWxsIHN0YXRpYyBm
aWxlIHRoYXQgY29udGFpbnMganVzdAp0aGUgZ2VuZXJhdGVkIHZlcnNpb24g
ZGF0YS4KCiMjIEluc3RhbGxhdGlvbgoKU2VlIFtJTlNUQUxMLm1kXSguL0lO
U1RBTEwubWQpIGZvciBkZXRhaWxlZCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rp
b25zLgoKIyMgVmVyc2lvbi1TdHJpbmcgRmxhdm9ycwoKQ29kZSB3aGljaCB1
c2VzIFZlcnNpb25lZXIgY2FuIGxlYXJuIGFib3V0IGl0cyB2ZXJzaW9uIHN0
cmluZyBhdCBydW50aW1lIGJ5CmltcG9ydGluZyBgX3ZlcnNpb25gIGZyb20g
eW91ciBtYWluIGBfX2luaXRfXy5weWAgZmlsZSBhbmQgcnVubmluZyB0aGUK
YGdldF92ZXJzaW9ucygpYCBmdW5jdGlvbi4gRnJvbSB0aGUgIm91dHNpZGUi
IChlLmcuIGluIGBzZXR1cC5weWApLCB5b3UgY2FuCmltcG9ydCB0aGUgdG9w
LWxldmVsIGB2ZXJzaW9uZWVyLnB5YCBhbmQgcnVuIGBnZXRfdmVyc2lvbnMo
KWAuCgpCb3RoIGZ1bmN0aW9ucyByZXR1cm4gYSBkaWN0aW9uYXJ5IHdpdGgg
ZGlmZmVyZW50IGZsYXZvcnMgb2YgdmVyc2lvbgppbmZvcm1hdGlvbjoKCiog
YFsndmVyc2lvbiddYDogQSBjb25kZW5zZWQgdmVyc2lvbiBzdHJpbmcsIHJl
bmRlcmVkIHVzaW5nIHRoZSBzZWxlY3RlZAogIHN0eWxlLiBUaGlzIGlzIHRo
ZSBtb3N0IGNvbW1vbmx5IHVzZWQgdmFsdWUgZm9yIHRoZSBwcm9qZWN0J3Mg
dmVyc2lvbgogIHN0cmluZy4gVGhlIGRlZmF1bHQgInBlcDQ0MCIgc3R5bGUg
eWllbGRzIHN0cmluZ3MgbGlrZSBgMC4xMWAsCiAgYDAuMTErMi5nMTA3NmM5
N2AsIG9yIGAwLjExKzIuZzEwNzZjOTcuZGlydHlgLiBTZWUgdGhlICJTdHls
ZXMiIHNlY3Rpb24KICBiZWxvdyBmb3IgYWx0ZXJuYXRpdmUgc3R5bGVzLgoK
KiBgWydmdWxsLXJldmlzaW9uaWQnXWA6IGRldGFpbGVkIHJldmlzaW9uIGlk
ZW50aWZpZXIuIEZvciBHaXQsIHRoaXMgaXMgdGhlCiAgZnVsbCBTSEExIGNv
bW1pdCBpZCwgZS5nLiAiMTA3NmM5NzhhOGQzY2ZjNzBmNDA4ZmU1OTc0YWE2
YzA5MmM5NDlhYyIuCgoqIGBbJ2RhdGUnXWA6IERhdGUgYW5kIHRpbWUgb2Yg
dGhlIGxhdGVzdCBgSEVBRGAgY29tbWl0LiBGb3IgR2l0LCBpdCBpcyB0aGUK
ICBjb21taXQgZGF0ZSBpbiBJU08gODYwMSBmb3JtYXQuIFRoaXMgd2lsbCBi
ZSBOb25lIGlmIHRoZSBkYXRlIGlzIG5vdAogIGF2YWlsYWJsZS4KCiogYFsn
ZGlydHknXWA6IGEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgdHJlZSBoYXMgdW5j
b21taXR0ZWQgY2hhbmdlcy4gTm90ZSB0aGF0CiAgdGhpcyBpcyBvbmx5IGFj
Y3VyYXRlIGlmIHJ1biBpbiBhIFZDUyBjaGVja291dCwgb3RoZXJ3aXNlIGl0
IGlzIGxpa2VseSB0bwogIGJlIEZhbHNlIG9yIE5vbmUKCiogYFsnZXJyb3In
XWA6IGlmIHRoZSB2ZXJzaW9uIHN0cmluZyBjb3VsZCBub3QgYmUgY29tcHV0
ZWQsIHRoaXMgd2lsbCBiZSBzZXQKICB0byBhIHN0cmluZyBkZXNjcmliaW5n
IHRoZSBwcm9ibGVtLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBOb25lLiBJdCBt
YXkgYmUKICB1c2VmdWwgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGluIHNldHVw
LnB5IGlmIHRoaXMgaXMgc2V0LCB0byBhdm9pZCBlLmcuCiAgY3JlYXRpbmcg
dGFyYmFsbHMgd2l0aCBhIHZlcnNpb24gc3RyaW5nIG9mICJ1bmtub3duIi4K
ClNvbWUgdmFyaWFudHMgYXJlIG1vcmUgdXNlZnVsIHRoYW4gb3RoZXJzLiBJ
bmNsdWRpbmcgYGZ1bGwtcmV2aXNpb25pZGAgaW4gYQpidWcgcmVwb3J0IHNo
b3VsZCBhbGxvdyBkZXZlbG9wZXJzIHRvIHJlY29uc3RydWN0IHRoZSBleGFj
dCBjb2RlIGJlaW5nIHRlc3RlZAoob3IgaW5kaWNhdGUgdGhlIHByZXNlbmNl
IG9mIGxvY2FsIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgc2hhcmVkIHdpdGgg
dGhlCmRldmVsb3BlcnMpLiBgdmVyc2lvbmAgaXMgc3VpdGFibGUgZm9yIGRp
c3BsYXkgaW4gYW4gImFib3V0IiBib3ggb3IgYSBDTEkKYC0tdmVyc2lvbmAg
b3V0cHV0OiBpdCBjYW4gYmUgZWFzaWx5IGNvbXBhcmVkIGFnYWluc3QgcmVs
ZWFzZSBub3RlcyBhbmQgbGlzdHMKb2YgYnVncyBmaXhlZCBpbiB2YXJpb3Vz
IHJlbGVhc2VzLgoKVGhlIGluc3RhbGxlciBhZGRzIHRoZSBmb2xsb3dpbmcg
dGV4dCB0byB5b3VyIGBfX2luaXRfXy5weWAgdG8gcGxhY2UgYSBiYXNpYwp2
ZXJzaW9uIGluIGBZT1VSUFJPSkVDVC5fX3ZlcnNpb25fX2A6CgogICAgZnJv
bSAuX3ZlcnNpb24gaW1wb3J0IGdldF92ZXJzaW9ucwogICAgX192ZXJzaW9u
X18gPSBnZXRfdmVyc2lvbnMoKVsndmVyc2lvbiddCiAgICBkZWwgZ2V0X3Zl
cnNpb25zCgojIyBTdHlsZXMKClRoZSBzZXR1cC5jZmcgYHN0eWxlPWAgY29u
ZmlndXJhdGlvbiBjb250cm9scyBob3cgdGhlIFZDUyBpbmZvcm1hdGlvbiBp
cwpyZW5kZXJlZCBpbnRvIGEgdmVyc2lvbiBzdHJpbmcuCgpUaGUgZGVmYXVs
dCBzdHlsZSwgInBlcDQ0MCIsIHByb2R1Y2VzIGEgUEVQNDQwLWNvbXBsaWFu
dCBzdHJpbmcsIGVxdWFsIHRvIHRoZQp1bi1wcmVmaXhlZCB0YWcgbmFtZSBm
b3IgYWN0dWFsIHJlbGVhc2VzLCBhbmQgY29udGFpbmluZyBhbiBhZGRpdGlv
bmFsICJsb2NhbAp2ZXJzaW9uIiBzZWN0aW9uIHdpdGggbW9yZSBkZXRhaWwg
Zm9yIGluLWJldHdlZW4gYnVpbGRzLiBGb3IgR2l0LCB0aGlzIGlzClRBR1sr
RElTVEFOQ0UuZ0hFWFsuZGlydHldXSAsIHVzaW5nIGluZm9ybWF0aW9uIGZy
b20gYGdpdCBkZXNjcmliZSAtLXRhZ3MKLS1kaXJ0eSAtLWFsd2F5c2AuIEZv
ciBleGFtcGxlICIwLjExKzIuZzEwNzZjOTcuZGlydHkiIGluZGljYXRlcyB0
aGF0IHRoZQp0cmVlIGlzIGxpa2UgdGhlICIxMDc2Yzk3IiBjb21taXQgYnV0
IGhhcyB1bmNvbW1pdHRlZCBjaGFuZ2VzICgiLmRpcnR5IiksIGFuZAp0aGF0
IHRoaXMgY29tbWl0IGlzIHR3byByZXZpc2lvbnMgKCIrMiIpIGJleW9uZCB0
aGUgIjAuMTEiIHRhZy4gRm9yIHJlbGVhc2VkCnNvZnR3YXJlIChleGFjdGx5
IGVxdWFsIHRvIGEga25vd24gdGFnKSwgdGhlIGlkZW50aWZpZXIgd2lsbCBv
bmx5IGNvbnRhaW4gdGhlCnN0cmlwcGVkIHRhZywgZS5nLiAiMC4xMSIuCgpP
dGhlciBzdHlsZXMgYXJlIGF2YWlsYWJsZS4gU2VlIGRldGFpbHMubWQgaW4g
dGhlIFZlcnNpb25lZXIgc291cmNlIHRyZWUgZm9yCmRlc2NyaXB0aW9ucy4K
CiMjIERlYnVnZ2luZwoKVmVyc2lvbmVlciB0cmllcyB0byBhdm9pZCBmYXRh
bCBlcnJvcnM6IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLCBpdCB3aWxsIHRl
bmQKdG8gcmV0dXJuIGEgdmVyc2lvbiBvZiAiMCt1bmtub3duIi4gVG8gaW52
ZXN0aWdhdGUgdGhlIHByb2JsZW0sIHJ1biBgc2V0dXAucHkKdmVyc2lvbmAs
IHdoaWNoIHdpbGwgcnVuIHRoZSB2ZXJzaW9uLWxvb2t1cCBjb2RlIGluIGEg
dmVyYm9zZSBtb2RlLCBhbmQgd2lsbApkaXNwbGF5IHRoZSBmdWxsIGNvbnRl
bnRzIG9mIGBnZXRfdmVyc2lvbnMoKWAgKGluY2x1ZGluZyB0aGUgYGVycm9y
YCBzdHJpbmcsCndoaWNoIG1heSBoZWxwIGlkZW50aWZ5IHdoYXQgd2VudCB3
cm9uZykuCgojIyBLbm93biBMaW1pdGF0aW9ucwoKU29tZSBzaXR1YXRpb25z
IGFyZSBrbm93biB0byBjYXVzZSBwcm9ibGVtcyBmb3IgVmVyc2lvbmVlci4g
VGhpcyBkZXRhaWxzIHRoZQptb3N0IHNpZ25pZmljYW50IG9uZXMuIE1vcmUg
Y2FuIGJlIGZvdW5kIG9uIEdpdGh1YgpbaXNzdWVzIHBhZ2VdKGh0dHBzOi8v
Z2l0aHViLmNvbS93YXJuZXIvcHl0aG9uLXZlcnNpb25lZXIvaXNzdWVzKS4K
CiMjIyBTdWJwcm9qZWN0cwoKVmVyc2lvbmVlciBoYXMgbGltaXRlZCBzdXBw
b3J0IGZvciBzb3VyY2UgdHJlZXMgaW4gd2hpY2ggYHNldHVwLnB5YCBpcyBu
b3QgaW4KdGhlIHJvb3QgZGlyZWN0b3J5IChlLmcuIGBzZXR1cC5weWAgYW5k
IGAuZ2l0L2AgYXJlICpub3QqIHNpYmxpbmdzKS4gVGhlIGFyZQp0d28gY29t
bW9uIHJlYXNvbnMgd2h5IGBzZXR1cC5weWAgbWlnaHQgbm90IGJlIGluIHRo
ZSByb290OgoKKiBTb3VyY2UgdHJlZXMgd2hpY2ggY29udGFpbiBtdWx0aXBs
ZSBzdWJwcm9qZWN0cywgc3VjaCBhcwogIFtCdWlsZGJvdF0oaHR0cHM6Ly9n
aXRodWIuY29tL2J1aWxkYm90L2J1aWxkYm90KSwgd2hpY2ggY29udGFpbnMg
Ym90aAogICJtYXN0ZXIiIGFuZCAic2xhdmUiIHN1YnByb2plY3RzLCBlYWNo
IHdpdGggdGhlaXIgb3duIGBzZXR1cC5weWAsCiAgYHNldHVwLmNmZ2AsIGFu
ZCBgdG94LmluaWAuIFByb2plY3RzIGxpa2UgdGhlc2UgcHJvZHVjZSBtdWx0
aXBsZSBQeVBJCiAgZGlzdHJpYnV0aW9ucyAoYW5kIHVwbG9hZCBtdWx0aXBs
ZSBpbmRlcGVuZGVudGx5LWluc3RhbGxhYmxlIHRhcmJhbGxzKS4KKiBTb3Vy
Y2UgdHJlZXMgd2hvc2UgbWFpbiBwdXJwb3NlIGlzIHRvIGNvbnRhaW4gYSBD
IGxpYnJhcnksIGJ1dCB3aGljaCBhbHNvCiAgcHJvdmlkZSBiaW5kaW5ncyB0
byBQeXRob24gKGFuZCBwZXJoYXBzIG90aGVyIGxhbmdhdWdlcykgaW4gc3Vi
ZGlyZWN0b3JpZXMuCgpWZXJzaW9uZWVyIHdpbGwgbG9vayBmb3IgYC5naXRg
IGluIHBhcmVudCBkaXJlY3RvcmllcywgYW5kIG1vc3Qgb3BlcmF0aW9ucwpz
aG91bGQgZ2V0IHRoZSByaWdodCB2ZXJzaW9uIHN0cmluZy4gSG93ZXZlciBg
cGlwYCBhbmQgYHNldHVwdG9vbHNgIGhhdmUgYnVncwphbmQgaW1wbGVtZW50
YXRpb24gZGV0YWlscyB3aGljaCBmcmVxdWVudGx5IGNhdXNlIGBwaXAgaW5z
dGFsbCAuYCBmcm9tIGEKc3VicHJvamVjdCBkaXJlY3RvcnkgdG8gZmFpbCB0
byBmaW5kIGEgY29ycmVjdCB2ZXJzaW9uIHN0cmluZyAoc28gaXQgdXN1YWxs
eQpkZWZhdWx0cyB0byBgMCt1bmtub3duYCkuCgpgcGlwIGluc3RhbGwgLS1l
ZGl0YWJsZSAuYCBzaG91bGQgd29yayBjb3JyZWN0bHkuIGBzZXR1cC5weSBp
bnN0YWxsYCBtaWdodAp3b3JrIHRvby4KClBpcC04LjEuMSBpcyBrbm93biB0
byBoYXZlIHRoaXMgcHJvYmxlbSwgYnV0IGhvcGVmdWxseSBpdCB3aWxsIGdl
dCBmaXhlZCBpbgpzb21lIGxhdGVyIHZlcnNpb24uCgpbQnVnICMzOF0oaHR0
cHM6Ly9naXRodWIuY29tL3dhcm5lci9weXRob24tdmVyc2lvbmVlci9pc3N1
ZXMvMzgpIGlzIHRyYWNraW5nCnRoaXMgaXNzdWUuIFRoZSBkaXNjdXNzaW9u
IGluCltQUiAjNjFdKGh0dHBzOi8vZ2l0aHViLmNvbS93YXJuZXIvcHl0aG9u
LXZlcnNpb25lZXIvcHVsbC82MSkgZGVzY3JpYmVzIHRoZQppc3N1ZSBmcm9t
IHRoZSBWZXJzaW9uZWVyIHNpZGUgaW4gbW9yZSBkZXRhaWwuCltwaXAgUFIj
MzE3Nl0oaHR0cHM6Ly9naXRodWIuY29tL3B5cGEvcGlwL3B1bGwvMzE3Nikg
YW5kCltwaXAgUFIjMzYxNV0oaHR0cHM6Ly9naXRodWIuY29tL3B5cGEvcGlw
L3B1bGwvMzYxNSkgY29udGFpbiB3b3JrIHRvIGltcHJvdmUKcGlwIHRvIGxl
dCBWZXJzaW9uZWVyIHdvcmsgY29ycmVjdGx5LgoKVmVyc2lvbmVlci0wLjE2
IGFuZCBlYXJsaWVyIG9ubHkgbG9va2VkIGZvciBhIGAuZ2l0YCBkaXJlY3Rv
cnkgbmV4dCB0byB0aGUKYHNldHVwLmNmZ2AsIHNvIHN1YnByb2plY3RzIHdl
cmUgY29tcGxldGVseSB1bnN1cHBvcnRlZCB3aXRoIHRob3NlIHJlbGVhc2Vz
LgoKIyMjIEVkaXRhYmxlIGluc3RhbGxzIHdpdGggc2V0dXB0b29scyA8PSAx
OC41Cgpgc2V0dXAucHkgZGV2ZWxvcGAgYW5kIGBwaXAgaW5zdGFsbCAtLWVk
aXRhYmxlIC5gIGFsbG93IHlvdSB0byBpbnN0YWxsIGEKcHJvamVjdCBpbnRv
IGEgdmlydHVhbGVudiBvbmNlLCB0aGVuIGNvbnRpbnVlIGVkaXRpbmcgdGhl
IHNvdXJjZSBjb2RlIChhbmQKdGVzdCkgd2l0aG91dCByZS1pbnN0YWxsaW5n
IGFmdGVyIGV2ZXJ5IGNoYW5nZS4KCiJFbnRyeS1wb2ludCBzY3JpcHRzIiAo
YHNldHVwKGVudHJ5X3BvaW50cz17ImNvbnNvbGVfc2NyaXB0cyI6IC4ufSlg
KSBhcmUgYQpjb252ZW5pZW50IHdheSB0byBzcGVjaWZ5IGV4ZWN1dGFibGUg
c2NyaXB0cyB0aGF0IHNob3VsZCBiZSBpbnN0YWxsZWQgYWxvbmcKd2l0aCB0
aGUgcHl0aG9uIHBhY2thZ2UuCgpUaGVzZSBib3RoIHdvcmsgYXMgZXhwZWN0
ZWQgd2hlbiB1c2luZyBtb2Rlcm4gc2V0dXB0b29scy4gV2hlbiB1c2luZwpz
ZXR1cHRvb2xzLTE4LjUgb3IgZWFybGllciwgaG93ZXZlciwgY2VydGFpbiBv
cGVyYXRpb25zIHdpbGwgY2F1c2UKYHBrZ19yZXNvdXJjZXMuRGlzdHJpYnV0
aW9uTm90Rm91bmRgIGVycm9ycyB3aGVuIHJ1bm5pbmcgdGhlIGVudHJ5cG9p
bnQKc2NyaXB0LCB3aGljaCBtdXN0IGJlIHJlc29sdmVkIGJ5IHJlLWluc3Rh
bGxpbmcgdGhlIHBhY2thZ2UuIFRoaXMgaGFwcGVucwp3aGVuIHRoZSBpbnN0
YWxsIGhhcHBlbnMgd2l0aCBvbmUgdmVyc2lvbiwgdGhlbiB0aGUgZWdnX2lu
Zm8gZGF0YSBpcwpyZWdlbmVyYXRlZCB3aGlsZSBhIGRpZmZlcmVudCB2ZXJz
aW9uIGlzIGNoZWNrZWQgb3V0LiBNYW55IHNldHVwLnB5IGNvbW1hbmRzCmNh
dXNlIGVnZ19pbmZvIHRvIGJlIHJlYnVpbHQgKGluY2x1ZGluZyBgc2Rpc3Rg
LCBgd2hlZWxgLCBhbmQgaW5zdGFsbGluZyBpbnRvCmEgZGlmZmVyZW50IHZp
cnR1YWxlbnYpLCBzbyB0aGlzIGNhbiBiZSBzdXJwcmlzaW5nLgoKW0J1ZyAj
ODNdKGh0dHBzOi8vZ2l0aHViLmNvbS93YXJuZXIvcHl0aG9uLXZlcnNpb25l
ZXIvaXNzdWVzLzgzKSBkZXNjcmliZXMKdGhpcyBvbmUsIGJ1dCB1cGdyYWRp
bmcgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIHNldHVwdG9vbHMgc2hvdWxkIHBy
b2JhYmx5CnJlc29sdmUgaXQuCgojIyMgVW5pY29kZSB2ZXJzaW9uIHN0cmlu
Z3MKCldoaWxlIFZlcnNpb25lZXIgd29ya3MgKGFuZCBpcyBjb250aW51YWxs
eSB0ZXN0ZWQpIHdpdGggYm90aCBQeXRob24gMiBhbmQKUHl0aG9uIDMsIGl0
IGlzIG5vdCBlbnRpcmVseSBjb25zaXN0ZW50IHdpdGggYnl0ZXMtdnMtdW5p
Y29kZSBkaXN0aW5jdGlvbnMuCk5ld2VyIHJlbGVhc2VzIHByb2JhYmx5IGdl
bmVyYXRlIHVuaWNvZGUgdmVyc2lvbiBzdHJpbmdzIG9uIHB5Mi4gSXQncyBu
b3QKY2xlYXIgdGhhdCB0aGlzIGlzIHdyb25nLCBidXQgaXQgbWF5IGJlIHN1
cnByaXNpbmcgZm9yIGFwcGxpY2F0aW9ucyB3aGVuIHRoZW4Kd3JpdGUgdGhl
c2Ugc3RyaW5ncyB0byBhIG5ldHdvcmsgY29ubmVjdGlvbiBvciBpbmNsdWRl
IHRoZW0gaW4gYnl0ZXMtb3JpZW50ZWQKQVBJcyBsaWtlIGNyeXB0b2dyYXBo
aWMgY2hlY2tzdW1zLgoKW0J1ZyAjNzFdKGh0dHBzOi8vZ2l0aHViLmNvbS93
YXJuZXIvcHl0aG9uLXZlcnNpb25lZXIvaXNzdWVzLzcxKSBpbnZlc3RpZ2F0
ZXMKdGhpcyBxdWVzdGlvbi4KCgojIyBVcGRhdGluZyBWZXJzaW9uZWVyCgpU
byB1cGdyYWRlIHlvdXIgcHJvamVjdCB0byBhIG5ldyByZWxlYXNlIG9mIFZl
cnNpb25lZXIsIGRvIHRoZSBmb2xsb3dpbmc6CgoqIGluc3RhbGwgdGhlIG5l
dyBWZXJzaW9uZWVyIChgcGlwIGluc3RhbGwgLVUgdmVyc2lvbmVlcmAgb3Ig
ZXF1aXZhbGVudCkKKiBlZGl0IGBzZXR1cC5jZmdgLCBpZiBuZWNlc3Nhcnks
IHRvIGluY2x1ZGUgYW55IG5ldyBjb25maWd1cmF0aW9uIHNldHRpbmdzCiAg
aW5kaWNhdGVkIGJ5IHRoZSByZWxlYXNlIG5vdGVzLiBTZWUgW1VQR1JBRElO
R10oLi9VUEdSQURJTkcubWQpIGZvciBkZXRhaWxzLgoqIHJlLXJ1biBgdmVy
c2lvbmVlciBpbnN0YWxsYCBpbiB5b3VyIHNvdXJjZSB0cmVlLCB0byByZXBs
YWNlCiAgYFNSQy9fdmVyc2lvbi5weWAKKiBjb21taXQgYW55IGNoYW5nZWQg
ZmlsZXMKCiMjIEZ1dHVyZSBEaXJlY3Rpb25zCgpUaGlzIHRvb2wgaXMgZGVz
aWduZWQgdG8gbWFrZSBpdCBlYXNpbHkgZXh0ZW5kZWQgdG8gb3RoZXIgdmVy
c2lvbi1jb250cm9sCnN5c3RlbXM6IGFsbCBWQ1Mtc3BlY2lmaWMgY29tcG9u
ZW50cyBhcmUgaW4gc2VwYXJhdGUgZGlyZWN0b3JpZXMgbGlrZQpzcmMvZ2l0
LyAuIFRoZSB0b3AtbGV2ZWwgYHZlcnNpb25lZXIucHlgIHNjcmlwdCBpcyBh
c3NlbWJsZWQgZnJvbSB0aGVzZQpjb21wb25lbnRzIGJ5IHJ1bm5pbmcgbWFr
ZS12ZXJzaW9uZWVyLnB5IC4gSW4gdGhlIGZ1dHVyZSwgbWFrZS12ZXJzaW9u
ZWVyLnB5CndpbGwgdGFrZSBhIFZDUyBuYW1lIGFzIGFuIGFyZ3VtZW50LCBh
bmQgd2lsbCBjb25zdHJ1Y3QgYSB2ZXJzaW9uIG9mCmB2ZXJzaW9uZWVyLnB5
YCB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSBnaXZlbiBWQ1MuIEl0IG1pZ2h0
IGFsc28gdGFrZSB0aGUKY29uZmlndXJhdGlvbiBhcmd1bWVudHMgdGhhdCBh
cmUgY3VycmVudGx5IHByb3ZpZGVkIG1hbnVhbGx5IGR1cmluZwppbnN0YWxs
YXRpb24gYnkgZWRpdGluZyBzZXR1cC5weSAuIEFsdGVybmF0aXZlbHksIGl0
IG1pZ2h0IGdvIHRoZSBvdGhlcgpkaXJlY3Rpb24gYW5kIGluY2x1ZGUgY29k
ZSBmcm9tIGFsbCBzdXBwb3J0ZWQgVkNTIHN5c3RlbXMsIHJlZHVjaW5nIHRo
ZQpudW1iZXIgb2YgaW50ZXJtZWRpYXRlIHNjcmlwdHMuCgoKIyMgTGljZW5z
ZQoKVG8gbWFrZSBWZXJzaW9uZWVyIGVhc2llciB0byBlbWJlZCwgYWxsIGl0
cyBjb2RlIGlzIGRlZGljYXRlZCB0byB0aGUgcHVibGljCmRvbWFpbi4gVGhl
IGBfdmVyc2lvbi5weWAgdGhhdCBpdCBjcmVhdGVzIGlzIGFsc28gaW4gdGhl
IHB1YmxpYyBkb21haW4uClNwZWNpZmljYWxseSwgYm90aCBhcmUgcmVsZWFz
ZWQgdW5kZXIgdGhlIENyZWF0aXZlIENvbW1vbnMgIlB1YmxpYyBEb21haW4K
RGVkaWNhdGlvbiIgbGljZW5zZSAoQ0MwLTEuMCksIGFzIGRlc2NyaWJlZCBp
bgpodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3pl
cm8vMS4wLyAuCgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRf
ZnVuY3Rpb24KdHJ5OgogICAgaW1wb3J0IGNvbmZpZ3BhcnNlcgpleGNlcHQg
SW1wb3J0RXJyb3I6CiAgICBpbXBvcnQgQ29uZmlnUGFyc2VyIGFzIGNvbmZp
Z3BhcnNlcgppbXBvcnQgZXJybm8KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmlt
cG9ydCByZQppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgc3lzCgoKY2xhc3Mg
VmVyc2lvbmVlckNvbmZpZzoKICAgICIiIkNvbnRhaW5lciBmb3IgVmVyc2lv
bmVlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIiIiCgoKZGVmIGdldF9y
b290KCk6CiAgICAiIiJHZXQgdGhlIHByb2plY3Qgcm9vdCBkaXJlY3Rvcnku
CgogICAgV2UgcmVxdWlyZSB0aGF0IGFsbCBjb21tYW5kcyBhcmUgcnVuIGZy
b20gdGhlIHByb2plY3Qgcm9vdCwgaS5lLiB0aGUKICAgIGRpcmVjdG9yeSB0
aGF0IGNvbnRhaW5zIHNldHVwLnB5LCBzZXR1cC5jZmcsIGFuZCB2ZXJzaW9u
ZWVyLnB5IC4KICAgICIiIgogICAgcm9vdCA9IG9zLnBhdGgucmVhbHBhdGgo
b3MucGF0aC5hYnNwYXRoKG9zLmdldGN3ZCgpKSkKICAgIHNldHVwX3B5ID0g
b3MucGF0aC5qb2luKHJvb3QsICJzZXR1cC5weSIpCiAgICB2ZXJzaW9uZWVy
X3B5ID0gb3MucGF0aC5qb2luKHJvb3QsICJ2ZXJzaW9uZWVyLnB5IikKICAg
IGlmIG5vdCAob3MucGF0aC5leGlzdHMoc2V0dXBfcHkpIG9yIG9zLnBhdGgu
ZXhpc3RzKHZlcnNpb25lZXJfcHkpKToKICAgICAgICAjIGFsbG93ICdweXRo
b24gcGF0aC90by9zZXR1cC5weSBDT01NQU5EJwogICAgICAgIHJvb3QgPSBv
cy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmFic3Bh
dGgoc3lzLmFyZ3ZbMF0pKSkKICAgICAgICBzZXR1cF9weSA9IG9zLnBhdGgu
am9pbihyb290LCAic2V0dXAucHkiKQogICAgICAgIHZlcnNpb25lZXJfcHkg
PSBvcy5wYXRoLmpvaW4ocm9vdCwgInZlcnNpb25lZXIucHkiKQogICAgaWYg
bm90IChvcy5wYXRoLmV4aXN0cyhzZXR1cF9weSkgb3Igb3MucGF0aC5leGlz
dHModmVyc2lvbmVlcl9weSkpOgogICAgICAgIGVyciA9ICgiVmVyc2lvbmVl
ciB3YXMgdW5hYmxlIHRvIHJ1biB0aGUgcHJvamVjdCByb290IGRpcmVjdG9y
eS4gIgogICAgICAgICAgICAgICAiVmVyc2lvbmVlciByZXF1aXJlcyBzZXR1
cC5weSB0byBiZSBleGVjdXRlZCBmcm9tICIKICAgICAgICAgICAgICAgIml0
cyBpbW1lZGlhdGUgZGlyZWN0b3J5IChsaWtlICdweXRob24gc2V0dXAucHkg
Q09NTUFORCcpLCAiCiAgICAgICAgICAgICAgICJvciBpbiBhIHdheSB0aGF0
IGxldHMgaXQgdXNlIHN5cy5hcmd2WzBdIHRvIGZpbmQgdGhlIHJvb3QgIgog
ICAgICAgICAgICAgICAiKGxpa2UgJ3B5dGhvbiBwYXRoL3RvL3NldHVwLnB5
IENPTU1BTkQnKS4iKQogICAgICAgIHJhaXNlIFZlcnNpb25lZXJCYWRSb290
RXJyb3IoZXJyKQogICAgdHJ5OgogICAgICAgICMgQ2VydGFpbiBydW50aW1l
IHdvcmtmbG93cyAoc2V0dXAucHkgaW5zdGFsbC9kZXZlbG9wIGluIGEgc2V0
dXB0b29scwogICAgICAgICMgdHJlZSkgZXhlY3V0ZSBhbGwgZGVwZW5kZW5j
aWVzIGluIGEgc2luZ2xlIHB5dGhvbiBwcm9jZXNzLCBzbwogICAgICAgICMg
InZlcnNpb25lZXIiIG1heSBiZSBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcywg
YW5kIHB5dGhvbidzIHNoYXJlZAogICAgICAgICMgbW9kdWxlLWltcG9ydCB0
YWJsZSB3aWxsIGNhY2hlIHRoZSBmaXJzdCBvbmUuIFNvIHdlIGNhbid0IHVz
ZQogICAgICAgICMgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgYXMgdGhh
dCB3aWxsIGZpbmQgd2hpY2hldmVyCiAgICAgICAgIyB2ZXJzaW9uZWVyLnB5
IHdhcyBmaXJzdCBpbXBvcnRlZCwgZXZlbiBpbiBsYXRlciBwcm9qZWN0cy4K
ICAgICAgICBtZSA9IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5hYnNwYXRo
KF9fZmlsZV9fKSkKICAgICAgICBtZV9kaXIgPSBvcy5wYXRoLm5vcm1jYXNl
KG9zLnBhdGguc3BsaXRleHQobWUpWzBdKQogICAgICAgIHZzcl9kaXIgPSBv
cy5wYXRoLm5vcm1jYXNlKG9zLnBhdGguc3BsaXRleHQodmVyc2lvbmVlcl9w
eSlbMF0pCiAgICAgICAgaWYgbWVfZGlyICE9IHZzcl9kaXI6CiAgICAgICAg
ICAgIHByaW50KCJXYXJuaW5nOiBidWlsZCBpbiAlcyBpcyB1c2luZyB2ZXJz
aW9uZWVyLnB5IGZyb20gJXMiCiAgICAgICAgICAgICAgICAgICUgKG9zLnBh
dGguZGlybmFtZShtZSksIHZlcnNpb25lZXJfcHkpKQogICAgZXhjZXB0IE5h
bWVFcnJvcjoKICAgICAgICBwYXNzCiAgICByZXR1cm4gcm9vdAoKCmRlZiBn
ZXRfY29uZmlnX2Zyb21fcm9vdChyb290KToKICAgICIiIlJlYWQgdGhlIHBy
b2plY3Qgc2V0dXAuY2ZnIGZpbGUgdG8gZGV0ZXJtaW5lIFZlcnNpb25lZXIg
Y29uZmlnLiIiIgogICAgIyBUaGlzIG1pZ2h0IHJhaXNlIEVudmlyb25tZW50
RXJyb3IgKGlmIHNldHVwLmNmZyBpcyBtaXNzaW5nKSwgb3IKICAgICMgY29u
ZmlncGFyc2VyLk5vU2VjdGlvbkVycm9yIChpZiBpdCBsYWNrcyBhIFt2ZXJz
aW9uZWVyXSBzZWN0aW9uKSwgb3IKICAgICMgY29uZmlncGFyc2VyLk5vT3B0
aW9uRXJyb3IgKGlmIGl0IGxhY2tzICJWQ1M9IikuIFNlZSB0aGUgZG9jc3Ry
aW5nIGF0CiAgICAjIHRoZSB0b3Agb2YgdmVyc2lvbmVlci5weSBmb3IgaW5z
dHJ1Y3Rpb25zIG9uIHdyaXRpbmcgeW91ciBzZXR1cC5jZmcgLgogICAgc2V0
dXBfY2ZnID0gb3MucGF0aC5qb2luKHJvb3QsICJzZXR1cC5jZmciKQogICAg
cGFyc2VyID0gY29uZmlncGFyc2VyLlNhZmVDb25maWdQYXJzZXIoKQogICAg
d2l0aCBvcGVuKHNldHVwX2NmZywgInIiKSBhcyBmOgogICAgICAgIHBhcnNl
ci5yZWFkZnAoZikKICAgIFZDUyA9IHBhcnNlci5nZXQoInZlcnNpb25lZXIi
LCAiVkNTIikgICMgbWFuZGF0b3J5CgogICAgZGVmIGdldChwYXJzZXIsIG5h
bWUpOgogICAgICAgIGlmIHBhcnNlci5oYXNfb3B0aW9uKCJ2ZXJzaW9uZWVy
IiwgbmFtZSk6CiAgICAgICAgICAgIHJldHVybiBwYXJzZXIuZ2V0KCJ2ZXJz
aW9uZWVyIiwgbmFtZSkKICAgICAgICByZXR1cm4gTm9uZQogICAgY2ZnID0g
VmVyc2lvbmVlckNvbmZpZygpCiAgICBjZmcuVkNTID0gVkNTCiAgICBjZmcu
c3R5bGUgPSBnZXQocGFyc2VyLCAic3R5bGUiKSBvciAiIgogICAgY2ZnLnZl
cnNpb25maWxlX3NvdXJjZSA9IGdldChwYXJzZXIsICJ2ZXJzaW9uZmlsZV9z
b3VyY2UiKQogICAgY2ZnLnZlcnNpb25maWxlX2J1aWxkID0gZ2V0KHBhcnNl
ciwgInZlcnNpb25maWxlX2J1aWxkIikKICAgIGNmZy50YWdfcHJlZml4ID0g
Z2V0KHBhcnNlciwgInRhZ19wcmVmaXgiKQogICAgaWYgY2ZnLnRhZ19wcmVm
aXggaW4gKCInJyIsICciIicpOgogICAgICAgIGNmZy50YWdfcHJlZml4ID0g
IiIKICAgIGNmZy5wYXJlbnRkaXJfcHJlZml4ID0gZ2V0KHBhcnNlciwgInBh
cmVudGRpcl9wcmVmaXgiKQogICAgY2ZnLnZlcmJvc2UgPSBnZXQocGFyc2Vy
LCAidmVyYm9zZSIpCiAgICByZXR1cm4gY2ZnCgoKY2xhc3MgTm90VGhpc01l
dGhvZChFeGNlcHRpb24pOgogICAgIiIiRXhjZXB0aW9uIHJhaXNlZCBpZiBh
IG1ldGhvZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBjdXJyZW50IHNjZW5hcmlv
LiIiIgoKIyB0aGVzZSBkaWN0aW9uYXJpZXMgY29udGFpbiBWQ1Mtc3BlY2lm
aWMgdG9vbHMKTE9OR19WRVJTSU9OX1BZID0ge30KSEFORExFUlMgPSB7fQoK
CmRlZiByZWdpc3Rlcl92Y3NfaGFuZGxlcih2Y3MsIG1ldGhvZCk6ICAjIGRl
Y29yYXRvcgogICAgIiIiRGVjb3JhdG9yIHRvIG1hcmsgYSBtZXRob2QgYXMg
dGhlIGhhbmRsZXIgZm9yIGEgcGFydGljdWxhciBWQ1MuIiIiCiAgICBkZWYg
ZGVjb3JhdGUoZik6CiAgICAgICAgIiIiU3RvcmUgZiBpbiBIQU5ETEVSU1t2
Y3NdW21ldGhvZF0uIiIiCiAgICAgICAgaWYgdmNzIG5vdCBpbiBIQU5ETEVS
UzoKICAgICAgICAgICAgSEFORExFUlNbdmNzXSA9IHt9CiAgICAgICAgSEFO
RExFUlNbdmNzXVttZXRob2RdID0gZgogICAgICAgIHJldHVybiBmCiAgICBy
ZXR1cm4gZGVjb3JhdGUKCgpkZWYgcnVuX2NvbW1hbmQoY29tbWFuZHMsIGFy
Z3MsIGN3ZD1Ob25lLCB2ZXJib3NlPUZhbHNlLCBoaWRlX3N0ZGVycj1GYWxz
ZSwKICAgICAgICAgICAgICAgIGVudj1Ob25lKToKICAgICIiIkNhbGwgdGhl
IGdpdmVuIGNvbW1hbmQocykuIiIiCiAgICBhc3NlcnQgaXNpbnN0YW5jZShj
b21tYW5kcywgbGlzdCkKICAgIHAgPSBOb25lCiAgICBmb3IgYyBpbiBjb21t
YW5kczoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGRpc3BjbWQgPSBzdHIo
W2NdICsgYXJncykKICAgICAgICAgICAgIyByZW1lbWJlciBzaGVsbD1GYWxz
ZSwgc28gdXNlIGdpdC5jbWQgb24gd2luZG93cywgbm90IGp1c3QgZ2l0CiAg
ICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtjXSArIGFyZ3MsIGN3
ZD1jd2QsIGVudj1lbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZGVycj0oc3VicHJvY2Vzcy5QSVBFIGlmIGhp
ZGVfc3RkZXJyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBOb25lKSkKICAgICAgICAgICAgYnJlYWsKICAgICAgICBl
eGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKICAgICAgICAgICAgZSA9IHN5cy5l
eGNfaW5mbygpWzFdCiAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8u
RU5PRU5UOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAg
aWYgdmVyYm9zZToKICAgICAgICAgICAgICAgIHByaW50KCJ1bmFibGUgdG8g
cnVuICVzIiAlIGRpc3BjbWQpCiAgICAgICAgICAgICAgICBwcmludChlKQog
ICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQogICAgZWxzZToKICAgICAg
ICBpZiB2ZXJib3NlOgogICAgICAgICAgICBwcmludCgidW5hYmxlIHRvIGZp
bmQgY29tbWFuZCwgdHJpZWQgJXMiICUgKGNvbW1hbmRzLCkpCiAgICAgICAg
cmV0dXJuIE5vbmUsIE5vbmUKICAgIHN0ZG91dCA9IHAuY29tbXVuaWNhdGUo
KVswXS5zdHJpcCgpCiAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDM6
CiAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LmRlY29kZSgpCiAgICBpZiBwLnJl
dHVybmNvZGUgIT0gMDoKICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAg
ICBwcmludCgidW5hYmxlIHRvIHJ1biAlcyAoZXJyb3IpIiAlIGRpc3BjbWQp
CiAgICAgICAgICAgIHByaW50KCJzdGRvdXQgd2FzICVzIiAlIHN0ZG91dCkK
ICAgICAgICByZXR1cm4gTm9uZSwgcC5yZXR1cm5jb2RlCiAgICByZXR1cm4g
c3Rkb3V0LCBwLnJldHVybmNvZGUKTE9OR19WRVJTSU9OX1BZWydnaXQnXSA9
ICcnJwojIFRoaXMgZmlsZSBoZWxwcyB0byBjb21wdXRlIGEgdmVyc2lvbiBu
dW1iZXIgaW4gc291cmNlIHRyZWVzIG9idGFpbmVkIGZyb20KIyBnaXQtYXJj
aGl2ZSB0YXJiYWxsIChzdWNoIGFzIHRob3NlIHByb3ZpZGVkIGJ5IGdpdGh1
YnMgZG93bmxvYWQtZnJvbS10YWcKIyBmZWF0dXJlKS4gRGlzdHJpYnV0aW9u
IHRhcmJhbGxzIChidWlsdCBieSBzZXR1cC5weSBzZGlzdCkgYW5kIGJ1aWxk
CiMgZGlyZWN0b3JpZXMgKHByb2R1Y2VkIGJ5IHNldHVwLnB5IGJ1aWxkKSB3
aWxsIGNvbnRhaW4gYSBtdWNoIHNob3J0ZXIgZmlsZQojIHRoYXQganVzdCBj
b250YWlucyB0aGUgY29tcHV0ZWQgdmVyc2lvbiBudW1iZXIuCgojIFRoaXMg
ZmlsZSBpcyByZWxlYXNlZCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluLiBHZW5l
cmF0ZWQgYnkKIyB2ZXJzaW9uZWVyLTAuMTcgKGh0dHBzOi8vZ2l0aHViLmNv
bS93YXJuZXIvcHl0aG9uLXZlcnNpb25lZXIpCgoiIiJHaXQgaW1wbGVtZW50
YXRpb24gb2YgX3ZlcnNpb24ucHkuIiIiCgppbXBvcnQgZXJybm8KaW1wb3J0
IG9zCmltcG9ydCByZQppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgc3lzCgoK
ZGVmIGdldF9rZXl3b3JkcygpOgogICAgIiIiR2V0IHRoZSBrZXl3b3JkcyBu
ZWVkZWQgdG8gbG9vayB1cCB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbi4iIiIK
ICAgICMgdGhlc2Ugc3RyaW5ncyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGdpdCBk
dXJpbmcgZ2l0LWFyY2hpdmUuCiAgICAjIHNldHVwLnB5L3ZlcnNpb25lZXIu
cHkgd2lsbCBncmVwIGZvciB0aGUgdmFyaWFibGUgbmFtZXMsIHNvIHRoZXkg
bXVzdAogICAgIyBlYWNoIGJlIGRlZmluZWQgb24gYSBsaW5lIG9mIHRoZWly
IG93bi4gX3ZlcnNpb24ucHkgd2lsbCBqdXN0IGNhbGwKICAgICMgZ2V0X2tl
eXdvcmRzKCkuCiAgICBnaXRfcmVmbmFtZXMgPSAiJShET0xMQVIpc0Zvcm1h
dDolJWQlKERPTExBUilzIgogICAgZ2l0X2Z1bGwgPSAiJShET0xMQVIpc0Zv
cm1hdDolJUglKERPTExBUilzIgogICAgZ2l0X2RhdGUgPSAiJShET0xMQVIp
c0Zvcm1hdDolJWNpJShET0xMQVIpcyIKICAgIGtleXdvcmRzID0geyJyZWZu
YW1lcyI6IGdpdF9yZWZuYW1lcywgImZ1bGwiOiBnaXRfZnVsbCwgImRhdGUi
OiBnaXRfZGF0ZX0KICAgIHJldHVybiBrZXl3b3JkcwoKCmNsYXNzIFZlcnNp
b25lZXJDb25maWc6CiAgICAiIiJDb250YWluZXIgZm9yIFZlcnNpb25lZXIg
Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiIiIgoKCmRlZiBnZXRfY29uZmln
KCk6CiAgICAiIiJDcmVhdGUsIHBvcHVsYXRlIGFuZCByZXR1cm4gdGhlIFZl
cnNpb25lZXJDb25maWcoKSBvYmplY3QuIiIiCiAgICAjIHRoZXNlIHN0cmlu
Z3MgYXJlIGZpbGxlZCBpbiB3aGVuICdzZXR1cC5weSB2ZXJzaW9uZWVyJyBj
cmVhdGVzCiAgICAjIF92ZXJzaW9uLnB5CiAgICBjZmcgPSBWZXJzaW9uZWVy
Q29uZmlnKCkKICAgIGNmZy5WQ1MgPSAiZ2l0IgogICAgY2ZnLnN0eWxlID0g
IiUoU1RZTEUpcyIKICAgIGNmZy50YWdfcHJlZml4ID0gIiUoVEFHX1BSRUZJ
WClzIgogICAgY2ZnLnBhcmVudGRpcl9wcmVmaXggPSAiJShQQVJFTlRESVJf
UFJFRklYKXMiCiAgICBjZmcudmVyc2lvbmZpbGVfc291cmNlID0gIiUoVkVS
U0lPTkZJTEVfU09VUkNFKXMiCiAgICBjZmcudmVyYm9zZSA9IEZhbHNlCiAg
ICByZXR1cm4gY2ZnCgoKY2xhc3MgTm90VGhpc01ldGhvZChFeGNlcHRpb24p
OgogICAgIiIiRXhjZXB0aW9uIHJhaXNlZCBpZiBhIG1ldGhvZCBpcyBub3Qg
dmFsaWQgZm9yIHRoZSBjdXJyZW50IHNjZW5hcmlvLiIiIgoKCkxPTkdfVkVS
U0lPTl9QWSA9IHt9CkhBTkRMRVJTID0ge30KCgpkZWYgcmVnaXN0ZXJfdmNz
X2hhbmRsZXIodmNzLCBtZXRob2QpOiAgIyBkZWNvcmF0b3IKICAgICIiIkRl
Y29yYXRvciB0byBtYXJrIGEgbWV0aG9kIGFzIHRoZSBoYW5kbGVyIGZvciBh
IHBhcnRpY3VsYXIgVkNTLiIiIgogICAgZGVmIGRlY29yYXRlKGYpOgogICAg
ICAgICIiIlN0b3JlIGYgaW4gSEFORExFUlNbdmNzXVttZXRob2RdLiIiIgog
ICAgICAgIGlmIHZjcyBub3QgaW4gSEFORExFUlM6CiAgICAgICAgICAgIEhB
TkRMRVJTW3Zjc10gPSB7fQogICAgICAgIEhBTkRMRVJTW3Zjc11bbWV0aG9k
XSA9IGYKICAgICAgICByZXR1cm4gZgogICAgcmV0dXJuIGRlY29yYXRlCgoK
ZGVmIHJ1bl9jb21tYW5kKGNvbW1hbmRzLCBhcmdzLCBjd2Q9Tm9uZSwgdmVy
Ym9zZT1GYWxzZSwgaGlkZV9zdGRlcnI9RmFsc2UsCiAgICAgICAgICAgICAg
ICBlbnY9Tm9uZSk6CiAgICAiIiJDYWxsIHRoZSBnaXZlbiBjb21tYW5kKHMp
LiIiIgogICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29tbWFuZHMsIGxpc3QpCiAg
ICBwID0gTm9uZQogICAgZm9yIGMgaW4gY29tbWFuZHM6CiAgICAgICAgdHJ5
OgogICAgICAgICAgICBkaXNwY21kID0gc3RyKFtjXSArIGFyZ3MpCiAgICAg
ICAgICAgICMgcmVtZW1iZXIgc2hlbGw9RmFsc2UsIHNvIHVzZSBnaXQuY21k
IG9uIHdpbmRvd3MsIG5vdCBqdXN0IGdpdAogICAgICAgICAgICBwID0gc3Vi
cHJvY2Vzcy5Qb3BlbihbY10gKyBhcmdzLCBjd2Q9Y3dkLCBlbnY9ZW52LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJv
Y2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGRlcnI9KHN1YnByb2Nlc3MuUElQRSBpZiBoaWRlX3N0ZGVycgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgTm9uZSkp
CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZXhjZXB0IEVudmlyb25tZW50
RXJyb3I6CiAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQogICAg
ICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAg
ICAgICAgICAgICBwcmludCgidW5hYmxlIHRvIHJ1biAlJXMiICUlIGRpc3Bj
bWQpCiAgICAgICAgICAgICAgICBwcmludChlKQogICAgICAgICAgICByZXR1
cm4gTm9uZSwgTm9uZQogICAgZWxzZToKICAgICAgICBpZiB2ZXJib3NlOgog
ICAgICAgICAgICBwcmludCgidW5hYmxlIHRvIGZpbmQgY29tbWFuZCwgdHJp
ZWQgJSVzIiAlJSAoY29tbWFuZHMsKSkKICAgICAgICByZXR1cm4gTm9uZSwg
Tm9uZQogICAgc3Rkb3V0ID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkK
ICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMzoKICAgICAgICBzdGRv
dXQgPSBzdGRvdXQuZGVjb2RlKCkKICAgIGlmIHAucmV0dXJuY29kZSAhPSAw
OgogICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJ1bmFi
bGUgdG8gcnVuICUlcyAoZXJyb3IpIiAlJSBkaXNwY21kKQogICAgICAgICAg
ICBwcmludCgic3Rkb3V0IHdhcyAlJXMiICUlIHN0ZG91dCkKICAgICAgICBy
ZXR1cm4gTm9uZSwgcC5yZXR1cm5jb2RlCiAgICByZXR1cm4gc3Rkb3V0LCBw
LnJldHVybmNvZGUKCgpkZWYgdmVyc2lvbnNfZnJvbV9wYXJlbnRkaXIocGFy
ZW50ZGlyX3ByZWZpeCwgcm9vdCwgdmVyYm9zZSk6CiAgICAiIiJUcnkgdG8g
ZGV0ZXJtaW5lIHRoZSB2ZXJzaW9uIGZyb20gdGhlIHBhcmVudCBkaXJlY3Rv
cnkgbmFtZS4KCiAgICBTb3VyY2UgdGFyYmFsbHMgY29udmVudGlvbmFsbHkg
dW5wYWNrIGludG8gYSBkaXJlY3RvcnkgdGhhdCBpbmNsdWRlcyBib3RoCiAg
ICB0aGUgcHJvamVjdCBuYW1lIGFuZCBhIHZlcnNpb24gc3RyaW5nLiBXZSB3
aWxsIGFsc28gc3VwcG9ydCBzZWFyY2hpbmcgdXAKICAgIHR3byBkaXJlY3Rv
cnkgbGV2ZWxzIGZvciBhbiBhcHByb3ByaWF0ZWx5IG5hbWVkIHBhcmVudCBk
aXJlY3RvcnkKICAgICIiIgogICAgcm9vdGRpcnMgPSBbXQoKICAgIGZvciBp
IGluIHJhbmdlKDMpOgogICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmJhc2Vu
YW1lKHJvb3QpCiAgICAgICAgaWYgZGlybmFtZS5zdGFydHN3aXRoKHBhcmVu
dGRpcl9wcmVmaXgpOgogICAgICAgICAgICByZXR1cm4geyJ2ZXJzaW9uIjog
ZGlybmFtZVtsZW4ocGFyZW50ZGlyX3ByZWZpeCk6XSwKICAgICAgICAgICAg
ICAgICAgICAiZnVsbC1yZXZpc2lvbmlkIjogTm9uZSwKICAgICAgICAgICAg
ICAgICAgICAiZGlydHkiOiBGYWxzZSwgImVycm9yIjogTm9uZSwgImRhdGUi
OiBOb25lfQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJvb3RkaXJzLmFw
cGVuZChyb290KQogICAgICAgICAgICByb290ID0gb3MucGF0aC5kaXJuYW1l
KHJvb3QpICAjIHVwIGEgbGV2ZWwKCiAgICBpZiB2ZXJib3NlOgogICAgICAg
IHByaW50KCJUcmllZCBkaXJlY3RvcmllcyAlJXMgYnV0IG5vbmUgc3RhcnRl
ZCB3aXRoIHByZWZpeCAlJXMiICUlCiAgICAgICAgICAgICAgKHN0cihyb290
ZGlycyksIHBhcmVudGRpcl9wcmVmaXgpKQogICAgcmFpc2UgTm90VGhpc01l
dGhvZCgicm9vdGRpciBkb2Vzbid0IHN0YXJ0IHdpdGggcGFyZW50ZGlyX3By
ZWZpeCIpCgoKQHJlZ2lzdGVyX3Zjc19oYW5kbGVyKCJnaXQiLCAiZ2V0X2tl
eXdvcmRzIikKZGVmIGdpdF9nZXRfa2V5d29yZHModmVyc2lvbmZpbGVfYWJz
KToKICAgICIiIkV4dHJhY3QgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIHRo
ZSBnaXZlbiBmaWxlLiIiIgogICAgIyB0aGUgY29kZSBlbWJlZGRlZCBpbiBf
dmVyc2lvbi5weSBjYW4ganVzdCBmZXRjaCB0aGUgdmFsdWUgb2YgdGhlc2UK
ICAgICMga2V5d29yZHMuIFdoZW4gdXNlZCBmcm9tIHNldHVwLnB5LCB3ZSBk
b24ndCB3YW50IHRvIGltcG9ydCBfdmVyc2lvbi5weSwKICAgICMgc28gd2Ug
ZG8gaXQgd2l0aCBhIHJlZ2V4cCBpbnN0ZWFkLiBUaGlzIGZ1bmN0aW9uIGlz
IG5vdCB1c2VkIGZyb20KICAgICMgX3ZlcnNpb24ucHkuCiAgICBrZXl3b3Jk
cyA9IHt9CiAgICB0cnk6CiAgICAgICAgZiA9IG9wZW4odmVyc2lvbmZpbGVf
YWJzLCAiciIpCiAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToK
ICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpLnN0YXJ0c3dpdGgoImdpdF9y
ZWZuYW1lcyA9Iik6CiAgICAgICAgICAgICAgICBtbyA9IHJlLnNlYXJjaChy
Jz1ccyoiKC4qKSInLCBsaW5lKQogICAgICAgICAgICAgICAgaWYgbW86CiAg
ICAgICAgICAgICAgICAgICAga2V5d29yZHNbInJlZm5hbWVzIl0gPSBtby5n
cm91cCgxKQogICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkuc3RhcnRzd2l0
aCgiZ2l0X2Z1bGwgPSIpOgogICAgICAgICAgICAgICAgbW8gPSByZS5zZWFy
Y2gocic9XHMqIiguKikiJywgbGluZSkKICAgICAgICAgICAgICAgIGlmIG1v
OgogICAgICAgICAgICAgICAgICAgIGtleXdvcmRzWyJmdWxsIl0gPSBtby5n
cm91cCgxKQogICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkuc3RhcnRzd2l0
aCgiZ2l0X2RhdGUgPSIpOgogICAgICAgICAgICAgICAgbW8gPSByZS5zZWFy
Y2gocic9XHMqIiguKikiJywgbGluZSkKICAgICAgICAgICAgICAgIGlmIG1v
OgogICAgICAgICAgICAgICAgICAgIGtleXdvcmRzWyJkYXRlIl0gPSBtby5n
cm91cCgxKQogICAgICAgIGYuY2xvc2UoKQogICAgZXhjZXB0IEVudmlyb25t
ZW50RXJyb3I6CiAgICAgICAgcGFzcwogICAgcmV0dXJuIGtleXdvcmRzCgoK
QHJlZ2lzdGVyX3Zjc19oYW5kbGVyKCJnaXQiLCAia2V5d29yZHMiKQpkZWYg
Z2l0X3ZlcnNpb25zX2Zyb21fa2V5d29yZHMoa2V5d29yZHMsIHRhZ19wcmVm
aXgsIHZlcmJvc2UpOgogICAgIiIiR2V0IHZlcnNpb24gaW5mb3JtYXRpb24g
ZnJvbSBnaXQga2V5d29yZHMuIiIiCiAgICBpZiBub3Qga2V5d29yZHM6CiAg
ICAgICAgcmFpc2UgTm90VGhpc01ldGhvZCgibm8ga2V5d29yZHMgYXQgYWxs
LCB3ZWlyZCIpCiAgICBkYXRlID0ga2V5d29yZHMuZ2V0KCJkYXRlIikKICAg
IGlmIGRhdGUgaXMgbm90IE5vbmU6CiAgICAgICAgIyBnaXQtMi4yLjAgYWRk
ZWQgIiUlY0kiLCB3aGljaCBleHBhbmRzIHRvIGFuIElTTy04NjAxIC1jb21w
bGlhbnQKICAgICAgICAjIGRhdGVzdGFtcC4gSG93ZXZlciB3ZSBwcmVmZXIg
IiUlY2kiICh3aGljaCBleHBhbmRzIHRvIGFuICJJU08tODYwMQogICAgICAg
ICMgLWxpa2UiIHN0cmluZywgd2hpY2ggd2UgbXVzdCB0aGVuIGVkaXQgdG8g
bWFrZSBjb21wbGlhbnQpLCBiZWNhdXNlCiAgICAgICAgIyBpdCdzIGJlZW4g
YXJvdW5kIHNpbmNlIGdpdC0xLjUuMywgYW5kIGl0J3MgdG9vIGRpZmZpY3Vs
dCB0bwogICAgICAgICMgZGlzY292ZXIgd2hpY2ggdmVyc2lvbiB3ZSdyZSB1
c2luZywgb3IgdG8gd29yayBhcm91bmQgdXNpbmcgYW4KICAgICAgICAjIG9s
ZGVyIG9uZS4KICAgICAgICBkYXRlID0gZGF0ZS5zdHJpcCgpLnJlcGxhY2Uo
IiAiLCAiVCIsIDEpLnJlcGxhY2UoIiAiLCAiIiwgMSkKICAgIHJlZm5hbWVz
ID0ga2V5d29yZHNbInJlZm5hbWVzIl0uc3RyaXAoKQogICAgaWYgcmVmbmFt
ZXMuc3RhcnRzd2l0aCgiJEZvcm1hdCIpOgogICAgICAgIGlmIHZlcmJvc2U6
CiAgICAgICAgICAgIHByaW50KCJrZXl3b3JkcyBhcmUgdW5leHBhbmRlZCwg
bm90IHVzaW5nIikKICAgICAgICByYWlzZSBOb3RUaGlzTWV0aG9kKCJ1bmV4
cGFuZGVkIGtleXdvcmRzLCBub3QgYSBnaXQtYXJjaGl2ZSB0YXJiYWxsIikK
ICAgIHJlZnMgPSBzZXQoW3Iuc3RyaXAoKSBmb3IgciBpbiByZWZuYW1lcy5z
dHJpcCgiKCkiKS5zcGxpdCgiLCIpXSkKICAgICMgc3RhcnRpbmcgaW4gZ2l0
LTEuOC4zLCB0YWdzIGFyZSBsaXN0ZWQgYXMgInRhZzogZm9vLTEuMCIgaW5z
dGVhZCBvZgogICAgIyBqdXN0ICJmb28tMS4wIi4gSWYgd2Ugc2VlIGEgInRh
ZzogIiBwcmVmaXgsIHByZWZlciB0aG9zZS4KICAgIFRBRyA9ICJ0YWc6ICIK
ICAgIHRhZ3MgPSBzZXQoW3JbbGVuKFRBRyk6XSBmb3IgciBpbiByZWZzIGlm
IHIuc3RhcnRzd2l0aChUQUcpXSkKICAgIGlmIG5vdCB0YWdzOgogICAgICAg
ICMgRWl0aGVyIHdlJ3JlIHVzaW5nIGdpdCA8IDEuOC4zLCBvciB0aGVyZSBy
ZWFsbHkgYXJlIG5vIHRhZ3MuIFdlIHVzZQogICAgICAgICMgYSBoZXVyaXN0
aWM6IGFzc3VtZSBhbGwgdmVyc2lvbiB0YWdzIGhhdmUgYSBkaWdpdC4gVGhl
IG9sZCBnaXQgJSVkCiAgICAgICAgIyBleHBhbnNpb24gYmVoYXZlcyBsaWtl
IGdpdCBsb2cgLS1kZWNvcmF0ZT1zaG9ydCBhbmQgc3RyaXBzIG91dCB0aGUK
ICAgICAgICAjIHJlZnMvaGVhZHMvIGFuZCByZWZzL3RhZ3MvIHByZWZpeGVz
IHRoYXQgd291bGQgbGV0IHVzIGRpc3Rpbmd1aXNoCiAgICAgICAgIyBiZXR3
ZWVuIGJyYW5jaGVzIGFuZCB0YWdzLiBCeSBpZ25vcmluZyByZWZuYW1lcyB3
aXRob3V0IGRpZ2l0cywgd2UKICAgICAgICAjIGZpbHRlciBvdXQgbWFueSBj
b21tb24gYnJhbmNoIG5hbWVzIGxpa2UgInJlbGVhc2UiIGFuZAogICAgICAg
ICMgInN0YWJpbGl6YXRpb24iLCBhcyB3ZWxsIGFzICJIRUFEIiBhbmQgIm1h
c3RlciIuCiAgICAgICAgdGFncyA9IHNldChbciBmb3IgciBpbiByZWZzIGlm
IHJlLnNlYXJjaChyJ1xkJywgcildKQogICAgICAgIGlmIHZlcmJvc2U6CiAg
ICAgICAgICAgIHByaW50KCJkaXNjYXJkaW5nICclJXMnLCBubyBkaWdpdHMi
ICUlICIsIi5qb2luKHJlZnMgLSB0YWdzKSkKICAgIGlmIHZlcmJvc2U6CiAg
ICAgICAgcHJpbnQoImxpa2VseSB0YWdzOiAlJXMiICUlICIsIi5qb2luKHNv
cnRlZCh0YWdzKSkpCiAgICBmb3IgcmVmIGluIHNvcnRlZCh0YWdzKToKICAg
ICAgICAjIHNvcnRpbmcgd2lsbCBwcmVmZXIgZS5nLiAiMi4wIiBvdmVyICIy
LjByYzEiCiAgICAgICAgaWYgcmVmLnN0YXJ0c3dpdGgodGFnX3ByZWZpeCk6
CiAgICAgICAgICAgIHIgPSByZWZbbGVuKHRhZ19wcmVmaXgpOl0KICAgICAg
ICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgIHByaW50KCJwaWNr
aW5nICUlcyIgJSUgcikKICAgICAgICAgICAgcmV0dXJuIHsidmVyc2lvbiI6
IHIsCiAgICAgICAgICAgICAgICAgICAgImZ1bGwtcmV2aXNpb25pZCI6IGtl
eXdvcmRzWyJmdWxsIl0uc3RyaXAoKSwKICAgICAgICAgICAgICAgICAgICAi
ZGlydHkiOiBGYWxzZSwgImVycm9yIjogTm9uZSwKICAgICAgICAgICAgICAg
ICAgICAiZGF0ZSI6IGRhdGV9CiAgICAjIG5vIHN1aXRhYmxlIHRhZ3MsIHNv
IHZlcnNpb24gaXMgIjArdW5rbm93biIsIGJ1dCBmdWxsIGhleCBpcyBzdGls
bCB0aGVyZQogICAgaWYgdmVyYm9zZToKICAgICAgICBwcmludCgibm8gc3Vp
dGFibGUgdGFncywgdXNpbmcgdW5rbm93biArIGZ1bGwgcmV2aXNpb24gaWQi
KQogICAgcmV0dXJuIHsidmVyc2lvbiI6ICIwK3Vua25vd24iLAogICAgICAg
ICAgICAiZnVsbC1yZXZpc2lvbmlkIjoga2V5d29yZHNbImZ1bGwiXS5zdHJp
cCgpLAogICAgICAgICAgICAiZGlydHkiOiBGYWxzZSwgImVycm9yIjogIm5v
IHN1aXRhYmxlIHRhZ3MiLCAiZGF0ZSI6IE5vbmV9CgoKQHJlZ2lzdGVyX3Zj
c19oYW5kbGVyKCJnaXQiLCAicGllY2VzX2Zyb21fdmNzIikKZGVmIGdpdF9w
aWVjZXNfZnJvbV92Y3ModGFnX3ByZWZpeCwgcm9vdCwgdmVyYm9zZSwgcnVu
X2NvbW1hbmQ9cnVuX2NvbW1hbmQpOgogICAgIiIiR2V0IHZlcnNpb24gZnJv
bSAnZ2l0IGRlc2NyaWJlJyBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCgogICAgVGhpcyBvbmx5IGdldHMgY2FsbGVkIGlmIHRoZSBnaXQtYXJj
aGl2ZSAnc3Vic3QnIGtleXdvcmRzIHdlcmUgKm5vdCoKICAgIGV4cGFuZGVk
LCBhbmQgX3ZlcnNpb24ucHkgaGFzbid0IGFscmVhZHkgYmVlbiByZXdyaXR0
ZW4gd2l0aCBhIHNob3J0CiAgICB2ZXJzaW9uIHN0cmluZywgbWVhbmluZyB3
ZSdyZSBpbnNpZGUgYSBjaGVja2VkIG91dCBzb3VyY2UgdHJlZS4KICAgICIi
IgogICAgR0lUUyA9IFsiZ2l0Il0KICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAi
d2luMzIiOgogICAgICAgIEdJVFMgPSBbImdpdC5jbWQiLCAiZ2l0LmV4ZSJd
CgogICAgb3V0LCByYyA9IHJ1bl9jb21tYW5kKEdJVFMsIFsicmV2LXBhcnNl
IiwgIi0tZ2l0LWRpciJdLCBjd2Q9cm9vdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBoaWRlX3N0ZGVycj1UcnVlKQogICAgaWYgcmMgIT0gMDoKICAg
ICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICBwcmludCgiRGlyZWN0b3J5
ICUlcyBub3QgdW5kZXIgZ2l0IGNvbnRyb2wiICUlIHJvb3QpCiAgICAgICAg
cmFpc2UgTm90VGhpc01ldGhvZCgiJ2dpdCByZXYtcGFyc2UgLS1naXQtZGly
JyByZXR1cm5lZCBlcnJvciIpCgogICAgIyBpZiB0aGVyZSBpcyBhIHRhZyBt
YXRjaGluZyB0YWdfcHJlZml4LCB0aGlzIHlpZWxkcyBUQUctTlVNLWdIRVhb
LWRpcnR5XQogICAgIyBpZiB0aGVyZSBpc24ndCBvbmUsIHRoaXMgeWllbGRz
IEhFWFstZGlydHldIChubyBOVU0pCiAgICBkZXNjcmliZV9vdXQsIHJjID0g
cnVuX2NvbW1hbmQoR0lUUywgWyJkZXNjcmliZSIsICItLXRhZ3MiLCAiLS1k
aXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICItLWFsd2F5cyIsICItLWxvbmciLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiLS1tYXRjaCIsICIlJXMqIiAlJSB0
YWdfcHJlZml4XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjd2Q9cm9vdCkKICAgICMgLS1sb25nIHdhcyBhZGRlZCBpbiBnaXQtMS41
LjUKICAgIGlmIGRlc2NyaWJlX291dCBpcyBOb25lOgogICAgICAgIHJhaXNl
IE5vdFRoaXNNZXRob2QoIidnaXQgZGVzY3JpYmUnIGZhaWxlZCIpCiAgICBk
ZXNjcmliZV9vdXQgPSBkZXNjcmliZV9vdXQuc3RyaXAoKQogICAgZnVsbF9v
dXQsIHJjID0gcnVuX2NvbW1hbmQoR0lUUywgWyJyZXYtcGFyc2UiLCAiSEVB
RCJdLCBjd2Q9cm9vdCkKICAgIGlmIGZ1bGxfb3V0IGlzIE5vbmU6CiAgICAg
ICAgcmFpc2UgTm90VGhpc01ldGhvZCgiJ2dpdCByZXYtcGFyc2UnIGZhaWxl
ZCIpCiAgICBmdWxsX291dCA9IGZ1bGxfb3V0LnN0cmlwKCkKCiAgICBwaWVj
ZXMgPSB7fQogICAgcGllY2VzWyJsb25nIl0gPSBmdWxsX291dAogICAgcGll
Y2VzWyJzaG9ydCJdID0gZnVsbF9vdXRbOjddICAjIG1heWJlIGltcHJvdmVk
IGxhdGVyCiAgICBwaWVjZXNbImVycm9yIl0gPSBOb25lCgogICAgIyBwYXJz
ZSBkZXNjcmliZV9vdXQuIEl0IHdpbGwgYmUgbGlrZSBUQUctTlVNLWdIRVhb
LWRpcnR5XSBvciBIRVhbLWRpcnR5XQogICAgIyBUQUcgbWlnaHQgaGF2ZSBo
eXBoZW5zLgogICAgZ2l0X2Rlc2NyaWJlID0gZGVzY3JpYmVfb3V0CgogICAg
IyBsb29rIGZvciAtZGlydHkgc3VmZml4CiAgICBkaXJ0eSA9IGdpdF9kZXNj
cmliZS5lbmRzd2l0aCgiLWRpcnR5IikKICAgIHBpZWNlc1siZGlydHkiXSA9
IGRpcnR5CiAgICBpZiBkaXJ0eToKICAgICAgICBnaXRfZGVzY3JpYmUgPSBn
aXRfZGVzY3JpYmVbOmdpdF9kZXNjcmliZS5yaW5kZXgoIi1kaXJ0eSIpXQoK
ICAgICMgbm93IHdlIGhhdmUgVEFHLU5VTS1nSEVYIG9yIEhFWAoKICAgIGlm
ICItIiBpbiBnaXRfZGVzY3JpYmU6CiAgICAgICAgIyBUQUctTlVNLWdIRVgK
ICAgICAgICBtbyA9IHJlLnNlYXJjaChyJ14oLispLShcZCspLWcoWzAtOWEt
Zl0rKSQnLCBnaXRfZGVzY3JpYmUpCiAgICAgICAgaWYgbm90IG1vOgogICAg
ICAgICAgICAjIHVucGFyc2VhYmxlLiBNYXliZSBnaXQtZGVzY3JpYmUgaXMg
bWlzYmVoYXZpbmc/CiAgICAgICAgICAgIHBpZWNlc1siZXJyb3IiXSA9ICgi
dW5hYmxlIHRvIHBhcnNlIGdpdC1kZXNjcmliZSBvdXRwdXQ6ICclJXMnIgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSUgZGVzY3JpYmVfb3V0
KQogICAgICAgICAgICByZXR1cm4gcGllY2VzCgogICAgICAgICMgdGFnCiAg
ICAgICAgZnVsbF90YWcgPSBtby5ncm91cCgxKQogICAgICAgIGlmIG5vdCBm
dWxsX3RhZy5zdGFydHN3aXRoKHRhZ19wcmVmaXgpOgogICAgICAgICAgICBp
ZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgZm10ID0gInRhZyAnJSVzJyBk
b2Vzbid0IHN0YXJ0IHdpdGggcHJlZml4ICclJXMnIgogICAgICAgICAgICAg
ICAgcHJpbnQoZm10ICUlIChmdWxsX3RhZywgdGFnX3ByZWZpeCkpCiAgICAg
ICAgICAgIHBpZWNlc1siZXJyb3IiXSA9ICgidGFnICclJXMnIGRvZXNuJ3Qg
c3RhcnQgd2l0aCBwcmVmaXggJyUlcyciCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAlJSAoZnVsbF90YWcsIHRhZ19wcmVmaXgpKQogICAgICAg
ICAgICByZXR1cm4gcGllY2VzCiAgICAgICAgcGllY2VzWyJjbG9zZXN0LXRh
ZyJdID0gZnVsbF90YWdbbGVuKHRhZ19wcmVmaXgpOl0KCiAgICAgICAgIyBk
aXN0YW5jZTogbnVtYmVyIG9mIGNvbW1pdHMgc2luY2UgdGFnCiAgICAgICAg
cGllY2VzWyJkaXN0YW5jZSJdID0gaW50KG1vLmdyb3VwKDIpKQoKICAgICAg
ICAjIGNvbW1pdDogc2hvcnQgaGV4IHJldmlzaW9uIElECiAgICAgICAgcGll
Y2VzWyJzaG9ydCJdID0gbW8uZ3JvdXAoMykKCiAgICBlbHNlOgogICAgICAg
ICMgSEVYOiBubyB0YWdzCiAgICAgICAgcGllY2VzWyJjbG9zZXN0LXRhZyJd
ID0gTm9uZQogICAgICAgIGNvdW50X291dCwgcmMgPSBydW5fY29tbWFuZChH
SVRTLCBbInJldi1saXN0IiwgIkhFQUQiLCAiLS1jb3VudCJdLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9cm9vdCkKICAgICAg
ICBwaWVjZXNbImRpc3RhbmNlIl0gPSBpbnQoY291bnRfb3V0KSAgIyB0b3Rh
bCBudW1iZXIgb2YgY29tbWl0cwoKICAgICMgY29tbWl0IGRhdGU6IHNlZSBJ
U08tODYwMSBjb21tZW50IGluIGdpdF92ZXJzaW9uc19mcm9tX2tleXdvcmRz
KCkKICAgIGRhdGUgPSBydW5fY29tbWFuZChHSVRTLCBbInNob3ciLCAiLXMi
LCAiLS1mb3JtYXQ9JSVjaSIsICJIRUFEIl0sCiAgICAgICAgICAgICAgICAg
ICAgICAgY3dkPXJvb3QpWzBdLnN0cmlwKCkKICAgIHBpZWNlc1siZGF0ZSJd
ID0gZGF0ZS5zdHJpcCgpLnJlcGxhY2UoIiAiLCAiVCIsIDEpLnJlcGxhY2Uo
IiAiLCAiIiwgMSkKCiAgICByZXR1cm4gcGllY2VzCgoKZGVmIHBsdXNfb3Jf
ZG90KHBpZWNlcyk6CiAgICAiIiJSZXR1cm4gYSArIGlmIHdlIGRvbid0IGFs
cmVhZHkgaGF2ZSBvbmUsIGVsc2UgcmV0dXJuIGEgLiIiIgogICAgaWYgIisi
IGluIHBpZWNlcy5nZXQoImNsb3Nlc3QtdGFnIiwgIiIpOgogICAgICAgIHJl
dHVybiAiLiIKICAgIHJldHVybiAiKyIKCgpkZWYgcmVuZGVyX3BlcDQ0MChw
aWVjZXMpOgogICAgIiIiQnVpbGQgdXAgdmVyc2lvbiBzdHJpbmcsIHdpdGgg
cG9zdC1yZWxlYXNlICJsb2NhbCB2ZXJzaW9uIGlkZW50aWZpZXIiLgoKICAg
IE91ciBnb2FsOiBUQUdbK0RJU1RBTkNFLmdIRVhbLmRpcnR5XV0gLiBOb3Rl
IHRoYXQgaWYgeW91CiAgICBnZXQgYSB0YWdnZWQgYnVpbGQgYW5kIHRoZW4g
ZGlydHkgaXQsIHlvdSdsbCBnZXQgVEFHKzAuZ0hFWC5kaXJ0eQoKICAgIEV4
Y2VwdGlvbnM6CiAgICAxOiBubyB0YWdzLiBnaXRfZGVzY3JpYmUgd2FzIGp1
c3QgSEVYLiAwK3VudGFnZ2VkLkRJU1RBTkNFLmdIRVhbLmRpcnR5XQogICAg
IiIiCiAgICBpZiBwaWVjZXNbImNsb3Nlc3QtdGFnIl06CiAgICAgICAgcmVu
ZGVyZWQgPSBwaWVjZXNbImNsb3Nlc3QtdGFnIl0KICAgICAgICBpZiBwaWVj
ZXNbImRpc3RhbmNlIl0gb3IgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAg
ICByZW5kZXJlZCArPSBwbHVzX29yX2RvdChwaWVjZXMpCiAgICAgICAgICAg
IHJlbmRlcmVkICs9ICIlJWQuZyUlcyIgJSUgKHBpZWNlc1siZGlzdGFuY2Ui
XSwgcGllY2VzWyJzaG9ydCJdKQogICAgICAgICAgICBpZiBwaWVjZXNbImRp
cnR5Il06CiAgICAgICAgICAgICAgICByZW5kZXJlZCArPSAiLmRpcnR5Igog
ICAgZWxzZToKICAgICAgICAjIGV4Y2VwdGlvbiAjMQogICAgICAgIHJlbmRl
cmVkID0gIjArdW50YWdnZWQuJSVkLmclJXMiICUlIChwaWVjZXNbImRpc3Rh
bmNlIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBpZWNlc1sic2hvcnQiXSkKICAgICAgICBpZiBwaWVjZXNbImRpcnR5
Il06CiAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGlydHkiCiAgICByZXR1
cm4gcmVuZGVyZWQKCgpkZWYgcmVuZGVyX3BlcDQ0MF9wcmUocGllY2VzKToK
ICAgICIiIlRBR1sucG9zdC5kZXZESVNUQU5DRV0gLS0gTm8gLWRpcnR5LgoK
ICAgIEV4Y2VwdGlvbnM6CiAgICAxOiBubyB0YWdzLiAwLnBvc3QuZGV2RElT
VEFOQ0UKICAgICIiIgogICAgaWYgcGllY2VzWyJjbG9zZXN0LXRhZyJdOgog
ICAgICAgIHJlbmRlcmVkID0gcGllY2VzWyJjbG9zZXN0LXRhZyJdCiAgICAg
ICAgaWYgcGllY2VzWyJkaXN0YW5jZSJdOgogICAgICAgICAgICByZW5kZXJl
ZCArPSAiLnBvc3QuZGV2JSVkIiAlJSBwaWVjZXNbImRpc3RhbmNlIl0KICAg
IGVsc2U6CiAgICAgICAgIyBleGNlcHRpb24gIzEKICAgICAgICByZW5kZXJl
ZCA9ICIwLnBvc3QuZGV2JSVkIiAlJSBwaWVjZXNbImRpc3RhbmNlIl0KICAg
IHJldHVybiByZW5kZXJlZAoKCmRlZiByZW5kZXJfcGVwNDQwX3Bvc3QocGll
Y2VzKToKICAgICIiIlRBR1sucG9zdERJU1RBTkNFWy5kZXYwXStnSEVYXSAu
CgogICAgVGhlICIuZGV2MCIgbWVhbnMgZGlydHkuIE5vdGUgdGhhdCAuZGV2
MCBzb3J0cyBiYWNrd2FyZHMKICAgIChhIGRpcnR5IHRyZWUgd2lsbCBhcHBl
YXIgIm9sZGVyIiB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIGNsZWFuIG9uZSks
CiAgICBidXQgeW91IHNob3VsZG4ndCBiZSByZWxlYXNpbmcgc29mdHdhcmUg
d2l0aCAtZGlydHkgYW55d2F5cy4KCiAgICBFeGNlcHRpb25zOgogICAgMTog
bm8gdGFncy4gMC5wb3N0RElTVEFOQ0VbLmRldjBdCiAgICAiIiIKICAgIGlm
IHBpZWNlc1siY2xvc2VzdC10YWciXToKICAgICAgICByZW5kZXJlZCA9IHBp
ZWNlc1siY2xvc2VzdC10YWciXQogICAgICAgIGlmIHBpZWNlc1siZGlzdGFu
Y2UiXSBvciBwaWVjZXNbImRpcnR5Il06CiAgICAgICAgICAgIHJlbmRlcmVk
ICs9ICIucG9zdCUlZCIgJSUgcGllY2VzWyJkaXN0YW5jZSJdCiAgICAgICAg
ICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAgICAgICAgICAgICAgIHJlbmRl
cmVkICs9ICIuZGV2MCIKICAgICAgICAgICAgcmVuZGVyZWQgKz0gcGx1c19v
cl9kb3QocGllY2VzKQogICAgICAgICAgICByZW5kZXJlZCArPSAiZyUlcyIg
JSUgcGllY2VzWyJzaG9ydCJdCiAgICBlbHNlOgogICAgICAgICMgZXhjZXB0
aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSAiMC5wb3N0JSVkIiAlJSBwaWVj
ZXNbImRpc3RhbmNlIl0KICAgICAgICBpZiBwaWVjZXNbImRpcnR5Il06CiAg
ICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGV2MCIKICAgICAgICByZW5kZXJl
ZCArPSAiK2clJXMiICUlIHBpZWNlc1sic2hvcnQiXQogICAgcmV0dXJuIHJl
bmRlcmVkCgoKZGVmIHJlbmRlcl9wZXA0NDBfb2xkKHBpZWNlcyk6CiAgICAi
IiJUQUdbLnBvc3RESVNUQU5DRVsuZGV2MF1dIC4KCiAgICBUaGUgIi5kZXYw
IiBtZWFucyBkaXJ0eS4KCiAgICBFZXhjZXB0aW9uczoKICAgIDE6IG5vIHRh
Z3MuIDAucG9zdERJU1RBTkNFWy5kZXYwXQogICAgIiIiCiAgICBpZiBwaWVj
ZXNbImNsb3Nlc3QtdGFnIl06CiAgICAgICAgcmVuZGVyZWQgPSBwaWVjZXNb
ImNsb3Nlc3QtdGFnIl0KICAgICAgICBpZiBwaWVjZXNbImRpc3RhbmNlIl0g
b3IgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICByZW5kZXJlZCArPSAi
LnBvc3QlJWQiICUlIHBpZWNlc1siZGlzdGFuY2UiXQogICAgICAgICAgICBp
ZiBwaWVjZXNbImRpcnR5Il06CiAgICAgICAgICAgICAgICByZW5kZXJlZCAr
PSAiLmRldjAiCiAgICBlbHNlOgogICAgICAgICMgZXhjZXB0aW9uICMxCiAg
ICAgICAgcmVuZGVyZWQgPSAiMC5wb3N0JSVkIiAlJSBwaWVjZXNbImRpc3Rh
bmNlIl0KICAgICAgICBpZiBwaWVjZXNbImRpcnR5Il06CiAgICAgICAgICAg
IHJlbmRlcmVkICs9ICIuZGV2MCIKICAgIHJldHVybiByZW5kZXJlZAoKCmRl
ZiByZW5kZXJfZ2l0X2Rlc2NyaWJlKHBpZWNlcyk6CiAgICAiIiJUQUdbLURJ
U1RBTkNFLWdIRVhdWy1kaXJ0eV0uCgogICAgTGlrZSAnZ2l0IGRlc2NyaWJl
IC0tdGFncyAtLWRpcnR5IC0tYWx3YXlzJy4KCiAgICBFeGNlcHRpb25zOgog
ICAgMTogbm8gdGFncy4gSEVYWy1kaXJ0eV0gIChub3RlOiBubyAnZycgcHJl
Zml4KQogICAgIiIiCiAgICBpZiBwaWVjZXNbImNsb3Nlc3QtdGFnIl06CiAg
ICAgICAgcmVuZGVyZWQgPSBwaWVjZXNbImNsb3Nlc3QtdGFnIl0KICAgICAg
ICBpZiBwaWVjZXNbImRpc3RhbmNlIl06CiAgICAgICAgICAgIHJlbmRlcmVk
ICs9ICItJSVkLWclJXMiICUlIChwaWVjZXNbImRpc3RhbmNlIl0sIHBpZWNl
c1sic2hvcnQiXSkKICAgIGVsc2U6CiAgICAgICAgIyBleGNlcHRpb24gIzEK
ICAgICAgICByZW5kZXJlZCA9IHBpZWNlc1sic2hvcnQiXQogICAgaWYgcGll
Y2VzWyJkaXJ0eSJdOgogICAgICAgIHJlbmRlcmVkICs9ICItZGlydHkiCiAg
ICByZXR1cm4gcmVuZGVyZWQKCgpkZWYgcmVuZGVyX2dpdF9kZXNjcmliZV9s
b25nKHBpZWNlcyk6CiAgICAiIiJUQUctRElTVEFOQ0UtZ0hFWFstZGlydHld
LgoKICAgIExpa2UgJ2dpdCBkZXNjcmliZSAtLXRhZ3MgLS1kaXJ0eSAtLWFs
d2F5cyAtbG9uZycuCiAgICBUaGUgZGlzdGFuY2UvaGFzaCBpcyB1bmNvbmRp
dGlvbmFsLgoKICAgIEV4Y2VwdGlvbnM6CiAgICAxOiBubyB0YWdzLiBIRVhb
LWRpcnR5XSAgKG5vdGU6IG5vICdnJyBwcmVmaXgpCiAgICAiIiIKICAgIGlm
IHBpZWNlc1siY2xvc2VzdC10YWciXToKICAgICAgICByZW5kZXJlZCA9IHBp
ZWNlc1siY2xvc2VzdC10YWciXQogICAgICAgIHJlbmRlcmVkICs9ICItJSVk
LWclJXMiICUlIChwaWVjZXNbImRpc3RhbmNlIl0sIHBpZWNlc1sic2hvcnQi
XSkKICAgIGVsc2U6CiAgICAgICAgIyBleGNlcHRpb24gIzEKICAgICAgICBy
ZW5kZXJlZCA9IHBpZWNlc1sic2hvcnQiXQogICAgaWYgcGllY2VzWyJkaXJ0
eSJdOgogICAgICAgIHJlbmRlcmVkICs9ICItZGlydHkiCiAgICByZXR1cm4g
cmVuZGVyZWQKCgpkZWYgcmVuZGVyKHBpZWNlcywgc3R5bGUpOgogICAgIiIi
UmVuZGVyIHRoZSBnaXZlbiB2ZXJzaW9uIHBpZWNlcyBpbnRvIHRoZSByZXF1
ZXN0ZWQgc3R5bGUuIiIiCiAgICBpZiBwaWVjZXNbImVycm9yIl06CiAgICAg
ICAgcmV0dXJuIHsidmVyc2lvbiI6ICJ1bmtub3duIiwKICAgICAgICAgICAg
ICAgICJmdWxsLXJldmlzaW9uaWQiOiBwaWVjZXMuZ2V0KCJsb25nIiksCiAg
ICAgICAgICAgICAgICAiZGlydHkiOiBOb25lLAogICAgICAgICAgICAgICAg
ImVycm9yIjogcGllY2VzWyJlcnJvciJdLAogICAgICAgICAgICAgICAgImRh
dGUiOiBOb25lfQoKICAgIGlmIG5vdCBzdHlsZSBvciBzdHlsZSA9PSAiZGVm
YXVsdCI6CiAgICAgICAgc3R5bGUgPSAicGVwNDQwIiAgIyB0aGUgZGVmYXVs
dAoKICAgIGlmIHN0eWxlID09ICJwZXA0NDAiOgogICAgICAgIHJlbmRlcmVk
ID0gcmVuZGVyX3BlcDQ0MChwaWVjZXMpCiAgICBlbGlmIHN0eWxlID09ICJw
ZXA0NDAtcHJlIjoKICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9wZXA0NDBf
cHJlKHBpZWNlcykKICAgIGVsaWYgc3R5bGUgPT0gInBlcDQ0MC1wb3N0IjoK
ICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9wZXA0NDBfcG9zdChwaWVjZXMp
CiAgICBlbGlmIHN0eWxlID09ICJwZXA0NDAtb2xkIjoKICAgICAgICByZW5k
ZXJlZCA9IHJlbmRlcl9wZXA0NDBfb2xkKHBpZWNlcykKICAgIGVsaWYgc3R5
bGUgPT0gImdpdC1kZXNjcmliZSI6CiAgICAgICAgcmVuZGVyZWQgPSByZW5k
ZXJfZ2l0X2Rlc2NyaWJlKHBpZWNlcykKICAgIGVsaWYgc3R5bGUgPT0gImdp
dC1kZXNjcmliZS1sb25nIjoKICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9n
aXRfZGVzY3JpYmVfbG9uZyhwaWVjZXMpCiAgICBlbHNlOgogICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoInVua25vd24gc3R5bGUgJyUlcyciICUlIHN0eWxl
KQoKICAgIHJldHVybiB7InZlcnNpb24iOiByZW5kZXJlZCwgImZ1bGwtcmV2
aXNpb25pZCI6IHBpZWNlc1sibG9uZyJdLAogICAgICAgICAgICAiZGlydHki
OiBwaWVjZXNbImRpcnR5Il0sICJlcnJvciI6IE5vbmUsCiAgICAgICAgICAg
ICJkYXRlIjogcGllY2VzLmdldCgiZGF0ZSIpfQoKCmRlZiBnZXRfdmVyc2lv
bnMoKToKICAgICIiIkdldCB2ZXJzaW9uIGluZm9ybWF0aW9uIG9yIHJldHVy
biBkZWZhdWx0IGlmIHVuYWJsZSB0byBkbyBzby4iIiIKICAgICMgSSBhbSBp
biBfdmVyc2lvbi5weSwgd2hpY2ggbGl2ZXMgYXQgUk9PVC9WRVJTSU9ORklM
RV9TT1VSQ0UuIElmIHdlIGhhdmUKICAgICMgX19maWxlX18sIHdlIGNhbiB3
b3JrIGJhY2t3YXJkcyBmcm9tIHRoZXJlIHRvIHRoZSByb290LiBTb21lCiAg
ICAjIHB5MmV4ZS9iYmZyZWV6ZS9ub24tQ1B5dGhvbiBpbXBsZW1lbnRhdGlv
bnMgZG9uJ3QgZG8gX19maWxlX18sIGluIHdoaWNoCiAgICAjIGNhc2Ugd2Ug
Y2FuIG9ubHkgdXNlIGV4cGFuZGVkIGtleXdvcmRzLgoKICAgIGNmZyA9IGdl
dF9jb25maWcoKQogICAgdmVyYm9zZSA9IGNmZy52ZXJib3NlCgogICAgdHJ5
OgogICAgICAgIHJldHVybiBnaXRfdmVyc2lvbnNfZnJvbV9rZXl3b3Jkcyhn
ZXRfa2V5d29yZHMoKSwgY2ZnLnRhZ19wcmVmaXgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2UpCiAgICBleGNl
cHQgTm90VGhpc01ldGhvZDoKICAgICAgICBwYXNzCgogICAgdHJ5OgogICAg
ICAgIHJvb3QgPSBvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKQogICAgICAg
ICMgdmVyc2lvbmZpbGVfc291cmNlIGlzIHRoZSByZWxhdGl2ZSBwYXRoIGZy
b20gdGhlIHRvcCBvZiB0aGUgc291cmNlCiAgICAgICAgIyB0cmVlICh3aGVy
ZSB0aGUgLmdpdCBkaXJlY3RvcnkgbWlnaHQgbGl2ZSkgdG8gdGhpcyBmaWxl
LiBJbnZlcnQKICAgICAgICAjIHRoaXMgdG8gZmluZCB0aGUgcm9vdCBmcm9t
IF9fZmlsZV9fLgogICAgICAgIGZvciBpIGluIGNmZy52ZXJzaW9uZmlsZV9z
b3VyY2Uuc3BsaXQoJy8nKToKICAgICAgICAgICAgcm9vdCA9IG9zLnBhdGgu
ZGlybmFtZShyb290KQogICAgZXhjZXB0IE5hbWVFcnJvcjoKICAgICAgICBy
ZXR1cm4geyJ2ZXJzaW9uIjogIjArdW5rbm93biIsICJmdWxsLXJldmlzaW9u
aWQiOiBOb25lLAogICAgICAgICAgICAgICAgImRpcnR5IjogTm9uZSwKICAg
ICAgICAgICAgICAgICJlcnJvciI6ICJ1bmFibGUgdG8gZmluZCByb290IG9m
IHNvdXJjZSB0cmVlIiwKICAgICAgICAgICAgICAgICJkYXRlIjogTm9uZX0K
CiAgICB0cnk6CiAgICAgICAgcGllY2VzID0gZ2l0X3BpZWNlc19mcm9tX3Zj
cyhjZmcudGFnX3ByZWZpeCwgcm9vdCwgdmVyYm9zZSkKICAgICAgICByZXR1
cm4gcmVuZGVyKHBpZWNlcywgY2ZnLnN0eWxlKQogICAgZXhjZXB0IE5vdFRo
aXNNZXRob2Q6CiAgICAgICAgcGFzcwoKICAgIHRyeToKICAgICAgICBpZiBj
ZmcucGFyZW50ZGlyX3ByZWZpeDoKICAgICAgICAgICAgcmV0dXJuIHZlcnNp
b25zX2Zyb21fcGFyZW50ZGlyKGNmZy5wYXJlbnRkaXJfcHJlZml4LCByb290
LCB2ZXJib3NlKQogICAgZXhjZXB0IE5vdFRoaXNNZXRob2Q6CiAgICAgICAg
cGFzcwoKICAgIHJldHVybiB7InZlcnNpb24iOiAiMCt1bmtub3duIiwgImZ1
bGwtcmV2aXNpb25pZCI6IE5vbmUsCiAgICAgICAgICAgICJkaXJ0eSI6IE5v
bmUsCiAgICAgICAgICAgICJlcnJvciI6ICJ1bmFibGUgdG8gY29tcHV0ZSB2
ZXJzaW9uIiwgImRhdGUiOiBOb25lfQonJycKCgpAcmVnaXN0ZXJfdmNzX2hh
bmRsZXIoImdpdCIsICJnZXRfa2V5d29yZHMiKQpkZWYgZ2l0X2dldF9rZXl3
b3Jkcyh2ZXJzaW9uZmlsZV9hYnMpOgogICAgIiIiRXh0cmFjdCB2ZXJzaW9u
IGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIGZpbGUuIiIiCiAgICAjIHRo
ZSBjb2RlIGVtYmVkZGVkIGluIF92ZXJzaW9uLnB5IGNhbiBqdXN0IGZldGNo
IHRoZSB2YWx1ZSBvZiB0aGVzZQogICAgIyBrZXl3b3Jkcy4gV2hlbiB1c2Vk
IGZyb20gc2V0dXAucHksIHdlIGRvbid0IHdhbnQgdG8gaW1wb3J0IF92ZXJz
aW9uLnB5LAogICAgIyBzbyB3ZSBkbyBpdCB3aXRoIGEgcmVnZXhwIGluc3Rl
YWQuIFRoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWQgZnJvbQogICAgIyBfdmVy
c2lvbi5weS4KICAgIGtleXdvcmRzID0ge30KICAgIHRyeToKICAgICAgICBm
ID0gb3Blbih2ZXJzaW9uZmlsZV9hYnMsICJyIikKICAgICAgICBmb3IgbGlu
ZSBpbiBmLnJlYWRsaW5lcygpOgogICAgICAgICAgICBpZiBsaW5lLnN0cmlw
KCkuc3RhcnRzd2l0aCgiZ2l0X3JlZm5hbWVzID0iKToKICAgICAgICAgICAg
ICAgIG1vID0gcmUuc2VhcmNoKHInPVxzKiIoLiopIicsIGxpbmUpCiAgICAg
ICAgICAgICAgICBpZiBtbzoKICAgICAgICAgICAgICAgICAgICBrZXl3b3Jk
c1sicmVmbmFtZXMiXSA9IG1vLmdyb3VwKDEpCiAgICAgICAgICAgIGlmIGxp
bmUuc3RyaXAoKS5zdGFydHN3aXRoKCJnaXRfZnVsbCA9Iik6CiAgICAgICAg
ICAgICAgICBtbyA9IHJlLnNlYXJjaChyJz1ccyoiKC4qKSInLCBsaW5lKQog
ICAgICAgICAgICAgICAgaWYgbW86CiAgICAgICAgICAgICAgICAgICAga2V5
d29yZHNbImZ1bGwiXSA9IG1vLmdyb3VwKDEpCiAgICAgICAgICAgIGlmIGxp
bmUuc3RyaXAoKS5zdGFydHN3aXRoKCJnaXRfZGF0ZSA9Iik6CiAgICAgICAg
ICAgICAgICBtbyA9IHJlLnNlYXJjaChyJz1ccyoiKC4qKSInLCBsaW5lKQog
ICAgICAgICAgICAgICAgaWYgbW86CiAgICAgICAgICAgICAgICAgICAga2V5
d29yZHNbImRhdGUiXSA9IG1vLmdyb3VwKDEpCiAgICAgICAgZi5jbG9zZSgp
CiAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKICAgICAgICBwYXNzCiAg
ICByZXR1cm4ga2V5d29yZHMKCgpAcmVnaXN0ZXJfdmNzX2hhbmRsZXIoImdp
dCIsICJrZXl3b3JkcyIpCmRlZiBnaXRfdmVyc2lvbnNfZnJvbV9rZXl3b3Jk
cyhrZXl3b3JkcywgdGFnX3ByZWZpeCwgdmVyYm9zZSk6CiAgICAiIiJHZXQg
dmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIGdpdCBrZXl3b3Jkcy4iIiIKICAg
IGlmIG5vdCBrZXl3b3JkczoKICAgICAgICByYWlzZSBOb3RUaGlzTWV0aG9k
KCJubyBrZXl3b3JkcyBhdCBhbGwsIHdlaXJkIikKICAgIGRhdGUgPSBrZXl3
b3Jkcy5nZXQoImRhdGUiKQogICAgaWYgZGF0ZSBpcyBub3QgTm9uZToKICAg
ICAgICAjIGdpdC0yLjIuMCBhZGRlZCAiJWNJIiwgd2hpY2ggZXhwYW5kcyB0
byBhbiBJU08tODYwMSAtY29tcGxpYW50CiAgICAgICAgIyBkYXRlc3RhbXAu
IEhvd2V2ZXIgd2UgcHJlZmVyICIlY2kiICh3aGljaCBleHBhbmRzIHRvIGFu
ICJJU08tODYwMQogICAgICAgICMgLWxpa2UiIHN0cmluZywgd2hpY2ggd2Ug
bXVzdCB0aGVuIGVkaXQgdG8gbWFrZSBjb21wbGlhbnQpLCBiZWNhdXNlCiAg
ICAgICAgIyBpdCdzIGJlZW4gYXJvdW5kIHNpbmNlIGdpdC0xLjUuMywgYW5k
IGl0J3MgdG9vIGRpZmZpY3VsdCB0bwogICAgICAgICMgZGlzY292ZXIgd2hp
Y2ggdmVyc2lvbiB3ZSdyZSB1c2luZywgb3IgdG8gd29yayBhcm91bmQgdXNp
bmcgYW4KICAgICAgICAjIG9sZGVyIG9uZS4KICAgICAgICBkYXRlID0gZGF0
ZS5zdHJpcCgpLnJlcGxhY2UoIiAiLCAiVCIsIDEpLnJlcGxhY2UoIiAiLCAi
IiwgMSkKICAgIHJlZm5hbWVzID0ga2V5d29yZHNbInJlZm5hbWVzIl0uc3Ry
aXAoKQogICAgaWYgcmVmbmFtZXMuc3RhcnRzd2l0aCgiJEZvcm1hdCIpOgog
ICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJrZXl3b3Jk
cyBhcmUgdW5leHBhbmRlZCwgbm90IHVzaW5nIikKICAgICAgICByYWlzZSBO
b3RUaGlzTWV0aG9kKCJ1bmV4cGFuZGVkIGtleXdvcmRzLCBub3QgYSBnaXQt
YXJjaGl2ZSB0YXJiYWxsIikKICAgIHJlZnMgPSBzZXQoW3Iuc3RyaXAoKSBm
b3IgciBpbiByZWZuYW1lcy5zdHJpcCgiKCkiKS5zcGxpdCgiLCIpXSkKICAg
ICMgc3RhcnRpbmcgaW4gZ2l0LTEuOC4zLCB0YWdzIGFyZSBsaXN0ZWQgYXMg
InRhZzogZm9vLTEuMCIgaW5zdGVhZCBvZgogICAgIyBqdXN0ICJmb28tMS4w
Ii4gSWYgd2Ugc2VlIGEgInRhZzogIiBwcmVmaXgsIHByZWZlciB0aG9zZS4K
ICAgIFRBRyA9ICJ0YWc6ICIKICAgIHRhZ3MgPSBzZXQoW3JbbGVuKFRBRyk6
XSBmb3IgciBpbiByZWZzIGlmIHIuc3RhcnRzd2l0aChUQUcpXSkKICAgIGlm
IG5vdCB0YWdzOgogICAgICAgICMgRWl0aGVyIHdlJ3JlIHVzaW5nIGdpdCA8
IDEuOC4zLCBvciB0aGVyZSByZWFsbHkgYXJlIG5vIHRhZ3MuIFdlIHVzZQog
ICAgICAgICMgYSBoZXVyaXN0aWM6IGFzc3VtZSBhbGwgdmVyc2lvbiB0YWdz
IGhhdmUgYSBkaWdpdC4gVGhlIG9sZCBnaXQgJWQKICAgICAgICAjIGV4cGFu
c2lvbiBiZWhhdmVzIGxpa2UgZ2l0IGxvZyAtLWRlY29yYXRlPXNob3J0IGFu
ZCBzdHJpcHMgb3V0IHRoZQogICAgICAgICMgcmVmcy9oZWFkcy8gYW5kIHJl
ZnMvdGFncy8gcHJlZml4ZXMgdGhhdCB3b3VsZCBsZXQgdXMgZGlzdGluZ3Vp
c2gKICAgICAgICAjIGJldHdlZW4gYnJhbmNoZXMgYW5kIHRhZ3MuIEJ5IGln
bm9yaW5nIHJlZm5hbWVzIHdpdGhvdXQgZGlnaXRzLCB3ZQogICAgICAgICMg
ZmlsdGVyIG91dCBtYW55IGNvbW1vbiBicmFuY2ggbmFtZXMgbGlrZSAicmVs
ZWFzZSIgYW5kCiAgICAgICAgIyAic3RhYmlsaXphdGlvbiIsIGFzIHdlbGwg
YXMgIkhFQUQiIGFuZCAibWFzdGVyIi4KICAgICAgICB0YWdzID0gc2V0KFty
IGZvciByIGluIHJlZnMgaWYgcmUuc2VhcmNoKHInXGQnLCByKV0pCiAgICAg
ICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQoImRpc2NhcmRpbmcg
JyVzJywgbm8gZGlnaXRzIiAlICIsIi5qb2luKHJlZnMgLSB0YWdzKSkKICAg
IGlmIHZlcmJvc2U6CiAgICAgICAgcHJpbnQoImxpa2VseSB0YWdzOiAlcyIg
JSAiLCIuam9pbihzb3J0ZWQodGFncykpKQogICAgZm9yIHJlZiBpbiBzb3J0
ZWQodGFncyk6CiAgICAgICAgIyBzb3J0aW5nIHdpbGwgcHJlZmVyIGUuZy4g
IjIuMCIgb3ZlciAiMi4wcmMxIgogICAgICAgIGlmIHJlZi5zdGFydHN3aXRo
KHRhZ19wcmVmaXgpOgogICAgICAgICAgICByID0gcmVmW2xlbih0YWdfcHJl
Zml4KTpdCiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAg
ICBwcmludCgicGlja2luZyAlcyIgJSByKQogICAgICAgICAgICByZXR1cm4g
eyJ2ZXJzaW9uIjogciwKICAgICAgICAgICAgICAgICAgICAiZnVsbC1yZXZp
c2lvbmlkIjoga2V5d29yZHNbImZ1bGwiXS5zdHJpcCgpLAogICAgICAgICAg
ICAgICAgICAgICJkaXJ0eSI6IEZhbHNlLCAiZXJyb3IiOiBOb25lLAogICAg
ICAgICAgICAgICAgICAgICJkYXRlIjogZGF0ZX0KICAgICMgbm8gc3VpdGFi
bGUgdGFncywgc28gdmVyc2lvbiBpcyAiMCt1bmtub3duIiwgYnV0IGZ1bGwg
aGV4IGlzIHN0aWxsIHRoZXJlCiAgICBpZiB2ZXJib3NlOgogICAgICAgIHBy
aW50KCJubyBzdWl0YWJsZSB0YWdzLCB1c2luZyB1bmtub3duICsgZnVsbCBy
ZXZpc2lvbiBpZCIpCiAgICByZXR1cm4geyJ2ZXJzaW9uIjogIjArdW5rbm93
biIsCiAgICAgICAgICAgICJmdWxsLXJldmlzaW9uaWQiOiBrZXl3b3Jkc1si
ZnVsbCJdLnN0cmlwKCksCiAgICAgICAgICAgICJkaXJ0eSI6IEZhbHNlLCAi
ZXJyb3IiOiAibm8gc3VpdGFibGUgdGFncyIsICJkYXRlIjogTm9uZX0KCgpA
cmVnaXN0ZXJfdmNzX2hhbmRsZXIoImdpdCIsICJwaWVjZXNfZnJvbV92Y3Mi
KQpkZWYgZ2l0X3BpZWNlc19mcm9tX3Zjcyh0YWdfcHJlZml4LCByb290LCB2
ZXJib3NlLCBydW5fY29tbWFuZD1ydW5fY29tbWFuZCk6CiAgICAiIiJHZXQg
dmVyc2lvbiBmcm9tICdnaXQgZGVzY3JpYmUnIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KCiAgICBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgaWYg
dGhlIGdpdC1hcmNoaXZlICdzdWJzdCcga2V5d29yZHMgd2VyZSAqbm90Kgog
ICAgZXhwYW5kZWQsIGFuZCBfdmVyc2lvbi5weSBoYXNuJ3QgYWxyZWFkeSBi
ZWVuIHJld3JpdHRlbiB3aXRoIGEgc2hvcnQKICAgIHZlcnNpb24gc3RyaW5n
LCBtZWFuaW5nIHdlJ3JlIGluc2lkZSBhIGNoZWNrZWQgb3V0IHNvdXJjZSB0
cmVlLgogICAgIiIiCiAgICBHSVRTID0gWyJnaXQiXQogICAgaWYgc3lzLnBs
YXRmb3JtID09ICJ3aW4zMiI6CiAgICAgICAgR0lUUyA9IFsiZ2l0LmNtZCIs
ICJnaXQuZXhlIl0KCiAgICBvdXQsIHJjID0gcnVuX2NvbW1hbmQoR0lUUywg
WyJyZXYtcGFyc2UiLCAiLS1naXQtZGlyIl0sIGN3ZD1yb290LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGhpZGVfc3RkZXJyPVRydWUpCiAgICBpZiBy
YyAhPSAwOgogICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50
KCJEaXJlY3RvcnkgJXMgbm90IHVuZGVyIGdpdCBjb250cm9sIiAlIHJvb3Qp
CiAgICAgICAgcmFpc2UgTm90VGhpc01ldGhvZCgiJ2dpdCByZXYtcGFyc2Ug
LS1naXQtZGlyJyByZXR1cm5lZCBlcnJvciIpCgogICAgIyBpZiB0aGVyZSBp
cyBhIHRhZyBtYXRjaGluZyB0YWdfcHJlZml4LCB0aGlzIHlpZWxkcyBUQUct
TlVNLWdIRVhbLWRpcnR5XQogICAgIyBpZiB0aGVyZSBpc24ndCBvbmUsIHRo
aXMgeWllbGRzIEhFWFstZGlydHldIChubyBOVU0pCiAgICBkZXNjcmliZV9v
dXQsIHJjID0gcnVuX2NvbW1hbmQoR0lUUywgWyJkZXNjcmliZSIsICItLXRh
Z3MiLCAiLS1kaXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICItLWFsd2F5cyIsICItLWxvbmciLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1tYXRjaCIsICIl
cyoiICUgdGFnX3ByZWZpeF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3dkPXJvb3QpCiAgICAjIC0tbG9uZyB3YXMgYWRkZWQgaW4g
Z2l0LTEuNS41CiAgICBpZiBkZXNjcmliZV9vdXQgaXMgTm9uZToKICAgICAg
ICByYWlzZSBOb3RUaGlzTWV0aG9kKCInZ2l0IGRlc2NyaWJlJyBmYWlsZWQi
KQogICAgZGVzY3JpYmVfb3V0ID0gZGVzY3JpYmVfb3V0LnN0cmlwKCkKICAg
IGZ1bGxfb3V0LCByYyA9IHJ1bl9jb21tYW5kKEdJVFMsIFsicmV2LXBhcnNl
IiwgIkhFQUQiXSwgY3dkPXJvb3QpCiAgICBpZiBmdWxsX291dCBpcyBOb25l
OgogICAgICAgIHJhaXNlIE5vdFRoaXNNZXRob2QoIidnaXQgcmV2LXBhcnNl
JyBmYWlsZWQiKQogICAgZnVsbF9vdXQgPSBmdWxsX291dC5zdHJpcCgpCgog
ICAgcGllY2VzID0ge30KICAgIHBpZWNlc1sibG9uZyJdID0gZnVsbF9vdXQK
ICAgIHBpZWNlc1sic2hvcnQiXSA9IGZ1bGxfb3V0Wzo3XSAgIyBtYXliZSBp
bXByb3ZlZCBsYXRlcgogICAgcGllY2VzWyJlcnJvciJdID0gTm9uZQoKICAg
ICMgcGFyc2UgZGVzY3JpYmVfb3V0LiBJdCB3aWxsIGJlIGxpa2UgVEFHLU5V
TS1nSEVYWy1kaXJ0eV0gb3IgSEVYWy1kaXJ0eV0KICAgICMgVEFHIG1pZ2h0
IGhhdmUgaHlwaGVucy4KICAgIGdpdF9kZXNjcmliZSA9IGRlc2NyaWJlX291
dAoKICAgICMgbG9vayBmb3IgLWRpcnR5IHN1ZmZpeAogICAgZGlydHkgPSBn
aXRfZGVzY3JpYmUuZW5kc3dpdGgoIi1kaXJ0eSIpCiAgICBwaWVjZXNbImRp
cnR5Il0gPSBkaXJ0eQogICAgaWYgZGlydHk6CiAgICAgICAgZ2l0X2Rlc2Ny
aWJlID0gZ2l0X2Rlc2NyaWJlWzpnaXRfZGVzY3JpYmUucmluZGV4KCItZGly
dHkiKV0KCiAgICAjIG5vdyB3ZSBoYXZlIFRBRy1OVU0tZ0hFWCBvciBIRVgK
CiAgICBpZiAiLSIgaW4gZ2l0X2Rlc2NyaWJlOgogICAgICAgICMgVEFHLU5V
TS1nSEVYCiAgICAgICAgbW8gPSByZS5zZWFyY2gocideKC4rKS0oXGQrKS1n
KFswLTlhLWZdKykkJywgZ2l0X2Rlc2NyaWJlKQogICAgICAgIGlmIG5vdCBt
bzoKICAgICAgICAgICAgIyB1bnBhcnNlYWJsZS4gTWF5YmUgZ2l0LWRlc2Ny
aWJlIGlzIG1pc2JlaGF2aW5nPwogICAgICAgICAgICBwaWVjZXNbImVycm9y
Il0gPSAoInVuYWJsZSB0byBwYXJzZSBnaXQtZGVzY3JpYmUgb3V0cHV0OiAn
JXMnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBkZXNjcmli
ZV9vdXQpCiAgICAgICAgICAgIHJldHVybiBwaWVjZXMKCiAgICAgICAgIyB0
YWcKICAgICAgICBmdWxsX3RhZyA9IG1vLmdyb3VwKDEpCiAgICAgICAgaWYg
bm90IGZ1bGxfdGFnLnN0YXJ0c3dpdGgodGFnX3ByZWZpeCk6CiAgICAgICAg
ICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBmbXQgPSAidGFnICcl
cycgZG9lc24ndCBzdGFydCB3aXRoIHByZWZpeCAnJXMnIgogICAgICAgICAg
ICAgICAgcHJpbnQoZm10ICUgKGZ1bGxfdGFnLCB0YWdfcHJlZml4KSkKICAg
ICAgICAgICAgcGllY2VzWyJlcnJvciJdID0gKCJ0YWcgJyVzJyBkb2Vzbid0
IHN0YXJ0IHdpdGggcHJlZml4ICclcyciCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAlIChmdWxsX3RhZywgdGFnX3ByZWZpeCkpCiAgICAgICAg
ICAgIHJldHVybiBwaWVjZXMKICAgICAgICBwaWVjZXNbImNsb3Nlc3QtdGFn
Il0gPSBmdWxsX3RhZ1tsZW4odGFnX3ByZWZpeCk6XQoKICAgICAgICAjIGRp
c3RhbmNlOiBudW1iZXIgb2YgY29tbWl0cyBzaW5jZSB0YWcKICAgICAgICBw
aWVjZXNbImRpc3RhbmNlIl0gPSBpbnQobW8uZ3JvdXAoMikpCgogICAgICAg
ICMgY29tbWl0OiBzaG9ydCBoZXggcmV2aXNpb24gSUQKICAgICAgICBwaWVj
ZXNbInNob3J0Il0gPSBtby5ncm91cCgzKQoKICAgIGVsc2U6CiAgICAgICAg
IyBIRVg6IG5vIHRhZ3MKICAgICAgICBwaWVjZXNbImNsb3Nlc3QtdGFnIl0g
PSBOb25lCiAgICAgICAgY291bnRfb3V0LCByYyA9IHJ1bl9jb21tYW5kKEdJ
VFMsIFsicmV2LWxpc3QiLCAiSEVBRCIsICItLWNvdW50Il0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1yb290KQogICAgICAg
IHBpZWNlc1siZGlzdGFuY2UiXSA9IGludChjb3VudF9vdXQpICAjIHRvdGFs
IG51bWJlciBvZiBjb21taXRzCgogICAgIyBjb21taXQgZGF0ZTogc2VlIElT
Ty04NjAxIGNvbW1lbnQgaW4gZ2l0X3ZlcnNpb25zX2Zyb21fa2V5d29yZHMo
KQogICAgZGF0ZSA9IHJ1bl9jb21tYW5kKEdJVFMsIFsic2hvdyIsICItcyIs
ICItLWZvcm1hdD0lY2kiLCAiSEVBRCJdLAogICAgICAgICAgICAgICAgICAg
ICAgIGN3ZD1yb290KVswXS5zdHJpcCgpCiAgICBwaWVjZXNbImRhdGUiXSA9
IGRhdGUuc3RyaXAoKS5yZXBsYWNlKCIgIiwgIlQiLCAxKS5yZXBsYWNlKCIg
IiwgIiIsIDEpCgogICAgcmV0dXJuIHBpZWNlcwoKCmRlZiBkb192Y3NfaW5z
dGFsbChtYW5pZmVzdF9pbiwgdmVyc2lvbmZpbGVfc291cmNlLCBpcHkpOgog
ICAgIiIiR2l0LXNwZWNpZmljIGluc3RhbGxhdGlvbiBsb2dpYyBmb3IgVmVy
c2lvbmVlci4KCiAgICBGb3IgR2l0LCB0aGlzIG1lYW5zIGNyZWF0aW5nL2No
YW5naW5nIC5naXRhdHRyaWJ1dGVzIHRvIG1hcmsgX3ZlcnNpb24ucHkKICAg
IGZvciBleHBvcnQtc3Vic3Qga2V5d29yZCBzdWJzdGl0dXRpb24uCiAgICAi
IiIKICAgIEdJVFMgPSBbImdpdCJdCiAgICBpZiBzeXMucGxhdGZvcm0gPT0g
IndpbjMyIjoKICAgICAgICBHSVRTID0gWyJnaXQuY21kIiwgImdpdC5leGUi
XQogICAgZmlsZXMgPSBbbWFuaWZlc3RfaW4sIHZlcnNpb25maWxlX3NvdXJj
ZV0KICAgIGlmIGlweToKICAgICAgICBmaWxlcy5hcHBlbmQoaXB5KQogICAg
dHJ5OgogICAgICAgIG1lID0gX19maWxlX18KICAgICAgICBpZiBtZS5lbmRz
d2l0aCgiLnB5YyIpIG9yIG1lLmVuZHN3aXRoKCIucHlvIik6CiAgICAgICAg
ICAgIG1lID0gb3MucGF0aC5zcGxpdGV4dChtZSlbMF0gKyAiLnB5IgogICAg
ICAgIHZlcnNpb25lZXJfZmlsZSA9IG9zLnBhdGgucmVscGF0aChtZSkKICAg
IGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgICAgdmVyc2lvbmVlcl9maWxlID0g
InZlcnNpb25lZXIucHkiCiAgICBmaWxlcy5hcHBlbmQodmVyc2lvbmVlcl9m
aWxlKQogICAgcHJlc2VudCA9IEZhbHNlCiAgICB0cnk6CiAgICAgICAgZiA9
IG9wZW4oIi5naXRhdHRyaWJ1dGVzIiwgInIiKQogICAgICAgIGZvciBsaW5l
IGluIGYucmVhZGxpbmVzKCk6CiAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAo
KS5zdGFydHN3aXRoKHZlcnNpb25maWxlX3NvdXJjZSk6CiAgICAgICAgICAg
ICAgICBpZiAiZXhwb3J0LXN1YnN0IiBpbiBsaW5lLnN0cmlwKCkuc3BsaXQo
KVsxOl06CiAgICAgICAgICAgICAgICAgICAgcHJlc2VudCA9IFRydWUKICAg
ICAgICBmLmNsb3NlKCkKICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgog
ICAgICAgIHBhc3MKICAgIGlmIG5vdCBwcmVzZW50OgogICAgICAgIGYgPSBv
cGVuKCIuZ2l0YXR0cmlidXRlcyIsICJhKyIpCiAgICAgICAgZi53cml0ZSgi
JXMgZXhwb3J0LXN1YnN0XG4iICUgdmVyc2lvbmZpbGVfc291cmNlKQogICAg
ICAgIGYuY2xvc2UoKQogICAgICAgIGZpbGVzLmFwcGVuZCgiLmdpdGF0dHJp
YnV0ZXMiKQogICAgcnVuX2NvbW1hbmQoR0lUUywgWyJhZGQiLCAiLS0iXSAr
IGZpbGVzKQoKCmRlZiB2ZXJzaW9uc19mcm9tX3BhcmVudGRpcihwYXJlbnRk
aXJfcHJlZml4LCByb290LCB2ZXJib3NlKToKICAgICIiIlRyeSB0byBkZXRl
cm1pbmUgdGhlIHZlcnNpb24gZnJvbSB0aGUgcGFyZW50IGRpcmVjdG9yeSBu
YW1lLgoKICAgIFNvdXJjZSB0YXJiYWxscyBjb252ZW50aW9uYWxseSB1bnBh
Y2sgaW50byBhIGRpcmVjdG9yeSB0aGF0IGluY2x1ZGVzIGJvdGgKICAgIHRo
ZSBwcm9qZWN0IG5hbWUgYW5kIGEgdmVyc2lvbiBzdHJpbmcuIFdlIHdpbGwg
YWxzbyBzdXBwb3J0IHNlYXJjaGluZyB1cAogICAgdHdvIGRpcmVjdG9yeSBs
ZXZlbHMgZm9yIGFuIGFwcHJvcHJpYXRlbHkgbmFtZWQgcGFyZW50IGRpcmVj
dG9yeQogICAgIiIiCiAgICByb290ZGlycyA9IFtdCgogICAgZm9yIGkgaW4g
cmFuZ2UoMyk6CiAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUo
cm9vdCkKICAgICAgICBpZiBkaXJuYW1lLnN0YXJ0c3dpdGgocGFyZW50ZGly
X3ByZWZpeCk6CiAgICAgICAgICAgIHJldHVybiB7InZlcnNpb24iOiBkaXJu
YW1lW2xlbihwYXJlbnRkaXJfcHJlZml4KTpdLAogICAgICAgICAgICAgICAg
ICAgICJmdWxsLXJldmlzaW9uaWQiOiBOb25lLAogICAgICAgICAgICAgICAg
ICAgICJkaXJ0eSI6IEZhbHNlLCAiZXJyb3IiOiBOb25lLCAiZGF0ZSI6IE5v
bmV9CiAgICAgICAgZWxzZToKICAgICAgICAgICAgcm9vdGRpcnMuYXBwZW5k
KHJvb3QpCiAgICAgICAgICAgIHJvb3QgPSBvcy5wYXRoLmRpcm5hbWUocm9v
dCkgICMgdXAgYSBsZXZlbAoKICAgIGlmIHZlcmJvc2U6CiAgICAgICAgcHJp
bnQoIlRyaWVkIGRpcmVjdG9yaWVzICVzIGJ1dCBub25lIHN0YXJ0ZWQgd2l0
aCBwcmVmaXggJXMiICUKICAgICAgICAgICAgICAoc3RyKHJvb3RkaXJzKSwg
cGFyZW50ZGlyX3ByZWZpeCkpCiAgICByYWlzZSBOb3RUaGlzTWV0aG9kKCJy
b290ZGlyIGRvZXNuJ3Qgc3RhcnQgd2l0aCBwYXJlbnRkaXJfcHJlZml4IikK
ClNIT1JUX1ZFUlNJT05fUFkgPSAiIiIKIyBUaGlzIGZpbGUgd2FzIGdlbmVy
YXRlZCBieSAndmVyc2lvbmVlci5weScgKDAuMTcpIGZyb20KIyByZXZpc2lv
bi1jb250cm9sIHN5c3RlbSBkYXRhLCBvciBmcm9tIHRoZSBwYXJlbnQgZGly
ZWN0b3J5IG5hbWUgb2YgYW4KIyB1bnBhY2tlZCBzb3VyY2UgYXJjaGl2ZS4g
RGlzdHJpYnV0aW9uIHRhcmJhbGxzIGNvbnRhaW4gYSBwcmUtZ2VuZXJhdGVk
IGNvcHkKIyBvZiB0aGlzIGZpbGUuCgppbXBvcnQganNvbgoKdmVyc2lvbl9q
c29uID0gJycnCiVzCicnJyAgIyBFTkQgVkVSU0lPTl9KU09OCgoKZGVmIGdl
dF92ZXJzaW9ucygpOgogICAgcmV0dXJuIGpzb24ubG9hZHModmVyc2lvbl9q
c29uKQoiIiIKCgpkZWYgdmVyc2lvbnNfZnJvbV9maWxlKGZpbGVuYW1lKToK
ICAgICIiIlRyeSB0byBkZXRlcm1pbmUgdGhlIHZlcnNpb24gZnJvbSBfdmVy
c2lvbi5weSBpZiBwcmVzZW50LiIiIgogICAgdHJ5OgogICAgICAgIHdpdGgg
b3BlbihmaWxlbmFtZSkgYXMgZjoKICAgICAgICAgICAgY29udGVudHMgPSBm
LnJlYWQoKQogICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CiAgICAgICAg
cmFpc2UgTm90VGhpc01ldGhvZCgidW5hYmxlIHRvIHJlYWQgX3ZlcnNpb24u
cHkiKQogICAgbW8gPSByZS5zZWFyY2gociJ2ZXJzaW9uX2pzb24gPSAnJydc
biguKiknJycgICMgRU5EIFZFUlNJT05fSlNPTiIsCiAgICAgICAgICAgICAg
ICAgICBjb250ZW50cywgcmUuTSB8IHJlLlMpCiAgICBpZiBub3QgbW86CiAg
ICAgICAgbW8gPSByZS5zZWFyY2gociJ2ZXJzaW9uX2pzb24gPSAnJydcclxu
KC4qKScnJyAgIyBFTkQgVkVSU0lPTl9KU09OIiwKICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZW50cywgcmUuTSB8IHJlLlMpCiAgICBpZiBub3QgbW86
CiAgICAgICAgcmFpc2UgTm90VGhpc01ldGhvZCgibm8gdmVyc2lvbl9qc29u
IGluIF92ZXJzaW9uLnB5IikKICAgIHJldHVybiBqc29uLmxvYWRzKG1vLmdy
b3VwKDEpKQoKCmRlZiB3cml0ZV90b192ZXJzaW9uX2ZpbGUoZmlsZW5hbWUs
IHZlcnNpb25zKToKICAgICIiIldyaXRlIHRoZSBnaXZlbiB2ZXJzaW9uIG51
bWJlciB0byB0aGUgZ2l2ZW4gX3ZlcnNpb24ucHkgZmlsZS4iIiIKICAgIG9z
LnVubGluayhmaWxlbmFtZSkKICAgIGNvbnRlbnRzID0ganNvbi5kdW1wcyh2
ZXJzaW9ucywgc29ydF9rZXlzPVRydWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZW50PTEsIHNlcGFyYXRvcnM9KCIsIiwgIjogIikpCiAgICB3
aXRoIG9wZW4oZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICBmLndyaXRl
KFNIT1JUX1ZFUlNJT05fUFkgJSBjb250ZW50cykKCiAgICBwcmludCgic2V0
ICVzIHRvICclcyciICUgKGZpbGVuYW1lLCB2ZXJzaW9uc1sidmVyc2lvbiJd
KSkKCgpkZWYgcGx1c19vcl9kb3QocGllY2VzKToKICAgICIiIlJldHVybiBh
ICsgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZSwgZWxzZSByZXR1cm4g
YSAuIiIiCiAgICBpZiAiKyIgaW4gcGllY2VzLmdldCgiY2xvc2VzdC10YWci
LCAiIik6CiAgICAgICAgcmV0dXJuICIuIgogICAgcmV0dXJuICIrIgoKCmRl
ZiByZW5kZXJfcGVwNDQwKHBpZWNlcyk6CiAgICAiIiJCdWlsZCB1cCB2ZXJz
aW9uIHN0cmluZywgd2l0aCBwb3N0LXJlbGVhc2UgImxvY2FsIHZlcnNpb24g
aWRlbnRpZmllciIuCgogICAgT3VyIGdvYWw6IFRBR1srRElTVEFOQ0UuZ0hF
WFsuZGlydHldXSAuIE5vdGUgdGhhdCBpZiB5b3UKICAgIGdldCBhIHRhZ2dl
ZCBidWlsZCBhbmQgdGhlbiBkaXJ0eSBpdCwgeW91J2xsIGdldCBUQUcrMC5n
SEVYLmRpcnR5CgogICAgRXhjZXB0aW9uczoKICAgIDE6IG5vIHRhZ3MuIGdp
dF9kZXNjcmliZSB3YXMganVzdCBIRVguIDArdW50YWdnZWQuRElTVEFOQ0Uu
Z0hFWFsuZGlydHldCiAgICAiIiIKICAgIGlmIHBpZWNlc1siY2xvc2VzdC10
YWciXToKICAgICAgICByZW5kZXJlZCA9IHBpZWNlc1siY2xvc2VzdC10YWci
XQogICAgICAgIGlmIHBpZWNlc1siZGlzdGFuY2UiXSBvciBwaWVjZXNbImRp
cnR5Il06CiAgICAgICAgICAgIHJlbmRlcmVkICs9IHBsdXNfb3JfZG90KHBp
ZWNlcykKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIiVkLmclcyIgJSAocGll
Y2VzWyJkaXN0YW5jZSJdLCBwaWVjZXNbInNob3J0Il0pCiAgICAgICAgICAg
IGlmIHBpZWNlc1siZGlydHkiXToKICAgICAgICAgICAgICAgIHJlbmRlcmVk
ICs9ICIuZGlydHkiCiAgICBlbHNlOgogICAgICAgICMgZXhjZXB0aW9uICMx
CiAgICAgICAgcmVuZGVyZWQgPSAiMCt1bnRhZ2dlZC4lZC5nJXMiICUgKHBp
ZWNlc1siZGlzdGFuY2UiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGllY2VzWyJzaG9ydCJdKQogICAgICAgIGlmIHBp
ZWNlc1siZGlydHkiXToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5kaXJ0
eSIKICAgIHJldHVybiByZW5kZXJlZAoKCmRlZiByZW5kZXJfcGVwNDQwX3By
ZShwaWVjZXMpOgogICAgIiIiVEFHWy5wb3N0LmRldkRJU1RBTkNFXSAtLSBO
byAtZGlydHkuCgogICAgRXhjZXB0aW9uczoKICAgIDE6IG5vIHRhZ3MuIDAu
cG9zdC5kZXZESVNUQU5DRQogICAgIiIiCiAgICBpZiBwaWVjZXNbImNsb3Nl
c3QtdGFnIl06CiAgICAgICAgcmVuZGVyZWQgPSBwaWVjZXNbImNsb3Nlc3Qt
dGFnIl0KICAgICAgICBpZiBwaWVjZXNbImRpc3RhbmNlIl06CiAgICAgICAg
ICAgIHJlbmRlcmVkICs9ICIucG9zdC5kZXYlZCIgJSBwaWVjZXNbImRpc3Rh
bmNlIl0KICAgIGVsc2U6CiAgICAgICAgIyBleGNlcHRpb24gIzEKICAgICAg
ICByZW5kZXJlZCA9ICIwLnBvc3QuZGV2JWQiICUgcGllY2VzWyJkaXN0YW5j
ZSJdCiAgICByZXR1cm4gcmVuZGVyZWQKCgpkZWYgcmVuZGVyX3BlcDQ0MF9w
b3N0KHBpZWNlcyk6CiAgICAiIiJUQUdbLnBvc3RESVNUQU5DRVsuZGV2MF0r
Z0hFWF0gLgoKICAgIFRoZSAiLmRldjAiIG1lYW5zIGRpcnR5LiBOb3RlIHRo
YXQgLmRldjAgc29ydHMgYmFja3dhcmRzCiAgICAoYSBkaXJ0eSB0cmVlIHdp
bGwgYXBwZWFyICJvbGRlciIgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBjbGVh
biBvbmUpLAogICAgYnV0IHlvdSBzaG91bGRuJ3QgYmUgcmVsZWFzaW5nIHNv
ZnR3YXJlIHdpdGggLWRpcnR5IGFueXdheXMuCgogICAgRXhjZXB0aW9uczoK
ICAgIDE6IG5vIHRhZ3MuIDAucG9zdERJU1RBTkNFWy5kZXYwXQogICAgIiIi
CiAgICBpZiBwaWVjZXNbImNsb3Nlc3QtdGFnIl06CiAgICAgICAgcmVuZGVy
ZWQgPSBwaWVjZXNbImNsb3Nlc3QtdGFnIl0KICAgICAgICBpZiBwaWVjZXNb
ImRpc3RhbmNlIl0gb3IgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICBy
ZW5kZXJlZCArPSAiLnBvc3QlZCIgJSBwaWVjZXNbImRpc3RhbmNlIl0KICAg
ICAgICAgICAgaWYgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICAgICAg
cmVuZGVyZWQgKz0gIi5kZXYwIgogICAgICAgICAgICByZW5kZXJlZCArPSBw
bHVzX29yX2RvdChwaWVjZXMpCiAgICAgICAgICAgIHJlbmRlcmVkICs9ICJn
JXMiICUgcGllY2VzWyJzaG9ydCJdCiAgICBlbHNlOgogICAgICAgICMgZXhj
ZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSAiMC5wb3N0JWQiICUgcGll
Y2VzWyJkaXN0YW5jZSJdCiAgICAgICAgaWYgcGllY2VzWyJkaXJ0eSJdOgog
ICAgICAgICAgICByZW5kZXJlZCArPSAiLmRldjAiCiAgICAgICAgcmVuZGVy
ZWQgKz0gIitnJXMiICUgcGllY2VzWyJzaG9ydCJdCiAgICByZXR1cm4gcmVu
ZGVyZWQKCgpkZWYgcmVuZGVyX3BlcDQ0MF9vbGQocGllY2VzKToKICAgICIi
IlRBR1sucG9zdERJU1RBTkNFWy5kZXYwXV0gLgoKICAgIFRoZSAiLmRldjAi
IG1lYW5zIGRpcnR5LgoKICAgIEVleGNlcHRpb25zOgogICAgMTogbm8gdGFn
cy4gMC5wb3N0RElTVEFOQ0VbLmRldjBdCiAgICAiIiIKICAgIGlmIHBpZWNl
c1siY2xvc2VzdC10YWciXToKICAgICAgICByZW5kZXJlZCA9IHBpZWNlc1si
Y2xvc2VzdC10YWciXQogICAgICAgIGlmIHBpZWNlc1siZGlzdGFuY2UiXSBv
ciBwaWVjZXNbImRpcnR5Il06CiAgICAgICAgICAgIHJlbmRlcmVkICs9ICIu
cG9zdCVkIiAlIHBpZWNlc1siZGlzdGFuY2UiXQogICAgICAgICAgICBpZiBw
aWVjZXNbImRpcnR5Il06CiAgICAgICAgICAgICAgICByZW5kZXJlZCArPSAi
LmRldjAiCiAgICBlbHNlOgogICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAg
ICAgcmVuZGVyZWQgPSAiMC5wb3N0JWQiICUgcGllY2VzWyJkaXN0YW5jZSJd
CiAgICAgICAgaWYgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICByZW5k
ZXJlZCArPSAiLmRldjAiCiAgICByZXR1cm4gcmVuZGVyZWQKCgpkZWYgcmVu
ZGVyX2dpdF9kZXNjcmliZShwaWVjZXMpOgogICAgIiIiVEFHWy1ESVNUQU5D
RS1nSEVYXVstZGlydHldLgoKICAgIExpa2UgJ2dpdCBkZXNjcmliZSAtLXRh
Z3MgLS1kaXJ0eSAtLWFsd2F5cycuCgogICAgRXhjZXB0aW9uczoKICAgIDE6
IG5vIHRhZ3MuIEhFWFstZGlydHldICAobm90ZTogbm8gJ2cnIHByZWZpeCkK
ICAgICIiIgogICAgaWYgcGllY2VzWyJjbG9zZXN0LXRhZyJdOgogICAgICAg
IHJlbmRlcmVkID0gcGllY2VzWyJjbG9zZXN0LXRhZyJdCiAgICAgICAgaWYg
cGllY2VzWyJkaXN0YW5jZSJdOgogICAgICAgICAgICByZW5kZXJlZCArPSAi
LSVkLWclcyIgJSAocGllY2VzWyJkaXN0YW5jZSJdLCBwaWVjZXNbInNob3J0
Il0pCiAgICBlbHNlOgogICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAg
cmVuZGVyZWQgPSBwaWVjZXNbInNob3J0Il0KICAgIGlmIHBpZWNlc1siZGly
dHkiXToKICAgICAgICByZW5kZXJlZCArPSAiLWRpcnR5IgogICAgcmV0dXJu
IHJlbmRlcmVkCgoKZGVmIHJlbmRlcl9naXRfZGVzY3JpYmVfbG9uZyhwaWVj
ZXMpOgogICAgIiIiVEFHLURJU1RBTkNFLWdIRVhbLWRpcnR5XS4KCiAgICBM
aWtlICdnaXQgZGVzY3JpYmUgLS10YWdzIC0tZGlydHkgLS1hbHdheXMgLWxv
bmcnLgogICAgVGhlIGRpc3RhbmNlL2hhc2ggaXMgdW5jb25kaXRpb25hbC4K
CiAgICBFeGNlcHRpb25zOgogICAgMTogbm8gdGFncy4gSEVYWy1kaXJ0eV0g
IChub3RlOiBubyAnZycgcHJlZml4KQogICAgIiIiCiAgICBpZiBwaWVjZXNb
ImNsb3Nlc3QtdGFnIl06CiAgICAgICAgcmVuZGVyZWQgPSBwaWVjZXNbImNs
b3Nlc3QtdGFnIl0KICAgICAgICByZW5kZXJlZCArPSAiLSVkLWclcyIgJSAo
cGllY2VzWyJkaXN0YW5jZSJdLCBwaWVjZXNbInNob3J0Il0pCiAgICBlbHNl
OgogICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSBw
aWVjZXNbInNob3J0Il0KICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAgICAg
ICByZW5kZXJlZCArPSAiLWRpcnR5IgogICAgcmV0dXJuIHJlbmRlcmVkCgoK
ZGVmIHJlbmRlcihwaWVjZXMsIHN0eWxlKToKICAgICIiIlJlbmRlciB0aGUg
Z2l2ZW4gdmVyc2lvbiBwaWVjZXMgaW50byB0aGUgcmVxdWVzdGVkIHN0eWxl
LiIiIgogICAgaWYgcGllY2VzWyJlcnJvciJdOgogICAgICAgIHJldHVybiB7
InZlcnNpb24iOiAidW5rbm93biIsCiAgICAgICAgICAgICAgICAiZnVsbC1y
ZXZpc2lvbmlkIjogcGllY2VzLmdldCgibG9uZyIpLAogICAgICAgICAgICAg
ICAgImRpcnR5IjogTm9uZSwKICAgICAgICAgICAgICAgICJlcnJvciI6IHBp
ZWNlc1siZXJyb3IiXSwKICAgICAgICAgICAgICAgICJkYXRlIjogTm9uZX0K
CiAgICBpZiBub3Qgc3R5bGUgb3Igc3R5bGUgPT0gImRlZmF1bHQiOgogICAg
ICAgIHN0eWxlID0gInBlcDQ0MCIgICMgdGhlIGRlZmF1bHQKCiAgICBpZiBz
dHlsZSA9PSAicGVwNDQwIjoKICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9w
ZXA0NDAocGllY2VzKQogICAgZWxpZiBzdHlsZSA9PSAicGVwNDQwLXByZSI6
CiAgICAgICAgcmVuZGVyZWQgPSByZW5kZXJfcGVwNDQwX3ByZShwaWVjZXMp
CiAgICBlbGlmIHN0eWxlID09ICJwZXA0NDAtcG9zdCI6CiAgICAgICAgcmVu
ZGVyZWQgPSByZW5kZXJfcGVwNDQwX3Bvc3QocGllY2VzKQogICAgZWxpZiBz
dHlsZSA9PSAicGVwNDQwLW9sZCI6CiAgICAgICAgcmVuZGVyZWQgPSByZW5k
ZXJfcGVwNDQwX29sZChwaWVjZXMpCiAgICBlbGlmIHN0eWxlID09ICJnaXQt
ZGVzY3JpYmUiOgogICAgICAgIHJlbmRlcmVkID0gcmVuZGVyX2dpdF9kZXNj
cmliZShwaWVjZXMpCiAgICBlbGlmIHN0eWxlID09ICJnaXQtZGVzY3JpYmUt
bG9uZyI6CiAgICAgICAgcmVuZGVyZWQgPSByZW5kZXJfZ2l0X2Rlc2NyaWJl
X2xvbmcocGllY2VzKQogICAgZWxzZToKICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCJ1bmtub3duIHN0eWxlICclcyciICUgc3R5bGUpCgogICAgcmV0dXJu
IHsidmVyc2lvbiI6IHJlbmRlcmVkLCAiZnVsbC1yZXZpc2lvbmlkIjogcGll
Y2VzWyJsb25nIl0sCiAgICAgICAgICAgICJkaXJ0eSI6IHBpZWNlc1siZGly
dHkiXSwgImVycm9yIjogTm9uZSwKICAgICAgICAgICAgImRhdGUiOiBwaWVj
ZXMuZ2V0KCJkYXRlIil9CgoKY2xhc3MgVmVyc2lvbmVlckJhZFJvb3RFcnJv
cihFeGNlcHRpb24pOgogICAgIiIiVGhlIHByb2plY3Qgcm9vdCBkaXJlY3Rv
cnkgaXMgdW5rbm93biBvciBtaXNzaW5nIGtleSBmaWxlcy4iIiIKCgpkZWYg
Z2V0X3ZlcnNpb25zKHZlcmJvc2U9RmFsc2UpOgogICAgIiIiR2V0IHRoZSBw
cm9qZWN0IHZlcnNpb24gZnJvbSB3aGF0ZXZlciBzb3VyY2UgaXMgYXZhaWxh
YmxlLgoKICAgIFJldHVybnMgZGljdCB3aXRoIHR3byBrZXlzOiAndmVyc2lv
bicgYW5kICdmdWxsJy4KICAgICIiIgogICAgaWYgInZlcnNpb25lZXIiIGlu
IHN5cy5tb2R1bGVzOgogICAgICAgICMgc2VlIHRoZSBkaXNjdXNzaW9uIGlu
IGNtZGNsYXNzLnB5OmdldF9jbWRjbGFzcygpCiAgICAgICAgZGVsIHN5cy5t
b2R1bGVzWyJ2ZXJzaW9uZWVyIl0KCiAgICByb290ID0gZ2V0X3Jvb3QoKQog
ICAgY2ZnID0gZ2V0X2NvbmZpZ19mcm9tX3Jvb3Qocm9vdCkKCiAgICBhc3Nl
cnQgY2ZnLlZDUyBpcyBub3QgTm9uZSwgInBsZWFzZSBzZXQgW3ZlcnNpb25l
ZXJdVkNTPSBpbiBzZXR1cC5jZmciCiAgICBoYW5kbGVycyA9IEhBTkRMRVJT
LmdldChjZmcuVkNTKQogICAgYXNzZXJ0IGhhbmRsZXJzLCAidW5yZWNvZ25p
emVkIFZDUyAnJXMnIiAlIGNmZy5WQ1MKICAgIHZlcmJvc2UgPSB2ZXJib3Nl
IG9yIGNmZy52ZXJib3NlCiAgICBhc3NlcnQgY2ZnLnZlcnNpb25maWxlX3Nv
dXJjZSBpcyBub3QgTm9uZSwgXAogICAgICAgICJwbGVhc2Ugc2V0IHZlcnNp
b25lZXIudmVyc2lvbmZpbGVfc291cmNlIgogICAgYXNzZXJ0IGNmZy50YWdf
cHJlZml4IGlzIG5vdCBOb25lLCAicGxlYXNlIHNldCB2ZXJzaW9uZWVyLnRh
Z19wcmVmaXgiCgogICAgdmVyc2lvbmZpbGVfYWJzID0gb3MucGF0aC5qb2lu
KHJvb3QsIGNmZy52ZXJzaW9uZmlsZV9zb3VyY2UpCgogICAgIyBleHRyYWN0
IHZlcnNpb24gZnJvbSBmaXJzdCBvZjogX3ZlcnNpb24ucHksIFZDUyBjb21t
YW5kIChlLmcuICdnaXQKICAgICMgZGVzY3JpYmUnKSwgcGFyZW50ZGlyLiBU
aGlzIGlzIG1lYW50IHRvIHdvcmsgZm9yIGRldmVsb3BlcnMgdXNpbmcgYQog
ICAgIyBzb3VyY2UgY2hlY2tvdXQsIGZvciB1c2VycyBvZiBhIHRhcmJhbGwg
Y3JlYXRlZCBieSAnc2V0dXAucHkgc2Rpc3QnLAogICAgIyBhbmQgZm9yIHVz
ZXJzIG9mIGEgdGFyYmFsbC96aXBiYWxsIGNyZWF0ZWQgYnkgJ2dpdCBhcmNo
aXZlJyBvciBnaXRodWIncwogICAgIyBkb3dubG9hZC1mcm9tLXRhZyBmZWF0
dXJlIG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIFZDU2VzLgoKICAgIGdl
dF9rZXl3b3Jkc19mID0gaGFuZGxlcnMuZ2V0KCJnZXRfa2V5d29yZHMiKQog
ICAgZnJvbV9rZXl3b3Jkc19mID0gaGFuZGxlcnMuZ2V0KCJrZXl3b3JkcyIp
CiAgICBpZiBnZXRfa2V5d29yZHNfZiBhbmQgZnJvbV9rZXl3b3Jkc19mOgog
ICAgICAgIHRyeToKICAgICAgICAgICAga2V5d29yZHMgPSBnZXRfa2V5d29y
ZHNfZih2ZXJzaW9uZmlsZV9hYnMpCiAgICAgICAgICAgIHZlciA9IGZyb21f
a2V5d29yZHNfZihrZXl3b3JkcywgY2ZnLnRhZ19wcmVmaXgsIHZlcmJvc2Up
CiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBwcmlu
dCgiZ290IHZlcnNpb24gZnJvbSBleHBhbmRlZCBrZXl3b3JkICVzIiAlIHZl
cikKICAgICAgICAgICAgcmV0dXJuIHZlcgogICAgICAgIGV4Y2VwdCBOb3RU
aGlzTWV0aG9kOgogICAgICAgICAgICBwYXNzCgogICAgdHJ5OgogICAgICAg
IHZlciA9IHZlcnNpb25zX2Zyb21fZmlsZSh2ZXJzaW9uZmlsZV9hYnMpCiAg
ICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQoImdvdCB2ZXJz
aW9uIGZyb20gZmlsZSAlcyAlcyIgJSAodmVyc2lvbmZpbGVfYWJzLCB2ZXIp
KQogICAgICAgIHJldHVybiB2ZXIKICAgIGV4Y2VwdCBOb3RUaGlzTWV0aG9k
OgogICAgICAgIHBhc3MKCiAgICBmcm9tX3Zjc19mID0gaGFuZGxlcnMuZ2V0
KCJwaWVjZXNfZnJvbV92Y3MiKQogICAgaWYgZnJvbV92Y3NfZjoKICAgICAg
ICB0cnk6CiAgICAgICAgICAgIHBpZWNlcyA9IGZyb21fdmNzX2YoY2ZnLnRh
Z19wcmVmaXgsIHJvb3QsIHZlcmJvc2UpCiAgICAgICAgICAgIHZlciA9IHJl
bmRlcihwaWVjZXMsIGNmZy5zdHlsZSkKICAgICAgICAgICAgaWYgdmVyYm9z
ZToKICAgICAgICAgICAgICAgIHByaW50KCJnb3QgdmVyc2lvbiBmcm9tIFZD
UyAlcyIgJSB2ZXIpCiAgICAgICAgICAgIHJldHVybiB2ZXIKICAgICAgICBl
eGNlcHQgTm90VGhpc01ldGhvZDoKICAgICAgICAgICAgcGFzcwoKICAgIHRy
eToKICAgICAgICBpZiBjZmcucGFyZW50ZGlyX3ByZWZpeDoKICAgICAgICAg
ICAgdmVyID0gdmVyc2lvbnNfZnJvbV9wYXJlbnRkaXIoY2ZnLnBhcmVudGRp
cl9wcmVmaXgsIHJvb3QsIHZlcmJvc2UpCiAgICAgICAgICAgIGlmIHZlcmJv
c2U6CiAgICAgICAgICAgICAgICBwcmludCgiZ290IHZlcnNpb24gZnJvbSBw
YXJlbnRkaXIgJXMiICUgdmVyKQogICAgICAgICAgICByZXR1cm4gdmVyCiAg
ICBleGNlcHQgTm90VGhpc01ldGhvZDoKICAgICAgICBwYXNzCgogICAgaWYg
dmVyYm9zZToKICAgICAgICBwcmludCgidW5hYmxlIHRvIGNvbXB1dGUgdmVy
c2lvbiIpCgogICAgcmV0dXJuIHsidmVyc2lvbiI6ICIwK3Vua25vd24iLCAi
ZnVsbC1yZXZpc2lvbmlkIjogTm9uZSwKICAgICAgICAgICAgImRpcnR5Ijog
Tm9uZSwgImVycm9yIjogInVuYWJsZSB0byBjb21wdXRlIHZlcnNpb24iLAog
ICAgICAgICAgICAiZGF0ZSI6IE5vbmV9CgoKZGVmIGdldF92ZXJzaW9uKCk6
CiAgICAiIiJHZXQgdGhlIHNob3J0IHZlcnNpb24gc3RyaW5nIGZvciB0aGlz
IHByb2plY3QuIiIiCiAgICByZXR1cm4gZ2V0X3ZlcnNpb25zKClbInZlcnNp
b24iXQoKCmRlZiBnZXRfY21kY2xhc3MoKToKICAgICIiIkdldCB0aGUgY3Vz
dG9tIHNldHVwdG9vbHMvZGlzdHV0aWxzIHN1YmNsYXNzZXMgdXNlZCBieSBW
ZXJzaW9uZWVyLiIiIgogICAgaWYgInZlcnNpb25lZXIiIGluIHN5cy5tb2R1
bGVzOgogICAgICAgIGRlbCBzeXMubW9kdWxlc1sidmVyc2lvbmVlciJdCiAg
ICAgICAgIyB0aGlzIGZpeGVzIHRoZSAicHl0aG9uIHNldHVwLnB5IGRldmVs
b3AiIGNhc2UgKGFsc28gJ2luc3RhbGwnIGFuZAogICAgICAgICMgJ2Vhc3lf
aW5zdGFsbCAuJyksIGluIHdoaWNoIHN1YmRlcGVuZGVuY2llcyBvZiB0aGUg
bWFpbiBwcm9qZWN0IGFyZQogICAgICAgICMgYnVpbHQgKHVzaW5nIHNldHVw
LnB5IGJkaXN0X2VnZykgaW4gdGhlIHNhbWUgcHl0aG9uIHByb2Nlc3MuIEFz
c3VtZQogICAgICAgICMgYSBtYWluIHByb2plY3QgQSBhbmQgYSBkZXBlbmRl
bmN5IEIsIHdoaWNoIHVzZSBkaWZmZXJlbnQgdmVyc2lvbnMKICAgICAgICAj
IG9mIFZlcnNpb25lZXIuIEEncyBzZXR1cC5weSBpbXBvcnRzIEEncyBWZXJz
aW9uZWVyLCBsZWF2aW5nIGl0IGluCiAgICAgICAgIyBzeXMubW9kdWxlcyBi
eSB0aGUgdGltZSBCJ3Mgc2V0dXAucHkgaXMgZXhlY3V0ZWQsIGNhdXNpbmcg
QiB0byBydW4KICAgICAgICAjIHdpdGggdGhlIHdyb25nIHZlcnNpb25lZXIu
IFNldHVwdG9vbHMgd3JhcHMgdGhlIHN1Yi1kZXAgYnVpbGRzIGluIGEKICAg
ICAgICAjIHNhbmRib3ggdGhhdCByZXN0b3JlcyBzeXMubW9kdWxlcyB0byBp
dCdzIHByZS1idWlsZCBzdGF0ZSwgc28gdGhlCiAgICAgICAgIyBwYXJlbnQg
aXMgcHJvdGVjdGVkIGFnYWluc3QgdGhlIGNoaWxkJ3MgImltcG9ydCB2ZXJz
aW9uZWVyIi4gQnkKICAgICAgICAjIHJlbW92aW5nIG91cnNlbHZlcyBmcm9t
IHN5cy5tb2R1bGVzIGhlcmUsIGJlZm9yZSB0aGUgY2hpbGQgYnVpbGQKICAg
ICAgICAjIGhhcHBlbnMsIHdlIHByb3RlY3QgdGhlIGNoaWxkIGZyb20gdGhl
IHBhcmVudCdzIHZlcnNpb25lZXIgdG9vLgogICAgICAgICMgQWxzbyBzZWUg
aHR0cHM6Ly9naXRodWIuY29tL3dhcm5lci9weXRob24tdmVyc2lvbmVlci9p
c3N1ZXMvNTIKCiAgICBjbWRzID0ge30KCiAgICAjIHdlIGFkZCAidmVyc2lv
biIgdG8gYm90aCBkaXN0dXRpbHMgYW5kIHNldHVwdG9vbHMKICAgIGZyb20g
ZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKCiAgICBjbGFzcyBjbWRf
dmVyc2lvbihDb21tYW5kKToKICAgICAgICBkZXNjcmlwdGlvbiA9ICJyZXBv
cnQgZ2VuZXJhdGVkIHZlcnNpb24gc3RyaW5nIgogICAgICAgIHVzZXJfb3B0
aW9ucyA9IFtdCiAgICAgICAgYm9vbGVhbl9vcHRpb25zID0gW10KCiAgICAg
ICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgICAg
cGFzcwoKICAgICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAg
ICAgICAgICAgcGFzcwoKICAgICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAg
ICAgICB2ZXJzID0gZ2V0X3ZlcnNpb25zKHZlcmJvc2U9VHJ1ZSkKICAgICAg
ICAgICAgcHJpbnQoIlZlcnNpb246ICVzIiAlIHZlcnNbInZlcnNpb24iXSkK
ICAgICAgICAgICAgcHJpbnQoIiBmdWxsLXJldmlzaW9uaWQ6ICVzIiAlIHZl
cnMuZ2V0KCJmdWxsLXJldmlzaW9uaWQiKSkKICAgICAgICAgICAgcHJpbnQo
IiBkaXJ0eTogJXMiICUgdmVycy5nZXQoImRpcnR5IikpCiAgICAgICAgICAg
IHByaW50KCIgZGF0ZTogJXMiICUgdmVycy5nZXQoImRhdGUiKSkKICAgICAg
ICAgICAgaWYgdmVyc1siZXJyb3IiXToKICAgICAgICAgICAgICAgIHByaW50
KCIgZXJyb3I6ICVzIiAlIHZlcnNbImVycm9yIl0pCiAgICBjbWRzWyJ2ZXJz
aW9uIl0gPSBjbWRfdmVyc2lvbgoKICAgICMgd2Ugb3ZlcnJpZGUgImJ1aWxk
X3B5IiBpbiBib3RoIGRpc3R1dGlscyBhbmQgc2V0dXB0b29scwogICAgIwog
ICAgIyBtb3N0IGludm9jYXRpb24gcGF0aHdheXMgZW5kIHVwIHJ1bm5pbmcg
YnVpbGRfcHk6CiAgICAjICBkaXN0dXRpbHMvYnVpbGQgLT4gYnVpbGRfcHkK
ICAgICMgIGRpc3R1dGlscy9pbnN0YWxsIC0+IGRpc3R1dGlscy9idWlsZCAt
Pi4uCiAgICAjICBzZXR1cHRvb2xzL2JkaXN0X3doZWVsIC0+IGRpc3R1dGls
cy9pbnN0YWxsIC0+Li4KICAgICMgIHNldHVwdG9vbHMvYmRpc3RfZWdnIC0+
IGRpc3R1dGlscy9pbnN0YWxsX2xpYiAtPiBidWlsZF9weQogICAgIyAgc2V0
dXB0b29scy9pbnN0YWxsIC0+IGJkaXN0X2VnZyAtPi4uCiAgICAjICBzZXR1
cHRvb2xzL2RldmVsb3AgLT4gPwogICAgIyAgcGlwIGluc3RhbGw6CiAgICAj
ICAgY29waWVzIHNvdXJjZSB0cmVlIHRvIGEgdGVtcGRpciBiZWZvcmUgcnVu
bmluZyBlZ2dfaW5mby9ldGMKICAgICMgICBpZiAuZ2l0IGlzbid0IGNvcGll
ZCB0b28sICdnaXQgZGVzY3JpYmUnIHdpbGwgZmFpbAogICAgIyAgIHRoZW4g
ZG9lcyBzZXR1cC5weSBiZGlzdF93aGVlbCwgb3Igc29tZXRpbWVzIHNldHVw
LnB5IGluc3RhbGwKICAgICMgIHNldHVwLnB5IGVnZ19pbmZvIC0+ID8KCiAg
ICAjIHdlIG92ZXJyaWRlIGRpZmZlcmVudCAiYnVpbGRfcHkiIGNvbW1hbmRz
IGZvciBib3RoIGVudmlyb25tZW50cwogICAgaWYgInNldHVwdG9vbHMiIGlu
IHN5cy5tb2R1bGVzOgogICAgICAgIGZyb20gc2V0dXB0b29scy5jb21tYW5k
LmJ1aWxkX3B5IGltcG9ydCBidWlsZF9weSBhcyBfYnVpbGRfcHkKICAgIGVs
c2U6CiAgICAgICAgZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weSBp
bXBvcnQgYnVpbGRfcHkgYXMgX2J1aWxkX3B5CgogICAgY2xhc3MgY21kX2J1
aWxkX3B5KF9idWlsZF9weSk6CiAgICAgICAgZGVmIHJ1bihzZWxmKToKICAg
ICAgICAgICAgcm9vdCA9IGdldF9yb290KCkKICAgICAgICAgICAgY2ZnID0g
Z2V0X2NvbmZpZ19mcm9tX3Jvb3Qocm9vdCkKICAgICAgICAgICAgdmVyc2lv
bnMgPSBnZXRfdmVyc2lvbnMoKQogICAgICAgICAgICBfYnVpbGRfcHkucnVu
KHNlbGYpCiAgICAgICAgICAgICMgbm93IGxvY2F0ZSBfdmVyc2lvbi5weSBp
biB0aGUgbmV3IGJ1aWxkLyBkaXJlY3RvcnkgYW5kIHJlcGxhY2UKICAgICAg
ICAgICAgIyBpdCB3aXRoIGFuIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAg
aWYgY2ZnLnZlcnNpb25maWxlX2J1aWxkOgogICAgICAgICAgICAgICAgdGFy
Z2V0X3ZlcnNpb25maWxlID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfbGli
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNmZy52ZXJzaW9uZmlsZV9idWlsZCkKICAgICAgICAgICAgICAg
IHByaW50KCJVUERBVElORyAlcyIgJSB0YXJnZXRfdmVyc2lvbmZpbGUpCiAg
ICAgICAgICAgICAgICB3cml0ZV90b192ZXJzaW9uX2ZpbGUodGFyZ2V0X3Zl
cnNpb25maWxlLCB2ZXJzaW9ucykKICAgIGNtZHNbImJ1aWxkX3B5Il0gPSBj
bWRfYnVpbGRfcHkKCiAgICBpZiAiY3hfRnJlZXplIiBpbiBzeXMubW9kdWxl
czogICMgY3hfZnJlZXplIGVuYWJsZWQ/CiAgICAgICAgZnJvbSBjeF9GcmVl
emUuZGlzdCBpbXBvcnQgYnVpbGRfZXhlIGFzIF9idWlsZF9leGUKICAgICAg
ICAjIG5jemVjenVsaW4gcmVwb3J0cyB0aGF0IHB5MmV4ZSB3b24ndCBsaWtl
IHRoZSBwZXA0NDAtc3R5bGUgc3RyaW5nCiAgICAgICAgIyBhcyBGSUxFVkVS
U0lPTiwgYnV0IGl0IGNhbiBiZSB1c2VkIGZvciBQUk9EVUNUVkVSU0lPTiwg
ZS5nLgogICAgICAgICMgc2V0dXAoY29uc29sZT1bewogICAgICAgICMgICAi
dmVyc2lvbiI6IHZlcnNpb25lZXIuZ2V0X3ZlcnNpb24oKS5zcGxpdCgiKyIs
IDEpWzBdLCAjIEZJTEVWRVJTSU9OCiAgICAgICAgIyAgICJwcm9kdWN0X3Zl
cnNpb24iOiB2ZXJzaW9uZWVyLmdldF92ZXJzaW9uKCksCiAgICAgICAgIyAg
IC4uLgoKICAgICAgICBjbGFzcyBjbWRfYnVpbGRfZXhlKF9idWlsZF9leGUp
OgogICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAgICAgICAg
cm9vdCA9IGdldF9yb290KCkKICAgICAgICAgICAgICAgIGNmZyA9IGdldF9j
b25maWdfZnJvbV9yb290KHJvb3QpCiAgICAgICAgICAgICAgICB2ZXJzaW9u
cyA9IGdldF92ZXJzaW9ucygpCiAgICAgICAgICAgICAgICB0YXJnZXRfdmVy
c2lvbmZpbGUgPSBjZmcudmVyc2lvbmZpbGVfc291cmNlCiAgICAgICAgICAg
ICAgICBwcmludCgiVVBEQVRJTkcgJXMiICUgdGFyZ2V0X3ZlcnNpb25maWxl
KQogICAgICAgICAgICAgICAgd3JpdGVfdG9fdmVyc2lvbl9maWxlKHRhcmdl
dF92ZXJzaW9uZmlsZSwgdmVyc2lvbnMpCgogICAgICAgICAgICAgICAgX2J1
aWxkX2V4ZS5ydW4oc2VsZikKICAgICAgICAgICAgICAgIG9zLnVubGluayh0
YXJnZXRfdmVyc2lvbmZpbGUpCiAgICAgICAgICAgICAgICB3aXRoIG9wZW4o
Y2ZnLnZlcnNpb25maWxlX3NvdXJjZSwgInciKSBhcyBmOgogICAgICAgICAg
ICAgICAgICAgIExPTkcgPSBMT05HX1ZFUlNJT05fUFlbY2ZnLlZDU10KICAg
ICAgICAgICAgICAgICAgICBmLndyaXRlKExPTkcgJQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyJET0xMQVIiOiAiJCIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIlNUWUxFIjogY2ZnLnN0eWxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJUQUdfUFJFRklYIjogY2ZnLnRhZ19wcmVm
aXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBUkVOVERJUl9Q
UkVGSVgiOiBjZmcucGFyZW50ZGlyX3ByZWZpeCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiVkVSU0lPTkZJTEVfU09VUkNFIjogY2ZnLnZlcnNp
b25maWxlX3NvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KQogICAgICAgIGNtZHNbImJ1aWxkX2V4ZSJdID0gY21kX2J1aWxkX2V4ZQog
ICAgICAgIGRlbCBjbWRzWyJidWlsZF9weSJdCgogICAgaWYgJ3B5MmV4ZScg
aW4gc3lzLm1vZHVsZXM6ICAjIHB5MmV4ZSBlbmFibGVkPwogICAgICAgIHRy
eToKICAgICAgICAgICAgZnJvbSBweTJleGUuZGlzdHV0aWxzX2J1aWxkZXhl
IGltcG9ydCBweTJleGUgYXMgX3B5MmV4ZSAgIyBweTMKICAgICAgICBleGNl
cHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgIGZyb20gcHkyZXhlLmJ1aWxk
X2V4ZSBpbXBvcnQgcHkyZXhlIGFzIF9weTJleGUgICMgcHkyCgogICAgICAg
IGNsYXNzIGNtZF9weTJleGUoX3B5MmV4ZSk6CiAgICAgICAgICAgIGRlZiBy
dW4oc2VsZik6CiAgICAgICAgICAgICAgICByb290ID0gZ2V0X3Jvb3QoKQog
ICAgICAgICAgICAgICAgY2ZnID0gZ2V0X2NvbmZpZ19mcm9tX3Jvb3Qocm9v
dCkKICAgICAgICAgICAgICAgIHZlcnNpb25zID0gZ2V0X3ZlcnNpb25zKCkK
ICAgICAgICAgICAgICAgIHRhcmdldF92ZXJzaW9uZmlsZSA9IGNmZy52ZXJz
aW9uZmlsZV9zb3VyY2UKICAgICAgICAgICAgICAgIHByaW50KCJVUERBVElO
RyAlcyIgJSB0YXJnZXRfdmVyc2lvbmZpbGUpCiAgICAgICAgICAgICAgICB3
cml0ZV90b192ZXJzaW9uX2ZpbGUodGFyZ2V0X3ZlcnNpb25maWxlLCB2ZXJz
aW9ucykKCiAgICAgICAgICAgICAgICBfcHkyZXhlLnJ1bihzZWxmKQogICAg
ICAgICAgICAgICAgb3MudW5saW5rKHRhcmdldF92ZXJzaW9uZmlsZSkKICAg
ICAgICAgICAgICAgIHdpdGggb3BlbihjZmcudmVyc2lvbmZpbGVfc291cmNl
LCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgTE9ORyA9IExPTkdf
VkVSU0lPTl9QWVtjZmcuVkNTXQogICAgICAgICAgICAgICAgICAgIGYud3Jp
dGUoTE9ORyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IkRPTExB
UiI6ICIkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1RZTEUi
OiBjZmcuc3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRB
R19QUkVGSVgiOiBjZmcudGFnX3ByZWZpeCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiUEFSRU5URElSX1BSRUZJWCI6IGNmZy5wYXJlbnRkaXJf
cHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWRVJTSU9O
RklMRV9TT1VSQ0UiOiBjZmcudmVyc2lvbmZpbGVfc291cmNlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgY21kc1sicHkyZXhl
Il0gPSBjbWRfcHkyZXhlCgogICAgIyB3ZSBvdmVycmlkZSBkaWZmZXJlbnQg
InNkaXN0IiBjb21tYW5kcyBmb3IgYm90aCBlbnZpcm9ubWVudHMKICAgIGlm
ICJzZXR1cHRvb2xzIiBpbiBzeXMubW9kdWxlczoKICAgICAgICBmcm9tIHNl
dHVwdG9vbHMuY29tbWFuZC5zZGlzdCBpbXBvcnQgc2Rpc3QgYXMgX3NkaXN0
CiAgICBlbHNlOgogICAgICAgIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuc2Rp
c3QgaW1wb3J0IHNkaXN0IGFzIF9zZGlzdAoKICAgIGNsYXNzIGNtZF9zZGlz
dChfc2Rpc3QpOgogICAgICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgICAg
IHZlcnNpb25zID0gZ2V0X3ZlcnNpb25zKCkKICAgICAgICAgICAgc2VsZi5f
dmVyc2lvbmVlcl9nZW5lcmF0ZWRfdmVyc2lvbnMgPSB2ZXJzaW9ucwogICAg
ICAgICAgICAjIHVubGVzcyB3ZSB1cGRhdGUgdGhpcywgdGhlIGNvbW1hbmQg
d2lsbCBrZWVwIHVzaW5nIHRoZSBvbGQKICAgICAgICAgICAgIyB2ZXJzaW9u
CiAgICAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLm1ldGFkYXRhLnZlcnNp
b24gPSB2ZXJzaW9uc1sidmVyc2lvbiJdCiAgICAgICAgICAgIHJldHVybiBf
c2Rpc3QucnVuKHNlbGYpCgogICAgICAgIGRlZiBtYWtlX3JlbGVhc2VfdHJl
ZShzZWxmLCBiYXNlX2RpciwgZmlsZXMpOgogICAgICAgICAgICByb290ID0g
Z2V0X3Jvb3QoKQogICAgICAgICAgICBjZmcgPSBnZXRfY29uZmlnX2Zyb21f
cm9vdChyb290KQogICAgICAgICAgICBfc2Rpc3QubWFrZV9yZWxlYXNlX3Ry
ZWUoc2VsZiwgYmFzZV9kaXIsIGZpbGVzKQogICAgICAgICAgICAjIG5vdyBs
b2NhdGUgX3ZlcnNpb24ucHkgaW4gdGhlIG5ldyBiYXNlX2RpciBkaXJlY3Rv
cnkKICAgICAgICAgICAgIyAocmVtZW1iZXJpbmcgdGhhdCBpdCBtYXkgYmUg
YSBoYXJkbGluaykgYW5kIHJlcGxhY2UgaXQgd2l0aCBhbgogICAgICAgICAg
ICAjIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAgdGFyZ2V0X3ZlcnNpb25m
aWxlID0gb3MucGF0aC5qb2luKGJhc2VfZGlyLCBjZmcudmVyc2lvbmZpbGVf
c291cmNlKQogICAgICAgICAgICBwcmludCgiVVBEQVRJTkcgJXMiICUgdGFy
Z2V0X3ZlcnNpb25maWxlKQogICAgICAgICAgICB3cml0ZV90b192ZXJzaW9u
X2ZpbGUodGFyZ2V0X3ZlcnNpb25maWxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fdmVyc2lvbmVlcl9nZW5lcmF0ZWRfdmVy
c2lvbnMpCiAgICBjbWRzWyJzZGlzdCJdID0gY21kX3NkaXN0CgogICAgcmV0
dXJuIGNtZHMKCgpDT05GSUdfRVJST1IgPSAiIiIKc2V0dXAuY2ZnIGlzIG1p
c3NpbmcgdGhlIG5lY2Vzc2FyeSBWZXJzaW9uZWVyIGNvbmZpZ3VyYXRpb24u
IFlvdSBuZWVkCmEgc2VjdGlvbiBsaWtlOgoKIFt2ZXJzaW9uZWVyXQogVkNT
ID0gZ2l0CiBzdHlsZSA9IHBlcDQ0MAogdmVyc2lvbmZpbGVfc291cmNlID0g
c3JjL215cHJvamVjdC9fdmVyc2lvbi5weQogdmVyc2lvbmZpbGVfYnVpbGQg
PSBteXByb2plY3QvX3ZlcnNpb24ucHkKIHRhZ19wcmVmaXggPQogcGFyZW50
ZGlyX3ByZWZpeCA9IG15cHJvamVjdC0KCllvdSB3aWxsIGFsc28gbmVlZCB0
byBlZGl0IHlvdXIgc2V0dXAucHkgdG8gdXNlIHRoZSByZXN1bHRzOgoKIGlt
cG9ydCB2ZXJzaW9uZWVyCiBzZXR1cCh2ZXJzaW9uPXZlcnNpb25lZXIuZ2V0
X3ZlcnNpb24oKSwKICAgICAgIGNtZGNsYXNzPXZlcnNpb25lZXIuZ2V0X2Nt
ZGNsYXNzKCksIC4uLikKClBsZWFzZSByZWFkIHRoZSBkb2NzdHJpbmcgaW4g
Li92ZXJzaW9uZWVyLnB5IGZvciBjb25maWd1cmF0aW9uIGluc3RydWN0aW9u
cywKZWRpdCBzZXR1cC5jZmcsIGFuZCByZS1ydW4gdGhlIGluc3RhbGxlciBv
ciAncHl0aG9uIHZlcnNpb25lZXIucHkgc2V0dXAnLgoiIiIKClNBTVBMRV9D
T05GSUcgPSAiIiIKIyBTZWUgdGhlIGRvY3N0cmluZyBpbiB2ZXJzaW9uZWVy
LnB5IGZvciBpbnN0cnVjdGlvbnMuIE5vdGUgdGhhdCB5b3UgbXVzdAojIHJl
LXJ1biAndmVyc2lvbmVlci5weSBzZXR1cCcgYWZ0ZXIgY2hhbmdpbmcgdGhp
cyBzZWN0aW9uLCBhbmQgY29tbWl0IHRoZQojIHJlc3VsdGluZyBmaWxlcy4K
Clt2ZXJzaW9uZWVyXQojVkNTID0gZ2l0CiNzdHlsZSA9IHBlcDQ0MAojdmVy
c2lvbmZpbGVfc291cmNlID0KI3ZlcnNpb25maWxlX2J1aWxkID0KI3RhZ19w
cmVmaXggPQojcGFyZW50ZGlyX3ByZWZpeCA9CgoiIiIKCklOSVRfUFlfU05J
UFBFVCA9ICIiIgpmcm9tIC5fdmVyc2lvbiBpbXBvcnQgZ2V0X3ZlcnNpb25z
Cl9fdmVyc2lvbl9fID0gZ2V0X3ZlcnNpb25zKClbJ3ZlcnNpb24nXQpkZWwg
Z2V0X3ZlcnNpb25zCiIiIgoKCmRlZiBkb19zZXR1cCgpOgogICAgIiIiTWFp
biBWQ1MtaW5kZXBlbmRlbnQgc2V0dXAgZnVuY3Rpb24gZm9yIGluc3RhbGxp
bmcgVmVyc2lvbmVlci4iIiIKICAgIHJvb3QgPSBnZXRfcm9vdCgpCiAgICB0
cnk6CiAgICAgICAgY2ZnID0gZ2V0X2NvbmZpZ19mcm9tX3Jvb3Qocm9vdCkK
ICAgIGV4Y2VwdCAoRW52aXJvbm1lbnRFcnJvciwgY29uZmlncGFyc2VyLk5v
U2VjdGlvbkVycm9yLAogICAgICAgICAgICBjb25maWdwYXJzZXIuTm9PcHRp
b25FcnJvcikgYXMgZToKICAgICAgICBpZiBpc2luc3RhbmNlKGUsIChFbnZp
cm9ubWVudEVycm9yLCBjb25maWdwYXJzZXIuTm9TZWN0aW9uRXJyb3IpKToK
ICAgICAgICAgICAgcHJpbnQoIkFkZGluZyBzYW1wbGUgdmVyc2lvbmVlciBj
b25maWcgdG8gc2V0dXAuY2ZnIiwKICAgICAgICAgICAgICAgICAgZmlsZT1z
eXMuc3RkZXJyKQogICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2lu
KHJvb3QsICJzZXR1cC5jZmciKSwgImEiKSBhcyBmOgogICAgICAgICAgICAg
ICAgZi53cml0ZShTQU1QTEVfQ09ORklHKQogICAgICAgIHByaW50KENPTkZJ
R19FUlJPUiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIHJldHVybiAxCgog
ICAgcHJpbnQoIiBjcmVhdGluZyAlcyIgJSBjZmcudmVyc2lvbmZpbGVfc291
cmNlKQogICAgd2l0aCBvcGVuKGNmZy52ZXJzaW9uZmlsZV9zb3VyY2UsICJ3
IikgYXMgZjoKICAgICAgICBMT05HID0gTE9OR19WRVJTSU9OX1BZW2NmZy5W
Q1NdCiAgICAgICAgZi53cml0ZShMT05HICUgeyJET0xMQVIiOiAiJCIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICJTVFlMRSI6IGNmZy5zdHlsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIlRBR19QUkVGSVgiOiBjZmcudGFnX3By
ZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgIlBBUkVOVERJUl9QUkVG
SVgiOiBjZmcucGFyZW50ZGlyX3ByZWZpeCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIlZFUlNJT05GSUxFX1NPVVJDRSI6IGNmZy52ZXJzaW9uZmlsZV9z
b3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pCgogICAgaXB5ID0g
b3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShjZmcudmVyc2lvbmZpbGVf
c291cmNlKSwKICAgICAgICAgICAgICAgICAgICAgICAiX19pbml0X18ucHki
KQogICAgaWYgb3MucGF0aC5leGlzdHMoaXB5KToKICAgICAgICB0cnk6CiAg
ICAgICAgICAgIHdpdGggb3BlbihpcHksICJyIikgYXMgZjoKICAgICAgICAg
ICAgICAgIG9sZCA9IGYucmVhZCgpCiAgICAgICAgZXhjZXB0IEVudmlyb25t
ZW50RXJyb3I6CiAgICAgICAgICAgIG9sZCA9ICIiCiAgICAgICAgaWYgSU5J
VF9QWV9TTklQUEVUIG5vdCBpbiBvbGQ6CiAgICAgICAgICAgIHByaW50KCIg
YXBwZW5kaW5nIHRvICVzIiAlIGlweSkKICAgICAgICAgICAgd2l0aCBvcGVu
KGlweSwgImEiKSBhcyBmOgogICAgICAgICAgICAgICAgZi53cml0ZShJTklU
X1BZX1NOSVBQRVQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQo
IiAlcyB1bm1vZGlmaWVkIiAlIGlweSkKICAgIGVsc2U6CiAgICAgICAgcHJp
bnQoIiAlcyBkb2Vzbid0IGV4aXN0LCBvayIgJSBpcHkpCiAgICAgICAgaXB5
ID0gTm9uZQoKICAgICMgTWFrZSBzdXJlIGJvdGggdGhlIHRvcC1sZXZlbCAi
dmVyc2lvbmVlci5weSIgYW5kIHZlcnNpb25maWxlX3NvdXJjZQogICAgIyAo
UEtHL192ZXJzaW9uLnB5LCB1c2VkIGJ5IHJ1bnRpbWUgY29kZSkgYXJlIGlu
IE1BTklGRVNULmluLCBzbwogICAgIyB0aGV5J2xsIGJlIGNvcGllZCBpbnRv
IHNvdXJjZSBkaXN0cmlidXRpb25zLiBQaXAgd29uJ3QgYmUgYWJsZSB0bwog
ICAgIyBpbnN0YWxsIHRoZSBwYWNrYWdlIHdpdGhvdXQgdGhpcy4KICAgIG1h
bmlmZXN0X2luID0gb3MucGF0aC5qb2luKHJvb3QsICJNQU5JRkVTVC5pbiIp
CiAgICBzaW1wbGVfaW5jbHVkZXMgPSBzZXQoKQogICAgdHJ5OgogICAgICAg
IHdpdGggb3BlbihtYW5pZmVzdF9pbiwgInIiKSBhcyBmOgogICAgICAgICAg
ICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgaWYgbGluZS5zdGFy
dHN3aXRoKCJpbmNsdWRlICIpOgogICAgICAgICAgICAgICAgICAgIGZvciBp
bmNsdWRlIGluIGxpbmUuc3BsaXQoKVsxOl06CiAgICAgICAgICAgICAgICAg
ICAgICAgIHNpbXBsZV9pbmNsdWRlcy5hZGQoaW5jbHVkZSkKICAgIGV4Y2Vw
dCBFbnZpcm9ubWVudEVycm9yOgogICAgICAgIHBhc3MKICAgICMgVGhhdCBk
b2Vzbid0IGNvdmVyIGV2ZXJ5dGhpbmcgTUFOSUZFU1QuaW4gY2FuIGRvCiAg
ICAjIChodHRwOi8vZG9jcy5weXRob24ub3JnLzIvZGlzdHV0aWxzL3NvdXJj
ZWRpc3QuaHRtbCNjb21tYW5kcyksIHNvCiAgICAjIGl0IG1pZ2h0IGdpdmUg
c29tZSBmYWxzZSBuZWdhdGl2ZXMuIEFwcGVuZGluZyByZWR1bmRhbnQgJ2lu
Y2x1ZGUnCiAgICAjIGxpbmVzIGlzIHNhZmUsIHRob3VnaC4KICAgIGlmICJ2
ZXJzaW9uZWVyLnB5IiBub3QgaW4gc2ltcGxlX2luY2x1ZGVzOgogICAgICAg
IHByaW50KCIgYXBwZW5kaW5nICd2ZXJzaW9uZWVyLnB5JyB0byBNQU5JRkVT
VC5pbiIpCiAgICAgICAgd2l0aCBvcGVuKG1hbmlmZXN0X2luLCAiYSIpIGFz
IGY6CiAgICAgICAgICAgIGYud3JpdGUoImluY2x1ZGUgdmVyc2lvbmVlci5w
eVxuIikKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoIiAndmVyc2lvbmVlci5w
eScgYWxyZWFkeSBpbiBNQU5JRkVTVC5pbiIpCiAgICBpZiBjZmcudmVyc2lv
bmZpbGVfc291cmNlIG5vdCBpbiBzaW1wbGVfaW5jbHVkZXM6CiAgICAgICAg
cHJpbnQoIiBhcHBlbmRpbmcgdmVyc2lvbmZpbGVfc291cmNlICgnJXMnKSB0
byBNQU5JRkVTVC5pbiIgJQogICAgICAgICAgICAgIGNmZy52ZXJzaW9uZmls
ZV9zb3VyY2UpCiAgICAgICAgd2l0aCBvcGVuKG1hbmlmZXN0X2luLCAiYSIp
IGFzIGY6CiAgICAgICAgICAgIGYud3JpdGUoImluY2x1ZGUgJXNcbiIgJSBj
ZmcudmVyc2lvbmZpbGVfc291cmNlKQogICAgZWxzZToKICAgICAgICBwcmlu
dCgiIHZlcnNpb25maWxlX3NvdXJjZSBhbHJlYWR5IGluIE1BTklGRVNULmlu
IikKCiAgICAjIE1ha2UgVkNTLXNwZWNpZmljIGNoYW5nZXMuIEZvciBnaXQs
IHRoaXMgbWVhbnMgY3JlYXRpbmcvY2hhbmdpbmcKICAgICMgLmdpdGF0dHJp
YnV0ZXMgdG8gbWFyayBfdmVyc2lvbi5weSBmb3IgZXhwb3J0LXN1YnN0IGtl
eXdvcmQKICAgICMgc3Vic3RpdHV0aW9uLgogICAgZG9fdmNzX2luc3RhbGwo
bWFuaWZlc3RfaW4sIGNmZy52ZXJzaW9uZmlsZV9zb3VyY2UsIGlweSkKICAg
IHJldHVybiAwCgoKZGVmIHNjYW5fc2V0dXBfcHkoKToKICAgICIiIlZhbGlk
YXRlIHRoZSBjb250ZW50cyBvZiBzZXR1cC5weSBhZ2FpbnN0IFZlcnNpb25l
ZXIncyBleHBlY3RhdGlvbnMuIiIiCiAgICBmb3VuZCA9IHNldCgpCiAgICBz
ZXR0ZXJzID0gRmFsc2UKICAgIGVycm9ycyA9IDAKICAgIHdpdGggb3Blbigi
c2V0dXAucHkiLCAiciIpIGFzIGY6CiAgICAgICAgZm9yIGxpbmUgaW4gZi5y
ZWFkbGluZXMoKToKICAgICAgICAgICAgaWYgImltcG9ydCB2ZXJzaW9uZWVy
IiBpbiBsaW5lOgogICAgICAgICAgICAgICAgZm91bmQuYWRkKCJpbXBvcnQi
KQogICAgICAgICAgICBpZiAidmVyc2lvbmVlci5nZXRfY21kY2xhc3MoKSIg
aW4gbGluZToKICAgICAgICAgICAgICAgIGZvdW5kLmFkZCgiY21kY2xhc3Mi
KQogICAgICAgICAgICBpZiAidmVyc2lvbmVlci5nZXRfdmVyc2lvbigpIiBp
biBsaW5lOgogICAgICAgICAgICAgICAgZm91bmQuYWRkKCJnZXRfdmVyc2lv
biIpCiAgICAgICAgICAgIGlmICJ2ZXJzaW9uZWVyLlZDUyIgaW4gbGluZToK
ICAgICAgICAgICAgICAgIHNldHRlcnMgPSBUcnVlCiAgICAgICAgICAgIGlm
ICJ2ZXJzaW9uZWVyLnZlcnNpb25maWxlX3NvdXJjZSIgaW4gbGluZToKICAg
ICAgICAgICAgICAgIHNldHRlcnMgPSBUcnVlCiAgICBpZiBsZW4oZm91bmQp
ICE9IDM6CiAgICAgICAgcHJpbnQoIiIpCiAgICAgICAgcHJpbnQoIllvdXIg
c2V0dXAucHkgYXBwZWFycyB0byBiZSBtaXNzaW5nIHNvbWUgaW1wb3J0YW50
IGl0ZW1zIikKICAgICAgICBwcmludCgiKGJ1dCBJIG1pZ2h0IGJlIHdyb25n
KS4gUGxlYXNlIG1ha2Ugc3VyZSBpdCBoYXMgc29tZXRoaW5nIikKICAgICAg
ICBwcmludCgicm91Z2hseSBsaWtlIHRoZSBmb2xsb3dpbmc6IikKICAgICAg
ICBwcmludCgiIikKICAgICAgICBwcmludCgiIGltcG9ydCB2ZXJzaW9uZWVy
IikKICAgICAgICBwcmludCgiIHNldHVwKCB2ZXJzaW9uPXZlcnNpb25lZXIu
Z2V0X3ZlcnNpb24oKSwiKQogICAgICAgIHByaW50KCIgICAgICAgIGNtZGNs
YXNzPXZlcnNpb25lZXIuZ2V0X2NtZGNsYXNzKCksICAuLi4pIikKICAgICAg
ICBwcmludCgiIikKICAgICAgICBlcnJvcnMgKz0gMQogICAgaWYgc2V0dGVy
czoKICAgICAgICBwcmludCgiWW91IHNob3VsZCByZW1vdmUgbGluZXMgbGlr
ZSAndmVyc2lvbmVlci5WQ1MgPSAnIGFuZCIpCiAgICAgICAgcHJpbnQoIid2
ZXJzaW9uZWVyLnZlcnNpb25maWxlX3NvdXJjZSA9ICcgLiBUaGlzIGNvbmZp
Z3VyYXRpb24iKQogICAgICAgIHByaW50KCJub3cgbGl2ZXMgaW4gc2V0dXAu
Y2ZnLCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBzZXR1cC5weSIpCiAg
ICAgICAgcHJpbnQoIiIpCiAgICAgICAgZXJyb3JzICs9IDEKICAgIHJldHVy
biBlcnJvcnMKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBjbWQg
PSBzeXMuYXJndlsxXQogICAgaWYgY21kID09ICJzZXR1cCI6CiAgICAgICAg
ZXJyb3JzID0gZG9fc2V0dXAoKQogICAgICAgIGVycm9ycyArPSBzY2FuX3Nl
dHVwX3B5KCkKICAgICAgICBpZiBlcnJvcnM6CiAgICAgICAgICAgIHN5cy5l
eGl0KDEpCg==

"""
newver = "0.17"

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

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

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

v = base64.b64decode(VERSIONEER_b64.encode('ASCII'))
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")
