A Recommendation On Transparent IDLE (with code)

17317302007 <[email protected]> Fri, 6 Nov 2020 20:02:23 +0800
Newsgroups gmane.comp.python.idle
Message-ID <[email protected]>
--mailmaster-5fa53b4f_0_29
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64

PGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSdDb250ZW50LVR5cGUnIGNvbnRl
bnQ9J3RleHQvaHRtbDsgY2hhcnNldD1VVEYtOCc+DQo8L2hlYWQ+DQo8Ym9keT4NCjxzdHlsZT4N
CiAgICBmb250ew0KICAgICAgICBsaW5lLWhlaWdodDogMS42Ow0KICAgIH0NCiAgICB1bCxvbHsN
CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4Ow0KICAgICAgICBsaXN0LXN0eWxlLXBvc2l0aW9u
OiBpbnNpZGU7DQogICAgfQ0KPC9zdHlsZT4NCjxkaXYgc3R5bGUgPSAnZm9udC1mYW1pbHk65b6u
6L2v6ZuF6buRLFZlcmRhbmEsJnF1b3Q7TWljcm9zb2Z0IFlhaGVpJnF1b3Q7LFNpbVN1bixzYW5z
LXNlcmlmO2ZvbnQtc2l6ZToxNHB4OyBsaW5lLWhlaWdodDoxLjY7Jz4NCiAgICA8ZGl2ID48L2Rp
dj48ZGl2PgogICAgPGRpdj4KICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgPGJyPgogICAgICAg
IDwvc3Bhbj4KICAgIDwvZGl2PgogICAgPGRpdj5Db29sIElETEUgRGV2ZWxvcGVycyw8L2Rpdj48
ZGl2Pjxicj48L2Rpdj48ZGl2PkkgYW0gc29tZSBsaXR0bGUgdXNlciB3aG8gbG92ZXMgSURMRSAo
eEQpLiBXaGVuIEkgd2FzIHRha2luZyBvbmxpbmUgY291cnNlcywgSSB0aG91Z2h0IGl0IGlzIGJl
dHRlciBpZiBJIGNhbiB1c2UgYSBoYWxmLXRyYW5zcGFyZW50IHdpbmRvdyB0byBwcm9ncmFtLCB3
aGlsZSBoYXZpbmcgc291cmNlcyBvciB0ZWFjaGVycycgY29kZXMgaW4gdGhlIGJhY2tncm91bmQu
Jm5ic3A7PC9kaXY+PGRpdj4oYnR3IEkgdXNlIHRoZSAiUHl0aG9uIDMuNi42ICh2My42LjY6NGNm
MWY1NGViNywgSnVuIDI3IDIwMTgsIDAzOjM3OjAzKSBbTVNDIHYuMTkwMCA2NCBiaXQgKEFNRDY0
KV0gb24gd2luMzIiIGFuZCBJIGRvIG5vdCBrbm93IGlmIHRoYXQgZmVhdHVyZSBpcyBhbHJlYWR5
IHRoZXJlIGluIG5ld2VyIHZlcnNpb25zLik8L2Rpdj48ZGl2PkZvciB0aGF0IHJlYXNvbiwgSSB5
ZWV0ZWQgdGhyb3VnaCB0aGUgY29kZSBhbmQgYWRkZWQgYW4gIkFscGhhIiB0YWIgb24gdGhlIG1l
bnUgdG8gY2hhbmdlIHRoZSB0cmFuc3BhcmVuY3kgb2YgdGhlIGVkaXRvciwgYmVpbmcgbm9vYmlm
aWVkIGJ5IG15c2VsZiAoeWVhaCBJJ20gYSBub29iKS48L2Rpdj48ZGl2PkFjdHVhbGx5IEkganVz
dCBtYWRlIGxpdHRsZSBjaGFuZ2VzIHRvIHRoZSBjb2RlLi4uPC9kaXY+PGRpdj48YnI+PC9kaXY+
PGRpdj5UaGFua3MgZm9yIG1ha2luZyB0aGlzIElETEUgcHVyZSBQeXRob24gc28gSSBoYXZlIHRo
ZSBjaGFuY2UgdG8gZG8gdGhpcyE8L2Rpdj48ZGl2PnRoZSBlZGl0b3IucHkgaXMgYXR0YWNoZWQg
YmVsb3chPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5TaW5jZXJlbHksPC9kaXY+PGRpdj5Ub21t
eWVldG9vIHRoZSBOb29iPC9kaXY+CiAgICA8ZGl2IGlkPSJudGVzLXBjbWFjLXNpZ25hdHVyZSIg
c3R5bGU9ImZvbnQtZmFtaWx5Oiflvq7ova/pm4Xpu5EnIj4KICAgICAKICAgIDxkaXYgc3R5bGU9
ImZvbnQtc2l6ZToxNHB4OyBwYWRkaW5nOiAwOyAgbWFyZ2luOjA7bGluZS1oZWlnaHQ6MTRweDsi
PjxkaXYgc3R5bGU9InBhZGRpbmctYm90dG9tOjZweDttYXJnaW4tYm90dG9tOjEwcHg7Ym9yZGVy
LWJvdHRvbToxcHggc29saWQgI2U2ZTZlNjtkaXNwbGF5OmlubGluZS1ibG9jazsiPjxicj48L2Rp
dj48L2Rpdj4KIDwvZGl2Pgo8L2Rpdj48IS0t8J+YgC0tPg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0
bWw+

--mailmaster-5fa53b4f_0_29
Content-Type: text/plain; name="editor.py"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="editor.py"

