Python Launcher Pops Up When Py-based App Is Running (Mac)

James Greenham via Python-list <[email protected]> Sun, 17 Sep 2023 04:20:56 +0300
Newsgroups gmane.comp.python.general,gmane.comp.python.apple
Message-ID <[email protected]>
SGVsbG8sCgpPbiB0aGUgZmFjZSBvZiBpdCwgdGhlIFB5dGhvbi1NYWMgbWFpbGluZyBsaXN0IGlz
IGxhcmdlbHkgaW5hY3RpdmUgc28gSSdtIHBvc3RpbmcgaGVyZSBzaW5jZSBpdCBsb29rcyBsaWtl
IHRoaXMgb25lIGlzIGxpdmVsaWVyLiAgCgpJJ20gcnVubmluZyBtYWNPUyBNb2phdmUgd2l0aCBQ
eXRob24gMi43LiBJIGhhdmUgYW4gb2xkIERhc2hib2FyZCB3aWRnZXQgKGxhc3QgbW9kaWZpZWQg
aW4gMjAwOSkgdGhhdCBhcHBlYXJzIHRvIHVzZSBQeXRob24gYXMgd2VsbC4gVGhlIHdpZGdldCBj
YXB0dXJlcyB0aGUgZnVsbCBTYWZhcmkgd2ViLXBhZ2UuIEl0IHdvcmtzIHNlYW1sZXNzbHkgb24g
ZWFybGllciBtYWNPUyBzeXN0ZW1zIGJ1dCBoYW5ncyBpbiAxMC4xNC4gVGhlIHdpZGdldCdzIGNv
cmUgZnVuY3Rpb25zIGNvbnN0aXR1dGUgY29kZSBvZiB0aGUgc2NyaXB0IHRoYXQgSSdtIHBhc3Rp
bmcgaW4gdGhpcyBtZXNzYWdlLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGFzIHNvb24gYXMgdGhlIGV4
ZWN1dGlvbiByZWFjaGVzIHRoZSBpbWFnZSBwcm9jZXNzaW5nIHN0YWdlIGl0IGdldHMgc3R1Y2sg
d2hpY2ggbWFuaWZlc3RzIGJ5IFB5dGhvbiBMYXVuY2hlciBwb3BwaW5nIHVwIGluIERvY2sgYW5k
IGlzIHRyeWluZyBmb3JldmVyIHVudGlsIEkgcXVpdCB0aGUgbGF1bmNoZXIgdGhhdCBmb3JjZS1x
dWl0cyB0aGUgd2lkZ2V0IHNob3dpbmcgdGhlIGVycm9yIGljb24uCgpUaGUgaXNzdWUgc2VlbXMg
dG8gb3JpZ2luYXRlIGluIHRoZSBkb0dyYWIgaGFuZGxlciAobW9kdWxlIG9yIHdoYXRldmVyIHRo
ZSBjb3JyZWN0IFB5dGhvbiB0ZXJtIGZpdHMgdGhlIGRlZmluaXRpb24pIGltbWVkaWF0ZWx5IGZv
bGxvd2luZyB0aGUgcHJpbnQgIlByb2Nlc3NpbmcgSW1hZ2UuLi4iIGxpbmU6IGl0J3MgdGhlIG1l
c3NhZ2UgdGhlIHdpZGdldCBkaXNwbGF5cyBhdCBnZXR0aW5nIHN0YWxsZWQuIEkoIGNoZWNrZWQg
dGhhdCBQeXRob24gMi43IGlzIGluc3RhbGxlZCBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiBhdCAv
dXNyL2Jpbi4gSSBhbHNvIGhhdmUgdGhlIGJpbmFyaWVzIGlkbGUzLCBpZGxlMy4xMCwgcGlwMywg
cGlwMy4xMCBpbiAvdXNyL2xvY2FsL2JpbiwgYXBwYXJlbnRseSB1c2VkIGJ5IGFub3RoZXIgVW5p
eCBwcm9ncmFtLiAKCklzIHRoYXQgcmVtZWRpZWQ/IFRoZSBzY3JpcHQncyBlbnZpcm9ubWVudCBz
ZXQgdG8gcHl0aG9uLCBpLmUuIHRvIHB5dGhvbiAyLjcgc28gdGhhdCBzaG91bGRuJ3QgYmUgdGhl
IGVuY3VtYnJhbmNlLiBBbSBJIGNvcnJlY3Q/CgojIS91c3IvYmluL2VudiBweXRob24KIyAtKi0g
Y29kaW5nOiB1dGYtOCAtKi0KCiMgT1I6CiMgY29kaW5nPXV0Zi04CgpfX3ZlcnNpb25fXyA9ICIw
LjYiCgojCiMgQmFzZWQgb24gUGF1bCBIYW1tb25kJ3Mgd2Via2l0MnBuZyBzY3JpcHQgLSBtYWtl
IHNjcmVlbnNob3RzIG9mIHdlYnBhZ2VzCiMgaHR0cDovL3d3dy5wYXVsaGFtbW9uZC5vcmcvd2Vi
a2l0MnBuZyA8aHR0cDovL3d3dy5wYXVsaGFtbW9uZC5vcmcvd2Via2l0MnBuZz4KIwojIE1vZGlm
aWVkIGJ5IFBhdWxvIEF2aWxhIGZvciB0aGUgUGFnZSBDYXB0dXJlIHdpZGdldAojCiMgVGhlIG9y
aWdpbmFsIHNvdXJjZSBjb2RlICh2MC41KSBiZWxvbmdzIHRvIFBhdWwgSGFtbW9uZCAoc2VlIG5v
dGljZSBiZWxvdykuCiMgQW55IGFuZCBhbGwgY29kZSBhZGRlZCBhZnRlciBpcyBDb3B5cmlnaHQg
KGMpIDIwMDkgUGF1bG8gQXZpbGEuCiMKIyBNb2RpZmljYXRpb24gTG9nIGJ5IFBhdWwgQXZpbGEK
IwojICAyMDA5LjA0LjIxIC0gQ2hhbmdlZCBhbG1vc3QgYWxsIHRoZSBvdXRwdXQgbWVzc2FnZXMg
aW4gb3JkZXIgdG8gYmVoYXZlIHByb3Blcmx5IHdpdGggbXkgUGFnZSBDYXB0dXJlIHdpZGdldAoj
ICAyMDA5LjA0LjIxIC0gQWRkZWQgZnVuY3Rpb24gaGVhZGVycwojICAyMDA5LjA0LjIxIC0gUHJv
cGVybHkgZmx1c2ggdGhlIG91dHB1dCBidWZmZXJzIHNvIHRoYXQgbWVzc2FnZXMgZGlzcGxheSBp
bW1lZGlhdGVseQojICAyMDA5LjA0LjIxIC0gQ2hhbmdlZCBlbmNvZGluZyBvZiB0aGlzIGZpbGUg
dG8gVVRGLTgKIyAgMjAwOS4wNC4yNSAtIFVwZGF0ZWQgaG93IGZpbGVzIGFyZSBuYW1lZDogIjxk
b21haW4+ID4gPGZpbGU+LnBuZyIKIyAgMjAwOS4wNC4yNSAtIEZpbGVzIGFyZSBub3cgbmFtZWQg
d2l0aCB0aGUgZnVsbCBVUkwgZXhjbHVkaW5nIHByb3RvY29sIChodHRwOi8vKSBhbmQgYXJndW1l
bnRzICguLi4/KikKIwoKCgojIENvcHlyaWdodCAoYykgMjAwOSBQYXVsIEhhbW1vbmQKIwojIFBl
cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u
IG9idGFpbmluZyBhIGNvcHkKIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt
ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAojIGluIHRoZSBTb2Z0d2Fy
ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBy
aWdodHMKIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs
IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv
IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiMgZnVybmlzaGVkIHRvIGRv
IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKIwojIFRoZSBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1
ZGVkIGluCiMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh
cmUuCiMKIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgojIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ
TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAojIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRQojIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg
Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O
IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAojIE9VVCBPRiBP
UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB
TElOR1MgSU4KIyBUSEUgU09GVFdBUkUuCiMKICAgICAgICAgICAgICAgIAppbXBvcnQgc3lzCmlt
cG9ydCBvcHRwYXJzZQoKdHJ5OgogIGltcG9ydCBGb3VuZGF0aW9uCiAgaW1wb3J0IFdlYktpdAog
IGltcG9ydCBBcHBLaXQKICBpbXBvcnQgb2JqYwpleGNlcHQgSW1wb3J0RXJyb3I6CiAgI3ByaW50
ICJDYW5ub3QgZmluZCBweW9iamMgbGlicmFyeSBmaWxlcy4gIEFyZSB5b3Ugc3VyZSBpdCBpcyBp
bnN0YWxsZWQ/IgogIHByaW50ICJNYWMgT1MgWCAxMC41IG9yIGhpZ2hlciBpcyByZXF1aXJlZC4i
CiAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgc3lzLmV4aXQoKSAKCgoKY2xhc3MgQXBwRGVsZWdhdGUg
KEZvdW5kYXRpb24uTlNPYmplY3QpOgogICAgIyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgYXBwIHN0
YXJ0cyB1cAogICAgZGVmIGFwcGxpY2F0aW9uRGlkRmluaXNoTGF1bmNoaW5nXyhzZWxmLCBhTm90
aWZpY2F0aW9uKToKICAgICAgICB3ZWJ2aWV3ID0gYU5vdGlmaWNhdGlvbi5vYmplY3QoKS53aW5k
b3dzKClbMF0uY29udGVudFZpZXcoKQogICAgICAgIHdlYnZpZXcuZnJhbWVMb2FkRGVsZWdhdGUo
KS5nZXRVUkwod2VidmlldykKCmNsYXNzIFdlYmtpdExvYWQgKEZvdW5kYXRpb24uTlNPYmplY3Qs
IFdlYktpdC5wcm90b2NvbHMuV2ViRnJhbWVMb2FkRGVsZWdhdGUpOgogICAgIyB3aGF0IGhhcHBl
bnMgaWYgc29tZXRoaW5nIGdvZXMgd3Jvbmcgd2hpbGUgbG9hZGluZwogICAgZGVmIHdlYlZpZXdf
ZGlkRmFpbExvYWRXaXRoRXJyb3JfZm9yRnJhbWVfKHNlbGYsd2VidmlldyxlcnJvcixmcmFtZSk6
CiAgICAgICAgI3ByaW50ICIgLi4uIHNvbWV0aGluZyB3ZW50IHdyb25nIiAKICAgICAgICBwcmlu
dCAiVW5hYmxlIHRvIGxvYWQgV2ViS2l0LiIKICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAg
ICAgICBzZWxmLmdldFVSTCh3ZWJ2aWV3KQogICAgZGVmIHdlYlZpZXdfZGlkRmFpbFByb3Zpc2lv
bmFsTG9hZFdpdGhFcnJvcl9mb3JGcmFtZV8oc2VsZix3ZWJ2aWV3LGVycm9yLGZyYW1lKToKICAg
ICAgICAjcHJpbnQgIiAuLi4gc29tZXRoaW5nIHdlbnQgd3JvbmciIAogICAgICAgIHByaW50ICJD
aGVjayBVUkwgb3IgSW50ZXJuZXQgY29ubmVjdGlvbi4iCiAgICAgICAgc3lzLnN0ZG91dC5mbHVz
aCgpCiAgICAgICAgc2VsZi5nZXRVUkwod2VidmlldykKCgoKIy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojNyAtIEdlbmVyYXRlcyB0aGUgZmlsZW5h
bWUuCgogICAgZGVmIG1ha2VGaWxlbmFtZShzZWxmLFVSTCxvcHRpb25zKToKICAgICAgICMgbWFr
ZSB0aGUgZmlsZW5hbWUKICAgICAgIGlmIG9wdGlvbnMuZmlsZW5hbWU6CiAgICAgICAgIGZpbGVu
YW1lID0gb3B0aW9ucy5maWxlbmFtZQogICAgICAgZWxpZiBvcHRpb25zLm1kNToKICAgICAgICAg
dHJ5OgogICAgICAgICAgICAgICAgaW1wb3J0IG1kNQogICAgICAgICBleGNlcHQgSW1wb3J0RXJy
b3I6CiAgICAgICAgICAgICAgICBwcmludCAiLS1tZDUgcmVxdWlyZXMgcHl0aG9uIG1kNSBsaWJy
YXJ5IgogICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICAgICBB
cHBLaXQuTlNBcHBsaWNhdGlvbi5zaGFyZWRBcHBsaWNhdGlvbigpLnRlcm1pbmF0ZV8oTm9uZSkK
ICAgICAgICAgZmlsZW5hbWUgPSBtZDUubmV3KFVSTCkuaGV4ZGlnZXN0KCkKICAgICAgIGVsc2U6
CiAgICAgICAgIGltcG9ydCByZQojICAgICAgICAgZmlsZW5hbWUgPSByZS5zdWIoJ1xXJywnJyxV
UkwpOyAjXFcgaXMgdGhlIHNhbWUgYXMgW15hLXpBLVowLTlfXQoKIy0tLS0tLS0tCiAgICAgICAg
ICNyZW1vdmUgYW55dGhpbmcgYWZ0ZXIgKGFuZCBpbmNsdWRpbmcpIGEgcXVlc3Rpb24gbWFyawog
ICAgICAgICBVUkwgPSByZS5zdWIoIlw/LiokIiwgIiIsIFVSTCk7CiAgICAgICAgICNhcmcgPSBV
UkwuZmluZCgiPyIpOwogICAgICAgICAjaWYgYXJnID49IDA6CiAgICAgICAgICMgICAgVVJMID0g
VVJMWzA6YXJnXTsKCiAgICAgICAgICNyZW1vdmUgdGhlIHByb3RvY29sIHN0cmluZyBpbiB0aGUg
YmVnaW5uaW5nIChTU0wgb3Igbm90KQogICAgICAgICBVUkwgPSByZS5zdWIoIl5odHRwcz86Ly8i
LCAiIiwgVVJMKTsKCgoKIy0tIFBhZ2UgQ2FwdHVyZSAjIChzdGFydCkKICAgICAgICAgaW1wb3J0
IG9zCiAgICAgICAgIGRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmV4cGFuZHVzZXIob3B0
aW9ucy5kaXIpKTsKCiAgICAgICAgIGNvdW50ID0gMTsKICAgICAgICAgd2hpbGUgb3MuYWNjZXNz
KGRpciArICIvUGFnZSBDYXB0dXJlICIgKyBzdHIoY291bnQpICsgIi5wbmciLCBvcy5GX09LKTog
CiAgICAgICAgICAgICBjb3VudCArPSAxOwoKICAgICAgICAgZmlsZW5hbWUgPSAiUGFnZSBDYXB0
dXJlICIgKyBzdHIoY291bnQpOwojLS0gUGFnZSBDYXB0dXJlICMgKGVuZCkKCgoKIy0tIEZ1bGwg
VVJMIChzdGFydCkKICAgICAgICAgI3JlcGxhY2UgZm9yd2FyZCBzbGFzaGVzIHdpdGggY29sb25z
IHRvIGFsbG93IHRvIGZvcndhcmQgc2xhc2hlcyBpbiB0aGUgZmlsZW5hbWUgKE9TIFgncyBIRlMr
IGFsbG93cyBmb3IgdGhpcykKICAgICAgIyAgIGZpbGVuYW1lID0gcmUuc3ViKCIvIiwgIjoiLCBV
UkwpOwoKICAgICAgICAgI21heCBmaWxlbmFtZSBsZW5ndGggcGVybWl0dGVkIGlzIDI1NS4gKDI1
NSAtIDQgPSAyNTEpLiAoNCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBleHRlbmlvbiAnLnBuZycpCiAg
ICAgICMgICBpZiBsZW4oZmlsZW5hbWUpID4gMjUxOgogICAgICAjICAgICAgIGZpbGVuYW1lID0g
ZmlsZW5hbWVbMDoyNDhdICsgIi4uLiI7CiMtLSBGdWxsIFVSTCAoZW5kKQoKCgojLS0gRG9tYWlu
ID4gRmlsZSAoc3RhcnQpCiAgICAgICMgICBVUkwgPSBVUkwuc3BsaXQoIi8iKTsKCiAgICAgICAg
ICNpc29sYXRlIGp1c3QgdGhlIGRvbWFpbgogICAgICAjICAgZG9tYWluID0gVVJMWzBdOwogICAg
ICAgICAjZG9tYWluID0gcmUuc3ViKCIvLiokIiwgIiIsIFVSTCk7CiAgICAgICAgICNkb21haW4g
PSBVUkxbMDpVUkwuZmluZCgiLyIpXTsKCiAgICAgICAgICNpc29sYXRlIGp1c3QgdGhlIGZpbGUs
IGlmIGl0IGRvZXNuJ3QgZXhpc3QsIG1ha2UgaXQgYmxhbmsKICAgICAgIyAgIGZpbGUgPSBVUkxb
bGVuKFVSTCktMV07CiAgICAgICMgICBpZiBsZW4oVVJMKSA9PSAxOgogICAgICAjICAgICAgIGZp
bGUgPSAiIjsKCiAgICAgICMgICBmaWxlbmFtZSA9IGRvbWFpbiArICIgPiAiICsgZmlsZTsKCiAg
ICAgICAgICNwcmludCAiZD0gJyIgKyBkb21haW4gKyAiJyI7CiAgICAgICAgICNwcmludCAiZj0g
JyIgKyBmaWxlICsgIiciOwojLS0gRG9tYWluID4gRmlsZSAoZW5kKQojLS0tLS0tLS0KCiAgICAg
ICBpZiBvcHRpb25zLmRhdGVzdGFtcDoKICAgICAgICAgaW1wb3J0IHRpbWUKICAgICAgICAgbm93
ID0gdGltZS5zdHJmdGltZSgiJVklbSVkIikKIyAgICAgICAgIG5vdyA9IHRpbWUuc3RyZnRpbWUo
IiVZJW0lZCVIJU0lUyIpCiAgICAgICAgIGZpbGVuYW1lID0gbm93ICsgIi0iICsgZmlsZW5hbWUK
IyAgICAgICBpbXBvcnQgb3MKIyAgICAgICBkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5l
eHBhbmR1c2VyKG9wdGlvbnMuZGlyKSkKIyAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKGRpcixm
aWxlbmFtZSkKICAgICAgIHJldHVybiBmaWxlbmFtZQoKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIzggLSBTYXZlcyB0aGUgY2FwdHVyZWQgaW1h
Z2UocykgdG8gdGhlIHJpZ2h0IHBsYWNlLgoKICAgIGRlZiBzYXZlSW1hZ2VzKHNlbGYsYml0bWFw
ZGF0YSxmaWxlbmFtZSxvcHRpb25zKToKICAgICAgICAjIHNhdmUgdGhlIGZ1bGxzaXplIHBuZwog
ICAgICAgIGlmIG9wdGlvbnMuZnVsbHNpemU6CgkJCWJpdG1hcGRhdGEucmVwcmVzZW50YXRpb25V
c2luZ1R5cGVfcHJvcGVydGllc18oQXBwS2l0Lk5TUE5HRmlsZVR5cGUsTm9uZSkud3JpdGVUb0Zp
bGVfYXRvbWljYWxseV8oZmlsZW5hbWUgKyAiLWZ1bGwucG5nIixvYmpjLllFUykKCiAgICAgICAg
aWYgb3B0aW9ucy50aHVtYiBvciBvcHRpb25zLmNsaXBwZWQ6CiAgICAgICAgICAgICMgd29yayBv
dXQgaG93IGJpZyB0aGUgdGh1bWJuYWlsIGlzCiAgICAgICAgICAgIHdpZHRoID0gYml0bWFwZGF0
YS5waXhlbHNXaWRlKCkKICAgICAgICAgICAgaGVpZ2h0ID0gYml0bWFwZGF0YS5waXhlbHNIaWdo
KCkKICAgICAgICAgICAgdGh1bWJXaWR0aCA9ICh3aWR0aCAqIG9wdGlvbnMuc2NhbGUpCiAgICAg
ICAgICAgIHRodW1iSGVpZ2h0ID0gKGhlaWdodCAqIG9wdGlvbnMuc2NhbGUpCgogICAgICAgICAg
ICAjIG1ha2UgdGhlIHRodW1ibmFpbHMgaW4gYSBzY3JhdGNoIGltYWdlCiAgICAgICAgICAgIHNj
cmF0Y2ggPSBBcHBLaXQuTlNJbWFnZS5hbGxvYygpLmluaXRXaXRoU2l6ZV8oCiAgICAgICAgICAg
ICAgICAgICAgRm91bmRhdGlvbi5OU01ha2VTaXplKHRodW1iV2lkdGgsdGh1bWJIZWlnaHQpKQog
ICAgICAgICAgICBzY3JhdGNoLmxvY2tGb2N1cygpCiAgICAgICAgICAgIEFwcEtpdC5OU0dyYXBo
aWNzQ29udGV4dC5jdXJyZW50Q29udGV4dCgpLnNldEltYWdlSW50ZXJwb2xhdGlvbl8oCiAgICAg
ICAgICAgICAgICAgICAgQXBwS2l0Lk5TSW1hZ2VJbnRlcnBvbGF0aW9uSGlnaCkKICAgICAgICAg
ICAgdGh1bWJSZWN0ID0gRm91bmRhdGlvbi5OU01ha2VSZWN0KDAuMCwgMC4wLCB0aHVtYldpZHRo
LCB0aHVtYkhlaWdodCkKICAgICAgICAgICAgY2xpcFJlY3QgPSBGb3VuZGF0aW9uLk5TTWFrZVJl
Y3QoMC4wLCAKICAgICAgICAgICAgICAgICAgICB0aHVtYkhlaWdodC1vcHRpb25zLmNsaXBoZWln
aHQsIAogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY2xpcHdpZHRoLCBvcHRpb25zLmNsaXBo
ZWlnaHQpCiAgICAgICAgICAgIGJpdG1hcGRhdGEuZHJhd0luUmVjdF8odGh1bWJSZWN0KQogICAg
ICAgICAgICB0aHVtYk91dHB1dCA9IEFwcEtpdC5OU0JpdG1hcEltYWdlUmVwLmFsbG9jKCkuaW5p
dFdpdGhGb2N1c2VkVmlld1JlY3RfKHRodW1iUmVjdCkKICAgICAgICAgICAgY2xpcE91dHB1dCA9
IEFwcEtpdC5OU0JpdG1hcEltYWdlUmVwLmFsbG9jKCkuaW5pdFdpdGhGb2N1c2VkVmlld1JlY3Rf
KGNsaXBSZWN0KQogICAgICAgICAgICBzY3JhdGNoLnVubG9ja0ZvY3VzKCkKICAgICAgICAgICAK
ICAgICAgICAgICAgIyBzYXZlIHRoZSB0aHVtYm5haWxzIGFzIHBuZ3MgCiAgICAgICAgICAgIGlm
IG9wdGlvbnMudGh1bWI6CiAgICAgICAgICAgICAgICB0aHVtYk91dHB1dC5yZXByZXNlbnRhdGlv
blVzaW5nVHlwZV9wcm9wZXJ0aWVzXygKICAgICAgICAgICAgICAgICAgICAgICAgQXBwS2l0Lk5T
UE5HRmlsZVR5cGUsTm9uZQogICAgICAgICAgICAgICAgICAgICkud3JpdGVUb0ZpbGVfYXRvbWlj
YWxseV8oZmlsZW5hbWUgKyAiLnBuZyIsb2JqYy5ZRVMpCiMgICAgICAgICAgICAgICAgdGh1bWJP
dXRwdXQucmVwcmVzZW50YXRpb25Vc2luZ1R5cGVfcHJvcGVydGllc18oCiMgICAgICAgICAgICAg
ICAgICAgICAgICBBcHBLaXQuTlNQTkdGaWxlVHlwZSxOb25lCiMgICAgICAgICAgICAgICAgICAg
ICkud3JpdGVUb0ZpbGVfYXRvbWljYWxseV8oZmlsZW5hbWUgKyAiLXRodW1iLnBuZyIsb2JqYy5Z
RVMpCiAgICAgICAgICAgIGlmIG9wdGlvbnMuY2xpcHBlZDoKICAgICAgICAgICAgICAgIGNsaXBP
dXRwdXQucmVwcmVzZW50YXRpb25Vc2luZ1R5cGVfcHJvcGVydGllc18oCiAgICAgICAgICAgICAg
ICAgICAgICAgIEFwcEtpdC5OU1BOR0ZpbGVUeXBlLE5vbmUKICAgICAgICAgICAgICAgICAgICAp
LndyaXRlVG9GaWxlX2F0b21pY2FsbHlfKGZpbGVuYW1lICsgIi1jbGlwcGVkLnBuZyIsb2JqYy5Z
RVMpCgoKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIzEgLSBEb3dubG9hZHMgVVJMIGNvbnRlbnRzLgoKICAgIGRlZiBnZXRVUkwoc2VsZix3ZWJ2
aWV3KToKICAgICAgICBpZiBzZWxmLnVybHM6CiAgICAgICAgICAgIGlmIHNlbGYudXJsc1swXSA9
PSAnLSc6CiAgICAgICAgICAgICAgICB1cmwgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5yc3RyaXAo
KQogICAgICAgICAgICAgICAgaWYgbm90IHVybDogQXBwS2l0Lk5TQXBwbGljYXRpb24uc2hhcmVk
QXBwbGljYXRpb24oKS50ZXJtaW5hdGVfKE5vbmUpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICAgICB1cmwgPSBzZWxmLnVybHMucG9wKDApCiAgICAgICAgZWxzZToKICAgICAgICAgICAg
QXBwS2l0Lk5TQXBwbGljYXRpb24uc2hhcmVkQXBwbGljYXRpb24oKS50ZXJtaW5hdGVfKE5vbmUp
CiAgICAgICAgI3ByaW50ICJGZXRjaGluZyIsIHVybCwgIi4uLiIKICAgICAgICBwcmludCAiRmV0
Y2hpbmcgVVJMLi4uIgogICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgIHNlbGYucmVz
ZXRXZWJ2aWV3KHdlYnZpZXcpCiAgICAgICAgd2Vidmlldy5tYWluRnJhbWUoKS5sb2FkUmVxdWVz
dF8oRm91bmRhdGlvbi5OU1VSTFJlcXVlc3QucmVxdWVzdFdpdGhVUkxfKEZvdW5kYXRpb24uTlNV
UkwuVVJMV2l0aFN0cmluZ18odXJsKSkpCiAgICAgICAgaWYgbm90IHdlYnZpZXcubWFpbkZyYW1l
KCkucHJvdmlzaW9uYWxEYXRhU291cmNlKCk6CiAgICAgICAgICAgICNwcmludCAiIC4uLiBub3Qg
YSBwcm9wZXIgdXJsPyIKICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgVVJMLiIKICAgICAgICAg
ICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgIHNlbGYuZ2V0VVJMKHdlYnZpZXcpCgoK
CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIzIg
LSBSZXNldHMgYW55IHByZXZpb3VzIGhpc3Rvcnk/CgogICAgZGVmIHJlc2V0V2VidmlldyhzZWxm
LHdlYnZpZXcpOgogICAgICAgIHJlY3QgPSBGb3VuZGF0aW9uLk5TTWFrZVJlY3QoMCwwLHNlbGYu
b3B0aW9ucy5pbml0V2lkdGgsc2VsZi5vcHRpb25zLmluaXRIZWlnaHQpCiAgICAgICAgd2Vidmll
dy53aW5kb3coKS5zZXRDb250ZW50U2l6ZV8oKHNlbGYub3B0aW9ucy5pbml0V2lkdGgsc2VsZi5v
cHRpb25zLmluaXRIZWlnaHQpKQogICAgICAgIHdlYnZpZXcuc2V0RnJhbWVfKHJlY3QpCgoKCiMt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIzUgLSBS
ZXNpemVzIHRoZSB3aW5kb3cuCgogICAgZGVmIHJlc2l6ZVdlYnZpZXcoc2VsZix2aWV3KToKICAg
ICAgICB2aWV3LndpbmRvdygpLmRpc3BsYXkoKQogICAgICAgIHZpZXcud2luZG93KCkuc2V0Q29u
dGVudFNpemVfKHZpZXcuYm91bmRzKCkuc2l6ZSkKICAgICAgICB2aWV3LnNldEZyYW1lXyh2aWV3
LmJvdW5kcygpKQoKCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiM2IC0gVHVybnMgY3VycmVudCB3ZWJ2aWV3IGNvbnRlbnQgaW50byBhIGJpdG1h
cC4KICAgIGRlZiBjYXB0dXJlVmlldyhzZWxmLHZpZXcpOgogICAgICAgIHZpZXcubG9ja0ZvY3Vz
KCkKICAgICAgICBiaXRtYXBkYXRhID0gQXBwS2l0Lk5TQml0bWFwSW1hZ2VSZXAuYWxsb2MoKQog
ICAgICAgIGJpdG1hcGRhdGEuaW5pdFdpdGhGb2N1c2VkVmlld1JlY3RfKHZpZXcuYm91bmRzKCkp
CiAgICAgICAgdmlldy51bmxvY2tGb2N1cygpCiAgICAgICAgcmV0dXJuIGJpdG1hcGRhdGEKCgoK
Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojMyAt
IENhbGxlZCBmb3IgZWFjaCAicGllY2UiIG9mIHRoZSBwYWdlLgoKICAgICMgd2hhdCBoYXBwZW5z
IHdoZW4gdGhlIHBhZ2UgaGFzIGZpbmlzaGVkIGxvYWRpbmcKICAgIGRlZiB3ZWJWaWV3X2RpZEZp
bmlzaExvYWRGb3JGcmFtZV8oc2VsZix3ZWJ2aWV3LGZyYW1lKToKICAgICAgICAjIGRvbid0IGNh
cmUgYWJvdXQgc3ViZnJhbWVzCiAgICAgICAgaWYgKGZyYW1lID09IHdlYnZpZXcubWFpbkZyYW1l
KCkpOgogICAgICAgICAgICBGb3VuZGF0aW9uLk5TVGltZXIuc2NoZWR1bGVkVGltZXJXaXRoVGlt
ZUludGVydmFsX3RhcmdldF9zZWxlY3Rvcl91c2VySW5mb19yZXBlYXRzXyggc2VsZi5vcHRpb25z
LmRlbGF5LCBzZWxmLCBzZWxmLmRvR3JhYiwgd2VidmlldywgRmFsc2UpCgoKCiMtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIzQgLSBQcm9jZXNzIHRo
ZSBkb3dubG9hZGVkIGNvbnRlbnQgKGNhbGxzIDUtOCkKCiAgICBkZWYgZG9HcmFiKHNlbGYsdGlt
ZXIpOgogICAgICAgICAgICBwcmludCAiUHJvY2Vzc2luZyBpbWFnZS4uLiIKICAgICAgICAgICAg
c3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgIHdlYnZpZXcgPSB0aW1lci51c2VySW5mbygp
CiAgICAgICAgICAgIHZpZXcgPSB3ZWJ2aWV3Lm1haW5GcmFtZSgpLmZyYW1lVmlldygpLmRvY3Vt
ZW50VmlldygpCiAgICAgICAgICAgIAogICAgICAgICAgICBzZWxmLnJlc2l6ZVdlYnZpZXcodmll
dykKCiAgICAgICAgICAgIFVSTCA9IHdlYnZpZXcubWFpbkZyYW1lKCkuZGF0YVNvdXJjZSgpLmlu
aXRpYWxSZXF1ZXN0KCkuVVJMKCkuYWJzb2x1dGVTdHJpbmcoKQogICAgICAgICAgICBmaWxlbmFt
ZSA9IHNlbGYubWFrZUZpbGVuYW1lKFVSTCwgc2VsZi5vcHRpb25zKSAKCiAgICAgICAgICAgIGlt
cG9ydCBvcwogICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNw
YXRoKG9zLnBhdGguZXhwYW5kdXNlcihzZWxmLm9wdGlvbnMuZGlyKSksIGZpbGVuYW1lKTsKCiAg
ICAgICAgICAgIGJpdG1hcGRhdGEgPSBzZWxmLmNhcHR1cmVWaWV3KHZpZXcpICAKICAgICAgICAg
ICAgc2VsZi5zYXZlSW1hZ2VzKGJpdG1hcGRhdGEsIGZ1bGxfcGF0aCwgc2VsZi5vcHRpb25zKQoK
ICAgICAgICAgICAgI3ByaW50ICIgLi4uIGRvbmUiCiMg4pyTCiAgICAgICAgICAgIHByaW50ICI8
ZmlsZW5hbWU+IiArIGZpbGVuYW1lICsgIjwvZmlsZW5hbWU+IHNhdmVkIHRvIHlvdXIgRGVza3Rv
cC4iCiAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICBzZWxmLmdldFVS
TCh3ZWJ2aWV3KQoKCmRlZiBtYWluKCk6CgogICAgIyBwYXJzZSB0aGUgY29tbWFuZCBsaW5lCiAg
ICB1c2FnZSA9ICIiIiVwcm9nIFtvcHRpb25zXSBbaHR0cDovL2V4YW1wbGUubmV0LyA8aHR0cDov
L2V4YW1wbGUubmV0Lz4gLi4uXQoKZXhhbXBsZXM6CiVwcm9nIGh0dHA6Ly9nb29nbGUuY29tLyA8
aHR0cDovL2dvb2dsZS5jb20vPiAgICAgICAgICAgICMgc2NyZWVuZ3JhYiBnb29nbGUKJXByb2cg
LVcgMTAwMCAtSCAxMDAwIGh0dHA6Ly9nb29nbGUuY29tLyA8aHR0cDovL2dvb2dsZS5jb20vPiAj
IGJpZ2dlciBzY3JlZW5ncmFiIG9mIGdvb2dsZQolcHJvZyAtVCBodHRwOi8vZ29vZ2xlLmNvbS8g
PGh0dHA6Ly9nb29nbGUuY29tLz4gICAgICAgICAjIGp1c3QgdGhlIHRodW1ibmFpbCBzY3JlZW5n
cmFiCiVwcm9nIC1URiBodHRwOi8vZ29vZ2xlLmNvbS8gPGh0dHA6Ly9nb29nbGUuY29tLz4gICAg
ICAgICMganVzdCB0aHVtYm5haWwgYW5kIGZ1bGxzaXplIGdyYWIKJXByb2cgLW8gZm9vIGh0dHA6
Ly9nb29nbGUuY29tLyA8aHR0cDovL2dvb2dsZS5jb20vPiAgICAgIyBzYXZlIGltYWdlcyBhcyAi
Zm9vLXRodW1iLnBuZyIgZXRjCiVwcm9nIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg
c2NyZWVuZ3JhYiB1cmxzIGZyb20gc3RkaW4KJXByb2cgLWggfCBsZXNzICAgICAgICAgICAgICAg
ICAgICAgIyBmdWxsIGRvY3VtZW50YXRpb24iIiIKCiAgICBjbWRwYXJzZXIgPSBvcHRwYXJzZS5P
cHRpb25QYXJzZXIodXNhZ2UsdmVyc2lvbj0oIndlYmtpdDJwbmcgIitfX3ZlcnNpb25fXykpCiAg
ICAjIFRPRE86IGFkZCBxdWlldC92ZXJib3NlIG9wdGlvbnMKICAgIGNtZHBhcnNlci5hZGRfb3B0
aW9uKCItVyIsICItLXdpZHRoIix0eXBlPSJmbG9hdCIsZGVmYXVsdD04MDAuMCwKICAgICAgIGhl
bHA9ImluaXRpYWwgKGFuZCBtaW5pbXVtKSB3aWR0aCBvZiBicm93c2VyIChkZWZhdWx0OiA4MDAp
IikKICAgIGNtZHBhcnNlci5hZGRfb3B0aW9uKCItSCIsICItLWhlaWdodCIsdHlwZT0iZmxvYXQi
LGRlZmF1bHQ9NjAwLjAsCiAgICAgICBoZWxwPSJpbml0aWFsIChhbmQgbWluaW11bSkgaGVpZ2h0
IG9mIGJyb3dzZXIgKGRlZmF1bHQ6IDYwMCkiKQogICAgY21kcGFyc2VyLmFkZF9vcHRpb24oIi0t
Y2xpcHdpZHRoIix0eXBlPSJmbG9hdCIsZGVmYXVsdD0yMDAuMCwKICAgICAgIGhlbHA9IndpZHRo
IG9mIGNsaXBwZWQgdGh1bWJuYWlsIChkZWZhdWx0OiAyMDApIiwKICAgICAgIG1ldGF2YXI9IldJ
RFRIIikKICAgIGNtZHBhcnNlci5hZGRfb3B0aW9uKCItLWNsaXBoZWlnaHQiLHR5cGU9ImZsb2F0
IixkZWZhdWx0PTE1MC4wLAogICAgICAgaGVscD0iaGVpZ2h0IG9mIGNsaXBwZWQgdGh1bWJuYWls
IChkZWZhdWx0OiAxNTApIiwKICAgICAgIG1ldGF2YXI9IkhFSUdIVCIpCiAgICBjbWRwYXJzZXIu
YWRkX29wdGlvbigiLXMiLCAiLS1zY2FsZSIsdHlwZT0iZmxvYXQiLGRlZmF1bHQ9MC4yNSwKICAg
ICAgIGhlbHA9InNjYWxlIGZhY3RvciBmb3IgdGh1bWJuYWlscyAoZGVmYXVsdDogMC4yNSkiKQog
ICAgY21kcGFyc2VyLmFkZF9vcHRpb24oIi1tIiwgIi0tbWQ1IiwgYWN0aW9uPSJzdG9yZV90cnVl
IiwKICAgICAgIGhlbHA9InVzZSBtZDUgaGFzaCBmb3IgZmlsZW5hbWUgKGxpa2UgZGVsLmljaW8u
dXMgPGh0dHA6Ly9kZWwuaWNpby51cy8+KSIpCiAgICBjbWRwYXJzZXIuYWRkX29wdGlvbigiLW8i
LCAiLS1maWxlbmFtZSIsIHR5cGU9InN0cmluZyIsZGVmYXVsdD0iIiwKICAgICAgIG1ldGF2YXI9
Ik5BTUUiLCBoZWxwPSJzYXZlIGltYWdlcyBhcyBOQU1FLWZ1bGwucG5nLE5BTUUtdGh1bWIucG5n
IGV0YyIpCiAgICBjbWRwYXJzZXIuYWRkX29wdGlvbigiLUYiLCAiLS1mdWxsc2l6ZSIsIGFjdGlv
bj0ic3RvcmVfdHJ1ZSIsCiAgICAgICBoZWxwPSJvbmx5IGNyZWF0ZSBmdWxsc2l6ZSBzY3JlZW5z
aG90IikKICAgIGNtZHBhcnNlci5hZGRfb3B0aW9uKCItVCIsICItLXRodW1iIiwgYWN0aW9uPSJz
dG9yZV90cnVlIiwKICAgICAgIGhlbHA9Im9ubHkgY3JlYXRlIHRodW1ibmFpbCBzcmVlbnNob3Qi
KQogICAgY21kcGFyc2VyLmFkZF9vcHRpb24oIi1DIiwgIi0tY2xpcHBlZCIsIGFjdGlvbj0ic3Rv
cmVfdHJ1ZSIsCiAgICAgICBoZWxwPSJvbmx5IGNyZWF0ZSBjbGlwcGVkIHRodW1ibmFpbCBzY3Jl
ZW5zaG90IikKICAgIGNtZHBhcnNlci5hZGRfb3B0aW9uKCItZCIsICItLWRhdGVzdGFtcCIsIGFj
dGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICBoZWxwPSJpbmNsdWRlIGRhdGUgaW4gZmlsZW5hbWUi
KQogICAgY21kcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGlyIix0eXBlPSJzdHJpbmciLGRl
ZmF1bHQ9Ii4vIiwKICAgICAgIGhlbHA9ImRpcmVjdG9yeSB0byBwbGFjZSBpbWFnZXMgaW50byIp
CiAgICBjbWRwYXJzZXIuYWRkX29wdGlvbigiLS1kZWxheSIsdHlwZT0iZmxvYXQiLGRlZmF1bHQ9
MCwKICAgICAgIGhlbHA9ImRlbGF5IGJldHdlZW4gcGFnZSBsb2FkIGZpbmlzaGluZyBhbmQgc2Ny
ZWVuc2hvdCIpCiAgICBjbWRwYXJzZXIuYWRkX29wdGlvbigiLS1ub2ltYWdlcyIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsCiAgICAgICBoZWxwPSJkb24ndCBsb2FkIGltYWdlcyIpCiAgICBjbWRwYXJz
ZXIuYWRkX29wdGlvbigiLS1kZWJ1ZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICBoZWxw
PW9wdHBhcnNlLlNVUFBSRVNTX0hFTFApCiAgICAob3B0aW9ucywgYXJncykgPSBjbWRwYXJzZXIu
cGFyc2VfYXJncygpCiAgICBpZiBsZW4oYXJncykgPT0gMDoKICAgICAgICBjbWRwYXJzZXIucHJp
bnRfdXNhZ2UoKQogICAgICAgIHJldHVybgogICAgaWYgb3B0aW9ucy5maWxlbmFtZToKICAgICAg
ICBpZiBsZW4oYXJncykgIT0gMSBvciBhcmdzWzBdID09ICItIjoKICAgICAgICAgIHByaW50ICIt
LWZpbGVuYW1lIG9wdGlvbiByZXF1aXJlcyBleGFjdGx5IG9uZSB1cmwiCiAgICAgICAgICBzeXMu
c3Rkb3V0LmZsdXNoKCkKICAgICAgICAgIHJldHVybgogICAgaWYgb3B0aW9ucy5zY2FsZSA9PSAw
OgogICAgICBjbWRwYXJzZXIuZXJyb3IoInNjYWxlIGNhbm5vdCBiZSB6ZXJvIikKICAgICMgbWFr
ZSBzdXJlIHdlJ3JlIG91dHB1dGluZyBzb21ldGhpbmcKICAgIGlmIG5vdCAob3B0aW9ucy5mdWxs
c2l6ZSBvciBvcHRpb25zLnRodW1iIG9yIG9wdGlvbnMuY2xpcHBlZCk6CiAgICAgIG9wdGlvbnMu
ZnVsbHNpemUgPSBUcnVlCiAgICAgIG9wdGlvbnMudGh1bWIgPSBUcnVlCiAgICAgIG9wdGlvbnMu
Y2xpcHBlZCA9IFRydWUKICAgICMgd29yayBvdXQgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgYnJv
d3NlciB3aW5kb3cKICAgICMgICh0aGlzIG1pZ2h0IG5lZWQgdG8gYmUgbGFyZ2VyIHNvIGNsaXBw
ZWQgaW1hZ2UgaXMgcmlnaHQgc2l6ZSkKICAgIG9wdGlvbnMuaW5pdFdpZHRoID0gKG9wdGlvbnMu
Y2xpcHdpZHRoIC8gb3B0aW9ucy5zY2FsZSkKICAgIG9wdGlvbnMuaW5pdEhlaWdodCA9IChvcHRp
b25zLmNsaXBoZWlnaHQgLyBvcHRpb25zLnNjYWxlKQogICAgaWYgb3B0aW9ucy53aWR0aD5vcHRp
b25zLmluaXRXaWR0aDoKICAgICAgIG9wdGlvbnMuaW5pdFdpZHRoID0gb3B0aW9ucy53aWR0aAog
ICAgaWYgb3B0aW9ucy5oZWlnaHQ+b3B0aW9ucy5pbml0SGVpZ2h0OgogICAgICAgb3B0aW9ucy5p
bml0SGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQKCiAgICBhcHAgPSBBcHBLaXQuTlNBcHBsaWNhdGlv
bi5zaGFyZWRBcHBsaWNhdGlvbigpCiAgICAKICAgICMgY3JlYXRlIGFuIGFwcCBkZWxlZ2F0ZQog
ICAgZGVsZWdhdGUgPSBBcHBEZWxlZ2F0ZS5hbGxvYygpLmluaXQoKQogICAgQXBwS2l0Lk5TQXBw
KCkuc2V0RGVsZWdhdGVfKGRlbGVnYXRlKQoKICAgICMgY3JlYXRlIGEgd2luZG93CiAgICByZWN0
ID0gRm91bmRhdGlvbi5OU01ha2VSZWN0KDAsMCwxMDAsMTAwKQogICAgd2luID0gQXBwS2l0Lk5T
V2luZG93LmFsbG9jKCkKICAgIHdpbi5pbml0V2l0aENvbnRlbnRSZWN0X3N0eWxlTWFza19iYWNr
aW5nX2RlZmVyXyAocmVjdCwgCiAgICAgICAgICAgIEFwcEtpdC5OU0JvcmRlcmxlc3NXaW5kb3dN
YXNrLCAyLCAwKQogICAgaWYgb3B0aW9ucy5kZWJ1ZzoKICAgICAgd2luLm9yZGVyRnJvbnRSZWdh
cmRsZXNzKCkKICAgICMgY3JlYXRlIGEgd2VidmlldyBvYmplY3QKICAgIHdlYnZpZXcgPSBXZWJL
aXQuV2ViVmlldy5hbGxvYygpCiAgICB3ZWJ2aWV3LmluaXRXaXRoRnJhbWVfKHJlY3QpCiAgICAj
IHR1cm4gb2ZmIHNjcm9sbGluZyBzbyB0aGUgY29udGVudCBpcyBhY3R1YWxseSB4IHdpZGUgYW5k
IG5vdCB4LTE1CiAgICB3ZWJ2aWV3Lm1haW5GcmFtZSgpLmZyYW1lVmlldygpLnNldEFsbG93c1Nj
cm9sbGluZ18ob2JqYy5OTykKCiAgICB3ZWJ2aWV3LnNldFByZWZlcmVuY2VzSWRlbnRpZmllcl8o
J3dlYmtpdDJwbmcnKQogICAgd2Vidmlldy5wcmVmZXJlbmNlcygpLnNldExvYWRzSW1hZ2VzQXV0
b21hdGljYWxseV8obm90IG9wdGlvbnMubm9pbWFnZXMpCgogICAgIyBhZGQgdGhlIHdlYnZpZXcg
dG8gdGhlIHdpbmRvdwogICAgd2luLnNldENvbnRlbnRWaWV3Xyh3ZWJ2aWV3KQogICAgCiAgICAj
IGNyZWF0ZSBhIExvYWREZWxlZ2F0ZQogICAgbG9hZGRlbGVnYXRlID0gV2Via2l0TG9hZC5hbGxv
YygpLmluaXQoKQogICAgbG9hZGRlbGVnYXRlLm9wdGlvbnMgPSBvcHRpb25zCiAgICBsb2FkZGVs
ZWdhdGUudXJscyA9IGFyZ3MKICAgIHdlYnZpZXcuc2V0RnJhbWVMb2FkRGVsZWdhdGVfKGxvYWRk
ZWxlZ2F0ZSkKICAgIAogICAgYXBwLnJ1bigpICAgIAoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JyA6IG1haW4oKQoKCkJlc3QsCkphbWVzCgotLSAKaHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFp
bG1hbi9saXN0aW5mby9weXRob24tbGlzdAo=