chore: import from github.com/twx284558/ledcontrol

This commit is contained in:
2026-05-11 08:42:36 -05:00
parent 8b94d5d051
commit 2acdf44a7f
@@ -0,0 +1,200 @@
cGFja2FnZSBhbmRyb2lkLnNlcmlhbHBvcnQudXRpbHM7CgppbXBvcnQgc3RhdGljIGFuZHJvaWQu
c2VyaWFscG9ydC51dGlscy5CeXRlVXRpbC5yZWFkQmluYXJ5RmlsZTsKaW1wb3J0IHN0YXRpYyBh
bmRyb2lkLnNlcmlhbHBvcnQudXRpbHMuQnl0ZVV0aWwudW5ib3VuZGVkUXVldWU7CgppbXBvcnQg
YW5kcm9pZC5hcHAuQXBwbGljYXRpb247CmltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CmltcG9y
dCBhbmRyb2lkLm9zLk1lc3NhZ2U7CmltcG9ydCBhbmRyb2lkLnNlcmlhbHBvcnQuU2VyaWFsUG9y
dDsKaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CmltcG9ydCBhbmRyb2lkLnV0aWwuTG9n
OwoKaW1wb3J0IGFuZHJvaWR4LmFubm90YXRpb24uTm9uTnVsbDsKCmltcG9ydCBqYXZhLmlvLkZp
bGU7CmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVh
bTsKaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwppbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVn
ZXI7CmltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CmltcG9ydCBqYXZh
LnNlY3VyaXR5LkludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb247CmltcG9ydCBqYXZhLnV0aWwuQXJy
YXlMaXN0OwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdRdWV1ZTsK
CnB1YmxpYyBjbGFzcyBTZXJpYWxDYXJkQ29udHJvbCB7CiAgICBzdGF0aWMgQXBwbGljYXRpb24g
bUFwcGxpY2F0aW9uOwogICAgcHJpdmF0ZSBzdGF0aWMgU2VyaWFsQ2FyZENvbnRyb2wgc2VyaWFs
Q2FyZENvbnRyb2w7CiAgICBwcml2YXRlIHN0YXRpYyBIYW5kbGVyIG1IYW5kbGVyOwogICAgc3Rh
dGljIGludCBNU0dfUmRBc3luQ21kU3RhdHVzID0gMTAwOwogICAgU3RyaW5nIEdldEluc1Byb3Bz
ID0gIi9HZXRJbnNQcm9wczpoLDE7IjsKICAgIFN0cmluZyBXZElucyA9ICIvV2RJbnM6aCwwLCI7
CiAgICBTdHJpbmcgSW5zUGFyYW1zID0gIi9JbnNQYXJhbXM6aCwwLDMsZjsiOwogICAgc3RhdGlj
IFN0cmluZyBSZEFzeW5DbWRTdGF0dXMgPSAiL1JkQXN5bkNtZFN0YXR1czpoLDE7IjsKCiAgICBT
dHJpbmcgY3VycmVudENtZCA9ICIiOwogICAgcHJpdmF0ZSBPdXRwdXRTdHJlYW0gbU91dHB1dFN0
cmVhbSA9IG51bGw7CiAgICBwcml2YXRlIElucHV0U3RyZWFtIG1JbnB1dFN0cmVhbSA9IG51bGw7
CiAgICBwcml2YXRlIFJlYWRUaHJlYWQgbVJlYWRUaHJlYWQgPSBudWxsOwogICAgU3RyaW5nQnVm
ZmVyIGRhdGFCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBTdHJpbmdbXSBjb250ZW50
cyA9bnVsbDsKICAgIFN0cmluZyBhZGRyZXNzSW5kZXggPSAiIjsKICAgIHByaXZhdGUgU2VyaWFs
UG9ydCBtU2VyaWFsUG9ydCA9IG51bGw7CgogICAgLyoqCiAgICAgKiBUYXNrIGV4Y3V0ZSByZXN1
bHQKICAgICAqLwogICAgcHJpdmF0ZSBUYXNrRXhjdXRlUmVzdWx0IHRhc2tFeGN1dGVSZXN1bHQ7
ICAgIC8qKgogICAgICogZmluZCB0aGUgYXZhaWxhYmxlIHBvcnQKICAgICAqLwogICAgU3RyaW5n
IGF2YWlsYWJsZVBvcnQgPSAiIjsKCiAgICAvKioKICAgICAqIGZvciBjb25zdHJ1Y3QgbXV0aS1j
b21tYW5kIGFuZCBieSBvcmRlcgogICAgICogKi8KICAgIExpbmtlZEJsb2NraW5nUXVldWU8U3Ry
aW5nPiBjb21tYW5kUXVldWUgPSBuZXcgTGlua2VkQmxvY2tpbmdRdWV1ZTxTdHJpbmc+KCk7Cgog
ICAgLyoqCiAgICAgKiBnZXQgdGhlIFNlcmlhbCBpbnN0YW5jZQogICAgICogQHBhcmFtIGFwcGxp
Y2F0aW9uCiAgICAgKiBAcmV0dXJuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgU2VyaWFsQ2Fy
ZENvbnRyb2wgZ2V0U2VyaWFsSW5zdGFuY2UoQXBwbGljYXRpb24gYXBwbGljYXRpb24pIHsKICAg
ICAgICBtQXBwbGljYXRpb24gPSBhcHBsaWNhdGlvbjsKICAgICAgICBpZiAobnVsbCA9PSBzZXJp
YWxDYXJkQ29udHJvbCkgewogICAgICAgICAgICBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKG1BcHBs
aWNhdGlvbi5nZXRNYWluTG9vcGVyKCkpewogICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAg
ICAgICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKEBOb25OdWxsIE1lc3NhZ2UgbXNn
KSB7CiAgICAgICAgICAgICAgICAgICAgaWYobXNnLndoYXQgPT0gTVNHX1JkQXN5bkNtZFN0YXR1
cyl7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbENhcmRDb250cm9sLnNlbmRUb1Nlcmlh
bENvbW1hbmQoc2VyaWFsQ2FyZENvbnRyb2wuZ2V0UHJvdG9jb2xCeXRlcyhSZEFzeW5DbWRTdGF0
dXMpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH07CiAgICAgICAgICAgIHNlcmlhbENhcmRDb250cm9sID0gbmV3IFNlcmlhbENhcmRDb250cm9s
KCk7CiAgICAgICAgICAgIHNlcmlhbENhcmRDb250cm9sLmluaXRTZXJpYWxQb3J0KHRydWUpOwog
ICAgICAgIH0KICAgICAgICByZXR1cm4gc2VyaWFsQ2FyZENvbnRyb2w7CiAgICB9CgoKICAgIC8q
KgogICAgICogc2VuZCBjb25maWcgZmlsZSB0byBjb250cm9sIGNhcmQKICAgICAqIEBwYXJhbSBm
aWxlUGF0aAogICAgICogQHBhcmFtIHRhc2tFeGN1dGVSZXN1bHQKICAgICAqLwogICAgcHVibGlj
IHZvaWQgc2VuZENvbmZpZ0ZpbGVUb0NvbnRyb2xDYXJkKFN0cmluZyBmaWxlUGF0aCxUYXNrRXhj
dXRlUmVzdWx0IHRhc2tFeGN1dGVSZXN1bHQpewogICAgICAgIHRoaXMudGFza0V4Y3V0ZVJlc3Vs
dCA9IHRhc2tFeGN1dGVSZXN1bHQ7CiAgICAgICAgaWYoIW5ldyBGaWxlKGZpbGVQYXRoKS5leGlz
dHMoKSB8fCBuZXcgRmlsZShmaWxlUGF0aCkubGVuZ3RoKCkgPD0gMTAyNCl7CiAgICAgICAgICAg
IExvZy5pKCJSb2NreSIsImZpbGUgaXMgbm90IGV4c2l0Iik7CiAgICAgICAgICAgIGlmKG51bGwg
IT0gdGFza0V4Y3V0ZVJlc3VsdCkgewogICAgICAgICAgICAgICAgdGFza0V4Y3V0ZVJlc3VsdC5m
YWlsKCJmaWxlIGlzIG5vdCBleHNpdCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICB9CiAgICAgICAgaWYoVGV4dFV0aWxzLmlzRW1wdHkoYXZhaWxhYmxlUG9ydCkp
ewogICAgICAgICAgICBMb2cuaSgiUm9ja3kiLCJwb3J0IGlzIG5vdCBleHNpdCIpOwogICAgICAgI
CAgICBpZihudWxsICE9IHRhc2tFeGN1dGVSZXN1bHQpIHsKICAgICAgICAgICAgICAgIHRhc2tF
eGN1dGVSZXN1bHQuZmFpbCgicG9ydCBpcyBub3QgZXhzaXQiKTsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgICByZWFkQmluYXJ5RmlsZShmaWxlUGF0aCk7CiAgICAgICAgY29tbWFuZFF1
ZXVlLmFkZChHZXRJbnNQcm9wcyk7CiAgICAgICAgZm9yKGludCBpPSAwIDtpPHVuYm91bmRlZFF1
ZXVlLnNpemUoKTtpKyspIHsKICAgICAgICAgICAgY29tbWFuZFF1ZXVlLmFkZChXZElucyk7CiAg
ICAgICAgfQogICAgICAgIGNvbW1hbmRRdWV1ZS5hZGQoSW5zUGFyYW1zKTsKICAgICAgICBTdHJp
bmcgY21kID0gY29tbWFuZFF1ZXVlLnBvbGwoKTsKICAgICAgICBzZW5kVG9TZXJpYWxDb21tYW5k
KGdldFByb3RvY29sQnl0ZXMoY21kKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBpbml0IHNlcmlh
bCBwb3J0CiAgICAgKi8KICAgIHByaXZhdGUgdm9pZCBpbml0U2VyaWFsUG9ydChCb29sZWFuIG5l
ZWRTdGFydFRocmVhZCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIG1TZXJpYWxQb3J0ID0g
Z2V0U2VyaWFsUG9ydCgpOwogICAgICAgICAgICBtT3V0cHV0U3RyZWFtID0gbVNlcmlhbFBvcnQu
Z2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgICAgIG1JbnB1dFN0cmVhbSA9IG1TZXJpYWxQb3J0
LmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgIGlmIChuZWVkU3RhcnRUaHJlYWQpIHsKICAg
ICAgICAgICAgICAgIG1SZWFkVGhyZWFkID0gbmV3IFJlYWRUaHJlYWQoKTsKICAgICAgICAgICAg
ICAgIG1SZWFkVGhyZWFkLnN0YXJ0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChT
ZWN1cml0eUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAg
ICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogICAgICAgICAgICBlLnByaW50U3RhY2tU
cmFjZSgpOwogICAgICAgIH0gY2F0Y2ggKEludmFsaWRQYXJhbWV0ZXJFeGNlcHRpb24gZSkgewog
ICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioK
ICAgICAqIGdldCBhdmFpbGFibGUgcG9ydAogICAgICogQHJldHVybgogICAgICogQHRocm93cyBJ
T0V4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIFNlcmlhbFBvcnQgZ2V0U2VyaWFsUG9ydCgp
IHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgaWYgKG1TZXJpYWxQb3J0ID09IG51bGwpIHsK
ICAgICAgICAgICAgLyogUmVhZCBzZXJpYWwgcG9ydCBwYXJhbWV0ZXJzICovCiAgICAgICAgICAg
IGF2YWlsYWJsZVBvcnQgPSAiIjsKICAgICAgICAgICAgZm9yKGludCBpPTA7aTxJbnRlZ2VyLk1B
WF9WQUxVRTtpKyspewogICAgICAgICAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoImRldi90
dHlVU0IiK2kpOwogICAgICAgICAgICAgICAgaWYoZmlsZS5leGlzdHMoKSl7CiAgICAgICAgICAg
ICAgICAgICAgYXZhaWxhYmxlUG9ydCA9IGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7CiAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgU3RyaW5nIHBhdGggPSBhdmFpbGFibGVQb3J0OwogICAgICAgICAgICBTZXJpYWxQb3J0
IHNlcmlhbFBvcnQgPQogICAgICAgICAgICAgICAgICAgIFNlcmlhbFBvcnQgLy8KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5uZXdCdWlsZGVyKHBhdGgsIDExNTIwMCkucGFyaXR5KDApLmRh
dGFCaXRzKDgpLnN0b3BCaXRzKDEpLmJ1aWxkKCk7CiAgICAgICAgICAgIG1TZXJpYWxQb3J0ID0g
c2VyaWFsUG9ydDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1TZXJpYWxQb3J0OwogICAgfQoK
CiAgICAvKioKICAgICAqIHJlYWQgdGhlIGRhdGEgZnJvbSBzZXJpYWwgcG9ydAogICAgICovCiAg
ICBjbGFzcyBSZWFkVGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKICAgICAgICBAT3ZlcnJpZGUKICAg
ICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgIHN1cGVyLnJ1bigpOwogICAgICAg
ICAgICB3aGlsZSAoIWlzSW50ZXJydXB0ZWQoKSkgewogICAgICAgICAgICAgICAgaW50IHNpemU7
CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBidWZmZXIg
PSBuZXcgYnl0ZVsxMjhdOwogICAgICAgICAgICAgICAgICAgIGlmIChtSW5wdXRTdHJlYW0gIT0g
bnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbUlucHV0U3RyZWFtLnJlYWQo
YnVmZmVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPiAwKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExv
Z2dlci5kKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW50ID4+
PiBTZW5kIGNvbW1hbmQgMTExIHJlY2VpdmVyIDogIiwgQnl0ZVV0aWwuYnl0ZXNUb0hleFdpdGhT
cGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dHJpbmcgdGVtcCA9IEJ5dGVVdGlsLmJ5dGVzVG9IZXhXaXRoU3BhY2UoYnVmZmVyKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZWdub3JlWmVybyA9IHRlbXAuc3Vic3Ry
aW5nKDAsIHRlbXAuaW5kZXhPZigiMDAiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTG9nZ2VyLmQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJp
bnQgPj4+IFNlbmQgY29tbWFuZCBlZ25vcmVaZXJvIHJlY2VpdmVyIDogJGVnbm9yZVplcm8iCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZWdub3JlWmVyby5jb250YWlucygiM0IiKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgd2hvbGVSZXN1bHQgPSBkYXRhQnVmZmVyLnRvU3Ry
aW5nKCkgKyBlZ25vcmVaZXJvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM
b2dnZXIuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJp
bnQgPj4+IFNlbmQgY29tbWFuZCAyMjIgcmVjZWl2ZXIgOiAkd2hvbGVSZXN1bHQiCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcnNlUmVzdWx0KHdob2xlUmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUJ1ZmZlci5zZXRMZW5ndGgoMCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
CAgZGF0YUJ1ZmZlci5hcHBlbmQoZWdub3JlWmVybyk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlv
biBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2Uo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9u
IGUpIHsKICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgIH0KCiAgICBwcml2YXRlIHZvaWQg
c2VuZFRvU2VyaWFsQ29tbWFuZChieXRlW10gY29tbWFuZCkgewogICAgICAgIHRyeSB7CiAgICAg
ICAgICAgIExvZ2dlci5kKAogICAgICAgICAgICAgICAgICAgICJQcmludCA+Pj4gU2VuZCBjb21t
YW5kIDExMSBoZWFydGJlYXQ6IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlVXRp
bC5ieXRlc1RvSGV4V2l0aFNwYWNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb21tYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKICAgICAgICAgICAgdHJ5
IHsKICAgICAgICAgICAgICAgIGlmIChtT3V0cHV0U3RyZWFtID09IG51bGwpIHsKICAgICAgICAg
ICAgICAgICAgICBtT3V0cHV0U3RyZWFtID0gbVNlcmlhbFBvcnQuZ2V0T3V0cHV0U3RyZWFtKCk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBtT3V0cHV0U3Ry
ZWFtKSB7CiAgICAgICAgICAgICAgICAgICAgbU91dHB1dFN0cmVhbS53cml0ZShjb21tYW5kKTsK
ICAgICAgICAgICAgICAgICAgICBtT3V0cHV0U3RyZWFtLmZsdXNoKCk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICBl
LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSAgY2F0Y2ggKEV4Y2Vw
dGlvbiBlKSB7CiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQoKICAg
IH0KCiAgICAvKioKICAgICAqIHBhcnNlIHRoZSByZXN1bHQgZnJvbSB0aGUgc2VyaWFsIHBvcnQK
ICAgICAqIEBwYXJhbSB3aG9sZVJlc3VsdAogICAgICovCiAgICBwcml2YXRlIHZvaWQgcGFyc2VS
ZXN1bHQoU3RyaW5nIHdob2xlUmVzdWx0KSB7CiAgICAgICAgU3RyaW5nW10gY29udGVudD1udWxs
OwogICAgICAgIFN0cmluZyBzdHIgPSAiIjsKICAgICAgICB0cnkgewogICAgICAgICAgICBTdHJp
bmcgaW5mbyA9IHdob2xlUmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgIGJ5dGVbXSBieXRl
cyA9IG5ldyBCaWdJbnRlZ2VyKGluZm8sIDE2KS50b0J5dGVBcnJheSgpOwogICAgICAgICAgICBz
dHIgPSBuZXcgU3RyaW5nKGJ5dGVzLCBTdGFuZGFyZENoYXJzZXRzLlVURl84KTsKICAgICAgICAg
ICAgY29udGVudCA9IHN0ci5zcGxpdCgiLCIpOwogICAgICAgIH1jYXRjaCAoRXhjZXB0aW9uIGUp
e2UucHJpbnRTdGFja1RyYWNlKCk7fQogICAgICAgIExvZy5pKCJSb2NreSIsImFjayBkYXRhIGlz
ICIrc3RyKyIgY3VycmVudENtZCAiK2N1cnJlbnRDbWQpOwogICAgICAgIGlmKFRleHRVdGlscy5l
cXVhbHMoR2V0SW5zUHJvcHMsY3VycmVudENtZCkpewogICAgICAgICAgICBjb250ZW50cyA9IGNv
bnRlbnQ7CiAgICAgICAgICAgIGFkZHJlc3NJbmRleCA9IGNvbnRlbnRzWzRdOwogICAgICAgIH0g
ZWxzZSBpZihUZXh0VXRpbHMuZXF1YWxzKFJkQXN5bkNtZFN0YXR1cyxjdXJyZW50Q21kKSl7CiAg
ICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5lcXVhbHMoIjAi
LCBjb250ZW50WzJdKSkgewogICAgICAgICAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRFbXB0eU1l
c3NhZ2VEZWxheWVkKE1TR19SZEFzeW5DbWRTdGF0dXMsIDIwMDApOwogICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBMb2cuaSgiUm9ja3kiLCAiTVNHX1JkQXN5bkNt
ZFN0YXR1cyBzdWNjZXNzPj4+Iik7CiAgICAgICAgICAgICAgICAgICAgaWYobnVsbCAhPSB0YXNr
RXhjdXRlUmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICB0YXNrRXhjdXRlUmVzdWx0LnN1
Y2Nlc3MoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfWNhdGNoIChFeGNlcHRpb24g
ZSl7CiAgICAgICAgICAgICAgICBtSGFuZGxlci5zZW5kRW1wdHlNZXNzYWdlRGVsYXllZChNU0df
UmRBc3luQ21kU3RhdHVzLCAyMDAwKTsKICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNl
KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoY3VycmVudENtZC5zdGFydHNX
aXRoKCIvV2RJbnMiKSAmJiB1bmJvdW5kZWRRdWV1ZS5zaXplKCk8PTApewogICAgICAgICAgICBM
b2cuaSgiUm9ja3kiLCJzZW5kIHdkaW5zIGNvbW1hbmQgZG9uZSB3ZSBjaGVjayB0aGUgcmVzdWx0
IG9mIHdkaW5zID4+Pj4+Iik7CiAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRFbXB0eU1lc3NhZ2VE
ZWxheWVkKE1TR19SZEFzeW5DbWRTdGF0dXMsMjAwMCk7CiAgICAgICAgfQogICAgICAgIE9iamVj
dCBjb21tYW5kID0gY29tbWFuZFF1ZXVlLnBvbGwoKTsKICAgICAgICBpZihudWxsID09IGNvbW1h
bmQpewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIExvZy5pKCJSb2NreSIs
ImNvbW1hbmRRdWV1ZSAiK2NvbW1hbmQgKyAiIGNvbW1hbmQgc3RhcnQgIit1bmJvdW5kZWRRdWV1
ZS5zaXplKCkpOwogICAgICAgIGlmKGNvbW1hbmQudG9TdHJpbmcoKS5zdGFydHNXaXRoKCIvV2RJ
bnMiKSAmJiB1bmJvdW5kZWRRdWV1ZS5zaXplKCkgPjApewogICAgICAgICAgICBTdHJpbmdCdWZm
ZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgICAgIEFycmF5TGlzdDxTdHJpbmc+
IGMgPSB1bmJvdW5kZWRRdWV1ZS5wb2xsKCk7CiAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7aTxj
LnNpemUoKTtpKyspewogICAgICAgICAgICAgICAgc2IuYXBwZW5kKGMuZ2V0KGkpKTsKICAgICAg
ICAgICAgICAgIGlmKGkgIT0gYy5zaXplKCktMSl7CiAgICAgICAgICAgICAgICAgICAgc2IuYXBw
ZW5kKCIsIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgU3Ry
aW5nIGhleFN0cmluZyA9IEludGVnZXIudG9IZXhTdHJpbmcoYy5zaXplKCkpLnRvVXBwZXJDYXNl
KCk7CiAgICAgICAgICAgIGludCBzaXpldGFnID0gSW50ZWdlci5wYXJzZUludChoZXhTdHJpbmcs
MTYpOwogICAgICAgICAgICBXZElucyA9IGNvbW1hbmQrYWRkcmVzc0luZGV4KyIsIitoZXhTdHJp
bmcrIiwiKyBzYiArIjsiOwogICAgICAgICAgICBzZW5kVG9TZXJpYWxDb21tYW5kKGdldFByb3Rv
Y29sQnl0ZXMoV2RJbnMpKTsKICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGFkZEhleChhZGRy
ZXNzSW5kZXgsaGV4U3RyaW5nKTsKICAgICAgICAgICAgaW50IGZpcnN0QWRkcmVzcyA9IEludGVn
ZXIucGFyc2VJbnQoYWRkcmVzc0luZGV4LDE2KTsKICAgICAgICAgICAgaW50IGZpbmFsQWRkcmVz
cyA9IGZpcnN0QWRkcmVzcyArIGMuc2l6ZSgpOwogICAgICAgICAgICBTdHJpbmcgcmVzdWx0SGV4
ID0gSW50ZWdlci50b0hleFN0cmluZyhmaW5hbEFkZHJlc3MpLnRvVXBwZXJDYXNlKCk7CiAgICAg
ICAgICAgIGFkZHJlc3NJbmRleCA9IFN0cmluZy52YWx1ZU9mKHJlc3VsdEhleCk7CiAgICAgICAg
ICAgIExvZy5pKCJSb2NreSIsIj4+PldkSW5zMjIyICIrV2RJbnMrIiBhZGRyZXNzSW5kZXggIith
ZGRyZXNzSW5kZXggKyIgc2l6ZSBpcyAiK2Muc2l6ZSgpKTsKICAgICAgICB9CiAgICAgICAgZWxz
ZSBpZihjb21tYW5kLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgiL0luc1BhcmFtcyIpKXsKICAgICAg
ICAgICAgc2VuZFRvU2VyaWFsQ29tbWFuZChnZXRQcm90b2NvbEJ5dGVzKEluc1BhcmFtcykpOwog
ICAgICAgIH0KICAgIH0KICAgIHB1YmxpYyBieXRlW10gZ2V0UHJvdG9jb2xCeXRlcyhTdHJpbmcg
Y21kKXsKICAgICAgICBjdXJyZW50Q21kID0gY21kOwogICAgICAgIGJ5dGVbXSBieXRlQXJyYXkg
PSBjdXJyZW50Q21kLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpOwogICAgICAgIHJl
dHVybiBieXRlQXJyYXk7CiAgICB9CiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBhZGRIZXgoU3Ry
aW5nIGhleDEgLFN0cmluZyBoZXgyKSB7CiAgICAgICAgQmlnSW50ZWdlciBudW0xID0gbmV3IEJp
Z0ludGVnZXIoaGV4MS5zdWJzdHJpbmcoMiksIDE2KTsKICAgICAgICBCaWdJbnRlZ2VyIG51bTIg
PSBuZXcgQmlnSW50ZWdlcihoZXgyLnN1YnN0cmluZygyKSwgMTYpOwogICAgICAgIEJpZ0ludGVn
ZXIgc3VtID0gbnVtMS5hZGQobnVtMik7CiAgICAgICAgU3RyaW5nIHJlc3VsdEhleCA9IHN1bS50
b1N0cmluZygxNikudG9VcHBlckNhc2UoKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJl
c3VsdDogIiArICIweCIgKyByZXN1bHRIZXgpOwogICAgICAgIHJldHVybiByZXN1bHRIZXg7CiAg
ICB9Cn0K