aW1wb3J0IGltcG9ydGxpYi5hYmMNCmltcG9ydCBpbXBvcnRsaWIudXRpbA0KaW1wb3J0IG9zDQpp
bXBvcnQgcGxhdGZvcm0NCmltcG9ydCByZQ0KaW1wb3J0IHN0cmluZw0KaW1wb3J0IHN5cw0KaW1w
b3J0IHRva2VuaXplDQppbXBvcnQgdHJhY2ViYWNrDQppbXBvcnQgd2ViYnJvd3Nlcg0KDQpmcm9t
IHRraW50ZXIgaW1wb3J0ICoNCmZyb20gdGtpbnRlci50dGsgaW1wb3J0IFNjcm9sbGJhcg0KaW1w
b3J0IHRraW50ZXIuc2ltcGxlZGlhbG9nIGFzIHRrU2ltcGxlRGlhbG9nDQppbXBvcnQgdGtpbnRl
ci5tZXNzYWdlYm94IGFzIHRrTWVzc2FnZUJveA0KDQpmcm9tIGlkbGVsaWIuY29uZmlnIGltcG9y
dCBpZGxlQ29uZg0KZnJvbSBpZGxlbGliIGltcG9ydCBjb25maWdkaWFsb2cNCmZyb20gaWRsZWxp
YiBpbXBvcnQgZ3JlcA0KZnJvbSBpZGxlbGliIGltcG9ydCBoZWxwDQpmcm9tIGlkbGVsaWIgaW1w
b3J0IGhlbHBfYWJvdXQNCmZyb20gaWRsZWxpYiBpbXBvcnQgbWFjb3N4DQpmcm9tIGlkbGVsaWIu
bXVsdGljYWxsIGltcG9ydCBNdWx0aUNhbGxDcmVhdG9yDQpmcm9tIGlkbGVsaWIgaW1wb3J0IHB5
cGFyc2UNCmZyb20gaWRsZWxpYiBpbXBvcnQgcXVlcnkNCmZyb20gaWRsZWxpYiBpbXBvcnQgcmVw
bGFjZQ0KZnJvbSBpZGxlbGliIGltcG9ydCBzZWFyY2gNCmZyb20gaWRsZWxpYiBpbXBvcnQgd2lu
ZG93cw0KDQojIFRoZSBkZWZhdWx0IHRhYiBzZXR0aW5nIGZvciBhIFRleHQgd2lkZ2V0LCBpbiBh
dmVyYWdlLXdpZHRoIGNoYXJhY3RlcnMuDQpUS19UQUJXSURUSF9ERUZBVUxUID0gOA0KX3B5X3Zl
cnNpb24gPSAnICglcyknICUgcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKQ0KZGFyd2luID0gc3lz
LnBsYXRmb3JtID09ICdkYXJ3aW4nDQoNCmRlZiBfc3BoaW54X3ZlcnNpb24oKToNCiAgICAiRm9y
bWF0IHN5cy52ZXJzaW9uX2luZm8gdG8gcHJvZHVjZSB0aGUgU3BoaW54IHZlcnNpb24gc3RyaW5n
IHVzZWQgdG8gaW5zdGFsbCB0aGUgY2htIGRvY3MiDQogICAgbWFqb3IsIG1pbm9yLCBtaWNybywg
bGV2ZWwsIHNlcmlhbCA9IHN5cy52ZXJzaW9uX2luZm8NCiAgICByZWxlYXNlID0gJyVzJXMnICUg
KG1ham9yLCBtaW5vcikNCiAgICByZWxlYXNlICs9ICclcycgJSAobWljcm8sKQ0KICAgIGlmIGxl
dmVsID09ICdjYW5kaWRhdGUnOg0KICAgICAgICByZWxlYXNlICs9ICdyYyVzJyAlIChzZXJpYWws
KQ0KICAgIGVsaWYgbGV2ZWwgIT0gJ2ZpbmFsJzoNCiAgICAgICAgcmVsZWFzZSArPSAnJXMlcycg
JSAobGV2ZWxbMF0sIHNlcmlhbCkNCiAgICByZXR1cm4gcmVsZWFzZQ0KDQoNCmNsYXNzIEVkaXRv
cldpbmRvdyhvYmplY3QpOg0KICAgIGZyb20gaWRsZWxpYi5wZXJjb2xhdG9yIGltcG9ydCBQZXJj
b2xhdG9yDQogICAgZnJvbSBpZGxlbGliLmNvbG9yaXplciBpbXBvcnQgQ29sb3JEZWxlZ2F0b3Is
IGNvbG9yX2NvbmZpZw0KICAgIGZyb20gaWRsZWxpYi51bmRvIGltcG9ydCBVbmRvRGVsZWdhdG9y
DQogICAgZnJvbSBpZGxlbGliLmlvbWVudSBpbXBvcnQgSU9CaW5kaW5nLCBlbmNvZGluZw0KICAg
IGZyb20gaWRsZWxpYiBpbXBvcnQgbWFpbm1lbnUNCiAgICBmcm9tIHRraW50ZXIgaW1wb3J0IFRv
cGxldmVsLCBFdmVudFR5cGUNCiAgICBmcm9tIGlkbGVsaWIuc3RhdHVzYmFyIGltcG9ydCBNdWx0
aVN0YXR1c0Jhcg0KICAgIGZyb20gaWRsZWxpYi5hdXRvY29tcGxldGUgaW1wb3J0IEF1dG9Db21w
bGV0ZQ0KICAgIGZyb20gaWRsZWxpYi5hdXRvZXhwYW5kIGltcG9ydCBBdXRvRXhwYW5kDQogICAg
ZnJvbSBpZGxlbGliLmNhbGx0aXBzIGltcG9ydCBDYWxsVGlwcw0KICAgIGZyb20gaWRsZWxpYi5j
b2RlY29udGV4dCBpbXBvcnQgQ29kZUNvbnRleHQNCiAgICBmcm9tIGlkbGVsaWIucGFyYWdyYXBo
IGltcG9ydCBGb3JtYXRQYXJhZ3JhcGgNCiAgICBmcm9tIGlkbGVsaWIucGFyZW5tYXRjaCBpbXBv
cnQgUGFyZW5NYXRjaA0KICAgIGZyb20gaWRsZWxpYi5yc3RyaXAgaW1wb3J0IFJzdHJpcEV4dGVu
c2lvbg0KICAgIGZyb20gaWRsZWxpYi56b29taGVpZ2h0IGltcG9ydCBab29tSGVpZ2h0DQoNCiAg
ICBmaWxlc3lzdGVtZW5jb2RpbmcgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkgICMgZm9y
IGZpbGUgbmFtZXMNCiAgICBoZWxwX3VybCA9IE5vbmUNCg0KICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBmbGlzdD1Ob25lLCBmaWxlbmFtZT1Ob25lLCBrZXk9Tm9uZSwgcm9vdD1Ob25lKToNCiAgICAg
ICAgIyBEZWxheSBpbXBvcnQ6IHJ1bnNjcmlwdCBpbXBvcnRzIHB5c2hlbGwgaW1wb3J0cyBFZGl0
b3JXaW5kb3cuDQogICAgICAgIGZyb20gaWRsZWxpYi5ydW5zY3JpcHQgaW1wb3J0IFNjcmlwdEJp
bmRpbmcNCg0KICAgICAgICBpZiBFZGl0b3JXaW5kb3cuaGVscF91cmwgaXMgTm9uZToNCiAgICAg
ICAgICAgIGRvY2hvbWUgPSAgb3MucGF0aC5qb2luKHN5cy5iYXNlX3ByZWZpeCwgJ0RvYycsICdp
bmRleC5odG1sJykNCiAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5jb3VudCgnbGludXgnKToN
CiAgICAgICAgICAgICAgICAjIGxvb2sgZm9yIGh0bWwgZG9jcyBpbiBhIGNvdXBsZSBvZiBzdGFu
ZGFyZCBwbGFjZXMNCiAgICAgICAgICAgICAgICBweXZlciA9ICdweXRob24tZG9jcy0nICsgJyVz
LiVzLiVzJyAlIHN5cy52ZXJzaW9uX2luZm9bOjNdDQogICAgICAgICAgICAgICAgaWYgb3MucGF0
aC5pc2RpcignL3Zhci93d3cvaHRtbC9weXRob24vJyk6ICAjICJweXRob24yIiBycG0NCiAgICAg
ICAgICAgICAgICAgICAgZG9jaG9tZSA9ICcvdmFyL3d3dy9odG1sL3B5dGhvbi9pbmRleC5odG1s
Jw0KICAgICAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgICAgIGJhc2VwYXRoID0g
Jy91c3Ivc2hhcmUvZG9jLycgICMgc3RhbmRhcmQgbG9jYXRpb24NCiAgICAgICAgICAgICAgICAg
ICAgZG9jaG9tZSA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgcHl2ZXIsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RvYycsICdpbmRleC5odG1sJykNCiAgICAg
ICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoNCiAgICAgICAgICAgICAgICBj
aG1maWxlID0gb3MucGF0aC5qb2luKHN5cy5iYXNlX3ByZWZpeCwgJ0RvYycsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHl0aG9uJXMuY2htJyAlIF9zcGhpbnhfdmVy
c2lvbigpKQ0KICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNobWZpbGUpOg0KICAg
ICAgICAgICAgICAgICAgICBkb2Nob21lID0gY2htZmlsZQ0KICAgICAgICAgICAgZWxpZiBzeXMu
cGxhdGZvcm0gPT0gJ2Rhcndpbic6DQogICAgICAgICAgICAgICAgIyBkb2N1bWVudGF0aW9uIG1h
eSBiZSBzdG9yZWQgaW5zaWRlIGEgcHl0aG9uIGZyYW1ld29yaw0KICAgICAgICAgICAgICAgIGRv
Y2hvbWUgPSBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfcHJlZml4LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgJ1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vaW5kZXguaHRtbCcp
DQogICAgICAgICAgICBkb2Nob21lID0gb3MucGF0aC5ub3JtcGF0aChkb2Nob21lKQ0KICAgICAg
ICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZG9jaG9tZSk6DQogICAgICAgICAgICAgICAgRWRpdG9y
V2luZG93LmhlbHBfdXJsID0gZG9jaG9tZQ0KICAgICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9y
bSA9PSAnZGFyd2luJzoNCiAgICAgICAgICAgICAgICAgICAgIyBTYWZhcmkgcmVxdWlyZXMgcmVh
bCBmaWxlOi1VUkxzDQogICAgICAgICAgICAgICAgICAgIEVkaXRvcldpbmRvdy5oZWxwX3VybCA9
ICdmaWxlOi8vJyArIEVkaXRvcldpbmRvdy5oZWxwX3VybA0KICAgICAgICAgICAgZWxzZToNCiAg
ICAgICAgICAgICAgICBFZGl0b3JXaW5kb3cuaGVscF91cmwgPSAoImh0dHBzOi8vZG9jcy5weXRo
b24ub3JnLyVkLiVkLyINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JSBzeXMudmVyc2lvbl9pbmZvWzoyXSkNCiAgICAgICAgc2VsZi5mbGlzdCA9IGZsaXN0DQogICAg
ICAgIHJvb3QgPSByb290IG9yIGZsaXN0LnJvb3QNCiAgICAgICAgc2VsZi5yb290ID0gcm9vdA0K
ICAgICAgICBzZWxmLm1lbnViYXIgPSBNZW51KHJvb3QpDQogICAgICAgIHNlbGYudG9wID0gdG9w
ID0gd2luZG93cy5MaXN0ZWRUb3BsZXZlbChyb290LCBtZW51PXNlbGYubWVudWJhcikNCiAgICAg
ICAgaWYgZmxpc3Q6DQogICAgICAgICAgICBzZWxmLnRraW50ZXJfdmFycyA9IGZsaXN0LnZhcnMN
CiAgICAgICAgICAgICNzZWxmLnRvcC5pbnN0YW5jZV9kaWN0IG1ha2VzIGZsaXN0LmludmVyc2Vk
aWN0IGF2YWlsYWJsZSB0bw0KICAgICAgICAgICAgI2NvbmZpZ2RpYWxvZy5weSBzbyBpdCBjYW4g
YWNjZXNzIGFsbCBFZGl0b3JXaW5kb3cgaW5zdGFuY2VzDQogICAgICAgICAgICBzZWxmLnRvcC5p
bnN0YW5jZV9kaWN0ID0gZmxpc3QuaW52ZXJzZWRpY3QNCiAgICAgICAgZWxzZToNCiAgICAgICAg
ICAgIHNlbGYudGtpbnRlcl92YXJzID0ge30gICMga2V5czogVGtpbnRlciBldmVudCBuYW1lcw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2YWx1ZXM6IFRraW50ZXIgdmFy
aWFibGUgaW5zdGFuY2VzDQogICAgICAgICAgICBzZWxmLnRvcC5pbnN0YW5jZV9kaWN0ID0ge30N
CiAgICAgICAgc2VsZi5yZWNlbnRfZmlsZXNfcGF0aCA9IG9zLnBhdGguam9pbigNCiAgICAgICAg
ICAgICAgICBpZGxlQ29uZi51c2VyZGlyLCAncmVjZW50LWZpbGVzLmxzdCcpDQoNCiAgICAgICAg
c2VsZi5wcm9tcHRfbGFzdF9saW5lID0gJycgICMgT3ZlcnJpZGUgaW4gUHlTaGVsbA0KICAgICAg
ICBzZWxmLnRleHRfZnJhbWUgPSB0ZXh0X2ZyYW1lID0gRnJhbWUodG9wKQ0KICAgICAgICBzZWxm
LnZiYXIgPSB2YmFyID0gU2Nyb2xsYmFyKHRleHRfZnJhbWUsIG5hbWU9J3ZiYXInKQ0KICAgICAg
ICBzZWxmLndpZHRoID0gaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywgJ0VkaXRvcldpbmRvdycs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJywgdHlwZT0n
aW50JykNCiAgICAgICAgdGV4dF9vcHRpb25zID0gew0KICAgICAgICAgICAgICAgICduYW1lJzog
J3RleHQnLA0KICAgICAgICAgICAgICAgICdwYWR4JzogNSwNCiAgICAgICAgICAgICAgICAnd3Jh
cCc6ICdub25lJywNCiAgICAgICAgICAgICAgICAnaGlnaGxpZ2h0dGhpY2tuZXNzJzogMCwNCiAg
ICAgICAgICAgICAgICAnd2lkdGgnOiBzZWxmLndpZHRoLA0KICAgICAgICAgICAgICAgICd0YWJz
dHlsZSc6ICd3b3JkcHJvY2Vzc29yJywgICMgbmV3IGluIDguNQ0KICAgICAgICAgICAgICAgICdo
ZWlnaHQnOiBpZGxlQ29uZi5HZXRPcHRpb24oDQogICAgICAgICAgICAgICAgICAgICAgICAnbWFp
bicsICdFZGl0b3JXaW5kb3cnLCAnaGVpZ2h0JywgdHlwZT0naW50JyksDQogICAgICAgICAgICAg
ICAgfQ0KICAgICAgICBzZWxmLnRleHQgPSB0ZXh0ID0gTXVsdGlDYWxsQ3JlYXRvcihUZXh0KSh0
ZXh0X2ZyYW1lLCAqKnRleHRfb3B0aW9ucykNCiAgICAgICAgc2VsZi50b3AuZm9jdXNlZF93aWRn
ZXQgPSBzZWxmLnRleHQNCg0KICAgICAgICBzZWxmLmNyZWF0ZW1lbnViYXIoKQ0KICAgICAgICBz
ZWxmLmFwcGx5X2JpbmRpbmdzKCkNCg0KICAgICAgICBzZWxmLnRvcC5wcm90b2NvbCgiV01fREVM
RVRFX1dJTkRPVyIsIHNlbGYuY2xvc2UpDQogICAgICAgIHNlbGYudG9wLmJpbmQoIjw8Y2xvc2Ut
d2luZG93Pj4iLCBzZWxmLmNsb3NlX2V2ZW50KQ0KICAgICAgICBpZiBtYWNvc3guaXNBcXVhVGso
KToNCiAgICAgICAgICAgICMgQ29tbWFuZC1XIG9uIGVkaXRvcndpbmRvd3MgZG9lc24ndCB3b3Jr
IHdpdGhvdXQgdGhpcy4NCiAgICAgICAgICAgIHRleHQuYmluZCgnPDxjbG9zZS13aW5kb3c+Pics
IHNlbGYuY2xvc2VfZXZlbnQpDQogICAgICAgICAgICAjIFNvbWUgT1MgWCBzeXN0ZW1zIGhhdmUg
b25seSBvbmUgbW91c2UgYnV0dG9uLCBzbyB1c2UNCiAgICAgICAgICAgICMgY29udHJvbC1jbGlj
ayBmb3IgcG9wdXAgY29udGV4dCBtZW51cyB0aGVyZS4gRm9yIHR3bw0KICAgICAgICAgICAgIyBi
dXR0b25zLCBBcXVhVGsgZGVmaW5lcyA8Mj4gYXMgdGhlIHJpZ2h0IGJ1dHRvbiwgbm90IDwzPi4N
CiAgICAgICAgICAgIHRleHQuYmluZCgiPENvbnRyb2wtQnV0dG9uLTE+IixzZWxmLnJpZ2h0X21l
bnVfZXZlbnQpDQogICAgICAgICAgICB0ZXh0LmJpbmQoIjwyPiIsIHNlbGYucmlnaHRfbWVudV9l
dmVudCkNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgICMgRWxzZXdoZXJlLCB1c2UgcmlnaHQt
Y2xpY2sgZm9yIHBvcHVwIG1lbnVzLg0KICAgICAgICAgICAgdGV4dC5iaW5kKCI8Mz4iLHNlbGYu
cmlnaHRfbWVudV9ldmVudCkNCiAgICAgICAgdGV4dC5iaW5kKCc8TW91c2VXaGVlbD4nLCBzZWxm
Lm1vdXNlc2Nyb2xsKQ0KICAgICAgICB0ZXh0LmJpbmQoJzxCdXR0b24tND4nLCBzZWxmLm1vdXNl
c2Nyb2xsKQ0KICAgICAgICB0ZXh0LmJpbmQoJzxCdXR0b24tNT4nLCBzZWxmLm1vdXNlc2Nyb2xs
KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8Y3V0Pj4iLCBzZWxmLmN1dCkNCiAgICAgICAgdGV4dC5i
aW5kKCI8PGNvcHk+PiIsIHNlbGYuY29weSkNCiAgICAgICAgdGV4dC5iaW5kKCI8PHBhc3RlPj4i
LCBzZWxmLnBhc3RlKQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8Y2VudGVyLWluc2VydD4+Iiwgc2Vs
Zi5jZW50ZXJfaW5zZXJ0X2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8aGVscD4+Iiwgc2Vs
Zi5oZWxwX2RpYWxvZykNCiAgICAgICAgdGV4dC5iaW5kKCI8PHB5dGhvbi1kb2NzPj4iLCBzZWxm
LnB5dGhvbl9kb2NzKQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8YWJvdXQtaWRsZT4+Iiwgc2VsZi5h
Ym91dF9kaWFsb2cpDQogICAgICAgIHRleHQuYmluZCgiPDxvcGVuLWNvbmZpZy1kaWFsb2c+PiIs
IHNlbGYuY29uZmlnX2RpYWxvZykNCiAgICAgICAgdGV4dC5iaW5kKCI8PG9wZW4tbW9kdWxlPj4i
LCBzZWxmLm9wZW5fbW9kdWxlX2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8ZG8tbm90aGlu
Zz4+IiwgbGFtYmRhIGV2ZW50OiAiYnJlYWsiKQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8c2VsZWN0
LWFsbD4+Iiwgc2VsZi5zZWxlY3RfYWxsKQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8cmVtb3ZlLXNl
bGVjdGlvbj4+Iiwgc2VsZi5yZW1vdmVfc2VsZWN0aW9uKQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8
ZmluZD4+Iiwgc2VsZi5maW5kX2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8ZmluZC1hZ2Fp
bj4+Iiwgc2VsZi5maW5kX2FnYWluX2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8ZmluZC1p
bi1maWxlcz4+Iiwgc2VsZi5maW5kX2luX2ZpbGVzX2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQo
Ijw8ZmluZC1zZWxlY3Rpb24+PiIsIHNlbGYuZmluZF9zZWxlY3Rpb25fZXZlbnQpDQogICAgICAg
IHRleHQuYmluZCgiPDxyZXBsYWNlPj4iLCBzZWxmLnJlcGxhY2VfZXZlbnQpDQogICAgICAgIHRl
eHQuYmluZCgiPDxnb3RvLWxpbmU+PiIsIHNlbGYuZ290b19saW5lX2V2ZW50KQ0KICAgICAgICB0
ZXh0LmJpbmQoIjw8c21hcnQtYmFja3NwYWNlPj4iLHNlbGYuc21hcnRfYmFja3NwYWNlX2V2ZW50
KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8bmV3bGluZS1hbmQtaW5kZW50Pj4iLHNlbGYubmV3bGlu
ZV9hbmRfaW5kZW50X2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8c21hcnQtaW5kZW50Pj4i
LHNlbGYuc21hcnRfaW5kZW50X2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8aW5kZW50LXJl
Z2lvbj4+IixzZWxmLmluZGVudF9yZWdpb25fZXZlbnQpDQogICAgICAgIHRleHQuYmluZCgiPDxk
ZWRlbnQtcmVnaW9uPj4iLHNlbGYuZGVkZW50X3JlZ2lvbl9ldmVudCkNCiAgICAgICAgdGV4dC5i
aW5kKCI8PGNvbW1lbnQtcmVnaW9uPj4iLHNlbGYuY29tbWVudF9yZWdpb25fZXZlbnQpDQogICAg
ICAgIHRleHQuYmluZCgiPDx1bmNvbW1lbnQtcmVnaW9uPj4iLHNlbGYudW5jb21tZW50X3JlZ2lv
bl9ldmVudCkNCiAgICAgICAgdGV4dC5iaW5kKCI8PHRhYmlmeS1yZWdpb24+PiIsc2VsZi50YWJp
ZnlfcmVnaW9uX2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8dW50YWJpZnktcmVnaW9uPj4i
LHNlbGYudW50YWJpZnlfcmVnaW9uX2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8dG9nZ2xl
LXRhYnM+PiIsc2VsZi50b2dnbGVfdGFic19ldmVudCkNCiAgICAgICAgdGV4dC5iaW5kKCI8PGNo
YW5nZS1pbmRlbnR3aWR0aD4+IixzZWxmLmNoYW5nZV9pbmRlbnR3aWR0aF9ldmVudCkNCiAgICAg
ICAgdGV4dC5iaW5kKCI8TGVmdD4iLCBzZWxmLm1vdmVfYXRfZWRnZV9pZl9zZWxlY3Rpb24oMCkp
DQogICAgICAgIHRleHQuYmluZCgiPFJpZ2h0PiIsIHNlbGYubW92ZV9hdF9lZGdlX2lmX3NlbGVj
dGlvbigxKSkNCiAgICAgICAgdGV4dC5iaW5kKCI8PGRlbC13b3JkLWxlZnQ+PiIsIHNlbGYuZGVs
X3dvcmRfbGVmdCkNCiAgICAgICAgdGV4dC5iaW5kKCI8PGRlbC13b3JkLXJpZ2h0Pj4iLCBzZWxm
LmRlbF93b3JkX3JpZ2h0KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8YmVnaW5uaW5nLW9mLWxpbmU+
PiIsIHNlbGYuaG9tZV9jYWxsYmFjaykNCiAgICAgICAgdGV4dC5iaW5kKCI8PGFscGhhLTA+PiIs
IGxhbWJkYSBldmVudDogc2VsZi50b3AuYXR0cmlidXRlcygiLWFscGhhIiwxKSkNCiAgICAgICAg
dGV4dC5iaW5kKCI8PGFscGhhLTE+PiIsIGxhbWJkYSBldmVudDogc2VsZi50b3AuYXR0cmlidXRl
cygiLWFscGhhIiwwLjgpKQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8YWxwaGEtMj4+IiwgbGFtYmRh
IGV2ZW50OiBzZWxmLnRvcC5hdHRyaWJ1dGVzKCItYWxwaGEiLDAuNikpDQogICAgICAgIHRleHQu
YmluZCgiPDxhbHBoYS0zPj4iLCBsYW1iZGEgZXZlbnQ6IHNlbGYudG9wLmF0dHJpYnV0ZXMoIi1h
bHBoYSIsMC40KSkNCiAgICAgICAgIyBIZXJlIGFyZSB0aGUgYWRkZWQgYWxwaGFzLCBsYW1iZGEg
d2FzIHVzZWQgZm9yIGNvbnZlbmllbmNlDQoNCiAgICAgICAgaWYgZmxpc3Q6DQogICAgICAgICAg
ICBmbGlzdC5pbnZlcnNlZGljdFtzZWxmXSA9IGtleQ0KICAgICAgICAgICAgaWYga2V5Og0KICAg
ICAgICAgICAgICAgIGZsaXN0LmRpY3Rba2V5XSA9IHNlbGYNCiAgICAgICAgICAgIHRleHQuYmlu
ZCgiPDxvcGVuLW5ldy13aW5kb3c+PiIsIHNlbGYubmV3X2NhbGxiYWNrKQ0KICAgICAgICAgICAg
dGV4dC5iaW5kKCI8PGNsb3NlLWFsbC13aW5kb3dzPj4iLCBzZWxmLmZsaXN0LmNsb3NlX2FsbF9j
YWxsYmFjaykNCiAgICAgICAgICAgIHRleHQuYmluZCgiPDxvcGVuLWNsYXNzLWJyb3dzZXI+PiIs
IHNlbGYub3Blbl9tb2R1bGVfYnJvd3NlcikNCiAgICAgICAgICAgIHRleHQuYmluZCgiPDxvcGVu
LXBhdGgtYnJvd3Nlcj4+Iiwgc2VsZi5vcGVuX3BhdGhfYnJvd3NlcikNCiAgICAgICAgICAgIHRl
eHQuYmluZCgiPDxvcGVuLXR1cnRsZS1kZW1vPj4iLCBzZWxmLm9wZW5fdHVydGxlX2RlbW8pDQoN
CiAgICAgICAgc2VsZi5zZXRfc3RhdHVzX2JhcigpDQogICAgICAgIHZiYXJbJ2NvbW1hbmQnXSA9
IHNlbGYuaGFuZGxlX3l2aWV3DQogICAgICAgIHZiYXIucGFjayhzaWRlPVJJR0hULCBmaWxsPVkp
DQogICAgICAgIHRleHRbJ3lzY3JvbGxjb21tYW5kJ10gPSB2YmFyLnNldA0KICAgICAgICB0ZXh0
Wydmb250J10gPSBpZGxlQ29uZi5HZXRGb250KHNlbGYucm9vdCwgJ21haW4nLCAnRWRpdG9yV2lu
ZG93JykNCiAgICAgICAgdGV4dF9mcmFtZS5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBh
bmQ9MSkNCiAgICAgICAgdGV4dC5wYWNrKHNpZGU9VE9QLCBmaWxsPUJPVEgsIGV4cGFuZD0xKQ0K
ICAgICAgICB0ZXh0LmZvY3VzX3NldCgpDQoNCiAgICAgICAgIyB1c2V0YWJzIHRydWUgIC0+IGxp
dGVyYWwgdGFiIGNoYXJhY3RlcnMgYXJlIHVzZWQgYnkgaW5kZW50IGFuZA0KICAgICAgICAjICAg
ICAgICAgICAgICAgICAgZGVkZW50IGNtZHMsIHBvc3NpYmx5IG1peGVkIHdpdGggc3BhY2VzIGlm
DQogICAgICAgICMgICAgICAgICAgICAgICAgICBpbmRlbnR3aWR0aCBpcyBub3QgYSBtdWx0aXBs
ZSBvZiB0YWJ3aWR0aCwNCiAgICAgICAgIyAgICAgICAgICAgICAgICAgIHdoaWNoIHdpbGwgY2F1
c2UgVGFibmFubnkgdG8gbmFnIQ0KICAgICAgICAjICAgICAgICAgZmFsc2UgLT4gdGFiIGNoYXJh
Y3RlcnMgYXJlIGNvbnZlcnRlZCB0byBzcGFjZXMgYnkgaW5kZW50DQogICAgICAgICMgICAgICAg
ICAgICAgICAgICBhbmQgZGVkZW50IGNtZHMsIGFuZCBkaXR0byBUQUIga2V5c3Ryb2tlcw0KICAg
ICAgICAjIEFsdGhvdWdoIHVzZS1zcGFjZXM9MCBjYW4gYmUgY29uZmlndXJlZCBtYW51YWxseSBp
biBjb25maWctbWFpbi5kZWYsDQogICAgICAgICMgY29uZmlndXJhdGlvbiBvZiB0YWJzIHYuIHNw
YWNlcyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBjb25maWd1cmF0aW9uDQogICAgICAgICMgZGlh
bG9nLiAgSURMRSBwcm9tb3RlcyB0aGUgcHJlZmVycmVkIFB5dGhvbiBpbmRlbnRhdGlvbjogdXNl
IHNwYWNlcyENCiAgICAgICAgdXNlc3BhY2VzID0gaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywg
J0luZGVudCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlLXNw
YWNlcycsIHR5cGU9J2Jvb2wnKQ0KICAgICAgICBzZWxmLnVzZXRhYnMgPSBub3QgdXNlc3BhY2Vz
DQoNCiAgICAgICAgIyB0YWJ3aWR0aCBpcyB0aGUgZGlzcGxheSB3aWR0aCBvZiBhIGxpdGVyYWwg
dGFiIGNoYXJhY3Rlci4NCiAgICAgICAgIyBDQVVUSU9OOiAgdGVsbGluZyBUayB0byB1c2UgYW55
dGhpbmcgb3RoZXIgdGhhbiBpdHMgZGVmYXVsdA0KICAgICAgICAjIHRhYiBzZXR0aW5nIGNhdXNl
cyBpdCB0byB1c2UgYW4gZW50aXJlbHkgZGlmZmVyZW50IHRhYmJpbmcgYWxnb3JpdGhtLA0KICAg
ICAgICAjIHRyZWF0aW5nIHRhYiBzdG9wcyBhcyBmaXhlZCBkaXN0YW5jZXMgZnJvbSB0aGUgbGVm
dCBtYXJnaW4uDQogICAgICAgICMgTm9ib2R5IGV4cGVjdHMgdGhpcywgc28gZm9yIG5vdyB0YWJ3
aWR0aCBzaG91bGQgbmV2ZXIgYmUgY2hhbmdlZC4NCiAgICAgICAgc2VsZi50YWJ3aWR0aCA9IDgg
ICAgIyBtdXN0IHJlbWFpbiA4IHVudGlsIFRrIGlzIGZpeGVkLg0KDQogICAgICAgICMgaW5kZW50
d2lkdGggaXMgdGhlIG51bWJlciBvZiBzY3JlZW4gY2hhcmFjdGVycyBwZXIgaW5kZW50IGxldmVs
Lg0KICAgICAgICAjIFRoZSByZWNvbW1lbmRlZCBQeXRob24gaW5kZW50YXRpb24gaXMgZm91ciBz
cGFjZXMuDQogICAgICAgIHNlbGYuaW5kZW50d2lkdGggPSBzZWxmLnRhYndpZHRoDQogICAgICAg
IHNlbGYuc2V0X25vdGFic19pbmRlbnR3aWR0aCgpDQoNCiAgICAgICAgIyBJZiBjb250ZXh0X3Vz
ZV9wczEgaXMgdHJ1ZSwgcGFyc2luZyBzZWFyY2hlcyBiYWNrIGZvciBhIHBzMSBsaW5lOw0KICAg
ICAgICAjIGVsc2Ugc2VhcmNoZXMgZm9yIGEgcG9wdWxhciAoaWYsIGRlZiwgLi4uKSBQeXRob24g
c3RtdC4NCiAgICAgICAgc2VsZi5jb250ZXh0X3VzZV9wczEgPSBGYWxzZQ0KDQogICAgICAgICMg
V2hlbiBzZWFyY2hpbmcgYmFja3dhcmRzIGZvciBhIHJlbGlhYmxlIHBsYWNlIHRvIGJlZ2luIHBh
cnNpbmcsDQogICAgICAgICMgZmlyc3Qgc3RhcnQgbnVtX2NvbnRleHRfbGluZXNbMF0gbGluZXMg
YmFjaywgdGhlbg0KICAgICAgICAjIG51bV9jb250ZXh0X2xpbmVzWzFdIGxpbmVzIGJhY2sgaWYg
dGhhdCBkaWRuJ3Qgd29yaywgYW5kIHNvIG9uLg0KICAgICAgICAjIFRoZSBsYXN0IHZhbHVlIHNo
b3VsZCBiZSBodWdlIChsYXJnZXIgdGhhbiB0aGUgIyBvZiBsaW5lcyBpbiBhDQogICAgICAgICMg
Y29uY2VpdmFibGUgZmlsZSkuDQogICAgICAgICMgTWFraW5nIHRoZSBpbml0aWFsIHZhbHVlcyBs
YXJnZXIgc2xvd3MgdGhpbmdzIGRvd24gbW9yZSBvZnRlbi4NCiAgICAgICAgc2VsZi5udW1fY29u
dGV4dF9saW5lcyA9IDUwLCA1MDAsIDUwMDAwMDANCiAgICAgICAgc2VsZi5wZXIgPSBwZXIgPSBz
ZWxmLlBlcmNvbGF0b3IodGV4dCkNCiAgICAgICAgc2VsZi51bmRvID0gdW5kbyA9IHNlbGYuVW5k
b0RlbGVnYXRvcigpDQogICAgICAgIHBlci5pbnNlcnRmaWx0ZXIodW5kbykNCiAgICAgICAgdGV4
dC51bmRvX2Jsb2NrX3N0YXJ0ID0gdW5kby51bmRvX2Jsb2NrX3N0YXJ0DQogICAgICAgIHRleHQu
dW5kb19ibG9ja19zdG9wID0gdW5kby51bmRvX2Jsb2NrX3N0b3ANCiAgICAgICAgdW5kby5zZXRf
c2F2ZWRfY2hhbmdlX2hvb2soc2VsZi5zYXZlZF9jaGFuZ2VfaG9vaykNCiAgICAgICAgIyBJT0Jp
bmRpbmcgaW1wbGVtZW50cyBmaWxlIEkvTyBhbmQgcHJpbnRpbmcgZnVuY3Rpb25hbGl0eQ0KICAg
ICAgICBzZWxmLmlvID0gaW8gPSBzZWxmLklPQmluZGluZyhzZWxmKQ0KICAgICAgICBpby5zZXRf
ZmlsZW5hbWVfY2hhbmdlX2hvb2soc2VsZi5maWxlbmFtZV9jaGFuZ2VfaG9vaykNCiAgICAgICAg
c2VsZi5nb29kX2xvYWQgPSBGYWxzZQ0KICAgICAgICBzZWxmLnNldF9pbmRlbnRhdGlvbl9wYXJh
bXMoRmFsc2UpDQogICAgICAgIHNlbGYuY29sb3IgPSBOb25lICMgaW5pdGlhbGl6ZWQgYmVsb3cg
aW4gc2VsZi5SZXNldENvbG9yaXplcg0KICAgICAgICBpZiBmaWxlbmFtZToNCiAgICAgICAgICAg
IGlmIG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKSBhbmQgbm90IG9zLnBhdGguaXNkaXIoZmlsZW5h
bWUpOg0KICAgICAgICAgICAgICAgIGlmIGlvLmxvYWRmaWxlKGZpbGVuYW1lKToNCiAgICAgICAg
ICAgICAgICAgICAgc2VsZi5nb29kX2xvYWQgPSBUcnVlDQogICAgICAgICAgICAgICAgICAgIGlz
X3B5X3NyYyA9IHNlbGYuaXNweXRob25zb3VyY2UoZmlsZW5hbWUpDQogICAgICAgICAgICAgICAg
ICAgIHNlbGYuc2V0X2luZGVudGF0aW9uX3BhcmFtcyhpc19weV9zcmMpDQogICAgICAgICAgICBl
bHNlOg0KICAgICAgICAgICAgICAgIGlvLnNldF9maWxlbmFtZShmaWxlbmFtZSkNCiAgICAgICAg
ICAgICAgICBzZWxmLmdvb2RfbG9hZCA9IFRydWUNCg0KICAgICAgICBzZWxmLlJlc2V0Q29sb3Jp
emVyKCkNCiAgICAgICAgc2VsZi5zYXZlZF9jaGFuZ2VfaG9vaygpDQogICAgICAgIHNlbGYudXBk
YXRlX3JlY2VudF9maWxlc19saXN0KCkNCiAgICAgICAgc2VsZi5sb2FkX2V4dGVuc2lvbnMoKQ0K
ICAgICAgICBtZW51ID0gc2VsZi5tZW51ZGljdC5nZXQoJ3dpbmRvd3MnKQ0KICAgICAgICBpZiBt
ZW51Og0KICAgICAgICAgICAgZW5kID0gbWVudS5pbmRleCgiZW5kIikNCiAgICAgICAgICAgIGlm
IGVuZCBpcyBOb25lOg0KICAgICAgICAgICAgICAgIGVuZCA9IC0xDQogICAgICAgICAgICBpZiBl
bmQgPj0gMDoNCiAgICAgICAgICAgICAgICBtZW51LmFkZF9zZXBhcmF0b3IoKQ0KICAgICAgICAg
ICAgICAgIGVuZCA9IGVuZCArIDENCiAgICAgICAgICAgIHNlbGYud21lbnVfZW5kID0gZW5kDQog
ICAgICAgICAgICB3aW5kb3dzLnJlZ2lzdGVyX2NhbGxiYWNrKHNlbGYucG9zdHdpbmRvd3NtZW51
KQ0KDQogICAgICAgICMgU29tZSBhYnN0cmFjdGlvbnMgc28gSURMRSBleHRlbnNpb25zIGFyZSBj
cm9zcy1JREUNCiAgICAgICAgc2VsZi5hc2t5ZXNubyA9IHRrTWVzc2FnZUJveC5hc2t5ZXNubw0K
ICAgICAgICBzZWxmLmFza2ludGVnZXIgPSB0a1NpbXBsZURpYWxvZy5hc2tpbnRlZ2VyDQogICAg
ICAgIHNlbGYuc2hvd2Vycm9yID0gdGtNZXNzYWdlQm94LnNob3dlcnJvcg0KDQogICAgICAgICMg
QWRkIHBzZXVkb2V2ZW50cyBmb3IgZm9ybWVyIGV4dGVuc2lvbiBmaXhlZCBrZXlzLg0KICAgICAg
ICAjIChUaGlzIHByb2JhYmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSBpbiB0aGUgcHJvY2Vzcy4p
DQogICAgICAgIHRleHQuZXZlbnRfYWRkKCc8PGF1dG9jb21wbGV0ZT4+JywgJzxLZXktVGFiPicp
DQogICAgICAgIHRleHQuZXZlbnRfYWRkKCc8PHRyeS1vcGVuLWNvbXBsZXRpb25zPj4nLCAnPEtl
eVJlbGVhc2UtcGVyaW9kPicsDQogICAgICAgICAgICAgICAgICAgICAgICc8S2V5UmVsZWFzZS1z
bGFzaD4nLCAnPEtleVJlbGVhc2UtYmFja3NsYXNoPicpDQogICAgICAgIHRleHQuZXZlbnRfYWRk
KCc8PHRyeS1vcGVuLWNhbGx0aXA+PicsICc8S2V5UmVsZWFzZS1wYXJlbmxlZnQ+JykNCiAgICAg
ICAgdGV4dC5ldmVudF9hZGQoJzw8cmVmcmVzaC1jYWxsdGlwPj4nLCAnPEtleVJlbGVhc2UtcGFy
ZW5yaWdodD4nKQ0KICAgICAgICB0ZXh0LmV2ZW50X2FkZCgnPDxwYXJlbi1jbG9zZWQ+PicsICc8
S2V5UmVsZWFzZS1wYXJlbnJpZ2h0PicsDQogICAgICAgICAgICAgICAgICAgICAgICc8S2V5UmVs
ZWFzZS1icmFja2V0cmlnaHQ+JywgJzxLZXlSZWxlYXNlLWJyYWNlcmlnaHQ+JykNCg0KICAgICAg
ICAjIEZvcm1lciBleHRlbnNpb24gYmluZGluZ3MgZGVwZW5kcyBvbiBmcmFtZS50ZXh0IGJlaW5n
IHBhY2tlZA0KICAgICAgICAjIChjYWxsZWQgZnJvbSBzZWxmLlJlc2V0Q29sb3JpemVyKCkpLg0K
ICAgICAgICBhdXRvY29tcGxldGUgPSBzZWxmLkF1dG9Db21wbGV0ZShzZWxmKQ0KICAgICAgICB0
ZXh0LmJpbmQoIjw8YXV0b2NvbXBsZXRlPj4iLCBhdXRvY29tcGxldGUuYXV0b2NvbXBsZXRlX2V2
ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8dHJ5LW9wZW4tY29tcGxldGlvbnM+PiIsDQogICAg
ICAgICAgICAgICAgICBhdXRvY29tcGxldGUudHJ5X29wZW5fY29tcGxldGlvbnNfZXZlbnQpDQog
ICAgICAgIHRleHQuYmluZCgiPDxmb3JjZS1vcGVuLWNvbXBsZXRpb25zPj4iLA0KICAgICAgICAg
ICAgICAgICAgYXV0b2NvbXBsZXRlLmZvcmNlX29wZW5fY29tcGxldGlvbnNfZXZlbnQpDQogICAg
ICAgIHRleHQuYmluZCgiPDxleHBhbmQtd29yZD4+Iiwgc2VsZi5BdXRvRXhwYW5kKHNlbGYpLmV4
cGFuZF93b3JkX2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8Zm9ybWF0LXBhcmFncmFwaD4+
IiwNCiAgICAgICAgICAgICAgICAgIHNlbGYuRm9ybWF0UGFyYWdyYXBoKHNlbGYpLmZvcm1hdF9w
YXJhZ3JhcGhfZXZlbnQpDQogICAgICAgIHBhcmVubWF0Y2ggPSBzZWxmLlBhcmVuTWF0Y2goc2Vs
ZikNCiAgICAgICAgdGV4dC5iaW5kKCI8PGZsYXNoLXBhcmVuPj4iLCBwYXJlbm1hdGNoLmZsYXNo
X3BhcmVuX2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8cGFyZW4tY2xvc2VkPj4iLCBwYXJl
bm1hdGNoLnBhcmVuX2Nsb3NlZF9ldmVudCkNCiAgICAgICAgc2NyaXB0YmluZGluZyA9IFNjcmlw
dEJpbmRpbmcoc2VsZikNCiAgICAgICAgdGV4dC5iaW5kKCI8PGNoZWNrLW1vZHVsZT4+Iiwgc2Ny
aXB0YmluZGluZy5jaGVja19tb2R1bGVfZXZlbnQpDQogICAgICAgIHRleHQuYmluZCgiPDxydW4t
bW9kdWxlPj4iLCBzY3JpcHRiaW5kaW5nLnJ1bl9tb2R1bGVfZXZlbnQpDQogICAgICAgIHRleHQu
YmluZCgiPDxkby1yc3RyaXA+PiIsIHNlbGYuUnN0cmlwRXh0ZW5zaW9uKHNlbGYpLmRvX3JzdHJp
cCkNCiAgICAgICAgY2FsbHRpcHMgPSBzZWxmLkNhbGxUaXBzKHNlbGYpDQogICAgICAgIHRleHQu
YmluZCgiPDx0cnktb3Blbi1jYWxsdGlwPj4iLCBjYWxsdGlwcy50cnlfb3Blbl9jYWxsdGlwX2V2
ZW50KQ0KICAgICAgICAjcmVmcmVzaC1jYWxsdGlwcyBtdXN0IGNvbWUgYWZ0ZXIgcGFyZW4tY2xv
c2VkIHRvIHdvcmsgcmlnaHQNCiAgICAgICAgdGV4dC5iaW5kKCI8PHJlZnJlc2gtY2FsbHRpcD4+
IiwgY2FsbHRpcHMucmVmcmVzaF9jYWxsdGlwX2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8
Zm9yY2Utb3Blbi1jYWxsdGlwPj4iLCBjYWxsdGlwcy5mb3JjZV9vcGVuX2NhbGx0aXBfZXZlbnQp
DQogICAgICAgIHRleHQuYmluZCgiPDx6b29tLWhlaWdodD4+Iiwgc2VsZi5ab29tSGVpZ2h0KHNl
bGYpLnpvb21faGVpZ2h0X2V2ZW50KQ0KICAgICAgICB0ZXh0LmJpbmQoIjw8dG9nZ2xlLWNvZGUt
Y29udGV4dD4+IiwNCiAgICAgICAgICAgICAgICAgIHNlbGYuQ29kZUNvbnRleHQoc2VsZikudG9n
Z2xlX2NvZGVfY29udGV4dF9ldmVudCkNCg0KICAgIGRlZiBfZmlsZW5hbWVfdG9fdW5pY29kZShz
ZWxmLCBmaWxlbmFtZSk6DQogICAgICAgICIiIlJldHVybiBmaWxlbmFtZSBhcyBCTVAgdW5pY29k
ZSBzbyBkaXBsYXlhYmxlIGluIFRrLiIiIg0KICAgICAgICAjIERlY29kZSBieXRlcyB0byB1bmlj
b2RlLg0KICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGVuYW1lLCBieXRlcyk6DQogICAgICAgICAg
ICB0cnk6DQogICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5kZWNvZGUoc2VsZi5m
aWxlc3lzdGVtZW5jb2RpbmcpDQogICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9y
Og0KICAgICAgICAgICAgICAgIHRyeToNCiAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBm
aWxlbmFtZS5kZWNvZGUoc2VsZi5lbmNvZGluZykNCiAgICAgICAgICAgICAgICBleGNlcHQgVW5p
Y29kZURlY29kZUVycm9yOg0KICAgICAgICAgICAgICAgICAgICAjIGJ5dGUtdG8tYnl0ZSBjb252
ZXJzaW9uDQogICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuZGVjb2RlKCdp
c284ODU5LTEnKQ0KICAgICAgICAjIFJlcGxhY2Ugbm9uLUJNUCBjaGFyIHdpdGggZGlhbW9uZCBx
dWVzdGlvbm1hcmsuDQogICAgICAgIHJldHVybiByZS5zdWIoJ1tcVTAwMDEwMDAwLVxVMDAxMEZG
RkZdJywgJ1x1ZmZmZCcsIGZpbGVuYW1lKQ0KDQogICAgZGVmIG5ld19jYWxsYmFjayhzZWxmLCBl
dmVudCk6DQogICAgICAgIGRpcm5hbWUsIGJhc2VuYW1lID0gc2VsZi5pby5kZWZhdWx0ZmlsZW5h
bWUoKQ0KICAgICAgICBzZWxmLmZsaXN0Lm5ldyhkaXJuYW1lKQ0KICAgICAgICByZXR1cm4gImJy
ZWFrIg0KDQogICAgZGVmIGhvbWVfY2FsbGJhY2soc2VsZiwgZXZlbnQpOg0KICAgICAgICBpZiAo
ZXZlbnQuc3RhdGUgJiA0KSAhPSAwIGFuZCBldmVudC5rZXlzeW0gPT0gIkhvbWUiOg0KICAgICAg
ICAgICAgIyBzdGF0ZSY0PT1Db250cm9sLiBJZiA8Q29udHJvbC1Ib21lPiwgdXNlIHRoZSBUayBi
aW5kaW5nLg0KICAgICAgICAgICAgcmV0dXJuIE5vbmUNCiAgICAgICAgaWYgc2VsZi50ZXh0Lmlu
ZGV4KCJpb21hcmsiKSBhbmQgXA0KICAgICAgICAgICBzZWxmLnRleHQuY29tcGFyZSgiaW9tYXJr
IiwgIjw9IiwgImluc2VydCBsaW5lZW5kIikgYW5kIFwNCiAgICAgICAgICAgc2VsZi50ZXh0LmNv
bXBhcmUoImluc2VydCBsaW5lc3RhcnQiLCAiPD0iLCAiaW9tYXJrIik6DQogICAgICAgICAgICAj
IEluIFNoZWxsIG9uIGlucHV0IGxpbmUsIGdvIHRvIGp1c3QgYWZ0ZXIgcHJvbXB0DQogICAgICAg
ICAgICBpbnNlcnRwdCA9IGludChzZWxmLnRleHQuaW5kZXgoImlvbWFyayIpLnNwbGl0KCIuIilb
MV0pDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBsaW5lID0gc2VsZi50ZXh0LmdldCgiaW5z
ZXJ0IGxpbmVzdGFydCIsICJpbnNlcnQgbGluZWVuZCIpDQogICAgICAgICAgICBmb3IgaW5zZXJ0
cHQgaW4gcmFuZ2UobGVuKGxpbmUpKToNCiAgICAgICAgICAgICAgICBpZiBsaW5lW2luc2VydHB0
XSBub3QgaW4gKCcgJywnXHQnKToNCiAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAg
ICAgIGVsc2U6DQogICAgICAgICAgICAgICAgaW5zZXJ0cHQ9bGVuKGxpbmUpDQogICAgICAgIGxp
bmVhdCA9IGludChzZWxmLnRleHQuaW5kZXgoImluc2VydCIpLnNwbGl0KCcuJylbMV0pDQogICAg
ICAgIGlmIGluc2VydHB0ID09IGxpbmVhdDoNCiAgICAgICAgICAgIGluc2VydHB0ID0gMA0KICAg
ICAgICBkZXN0ID0gImluc2VydCBsaW5lc3RhcnQrIitzdHIoaW5zZXJ0cHQpKyJjIg0KICAgICAg
ICBpZiAoZXZlbnQuc3RhdGUmMSkgPT0gMDoNCiAgICAgICAgICAgICMgc2hpZnQgd2FzIG5vdCBw
cmVzc2VkDQogICAgICAgICAgICBzZWxmLnRleHQudGFnX3JlbW92ZSgic2VsIiwgIjEuMCIsICJl
bmQiKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgaWYgbm90IHNlbGYudGV4dC5pbmRleCgi
c2VsLmZpcnN0Iik6DQogICAgICAgICAgICAgICAgIyB0aGVyZSB3YXMgbm8gcHJldmlvdXMgc2Vs
ZWN0aW9uDQogICAgICAgICAgICAgICAgc2VsZi50ZXh0Lm1hcmtfc2V0KCJteV9hbmNob3IiLCAi
aW5zZXJ0IikNCiAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgaWYgc2VsZi50ZXh0
LmNvbXBhcmUoc2VsZi50ZXh0LmluZGV4KCJzZWwuZmlyc3QiKSwgIjwiLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dC5pbmRleCgiaW5zZXJ0IikpOg0KICAg
ICAgICAgICAgICAgICAgICBzZWxmLnRleHQubWFya19zZXQoIm15X2FuY2hvciIsICJzZWwuZmly
c3QiKSAjIGV4dGVuZCBiYWNrDQogICAgICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAg
ICAgICAgc2VsZi50ZXh0Lm1hcmtfc2V0KCJteV9hbmNob3IiLCAic2VsLmxhc3QiKSAjIGV4dGVu
ZCBmb3J3YXJkDQogICAgICAgICAgICBmaXJzdCA9IHNlbGYudGV4dC5pbmRleChkZXN0KQ0KICAg
ICAgICAgICAgbGFzdCA9IHNlbGYudGV4dC5pbmRleCgibXlfYW5jaG9yIikNCiAgICAgICAgICAg
IGlmIHNlbGYudGV4dC5jb21wYXJlKGZpcnN0LCI+IixsYXN0KToNCiAgICAgICAgICAgICAgICBm
aXJzdCxsYXN0ID0gbGFzdCxmaXJzdA0KICAgICAgICAgICAgc2VsZi50ZXh0LnRhZ19yZW1vdmUo
InNlbCIsICIxLjAiLCAiZW5kIikNCiAgICAgICAgICAgIHNlbGYudGV4dC50YWdfYWRkKCJzZWwi
LCBmaXJzdCwgbGFzdCkNCiAgICAgICAgc2VsZi50ZXh0Lm1hcmtfc2V0KCJpbnNlcnQiLCBkZXN0
KQ0KICAgICAgICBzZWxmLnRleHQuc2VlKCJpbnNlcnQiKQ0KICAgICAgICByZXR1cm4gImJyZWFr
Ig0KDQogICAgZGVmIHNldF9zdGF0dXNfYmFyKHNlbGYpOg0KICAgICAgICBzZWxmLnN0YXR1c19i
YXIgPSBzZWxmLk11bHRpU3RhdHVzQmFyKHNlbGYudG9wKQ0KICAgICAgICBzZXAgPSBGcmFtZShz
ZWxmLnRvcCwgaGVpZ2h0PTEsIGJvcmRlcndpZHRoPTEsIGJhY2tncm91bmQ9J2dyZXk3NScpDQog
ICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoNCiAgICAgICAgICAgICMgSW5zZXJ0
IHNvbWUgcGFkZGluZyB0byBhdm9pZCBvYnNjdXJpbmcgc29tZSBvZiB0aGUgc3RhdHVzYmFyDQog
ICAgICAgICAgICAjIGJ5IHRoZSByZXNpemUgd2lkZ2V0Lg0KICAgICAgICAgICAgc2VsZi5zdGF0
dXNfYmFyLnNldF9sYWJlbCgnX3BhZGRpbmcxJywgJyAgICAnLCBzaWRlPVJJR0hUKQ0KICAgICAg
ICBzZWxmLnN0YXR1c19iYXIuc2V0X2xhYmVsKCdjb2x1bW4nLCAnQ29sOiA/Jywgc2lkZT1SSUdI
VCkNCiAgICAgICAgc2VsZi5zdGF0dXNfYmFyLnNldF9sYWJlbCgnbGluZScsICdMbjogPycsIHNp
ZGU9UklHSFQpDQogICAgICAgIHNlbGYuc3RhdHVzX2Jhci5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxs
PVgpDQogICAgICAgIHNlcC5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxsPVgpDQogICAgICAgIHNlbGYu
dGV4dC5iaW5kKCI8PHNldC1saW5lLWFuZC1jb2x1bW4+PiIsIHNlbGYuc2V0X2xpbmVfYW5kX2Nv
bHVtbikNCiAgICAgICAgc2VsZi50ZXh0LmV2ZW50X2FkZCgiPDxzZXQtbGluZS1hbmQtY29sdW1u
Pj4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8S2V5UmVsZWFzZT4iLCAiPEJ1dHRv
blJlbGVhc2U+IikNCiAgICAgICAgc2VsZi50ZXh0LmFmdGVyX2lkbGUoc2VsZi5zZXRfbGluZV9h
bmRfY29sdW1uKQ0KDQogICAgZGVmIHNldF9saW5lX2FuZF9jb2x1bW4oc2VsZiwgZXZlbnQ9Tm9u
ZSk6DQogICAgICAgIGxpbmUsIGNvbHVtbiA9IHNlbGYudGV4dC5pbmRleChJTlNFUlQpLnNwbGl0
KCcuJykNCiAgICAgICAgc2VsZi5zdGF0dXNfYmFyLnNldF9sYWJlbCgnY29sdW1uJywgJ0NvbDog
JXMnICUgY29sdW1uKQ0KICAgICAgICBzZWxmLnN0YXR1c19iYXIuc2V0X2xhYmVsKCdsaW5lJywg
J0xuOiAlcycgJSBsaW5lKQ0KDQogICAgbWVudV9zcGVjcyA9IFsNCiAgICAgICAgKCJmaWxlIiwg
Il9GaWxlIiksDQogICAgICAgICgiZWRpdCIsICJfRWRpdCIpLA0KICAgICAgICAoImZvcm1hdCIs
ICJGX29ybWF0IiksDQogICAgICAgICgicnVuIiwgIl9SdW4iKSwNCiAgICAgICAgKCJvcHRpb25z
IiwgIl9PcHRpb25zIiksDQogICAgICAgICgid2luZG93cyIsICJfV2luZG93IiksDQogICAgICAg
ICgiaGVscCIsICJfSGVscCIpLA0KICAgICAgICAoImFscGhhIiwgIl9BbHBoYSIpDQogICAgXQ0K
DQoNCiAgICBkZWYgY3JlYXRlbWVudWJhcihzZWxmKToNCiAgICAgICAgbWJhciA9IHNlbGYubWVu
dWJhcg0KICAgICAgICBzZWxmLm1lbnVkaWN0ID0gbWVudWRpY3QgPSB7fQ0KICAgICAgICBmb3Ig
bmFtZSwgbGFiZWwgaW4gc2VsZi5tZW51X3NwZWNzOg0KICAgICAgICAgICAgdW5kZXJsaW5lLCBs
YWJlbCA9IHByZXBzdHIobGFiZWwpDQogICAgICAgICAgICBtZW51ZGljdFtuYW1lXSA9IG1lbnUg
PSBNZW51KG1iYXIsIG5hbWU9bmFtZSwgdGVhcm9mZj0wKQ0KICAgICAgICAgICAgbWJhci5hZGRf
Y2FzY2FkZShsYWJlbD1sYWJlbCwgbWVudT1tZW51LCB1bmRlcmxpbmU9dW5kZXJsaW5lKQ0KICAg
ICAgICBpZiBtYWNvc3guaXNDYXJib25UaygpOg0KICAgICAgICAgICAgIyBJbnNlcnQgdGhlIGFw
cGxpY2F0aW9uIG1lbnUNCiAgICAgICAgICAgIG1lbnVkaWN0WydhcHBsaWNhdGlvbiddID0gbWVu
dSA9IE1lbnUobWJhciwgbmFtZT0nYXBwbGUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZWFyb2ZmPTApDQogICAgICAgICAgICBtYmFyLmFkZF9j
YXNjYWRlKGxhYmVsPSdJRExFJywgbWVudT1tZW51KQ0KICAgICAgICBzZWxmLmZpbGxfbWVudXMo
KQ0KICAgICAgICBzZWxmLnJlY2VudF9maWxlc19tZW51ID0gTWVudShzZWxmLm1lbnViYXIsIHRl
YXJvZmY9MCkNCiAgICAgICAgc2VsZi5tZW51ZGljdFsnZmlsZSddLmluc2VydF9jYXNjYWRlKDMs
IGxhYmVsPSdSZWNlbnQgRmlsZXMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5kZXJsaW5lPTAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtZW51PXNlbGYucmVjZW50X2ZpbGVzX21lbnUpDQogICAgICAgIHNlbGYu
YmFzZV9oZWxwbWVudV9sZW5ndGggPSBzZWxmLm1lbnVkaWN0WydoZWxwJ10uaW5kZXgoRU5EKQ0K
ICAgICAgICBzZWxmLnJlc2V0X2hlbHBfbWVudV9lbnRyaWVzKCkNCg0KICAgIGRlZiBwb3N0d2lu
ZG93c21lbnUoc2VsZik6DQogICAgICAgICMgT25seSBjYWxsZWQgd2hlbiBXaW5kb3dzIG1lbnUg
ZXhpc3RzDQogICAgICAgIG1lbnUgPSBzZWxmLm1lbnVkaWN0Wyd3aW5kb3dzJ10NCiAgICAgICAg
ZW5kID0gbWVudS5pbmRleCgiZW5kIikNCiAgICAgICAgaWYgZW5kIGlzIE5vbmU6DQogICAgICAg
ICAgICBlbmQgPSAtMQ0KICAgICAgICBpZiBlbmQgPiBzZWxmLndtZW51X2VuZDoNCiAgICAgICAg
ICAgIG1lbnUuZGVsZXRlKHNlbGYud21lbnVfZW5kKzEsIGVuZCkNCiAgICAgICAgd2luZG93cy5h
ZGRfd2luZG93c190b19tZW51KG1lbnUpDQoNCiAgICBkZWYgaGFuZGxlX3l2aWV3KHNlbGYsIGV2
ZW50LCAqYXJncyk6DQogICAgICAgICJIYW5kbGUgc2Nyb2xsYmFyLiINCiAgICAgICAgaWYgZXZl
bnQgPT0gJ21vdmV0byc6DQogICAgICAgICAgICBmcmFjdGlvbiA9IGZsb2F0KGFyZ3NbMF0pDQog
ICAgICAgICAgICBsaW5lcyA9IChyb3VuZChzZWxmLmdldGxpbmVubygnZW5kJykgKiBmcmFjdGlv
bikgLQ0KICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRsaW5lbm8oJ0AwLDAnKSkNCiAgICAg
ICAgICAgIGV2ZW50ID0gJ3Njcm9sbCcNCiAgICAgICAgICAgIGFyZ3MgPSAobGluZXMsICd1bml0
cycpDQogICAgICAgIHNlbGYudGV4dC55dmlldyhldmVudCwgKmFyZ3MpDQogICAgICAgIHJldHVy
biAnYnJlYWsnDQoNCiAgICBkZWYgbW91c2VzY3JvbGwoc2VsZiwgZXZlbnQpOg0KICAgICAgICAi
SGFuZGxlIHNjcm9sbCB3aGVlbC4iDQogICAgICAgIHVwID0ge0V2ZW50VHlwZS5Nb3VzZVdoZWVs
OiBldmVudC5kZWx0YSA+PSAwID09IGRhcndpbiwNCiAgICAgICAgICAgICAgRXZlbnRUeXBlLkJ1
dHRvbjogZXZlbnQubnVtID09IDR9DQogICAgICAgIGxpbmVzID0gNQ0KICAgICAgICBpZiB1cFtl
dmVudC50eXBlXToNCiAgICAgICAgICAgIGxpbmVzID0gLWxpbmVzDQogICAgICAgIHNlbGYudGV4
dC55dmlld19zY3JvbGwobGluZXMsICd1bml0cycpDQogICAgICAgIHJldHVybiAnYnJlYWsnDQoN
CiAgICBybWVudSA9IE5vbmUNCg0KICAgIGRlZiByaWdodF9tZW51X2V2ZW50KHNlbGYsIGV2ZW50
KToNCiAgICAgICAgc2VsZi50ZXh0Lm1hcmtfc2V0KCJpbnNlcnQiLCAiQCVkLCVkIiAlIChldmVu
dC54LCBldmVudC55KSkNCiAgICAgICAgaWYgbm90IHNlbGYucm1lbnU6DQogICAgICAgICAgICBz
ZWxmLm1ha2Vfcm1lbnUoKQ0KICAgICAgICBybWVudSA9IHNlbGYucm1lbnUNCiAgICAgICAgc2Vs
Zi5ldmVudCA9IGV2ZW50DQogICAgICAgIGlzd2luID0gc3lzLnBsYXRmb3JtWzozXSA9PSAnd2lu
Jw0KICAgICAgICBpZiBpc3dpbjoNCiAgICAgICAgICAgIHNlbGYudGV4dC5jb25maWcoY3Vyc29y
PSJhcnJvdyIpDQoNCiAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5ybWVudV9zcGVjczoNCiAgICAg
ICAgICAgIHRyeToNCiAgICAgICAgICAgICAgICBsYWJlbCwgZXZlbnRuYW1lLCB2ZXJpZnlfc3Rh
dGUgPSBpdGVtDQogICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogIyBzZWUgaXNzdWUxMjA3
NTg5DQogICAgICAgICAgICAgICAgY29udGludWUNCg0KICAgICAgICAgICAgaWYgdmVyaWZ5X3N0
YXRlIGlzIE5vbmU6DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIHN0YXRl
ID0gZ2V0YXR0cihzZWxmLCB2ZXJpZnlfc3RhdGUpKCkNCiAgICAgICAgICAgIHJtZW51LmVudHJ5
Y29uZmlndXJlKGxhYmVsLCBzdGF0ZT1zdGF0ZSkNCg0KDQogICAgICAgIHJtZW51LnRrX3BvcHVw
KGV2ZW50Lnhfcm9vdCwgZXZlbnQueV9yb290KQ0KICAgICAgICBpZiBpc3dpbjoNCiAgICAgICAg
ICAgIHNlbGYudGV4dC5jb25maWcoY3Vyc29yPSJpYmVhbSIpDQogICAgICAgIHJldHVybiAiYnJl
YWsiDQoNCiAgICBybWVudV9zcGVjcyA9IFsNCiAgICAgICAgIyAoIkxhYmVsIiwgIjw8dmlydHVh
bC1ldmVudD4+IiwgInN0YXRlZnVuY25hbWUiKSwgLi4uDQogICAgICAgICgiQ2xvc2UiLCAiPDxj
bG9zZS13aW5kb3c+PiIsIE5vbmUpLCAjIEV4YW1wbGUNCiAgICBdDQoNCiAgICBkZWYgbWFrZV9y
bWVudShzZWxmKToNCiAgICAgICAgcm1lbnUgPSBNZW51KHNlbGYudGV4dCwgdGVhcm9mZj0wKQ0K
ICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLnJtZW51X3NwZWNzOg0KICAgICAgICAgICAgbGFiZWws
IGV2ZW50bmFtZSA9IGl0ZW1bMF0sIGl0ZW1bMV0NCiAgICAgICAgICAgIGlmIGxhYmVsIGlzIG5v
dCBOb25lOg0KICAgICAgICAgICAgICAgIGRlZiBjb21tYW5kKHRleHQ9c2VsZi50ZXh0LCBldmVu
dG5hbWU9ZXZlbnRuYW1lKToNCiAgICAgICAgICAgICAgICAgICAgdGV4dC5ldmVudF9nZW5lcmF0
ZShldmVudG5hbWUpDQogICAgICAgICAgICAgICAgcm1lbnUuYWRkX2NvbW1hbmQobGFiZWw9bGFi
ZWwsIGNvbW1hbmQ9Y29tbWFuZCkNCiAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAg
cm1lbnUuYWRkX3NlcGFyYXRvcigpDQogICAgICAgIHNlbGYucm1lbnUgPSBybWVudQ0KDQogICAg
ZGVmIHJtZW51X2NoZWNrX2N1dChzZWxmKToNCiAgICAgICAgcmV0dXJuIHNlbGYucm1lbnVfY2hl
Y2tfY29weSgpDQoNCiAgICBkZWYgcm1lbnVfY2hlY2tfY29weShzZWxmKToNCiAgICAgICAgdHJ5
Og0KICAgICAgICAgICAgaW5keCA9IHNlbGYudGV4dC5pbmRleCgnc2VsLmZpcnN0JykNCiAgICAg
ICAgZXhjZXB0IFRjbEVycm9yOg0KICAgICAgICAgICAgcmV0dXJuICdkaXNhYmxlZCcNCiAgICAg
ICAgZWxzZToNCiAgICAgICAgICAgIHJldHVybiAnbm9ybWFsJyBpZiBpbmR4IGVsc2UgJ2Rpc2Fi
bGVkJw0KDQogICAgZGVmIHJtZW51X2NoZWNrX3Bhc3RlKHNlbGYpOg0KICAgICAgICB0cnk6DQog
ICAgICAgICAgICBzZWxmLnRleHQudGsuY2FsbCgndGs6OkdldFNlbGVjdGlvbicsIHNlbGYudGV4
dCwgJ0NMSVBCT0FSRCcpDQogICAgICAgIGV4Y2VwdCBUY2xFcnJvcjoNCiAgICAgICAgICAgIHJl
dHVybiAnZGlzYWJsZWQnDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICByZXR1cm4gJ25vcm1h
bCcNCg0KICAgIGRlZiBhYm91dF9kaWFsb2coc2VsZiwgZXZlbnQ9Tm9uZSk6DQogICAgICAgICJI
YW5kbGUgSGVscCAnQWJvdXQgSURMRScgZXZlbnQuIg0KICAgICAgICAjIFN5bmNocm9uaXplIHdp
dGggbWFjb3N4Lm92ZXJyaWRlUm9vdE1lbnUuYWJvdXRfZGlhbG9nLg0KICAgICAgICBoZWxwX2Fi
b3V0LkFib3V0RGlhbG9nKHNlbGYudG9wKQ0KICAgICAgICByZXR1cm4gImJyZWFrIg0KDQogICAg
ZGVmIGNvbmZpZ19kaWFsb2coc2VsZiwgZXZlbnQ9Tm9uZSk6DQogICAgICAgICJIYW5kbGUgT3B0
aW9ucyAnQ29uZmlndXJlIElETEUnIGV2ZW50LiINCiAgICAgICAgIyBTeW5jaHJvbml6ZSB3aXRo
IG1hY29zeC5vdmVycmlkZVJvb3RNZW51LmNvbmZpZ19kaWFsb2cuDQogICAgICAgIGNvbmZpZ2Rp
YWxvZy5Db25maWdEaWFsb2coc2VsZi50b3AsJ1NldHRpbmdzJykNCiAgICAgICAgcmV0dXJuICJi
cmVhayINCg0KICAgIGRlZiBoZWxwX2RpYWxvZyhzZWxmLCBldmVudD1Ob25lKToNCiAgICAgICAg
IkhhbmRsZSBIZWxwICdJRExFIEhlbHAnIGV2ZW50LiINCiAgICAgICAgIyBTeW5jaHJvbml6ZSB3
aXRoIG1hY29zeC5vdmVycmlkZVJvb3RNZW51LmhlbHBfZGlhbG9nLg0KICAgICAgICBpZiBzZWxm
LnJvb3Q6DQogICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnJvb3QNCiAgICAgICAgZWxzZToNCiAg
ICAgICAgICAgIHBhcmVudCA9IHNlbGYudG9wDQogICAgICAgIGhlbHAuc2hvd19pZGxlaGVscChw
YXJlbnQpDQogICAgICAgIHJldHVybiAiYnJlYWsiDQoNCiAgICBkZWYgcHl0aG9uX2RvY3Moc2Vs
ZiwgZXZlbnQ9Tm9uZSk6DQogICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6DQog
ICAgICAgICAgICB0cnk6DQogICAgICAgICAgICAgICAgb3Muc3RhcnRmaWxlKHNlbGYuaGVscF91
cmwpDQogICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6DQogICAgICAgICAgICAgICAg
dGtNZXNzYWdlQm94LnNob3dlcnJvcih0aXRsZT0nRG9jdW1lbnQgU3RhcnQgRmFpbHVyZScsDQog
ICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9c3RyKHdoeSksIHBhcmVudD1zZWxmLnRleHQpDQog
ICAgICAgIGVsc2U6DQogICAgICAgICAgICB3ZWJicm93c2VyLm9wZW4oc2VsZi5oZWxwX3VybCkN
CiAgICAgICAgcmV0dXJuICJicmVhayINCg0KICAgIGRlZiBjdXQoc2VsZixldmVudCk6DQogICAg
ICAgIHNlbGYudGV4dC5ldmVudF9nZW5lcmF0ZSgiPDxDdXQ+PiIpDQogICAgICAgIHJldHVybiAi
YnJlYWsiDQoNCiAgICBkZWYgY29weShzZWxmLGV2ZW50KToNCiAgICAgICAgaWYgbm90IHNlbGYu
dGV4dC50YWdfcmFuZ2VzKCJzZWwiKToNCiAgICAgICAgICAgICMgVGhlcmUgaXMgbm8gc2VsZWN0
aW9uLCBzbyBkbyBub3RoaW5nIGFuZCBtYXliZSBpbnRlcnJ1cHQuDQogICAgICAgICAgICByZXR1
cm4gTm9uZQ0KICAgICAgICBzZWxmLnRleHQuZXZlbnRfZ2VuZXJhdGUoIjw8Q29weT4+IikNCiAg
ICAgICAgcmV0dXJuICJicmVhayINCg0KICAgIGRlZiBwYXN0ZShzZWxmLGV2ZW50KToNCiAgICAg
ICAgc2VsZi50ZXh0LmV2ZW50X2dlbmVyYXRlKCI8PFBhc3RlPj4iKQ0KICAgICAgICBzZWxmLnRl
eHQuc2VlKCJpbnNlcnQiKQ0KICAgICAgICByZXR1cm4gImJyZWFrIg0KDQogICAgZGVmIHNlbGVj
dF9hbGwoc2VsZiwgZXZlbnQ9Tm9uZSk6DQogICAgICAgIHNlbGYudGV4dC50YWdfYWRkKCJzZWwi
LCAiMS4wIiwgImVuZC0xYyIpDQogICAgICAgIHNlbGYudGV4dC5tYXJrX3NldCgiaW5zZXJ0Iiwg
IjEuMCIpDQogICAgICAgIHNlbGYudGV4dC5zZWUoImluc2VydCIpDQogICAgICAgIHJldHVybiAi
YnJlYWsiDQoNCiAgICBkZWYgcmVtb3ZlX3NlbGVjdGlvbihzZWxmLCBldmVudD1Ob25lKToNCiAg
ICAgICAgc2VsZi50ZXh0LnRhZ19yZW1vdmUoInNlbCIsICIxLjAiLCAiZW5kIikNCiAgICAgICAg
c2VsZi50ZXh0LnNlZSgiaW5zZXJ0IikNCiAgICAgICAgcmV0dXJuICJicmVhayINCg0KICAgIGRl
ZiBtb3ZlX2F0X2VkZ2VfaWZfc2VsZWN0aW9uKHNlbGYsIGVkZ2VfaW5kZXgpOg0KICAgICAgICAi
IiJDdXJzb3IgbW92ZSBiZWdpbnMgYXQgc3RhcnQgb3IgZW5kIG9mIHNlbGVjdGlvbg0KDQogICAg
ICAgIFdoZW4gYSBsZWZ0L3JpZ2h0IGN1cnNvciBrZXkgaXMgcHJlc3NlZCBjcmVhdGUgYW5kIHJl
dHVybiB0byBUa2ludGVyIGENCiAgICAgICAgZnVuY3Rpb24gd2hpY2ggY2F1c2VzIGEgY3Vyc29y
IG1vdmUgZnJvbSB0aGUgYXNzb2NpYXRlZCBlZGdlIG9mIHRoZQ0KICAgICAgICBzZWxlY3Rpb24u
DQoNCiAgICAgICAgIiIiDQogICAgICAgIHNlbGZfdGV4dF9pbmRleCA9IHNlbGYudGV4dC5pbmRl
eA0KICAgICAgICBzZWxmX3RleHRfbWFya19zZXQgPSBzZWxmLnRleHQubWFya19zZXQNCiAgICAg
ICAgZWRnZXNfdGFibGUgPSAoInNlbC5maXJzdCsxYyIsICJzZWwubGFzdC0xYyIpDQogICAgICAg
IGRlZiBtb3ZlX2F0X2VkZ2UoZXZlbnQpOg0KICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXRlICYg
NSkgPT0gMDogIyBubyBzaGlmdCg9PTEpIG9yIGNvbnRyb2woPT00KSBwcmVzc2VkDQogICAgICAg
ICAgICAgICAgdHJ5Og0KICAgICAgICAgICAgICAgICAgICBzZWxmX3RleHRfaW5kZXgoInNlbC5m
aXJzdCIpDQogICAgICAgICAgICAgICAgICAgIHNlbGZfdGV4dF9tYXJrX3NldCgiaW5zZXJ0Iiwg
ZWRnZXNfdGFibGVbZWRnZV9pbmRleF0pDQogICAgICAgICAgICAgICAgZXhjZXB0IFRjbEVycm9y
Og0KICAgICAgICAgICAgICAgICAgICBwYXNzDQogICAgICAgIHJldHVybiBtb3ZlX2F0X2VkZ2UN
Cg0KICAgIGRlZiBkZWxfd29yZF9sZWZ0KHNlbGYsIGV2ZW50KToNCiAgICAgICAgc2VsZi50ZXh0
LmV2ZW50X2dlbmVyYXRlKCc8TWV0YS1EZWxldGU+JykNCiAgICAgICAgcmV0dXJuICJicmVhayIN
Cg0KICAgIGRlZiBkZWxfd29yZF9yaWdodChzZWxmLCBldmVudCk6DQogICAgICAgIHNlbGYudGV4
dC5ldmVudF9nZW5lcmF0ZSgnPE1ldGEtZD4nKQ0KICAgICAgICByZXR1cm4gImJyZWFrIg0KDQog
ICAgZGVmIGZpbmRfZXZlbnQoc2VsZiwgZXZlbnQpOg0KICAgICAgICBzZWFyY2guZmluZChzZWxm
LnRleHQpDQogICAgICAgIHJldHVybiAiYnJlYWsiDQoNCiAgICBkZWYgZmluZF9hZ2Fpbl9ldmVu
dChzZWxmLCBldmVudCk6DQogICAgICAgIHNlYXJjaC5maW5kX2FnYWluKHNlbGYudGV4dCkNCiAg
ICAgICAgcmV0dXJuICJicmVhayINCg0KICAgIGRlZiBmaW5kX3NlbGVjdGlvbl9ldmVudChzZWxm
LCBldmVudCk6DQogICAgICAgIHNlYXJjaC5maW5kX3NlbGVjdGlvbihzZWxmLnRleHQpDQogICAg
ICAgIHJldHVybiAiYnJlYWsiDQoNCiAgICBkZWYgZmluZF9pbl9maWxlc19ldmVudChzZWxmLCBl
dmVudCk6DQogICAgICAgIGdyZXAuZ3JlcChzZWxmLnRleHQsIHNlbGYuaW8sIHNlbGYuZmxpc3Qp
DQogICAgICAgIHJldHVybiAiYnJlYWsiDQoNCiAgICBkZWYgcmVwbGFjZV9ldmVudChzZWxmLCBl
dmVudCk6DQogICAgICAgIHJlcGxhY2UucmVwbGFjZShzZWxmLnRleHQpDQogICAgICAgIHJldHVy
biAiYnJlYWsiDQoNCiAgICBkZWYgZ290b19saW5lX2V2ZW50KHNlbGYsIGV2ZW50KToNCiAgICAg
ICAgdGV4dCA9IHNlbGYudGV4dA0KICAgICAgICBsaW5lbm8gPSB0a1NpbXBsZURpYWxvZy5hc2tp
bnRlZ2VyKCJHb3RvIiwNCiAgICAgICAgICAgICAgICAiR28gdG8gbGluZSBudW1iZXI6IixwYXJl
bnQ9dGV4dCkNCiAgICAgICAgaWYgbGluZW5vIGlzIE5vbmU6DQogICAgICAgICAgICByZXR1cm4g
ImJyZWFrIg0KICAgICAgICBpZiBsaW5lbm8gPD0gMDoNCiAgICAgICAgICAgIHRleHQuYmVsbCgp
DQogICAgICAgICAgICByZXR1cm4gImJyZWFrIg0KICAgICAgICB0ZXh0Lm1hcmtfc2V0KCJpbnNl
cnQiLCAiJWQuMCIgJSBsaW5lbm8pDQogICAgICAgIHRleHQuc2VlKCJpbnNlcnQiKQ0KICAgICAg
ICByZXR1cm4gImJyZWFrIg0KDQogICAgZGVmIG9wZW5fbW9kdWxlKHNlbGYpOg0KICAgICAgICAi
IiJHZXQgbW9kdWxlIG5hbWUgZnJvbSB1c2VyIGFuZCBvcGVuIGl0Lg0KDQogICAgICAgIFJldHVy
biBtb2R1bGUgcGF0aCBvciBOb25lIGZvciBjYWxscyBieSBvcGVuX21vZHVsZV9icm93c2VyDQog
ICAgICAgIHdoZW4gbGF0dGVyIGlzIG5vdCBpbnZva2VkIGluIG5hbWVkIGVkaXRvciB3aW5kb3cu
DQogICAgICAgICIiIg0KICAgICAgICAjIFhYWCBUaGlzLCBvcGVuX21vZHVsZV9icm93c2VyLCBh
bmQgb3Blbl9wYXRoX2Jyb3dzZXINCiAgICAgICAgIyB3b3VsZCBmaXQgYmV0dGVyIGluIGlvbWVu
dS5JT0JpbmRpbmcuDQogICAgICAgIHRyeToNCiAgICAgICAgICAgIG5hbWUgPSBzZWxmLnRleHQu
Z2V0KCJzZWwuZmlyc3QiLCAic2VsLmxhc3QiKS5zdHJpcCgpDQogICAgICAgIGV4Y2VwdCBUY2xF
cnJvcjoNCiAgICAgICAgICAgIG5hbWUgPSAnJw0KICAgICAgICBmaWxlX3BhdGggPSBxdWVyeS5N
b2R1bGVOYW1lKA0KICAgICAgICAgICAgICAgIHNlbGYudGV4dCwgIk9wZW4gTW9kdWxlIiwNCiAg
ICAgICAgICAgICAgICAiRW50ZXIgdGhlIG5hbWUgb2YgYSBQeXRob24gbW9kdWxlXG4iDQogICAg
ICAgICAgICAgICAgInRvIHNlYXJjaCBvbiBzeXMucGF0aCBhbmQgb3BlbjoiLA0KICAgICAgICAg
ICAgICAgIG5hbWUpLnJlc3VsdA0KICAgICAgICBpZiBmaWxlX3BhdGggaXMgbm90IE5vbmU6DQog
ICAgICAgICAgICBpZiBzZWxmLmZsaXN0Og0KICAgICAgICAgICAgICAgIHNlbGYuZmxpc3Qub3Bl
bihmaWxlX3BhdGgpDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgIHNlbGYuaW8u
bG9hZGZpbGUoZmlsZV9wYXRoKQ0KICAgICAgICByZXR1cm4gZmlsZV9wYXRoDQoNCiAgICBkZWYg
b3Blbl9tb2R1bGVfZXZlbnQoc2VsZiwgZXZlbnQpOg0KICAgICAgICBzZWxmLm9wZW5fbW9kdWxl
KCkNCiAgICAgICAgcmV0dXJuICJicmVhayINCg0KICAgIGRlZiBvcGVuX21vZHVsZV9icm93c2Vy
KHNlbGYsIGV2ZW50PU5vbmUpOg0KICAgICAgICBmaWxlbmFtZSA9IHNlbGYuaW8uZmlsZW5hbWUN
CiAgICAgICAgaWYgbm90IChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyA9PSAnUHlTaGVsbEVkaXRv
cldpbmRvdycNCiAgICAgICAgICAgICAgICBhbmQgZmlsZW5hbWUpOg0KICAgICAgICAgICAgZmls
ZW5hbWUgPSBzZWxmLm9wZW5fbW9kdWxlKCkNCiAgICAgICAgICAgIGlmIGZpbGVuYW1lIGlzIE5v
bmU6DQogICAgICAgICAgICAgICAgcmV0dXJuICJicmVhayINCiAgICAgICAgZnJvbSBpZGxlbGli
IGltcG9ydCBicm93c2VyDQogICAgICAgIGJyb3dzZXIuTW9kdWxlQnJvd3NlcihzZWxmLnJvb3Qs
IGZpbGVuYW1lKQ0KICAgICAgICByZXR1cm4gImJyZWFrIg0KDQogICAgZGVmIG9wZW5fcGF0aF9i
cm93c2VyKHNlbGYsIGV2ZW50PU5vbmUpOg0KICAgICAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IHBh
dGhicm93c2VyDQogICAgICAgIHBhdGhicm93c2VyLlBhdGhCcm93c2VyKHNlbGYucm9vdCkNCiAg
ICAgICAgcmV0dXJuICJicmVhayINCg0KICAgIGRlZiBvcGVuX3R1cnRsZV9kZW1vKHNlbGYsIGV2
ZW50ID0gTm9uZSk6DQogICAgICAgIGltcG9ydCBzdWJwcm9jZXNzDQoNCiAgICAgICAgY21kID0g
W3N5cy5leGVjdXRhYmxlLA0KICAgICAgICAgICAgICAgJy1jJywNCiAgICAgICAgICAgICAgICdm
cm9tIHR1cnRsZWRlbW8uX19tYWluX18gaW1wb3J0IG1haW47IG1haW4oKSddDQogICAgICAgIHN1
YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1GYWxzZSkNCiAgICAgICAgcmV0dXJuICJicmVhayIN
Cg0KICAgIGRlZiBnb3RvbGluZShzZWxmLCBsaW5lbm8pOg0KICAgICAgICBpZiBsaW5lbm8gaXMg
bm90IE5vbmUgYW5kIGxpbmVubyA+IDA6DQogICAgICAgICAgICBzZWxmLnRleHQubWFya19zZXQo
Imluc2VydCIsICIlZC4wIiAlIGxpbmVubykNCiAgICAgICAgICAgIHNlbGYudGV4dC50YWdfcmVt
b3ZlKCJzZWwiLCAiMS4wIiwgImVuZCIpDQogICAgICAgICAgICBzZWxmLnRleHQudGFnX2FkZCgi
c2VsIiwgImluc2VydCIsICJpbnNlcnQgKzFsIikNCiAgICAgICAgICAgIHNlbGYuY2VudGVyKCkN
Cg0KICAgIGRlZiBpc3B5dGhvbnNvdXJjZShzZWxmLCBmaWxlbmFtZSk6DQogICAgICAgIGlmIG5v
dCBmaWxlbmFtZSBvciBvcy5wYXRoLmlzZGlyKGZpbGVuYW1lKToNCiAgICAgICAgICAgIHJldHVy
biBUcnVlDQogICAgICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNl
bmFtZShmaWxlbmFtZSkpDQogICAgICAgIGlmIG9zLnBhdGgubm9ybWNhc2UoZXh0KSBpbiAoIi5w
eSIsICIucHl3Iik6DQogICAgICAgICAgICByZXR1cm4gVHJ1ZQ0KICAgICAgICBsaW5lID0gc2Vs
Zi50ZXh0LmdldCgnMS4wJywgJzEuMCBsaW5lZW5kJykNCiAgICAgICAgcmV0dXJuIGxpbmUuc3Rh
cnRzd2l0aCgnIyEnKSBhbmQgJ3B5dGhvbicgaW4gbGluZQ0KDQogICAgZGVmIGNsb3NlX2hvb2so
c2VsZik6DQogICAgICAgIGlmIHNlbGYuZmxpc3Q6DQogICAgICAgICAgICBzZWxmLmZsaXN0LnVu
cmVnaXN0ZXJfbWF5YmVfdGVybWluYXRlKHNlbGYpDQogICAgICAgICAgICBzZWxmLmZsaXN0ID0g
Tm9uZQ0KDQogICAgZGVmIHNldF9jbG9zZV9ob29rKHNlbGYsIGNsb3NlX2hvb2spOg0KICAgICAg
ICBzZWxmLmNsb3NlX2hvb2sgPSBjbG9zZV9ob29rDQoNCiAgICBkZWYgZmlsZW5hbWVfY2hhbmdl
X2hvb2soc2VsZik6DQogICAgICAgIGlmIHNlbGYuZmxpc3Q6DQogICAgICAgICAgICBzZWxmLmZs
aXN0LmZpbGVuYW1lX2NoYW5nZWRfZWRpdChzZWxmKQ0KICAgICAgICBzZWxmLnNhdmVkX2NoYW5n
ZV9ob29rKCkNCiAgICAgICAgc2VsZi50b3AudXBkYXRlX3dpbmRvd2xpc3RfcmVnaXN0cnkoc2Vs
ZikNCiAgICAgICAgc2VsZi5SZXNldENvbG9yaXplcigpDQoNCiAgICBkZWYgX2FkZGNvbG9yaXpl
cihzZWxmKToNCiAgICAgICAgaWYgc2VsZi5jb2xvcjoNCiAgICAgICAgICAgIHJldHVybg0KICAg
ICAgICBpZiBzZWxmLmlzcHl0aG9uc291cmNlKHNlbGYuaW8uZmlsZW5hbWUpOg0KICAgICAgICAg
ICAgc2VsZi5jb2xvciA9IHNlbGYuQ29sb3JEZWxlZ2F0b3IoKQ0KICAgICAgICAjIGNhbiBhZGQg
bW9yZSBjb2xvcml6ZXJzIGhlcmUuLi4NCiAgICAgICAgaWYgc2VsZi5jb2xvcjoNCiAgICAgICAg
ICAgIHNlbGYucGVyLnJlbW92ZWZpbHRlcihzZWxmLnVuZG8pDQogICAgICAgICAgICBzZWxmLnBl
ci5pbnNlcnRmaWx0ZXIoc2VsZi5jb2xvcikNCiAgICAgICAgICAgIHNlbGYucGVyLmluc2VydGZp
bHRlcihzZWxmLnVuZG8pDQoNCiAgICBkZWYgX3JtY29sb3JpemVyKHNlbGYpOg0KICAgICAgICBp
ZiBub3Qgc2VsZi5jb2xvcjoNCiAgICAgICAgICAgIHJldHVybg0KICAgICAgICBzZWxmLmNvbG9y
LnJlbW92ZWNvbG9ycygpDQogICAgICAgIHNlbGYucGVyLnJlbW92ZWZpbHRlcihzZWxmLmNvbG9y
KQ0KICAgICAgICBzZWxmLmNvbG9yID0gTm9uZQ0KDQogICAgZGVmIFJlc2V0Q29sb3JpemVyKHNl
bGYpOg0KICAgICAgICAiVXBkYXRlIHRoZSBjb2xvciB0aGVtZSINCiAgICAgICAgIyBDYWxsZWQg
ZnJvbSBzZWxmLmZpbGVuYW1lX2NoYW5nZV9ob29rIGFuZCBmcm9tIGNvbmZpZ2RpYWxvZy5weQ0K
ICAgICAgICBzZWxmLl9ybWNvbG9yaXplcigpDQogICAgICAgIHNlbGYuX2FkZGNvbG9yaXplcigp
DQogICAgICAgIEVkaXRvcldpbmRvdy5jb2xvcl9jb25maWcoc2VsZi50ZXh0KQ0KDQogICAgSURF
TlRDSEFSUyA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cyArICJfIg0KDQog
ICAgZGVmIGNvbG9yaXplX3N5bnRheF9lcnJvcihzZWxmLCB0ZXh0LCBwb3MpOg0KICAgICAgICB0
ZXh0LnRhZ19hZGQoIkVSUk9SIiwgcG9zKQ0KICAgICAgICBjaGFyID0gdGV4dC5nZXQocG9zKQ0K
ICAgICAgICBpZiBjaGFyIGFuZCBjaGFyIGluIHNlbGYuSURFTlRDSEFSUzoNCiAgICAgICAgICAg
IHRleHQudGFnX2FkZCgiRVJST1IiLCBwb3MgKyAiIHdvcmRzdGFydCIsIHBvcykNCiAgICAgICAg
aWYgJ1xuJyA9PSB0ZXh0LmdldChwb3MpOiAgICMgZXJyb3IgYXQgbGluZSBlbmQNCiAgICAgICAg
ICAgIHRleHQubWFya19zZXQoImluc2VydCIsIHBvcykNCiAgICAgICAgZWxzZToNCiAgICAgICAg
ICAgIHRleHQubWFya19zZXQoImluc2VydCIsIHBvcyArICIrMWMiKQ0KICAgICAgICB0ZXh0LnNl
ZShwb3MpDQoNCiAgICBkZWYgUmVzZXRGb250KHNlbGYpOg0KICAgICAgICAiVXBkYXRlIHRoZSB0
ZXh0IHdpZGdldHMnIGZvbnQgaWYgaXQgaXMgY2hhbmdlZCINCiAgICAgICAgIyBDYWxsZWQgZnJv
bSBjb25maWdkaWFsb2cucHkNCg0KICAgICAgICBzZWxmLnRleHRbJ2ZvbnQnXSA9IGlkbGVDb25m
LkdldEZvbnQoc2VsZi5yb290LCAnbWFpbicsJ0VkaXRvcldpbmRvdycpDQoNCiAgICBkZWYgUmVt
b3ZlS2V5YmluZGluZ3Moc2VsZik6DQogICAgICAgICJSZW1vdmUgdGhlIGtleWJpbmRpbmdzIGJl
Zm9yZSB0aGV5IGFyZSBjaGFuZ2VkLiINCiAgICAgICAgIyBDYWxsZWQgZnJvbSBjb25maWdkaWFs
b2cucHkNCiAgICAgICAgc2VsZi5tYWlubWVudS5kZWZhdWx0X2tleWRlZnMgPSBrZXlkZWZzID0g
aWRsZUNvbmYuR2V0Q3VycmVudEtleVNldCgpDQogICAgICAgIGZvciBldmVudCwga2V5bGlzdCBp
biBrZXlkZWZzLml0ZW1zKCk6DQogICAgICAgICAgICBzZWxmLnRleHQuZXZlbnRfZGVsZXRlKGV2
ZW50LCAqa2V5bGlzdCkNCiAgICAgICAgZm9yIGV4dGVuc2lvbk5hbWUgaW4gc2VsZi5nZXRfc3Rh
bmRhcmRfZXh0ZW5zaW9uX25hbWVzKCk6DQogICAgICAgICAgICB4a2V5ZGVmcyA9IGlkbGVDb25m
LkdldEV4dGVuc2lvbkJpbmRpbmdzKGV4dGVuc2lvbk5hbWUpDQogICAgICAgICAgICBpZiB4a2V5
ZGVmczoNCiAgICAgICAgICAgICAgICBmb3IgZXZlbnQsIGtleWxpc3QgaW4geGtleWRlZnMuaXRl
bXMoKToNCiAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXh0LmV2ZW50X2RlbGV0ZShldmVudCwg
KmtleWxpc3QpDQoNCiAgICBkZWYgQXBwbHlLZXliaW5kaW5ncyhzZWxmKToNCiAgICAgICAgIlVw
ZGF0ZSB0aGUga2V5YmluZGluZ3MgYWZ0ZXIgdGhleSBhcmUgY2hhbmdlZCINCiAgICAgICAgIyBD
YWxsZWQgZnJvbSBjb25maWdkaWFsb2cucHkNCiAgICAgICAgc2VsZi5tYWlubWVudS5kZWZhdWx0
X2tleWRlZnMgPSBrZXlkZWZzID0gaWRsZUNvbmYuR2V0Q3VycmVudEtleVNldCgpDQogICAgICAg
IHNlbGYuYXBwbHlfYmluZGluZ3MoKQ0KICAgICAgICBmb3IgZXh0ZW5zaW9uTmFtZSBpbiBzZWxm
LmdldF9zdGFuZGFyZF9leHRlbnNpb25fbmFtZXMoKToNCiAgICAgICAgICAgIHhrZXlkZWZzID0g
aWRsZUNvbmYuR2V0RXh0ZW5zaW9uQmluZGluZ3MoZXh0ZW5zaW9uTmFtZSkNCiAgICAgICAgICAg
IGlmIHhrZXlkZWZzOg0KICAgICAgICAgICAgICAgIHNlbGYuYXBwbHlfYmluZGluZ3MoeGtleWRl
ZnMpDQogICAgICAgICN1cGRhdGUgbWVudSBhY2NlbGVyYXRvcnMNCiAgICAgICAgbWVudUV2ZW50
RGljdCA9IHt9DQogICAgICAgIGZvciBtZW51IGluIHNlbGYubWFpbm1lbnUubWVudWRlZnM6DQog
ICAgICAgICAgICBtZW51RXZlbnREaWN0W21lbnVbMF1dID0ge30NCiAgICAgICAgICAgIGZvciBp
dGVtIGluIG1lbnVbMV06DQogICAgICAgICAgICAgICAgaWYgaXRlbToNCiAgICAgICAgICAgICAg
ICAgICAgbWVudUV2ZW50RGljdFttZW51WzBdXVtwcmVwc3RyKGl0ZW1bMF0pWzFdXSA9IGl0ZW1b
MV0NCiAgICAgICAgZm9yIG1lbnViYXJJdGVtIGluIHNlbGYubWVudWRpY3Q6DQogICAgICAgICAg
ICBtZW51ID0gc2VsZi5tZW51ZGljdFttZW51YmFySXRlbV0NCiAgICAgICAgICAgIGVuZCA9IG1l
bnUuaW5kZXgoRU5EKQ0KICAgICAgICAgICAgaWYgZW5kIGlzIE5vbmU6DQogICAgICAgICAgICAg
ICAgIyBTa2lwIGVtcHR5IG1lbnVzDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg
ICAgIGVuZCArPSAxDQogICAgICAgICAgICBmb3IgaW5kZXggaW4gcmFuZ2UoMCwgZW5kKToNCiAg
ICAgICAgICAgICAgICBpZiBtZW51LnR5cGUoaW5kZXgpID09ICdjb21tYW5kJzoNCiAgICAgICAg
ICAgICAgICAgICAgYWNjZWwgPSBtZW51LmVudHJ5Y2dldChpbmRleCwgJ2FjY2VsZXJhdG9yJykN
CiAgICAgICAgICAgICAgICAgICAgaWYgYWNjZWw6DQogICAgICAgICAgICAgICAgICAgICAgICBp
dGVtTmFtZSA9IG1lbnUuZW50cnljZ2V0KGluZGV4LCAnbGFiZWwnKQ0KICAgICAgICAgICAgICAg
ICAgICAgICAgZXZlbnQgPSAnJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWVudWJhckl0
ZW0gaW4gbWVudUV2ZW50RGljdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdGVt
TmFtZSBpbiBtZW51RXZlbnREaWN0W21lbnViYXJJdGVtXToNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXZlbnQgPSBtZW51RXZlbnREaWN0W21lbnViYXJJdGVtXVtpdGVtTmFtZV0N
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV2ZW50Og0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFjY2VsID0gZ2V0X2FjY2VsZXJhdG9yKGtleWRlZnMsIGV2ZW50KQ0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1lbnUuZW50cnljb25maWcoaW5kZXgsIGFjY2VsZXJhdG9yPWFj
Y2VsKQ0KDQogICAgZGVmIHNldF9ub3RhYnNfaW5kZW50d2lkdGgoc2VsZik6DQogICAgICAgICJV
cGRhdGUgdGhlIGluZGVudHdpZHRoIGlmIGNoYW5nZWQgYW5kIG5vdCB1c2luZyB0YWJzIGluIHRo
aXMgd2luZG93Ig0KICAgICAgICAjIENhbGxlZCBmcm9tIGNvbmZpZ2RpYWxvZy5weQ0KICAgICAg
ICBpZiBub3Qgc2VsZi51c2V0YWJzOg0KICAgICAgICAgICAgc2VsZi5pbmRlbnR3aWR0aCA9IGlk
bGVDb25mLkdldE9wdGlvbignbWFpbicsICdJbmRlbnQnLCdudW0tc3BhY2VzJywNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0naW50JykNCg0K
ICAgIGRlZiByZXNldF9oZWxwX21lbnVfZW50cmllcyhzZWxmKToNCiAgICAgICAgIlVwZGF0ZSB0
aGUgYWRkaXRpb25hbCBoZWxwIGVudHJpZXMgb24gdGhlIEhlbHAgbWVudSINCiAgICAgICAgaGVs
cF9saXN0ID0gaWRsZUNvbmYuR2V0QWxsRXh0cmFIZWxwU291cmNlc0xpc3QoKQ0KICAgICAgICBo
ZWxwbWVudSA9IHNlbGYubWVudWRpY3RbJ2hlbHAnXQ0KICAgICAgICAjIGZpcnN0IGRlbGV0ZSB0
aGUgZXh0cmEgaGVscCBlbnRyaWVzLCBpZiBhbnkNCiAgICAgICAgaGVscG1lbnVfbGVuZ3RoID0g
aGVscG1lbnUuaW5kZXgoRU5EKQ0KICAgICAgICBpZiBoZWxwbWVudV9sZW5ndGggPiBzZWxmLmJh
c2VfaGVscG1lbnVfbGVuZ3RoOg0KICAgICAgICAgICAgaGVscG1lbnUuZGVsZXRlKChzZWxmLmJh
c2VfaGVscG1lbnVfbGVuZ3RoICsgMSksIGhlbHBtZW51X2xlbmd0aCkNCiAgICAgICAgIyB0aGVu
IHJlYnVpbGQgdGhlbQ0KICAgICAgICBpZiBoZWxwX2xpc3Q6DQogICAgICAgICAgICBoZWxwbWVu
dS5hZGRfc2VwYXJhdG9yKCkNCiAgICAgICAgICAgIGZvciBlbnRyeSBpbiBoZWxwX2xpc3Q6DQog
ICAgICAgICAgICAgICAgY21kID0gc2VsZi5fX2V4dHJhX2hlbHBfY2FsbGJhY2soZW50cnlbMV0p
DQogICAgICAgICAgICAgICAgaGVscG1lbnUuYWRkX2NvbW1hbmQobGFiZWw9ZW50cnlbMF0sIGNv
bW1hbmQ9Y21kKQ0KICAgICAgICAjIGFuZCB1cGRhdGUgdGhlIG1lbnUgZGljdGlvbmFyeQ0KICAg
ICAgICBzZWxmLm1lbnVkaWN0WydoZWxwJ10gPSBoZWxwbWVudQ0KDQogICAgZGVmIF9fZXh0cmFf
aGVscF9jYWxsYmFjayhzZWxmLCBoZWxwZmlsZSk6DQogICAgICAgICJDcmVhdGUgYSBjYWxsYmFj
ayB3aXRoIHRoZSBoZWxwZmlsZSB2YWx1ZSBmcm96ZW4gYXQgZGVmaW5pdGlvbiB0aW1lIg0KICAg
ICAgICBkZWYgZGlzcGxheV9leHRyYV9oZWxwKGhlbHBmaWxlPWhlbHBmaWxlKToNCiAgICAgICAg
ICAgIGlmIG5vdCBoZWxwZmlsZS5zdGFydHN3aXRoKCgnd3d3JywgJ2h0dHAnKSk6DQogICAgICAg
ICAgICAgICAgaGVscGZpbGUgPSBvcy5wYXRoLm5vcm1wYXRoKGhlbHBmaWxlKQ0KICAgICAgICAg
ICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoNCiAgICAgICAgICAgICAgICB0cnk6DQog
ICAgICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShoZWxwZmlsZSkNCiAgICAgICAgICAgICAg
ICBleGNlcHQgT1NFcnJvciBhcyB3aHk6DQogICAgICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJv
eC5zaG93ZXJyb3IodGl0bGU9J0RvY3VtZW50IFN0YXJ0IEZhaWx1cmUnLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZT1zdHIod2h5KSwgcGFyZW50PXNlbGYudGV4dCkNCiAgICAgICAg
ICAgIGVsc2U6DQogICAgICAgICAgICAgICAgd2ViYnJvd3Nlci5vcGVuKGhlbHBmaWxlKQ0KICAg
ICAgICByZXR1cm4gZGlzcGxheV9leHRyYV9oZWxwDQoNCiAgICBkZWYgdXBkYXRlX3JlY2VudF9m
aWxlc19saXN0KHNlbGYsIG5ld19maWxlPU5vbmUpOg0KICAgICAgICAiTG9hZCBhbmQgdXBkYXRl
IHRoZSByZWNlbnQgZmlsZXMgbGlzdCBhbmQgbWVudXMiDQogICAgICAgIHJmX2xpc3QgPSBbXQ0K
ICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnJlY2VudF9maWxlc19wYXRoKToNCiAgICAg
ICAgICAgIHdpdGggb3BlbihzZWxmLnJlY2VudF9maWxlc19wYXRoLCAncicsDQogICAgICAgICAg
ICAgICAgICAgICAgZW5jb2Rpbmc9J3V0Zl84JywgZXJyb3JzPSdyZXBsYWNlJykgYXMgcmZfbGlz
dF9maWxlOg0KICAgICAgICAgICAgICAgIHJmX2xpc3QgPSByZl9saXN0X2ZpbGUucmVhZGxpbmVz
KCkNCiAgICAgICAgaWYgbmV3X2ZpbGU6DQogICAgICAgICAgICBuZXdfZmlsZSA9IG9zLnBhdGgu
YWJzcGF0aChuZXdfZmlsZSkgKyAnXG4nDQogICAgICAgICAgICBpZiBuZXdfZmlsZSBpbiByZl9s
aXN0Og0KICAgICAgICAgICAgICAgIHJmX2xpc3QucmVtb3ZlKG5ld19maWxlKSAgIyBtb3ZlIHRv
IHRvcA0KICAgICAgICAgICAgcmZfbGlzdC5pbnNlcnQoMCwgbmV3X2ZpbGUpDQogICAgICAgICMg
Y2xlYW4gYW5kIHNhdmUgdGhlIHJlY2VudCBmaWxlcyBsaXN0DQogICAgICAgIGJhZF9wYXRocyA9
IFtdDQogICAgICAgIGZvciBwYXRoIGluIHJmX2xpc3Q6DQogICAgICAgICAgICBpZiAnXDAnIGlu
IHBhdGggb3Igbm90IG9zLnBhdGguZXhpc3RzKHBhdGhbMDotMV0pOg0KICAgICAgICAgICAgICAg
IGJhZF9wYXRocy5hcHBlbmQocGF0aCkNCiAgICAgICAgcmZfbGlzdCA9IFtwYXRoIGZvciBwYXRo
IGluIHJmX2xpc3QgaWYgcGF0aCBub3QgaW4gYmFkX3BhdGhzXQ0KICAgICAgICB1bGNoYXJzID0g
IjEyMzQ1Njc4OTBBQkNERUZHSElKSyINCiAgICAgICAgcmZfbGlzdCA9IHJmX2xpc3RbMDpsZW4o
dWxjaGFycyldDQogICAgICAgIHRyeToNCiAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLnJlY2Vu
dF9maWxlc19wYXRoLCAndycsDQogICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0ndXRm
XzgnLCBlcnJvcnM9J3JlcGxhY2UnKSBhcyByZl9maWxlOg0KICAgICAgICAgICAgICAgIHJmX2Zp
bGUud3JpdGVsaW5lcyhyZl9saXN0KQ0KICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6DQog
ICAgICAgICAgICBpZiBub3QgZ2V0YXR0cihzZWxmLnJvb3QsICJyZWNlbnRmaWxlbGlzdF9lcnJv
cl9kaXNwbGF5ZWQiLCBGYWxzZSk6DQogICAgICAgICAgICAgICAgc2VsZi5yb290LnJlY2VudGZp
bGVsaXN0X2Vycm9yX2Rpc3BsYXllZCA9IFRydWUNCiAgICAgICAgICAgICAgICB0a01lc3NhZ2VC
b3guc2hvd3dhcm5pbmcodGl0bGU9J0lETEUgV2FybmluZycsDQogICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2U9IkNhbm5vdCB1cGRhdGUgRmlsZSBtZW51IFJlY2VudCBGaWxlcyBsaXN0LiAiDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdXIgb3BlcmF0aW5nIHN5c3RlbSBzYXlzOlxu
JXNcbiINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VsZWN0IE9LIGFuZCBJRExFIHdp
bGwgY29udGludWUgd2l0aG91dCB1cGRhdGluZy4iDQogICAgICAgICAgICAgICAgICAgICAgICAl
IHNlbGYuX2ZpbGVuYW1lX3RvX3VuaWNvZGUoc3RyKGVycikpLA0KICAgICAgICAgICAgICAgICAg
ICBwYXJlbnQ9c2VsZi50ZXh0KQ0KICAgICAgICAjIGZvciBlYWNoIGVkaXQgd2luZG93IGluc3Rh
bmNlLCBjb25zdHJ1Y3QgdGhlIHJlY2VudCBmaWxlcyBtZW51DQogICAgICAgIGZvciBpbnN0YW5j
ZSBpbiBzZWxmLnRvcC5pbnN0YW5jZV9kaWN0Og0KICAgICAgICAgICAgbWVudSA9IGluc3RhbmNl
LnJlY2VudF9maWxlc19tZW51DQogICAgICAgICAgICBtZW51LmRlbGV0ZSgwLCBFTkQpICAjIGNs
ZWFyLCBhbmQgcmVidWlsZDoNCiAgICAgICAgICAgIGZvciBpLCBmaWxlX25hbWUgaW4gZW51bWVy
YXRlKHJmX2xpc3QpOg0KICAgICAgICAgICAgICAgIGZpbGVfbmFtZSA9IGZpbGVfbmFtZS5yc3Ry
aXAoKSAgIyB6YXAgXG4NCiAgICAgICAgICAgICAgICAjIG1ha2UgdW5pY29kZSBzdHJpbmcgdG8g
ZGlzcGxheSBub24tQVNDSUkgY2hhcnMgY29ycmVjdGx5DQogICAgICAgICAgICAgICAgdWZpbGVf
bmFtZSA9IHNlbGYuX2ZpbGVuYW1lX3RvX3VuaWNvZGUoZmlsZV9uYW1lKQ0KICAgICAgICAgICAg
ICAgIGNhbGxiYWNrID0gaW5zdGFuY2UuX19yZWNlbnRfZmlsZV9jYWxsYmFjayhmaWxlX25hbWUp
DQogICAgICAgICAgICAgICAgbWVudS5hZGRfY29tbWFuZChsYWJlbD11bGNoYXJzW2ldICsgIiAi
ICsgdWZpbGVfbmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9
Y2FsbGJhY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmU9MCkN
Cg0KICAgIGRlZiBfX3JlY2VudF9maWxlX2NhbGxiYWNrKHNlbGYsIGZpbGVfbmFtZSk6DQogICAg
ICAgIGRlZiBvcGVuX3JlY2VudF9maWxlKGZuX2Nsb3N1cmU9ZmlsZV9uYW1lKToNCiAgICAgICAg
ICAgIHNlbGYuaW8ub3BlbihlZGl0RmlsZT1mbl9jbG9zdXJlKQ0KICAgICAgICByZXR1cm4gb3Bl
bl9yZWNlbnRfZmlsZQ0KDQogICAgZGVmIHNhdmVkX2NoYW5nZV9ob29rKHNlbGYpOg0KICAgICAg
ICBzaG9ydCA9IHNlbGYuc2hvcnRfdGl0bGUoKQ0KICAgICAgICBsb25nID0gc2VsZi5sb25nX3Rp
dGxlKCkNCiAgICAgICAgaWYgc2hvcnQgYW5kIGxvbmc6DQogICAgICAgICAgICB0aXRsZSA9IHNo
b3J0ICsgIiAtICIgKyBsb25nICsgX3B5X3ZlcnNpb24NCiAgICAgICAgZWxpZiBzaG9ydDoNCiAg
ICAgICAgICAgIHRpdGxlID0gc2hvcnQNCiAgICAgICAgZWxpZiBsb25nOg0KICAgICAgICAgICAg
dGl0bGUgPSBsb25nDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICB0aXRsZSA9ICJVbnRpdGxl
ZCINCiAgICAgICAgaWNvbiA9IHNob3J0IG9yIGxvbmcgb3IgdGl0bGUNCiAgICAgICAgaWYgbm90
IHNlbGYuZ2V0X3NhdmVkKCk6DQogICAgICAgICAgICB0aXRsZSA9ICIqJXMqIiAlIHRpdGxlDQog
ICAgICAgICAgICBpY29uID0gIiolcyIgJSBpY29uDQogICAgICAgIHNlbGYudG9wLndtX3RpdGxl
KHRpdGxlKQ0KICAgICAgICBzZWxmLnRvcC53bV9pY29ubmFtZShpY29uKQ0KDQogICAgZGVmIGdl
dF9zYXZlZChzZWxmKToNCiAgICAgICAgcmV0dXJuIHNlbGYudW5kby5nZXRfc2F2ZWQoKQ0KDQog
ICAgZGVmIHNldF9zYXZlZChzZWxmLCBmbGFnKToNCiAgICAgICAgc2VsZi51bmRvLnNldF9zYXZl
ZChmbGFnKQ0KDQogICAgZGVmIHJlc2V0X3VuZG8oc2VsZik6DQogICAgICAgIHNlbGYudW5kby5y
ZXNldF91bmRvKCkNCg0KICAgIGRlZiBzaG9ydF90aXRsZShzZWxmKToNCiAgICAgICAgZmlsZW5h
bWUgPSBzZWxmLmlvLmZpbGVuYW1lDQogICAgICAgIGlmIGZpbGVuYW1lOg0KICAgICAgICAgICAg
ZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQ0KICAgICAgICBlbHNlOg0KICAg
ICAgICAgICAgZmlsZW5hbWUgPSAiVW50aXRsZWQiDQogICAgICAgICMgcmV0dXJuIHVuaWNvZGUg
c3RyaW5nIHRvIGRpc3BsYXkgbm9uLUFTQ0lJIGNoYXJzIGNvcnJlY3RseQ0KICAgICAgICByZXR1
cm4gc2VsZi5fZmlsZW5hbWVfdG9fdW5pY29kZShmaWxlbmFtZSkNCg0KICAgIGRlZiBsb25nX3Rp
dGxlKHNlbGYpOg0KICAgICAgICAjIHJldHVybiB1bmljb2RlIHN0cmluZyB0byBkaXNwbGF5IG5v
bi1BU0NJSSBjaGFycyBjb3JyZWN0bHkNCiAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVuYW1lX3Rv
X3VuaWNvZGUoc2VsZi5pby5maWxlbmFtZSBvciAiIikNCg0KICAgIGRlZiBjZW50ZXJfaW5zZXJ0
X2V2ZW50KHNlbGYsIGV2ZW50KToNCiAgICAgICAgc2VsZi5jZW50ZXIoKQ0KICAgICAgICByZXR1
cm4gImJyZWFrIg0KDQogICAgZGVmIGNlbnRlcihzZWxmLCBtYXJrPSJpbnNlcnQiKToNCiAgICAg
ICAgdGV4dCA9IHNlbGYudGV4dA0KICAgICAgICB0b3AsIGJvdCA9IHNlbGYuZ2V0d2luZG93bGlu
ZXMoKQ0KICAgICAgICBsaW5lbm8gPSBzZWxmLmdldGxpbmVubyhtYXJrKQ0KICAgICAgICBoZWln
aHQgPSBib3QgLSB0b3ANCiAgICAgICAgbmV3dG9wID0gbWF4KDEsIGxpbmVubyAtIGhlaWdodC8v
MikNCiAgICAgICAgdGV4dC55dmlldyhmbG9hdChuZXd0b3ApKQ0KDQogICAgZGVmIGdldHdpbmRv
d2xpbmVzKHNlbGYpOg0KICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0DQogICAgICAgIHRvcCA9IHNl
bGYuZ2V0bGluZW5vKCJAMCwwIikNCiAgICAgICAgYm90ID0gc2VsZi5nZXRsaW5lbm8oIkAwLDY1
NTM1IikNCiAgICAgICAgaWYgdG9wID09IGJvdCBhbmQgdGV4dC53aW5mb19oZWlnaHQoKSA9PSAx
Og0KICAgICAgICAgICAgIyBHZW9tZXRyeSBtYW5hZ2VyIGhhc24ndCBydW4geWV0DQogICAgICAg
ICAgICBoZWlnaHQgPSBpbnQodGV4dFsnaGVpZ2h0J10pDQogICAgICAgICAgICBib3QgPSB0b3Ag
KyBoZWlnaHQgLSAxDQogICAgICAgIHJldHVybiB0b3AsIGJvdA0KDQogICAgZGVmIGdldGxpbmVu
byhzZWxmLCBtYXJrPSJpbnNlcnQiKToNCiAgICAgICAgdGV4dCA9IHNlbGYudGV4dA0KICAgICAg
ICByZXR1cm4gaW50KGZsb2F0KHRleHQuaW5kZXgobWFyaykpKQ0KDQogICAgZGVmIGdldF9nZW9t
ZXRyeShzZWxmKToNCiAgICAgICAgIlJldHVybiAod2lkdGgsIGhlaWdodCwgeCwgeSkiDQogICAg
ICAgIGdlb20gPSBzZWxmLnRvcC53bV9nZW9tZXRyeSgpDQogICAgICAgIG0gPSByZS5tYXRjaChy
IihcZCspeChcZCspXCsoLT9cZCspXCsoLT9cZCspIiwgZ2VvbSkNCiAgICAgICAgcmV0dXJuIGxp
c3QobWFwKGludCwgbS5ncm91cHMoKSkpDQoNCiAgICBkZWYgY2xvc2VfZXZlbnQoc2VsZiwgZXZl
bnQpOg0KICAgICAgICBzZWxmLmNsb3NlKCkNCiAgICAgICAgcmV0dXJuICJicmVhayINCg0KICAg
IGRlZiBtYXliZXNhdmUoc2VsZik6DQogICAgICAgIGlmIHNlbGYuaW86DQogICAgICAgICAgICBp
ZiBub3Qgc2VsZi5nZXRfc2F2ZWQoKToNCiAgICAgICAgICAgICAgICBpZiBzZWxmLnRvcC5zdGF0
ZSgpIT0nbm9ybWFsJzoNCiAgICAgICAgICAgICAgICAgICAgc2VsZi50b3AuZGVpY29uaWZ5KCkN
CiAgICAgICAgICAgICAgICBzZWxmLnRvcC5sb3dlcigpDQogICAgICAgICAgICAgICAgc2VsZi50
b3AubGlmdCgpDQogICAgICAgICAgICByZXR1cm4gc2VsZi5pby5tYXliZXNhdmUoKQ0KDQogICAg
ZGVmIGNsb3NlKHNlbGYpOg0KICAgICAgICByZXBseSA9IHNlbGYubWF5YmVzYXZlKCkNCiAgICAg
ICAgaWYgc3RyKHJlcGx5KSAhPSAiY2FuY2VsIjoNCiAgICAgICAgICAgIHNlbGYuX2Nsb3NlKCkN
CiAgICAgICAgcmV0dXJuIHJlcGx5DQoNCiAgICBkZWYgX2Nsb3NlKHNlbGYpOg0KICAgICAgICBp
ZiBzZWxmLmlvLmZpbGVuYW1lOg0KICAgICAgICAgICAgc2VsZi51cGRhdGVfcmVjZW50X2ZpbGVz
X2xpc3QobmV3X2ZpbGU9c2VsZi5pby5maWxlbmFtZSkNCiAgICAgICAgd2luZG93cy51bnJlZ2lz
dGVyX2NhbGxiYWNrKHNlbGYucG9zdHdpbmRvd3NtZW51KQ0KICAgICAgICBzZWxmLnVubG9hZF9l
eHRlbnNpb25zKCkNCiAgICAgICAgc2VsZi5pby5jbG9zZSgpDQogICAgICAgIHNlbGYuaW8gPSBO
b25lDQogICAgICAgIHNlbGYudW5kbyA9IE5vbmUNCiAgICAgICAgaWYgc2VsZi5jb2xvcjoNCiAg
ICAgICAgICAgIHNlbGYuY29sb3IuY2xvc2UoRmFsc2UpDQogICAgICAgICAgICBzZWxmLmNvbG9y
ID0gTm9uZQ0KICAgICAgICBzZWxmLnRleHQgPSBOb25lDQogICAgICAgIHNlbGYudGtpbnRlcl92
YXJzID0gTm9uZQ0KICAgICAgICBzZWxmLnBlci5jbG9zZSgpDQogICAgICAgIHNlbGYucGVyID0g
Tm9uZQ0KICAgICAgICBzZWxmLnRvcC5kZXN0cm95KCkNCiAgICAgICAgaWYgc2VsZi5jbG9zZV9o
b29rOg0KICAgICAgICAgICAgIyB1bmxlc3Mgb3ZlcnJpZGU6IHVucmVnaXN0ZXIgZnJvbSBmbGlz
dCwgdGVybWluYXRlIGlmIGxhc3Qgd2luZG93DQogICAgICAgICAgICBzZWxmLmNsb3NlX2hvb2so
KQ0KDQogICAgZGVmIGxvYWRfZXh0ZW5zaW9ucyhzZWxmKToNCiAgICAgICAgc2VsZi5leHRlbnNp
b25zID0ge30NCiAgICAgICAgc2VsZi5sb2FkX3N0YW5kYXJkX2V4dGVuc2lvbnMoKQ0KDQogICAg
ZGVmIHVubG9hZF9leHRlbnNpb25zKHNlbGYpOg0KICAgICAgICBmb3IgaW5zIGluIGxpc3Qoc2Vs
Zi5leHRlbnNpb25zLnZhbHVlcygpKToNCiAgICAgICAgICAgIGlmIGhhc2F0dHIoaW5zLCAiY2xv
c2UiKToNCiAgICAgICAgICAgICAgICBpbnMuY2xvc2UoKQ0KICAgICAgICBzZWxmLmV4dGVuc2lv
bnMgPSB7fQ0KDQogICAgZGVmIGxvYWRfc3RhbmRhcmRfZXh0ZW5zaW9ucyhzZWxmKToNCiAgICAg
ICAgZm9yIG5hbWUgaW4gc2VsZi5nZXRfc3RhbmRhcmRfZXh0ZW5zaW9uX25hbWVzKCk6DQogICAg
ICAgICAgICB0cnk6DQogICAgICAgICAgICAgICAgc2VsZi5sb2FkX2V4dGVuc2lvbihuYW1lKQ0K
ICAgICAgICAgICAgZXhjZXB0Og0KICAgICAgICAgICAgICAgIHByaW50KCJGYWlsZWQgdG8gbG9h
ZCBleHRlbnNpb24iLCByZXByKG5hbWUpKQ0KICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmlu
dF9leGMoKQ0KDQogICAgZGVmIGdldF9zdGFuZGFyZF9leHRlbnNpb25fbmFtZXMoc2VsZik6DQog
ICAgICAgIHJldHVybiBpZGxlQ29uZi5HZXRFeHRlbnNpb25zKGVkaXRvcl9vbmx5PVRydWUpDQoN
CiAgICBleHRmaWxlcyA9IHsgICMgTWFwIGJ1aWx0LWluIGNvbmZpZy1leHRlbnNpb24gc2VjdGlv
biBuYW1lcyB0byBmaWxlIG5hbWVzLg0KICAgICAgICAnWnpEdW1teSc6ICd6emR1bW15JywNCiAg
ICAgICAgfQ0KDQogICAgZGVmIGxvYWRfZXh0ZW5zaW9uKHNlbGYsIG5hbWUpOg0KICAgICAgICBm
bmFtZSA9IHNlbGYuZXh0ZmlsZXMuZ2V0KG5hbWUsIG5hbWUpDQogICAgICAgIHRyeToNCiAgICAg
ICAgICAgIHRyeToNCiAgICAgICAgICAgICAgICBtb2QgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVs
ZSgnLicgKyBmbmFtZSwgcGFja2FnZT1fX3BhY2thZ2VfXykNCiAgICAgICAgICAgIGV4Y2VwdCAo
SW1wb3J0RXJyb3IsIFR5cGVFcnJvcik6DQogICAgICAgICAgICAgICAgbW9kID0gaW1wb3J0bGli
LmltcG9ydF9tb2R1bGUoZm5hbWUpDQogICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoNCiAgICAg
ICAgICAgIHByaW50KCJcbkZhaWxlZCB0byBpbXBvcnQgZXh0ZW5zaW9uOiAiLCBuYW1lKQ0KICAg
ICAgICAgICAgcmFpc2UNCiAgICAgICAgY2xzID0gZ2V0YXR0cihtb2QsIG5hbWUpDQogICAgICAg
IGtleWRlZnMgPSBpZGxlQ29uZi5HZXRFeHRlbnNpb25CaW5kaW5ncyhuYW1lKQ0KICAgICAgICBp
ZiBoYXNhdHRyKGNscywgIm1lbnVkZWZzIik6DQogICAgICAgICAgICBzZWxmLmZpbGxfbWVudXMo
Y2xzLm1lbnVkZWZzLCBrZXlkZWZzKQ0KICAgICAgICBpbnMgPSBjbHMoc2VsZikNCiAgICAgICAg
c2VsZi5leHRlbnNpb25zW25hbWVdID0gaW5zDQogICAgICAgIGlmIGtleWRlZnM6DQogICAgICAg
ICAgICBzZWxmLmFwcGx5X2JpbmRpbmdzKGtleWRlZnMpDQogICAgICAgICAgICBmb3IgdmV2ZW50
IGluIGtleWRlZnM6DQogICAgICAgICAgICAgICAgbWV0aG9kbmFtZSA9IHZldmVudC5yZXBsYWNl
KCItIiwgIl8iKQ0KICAgICAgICAgICAgICAgIHdoaWxlIG1ldGhvZG5hbWVbOjFdID09ICc8JzoN
CiAgICAgICAgICAgICAgICAgICAgbWV0aG9kbmFtZSA9IG1ldGhvZG5hbWVbMTpdDQogICAgICAg
ICAgICAgICAgd2hpbGUgbWV0aG9kbmFtZVstMTpdID09ICc+JzoNCiAgICAgICAgICAgICAgICAg
ICAgbWV0aG9kbmFtZSA9IG1ldGhvZG5hbWVbOi0xXQ0KICAgICAgICAgICAgICAgIG1ldGhvZG5h
bWUgPSBtZXRob2RuYW1lICsgIl9ldmVudCINCiAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGlu
cywgbWV0aG9kbmFtZSk6DQogICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dC5iaW5kKHZldmVu
dCwgZ2V0YXR0cihpbnMsIG1ldGhvZG5hbWUpKQ0KDQogICAgZGVmIGFwcGx5X2JpbmRpbmdzKHNl
bGYsIGtleWRlZnM9Tm9uZSk6DQogICAgICAgIGlmIGtleWRlZnMgaXMgTm9uZToNCiAgICAgICAg
ICAgIGtleWRlZnMgPSBzZWxmLm1haW5tZW51LmRlZmF1bHRfa2V5ZGVmcw0KICAgICAgICB0ZXh0
ID0gc2VsZi50ZXh0DQogICAgICAgIHRleHQua2V5ZGVmcyA9IGtleWRlZnMNCiAgICAgICAgZm9y
IGV2ZW50LCBrZXlsaXN0IGluIGtleWRlZnMuaXRlbXMoKToNCiAgICAgICAgICAgIGlmIGtleWxp
c3Q6DQogICAgICAgICAgICAgICAgdGV4dC5ldmVudF9hZGQoZXZlbnQsICprZXlsaXN0KQ0KDQog
ICAgZGVmIGZpbGxfbWVudXMoc2VsZiwgbWVudWRlZnM9Tm9uZSwga2V5ZGVmcz1Ob25lKToNCiAg
ICAgICAgIiIiQWRkIGFwcHJvcHJpYXRlIGVudHJpZXMgdG8gdGhlIG1lbnVzIGFuZCBzdWJtZW51
cw0KDQogICAgICAgIE1lbnVzIHRoYXQgYXJlIGFic2VudCBvciBOb25lIGluIHNlbGYubWVudWRp
Y3QgYXJlIGlnbm9yZWQuDQogICAgICAgICIiIg0KICAgICAgICBpZiBtZW51ZGVmcyBpcyBOb25l
Og0KICAgICAgICAgICAgbWVudWRlZnMgPSBbDQogICAgICAgICAgICAgICAgKCdmaWxlJywgWygn
X05ldyBGaWxlJywgJzw8b3Blbi1uZXctd2luZG93Pj4nKSwoJ19PcGVuLi4uJywgJzw8b3Blbi13
aW5kb3ctZnJvbS1maWxlPj4nKSwgKCdPcGVuIF9Nb2R1bGUuLi4nLCAnPDxvcGVuLW1vZHVsZT4+
JyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICgnTW9kdWxlIF9Ccm93c2VyJywgJzw8b3Bl
bi1jbGFzcy1icm93c2VyPj4nKSwgKCdfUGF0aCBCcm93c2VyJywgJzw8b3Blbi1wYXRoLWJyb3dz
ZXI+PicpLCBOb25lLCAoJ19TYXZlJywgJzw8c2F2ZS13aW5kb3c+PicpLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAoJ1NhdmUgX0FzLi4uJywgJzw8c2F2ZS13aW5kb3ctYXMtZmlsZT4+Jyks
ICgnU2F2ZSBDb3BfeSBBcy4uLicsICc8PHNhdmUtY29weS1vZi13aW5kb3ctYXMtZmlsZT4+Jyks
IE5vbmUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICgnUHJpbl90IFdpbmRvdycsICc8PHBy
aW50LXdpbmRvdz4+JyksIE5vbmUsICgnX0Nsb3NlJywgJzw8Y2xvc2Utd2luZG93Pj4nKSwgKCdF
X3hpdCcsICc8PGNsb3NlLWFsbC13aW5kb3dzPj4nKV0pLA0KICAgICAgICAgICAgICAgICgnZWRp
dCcsIFsoJ19VbmRvJywgJzw8dW5kbz4+JyksICgnX1JlZG8nLCAnPDxyZWRvPj4nKSwgTm9uZSwg
KCdDdV90JywgJzw8Y3V0Pj4nKSwgKCdfQ29weScsICc8PGNvcHk+PicpLCAoJ19QYXN0ZScsICc8
PHBhc3RlPj4nKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdTZWxlY3QgX0FsbCcsICc8
PHNlbGVjdC1hbGw+PicpLCBOb25lLCAoJ19GaW5kLi4uJywgJzw8ZmluZD4+JyksICgnRmluZCBB
X2dhaW4nLCAnPDxmaW5kLWFnYWluPj4nKSwgKCdGaW5kIF9TZWxlY3Rpb24nLCAnPDxmaW5kLXNl
bGVjdGlvbj4+JyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICgnRmluZCBpbiBGaWxlcy4u
LicsICc8PGZpbmQtaW4tZmlsZXM+PicpLCAoJ1JfZXBsYWNlLi4uJywgJzw8cmVwbGFjZT4+Jyks
ICgnR28gdG8gX0xpbmUnLCAnPDxnb3RvLWxpbmU+PicpLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAoJ1NfaG93IENvbXBsZXRpb25zJywgJzw8Zm9yY2Utb3Blbi1jb21wbGV0aW9ucz4+Jyks
ICgnRV94cGFuZCBXb3JkJywgJzw8ZXhwYW5kLXdvcmQ+PicpLCAoJ1Nob3cgQ19hbGwgVGlwJywg
Jzw8Zm9yY2Utb3Blbi1jYWxsdGlwPj4nKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdT
aG93IFN1cnJvdW5kaW5nIFBfYXJlbnMnLCAnPDxmbGFzaC1wYXJlbj4+JyldKSwNCiAgICAgICAg
ICAgICAgICAoJ2Zvcm1hdCcsIFsoJ19JbmRlbnQgUmVnaW9uJywgJzw8aW5kZW50LXJlZ2lvbj4+
JyksICgnX0RlZGVudCBSZWdpb24nLCAnPDxkZWRlbnQtcmVnaW9uPj4nKSwgKCdDb21tZW50IF9P
dXQgUmVnaW9uJywgJzw8Y29tbWVudC1yZWdpb24+PicpLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgnVV9uY29tbWVudCBSZWdpb24nLCAnPDx1bmNvbW1lbnQtcmVnaW9uPj4nKSwgKCdU
YWJpZnkgUmVnaW9uJywgJzw8dGFiaWZ5LXJlZ2lvbj4+JyksICgnVW50YWJpZnkgUmVnaW9uJywg
Jzw8dW50YWJpZnktcmVnaW9uPj4nKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1Rv
Z2dsZSBUYWJzJywgJzw8dG9nZ2xlLXRhYnM+PicpLCAoJ05ldyBJbmRlbnQgV2lkdGgnLCAnPDxj
aGFuZ2UtaW5kZW50d2lkdGg+PicpLCAoJ0Zfb3JtYXQgUGFyYWdyYXBoJywgJzw8Zm9ybWF0LXBh
cmFncmFwaD4+JyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdTX3RyaXAgVHJhaWxp
bmcgV2hpdGVzcGFjZScsICc8PGRvLXJzdHJpcD4+JyldKSwNCiAgICAgICAgICAgICAgICAoJ3J1
bicsIFsoJ1B5dGhvbiBTaGVsbCcsICc8PG9wZW4tcHl0aG9uLXNoZWxsPj4nKSwgKCdDX2hlY2sg
TW9kdWxlJywgJzw8Y2hlY2stbW9kdWxlPj4nKSwgKCdSX3VuIE1vZHVsZScsICc8PHJ1bi1tb2R1
bGU+PicpXSksDQogICAgICAgICAgICAgICAgKCdzaGVsbCcsIFsoJ19WaWV3IExhc3QgUmVzdGFy
dCcsICc8PHZpZXctcmVzdGFydD4+JyksICgnX1Jlc3RhcnQgU2hlbGwnLCAnPDxyZXN0YXJ0LXNo
ZWxsPj4nKSwgTm9uZSwgKCdfSW50ZXJydXB0IEV4ZWN1dGlvbicsICc8PGludGVycnVwdC1leGVj
dXRpb24+PicpXSksDQogICAgICAgICAgICAgICAgKCdkZWJ1ZycsIFsoJ19HbyB0byBGaWxlL0xp
bmUnLCAnPDxnb3RvLWZpbGUtbGluZT4+JyksICgnIV9EZWJ1Z2dlcicsICc8PHRvZ2dsZS1kZWJ1
Z2dlcj4+JyksICgnX1N0YWNrIFZpZXdlcicsICc8PG9wZW4tc3RhY2stdmlld2VyPj4nKSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgnIV9BdXRvLW9wZW4gU3RhY2sgVmlld2VyJywgJzw8
dG9nZ2xlLWppdC1zdGFjay12aWV3ZXI+PicpXSksDQogICAgICAgICAgICAgICAgKCdvcHRpb25z
JywgWygnQ29uZmlndXJlIF9JRExFJywgJzw8b3Blbi1jb25maWctZGlhbG9nPj4nKSwoJ19Db2Rl
IENvbnRleHQnLCAnPDx0b2dnbGUtY29kZS1jb250ZXh0Pj4nKV0pLA0KICAgICAgICAgICAgICAg
ICgnd2luZG93cycsIFsoJ1pvb20gSGVpZ2h0JywgJzw8em9vbS1oZWlnaHQ+PicpXSksDQogICAg
ICAgICAgICAgICAgKCdoZWxwJywgWygnX0Fib3V0IElETEUnLCAnPDxhYm91dC1pZGxlPj4nKSwg
Tm9uZSwgKCdfSURMRSBIZWxwJywgJzw8aGVscD4+JyksICgnUHl0aG9uIF9Eb2NzJywgJzw8cHl0
aG9uLWRvY3M+PicpLCAoJ1R1cnRsZSBEZW1vJywgJzw8b3Blbi10dXJ0bGUtZGVtbz4+JyldKSwN
CiAgICAgICAgICAgICAgICAoJ2FscGhhJywgWygnTm90IFRyYW5zcGFyZW50JywgJzw8YWxwaGEt
MD4+JyksICgnTGl0dGxlIFRyYW5zcGFyZW50JywgJzw8YWxwaGEtMT4+JyksICgnSGFsZiBUcmFu
c3BhcmVudCcsICc8PGFscGhhLTI+PicpLCAoJ01vc3RseSBUcmFuc3BhcmVudCcsICc8PGFscGhh
LTM+PicpXSldDQogICAgICAgICAgICANCiAgICAgICAgIyBBbHBoYXMgd2VyZSBhZGRlZCBoZXJl
IGJ5IGhhbmQNCiAgICAgICAgIyBTdXBlciBzb3JyeSBpZiB0aGlzIGxvb2tzIHVnbHksIGJ1dCBJ
IHJlYWxseSBjYW4gbm90IGZpbmQgd2hlcmUgaXMgdGhlICJzZWxmLm1haW5tZW51Lm1lbnVkZWZz
Ig0KICAgICAgICAjIEFuZCBJJ20ganVzdCB0b28gbGF6eSB0byBnbyB0byB0aGVyZSB4RA0KICAg
ICAgICBpZiBrZXlkZWZzIGlzIE5vbmU6DQogICAgICAgICAgICBrZXlkZWZzID0gc2VsZi5tYWlu
bWVudS5kZWZhdWx0X2tleWRlZnMNCiAgICAgICAgbWVudWRpY3QgPSBzZWxmLm1lbnVkaWN0DQog
ICAgICAgIHRleHQgPSBzZWxmLnRleHQNCiAgICAgICAgZm9yIG1uYW1lLCBlbnRyeWxpc3QgaW4g
bWVudWRlZnM6DQogICAgICAgICAgICBtZW51ID0gbWVudWRpY3QuZ2V0KG1uYW1lKQ0KICAgICAg
ICAgICAgaWYgbm90IG1lbnU6DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAg
IGZvciBlbnRyeSBpbiBlbnRyeWxpc3Q6DQogICAgICAgICAgICAgICAgaWYgbm90IGVudHJ5Og0K
ICAgICAgICAgICAgICAgICAgICBtZW51LmFkZF9zZXBhcmF0b3IoKQ0KICAgICAgICAgICAgICAg
IGVsc2U6DQogICAgICAgICAgICAgICAgICAgIGxhYmVsLCBldmVudG5hbWUgPSBlbnRyeQ0KICAg
ICAgICAgICAgICAgICAgICBjaGVja2J1dHRvbiA9IChsYWJlbFs6MV0gPT0gJyEnKQ0KICAgICAg
ICAgICAgICAgICAgICBpZiBjaGVja2J1dHRvbjoNCiAgICAgICAgICAgICAgICAgICAgICAgIGxh
YmVsID0gbGFiZWxbMTpdDQogICAgICAgICAgICAgICAgICAgIHVuZGVybGluZSwgbGFiZWwgPSBw
cmVwc3RyKGxhYmVsKQ0KICAgICAgICAgICAgICAgICAgICBhY2NlbGVyYXRvciA9IGdldF9hY2Nl
bGVyYXRvcihrZXlkZWZzLCBldmVudG5hbWUpDQogICAgICAgICAgICAgICAgICAgIGRlZiBjb21t
YW5kKHRleHQ9dGV4dCwgZXZlbnRuYW1lPWV2ZW50bmFtZSk6DQogICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0LmV2ZW50X2dlbmVyYXRlKGV2ZW50bmFtZSkNCiAgICAgICAgICAgICAgICAgICAg
aWYgY2hlY2tidXR0b246DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgPSBzZWxmLmdldF92
YXJfb2JqKGV2ZW50bmFtZSwgQm9vbGVhblZhcikNCiAgICAgICAgICAgICAgICAgICAgICAgIG1l
bnUuYWRkX2NoZWNrYnV0dG9uKGxhYmVsPWxhYmVsLCB1bmRlcmxpbmU9dW5kZXJsaW5lLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9Y29tbWFuZCwgYWNjZWxlcmF0b3I9YWNj
ZWxlcmF0b3IsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9dmFyKQ0KICAg
ICAgICAgICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgICAgICAgICAgbWVudS5hZGRf
Y29tbWFuZChsYWJlbD1sYWJlbCwgdW5kZXJsaW5lPXVuZGVybGluZSwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1jb21tYW5kLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlbGVyYXRvcj1hY2NlbGVyYXRvcikNCg0K
ICAgIGRlZiBnZXR2YXIoc2VsZiwgbmFtZSk6DQogICAgICAgIHZhciA9IHNlbGYuZ2V0X3Zhcl9v
YmoobmFtZSkNCiAgICAgICAgaWYgdmFyOg0KICAgICAgICAgICAgdmFsdWUgPSB2YXIuZ2V0KCkN
CiAgICAgICAgICAgIHJldHVybiB2YWx1ZQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgcmFp
c2UgTmFtZUVycm9yKG5hbWUpDQoNCiAgICBkZWYgc2V0dmFyKHNlbGYsIG5hbWUsIHZhbHVlLCB2
YXJ0eXBlPU5vbmUpOg0KICAgICAgICB2YXIgPSBzZWxmLmdldF92YXJfb2JqKG5hbWUsIHZhcnR5
cGUpDQogICAgICAgIGlmIHZhcjoNCiAgICAgICAgICAgIHZhci5zZXQodmFsdWUpDQogICAgICAg
IGVsc2U6DQogICAgICAgICAgICByYWlzZSBOYW1lRXJyb3IobmFtZSkNCg0KICAgIGRlZiBnZXRf
dmFyX29iaihzZWxmLCBuYW1lLCB2YXJ0eXBlPU5vbmUpOg0KICAgICAgICB2YXIgPSBzZWxmLnRr
aW50ZXJfdmFycy5nZXQobmFtZSkNCiAgICAgICAgaWYgbm90IHZhciBhbmQgdmFydHlwZToNCiAg
ICAgICAgICAgICMgY3JlYXRlIGEgVGtpbnRlciB2YXJpYWJsZSBvYmplY3Qgd2l0aCBzZWxmLnRl
eHQgYXMgbWFzdGVyOg0KICAgICAgICAgICAgc2VsZi50a2ludGVyX3ZhcnNbbmFtZV0gPSB2YXIg
PSB2YXJ0eXBlKHNlbGYudGV4dCkNCiAgICAgICAgcmV0dXJuIHZhcg0KDQogICAgIyBUayBpbXBs
ZW1lbnRhdGlvbnMgb2YgInZpcnR1YWwgdGV4dCBtZXRob2RzIiAtLSBlYWNoIHBsYXRmb3JtDQog
ICAgIyByZXVzaW5nIElETEUncyBzdXBwb3J0IGNvZGUgbmVlZHMgdG8gZGVmaW5lIHRoZXNlIGZv
ciBpdHMgR1VJJ3MNCiAgICAjIGZsYXZvciBvZiB3aWRnZXQuDQoNCiAgICAjIElzIGNoYXJhY3Rl
ciBhdCB0ZXh0X2luZGV4IGluIGEgUHl0aG9uIHN0cmluZz8gIFJldHVybiAwIGZvcg0KICAgICMg
Imd1YXJhbnRlZWQgbm8iLCB0cnVlIGZvciBhbnl0aGluZyBlbHNlLiAgVGhpcyBpbmZvIGlzIGV4
cGVuc2l2ZQ0KICAgICMgdG8gY29tcHV0ZSBhYiBpbml0aW8sIGJ1dCBpcyBwcm9iYWJseSBhbHJl
YWR5IGtub3duIGJ5IHRoZQ0KICAgICMgcGxhdGZvcm0ncyBjb2xvcml6ZXIuDQoNCiAgICBkZWYg
aXNfY2hhcl9pbl9zdHJpbmcoc2VsZiwgdGV4dF9pbmRleCk6DQogICAgICAgIGlmIHNlbGYuY29s
b3I6DQogICAgICAgICAgICAjIFJldHVybiB0cnVlIGlmZiBjb2xvcml6ZXIgaGFzbid0IChyZSln
b3R0ZW4gdGhpcyBmYXINCiAgICAgICAgICAgICMgeWV0LCBvciB0aGUgY2hhcmFjdGVyIGlzIHRh
Z2dlZCBhcyBiZWluZyBpbiBhIHN0cmluZw0KICAgICAgICAgICAgcmV0dXJuIHNlbGYudGV4dC50
YWdfcHJldnJhbmdlKCJUT0RPIiwgdGV4dF9pbmRleCkgb3IgXA0KICAgICAgICAgICAgICAgICAg
ICJTVFJJTkciIGluIHNlbGYudGV4dC50YWdfbmFtZXModGV4dF9pbmRleCkNCiAgICAgICAgZWxz
ZToNCiAgICAgICAgICAgICMgVGhlIGNvbG9yaXplciBpcyBtaXNzaW5nOiBhc3N1bWUgdGhlIHdv
cnN0DQogICAgICAgICAgICByZXR1cm4gMQ0KDQogICAgIyBJZiBhIHNlbGVjdGlvbiBpcyBkZWZp
bmVkIGluIHRoZSB0ZXh0IHdpZGdldCwgcmV0dXJuIChzdGFydCwNCiAgICAjIGVuZCkgYXMgVGtp
bnRlciB0ZXh0IGluZGljZXMsIG90aGVyd2lzZSByZXR1cm4gKE5vbmUsIE5vbmUpDQogICAgZGVm
IGdldF9zZWxlY3Rpb25faW5kaWNlcyhzZWxmKToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAg
Zmlyc3QgPSBzZWxmLnRleHQuaW5kZXgoInNlbC5maXJzdCIpDQogICAgICAgICAgICBsYXN0ID0g
c2VsZi50ZXh0LmluZGV4KCJzZWwubGFzdCIpDQogICAgICAgICAgICByZXR1cm4gZmlyc3QsIGxh
c3QNCiAgICAgICAgZXhjZXB0IFRjbEVycm9yOg0KICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5v
bmUNCg0KICAgICMgUmV0dXJuIHRoZSB0ZXh0IHdpZGdldCdzIGN1cnJlbnQgdmlldyBvZiB3aGF0
IGEgdGFiIHN0b3AgbWVhbnMNCiAgICAjIChlcXVpdmFsZW50IHdpZHRoIGluIHNwYWNlcykuDQoN
CiAgICBkZWYgZ2V0X3RrX3RhYndpZHRoKHNlbGYpOg0KICAgICAgICBjdXJyZW50ID0gc2VsZi50
ZXh0Wyd0YWJzJ10gb3IgVEtfVEFCV0lEVEhfREVGQVVMVA0KICAgICAgICByZXR1cm4gaW50KGN1
cnJlbnQpDQoNCiAgICAjIFNldCB0aGUgdGV4dCB3aWRnZXQncyBjdXJyZW50IHZpZXcgb2Ygd2hh
dCBhIHRhYiBzdG9wIG1lYW5zLg0KDQogICAgZGVmIHNldF90a190YWJ3aWR0aChzZWxmLCBuZXd0
YWJ3aWR0aCk6DQogICAgICAgIHRleHQgPSBzZWxmLnRleHQNCiAgICAgICAgaWYgc2VsZi5nZXRf
dGtfdGFid2lkdGgoKSAhPSBuZXd0YWJ3aWR0aDoNCiAgICAgICAgICAgICMgU2V0IHRleHQgd2lk
Z2V0IHRhYiB3aWR0aA0KICAgICAgICAgICAgcGl4ZWxzID0gdGV4dC50ay5jYWxsKCJmb250Iiwg
Im1lYXN1cmUiLCB0ZXh0WyJmb250Il0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIi1kaXNwbGF5b2YiLCB0ZXh0Lm1hc3RlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAibiIgKiBuZXd0YWJ3aWR0aCkNCiAgICAgICAgICAgIHRleHQuY29uZmlndXJlKHRh
YnM9cGl4ZWxzKQ0KDQojIyMgYmVnaW4gYXV0b2luZGVudCBjb2RlICMjIyAgKGNvbmZpZ3VyYXRp
b24gd2FzIG1vdmVkIHRvIGJlZ2lubmluZyBvZiBjbGFzcykNCg0KICAgIGRlZiBzZXRfaW5kZW50
YXRpb25fcGFyYW1zKHNlbGYsIGlzX3B5X3NyYywgZ3Vlc3M9VHJ1ZSk6DQogICAgICAgIGlmIGlz
X3B5X3NyYyBhbmQgZ3Vlc3M6DQogICAgICAgICAgICBpID0gc2VsZi5ndWVzc19pbmRlbnQoKQ0K
ICAgICAgICAgICAgaWYgMiA8PSBpIDw9IDg6DQogICAgICAgICAgICAgICAgc2VsZi5pbmRlbnR3
aWR0aCA9IGkNCiAgICAgICAgICAgIGlmIHNlbGYuaW5kZW50d2lkdGggIT0gc2VsZi50YWJ3aWR0
aDoNCiAgICAgICAgICAgICAgICBzZWxmLnVzZXRhYnMgPSBGYWxzZQ0KICAgICAgICBzZWxmLnNl
dF90a190YWJ3aWR0aChzZWxmLnRhYndpZHRoKQ0KDQogICAgZGVmIHNtYXJ0X2JhY2tzcGFjZV9l
dmVudChzZWxmLCBldmVudCk6DQogICAgICAgIHRleHQgPSBzZWxmLnRleHQNCiAgICAgICAgZmly
c3QsIGxhc3QgPSBzZWxmLmdldF9zZWxlY3Rpb25faW5kaWNlcygpDQogICAgICAgIGlmIGZpcnN0
IGFuZCBsYXN0Og0KICAgICAgICAgICAgdGV4dC5kZWxldGUoZmlyc3QsIGxhc3QpDQogICAgICAg
ICAgICB0ZXh0Lm1hcmtfc2V0KCJpbnNlcnQiLCBmaXJzdCkNCiAgICAgICAgICAgIHJldHVybiAi
YnJlYWsiDQogICAgICAgICMgRGVsZXRlIHdoaXRlc3BhY2UgbGVmdCwgdW50aWwgaGl0dGluZyBh
IHJlYWwgY2hhciBvciBjbG9zZXN0DQogICAgICAgICMgcHJlY2VkaW5nIHZpcnR1YWwgdGFiIHN0
b3AuDQogICAgICAgIGNoYXJzID0gdGV4dC5nZXQoImluc2VydCBsaW5lc3RhcnQiLCAiaW5zZXJ0
IikNCiAgICAgICAgaWYgY2hhcnMgPT0gJyc6DQogICAgICAgICAgICBpZiB0ZXh0LmNvbXBhcmUo
Imluc2VydCIsICI+IiwgIjEuMCIpOg0KICAgICAgICAgICAgICAgICMgZWFzeTogZGVsZXRlIHBy
ZWNlZGluZyBuZXdsaW5lDQogICAgICAgICAgICAgICAgdGV4dC5kZWxldGUoImluc2VydC0xYyIp
DQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgIHRleHQuYmVsbCgpICAgICAjIGF0
IHN0YXJ0IG9mIGJ1ZmZlcg0KICAgICAgICAgICAgcmV0dXJuICJicmVhayINCiAgICAgICAgaWYg
IGNoYXJzWy0xXSBub3QgaW4gIiBcdCI6DQogICAgICAgICAgICAjIGVhc3k6IGRlbGV0ZSBwcmVj
ZWRpbmcgcmVhbCBjaGFyDQogICAgICAgICAgICB0ZXh0LmRlbGV0ZSgiaW5zZXJ0LTFjIikNCiAg
ICAgICAgICAgIHJldHVybiAiYnJlYWsiDQogICAgICAgICMgSWNrLiAgSXQgbWF5IHJlcXVpcmUg
Kmluc2VydGluZyogc3BhY2VzIGlmIHdlIGJhY2sgdXAgb3ZlciBhDQogICAgICAgICMgdGFiIGNo
YXJhY3RlciEgIFRoaXMgaXMgd3JpdHRlbiB0byBiZSBjbGVhciwgbm90IGZhc3QuDQogICAgICAg
IHRhYndpZHRoID0gc2VsZi50YWJ3aWR0aA0KICAgICAgICBoYXZlID0gbGVuKGNoYXJzLmV4cGFu
ZHRhYnModGFid2lkdGgpKQ0KICAgICAgICBhc3NlcnQgaGF2ZSA+IDANCiAgICAgICAgd2FudCA9
ICgoaGF2ZSAtIDEpIC8vIHNlbGYuaW5kZW50d2lkdGgpICogc2VsZi5pbmRlbnR3aWR0aA0KICAg
ICAgICAjIERlYnVnIHByb21wdCBpcyBtdWx0aWxpbmVkLi4uLg0KICAgICAgICBuY2hhcnNkZWxl
dGVkID0gMA0KICAgICAgICB3aGlsZSAxOg0KICAgICAgICAgICAgaWYgY2hhcnMgPT0gc2VsZi5w
cm9tcHRfbGFzdF9saW5lOiAgIyAnJyB1bmxlc3MgUHlTaGVsbA0KICAgICAgICAgICAgICAgIGJy
ZWFrDQogICAgICAgICAgICBjaGFycyA9IGNoYXJzWzotMV0NCiAgICAgICAgICAgIG5jaGFyc2Rl
bGV0ZWQgPSBuY2hhcnNkZWxldGVkICsgMQ0KICAgICAgICAgICAgaGF2ZSA9IGxlbihjaGFycy5l
eHBhbmR0YWJzKHRhYndpZHRoKSkNCiAgICAgICAgICAgIGlmIGhhdmUgPD0gd2FudCBvciBjaGFy
c1stMV0gbm90IGluICIgXHQiOg0KICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgIHRleHQu
dW5kb19ibG9ja19zdGFydCgpDQogICAgICAgIHRleHQuZGVsZXRlKCJpbnNlcnQtJWRjIiAlIG5j
aGFyc2RlbGV0ZWQsICJpbnNlcnQiKQ0KICAgICAgICBpZiBoYXZlIDwgd2FudDoNCiAgICAgICAg
ICAgIHRleHQuaW5zZXJ0KCJpbnNlcnQiLCAnICcgKiAod2FudCAtIGhhdmUpKQ0KICAgICAgICB0
ZXh0LnVuZG9fYmxvY2tfc3RvcCgpDQogICAgICAgIHJldHVybiAiYnJlYWsiDQoNCiAgICBkZWYg
c21hcnRfaW5kZW50X2V2ZW50KHNlbGYsIGV2ZW50KToNCiAgICAgICAgIyBpZiBpbnRyYWxpbmUg
c2VsZWN0aW9uOg0KICAgICAgICAjICAgICBkZWxldGUgaXQNCiAgICAgICAgIyBlbGlmIG11bHRp
bGluZSBzZWxlY3Rpb246DQogICAgICAgICMgICAgIGRvIGluZGVudC1yZWdpb24NCiAgICAgICAg
IyBlbHNlOg0KICAgICAgICAjICAgICBpbmRlbnQgb25lIGxldmVsDQogICAgICAgIHRleHQgPSBz
ZWxmLnRleHQNCiAgICAgICAgZmlyc3QsIGxhc3QgPSBzZWxmLmdldF9zZWxlY3Rpb25faW5kaWNl
cygpDQogICAgICAgIHRleHQudW5kb19ibG9ja19zdGFydCgpDQogICAgICAgIHRyeToNCiAgICAg
ICAgICAgIGlmIGZpcnN0IGFuZCBsYXN0Og0KICAgICAgICAgICAgICAgIGlmIGluZGV4MmxpbmUo
Zmlyc3QpICE9IGluZGV4MmxpbmUobGFzdCk6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBz
ZWxmLmluZGVudF9yZWdpb25fZXZlbnQoZXZlbnQpDQogICAgICAgICAgICAgICAgdGV4dC5kZWxl
dGUoZmlyc3QsIGxhc3QpDQogICAgICAgICAgICAgICAgdGV4dC5tYXJrX3NldCgiaW5zZXJ0Iiwg
Zmlyc3QpDQogICAgICAgICAgICBwcmVmaXggPSB0ZXh0LmdldCgiaW5zZXJ0IGxpbmVzdGFydCIs
ICJpbnNlcnQiKQ0KICAgICAgICAgICAgcmF3LCBlZmZlY3RpdmUgPSBjbGFzc2lmeXdzKHByZWZp
eCwgc2VsZi50YWJ3aWR0aCkNCiAgICAgICAgICAgIGlmIHJhdyA9PSBsZW4ocHJlZml4KToNCiAg
ICAgICAgICAgICAgICAjIG9ubHkgd2hpdGVzcGFjZSB0byB0aGUgbGVmdA0KICAgICAgICAgICAg
ICAgIHNlbGYucmVpbmRlbnRfdG8oZWZmZWN0aXZlICsgc2VsZi5pbmRlbnR3aWR0aCkNCiAgICAg
ICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgIyB0YWIgdG8gdGhlIG5leHQgJ3N0b3AnIHdp
dGhpbiBvciB0byByaWdodCBvZiBsaW5lJ3MgdGV4dDoNCiAgICAgICAgICAgICAgICBpZiBzZWxm
LnVzZXRhYnM6DQogICAgICAgICAgICAgICAgICAgIHBhZCA9ICdcdCcNCiAgICAgICAgICAgICAg
ICBlbHNlOg0KICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmUgPSBsZW4ocHJlZml4LmV4cGFu
ZHRhYnMoc2VsZi50YWJ3aWR0aCkpDQogICAgICAgICAgICAgICAgICAgIG4gPSBzZWxmLmluZGVu
dHdpZHRoDQogICAgICAgICAgICAgICAgICAgIHBhZCA9ICcgJyAqIChuIC0gZWZmZWN0aXZlICUg
bikNCiAgICAgICAgICAgICAgICB0ZXh0Lmluc2VydCgiaW5zZXJ0IiwgcGFkKQ0KICAgICAgICAg
ICAgdGV4dC5zZWUoImluc2VydCIpDQogICAgICAgICAgICByZXR1cm4gImJyZWFrIg0KICAgICAg
ICBmaW5hbGx5Og0KICAgICAgICAgICAgdGV4dC51bmRvX2Jsb2NrX3N0b3AoKQ0KDQogICAgZGVm
IG5ld2xpbmVfYW5kX2luZGVudF9ldmVudChzZWxmLCBldmVudCk6DQogICAgICAgIHRleHQgPSBz
ZWxmLnRleHQNCiAgICAgICAgZmlyc3QsIGxhc3QgPSBzZWxmLmdldF9zZWxlY3Rpb25faW5kaWNl
cygpDQogICAgICAgIHRleHQudW5kb19ibG9ja19zdGFydCgpDQogICAgICAgIHRyeToNCiAgICAg
ICAgICAgIGlmIGZpcnN0IGFuZCBsYXN0Og0KICAgICAgICAgICAgICAgIHRleHQuZGVsZXRlKGZp
cnN0LCBsYXN0KQ0KICAgICAgICAgICAgICAgIHRleHQubWFya19zZXQoImluc2VydCIsIGZpcnN0
KQ0KICAgICAgICAgICAgbGluZSA9IHRleHQuZ2V0KCJpbnNlcnQgbGluZXN0YXJ0IiwgImluc2Vy
dCIpDQogICAgICAgICAgICBpLCBuID0gMCwgbGVuKGxpbmUpDQogICAgICAgICAgICB3aGlsZSBp
IDwgbiBhbmQgbGluZVtpXSBpbiAiIFx0IjoNCiAgICAgICAgICAgICAgICBpID0gaSsxDQogICAg
ICAgICAgICBpZiBpID09IG46DQogICAgICAgICAgICAgICAgIyB0aGUgY3Vyc29yIGlzIGluIG9y
IGF0IGxlYWRpbmcgaW5kZW50YXRpb24gaW4gYSBjb250aW51YXRpb24NCiAgICAgICAgICAgICAg
ICAjIGxpbmU7IGp1c3QgaW5qZWN0IGFuIGVtcHR5IGxpbmUgYXQgdGhlIHN0YXJ0DQogICAgICAg
ICAgICAgICAgdGV4dC5pbnNlcnQoImluc2VydCBsaW5lc3RhcnQiLCAnXG4nKQ0KICAgICAgICAg
ICAgICAgIHJldHVybiAiYnJlYWsiDQogICAgICAgICAgICBpbmRlbnQgPSBsaW5lWzppXQ0KICAg
ICAgICAgICAgIyBzdHJpcCB3aGl0ZXNwYWNlIGJlZm9yZSBpbnNlcnQgcG9pbnQgdW5sZXNzIGl0
J3MgaW4gdGhlIHByb21wdA0KICAgICAgICAgICAgaSA9IDANCiAgICAgICAgICAgIHdoaWxlIGxp
bmUgYW5kIGxpbmVbLTFdIGluICIgXHQiIGFuZCBsaW5lICE9IHNlbGYucHJvbXB0X2xhc3RfbGlu
ZToNCiAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdDQogICAgICAgICAgICAgICAgaSA9
IGkrMQ0KICAgICAgICAgICAgaWYgaToNCiAgICAgICAgICAgICAgICB0ZXh0LmRlbGV0ZSgiaW5z
ZXJ0IC0gJWQgY2hhcnMiICUgaSwgImluc2VydCIpDQogICAgICAgICAgICAjIHN0cmlwIHdoaXRl
c3BhY2UgYWZ0ZXIgaW5zZXJ0IHBvaW50DQogICAgICAgICAgICB3aGlsZSB0ZXh0LmdldCgiaW5z
ZXJ0IikgaW4gIiBcdCI6DQogICAgICAgICAgICAgICAgdGV4dC5kZWxldGUoImluc2VydCIpDQog
ICAgICAgICAgICAjIHN0YXJ0IG5ldyBsaW5lDQogICAgICAgICAgICB0ZXh0Lmluc2VydCgiaW5z
ZXJ0IiwgJ1xuJykNCg0KICAgICAgICAgICAgIyBhZGp1c3QgaW5kZW50YXRpb24gZm9yIGNvbnRp
bnVhdGlvbnMgYW5kIGJsb2NrDQogICAgICAgICAgICAjIG9wZW4vY2xvc2UgZmlyc3QgbmVlZCB0
byBmaW5kIHRoZSBsYXN0IHN0bXQNCiAgICAgICAgICAgIGxubyA9IGluZGV4MmxpbmUodGV4dC5p
bmRleCgnaW5zZXJ0JykpDQogICAgICAgICAgICB5ID0gcHlwYXJzZS5QYXJzZXIoc2VsZi5pbmRl
bnR3aWR0aCwgc2VsZi50YWJ3aWR0aCkNCiAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNvbnRleHRf
dXNlX3BzMToNCiAgICAgICAgICAgICAgICBmb3IgY29udGV4dCBpbiBzZWxmLm51bV9jb250ZXh0
X2xpbmVzOg0KICAgICAgICAgICAgICAgICAgICBzdGFydGF0ID0gbWF4KGxubyAtIGNvbnRleHQs
IDEpDQogICAgICAgICAgICAgICAgICAgIHN0YXJ0YXRpbmRleCA9IHJlcHIoc3RhcnRhdCkgKyAi
LjAiDQogICAgICAgICAgICAgICAgICAgIHJhd3RleHQgPSB0ZXh0LmdldChzdGFydGF0aW5kZXgs
ICJpbnNlcnQiKQ0KICAgICAgICAgICAgICAgICAgICB5LnNldF9jb2RlKHJhd3RleHQpDQogICAg
ICAgICAgICAgICAgICAgIGJvZCA9IHkuZmluZF9nb29kX3BhcnNlX3N0YXJ0KA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0X3VzZV9wczEsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9idWlsZF9jaGFyX2luX3N0cmluZ19mdW5jKHN0YXJ0YXRp
bmRleCkpDQogICAgICAgICAgICAgICAgICAgIGlmIGJvZCBpcyBub3QgTm9uZSBvciBzdGFydGF0
ID09IDE6DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgIHku
c2V0X2xvKGJvZCBvciAwKQ0KICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAgICByID0g
dGV4dC50YWdfcHJldnJhbmdlKCJjb25zb2xlIiwgImluc2VydCIpDQogICAgICAgICAgICAgICAg
aWYgcjoNCiAgICAgICAgICAgICAgICAgICAgc3RhcnRhdGluZGV4ID0gclsxXQ0KICAgICAgICAg
ICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgICAgIHN0YXJ0YXRpbmRleCA9ICIxLjAiDQog
ICAgICAgICAgICAgICAgcmF3dGV4dCA9IHRleHQuZ2V0KHN0YXJ0YXRpbmRleCwgImluc2VydCIp
DQogICAgICAgICAgICAgICAgeS5zZXRfY29kZShyYXd0ZXh0KQ0KICAgICAgICAgICAgICAgIHku
c2V0X2xvKDApDQoNCiAgICAgICAgICAgIGMgPSB5LmdldF9jb250aW51YXRpb25fdHlwZSgpDQog
ICAgICAgICAgICBpZiBjICE9IHB5cGFyc2UuQ19OT05FOg0KICAgICAgICAgICAgICAgICMgVGhl
IGN1cnJlbnQgc3RtdCBoYXNuJ3QgZW5kZWQgeWV0Lg0KICAgICAgICAgICAgICAgIGlmIGMgPT0g
cHlwYXJzZS5DX1NUUklOR19GSVJTVF9MSU5FOg0KICAgICAgICAgICAgICAgICAgICAjIGFmdGVy
IHRoZSBmaXJzdCBsaW5lIG9mIGEgc3RyaW5nOyBkbyBub3QgaW5kZW50IGF0IGFsbA0KICAgICAg
ICAgICAgICAgICAgICBwYXNzDQogICAgICAgICAgICAgICAgZWxpZiBjID09IHB5cGFyc2UuQ19T
VFJJTkdfTkVYVF9MSU5FUzoNCiAgICAgICAgICAgICAgICAgICAgIyBpbnNpZGUgYSBzdHJpbmcg
d2hpY2ggc3RhcnRlZCBiZWZvcmUgdGhpcyBsaW5lOw0KICAgICAgICAgICAgICAgICAgICAjIGp1
c3QgbWltaWMgdGhlIGN1cnJlbnQgaW5kZW50DQogICAgICAgICAgICAgICAgICAgIHRleHQuaW5z
ZXJ0KCJpbnNlcnQiLCBpbmRlbnQpDQogICAgICAgICAgICAgICAgZWxpZiBjID09IHB5cGFyc2Uu
Q19CUkFDS0VUOg0KICAgICAgICAgICAgICAgICAgICAjIGxpbmUgdXAgd2l0aCB0aGUgZmlyc3Qg
KGlmIGFueSkgZWxlbWVudCBvZiB0aGUNCiAgICAgICAgICAgICAgICAgICAgIyBsYXN0IG9wZW4g
YnJhY2tldCBzdHJ1Y3R1cmU7IGVsc2UgaW5kZW50IG9uZQ0KICAgICAgICAgICAgICAgICAgICAj
IGxldmVsIGJleW9uZCB0aGUgaW5kZW50IG9mIHRoZSBsaW5lIHdpdGggdGhlDQogICAgICAgICAg
ICAgICAgICAgICMgbGFzdCBvcGVuIGJyYWNrZXQNCiAgICAgICAgICAgICAgICAgICAgc2VsZi5y
ZWluZGVudF90byh5LmNvbXB1dGVfYnJhY2tldF9pbmRlbnQoKSkNCiAgICAgICAgICAgICAgICBl
bGlmIGMgPT0gcHlwYXJzZS5DX0JBQ0tTTEFTSDoNCiAgICAgICAgICAgICAgICAgICAgIyBpZiBt
b3JlIHRoYW4gb25lIGxpbmUgaW4gdGhpcyBzdG10IGFscmVhZHksIGp1c3QNCiAgICAgICAgICAg
ICAgICAgICAgIyBtaW1pYyB0aGUgY3VycmVudCBpbmRlbnQ7IGVsc2UgaWYgaW5pdGlhbCBsaW5l
DQogICAgICAgICAgICAgICAgICAgICMgaGFzIGEgc3RhcnQgb24gYW4gYXNzaWdubWVudCBzdG10
LCBpbmRlbnQgdG8NCiAgICAgICAgICAgICAgICAgICAgIyBiZXlvbmQgbGVmdG1vc3QgPTsgZWxz
ZSB0byBiZXlvbmQgZmlyc3QgY2h1bmsgb2YNCiAgICAgICAgICAgICAgICAgICAgIyBub24td2hp
dGVzcGFjZSBvbiBpbml0aWFsIGxpbmUNCiAgICAgICAgICAgICAgICAgICAgaWYgeS5nZXRfbnVt
X2xpbmVzX2luX3N0bXQoKSA+IDE6DQogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Lmluc2Vy
dCgiaW5zZXJ0IiwgaW5kZW50KQ0KICAgICAgICAgICAgICAgICAgICBlbHNlOg0KICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5yZWluZGVudF90byh5LmNvbXB1dGVfYmFja3NsYXNoX2luZGVu
dCgpKQ0KICAgICAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgICAgIGFzc2VydCAw
LCAiYm9ndXMgY29udGludWF0aW9uIHR5cGUgJXIiICUgKGMsKQ0KICAgICAgICAgICAgICAgIHJl
dHVybiAiYnJlYWsiDQoNCiAgICAgICAgICAgICMgVGhpcyBsaW5lIHN0YXJ0cyBhIGJyYW5kIG5l
dyBzdG10OyBpbmRlbnQgcmVsYXRpdmUgdG8NCiAgICAgICAgICAgICMgaW5kZW50YXRpb24gb2Yg
aW5pdGlhbCBsaW5lIG9mIGNsb3Nlc3QgcHJlY2VkaW5nDQogICAgICAgICAgICAjIGludGVyZXN0
aW5nIHN0bXQuDQogICAgICAgICAgICBpbmRlbnQgPSB5LmdldF9iYXNlX2luZGVudF9zdHJpbmco
KQ0KICAgICAgICAgICAgdGV4dC5pbnNlcnQoImluc2VydCIsIGluZGVudCkNCiAgICAgICAgICAg
IGlmIHkuaXNfYmxvY2tfb3BlbmVyKCk6DQogICAgICAgICAgICAgICAgc2VsZi5zbWFydF9pbmRl
bnRfZXZlbnQoZXZlbnQpDQogICAgICAgICAgICBlbGlmIGluZGVudCBhbmQgeS5pc19ibG9ja19j
bG9zZXIoKToNCiAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0X2JhY2tzcGFjZV9ldmVudChldmVu
dCkNCiAgICAgICAgICAgIHJldHVybiAiYnJlYWsiDQogICAgICAgIGZpbmFsbHk6DQogICAgICAg
ICAgICB0ZXh0LnNlZSgiaW5zZXJ0IikNCiAgICAgICAgICAgIHRleHQudW5kb19ibG9ja19zdG9w
KCkNCg0KICAgICMgT3VyIGVkaXR3aW4gcHJvdmlkZXMgYW4gaXNfY2hhcl9pbl9zdHJpbmcgZnVu
Y3Rpb24gdGhhdCB3b3Jrcw0KICAgICMgd2l0aCBhIFRrIHRleHQgaW5kZXgsIGJ1dCBQeVBhcnNl
IG9ubHkga25vd3MgYWJvdXQgb2Zmc2V0cyBpbnRvDQogICAgIyBhIHN0cmluZy4gVGhpcyBidWls
ZHMgYSBmdW5jdGlvbiBmb3IgUHlQYXJzZSB0aGF0IGFjY2VwdHMgYW4NCiAgICAjIG9mZnNldC4N
Cg0KICAgIGRlZiBfYnVpbGRfY2hhcl9pbl9zdHJpbmdfZnVuYyhzZWxmLCBzdGFydGluZGV4KToN
CiAgICAgICAgZGVmIGlubmVyKG9mZnNldCwgX3N0YXJ0aW5kZXg9c3RhcnRpbmRleCwNCiAgICAg
ICAgICAgICAgICAgIF9pY2lzPXNlbGYuaXNfY2hhcl9pbl9zdHJpbmcpOg0KICAgICAgICAgICAg
cmV0dXJuIF9pY2lzKF9zdGFydGluZGV4ICsgIislZGMiICUgb2Zmc2V0KQ0KICAgICAgICByZXR1
cm4gaW5uZXINCg0KICAgIGRlZiBpbmRlbnRfcmVnaW9uX2V2ZW50KHNlbGYsIGV2ZW50KToNCiAg
ICAgICAgaGVhZCwgdGFpbCwgY2hhcnMsIGxpbmVzID0gc2VsZi5nZXRfcmVnaW9uKCkNCiAgICAg
ICAgZm9yIHBvcyBpbiByYW5nZShsZW4obGluZXMpKToNCiAgICAgICAgICAgIGxpbmUgPSBsaW5l
c1twb3NdDQogICAgICAgICAgICBpZiBsaW5lOg0KICAgICAgICAgICAgICAgIHJhdywgZWZmZWN0
aXZlID0gY2xhc3NpZnl3cyhsaW5lLCBzZWxmLnRhYndpZHRoKQ0KICAgICAgICAgICAgICAgIGVm
ZmVjdGl2ZSA9IGVmZmVjdGl2ZSArIHNlbGYuaW5kZW50d2lkdGgNCiAgICAgICAgICAgICAgICBs
aW5lc1twb3NdID0gc2VsZi5fbWFrZV9ibGFua3MoZWZmZWN0aXZlKSArIGxpbmVbcmF3Ol0NCiAg
ICAgICAgc2VsZi5zZXRfcmVnaW9uKGhlYWQsIHRhaWwsIGNoYXJzLCBsaW5lcykNCiAgICAgICAg
cmV0dXJuICJicmVhayINCg0KICAgIGRlZiBkZWRlbnRfcmVnaW9uX2V2ZW50KHNlbGYsIGV2ZW50
KToNCiAgICAgICAgaGVhZCwgdGFpbCwgY2hhcnMsIGxpbmVzID0gc2VsZi5nZXRfcmVnaW9uKCkN
CiAgICAgICAgZm9yIHBvcyBpbiByYW5nZShsZW4obGluZXMpKToNCiAgICAgICAgICAgIGxpbmUg
PSBsaW5lc1twb3NdDQogICAgICAgICAgICBpZiBsaW5lOg0KICAgICAgICAgICAgICAgIHJhdywg
ZWZmZWN0aXZlID0gY2xhc3NpZnl3cyhsaW5lLCBzZWxmLnRhYndpZHRoKQ0KICAgICAgICAgICAg
ICAgIGVmZmVjdGl2ZSA9IG1heChlZmZlY3RpdmUgLSBzZWxmLmluZGVudHdpZHRoLCAwKQ0KICAg
ICAgICAgICAgICAgIGxpbmVzW3Bvc10gPSBzZWxmLl9tYWtlX2JsYW5rcyhlZmZlY3RpdmUpICsg
bGluZVtyYXc6XQ0KICAgICAgICBzZWxmLnNldF9yZWdpb24oaGVhZCwgdGFpbCwgY2hhcnMsIGxp
bmVzKQ0KICAgICAgICByZXR1cm4gImJyZWFrIg0KDQogICAgZGVmIGNvbW1lbnRfcmVnaW9uX2V2
ZW50KHNlbGYsIGV2ZW50KToNCiAgICAgICAgaGVhZCwgdGFpbCwgY2hhcnMsIGxpbmVzID0gc2Vs
Zi5nZXRfcmVnaW9uKCkNCiAgICAgICAgZm9yIHBvcyBpbiByYW5nZShsZW4obGluZXMpIC0gMSk6
DQogICAgICAgICAgICBsaW5lID0gbGluZXNbcG9zXQ0KICAgICAgICAgICAgbGluZXNbcG9zXSA9
ICcjIycgKyBsaW5lDQogICAgICAgIHNlbGYuc2V0X3JlZ2lvbihoZWFkLCB0YWlsLCBjaGFycywg
bGluZXMpDQogICAgICAgIHJldHVybiAiYnJlYWsiDQoNCiAgICBkZWYgdW5jb21tZW50X3JlZ2lv
bl9ldmVudChzZWxmLCBldmVudCk6DQogICAgICAgIGhlYWQsIHRhaWwsIGNoYXJzLCBsaW5lcyA9
IHNlbGYuZ2V0X3JlZ2lvbigpDQogICAgICAgIGZvciBwb3MgaW4gcmFuZ2UobGVuKGxpbmVzKSk6
DQogICAgICAgICAgICBsaW5lID0gbGluZXNbcG9zXQ0KICAgICAgICAgICAgaWYgbm90IGxpbmU6
DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIGlmIGxpbmVbOjJdID09ICcj
Iyc6DQogICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbMjpdDQogICAgICAgICAgICBlbGlmIGxp
bmVbOjFdID09ICcjJzoNCiAgICAgICAgICAgICAgICBsaW5lID0gbGluZVsxOl0NCiAgICAgICAg
ICAgIGxpbmVzW3Bvc10gPSBsaW5lDQogICAgICAgIHNlbGYuc2V0X3JlZ2lvbihoZWFkLCB0YWls
LCBjaGFycywgbGluZXMpDQogICAgICAgIHJldHVybiAiYnJlYWsiDQoNCiAgICBkZWYgdGFiaWZ5
X3JlZ2lvbl9ldmVudChzZWxmLCBldmVudCk6DQogICAgICAgIGhlYWQsIHRhaWwsIGNoYXJzLCBs
aW5lcyA9IHNlbGYuZ2V0X3JlZ2lvbigpDQogICAgICAgIHRhYndpZHRoID0gc2VsZi5fYXNrdGFi
d2lkdGgoKQ0KICAgICAgICBpZiB0YWJ3aWR0aCBpcyBOb25lOiByZXR1cm4NCiAgICAgICAgZm9y
IHBvcyBpbiByYW5nZShsZW4obGluZXMpKToNCiAgICAgICAgICAgIGxpbmUgPSBsaW5lc1twb3Nd
DQogICAgICAgICAgICBpZiBsaW5lOg0KICAgICAgICAgICAgICAgIHJhdywgZWZmZWN0aXZlID0g
Y2xhc3NpZnl3cyhsaW5lLCB0YWJ3aWR0aCkNCiAgICAgICAgICAgICAgICBudGFicywgbnNwYWNl
cyA9IGRpdm1vZChlZmZlY3RpdmUsIHRhYndpZHRoKQ0KICAgICAgICAgICAgICAgIGxpbmVzW3Bv
c10gPSAnXHQnICogbnRhYnMgKyAnICcgKiBuc3BhY2VzICsgbGluZVtyYXc6XQ0KICAgICAgICBz
ZWxmLnNldF9yZWdpb24oaGVhZCwgdGFpbCwgY2hhcnMsIGxpbmVzKQ0KICAgICAgICByZXR1cm4g
ImJyZWFrIg0KDQogICAgZGVmIHVudGFiaWZ5X3JlZ2lvbl9ldmVudChzZWxmLCBldmVudCk6DQog
ICAgICAgIGhlYWQsIHRhaWwsIGNoYXJzLCBsaW5lcyA9IHNlbGYuZ2V0X3JlZ2lvbigpDQogICAg
ICAgIHRhYndpZHRoID0gc2VsZi5fYXNrdGFid2lkdGgoKQ0KICAgICAgICBpZiB0YWJ3aWR0aCBp
cyBOb25lOiByZXR1cm4NCiAgICAgICAgZm9yIHBvcyBpbiByYW5nZShsZW4obGluZXMpKToNCiAg
ICAgICAgICAgIGxpbmVzW3Bvc10gPSBsaW5lc1twb3NdLmV4cGFuZHRhYnModGFid2lkdGgpDQog
ICAgICAgIHNlbGYuc2V0X3JlZ2lvbihoZWFkLCB0YWlsLCBjaGFycywgbGluZXMpDQogICAgICAg
IHJldHVybiAiYnJlYWsiDQoNCiAgICBkZWYgdG9nZ2xlX3RhYnNfZXZlbnQoc2VsZiwgZXZlbnQp
Og0KICAgICAgICBpZiBzZWxmLmFza3llc25vKA0KICAgICAgICAgICAgICAiVG9nZ2xlIHRhYnMi
LA0KICAgICAgICAgICAgICAiVHVybiB0YWJzICIgKyAoIm9uIiwgIm9mZiIpW3NlbGYudXNldGFi
c10gKw0KICAgICAgICAgICAgICAiP1xuSW5kZW50IHdpZHRoICIgKw0KICAgICAgICAgICAgICAo
IndpbGwgYmUiLCAicmVtYWlucyBhdCIpW3NlbGYudXNldGFic10gKyAiIDguIiArDQogICAgICAg
ICAgICAgICJcbiBOb3RlOiBhIHRhYiBpcyBhbHdheXMgOCBjb2x1bW5zIiwNCiAgICAgICAgICAg
ICAgcGFyZW50PXNlbGYudGV4dCk6DQogICAgICAgICAgICBzZWxmLnVzZXRhYnMgPSBub3Qgc2Vs
Zi51c2V0YWJzDQogICAgICAgICAgICAjIFRyeSB0byBwcmV2ZW50IGluY29uc2lzdGVudCBpbmRl
bnRhdGlvbi4NCiAgICAgICAgICAgICMgVXNlciBtdXN0IGNoYW5nZSBpbmRlbnQgd2lkdGggbWFu
dWFsbHkgYWZ0ZXIgdXNpbmcgdGFicy4NCiAgICAgICAgICAgIHNlbGYuaW5kZW50d2lkdGggPSA4
DQogICAgICAgIHJldHVybiAiYnJlYWsiDQoNCiAgICAjIFhYWCB0aGlzIGlzbid0IGJvdW5kIHRv
IGFueXRoaW5nIC0tIHNlZSB0YWJ3aWR0aCBjb21tZW50cw0KIyMgICAgIGRlZiBjaGFuZ2VfdGFi
d2lkdGhfZXZlbnQoc2VsZiwgZXZlbnQpOg0KIyMgICAgICAgICBuZXcgPSBzZWxmLl9hc2t0YWJ3
aWR0aCgpDQojIyAgICAgICAgIGlmIG5ldyAhPSBzZWxmLnRhYndpZHRoOg0KIyMgICAgICAgICAg
ICAgc2VsZi50YWJ3aWR0aCA9IG5ldw0KIyMgICAgICAgICAgICAgc2VsZi5zZXRfaW5kZW50YXRp
b25fcGFyYW1zKDAsIGd1ZXNzPTApDQojIyAgICAgICAgIHJldHVybiAiYnJlYWsiDQoNCiAgICBk
ZWYgY2hhbmdlX2luZGVudHdpZHRoX2V2ZW50KHNlbGYsIGV2ZW50KToNCiAgICAgICAgbmV3ID0g
c2VsZi5hc2tpbnRlZ2VyKA0KICAgICAgICAgICAgICAgICAgIkluZGVudCB3aWR0aCIsDQogICAg
ICAgICAgICAgICAgICAiTmV3IGluZGVudCB3aWR0aCAoMi0xNilcbihBbHdheXMgdXNlIDggd2hl
biB1c2luZyB0YWJzKSIsDQogICAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZi50ZXh0LA0KICAg
ICAgICAgICAgICAgICAgaW5pdGlhbHZhbHVlPXNlbGYuaW5kZW50d2lkdGgsDQogICAgICAgICAg
ICAgICAgICBtaW52YWx1ZT0yLA0KICAgICAgICAgICAgICAgICAgbWF4dmFsdWU9MTYpDQogICAg
ICAgIGlmIG5ldyBhbmQgbmV3ICE9IHNlbGYuaW5kZW50d2lkdGggYW5kIG5vdCBzZWxmLnVzZXRh
YnM6DQogICAgICAgICAgICBzZWxmLmluZGVudHdpZHRoID0gbmV3DQogICAgICAgIHJldHVybiAi
YnJlYWsiDQoNCiAgICBkZWYgZ2V0X3JlZ2lvbihzZWxmKToNCiAgICAgICAgdGV4dCA9IHNlbGYu
dGV4dA0KICAgICAgICBmaXJzdCwgbGFzdCA9IHNlbGYuZ2V0X3NlbGVjdGlvbl9pbmRpY2VzKCkN
CiAgICAgICAgaWYgZmlyc3QgYW5kIGxhc3Q6DQogICAgICAgICAgICBoZWFkID0gdGV4dC5pbmRl
eChmaXJzdCArICIgbGluZXN0YXJ0IikNCiAgICAgICAgICAgIHRhaWwgPSB0ZXh0LmluZGV4KGxh
c3QgKyAiLTFjIGxpbmVlbmQgKzFjIikNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIGhlYWQg
PSB0ZXh0LmluZGV4KCJpbnNlcnQgbGluZXN0YXJ0IikNCiAgICAgICAgICAgIHRhaWwgPSB0ZXh0
LmluZGV4KCJpbnNlcnQgbGluZWVuZCArMWMiKQ0KICAgICAgICBjaGFycyA9IHRleHQuZ2V0KGhl
YWQsIHRhaWwpDQogICAgICAgIGxpbmVzID0gY2hhcnMuc3BsaXQoIlxuIikNCiAgICAgICAgcmV0
dXJuIGhlYWQsIHRhaWwsIGNoYXJzLCBsaW5lcw0KDQogICAgZGVmIHNldF9yZWdpb24oc2VsZiwg
aGVhZCwgdGFpbCwgY2hhcnMsIGxpbmVzKToNCiAgICAgICAgdGV4dCA9IHNlbGYudGV4dA0KICAg
ICAgICBuZXdjaGFycyA9ICJcbiIuam9pbihsaW5lcykNCiAgICAgICAgaWYgbmV3Y2hhcnMgPT0g
Y2hhcnM6DQogICAgICAgICAgICB0ZXh0LmJlbGwoKQ0KICAgICAgICAgICAgcmV0dXJuDQogICAg
ICAgIHRleHQudGFnX3JlbW92ZSgic2VsIiwgIjEuMCIsICJlbmQiKQ0KICAgICAgICB0ZXh0Lm1h
cmtfc2V0KCJpbnNlcnQiLCBoZWFkKQ0KICAgICAgICB0ZXh0LnVuZG9fYmxvY2tfc3RhcnQoKQ0K
ICAgICAgICB0ZXh0LmRlbGV0ZShoZWFkLCB0YWlsKQ0KICAgICAgICB0ZXh0Lmluc2VydChoZWFk
LCBuZXdjaGFycykNCiAgICAgICAgdGV4dC51bmRvX2Jsb2NrX3N0b3AoKQ0KICAgICAgICB0ZXh0
LnRhZ19hZGQoInNlbCIsIGhlYWQsICJpbnNlcnQiKQ0KDQogICAgIyBNYWtlIHN0cmluZyB0aGF0
IGRpc3BsYXlzIGFzIG4gbGVhZGluZyBibGFua3MuDQoNCiAgICBkZWYgX21ha2VfYmxhbmtzKHNl
bGYsIG4pOg0KICAgICAgICBpZiBzZWxmLnVzZXRhYnM6DQogICAgICAgICAgICBudGFicywgbnNw
YWNlcyA9IGRpdm1vZChuLCBzZWxmLnRhYndpZHRoKQ0KICAgICAgICAgICAgcmV0dXJuICdcdCcg
KiBudGFicyArICcgJyAqIG5zcGFjZXMNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIHJldHVy
biAnICcgKiBuDQoNCiAgICAjIERlbGV0ZSBmcm9tIGJlZ2lubmluZyBvZiBsaW5lIHRvIGluc2Vy
dCBwb2ludCwgdGhlbiByZWluc2VydA0KICAgICMgY29sdW1uIGxvZ2ljYWwgKG1lYW5pbmcgdXNl
IHRhYnMgaWYgYXBwcm9wcmlhdGUpIHNwYWNlcy4NCg0KICAgIGRlZiByZWluZGVudF90byhzZWxm
LCBjb2x1bW4pOg0KICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0DQogICAgICAgIHRleHQudW5kb19i
bG9ja19zdGFydCgpDQogICAgICAgIGlmIHRleHQuY29tcGFyZSgiaW5zZXJ0IGxpbmVzdGFydCIs
ICIhPSIsICJpbnNlcnQiKToNCiAgICAgICAgICAgIHRleHQuZGVsZXRlKCJpbnNlcnQgbGluZXN0
YXJ0IiwgImluc2VydCIpDQogICAgICAgIGlmIGNvbHVtbjoNCiAgICAgICAgICAgIHRleHQuaW5z
ZXJ0KCJpbnNlcnQiLCBzZWxmLl9tYWtlX2JsYW5rcyhjb2x1bW4pKQ0KICAgICAgICB0ZXh0LnVu
ZG9fYmxvY2tfc3RvcCgpDQoNCiAgICBkZWYgX2Fza3RhYndpZHRoKHNlbGYpOg0KICAgICAgICBy
ZXR1cm4gc2VsZi5hc2tpbnRlZ2VyKA0KICAgICAgICAgICAgIlRhYiB3aWR0aCIsDQogICAgICAg
ICAgICAiQ29sdW1ucyBwZXIgdGFiPyAoMi0xNikiLA0KICAgICAgICAgICAgcGFyZW50PXNlbGYu
dGV4dCwNCiAgICAgICAgICAgIGluaXRpYWx2YWx1ZT1zZWxmLmluZGVudHdpZHRoLA0KICAgICAg
ICAgICAgbWludmFsdWU9MiwNCiAgICAgICAgICAgIG1heHZhbHVlPTE2KQ0KDQogICAgIyBHdWVz
cyBpbmRlbnR3aWR0aCBmcm9tIHRleHQgY29udGVudC4NCiAgICAjIFJldHVybiBndWVzc2VkIGlu
ZGVudHdpZHRoLiAgVGhpcyBzaG91bGQgbm90IGJlIGJlbGlldmVkIHVubGVzcw0KICAgICMgaXQn
cyBpbiBhIHJlYXNvbmFibGUgcmFuZ2UgKGUuZy4sIGl0IHdpbGwgYmUgMCBpZiBubyBpbmRlbnRl
ZA0KICAgICMgYmxvY2tzIGFyZSBmb3VuZCkuDQoNCiAgICBkZWYgZ3Vlc3NfaW5kZW50KHNlbGYp
Og0KICAgICAgICBvcGVuZXIsIGluZGVudGVkID0gSW5kZW50U2VhcmNoZXIoc2VsZi50ZXh0LCBz
ZWxmLnRhYndpZHRoKS5ydW4oKQ0KICAgICAgICBpZiBvcGVuZXIgYW5kIGluZGVudGVkOg0KICAg
ICAgICAgICAgcmF3LCBpbmRlbnRzbWFsbCA9IGNsYXNzaWZ5d3Mob3BlbmVyLCBzZWxmLnRhYndp
ZHRoKQ0KICAgICAgICAgICAgcmF3LCBpbmRlbnRsYXJnZSA9IGNsYXNzaWZ5d3MoaW5kZW50ZWQs
IHNlbGYudGFid2lkdGgpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBpbmRlbnRzbWFsbCA9
IGluZGVudGxhcmdlID0gMA0KICAgICAgICByZXR1cm4gaW5kZW50bGFyZ2UgLSBpbmRlbnRzbWFs
bA0KDQojICJsaW5lLmNvbCIgLT4gbGluZSwgYXMgYW4gaW50DQpkZWYgaW5kZXgybGluZShpbmRl
eCk6DQogICAgcmV0dXJuIGludChmbG9hdChpbmRleCkpDQoNCiMgTG9vayBhdCB0aGUgbGVhZGlu
ZyB3aGl0ZXNwYWNlIGluIHMuDQojIFJldHVybiBwYWlyICgjIG9mIGxlYWRpbmcgd3MgY2hhcmFj
dGVycywNCiMgICAgICAgICAgICAgIGVmZmVjdGl2ZSAjIG9mIGxlYWRpbmcgYmxhbmtzIGFmdGVy
IGV4cGFuZGluZw0KIyAgICAgICAgICAgICAgdGFicyB0byB3aWR0aCB0YWJ3aWR0aCkNCg0KZGVm
IGNsYXNzaWZ5d3MocywgdGFid2lkdGgpOg0KICAgIHJhdyA9IGVmZmVjdGl2ZSA9IDANCiAgICBm
b3IgY2ggaW4gczoNCiAgICAgICAgaWYgY2ggPT0gJyAnOg0KICAgICAgICAgICAgcmF3ID0gcmF3
ICsgMQ0KICAgICAgICAgICAgZWZmZWN0aXZlID0gZWZmZWN0aXZlICsgMQ0KICAgICAgICBlbGlm
IGNoID09ICdcdCc6DQogICAgICAgICAgICByYXcgPSByYXcgKyAxDQogICAgICAgICAgICBlZmZl
Y3RpdmUgPSAoZWZmZWN0aXZlIC8vIHRhYndpZHRoICsgMSkgKiB0YWJ3aWR0aA0KICAgICAgICBl
bHNlOg0KICAgICAgICAgICAgYnJlYWsNCiAgICByZXR1cm4gcmF3LCBlZmZlY3RpdmUNCg0KDQpj
bGFzcyBJbmRlbnRTZWFyY2hlcihvYmplY3QpOg0KDQogICAgIyAucnVuKCkgY2hld3Mgb3ZlciB0
aGUgVGV4dCB3aWRnZXQsIGxvb2tpbmcgZm9yIGEgYmxvY2sgb3BlbmVyDQogICAgIyBhbmQgdGhl
IHN0bXQgZm9sbG93aW5nIGl0LiAgUmV0dXJucyBhIHBhaXIsDQogICAgIyAgICAgKGxpbmUgY29u
dGFpbmluZyBibG9jayBvcGVuZXIsIGxpbmUgY29udGFpbmluZyBzdG10KQ0KICAgICMgRWl0aGVy
IG9yIGJvdGggbWF5IGJlIE5vbmUuDQoNCiAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwgdGFi
d2lkdGgpOg0KICAgICAgICBzZWxmLnRleHQgPSB0ZXh0DQogICAgICAgIHNlbGYudGFid2lkdGgg
PSB0YWJ3aWR0aA0KICAgICAgICBzZWxmLmkgPSBzZWxmLmZpbmlzaGVkID0gMA0KICAgICAgICBz
ZWxmLmJsa29wZW5saW5lID0gc2VsZi5pbmRlbnRlZGxpbmUgPSBOb25lDQoNCiAgICBkZWYgcmVh
ZGxpbmUoc2VsZik6DQogICAgICAgIGlmIHNlbGYuZmluaXNoZWQ6DQogICAgICAgICAgICByZXR1
cm4gIiINCiAgICAgICAgaSA9IHNlbGYuaSA9IHNlbGYuaSArIDENCiAgICAgICAgbWFyayA9IHJl
cHIoaSkgKyAiLjAiDQogICAgICAgIGlmIHNlbGYudGV4dC5jb21wYXJlKG1hcmssICI+PSIsICJl
bmQiKToNCiAgICAgICAgICAgIHJldHVybiAiIg0KICAgICAgICByZXR1cm4gc2VsZi50ZXh0Lmdl
dChtYXJrLCBtYXJrICsgIiBsaW5lZW5kKzFjIikNCg0KICAgIGRlZiB0b2tlbmVhdGVyKHNlbGYs
IHR5cGUsIHRva2VuLCBzdGFydCwgZW5kLCBsaW5lLA0KICAgICAgICAgICAgICAgICAgIElOREVO
VD10b2tlbml6ZS5JTkRFTlQsDQogICAgICAgICAgICAgICAgICAgTkFNRT10b2tlbml6ZS5OQU1F
LA0KICAgICAgICAgICAgICAgICAgIE9QRU5FUlM9KCdjbGFzcycsICdkZWYnLCAnZm9yJywgJ2lm
JywgJ3RyeScsICd3aGlsZScpKToNCiAgICAgICAgaWYgc2VsZi5maW5pc2hlZDoNCiAgICAgICAg
ICAgIHBhc3MNCiAgICAgICAgZWxpZiB0eXBlID09IE5BTUUgYW5kIHRva2VuIGluIE9QRU5FUlM6
DQogICAgICAgICAgICBzZWxmLmJsa29wZW5saW5lID0gbGluZQ0KICAgICAgICBlbGlmIHR5cGUg
PT0gSU5ERU5UIGFuZCBzZWxmLmJsa29wZW5saW5lOg0KICAgICAgICAgICAgc2VsZi5pbmRlbnRl
ZGxpbmUgPSBsaW5lDQogICAgICAgICAgICBzZWxmLmZpbmlzaGVkID0gMQ0KDQogICAgZGVmIHJ1
bihzZWxmKToNCiAgICAgICAgc2F2ZV90YWJzaXplID0gdG9rZW5pemUudGFic2l6ZQ0KICAgICAg
ICB0b2tlbml6ZS50YWJzaXplID0gc2VsZi50YWJ3aWR0aA0KICAgICAgICB0cnk6DQogICAgICAg
ICAgICB0cnk6DQogICAgICAgICAgICAgICAgdG9rZW5zID0gdG9rZW5pemUuZ2VuZXJhdGVfdG9r
ZW5zKHNlbGYucmVhZGxpbmUpDQogICAgICAgICAgICAgICAgZm9yIHRva2VuIGluIHRva2VuczoN
CiAgICAgICAgICAgICAgICAgICAgc2VsZi50b2tlbmVhdGVyKCp0b2tlbikNCiAgICAgICAgICAg
IGV4Y2VwdCAodG9rZW5pemUuVG9rZW5FcnJvciwgU3ludGF4RXJyb3IpOg0KICAgICAgICAgICAg
ICAgICMgc2luY2Ugd2UgY3V0IG9mZiB0aGUgdG9rZW5pemVyIGVhcmx5LCB3ZSBjYW4gdHJpZ2dl
cg0KICAgICAgICAgICAgICAgICMgc3B1cmlvdXMgZXJyb3JzDQogICAgICAgICAgICAgICAgcGFz
cw0KICAgICAgICBmaW5hbGx5Og0KICAgICAgICAgICAgdG9rZW5pemUudGFic2l6ZSA9IHNhdmVf
dGFic2l6ZQ0KICAgICAgICByZXR1cm4gc2VsZi5ibGtvcGVubGluZSwgc2VsZi5pbmRlbnRlZGxp
bmUNCg0KIyMjIGVuZCBhdXRvaW5kZW50IGNvZGUgIyMjDQoNCmRlZiBwcmVwc3RyKHMpOg0KICAg
ICMgSGVscGVyIHRvIGV4dHJhY3QgdGhlIHVuZGVyc2NvcmUgZnJvbSBhIHN0cmluZywgZS5nLg0K
ICAgICMgcHJlcHN0cigiQ29fcHkiKSByZXR1cm5zICgyLCAiQ29weSIpLg0KICAgIGkgPSBzLmZp
bmQoJ18nKQ0KICAgIGlmIGkgPj0gMDoNCiAgICAgICAgcyA9IHNbOmldICsgc1tpKzE6XQ0KICAg
IHJldHVybiBpLCBzDQoNCg0Ka2V5bmFtZXMgPSB7DQogJ2JyYWNrZXRsZWZ0JzogJ1snLA0KICdi
cmFja2V0cmlnaHQnOiAnXScsDQogJ3NsYXNoJzogJy8nLA0KfQ0KDQpkZWYgZ2V0X2FjY2VsZXJh
dG9yKGtleWRlZnMsIGV2ZW50bmFtZSk6DQogICAga2V5bGlzdCA9IGtleWRlZnMuZ2V0KGV2ZW50
bmFtZSkNCiAgICAjIGlzc3VlMTA5NDA6IHRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIHByZXZlbnQg
aGFuZyB3aXRoIE9TIFggQ29jb2EgVGsgOC41DQogICAgIyBpZiBub3Qga2V5bGlzdDoNCiAgICBp
ZiAobm90IGtleWxpc3QpIG9yIChtYWNvc3guaXNDb2NvYVRrKCkgYW5kIGV2ZW50bmFtZSBpbiB7
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjw8b3Blbi1tb2R1bGU+PiIsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIjw8Z290by1saW5lPj4iLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICI8PGNoYW5nZS1pbmRlbnR3aWR0aD4+In0pOg0KICAgICAgICByZXR1cm4gIiIN
CiAgICBzID0ga2V5bGlzdFswXQ0KICAgIHMgPSByZS5zdWIociItW2Etel1cYiIsIGxhbWJkYSBt
OiBtLmdyb3VwKCkudXBwZXIoKSwgcykNCiAgICBzID0gcmUuc3ViKHIiXGJcdytcYiIsIGxhbWJk
YSBtOiBrZXluYW1lcy5nZXQobS5ncm91cCgpLCBtLmdyb3VwKCkpLCBzKQ0KICAgIHMgPSByZS5z
dWIoIktleS0iLCAiIiwgcykNCiAgICBzID0gcmUuc3ViKCJDYW5jZWwiLCJDdHJsLUJyZWFrIixz
KSAgICMgZHNjaGVyZXJAY211LmVkdQ0KICAgIHMgPSByZS5zdWIoIkNvbnRyb2wtIiwgIkN0cmwt
IiwgcykNCiAgICBzID0gcmUuc3ViKCItIiwgIisiLCBzKQ0KICAgIHMgPSByZS5zdWIoIj48Iiwg
IiAiLCBzKQ0KICAgIHMgPSByZS5zdWIoIjwiLCAiIiwgcykNCiAgICBzID0gcmUuc3ViKCI+Iiwg
IiIsIHMpDQogICAgcmV0dXJuIHMNCg0KDQpkZWYgZml4d29yZGJyZWFrcyhyb290KToNCiAgICAj
IE9uIFdpbmRvd3MsIHRjbC90ayBicmVha3MgJ3dvcmRzJyBvbmx5IG9uIHNwYWNlcywgYXMgaW4g
Q29tbWFuZCBQcm9tcHQuDQogICAgIyBXZSB3YW50IE1vdGlmIHN0eWxlIGV2ZXJ5d2hlcmUuIFNl
ZSAjMjE0NzQsIG1zZzIxODk5MiBhbmQgZm9sbG93dXAuDQogICAgdGsgPSByb290LnRrDQogICAg
dGsuY2FsbCgndGNsX3dvcmRCcmVha0FmdGVyJywgJ2EgYicsIDApICMgbWFrZSBzdXJlIHdvcmQu
dGNsIGlzIGxvYWRlZA0KICAgIHRrLmNhbGwoJ3NldCcsICd0Y2xfd29yZGNoYXJzJywgcidcdycp
DQogICAgdGsuY2FsbCgnc2V0JywgJ3RjbF9ub253b3JkY2hhcnMnLCByJ1xXJykNCg0KDQpkZWYg
X2VkaXRvcl93aW5kb3cocGFyZW50KTogICMgaHRlc3QgIw0KICAgICMgZXJyb3IgaWYgY2xvc2Ug
bWFzdGVyIHdpbmRvdyBmaXJzdCAtIHRpbWVyIGV2ZW50LCBhZnRlciBzY3JpcHQNCiAgICByb290
ID0gcGFyZW50DQogICAgZml4d29yZGJyZWFrcyhyb290KQ0KICAgIGlmIHN5cy5hcmd2WzE6XToN
CiAgICAgICAgZmlsZW5hbWUgPSBzeXMuYXJndlsxXQ0KICAgIGVsc2U6DQogICAgICAgIGZpbGVu
YW1lID0gTm9uZQ0KICAgIG1hY29zeC5zZXR1cEFwcChyb290LCBOb25lKQ0KICAgIGVkaXQgPSBF
ZGl0b3JXaW5kb3cocm9vdD1yb290LCBmaWxlbmFtZT1maWxlbmFtZSkNCiAgICBlZGl0LnRleHQu
YmluZCgiPDxjbG9zZS1hbGwtd2luZG93cz4+IiwgZWRpdC5jbG9zZV9ldmVudCkNCiAgICAjIERv
ZXMgbm90IHN0b3AgZXJyb3IsIG5laXRoZXIgZG9lcyBmb2xsb3dpbmcNCiAgICAjIGVkaXQudGV4
dC5iaW5kKCI8PGNsb3NlLXdpbmRvdz4+IiwgZWRpdC5jbG9zZV9ldmVudCkNCg0KaWYgX19uYW1l
X18gPT0gJ19fbWFpbl9fJzoNCiAgICBpbXBvcnQgdW5pdHRlc3QNCiAgICB1bml0dGVzdC5tYWlu
KCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X2VkaXRvcicsIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNl
KQ0KDQogICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuDQogICAgcnVu
KF9lZGl0b3Jfd2luZG93KQ0K

--mailmaster-5fa53b4f_0_29
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
IDLE-dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/idle-dev

--mailmaster-5fa53b4f_0_29--