[Lada-commits] [PATCH] Removed old importer stuff and added new Importer based on antlr4 grammar

Wald Commits scm-commit at wald.intevation.org
Fri Sep 30 14:06:34 CEST 2016


IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIFJhaW11bmQgUmVua2VydCA8cmFpbXVuZC5yZW5r
ZXJ0QGludGV2YXRpb24uZGU+CiMgRGF0ZSAxNDc1MjM3MTI4IC03MjAwCiMgQnJhbmNoIHNjaGVt
YS11cGRhdGUKIyBOb2RlIElEIGZkYzc1MmNkMTdmZTliOWJmNzRkMjg4ZDAxOTcwYzUzMjE2YmRm
NDQKIyBQYXJlbnQgIDIxYWI0ZDM1MTM1YWQwNzNjZmQ2ZDM2Y2M3MTcyOGM5OWNlNjc1MzMKUmVt
b3ZlZCBvbGQgaW1wb3J0ZXIgc3R1ZmYgYW5kIGFkZGVkIG5ldyBJbXBvcnRlciBiYXNlZCBvbiBh
bnRscjQgZ3JhbW1hci4KV0lQISBDdXJyZW50bHkgb25seSB0aGUgcGFyc2VyIHdpdGhvdXQgbWFw
cGluZyB0byBvYmplY3RzCgpkaWZmIC1yIDIxYWI0ZDM1MTM1YSAtciBmZGM3NTJjZDE3ZmUgcG9t
LnhtbAotLS0gYS9wb20ueG1sCVR1ZSBTZXAgMjAgMTY6MDE6MDIgMjAxNiArMDIwMAorKysgYi9w
b20ueG1sCUZyaSBTZXAgMzAgMTQ6MDU6MjggMjAxNiArMDIwMApAQCAtMTIyLDYgKzEyMiwxMiBA
QAogICAgICAgICAgICAgPHZlcnNpb24+NC4zPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVu
Y3k+Cj0yMAorCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPm9yZy5hbnRscjwvZ3JvdXBJZD4K
KwkJCTxhcnRpZmFjdElkPmFudGxyNC1ydW50aW1lPC9hcnRpZmFjdElkPgorCQkJPHZlcnNpb24+
NC41PC92ZXJzaW9uPgorCQk8L2RlcGVuZGVuY3k+CisKICAgICAgICAgPCEtLSBMb2dnaW5nIC0t
PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmxvZzRqPC9ncm91
cElkPgpAQCAtMjA0LDYgKzIxMCwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwv
Y29tcGlsZXJBcmd1bWVudHM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRp
b24+CiAgICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgICAgICA8
cGx1Z2luPgorCQkJCQkJPGdyb3VwSWQ+b3JnLmFudGxyPC9ncm91cElkPgorCQkJCQkJPGFydGlm
YWN0SWQ+YW50bHI0LW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKwkJCQkJCTx2ZXJzaW9uPjQu
NTwvdmVyc2lvbj4KKwkJCQkJCTxjb25maWd1cmF0aW9uPgorCQkJCQkJCTxvdXRwdXREaXJlY3Rv
cnk+JHtiYXNlZGlyfS9zcmMvbWFpbi9qYXZhPC9vdXRwdXREaXJlY3Rvcnk+CisJCQkJCQk8L2Nv
bmZpZ3VyYXRpb24+CisJCQkJCQk8ZXhlY3V0aW9ucz4KKwkJCQkJCQk8ZXhlY3V0aW9uPgorCQkJ
CQkJCQk8Z29hbHM+CisJCQkJCQkJCQk8Z29hbD5hbnRscjQ8L2dvYWw+CisJCQkJCQkJCTwvZ29h
bHM+CisJCQkJCQkJPC9leGVjdXRpb24+CisJCQkJCQk8L2V4ZWN1dGlvbnM+CisJCQkJCTwvcGx1
Z2luPgogICAgICAgICAgICAgICAgIDwvcGx1Z2lucz4KICAgICAgICAgICAgIDwvYnVpbGQ+CiAg
ICAgICAgIDwvcHJvZmlsZT4KZGlmZiAtciAyMWFiNGQzNTEzNWEgLXIgZmRjNzUyY2QxN2ZlIHNy
Yy9tYWluL2FudGxyNC9kZS9pbnRldmF0aW9uL2xhZGEvaW1wPQpvcnRlci9sYWYvTGFmLmc0Ci0t
LSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL3NyYy9tYWlu
L2FudGxyNC9kZS9pbnRldmF0aW9uL2xhZGEvaW1wb3J0ZXIvbGFmL0xhZi5nNAlGcmkgU2VwIDMw
IDE0Oj0KMDU6MjggMjAxNiArMDIwMApAQCAtMCwwICsxLDM1OSBAQAorZ3JhbW1hciBMYWY7CisK
K3Byb2JlbmRhdGVpIDogcHJvYmUqIGVuZD8gRU9GOworCitlbmQgOiAnJUVOREUlJzsKKworcHJv
YmUgOiAnJVBST0JFJScgcHJvYmVkYXRlbisgOworCitwcm9iZWRhdGVuOiBkYgorICB8IHZlcnNp
b24KKyAgfCB1ZWJlcnRyYWd1bmdzZm9ybWF0CisgIHwgbmV0emtlbm51bmcKKyAgfCBlcnpldWdl
cgorICB8IHNkbQorICB8IG1lc3NzdGVsbGUKKyAgfCBtZXNzbGFib3IKKyAgfCBwcm9iZV9pZAor
ICB8IHBuaAorICB8IG1wCisgIHwgbWVzc3Byb2dyYW1tX2xhbmQKKyAgfCBwcm9iZW5haG1laW5z
dGl0dXRpb24KKyAgfCBwcm9iZW5hcnQKKyAgfCB6YgorICB8IHByb2JlbmFobWVfZGF0dW1fdWhy
emVpdF9hCisgIHwgcHJvYmVuYWhtZV9kYXR1bV91aHJ6ZWl0X2UKKyAgfCBzb2xsX2RhdHVtX3Vo
cnplaXRfYQorICB8IHNvbGxfZGF0dW1fdWhyemVpdF9lCisgIHwgdWIKKyAgfCBkZXNrcmlwdG9y
ZW4KKyAgfCByZWkKKyAgfCByZWZlcmVuel9kYXR1bV91aHJ6ZWl0CisgIHwgdGVzdGRhdGVuCisg
IHwgc3plbmFyaW8KKyAgfCBzZWtfZGF0ZW5iYXNpcworICB8IHVzCisgIHwgcGgKKyAgfCBwZwor
ICB8IHBfb3J0c196dXNhdHprZW5uemFobAorICB8IHBrCisgIHwgcF9vcnRzX3p1c2F0emNvZGUK
KyAgfCBwX29ydHNfenVzYXR6dGV4dAorICB8IHBfbnV0c19jb2RlCisgIHwgcF9zaXRlX2lkCisg
IHwgcF9zaXRlX25hbWUKKyAgfCBwX2hvZWhlX25uCisgIHwgcF9ob2VoZV9sYW5kCisgIHwgbWVo
cnp3ZWNrZmVsZAorICB8IG1lc3N1bmcKKyAgfCBwemIKKyAgfCBwa29tCis7CisKK21lc3N1bmc6
CisgIG1lc3NfaGVhZGVyPworICBtZXNzdW5nZGF0ZW4rCis7CisKK21lc3NfaGVhZGVyIDogJyVN
RVNTVU5HJScgOworCittZXNzdW5nZGF0ZW46IG1lc3N1bmdzX2lkCisgIHwgcG4KKyAgfCBtZXNz
X2RhdHVtX3VocnplaXQKKyAgfCBtZXNzemVpdF9zZWt1bmRlbgorICB8IG1tCisgIHwgYmVhcmJl
aXR1bmdzc3RhdHVzCisgIHwgcGVwX2ZsYWcKKyAgfCBlcmZhc3N1bmdfYWJnZXNjaGxvc3Nlbgor
ICB8IG1lc3N3ZXJ0CisgIHwgbWVzc19rb21tZW50YXIKKzsKKworZGIgOiBkYXRlbmJhc2lzCisg
ICB8IGRhdGVuYmFzaXNfcworICAgOworCisKK21wIDogbWVzc3Byb2dyYW1tX2MKKyAgIHwgbWVz
c3Byb2dyYW1tX3MKKyAgIDsKKwordWIgOiB1bXdlbHRiZXJlaWNoX2MKKyAgIHwgdW13ZWx0YmVy
ZWljaF9zCisgICA7CisKK3JlaSA6IHJlaV9wcm9ncmFtbXB1bmt0CisgICAgfCByZWlfcHJvZ3Jh
bW1wdW5rdGdydXBwZQorICAgIDsKKworcGggOiBwX2hlcmt1bmZ0c2xhbmRfbGFuZworICAgfCBw
X2hlcmt1bmZ0c2xhbmRfa3VyegorICAgfCBwX2hlcmt1bmZ0c2xhbmRfcworICAgOworCitwZyA6
IHBfZ2VtZWluZGVzY2hsdWVzc2VsCisgICB8IHBfZ2VtZWluZGVuYW1lCisgICA7CisKK3BrIDog
cF9rb29yZGluYXRlbgorICAgfCBwX2tvb3JkaW5hdGVuX3MKKyAgIDsKKworemIgOiB6ZWl0YmFz
aXMKKyAgIHwgemVpdGJhc2lzX3MKKyAgIDsKKworcHpiIDogcHJvYmVuenVzYXR6YmVzY2hyZWli
dW5nCisgICAgfCBwemJfcworICAgIDsKKworcGtvbSA6IHByb2JlbmtvbW1lbnRhcgorICAgICB8
IHByb2JlbmtvbW1lbnRhcl90CisgICAgIDsKKworc2RtIDogc3RhYXRfZGVyX21lc3NzdGVsbGVf
bGFuZworICAgIHwgc3RhYXRfZGVyX21lc3NzdGVsbGVfa3VyegorICAgIHwgc3RhYXRfZGVyX21l
c3NzdGVsbGVfcworICAgIDsKKworcG5oIDogcHJvYmVuX25yCisgICAgfCBoYXVwdHByb2Jlbm51
bW1lcgorICAgIDsKKworLy8gTUVTU1VORworbW0gOiBtZXNzbWV0aG9kZV9jCisgICB8IG1lc3Nt
ZXRob2RlX3MKKyAgIDsKKworbXcgOiBtZXNzd2VydAorICAgfCBtZXNzd2VydF9zCisgICB8IG1l
c3N3ZXJ0X2kKKyAgIHwgbWVzc3dlcnRfZworICAgfCBtZXNzd2VydF9ud2cKKyAgIHwgbWVzc3dl
cnRfbndnX3MKKyAgIHwgbWVzc3dlcnRfbndnX2kKKyAgIHwgbWVzc3dlcnRfbndnX2cKKyAgIDsK
KworbWVzc19rb21tZW50YXIgOiBrb21tZW50YXIKKyAgIHwga29tbWVudGFyX3QKKyAgIDsKKwor
cG4gOiBwcm9iZW5fbnIKKyAgIHwgbmViZW5wcm9iZW5udW1tZXIKKyAgIDsKKworLy8gVVJTUFJV
TkdTT1JUCit1cyA6ICclVVJTUFJVTkdTT1JUJScKKyAgdXJzcHJ1bmdzb3J0ZGF0ZW4qCisgICA7
CisKK3Vyc3BydW5nc29ydGRhdGVuIDogdWgKKyAgfCB1ZworICB8IHVfb3J0c196dXNhdHprZW5u
emFobAorICB8IHVrCisgIHwgdV9vcnRzX3p1c2F0emNvZGUKKyAgfCB1X29ydHNfenVzYXR6dGV4
dAorICB8IHVfbnV0c19jb2RlCis7CisKK3VoIDogdV9oZXJrdW5mdHNsYW5kX2xhbmcKKyAgIHwg
dV9oZXJrdW5mdHNsYW5kX2t1cnoKKyAgIHwgdV9oZXJrdW5mdHNsYW5kX3MKKyAgIDsKKwordWcg
OiB1X2dlbWVpbmRlc2NobHVlc3NlbAorICAgfCB1X2dlbWVpbmRlbmFtZQorICAgOworCit1ayA6
IHVfa29vcmRpbmF0ZW4KKyAgIHwgdV9rb29yZGluYXRlbl9zCisgICA7CisKKworCisKK3ZlcnNp
b24gOiBWRVJTSU9OIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8vIEM0Cit1ZWJlcnRyYWd1bmdz
Zm9ybWF0IDogVUVCRVJUUkFHVU5HU0ZPUk1BVCAoU1RSSU5HX0VTQyB8IFNUUklORykgOyAvLyBD
MTsKKworZGF0ZW5iYXNpcyA6IERBVEVOQkFTSVMgKFNUUklOR19FU0MgfCBTVFJJTkcpIDsgLy8g
QzYKK2RhdGVuYmFzaXNfcyA6IERBVEVOQkFTSVNfUyBTVFJJTkcgOyAvLyBTSTIKK25ldHprZW5u
dW5nIDogTkVUWktFTk5VTkcgKFNUUklOR19FU0MgfCBTVFJJTkcpIDsgLy8gQzIKK2VyemV1Z2Vy
IDogRVJaRVVHRVIgKFNUUklOR19FU0MgfCBTVFJJTkcpIDsgLy8gQzIKK3N0YWF0X2Rlcl9tZXNz
c3RlbGxlX2xhbmcgOiBTVEFBVF9ERVJfTUVTU1NURUxMRV9MQU5HIChTVFJJTkdfRVNDIHwgU1RS
SU5HPQopIDsgLy9DNTAKK3N0YWF0X2Rlcl9tZXNzc3RlbGxlX2t1cnogOiBTVEFBVF9ERVJfTUVT
U1NURUxMRV9LVVJaIChTVFJJTkdfRVNDIHwgU1RSSU5HPQopIDsgLy8gQzUKK3N0YWF0X2Rlcl9t
ZXNzc3RlbGxlX3MgOiBTVEFBVF9ERVJfTUVTU1NURUxMRV9TIFNUUklORyA7IC8vIFNJOAorbWVz
c3N0ZWxsZSA6IE1FU1NTVEVMTEUgKFNUUklOR19FU0MgfCBTVFJJTkcpIDsgLy8gU0M1CittZXNz
bGFib3IgOiBNRVNTTEFCT1IgKFNUUklOR19FU0MgfCBTVFJJTkcpIDsgLy8gU0M1Citwcm9iZV9p
ZCA6IFBST0JFX0lEIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8vIEMxNgorbWVzc3VuZ3NfaWQg
OiBNRVNTVU5HU19JRCBTVFJJTkcgOyAvLyBJMgorcHJvYmVuX25yIDogUFJPQkVOX05SIChTVFJJ
TkdfRVNDIHwgU1RSSU5HKSA7IC8vIEMxMworaGF1cHRwcm9iZW5udW1tZXIgOiBIQVVQVFBST0JF
Tk5VTU1FUiAoU1RSSU5HX0VTQyB8IFNUUklORykgOyAvLyBDMjAKK25lYmVucHJvYmVubnVtbWVy
IDogTkVCRU5QUk9CRU5OVU1NRVIgKFNUUklOR19FU0MgfCBTVFJJTkcpIDsgLy8gQzQKK21lc3Nw
cm9ncmFtbV9jIDogTUVTU1BST0dSQU1NX0MgKFNUUklOR19FU0MgfCBTVFJJTkcpIDsgLy8gQzUw
CittZXNzcHJvZ3JhbW1fcyA6IE1FU1NQUk9HUkFNTV9TIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7
IC8vIFNDMQorbWVzc3Byb2dyYW1tX2xhbmQgOiBNRVNTUFJPR1JBTU1fTEFORCAoU1RSSU5HX0VT
QyB8IFNUUklORykgOyAvLyBDMworcHJvYmVuYWhtZWluc3RpdHV0aW9uIDogUFJPQkVOQUhNRUlO
U1RJVFVUSU9OIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8vIEM5Citwcm9iZW5hcnQgOiBQUk9C
RU5BUlQgKFNUUklOR19FU0MgfCBTVFJJTkcpIDsgLy8gQzEKK3plaXRiYXNpcyA6IFpFSVRCQVNJ
UyAoU1RSSU5HX0VTQyB8IFNUUklORykgOyAvLyBDMzAKK3plaXRiYXNpc19zIDogWkVJVEJBU0lT
X1MgU1RSSU5HIDsgLy8gU0kxCitzb2xsX2RhdHVtX3VocnplaXRfYSA6IFNPTExfREFUVU1fVUhS
WkVJVF9BIFNUUklORyAoJyAnKSogU1RSSU5HIDsgLy8gRDggVDQKK3NvbGxfZGF0dW1fdWhyemVp
dF9lIDogU09MTF9EQVRVTV9VSFJaRUlUX0UgU1RSSU5HICgnICcpKiBTVFJJTkcgOyAvLyBEOCBU
NAordXJzcHJ1bmdzX2RhdHVtX3VocnplaXQgOiBVUlNQUlVOR1NfREFUVU1fVUhSWkVJVCBTVFJJ
TkcgKCcgJykqIFNUUklORyA7IC89Ci8gRDggVDQKK3Byb2JlbmFobWVfZGF0dW1fdWhyemVpdF9h
IDogUFJPQkVOQUhNRV9EQVRVTV9VSFJaRUlUX0EgU1RSSU5HICgnICcpKiBTVFJJPQpORyA7IC8v
IEQ4IFQ0Citwcm9iZW5haG1lX2RhdHVtX3VocnplaXRfZSA6IFBST0JFTkFITUVfREFUVU1fVUhS
WkVJVF9FIFNUUklORyAoJyAnKSogU1RSST0KTkcgOyAvLyBEOCBUNAordW13ZWx0YmVyZWljaF9j
IDogVU1XRUxUQkVSRUlDSF9DIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8vIEM4MAordW13ZWx0
YmVyZWljaF9zIDogVU1XRUxUQkVSRUlDSF9TIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8vIFND
MworZGVza3JpcHRvcmVuIDogREVTS1JJUFRPUkVOIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8v
IEMyNgorcmVpX3Byb2dyYW1tcHVua3QgOiBSRUlfUFJPR1JBTU1QVU5LVCAoU1RSSU5HX0VTQyB8
IFNUUklORykgOyAvLyBDMTAKK3JlaV9wcm9ncmFtbXB1bmt0Z3J1cHBlIDogUkVJX1BST0dSQU1N
UFVOS1RHUlVQUEUgKFNUUklOR19FU0MgfCBTVFJJTkcpIDsgPQovLyBDMjEKK3JlZmVyZW56X2Rh
dHVtX3VocnplaXQgOiBSRUZFUkVOWl9EQVRVTV9VSFJaRUlUIFNUUklORyAoJyAnKSogU1RSSU5H
IDsgLy9EPQo4IFQ0Cit0ZXN0ZGF0ZW4gOiBURVNUREFURU4gU1RSSU5HICA7IC8vIEkxICgwIG9y
IDEgcmVwcmVzZW50cyBhIGJvb2xlYW4gdmFsdWUpCitzemVuYXJpbyA6IFNaRU5BUklPIChTVFJJ
TkdfRVNDIHwgU1RSSU5HKSA7IC8vIEMyMAorc2VrX2RhdGVuYmFzaXMgOiBTRUtfREFURU5CQVNJ
UyAoU1RSSU5HX0VTQyB8IFNUUklORykgOyAvLyBDNioKK3Nla19kYXRlbmJhc2lzX3MgOiBTRUtf
REFURU5CQVNJU19TIFNUUklORyA7IC8vU0kyCit1X2hlcmt1bmZ0c2xhbmRfbGFuZyA6IFVfSEVS
S1VORlRTTEFORF9MQU5HIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8vQzUwCit1X2hlcmt1bmZ0
c2xhbmRfa3VyeiA6IFVfSEVSS1VORlRTTEFORF9LVVJaIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7
IC8vIEM1Cit1X2hlcmt1bmZ0c2xhbmRfcyA6IFVfSEVSS1VORlRTTEFORF9TIFNUUklORyA7IC8v
IFNJOAordV9nZW1laW5kZXNjaGx1ZXNzZWwgOiBVX0dFTUVJTkRFU0NITFVFU1NFTCBTVFJJTkcg
OyAvLyBJOAordV9nZW1laW5kZW5hbWUgOiBVX0dFTUVJTkRFTkFNRSAoU1RSSU5HX0VTQyB8IFNU
UklORykgOyAvLyBDODAqCit1X29ydHNfenVzYXR6a2VubnphaGwgOiBVX09SVFNfWlVTQVRaS0VO
TlpBSEwgU1RSSU5HIDsgLy8gSTMKK3Vfa29vcmRpbmF0ZW4gOiBVX0tPT1JESU5BVEVOIChTVFJJ
TkdfRVNDIHwgU1RSSU5HKSAoJyAnKSogKFNUUklOR19FU0MgfCBTPQpUUklORykgKCcgJykqIChT
VFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8vIEM1MCBDMjIgQzIyCit1X2tvb3JkaW5hdGVuX3MgOiBV
X0tPT1JESU5BVEVOX1MgU1RSSU5HICgnICcpKiAoU1RSSU5HX0VTQyB8IFNUUklORykgKCcgJz0K
KSogKFNUUklOR19FU0MgfCBTVFJJTkcpIDsgLy8gU0kyIEMyMiBDMjIKK3Vfb3J0c196dXNhdHpj
b2RlIDogVV9PUlRTX1pVU0FUWkNPREUgKFNUUklOR19FU0MgfCBTVFJJTkcpIDsgLy8gQzgKK3Vf
b3J0c196dXNhdHp0ZXh0IDogVV9PUlRTX1pVU0FUWlRFWFQgKFNUUklOR19FU0MgfCBTVFJJTkcp
IDsgLy8gTUM1MAordV9udXRzX2NvZGUgOiBVX05VVFNfQ09ERSBTVFJJTkcgOyAvLyBJMTAKK3Bf
aGVya3VuZnRzbGFuZF9sYW5nIDogUF9IRVJLVU5GVFNMQU5EX0xBTkcgKFNUUklOR19FU0MgfCBT
VFJJTkcpIDsgLy9DNTAqCitwX2hlcmt1bmZ0c2xhbmRfa3VyeiA6IFBfSEVSS1VORlRTTEFORF9L
VVJaIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8vIEM1CitwX2hlcmt1bmZ0c2xhbmRfcyA6IFBf
SEVSS1VORlRTTEFORF9TIFNUUklORyA7IC8vIFNJOAorcF9nZW1laW5kZXNjaGx1ZXNzZWwgOiBQ
X0dFTUVJTkRFU0NITFVFU1NFTCBTVFJJTkcgOyAvLyBJOAorcF9nZW1laW5kZW5hbWUgOiBQX0dF
TUVJTkRFTkFNRSAoU1RSSU5HX0VTQyB8IFNUUklORykgOyAvLyBDODAqCitwX29ydHNfenVzYXR6
a2VubnphaGwgOiBQX09SVFNfWlVTQVRaS0VOTlpBSEwgU1RSSU5HIDsgLy8gSTMKK3Bfa29vcmRp
bmF0ZW4gOiBQX0tPT1JESU5BVEVOIChTVFJJTkdfRVNDIHwgU1RSSU5HKSAoJyAnKSogKFNUUklO
R19FU0MgfCBTPQpUUklORykgKCcgJykqIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8vIEM1MCog
QzIyIEMyMgorcF9rb29yZGluYXRlbl9zIDogUF9LT09SRElOQVRFTl9TIFNUUklORyAoJyAnKSog
KFNUUklOR19FU0MgfCBTVFJJTkcpICgnICc9CikqIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8v
IFNJMiBDMjIgQzIyCitwX29ydHNfenVzYXR6Y29kZSA6IFBfT1JUU19aVVNBVFpDT0RFIChTVFJJ
TkdfRVNDIHwgU1RSSU5HKSA7IC8vIEM4CitwX29ydHNfenVzYXR6dGV4dCA6IFBfT1JUU19aVVNB
VFpURVhUIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8vIE1DNTAKK3BfbnV0c19jb2RlIDogUF9O
VVRTX0NPREUgU1RSSU5HIDsgLy8gSTEwCitwX3NpdGVfaWQgOiBQX1NJVEVfSUQgKFNUUklOR19F
U0MgfCBTVFJJTkcpIDsgLy8gQzgKK3Bfc2l0ZV9uYW1lIDogUF9TSVRFX05BTUUgKFNUUklOR19F
U0MgfCBTVFJJTkcpIDsgLy8gQzUwKgorcF9ob2VoZV9ubiA6IFBfSE9FSEVfTk4gU1RSSU5HIDsg
Ly8gRjEwCitwX2hvZWhlX2xhbmQgOiBQX0hPRUhFX0xBTkQgU1RSSU5HIDsgLy8gRjEwCittZWhy
endlY2tmZWxkIDogTUVIUlpXRUNLRkVMRCAoU1RSSU5HX0VTQyB8IFNUUklORykgOyAvLyBNQzMw
MAorbWVzc19kYXR1bV91aHJ6ZWl0IDogTUVTU19EQVRVTV9VSFJaRUlUIFNUUklORyAoJyAnKSog
U1RSSU5HIDsgLy8gRDggVDQKK21lc3N6ZWl0X3Nla3VuZGVuIDogTUVTU1pFSVRfU0VLVU5ERU4g
U1RSSU5HIDsgLy8gSTgKK21lc3NtZXRob2RlX2MgOiBNRVNTTUVUSE9ERV9DIChTVFJJTkdfRVND
IHwgU1RSSU5HKSA7IC8vIEM1MCoKK21lc3NtZXRob2RlX3MgOiBNRVNTTUVUSE9ERV9TIChTVFJJ
TkdfRVNDIHwgU1RSSU5HKSA7IC8vIFNDMgorYmVhcmJlaXR1bmdzc3RhdHVzIDogQkVBUkJFSVRV
TkdTU1RBVFVTIChTVFJJTkdfRVNDIHwgU1RSSU5HKSA7IC8vIEM0CitwZXBfZmxhZyA6IFBFUF9G
TEFHIFNUUklORyA7IC8vIEkxCitlcmZhc3N1bmdfYWJnZXNjaGxvc3NlbiA6IEVSRkFTU1VOR19B
QkdFU0NITE9TU0VOIFNUUklORyA7IC8vIEkxCitwcm9iZW56dXNhdHpiZXNjaHJlaWJ1bmcgOiBQ
Uk9CRU5aVVNBVFpCRVNDSFJFSUJVTkcgKFNUUklOR19FU0MgfCBTVFJJTkcpID0KKCcgJykqIFNU
UklORyAoJyAnKSogKFNUUklOR19FU0MgfCBTVFJJTkcpICgnICcpKiBTVFJJTkcgOyAvLyBDNyog
RjEyIEM5IEY5CitwemJfcyA6IFBaQl9TIChTVFJJTkdfRVNDIHwgU1RSSU5HKSAoJyAnKSogU1RS
SU5HICgnICcpKiBTVFJJTkcgKCcgJykqIFNUUj0KSU5HIDsgLy8gU0M4IEYxMiBTSTMgRjkKK21l
c3N3ZXJ0IDogTUVTU1dFUlQgKFNUUklOR19FU0MgfCBTVFJJTkcpICgnICcpKiBTVFJJTkcgKCcg
JykqIChTVFJJTkdfRVNDPQogfCBTVFJJTkcpICgnICcpKiAoU1RSSU5HKT8gOyAvLyBDNTAqIEYx
MiBDOSBGOSoqCittZXNzd2VydF9zIDogTUVTU1dFUlRfUyBTVFJJTkcgKCcgJykqIFNUUklORyAo
JyAnKSogU1RSSU5HICgnICcpKiAoU1RSSU5HKT0KPyA7IC8vIFNJOCBGMTIgU0kzIEY5KioKK21l
c3N3ZXJ0X2kgOiBNRVNTV0VSVF9JIChTVFJJTkdfRVNDIHwgU1RSSU5HKSAoJyAnKSogU1RSSU5H
ICgnICcpKiAoU1RSSU5HPQpfRVNDIHwgU1RSSU5HKSAoJyAnKSogKFNUUklORyAoJyAnKSopPyAo
U1RSSU5HICgnICcpKik/IChTVFJJTkcgKCcgJykqKT8gKFM9ClRSSU5HX0VTQyB8IFNUUklORyk/
IDsgLy8gQzUwKiBGMTIgQzkgRjkqKiBGOSoqIEY5KiogQzUwKgorbWVzc3dlcnRfZyA6IE1FU1NX
RVJUX0cgKFNUUklOR19FU0MgfCBTVFJJTkcpICgnICcpKiBTVFJJTkcgKCcgJykqIChTVFJJTkc9
Cl9FU0MgfCBTVFJJTkcpICgnICcpKiAoU1RSSU5HICgnICcpKik/IChTVFJJTkcgKCcgJykqKT8g
KFNUUklORyAoJyAnKSopPyAoUz0KVFJJTkdfRVNDIHwgU1RSSU5HKT8gOyAvLyBDNTAqIEYxMiBD
OSBGOSoqIEY5KiogRjkqKiBDMQorbWVzc3dlcnRfbndnIDogTUVTU1dFUlRfTldHIChTVFJJTkdf
RVNDIHwgU1RSSU5HKSAoJyAnKSogU1RSSU5HICgnICcpKiAoU1Q9ClJJTkdfRVNDIHwgU1RSSU5H
KSAoJyAnKSogKFNUUklORyAoJyAnKSopPyAoU1RSSU5HKT8gOyAvLyBDNTAqIEYxMiBDOSBGOSoq
ID0KRjEyCittZXNzd2VydF9ud2dfcyA6IE1FU1NXRVJUX05XR19TIFNUUklORyAoJyAnKSogU1RS
SU5HICgnICcpKiBTVFJJTkcgKCcgJykqID0KKFNUUklORyAoJyAnKSopPyAoU1RSSU5HKT8gOyAv
LyBTSTggRjEyIFNJMyBGOSoqIEYxMgorbWVzc3dlcnRfbndnX2kgOiBNRVNTV0VSVF9OV0dfSSAo
U1RSSU5HX0VTQyB8IFNUUklORykgKCcgJykqIFNUUklORyAoJyAnKSo9CiAoU1RSSU5HX0VTQyB8
IFNUUklORykgKCcgJykqIChTVFJJTkcgKCcgJykqKT8gKFNUUklORyAoJyAnKSopPyAoU1RSSU5H
ICgnID0KJykqKT8gKFNUUklORyAoJyAnKSopPyAoU1RSSU5HX0VTQyB8IFNUUklORykgOyAvLyBD
NTAqIEYxMiBDOSBGOSoqIEYxMiBGOSoqPQogRjkqKiBDNTAKK21lc3N3ZXJ0X253Z19nIDogTUVT
U1dFUlRfTldHX0cgKFNUUklOR19FU0MgfCBTVFJJTkcpICgnICcpKiBTVFJJTkcgKCcgJykqPQog
KFNUUklOR19FU0MgfCBTVFJJTkcpICgnICcpKiAoU1RSSU5HICgnICcpKik/IFNUUklORyAoJyAn
KSogKFNUUklORyAoJyAnKSo9Cik/IChTVFJJTkcgKCcgJykqKT8gKFNUUklOR19FU0MgfCBTVFJJ
TkcpPyA7IC8vIEM1MCogRjEyIEM5IEY5KiogRjEyIEY5KiogRj0KOSoqIEMxCitrb21tZW50YXIg
OiBLT01NRU5UQVIgKFNUUklOR19FU0MgfCBTVFJJTkcpICgnICcpKiBTVFJJTkcgKCcgJykqIFNU
UklORyAoJz0KICcpKiAoU1RSSU5HX0VTQyB8IFNUUklORykgOyAvLyBDNSBEOCBUNCBNQzMwMAor
a29tbWVudGFyX3QgOiBLT01NRU5UQVJfVCAoU1RSSU5HX0VTQyB8IFNUUklORykgOyAvLyBNQzMw
MAorcHJvYmVua29tbWVudGFyIDogUFJPQkVOS09NTUVOVEFSIChTVFJJTkdfRVNDIHwgU1RSSU5H
KSAoJyAnKSogU1RSSU5HICgnICc9CikqIFNUUklORyAoJyAnKSogKFNUUklOR19FU0MgfCBTVFJJ
TkcpIDsgLy8gQzUgRDggVDQgTUMzMDAKK3Byb2JlbmtvbW1lbnRhcl90IDogUFJPQkVOS09NTUVO
VEFSX1QgKFNUUklOR19FU0MgfCBTVFJJTkcpIDsgLy8gTUMzMDAKKworVkVSU0lPTiA6ICgnVid8
J3YnKSgnRSd8J2UnKSgnUid8J3InKSgnUyd8J3MnKSgnSSd8J2knKSgnTyd8J28nKSgnTid8J24n
KSA7CitVRUJFUlRSQUdVTkdTRk9STUFUIDogKCdVJ3wndScpKCdFJ3wnZScpKCdCJ3wnYicpKCdF
J3wnZScpKCdSJ3wncicpKCdUJ3wndD0KJykoJ1InfCdyJykoJ0EnfCdhJykoJ0cnfCdnJykoJ1Un
fCd1JykoJ04nfCduJykoJ0cnfCdnJykoJ1MnfCdzJykoJ0YnfCdmJykoPQonTyd8J28nKSgnUid8
J3InKSgnTSd8J20nKSgnQSd8J2EnKSgnVCd8J3QnKSA7CitEQVRFTkJBU0lTIDogKCdEJ3wnZCcp
KCdBJ3wnYScpKCdUJ3wndCcpKCdFJ3wnZScpKCdOJ3wnbicpKCdCJ3wnYicpKCdBJ3wnYT0KJyko
J1MnfCdzJykoJ0knfCdpJykoJ1MnfCdzJykgOworREFURU5CQVNJU19TIDogKCdEJ3wnZCcpKCdB
J3wnYScpKCdUJ3wndCcpKCdFJ3wnZScpKCdOJ3wnbicpKCdCJ3wnYicpKCdBJ3w9CidhJykoJ1Mn
fCdzJykoJ0knfCdpJykoJ1MnfCdzJykoJ18nKSgnUyd8J3MnKSA7CitORVRaS0VOTlVORyA6ICgn
Tid8J24nKSgnRSd8J2UnKSgnVCd8J3QnKSgnWid8J3onKSgnSyd8J2snKSgnRSd8J2UnKSgnTid8
Jz0KbicpKCdOJ3wnbicpKCdVJ3wndScpKCdOJ3wnbicpKCdHJ3wnZycpIDsKK0VSWkVVR0VSIDog
KCdFJ3wnZScpKCdSJ3wncicpKCdaJ3wneicpKCdFJ3wnZScpKCdVJ3wndScpKCdHJ3wnZycpKCdF
J3wnZScpPQooJ1InfCdyJykgOworU1RBQVRfREVSX01FU1NTVEVMTEVfTEFORyA6ICgnUyd8J3Mn
KSgnVCd8J3QnKSgnQSd8J2EnKSgnQSd8J2EnKSgnVCd8J3QnKSg9CidfJykoJ0QnfCdkJykoJ0Un
fCdlJykoJ1InfCdyJykoJ18nKSgnTSd8J20nKSgnRSd8J2UnKSgnUyd8J3MnKSgnUyd8J3MnKSgn
Uz0KJ3wncycpKCdUJ3wndCcpKCdFJ3wnZScpKCdMJ3wnbCcpKCdMJ3wnbCcpKCdFJ3wnZScpKCdf
JykoJ0wnfCdsJykoJ0EnfCdhJykoPQonTid8J24nKSgnRyd8J2cnKSA7CitTVEFBVF9ERVJfTUVT
U1NURUxMRV9LVVJaIDogKCdTJ3wncycpKCdUJ3wndCcpKCdBJ3wnYScpKCdBJ3wnYScpKCdUJ3wn
dCcpKD0KJ18nKSgnRCd8J2QnKSgnRSd8J2UnKSgnUid8J3InKSgnXycpKCdNJ3wnbScpKCdFJ3wn
ZScpKCdTJ3wncycpKCdTJ3wncycpKCdTPQonfCdzJykoJ1QnfCd0JykoJ0UnfCdlJykoJ0wnfCds
JykoJ0wnfCdsJykoJ0UnfCdlJykoJ18nKSgnSyd8J2snKSgnVSd8J3UnKSg9CidSJ3wncicpKCda
J3wneicpIDsKK1NUQUFUX0RFUl9NRVNTU1RFTExFX1MgOiAoJ1MnfCdzJykoJ1QnfCd0JykoJ0En
fCdhJykoJ0EnfCdhJykoJ1QnfCd0JykoJ18nPQopKCdEJ3wnZCcpKCdFJ3wnZScpKCdSJ3wncicp
KCdfJykoJ00nfCdtJykoJ0UnfCdlJykoJ1MnfCdzJykoJ1MnfCdzJykoJ1MnfCc9CnMnKSgnVCd8
J3QnKSgnRSd8J2UnKSgnTCd8J2wnKSgnTCd8J2wnKSgnRSd8J2UnKSgnXycpKCdTJ3wncycpIDsK
K01FU1NTVEVMTEUgOiAoJ00nfCdtJykoJ0UnfCdlJykoJ1MnfCdzJykoJ1MnfCdzJykoJ1MnfCdz
JykoJ1QnfCd0JykoJ0UnfCdlPQonKSgnTCd8J2wnKSgnTCd8J2wnKSgnRSd8J2UnKSA7CitNRVNT
TEFCT1IgOiAoJ00nfCdtJykoJ0UnfCdlJykoJ1MnfCdzJykoJ1MnfCdzJykoJ0wnfCdsJykoJ0En
fCdhJykoJ0InfCdiJz0KKSgnTyd8J28nKSgnUid8J3InKSA7CitQUk9CRV9JRCA6ICgnUCd8J3An
KSgnUid8J3InKSgnTyd8J28nKSgnQid8J2InKSgnRSd8J2UnKSgnXycpKCdJJ3wnaScpKCdEJz0K
fCdkJykgOworTUVTU1VOR1NfSUQgOiAoJ00nfCdtJykoJ0UnfCdlJykoJ1MnfCdzJykoJ1MnfCdz
JykoJ1UnfCd1JykoJ04nfCduJykoJ0cnfCc9CmcnKSgnUyd8J3MnKSgnXycpKCdJJ3wnaScpKCdE
J3wnZCcpIDsKK1BST0JFTl9OUiA6ICgnUCd8J3AnKSgnUid8J3InKSgnTyd8J28nKSgnQid8J2In
KSgnRSd8J2UnKSgnTid8J24nKSgnXycpKCdOPQonfCduJykoJ1InfCdyJykgOworSEFVUFRQUk9C
RU5OVU1NRVIgOiAoJ0gnfCdoJykoJ0EnfCdhJykoJ1UnfCd1JykoJ1AnfCdwJykoJ1QnfCd0Jyko
J1AnfCdwJyk9CignUid8J3InKSgnTyd8J28nKSgnQid8J2InKSgnRSd8J2UnKSgnTid8J24nKSgn
Tid8J24nKSgnVSd8J3UnKSgnTSd8J20nKSgnTT0KJ3wnbScpKCdFJ3wnZScpKCdSJ3wncicpIDsK
K05FQkVOUFJPQkVOTlVNTUVSIDogKCdOJ3wnbicpKCdFJ3wnZScpKCdCJ3wnYicpKCdFJ3wnZScp
KCdOJ3wnbicpKCdQJ3wncCcpPQooJ1InfCdyJykoJ08nfCdvJykoJ0InfCdiJykoJ0UnfCdlJyko
J04nfCduJykoJ04nfCduJykoJ1UnfCd1JykoJ00nfCdtJykoJ009Cid8J20nKSgnRSd8J2UnKSgn
Uid8J3InKSA7CitNRVNTUFJPR1JBTU1fQyA6ICgnTSd8J20nKSgnRSd8J2UnKSgnUyd8J3MnKSgn
Uyd8J3MnKSgnUCd8J3AnKSgnUid8J3InKSgnTz0KJ3wnbycpKCdHJ3wnZycpKCdSJ3wncicpKCdB
J3wnYScpKCdNJ3wnbScpKCdNJ3wnbScpKCdfJykoJ0MnfCdjJykgOworTUVTU1BST0dSQU1NX1Mg
OiAoJ00nfCdtJykoJ0UnfCdlJykoJ1MnfCdzJykoJ1MnfCdzJykoJ1AnfCdwJykoJ1InfCdyJyko
J089Cid8J28nKSgnRyd8J2cnKSgnUid8J3InKSgnQSd8J2EnKSgnTSd8J20nKSgnTSd8J20nKSgn
XycpKCdTJ3wncycpIDsKK01FU1NQUk9HUkFNTV9MQU5EIDogKCdNJ3wnbScpKCdFJ3wnZScpKCdT
J3wncycpKCdTJ3wncycpKCdQJ3wncCcpKCdSJ3wncicpPQooJ08nfCdvJykoJ0cnfCdnJykoJ1In
fCdyJykoJ0EnfCdhJykoJ00nfCdtJykoJ00nfCdtJykoJ18nKSgnTCd8J2wnKSgnQSd8J2E9Cicp
KCdOJ3wnbicpKCdEJ3wnZCcpIDsKK1BST0JFTkFITUVJTlNUSVRVVElPTiA6ICgnUCd8J3AnKSgn
Uid8J3InKSgnTyd8J28nKSgnQid8J2InKSgnRSd8J2UnKSgnTid8PQonbicpKCdBJ3wnYScpKCdI
J3wnaCcpKCdNJ3wnbScpKCdFJ3wnZScpKCdJJ3wnaScpKCdOJ3wnbicpKCdTJ3wncycpKCdUJ3wn
dCc9CikoJ0knfCdpJykoJ1QnfCd0JykoJ1UnfCd1JykoJ1QnfCd0JykoJ0knfCdpJykoJ08nfCdv
JykoJ04nfCduJykgOworUFJPQkVOQVJUIDogKCdQJ3wncCcpKCdSJ3wncicpKCdPJ3wnbycpKCdC
J3wnYicpKCdFJ3wnZScpKCdOJ3wnbicpKCdBJ3wnYSc9CikoJ1InfCdyJykoJ1QnfCd0JykgOwor
WkVJVEJBU0lTIDogKCdaJ3wneicpKCdFJ3wnZScpKCdJJ3wnaScpKCdUJ3wndCcpKCdCJ3wnYicp
KCdBJ3wnYScpKCdTJ3wncyc9CikoJ0knfCdpJykoJ1MnfCdzJykgOworWkVJVEJBU0lTX1MgOiAo
J1onfCd6JykoJ0UnfCdlJykoJ0knfCdpJykoJ1QnfCd0JykoJ0InfCdiJykoJ0EnfCdhJykoJ1Mn
fCc9CnMnKSgnSSd8J2knKSgnUyd8J3MnKSgnXycpKCdTJ3wncycpIDsKK1NPTExfREFUVU1fVUhS
WkVJVF9BIDogKCdTJ3wncycpKCdPJ3wnbycpKCdMJ3wnbCcpKCdMJ3wnbCcpKCdfJykoJ0QnfCdk
JykoPQonQSd8J2EnKSgnVCd8J3QnKSgnVSd8J3UnKSgnTSd8J20nKSgnXycpKCdVJ3wndScpKCdI
J3wnaCcpKCdSJ3wncicpKCdaJ3wneic9CikoJ0UnfCdlJykoJ0knfCdpJykoJ1QnfCd0JykoJ18n
KSgnQSd8J2EnKSA7CitTT0xMX0RBVFVNX1VIUlpFSVRfRSA6ICgnUyd8J3MnKSgnTyd8J28nKSgn
TCd8J2wnKSgnTCd8J2wnKSgnXycpKCdEJ3wnZCcpKD0KJ0EnfCdhJykoJ1QnfCd0JykoJ1UnfCd1
JykoJ00nfCdtJykoJ18nKSgnVSd8J3UnKSgnSCd8J2gnKSgnUid8J3InKSgnWid8J3onPQopKCdF
J3wnZScpKCdJJ3wnaScpKCdUJ3wndCcpKCdfJykoJ0UnfCdlJykgOworVVJTUFJVTkdTX0RBVFVN
X1VIUlpFSVQgOiAoJ1UnfCd1JykoJ1InfCdyJykoJ1MnfCdzJykoJ1AnfCdwJykoJ1InfCdyJyko
J1U9Cid8J3UnKSgnTid8J24nKSgnRyd8J2cnKSgnUyd8J3MnKSgnXycpKCdEJ3wnZCcpKCdBJ3wn
YScpKCdUJ3wndCcpKCdVJ3wndScpKD0KJ00nfCdtJykoJ18nKSgnVSd8J3UnKSgnSCd8J2gnKSgn
Uid8J3InKSgnWid8J3onKSgnRSd8J2UnKSgnSSd8J2knKSgnVCd8J3QnPQopIDsKK1BST0JFTkFI
TUVfREFUVU1fVUhSWkVJVF9BIDogKCdQJ3wncCcpKCdSJ3wncicpKCdPJ3wnbycpKCdCJ3wnYicp
KCdFJ3wnZScpPQooJ04nfCduJykoJ0EnfCdhJykoJ0gnfCdoJykoJ00nfCdtJykoJ0UnfCdlJyko
J18nKSgnRCd8J2QnKSgnQSd8J2EnKSgnVCd8J3Q9CicpKCdVJ3wndScpKCdNJ3wnbScpKCdfJyko
J1UnfCd1JykoJ0gnfCdoJykoJ1InfCdyJykoJ1onfCd6JykoJ0UnfCdlJykoJ0knfD0KJ2knKSgn
VCd8J3QnKSgnXycpKCdBJ3wnYScpIDsKK1BST0JFTkFITUVfREFUVU1fVUhSWkVJVF9FIDogKCdQ
J3wncCcpKCdSJ3wncicpKCdPJ3wnbycpKCdCJ3wnYicpKCdFJ3wnZScpPQooJ04nfCduJykoJ0En
fCdhJykoJ0gnfCdoJykoJ00nfCdtJykoJ0UnfCdlJykoJ18nKSgnRCd8J2QnKSgnQSd8J2EnKSgn
VCd8J3Q9CicpKCdVJ3wndScpKCdNJ3wnbScpKCdfJykoJ1UnfCd1JykoJ0gnfCdoJykoJ1InfCdy
JykoJ1onfCd6JykoJ0UnfCdlJykoJ0knfD0KJ2knKSgnVCd8J3QnKSgnXycpKCdFJ3wnZScpIDsK
K1VNV0VMVEJFUkVJQ0hfQyA6ICgnVSd8J3UnKSgnTSd8J20nKSgnVyd8J3cnKSgnRSd8J2UnKSgn
TCd8J2wnKSgnVCd8J3QnKSgnPQpCJ3wnYicpKCdFJ3wnZScpKCdSJ3wncicpKCdFJ3wnZScpKCdJ
J3wnaScpKCdDJ3wnYycpKCdIJ3wnaCcpKCdfJykoJ0MnfCdjJyk9CiA7CitVTVdFTFRCRVJFSUNI
X1MgOiAoJ1UnfCd1JykoJ00nfCdtJykoJ1cnfCd3JykoJ0UnfCdlJykoJ0wnfCdsJykoJ1QnfCd0
JykoJz0KQid8J2InKSgnRSd8J2UnKSgnUid8J3InKSgnRSd8J2UnKSgnSSd8J2knKSgnQyd8J2Mn
KSgnSCd8J2gnKSgnXycpKCdTJ3wncycpPQogOworREVTS1JJUFRPUkVOIDogKCdEJ3wnZCcpKCdF
J3wnZScpKCdTJ3wncycpKCdLJ3wnaycpKCdSJ3wncicpKCdJJ3wnaScpKCdQJ3w9CidwJykoJ1Qn
fCd0JykoJ08nfCdvJykoJ1InfCdyJykoJ0UnfCdlJykoJ04nfCduJykgOworUkVJX1BST0dSQU1N
UFVOS1QgOiAoJ1InfCdyJykoJ0UnfCdlJykoJ0knfCdpJykoJ18nKSgnUCd8J3AnKSgnUid8J3In
KSgnTyc9CnwnbycpKCdHJ3wnZycpKCdSJ3wncicpKCdBJ3wnYScpKCdNJ3wnbScpKCdNJ3wnbScp
KCdQJ3wncCcpKCdVJ3wndScpKCdOJ3wnbj0KJykoJ0snfCdrJykoJ1QnfCd0JykgOworUkVJX1BS
T0dSQU1NUFVOS1RHUlVQUEUgOiAoJ1InfCdyJykoJ0UnfCdlJykoJ0knfCdpJykoJ18nKSgnUCd8
J3AnKSgnUid8J3I9CicpKCdPJ3wnbycpKCdHJ3wnZycpKCdSJ3wncicpKCdBJ3wnYScpKCdNJ3wn
bScpKCdNJ3wnbScpKCdQJ3wncCcpKCdVJ3wndScpKD0KJ04nfCduJykoJ0snfCdrJykoJ1QnfCd0
JykoJ0cnfCdnJykoJ1InfCdyJykoJ1UnfCd1JykoJ1AnfCdwJykoJ1AnfCdwJykoJ0UnPQp8J2Un
KSA7CitSRUZFUkVOWl9EQVRVTV9VSFJaRUlUIDogKCdSJ3wncicpKCdFJ3wnZScpKCdGJ3wnZicp
KCdFJ3wnZScpKCdSJ3wncicpKCdFJz0KfCdlJykoJ04nfCduJykoJ1onfCd6JykoJ18nKSgnRCd8
J2QnKSgnQSd8J2EnKSgnVCd8J3QnKSgnVSd8J3UnKSgnTSd8J20nKSgnPQpfJykoJ1UnfCd1Jyko
J0gnfCdoJykoJ1InfCdyJykoJ1onfCd6JykoJ0UnfCdlJykoJ0knfCdpJykoJ1QnfCd0JykgOwor
VEVTVERBVEVOIDogKCdUJ3wndCcpKCdFJ3wnZScpKCdTJ3wncycpKCdUJ3wndCcpKCdEJ3wnZCcp
KCdBJ3wnYScpKCdUJ3wndCc9CikoJ0UnfCdlJykoJ04nfCduJykgOworU1pFTkFSSU8gOiAoJ1Mn
fCdzJykoJ1onfCd6JykoJ0UnfCdlJykoJ04nfCduJykoJ0EnfCdhJykoJ1InfCdyJykoJ0knfCdp
Jyk9CignTyd8J28nKSA7CitTRUtfREFURU5CQVNJUyA6ICgnUyd8J3MnKSgnRSd8J2UnKSgnSyd8
J2snKSgnXycpKCdEJ3wnZCcpKCdBJ3wnYScpKCdUJ3wndD0KJykoJ0UnfCdlJykoJ04nfCduJyko
J0InfCdiJykoJ0EnfCdhJykoJ1MnfCdzJykoJ0knfCdpJykoJ1MnfCdzJykgOworU0VLX0RBVEVO
QkFTSVNfUyA6ICgnUyd8J3MnKSgnRSd8J2UnKSgnSyd8J2snKSgnXycpKCdEJ3wnZCcpKCdBJ3wn
YScpKCdUJ3w9Cid0JykoJ0UnfCdlJykoJ04nfCduJykoJ0InfCdiJykoJ0EnfCdhJykoJ1MnfCdz
JykoJ0knfCdpJykoJ1MnfCdzJykoJ18nKSgnUz0KJ3wncycpIDsKK1VfSEVSS1VORlRTTEFORF9M
QU5HIDogKCdVJ3wndScpKCdfJykoJ0gnfCdoJykoJ0UnfCdlJykoJ1InfCdyJykoJ0snfCdrJyko
PQonVSd8J3UnKSgnTid8J24nKSgnRid8J2YnKSgnVCd8J3QnKSgnUyd8J3MnKSgnTCd8J2wnKSgn
QSd8J2EnKSgnTid8J24nKSgnRCc9CnwnZCcpKCdfJykoJ0wnfCdsJykoJ0EnfCdhJykoJ04nfCdu
JykoJ0cnfCdnJykgOworVV9IRVJLVU5GVFNMQU5EX0tVUlogOiAoJ1UnfCd1JykoJ18nKSgnSCd8
J2gnKSgnRSd8J2UnKSgnUid8J3InKSgnSyd8J2snKSg9CidVJ3wndScpKCdOJ3wnbicpKCdGJ3wn
ZicpKCdUJ3wndCcpKCdTJ3wncycpKCdMJ3wnbCcpKCdBJ3wnYScpKCdOJ3wnbicpKCdEJz0KfCdk
JykoJ18nKSgnSyd8J2snKSgnVSd8J3UnKSgnUid8J3InKSgnWid8J3onKSA7CitVX0hFUktVTkZU
U0xBTkRfUyA6ICgnVSd8J3UnKSgnXycpKCdIJ3wnaCcpKCdFJ3wnZScpKCdSJ3wncicpKCdLJ3wn
aycpKCdVJz0KfCd1JykoJ04nfCduJykoJ0YnfCdmJykoJ1QnfCd0JykoJ1MnfCdzJykoJ0wnfCds
JykoJ0EnfCdhJykoJ04nfCduJykoJ0QnfCdkPQonKSgnXycpKCdTJ3wncycpIDsKK1VfR0VNRUlO
REVTQ0hMVUVTU0VMIDogKCdVJ3wndScpKCdfJykoJ0cnfCdnJykoJ0UnfCdlJykoJ00nfCdtJyko
J0UnfCdlJykoPQonSSd8J2knKSgnTid8J24nKSgnRCd8J2QnKSgnRSd8J2UnKSgnUyd8J3MnKSgn
Qyd8J2MnKSgnSCd8J2gnKSgnTCd8J2wnKSgnVSc9CnwndScpKCdFJ3wnZScpKCdTJ3wncycpKCdT
J3wncycpKCdFJ3wnZScpKCdMJ3wnbCcpIDsKK1VfR0VNRUlOREVOQU1FIDogKCdVJ3wndScpKCdf
JykoJ0cnfCdnJykoJ0UnfCdlJykoJ00nfCdtJykoJ0UnfCdlJykoJ0knfCdpPQonKSgnTid8J24n
KSgnRCd8J2QnKSgnRSd8J2UnKSgnTid8J24nKSgnQSd8J2EnKSgnTSd8J20nKSgnRSd8J2UnKSA7
CitVX09SVFNfWlVTQVRaS0VOTlpBSEwgOiAoJ1UnfCd1JykoJ18nKSgnTyd8J28nKSgnUid8J3In
KSgnVCd8J3QnKSgnUyd8J3MnKT0KKCdfJykoJ1onfCd6JykoJ1UnfCd1JykoJ1MnfCdzJykoJ0En
fCdhJykoJ1QnfCd0JykoJ1onfCd6JykoJ0snfCdrJykoJ0UnfCdlPQonKSgnTid8J24nKSgnTid8
J24nKSgnWid8J3onKSgnQSd8J2EnKSgnSCd8J2gnKSgnTCd8J2wnKSA7CitVX0tPT1JESU5BVEVO
IDogKCdVJ3wndScpKCdfJykoJ0snfCdrJykoJ08nfCdvJykoJ08nfCdvJykoJ1InfCdyJykoJ0Qn
fCdkJz0KKSgnSSd8J2knKSgnTid8J24nKSgnQSd8J2EnKSgnVCd8J3QnKSgnRSd8J2UnKSgnTid8
J24nKSA7CitVX0tPT1JESU5BVEVOX1MgOiAoJ1UnfCd1JykoJ18nKSgnSyd8J2snKSgnTyd8J28n
KSgnTyd8J28nKSgnUid8J3InKSgnRCd8Jz0KZCcpKCdJJ3wnaScpKCdOJ3wnbicpKCdBJ3wnYScp
KCdUJ3wndCcpKCdFJ3wnZScpKCdOJ3wnbicpKCdfJykoJ1MnfCdzJykgOworVV9PUlRTX1pVU0FU
WkNPREUgOiAoJ1UnfCd1JykoJ18nKSgnTyd8J28nKSgnUid8J3InKSgnVCd8J3QnKSgnUyd8J3Mn
KSgnXyc9CikoJ1onfCd6JykoJ1UnfCd1JykoJ1MnfCdzJykoJ0EnfCdhJykoJ1QnfCd0JykoJ1on
fCd6JykoJ0MnfCdjJykoJ08nfCdvJykoJz0KRCd8J2QnKSgnRSd8J2UnKSA7CitVX09SVFNfWlVT
QVRaVEVYVCA6ICgnVSd8J3UnKSgnXycpKCdPJ3wnbycpKCdSJ3wncicpKCdUJ3wndCcpKCdTJ3wn
cycpKCdfJz0KKSgnWid8J3onKSgnVSd8J3UnKSgnUyd8J3MnKSgnQSd8J2EnKSgnVCd8J3QnKSgn
Wid8J3onKSgnVCd8J3QnKSgnRSd8J2UnKSgnPQpYJ3wneCcpKCdUJ3wndCcpIDsKK1VfTlVUU19D
T0RFIDogKCdVJ3wndScpKCdfJykoJ04nfCduJykoJ1UnfCd1JykoJ1QnfCd0JykoJ1MnfCdzJyko
J18nKSgnQyd8PQonYycpKCdPJ3wnbycpKCdEJ3wnZCcpKCdFJ3wnZScpIDsKK1BfSEVSS1VORlRT
TEFORF9MQU5HIDogKCdQJ3wncCcpKCdfJykoJ0gnfCdoJykoJ0UnfCdlJykoJ1InfCdyJykoJ0sn
fCdrJykoPQonVSd8J3UnKSgnTid8J24nKSgnRid8J2YnKSgnVCd8J3QnKSgnUyd8J3MnKSgnTCd8
J2wnKSgnQSd8J2EnKSgnTid8J24nKSgnRCc9CnwnZCcpKCdfJykoJ0wnfCdsJykoJ0EnfCdhJyko
J04nfCduJykoJ0cnfCdnJykgOworUF9IRVJLVU5GVFNMQU5EX0tVUlogOiAoJ1AnfCdwJykoJ18n
KSgnSCd8J2gnKSgnRSd8J2UnKSgnUid8J3InKSgnSyd8J2snKSg9CidVJ3wndScpKCdOJ3wnbicp
KCdGJ3wnZicpKCdUJ3wndCcpKCdTJ3wncycpKCdMJ3wnbCcpKCdBJ3wnYScpKCdOJ3wnbicpKCdE
Jz0KfCdkJykoJ18nKSgnSyd8J2snKSgnVSd8J3UnKSgnUid8J3InKSgnWid8J3onKSA7CitQX0hF
UktVTkZUU0xBTkRfUyA6ICgnUCd8J3AnKSgnXycpKCdIJ3wnaCcpKCdFJ3wnZScpKCdSJ3wncicp
KCdLJ3wnaycpKCdVJz0KfCd1JykoJ04nfCduJykoJ0YnfCdmJykoJ1QnfCd0JykoJ1MnfCdzJyko
J0wnfCdsJykoJ0EnfCdhJykoJ04nfCduJykoJ0QnfCdkPQonKSgnXycpKCdTJ3wncycpIDsKK1Bf
R0VNRUlOREVTQ0hMVUVTU0VMIDogKCdQJ3wncCcpKCdfJykoJ0cnfCdnJykoJ0UnfCdlJykoJ00n
fCdtJykoJ0UnfCdlJykoPQonSSd8J2knKSgnTid8J24nKSgnRCd8J2QnKSgnRSd8J2UnKSgnUyd8
J3MnKSgnQyd8J2MnKSgnSCd8J2gnKSgnTCd8J2wnKSgnVSc9CnwndScpKCdFJ3wnZScpKCdTJ3wn
cycpKCdTJ3wncycpKCdFJ3wnZScpKCdMJ3wnbCcpIDsKK1BfR0VNRUlOREVOQU1FIDogKCdQJ3wn
cCcpKCdfJykoJ0cnfCdnJykoJ0UnfCdlJykoJ00nfCdtJykoJ0UnfCdlJykoJ0knfCdpPQonKSgn
Tid8J24nKSgnRCd8J2QnKSgnRSd8J2UnKSgnTid8J24nKSgnQSd8J2EnKSgnTSd8J20nKSgnRSd8
J2UnKSA7CitQX09SVFNfWlVTQVRaS0VOTlpBSEwgOiAoJ1AnfCdwJykoJ18nKSgnTyd8J28nKSgn
Uid8J3InKSgnVCd8J3QnKSgnUyd8J3MnKT0KKCdfJykoJ1onfCd6JykoJ1UnfCd1JykoJ1MnfCdz
JykoJ0EnfCdhJykoJ1QnfCd0JykoJ1onfCd6JykoJ0snfCdrJykoJ0UnfCdlPQonKSgnTid8J24n
KSgnTid8J24nKSgnWid8J3onKSgnQSd8J2EnKSgnSCd8J2gnKSgnTCd8J2wnKSA7CitQX0tPT1JE
SU5BVEVOIDogKCdQJ3wncCcpKCdfJykoJ0snfCdrJykoJ08nfCdvJykoJ08nfCdvJykoJ1InfCdy
JykoJ0QnfCdkJz0KKSgnSSd8J2knKSgnTid8J24nKSgnQSd8J2EnKSgnVCd8J3QnKSgnRSd8J2Un
KSgnTid8J24nKSA7CitQX0tPT1JESU5BVEVOX1MgOiAoJ1AnfCdwJykoJ18nKSgnSyd8J2snKSgn
Tyd8J28nKSgnTyd8J28nKSgnUid8J3InKSgnRCd8Jz0KZCcpKCdJJ3wnaScpKCdOJ3wnbicpKCdB
J3wnYScpKCdUJ3wndCcpKCdFJ3wnZScpKCdOJ3wnbicpKCdfJykoJ1MnfCdzJykgOworUF9PUlRT
X1pVU0FUWkNPREUgOiAoJ1AnfCdwJykoJ18nKSgnTyd8J28nKSgnUid8J3InKSgnVCd8J3QnKSgn
Uyd8J3MnKSgnXyc9CikoJ1onfCd6JykoJ1UnfCd1JykoJ1MnfCdzJykoJ0EnfCdhJykoJ1QnfCd0
JykoJ1onfCd6JykoJ0MnfCdjJykoJ08nfCdvJykoJz0KRCd8J2QnKSgnRSd8J2UnKSA7CitQX09S
VFNfWlVTQVRaVEVYVCA6ICgnUCd8J3AnKSgnXycpKCdPJ3wnbycpKCdSJ3wncicpKCdUJ3wndCcp
KCdTJ3wncycpKCdfJz0KKSgnWid8J3onKSgnVSd8J3UnKSgnUyd8J3MnKSgnQSd8J2EnKSgnVCd8
J3QnKSgnWid8J3onKSgnVCd8J3QnKSgnRSd8J2UnKSgnPQpYJ3wneCcpKCdUJ3wndCcpIDsKK1Bf
TlVUU19DT0RFIDogKCdQJ3wncCcpKCdfJykoJ04nfCduJykoJ1UnfCd1JykoJ1QnfCd0JykoJ1Mn
fCdzJykoJ18nKSgnQyd8PQonYycpKCdPJ3wnbycpKCdEJ3wnZCcpKCdFJ3wnZScpIDsKK1BfU0lU
RV9JRCA6ICgnUCd8J3AnKSgnXycpKCdTJ3wncycpKCdJJ3wnaScpKCdUJ3wndCcpKCdFJ3wnZScp
KCdfJykoJ0knfCdpPQonKSgnRCd8J2QnKSA7CitQX1NJVEVfTkFNRSA6ICgnUCd8J3AnKSgnXycp
KCdTJ3wncycpKCdJJ3wnaScpKCdUJ3wndCcpKCdFJ3wnZScpKCdfJykoJ04nfD0KJ24nKSgnQSd8
J2EnKSgnTSd8J20nKSgnRSd8J2UnKSA7CitQX0hPRUhFX05OIDogKCdQJ3wncCcpKCdfJykoJ0gn
fCdoJykoJ08nfCdvJykoJ0UnfCdlJykoJ0gnfCdoJykoJ0UnfCdlJykoJz0KXycpKCdOJ3wnbicp
KCdOJ3wnbicpIDsKK1BfSE9FSEVfTEFORCA6ICgnUCd8J3AnKSgnXycpKCdIJ3wnaCcpKCdPJ3wn
bycpKCdFJ3wnZScpKCdIJ3wnaCcpKCdFJ3wnZScpPQooJ18nKSgnTCd8J2wnKSgnQSd8J2EnKSgn
Tid8J24nKSgnRCd8J2QnKSA7CitNRUhSWldFQ0tGRUxEIDogKCdNJ3wnbScpKCdFJ3wnZScpKCdI
J3wnaCcpKCdSJ3wncicpKCdaJ3wneicpKCdXJ3wndycpKCdFJz0KfCdlJykoJ0MnfCdjJykoJ0sn
fCdrJykoJ0YnfCdmJykoJ0UnfCdlJykoJ0wnfCdsJykoJ0QnfCdkJykgOworTUVTU19EQVRVTV9V
SFJaRUlUIDogKCdNJ3wnbScpKCdFJ3wnZScpKCdTJ3wncycpKCdTJ3wncycpKCdfJykoJ0QnfCdk
JykoJ0E9Cid8J2EnKSgnVCd8J3QnKSgnVSd8J3UnKSgnTSd8J20nKSgnXycpKCdVJ3wndScpKCdI
J3wnaCcpKCdSJ3wncicpKCdaJ3wneicpKD0KJ0UnfCdlJykoJ0knfCdpJykoJ1QnfCd0JykgOwor
TUVTU1pFSVRfU0VLVU5ERU4gOiAoJ00nfCdtJykoJ0UnfCdlJykoJ1MnfCdzJykoJ1MnfCdzJyko
J1onfCd6JykoJ0UnfCdlJyk9CignSSd8J2knKSgnVCd8J3QnKSgnXycpKCdTJ3wncycpKCdFJ3wn
ZScpKCdLJ3wnaycpKCdVJ3wndScpKCdOJ3wnbicpKCdEJ3wnZD0KJykoJ0UnfCdlJykoJ04nfCdu
JykgOworTUVTU01FVEhPREVfQyA6ICgnTSd8J20nKSgnRSd8J2UnKSgnUyd8J3MnKSgnUyd8J3Mn
KSgnTSd8J20nKSgnRSd8J2UnKSgnVCc9CnwndCcpKCdIJ3wnaCcpKCdPJ3wnbycpKCdEJ3wnZCcp
KCdFJ3wnZScpKCdfJykoJ0MnfCdjJykgOworTUVTU01FVEhPREVfUyA6ICgnTSd8J20nKSgnRSd8
J2UnKSgnUyd8J3MnKSgnUyd8J3MnKSgnTSd8J20nKSgnRSd8J2UnKSgnVCc9CnwndCcpKCdIJ3wn
aCcpKCdPJ3wnbycpKCdEJ3wnZCcpKCdFJ3wnZScpKCdfJykoJ1MnfCdzJykgOworQkVBUkJFSVRV
TkdTU1RBVFVTIDogKCdCJ3wnYicpKCdFJ3wnZScpKCdBJ3wnYScpKCdSJ3wncicpKCdCJ3wnYicp
KCdFJ3wnZSc9CikoJ0knfCdpJykoJ1QnfCd0JykoJ1UnfCd1JykoJ04nfCduJykoJ0cnfCdnJyko
J1MnfCdzJykoJ1MnfCdzJykoJ1QnfCd0JykoJz0KQSd8J2EnKSgnVCd8J3QnKSgnVSd8J3UnKSgn
Uyd8J3MnKSA7CitQRVBfRkxBRyA6ICgnUCd8J3AnKSgnRSd8J2UnKSgnUCd8J3AnKSgnXycpKCdG
J3wnZicpKCdMJ3wnbCcpKCdBJ3wnYScpKCdHJz0KfCdnJykgOworRVJGQVNTVU5HX0FCR0VTQ0hM
T1NTRU4gOiAoJ0UnfCdlJykoJ1InfCdyJykoJ0YnfCdmJykoJ0EnfCdhJykoJ1MnfCdzJykoJ1M9
Cid8J3MnKSgnVSd8J3UnKSgnTid8J24nKSgnRyd8J2cnKSgnXycpKCdBJ3wnYScpKCdCJ3wnYicp
KCdHJ3wnZycpKCdFJ3wnZScpKD0KJ1MnfCdzJykoJ0MnfCdjJykoJ0gnfCdoJykoJ0wnfCdsJyko
J08nfCdvJykoJ1MnfCdzJykoJ1MnfCdzJykoJ0UnfCdlJykoJ04nPQp8J24nKSA7CitQUk9CRU5a
VVNBVFpCRVNDSFJFSUJVTkcgOiAoJ1AnfCdwJykoJ1InfCdyJykoJ08nfCdvJykoJ0InfCdiJyko
J0UnfCdlJykoJz0KTid8J24nKSgnWid8J3onKSgnVSd8J3UnKSgnUyd8J3MnKSgnQSd8J2EnKSgn
VCd8J3QnKSgnWid8J3onKSgnQid8J2InKSgnRSd8PQonZScpKCdTJ3wncycpKCdDJ3wnYycpKCdI
J3wnaCcpKCdSJ3wncicpKCdFJ3wnZScpKCdJJ3wnaScpKCdCJ3wnYicpKCdVJ3wndSc9CikoJ04n
fCduJykoJ0cnfCdnJykgOworUFpCX1MgOiAoJ1AnfCdwJykoJ1onfCd6JykoJ0InfCdiJykoJ18n
KSgnUyd8J3MnKSA7CitNRVNTV0VSVCA6ICgnTSd8J20nKSgnRSd8J2UnKSgnUyd8J3MnKSgnUyd8
J3MnKSgnVyd8J3cnKSgnRSd8J2UnKSgnUid8J3InKT0KKCdUJ3wndCcpIDsKK01FU1NXRVJUX1Mg
OiAoJ00nfCdtJykoJ0UnfCdlJykoJ1MnfCdzJykoJ1MnfCdzJykoJ1cnfCd3JykoJ0UnfCdlJyko
J1InfCdyPQonKSgnVCd8J3QnKSgnXycpKCdTJ3wncycpIDsKK01FU1NXRVJUX0kgOiAoJ00nfCdt
JykoJ0UnfCdlJykoJ1MnfCdzJykoJ1MnfCdzJykoJ1cnfCd3JykoJ0UnfCdlJykoJ1InfCdyPQon
KSgnVCd8J3QnKSgnXycpKCdJJ3wnaScpIDsKK01FU1NXRVJUX0cgOiAoJ00nfCdtJykoJ0UnfCdl
JykoJ1MnfCdzJykoJ1MnfCdzJykoJ1cnfCd3JykoJ0UnfCdlJykoJ1InfCdyPQonKSgnVCd8J3Qn
KSgnXycpKCdHJ3wnZycpIDsKK01FU1NXRVJUX05XRyA6ICgnTSd8J20nKSgnRSd8J2UnKSgnUyd8
J3MnKSgnUyd8J3MnKSgnVyd8J3cnKSgnRSd8J2UnKSgnUid8PQoncicpKCdUJ3wndCcpKCdfJyko
J04nfCduJykoJ1cnfCd3JykoJ0cnfCdnJykgOworTUVTU1dFUlRfTldHX1MgOiAoJ00nfCdtJyko
J0UnfCdlJykoJ1MnfCdzJykoJ1MnfCdzJykoJ1cnfCd3JykoJ0UnfCdlJykoJ1I9Cid8J3InKSgn
VCd8J3QnKSgnXycpKCdOJ3wnbicpKCdXJ3wndycpKCdHJ3wnZycpKCdfJykoJ1MnfCdzJykgOwor
TUVTU1dFUlRfTldHX0kgOiAoJ00nfCdtJykoJ0UnfCdlJykoJ1MnfCdzJykoJ1MnfCdzJykoJ1cn
fCd3JykoJ0UnfCdlJykoJ1I9Cid8J3InKSgnVCd8J3QnKSgnXycpKCdOJ3wnbicpKCdXJ3wndycp
KCdHJ3wnZycpKCdfJykoJ0knfCdpJykgOworTUVTU1dFUlRfTldHX0cgOiAoJ00nfCdtJykoJ0Un
fCdlJykoJ1MnfCdzJykoJ1MnfCdzJykoJ1cnfCd3JykoJ0UnfCdlJykoJ1I9Cid8J3InKSgnVCd8
J3QnKSgnXycpKCdOJ3wnbicpKCdXJ3wndycpKCdHJ3wnZycpKCdfJykoJ0cnfCdnJykgOworS09N
TUVOVEFSIDogKCdLJ3wnaycpKCdPJ3wnbycpKCdNJ3wnbScpKCdNJ3wnbScpKCdFJ3wnZScpKCdO
J3wnbicpKCdUJ3wndCc9CikoJ0EnfCdhJykoJ1InfCdyJykgOworS09NTUVOVEFSX1QgOiAoJ0sn
fCdrJykoJ08nfCdvJykoJ00nfCdtJykoJ00nfCdtJykoJ0UnfCdlJykoJ04nfCduJykoJ1QnfCc9
CnQnKSgnQSd8J2EnKSgnUid8J3InKSgnXycpKCdUJ3wndCcpIDsKK1BST0JFTktPTU1FTlRBUiA6
ICgnUCd8J3AnKSgnUid8J3InKSgnTyd8J28nKSgnQid8J2InKSgnRSd8J2UnKSgnTid8J24nKSgn
PQpLJ3wnaycpKCdPJ3wnbycpKCdNJ3wnbScpKCdNJ3wnbScpKCdFJ3wnZScpKCdOJ3wnbicpKCdU
J3wndCcpKCdBJ3wnYScpKCdSJ3w9CidyJykgOworUFJPQkVOS09NTUVOVEFSX1QgOiAoJ1AnfCdw
JykoJ1InfCdyJykoJ08nfCdvJykoJ0InfCdiJykoJ0UnfCdlJykoJ04nfCduJyk9CignSyd8J2sn
KSgnTyd8J28nKSgnTSd8J20nKSgnTSd8J20nKSgnRSd8J2UnKSgnTid8J24nKSgnVCd8J3QnKSgn
QSd8J2EnKSgnUj0KJ3wncicpKCdfJykoJ1QnfCd0JykgOworCisKK1dTIDogKCcgJykrIC0+IHNr
aXA7CitORVdMSU5FIDogWydccicgJ1xuJyB8ICdccicgfCAnXG4nXSAtPiBza2lwOworU1RSSU5H
X0VTQyA6ICciJyAoQyB8IFsgXHJcbl0pKiAnIicgOworU1RSSU5HIDogQysgOworQyA6IENIQVIg
OworZnJhZ21lbnQgQ0hBUiA6IH5bICJcclxuXSA7CitmcmFnbWVudCBDSEFSX1dTIDogflsiXHJc
bl0gOworZnJhZ21lbnQgQ0hBUl9XU19OTCA6IH5bIl0gOwpkaWZmIC1yIDIxYWI0ZDM1MTM1YSAt
ciBmZGM3NTJjZDE3ZmUgc3JjL21haW4vamF2YS9kZS9pbnRldmF0aW9uL2xhZGEvaW1wb3I9CnRl
ci9sYWYvQXR0cmlidXRlTWFwcGVyLmphdmEKLS0tIGEvc3JjL21haW4vamF2YS9kZS9pbnRldmF0
aW9uL2xhZGEvaW1wb3J0ZXIvbGFmL0F0dHJpYnV0ZU1hcHBlci5qYXZhCVR1PQplIFNlcCAyMCAx
NjowMTowMiAyMDE2ICswMjAwCisrKyAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcw
ICswMDAwCkBAIC0xLDU5OSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKEMpIDIwMTMgYnkgQnVuZGVz
YW10IGZ1ZXIgU3RyYWhsZW5zY2h1dHoKLSAqIFNvZnR3YXJlIGVuZ2luZWVyaW5nIGJ5IEludGV2
YXRpb24gR21iSAotICoKLSAqIFRoaXMgZmlsZSBpcyBGcmVlIFNvZnR3YXJlIHVuZGVyIHRoZSBH
TlUgR1BMICh2Pj0zRDMpCi0gKiBhbmQgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZ
ISBDaGVjayBvdXQKLSAqIHRoZSBkb2N1bWVudGF0aW9uIGNvbWluZyB3aXRoIElNSVMtTGFib3Jk
YXRlbi1BcHBsaWNhdGlvbiBmb3IgZGV0YWlscy4KLSAqLwotcGFja2FnZSBkZS5pbnRldmF0aW9u
LmxhZGEuaW1wb3J0ZXIubGFmOwotCi1pbXBvcnQgamF2YS5zcWwuVGltZXN0YW1wOwotaW1wb3J0
IGphdmEudGV4dC5EYXRlRm9ybWF0OwotaW1wb3J0IGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbjsK
LWltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJy
YXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0Owot
aW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5Q
YXR0ZXJuOwotCi1pbXBvcnQgamF2YXguaW5qZWN0LkluamVjdDsKLQotaW1wb3J0IGRlLmludGV2
YXRpb24ubGFkYS5pbXBvcnRlci5SZXBvcnRJdGVtOwotaW1wb3J0IGRlLmludGV2YXRpb24ubGFk
YS5tb2RlbC5sYW5kLktvbW1lbnRhck07Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLm1vZGVs
LmxhbmQuS29tbWVudGFyUDsKLWltcG9ydCBkZS5pbnRldmF0aW9uLmxhZGEubW9kZWwubGFuZC5N
ZXNzdW5nOwotaW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS5tb2RlbC5sYW5kLk1lc3N3ZXJ0Owot
aW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS5tb2RlbC5sYW5kLlByb2JlOwotaW1wb3J0IGRlLmlu
dGV2YXRpb24ubGFkYS5tb2RlbC5sYW5kLlp1c2F0eldlcnQ7Ci1pbXBvcnQgZGUuaW50ZXZhdGlv
bi5sYWRhLm1vZGVsLnN0YW1tZGF0ZW4uRGF0ZW5iYXNpczsKLWltcG9ydCBkZS5pbnRldmF0aW9u
LmxhZGEubW9kZWwuc3RhbW1kYXRlbi5NZXNzRWluaGVpdDsKLWltcG9ydCBkZS5pbnRldmF0aW9u
LmxhZGEubW9kZWwuc3RhbW1kYXRlbi5NZXNzZ3JvZXNzZTsKLWltcG9ydCBkZS5pbnRldmF0aW9u
LmxhZGEubW9kZWwuc3RhbW1kYXRlbi5Qcm9iZW5adXNhdHo7Ci1pbXBvcnQgZGUuaW50ZXZhdGlv
bi5sYWRhLm1vZGVsLnN0YW1tZGF0ZW4uUHJvYmVuYXJ0OwotaW1wb3J0IGRlLmludGV2YXRpb24u
bGFkYS5tb2RlbC5zdGFtbWRhdGVuLlVtd2VsdDsKLWltcG9ydCBkZS5pbnRldmF0aW9uLmxhZGEu
dXRpbC5hbm5vdGF0aW9uLlJlcG9zaXRvcnlDb25maWc7Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5s
YWRhLnV0aWwuZGF0YS5RdWVyeUJ1aWxkZXI7Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLnV0
aWwuZGF0YS5SZXBvc2l0b3J5OwotaW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS51dGlsLmRhdGEu
UmVwb3NpdG9yeVR5cGU7Ci0KLS8qKgotICogVGhlIEF0dHJpYnV0ZU1hcHBlciBpcyB1c2VkIHRv
IHNldCBvYmplY3QgYXR0cmlidXRlcyB2aWEgc3RyaW5nIGJhc2VkCi0gKiBrZXkgdmFsdWUgcGFp
cnMuIFRoZSBrZXkgcmVwcmVzZW50cyBhIG1lbWJlciBvZiBhbiBlbnRpdHkgb2JqZWN0LgotICoK
LSAqIEBhdXRob3IgPGEgaHJlZj0zRCJtYWlsdG86cnJlbmtlcnRAaW50ZXZhdGlvbi5kZSI+UmFp
bXVuZCBSZW5rZXJ0PC9hPgotICovCi1wdWJsaWMgY2xhc3MgQXR0cmlidXRlTWFwcGVyCi17Ci0K
LSAgICAvKioKLSAgICAgKiBUaGUgcmVwb3NpdG9yeSB1c2VkIHRvIHJlYWQgZGF0YS4KLSAgICAg
Ki8KLSAgICBASW5qZWN0Ci0gICAgQFJlcG9zaXRvcnlDb25maWcodHlwZT0zRFJlcG9zaXRvcnlU
eXBlLlJPKQotICAgIHByaXZhdGUgUmVwb3NpdG9yeSByZXBvc2l0b3J5OwotCi0gICAgLyoqCi0g
ICAgICogTGlzdCBvZiB3YXJuaW5ncy4KLSAgICAgKi8KLSAgICBwcml2YXRlIExpc3Q8UmVwb3J0
SXRlbT4gd2FybmluZ3M7Ci0KLSAgICAvKioKLSAgICAgKiBMaXN0IG9mIGVycm9ycy4KLSAgICAg
Ki8KLSAgICBwcml2YXRlIExpc3Q8UmVwb3J0SXRlbT4gZXJyb3JzOwotCi0gICAgLyoqCi0gICAg
ICogRGVmYXVsdCBjb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBuZXcgQXR0cmlidXRlTWFwcGVyIG9i
amVjdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQXR0cmlidXRlTWFwcGVyKCkgewotICAgICAgICB0
aGlzLndhcm5pbmdzID0zRCBuZXcgQXJyYXlMaXN0PFJlcG9ydEl0ZW0+KCk7Ci0gICAgICAgIHRo
aXMuZXJyb3JzID0zRCBuZXcgQXJyYXlMaXN0PFJlcG9ydEl0ZW0+KCk7Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgICogQWRkIGFuIGF0dHJpYnV0ZSB0byB0aGUgZ2l2ZW4gTFByb2JlIG9iamVjdC4K
LSAgICAgKgotICAgICAqIEBwYXJhbSBrZXkgICAgICAgVGhlIGtleSBtYXBwaW5nIHRvIGEgb2Jq
ZWN0IG1lbWJlci4KLSAgICAgKiBAcGFyYW0gdmFsdWUgICAgIFRoZSB2YWx1ZSB0byBzZXQuCi0g
ICAgICogQHBhcmFtIHByb2JlICAgICBUaGUgZW50aXR5IG9iamVjdC4KLSAgICAgKiBAcmV0dXJu
IFRoZSB1cGRhdGVkIGVudGl0eSBvYmplY3QuCi0gICAgICovCi0gICAgQFN1cHByZXNzV2Fybmlu
Z3MoInVuY2hlY2tlZCIpCi0gICAgcHVibGljIFByb2JlIGFkZEF0dHJpYnV0ZShTdHJpbmcga2V5
LCBPYmplY3QgdmFsdWUsIFByb2JlIHByb2JlKSB7Ci0gICAgICAgIERhdGVGb3JtYXQgZm9ybWF0
ID0zRCBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eU1NZGQgSEhtbSIpOwotICAgICAgICBpZiAo
ImRhdGVuYmFzaXNfcyIuZXF1YWxzKGtleSkgJiYgcHJvYmUuZ2V0RGF0ZW5iYXNpc0lkKCkgPTNE
PTNEIG49CnVsbCkgewotICAgICAgICAgICAgSW50ZWdlciB2ID0zRCBJbnRlZ2VyLnZhbHVlT2Yo
dmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBwcm9iZS5zZXREYXRlbmJhc2lzSWQodik7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoImRhdGVuYmFzaXNfcyIuZXF1YWxzKGtleSkg
JiYgcHJvYmUuZ2V0RGF0ZW5iYXNpc0lkKCkgIT0KPTNEIG51bGwpewotICAgICAgICAgICAgdGhp
cy53YXJuaW5ncy5hZGQobmV3IFJlcG9ydEl0ZW0oa2V5LCB2YWx1ZS50b1N0cmluZygpLCA2NzIp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgiZGF0ZW5iYXNpcyIuZXF1YWxzKGtleSkgJiYg
cHJvYmUuZ2V0RGF0ZW5iYXNpc0lkKCkgPTNEPTNEIG51bD0KbCkgewotICAgICAgICAgICAgUXVl
cnlCdWlsZGVyPERhdGVuYmFzaXM+IGJ1aWxkZXIgPTNECi0gICAgICAgICAgICAgICAgbmV3IFF1
ZXJ5QnVpbGRlcjxEYXRlbmJhc2lzPigKLSAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5l
bnRpdHlNYW5hZ2VyKCJzdGFtbSIpLAotICAgICAgICAgICAgICAgICAgICBEYXRlbmJhc2lzLmNs
YXNzKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYW5kKCJkYXRlbmJhc2lzIiwgdmFsdWUudG9TdHJp
bmcoKSk7Ci0gICAgICAgICAgICBMaXN0PERhdGVuYmFzaXM+IGRhdGVuYmFzaXMgPTNECi0gICAg
ICAgICAgICAgICAgKExpc3Q8RGF0ZW5iYXNpcz4pcmVwb3NpdG9yeS5maWx0ZXIoCi0gICAgICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuZ2V0UXVlcnkoKSwKLSAgICAgICAgICAgICAgICAgICAgInN0
YW1tIikuZ2V0RGF0YSgpOwotCi0gICAgICAgICAgICBJbnRlZ2VyIHYgPTNEIGRhdGVuYmFzaXMu
Z2V0KDApLmdldElkKCk7Ci0gICAgICAgICAgICBwcm9iZS5zZXREYXRlbmJhc2lzSWQodik7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoImRhdGVuYmFzaXMiLmVxdWFscyhrZXkpICYmIHBy
b2JlLmdldERhdGVuYmFzaXNJZCgpICE9M0QgPQpudWxsKXsKLSAgICAgICAgICAgIHRoaXMud2Fy
bmluZ3MuYWRkKG5ldyBSZXBvcnRJdGVtKGtleSwgdmFsdWUudG9TdHJpbmcoKSwgNjcyKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoImhhdXB0cHJvYmVubnVtbWVyIi5lcXVhbHMoa2V5KSkg
ewotICAgICAgICAgICAgcHJvYmUuc2V0SGF1cHRwcm9iZW5Ocih2YWx1ZS50b1N0cmluZygpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgibXByX2lkIi5lcXVhbHMoa2V5KSkgewotICAgICAg
ICAgICAgSW50ZWdlciB2ID0zRCBJbnRlZ2VyLnZhbHVlT2YodmFsdWUudG9TdHJpbmcoKSk7Ci0g
ICAgICAgICAgICBwcm9iZS5zZXRNcHJJZCh2KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgi
bWVzc3N0ZWxsZSIuZXF1YWxzKGtleSkpIHsKLSAgICAgICAgICAgIHByb2JlLnNldE1zdElkKHZh
bHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCJtZXNzcHJvZ3JhbW1f
cyIuZXF1YWxzKGtleSkgJiYgcHJvYmUuZ2V0QmFJZCgpID0zRD0zRCBudWxsKSB7Ci0gICAgICAg
ICAgICBwcm9iZS5zZXRCYUlkKEludGVnZXIucGFyc2VJbnQodmFsdWUudG9TdHJpbmcoKSkpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCJtZXNzcHJvZ3JhbW1fcyIuZXF1YWxzKGtleSkg
JiYgcHJvYmUuZ2V0QmFJZCgpICE9M0QgbnVsbD0KKXsKLSAgICAgICAgICAgIHRoaXMud2Fybmlu
Z3MuYWRkKG5ldyBSZXBvcnRJdGVtKGtleSwgdmFsdWUudG9TdHJpbmcoKSwgNjcyKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoInNvbGxfZGF0dW1fdWhyemVpdF9hIi5lcXVhbHMoa2V5KSkg
ewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBEYXRlIGQgPTNEIGZvcm1hdC5w
YXJzZSh2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBwcm9iZS5zZXRTb2xsZGF0
dW1CZWdpbm4obmV3IFRpbWVzdGFtcChkLmdldFRpbWUoKSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICB0aGlz
Lndhcm5pbmdzLmFkZChuZXcgUmVwb3J0SXRlbShrZXksIHZhbHVlLnRvU3RyaW5nKCksIDY3PQo0
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCJzb2xsX2RhdHVtX3Vo
cnplaXRfZSIuZXF1YWxzKGtleSkpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAg
ICAgRGF0ZSBkID0zRCBmb3JtYXQucGFyc2UodmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAg
ICAgICAgcHJvYmUuc2V0U29sbGRhdHVtRW5kZShuZXcgVGltZXN0YW1wKGQuZ2V0VGltZSgpKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgewot
ICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MuYWRkKG5ldyBSZXBvcnRJdGVtKGtleSwgdmFs
dWUudG9TdHJpbmcoKSwgNjc9CjQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBpZiAoInByb2JlbmFobWVfZGF0dW1fdWhyemVpdF9hIi5lcXVhbHMoa2V5KSkgewotICAgICAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBEYXRlIGQgPTNEIGZvcm1hdC5wYXJzZSh2YWx1
ZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBwcm9iZS5zZXRQcm9iZWVudG5haG1lQmVn
aW5uKG5ldyBUaW1lc3RhbXAoZC5nZXRUaW1lKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy53YXJu
aW5ncy5hZGQobmV3IFJlcG9ydEl0ZW0oa2V5LCB2YWx1ZS50b1N0cmluZygpLCA2Nz0KNCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICgicHJvYmVuYWhtZV9kYXR1bV91
aHJ6ZWl0X2UiLmVxdWFscyhrZXkpKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAg
ICAgIERhdGUgZCA9M0QgZm9ybWF0LnBhcnNlKHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICAg
ICAgICAgIHByb2JlLnNldFByb2JlZW50bmFobWVFbmRlKG5ldyBUaW1lc3RhbXAoZC5nZXRUaW1l
KCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5hZGQobmV3IFJlcG9ydEl0ZW0oa2V5
LCB2YWx1ZS50b1N0cmluZygpLCA2Nz0KNCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCJ1bXdlbHRiZXJlaWNoX3MiLmVxdWFscyhrZXkpICYmIHByb2JlLmdldFVt
d0lkKCkgPTNEPTNEIG51bGwpPQogewotICAgICAgICAgICAgcHJvYmUuc2V0VW13SWQodmFsdWUu
dG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoInVtd2VsdGJlcmVpY2hf
cyIuZXF1YWxzKGtleSkgJiYgcHJvYmUuZ2V0VW13SWQoKSAhPTNEIG51PQpsbCl7Ci0gICAgICAg
ICAgICB0aGlzLndhcm5pbmdzLmFkZChuZXcgUmVwb3J0SXRlbShrZXksIHZhbHVlLnRvU3RyaW5n
KCksIDY3MikpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgidW13ZWx0YmVyZWljaF9jIi5lcXVh
bHMoa2V5KSAmJiBwcm9iZS5nZXRVbXdJZCgpID0zRD0zRCBudWxsKT0KIHsKLSAgICAgICAgICAg
IFF1ZXJ5QnVpbGRlcjxVbXdlbHQ+IGJ1aWxkZXIgPTNECi0gICAgICAgICAgICAgICAgbmV3IFF1
ZXJ5QnVpbGRlcjxVbXdlbHQ+KAotICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LmVudGl0
eU1hbmFnZXIoInN0YW1tIiksCi0gICAgICAgICAgICAgICAgICAgIFVtd2VsdC5jbGFzcyk7Ci0g
ICAgICAgICAgICBpbnQgbGVuZ3RoID0zRCB2YWx1ZS50b1N0cmluZygpLmxlbmd0aCgpID4gODAg
PyA4MCA6IHZhbHVlLnRvUz0KdHJpbmcoKS5sZW5ndGgoKTsKLSAgICAgICAgICAgIGJ1aWxkZXIu
YW5kKCJ1bXdlbHRCZXJlaWNoIiwgdmFsdWUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgbGVuPQpn
dGgpKTsKLSAgICAgICAgICAgIExpc3Q8VW13ZWx0PiB1bXdlbHQgPTNECi0gICAgICAgICAgICAg
ICAgKExpc3Q8VW13ZWx0PilyZXBvc2l0b3J5LmZpbHRlcigKLSAgICAgICAgICAgICAgICAgICAg
YnVpbGRlci5nZXRRdWVyeSgpLAotICAgICAgICAgICAgICAgICAgICAic3RhbW0iKS5nZXREYXRh
KCk7Ci0gICAgICAgICAgICBwcm9iZS5zZXRVbXdJZCh1bXdlbHQuZ2V0KDApLmdldElkKCkpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCJ1bXdlbHRiZXJlaWNoX2MiLmVxdWFscyhrZXkp
ICYmIHByb2JlLmdldFVtd0lkKCkgIT0zRCBudT0KbGwpewotICAgICAgICAgICAgdGhpcy53YXJu
aW5ncy5hZGQobmV3IFJlcG9ydEl0ZW0oa2V5LCB2YWx1ZS50b1N0cmluZygpLCA2NzIpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICgiZGVza3JpcHRvcmVuIi5lcXVhbHMoa2V5KSkgewotICAg
ICAgICAgICAgcHJvYmUuc2V0TWVkaWFEZXNrKHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCJ0ZXN0ZGF0ZW4iLmVxdWFscyhrZXkpKSB7Ci0gICAgICAgICAgICBp
ZiAoIXZhbHVlLnRvU3RyaW5nKCkuZXF1YWxzKCIwIikpIHsKLSAgICAgICAgICAgICAgICBwcm9i
ZS5zZXRUZXN0KHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgcHJvYmUuc2V0VGVzdChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIm1lZGl1bSIuZXF1YWxzKGtleSkpIHsKLSAgICAgICAgICAgIHBy
b2JlLnNldE1lZGlhKHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCJwcm9iZW5hcnQiLmVxdWFscyhrZXkpKSB7Ci0gICAgICAgICAgICBRdWVyeUJ1aWxkZXI8UHJv
YmVuYXJ0PiBidWlsZGVyID0zRAotICAgICAgICAgICAgICAgIG5ldyBRdWVyeUJ1aWxkZXI8UHJv
YmVuYXJ0PigKLSAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5lbnRpdHlNYW5hZ2VyKCJz
dGFtbSIpLAotICAgICAgICAgICAgICAgICAgICBQcm9iZW5hcnQuY2xhc3MpOwotICAgICAgICAg
ICAgYnVpbGRlci5hbmQoInByb2JlbmFydCIsIHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICAg
ICAgTGlzdDxQcm9iZW5hcnQ+IHByb2JlbmFydCA9M0QKLSAgICAgICAgICAgICAgICAoTGlzdDxQ
cm9iZW5hcnQ+KXJlcG9zaXRvcnkuZmlsdGVyKAotICAgICAgICAgICAgICAgICAgICBidWlsZGVy
LmdldFF1ZXJ5KCksCi0gICAgICAgICAgICAgICAgICAgICJzdGFtbSIpLmdldERhdGEoKTsKLSAg
ICAgICAgICAgIHByb2JlLnNldFByb2JlbmFydElkKHByb2JlbmFydC5nZXQoMCkuZ2V0SWQoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHByb2JlOwotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIEFkZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGdpdmVuIFByb2JlVHJhbnNsYXRpb24gb2JqZWN0
LgotICAgICAqCi0gICAgICogQHBhcmFtIGtleSAgICAgICBUaGUga2V5IG1hcHBpbmcgdG8gYSBv
YmplY3QgbWVtYmVyLgotICAgICAqIEBwYXJhbSB2YWx1ZSAgICAgVGhlIHZhbHVlIHRvIHNldC4K
LSAgICAgKiBAcGFyYW0gcHJvYmVUcmFuc2xhdGlvbiAgVGhlIGVudGl0eSBvYmplY3QuCi0gICAg
ICogQHJldHVybiBUaGUgdXBkYXRlZCBlbnRpdHkuCi0gICAgICoKLSAgICBAU3VwcHJlc3NXYXJu
aW5ncygidW5jaGVja2VkIikKLSAgICBwdWJsaWMgUHJvYmVUcmFuc2xhdGlvbiBhZGRBdHRyaWJ1
dGUoCi0gICAgICAgIFN0cmluZyBrZXksCi0gICAgICAgIE9iamVjdCB2YWx1ZSwKLSAgICAgICAg
UHJvYmVUcmFuc2xhdGlvbiBwcm9iZVRyYW5zbGF0aW9uCi0gICAgKSB7Ci0gICAgICAgIGlmICgi
cHJvYmVfaWQiLmVxdWFscyhrZXkpKSB7Ci0gICAgICAgICAgICBRdWVyeUJ1aWxkZXI8UHJvYmVU
cmFuc2xhdGlvbj4gYnVpbGRlciA9M0QKLSAgICAgICAgICAgICAgICBuZXcgUXVlcnlCdWlsZGVy
PFByb2JlVHJhbnNsYXRpb24+KAotICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LmVudGl0
eU1hbmFnZXIoImxhbmQiKSwgUHJvYmVUcmFuc2xhdGlvbi5jbGE9CnNzKTsKLSAgICAgICAgICAg
IGJ1aWxkZXIuYW5kKCJwcm9iZUlkQWx0IiwgdmFsdWUpOwotICAgICAgICAgICAgUmVzcG9uc2Ug
cmVzcG9uc2UgPTNECi0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5maWx0ZXIoYnVpbGRlci5n
ZXRRdWVyeSgpLCAibGFuZCIpOwotICAgICAgICAgICAgTGlzdDxQcm9iZVRyYW5zbGF0aW9uPiBp
bmZvID0zRCAoTGlzdDxQcm9iZVRyYW5zbGF0aW9uPilyZXNwb249CnNlLmdldERhdGEoKTsKLSAg
ICAgICAgICAgIGlmIChpbmZvICE9M0QgbnVsbCAmJiBpbmZvLnNpemUoKSA+IDApIHsKLSAgICAg
ICAgICAgICAgICBlcnJvcnMuYWRkKG5ldyBSZXBvcnRJdGVtKCJwcm9iZV9pZCIsIHZhbHVlLnRv
U3RyaW5nKCksIDY3PQoxKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBwcm9iZVRyYW5zbGF0aW9uLnNldFByb2JlSWRBbHQodmFsdWUu
dG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHByb2JlVHJhbnNsYXRpb247
Ci0gICAgfSovCi0KLSAgICAvKioKLSAgICAgKiBBZGQgYW4gYXR0cmlidXRlIHRvIHRoZSBnaXZl
biBMS29tbWVudGFyUCBvYmplY3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ga2V5ICAgICAgIFRo
ZSBrZXkgbWFwcGluZyB0byBhIG9iamVjdCBtZW1iZXIuCi0gICAgICogQHBhcmFtIHZhbHVlICAg
ICBUaGUgdmFsdWUgdG8gc2V0LgotICAgICAqIEBwYXJhbSBrb21tZW50YXIgVGhlIGVudGl0eSBv
YmplY3QuCi0gICAgICogQHJldHVybiBUaGUgdXBkYXRlZCBlbnRpdHkgb2JqZWN0LgotICAgICAq
LwotICAgIHB1YmxpYyBLb21tZW50YXJQIGFkZEF0dHJpYnV0ZSgKLSAgICAgICAgU3RyaW5nIGtl
eSwKLSAgICAgICAgT2JqZWN0IHZhbHVlLAotICAgICAgICBLb21tZW50YXJQIGtvbW1lbnRhcgot
ICAgICkgewotICAgICAgICBEYXRlRm9ybWF0IGZvcm1hdCA9M0QgbmV3IFNpbXBsZURhdGVGb3Jt
YXQoInl5eXlNTWRkIEhIbW0iKTsKLSAgICAgICAgU3RyaW5nIHYgPTNEIHZhbHVlLnRvU3RyaW5n
KCk7Ci0gICAgICAgIFN0cmluZyBlcnpldWdlciA9M0Qgdi5zdWJzdHJpbmcoMSwgNik7Ci0gICAg
ICAgIFN0cmluZyBkYXRlID0zRCB2LnN1YnN0cmluZyg4LCAyMSk7Ci0gICAgICAgIERhdGUgZDsK
LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGQgPTNEIGZvcm1hdC5wYXJzZShkYXRlKTsKLSAg
ICAgICAgICAgIGtvbW1lbnRhci5zZXREYXR1bShuZXcgVGltZXN0YW1wKGQuZ2V0VGltZSgpKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAg
ICAgIHRoaXMud2FybmluZ3MuYWRkKG5ldyBSZXBvcnRJdGVtKGtleSwgdmFsdWUudG9TdHJpbmco
KSwgNjc0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHRleHQgPTNEIHYuc3Vic3RyaW5n
KDIzLCB2Lmxlbmd0aCgpIC0xKTsKLSAgICAgICAga29tbWVudGFyLnNldE1zdElkKGVyemV1Z2Vy
KTsKLSAgICAgICAga29tbWVudGFyLnNldFRleHQodGV4dCk7Ci0gICAgICAgIHJldHVybiBrb21t
ZW50YXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkIGFuIGF0dHJpYnV0ZSB0byB0aGUg
Z2l2ZW4gTEtvbW1lbnRhck0gb2JqZWN0LgotICAgICAqCi0gICAgICogQHBhcmFtIGtleSAgICAg
ICBUaGUga2V5IG1hcHBpbmcgdG8gYSBvYmplY3QgbWVtYmVyLgotICAgICAqIEBwYXJhbSB2YWx1
ZSAgICAgVGhlIHZhbHVlIHRvIHNldC4KLSAgICAgKiBAcGFyYW0ga29tbWVudGFyIFRoZSBlbnRp
dHkgb2JqZWN0LgotICAgICAqIEByZXR1cm4gVGhlIHVwZGF0ZWQgZW50aXR5IG9iamVjdC4KLSAg
ICAgKi8KLSAgICBwdWJsaWMgS29tbWVudGFyTSBhZGRBdHRyaWJ1dGUoCi0gICAgICAgIFN0cmlu
ZyBrZXksCi0gICAgICAgIE9iamVjdCB2YWx1ZSwKLSAgICAgICAgS29tbWVudGFyTSBrb21tZW50
YXIKLSAgICApIHsKLSAgICAgICAgRGF0ZUZvcm1hdCBmb3JtYXQgPTNEIG5ldyBTaW1wbGVEYXRl
Rm9ybWF0KCJ5eXl5TU1kZCBISG1tIik7Ci0gICAgICAgIFN0cmluZyB2ID0zRCB2YWx1ZS50b1N0
cmluZygpOwotICAgICAgICBTdHJpbmcgZXJ6ZXVnZXIgPTNEIHYuc3Vic3RyaW5nKDEsIDYpOwot
ICAgICAgICBTdHJpbmcgZGF0ZSA9M0Qgdi5zdWJzdHJpbmcoOCwgMjEpOwotICAgICAgICBEYXRl
IGQ7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBkID0zRCBmb3JtYXQucGFyc2UoZGF0ZSk7
Ci0gICAgICAgICAgICBrb21tZW50YXIuc2V0RGF0dW0obmV3IFRpbWVzdGFtcChkLmdldFRpbWUo
KSkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAgICAgICB0aGlzLndhcm5pbmdzLmFkZChuZXcgUmVwb3J0SXRlbShrZXksIHZhbHVlLnRvU3Ry
aW5nKCksIDY3NCkpOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB0ZXh0ID0zRCB2LnN1YnN0
cmluZygyMywgdi5sZW5ndGgoKSAtMSk7Ci0gICAgICAgIGtvbW1lbnRhci5zZXRNc3RJZChlcnpl
dWdlcik7Ci0gICAgICAgIGtvbW1lbnRhci5zZXRUZXh0KHRleHQpOwotICAgICAgICByZXR1cm4g
a29tbWVudGFyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZCBhbiBhdHRyaWJ1dGUgdG8g
dGhlIGdpdmVuIExNZXNzdW5nIG9iamVjdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBrZXkgICAg
ICAgVGhlIGtleSBtYXBwaW5nIHRvIGEgb2JqZWN0IG1lbWJlci4KLSAgICAgKiBAcGFyYW0gdmFs
dWUgICAgIFRoZSB2YWx1ZSB0byBzZXQuCi0gICAgICogQHBhcmFtIG1lc3N1bmcgICBUaGUgZW50
aXR5IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuIFRoZSB1cGRhdGVkIGVudGl0eSBvYmplY3QuCi0g
ICAgICovCi0gICAgcHVibGljIE1lc3N1bmcgYWRkQXR0cmlidXRlKAotICAgICAgICBTdHJpbmcg
a2V5LAotICAgICAgICBPYmplY3QgdmFsdWUsCi0gICAgICAgIE1lc3N1bmcgbWVzc3VuZwotICAg
ICkgewotICAgICAgICBEYXRlRm9ybWF0IGZvcm1hdCA9M0QgbmV3IFNpbXBsZURhdGVGb3JtYXQo
Inl5eXlNTWRkIEhIbW0iKTsKLSAgICAgICAgaWYgKCJuZWJlbnByb2Jlbm51bW1lciIuZXF1YWxz
KGtleSkpIHsKLSAgICAgICAgICAgIG1lc3N1bmcuc2V0TmViZW5wcm9iZW5Ocih2YWx1ZS50b1N0
cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgibWVzc19kYXR1bV91aHJ6ZWl0
Ii5lcXVhbHMoa2V5KSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBEYXRl
IGQgPTNEIGZvcm1hdC5wYXJzZSh2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBt
ZXNzdW5nLnNldE1lc3N6ZWl0cHVua3QobmV3IFRpbWVzdGFtcChkLmdldFRpbWUoKSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLndhcm5pbmdzLmFkZChuZXcgUmVwb3J0SXRlbShrZXksIHZhbHVlLnRv
U3RyaW5nKCksIDY3PQo0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAoIm1lc3N6ZWl0X3Nla3VuZGVuIi5lcXVhbHMoa2V5KSkgewotICAgICAgICAgICAgSW50
ZWdlciBpID0zRCBJbnRlZ2VyLnZhbHVlT2YodmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAg
ICBtZXNzdW5nLnNldE1lc3NkYXVlcihpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgi
bWVzc21ldGhvZGVfcyIuZXF1YWxzKGtleSkpIHsKLSAgICAgICAgICAgIG1lc3N1bmcuc2V0TW10
SWQodmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoImJlYXJi
ZWl0dW5nc3N0YXR1cyIuZXF1YWxzKGtleSkpIHsKLSAgICAgICAgICAgIC8vaWdub3JlZC4hPwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCJlcmZhc3N1bmdfYWJnZXNjaGxvc3NlbiIuZXF1
YWxzKGtleSkpIHsKLSAgICAgICAgICAgIGlmKCF2YWx1ZS50b1N0cmluZygpLmVxdWFscygiMCIp
KSB7Ci0gICAgICAgICAgICAgICAgbWVzc3VuZy5zZXRGZXJ0aWcodHJ1ZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZXNzdW5nLnNldEZlcnRp
ZyhmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1lc3N1
bmc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkIGFuIGF0dHJpYnV0ZSB0byB0aGUgZ2l2
ZW4gTWVzc3VuZ1RyYW5zbGF0aW9uIG9iamVjdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBrZXkg
ICAgICAgVGhlIGtleSBtYXBwaW5nIHRvIGEgb2JqZWN0IG1lbWJlci4KLSAgICAgKiBAcGFyYW0g
dmFsdWUgICAgIFRoZSB2YWx1ZSB0byBzZXQuCi0gICAgICogQHBhcmFtIG10ICAgICAgICBUaGUg
ZW50aXR5IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuIFRoZSB1cGRhdGVkIGVudGl0eS4KLSAgICAg
KgotICAgIHB1YmxpYyBNZXNzdW5nVHJhbnNsYXRpb24gYWRkQXR0cmlidXRlKAotICAgICAgICBT
dHJpbmcga2V5LAotICAgICAgICBPYmplY3QgdmFsdWUsCi0gICAgICAgIE1lc3N1bmdUcmFuc2xh
dGlvbiBtdAotICAgICkgewotICAgICAgICBpZiAoIm1lc3N1bmdzX2lkIi5lcXVhbHMoa2V5KSkg
ewotICAgICAgICAgICAgbXQuc2V0TWVzc3VuZ3NJZEFsdChJbnRlZ2VyLnZhbHVlT2YodmFsdWUu
dG9TdHJpbmcoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtdDsKLSAgICB9Ci0gICAg
Ki8KLQotICAgIC8qKgotICAgICAqIEFkZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGdpdmVuIExNZXNz
d2VydCBvYmplY3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ga2V5ICAgICAgIFRoZSBrZXkgbWFw
cGluZyB0byBhIG9iamVjdCBtZW1iZXIuCi0gICAgICogQHBhcmFtIHZhbHVlICAgICBUaGUgdmFs
dWUgdG8gc2V0LgotICAgICAqIEBwYXJhbSBtZXNzd2VydCAgVGhlIGVudGl0eSBvYmplY3QuCi0g
ICAgICogQHJldHVybiBUaGUgdXBkYXRlZCBlbnRpdHkgb2JqZWN0LgotICAgICAqLwotICAgIEBT
dXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICAgIHB1YmxpYyBNZXNzd2VydCBhZGRBdHRy
aWJ1dGUoCi0gICAgICAgIFN0cmluZyBrZXksCi0gICAgICAgIE9iamVjdCB2YWx1ZSwKLSAgICAg
ICAgTWVzc3dlcnQgbWVzc3dlcnQKLSAgICApIHsKLSAgICAgICAgUGF0dGVybiBwID0zRCBQYXR0
ZXJuLmNvbXBpbGUoCi0gICAgICAgICAgICAiKFwiLitcIikoIC4rICkoXCIuK1wiKSggLiopKCAu
ezEsMTJ9KSggLnsxLDl9KSguezAsOX0pKC57MCwzfT0KKSIpOwotICAgICAgICAvL1RPRE8gRG9l
cyBub3QgcGVyZmVjdGx5IG1hdGNoLi4uIFVzZSBiZXR0ZXIgbWF0Y2hpbmcgZm9yIGZsb2F0cy4K
LSAgICAgICAgTWF0Y2hlciBtID0zRCBwLm1hdGNoZXIodmFsdWUudG9TdHJpbmcoKSk7Ci0gICAg
ICAgIGlmIChtLm1hdGNoZXMoKSkgewotICAgICAgICAgICAgU3RyaW5nIG1lc3Nncm9lc3NlID0z
RCBtLmdyb3VwKDEpLnN1YnN0cmluZygxLCBtLmdyb3VwKDEpLmxlbmc9CnRoKCkgLSAxKTsKLSAg
ICAgICAgICAgIFN0cmluZyB3ZXJ0ID0zRCBtLmdyb3VwKDIpOwotICAgICAgICAgICAgU3RyaW5n
IGVpbmhlaXQgPTNEIG0uZ3JvdXAoMykuc3Vic3RyaW5nKDEsIG0uZ3JvdXAoMykubGVuZ3RoKCk9
CiAtIDEpOwotICAgICAgICAgICAgaWYgKHdlcnQuc3RhcnRzV2l0aCgiIDwiKSkgewotICAgICAg
ICAgICAgICAgIHdlcnQgPTNEIHdlcnQuc3Vic3RyaW5nKDIpOwotICAgICAgICAgICAgICAgIG1l
c3N3ZXJ0LnNldEdyZW56d2VydHVlYmVyc2NocmVpdHVuZyhmYWxzZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIGlmICh3ZXJ0LnN0YXJ0c1dpdGgoIiA+IikpIHsKLSAgICAgICAg
ICAgICAgICB3ZXJ0ID0zRCB3ZXJ0LnN1YnN0cmluZygyKTsKLSAgICAgICAgICAgICAgICBtZXNz
d2VydC5zZXRHcmVuendlcnR1ZWJlcnNjaHJlaXR1bmcodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBtZXNzd2VydC5zZXRNZXNzd2VydChEb3VibGUudmFsdWVPZih3ZXJ0KSk7Ci0K
LSAgICAgICAgICAgIFF1ZXJ5QnVpbGRlcjxNZXNzRWluaGVpdD4gYnVpbGRlciA9M0QKLSAgICAg
ICAgICAgICAgICBuZXcgUXVlcnlCdWlsZGVyPE1lc3NFaW5oZWl0PigKLSAgICAgICAgICAgICAg
ICAgICAgcmVwb3NpdG9yeS5lbnRpdHlNYW5hZ2VyKCJzdGFtbSIpLAotICAgICAgICAgICAgICAg
ICAgICBNZXNzRWluaGVpdC5jbGFzcyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFuZCgiZWluaGVp
dCIsIGVpbmhlaXQpOwotICAgICAgICAgICAgTGlzdDxNZXNzRWluaGVpdD4gbWVzc2VpbmhlaXQg
PTNECi0gICAgICAgICAgICAgICAgKExpc3Q8TWVzc0VpbmhlaXQ+KXJlcG9zaXRvcnkuZmlsdGVy
KAotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmdldFF1ZXJ5KCksCi0gICAgICAgICAgICAg
ICAgICAgICJzdGFtbSIpLmdldERhdGEoKTsKLSAgICAgICAgICAgIGlmIChtZXNzZWluaGVpdC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5hZGQobmV3IFJlcG9ydEl0
ZW0oIm1lc3NlaW5oZWl0IiwgIm51bGwiLCA2NzMpPQopOwotICAgICAgICAgICAgICAgIHJldHVy
biBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgbWVzc3dlcnQuc2V0TWVoSWQobWVzc2VpbmhlaXQuZ2V0KDApLmdldElkKCkpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBRdWVyeUJ1aWxkZXI8TWVzc2dyb2Vzc2U+IG1nQnVpbGRl
ciA9M0QKLSAgICAgICAgICAgICAgICBuZXcgUXVlcnlCdWlsZGVyPE1lc3Nncm9lc3NlPigKLSAg
ICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5lbnRpdHlNYW5hZ2VyKCJzdGFtbSIpLAotICAg
ICAgICAgICAgICAgICAgICBNZXNzZ3JvZXNzZS5jbGFzcyk7Ci0gICAgICAgICAgICBtZ0J1aWxk
ZXIuYW5kKCJtZXNzZ3JvZXNzZSIsIG1lc3Nncm9lc3NlKTsKLSAgICAgICAgICAgIExpc3Q8TWVz
c2dyb2Vzc2U+IG1lc3Nncm9lc3NlbiA9M0QKLSAgICAgICAgICAgICAgICAoTGlzdDxNZXNzZ3Jv
ZXNzZT4pcmVwb3NpdG9yeS5maWx0ZXIoCi0gICAgICAgICAgICAgICAgICAgIG1nQnVpbGRlci5n
ZXRRdWVyeSgpLAotICAgICAgICAgICAgICAgICAgICAic3RhbW0iKS5nZXREYXRhKCk7Ci0KLSAg
ICAgICAgICAgIGlmIChtZXNzZ3JvZXNzZW4uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5lcnJvcnMuYWRkKG5ldyBSZXBvcnRJdGVtKCJtZXNzZ3JvZXNzZSIsICJudWxsIiwgNjcz
KT0KKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG1lc3N3ZXJ0LnNldE1lc3Nncm9lc3NlSWQo
bWVzc2dyb2Vzc2VuLmdldCgwKS5nZXRJZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gbWVzc3dlcnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkIGFu
IGF0dHJpYnV0ZSB0byB0aGUgT3J0Q3JlYXRvci4gVGhlIGNyZWF0b3IgaXMgdXNlZCB0byBidWls
ZCB0aGUKLSAgICAgKiB0d28gb2JqZWN0cyBPcnQgYW5kIExPcnQuCi0gICAgICoKLSAgICAgKiBA
cGFyYW0ga2V5ICAgICAgIFRoZSBrZXkgbWFwcGluZyB0byBhIG9iamVjdCBtZW1iZXIuCi0gICAg
ICogQHBhcmFtIHZhbHVlICAgICBUaGUgdmFsdWUgdG8gc2V0LgotICAgICAqIEBwYXJhbSBvcnQg
ICAgICAgVGhlIGNyZWF0b3Igb2JqZWN0LgotICAgICAqIEByZXR1cm4gVGhlIHVwZGF0ZWQgY3Jl
YXRvciBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIE9ydENyZWF0b3IgYWRkQXR0cmlidXRl
KAotICAgICAgICBTdHJpbmcga2V5LAotICAgICAgICBPYmplY3QgdmFsdWUsCi0gICAgICAgIE9y
dENyZWF0b3Igb3J0Ci0gICAgKSB7Ci0gICAgICAgIGlmICgib3J0X2NvZGUiLmVxdWFscyhrZXkp
KSB7Ci0gICAgICAgICAgICBvcnQuc2V0T3J0Q29kZSh2YWx1ZS50b1N0cmluZygpKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIm9ydF90eXAiLmVxdWFscyhrZXkpKSB7Ci0gICAgICAgICAgICBv
cnQuc2V0T3J0VHlwKHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgi
b3J0X3p1c2F0eiIuZXF1YWxzKGtleSkpIHsKLSAgICAgICAgICAgIG9ydC5zZXRadXNhdHp0ZXh0
KHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgib3J0X2xhbmRfbGFu
ZyIuZXF1YWxzKGtleSkpIHsKLSAgICAgICAgICAgIG9ydC5zZXRMYW5kTGFuZyh2YWx1ZS50b1N0
cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIm9ydF9sYW5kX2t1cnoiLmVxdWFscyhr
ZXkpKSB7Ci0gICAgICAgICAgICBvcnQuc2V0TGFuZEt1cnoodmFsdWUudG9TdHJpbmcoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKCJvcnRfbGFuZF9zIi5lcXVhbHMoa2V5KSkgewotICAgICAg
ICAgICAgb3J0LnNldExhbmRTKHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAg
IGlmICgib3J0X2dlbWVpbmRlc2NobD1DMz1CQ3NzZWwiLmVxdWFscyhrZXkpKSB7Ci0gICAgICAg
ICAgICBvcnQuc2V0R2VtU2NobHVlc3NlbCh2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIm9ydF9iZXplaWNobnVuZyIuZXF1YWxzKGtleSkpIHsKLSAgICAgICAgICAg
IG9ydC5zZXRCZXplaWNobnVuZyh2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoIm9ydF9iZXNjaHJlaWJ1bmciLmVxdWFscyhrZXkpKSB7Ci0gICAgICAgICAgICBvcnQu
c2V0QmVzY2hyZWlidW5nKHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICgib3J0X251dHNfY29kZSIuZXF1YWxzKGtleSkpIHsKLSAgICAgICAgICAgIG9ydC5zZXROdXRz
KHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgib3J0X2hvZWhlX2xh
bmQiLmVxdWFscyhrZXkpKSB7Ci0gICAgICAgICAgICBvcnQuc2V0SG9laGUodmFsdWUudG9TdHJp
bmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCJvcnRfa29vcmRpbmF0ZW4iLmVxdWFscyhr
ZXkpKSB7Ci0gICAgICAgICAgICBvcnQuc2V0S29vcmRpbmF0ZW4odmFsdWUudG9TdHJpbmcoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCJvcnRfa29vcmRpbmF0ZW5fcyIuZXF1YWxzKGtleSkp
IHsKLSAgICAgICAgICAgIG9ydC5zZXRLb29yZGluYXRlblModmFsdWUudG9TdHJpbmcoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG9ydDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBB
ZGQgYW4gYXR0cmlidXRlIHRvIHRoZSBnaXZlbiBMWnVzYXR6d2VydCBvYmplY3QuCi0gICAgICoK
LSAgICAgKiBAcGFyYW0gbEtleSAgICAgICBUaGUga2V5IG1hcHBpbmcgdG8gYSBvYmplY3QgbWVt
YmVyLgotICAgICAqIEBwYXJhbSB2YWx1ZSAgICAgVGhlIHZhbHVlIHRvIHNldC4KLSAgICAgKiBA
cGFyYW0gd2VydCAgICAgIFRoZSBlbnRpdHkgb2JqZWN0LgotICAgICAqIEByZXR1cm4gVGhlIHVw
ZGF0ZWQgZW50aXR5IG9iamVjdC4KLSAgICAgKi8KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5j
aGVja2VkIikKLSAgICBwdWJsaWMgWnVzYXR6V2VydCBhZGRBdHRyaWJ1dGUoCi0gICAgICAgIFN0
cmluZyBsS2V5LAotICAgICAgICBPYmplY3QgdmFsdWUsCi0gICAgICAgIFp1c2F0eldlcnQgd2Vy
dAotICAgICkgewotICAgICAgICBTdHJpbmcgdiA9M0QgdmFsdWUudG9TdHJpbmcoKS5zdWJzdHJp
bmcoMSk7Ci0gICAgICAgIGludCBuZHggPTNEIHYuaW5kZXhPZigiXCIiKTsKLSAgICAgICAgU3Ry
aW5nIGdyb2Vzc2UgPTNEIHYuc3Vic3RyaW5nKDAsIG5keCk7Ci0gICAgICAgIHYgPTNEIHYuc3Vi
c3RyaW5nKG5keCArIDIpOwotICAgICAgICBuZHggPTNEIHYuaW5kZXhPZigiICIpOwotICAgICAg
ICBTdHJpbmcgdyA9M0Qgdi5zdWJzdHJpbmcoMCwgbmR4KTsKLSAgICAgICAgdiA9M0Qgdi5zdWJz
dHJpbmcobmR4ICsgMik7Ci0gICAgICAgIG5keCA9M0Qgdi5pbmRleE9mKCJcIiIpOwotICAgICAg
ICBTdHJpbmcgZmVobGVyID0zRCB2LnN1YnN0cmluZyhuZHggKyAyKTsKLQotICAgICAgICBRdWVy
eUJ1aWxkZXI8UHJvYmVuWnVzYXR6PiBidWlsZGVyID0zRAotICAgICAgICAgICAgbmV3IFF1ZXJ5
QnVpbGRlcjxQcm9iZW5adXNhdHo+KAotICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuZW50aXR5
TWFuYWdlcigic3RhbW0iKSwKLSAgICAgICAgICAgICAgICBQcm9iZW5adXNhdHouY2xhc3MpOwot
ICAgICAgICBidWlsZGVyLmFuZCgienVzYXR6d2VydCIsIGdyb2Vzc2UpOwotICAgICAgICBMaXN0
PFByb2Jlblp1c2F0ej4genVzYXR6PTNECi0gICAgICAgICAgICAoTGlzdDxQcm9iZW5adXNhdHo+
KXJlcG9zaXRvcnkuZmlsdGVyKAotICAgICAgICAgICAgICAgIGJ1aWxkZXIuZ2V0UXVlcnkoKSwK
LSAgICAgICAgICAgICAgICAic3RhbW0iKS5nZXREYXRhKCk7Ci0KLSAgICAgICAgaWYgKHp1c2F0
eiA9M0Q9M0QgbnVsbCB8fCB6dXNhdHouaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB0aGlzLmVy
cm9ycy5hZGQobmV3IFJlcG9ydEl0ZW0obEtleSwgInp1c2F0endlcnQiLCA2NzMpKTsKLSAgICAg
ICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIHdlcnQuc2V0UHpzSWQoenVz
YXR6LmdldCgwKS5nZXRJZCgpKTsKLSAgICAgICAgd2VydC5zZXRNZXNzd2VydFB6cyhEb3VibGUu
dmFsdWVPZih3KSk7Ci0gICAgICAgIHdlcnQuc2V0TWVzc2ZlaGxlcihGbG9hdC52YWx1ZU9mKGZl
aGxlcikpOwotICAgICAgICByZXR1cm4gd2VydDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBB
ZGQgYW4gYXR0cmlidXRlIHRvIHRoZSBnaXZlbiBMWnVzYXR6d2VydCBvYmplY3QuCi0gICAgICoK
LSAgICAgKiBAcGFyYW0gbEtleSAgICAgICBUaGUga2V5IG1hcHBpbmcgdG8gYSBvYmplY3QgbWVt
YmVyLgotICAgICAqIEBwYXJhbSB2YWx1ZSAgICAgVGhlIHZhbHVlIHRvIHNldC4KLSAgICAgKiBA
cGFyYW0gd2VydCAgICAgVGhlIGVudGl0eSBvYmplY3QuCi0gICAgICogQHJldHVybiBUaGUgdXBk
YXRlZCBlbnRpdHkgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBadXNhdHpXZXJ0IGFkZEF0
dHJpYnV0ZVMoCi0gICAgICAgIFN0cmluZyBsS2V5LAotICAgICAgICBPYmplY3QgdmFsdWUsCi0g
ICAgICAgIFp1c2F0eldlcnQgd2VydAotICAgICkgewotICAgICAgICBTdHJpbmcgdiA9M0QgdmFs
dWUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSk7Ci0gICAgICAgIGludCBuZHggPTNEIHYuaW5kZXhP
ZigiXCIiKTsKLSAgICAgICAgU3RyaW5nIGdyb2Vzc2UgPTNEIHYuc3Vic3RyaW5nKDAsIG5keCk7
Ci0gICAgICAgIHYgPTNEIHYuc3Vic3RyaW5nKG5keCArIDIpOwotICAgICAgICBuZHggPTNEIHYu
aW5kZXhPZigiICIpOwotICAgICAgICBTdHJpbmcgdyA9M0Qgdi5zdWJzdHJpbmcoMCwgbmR4KTsK
LSAgICAgICAgdiA9M0Qgdi5zdWJzdHJpbmcobmR4ICsgMik7Ci0gICAgICAgIG5keCA9M0Qgdi5p
bmRleE9mKCIgIik7Ci0gICAgICAgIFN0cmluZyBmZWhsZXIgPTNEIHYuc3Vic3RyaW5nKG5keCAr
IDIpOwotICAgICAgICB3ZXJ0LnNldFB6c0lkKGdyb2Vzc2UpOwotICAgICAgICB3ZXJ0LnNldE1l
c3N3ZXJ0UHpzKERvdWJsZS52YWx1ZU9mKHcpKTsKLSAgICAgICAgd2VydC5zZXRNZXNzZmVobGVy
KEZsb2F0LnZhbHVlT2YoZmVobGVyKSk7Ci0gICAgICAgIHJldHVybiB3ZXJ0OwotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIHdhcm5pbmdzCi0gICAgICovCi0gICAgcHVibGlj
IExpc3Q8UmVwb3J0SXRlbT4gZ2V0V2FybmluZ3MoKSB7Ci0gICAgICAgIHJldHVybiB3YXJuaW5n
czsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHRoZSBlcnJvcnMKLSAgICAgKi8K
LSAgICBwdWJsaWMgTGlzdDxSZXBvcnRJdGVtPiBnZXRFcnJvcnMoKSB7Ci0gICAgICAgIHJldHVy
biBlcnJvcnM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVzZXQoKSB7Ci0gICAgICAgIGVy
cm9ycyA9M0QgbmV3IEFycmF5TGlzdDxSZXBvcnRJdGVtPigpOwotICAgICAgICB3YXJuaW5ncyA9
M0QgbmV3IEFycmF5TGlzdDxSZXBvcnRJdGVtPigpOwotICAgIH0KLX0KZGlmZiAtciAyMWFiNGQz
NTEzNWEgLXIgZmRjNzUyY2QxN2ZlIHNyYy9tYWluL2phdmEvZGUvaW50ZXZhdGlvbi9sYWRhL2lt
cG9yPQp0ZXIvbGFmL0VudHJ5Rm9ybWF0LmphdmEKLS0tIGEvc3JjL21haW4vamF2YS9kZS9pbnRl
dmF0aW9uL2xhZGEvaW1wb3J0ZXIvbGFmL0VudHJ5Rm9ybWF0LmphdmEJVHVlIFNlPQpwIDIwIDE2
OjAxOjAyIDIwMTYgKzAyMDAKKysrIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAg
KzAwMDAKQEAgLTEsNzQgKzAsMCBAQAotLyogQ29weXJpZ2h0IChDKSAyMDEzIGJ5IEJ1bmRlc2Ft
dCBmdWVyIFN0cmFobGVuc2NodXR6Ci0gKiBTb2Z0d2FyZSBlbmdpbmVlcmluZyBieSBJbnRldmF0
aW9uIEdtYkgKLSAqCi0gKiBUaGlzIGZpbGUgaXMgRnJlZSBTb2Z0d2FyZSB1bmRlciB0aGUgR05V
IEdQTCAodj49M0QzKQotICogYW5kIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWSEg
Q2hlY2sgb3V0Ci0gKiB0aGUgZG9jdW1lbnRhdGlvbiBjb21pbmcgd2l0aCBJTUlTLUxhYm9yZGF0
ZW4tQXBwbGljYXRpb24gZm9yIGRldGFpbHMuCi0gKi8KLXBhY2thZ2UgZGUuaW50ZXZhdGlvbi5s
YWRhLmltcG9ydGVyLmxhZjsKLQotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotCi0v
KioKLSAqIEFuIEVudHJ5Rm9ybWF0IGRlc2NyaWJlcyB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIG9m
IExBRi1iYXNlZCBrZXktdmFsdWUgPQpwYWlycy4KLSAqIFRoZSBwYXR0ZXJuIGlzIGEgcmVndWxh
ciBleHByZXNzaW9uIHVzZWQgdG8gbWF0Y2ggdGhlIHZhbHVlIGluIHRoZSBMQUYKLSAqIGltcG9y
dGVyLgotICogVGhlIGVudHJ5IGZvcm1hdHMgYXJlIGRlZmluZWQgaW4gYSBjb25maWcgZmlsZQot
ICogKHNlZSB3aWtpLWRvYzogaHR0cHM6Ly9iZnMtaW50ZXJuLmludGV2YXRpb24uZGUvU2VydmVy
L0ltcG9ydGVyKS4KLSAqCi0gKiBAYXV0aG9yIDxhIGhyZWY9M0QibWFpbHRvOnJyZW5rZXJ0QGlu
dGV2YXRpb24uZGUiPlJhaW11bmQgUmVua2VydDwvYT4KLSAqLwotcHVibGljIGNsYXNzIEVudHJ5
Rm9ybWF0Ci17Ci0gICAgcHJpdmF0ZSBTdHJpbmcga2V5OwotICAgIHByaXZhdGUgUGF0dGVybiBw
YXR0ZXJuOwotICAgIHByaXZhdGUgT2JqZWN0IGRlZmF1bHRWYWx1ZTsKLQotICAgIC8qKgotICAg
ICAqIERlZmF1bHQgY29uc3RydWN0b3IgdG8gY3JlYXRlIGEgbmV3IEVudHJ5Rm9ybWF0IG9iamVj
dC4KLSAgICAgKi8KLSAgICBwdWJsaWMgRW50cnlGb3JtYXQoKSB7Ci0gICAgfQotCi0gICAgLyoq
Ci0gICAgICogQHJldHVybiB0aGUga2V5LgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0
S2V5KCkgewotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSBrZXkgVGhlIGtleSB0byBzZXQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0S2V5
KFN0cmluZyBrZXkpIHsKLSAgICAgICAgdGhpcy5rZXkgPTNEIGtleTsKLSAgICB9Ci0KLSAgICAv
KioKLSAgICAgKiBAcmV0dXJuIHRoZSBwYXR0ZXJuCi0gICAgICovCi0gICAgcHVibGljIFBhdHRl
cm4gZ2V0UGF0dGVybigpIHsKLSAgICAgICAgcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gc2V0LgotICAgICAqLwot
ICAgIHB1YmxpYyB2b2lkIHNldFBhdHRlcm4oUGF0dGVybiBwYXR0ZXJuKSB7Ci0gICAgICAgIHRo
aXMucGF0dGVybiA9M0QgcGF0dGVybjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJu
IHRoZSBkZWZhdWx0IHZhbHVlLgotICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0RGVmYXVs
dFZhbHVlKCkgewotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIH0KLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgdGhlIGRlZmF1bHQgdmFsdWUgdG8gc2V0Lgot
ICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldERlZmF1bHRWYWx1ZShPYmplY3QgZGVmYXVsdFZh
bHVlKSB7Ci0gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0zRCBkZWZhdWx0VmFsdWU7Ci0gICAg
fQotfQpkaWZmIC1yIDIxYWI0ZDM1MTM1YSAtciBmZGM3NTJjZDE3ZmUgc3JjL21haW4vamF2YS9k
ZS9pbnRldmF0aW9uL2xhZGEvaW1wb3I9CnRlci9sYWYvTGFmRGF0YVR5cGVzLmphdmEKLS0tIC9k
ZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvc3JjL21haW4vamF2
YS9kZS9pbnRldmF0aW9uL2xhZGEvaW1wb3J0ZXIvbGFmL0xhZkRhdGFUeXBlcy5qYXZhCUZyaSBT
PQplcCAzMCAxNDowNToyOCAyMDE2ICswMjAwCkBAIC0wLDAgKzEsNjUgQEAKK3BhY2thZ2UgZGUu
aW50ZXZhdGlvbi5sYWRhLmltcG9ydGVyLmxhZjsKKworcHVibGljIGNsYXNzIExhZkRhdGFUeXBl
cyB7CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBCT09MID0zRCAiWzAxXSI7CisKKyAgICBw
dWJsaWMgc3RhdGljIFN0cmluZyBDMSA9M0QgIltcXFMgXXswLDF9IjsKKyAgICBwdWJsaWMgc3Rh
dGljIFN0cmluZyBDMiA9M0QgIltcXFMgXXswLDJ9IjsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmlu
ZyBDMyA9M0QgIltcXFMgXXswLDN9IjsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBDNCA9M0Qg
IltcXFMgXXswLDR9IjsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBDNSA9M0QgIltcXFMgXXsw
LDV9IjsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBDNiA9M0QgIltcXFMgXXswLDZ9IjsKKyAg
ICBwdWJsaWMgc3RhdGljIFN0cmluZyBDNyA9M0QgIltcXFMgXXswLDd9IjsKKyAgICBwdWJsaWMg
c3RhdGljIFN0cmluZyBDOCA9M0QgIltcXFMgXXswLDh9IjsKKyAgICBwdWJsaWMgc3RhdGljIFN0
cmluZyBDOSA9M0QgIltcXFMgXXswLDl9IjsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBDMTAg
PTNEICJbXFxTIF17MCwxMH0iOworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEMxNiA9M0QgIltc
XFMgXXswLDE2fSI7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgQzIwID0zRCAiW1xcUyBdezAs
MjB9IjsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBDMjEgPTNEICJbXFxTIF17MCwyMX0iOwor
ICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEMyMiA9M0QgIltcXFMgXXswLDIyfSI7CisgICAgcHVi
bGljIHN0YXRpYyBTdHJpbmcgQzI2ID0zRCAiW1xcUyBdezAsMjZ9IjsKKyAgICBwdWJsaWMgc3Rh
dGljIFN0cmluZyBDX1NUQVIgPTNEICJbXFxTIF17MCx9IjsKKworICAgIHB1YmxpYyBzdGF0aWMg
U3RyaW5nIFNDMSA9M0QgIlxcU3sxfSI7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgU0MyID0z
RCAiXFxTezJ9IjsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBTQzMgPTNEICJcXFN7M30iOwor
ICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFNDNCA9M0QgIlxcU3s0fSI7CisgICAgcHVibGljIHN0
YXRpYyBTdHJpbmcgU0M1ID0zRCAiXFxTezV9IjsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBT
QzYgPTNEICJcXFN7Nn0iOworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFNDNyA9M0QgIlxcU3s3
fSI7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgU0M4ID0zRCAiXFxTezh9IjsKKyAgICBwdWJs
aWMgc3RhdGljIFN0cmluZyBTQzkgPTNEICJcXFN7OX0iOworICAgIHB1YmxpYyBzdGF0aWMgU3Ry
aW5nIFNDMTAgPTNEICJcXFN7MTB9IjsKKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIE1DNTAg
PTNEICJbXlwiXXswLDUwfSI7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgTUMzMDAgPTNEICJb
XlwiXXswLDMwMH0iOworCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgSTEgPTNEICJcXGR7MCwx
fSI7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgSTIgPTNEICJcXGR7MCwyfSI7CisgICAgcHVi
bGljIHN0YXRpYyBTdHJpbmcgSTMgPTNEICJcXGR7MCwzfSI7CisgICAgcHVibGljIHN0YXRpYyBT
dHJpbmcgSTQgPTNEICJcXGR7MCw0fSI7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgSTUgPTNE
ICJcXGR7MCw1fSI7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgSTYgPTNEICJcXGR7MCw2fSI7
CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgSTcgPTNEICJcXGR7MCw3fSI7CisgICAgcHVibGlj
IHN0YXRpYyBTdHJpbmcgSTggPTNEICJcXGR7MCw4fSI7CisgICAgcHVibGljIHN0YXRpYyBTdHJp
bmcgSTkgPTNEICJcXGR7MCw5fSI7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgSTEwID0zRCAi
XFxkezAsMTB9IjsKKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEY5ICA9M0QgIjw/Wy0rXT9b
MC05XSpbLixdP1swLTldKyhbZUVdWy0rXT9bMC05XSs9Cik/IjsKKyAgICBwdWJsaWMgc3RhdGlj
IFN0cmluZyBGMTAgPTNEICI8P1stK10/WzAtOV0qWy4sXT9bMC05XSsoW2VFXVstK10/WzAtOV0r
PQopPyI7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgRjEyID0zRCAiPD9bLStdP1swLTldKlsu
LF0/WzAtOV0rKFtlRV1bLStdP1swLTldKz0KKT8iOworCisgICAgcHVibGljIHN0YXRpYyBTdHJp
bmcgU0kxID0zRCAiXFxkezF9IjsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBTSTIgPTNEICJc
XGR7Mn0iOworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFNJMyA9M0QgIlxcZHszfSI7CisgICAg
cHVibGljIHN0YXRpYyBTdHJpbmcgU0k0ID0zRCAiXFxkezR9IjsKKyAgICBwdWJsaWMgc3RhdGlj
IFN0cmluZyBTSTUgPTNEICJcXGR7NX0iOworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFNJNiA9
M0QgIlxcZHs2fSI7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgU0k3ID0zRCAiXFxkezd9IjsK
KyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBTSTggPTNEICJcXGR7OH0iOworICAgIHB1YmxpYyBz
dGF0aWMgU3RyaW5nIFNJOSA9M0QgIlxcZHs5fSI7CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmlu
ZyBEOCA9M0QgIlsxMl1bMC05XVswLTldWzAtOV1bMDFdWzAtOV1bMC0zXVswLTldIjsKKyAgICBw
dWJsaWMgc3RhdGljIFN0cmluZyBUNCA9M0QgIlswLTJdWzAtOV1bMC01XVswLTldIjsKK30KZGlm
ZiAtciAyMWFiNGQzNTEzNWEgLXIgZmRjNzUyY2QxN2ZlIHNyYy9tYWluL2phdmEvZGUvaW50ZXZh
dGlvbi9sYWRhL2ltcG9yPQp0ZXIvbGFmL0xhZkVycm9yTGlzdGVuZXIuamF2YQotLS0gL2Rldi9u
dWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9zcmMvbWFpbi9qYXZhL2Rl
L2ludGV2YXRpb24vbGFkYS9pbXBvcnRlci9sYWYvTGFmRXJyb3JMaXN0ZW5lci5qYXZhCUY9CnJp
IFNlcCAzMCAxNDowNToyOCAyMDE2ICswMjAwCkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2UgZGUu
aW50ZXZhdGlvbi5sYWRhLmltcG9ydGVyLmxhZjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxp
c3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuYW50bHIudjQucnVudGlt
ZS5CYXNlRXJyb3JMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuYW50bHIudjQucnVudGltZS5SZWNvZ25p
dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYW50bHIudjQucnVudGltZS5SZWNvZ25pemVyOwor
CitpbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLmltcG9ydGVyLlJlcG9ydEl0ZW07CisKK3B1Ymxp
YyBjbGFzcyBMYWZFcnJvckxpc3RlbmVyIGV4dGVuZHMgQmFzZUVycm9yTGlzdGVuZXIgeworICAg
IHB1YmxpYyBzdGF0aWMgTGFmRXJyb3JMaXN0ZW5lciBJTlNUQU5DRSA9M0QKKyAgICAgICAgbmV3
IExhZkVycm9yTGlzdGVuZXIoKTsKKworICAgIHByaXZhdGUgTGlzdDxSZXBvcnRJdGVtPiBlcnJv
cnMgPTNEIG5ldyBBcnJheUxpc3Q8UmVwb3J0SXRlbT4oKTsKKworICAgIEBPdmVycmlkZQorICAg
IHB1YmxpYyB2b2lkIHN5bnRheEVycm9yKFJlY29nbml6ZXI8PywgPz4gcmVjb2duaXplciwgT2Jq
ZWN0IG9mZmVuZGluZ1M9CnltYm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBs
aW5lLCBpbnQgY2hhclBvc2l0aW9uSW5MaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZyBtc2csIFJlY29nbml0aW9uRXhjZXB0aW9uIGUpCisgICAgeworICAgICAgICBTdHJp
bmcgc291cmNlTmFtZSA9M0QgZS5nZXRDdHgoKS5nZXRUZXh0KCk7CisgICAgICAgIFJlcG9ydEl0
ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICBlcnIuc2V0S2V5KHNvdXJjZU5h
bWUpOworICAgICAgICBlcnIuc2V0VmFsdWUobGluZSArICI6IiArIGNoYXJQb3NpdGlvbkluTGlu
ZSArICIgLSAiICsgZS5nZXRPZmZlbmQ9CmluZ1Rva2VuKCkuZ2V0VGV4dCgpKTsKKyAgICAgICAg
ZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgdGhpcy5lcnJvcnMuYWRkKGVycik7CisgICAgICAg
IFN5c3RlbS5lcnIucHJpbnRsbihlcnIuZ2V0S2V5KCkgKyAiIC0gIiArZXJyLmdldFZhbHVlKCkg
KyAiIC0gIiArID0KZXJyLmdldENvZGUoKSk7CisgICAgfQorCisgICAgcHVibGljIExpc3Q8UmVw
b3J0SXRlbT4gZ2V0RXJyb3JzKCkgeworICAgICAgICByZXR1cm4gdGhpcy5lcnJvcnM7CisgICAg
fQorfQpkaWZmIC1yIDIxYWI0ZDM1MTM1YSAtciBmZGM3NTJjZDE3ZmUgc3JjL21haW4vamF2YS9k
ZS9pbnRldmF0aW9uL2xhZGEvaW1wb3I9CnRlci9sYWYvTGFmRm9ybWF0LmphdmEKLS0tIGEvc3Jj
L21haW4vamF2YS9kZS9pbnRldmF0aW9uL2xhZGEvaW1wb3J0ZXIvbGFmL0xhZkZvcm1hdC5qYXZh
CVR1ZSBTZXAgPQoyMCAxNjowMTowMiAyMDE2ICswMjAwCisrKyAvZGV2L251bGwJVGh1IEphbiAw
MSAwMDowMDowMCAxOTcwICswMDAwCkBAIC0xLDk0ICswLDAgQEAKLS8qIENvcHlyaWdodCAoQykg
MjAxMyBieSBCdW5kZXNhbXQgZnVlciBTdHJhaGxlbnNjaHV0egotICogU29mdHdhcmUgZW5naW5l
ZXJpbmcgYnkgSW50ZXZhdGlvbiBHbWJICi0gKgotICogVGhpcyBmaWxlIGlzIEZyZWUgU29mdHdh
cmUgdW5kZXIgdGhlIEdOVSBHUEwgKHY+PTNEMykKLSAqIGFuZCBjb21lcyB3aXRoIEFCU09MVVRF
TFkgTk8gV0FSUkFOVFkhIENoZWNrIG91dAotICogdGhlIGRvY3VtZW50YXRpb24gY29taW5nIHdp
dGggSU1JUy1MYWJvcmRhdGVuLUFwcGxpY2F0aW9uIGZvciBkZXRhaWxzLgotICovCi1wYWNrYWdl
IGRlLmludGV2YXRpb24ubGFkYS5pbXBvcnRlci5sYWY7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhj
ZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5TdHJp
bmdSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGls
Lkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLWltcG9ydCBqYXZheC5q
c29uLkpzb247Ci1pbXBvcnQgamF2YXguanNvbi5Kc29uQXJyYXk7Ci1pbXBvcnQgamF2YXguanNv
bi5Kc29uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4Lmpzb24uSnNvbk9iamVjdDsKLWltcG9ydCBq
YXZheC5qc29uLkpzb25SZWFkZXI7Ci0KLS8qKgotICogVGhlIExBRkZvcm1hdCByZWFkcyB0aGUg
Y29uZmlnIGZpbGUKLSAqIChodHRwczovL2Jmcy1pbnRlcm4uaW50ZXZhdGlvbi5kZS9TZXJ2ZXIv
SW1wb3J0ZXIpIGFuZCBjcmVhdGVzIGZvcm1hdAotICogb2JqZWN0cyBmb3IgZWFjaCBlbnRyeS4K
LSAqCi0gKiBAYXV0aG9yIDxhIGhyZWY9M0QibWFpbHRvOnJyZW5rZXJ0QGludGV2YXRpb24uZGUi
PlJhaW11bmQgUmVua2VydDwvYT4KLSAqLwotcHVibGljIGNsYXNzIExhZkZvcm1hdAotewotICAg
IHByaXZhdGUgSnNvbk9iamVjdCBmaWxlQ29udGVudDsKLQotICAgIC8qKgotICAgICAqIFJlYWRz
IHRoZSBjb25maWcgZmlsZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBmaWxlTmFtZSAgUGF0aCB0
byB0aGUgY29uZmlnIGZpbGUuCi0gICAgICogQHJldHVybiBzdWNjZXNzCi0gICAgICovCi0gICAg
cHVibGljIGJvb2xlYW4gcmVhZENvbmZpZ0ZpbGUoU3RyaW5nIGZpbGVOYW1lKSB7Ci0gICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9M0QKLSAgICAgICAg
ICAgICAgICBMYWZGb3JtYXQuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlTmFtZSk7Ci0g
ICAgICAgICAgICBpbnQgY2g7Ci0gICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPTNE
IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICAgICAgICB3aGlsZSgoY2ggPTNEIGlucHV0U3Ry
ZWFtLnJlYWQoKSkgIT0zRCAtMSkgewotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKChj
aGFyKWNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEpzb25SZWFkZXIgcmVhZGVyID0z
RAotICAgICAgICAgICAgICAgIEpzb24uY3JlYXRlUmVhZGVyKG5ldyBTdHJpbmdSZWFkZXIoYnVp
bGRlci50b1N0cmluZygpKSk7Ci0gICAgICAgICAgICBmaWxlQ29udGVudCA9M0QgcmVhZGVyLnJl
YWRPYmplY3QoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBjYXRjaCAoSnNvbkV4Y2VwdGlvbiBqZSkgewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJu
cyBhIExpc3Qgb2YgRW50cnlGb3JtYXQgZm9yIHRoZSByZXF1ZXN0ZWQgZW50aXR5IHR5cGUuCi0g
ICAgICogVGhlIEVudGl0eSB0eXBlIGNhbiBiZSBvbmUgb2Y6Ci0gICAgICogKiAicHJvYmUiCi0g
ICAgICogKiAibWVzc3VuZyIKLSAgICAgKiAqICJvcnQiCi0gICAgICoKLSAgICAgKiBAcGFyYW0g
ZGF0YVR5cGUgVGhlIGVudGl0eSB0eXBlCi0gICAgICogQHJldHVybiBMaXN0IG9mIGVudHJ5IGZv
cm1hdHMgZGVmaW5lZCBmb3IgdGhlIHJlcXVlc3RlZCB0eXBlLgotICAgICAqLwotICAgIHB1Ymxp
YyBMaXN0PEVudHJ5Rm9ybWF0PiBnZXRGb3JtYXQoU3RyaW5nIGRhdGFUeXBlKSB7Ci0gICAgICAg
IExpc3Q8RW50cnlGb3JtYXQ+IGZvcm1hdHMgPTNEIG5ldyBMaW5rZWRMaXN0PEVudHJ5Rm9ybWF0
PigpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgSnNvbkFycmF5IGJsb2NrID0zRCBmaWxl
Q29udGVudC5nZXRKc29uQXJyYXkoZGF0YVR5cGUpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9
M0QgMDsgaSA8IGJsb2NrLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSnNvbk9iamVj
dCBqRW50cnkgPTNEIGJsb2NrLmdldEpzb25PYmplY3QoaSk7Ci0gICAgICAgICAgICAgICAgRW50
cnlGb3JtYXQgZW50cnkgPTNEIG5ldyBFbnRyeUZvcm1hdCgpOwotICAgICAgICAgICAgICAgIGVu
dHJ5LnNldEtleShqRW50cnkuZ2V0U3RyaW5nKCJrZXkiKSk7Ci0gICAgICAgICAgICAgICAgUGF0
dGVybiBwYXR0ZXJuID0zRAotICAgICAgICAgICAgICAgICAgICBQYXR0ZXJuLmNvbXBpbGUoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBqRW50cnkuZ2V0U3RyaW5nKCJyZWdleCIpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgUGF0dGVybi5NVUxUSUxJTkUpOwotICAgICAgICAgICAgICAgIGVu
dHJ5LnNldFBhdHRlcm4ocGF0dGVybik7Ci0gICAgICAgICAgICAgICAgZW50cnkuc2V0RGVmYXVs
dFZhbHVlKGpFbnRyeS5nZXQoImRlZmF1bHQiKSk7Ci0gICAgICAgICAgICAgICAgZm9ybWF0cy5h
ZGQoZW50cnkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHM7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEpzb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLXIgMjFhYjRkMzUxMzVhIC1y
IGZkYzc1MmNkMTdmZSBzcmMvbWFpbi9qYXZhL2RlL2ludGV2YXRpb24vbGFkYS9pbXBvcj0KdGVy
L2xhZi9MYWZJbXBvcnRlci5qYXZhCi0tLSBhL3NyYy9tYWluL2phdmEvZGUvaW50ZXZhdGlvbi9s
YWRhL2ltcG9ydGVyL2xhZi9MYWZJbXBvcnRlci5qYXZhCVR1ZSBTZT0KcCAyMCAxNjowMTowMiAy
MDE2ICswMjAwCisrKyBiL3NyYy9tYWluL2phdmEvZGUvaW50ZXZhdGlvbi9sYWRhL2ltcG9ydGVy
L2xhZi9MYWZJbXBvcnRlci5qYXZhCUZyaSBTZT0KcCAzMCAxNDowNToyOCAyMDE2ICswMjAwCkBA
IC0xLDk4ICsxLDc3IEBACi0vKiBDb3B5cmlnaHQgKEMpIDIwMTMgYnkgQnVuZGVzYW10IGZ1ZXIg
U3RyYWhsZW5zY2h1dHoKLSAqIFNvZnR3YXJlIGVuZ2luZWVyaW5nIGJ5IEludGV2YXRpb24gR21i
SAotICoKLSAqIFRoaXMgZmlsZSBpcyBGcmVlIFNvZnR3YXJlIHVuZGVyIHRoZSBHTlUgR1BMICh2
Pj0zRDMpCi0gKiBhbmQgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZISBDaGVjayBv
dXQKLSAqIHRoZSBkb2N1bWVudGF0aW9uIGNvbWluZyB3aXRoIElNSVMtTGFib3JkYXRlbi1BcHBs
aWNhdGlvbiBmb3IgZGV0YWlscy4KLSAqLwogcGFja2FnZSBkZS5pbnRldmF0aW9uLmxhZGEuaW1w
b3J0ZXIubGFmOwo9MjAKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEu
aW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2lt
cG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRh
cmRDaGFyc2V0czsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwu
TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwo9MjAKIGltcG9ydCBqYXZheC5pbmplY3QuSW5q
ZWN0Owo9MjAKK2ltcG9ydCBvcmcuYW50bHIudjQucnVudGltZS5BTlRMUklucHV0U3RyZWFtOwor
aW1wb3J0IG9yZy5hbnRsci52NC5ydW50aW1lLkNvbW1vblRva2VuU3RyZWFtOworaW1wb3J0IG9y
Zy5hbnRsci52NC5ydW50aW1lLnRyZWUuUGFyc2VUcmVlOworaW1wb3J0IG9yZy5hbnRsci52NC5y
dW50aW1lLnRyZWUuUGFyc2VUcmVlV2Fsa2VyOworaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9n
Z2VyOworCiBpbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLmltcG9ydGVyLkltcG9ydENvbmZpZzsK
IGltcG9ydCBkZS5pbnRldmF0aW9uLmxhZGEuaW1wb3J0ZXIuSW1wb3J0Rm9ybWF0OwogaW1wb3J0
IGRlLmludGV2YXRpb24ubGFkYS5pbXBvcnRlci5JbXBvcnRlcjsKIGltcG9ydCBkZS5pbnRldmF0
aW9uLmxhZGEuaW1wb3J0ZXIuUmVwb3J0SXRlbTsKIGltcG9ydCBkZS5pbnRldmF0aW9uLmxhZGEu
dXRpbC5hdXRoLlVzZXJJbmZvOwo9MjAKLS8qKgotICogTEFGIGltcG9ydGVyIGltcGxlbWVudHMg
SW1wb3J0ZXIgdG8gcmVhZCBMQUYgZm9ybWF0dGVkIGZpbGVzLgotICogVGhlIGltcG9ydGVyIHBh
cnNlcyB0aGUgZmlsZXMgYW5kIGV4dHJhY3RzIHByb2JlIG9iamVjdHMgYW5kIHRoZWlyIGNoaWw9
CmRyZW4KLSAqIGFuZCBwZXJzaXN0cyB0aGVtIGluIHRoZSBkYXRhYmFzZS4KLSAqCi0gKiBAYXV0
aG9yIDxhIGhyZWY9M0QibWFpbHRvOnJyZW5rZXJ0QGludGV2YXRpb24uZGUiPlJhaW11bmQgUmVu
a2VydDwvYT4KLSAqLwogQEltcG9ydENvbmZpZyhmb3JtYXQ9M0RJbXBvcnRGb3JtYXQuTEFGKQot
cHVibGljIGNsYXNzIExhZkltcG9ydGVyIGltcGxlbWVudHMgSW1wb3J0ZXIgeworcHVibGljIGNs
YXNzIExhZkltcG9ydGVyIGltcGxlbWVudHMgSW1wb3J0ZXJ7Cj0yMAotICAgIC8qKgotICAgICAq
IFRoZSBwYXJzZXIgdXNlZCBmb3IgdGhpcyBpbXBvcnRlci4KLSAgICAgKi8KICAgICBASW5qZWN0
Ci0gICAgcHJpdmF0ZSBMYWZQYXJzZXIgcGFyc2VyOworICAgIHByaXZhdGUgTG9nZ2VyIGxvZ2dl
cjsKPTIwCi0gICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBMaXN0PFJlcG9ydEl0ZW0+PiB3YXJuaW5n
czsKLSAgICBwcml2YXRlIE1hcDxTdHJpbmcsIExpc3Q8UmVwb3J0SXRlbT4+IGVycm9yczsKKyAg
ICBASW5qZWN0CisgICAgcHJpdmF0ZSBMYWZPYmplY3RNYXBwZXIgbWFwcGVyOwo9MjAKLSAgICAv
KioKLSAgICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgICAqLwotICAgIHB1YmxpYyBMYWZJ
bXBvcnRlcigpIHsKKyAgICBwcml2YXRlIE1hcDxTdHJpbmcsIExpc3Q8UmVwb3J0SXRlbT4+IGVy
cm9ycyA9M0QgbmV3IEhhc2hNYXA8U3RyaW5nLCBMPQppc3Q8UmVwb3J0SXRlbT4+KCk7CisgICAg
cHJpdmF0ZSBNYXA8U3RyaW5nLCBMaXN0PFJlcG9ydEl0ZW0+PiB3YXJuaW5ncyA9M0QgbmV3IEhh
c2hNYXA8U3RyaW5nLD0KIExpc3Q8UmVwb3J0SXRlbT4+KCk7CisKKyAgICBwdWJsaWMgdm9pZCBk
b0ltcG9ydChTdHJpbmcgbGFmU3RyaW5nLCBVc2VySW5mbyB1c2VySW5mbykgeworICAgICAgICBl
cnJvcnMgPTNEIG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxSZXBvcnRJdGVtPj4oKTsKICAgICAg
ICAgd2FybmluZ3MgPTNEIG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxSZXBvcnRJdGVtPj4oKTsK
LSAgICAgICAgZXJyb3JzID0zRCBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8UmVwb3J0SXRlbT4+
KCk7CisKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPTNEIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVh
bShsYWZTdHJpbmcuZ2V0Qnl0ZXMoU3RhPQpuZGFyZENoYXJzZXRzLlVURl84KSk7CisgICAgICAg
IHRyeSB7CisgICAgICAgICAgICBBTlRMUklucHV0U3RyZWFtIGFpcyA9M0QgbmV3IEFOVExSSW5w
dXRTdHJlYW0oaXMpOworICAgICAgICAgICAgTGFmTGV4ZXIgbGV4ZXIgPTNEIG5ldyBMYWZMZXhl
cihhaXMpOworICAgICAgICAgICAgQ29tbW9uVG9rZW5TdHJlYW0gY3RzID0zRCBuZXcgQ29tbW9u
VG9rZW5TdHJlYW0obGV4ZXIpOworICAgICAgICAgICAgTGFmUGFyc2VyIHBhcnNlciA9M0QgbmV3
IExhZlBhcnNlcihjdHMpOworICAgICAgICAgICAgTGFmRXJyb3JMaXN0ZW5lciBlcnJvckxpc3Rl
bmVyID0zRCBMYWZFcnJvckxpc3RlbmVyLklOU1RBTkNFOworICAgICAgICAgICAgcGFyc2VyLmFk
ZEVycm9yTGlzdGVuZXIoZXJyb3JMaXN0ZW5lcik7CisgICAgICAgICAgICBQYXJzZVRyZWUgdHJl
ZSA9M0QgcGFyc2VyLnByb2JlbmRhdGVpKCk7CisgICAgICAgICAgICBMYWZPYmplY3RMaXN0ZW5l
ciBsaXN0ZW5lciA9M0QgbmV3IExhZk9iamVjdExpc3RlbmVyKCk7CisgICAgICAgICAgICBQYXJz
ZVRyZWVXYWxrZXIgd2Fsa2VyID0zRCBuZXcgUGFyc2VUcmVlV2Fsa2VyKCk7CisgICAgICAgICAg
ICB3YWxrZXIud2FsayhsaXN0ZW5lciwgdHJlZSk7CisgICAgICAgICAgICBsb2dnZXIuZGVidWco
IlBhcnNlZCBQcm9iZW46ICIgKyBsaXN0ZW5lci5nZXREYXRhKCkuY291bnQoKSk7CisgICAgICAg
ICAgICBlcnJvcnMucHV0KCJwYXJzZXIiLCBlcnJvckxpc3RlbmVyLmdldEVycm9ycygpKTsKKyAg
ICAgICAgICAgIGVycm9ycy5wdXRBbGwobGlzdGVuZXIuZ2V0RXJyb3JzKCkpOworICAgICAgICAg
ICAgbWFwcGVyLm1hcE9iamVjdHMobGlzdGVuZXIuZ2V0RGF0YSgpKTsKKyAgICAgICAgfSBjYXRj
aCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBj
YXRjaCBibG9jaworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQog
ICAgIH0KPTIwCi0gICAgLyoqCi0gICAgICogQHJldHVybiB0aGUgd2FybmluZ3MKLSAgICAgKi8K
KyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCByZXNldCgpIHsKKworICAgIH0KKwogICAg
IEBPdmVycmlkZQogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBMaXN0PFJlcG9ydEl0ZW0+PiBnZXRX
YXJuaW5ncygpIHsKLSAgICAgICAgcmV0dXJuIHdhcm5pbmdzOworICAgICAgICByZXR1cm4gdGhp
cy5lcnJvcnM7CiAgICAgfQo9MjAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHRoZSBlcnJvcnMK
LSAgICAgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgTWFwPFN0cmluZywgTGlzdDxSZXBv
cnRJdGVtPj4gZ2V0RXJyb3JzKCkgewotICAgICAgICByZXR1cm4gZXJyb3JzOwotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIFJlc2V0IHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzLiBVc2UgdGhpcyBi
ZWZvcmUgY2FsbGluZyBkb0ltcG9ydCgpCi0gICAgICogdG8gaGF2ZSBhIGNsZWFuIGVycm9yIGFu
ZCB3YXJuaW5nIHJlcG9ydC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9p
ZCByZXNldCgpIHsKLSAgICAgICAgcGFyc2VyLnJlc2V0KCk7Ci0gICAgICAgIHdhcm5pbmdzID0z
RCBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8UmVwb3J0SXRlbT4+KCk7Ci0gICAgICAgIGVycm9y
cyA9M0QgbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PFJlcG9ydEl0ZW0+PigpOwotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIFN0YXJ0IHRoZSBpbXBvcnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0g
Y29udGVudCAgIFRoZSBsYWYgZGF0YSBhcyBzdHJpbmcuCi0gICAgICogQHBhcmFtIHVzZXJJbmZv
ICBUaGUgdXNlciBpbmZvcm1hdGlvbi4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgdm9pZCBkb0ltcG9ydChTdHJpbmcgY29udGVudCwgVXNlckluZm8gdXNlckluZm8pIHsKLSAg
ICAgICAgdGhpcy53YXJuaW5ncy5jbGVhcigpOwotICAgICAgICB0aGlzLmVycm9ycy5jbGVhcigp
OwotICAgICAgICB0aGlzLnBhcnNlci5yZXNldCgpOwotICAgICAgICBib29sZWFuIHN1Y2Nlc3Mg
PTNEIHBhcnNlci5wYXJzZSh1c2VySW5mbywgY29udGVudCk7Ci0gICAgICAgIGlmICghc3VjY2Vz
cykgewotICAgICAgICAgICAgICAgIExpc3Q8UmVwb3J0SXRlbT4gcmVwb3J0ID0zRCBuZXcgQXJy
YXlMaXN0PFJlcG9ydEl0ZW0+KCk7Ci0gICAgICAgICAgICAgICAgcmVwb3J0LmFkZChuZXcgUmVw
b3J0SXRlbSgicGFyc2VyIiwgIm5vIHN1Y2Nlc3MiLCA2NjApKTsKLSAgICAgICAgICAgICAgICBl
cnJvcnMucHV0KCJwYXJzZXIiLCByZXBvcnQpOwotICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1
dCgicGFyc2VyIiwgbmV3IEFycmF5TGlzdDxSZXBvcnRJdGVtPigpKTsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLndhcm5pbmdzLnB1dEFsbCh0aGlzLnBhcnNlci5nZXRXYXJuaW5ncygpKTsKLSAg
ICAgICAgdGhpcy5lcnJvcnMucHV0QWxsKHRoaXMucGFyc2VyLmdldEVycm9ycygpKTsKKyAgICAg
ICAgcmV0dXJuIHRoaXMud2FybmluZ3M7CiAgICAgfQogfQpkaWZmIC1yIDIxYWI0ZDM1MTM1YSAt
ciBmZGM3NTJjZDE3ZmUgc3JjL21haW4vamF2YS9kZS9pbnRldmF0aW9uL2xhZGEvaW1wb3I9CnRl
ci9sYWYvTGFmT2JqZWN0TGlzdGVuZXIuamF2YQotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6
MDA6MDAgMTk3MCArMDAwMAorKysgYi9zcmMvbWFpbi9qYXZhL2RlL2ludGV2YXRpb24vbGFkYS9p
bXBvcnRlci9sYWYvTGFmT2JqZWN0TGlzdGVuZXIuamF2YQk9CkZyaSBTZXAgMzAgMTQ6MDU6Mjgg
MjAxNiArMDIwMApAQCAtMCwwICsxLDI1MjYgQEAKK3BhY2thZ2UgZGUuaW50ZXZhdGlvbi5sYWRh
LmltcG9ydGVyLmxhZjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2
YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGls
Lk1hcDsKKworaW1wb3J0IG9yZy5hbnRsci52NC5ydW50aW1lLlBhcnNlclJ1bGVDb250ZXh0Owor
aW1wb3J0IG9yZy5hbnRsci52NC5ydW50aW1lLnRyZWUuRXJyb3JOb2RlOworaW1wb3J0IG9yZy5h
bnRsci52NC5ydW50aW1lLnRyZWUuVGVybWluYWxOb2RlOworCitpbXBvcnQgZGUuaW50ZXZhdGlv
bi5sYWRhLmltcG9ydGVyLlJlcG9ydEl0ZW07CisKK3B1YmxpYyBjbGFzcyBMYWZPYmplY3RMaXN0
ZW5lciBleHRlbmRzIExhZkJhc2VMaXN0ZW5lciB7CisKKyAgICBMYWZSYXdEYXRhIGRhdGE7Cisg
ICAgTGFmUmF3RGF0YS5Qcm9iZSBjdXJyZW50UHJvYmU7CisgICAgTGFmUmF3RGF0YS5NZXNzdW5n
IGN1cnJlbnRNZXNzdW5nOworICAgIE1hcDxTdHJpbmcsIExpc3Q8UmVwb3J0SXRlbT4+IGVycm9y
czsKKyAgICBMaXN0PFJlcG9ydEl0ZW0+IGN1cnJlbnRFcnJvcnM7CisKKyAgICBwdWJsaWMgTGFm
T2JqZWN0TGlzdGVuZXIoKSB7CisgICAgICAgIGRhdGEgPTNEIG5ldyBMYWZSYXdEYXRhKCk7Cisg
ICAgICAgIGVycm9ycyA9M0QgbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PFJlcG9ydEl0ZW0+Pigp
OworICAgICAgICBjdXJyZW50RXJyb3JzID0zRCBuZXcgQXJyYXlMaXN0PFJlcG9ydEl0ZW0+KCk7
CisgICAgfQorCisgICAgcHVibGljIExhZlJhd0RhdGEgZ2V0RGF0YSgpIHsKKyAgICAgICAgcmV0
dXJuIGRhdGE7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgZXJyb3JzCisg
ICAgICovCisgICAgcHVibGljIE1hcDxTdHJpbmcsIExpc3Q8UmVwb3J0SXRlbT4+IGdldEVycm9y
cygpIHsKKyAgICAgICAgcmV0dXJuIGVycm9yczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7
QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlv
biBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBl
bnRlclByb2JlbmRhdGVpKExhZlBhcnNlci5Qcm9iZW5kYXRlaUNvbnRleHQgY3Q9CngpIHsKKyAg
ICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlbnRlcmluZyBwcm9iZS1kYXRlaSIpOworICAgIH0K
KworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBk
ZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92
ZXJyaWRlIHB1YmxpYyB2b2lkIGV4aXRQcm9iZW5kYXRlaShMYWZQYXJzZXIuUHJvYmVuZGF0ZWlD
b250ZXh0IGN0eD0KKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQor
ICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5n
LjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJFbmQoTGFmUGFy
c2VyLkVuZENvbnRleHQgY3R4KSB7CisgICAgICAgIGlmIChjdXJyZW50UHJvYmUgIT0zRCBudWxs
KSB7CisgICAgICAgICAgICBkYXRhLmFkZFByb2JlKGN1cnJlbnRQcm9iZSk7CisgICAgICAgICAg
ICBTdHJpbmcgaWRlbnRpZmllciA9M0QgY3VycmVudFByb2JlLmdldEF0dHJpYnV0ZXMoKS5nZXQo
IlBST0JFXz0KSUQiKTsKKyAgICAgICAgICAgIGlkZW50aWZpZXIgPTNEIGlkZW50aWZpZXIgPTNE
PTNEIG51bGwgPyBjdXJyZW50UHJvYmUuZ2V0QXR0cmliPQp1dGVzKCkuZ2V0KCJQUk9CRU5fTlIi
KSA6IG51bGw7CisgICAgICAgICAgICBpZGVudGlmaWVyID0zRCBpZGVudGlmaWVyID0zRD0zRCBu
dWxsID8gY3VycmVudFByb2JlLmdldEF0dHJpYj0KdXRlcygpLmdldCgiSEFVUFRQUk9CRU5fTlIi
KSA6ICJub3QgaWRlbnRpZmllZCI7CisgICAgICAgICAgICBlcnJvcnMucHV0KGlkZW50aWZpZXIs
IGN1cnJlbnRFcnJvcnMpOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5jbGVhcigpOworICAg
ICAgICAgICAgY3VycmVudFByb2JlID0zRCBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAg
LyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQg
aW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUg
cHVibGljIHZvaWQgZW50ZXJQcm9iZShMYWZQYXJzZXIuUHJvYmVDb250ZXh0IGN0eCkgeworICAg
ICAgICBpZiAoY3VycmVudE1lc3N1bmcgIT0zRCBudWxsKSB7CisgICAgICAgICAgICBjdXJyZW50
UHJvYmUuYWRkTWVzc3VuZyhjdXJyZW50TWVzc3VuZyk7CisgICAgICAgICAgICBjdXJyZW50TWVz
c3VuZyA9M0QgbnVsbDsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50UHJvYmUgPTNEIGRhdGEu
bmV3IFByb2JlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAg
ICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwv
cD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZXhpdFByb2JlKExhZlBhcnNl
ci5Qcm9iZUNvbnRleHQgY3R4KSB7CisgICAgICAgIGRhdGEuYWRkUHJvYmUoY3VycmVudFByb2Jl
KTsKKyAgICAgICAgU3RyaW5nIGlkZW50aWZpZXIgPTNEIGN1cnJlbnRQcm9iZS5nZXRBdHRyaWJ1
dGVzKCkuZ2V0KCJQUk9CRV9JRCIpOworICAgICAgICBpZGVudGlmaWVyID0zRCBpZGVudGlmaWVy
ID0zRD0zRCBudWxsID8gY3VycmVudFByb2JlLmdldEF0dHJpYnV0ZXM9CigpLmdldCgiUFJPQkVO
X05SIikgOiBudWxsOworICAgICAgICBpZGVudGlmaWVyID0zRCBpZGVudGlmaWVyID0zRD0zRCBu
dWxsID8gY3VycmVudFByb2JlLmdldEF0dHJpYnV0ZXM9CigpLmdldCgiSEFVUFRQUk9CRU5fTlIi
KSA6ICJub3QgaWRlbnRpZmllZCI7CisgICAgICAgIGVycm9ycy5wdXQoaWRlbnRpZmllciwgY3Vy
cmVudEVycm9ycyk7CisgICAgICAgIGN1cnJlbnRFcnJvcnMuY2xlYXIoKTsKKyAgICAgICAgY3Vy
cmVudFByb2JlID0zRCBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERv
Y30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90
aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyRGIoTGFm
UGFyc2VyLkRiQ29udGV4dCBjdHgpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVy
aXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2Vz
IG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclVz
KExhZlBhcnNlci5Vc0NvbnRleHQgY3R4KSB7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bp
bmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24g
ZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50
ZXJNcChMYWZQYXJzZXIuTXBDb250ZXh0IGN0eCkgeworICAgIH0KKworICAgIC8qKgorICAgICAq
IHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0
aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lk
IGVudGVyVWIoTGFmUGFyc2VyLlViQ29udGV4dCBjdHgpIHsKKyAgICB9CisKKyAgICAvKioKKyAg
ICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMg
dm9pZCBlbnRlclJlaShMYWZQYXJzZXIuUmVpQ29udGV4dCBjdHgpIHsKKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBw
dWJsaWMgdm9pZCBlbnRlclBoKExhZlBhcnNlci5QaENvbnRleHQgY3R4KSB7CisgICAgfQorCisg
ICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1
bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJp
ZGUgcHVibGljIHZvaWQgZW50ZXJQZyhMYWZQYXJzZXIuUGdDb250ZXh0IGN0eCkgeworICAgIH0K
KworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBk
ZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92
ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyUGsoTGFmUGFyc2VyLlBrQ29udGV4dCBjdHgpIHsKKyAg
ICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5U
aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAg
IEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclpiKExhZlBhcnNlci5aYkNvbnRleHQgY3R4KSB7
CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICog
PHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8K
KyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJQemIoTGFmUGFyc2VyLlB6YkNvbnRleHQg
Y3R4KSB7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisg
ICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAg
ICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJQa29tKExhZlBhcnNlci5Qa29t
Q29udGV4dCBjdHgpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9Cisg
ICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcu
PC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclNkbShMYWZQYXJz
ZXIuU2RtQ29udGV4dCBjdHgpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXRE
b2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5v
dGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclBuaChM
YWZQYXJzZXIuUG5oQ29udGV4dCBjdHgpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGlu
aGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBk
b2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRl
clVoKExhZlBhcnNlci5VaENvbnRleHQgY3R4KSB7CisgICAgfQorCisgICAgLyoqCisgICAgICog
e0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRp
b24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQg
ZXhpdFVoKExhZlBhcnNlci5VaENvbnRleHQgY3R4KSB7CisgICAgfQorCisgICAgLyoqCisgICAg
ICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50
YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZv
aWQgZW50ZXJVZyhMYWZQYXJzZXIuVWdDb250ZXh0IGN0eCkgeworICAgIH0KKworICAgIC8qKgor
ICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1Ymxp
YyB2b2lkIGVudGVyVWsoTGFmUGFyc2VyLlVrQ29udGV4dCBjdHgpIHsKKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBw
dWJsaWMgdm9pZCBlbnRlck1lc3N1bmcoTGFmUGFyc2VyLk1lc3N1bmdDb250ZXh0IGN0eCkgewor
ICAgICAgICBpZiAoY3VycmVudE1lc3N1bmcgIT0zRCBudWxsKSB7CisgICAgICAgICAgICBjdXJy
ZW50UHJvYmUuYWRkTWVzc3VuZyhjdXJyZW50TWVzc3VuZyk7CisgICAgICAgIH0KKyAgICAgICAg
Y3VycmVudE1lc3N1bmcgPTNEIGRhdGEubmV3IE1lc3N1bmcoKTsKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBs
ZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJs
aWMgdm9pZCBleGl0TWVzc3VuZyhMYWZQYXJzZXIuTWVzc3VuZ0NvbnRleHQgY3R4KSB7CisgICAg
ICAgIGN1cnJlbnRQcm9iZS5hZGRNZXNzdW5nKGN1cnJlbnRNZXNzdW5nKTsKKyAgICAgICAgY3Vy
cmVudE1lc3N1bmcgPTNEIG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0
RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBu
b3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJNbShM
YWZQYXJzZXIuTW1Db250ZXh0IGN0eCkgeworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5o
ZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRv
ZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVy
TXcoTGFmUGFyc2VyLk13Q29udGV4dCBjdHgpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7
QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlv
biBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBl
bnRlclBuKExhZlBhcnNlci5QbkNvbnRleHQgY3R4KSB7CisgICAgfQorCisgICAgLyoqCisgICAg
ICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50
YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZv
aWQgZW50ZXJVZWJlcnRyYWd1bmdzZm9ybWF0KExhZlBhcnNlci5VZWJlcnRyYWd1bmdzPQpmb3Jt
YXRDb250ZXh0IGN0eCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxk
KDApICsgIjogIiArIGN0eC5nZXRDaGlsZCgxKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICog
e0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRp
b24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQg
ZW50ZXJWZXJzaW9uKExhZlBhcnNlci5WZXJzaW9uQ29udGV4dCBjdHgpIHsKKyAgICAgICAgU3lz
dGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIgKyBjdHguZ2V0Q2hpbGQoMSkp
OworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAq
IDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICov
CisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyRGF0ZW5iYXNpcyhMYWZQYXJzZXIuRGF0
ZW5iYXNpc0NvbnRleHQgY3R4KT0KIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0
Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgLy8gVHJpbSBkb3VibGUgcW91dGVzLgorICAg
ICAgICB2YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICgh
dmFsdWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuQzYpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVt
IGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4Lmdl
dENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsK
KyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3Jz
LmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjdXJy
ZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJD
YXNlKCk9CiwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxk
KDApICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXRE
b2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5v
dGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlckRhdGVu
YmFzaXNfcyhMYWZQYXJzZXIuRGF0ZW5iYXNpc19zQ29udGV4dCA9CmN0eCkgeworICAgICAgICBT
dHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOworICAgICAgICB2YWx1
ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghdmFsdWUubWF0
Y2hlcyhMYWZEYXRhVHlwZXMuU0kyKSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNE
IG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgw
KS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAg
ICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJy
KTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFByb2Jl
LmFkZEF0dHJpYnV0ZShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpPQos
IHZhbHVlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6
ICIgKyB2YWx1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAg
ICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwv
cD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJOZXR6a2VubnVuZyhM
YWZQYXJzZXIuTmV0emtlbm51bmdDb250ZXh0IGN0PQp4KSB7CisgICAgICAgIFN0cmluZyB2YWx1
ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0zRCB2YWx1
ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVzKExhZkRh
dGFUeXBlcy5DMikpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0
SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmco
KSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgZXJyLnNl
dENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1
dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKT0KLCB2YWx1ZSk7Cisg
ICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUp
OworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAq
IDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICov
CisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyRXJ6ZXVnZXIoTGFmUGFyc2VyLkVyemV1
Z2VyQ29udGV4dCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQo
MSkudG9TdHJpbmcoKTsKKyAgICAgICAgdmFsdWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwg
IiIpOworICAgICAgICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkMyKSkgeworICAg
ICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAg
ICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVy
ci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAg
ICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY3VycmVudFByb2JlLmFkZEF0dHJpYnV0ZShjdHguZ2V0Q2hpbGQoMCku
dG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpPQosIHZhbHVlKTsKKyAgICAgICAgU3lzdGVtLm91dC5w
cmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIgKyB2YWx1ZSk7CisgICAgfQorCisgICAgLyoq
CisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1w
bGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVi
bGljIHZvaWQgZW50ZXJTdGFhdF9kZXJfbWVzc3N0ZWxsZV9sYW5nKExhZlBhcnNlci5TdGFhdF9k
PQplcl9tZXNzc3RlbGxlX2xhbmdDb250ZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcgdmFsdWUg
PTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOworICAgICAgICB2YWx1ZSA9M0QgdmFsdWUu
cmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghdmFsdWUubWF0Y2hlcyhMYWZEYXRh
VHlwZXMuQ19TVEFSKSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBv
cnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmlu
ZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBlcnIu
c2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFByb2JlLmFkZEF0dHJp
YnV0ZShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpPQosIHZhbHVlKTsK
KyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIgKyB2YWx1
ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAg
ICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAg
Ki8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJTdGFhdF9kZXJfbWVzc3N0ZWxsZV9r
dXJ6KExhZlBhcnNlci5TdGFhdF9kPQplcl9tZXNzc3RlbGxlX2t1cnpDb250ZXh0IGN0eCkgewor
ICAgICAgICBTdHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOworICAg
ICAgICB2YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICgh
dmFsdWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuQzUpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVt
IGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4Lmdl
dENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsK
KyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3Jz
LmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjdXJy
ZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJD
YXNlKCk9CiwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxk
KDApICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXRE
b2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5v
dGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclN0YWF0
X2Rlcl9tZXNzc3RlbGxlX3MoTGFmUGFyc2VyLlN0YWF0X2Rlcl89Cm1lc3NzdGVsbGVfc0NvbnRl
eHQgY3R4KSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3Ry
aW5nKCk7CisgICAgICAgIHZhbHVlID0zRCB2YWx1ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAg
ICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5TSTgpKSB7CisgICAgICAgICAg
ICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5z
ZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZh
bHVlKHZhbHVlKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBj
dXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBjdXJyZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmlu
ZygpLnRvVXBwZXJDYXNlKCk9CiwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4o
Y3R4LmdldENoaWxkKDApICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRh
dGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9p
ZCBlbnRlck1lc3NzdGVsbGUoTGFmUGFyc2VyLk1lc3NzdGVsbGVDb250ZXh0IGN0eCk9CiB7Cisg
ICAgICAgIFN0cmluZyB2YWx1ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAg
ICAgIHZhbHVlID0zRCB2YWx1ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2
YWx1ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5TQzUpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVt
IGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4Lmdl
dENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsK
KyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3Jz
LmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjdXJy
ZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJD
YXNlKCk9CiwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxk
KDApICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXRE
b2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5v
dGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlck1lc3Ns
YWJvcihMYWZQYXJzZXIuTWVzc2xhYm9yQ29udGV4dCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIHZh
bHVlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgdmFsdWUgPTNEIHZh
bHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFm
RGF0YVR5cGVzLlNDNSkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVw
b3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJp
bmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgZXJy
LnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRQcm9iZS5hZGRBdHRy
aWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKT0KLCB2YWx1ZSk7
CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFs
dWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAg
ICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAg
ICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyUHJvYmVfaWQoTGFmUGFyc2VyLlBy
b2JlX2lkQ29udGV4dCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hp
bGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgdmFsdWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwi
IiwgIiIpOworICAgICAgICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkMxNikpIHsK
KyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAg
ICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAg
ICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAg
ICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGN1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxk
KDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKT0KLCB2YWx1ZSk7CisgICAgICAgIFN5c3RlbS5v
dXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUpOworICAgIH0KKworICAg
IC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0
IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRl
IHB1YmxpYyB2b2lkIGVudGVyTWVzc3VuZ3NfaWQoTGFmUGFyc2VyLk1lc3N1bmdzX2lkQ29udGV4
dCBjdD0KeCkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0
cmluZygpOworICAgICAgICB2YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7Cisg
ICAgICAgIGlmICghdmFsdWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuSTIpKSB7CisgICAgICAgICAg
ICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5z
ZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZh
bHVlKHZhbHVlKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBj
dXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoY3VycmVudE1lc3N1bmcgPTNEPTNEIG51bGwpIHsKKyAgICAgICAgICAgIGN1
cnJlbnRNZXNzdW5nID0zRCBkYXRhLm5ldyBNZXNzdW5nKCk7CisgICAgICAgIH0KKyAgICAgICAg
Y3VycmVudE1lc3N1bmcuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRv
VXBwZXJDYXNlPQooKSwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4Lmdl
dENoaWxkKDApICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGlu
aGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBk
b2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRl
clByb2Jlbl9ucihMYWZQYXJzZXIuUHJvYmVuX25yQ29udGV4dCBjdHgpIHsKKyAgICAgICAgU3Ry
aW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgdmFsdWUg
PTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXZhbHVlLm1hdGNo
ZXMoTGFmRGF0YVR5cGVzLkkyKSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5l
dyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50
b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAg
ICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFByb2JlLmFk
ZEF0dHJpYnV0ZShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpPQosIHZh
bHVlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIg
KyB2YWx1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAq
CisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4K
KyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJIYXVwdHByb2Jlbm51bW1l
cihMYWZQYXJzZXIuSGF1cHRwcm9iZW5udW1tPQplckNvbnRleHQgY3R4KSB7CisgICAgICAgIFN0
cmluZyB2YWx1ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIHZhbHVl
ID0zRCB2YWx1ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tYXRj
aGVzKExhZkRhdGFUeXBlcy5DMjApKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0Qg
bmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDAp
LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAg
ICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIp
OzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50UHJvYmUu
YWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk9Ciwg
dmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxkKDApICsgIjog
IiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAg
ICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9w
PgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlck5lYmVucHJvYmVubnVt
bWVyKExhZlBhcnNlci5OZWJlbnByb2Jlbm51bW09CmVyQ29udGV4dCBjdHgpIHsKKyAgICAgICAg
U3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgdmFs
dWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXZhbHVlLm1h
dGNoZXMoTGFmRGF0YVR5cGVzLkM0KSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNE
IG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgw
KS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAg
ICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJy
KTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN1cnJlbnRN
ZXNzdW5nID0zRD0zRCBudWxsKSB7CisgICAgICAgICAgICBjdXJyZW50TWVzc3VuZyA9M0QgZGF0
YS5uZXcgTWVzc3VuZygpOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRNZXNzdW5nLmFkZEF0
dHJpYnV0ZShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZT0KKCksIHZhbHVl
KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIgKyB2
YWx1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisg
ICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAg
ICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJNZXNzcHJvZ3JhbW1fYyhMYWZQ
YXJzZXIuTWVzc3Byb2dyYW1tX2NDb250PQpleHQgY3R4KSB7CisgICAgICAgIFN0cmluZyB2YWx1
ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0zRCB2YWx1
ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVzKExhZkRh
dGFUeXBlcy5DX1NUQVIpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJl
cG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3Ry
aW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIGVy
ci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50UHJvYmUuYWRkQXR0
cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk9CiwgdmFsdWUp
OworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxkKDApICsgIjogIiArIHZh
bHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAg
ICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAg
ICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlck1lc3Nwcm9ncmFtbV9zKExhZlBh
cnNlci5NZXNzcHJvZ3JhbW1fc0NvbnQ9CmV4dCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVl
ID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgdmFsdWUgPTNEIHZhbHVl
LnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0
YVR5cGVzLlNDMSkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0
SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmco
KSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgZXJyLnNl
dENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1
dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKT0KLCB2YWx1ZSk7Cisg
ICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUp
OworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAq
IDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICov
CisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyTWVzc3Byb2dyYW1tX2xhbmQoTGFmUGFy
c2VyLk1lc3Nwcm9ncmFtbV9sYT0KbmRDb250ZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcgdmFs
dWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOworICAgICAgICB2YWx1ZSA9M0QgdmFs
dWUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghdmFsdWUubWF0Y2hlcyhMYWZE
YXRhVHlwZXMuQzMpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9y
dEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5n
KCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIGVyci5z
ZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50UHJvYmUuYWRkQXR0cmli
dXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk9CiwgdmFsdWUpOwor
ICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxkKDApICsgIjogIiArIHZhbHVl
KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAg
KiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAq
LworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclByb2JlbmFobWVpbnN0aXR1dGlvbihM
YWZQYXJzZXIuUHJvYmVuYWhtZWk9Cm5zdGl0dXRpb25Db250ZXh0IGN0eCkgeworICAgICAgICBT
dHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOworICAgICAgICB2YWx1
ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghdmFsdWUubWF0
Y2hlcyhMYWZEYXRhVHlwZXMuQzkpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0Qg
bmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDAp
LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAg
ICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIp
OzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50UHJvYmUu
YWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk9Ciwg
dmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxkKDApICsgIjog
IiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAg
ICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9w
PgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclByb2JlbmFydChMYWZQ
YXJzZXIuUHJvYmVuYXJ0Q29udGV4dCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0zRCBj
dHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgdmFsdWUgPTNEIHZhbHVlLnJlcGxh
Y2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0YVR5cGVz
LkMxKSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7
CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAg
ICAgICAgICAgIGVyci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2
NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFByb2JlLmFkZEF0dHJpYnV0ZShjdHgu
Z2V0Q2hpbGQoMCkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpPQosIHZhbHVlKTsKKyAgICAgICAg
U3lzdGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIgKyB2YWx1ZSk7CisgICAg
fQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhl
IGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBA
T3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJaZWl0YmFzaXMoTGFmUGFyc2VyLlplaXRiYXNpc0Nv
bnRleHQgY3R4KSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRv
U3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0zRCB2YWx1ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsK
KyAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5DX1NUQVIpKSB7CisgICAg
ICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAg
IGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJy
LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAg
ICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBjdXJyZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50
b1N0cmluZygpLnRvVXBwZXJDYXNlKCk9CiwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnBy
aW50bG4oY3R4LmdldENoaWxkKDApICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBs
ZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJs
aWMgdm9pZCBlbnRlclplaXRiYXNpc19zKExhZlBhcnNlci5aZWl0YmFzaXNfc0NvbnRleHQgY3Q9
CngpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmco
KTsKKyAgICAgICAgdmFsdWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAg
ICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0YVR5cGVzLlNJMSkpIHsKKyAgICAgICAgICAgIFJl
cG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtl
eShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUo
dmFsdWUpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJl
bnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGN1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCku
dG9VcHBlckNhc2UoKT0KLCB2YWx1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHgu
Z2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtA
aW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9u
IGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVu
dGVyU29sbF9kYXR1bV91aHJ6ZWl0X2EoTGFmUGFyc2VyLlNvbGxfZGF0dW1fdT0KaHJ6ZWl0X2FD
b250ZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcgZGF0ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRv
U3RyaW5nKCk7CisgICAgICAgIGRhdGUgPTNEIGRhdGUucmVwbGFjZUFsbCgiXCIiLCAiIik7Cisg
ICAgICAgIGlmICghZGF0ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5EOCkpIHsKKyAgICAgICAgICAg
IFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNl
dEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFs
dWUoZGF0ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3Vy
cmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgU3RyaW5nIHRpbWUgPTNEIGN0eC5nZXRDaGlsZCgzKS50b1N0cmluZygpOworICAgICAg
ICB0aW1lID0zRCB0aW1lLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXRpbWUu
bWF0Y2hlcyhMYWZEYXRhVHlwZXMuVDQpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9
M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxk
KDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHRpbWUpOworICAgICAg
ICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVy
cik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRQcm9i
ZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKT0K
LCBkYXRlICsgJyAnICsgdGltZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0
Q2hpbGQoMCkgKyAiOiAiICsgZGF0ZSArICcgJyArIHRpbWUpOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1Ymxp
YyB2b2lkIGVudGVyU29sbF9kYXR1bV91aHJ6ZWl0X2UoTGFmUGFyc2VyLlNvbGxfZGF0dW1fdT0K
aHJ6ZWl0X2VDb250ZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcgZGF0ZSA9M0QgY3R4LmdldENo
aWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIGRhdGUgPTNEIGRhdGUucmVwbGFjZUFsbCgiXCIi
LCAiIik7CisgICAgICAgIGlmICghZGF0ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5EOCkpIHsKKyAg
ICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAg
ICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBl
cnIuc2V0VmFsdWUoZGF0ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAg
ICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgU3RyaW5nIHRpbWUgPTNEIGN0eC5nZXRDaGlsZCgzKS50b1N0cmluZygp
OworICAgICAgICB0aW1lID0zRCB0aW1lLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBp
ZiAoIXRpbWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuVDQpKSB7CisgICAgICAgICAgICBSZXBvcnRJ
dGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4
LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHRpbWUp
OworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJv
cnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGN1
cnJlbnRQcm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBl
ckNhc2UoKT0KLCBkYXRlICsgJyAnICsgdGltZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRs
bihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgZGF0ZSArICcgJyArIHRpbWUpOworICAgIH0KKwor
ICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZh
dWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJy
aWRlIHB1YmxpYyB2b2lkIGVudGVyVXJzcHJ1bmdzX2RhdHVtX3VocnplaXQoTGFmUGFyc2VyLlVy
c3BydW5ncz0KX2RhdHVtX3VocnplaXRDb250ZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcgZGF0
ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIGRhdGUgPTNEIGRhdGUu
cmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghZGF0ZS5tYXRjaGVzKExhZkRhdGFU
eXBlcy5EOCkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRl
bSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7
CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUoZGF0ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29k
ZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRpbWUgPTNEIGN0eC5nZXRDaGls
ZCgzKS50b1N0cmluZygpOworICAgICAgICB0aW1lID0zRCB0aW1lLnJlcGxhY2VBbGwoIlwiIiwg
IiIpOworICAgICAgICBpZiAoIXRpbWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuVDQpKSB7CisgICAg
ICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAg
IGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJy
LnNldFZhbHVlKHRpbWUpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAg
ICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGN1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRv
U3RyaW5nKCkudG9VcHBlckNhc2UoKT0KLCBkYXRlICsgJyAnICsgdGltZSk7CisgICAgICAgIFN5
c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgZGF0ZSArICcgJyArIHRp
bWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAg
ICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAg
ICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyUHJvYmVuYWhtZV9kYXR1bV91aHJ6
ZWl0X2EoTGFmUGFyc2VyLlByb2Jlbj0KYWhtZV9kYXR1bV91aHJ6ZWl0X2FDb250ZXh0IGN0eCkg
eworICAgICAgICBTdHJpbmcgZGF0ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7Cisg
ICAgICAgIGRhdGUgPTNEIGRhdGUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICgh
ZGF0ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5EOCkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0g
ZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0
Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUoZGF0ZSk7Cisg
ICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5h
ZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5n
IHRpbWUgPTNEIGN0eC5nZXRDaGlsZCgzKS50b1N0cmluZygpOworICAgICAgICB0aW1lID0zRCB0
aW1lLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXRpbWUubWF0Y2hlcyhMYWZE
YXRhVHlwZXMuVDQpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9y
dEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5n
KCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHRpbWUpOworICAgICAgICAgICAgZXJyLnNl
dENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1
dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKT0KLCBkYXRlICsgJyAn
ICsgdGltZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAi
OiAiICsgZGF0ZSArICcgJyArIHRpbWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5o
ZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRv
ZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVy
UHJvYmVuYWhtZV9kYXR1bV91aHJ6ZWl0X2UoTGFmUGFyc2VyLlByb2Jlbj0KYWhtZV9kYXR1bV91
aHJ6ZWl0X2VDb250ZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcgZGF0ZSA9M0QgY3R4LmdldENo
aWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIGRhdGUgPTNEIGRhdGUucmVwbGFjZUFsbCgiXCIi
LCAiIik7CisgICAgICAgIGlmICghZGF0ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5EOCkpIHsKKyAg
ICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAg
ICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBl
cnIuc2V0VmFsdWUoZGF0ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAg
ICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgU3RyaW5nIHRpbWUgPTNEIGN0eC5nZXRDaGlsZCgzKS50b1N0cmluZygp
OworICAgICAgICB0aW1lID0zRCB0aW1lLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBp
ZiAoIXRpbWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuVDQpKSB7CisgICAgICAgICAgICBSZXBvcnRJ
dGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4
LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHRpbWUp
OworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJv
cnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGN1
cnJlbnRQcm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBl
ckNhc2UoKT0KLCBkYXRlICsgJyAnICsgdGltZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRs
bihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgZGF0ZSArICcgJyArIHRpbWUpOworICAgIH0KKwor
ICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZh
dWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJy
aWRlIHB1YmxpYyB2b2lkIGVudGVyVW13ZWx0YmVyZWljaF9jKExhZlBhcnNlci5VbXdlbHRiZXJl
aWNoX2NDbz0KbnRleHQgY3R4KSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9M0QgY3R4LmdldENo
aWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0zRCB2YWx1ZS5yZXBsYWNlQWxsKCJc
IiIsICIiKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5DX1NUQVIp
KSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAg
ICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAg
ICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7
CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRD
aGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk9CiwgdmFsdWUpOworICAgICAgICBTeXN0
ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxkKDApICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVm
YXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVy
cmlkZSBwdWJsaWMgdm9pZCBlbnRlclVtd2VsdGJlcmVpY2hfcyhMYWZQYXJzZXIuVW13ZWx0YmVy
ZWljaF9zQ289Cm50ZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRD
aGlsZCgxKS50b1N0cmluZygpOworICAgICAgICB2YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgi
XCIiLCAiIik7CisgICAgICAgIGlmICghdmFsdWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuU0MzKSkg
eworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAg
ICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAg
ICAgIGVyci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOwor
ICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFByb2JlLmFkZEF0dHJpYnV0ZShjdHguZ2V0Q2hp
bGQoMCkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpPQosIHZhbHVlKTsKKyAgICAgICAgU3lzdGVt
Lm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIgKyB2YWx1ZSk7CisgICAgfQorCisg
ICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1
bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJp
ZGUgcHVibGljIHZvaWQgZW50ZXJEZXNrcmlwdG9yZW4oTGFmUGFyc2VyLkRlc2tyaXB0b3JlbkNv
bnRleHQgPQpjdHgpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQoMSku
dG9TdHJpbmcoKTsKKyAgICAgICAgdmFsdWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIp
OworICAgICAgICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkMyNikpIHsKKyAgICAg
ICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAg
ZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIu
c2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAg
ICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGN1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRv
U3RyaW5nKCksIHZhbHVlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGls
ZCgwKSArICI6ICIgKyB2YWx1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0
RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBu
b3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJSZWlf
cHJvZ3JhbW1wdW5rdChMYWZQYXJzZXIuUmVpX3Byb2dyYW1tcHVuPQprdENvbnRleHQgY3R4KSB7
CisgICAgICAgIFN0cmluZyB2YWx1ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7Cisg
ICAgICAgIHZhbHVlID0zRCB2YWx1ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYg
KCF2YWx1ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5DMTApKSB7CisgICAgICAgICAgICBSZXBvcnRJ
dGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4
LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVl
KTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJy
b3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBj
dXJyZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBw
ZXJDYXNlKCk9CiwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENo
aWxkKDApICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVy
aXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2Vz
IG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclJl
aV9wcm9ncmFtbXB1bmt0Z3J1cHBlKExhZlBhcnNlci5SZWlfcHJvZ3I9CmFtbXB1bmt0Z3J1cHBl
Q29udGV4dCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQoMSku
dG9TdHJpbmcoKTsKKyAgICAgICAgdmFsdWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIp
OworICAgICAgICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkMyMSkpIHsKKyAgICAg
ICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAg
ZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIu
c2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAg
ICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGN1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRv
U3RyaW5nKCkudG9VcHBlckNhc2UoKT0KLCB2YWx1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJp
bnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUpOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1Ymxp
YyB2b2lkIGVudGVyUmVmZXJlbnpfZGF0dW1fdWhyemVpdChMYWZQYXJzZXIuUmVmZXJlbnpfZD0K
YXR1bV91aHJ6ZWl0Q29udGV4dCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIGRhdGUgPTNEIGN0eC5n
ZXRDaGlsZCgxKS50b1N0cmluZygpOworICAgICAgICBkYXRlID0zRCBkYXRlLnJlcGxhY2VBbGwo
IlwiIiwgIiIpOworICAgICAgICBpZiAoIWRhdGUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuRDgpKSB7
CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAg
ICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAg
ICAgZXJyLnNldFZhbHVlKGRhdGUpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAg
ICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIFN0cmluZyB0aW1lID0zRCBjdHguZ2V0Q2hpbGQoMykudG9TdHJp
bmcoKTsKKyAgICAgICAgdGltZSA9M0QgdGltZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAg
ICAgaWYgKCF0aW1lLm1hdGNoZXMoTGFmRGF0YVR5cGVzLlQ0KSkgeworICAgICAgICAgICAgUmVw
b3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5
KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh0
aW1lKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50
RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBjdXJyZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRv
VXBwZXJDYXNlKCk9CiwgZGF0ZSArICcgJyArIHRpbWUpOworICAgICAgICBTeXN0ZW0ub3V0LnBy
aW50bG4oY3R4LmdldENoaWxkKDApICsgIjogIiArIGRhdGUgKyAnICcgKyB0aW1lKTsKKyAgICB9
CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUg
ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBP
dmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclRlc3RkYXRlbihMYWZQYXJzZXIuVGVzdGRhdGVuQ29u
dGV4dCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9T
dHJpbmcoKTsKKyAgICAgICAgdmFsdWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOwor
ICAgICAgICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkJPT0wpKSB7CisgICAgICAg
ICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVy
ci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNl
dFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAg
ICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBjdXJyZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0
cmluZygpLnRvVXBwZXJDYXNlKCk9CiwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50
bG4oY3R4LmdldENoaWxkKDApICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAg
ICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMg
dm9pZCBlbnRlclN6ZW5hcmlvKExhZlBhcnNlci5TemVuYXJpb0NvbnRleHQgY3R4KSB7CisgICAg
ICAgIFN0cmluZyB2YWx1ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAg
IHZhbHVlID0zRCB2YWx1ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2YWx1
ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5DMjApKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVy
ciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENo
aWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFk
ZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50
UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJDYXNl
KCk9CiwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxkKDAp
ICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9
CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhp
bmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclNla19kYXRl
bmJhc2lzKExhZlBhcnNlci5TZWtfZGF0ZW5iYXNpc0NvbnQ9CmV4dCBjdHgpIHsKKyAgICAgICAg
U3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgdmFs
dWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXZhbHVlLm1h
dGNoZXMoTGFmRGF0YVR5cGVzLkNfU1RBUikpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJy
ID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hp
bGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAg
ICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRk
KGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRQ
cm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2Uo
KT0KLCB2YWx1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkg
KyAiOiAiICsgdmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30K
KyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGlu
Zy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyU2VrX2RhdGVu
YmFzaXNfcyhMYWZQYXJzZXIuU2VrX2RhdGVuYmFzaXNfcz0KQ29udGV4dCBjdHgpIHsKKyAgICAg
ICAgU3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAg
dmFsdWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXZhbHVl
Lm1hdGNoZXMoTGFmRGF0YVR5cGVzLlNJMikpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJy
ID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hp
bGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAg
ICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRk
KGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRQ
cm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2Uo
KT0KLCB2YWx1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkg
KyAiOiAiICsgdmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30K
KyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGlu
Zy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyVV9oZXJrdW5m
dHNsYW5kX2xhbmcoTGFmUGFyc2VyLlVfaGVya3VuZnRzbD0KYW5kX2xhbmdDb250ZXh0IGN0eCkg
eworICAgICAgICBTdHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOwor
ICAgICAgICB2YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlm
ICghdmFsdWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuQ19TVEFSKSkgeworICAgICAgICAgICAgUmVw
b3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5
KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh2
YWx1ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVu
dEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgLy8gVE9ETzogQWRkIHRvICJ1cnNwcnVuZ3NvcnQiCisgICAgICAgIC8vY3VycmVudFByb2Jl
LmFkZEF0dHJpYnV0ZShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZT0KKCks
IHZhbHVlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6
ICIgKyB2YWx1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAg
ICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwv
cD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJVX2hlcmt1bmZ0c2xh
bmRfa3VyeihMYWZQYXJzZXIuVV9oZXJrdW5mdHNsPQphbmRfa3VyekNvbnRleHQgY3R4KSB7Cisg
ICAgICAgIFN0cmluZyB2YWx1ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAg
ICAgIHZhbHVlID0zRCB2YWx1ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2
YWx1ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5DNSkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0g
ZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0
Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFsdWUpOwor
ICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMu
YWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFRP
RE86IEFkZCB0byAidXJzcHJ1bmdzb3J0IgorICAgICAgICAvL2N1cnJlbnRQcm9iZS5hZGRBdHRy
aWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2U9CigpLCB2YWx1ZSk7
CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFs
dWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAg
ICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAg
ICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyVV9oZXJrdW5mdHNsYW5kX3MoTGFm
UGFyc2VyLlVfaGVya3VuZnRzbGFuZD0KX3NDb250ZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcg
dmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOworICAgICAgICB2YWx1ZSA9M0Qg
dmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghdmFsdWUubWF0Y2hlcyhM
YWZEYXRhVHlwZXMuU0k4KSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBS
ZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0
cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBl
cnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogQWRkIHRvICJ1
cnNwcnVuZ3NvcnQiCisgICAgICAgIC8vY3VycmVudFByb2JlLmFkZEF0dHJpYnV0ZShjdHguZ2V0
Q2hpbGQoMCkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZT0KKCksIHZhbHVlKTsKKyAgICAgICAgU3lz
dGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIgKyB2YWx1ZSk7CisgICAgfQor
CisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRl
ZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3Zl
cnJpZGUgcHVibGljIHZvaWQgZW50ZXJVX2dlbWVpbmRlc2NobHVlc3NlbChMYWZQYXJzZXIuVV9n
ZW1laW5kZXNjPQpobHVlc3NlbENvbnRleHQgY3R4KSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9
M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0zRCB2YWx1ZS5y
ZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVzKExhZkRhdGFU
eXBlcy5JOCkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRl
bSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7
CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgZXJyLnNldENv
ZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFRPRE86IEFkZCB0byAidXJzcHJ1bmdz
b3J0IgorICAgICAgICAvL2N1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDAp
LnRvU3RyaW5nKCkudG9VcHBlckNhc2U9CigpLCB2YWx1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQu
cHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUpOworICAgIH0KKworICAgIC8q
KgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1
YmxpYyB2b2lkIGVudGVyVV9nZW1laW5kZW5hbWUoTGFmUGFyc2VyLlVfZ2VtZWluZGVuYW1lQ29u
dD0KZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50
b1N0cmluZygpOworICAgICAgICB2YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7
CisgICAgICAgIGlmICghdmFsdWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuQ19TVEFSKSkgeworICAg
ICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAg
ICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVy
ci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAg
ICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgLy8gVE9ETzogQWRkIHRvICJ1cnNwcnVuZ3NvcnQiCisgICAgICAgIC8v
Y3VycmVudFByb2JlLmFkZEF0dHJpYnV0ZShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKS50b1Vw
cGVyQ2FzZT0KKCksIHZhbHVlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGN0eC5nZXRD
aGlsZCgwKSArICI6ICIgKyB2YWx1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhl
cml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9l
cyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJV
X29ydHNfenVzYXR6a2VubnphaGwoTGFmUGFyc2VyLlVfb3J0c196dXNhPQp0emtlbm56YWhsQ29u
dGV4dCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9T
dHJpbmcoKTsKKyAgICAgICAgdmFsdWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOwor
ICAgICAgICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkkzKSkgeworICAgICAgICAg
ICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIu
c2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRW
YWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAg
Y3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgLy8gVE9ETzogQWRkIHRvICJ1cnNwcnVuZ3NvcnQiCisgICAgICAgIC8vY3VycmVu
dFByb2JlLmFkZEF0dHJpYnV0ZShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKS50b1VwcGVyQ2Fz
ZT0KKCksIHZhbHVlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgw
KSArICI6ICIgKyB2YWx1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9j
fQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3Ro
aW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJVX2tvb3Jk
aW5hdGVuKExhZlBhcnNlci5VX2tvb3JkaW5hdGVuQ29udGV4PQp0IGN0eCkgeworICAgICAgICBT
dHJpbmcgYXJ0ID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgYXJ0ID0z
RCBhcnQucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghYXJ0Lm1hdGNoZXMoTGFm
RGF0YVR5cGVzLkNfU1RBUikpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcg
UmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9T
dHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUoYXJ0KTsKKyAgICAgICAgICAgIGVy
ci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcga29vcmQxID0zRCBj
dHguZ2V0Q2hpbGQoMykudG9TdHJpbmcoKTsKKyAgICAgICAga29vcmQxID0zRCBrb29yZDEucmVw
bGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICgha29vcmQxLm1hdGNoZXMoTGFmRGF0YVR5
cGVzLkMyMikpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRl
bSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7
CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUoa29vcmQxKTsKKyAgICAgICAgICAgIGVyci5zZXRD
b2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcga29vcmQyID0zRCBjdHguZ2V0
Q2hpbGQoNSkudG9TdHJpbmcoKTsKKyAgICAgICAga29vcmQyID0zRCBrb29yZDIucmVwbGFjZUFs
bCgiXCIiLCAiIik7CisgICAgICAgIGlmICgha29vcmQyLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkMy
MikpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOwor
ICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAg
ICAgICAgICBlcnIuc2V0VmFsdWUoa29vcmQyKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3
MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBUT0RPOiBBZGQgdG8gInVyc3BydW5nc29ydCIK
KyAgICAgICAgLy9jdXJyZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0
cmluZygpLnRvVXBwZXJDYXNlPQooKSwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50
bG4oY3R4LmdldENoaWxkKDApICsgIjogIiArIGFydCArICIgIiArIGtvb3JkMSArICI9CiAiICsg
a29vcmQyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoK
KyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgor
ICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclVfa29vcmRpbmF0ZW5fcyhM
YWZQYXJzZXIuVV9rb29yZGluYXRlbl9zQ289Cm50ZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcg
YXJ0ID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgYXJ0ID0zRCBhcnQu
cmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghYXJ0Lm1hdGNoZXMoTGFmRGF0YVR5
cGVzLlNJMikpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRl
bSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7
CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUoYXJ0KTsKKyAgICAgICAgICAgIGVyci5zZXRDb2Rl
KDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcga29vcmQxID0zRCBjdHguZ2V0Q2hp
bGQoMykudG9TdHJpbmcoKTsKKyAgICAgICAga29vcmQxID0zRCBrb29yZDEucmVwbGFjZUFsbCgi
XCIiLCAiIik7CisgICAgICAgIGlmICgha29vcmQxLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkMyMikp
IHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAg
ICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAg
ICAgICBlcnIuc2V0VmFsdWUoa29vcmQxKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7
CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcga29vcmQyID0zRCBjdHguZ2V0Q2hpbGQoNSku
dG9TdHJpbmcoKTsKKyAgICAgICAga29vcmQyID0zRCBrb29yZDIucmVwbGFjZUFsbCgiXCIiLCAi
Iik7CisgICAgICAgIGlmICgha29vcmQyLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkMyMikpIHsKKyAg
ICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAg
ICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBl
cnIuc2V0VmFsdWUoa29vcmQyKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAg
ICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAvLyBUT0RPOiBBZGQgdG8gInVyc3BydW5nc29ydCIKKyAgICAgICAg
Ly9jdXJyZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRv
VXBwZXJDYXNlPQooKSwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4Lmdl
dENoaWxkKDApICsgIjogIiArIGFydCArICIgIiArIGtvb3JkMSArICI9CiAiICsga29vcmQyKTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8
cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLwor
ICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclVfb3J0c196dXNhdHpjb2RlKExhZlBhcnNl
ci5VX29ydHNfenVzYXR6Y289CmRlQ29udGV4dCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVl
ID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgdmFsdWUgPTNEIHZhbHVl
LnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0
YVR5cGVzLkM4KSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJ
dGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygp
KTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBlcnIuc2V0
Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogQWRkIHRvICJ1cnNwcnVu
Z3NvcnQiCisgICAgICAgIC8vY3VycmVudFByb2JlLmFkZEF0dHJpYnV0ZShjdHguZ2V0Q2hpbGQo
MCkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZT0KKCksIHZhbHVlKTsKKyAgICAgICAgU3lzdGVtLm91
dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIgKyB2YWx1ZSk7CisgICAgfQorCisgICAg
LyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQg
aW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUg
cHVibGljIHZvaWQgZW50ZXJVX29ydHNfenVzYXR6dGV4dChMYWZQYXJzZXIuVV9vcnRzX3p1c2F0
enRlPQp4dENvbnRleHQgY3R4KSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9M0QgY3R4LmdldENo
aWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0zRCB2YWx1ZS5yZXBsYWNlQWxsKCJc
IiIsICIiKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5NQzUwKSkg
eworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAg
ICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAg
ICAgIGVyci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOwor
ICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogQWRkIHRvICJ1cnNwcnVuZ3NvcnQiCisgICAg
ICAgIC8vY3VycmVudFByb2JlLmFkZEF0dHJpYnV0ZShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmco
KS50b1VwcGVyQ2FzZT0KKCksIHZhbHVlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGN0
eC5nZXRDaGlsZCgwKSArICI6ICIgKyB2YWx1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICog
e0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRp
b24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQg
ZW50ZXJVX251dHNfY29kZShMYWZQYXJzZXIuVV9udXRzX2NvZGVDb250ZXh0IGN0PQp4KSB7Cisg
ICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7Cisg
ICAgICAgIFN0cmluZyB2YWx1ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAg
ICAgIHZhbHVlID0zRCB2YWx1ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2
YWx1ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5JMTApKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVt
IGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4Lmdl
dENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsK
KyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3Jz
LmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBU
T0RPOiBBZGQgdG8gInVyc3BydW5nc29ydCIKKyAgICAgICAgLy9jdXJyZW50UHJvYmUuYWRkQXR0
cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJDYXNlPQooKSwgdmFsdWUp
OworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxkKDApICsgIjogIiArIHZh
bHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAg
ICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAg
ICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclBfaGVya3VuZnRzbGFuZF9sYW5n
KExhZlBhcnNlci5QX2hlcmt1bmZ0c2w9CmFuZF9sYW5nQ29udGV4dCBjdHgpIHsKKyAgICAgICAg
U3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgdmFs
dWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXZhbHVlLm1h
dGNoZXMoTGFmRGF0YVR5cGVzLkNfU1RBUikpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJy
ID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hp
bGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAg
ICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRk
KGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFRPRE86
IEFkZCB0byAiZW50bmFobWVvcnQiCisgICAgICAgIC8vY3VycmVudFByb2JlLmFkZEF0dHJpYnV0
ZShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZT0KKCksIHZhbHVlKTsKKyAg
ICAgICAgU3lzdGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIgKyB2YWx1ZSk7
CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICog
PHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8K
KyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJQX2hlcmt1bmZ0c2xhbmRfa3VyeihMYWZQ
YXJzZXIuUF9oZXJrdW5mdHNsPQphbmRfa3VyekNvbnRleHQgY3R4KSB7CisgICAgICAgIFN0cmlu
ZyB2YWx1ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0z
RCB2YWx1ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVz
KExhZkRhdGFUeXBlcy5DNSkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcg
UmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9T
dHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAg
ZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7Owor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFRPRE86IEFkZCB0byAi
ZW50bmFobWVvcnQiCisgICAgICAgIC8vY3VycmVudFByb2JlLmFkZEF0dHJpYnV0ZShjdHguZ2V0
Q2hpbGQoMCkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZT0KKCksIHZhbHVlKTsKKyAgICAgICAgU3lz
dGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIgKyB2YWx1ZSk7CisgICAgfQor
CisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRl
ZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3Zl
cnJpZGUgcHVibGljIHZvaWQgZW50ZXJQX2hlcmt1bmZ0c2xhbmRfcyhMYWZQYXJzZXIuUF9oZXJr
dW5mdHNsYW5kPQpfc0NvbnRleHQgY3R4KSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9M0QgY3R4
LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0zRCB2YWx1ZS5yZXBsYWNl
QWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5T
STgpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsK
KyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAg
ICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3
MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBUT0RPOiBBZGQgdG8gImVudG5haG1lb3J0Igor
ICAgICAgICAvL2N1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3Ry
aW5nKCkudG9VcHBlckNhc2U9CigpLCB2YWx1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRs
bihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVu
dGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2
b2lkIGVudGVyUF9nZW1laW5kZXNjaGx1ZXNzZWwoTGFmUGFyc2VyLlBfZ2VtZWluZGVzYz0KaGx1
ZXNzZWxDb250ZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGls
ZCgxKS50b1N0cmluZygpOworICAgICAgICB2YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIi
LCAiIik7CisgICAgICAgIGlmICghdmFsdWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuSTgpKSB7Cisg
ICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAg
ICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAg
ZXJyLnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAg
ICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAvLyBUT0RPOiBBZGQgdG8gImVudG5haG1lb3J0IgorICAgICAgICAv
L2N1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9V
cHBlckNhc2U9CigpLCB2YWx1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0
Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5o
ZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRv
ZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVy
UF9nZW1laW5kZW5hbWUoTGFmUGFyc2VyLlBfZ2VtZWluZGVuYW1lQ29udD0KZXh0IGN0eCkgewor
ICAgICAgICBTdHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOworICAg
ICAgICB2YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICgh
dmFsdWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuQ19TVEFSKSkgeworICAgICAgICAgICAgUmVwb3J0
SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0
eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh2YWx1
ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVy
cm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
Ly8gVE9ETzogQWRkIHRvICJlbnRuYWhtZW9ydCIKKyAgICAgICAgLy9jdXJyZW50UHJvYmUuYWRk
QXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJDYXNlPQooKSwgdmFs
dWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxkKDApICsgIjogIiAr
IHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoK
KyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgor
ICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclBfb3J0c196dXNhdHprZW5u
emFobChMYWZQYXJzZXIuUF9vcnRzX3p1c2E9CnR6a2VubnphaGxDb250ZXh0IGN0eCkgeworICAg
ICAgICBTdHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOworICAgICAg
ICB2YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghdmFs
dWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuSTMpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVy
ciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENo
aWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFk
ZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBUT0RP
OiBBZGQgdG8gImVudG5haG1lb3J0IgorICAgICAgICAvL2N1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1
dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2U9CigpLCB2YWx1ZSk7Cisg
ICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUp
OworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAq
IDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICov
CisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyUF9rb29yZGluYXRlbihMYWZQYXJzZXIu
UF9rb29yZGluYXRlbkNvbnRleD0KdCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIGFydCA9M0QgY3R4
LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIGFydCA9M0QgYXJ0LnJlcGxhY2VBbGwo
IlwiIiwgIiIpOworICAgICAgICBpZiAoIWFydC5tYXRjaGVzKExhZkRhdGFUeXBlcy5DX1NUQVIp
KSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAg
ICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAg
ICAgICAgZXJyLnNldFZhbHVlKGFydCk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOwor
ICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIGtvb3JkMSA9M0QgY3R4LmdldENoaWxkKDMpLnRv
U3RyaW5nKCk7CisgICAgICAgIGtvb3JkMSA9M0Qga29vcmQxLnJlcGxhY2VBbGwoIlwiIiwgIiIp
OworICAgICAgICBpZiAoIWtvb3JkMS5tYXRjaGVzKExhZkRhdGFUeXBlcy5DMjIpKSB7CisgICAg
ICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAg
IGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJy
LnNldFZhbHVlKGtvb3JkMSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAg
ICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgU3RyaW5nIGtvb3JkMiA9M0QgY3R4LmdldENoaWxkKDUpLnRvU3RyaW5n
KCk7CisgICAgICAgIGtvb3JkMiA9M0Qga29vcmQyLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAg
ICAgICBpZiAoIWtvb3JkMi5tYXRjaGVzKExhZkRhdGFUeXBlcy5DMjIpKSB7CisgICAgICAgICAg
ICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5z
ZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZh
bHVlKGtvb3JkMik7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAg
Y3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgLy8gVE9ETzogQWRkIHRvICJlbnRuYWhtZW9ydCIKKyAgICAgICAgLy9jdXJyZW50
UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJDYXNl
PQooKSwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxkKDAp
ICsgIjogIiArIGFydCArICIgIiArIGtvb3JkMSArICI9CiAiICsga29vcmQyKTsKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVm
YXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVy
cmlkZSBwdWJsaWMgdm9pZCBlbnRlclBfa29vcmRpbmF0ZW5fcyhMYWZQYXJzZXIuUF9rb29yZGlu
YXRlbl9zQ289Cm50ZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcgYXJ0ID0zRCBjdHguZ2V0Q2hp
bGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgYXJ0ID0zRCBhcnQucmVwbGFjZUFsbCgiXCIiLCAi
Iik7CisgICAgICAgIGlmICghYXJ0Lm1hdGNoZXMoTGFmRGF0YVR5cGVzLlNJMikpIHsKKyAgICAg
ICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAg
ZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIu
c2V0VmFsdWUoYXJ0KTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAg
ICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBTdHJpbmcga29vcmQxID0zRCBjdHguZ2V0Q2hpbGQoMykudG9TdHJpbmcoKTsK
KyAgICAgICAga29vcmQxID0zRCBrb29yZDEucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAg
IGlmICgha29vcmQxLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkMyMikpIHsKKyAgICAgICAgICAgIFJl
cG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtl
eShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUo
a29vcmQxKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJy
ZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBTdHJpbmcga29vcmQyID0zRCBjdHguZ2V0Q2hpbGQoNSkudG9TdHJpbmcoKTsKKyAgICAg
ICAga29vcmQyID0zRCBrb29yZDIucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICgh
a29vcmQyLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkMyMikpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0
ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHgu
Z2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUoa29vcmQy
KTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJy
b3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAv
LyBUT0RPOiBBZGQgdG8gImVudG5haG1lb3J0IgorICAgICAgICAvL2N1cnJlbnRQcm9iZS5hZGRB
dHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2U9CigpLCB2YWx1
ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsg
YXJ0ICsgIiAiICsga29vcmQxICsgIj0KICIgKyBrb29yZDIpOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1Ymxp
YyB2b2lkIGVudGVyUF9vcnRzX3p1c2F0emNvZGUoTGFmUGFyc2VyLlBfb3J0c196dXNhdHpjbz0K
ZGVDb250ZXh0IGN0eCkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgx
KS50b1N0cmluZygpOworICAgICAgICB2YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAi
Iik7CisgICAgICAgIGlmICghdmFsdWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuQzgpKSB7CisgICAg
ICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAg
IGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJy
LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAg
ICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAvLyBUT0RPOiBBZGQgdG8gImVudG5haG1lb3J0IgorICAgICAgICAvL2N1
cnJlbnRQcm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBl
ckNhc2U9CigpLCB2YWx1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hp
bGQoMCkgKyAiOiAiICsgdmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJp
dERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMg
bm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyUF9v
cnRzX3p1c2F0enRleHQoTGFmUGFyc2VyLlBfb3J0c196dXNhdHp0ZT0KeHRDb250ZXh0IGN0eCkg
eworICAgICAgICBTdHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOwor
ICAgICAgICB2YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlm
ICghdmFsdWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuTUM1MCkpIHsKKyAgICAgICAgICAgIFJlcG9y
dEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShj
dHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFs
dWUpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRF
cnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IC8vIFRPRE86IEFkZCB0byAiZW50bmFobWVvcnQiCisgICAgICAgIC8vY3VycmVudFByb2JlLmFk
ZEF0dHJpYnV0ZShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZT0KKCksIHZh
bHVlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIg
KyB2YWx1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAq
CisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4K
KyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJQX251dHNfY29kZShMYWZQ
YXJzZXIuUF9udXRzX2NvZGVDb250ZXh0IGN0PQp4KSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9
M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0zRCB2YWx1ZS5y
ZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVzKExhZkRhdGFU
eXBlcy5JMTApKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0
ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkp
OworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIGVyci5zZXRD
b2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBUT0RPOiBBZGQgdG8gImVudG5haG1l
b3J0IgorICAgICAgICAvL2N1cnJlbnRQcm9iZS5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDAp
LnRvU3RyaW5nKCkudG9VcHBlckNhc2U9CigpLCB2YWx1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQu
cHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUpOworICAgIH0KKworICAgIC8q
KgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1
YmxpYyB2b2lkIGVudGVyUF9zaXRlX2lkKExhZlBhcnNlci5QX3NpdGVfaWRDb250ZXh0IGN0eCkg
eworICAgICAgICBTdHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOwor
ICAgICAgICB2YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlm
ICghdmFsdWUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuQzgpKSB7CisgICAgICAgICAgICBSZXBvcnRJ
dGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4
LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVl
KTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJy
b3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAv
LyBUT0RPOiBBZGQgdG8gImVudG5haG1lb3J0IgorICAgICAgICAvL2N1cnJlbnRQcm9iZS5hZGRB
dHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2U9CigpLCB2YWx1
ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsg
dmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgor
ICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+Cisg
ICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyUF9zaXRlX25hbWUoTGFmUGFy
c2VyLlBfc2l0ZV9uYW1lQ29udGV4dCBjdD0KeCkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPTNE
IGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOworICAgICAgICB2YWx1ZSA9M0QgdmFsdWUucmVw
bGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghdmFsdWUubWF0Y2hlcyhMYWZEYXRhVHlw
ZXMuQ19TVEFSKSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJ
dGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygp
KTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBlcnIuc2V0
Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogQWRkIHRvICJlbnRuYWht
ZW9ydCIKKyAgICAgICAgLy9jdXJyZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgw
KS50b1N0cmluZygpLnRvVXBwZXJDYXNlPQooKSwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0
LnByaW50bG4oY3R4LmdldENoaWxkKDApICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBw
dWJsaWMgdm9pZCBlbnRlclBfaG9laGVfbm4oTGFmUGFyc2VyLlBfaG9laGVfbm5Db250ZXh0IGN0
eCk9CiB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5n
KCk7CisgICAgICAgIHZhbHVlID0zRCB2YWx1ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAg
ICAgaWYgKCF2YWx1ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5GMTApKSB7CisgICAgICAgICAgICBT
eXN0ZW0ub3V0LnByaW50bG4oIkYxMCBkb2VzIG5vdCBtYXRjaCBpbiBob2VoZV9ubiIpOworICAg
ICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAg
ICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVy
ci5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAg
ICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgLy8gVE9ETzogQWRkIHRvICJlbnRuYWhtZW9ydCIKKyAgICAgICAgLy9j
dXJyZW50UHJvYmUuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBw
ZXJDYXNlPQooKSwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENo
aWxkKDApICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVy
aXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2Vz
IG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclBf
aG9laGVfbGFuZChMYWZQYXJzZXIuUF9ob2VoZV9sYW5kQ29udGV4dCA9CmN0eCkgeworICAgICAg
ICBTdHJpbmcgdmFsdWUgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOworICAgICAgICB2
YWx1ZSA9M0QgdmFsdWUucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghdmFsdWUu
bWF0Y2hlcyhMYWZEYXRhVHlwZXMuRjEwKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmlu
dGxuKCJGMTAgZG9lcyBub3QgbWF0Y2ggaW4gaG9laGVfbGFuZCIpOworICAgICAgICAgICAgUmVw
b3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5
KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh2
YWx1ZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVu
dEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgLy8gVE9ETzogQWRkIHRvICJlbnRuYWhtZW9ydCIKKyAgICAgICAgLy9jdXJyZW50UHJvYmUu
YWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJDYXNlPQooKSwg
dmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxkKDApICsgIjog
IiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAg
ICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9w
PgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlck1laHJ6d2Vja2ZlbGQo
TGFmUGFyc2VyLk1laHJ6d2Vja2ZlbGRDb250ZXg9CnQgY3R4KSB7CisgICAgICAgIFN0cmluZyB2
YWx1ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0zRCB2
YWx1ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVzKExh
ZkRhdGFUeXBlcy5NQzMwMCkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcg
UmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9T
dHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAg
ZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7Owor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRQcm9iZS5hZGRB
dHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKT0KLCB2YWx1
ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsg
dmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgor
ICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+Cisg
ICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyTWVzc19kYXR1bV91aHJ6ZWl0
KExhZlBhcnNlci5NZXNzX2RhdHVtX3Vocj0KemVpdENvbnRleHQgY3R4KSB7CisgICAgICAgIFN0
cmluZyBkYXRlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgZGF0ZSA9
M0QgZGF0ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCFkYXRlLm1hdGNoZXMo
TGFmRGF0YVR5cGVzLkQ4KSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBS
ZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0
cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZShkYXRlKTsKKyAgICAgICAgICAgIGVy
ci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgdGltZSA9M0QgY3R4
LmdldENoaWxkKDMpLnRvU3RyaW5nKCk7CisgICAgICAgIHRpbWUgPTNEIHRpbWUucmVwbGFjZUFs
bCgiXCIiLCAiIik7CisgICAgICAgIGlmICghdGltZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5UNCkp
IHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAg
ICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAg
ICAgICBlcnIuc2V0VmFsdWUodGltZSk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOwor
ICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN1cnJlbnRNZXNzdW5nID0zRD0zRCBudWxsKSB7Cisg
ICAgICAgICAgICBjdXJyZW50TWVzc3VuZyA9M0QgZGF0YS5uZXcgTWVzc3VuZygpOworICAgICAg
ICB9CisgICAgICAgIGN1cnJlbnRNZXNzdW5nLmFkZEF0dHJpYnV0ZShjdHguZ2V0Q2hpbGQoMCku
dG9TdHJpbmcoKS50b1VwcGVyQ2FzZT0KKCksIGRhdGUgKyAnICcgKyB0aW1lKTsKKyAgICAgICAg
U3lzdGVtLm91dC5wcmludGxuKGN0eC5nZXRDaGlsZCgwKSArICI6ICIgKyBkYXRlICsgJyAnICsg
dGltZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisg
ICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAg
ICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJNZXNzemVpdF9zZWt1bmRlbihM
YWZQYXJzZXIuTWVzc3plaXRfc2VrdW5kPQplbkNvbnRleHQgY3R4KSB7CisgICAgICAgIFN0cmlu
ZyB2YWx1ZSA9M0QgY3R4LmdldENoaWxkKDEpLnRvU3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0z
RCB2YWx1ZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVz
KExhZkRhdGFUeXBlcy5JOCkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcg
UmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9T
dHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAg
ZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7Owor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChjdXJyZW50TWVzc3Vu
ZyA9M0Q9M0QgbnVsbCkgeworICAgICAgICAgICAgY3VycmVudE1lc3N1bmcgPTNEIGRhdGEubmV3
IE1lc3N1bmcoKTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50TWVzc3VuZy5hZGRBdHRyaWJ1
dGUoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2U9CigpLCB2YWx1ZSk7Cisg
ICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUp
OworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAq
IDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICov
CisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyTWVzc21ldGhvZGVfYyhMYWZQYXJzZXIu
TWVzc21ldGhvZGVfY0NvbnRleD0KdCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0zRCBj
dHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgdmFsdWUgPTNEIHZhbHVlLnJlcGxh
Y2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0YVR5cGVz
LkNfU1RBUikpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRl
bSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7
CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgZXJyLnNldENv
ZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChjdXJyZW50TWVzc3VuZyA9M0Q9M0Qg
bnVsbCkgeworICAgICAgICAgICAgY3VycmVudE1lc3N1bmcgPTNEIGRhdGEubmV3IE1lc3N1bmco
KTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50TWVzc3VuZy5hZGRBdHRyaWJ1dGUoY3R4Lmdl
dENoaWxkKDApLnRvU3RyaW5nKCkudG9VcHBlckNhc2U9CigpLCB2YWx1ZSk7CisgICAgICAgIFN5
c3RlbS5vdXQucHJpbnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUpOworICAgIH0K
KworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBk
ZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92
ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyTWVzc21ldGhvZGVfcyhMYWZQYXJzZXIuTWVzc21ldGhv
ZGVfc0NvbnRleD0KdCBjdHgpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hp
bGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgdmFsdWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwi
IiwgIiIpOworICAgICAgICBpZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0YVR5cGVzLlNDMikpIHsK
KyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAg
ICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAg
ICBlcnIuc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAg
ICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGlmIChjdXJyZW50TWVzc3VuZyA9M0Q9M0QgbnVsbCkgeworICAg
ICAgICAgICAgY3VycmVudE1lc3N1bmcgPTNEIGRhdGEubmV3IE1lc3N1bmcoKTsKKyAgICAgICAg
fQorICAgICAgICBjdXJyZW50TWVzc3VuZy5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRv
U3RyaW5nKCkudG9VcHBlckNhc2U9CigpLCB2YWx1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJp
bnRsbihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUpOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1Ymxp
YyB2b2lkIGVudGVyQmVhcmJlaXR1bmdzc3RhdHVzKExhZlBhcnNlci5CZWFyYmVpdHVuZ3NzdD0K
YXR1c0NvbnRleHQgY3R4KSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9M0QgY3R4LmdldENoaWxk
KDEpLnRvU3RyaW5nKCk7CisgICAgICAgIHZhbHVlID0zRCB2YWx1ZS5yZXBsYWNlQWxsKCJcIiIs
ICIiKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5DNCkpIHsKKyAg
ICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAg
ICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBl
cnIuc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmIChjdXJyZW50TWVzc3VuZyA9M0Q9M0QgbnVsbCkgeworICAgICAg
ICAgICAgY3VycmVudE1lc3N1bmcgPTNEIGRhdGEubmV3IE1lc3N1bmcoKTsKKyAgICAgICAgfQor
ICAgICAgICBjdXJyZW50TWVzc3VuZy5hZGRBdHRyaWJ1dGUoY3R4LmdldENoaWxkKDApLnRvU3Ry
aW5nKCkudG9VcHBlckNhc2U9CigpLCB2YWx1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRs
bihjdHguZ2V0Q2hpbGQoMCkgKyAiOiAiICsgdmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVu
dGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2
b2lkIGVudGVyUGVwX2ZsYWcoTGFmUGFyc2VyLlBlcF9mbGFnQ29udGV4dCBjdHgpIHsKKyAgICAg
ICAgU3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAg
dmFsdWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXZhbHVl
Lm1hdGNoZXMoTGFmRGF0YVR5cGVzLkJPT0wpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVy
ciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENo
aWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFk
ZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3Vy
cmVudE1lc3N1bmcgPTNEPTNEIG51bGwpIHsKKyAgICAgICAgICAgIGN1cnJlbnRNZXNzdW5nID0z
RCBkYXRhLm5ldyBNZXNzdW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudE1lc3N1bmcu
YWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJDYXNlPQooKSwg
dmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxkKDApICsgIjog
IiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAg
ICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9w
PgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlckVyZmFzc3VuZ19hYmdl
c2NobG9zc2VuKExhZlBhcnNlci5FcmZhc3N1bmc9Cl9hYmdlc2NobG9zc2VuQ29udGV4dCBjdHgp
IHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsK
KyAgICAgICAgdmFsdWUgPTNEIHZhbHVlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBp
ZiAoIXZhbHVlLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkJPT0wpKSB7CisgICAgICAgICAgICBSZXBv
cnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXko
Y3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKHZh
bHVlKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50
RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY3VycmVudE1lc3N1bmcgPTNEPTNEIG51bGwpIHsKKyAgICAgICAgICAgIGN1cnJlbnRN
ZXNzdW5nID0zRCBkYXRhLm5ldyBNZXNzdW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVu
dE1lc3N1bmcuYWRkQXR0cmlidXRlKGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpLnRvVXBwZXJD
YXNlPQooKSwgdmFsdWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3R4LmdldENoaWxk
KDApICsgIjogIiArIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXRE
b2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5v
dGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlclByb2Jl
bnp1c2F0emJlc2NocmVpYnVuZyhMYWZQYXJzZXIuUHJvYmVuenU9CnNhdHpiZXNjaHJlaWJ1bmdD
b250ZXh0IGN0eCkgeworICAgICAgICAvLyBjNyogZjEyIGM5IGY5CisgICAgICAgIFN0cmluZyBn
cm9lc3NlID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgZ3JvZXNzZSA9
M0QgZ3JvZXNzZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCFncm9lc3NlLm1h
dGNoZXMoTGFmRGF0YVR5cGVzLkNfU1RBUikpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJy
ID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hp
bGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUoZ3JvZXNzZSk7Cisg
ICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5h
ZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5n
IHdlcnQgPTNEIGN0eC5nZXRDaGlsZCgzKS50b1N0cmluZygpOworICAgICAgICB3ZXJ0ID0zRCB3
ZXJ0LnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXdlcnQubWF0Y2hlcyhMYWZE
YXRhVHlwZXMuRjEyKSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBv
cnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmlu
ZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh3ZXJ0KTsKKyAgICAgICAgICAgIGVyci5z
ZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgZWluaGVpdCA9M0QgY3R4
LmdldENoaWxkKDUpLnRvU3RyaW5nKCk7CisgICAgICAgIGVpbmhlaXQgPTNEIGVpbmhlaXQucmVw
bGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghZWluaGVpdC5tYXRjaGVzKExhZkRhdGFU
eXBlcy5DOSkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRl
bSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7
CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUoZWluaGVpdCk7CisgICAgICAgICAgICBlcnIuc2V0
Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIGZlaGxlciA9M0QgY3R4Lmdl
dENoaWxkKDcpLnRvU3RyaW5nKCk7CisgICAgICAgIGZlaGxlciA9M0QgZmVobGVyLnJlcGxhY2VB
bGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIWZlaGxlci5tYXRjaGVzKExhZkRhdGFUeXBlcy5G
OSkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOwor
ICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAg
ICAgICAgICBlcnIuc2V0VmFsdWUoZmVobGVyKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3
MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHp1c2F0endlcnQg
PTNEIG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworICAgICAgICB6dXNhdHp3ZXJ0LnB1
dCgiUFpTIiwgZ3JvZXNzZSk7CisgICAgICAgIHp1c2F0endlcnQucHV0KCJNRVNTV0VSVF9QWlMi
LCB3ZXJ0KTsKKyAgICAgICAgenVzYXR6d2VydC5wdXQoIkVJTkhFSVQiLCBlaW5oZWl0KTsKKyAg
ICAgICAgenVzYXR6d2VydC5wdXQoIk1FU1NGRUhMRVIiLCBmZWhsZXIpOworICAgICAgICBjdXJy
ZW50UHJvYmUuYWRkWnVzYXR6d2VydCh6dXNhdHp3ZXJ0KTsKKyAgICAgICAgU3lzdGVtLm91dC5w
cmludGxuKCJQWlM6ICIgKyBncm9lc3NlICsgIiBNVzogIiArIHdlcnQpOworICAgIH0KKworICAg
IC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0
IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRl
IHB1YmxpYyB2b2lkIGVudGVyUHpiX3MoTGFmUGFyc2VyLlB6Yl9zQ29udGV4dCBjdHgpIHsKKyAg
ICAgICAgLy8gc2M4KiBmMTIgc2kzIGY5CisgICAgICAgIFN0cmluZyBncm9lc3NlID0zRCBjdHgu
Z2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgZ3JvZXNzZSA9M0QgZ3JvZXNzZS5yZXBs
YWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCFncm9lc3NlLm1hdGNoZXMoTGFmRGF0YVR5
cGVzLlNDOCkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRl
bSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7
CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUoZ3JvZXNzZSk7CisgICAgICAgICAgICBlcnIuc2V0
Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHdlcnQgPTNEIGN0eC5nZXRD
aGlsZCgzKS50b1N0cmluZygpOworICAgICAgICB3ZXJ0ID0zRCB3ZXJ0LnJlcGxhY2VBbGwoIlwi
IiwgIiIpOworICAgICAgICBpZiAoIXdlcnQubWF0Y2hlcyhMYWZEYXRhVHlwZXMuRjEyKSkgewor
ICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAg
ICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAg
IGVyci5zZXRWYWx1ZSh3ZXJ0KTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAg
ICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBTdHJpbmcgZWluaGVpdCA9M0QgY3R4LmdldENoaWxkKDUpLnRvU3Ry
aW5nKCk7CisgICAgICAgIGVpbmhlaXQgPTNEIGVpbmhlaXQucmVwbGFjZUFsbCgiXCIiLCAiIik7
CisgICAgICAgIGlmICghZWluaGVpdC5tYXRjaGVzKExhZkRhdGFUeXBlcy5TSTMpKSB7CisgICAg
ICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAg
IGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJy
LnNldFZhbHVlKGVpbmhlaXQpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIFN0cmluZyBmZWhsZXIgPTNEIGN0eC5nZXRDaGlsZCg3KS50b1N0cmlu
ZygpOworICAgICAgICBmZWhsZXIgPTNEIGZlaGxlci5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAg
ICAgICAgaWYgKCFmZWhsZXIubWF0Y2hlcyhMYWZEYXRhVHlwZXMuRjkpKSB7CisgICAgICAgICAg
ICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5z
ZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZh
bHVlKGZlaGxlcik7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAg
Y3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiB6dXNhdHp3ZXJ0ID0zRCBuZXcgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4oKTsKKyAgICAgICAgenVzYXR6d2VydC5wdXQoIlBaU19JRCIsIGdyb2Vz
c2UpOworICAgICAgICB6dXNhdHp3ZXJ0LnB1dCgiTUVTU1dFUlRfUFpTIiwgd2VydCk7CisgICAg
ICAgIHp1c2F0endlcnQucHV0KCJFSU5IRUlUX0lEIiwgZWluaGVpdCk7CisgICAgICAgIHp1c2F0
endlcnQucHV0KCJNRVNTRkVITEVSIiwgZmVobGVyKTsKKyAgICAgICAgY3VycmVudFByb2JlLmFk
ZFp1c2F0endlcnQoenVzYXR6d2VydCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFpT
OiAiICsgZ3JvZXNzZSArICIgTVc6ICIgKyB3ZXJ0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRh
dGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9p
ZCBlbnRlck1lc3N3ZXJ0KExhZlBhcnNlci5NZXNzd2VydENvbnRleHQgY3R4KSB7CisgICAgICAg
IC8vIGM1MCogZjEyIGM5IGY5KioKKyAgICAgICAgTGlzdDxTdHJpbmc+IGNoaWxkcmVuID0zRCBu
ZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICAgICAgZm9yIChpbnQgaSA9M0QgMDsgaSA8IGN0
eC5nZXRDaGlsZENvdW50KCk7IGkrKykgeworICAgICAgICAgICAgaWYgKCFjdHguZ2V0Q2hpbGQo
aSkudG9TdHJpbmcoKS5zdGFydHNXaXRoKCIgIikpIHsKKyAgICAgICAgICAgICAgICBjaGlsZHJl
bi5hZGQoY3R4LmdldENoaWxkKGkpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIFN0cmluZyBncm9lc3NlID0zRCBjaGlsZHJlbi5nZXQoMSk7CisgICAgICAg
IGdyb2Vzc2UgPTNEIGdyb2Vzc2UucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICgh
Z3JvZXNzZS5tYXRjaGVzKExhZkRhdGFUeXBlcy5DX1NUQVIpKSB7CisgICAgICAgICAgICBTeXN0
ZW0ub3V0LnByaW50bG4oIm13IC0gZ3JvZXNzZTogIiArIGdyb2Vzc2UpOworICAgICAgICAgICAg
UmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0
S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1
ZShncm9lc3NlKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBj
dXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBTdHJpbmcgd2VydCA9M0QgY2hpbGRyZW4uZ2V0KDIpOworICAgICAgICB3ZXJ0ID0z
RCB3ZXJ0LnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4o
d2VydCk7CisgICAgICAgIGlmICghd2VydC5tYXRjaGVzKExhZkRhdGFUeXBlcy5GMTIpKSB7Cisg
ICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm13OiB3ZXJ0Iik7CisgICAgICAgICAgICBS
ZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRL
ZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVl
KHdlcnQpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJl
bnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIFN0cmluZyBlaW5oZWl0ID0zRCBjaGlsZHJlbi5nZXQoMyk7CisgICAgICAgIGVpbmhlaXQg
PTNEIGVpbmhlaXQucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghZWluaGVpdC5t
YXRjaGVzKExhZkRhdGFUeXBlcy5DOSkpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRs
bigibXc6IGVpbmhlaXQiKTsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVw
b3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hpbGQoMCkudG9TdHJp
bmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUoZWluaGVpdCk7CisgICAgICAgICAgICBl
cnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIGZlaGxlciA9M0Qg
bnVsbDsKKyAgICAgICAgaWYgKGN0eC5nZXRDaGlsZENvdW50KCkgPj0zRCA4KSB7CisgICAgICAg
ICAgICBmZWhsZXIgPTNEIGNoaWxkcmVuLmdldCg0KTsKKyAgICAgICAgICAgIGZlaGxlciA9M0Qg
ZmVobGVyLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICAgICAgaWYgKCFmZWhsZXIubWF0
Y2hlcyhMYWZEYXRhVHlwZXMuRjkpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4o
Im13OiBmZWhsZXIiKTsKKyAgICAgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJl
cG9ydEl0ZW0oKTsKKyAgICAgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50
b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBlcnIuc2V0VmFsdWUoZmVobGVyKTsKKyAgICAg
ICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgICAgIGN1cnJlbnRFcnJv
cnMuYWRkKGVycik7OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1lc3N3ZXJ0ID0zRCBuZXcgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKyAgICAgICAgbWVzc3dlcnQucHV0KCJNRVNTR1JPRVNT
RSIsIGdyb2Vzc2UpOworICAgICAgICBtZXNzd2VydC5wdXQoIk1FU1NXRVJUIiwgd2VydCk7Cisg
ICAgICAgIG1lc3N3ZXJ0LnB1dCgiTUVIIiwgZWluaGVpdCk7CisgICAgICAgIG1lc3N3ZXJ0LnB1
dCgiTUVTU0ZFSExFUiIsIGZlaGxlcik7CisgICAgICAgIGlmIChjdXJyZW50TWVzc3VuZyA9M0Q9
M0QgbnVsbCkgeworICAgICAgICAgICAgY3VycmVudE1lc3N1bmcgPTNEIGRhdGEubmV3IE1lc3N1
bmcoKTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50TWVzc3VuZy5hZGRNZXNzd2VydChtZXNz
d2VydCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR1JPRVNTRTogIiArIGdyb2Vzc2Ug
KyAiIE1XOiAiICsgd2VydCk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9j
fQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3Ro
aW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJNZXNzd2Vy
dF9zKExhZlBhcnNlci5NZXNzd2VydF9zQ29udGV4dCBjdHgpPQogeworICAgICAgICAvLyBzaTgg
ZjEyIHNpMyBmOSoqCisgICAgICAgIExpc3Q8U3RyaW5nPiBjaGlsZHJlbiA9M0QgbmV3IEFycmF5
TGlzdDxTdHJpbmc+KCk7CisgICAgICAgIGZvciAoaW50IGkgPTNEIDA7IGkgPCBjdHguZ2V0Q2hp
bGRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghY3R4LmdldENoaWxkKGkpLnRvU3Ry
aW5nKCkuc3RhcnRzV2l0aCgiICIpKSB7CisgICAgICAgICAgICAgICAgY2hpbGRyZW4uYWRkKGN0
eC5nZXRDaGlsZChpKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBTdHJpbmcgZ3JvZXNzZSA9M0QgY2hpbGRyZW4uZ2V0KDEpOworICAgICAgICBncm9lc3Nl
ID0zRCBncm9lc3NlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIWdyb2Vzc2Uu
bWF0Y2hlcyhMYWZEYXRhVHlwZXMuU0k4KSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIg
PTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGls
ZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZShncm9lc3NlKTsKKyAg
ICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFk
ZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcg
d2VydCA9M0QgY2hpbGRyZW4uZ2V0KDIpOworICAgICAgICB3ZXJ0ID0zRCB3ZXJ0LnJlcGxhY2VB
bGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXdlcnQubWF0Y2hlcyhMYWZEYXRhVHlwZXMuRjEy
KSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7Cisg
ICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAg
ICAgICAgIGVyci5zZXRWYWx1ZSh3ZXJ0KTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7
CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgZWluaGVpdCA9M0QgY2hpbGRyZW4uZ2V0KDMp
OworICAgICAgICBlaW5oZWl0ID0zRCBlaW5oZWl0LnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAg
ICAgICBpZiAoIWVpbmhlaXQubWF0Y2hlcyhMYWZEYXRhVHlwZXMuU0kzKSkgeworICAgICAgICAg
ICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIu
c2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRW
YWx1ZShlaW5oZWl0KTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAg
ICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBTdHJpbmcgZmVobGVyID0zRCBudWxsOworICAgICAgICBpZiAoY3R4LmdldENo
aWxkQ291bnQoKSA+PTNEIDgpIHsKKyAgICAgICAgICAgIGZlaGxlciA9M0QgY2hpbGRyZW4uZ2V0
KDQpOworICAgICAgICAgICAgZmVobGVyID0zRCBmZWhsZXIucmVwbGFjZUFsbCgiXCIiLCAiIik7
CisgICAgICAgICAgICBpZiAoIWZlaGxlci5tYXRjaGVzKExhZkRhdGFUeXBlcy5GOSkpIHsKKyAg
ICAgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAg
ICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAg
ICAgICAgICAgICBlcnIuc2V0VmFsdWUoZmVobGVyKTsKKyAgICAgICAgICAgICAgICBlcnIuc2V0
Q29kZSg2NzApOworICAgICAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBN
YXA8U3RyaW5nLCBTdHJpbmc+IG1lc3N3ZXJ0ID0zRCBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4oKTsKKyAgICAgICAgbWVzc3dlcnQucHV0KCJNRVNTR1JPRVNTRV9JRCIsIGdyb2Vzc2UpOwor
ICAgICAgICBtZXNzd2VydC5wdXQoIk1FU1NXRVJUIiwgd2VydCk7CisgICAgICAgIG1lc3N3ZXJ0
LnB1dCgiTUVIX0lEIiwgZWluaGVpdCk7CisgICAgICAgIG1lc3N3ZXJ0LnB1dCgiTUVTU0ZFSExF
UiIsIGZlaGxlcik7CisgICAgICAgIGlmIChjdXJyZW50TWVzc3VuZyA9M0Q9M0QgbnVsbCkgewor
ICAgICAgICAgICAgY3VycmVudE1lc3N1bmcgPTNEIGRhdGEubmV3IE1lc3N1bmcoKTsKKyAgICAg
ICAgfQorICAgICAgICBjdXJyZW50TWVzc3VuZy5hZGRNZXNzd2VydChtZXNzd2VydCk7CisgICAg
ICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR1JPRVNTRTogIiArIGdyb2Vzc2UgKyAiIE1XOiAiICsg
d2VydCk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisg
ICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAg
ICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJNZXNzd2VydF9pKExhZlBhcnNl
ci5NZXNzd2VydF9pQ29udGV4dCBjdHgpPQogeworICAgICAgICAvLyBDNTAqIGYxMiBjOSBmOSoq
IGY5KiogZjkqKiBjNTAqCisgICAgICAgIExpc3Q8U3RyaW5nPiBjaGlsZHJlbiA9M0QgbmV3IEFy
cmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgIGZvciAoaW50IGkgPTNEIDA7IGkgPCBjdHguZ2V0
Q2hpbGRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghY3R4LmdldENoaWxkKGkpLnRv
U3RyaW5nKCkuc3RhcnRzV2l0aCgiICIpKSB7CisgICAgICAgICAgICAgICAgY2hpbGRyZW4uYWRk
KGN0eC5nZXRDaGlsZChpKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBTdHJpbmcgZ3JvZXNzZSA9M0QgY2hpbGRyZW4uZ2V0KDEpOworICAgICAgICBncm9l
c3NlID0zRCBncm9lc3NlLnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIWdyb2Vz
c2UubWF0Y2hlcyhMYWZEYXRhVHlwZXMuQ19TVEFSKSkgeworICAgICAgICAgICAgUmVwb3J0SXRl
bSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5n
ZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZShncm9lc3Nl
KTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJy
b3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBT
dHJpbmcgd2VydCA9M0QgY2hpbGRyZW4uZ2V0KDIpOworICAgICAgICB3ZXJ0ID0zRCB3ZXJ0LnJl
cGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIXdlcnQubWF0Y2hlcyhMYWZEYXRhVHlw
ZXMuRjEyKSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVt
KCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsK
KyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh3ZXJ0KTsKKyAgICAgICAgICAgIGVyci5zZXRDb2Rl
KDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgZWluaGVpdCA9M0QgY2hpbGRyZW4u
Z2V0KDMpOworICAgICAgICBlaW5oZWl0ID0zRCBlaW5oZWl0LnJlcGxhY2VBbGwoIlwiIiwgIiIp
OworICAgICAgICBpZiAoIWVpbmhlaXQubWF0Y2hlcyhMYWZEYXRhVHlwZXMuQzkpKSB7CisgICAg
ICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAg
IGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJy
LnNldFZhbHVlKGVpbmhlaXQpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIFN0cmluZyBmZWhsZXIgPTNEIG51bGw7CisgICAgICAgIGlmIChjdHgu
Z2V0Q2hpbGRDb3VudCgpID49M0QgOCkgeworICAgICAgICAgICAgZmVobGVyID0zRCBjaGlsZHJl
bi5nZXQoNCk7CisgICAgICAgICAgICBmZWhsZXIgPTNEIGZlaGxlci5yZXBsYWNlQWxsKCJcIiIs
ICIiKTsKKyAgICAgICAgICAgIGlmICghZmVobGVyLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkY5KSkg
eworICAgICAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOwor
ICAgICAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOwor
ICAgICAgICAgICAgICAgIGVyci5zZXRWYWx1ZShmZWhsZXIpOworICAgICAgICAgICAgICAgIGVy
ci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIC8vIFRPRE86IGhhbmRsZSBhbGwgdmFsdWVzCisgICAgICAgIE1hcDxTdHJpbmcsIFN0cmlu
Zz4gbWVzc3dlcnQgPTNEIG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworICAgICAgICBt
ZXNzd2VydC5wdXQoIk1FU1NHUk9FU1NFIiwgZ3JvZXNzZSk7CisgICAgICAgIG1lc3N3ZXJ0LnB1
dCgiTUVTU1dFUlQiLCB3ZXJ0KTsKKyAgICAgICAgbWVzc3dlcnQucHV0KCJNRUgiLCBlaW5oZWl0
KTsKKyAgICAgICAgbWVzc3dlcnQucHV0KCJNRVNTRkVITEVSIiwgZmVobGVyKTsKKyAgICAgICAg
aWYgKGN1cnJlbnRNZXNzdW5nID0zRD0zRCBudWxsKSB7CisgICAgICAgICAgICBjdXJyZW50TWVz
c3VuZyA9M0QgZGF0YS5uZXcgTWVzc3VuZygpOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRN
ZXNzdW5nLmFkZE1lc3N3ZXJ0KG1lc3N3ZXJ0KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxu
KCJHUk9FU1NFOiAiICsgZ3JvZXNzZSArICIgTVc6ICIgKyB3ZXJ0KTsKKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBw
dWJsaWMgdm9pZCBlbnRlck1lc3N3ZXJ0X2coTGFmUGFyc2VyLk1lc3N3ZXJ0X2dDb250ZXh0IGN0
eCk9CiB7CisgICAgICAgIC8vIEM1MCogZjEyIGM5IGY5KiogZjkqKiBmOSoqIGMxCisgICAgICAg
IExpc3Q8U3RyaW5nPiBjaGlsZHJlbiA9M0QgbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAg
ICAgIGZvciAoaW50IGkgPTNEIDA7IGkgPCBjdHguZ2V0Q2hpbGRDb3VudCgpOyBpKyspIHsKKyAg
ICAgICAgICAgIGlmICghY3R4LmdldENoaWxkKGkpLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgiICIp
KSB7CisgICAgICAgICAgICAgICAgY2hpbGRyZW4uYWRkKGN0eC5nZXRDaGlsZChpKS50b1N0cmlu
ZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgZ3JvZXNzZSA9
M0QgY2hpbGRyZW4uZ2V0KDEpOworICAgICAgICBncm9lc3NlID0zRCBncm9lc3NlLnJlcGxhY2VB
bGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIWdyb2Vzc2UubWF0Y2hlcyhMYWZEYXRhVHlwZXMu
Q19TVEFSKSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVt
KCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsK
KyAgICAgICAgICAgIGVyci5zZXRWYWx1ZShncm9lc3NlKTsKKyAgICAgICAgICAgIGVyci5zZXRD
b2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgd2VydCA9M0QgY2hpbGRyZW4u
Z2V0KDIpOworICAgICAgICB3ZXJ0ID0zRCB3ZXJ0LnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAg
ICAgICBpZiAoIXdlcnQubWF0Y2hlcyhMYWZEYXRhVHlwZXMuRjEyKSkgeworICAgICAgICAgICAg
UmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0
S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1
ZSh3ZXJ0KTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJy
ZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBTdHJpbmcgZWluaGVpdCA9M0QgY2hpbGRyZW4uZ2V0KDMpOworICAgICAgICBlaW5oZWl0
ID0zRCBlaW5oZWl0LnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIWVpbmhlaXQu
bWF0Y2hlcyhMYWZEYXRhVHlwZXMuQzkpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9
M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxk
KDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKGVpbmhlaXQpOworICAg
ICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRk
KGVycik7OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBm
ZWhsZXIgPTNEIG51bGw7CisgICAgICAgIGlmIChjdHguZ2V0Q2hpbGRDb3VudCgpID49M0QgOCkg
eworICAgICAgICAgICAgZmVobGVyID0zRCBjaGlsZHJlbi5nZXQoNCk7CisgICAgICAgICAgICBm
ZWhsZXIgPTNEIGZlaGxlci5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgICAgIGlmICgh
ZmVobGVyLm1hdGNoZXMoTGFmRGF0YVR5cGVzLkY5KSkgeworICAgICAgICAgICAgICAgIFJlcG9y
dEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgICAgIGVyci5zZXRL
ZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGVyci5zZXRW
YWx1ZShmZWhsZXIpOworICAgICAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAg
ICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFRPRE86IGhhbmRsZSBhbGwg
dmFsdWVzCisgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWVzc3dlcnQgPTNEIG5ldyBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPigpOworICAgICAgICBtZXNzd2VydC5wdXQoIk1FU1NHUk9FU1NF
IiwgZ3JvZXNzZSk7CisgICAgICAgIG1lc3N3ZXJ0LnB1dCgiTUVTU1dFUlQiLCB3ZXJ0KTsKKyAg
ICAgICAgbWVzc3dlcnQucHV0KCJNRUgiLCBlaW5oZWl0KTsKKyAgICAgICAgbWVzc3dlcnQucHV0
KCJNRVNTRkVITEVSIiwgZmVobGVyKTsKKyAgICAgICAgaWYgKGN1cnJlbnRNZXNzdW5nID0zRD0z
RCBudWxsKSB7CisgICAgICAgICAgICBjdXJyZW50TWVzc3VuZyA9M0QgZGF0YS5uZXcgTWVzc3Vu
ZygpOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRNZXNzdW5nLmFkZE1lc3N3ZXJ0KG1lc3N3
ZXJ0KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHUk9FU1NFOiAiICsgZ3JvZXNzZSAr
ICIgTVc6ICIgKyB3ZXJ0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9
CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhp
bmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRlck1lc3N3ZXJ0
X253ZyhMYWZQYXJzZXIuTWVzc3dlcnRfbndnQ29udGV4dCA9CmN0eCkgeworICAgICAgICAvLyBD
NTAqIGYxMiBjOSBmOSoqIGYxMgorICAgICAgICAvLyBUT0RPCisgICAgfQorCisgICAgLyoqCisg
ICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVt
ZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGlj
IHZvaWQgZW50ZXJNZXNzd2VydF9ud2dfcyhMYWZQYXJzZXIuTWVzc3dlcnRfbndnX3NDb250PQpl
eHQgY3R4KSB7CisgICAgICAgIC8vIFRPRE8KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGlu
aGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBk
b2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBlbnRl
ck1lc3N3ZXJ0X253Z19pKExhZlBhcnNlci5NZXNzd2VydF9ud2dfaUNvbnQ9CmV4dCBjdHgpIHsK
KyAgICAgICAgLy8gVE9ETworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30K
KyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGlu
Zy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyTWVzc3dlcnRf
bndnX2coTGFmUGFyc2VyLk1lc3N3ZXJ0X253Z19nQ29udD0KZXh0IGN0eCkgeworICAgICAgICAv
LyBUT0RPCisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqCisg
ICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLjwvcD4KKyAg
ICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJLb21tZW50YXIoTGFmUGFyc2Vy
LktvbW1lbnRhckNvbnRleHQgY3R4KSB7CisgICAgICAgIC8vIGM1IGQ4IHQ0IG1jMzAwCisgICAg
ICAgIFN0cmluZyBtc3QgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOworICAgICAgICBt
c3QgPTNEIG1zdC5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCFtc3QubWF0Y2hl
cyhMYWZEYXRhVHlwZXMuQzUpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3
IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRv
U3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKG1zdCk7CisgICAgICAgICAgICBl
cnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQoZXJyKTs7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIGRhdGUgPTNEIGN0
eC5nZXRDaGlsZCgzKS50b1N0cmluZygpOworICAgICAgICBkYXRlID0zRCBkYXRlLnJlcGxhY2VB
bGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIWRhdGUubWF0Y2hlcyhMYWZEYXRhVHlwZXMuRDgp
KSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAg
ICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkpOworICAgICAg
ICAgICAgZXJyLnNldFZhbHVlKGRhdGUpOworICAgICAgICAgICAgZXJyLnNldENvZGUoNjcwKTsK
KyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIFN0cmluZyB0aW1lID0zRCBjdHguZ2V0Q2hpbGQoNSkudG9T
dHJpbmcoKTsKKyAgICAgICAgdGltZSA9M0QgdGltZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAg
ICAgICAgaWYgKCF0aW1lLm1hdGNoZXMoTGFmRGF0YVR5cGVzLlQ0KSkgeworICAgICAgICAgICAg
UmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0
S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1
ZSh0aW1lKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJy
ZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBTdHJpbmcgdGV4dCA9M0QgY3R4LmdldENoaWxkKDcpLnRvU3RyaW5nKCk7CisgICAgICAg
IHRleHQgPTNEIHRleHQucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlmICghdGV4dC5t
YXRjaGVzKExhZkRhdGFUeXBlcy5NQzMwMCkpIHsKKyAgICAgICAgICAgIFJlcG9ydEl0ZW0gZXJy
ID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShjdHguZ2V0Q2hp
bGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodGV4dCk7CisgICAg
ICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQo
ZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgTWFwPFN0cmlu
ZywgU3RyaW5nPiBrb21tZW50YXIgPTNEIG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwor
ICAgICAgICBrb21tZW50YXIucHV0KCJNU1RfSUQiLCBtc3QpOworICAgICAgICBrb21tZW50YXIu
cHV0KCJEQVRFIiwgZGF0ZSk7CisgICAgICAgIGtvbW1lbnRhci5wdXQoIlRJTUUiLCB0aW1lKTsK
KyAgICAgICAga29tbWVudGFyLnB1dCgiVEVYVCIsIHRleHQpOworICAgICAgICBpZiAoY3VycmVu
dE1lc3N1bmcgPTNEPTNEIG51bGwpIHsKKyAgICAgICAgICAgIGN1cnJlbnRNZXNzdW5nID0zRCBk
YXRhLm5ldyBNZXNzdW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudE1lc3N1bmcuYWRk
S29tbWVudGFyKGtvbW1lbnRhcik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiS09NTUVO
VEFSOiAiICsgdGV4dCk7CisgICAgfQorCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQor
ICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5n
LjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgZW50ZXJLb21tZW50YXJf
dChMYWZQYXJzZXIuS29tbWVudGFyX3RDb250ZXh0IGN0PQp4KSB7CisgICAgICAgIFN0cmluZyB0
ZXh0ID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgdGV4dCA9M0QgdGV4
dC5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCF0ZXh0Lm1hdGNoZXMoTGFmRGF0
YVR5cGVzLk1DMzAwKSkgeworICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBv
cnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmlu
ZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1ZSh0ZXh0KTsKKyAgICAgICAgICAgIGVyci5z
ZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGtv
bW1lbnRhciA9M0QgbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisgICAgICAgIGtvbW1l
bnRhci5wdXQoIlRFWFQiLCB0ZXh0KTsKKyAgICAgICAgaWYgKGN1cnJlbnRNZXNzdW5nID0zRD0z
RCBudWxsKSB7CisgICAgICAgICAgICBjdXJyZW50TWVzc3VuZyA9M0QgZGF0YS5uZXcgTWVzc3Vu
ZygpOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRNZXNzdW5nLmFkZEtvbW1lbnRhcihrb21t
ZW50YXIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIktPTU1FTlRBUjogIiArIHRleHQp
OworICAgIH0KKworICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAq
IDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICov
CisgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGVudGVyUHJvYmVua29tbWVudGFyKExhZlBhcnNl
ci5Qcm9iZW5rb21tZW50YXJDbz0KbnRleHQgY3R4KSB7CisgICAgICAgIC8vIGM1IGQ4IHQ0IG1j
MzAwCisgICAgICAgIFN0cmluZyBtc3QgPTNEIGN0eC5nZXRDaGlsZCgxKS50b1N0cmluZygpOwor
ICAgICAgICBtc3QgPTNEIG1zdC5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAgICAgaWYgKCFt
c3QubWF0Y2hlcyhMYWZEYXRhVHlwZXMuQzUpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVy
ciA9M0QgbmV3IFJlcG9ydEl0ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENo
aWxkKDApLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXJyLnNldFZhbHVlKG1zdCk7CisgICAg
ICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVycm9ycy5hZGQo
ZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIGRh
dGUgPTNEIGN0eC5nZXRDaGlsZCgzKS50b1N0cmluZygpOworICAgICAgICBkYXRlID0zRCBkYXRl
LnJlcGxhY2VBbGwoIlwiIiwgIiIpOworICAgICAgICBpZiAoIWRhdGUubWF0Y2hlcyhMYWZEYXRh
VHlwZXMuRDgpKSB7CisgICAgICAgICAgICBSZXBvcnRJdGVtIGVyciA9M0QgbmV3IFJlcG9ydEl0
ZW0oKTsKKyAgICAgICAgICAgIGVyci5zZXRLZXkoY3R4LmdldENoaWxkKDApLnRvU3RyaW5nKCkp
OworICAgICAgICAgICAgZXJyLnNldFZhbHVlKGRhdGUpOworICAgICAgICAgICAgZXJyLnNldENv
ZGUoNjcwKTsKKyAgICAgICAgICAgIGN1cnJlbnRFcnJvcnMuYWRkKGVycik7OworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFN0cmluZyB0aW1lID0zRCBjdHguZ2V0Q2hp
bGQoNSkudG9TdHJpbmcoKTsKKyAgICAgICAgdGltZSA9M0QgdGltZS5yZXBsYWNlQWxsKCJcIiIs
ICIiKTsKKyAgICAgICAgaWYgKCF0aW1lLm1hdGNoZXMoTGFmRGF0YVR5cGVzLlQ0KSkgeworICAg
ICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAg
ICBlcnIuc2V0S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVy
ci5zZXRWYWx1ZSh0aW1lKTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAg
ICAgICBjdXJyZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBTdHJpbmcgdGV4dCA9M0QgY3R4LmdldENoaWxkKDcpLnRvU3RyaW5nKCk7
CisgICAgICAgIHRleHQgPTNEIHRleHQucmVwbGFjZUFsbCgiXCIiLCAiIik7CisgICAgICAgIGlm
ICghdGV4dC5tYXRjaGVzKExhZkRhdGFUeXBlcy5NQzMwMCkpIHsKKyAgICAgICAgICAgIFJlcG9y
dEl0ZW0gZXJyID0zRCBuZXcgUmVwb3J0SXRlbSgpOworICAgICAgICAgICAgZXJyLnNldEtleShj
dHguZ2V0Q2hpbGQoMCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBlcnIuc2V0VmFsdWUodGV4
dCk7CisgICAgICAgICAgICBlcnIuc2V0Q29kZSg2NzApOworICAgICAgICAgICAgY3VycmVudEVy
cm9ycy5hZGQoZXJyKTs7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
TWFwPFN0cmluZywgU3RyaW5nPiBrb21tZW50YXIgPTNEIG5ldyBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPigpOworICAgICAgICBrb21tZW50YXIucHV0KCJNU1RfSUQiLCBtc3QpOworICAgICAgICBr
b21tZW50YXIucHV0KCJEQVRFIiwgZGF0ZSk7CisgICAgICAgIGtvbW1lbnRhci5wdXQoIlRJTUUi
LCB0aW1lKTsKKyAgICAgICAga29tbWVudGFyLnB1dCgiVEVYVCIsIHRleHQpOworICAgICAgICBj
dXJyZW50UHJvYmUuYWRkS29tbWVudGFyKGtvbW1lbnRhcik7CisgICAgICAgIFN5c3RlbS5vdXQu
cHJpbnRsbigiS09NTUVOVEFSOiAiICsgdGV4dCk7CisgICAgfQorCisgICAgLyoqCisgICAgICog
e0Bpbmhlcml0RG9jfQorICAgICAqCisgICAgICogPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRp
b24gZG9lcyBub3RoaW5nLjwvcD4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQg
ZW50ZXJQcm9iZW5rb21tZW50YXJfdChMYWZQYXJzZXIuUHJvYmVua29tbWVudGFyPQpfdENvbnRl
eHQgY3R4KSB7CisgICAgICAgIFN0cmluZyB0ZXh0ID0zRCBjdHguZ2V0Q2hpbGQoMSkudG9TdHJp
bmcoKTsKKyAgICAgICAgdGV4dCA9M0QgdGV4dC5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKyAgICAg
ICAgaWYgKCF0ZXh0Lm1hdGNoZXMoTGFmRGF0YVR5cGVzLk1DMzAwKSkgeworICAgICAgICAgICAg
UmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVtKCk7CisgICAgICAgICAgICBlcnIuc2V0
S2V5KGN0eC5nZXRDaGlsZCgwKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGVyci5zZXRWYWx1
ZSh0ZXh0KTsKKyAgICAgICAgICAgIGVyci5zZXRDb2RlKDY3MCk7CisgICAgICAgICAgICBjdXJy
ZW50RXJyb3JzLmFkZChlcnIpOzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGtvbW1lbnRhciA9M0QgbmV3IEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+KCk7CisgICAgICAgIGtvbW1lbnRhci5wdXQoIlRFWFQiLCB0ZXh0KTsKKyAgICAg
ICAgY3VycmVudFByb2JlLmFkZEtvbW1lbnRhcihrb21tZW50YXIpOworICAgICAgICBTeXN0ZW0u
b3V0LnByaW50bG4oIktPTU1FTlRBUjogIiArIHRleHQpOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVu
dGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92ZXJyaWRlIHB1YmxpYyB2
b2lkIGVudGVyRXZlcnlSdWxlKFBhcnNlclJ1bGVDb250ZXh0IGN0eCkgeworICAgIH0KKyAgICAv
KioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVycmlkZSBw
dWJsaWMgdm9pZCBleGl0RXZlcnlSdWxlKFBhcnNlclJ1bGVDb250ZXh0IGN0eCkgeworICAgIH0K
KyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICoKKyAgICAgKiA8cD5UaGUgZGVm
YXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuPC9wPgorICAgICAqLworICAgIEBPdmVy
cmlkZSBwdWJsaWMgdm9pZCB2aXNpdFRlcm1pbmFsKFRlcm1pbmFsTm9kZSBub2RlKSB7CisgICAg
fQorICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKgorICAgICAqIDxwPlRoZSBk
ZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy48L3A+CisgICAgICovCisgICAgQE92
ZXJyaWRlIHB1YmxpYyB2b2lkIHZpc2l0RXJyb3JOb2RlKEVycm9yTm9kZSBub2RlKSB7CisgICAg
fQorfQpkaWZmIC1yIDIxYWI0ZDM1MTM1YSAtciBmZGM3NTJjZDE3ZmUgc3JjL21haW4vamF2YS9k
ZS9pbnRldmF0aW9uL2xhZGEvaW1wb3I9CnRlci9sYWYvTGFmT2JqZWN0TWFwcGVyLmphdmEKLS0t
IC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvc3JjL21haW4v
amF2YS9kZS9pbnRldmF0aW9uL2xhZGEvaW1wb3J0ZXIvbGFmL0xhZk9iamVjdE1hcHBlci5qYXZh
CUZyPQppIFNlcCAzMCAxNDowNToyOCAyMDE2ICswMjAwCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2th
Z2UgZGUuaW50ZXZhdGlvbi5sYWRhLmltcG9ydGVyLmxhZjsKKworaW1wb3J0IGphdmEudXRpbC5M
aXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBqYXZheC5pbmplY3QuSW5qZWN0
OworCitpbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLmltcG9ydGVyLlJlcG9ydEl0ZW07CitpbXBv
cnQgZGUuaW50ZXZhdGlvbi5sYWRhLnV0aWwuYW5ub3RhdGlvbi5SZXBvc2l0b3J5Q29uZmlnOwor
aW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS51dGlsLmRhdGEuUmVwb3NpdG9yeTsKK2ltcG9ydCBk
ZS5pbnRldmF0aW9uLmxhZGEudXRpbC5kYXRhLlJlcG9zaXRvcnlUeXBlOworCitwdWJsaWMgY2xh
c3MgTGFmT2JqZWN0TWFwcGVyIHsKKworICAgIEBJbmplY3QKKyAgICBAUmVwb3NpdG9yeUNvbmZp
Zyh0eXBlPTNEUmVwb3NpdG9yeVR5cGUuUlcpCisgICAgcHJpdmF0ZSBSZXBvc2l0b3J5IHJlcG9z
aXRvcnk7CisKKyAgICBwcml2YXRlIE1hcDxTdHJpbmcsIExpc3Q8UmVwb3J0SXRlbT4+IGVycm9y
czsKKyAgICBwcml2YXRlIE1hcDxTdHJpbmcsIExpc3Q8UmVwb3J0SXRlbT4+IHdhcm5pbmdzOwor
CisgICAgcHVibGljIHZvaWQgbWFwT2JqZWN0cyhMYWZSYXdEYXRhIGRhdGEpIHsKKyAgICAgICAg
Zm9yIChpbnQgaSA9M0QgMDsgaSA8IGRhdGEuZ2V0UHJvYmVuKCkuc2l6ZSgpOyBpKyspIHsKKyAg
ICAgICAgICAgIGdlbmVyYXRlKGRhdGEuZ2V0UHJvYmVuKCkuZ2V0KGkpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBnZW5lcmF0ZShMYWZSYXdEYXRhLlByb2JlIG9iamVj
dCkgeworICAgICAgICBvYmplY3QuZ2V0QXR0cmlidXRlcygpOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIEByZXR1cm4gdGhlIGVycm9ycworICAgICAqLworICAgIHB1YmxpYyBNYXA8U3RyaW5n
LCBMaXN0PFJlcG9ydEl0ZW0+PiBnZXRFcnJvcnMoKSB7CisgICAgICAgIHJldHVybiBlcnJvcnM7
CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgd2FybmluZ3MKKyAgICAgKi8K
KyAgICBwdWJsaWMgTWFwPFN0cmluZywgTGlzdDxSZXBvcnRJdGVtPj4gZ2V0V2FybmluZ3MoKSB7
CisgICAgICAgIHJldHVybiB3YXJuaW5nczsKKyAgICB9Cit9CmRpZmYgLXIgMjFhYjRkMzUxMzVh
IC1yIGZkYzc1MmNkMTdmZSBzcmMvbWFpbi9qYXZhL2RlL2ludGV2YXRpb24vbGFkYS9pbXBvcj0K
dGVyL2xhZi9MYWZQYXJzZXIuamF2YQotLS0gYS9zcmMvbWFpbi9qYXZhL2RlL2ludGV2YXRpb24v
bGFkYS9pbXBvcnRlci9sYWYvTGFmUGFyc2VyLmphdmEJVHVlIFNlcCA9CjIwIDE2OjAxOjAyIDIw
MTYgKzAyMDAKKysrIGIvc3JjL21haW4vamF2YS9kZS9pbnRldmF0aW9uL2xhZGEvaW1wb3J0ZXIv
bGFmL0xhZlBhcnNlci5qYXZhCUZyaSBTZXAgPQozMCAxNDowNToyOCAyMDE2ICswMjAwCkBAIC0x
LDQzNCArMSw4MTAwIEBACi0vKiBDb3B5cmlnaHQgKEMpIDIwMTMgYnkgQnVuZGVzYW10IGZ1ZXIg
U3RyYWhsZW5zY2h1dHoKLSAqIFNvZnR3YXJlIGVuZ2luZWVyaW5nIGJ5IEludGV2YXRpb24gR21i
SAotICoKLSAqIFRoaXMgZmlsZSBpcyBGcmVlIFNvZnR3YXJlIHVuZGVyIHRoZSBHTlUgR1BMICh2
Pj0zRDMpCi0gKiBhbmQgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZISBDaGVjayBv
dXQKLSAqIHRoZSBkb2N1bWVudGF0aW9uIGNvbWluZyB3aXRoIElNSVMtTGFib3JkYXRlbi1BcHBs
aWNhdGlvbiBmb3IgZGV0YWlscy4KLSAqLworLy8gR2VuZXJhdGVkIGZyb20gZGUvaW50ZXZhdGlv
bi9sYWRhL2ltcG9ydGVyL2xhZi9MYWYuZzQgYnkgQU5UTFIgNC41CiBwYWNrYWdlIGRlLmludGV2
YXRpb24ubGFkYS5pbXBvcnRlci5sYWY7Ci0KK2ltcG9ydCBvcmcuYW50bHIudjQucnVudGltZS5h
dG4uKjsKK2ltcG9ydCBvcmcuYW50bHIudjQucnVudGltZS5kZmEuREZBOworaW1wb3J0IG9yZy5h
bnRsci52NC5ydW50aW1lLio7CitpbXBvcnQgb3JnLmFudGxyLnY0LnJ1bnRpbWUubWlzYy4qOwor
aW1wb3J0IG9yZy5hbnRsci52NC5ydW50aW1lLnRyZWUuKjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlz
dDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlz
dDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWlt
cG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXguaW5qZWN0LkluamVjdDsKLQotaW1w
b3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOwotCi1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRh
LmltcG9ydGVyLlJlcG9ydEl0ZW07Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLm1vZGVsLmxh
bmQuTWVzc3VuZzsKLWltcG9ydCBkZS5pbnRldmF0aW9uLmxhZGEubW9kZWwubGFuZC5PcnRzenVv
cmRudW5nOwotaW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS5tb2RlbC5sYW5kLlByb2JlOwotaW1w
b3J0IGRlLmludGV2YXRpb24ubGFkYS51dGlsLmF1dGguVXNlckluZm87Ci1pbXBvcnQgZGUuaW50
ZXZhdGlvbi5sYWRhLnZhbGlkYXRpb24uVmFsaWRhdG9yOwotaW1wb3J0IGRlLmludGV2YXRpb24u
bGFkYS52YWxpZGF0aW9uLlZpb2xhdGlvbjsKLWltcG9ydCBkZS5pbnRldmF0aW9uLmxhZGEudmFs
aWRhdGlvbi5hbm5vdGF0aW9uLlZhbGlkYXRpb25Db25maWc7Ci0KLS8qKgotICogVGhpcyBwYXJz
ZXIgaXMgdXNlZCB0byByZWFkIGRhdGEgaW4gTEFGIGJhc2VkIGtleS12YWx1ZSBwYWlyIHN0cnVj
dHVyZS4KLSAqCi0gKiBAYXV0aG9yIDxhIGhyZWY9M0QibWFpbHRvOnJyZW5rZXJ0QGludGV2YXRp
b24uZGUiPlJhaW11bmQgUmVua2VydDwvYT4KLSAqLwotcHVibGljIGNsYXNzIExhZlBhcnNlciB7
Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbG9nZ2VyIHVzZWQgaW4gdGhpcyBjbGFzcy4KLSAgICAg
Ki8KLSAgICBASW5qZWN0Ci0gICAgcHJpdmF0ZSBMb2dnZXIgbG9nZ2VyOwotCi0gICAgLyoqCi0g
ICAgICogVGhlIHN0YXJ0IHRhZyBvZiBhIGRhdGFzZXQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nIFBST0JFX05FWFQgPTNEICJcbiVQUk9CRSUiOwotCi0gICAgLyoq
Ci0gICAgICogRmxhZyB1c2VkIHRvIHdyaXRlIGRhdGEgaW50byB0aGUgZGF0YWJhc2Ugb3Igbm90
LgotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBkcnlSdW47Ci0KLSAgICAvKioKLSAgICAg
KiBUaGUgZGF0YSBvYmplY3QgcHJvZHVjZXIuCi0gICAgICovCi0gICAgQEluamVjdAotICAgIHBy
aXZhdGUgTGFmUHJvZHVjZXIgcHJvZHVjZXI7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgd3JpdGVy
IHVzZWQgdG8gY3JlYXRlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlLgotICAgICAqLwotICAgIEBJ
bmplY3QKLSAgICBwcml2YXRlIExhZldyaXRlciB3cml0ZXI7Ci0KLSAgICAvKioKLSAgICAgKiBU
aGUgdmFsaWRhdG9yIGZvciBwcm9iZSBvYmplY3RzLgotICAgICAqLwotICAgIEBJbmplY3QKLSAg
ICBAVmFsaWRhdGlvbkNvbmZpZyh0eXBlPTNEIlByb2JlIikKLSAgICBwcml2YXRlIFZhbGlkYXRv
ciBwcm9iZVZhbGlkYXRvcjsKLQotICAgIC8qKgotICAgICAqIFRoZSB2YWxpZGF0b3IgZm9yIG1l
c3N1bmcgb2JqZWN0cy4KLSAgICAgKi8KLSAgICBASW5qZWN0Ci0gICAgQFZhbGlkYXRpb25Db25m
aWcodHlwZT0zRCJNZXNzdW5nIikKLSAgICBwcml2YXRlIFZhbGlkYXRvciBtZXNzdW5nVmFsaWRh
dG9yOwotCi0gICAgLy9ASW5qZWN0Ci0gICAgLy9AVmFsaWRhdGlvbkNvbmZpZyh0eXBlPTNEIk1l
c3N3ZXJ0IikKLSAgICAvL3ByaXZhdGUgVmFsaWRhdG9yIG1lc3N3ZXJ0VmFsaWRhdG9yOwotCi0g
ICAgQEluamVjdAotICAgIEBWYWxpZGF0aW9uQ29uZmlnKHR5cGU9M0QiT3J0IikKLSAgICBwcml2
YXRlIFZhbGlkYXRvciBvcnRWYWxpZGF0b3I7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgd2Fybmlu
Z3MuCi0gICAgICovCi0gICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBMaXN0PFJlcG9ydEl0ZW0+PiB3
YXJuaW5nczsKLQotICAgIC8qKgotICAgICAqIFRoZSBlcnJvcnMuCi0gICAgICovCi0gICAgcHJp
dmF0ZSBNYXA8U3RyaW5nLCBMaXN0PFJlcG9ydEl0ZW0+PiBlcnJvcnM7Ci0KLSAgICAvKioKLSAg
ICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgICAqLwotICAgIHB1YmxpYyBMYWZQYXJzZXIo
KSB7Ci0gICAgICAgIHRoaXMud2FybmluZ3MgPTNEIG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxS
ZXBvcnRJdGVtPj4oKTsKLSAgICAgICAgdGhpcy5lcnJvcnMgPTNEIG5ldyBIYXNoTWFwPFN0cmlu
ZywgTGlzdDxSZXBvcnRJdGVtPj4oKTsKLSAgICAgICAgdGhpcy5zZXREcnlSdW4oZmFsc2UpOwot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlYWQgYW5kIHBhcnNlIHRoZSBkYXRhIGFuZCB3cml0
ZSB0aGUgb2JqZWN0cyB0byB0aGUgZGF0YWJhc2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYXV0
aCAgQXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24KLSAgICAgKiBAcGFyYW0gbGFmICAgVGhlIExB
RiBmb3JtYXRlZCBkYXRhLgotICAgICAqIEByZXR1cm4gc3VjY2VzcwotICAgICAqIEB0aHJvd3Mg
TGFmUGFyc2VyRXhjZXB0aW9uCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gcGFyc2UoVXNl
ckluZm8gdXNlckluZm8sIFN0cmluZyBsYWYpIHsKLSAgICAgICAgaWYgKCFsYWYuc3RhcnRzV2l0
aCgiJVBST0JFJVxuIikpIHsKLSAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zygibm8gJVBST0JFJSB0
YWcgZm91bmQhIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgYm9vbGVhbiBwYXJzZWQgPTNEIGZhbHNlOwotICAgICAgICB3aGlsZSAobGFmLnN0YXJ0c1dp
dGgoIiVQUk9CRSVcbiIpKSB7Ci0gICAgICAgICAgICBwYXJzZWQgPTNEIHRydWU7Ci0gICAgICAg
ICAgICBpbnQgbmV4dFBvcyA9M0QgbGFmLmluZGV4T2YoUFJPQkVfTkVYVCk7Ci0gICAgICAgICAg
ICBTdHJpbmcgc2luZ2xlID0zRCAiIjsKLSAgICAgICAgICAgIGlmIChuZXh0UG9zID4gMCkgewot
ICAgICAgICAgICAgICAgIHNpbmdsZSA9M0QgbGFmLnN1YnN0cmluZygwLCBuZXh0UG9zICsgMSk7
Ci0gICAgICAgICAgICAgICAgbGFmID0zRCBsYWYuc3Vic3RyaW5nKG5leHRQb3MgKyAxKTsKLSAg
ICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICByZWFkQWxsKHNpbmdsZSk7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHV0QWxsKHByb2R1Y2VyLmdldFdh
cm5pbmdzKCkpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5wdXRBbGwocHJvZHVj
ZXIuZ2V0RXJyb3JzKCkpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZUFsbCh1c2VySW5mbyk7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjZXIucmVzZXQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy53cml0ZXIucmVzZXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgY2F0Y2ggKExhZlBhcnNlckV4Y2VwdGlvbiBscGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgTWFwPFN0cmluZywgTGlzdDxSZXBvcnRJdGVtPj4gcEVyciA9M0QgcHJvZHVjZXIuZ2V0
RXJyPQpvcnMoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBFcnIuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFJlcG9ydEl0ZW0+IGVyciA9M0QgbmV3IEFycmF5
TGlzdDxSZXBvcnRJdGVtPj0KKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnIuYWRkKG5l
dyBSZXBvcnRJdGVtKCJwYXJzZXIiLCBscGUuZ2V0TWVzc2FnZSgpLD0KIDY3MykpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHV0KCJwYXJzZXIiLCBlcnIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXQoInBhcnNlciIsIG5ldyBBcnJheUxp
c3Q8UmVwb3J0SXQ9CmVtPigpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1dEFs
bChwRXJyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHV0QWxsKHBy
b2R1Y2VyLmdldFdhcm5pbmdzKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMucHJvZHVjZXIucmVzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgcmVhZEFsbChs
YWYpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1dEFsbChwcm9kdWNlci5n
ZXRXYXJuaW5ncygpKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHV0QWxsKHBy
b2R1Y2VyLmdldEVycm9ycygpKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVBbGwodXNlcklu
Zm8pOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y2VyLnJlc2V0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMud3JpdGVyLnJlc2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGxh
ZiA9M0QgIiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChMYWZQ
YXJzZXJFeGNlcHRpb24gbHBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIExp
c3Q8UmVwb3J0SXRlbT4+IHBFcnIgPTNEIHByb2R1Y2VyLmdldEVycj0Kb3JzKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChwRXJyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgTGlzdDxSZXBvcnRJdGVtPiBlcnIgPTNEIG5ldyBBcnJheUxpc3Q8UmVwb3J0SXRlbT49Cigp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZXJyLmFkZChuZXcgUmVwb3J0SXRlbSgicGFyc2Vy
IiwgbHBlLmdldE1lc3NhZ2UoKSw9CiA2NzMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuZXJyb3JzLnB1dCgicGFyc2VyIiwgZXJyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMud2FybmluZ3MucHV0KCJwYXJzZXIiLCBuZXcgQXJyYXlMaXN0PFJlcG9ydEl0PQplbT4oKSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5wdXRBbGwocEVycik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1dEFsbChwcm9kdWNlci5nZXRXYXJuaW5ncygp
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1
Y2VyLnJlc2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGxhZiA9M0QgIiI7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gcGFyc2VkOwotICAgIH0KLQotICAgIC8qKgotICAgICAq
IFdyaXRlIGFsbCBjcmVhdGVkIG9iamVjdHMgdG8gdGhlIGRhdGFiYXNlLgotICAgICAqCi0gICAg
ICogQHBhcmFtIGF1dGggIFRoZSBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi4KLSAgICAgKi8K
LSAgICBwcml2YXRlIHZvaWQgd3JpdGVBbGwoVXNlckluZm8gdXNlckluZm8pIHsKLSAgICAgICAg
U3RyaW5nIHByb2JlSWQgPTNEIHByb2R1Y2VyLmdldFByb2JlKCkuZ2V0SWRBbHQoKSA9M0Q9M0Qg
bnVsbCA/Ci0gICAgICAgICAgICAicHJvYmVJZCIgOiBwcm9kdWNlci5nZXRQcm9iZSgpLmdldElk
QWx0KCkudG9TdHJpbmcoKTsKLSAgICAgICAgVmlvbGF0aW9uIHZpb2xhdGlvbiA9M0QgdmFsaWRh
dGVQcm9iZShwcm9kdWNlci5nZXRQcm9iZSgpKTsKLSAgICAgICAgaWYgKHZpb2xhdGlvbi5oYXNF
cnJvcnMoKSkgewotICAgICAgICAgICAgUmVwb3J0SXRlbSBlcnIgPTNEIG5ldyBSZXBvcnRJdGVt
KCJ2YWxpZGF0aW9uIiwgdmlvbGF0aW9uLmdldEU9CnJyb3JzKCksIG51bGwpOwotICAgICAgICAg
ICAgTGlzdDxSZXBvcnRJdGVtPiBlcnJzPTNEIG5ldyBBcnJheUxpc3Q8UmVwb3J0SXRlbT4oKTsK
LSAgICAgICAgICAgIGVycnMuYWRkKGVycik7Ci0gICAgICAgICAgICB0aGlzLmFwcGVuZEVycm9y
cyhwcm9iZUlkLCBlcnJzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBib29sZWFuIHAgPTNEIHdyaXRlci53cml0ZVByb2JlKHVzZXJJbmZvLCBwcm9kdWNlci5nZXRQ
cm9iZSgpKTsKLSAgICAgICAgaWYgKCFwKSB7Ci0gICAgICAgICAgICB0aGlzLmVycm9ycy5wdXQo
cHJvYmVJZCwgd3JpdGVyLmdldEVycm9ycygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICB3cml0ZXIud3JpdGVQcm9iZW5Lb21tZW50YXJlKHVzZXJJbmZvLCBwcm9k
dWNlci5nZXRQcm9iZW5Lb21tZW50YXI9CmUoKSk7Ci0gICAgICAgIGZvciAoTWVzc3VuZyBtZXNz
dW5nOiBwcm9kdWNlci5nZXRNZXNzdW5nZW4oKSkgewotICAgICAgICAgICAgbWVzc3VuZy5zZXRQ
cm9iZUlkKHByb2R1Y2VyLmdldFByb2JlKCkuZ2V0SWQoKSk7Ci0gICAgICAgICAgICBWaW9sYXRp
b24gbVZpb2xhdGlvbiA9M0QgbWVzc3VuZ1ZhbGlkYXRvci52YWxpZGF0ZShtZXNzdW5nKTsKLSAg
ICAgICAgICAgIGlmIChtVmlvbGF0aW9uLmhhc0Vycm9ycygpKSB7Ci0gICAgICAgICAgICAgICAg
UmVwb3J0SXRlbSBtRXJyID0zRCBuZXcgUmVwb3J0SXRlbSgidmFsaWRhdGlvbiIsIG1WaW9sYXRp
bz0Kbi5nZXRFcnJvcnMoKSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgTGlzdDxSZXBvcnRJdGVt
PiBtRXJycyA9M0QgbmV3IEFycmF5TGlzdDxSZXBvcnRJdGVtPigpOwotICAgICAgICAgICAgICAg
IG1FcnJzLmFkZChtRXJyKTsKLSAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZEVycm9ycyhwcm9i
ZUlkLCBtRXJycyk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBib29sZWFuIG0gPTNEIHdyaXRlci53cml0ZU1lc3N1bmdlbih1c2VySW5mbywg
bWVzc3VuZyk7Ci0gICAgICAgICAgICBpZiAoIW0pIHsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgd3JpdGVyLndyaXRlT3J0ZSh1c2Vy
SW5mbywgcHJvZHVjZXIuZ2V0T3J0ZSgpKTsKLSAgICAgICAgZm9yIChPcnRzenVvcmRudW5nIG9y
dDogcHJvZHVjZXIuZ2V0T3J0c3p1b3JkbnVuZ2VuKCkpIHsKLSAgICAgICAgICAgIFZpb2xhdGlv
biBvVmlvbGF0aW9uID0zRCBvcnRWYWxpZGF0b3IudmFsaWRhdGUob3J0KTsKLSAgICAgICAgICAg
IGlmIChvVmlvbGF0aW9uLmhhc0Vycm9ycygpKSB7Ci0gICAgICAgICAgICAgICAgUmVwb3J0SXRl
bSBvRXJyID0zRCBuZXcgUmVwb3J0SXRlbSgidmFsaWRhdGlvbiIsIG9WaW9sYXRpbz0Kbi5nZXRF
cnJvcnMoKSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgTGlzdDxSZXBvcnRJdGVtPiBvRXJycyA9
M0QgbmV3IEFycmF5TGlzdDxSZXBvcnRJdGVtPigpOwotICAgICAgICAgICAgICAgIG9FcnJzLmFk
ZChvRXJyKTsKLSAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZEVycm9ycyhwcm9iZUlkLCBvRXJy
cyk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB3cml0ZXIud3JpdGVPcnRzenVvcmR1bmcodXNlckluZm8sIG9ydCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgd3JpdGVyLndyaXRlTWVzc3VuZ0tvbW1lbnRhcmUodXNlckluZm8sIHByb2R1Y2VyLmdl
dE1lc3N1bmdzS29tbWVuPQp0YXJlKCkpOwotICAgICAgICB3cml0ZXIud3JpdGVNZXNzd2VydGUo
dXNlckluZm8sIHByb2R1Y2VyLmdldE1lc3N3ZXJ0ZSgpKTsKLSAgICAgICAgVmlvbGF0aW9uIHBv
c3RWaW9sYXRpb24gPTNEIHZhbGlkYXRlUHJvYmUocHJvZHVjZXIuZ2V0UHJvYmUoKSk7Ci0gICAg
ICAgIGlmIChwb3N0VmlvbGF0aW9uLmhhc1dhcm5pbmdzKCkpIHsKLSAgICAgICAgICAgIFJlcG9y
dEl0ZW0gd2FybiA9M0QgbmV3IFJlcG9ydEl0ZW0oInZhbGlkYXRpb24iLCBwb3N0VmlvbGF0aW9u
PQouZ2V0V2FybmluZ3MoKSwgbnVsbCk7Ci0gICAgICAgICAgICBMaXN0PFJlcG9ydEl0ZW0+IHdh
cm5zID0zRCBuZXcgQXJyYXlMaXN0PFJlcG9ydEl0ZW0+KCk7Ci0gICAgICAgICAgICB3YXJucy5h
ZGQod2Fybik7Ci0gICAgICAgICAgICB0aGlzLmFwcGVuZFdhcm5pbmdzKHByb2JlSWQsIHdhcm5z
KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKE1lc3N1bmcgbWVzc3VuZzogcHJvZHVjZXIuZ2V0
TWVzc3VuZ2VuKCkpIHsKLSAgICAgICAgICAgIFZpb2xhdGlvbiBtVmlvbGF0aW9uID0zRCBtZXNz
dW5nVmFsaWRhdG9yLnZhbGlkYXRlKG1lc3N1bmcpOwotICAgICAgICAgICAgaWYgKG1WaW9sYXRp
b24uaGFzV2FybmluZ3MoKSkgewotICAgICAgICAgICAgICAgIFJlcG9ydEl0ZW0gbVdhcm4gPTNE
IG5ldyBSZXBvcnRJdGVtKCJ2YWxpZGF0aW9uIiwgbVZpb2xhdGk9Cm9uLmdldFdhcm5pbmdzKCks
IG51bGwpOwotICAgICAgICAgICAgICAgIExpc3Q8UmVwb3J0SXRlbT4gbVdhcm5zID0zRCBuZXcg
QXJyYXlMaXN0PFJlcG9ydEl0ZW0+KCk7Ci0gICAgICAgICAgICAgICAgbVdhcm5zLmFkZChtV2Fy
bik7Ci0gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRXYXJuaW5ncyhwcm9iZUlkLCBtV2FybnMp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVmFs
aWRhdGUgcHJvYmUgb2JqZWN0cy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBwcm9iZSBUaGUgcHJv
YmUgb2JqZWN0IHRvIHZhbGlkYXRlLgotICAgICAqLwotICAgIHByaXZhdGUgVmlvbGF0aW9uIHZh
bGlkYXRlUHJvYmUoUHJvYmUgcHJvYmUpIHsKLSAgICAgICAgcmV0dXJuIHByb2JlVmFsaWRhdG9y
LnZhbGlkYXRlKHByb2JlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWFkIGFsbCBhdHRy
aWJ1dGVzIGZyb20gYSBzaW5nbGUgcHJvYmUgYmxvY2sgYW5kIGNyZWF0ZSBlbnRpdHkgb2JqPQpl
Y3RzLgotICAgICAqCi0gICAgICogQHBhcmFtIGNvbnRlbnQgICBTaW5nbGUgcHJvYmUgYmxvY2sg
ZW5jbG9zZWQgYnkgJVBST0JFJQotICAgICAqIEB0aHJvd3MgTGFmUGFyc2VyRXhjZXB0aW9uCi0g
ICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHJlYWRBbGwoU3RyaW5nIGNvbnRlbnQpCi0gICAgdGhy
b3dzIExhZlBhcnNlckV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgYm9vbGVhbiBrZXkgPTNEIGZh
bHNlOwotICAgICAgICBib29sZWFuIHZhbHVlID0zRCBmYWxzZTsKLSAgICAgICAgYm9vbGVhbiBo
ZWFkZXIgPTNEIGZhbHNlOwotICAgICAgICBib29sZWFuIHdoaXRlID0zRCBmYWxzZTsKLSAgICAg
ICAgYm9vbGVhbiBzdHJpbmcgPTNEIGZhbHNlOwotICAgICAgICBib29sZWFuIG11bHRpVmFsdWUg
PTNEIGZhbHNlOwotICAgICAgICBTdHJpbmcga2V5U3RyaW5nID0zRCAiIjsKLSAgICAgICAgU3Ry
aW5nIHZhbHVlU3RyaW5nID0zRCAiIjsKLSAgICAgICAgU3RyaW5nIGhlYWRlclN0cmluZyA9M0Qg
IiI7Ci0gICAgICAgIGZvciAoaW50IGkgPTNEIDA7IGkgPCBjb250ZW50Lmxlbmd0aCgpOyBpKysp
IHsKLSAgICAgICAgICAgIGNoYXIgY3VycmVudCA9M0QgY29udGVudC5jaGFyQXQoaSk7Ci0KLSAg
ICAgICAgICAgIGlmICgoY3VycmVudCA9M0Q9M0QgJyInIHx8IChjdXJyZW50ID0zRD0zRCAnICcg
JiYgIXN0cmluZykpICYmCi0gICAgICAgICAgICAgICAgdmFsdWUgJiYKLSAgICAgICAgICAgICAg
ICBpIDwgY29udGVudC5sZW5ndGgoKSAtIDEgJiYKLSAgICAgICAgICAgICAgICAoY29udGVudC5j
aGFyQXQoaSArIDEpICE9M0QgJ1xuJyAmJgotICAgICAgICAgICAgICAgIGNvbnRlbnQuY2hhckF0
KGkgKyAxKSAhPTNEICdccicpKSB7Ci0gICAgICAgICAgICAgICAgbXVsdGlWYWx1ZSA9M0QgdHJ1
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGN1cnJlbnQgPTNEPTNEICciJyAm
JiAhc3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgc3RyaW5nID0zRCB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudCA9M0Q9M0QgJyInICYmIHN0cmluZykg
ewotICAgICAgICAgICAgICAgIHN0cmluZyA9M0QgZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChjdXJyZW50ID0zRD0zRCAnICcgJiYgIXZhbHVlKSB7Ci0gICAgICAgICAg
ICAgICAga2V5ID0zRCBmYWxzZTsKLSAgICAgICAgICAgICAgICB3aGl0ZSA9M0QgdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
aWYgKGN1cnJlbnQgIT0zRCAnICcgJiYKLSAgICAgICAgICAgICAgICBjdXJyZW50ICE9M0QgJ1xu
JyAmJgotICAgICAgICAgICAgICAgIGN1cnJlbnQgIT0zRCAnXHInICYmCi0gICAgICAgICAgICAg
ICAgd2hpdGUpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9M0QgdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB3aGl0ZSA9M0QgZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
IChjdXJyZW50ID0zRD0zRCAnJScgJiYgIWhlYWRlciAmJiAhdmFsdWUpIHsKLSAgICAgICAgICAg
ICAgICBoZWFkZXJTdHJpbmcgPTNEICIiOwotICAgICAgICAgICAgICAgIHByb2R1Y2VyLmZpbmlz
aE9ydCgpOwotICAgICAgICAgICAgICAgIGtleSA9M0QgZmFsc2U7Ci0gICAgICAgICAgICAgICAg
aGVhZGVyID0zRCB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoKGN1
cnJlbnQgPTNEPTNEICdcbicgfHwgY3VycmVudCA9M0Q9M0QgJ1xyJykgJiYgaGVhZGU9CnIpIHsK
LSAgICAgICAgICAgICAgICBoZWFkZXIgPTNEIGZhbHNlOwotICAgICAgICAgICAgICAgIGtleSA9
M0QgdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWRyeVJ1bikgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoaGVhZGVyU3RyaW5nLmNvbnRhaW5zKCJNRVNTVU5HIikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByb2R1Y2VyLm5ld01lc3N1bmcoKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyU3RyaW5nLmNvbnRhaW5zKCJPUlQiKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXIubmV3T3J0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGhlYWRl
clN0cmluZy5jb250YWlucygiJUVOREUlIikpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFk
cnlSdW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjZXIubmV3TWVzc3Vu
ZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWNlci5uZXdPcnQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAoY3VycmVudCA9M0Q9M0QgJyInICYmICF2YWx1ZSkgewotICAgICAg
ICAgICAgICAgIHZhbHVlID0zRCB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBpZiAoKGN1cnJlbnQgPTNEPTNEICdcbicgfHwgY3VycmVudCA9M0Q9M0QgJ1xyJykgJiYgdmFs
dWU9CiAmJiAhc3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtdWx0aVZhbHVlICYmIHZh
bHVlU3RyaW5nLnN0YXJ0c1dpdGgoIlwiIikpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVT
dHJpbmcgPTNECi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZy5zdWJzdHJpbmco
MSwgdmFsdWVTdHJpbmcubGVuZ3RoKCkgLSAxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgdmFsdWUgPTNEIGZhbHNlOwotICAgICAgICAgICAgICAgIG11bHRpVmFsdWUgPTNE
IGZhbHNlOwotICAgICAgICAgICAgICAgIGtleSA9M0QgdHJ1ZTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMuZHJ5UnVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyLmFkZERhdGEo
a2V5U3RyaW5nLCB2YWx1ZVN0cmluZyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGtleVN0cmluZyA9M0QgIiI7Ci0gICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgPTNEICIi
OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKChjdXJyZW50ID0zRD0zRCAnXG4nIHx8IGN1cnJlbnQgPTNEPTNEICdccicpICYmIChrZXkg
fHwgd2g9Cml0ZSkpIHsKLSAgICAgICAgICAgICAgICBSZXBvcnRJdGVtIGl0ZW0gPTNEIG5ldyBS
ZXBvcnRJdGVtKCJwYXJzZXIiLCAiZ2VuZXJhbCBlcnJvPQpyIiwgNjAzKTsKLSAgICAgICAgICAg
ICAgICBMaXN0PFJlcG9ydEl0ZW0+IGl0ZW1zID0zRCBuZXcgQXJyYXlMaXN0PFJlcG9ydEl0ZW0+
KCk7Ci0gICAgICAgICAgICAgICAgaXRlbXMuYWRkKGl0ZW0pOwotICAgICAgICAgICAgICAgIHRo
aXMuYXBwZW5kRXJyb3JzKCJwYXJzZXIiLCBpdGVtcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoa2V5KSB7Ci0gICAgICAgICAgICAg
ICAga2V5U3RyaW5nICs9M0QgY3VycmVudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgKz0zRCBjdXJyZW50
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoaGVhZGVyKSB7Ci0gICAgICAg
ICAgICAgICAgaGVhZGVyU3RyaW5nICs9M0QgY3VycmVudDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBpZiAoIWRyeVJ1bikgewotICAgICAgICAgICAgdGhpcy5wcm9kdWNlci5u
ZXdNZXNzdW5nKCk7Ci0gICAgICAgICAgICB0aGlzLnByb2R1Y2VyLm5ld09ydCgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiBpZiBvYmplY3RzIGFyZSBvciBu
b3QuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNEcnlSdW4oKSB7Ci0gICAgICAgIHJl
dHVybiBkcnlSdW47Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSWYgc2V0IHRvIHRydWUsIG5v
IG9iamVjdHMgd2lsbCBiZSBjcmVhdGVkIGFuZCB3cml0dGVuIHRvIGRhdGFiYXNlLgotICAgICAq
Ci0gICAgICogQHBhcmFtIGRyeVJ1bgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldERyeVJ1
bihib29sZWFuIGRyeVJ1bikgewotICAgICAgICB0aGlzLmRyeVJ1biA9M0QgZHJ5UnVuOwotICAg
IH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIHdhcm5pbmdzCi0gICAgICovCi0gICAg
cHVibGljIE1hcDxTdHJpbmcsIExpc3Q8UmVwb3J0SXRlbT4+IGdldFdhcm5pbmdzKCkgewotICAg
ICAgICByZXR1cm4gd2FybmluZ3M7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB0
aGUgZXJyb3JzCi0gICAgICovCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIExpc3Q8UmVwb3J0SXRl
bT4+IGdldEVycm9ycygpIHsKLSAgICAgICAgcmV0dXJuIGVycm9yczsKLSAgICB9Ci0KLSAgICAv
KioKLSAgICAgKiBSZXNldCBlcnJvcnMgYW5kIHdhcm5pbmdzLgotICAgICAqLwotICAgIHB1Ymxp
YyB2b2lkIHJlc2V0KCkgewotICAgICAgICBwcm9kdWNlci5yZXNldCgpOwotICAgICAgICB0aGlz
LmVycm9ycyA9M0QgbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PFJlcG9ydEl0ZW0+PigpOwotICAg
ICAgICB0aGlzLndhcm5pbmdzID0zRCBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8UmVwb3J0SXRl
bT4+KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFwcGVuZEVycm9ycyhTdHJpbmcgcHJv
YmVJZCwgTGlzdDxSZXBvcnRJdGVtPiBlcnJzKSB7Ci0gICAgICAgIExpc3Q8UmVwb3J0SXRlbT4g
ZXJyID0zRCB0aGlzLmVycm9ycy5nZXQocHJvYmVJZCk7Ci0gICAgICAgIGlmIChlcnIgPTNEPTNE
IG51bGwpIHsKLSAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1dChwcm9iZUlkLCBlcnJzKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGVyci5hZGRBbGwoZXJycyk7Ci0g
ICAgICAgICAgICB0aGlzLmVycm9ycy5wdXQocHJvYmVJZCwgZXJyKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHByaXZhdGUgdm9pZCBhcHBlbmRXYXJuaW5ncyhTdHJpbmcgcHJvYmVJZCwgTGlz
dDxSZXBvcnRJdGVtPiB3YXJucykgewotICAgICAgICBMaXN0PFJlcG9ydEl0ZW0+IHdhcm4gPTNE
IHRoaXMud2FybmluZ3MuZ2V0KHByb2JlSWQpOwotICAgICAgICBpZiAod2FybiA9M0Q9M0QgbnVs
bCkgewotICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXQocHJvYmVJZCwgd2FybnMpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgd2Fybi5hZGRBbGwod2FybnMpOwot
ICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXQocHJvYmVJZCwgd2Fybik7Ci0gICAgICAgIH0K
LSAgICB9Ci19CisKK0BTdXBwcmVzc1dhcm5pbmdzKHsiYWxsIiwgIndhcm5pbmdzIiwgInVuY2hl
Y2tlZCIsICJ1bnVzZWQiLCAiY2FzdCJ9KQorcHVibGljIGNsYXNzIExhZlBhcnNlciBleHRlbmRz
IFBhcnNlciB7CisJc3RhdGljIHsgUnVudGltZU1ldGFEYXRhLmNoZWNrVmVyc2lvbigiNC41Iiwg
UnVudGltZU1ldGFEYXRhLlZFUlNJT04pOyB9CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIERG
QVtdIF9kZWNpc2lvblRvREZBOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgUHJlZGljdGlvbkNv
bnRleHRDYWNoZSBfc2hhcmVkQ29udGV4dENhY2hlID0zRAorCQluZXcgUHJlZGljdGlvbkNvbnRl
eHRDYWNoZSgpOworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50CisJCVRfXzA9M0QxLCBUX18xPTNE
MiwgVF9fMj0zRDMsIFRfXzM9M0Q0LCBUX180PTNENSwgVkVSU0lPTj0zRDYsIFVFQkVSVFJBRz0K
VU5HU0ZPUk1BVD0zRDcsPTIwCisJCURBVEVOQkFTSVM9M0Q4LCBEQVRFTkJBU0lTX1M9M0Q5LCBO
RVRaS0VOTlVORz0zRDEwLCBFUlpFVUdFUj0zRDExLCBTVEFBVD0KX0RFUl9NRVNTU1RFTExFX0xB
Tkc9M0QxMiw9MjAKKwkJU1RBQVRfREVSX01FU1NTVEVMTEVfS1VSWj0zRDEzLCBTVEFBVF9ERVJf
TUVTU1NURUxMRV9TPTNEMTQsIE1FU1NTVEVMTEU9Cj0zRDE1LD0yMAorCQlNRVNTTEFCT1I9M0Qx
NiwgUFJPQkVfSUQ9M0QxNywgTUVTU1VOR1NfSUQ9M0QxOCwgUFJPQkVOX05SPTNEMTksIEhBVVBU
UFI9Ck9CRU5OVU1NRVI9M0QyMCw9MjAKKwkJTkVCRU5QUk9CRU5OVU1NRVI9M0QyMSwgTUVTU1BS
T0dSQU1NX0M9M0QyMiwgTUVTU1BST0dSQU1NX1M9M0QyMywgTUVTU1BSPQpPR1JBTU1fTEFORD0z
RDI0LD0yMAorCQlQUk9CRU5BSE1FSU5TVElUVVRJT049M0QyNSwgUFJPQkVOQVJUPTNEMjYsIFpF
SVRCQVNJUz0zRDI3LCBaRUlUQkFTSVNfUz0KPTNEMjgsPTIwCisJCVNPTExfREFUVU1fVUhSWkVJ
VF9BPTNEMjksIFNPTExfREFUVU1fVUhSWkVJVF9FPTNEMzAsIFVSU1BSVU5HU19EQVRVTV9VSD0K
UlpFSVQ9M0QzMSw9MjAKKwkJUFJPQkVOQUhNRV9EQVRVTV9VSFJaRUlUX0E9M0QzMiwgUFJPQkVO
QUhNRV9EQVRVTV9VSFJaRUlUX0U9M0QzMywgVU1XRUxUPQpCRVJFSUNIX0M9M0QzNCw9MjAKKwkJ
VU1XRUxUQkVSRUlDSF9TPTNEMzUsIERFU0tSSVBUT1JFTj0zRDM2LCBSRUlfUFJPR1JBTU1QVU5L
VD0zRDM3LCBSRUlfUFJPPQpHUkFNTVBVTktUR1JVUFBFPTNEMzgsPTIwCisJCVJFRkVSRU5aX0RB
VFVNX1VIUlpFSVQ9M0QzOSwgVEVTVERBVEVOPTNENDAsIFNaRU5BUklPPTNENDEsIFNFS19EQVRF
TkJBUz0KSVM9M0Q0Miw9MjAKKwkJU0VLX0RBVEVOQkFTSVNfUz0zRDQzLCBVX0hFUktVTkZUU0xB
TkRfTEFORz0zRDQ0LCBVX0hFUktVTkZUU0xBTkRfS1VSWj0KPTNENDUsPTIwCisJCVVfSEVSS1VO
RlRTTEFORF9TPTNENDYsIFVfR0VNRUlOREVTQ0hMVUVTU0VMPTNENDcsIFVfR0VNRUlOREVOQU1F
PTNENDgsID0KVV9PUlRTX1pVU0FUWktFTk5aQUhMPTNENDksPTIwCisJCVVfS09PUkRJTkFURU49
M0Q1MCwgVV9LT09SRElOQVRFTl9TPTNENTEsIFVfT1JUU19aVVNBVFpDT0RFPTNENTIsIFVfT1JU
Uz0KX1pVU0FUWlRFWFQ9M0Q1Myw9MjAKKwkJVV9OVVRTX0NPREU9M0Q1NCwgUF9IRVJLVU5GVFNM
QU5EX0xBTkc9M0Q1NSwgUF9IRVJLVU5GVFNMQU5EX0tVUlo9M0Q1NiwgPQpQX0hFUktVTkZUU0xB
TkRfUz0zRDU3LD0yMAorCQlQX0dFTUVJTkRFU0NITFVFU1NFTD0zRDU4LCBQX0dFTUVJTkRFTkFN
RT0zRDU5LCBQX09SVFNfWlVTQVRaS0VOTlpBSEw9M0Q9CjYwLD0yMAorCQlQX0tPT1JESU5BVEVO
PTNENjEsIFBfS09PUkRJTkFURU5fUz0zRDYyLCBQX09SVFNfWlVTQVRaQ09ERT0zRDYzLCBQX09S
VFM9Cl9aVVNBVFpURVhUPTNENjQsPTIwCisJCVBfTlVUU19DT0RFPTNENjUsIFBfU0lURV9JRD0z
RDY2LCBQX1NJVEVfTkFNRT0zRDY3LCBQX0hPRUhFX05OPTNENjgsIFBfSD0KT0VIRV9MQU5EPTNE
NjksPTIwCisJCU1FSFJaV0VDS0ZFTEQ9M0Q3MCwgTUVTU19EQVRVTV9VSFJaRUlUPTNENzEsIE1F
U1NaRUlUX1NFS1VOREVOPTNENzIsIE1FUz0KU01FVEhPREVfQz0zRDczLD0yMAorCQlNRVNTTUVU
SE9ERV9TPTNENzQsIEJFQVJCRUlUVU5HU1NUQVRVUz0zRDc1LCBQRVBfRkxBRz0zRDc2LCBFUkZB
U1NVTkdfQUI9CkdFU0NITE9TU0VOPTNENzcsPTIwCisJCVBST0JFTlpVU0FUWkJFU0NIUkVJQlVO
Rz0zRDc4LCBQWkJfUz0zRDc5LCBNRVNTV0VSVD0zRDgwLCBNRVNTV0VSVF9TPTNEOD0KMSwgTUVT
U1dFUlRfST0zRDgyLD0yMAorCQlNRVNTV0VSVF9HPTNEODMsIE1FU1NXRVJUX05XRz0zRDg0LCBN
RVNTV0VSVF9OV0dfUz0zRDg1LCBNRVNTV0VSVF9OV0dfST0KPTNEODYsPTIwCisJCU1FU1NXRVJU
X05XR19HPTNEODcsIEtPTU1FTlRBUj0zRDg4LCBLT01NRU5UQVJfVD0zRDg5LCBQUk9CRU5LT01N
RU5UQVI9Cj0zRDkwLCBQUk9CRU5LT01NRU5UQVJfVD0zRDkxLD0yMAorCQlXUz0zRDkyLCBORVdM
SU5FPTNEOTMsIFNUUklOR19FU0M9M0Q5NCwgU1RSSU5HPTNEOTUsIEM9M0Q5NjsKKwlwdWJsaWMg
c3RhdGljIGZpbmFsIGludAorCQlSVUxFX3Byb2JlbmRhdGVpID0zRCAwLCBSVUxFX2VuZCA9M0Qg
MSwgUlVMRV9wcm9iZSA9M0QgMiwgUlVMRV9wcm9iZWRhdGU9Cm4gPTNEIDMsPTIwCisJCVJVTEVf
bWVzc3VuZyA9M0QgNCwgUlVMRV9tZXNzX2hlYWRlciA9M0QgNSwgUlVMRV9tZXNzdW5nZGF0ZW4g
PTNEIDYsIFJVTD0KRV9kYiA9M0QgNyw9MjAKKwkJUlVMRV9tcCA9M0QgOCwgUlVMRV91YiA9M0Qg
OSwgUlVMRV9yZWkgPTNEIDEwLCBSVUxFX3BoID0zRCAxMSwgUlVMRV9wZyA9Cj0zRCAxMiwgUlVM
RV9wayA9M0QgMTMsPTIwCisJCVJVTEVfemIgPTNEIDE0LCBSVUxFX3B6YiA9M0QgMTUsIFJVTEVf
cGtvbSA9M0QgMTYsIFJVTEVfc2RtID0zRCAxNywgUlVMRT0KX3BuaCA9M0QgMTgsPTIwCisJCVJV
TEVfbW0gPTNEIDE5LCBSVUxFX213ID0zRCAyMCwgUlVMRV9tZXNzX2tvbW1lbnRhciA9M0QgMjEs
IFJVTEVfcG4gPTNEID0KMjIsIFJVTEVfdXMgPTNEIDIzLD0yMAorCQlSVUxFX3Vyc3BydW5nc29y
dGRhdGVuID0zRCAyNCwgUlVMRV91aCA9M0QgMjUsIFJVTEVfdWcgPTNEIDI2LCBSVUxFX3VrID0K
PTNEIDI3LD0yMAorCQlSVUxFX3ZlcnNpb24gPTNEIDI4LCBSVUxFX3VlYmVydHJhZ3VuZ3Nmb3Jt
YXQgPTNEIDI5LCBSVUxFX2RhdGVuYmFzaXMgPQo9M0QgMzAsPTIwCisJCVJVTEVfZGF0ZW5iYXNp
c19zID0zRCAzMSwgUlVMRV9uZXR6a2VubnVuZyA9M0QgMzIsIFJVTEVfZXJ6ZXVnZXIgPTNEIDMz
LD0KIFJVTEVfc3RhYXRfZGVyX21lc3NzdGVsbGVfbGFuZyA9M0QgMzQsPTIwCisJCVJVTEVfc3Rh
YXRfZGVyX21lc3NzdGVsbGVfa3VyeiA9M0QgMzUsIFJVTEVfc3RhYXRfZGVyX21lc3NzdGVsbGVf
cyA9M0QgMz0KNiw9MjAKKwkJUlVMRV9tZXNzc3RlbGxlID0zRCAzNywgUlVMRV9tZXNzbGFib3Ig
PTNEIDM4LCBSVUxFX3Byb2JlX2lkID0zRCAzOSwgUlVMPQpFX21lc3N1bmdzX2lkID0zRCA0MCw9
MjAKKwkJUlVMRV9wcm9iZW5fbnIgPTNEIDQxLCBSVUxFX2hhdXB0cHJvYmVubnVtbWVyID0zRCA0
MiwgUlVMRV9uZWJlbnByb2Jlbm51PQptbWVyID0zRCA0Myw9MjAKKwkJUlVMRV9tZXNzcHJvZ3Jh
bW1fYyA9M0QgNDQsIFJVTEVfbWVzc3Byb2dyYW1tX3MgPTNEIDQ1LCBSVUxFX21lc3Nwcm9ncmFt
PQptX2xhbmQgPTNEIDQ2LD0yMAorCQlSVUxFX3Byb2JlbmFobWVpbnN0aXR1dGlvbiA9M0QgNDcs
IFJVTEVfcHJvYmVuYXJ0ID0zRCA0OCwgUlVMRV96ZWl0YmFzaXM9CiA9M0QgNDksPTIwCisJCVJV
TEVfemVpdGJhc2lzX3MgPTNEIDUwLCBSVUxFX3NvbGxfZGF0dW1fdWhyemVpdF9hID0zRCA1MSwg
UlVMRV9zb2xsX2RhdD0KdW1fdWhyemVpdF9lID0zRCA1Miw9MjAKKwkJUlVMRV91cnNwcnVuZ3Nf
ZGF0dW1fdWhyemVpdCA9M0QgNTMsIFJVTEVfcHJvYmVuYWhtZV9kYXR1bV91aHJ6ZWl0X2EgPTNE
PQogNTQsPTIwCisJCVJVTEVfcHJvYmVuYWhtZV9kYXR1bV91aHJ6ZWl0X2UgPTNEIDU1LCBSVUxF
X3Vtd2VsdGJlcmVpY2hfYyA9M0QgNTYsIFJVTD0KRV91bXdlbHRiZXJlaWNoX3MgPTNEIDU3LD0y
MAorCQlSVUxFX2Rlc2tyaXB0b3JlbiA9M0QgNTgsIFJVTEVfcmVpX3Byb2dyYW1tcHVua3QgPTNE
IDU5LCBSVUxFX3JlaV9wcm9ncmE9Cm1tcHVua3RncnVwcGUgPTNEIDYwLD0yMAorCQlSVUxFX3Jl
ZmVyZW56X2RhdHVtX3VocnplaXQgPTNEIDYxLCBSVUxFX3Rlc3RkYXRlbiA9M0QgNjIsIFJVTEVf
c3plbmFyaW89CiA9M0QgNjMsPTIwCisJCVJVTEVfc2VrX2RhdGVuYmFzaXMgPTNEIDY0LCBSVUxF
X3Nla19kYXRlbmJhc2lzX3MgPTNEIDY1LCBSVUxFX3VfaGVya3VuZj0KdHNsYW5kX2xhbmcgPTNE
IDY2LD0yMAorCQlSVUxFX3VfaGVya3VuZnRzbGFuZF9rdXJ6ID0zRCA2NywgUlVMRV91X2hlcmt1
bmZ0c2xhbmRfcyA9M0QgNjgsIFJVTEVfdV89CmdlbWVpbmRlc2NobHVlc3NlbCA9M0QgNjksPTIw
CisJCVJVTEVfdV9nZW1laW5kZW5hbWUgPTNEIDcwLCBSVUxFX3Vfb3J0c196dXNhdHprZW5uemFo
bCA9M0QgNzEsIFJVTEVfdV9rbz0Kb3JkaW5hdGVuID0zRCA3Miw9MjAKKwkJUlVMRV91X2tvb3Jk
aW5hdGVuX3MgPTNEIDczLCBSVUxFX3Vfb3J0c196dXNhdHpjb2RlID0zRCA3NCwgUlVMRV91X29y
dHNfPQp6dXNhdHp0ZXh0ID0zRCA3NSw9MjAKKwkJUlVMRV91X251dHNfY29kZSA9M0QgNzYsIFJV
TEVfcF9oZXJrdW5mdHNsYW5kX2xhbmcgPTNEIDc3LCBSVUxFX3BfaGVya3VuPQpmdHNsYW5kX2t1
cnogPTNEIDc4LD0yMAorCQlSVUxFX3BfaGVya3VuZnRzbGFuZF9zID0zRCA3OSwgUlVMRV9wX2dl
bWVpbmRlc2NobHVlc3NlbCA9M0QgODAsIFJVTEVfcF89CmdlbWVpbmRlbmFtZSA9M0QgODEsPTIw
CisJCVJVTEVfcF9vcnRzX3p1c2F0emtlbm56YWhsID0zRCA4MiwgUlVMRV9wX2tvb3JkaW5hdGVu
ID0zRCA4MywgUlVMRV9wX2tvbz0KcmRpbmF0ZW5fcyA9M0QgODQsPTIwCisJCVJVTEVfcF9vcnRz
X3p1c2F0emNvZGUgPTNEIDg1LCBSVUxFX3Bfb3J0c196dXNhdHp0ZXh0ID0zRCA4NiwgUlVMRV9w
X251dD0Kc19jb2RlID0zRCA4Nyw9MjAKKwkJUlVMRV9wX3NpdGVfaWQgPTNEIDg4LCBSVUxFX3Bf
c2l0ZV9uYW1lID0zRCA4OSwgUlVMRV9wX2hvZWhlX25uID0zRCA5MCwgPQpSVUxFX3BfaG9laGVf
bGFuZCA9M0QgOTEsPTIwCisJCVJVTEVfbWVocnp3ZWNrZmVsZCA9M0QgOTIsIFJVTEVfbWVzc19k
YXR1bV91aHJ6ZWl0ID0zRCA5MywgUlVMRV9tZXNzemVpdD0KX3Nla3VuZGVuID0zRCA5NCw9MjAK
KwkJUlVMRV9tZXNzbWV0aG9kZV9jID0zRCA5NSwgUlVMRV9tZXNzbWV0aG9kZV9zID0zRCA5Niwg
UlVMRV9iZWFyYmVpdHVuZ3NzPQp0YXR1cyA9M0QgOTcsPTIwCisJCVJVTEVfcGVwX2ZsYWcgPTNE
IDk4LCBSVUxFX2VyZmFzc3VuZ19hYmdlc2NobG9zc2VuID0zRCA5OSwgUlVMRV9wcm9iZW56dT0K
c2F0emJlc2NocmVpYnVuZyA9M0QgMTAwLD0yMAorCQlSVUxFX3B6Yl9zID0zRCAxMDEsIFJVTEVf
bWVzc3dlcnQgPTNEIDEwMiwgUlVMRV9tZXNzd2VydF9zID0zRCAxMDMsIFJVTEU9Cl9tZXNzd2Vy
dF9pID0zRCAxMDQsPTIwCisJCVJVTEVfbWVzc3dlcnRfZyA9M0QgMTA1LCBSVUxFX21lc3N3ZXJ0
X253ZyA9M0QgMTA2LCBSVUxFX21lc3N3ZXJ0X253Z19zID0KPTNEIDEwNyw9MjAKKwkJUlVMRV9t
ZXNzd2VydF9ud2dfaSA9M0QgMTA4LCBSVUxFX21lc3N3ZXJ0X253Z19nID0zRCAxMDksIFJVTEVf
a29tbWVudGFyPQogPTNEIDExMCw9MjAKKwkJUlVMRV9rb21tZW50YXJfdCA9M0QgMTExLCBSVUxF
X3Byb2JlbmtvbW1lbnRhciA9M0QgMTEyLCBSVUxFX3Byb2JlbmtvbW1lPQpudGFyX3QgPTNEIDEx
MzsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHJ1bGVOYW1lcyA9M0QgeworCQkicHJv
YmVuZGF0ZWkiLCAiZW5kIiwgInByb2JlIiwgInByb2JlZGF0ZW4iLCAibWVzc3VuZyIsICJtZXNz
X2hlYWRlciIsPTIwCisJCSJtZXNzdW5nZGF0ZW4iLCAiZGIiLCAibXAiLCAidWIiLCAicmVpIiwg
InBoIiwgInBnIiwgInBrIiwgInpiIiwgInB6YiIsPTIwCisJCSJwa29tIiwgInNkbSIsICJwbmgi
LCAibW0iLCAibXciLCAibWVzc19rb21tZW50YXIiLCAicG4iLCAidXMiLCAidXJzcHJ1bj0KZ3Nv
cnRkYXRlbiIsPTIwCisJCSJ1aCIsICJ1ZyIsICJ1ayIsICJ2ZXJzaW9uIiwgInVlYmVydHJhZ3Vu
Z3Nmb3JtYXQiLCAiZGF0ZW5iYXNpcyIsICJkYXRlbj0KYmFzaXNfcyIsPTIwCisJCSJuZXR6a2Vu
bnVuZyIsICJlcnpldWdlciIsICJzdGFhdF9kZXJfbWVzc3N0ZWxsZV9sYW5nIiwgInN0YWF0X2Rl
cl9tZXNzcz0KdGVsbGVfa3VyeiIsPTIwCisJCSJzdGFhdF9kZXJfbWVzc3N0ZWxsZV9zIiwgIm1l
c3NzdGVsbGUiLCAibWVzc2xhYm9yIiwgInByb2JlX2lkIiwgIm1lc3N1bj0KZ3NfaWQiLD0yMAor
CQkicHJvYmVuX25yIiwgImhhdXB0cHJvYmVubnVtbWVyIiwgIm5lYmVucHJvYmVubnVtbWVyIiwg
Im1lc3Nwcm9ncmFtbV9jIiw9MjAKKwkJIm1lc3Nwcm9ncmFtbV9zIiwgIm1lc3Nwcm9ncmFtbV9s
YW5kIiwgInByb2JlbmFobWVpbnN0aXR1dGlvbiIsICJwcm9iZW5hPQpydCIsPTIwCisJCSJ6ZWl0
YmFzaXMiLCAiemVpdGJhc2lzX3MiLCAic29sbF9kYXR1bV91aHJ6ZWl0X2EiLCAic29sbF9kYXR1
bV91aHJ6ZWl0Xz0KZSIsPTIwCisJCSJ1cnNwcnVuZ3NfZGF0dW1fdWhyemVpdCIsICJwcm9iZW5h
aG1lX2RhdHVtX3VocnplaXRfYSIsICJwcm9iZW5haG1lX2RhdD0KdW1fdWhyemVpdF9lIiw9MjAK
KwkJInVtd2VsdGJlcmVpY2hfYyIsICJ1bXdlbHRiZXJlaWNoX3MiLCAiZGVza3JpcHRvcmVuIiwg
InJlaV9wcm9ncmFtbXB1bmt0PQoiLD0yMAorCQkicmVpX3Byb2dyYW1tcHVua3RncnVwcGUiLCAi
cmVmZXJlbnpfZGF0dW1fdWhyemVpdCIsICJ0ZXN0ZGF0ZW4iLCAic3plbmE9CnJpbyIsPTIwCisJ
CSJzZWtfZGF0ZW5iYXNpcyIsICJzZWtfZGF0ZW5iYXNpc19zIiwgInVfaGVya3VuZnRzbGFuZF9s
YW5nIiwgInVfaGVya3VuZj0KdHNsYW5kX2t1cnoiLD0yMAorCQkidV9oZXJrdW5mdHNsYW5kX3Mi
LCAidV9nZW1laW5kZXNjaGx1ZXNzZWwiLCAidV9nZW1laW5kZW5hbWUiLCAidV9vcnRzX3o9CnVz
YXR6a2VubnphaGwiLD0yMAorCQkidV9rb29yZGluYXRlbiIsICJ1X2tvb3JkaW5hdGVuX3MiLCAi
dV9vcnRzX3p1c2F0emNvZGUiLCAidV9vcnRzX3p1c2F0enQ9CmV4dCIsPTIwCisJCSJ1X251dHNf
Y29kZSIsICJwX2hlcmt1bmZ0c2xhbmRfbGFuZyIsICJwX2hlcmt1bmZ0c2xhbmRfa3VyeiIsICJw
X2hlcmt1bj0KZnRzbGFuZF9zIiw9MjAKKwkJInBfZ2VtZWluZGVzY2hsdWVzc2VsIiwgInBfZ2Vt
ZWluZGVuYW1lIiwgInBfb3J0c196dXNhdHprZW5uemFobCIsICJwX2tvPQpvcmRpbmF0ZW4iLD0y
MAorCQkicF9rb29yZGluYXRlbl9zIiwgInBfb3J0c196dXNhdHpjb2RlIiwgInBfb3J0c196dXNh
dHp0ZXh0IiwgInBfbnV0c19jb2Q9CmUiLD0yMAorCQkicF9zaXRlX2lkIiwgInBfc2l0ZV9uYW1l
IiwgInBfaG9laGVfbm4iLCAicF9ob2VoZV9sYW5kIiwgIm1laHJ6d2Vja2ZlbGQ9CiIsPTIwCisJ
CSJtZXNzX2RhdHVtX3VocnplaXQiLCAibWVzc3plaXRfc2VrdW5kZW4iLCAibWVzc21ldGhvZGVf
YyIsICJtZXNzbWV0aG9kZT0KX3MiLD0yMAorCQkiYmVhcmJlaXR1bmdzc3RhdHVzIiwgInBlcF9m
bGFnIiwgImVyZmFzc3VuZ19hYmdlc2NobG9zc2VuIiwgInByb2Jlbnp1c2E9CnR6YmVzY2hyZWli
dW5nIiw9MjAKKwkJInB6Yl9zIiwgIm1lc3N3ZXJ0IiwgIm1lc3N3ZXJ0X3MiLCAibWVzc3dlcnRf
aSIsICJtZXNzd2VydF9nIiwgIm1lc3N3ZXJ0PQpfbndnIiw9MjAKKwkJIm1lc3N3ZXJ0X253Z19z
IiwgIm1lc3N3ZXJ0X253Z19pIiwgIm1lc3N3ZXJ0X253Z19nIiwgImtvbW1lbnRhciIsICJrb21t
PQplbnRhcl90Iiw9MjAKKwkJInByb2JlbmtvbW1lbnRhciIsICJwcm9iZW5rb21tZW50YXJfdCIK
Kwl9OworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gX0xJVEVSQUxfTkFNRVMgPTNE
IHsKKwkJbnVsbCwgIiclRU5ERSUnIiwgIiclUFJPQkUlJyIsICInJU1FU1NVTkclJyIsICInJVVS
U1BSVU5HU09SVCUnIiwgIicgJyIKKwl9OworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1td
IF9TWU1CT0xJQ19OQU1FUyA9M0QgeworCQludWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBu
dWxsLCAiVkVSU0lPTiIsICJVRUJFUlRSQUdVTkdTRk9STUFUIiw9MjAKKwkJIkRBVEVOQkFTSVMi
LCAiREFURU5CQVNJU19TIiwgIk5FVFpLRU5OVU5HIiwgIkVSWkVVR0VSIiwgIlNUQUFUX0RFUl9N
RVNTPQpTVEVMTEVfTEFORyIsPTIwCisJCSJTVEFBVF9ERVJfTUVTU1NURUxMRV9LVVJaIiwgIlNU
QUFUX0RFUl9NRVNTU1RFTExFX1MiLCAiTUVTU1NURUxMRSIsICJNRT0KU1NMQUJPUiIsPTIwCisJ
CSJQUk9CRV9JRCIsICJNRVNTVU5HU19JRCIsICJQUk9CRU5fTlIiLCAiSEFVUFRQUk9CRU5OVU1N
RVIiLCAiTkVCRU5QUk9CRT0KTk5VTU1FUiIsPTIwCisJCSJNRVNTUFJPR1JBTU1fQyIsICJNRVNT
UFJPR1JBTU1fUyIsICJNRVNTUFJPR1JBTU1fTEFORCIsICJQUk9CRU5BSE1FSU5TVD0KSVRVVElP
TiIsPTIwCisJCSJQUk9CRU5BUlQiLCAiWkVJVEJBU0lTIiwgIlpFSVRCQVNJU19TIiwgIlNPTExf
REFUVU1fVUhSWkVJVF9BIiwgIlNPTExfRD0KQVRVTV9VSFJaRUlUX0UiLD0yMAorCQkiVVJTUFJV
TkdTX0RBVFVNX1VIUlpFSVQiLCAiUFJPQkVOQUhNRV9EQVRVTV9VSFJaRUlUX0EiLCAiUFJPQkVO
QUhNRV9EQVQ9ClVNX1VIUlpFSVRfRSIsPTIwCisJCSJVTVdFTFRCRVJFSUNIX0MiLCAiVU1XRUxU
QkVSRUlDSF9TIiwgIkRFU0tSSVBUT1JFTiIsICJSRUlfUFJPR1JBTU1QVU5LVD0KIiw9MjAKKwkJ
IlJFSV9QUk9HUkFNTVBVTktUR1JVUFBFIiwgIlJFRkVSRU5aX0RBVFVNX1VIUlpFSVQiLCAiVEVT
VERBVEVOIiwgIlNaRU5BPQpSSU8iLD0yMAorCQkiU0VLX0RBVEVOQkFTSVMiLCAiU0VLX0RBVEVO
QkFTSVNfUyIsICJVX0hFUktVTkZUU0xBTkRfTEFORyIsICJVX0hFUktVTkY9ClRTTEFORF9LVVJa
Iiw9MjAKKwkJIlVfSEVSS1VORlRTTEFORF9TIiwgIlVfR0VNRUlOREVTQ0hMVUVTU0VMIiwgIlVf
R0VNRUlOREVOQU1FIiwgIlVfT1JUU19aPQpVU0FUWktFTk5aQUhMIiw9MjAKKwkJIlVfS09PUkRJ
TkFURU4iLCAiVV9LT09SRElOQVRFTl9TIiwgIlVfT1JUU19aVVNBVFpDT0RFIiwgIlVfT1JUU19a
VVNBVFpUPQpFWFQiLD0yMAorCQkiVV9OVVRTX0NPREUiLCAiUF9IRVJLVU5GVFNMQU5EX0xBTkci
LCAiUF9IRVJLVU5GVFNMQU5EX0tVUloiLCAiUF9IRVJLVU49CkZUU0xBTkRfUyIsPTIwCisJCSJQ
X0dFTUVJTkRFU0NITFVFU1NFTCIsICJQX0dFTUVJTkRFTkFNRSIsICJQX09SVFNfWlVTQVRaS0VO
TlpBSEwiLCAiUF9LTz0KT1JESU5BVEVOIiw9MjAKKwkJIlBfS09PUkRJTkFURU5fUyIsICJQX09S
VFNfWlVTQVRaQ09ERSIsICJQX09SVFNfWlVTQVRaVEVYVCIsICJQX05VVFNfQ09EPQpFIiw9MjAK
KwkJIlBfU0lURV9JRCIsICJQX1NJVEVfTkFNRSIsICJQX0hPRUhFX05OIiwgIlBfSE9FSEVfTEFO
RCIsICJNRUhSWldFQ0tGRUxEPQoiLD0yMAorCQkiTUVTU19EQVRVTV9VSFJaRUlUIiwgIk1FU1Na
RUlUX1NFS1VOREVOIiwgIk1FU1NNRVRIT0RFX0MiLCAiTUVTU01FVEhPREU9Cl9TIiw9MjAKKwkJ
IkJFQVJCRUlUVU5HU1NUQVRVUyIsICJQRVBfRkxBRyIsICJFUkZBU1NVTkdfQUJHRVNDSExPU1NF
TiIsICJQUk9CRU5aVVNBPQpUWkJFU0NIUkVJQlVORyIsPTIwCisJCSJQWkJfUyIsICJNRVNTV0VS
VCIsICJNRVNTV0VSVF9TIiwgIk1FU1NXRVJUX0kiLCAiTUVTU1dFUlRfRyIsICJNRVNTV0VSVD0K
X05XRyIsPTIwCisJCSJNRVNTV0VSVF9OV0dfUyIsICJNRVNTV0VSVF9OV0dfSSIsICJNRVNTV0VS
VF9OV0dfRyIsICJLT01NRU5UQVIiLCAiS09NTT0KRU5UQVJfVCIsPTIwCisJCSJQUk9CRU5LT01N
RU5UQVIiLCAiUFJPQkVOS09NTUVOVEFSX1QiLCAiV1MiLCAiTkVXTElORSIsICJTVFJJTkdfRVND
Iiw9MjAKKwkJIlNUUklORyIsICJDIgorCX07CisJcHVibGljIHN0YXRpYyBmaW5hbCBWb2NhYnVs
YXJ5IFZPQ0FCVUxBUlkgPTNEIG5ldyBWb2NhYnVsYXJ5SW1wbChfTElURVJBTD0KX05BTUVTLCBf
U1lNQk9MSUNfTkFNRVMpOworCisJLyoqCisJICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayAjVk9D
QUJVTEFSWX0gaW5zdGVhZC4KKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgZmlu
YWwgU3RyaW5nW10gdG9rZW5OYW1lczsKKwlzdGF0aWMgeworCQl0b2tlbk5hbWVzID0zRCBuZXcg
U3RyaW5nW19TWU1CT0xJQ19OQU1FUy5sZW5ndGhdOworCQlmb3IgKGludCBpID0zRCAwOyBpIDwg
dG9rZW5OYW1lcy5sZW5ndGg7IGkrKykgeworCQkJdG9rZW5OYW1lc1tpXSA9M0QgVk9DQUJVTEFS
WS5nZXRMaXRlcmFsTmFtZShpKTsKKwkJCWlmICh0b2tlbk5hbWVzW2ldID0zRD0zRCBudWxsKSB7
CisJCQkJdG9rZW5OYW1lc1tpXSA9M0QgVk9DQUJVTEFSWS5nZXRTeW1ib2xpY05hbWUoaSk7CisJ
CQl9CisKKwkJCWlmICh0b2tlbk5hbWVzW2ldID0zRD0zRCBudWxsKSB7CisJCQkJdG9rZW5OYW1l
c1tpXSA9M0QgIjxJTlZBTElEPiI7CisJCQl9CisJCX0KKwl9CisKKwlAT3ZlcnJpZGUKKwlARGVw
cmVjYXRlZAorCXB1YmxpYyBTdHJpbmdbXSBnZXRUb2tlbk5hbWVzKCkgeworCQlyZXR1cm4gdG9r
ZW5OYW1lczsKKwl9CisKKwlAT3ZlcnJpZGUKKworCXB1YmxpYyBWb2NhYnVsYXJ5IGdldFZvY2Fi
dWxhcnkoKSB7CisJCXJldHVybiBWT0NBQlVMQVJZOworCX0KKworCUBPdmVycmlkZQorCXB1Ymxp
YyBTdHJpbmcgZ2V0R3JhbW1hckZpbGVOYW1lKCkgeyByZXR1cm4gIkxhZi5nNCI7IH0KKworCUBP
dmVycmlkZQorCXB1YmxpYyBTdHJpbmdbXSBnZXRSdWxlTmFtZXMoKSB7IHJldHVybiBydWxlTmFt
ZXM7IH0KKworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0U2VyaWFsaXplZEFUTigpIHsg
cmV0dXJuIF9zZXJpYWxpemVkQVROOyB9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQVROIGdldEFU
TigpIHsgcmV0dXJuIF9BVE47IH0KKworCXB1YmxpYyBMYWZQYXJzZXIoVG9rZW5TdHJlYW0gaW5w
dXQpIHsKKwkJc3VwZXIoaW5wdXQpOworCQlfaW50ZXJwID0zRCBuZXcgUGFyc2VyQVROU2ltdWxh
dG9yKHRoaXMsX0FUTixfZGVjaXNpb25Ub0RGQSxfc2hhcmVkQ29udGU9Cnh0Q2FjaGUpOworCX0K
KwlwdWJsaWMgc3RhdGljIGNsYXNzIFByb2JlbmRhdGVpQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1
bGVDb250ZXh0IHsKKwkJcHVibGljIFRlcm1pbmFsTm9kZSBFT0YoKSB7IHJldHVybiBnZXRUb2tl
bihMYWZQYXJzZXIuRU9GLCAwKTsgfQorCQlwdWJsaWMgTGlzdDxQcm9iZUNvbnRleHQ+IHByb2Jl
KCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0cyhQcm9iZUNvbnRleHQuY2xhc3MpOworCQl9
CisJCXB1YmxpYyBQcm9iZUNvbnRleHQgcHJvYmUoaW50IGkpIHsKKwkJCXJldHVybiBnZXRSdWxl
Q29udGV4dChQcm9iZUNvbnRleHQuY2xhc3MsaSk7CisJCX0KKwkJcHVibGljIEVuZENvbnRleHQg
ZW5kKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KEVuZENvbnRleHQuY2xhc3MsMCk7CisJ
CX0KKwkJcHVibGljIFByb2JlbmRhdGVpQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQs
IGludCBpbnZva2luZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOwor
CQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVf
cHJvYmVuZGF0ZWk7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJz
ZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExh
Zkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJQcm89CmJlbmRhdGVpKHRo
aXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVM
aXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3Rl
bmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdFByb2I9CmVuZGF0ZWkodGhpcyk7CisJ
CX0KKwl9CisKKwlwdWJsaWMgZmluYWwgUHJvYmVuZGF0ZWlDb250ZXh0IHByb2JlbmRhdGVpKCkg
dGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uPQogeworCQlQcm9iZW5kYXRlaUNvbnRleHQgX2xv
Y2FsY3R4ID0zRCBuZXcgUHJvYmVuZGF0ZWlDb250ZXh0KF9jdHgsIGdldFN0YXRlKCk9Cik7CisJ
CWVudGVyUnVsZShfbG9jYWxjdHgsIDAsIFJVTEVfcHJvYmVuZGF0ZWkpOworCQlpbnQgX2xhOwor
CQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJc2V0U3Rh
dGUoMjMxKTsKKwkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1dC5M
QSgxKTsKKwkJCXdoaWxlIChfbGE9M0Q9M0RUX18xKSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRT
dGF0ZSgyMjgpOworCQkJCXByb2JlKCk7CisJCQkJfQorCQkJCX0KKwkJCQlzZXRTdGF0ZSgyMzMp
OworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7
CisJCQl9CisJCQlzZXRTdGF0ZSgyMzUpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlp
ZiAoX2xhPTNEPTNEVF9fMCkgeworCQkJCXsKKwkJCQlzZXRTdGF0ZSgyMzQpOworCQkJCWVuZCgp
OworCQkJCX0KKwkJCX0KKworCQkJc2V0U3RhdGUoMjM3KTsKKwkJCW1hdGNoKEVPRik7CisJCQl9
CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHgu
ZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsK
KwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJ
ZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0
aWMgY2xhc3MgRW5kQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGlj
IEVuZENvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0ZSkg
eworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVi
bGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX2VuZDsgfQorCQlAT3ZlcnJpZGUK
KwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJ
CQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxp
c3RlbmVyKS5lbnRlckVuZD0KKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9p
ZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5l
ciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdEVu
ZCg9CnRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIEVuZENvbnRleHQgZW5kKCkgdGhy
b3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJRW5kQ29udGV4dCBfbG9jYWxjdHggPTNEIG5l
dyBFbmRDb250ZXh0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAy
LCBSVUxFX2VuZCk7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJ
CQl7CisJCQlzZXRTdGF0ZSgyMzkpOworCQkJbWF0Y2goVF9fMCk7CisJCQl9CisJCX0KKwkJY2F0
Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0z
RCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5k
bGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsK
KwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUHJv
YmVDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgTGlzdDxQcm9i
ZWRhdGVuQ29udGV4dD4gcHJvYmVkYXRlbigpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dHMo
UHJvYmVkYXRlbkNvbnRleHQuY2xhc3MpOworCQl9CisJCXB1YmxpYyBQcm9iZWRhdGVuQ29udGV4
dCBwcm9iZWRhdGVuKGludCBpKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoUHJvYmVkYXRl
bkNvbnRleHQuY2xhc3MsaSk7CisJCX0KKwkJcHVibGljIFByb2JlQ29udGV4dChQYXJzZXJSdWxl
Q29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGlu
dm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgp
IHsgcmV0dXJuIFJVTEVfcHJvYmU7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVy
UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0
YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJQcm89CmJl
KHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRy
ZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxp
c3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdFByb2I9CmUodGhpcyk7CisJCX0K
Kwl9CisKKwlwdWJsaWMgZmluYWwgUHJvYmVDb250ZXh0IHByb2JlKCkgdGhyb3dzIFJlY29nbml0
aW9uRXhjZXB0aW9uIHsKKwkJUHJvYmVDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFByb2JlQ29u
dGV4dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgNCwgUlVMRV9w
cm9iZSk7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwg
MSk7CisJCQl7CisJCQlzZXRTdGF0ZSgyNDEpOworCQkJbWF0Y2goVF9fMSk7CisJCQlzZXRTdGF0
ZSgyNDMpOz0yMAorCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCV9sYSA9M0QgX2lucHV0
LkxBKDEpOworCQkJZG8geworCQkJCXsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMjQyKTsKKwkJCQlw
cm9iZWRhdGVuKCk7CisJCQkJfQorCQkJCX0KKwkJCQlzZXRTdGF0ZSgyNDUpOz0yMAorCQkJCV9l
cnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9IHdo
aWxlICggKCgoX2xhKSAmIH4weDNmKSA9M0Q9M0QgMCAmJiAoKDFMIDw8IF9sYSkgJiAoKDFMIDw8
IFRfXzIpIHwgKD0KMUwgPDwgVF9fMykgfCAoMUwgPDwgVkVSU0lPTikgfCAoMUwgPDwgVUVCRVJU
UkFHVU5HU0ZPUk1BVCkgfCAoMUwgPDwgREFURU5CPQpBU0lTKSB8ICgxTCA8PCBEQVRFTkJBU0lT
X1MpIHwgKDFMIDw8IE5FVFpLRU5OVU5HKSB8ICgxTCA8PCBFUlpFVUdFUikgfCAoMUw9CiA8PCBT
VEFBVF9ERVJfTUVTU1NURUxMRV9MQU5HKSB8ICgxTCA8PCBTVEFBVF9ERVJfTUVTU1NURUxMRV9L
VVJaKSB8ICgxTCA8PD0KIFNUQUFUX0RFUl9NRVNTU1RFTExFX1MpIHwgKDFMIDw8IE1FU1NTVEVM
TEUpIHwgKDFMIDw8IE1FU1NMQUJPUikgfCAoMUwgPDwgPQpQUk9CRV9JRCkgfCAoMUwgPDwgTUVT
U1VOR1NfSUQpIHwgKDFMIDw8IFBST0JFTl9OUikgfCAoMUwgPDwgSEFVUFRQUk9CRU5OVU09Ck1F
UikgfCAoMUwgPDwgTkVCRU5QUk9CRU5OVU1NRVIpIHwgKDFMIDw8IE1FU1NQUk9HUkFNTV9DKSB8
ICgxTCA8PCBNRVNTUFJPRz0KUkFNTV9TKSB8ICgxTCA8PCBNRVNTUFJPR1JBTU1fTEFORCkgfCAo
MUwgPDwgUFJPQkVOQUhNRUlOU1RJVFVUSU9OKSB8ICgxTCA8PQo8IFBST0JFTkFSVCkgfCAoMUwg
PDwgWkVJVEJBU0lTKSB8ICgxTCA8PCBaRUlUQkFTSVNfUykgfCAoMUwgPDwgU09MTF9EQVRVTV89
ClVIUlpFSVRfQSkgfCAoMUwgPDwgU09MTF9EQVRVTV9VSFJaRUlUX0UpIHwgKDFMIDw8IFBST0JF
TkFITUVfREFUVU1fVUhSWkVJVD0KX0EpIHwgKDFMIDw8IFBST0JFTkFITUVfREFUVU1fVUhSWkVJ
VF9FKSB8ICgxTCA8PCBVTVdFTFRCRVJFSUNIX0MpIHwgKDFMIDw8PQogVU1XRUxUQkVSRUlDSF9T
KSB8ICgxTCA8PCBERVNLUklQVE9SRU4pIHwgKDFMIDw8IFJFSV9QUk9HUkFNTVBVTktUKSB8ICgx
TCA9Cjw8IFJFSV9QUk9HUkFNTVBVTktUR1JVUFBFKSB8ICgxTCA8PCBSRUZFUkVOWl9EQVRVTV9V
SFJaRUlUKSB8ICgxTCA8PCBURVNURD0KQVRFTikgfCAoMUwgPDwgU1pFTkFSSU8pIHwgKDFMIDw8
IFNFS19EQVRFTkJBU0lTKSB8ICgxTCA8PCBQX0hFUktVTkZUU0xBTkRfPQpMQU5HKSB8ICgxTCA8
PCBQX0hFUktVTkZUU0xBTkRfS1VSWikgfCAoMUwgPDwgUF9IRVJLVU5GVFNMQU5EX1MpIHwgKDFM
IDw8IFA9Cl9HRU1FSU5ERVNDSExVRVNTRUwpIHwgKDFMIDw8IFBfR0VNRUlOREVOQU1FKSB8ICgx
TCA8PCBQX09SVFNfWlVTQVRaS0VOTlpBSD0KTCkgfCAoMUwgPDwgUF9LT09SRElOQVRFTikgfCAo
MUwgPDwgUF9LT09SRElOQVRFTl9TKSB8ICgxTCA8PCBQX09SVFNfWlVTQVRaPQpDT0RFKSkpICE9
M0QgMCkgfHwgKCgoKF9sYSAtIDY0KSkgJiB+MHgzZikgPTNEPTNEIDAgJiYgKCgxTCA8PCAoX2xh
IC0gNjQpKSA9CiYgKCgxTCA8PCAoUF9PUlRTX1pVU0FUWlRFWFQgLSA2NCkpIHwgKDFMIDw8IChQ
X05VVFNfQ09ERSAtIDY0KSkgfCAoMUwgPDwgKD0KUF9TSVRFX0lEIC0gNjQpKSB8ICgxTCA8PCAo
UF9TSVRFX05BTUUgLSA2NCkpIHwgKDFMIDw8IChQX0hPRUhFX05OIC0gNjQpKSB8PQogKDFMIDw8
IChQX0hPRUhFX0xBTkQgLSA2NCkpIHwgKDFMIDw8IChNRUhSWldFQ0tGRUxEIC0gNjQpKSB8ICgx
TCA8PCAoTUVTU189CkRBVFVNX1VIUlpFSVQgLSA2NCkpIHwgKDFMIDw8IChNRVNTWkVJVF9TRUtV
TkRFTiAtIDY0KSkgfCAoMUwgPDwgKE1FU1NNRVRITz0KREVfQyAtIDY0KSkgfCAoMUwgPDwgKE1F
U1NNRVRIT0RFX1MgLSA2NCkpIHwgKDFMIDw8IChCRUFSQkVJVFVOR1NTVEFUVVMgLSA2PQo0KSkg
fCAoMUwgPDwgKFBFUF9GTEFHIC0gNjQpKSB8ICgxTCA8PCAoRVJGQVNTVU5HX0FCR0VTQ0hMT1NT
RU4gLSA2NCkpIHwgKDE9CkwgPDwgKFBST0JFTlpVU0FUWkJFU0NIUkVJQlVORyAtIDY0KSkgfCAo
MUwgPDwgKFBaQl9TIC0gNjQpKSB8ICgxTCA8PCAoTUVTUz0KV0VSVCAtIDY0KSkgfCAoMUwgPDwg
KEtPTU1FTlRBUiAtIDY0KSkgfCAoMUwgPDwgKEtPTU1FTlRBUl9UIC0gNjQpKSB8ICgxTCA8PQo8
IChQUk9CRU5LT01NRU5UQVIgLSA2NCkpIHwgKDFMIDw8IChQUk9CRU5LT01NRU5UQVJfVCAtIDY0
KSkpKSAhPTNEIDApICk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9u
IHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJl
cG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOwor
CQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4
OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUHJvYmVkYXRlbkNvbnRleHQgZXh0ZW5kcyBQ
YXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBEYkNvbnRleHQgZGIoKSB7CisJCQlyZXR1cm4g
Z2V0UnVsZUNvbnRleHQoRGJDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBWZXJzaW9u
Q29udGV4dCB2ZXJzaW9uKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KFZlcnNpb25Db250
ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBVZWJlcnRyYWd1bmdzZm9ybWF0Q29udGV4dCB1
ZWJlcnRyYWd1bmdzZm9ybWF0KCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KFVlYmVydHJh
Z3VuZ3Nmb3JtYXRDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBOZXR6a2VubnVuZ0Nv
bnRleHQgbmV0emtlbm51bmcoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoTmV0emtlbm51
bmdDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBFcnpldWdlckNvbnRleHQgZXJ6ZXVn
ZXIoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoRXJ6ZXVnZXJDb250ZXh0LmNsYXNzLDAp
OworCQl9CisJCXB1YmxpYyBTZG1Db250ZXh0IHNkbSgpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29u
dGV4dChTZG1Db250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBNZXNzc3RlbGxlQ29udGV4
dCBtZXNzc3RlbGxlKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KE1lc3NzdGVsbGVDb250
ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBNZXNzbGFib3JDb250ZXh0IG1lc3NsYWJvcigp
IHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChNZXNzbGFib3JDb250ZXh0LmNsYXNzLDApOwor
CQl9CisJCXB1YmxpYyBQcm9iZV9pZENvbnRleHQgcHJvYmVfaWQoKSB7CisJCQlyZXR1cm4gZ2V0
UnVsZUNvbnRleHQoUHJvYmVfaWRDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQbmhD
b250ZXh0IHBuaCgpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChQbmhDb250ZXh0LmNsYXNz
LDApOworCQl9CisJCXB1YmxpYyBNcENvbnRleHQgbXAoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNv
bnRleHQoTXBDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBNZXNzcHJvZ3JhbW1fbGFu
ZENvbnRleHQgbWVzc3Byb2dyYW1tX2xhbmQoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQo
TWVzc3Byb2dyYW1tX2xhbmRDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQcm9iZW5h
aG1laW5zdGl0dXRpb25Db250ZXh0IHByb2JlbmFobWVpbnN0aXR1dGlvbigpIHsKKwkJCXJldHVy
biBnZXRSdWxlQ29udGV4dChQcm9iZW5haG1laW5zdGl0dXRpb25Db250ZXh0LmNsYXNzLDApOwor
CQl9CisJCXB1YmxpYyBQcm9iZW5hcnRDb250ZXh0IHByb2JlbmFydCgpIHsKKwkJCXJldHVybiBn
ZXRSdWxlQ29udGV4dChQcm9iZW5hcnRDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBa
YkNvbnRleHQgemIoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoWmJDb250ZXh0LmNsYXNz
LDApOworCQl9CisJCXB1YmxpYyBQcm9iZW5haG1lX2RhdHVtX3VocnplaXRfYUNvbnRleHQgcHJv
YmVuYWhtZV9kYXR1bV91aHJ6ZWl0X2EoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoUHJv
YmVuYWhtZV9kYXR1bV91aHJ6ZWl0X2FDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQ
cm9iZW5haG1lX2RhdHVtX3VocnplaXRfZUNvbnRleHQgcHJvYmVuYWhtZV9kYXR1bV91aHJ6ZWl0
X2UoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoUHJvYmVuYWhtZV9kYXR1bV91aHJ6ZWl0
X2VDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBTb2xsX2RhdHVtX3VocnplaXRfYUNv
bnRleHQgc29sbF9kYXR1bV91aHJ6ZWl0X2EoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQo
U29sbF9kYXR1bV91aHJ6ZWl0X2FDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBTb2xs
X2RhdHVtX3VocnplaXRfZUNvbnRleHQgc29sbF9kYXR1bV91aHJ6ZWl0X2UoKSB7CisJCQlyZXR1
cm4gZ2V0UnVsZUNvbnRleHQoU29sbF9kYXR1bV91aHJ6ZWl0X2VDb250ZXh0LmNsYXNzLDApOwor
CQl9CisJCXB1YmxpYyBVYkNvbnRleHQgdWIoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQo
VWJDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBEZXNrcmlwdG9yZW5Db250ZXh0IGRl
c2tyaXB0b3JlbigpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChEZXNrcmlwdG9yZW5Db250
ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBSZWlDb250ZXh0IHJlaSgpIHsKKwkJCXJldHVy
biBnZXRSdWxlQ29udGV4dChSZWlDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBSZWZl
cmVuel9kYXR1bV91aHJ6ZWl0Q29udGV4dCByZWZlcmVuel9kYXR1bV91aHJ6ZWl0KCkgeworCQkJ
cmV0dXJuIGdldFJ1bGVDb250ZXh0KFJlZmVyZW56X2RhdHVtX3VocnplaXRDb250ZXh0LmNsYXNz
LDApOworCQl9CisJCXB1YmxpYyBUZXN0ZGF0ZW5Db250ZXh0IHRlc3RkYXRlbigpIHsKKwkJCXJl
dHVybiBnZXRSdWxlQ29udGV4dChUZXN0ZGF0ZW5Db250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1
YmxpYyBTemVuYXJpb0NvbnRleHQgc3plbmFyaW8oKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRl
eHQoU3plbmFyaW9Db250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBTZWtfZGF0ZW5iYXNp
c0NvbnRleHQgc2VrX2RhdGVuYmFzaXMoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoU2Vr
X2RhdGVuYmFzaXNDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBVc0NvbnRleHQgdXMo
KSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoVXNDb250ZXh0LmNsYXNzLDApOworCQl9CisJ
CXB1YmxpYyBQaENvbnRleHQgcGgoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoUGhDb250
ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQZ0NvbnRleHQgcGcoKSB7CisJCQlyZXR1cm4g
Z2V0UnVsZUNvbnRleHQoUGdDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQX29ydHNf
enVzYXR6a2VubnphaGxDb250ZXh0IHBfb3J0c196dXNhdHprZW5uemFobCgpIHsKKwkJCXJldHVy
biBnZXRSdWxlQ29udGV4dChQX29ydHNfenVzYXR6a2VubnphaGxDb250ZXh0LmNsYXNzLDApOwor
CQl9CisJCXB1YmxpYyBQa0NvbnRleHQgcGsoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQo
UGtDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQX29ydHNfenVzYXR6Y29kZUNvbnRl
eHQgcF9vcnRzX3p1c2F0emNvZGUoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoUF9vcnRz
X3p1c2F0emNvZGVDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQX29ydHNfenVzYXR6
dGV4dENvbnRleHQgcF9vcnRzX3p1c2F0enRleHQoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRl
eHQoUF9vcnRzX3p1c2F0enRleHRDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQX251
dHNfY29kZUNvbnRleHQgcF9udXRzX2NvZGUoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQo
UF9udXRzX2NvZGVDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQX3NpdGVfaWRDb250
ZXh0IHBfc2l0ZV9pZCgpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChQX3NpdGVfaWRDb250
ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQX3NpdGVfbmFtZUNvbnRleHQgcF9zaXRlX25h
bWUoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoUF9zaXRlX25hbWVDb250ZXh0LmNsYXNz
LDApOworCQl9CisJCXB1YmxpYyBQX2hvZWhlX25uQ29udGV4dCBwX2hvZWhlX25uKCkgeworCQkJ
cmV0dXJuIGdldFJ1bGVDb250ZXh0KFBfaG9laGVfbm5Db250ZXh0LmNsYXNzLDApOworCQl9CisJ
CXB1YmxpYyBQX2hvZWhlX2xhbmRDb250ZXh0IHBfaG9laGVfbGFuZCgpIHsKKwkJCXJldHVybiBn
ZXRSdWxlQ29udGV4dChQX2hvZWhlX2xhbmRDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1Ymxp
YyBNZWhyendlY2tmZWxkQ29udGV4dCBtZWhyendlY2tmZWxkKCkgeworCQkJcmV0dXJuIGdldFJ1
bGVDb250ZXh0KE1laHJ6d2Vja2ZlbGRDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBN
ZXNzdW5nQ29udGV4dCBtZXNzdW5nKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KE1lc3N1
bmdDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQemJDb250ZXh0IHB6YigpIHsKKwkJ
CXJldHVybiBnZXRSdWxlQ29udGV4dChQemJDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1Ymxp
YyBQa29tQ29udGV4dCBwa29tKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KFBrb21Db250
ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQcm9iZWRhdGVuQ29udGV4dChQYXJzZXJSdWxl
Q29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGlu
dm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgp
IHsgcmV0dXJuIFJVTEVfcHJvYmVkYXRlbjsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQg
ZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVy
IGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclBy
bz0KYmVkYXRlbih0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1
bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFu
Y2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRQcm9iPQplZGF0
ZW4odGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgUHJvYmVkYXRlbkNvbnRleHQgcHJv
YmVkYXRlbigpIHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7CisJCVByb2JlZGF0ZW5Db250
ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFByb2JlZGF0ZW5Db250ZXh0KF9jdHgsIGdldFN0YXRlKCkp
OworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCA2LCBSVUxFX3Byb2JlZGF0ZW4pOworCQl0cnkgewor
CQkJc2V0U3RhdGUoMjg5KTsKKwkJCXN3aXRjaCAoIGdldEludGVycHJldGVyKCkuYWRhcHRpdmVQ
cmVkaWN0KF9pbnB1dCwzLF9jdHgpICkgeworCQkJY2FzZSAxOgorCQkJCWVudGVyT3V0ZXJBbHQo
X2xvY2FsY3R4LCAxKTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMjQ3KTsKKwkJCQlkYigpOworCQkJ
CX0KKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwg
Mik7CisJCQkJeworCQkJCXNldFN0YXRlKDI0OCk7CisJCQkJdmVyc2lvbigpOworCQkJCX0KKwkJ
CQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMyk7CisJ
CQkJeworCQkJCXNldFN0YXRlKDI0OSk7CisJCQkJdWViZXJ0cmFndW5nc2Zvcm1hdCgpOworCQkJ
CX0KKwkJCQlicmVhazsKKwkJCWNhc2UgNDoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwg
NCk7CisJCQkJeworCQkJCXNldFN0YXRlKDI1MCk7CisJCQkJbmV0emtlbm51bmcoKTsKKwkJCQl9
CisJCQkJYnJlYWs7CisJCQljYXNlIDU6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDUp
OworCQkJCXsKKwkJCQlzZXRTdGF0ZSgyNTEpOworCQkJCWVyemV1Z2VyKCk7CisJCQkJfQorCQkJ
CWJyZWFrOworCQkJY2FzZSA2OgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCA2KTsKKwkJ
CQl7CisJCQkJc2V0U3RhdGUoMjUyKTsKKwkJCQlzZG0oKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJ
CQljYXNlIDc6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDcpOworCQkJCXsKKwkJCQlz
ZXRTdGF0ZSgyNTMpOworCQkJCW1lc3NzdGVsbGUoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlj
YXNlIDg6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDgpOworCQkJCXsKKwkJCQlzZXRT
dGF0ZSgyNTQpOworCQkJCW1lc3NsYWJvcigpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2Ug
OToKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgOSk7CisJCQkJeworCQkJCXNldFN0YXRl
KDI1NSk7CisJCQkJcHJvYmVfaWQoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDEwOgor
CQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxMCk7CisJCQkJeworCQkJCXNldFN0YXRlKDI1
Nik7CisJCQkJcG5oKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAxMToKKwkJCQllbnRl
ck91dGVyQWx0KF9sb2NhbGN0eCwgMTEpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgyNTcpOworCQkJ
CW1wKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAxMjoKKwkJCQllbnRlck91dGVyQWx0
KF9sb2NhbGN0eCwgMTIpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgyNTgpOworCQkJCW1lc3Nwcm9n
cmFtbV9sYW5kKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAxMzoKKwkJCQllbnRlck91
dGVyQWx0KF9sb2NhbGN0eCwgMTMpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgyNTkpOworCQkJCXBy
b2JlbmFobWVpbnN0aXR1dGlvbigpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgMTQ6CisJ
CQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDE0KTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMjYw
KTsKKwkJCQlwcm9iZW5hcnQoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDE1OgorCQkJ
CWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxNSk7CisJCQkJeworCQkJCXNldFN0YXRlKDI2MSk7
CisJCQkJemIoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDE2OgorCQkJCWVudGVyT3V0
ZXJBbHQoX2xvY2FsY3R4LCAxNik7CisJCQkJeworCQkJCXNldFN0YXRlKDI2Mik7CisJCQkJcHJv
YmVuYWhtZV9kYXR1bV91aHJ6ZWl0X2EoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDE3
OgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxNyk7CisJCQkJeworCQkJCXNldFN0YXRl
KDI2Myk7CisJCQkJcHJvYmVuYWhtZV9kYXR1bV91aHJ6ZWl0X2UoKTsKKwkJCQl9CisJCQkJYnJl
YWs7CisJCQljYXNlIDE4OgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxOCk7CisJCQkJ
eworCQkJCXNldFN0YXRlKDI2NCk7CisJCQkJc29sbF9kYXR1bV91aHJ6ZWl0X2EoKTsKKwkJCQl9
CisJCQkJYnJlYWs7CisJCQljYXNlIDE5OgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAx
OSk7CisJCQkJeworCQkJCXNldFN0YXRlKDI2NSk7CisJCQkJc29sbF9kYXR1bV91aHJ6ZWl0X2Uo
KTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDIwOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xv
Y2FsY3R4LCAyMCk7CisJCQkJeworCQkJCXNldFN0YXRlKDI2Nik7CisJCQkJdWIoKTsKKwkJCQl9
CisJCQkJYnJlYWs7CisJCQljYXNlIDIxOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAy
MSk7CisJCQkJeworCQkJCXNldFN0YXRlKDI2Nyk7CisJCQkJZGVza3JpcHRvcmVuKCk7CisJCQkJ
fQorCQkJCWJyZWFrOworCQkJY2FzZSAyMjoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwg
MjIpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgyNjgpOworCQkJCXJlaSgpOworCQkJCX0KKwkJCQli
cmVhazsKKwkJCWNhc2UgMjM6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDIzKTsKKwkJ
CQl7CisJCQkJc2V0U3RhdGUoMjY5KTsKKwkJCQlyZWZlcmVuel9kYXR1bV91aHJ6ZWl0KCk7CisJ
CQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAyNDoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0
eCwgMjQpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgyNzApOworCQkJCXRlc3RkYXRlbigpOworCQkJ
CX0KKwkJCQlicmVhazsKKwkJCWNhc2UgMjU6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgs
IDI1KTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMjcxKTsKKwkJCQlzemVuYXJpbygpOworCQkJCX0K
KwkJCQlicmVhazsKKwkJCWNhc2UgMjY6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDI2
KTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMjcyKTsKKwkJCQlzZWtfZGF0ZW5iYXNpcygpOworCQkJ
CX0KKwkJCQlicmVhazsKKwkJCWNhc2UgMjc6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgs
IDI3KTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMjczKTsKKwkJCQl1cygpOworCQkJCX0KKwkJCQli
cmVhazsKKwkJCWNhc2UgMjg6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDI4KTsKKwkJ
CQl7CisJCQkJc2V0U3RhdGUoMjc0KTsKKwkJCQlwaCgpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ
CWNhc2UgMjk6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDI5KTsKKwkJCQl7CisJCQkJ
c2V0U3RhdGUoMjc1KTsKKwkJCQlwZygpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgMzA6
CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDMwKTsKKwkJCQl7CisJCQkJc2V0U3RhdGUo
Mjc2KTsKKwkJCQlwX29ydHNfenVzYXR6a2VubnphaGwoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJ
CQljYXNlIDMxOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAzMSk7CisJCQkJeworCQkJ
CXNldFN0YXRlKDI3Nyk7CisJCQkJcGsoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDMy
OgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAzMik7CisJCQkJeworCQkJCXNldFN0YXRl
KDI3OCk7CisJCQkJcF9vcnRzX3p1c2F0emNvZGUoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlj
YXNlIDMzOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAzMyk7CisJCQkJeworCQkJCXNl
dFN0YXRlKDI3OSk7CisJCQkJcF9vcnRzX3p1c2F0enRleHQoKTsKKwkJCQl9CisJCQkJYnJlYWs7
CisJCQljYXNlIDM0OgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAzNCk7CisJCQkJewor
CQkJCXNldFN0YXRlKDI4MCk7CisJCQkJcF9udXRzX2NvZGUoKTsKKwkJCQl9CisJCQkJYnJlYWs7
CisJCQljYXNlIDM1OgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAzNSk7CisJCQkJewor
CQkJCXNldFN0YXRlKDI4MSk7CisJCQkJcF9zaXRlX2lkKCk7CisJCQkJfQorCQkJCWJyZWFrOwor
CQkJY2FzZSAzNjoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMzYpOworCQkJCXsKKwkJ
CQlzZXRTdGF0ZSgyODIpOworCQkJCXBfc2l0ZV9uYW1lKCk7CisJCQkJfQorCQkJCWJyZWFrOwor
CQkJY2FzZSAzNzoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMzcpOworCQkJCXsKKwkJ
CQlzZXRTdGF0ZSgyODMpOworCQkJCXBfaG9laGVfbm4oKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJ
CQljYXNlIDM4OgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAzOCk7CisJCQkJeworCQkJ
CXNldFN0YXRlKDI4NCk7CisJCQkJcF9ob2VoZV9sYW5kKCk7CisJCQkJfQorCQkJCWJyZWFrOwor
CQkJY2FzZSAzOToKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMzkpOworCQkJCXsKKwkJ
CQlzZXRTdGF0ZSgyODUpOworCQkJCW1laHJ6d2Vja2ZlbGQoKTsKKwkJCQl9CisJCQkJYnJlYWs7
CisJCQljYXNlIDQwOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCA0MCk7CisJCQkJewor
CQkJCXNldFN0YXRlKDI4Nik7CisJCQkJbWVzc3VuZygpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ
CWNhc2UgNDE6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDQxKTsKKwkJCQl7CisJCQkJ
c2V0U3RhdGUoMjg3KTsKKwkJCQlwemIoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDQy
OgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCA0Mik7CisJCQkJeworCQkJCXNldFN0YXRl
KDI4OCk7CisJCQkJcGtvbSgpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQljYXRj
aCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNE
IHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRs
ZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOwor
CQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBNZXNz
dW5nQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGljIE1lc3NfaGVh
ZGVyQ29udGV4dCBtZXNzX2hlYWRlcigpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChNZXNz
X2hlYWRlckNvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIExpc3Q8TWVzc3VuZ2RhdGVu
Q29udGV4dD4gbWVzc3VuZ2RhdGVuKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0cyhNZXNz
dW5nZGF0ZW5Db250ZXh0LmNsYXNzKTsKKwkJfQorCQlwdWJsaWMgTWVzc3VuZ2RhdGVuQ29udGV4
dCBtZXNzdW5nZGF0ZW4oaW50IGkpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChNZXNzdW5n
ZGF0ZW5Db250ZXh0LmNsYXNzLGkpOworCQl9CisJCXB1YmxpYyBNZXNzdW5nQ29udGV4dChQYXJz
ZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJl
bnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJ
bmRleCgpIHsgcmV0dXJuIFJVTEVfbWVzc3VuZzsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZv
aWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3Rl
bmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRl
ck1lcz0Kc3VuZyh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1
bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFu
Y2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRNZXNzPQp1bmco
dGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgTWVzc3VuZ0NvbnRleHQgbWVzc3VuZygp
IHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7CisJCU1lc3N1bmdDb250ZXh0IF9sb2NhbGN0
eCA9M0QgbmV3IE1lc3N1bmdDb250ZXh0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUo
X2xvY2FsY3R4LCA4LCBSVUxFX21lc3N1bmcpOworCQlpbnQgX2xhOworCQl0cnkgeworCQkJaW50
IF9hbHQ7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0
ZSgyOTIpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoX2xhPTNEPTNEVF9fMikg
eworCQkJCXsKKwkJCQlzZXRTdGF0ZSgyOTEpOworCQkJCW1lc3NfaGVhZGVyKCk7CisJCQkJfQor
CQkJfQorCisJCQlzZXRTdGF0ZSgyOTUpOz0yMAorCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsK
KwkJCV9hbHQgPTNEIDE7CisJCQlkbyB7CisJCQkJc3dpdGNoIChfYWx0KSB7CisJCQkJY2FzZSAx
OgorCQkJCQl7CisJCQkJCXsKKwkJCQkJc2V0U3RhdGUoMjk0KTsKKwkJCQkJbWVzc3VuZ2RhdGVu
KCk7CisJCQkJCX0KKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQl0aHJv
dyBuZXcgTm9WaWFibGVBbHRFeGNlcHRpb24odGhpcyk7CisJCQkJfQorCQkJCXNldFN0YXRlKDI5
Nyk7PTIwCisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfYWx0ID0zRCBnZXRJbnRl
cnByZXRlcigpLmFkYXB0aXZlUHJlZGljdChfaW5wdXQsNSxfY3R4KTsKKwkJCX0gd2hpbGUgKCBf
YWx0IT0zRDIgJiYgX2FsdCE9M0RvcmcuYW50bHIudjQucnVudGltZS5hdG4uQVROLklOVkFMSURf
QUxUPQpfTlVNQkVSICk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9u
IHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJl
cG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOwor
CQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4
OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTWVzc19oZWFkZXJDb250ZXh0IGV4dGVuZHMg
UGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgTWVzc19oZWFkZXJDb250ZXh0KFBhcnNlclJ1
bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwg
aW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4
KCkgeyByZXR1cm4gUlVMRV9tZXNzX2hlYWRlcjsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZv
aWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3Rl
bmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRl
ck1lcz0Kc19oZWFkZXIodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4
aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGlu
c3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0TWVzcz0K
X2hlYWRlcih0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBNZXNzX2hlYWRlckNvbnRl
eHQgbWVzc19oZWFkZXIoKSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb249CiB7CisJCU1lc3Nf
aGVhZGVyQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBNZXNzX2hlYWRlckNvbnRleHQoX2N0eCwg
Z2V0U3RhdGUoKT0KKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTAsIFJVTEVfbWVzc19oZWFk
ZXIpOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJ
c2V0U3RhdGUoMjk5KTsKKwkJCW1hdGNoKFRfXzIpOworCQkJfQorCQl9CisJCWNhdGNoIChSZWNv
Z25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJ
CQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNv
dmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJ
cmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIE1lc3N1bmdkYXRl
bkNvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBNZXNzdW5nc19p
ZENvbnRleHQgbWVzc3VuZ3NfaWQoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoTWVzc3Vu
Z3NfaWRDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQbkNvbnRleHQgcG4oKSB7CisJ
CQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoUG5Db250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1Ymxp
YyBNZXNzX2RhdHVtX3VocnplaXRDb250ZXh0IG1lc3NfZGF0dW1fdWhyemVpdCgpIHsKKwkJCXJl
dHVybiBnZXRSdWxlQ29udGV4dChNZXNzX2RhdHVtX3VocnplaXRDb250ZXh0LmNsYXNzLDApOwor
CQl9CisJCXB1YmxpYyBNZXNzemVpdF9zZWt1bmRlbkNvbnRleHQgbWVzc3plaXRfc2VrdW5kZW4o
KSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoTWVzc3plaXRfc2VrdW5kZW5Db250ZXh0LmNs
YXNzLDApOworCQl9CisJCXB1YmxpYyBNbUNvbnRleHQgbW0oKSB7CisJCQlyZXR1cm4gZ2V0UnVs
ZUNvbnRleHQoTW1Db250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBCZWFyYmVpdHVuZ3Nz
dGF0dXNDb250ZXh0IGJlYXJiZWl0dW5nc3N0YXR1cygpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29u
dGV4dChCZWFyYmVpdHVuZ3NzdGF0dXNDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQ
ZXBfZmxhZ0NvbnRleHQgcGVwX2ZsYWcoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoUGVw
X2ZsYWdDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBFcmZhc3N1bmdfYWJnZXNjaGxv
c3NlbkNvbnRleHQgZXJmYXNzdW5nX2FiZ2VzY2hsb3NzZW4oKSB7CisJCQlyZXR1cm4gZ2V0UnVs
ZUNvbnRleHQoRXJmYXNzdW5nX2FiZ2VzY2hsb3NzZW5Db250ZXh0LmNsYXNzLDApOworCQl9CisJ
CXB1YmxpYyBNZXNzd2VydENvbnRleHQgbWVzc3dlcnQoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNv
bnRleHQoTWVzc3dlcnRDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBNZXNzX2tvbW1l
bnRhckNvbnRleHQgbWVzc19rb21tZW50YXIoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQo
TWVzc19rb21tZW50YXJDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBNZXNzdW5nZGF0
ZW5Db250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpIHsK
KwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1Ymxp
YyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9tZXNzdW5nZGF0ZW47IH0KKwkJQE92
ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5l
cikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0
ZW5lcilsaXN0ZW5lcikuZW50ZXJNZXM9CnN1bmdkYXRlbih0aGlzKTsKKwkJfQorCQlAT3ZlcnJp
ZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsK
KwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIp
bGlzdGVuZXIpLmV4aXRNZXNzPQp1bmdkYXRlbih0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBm
aW5hbCBNZXNzdW5nZGF0ZW5Db250ZXh0IG1lc3N1bmdkYXRlbigpIHRocm93cyBSZWNvZ25pdGlv
bkV4Y2VwdGk9Cm9uIHsKKwkJTWVzc3VuZ2RhdGVuQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBN
ZXNzdW5nZGF0ZW5Db250ZXh0KF9jdHgsIGdldFN0YXRlPQooKSk7CisJCWVudGVyUnVsZShfbG9j
YWxjdHgsIDEyLCBSVUxFX21lc3N1bmdkYXRlbik7CisJCXRyeSB7CisJCQlzZXRTdGF0ZSgzMTEp
OworCQkJc3dpdGNoIChfaW5wdXQuTEEoMSkpIHsKKwkJCWNhc2UgTUVTU1VOR1NfSUQ6CisJCQkJ
ZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgzMDEpOwor
CQkJCW1lc3N1bmdzX2lkKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBQUk9CRU5fTlI6
CisJCQljYXNlIE5FQkVOUFJPQkVOTlVNTUVSOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4
LCAyKTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMzAyKTsKKwkJCQlwbigpOworCQkJCX0KKwkJCQli
cmVhazsKKwkJCWNhc2UgTUVTU19EQVRVTV9VSFJaRUlUOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xv
Y2FsY3R4LCAzKTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMzAzKTsKKwkJCQltZXNzX2RhdHVtX3Vo
cnplaXQoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIE1FU1NaRUlUX1NFS1VOREVOOgor
CQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCA0KTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMzA0
KTsKKwkJCQltZXNzemVpdF9zZWt1bmRlbigpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2Ug
TUVTU01FVEhPREVfQzoKKwkJCWNhc2UgTUVTU01FVEhPREVfUzoKKwkJCQllbnRlck91dGVyQWx0
KF9sb2NhbGN0eCwgNSk7CisJCQkJeworCQkJCXNldFN0YXRlKDMwNSk7CisJCQkJbW0oKTsKKwkJ
CQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEJFQVJCRUlUVU5HU1NUQVRVUzoKKwkJCQllbnRlck91
dGVyQWx0KF9sb2NhbGN0eCwgNik7CisJCQkJeworCQkJCXNldFN0YXRlKDMwNik7CisJCQkJYmVh
cmJlaXR1bmdzc3RhdHVzKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBQRVBfRkxBRzoK
KwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgNyk7CisJCQkJeworCQkJCXNldFN0YXRlKDMw
Nyk7CisJCQkJcGVwX2ZsYWcoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEVSRkFTU1VO
R19BQkdFU0NITE9TU0VOOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCA4KTsKKwkJCQl7
CisJCQkJc2V0U3RhdGUoMzA4KTsKKwkJCQllcmZhc3N1bmdfYWJnZXNjaGxvc3NlbigpOworCQkJ
CX0KKwkJCQlicmVhazsKKwkJCWNhc2UgTUVTU1dFUlQ6CisJCQkJZW50ZXJPdXRlckFsdChfbG9j
YWxjdHgsIDkpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgzMDkpOworCQkJCW1lc3N3ZXJ0KCk7CisJ
CQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBLT01NRU5UQVI6CisJCQljYXNlIEtPTU1FTlRBUl9U
OgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxMCk7CisJCQkJeworCQkJCXNldFN0YXRl
KDMxMCk7CisJCQkJbWVzc19rb21tZW50YXIoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZh
dWx0OgorCQkJCXRocm93IG5ldyBOb1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzKTsKKwkJCX0KKwkJ
fQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNl
cHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJ
X2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0
UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBj
bGFzcyBEYkNvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBEYXRl
bmJhc2lzQ29udGV4dCBkYXRlbmJhc2lzKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KERh
dGVuYmFzaXNDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBEYXRlbmJhc2lzX3NDb250
ZXh0IGRhdGVuYmFzaXNfcygpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChEYXRlbmJhc2lz
X3NDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBEYkNvbnRleHQoUGFyc2VyUnVsZUNv
bnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZv
a2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7
IHJldHVybiBSVUxFX2RiOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUo
UGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2Vv
ZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyRGIoPQp0aGlzKTsK
KwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVu
ZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciAp
ICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXREYih0PQpoaXMpOworCQl9CisJfQorCisJcHVi
bGljIGZpbmFsIERiQ29udGV4dCBkYigpIHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7CisJ
CURiQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBEYkNvbnRleHQoX2N0eCwgZ2V0U3RhdGUoKSk7
CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDE0LCBSVUxFX2RiKTsKKwkJdHJ5IHsKKwkJCXNldFN0
YXRlKDMxNSk7CisJCQlzd2l0Y2ggKF9pbnB1dC5MQSgxKSkgeworCQkJY2FzZSBEQVRFTkJBU0lT
OgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCQl7CisJCQkJc2V0U3RhdGUo
MzEzKTsKKwkJCQlkYXRlbmJhc2lzKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBEQVRF
TkJBU0lTX1M6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDIpOworCQkJCXsKKwkJCQlz
ZXRTdGF0ZSgzMTQpOworCQkJCWRhdGVuYmFzaXNfcygpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ
CWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IE5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpOworCQkJ
fQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4
LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7
CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJ
CWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3Rh
dGljIGNsYXNzIE1wQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGlj
IE1lc3Nwcm9ncmFtbV9jQ29udGV4dCBtZXNzcHJvZ3JhbW1fYygpIHsKKwkJCXJldHVybiBnZXRS
dWxlQ29udGV4dChNZXNzcHJvZ3JhbW1fY0NvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGlj
IE1lc3Nwcm9ncmFtbV9zQ29udGV4dCBtZXNzcHJvZ3JhbW1fcygpIHsKKwkJCXJldHVybiBnZXRS
dWxlQ29udGV4dChNZXNzcHJvZ3JhbW1fc0NvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGlj
IE1wQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlKSB7
CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJs
aWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfbXA7IH0KKwkJQE92ZXJyaWRlCisJ
CXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJ
aWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0
ZW5lcikuZW50ZXJNcCg9CnRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBl
eGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBp
bnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdE1wKHQ9
Cmhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgTXBDb250ZXh0IG1wKCkgdGhyb3dzIFJl
Y29nbml0aW9uRXhjZXB0aW9uIHsKKwkJTXBDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IE1wQ29u
dGV4dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTYsIFJVTEVf
bXApOworCQl0cnkgeworCQkJc2V0U3RhdGUoMzE5KTsKKwkJCXN3aXRjaCAoX2lucHV0LkxBKDEp
KSB7CisJCQljYXNlIE1FU1NQUk9HUkFNTV9DOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4
LCAxKTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMzE3KTsKKwkJCQltZXNzcHJvZ3JhbW1fYygpOwor
CQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgTUVTU1BST0dSQU1NX1M6CisJCQkJZW50ZXJPdXRl
ckFsdChfbG9jYWxjdHgsIDIpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgzMTgpOworCQkJCW1lc3Nw
cm9ncmFtbV9zKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBu
ZXcgTm9WaWFibGVBbHRFeGNlcHRpb24odGhpcyk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29n
bml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJ
CV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292
ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQly
ZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgVWJDb250ZXh0IGV4
dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVW13ZWx0YmVyZWljaF9jQ29udGV4
dCB1bXdlbHRiZXJlaWNoX2MoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoVW13ZWx0YmVy
ZWljaF9jQ29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgVW13ZWx0YmVyZWljaF9zQ29u
dGV4dCB1bXdlbHRiZXJlaWNoX3MoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoVW13ZWx0
YmVyZWljaF9zQ29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgVWJDb250ZXh0KFBhcnNl
clJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVu
dCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUlu
ZGV4KCkgeyByZXR1cm4gUlVMRV91YjsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50
ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGlu
c3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclViKD0K
dGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJl
ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlz
dGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0VWIodD0KaGlzKTsKKwkJfQorCX0K
KworCXB1YmxpYyBmaW5hbCBVYkNvbnRleHQgdWIoKSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRp
b24geworCQlVYkNvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgVWJDb250ZXh0KF9jdHgsIGdldFN0
YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAxOCwgUlVMRV91Yik7CisJCXRyeSB7CisJ
CQlzZXRTdGF0ZSgzMjMpOworCQkJc3dpdGNoIChfaW5wdXQuTEEoMSkpIHsKKwkJCWNhc2UgVU1X
RUxUQkVSRUlDSF9DOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCQl7CisJ
CQkJc2V0U3RhdGUoMzIxKTsKKwkJCQl1bXdlbHRiZXJlaWNoX2MoKTsKKwkJCQl9CisJCQkJYnJl
YWs7CisJCQljYXNlIFVNV0VMVEJFUkVJQ0hfUzoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0
eCwgMik7CisJCQkJeworCQkJCXNldFN0YXRlKDMyMik7CisJCQkJdW13ZWx0YmVyZWljaF9zKCk7
CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgTm9WaWFibGVB
bHRFeGNlcHRpb24odGhpcyk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0
aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVy
LnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUp
OworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2Fs
Y3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUmVpQ29udGV4dCBleHRlbmRzIFBhcnNl
clJ1bGVDb250ZXh0IHsKKwkJcHVibGljIFJlaV9wcm9ncmFtbXB1bmt0Q29udGV4dCByZWlfcHJv
Z3JhbW1wdW5rdCgpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChSZWlfcHJvZ3JhbW1wdW5r
dENvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIFJlaV9wcm9ncmFtbXB1bmt0Z3J1cHBl
Q29udGV4dCByZWlfcHJvZ3JhbW1wdW5rdGdydXBwZSgpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29u
dGV4dChSZWlfcHJvZ3JhbW1wdW5rdGdydXBwZUNvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVi
bGljIFJlaUNvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0
ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUg
cHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3JlaTsgfQorCQlAT3ZlcnJp
ZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7
CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVy
KWxpc3RlbmVyKS5lbnRlclJlaT0KKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMg
dm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0
ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhp
dFJlaSg9CnRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFJlaUNvbnRleHQgcmVpKCkg
dGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJUmVpQ29udGV4dCBfbG9jYWxjdHggPTNE
IG5ldyBSZWlDb250ZXh0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4
LCAyMCwgUlVMRV9yZWkpOworCQl0cnkgeworCQkJc2V0U3RhdGUoMzI3KTsKKwkJCXN3aXRjaCAo
X2lucHV0LkxBKDEpKSB7CisJCQljYXNlIFJFSV9QUk9HUkFNTVBVTktUOgorCQkJCWVudGVyT3V0
ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMzI1KTsKKwkJCQlyZWlf
cHJvZ3JhbW1wdW5rdCgpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgUkVJX1BST0dSQU1N
UFVOS1RHUlVQUEU6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDIpOworCQkJCXsKKwkJ
CQlzZXRTdGF0ZSgzMjYpOworCQkJCXJlaV9wcm9ncmFtbXB1bmt0Z3J1cHBlKCk7CisJCQkJfQor
CQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgTm9WaWFibGVBbHRFeGNlcHRp
b24odGhpcyk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7
CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVy
cm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJ
CWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0K
KworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUGhDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRl
eHQgeworCQlwdWJsaWMgUF9oZXJrdW5mdHNsYW5kX2xhbmdDb250ZXh0IHBfaGVya3VuZnRzbGFu
ZF9sYW5nKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KFBfaGVya3VuZnRzbGFuZF9sYW5n
Q29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgUF9oZXJrdW5mdHNsYW5kX2t1cnpDb250
ZXh0IHBfaGVya3VuZnRzbGFuZF9rdXJ6KCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KFBf
aGVya3VuZnRzbGFuZF9rdXJ6Q29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgUF9oZXJr
dW5mdHNsYW5kX3NDb250ZXh0IHBfaGVya3VuZnRzbGFuZF9zKCkgeworCQkJcmV0dXJuIGdldFJ1
bGVDb250ZXh0KFBfaGVya3VuZnRzbGFuZF9zQ29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJs
aWMgUGhDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUp
IHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1
YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9waDsgfQorCQlAT3ZlcnJpZGUK
KwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJ
CQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxp
c3RlbmVyKS5lbnRlclBoKD0KdGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lk
IGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVy
IGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0UGgo
dD0KaGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBQaENvbnRleHQgcGgoKSB0aHJvd3Mg
UmVjb2duaXRpb25FeGNlcHRpb24geworCQlQaENvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgUGhD
b250ZXh0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAyMiwgUlVM
RV9waCk7CisJCXRyeSB7CisJCQlzZXRTdGF0ZSgzMzIpOworCQkJc3dpdGNoIChfaW5wdXQuTEEo
MSkpIHsKKwkJCWNhc2UgUF9IRVJLVU5GVFNMQU5EX0xBTkc6CisJCQkJZW50ZXJPdXRlckFsdChf
bG9jYWxjdHgsIDEpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgzMjkpOworCQkJCXBfaGVya3VuZnRz
bGFuZF9sYW5nKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBQX0hFUktVTkZUU0xBTkRf
S1VSWjoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMik7CisJCQkJeworCQkJCXNldFN0
YXRlKDMzMCk7CisJCQkJcF9oZXJrdW5mdHNsYW5kX2t1cnooKTsKKwkJCQl9CisJCQkJYnJlYWs7
CisJCQljYXNlIFBfSEVSS1VORlRTTEFORF9TOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4
LCAzKTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMzMxKTsKKwkJCQlwX2hlcmt1bmZ0c2xhbmRfcygp
OworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IE5vVmlhYmxl
QWx0RXhjZXB0aW9uKHRoaXMpOworCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2Vw
dGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxl
ci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJl
KTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2Nh
bGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFBnQ29udGV4dCBleHRlbmRzIFBhcnNl
clJ1bGVDb250ZXh0IHsKKwkJcHVibGljIFBfZ2VtZWluZGVzY2hsdWVzc2VsQ29udGV4dCBwX2dl
bWVpbmRlc2NobHVlc3NlbCgpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChQX2dlbWVpbmRl
c2NobHVlc3NlbENvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIFBfZ2VtZWluZGVuYW1l
Q29udGV4dCBwX2dlbWVpbmRlbmFtZSgpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChQX2dl
bWVpbmRlbmFtZUNvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIFBnQ29udGV4dChQYXJz
ZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJl
bnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJ
bmRleCgpIHsgcmV0dXJuIFJVTEVfcGc7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVu
dGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBp
bnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJQZyg9
CnRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRy
ZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxp
c3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdFBnKHQ9Cmhpcyk7CisJCX0KKwl9
CisKKwlwdWJsaWMgZmluYWwgUGdDb250ZXh0IHBnKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0
aW9uIHsKKwkJUGdDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFBnQ29udGV4dChfY3R4LCBnZXRT
dGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMjQsIFJVTEVfcGcpOworCQl0cnkgewor
CQkJc2V0U3RhdGUoMzM2KTsKKwkJCXN3aXRjaCAoX2lucHV0LkxBKDEpKSB7CisJCQljYXNlIFBf
R0VNRUlOREVTQ0hMVUVTU0VMOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJ
CQl7CisJCQkJc2V0U3RhdGUoMzM0KTsKKwkJCQlwX2dlbWVpbmRlc2NobHVlc3NlbCgpOworCQkJ
CX0KKwkJCQlicmVhazsKKwkJCWNhc2UgUF9HRU1FSU5ERU5BTUU6CisJCQkJZW50ZXJPdXRlckFs
dChfbG9jYWxjdHgsIDIpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgzMzUpOworCQkJCXBfZ2VtZWlu
ZGVuYW1lKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcg
Tm9WaWFibGVBbHRFeGNlcHRpb24odGhpcyk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0
aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9l
cnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIo
dGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1
cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUGtDb250ZXh0IGV4dGVu
ZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgUF9rb29yZGluYXRlbkNvbnRleHQgcF9r
b29yZGluYXRlbigpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChQX2tvb3JkaW5hdGVuQ29u
dGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgUF9rb29yZGluYXRlbl9zQ29udGV4dCBwX2tv
b3JkaW5hdGVuX3MoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoUF9rb29yZGluYXRlbl9z
Q29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgUGtDb250ZXh0KFBhcnNlclJ1bGVDb250
ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tp
bmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyBy
ZXR1cm4gUlVMRV9wazsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBh
cnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2Yg
TGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclBrKD0KdGhpcyk7CisJ
CX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVy
IGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAo
KExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0UGsodD0KaGlzKTsKKwkJfQorCX0KKworCXB1Ymxp
YyBmaW5hbCBQa0NvbnRleHQgcGsoKSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb24geworCQlQ
a0NvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgUGtDb250ZXh0KF9jdHgsIGdldFN0YXRlKCkpOwor
CQllbnRlclJ1bGUoX2xvY2FsY3R4LCAyNiwgUlVMRV9wayk7CisJCXRyeSB7CisJCQlzZXRTdGF0
ZSgzNDApOworCQkJc3dpdGNoIChfaW5wdXQuTEEoMSkpIHsKKwkJCWNhc2UgUF9LT09SRElOQVRF
TjoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQkJeworCQkJCXNldFN0YXRl
KDMzOCk7CisJCQkJcF9rb29yZGluYXRlbigpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2Ug
UF9LT09SRElOQVRFTl9TOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAyKTsKKwkJCQl7
CisJCQkJc2V0U3RhdGUoMzM5KTsKKwkJCQlwX2tvb3JkaW5hdGVuX3MoKTsKKwkJCQl9CisJCQkJ
YnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBOb1ZpYWJsZUFsdEV4Y2VwdGlvbih0
aGlzKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJ
CV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3Io
dGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmlu
YWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJ
cHVibGljIHN0YXRpYyBjbGFzcyBaYkNvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7
CisJCXB1YmxpYyBaZWl0YmFzaXNDb250ZXh0IHplaXRiYXNpcygpIHsKKwkJCXJldHVybiBnZXRS
dWxlQ29udGV4dChaZWl0YmFzaXNDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBaZWl0
YmFzaXNfc0NvbnRleHQgemVpdGJhc2lzX3MoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQo
WmVpdGJhc2lzX3NDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBaYkNvbnRleHQoUGFy
c2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0ZSkgeworCQkJc3VwZXIocGFy
ZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxl
SW5kZXgoKSB7IHJldHVybiBSVUxFX3piOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBl
bnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIg
aW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyWmIo
PQp0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VU
cmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZM
aXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRaYih0PQpoaXMpOworCQl9CisJ
fQorCisJcHVibGljIGZpbmFsIFpiQ29udGV4dCB6YigpIHRocm93cyBSZWNvZ25pdGlvbkV4Y2Vw
dGlvbiB7CisJCVpiQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBaYkNvbnRleHQoX2N0eCwgZ2V0
U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDI4LCBSVUxFX3piKTsKKwkJdHJ5IHsK
KwkJCXNldFN0YXRlKDM0NCk7CisJCQlzd2l0Y2ggKF9pbnB1dC5MQSgxKSkgeworCQkJY2FzZSBa
RUlUQkFTSVM6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJCXsKKwkJCQlz
ZXRTdGF0ZSgzNDIpOworCQkJCXplaXRiYXNpcygpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNh
c2UgWkVJVEJBU0lTX1M6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDIpOworCQkJCXsK
KwkJCQlzZXRTdGF0ZSgzNDMpOworCQkJCXplaXRiYXNpc19zKCk7CisJCQkJfQorCQkJCWJyZWFr
OworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgTm9WaWFibGVBbHRFeGNlcHRpb24odGhpcyk7
CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9j
YWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMs
IHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkg
eworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1Ymxp
YyBzdGF0aWMgY2xhc3MgUHpiQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJ
cHVibGljIFByb2Jlbnp1c2F0emJlc2NocmVpYnVuZ0NvbnRleHQgcHJvYmVuenVzYXR6YmVzY2hy
ZWlidW5nKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KFByb2Jlbnp1c2F0emJlc2NocmVp
YnVuZ0NvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIFB6Yl9zQ29udGV4dCBwemJfcygp
IHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChQemJfc0NvbnRleHQuY2xhc3MsMCk7CisJCX0K
KwkJcHVibGljIFB6YkNvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tp
bmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3Zl
cnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3B6YjsgfQorCQlA
T3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3Rl
bmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxp
c3RlbmVyKWxpc3RlbmVyKS5lbnRlclB6Yj0KKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlw
dWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYg
KCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5l
cikuZXhpdFB6Yig9CnRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFB6YkNvbnRleHQg
cHpiKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJUHpiQ29udGV4dCBfbG9jYWxj
dHggPTNEIG5ldyBQemJDb250ZXh0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xv
Y2FsY3R4LCAzMCwgUlVMRV9wemIpOworCQl0cnkgeworCQkJc2V0U3RhdGUoMzQ4KTsKKwkJCXN3
aXRjaCAoX2lucHV0LkxBKDEpKSB7CisJCQljYXNlIFBST0JFTlpVU0FUWkJFU0NIUkVJQlVORzoK
KwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQkJeworCQkJCXNldFN0YXRlKDM0
Nik7CisJCQkJcHJvYmVuenVzYXR6YmVzY2hyZWlidW5nKCk7CisJCQkJfQorCQkJCWJyZWFrOwor
CQkJY2FzZSBQWkJfUzoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMik7CisJCQkJewor
CQkJCXNldFN0YXRlKDM0Nyk7CisJCQkJcHpiX3MoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlk
ZWZhdWx0OgorCQkJCXRocm93IG5ldyBOb1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzKTsKKwkJCX0K
KwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5l
eGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOwor
CQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQll
eGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRp
YyBjbGFzcyBQa29tQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGlj
IFByb2JlbmtvbW1lbnRhckNvbnRleHQgcHJvYmVua29tbWVudGFyKCkgeworCQkJcmV0dXJuIGdl
dFJ1bGVDb250ZXh0KFByb2JlbmtvbW1lbnRhckNvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVi
bGljIFByb2JlbmtvbW1lbnRhcl90Q29udGV4dCBwcm9iZW5rb21tZW50YXJfdCgpIHsKKwkJCXJl
dHVybiBnZXRSdWxlQ29udGV4dChQcm9iZW5rb21tZW50YXJfdENvbnRleHQuY2xhc3MsMCk7CisJ
CX0KKwkJcHVibGljIFBrb21Db250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGlu
dm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJ
QE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9wa29tOyB9
CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIg
bGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgo
TGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyUGtvPQptKHRoaXMpOworCQl9CisJCUBPdmVycmlk
ZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgewor
CQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcils
aXN0ZW5lcikuZXhpdFBrb209Cih0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBQa29t
Q29udGV4dCBwa29tKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJUGtvbUNvbnRl
eHQgX2xvY2FsY3R4ID0zRCBuZXcgUGtvbUNvbnRleHQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVu
dGVyUnVsZShfbG9jYWxjdHgsIDMyLCBSVUxFX3Brb20pOworCQl0cnkgeworCQkJc2V0U3RhdGUo
MzUyKTsKKwkJCXN3aXRjaCAoX2lucHV0LkxBKDEpKSB7CisJCQljYXNlIFBST0JFTktPTU1FTlRB
UjoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQkJeworCQkJCXNldFN0YXRl
KDM1MCk7CisJCQkJcHJvYmVua29tbWVudGFyKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2Fz
ZSBQUk9CRU5LT01NRU5UQVJfVDoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMik7CisJ
CQkJeworCQkJCXNldFN0YXRlKDM1MSk7CisJCQkJcHJvYmVua29tbWVudGFyX3QoKTsKKwkJCQl9
CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBOb1ZpYWJsZUFsdEV4Y2Vw
dGlvbih0aGlzKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUp
IHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0
RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0K
KwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJ
fQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBTZG1Db250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNv
bnRleHQgeworCQlwdWJsaWMgU3RhYXRfZGVyX21lc3NzdGVsbGVfbGFuZ0NvbnRleHQgc3RhYXRf
ZGVyX21lc3NzdGVsbGVfbGFuZygpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChTdGFhdF9k
ZXJfbWVzc3N0ZWxsZV9sYW5nQ29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgU3RhYXRf
ZGVyX21lc3NzdGVsbGVfa3VyekNvbnRleHQgc3RhYXRfZGVyX21lc3NzdGVsbGVfa3VyeigpIHsK
KwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChTdGFhdF9kZXJfbWVzc3N0ZWxsZV9rdXJ6Q29udGV4
dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgU3RhYXRfZGVyX21lc3NzdGVsbGVfc0NvbnRleHQg
c3RhYXRfZGVyX21lc3NzdGVsbGVfcygpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChTdGFh
dF9kZXJfbWVzc3N0ZWxsZV9zQ29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgU2RtQ29u
dGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlKSB7CisJCQlz
dXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50
IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfc2RtOyB9CisJCUBPdmVycmlkZQorCQlwdWJs
aWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICgg
bGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIp
LmVudGVyU2RtPQoodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRS
dWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3Rh
bmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0U2RtKD0KdGhp
cyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgU2RtQ29udGV4dCBzZG0oKSB0aHJvd3MgUmVj
b2duaXRpb25FeGNlcHRpb24geworCQlTZG1Db250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFNkbUNv
bnRleHQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDM0LCBSVUxF
X3NkbSk7CisJCXRyeSB7CisJCQlzZXRTdGF0ZSgzNTcpOworCQkJc3dpdGNoIChfaW5wdXQuTEEo
MSkpIHsKKwkJCWNhc2UgU1RBQVRfREVSX01FU1NTVEVMTEVfTEFORzoKKwkJCQllbnRlck91dGVy
QWx0KF9sb2NhbGN0eCwgMSk7CisJCQkJeworCQkJCXNldFN0YXRlKDM1NCk7CisJCQkJc3RhYXRf
ZGVyX21lc3NzdGVsbGVfbGFuZygpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgU1RBQVRf
REVSX01FU1NTVEVMTEVfS1VSWjoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMik7CisJ
CQkJeworCQkJCXNldFN0YXRlKDM1NSk7CisJCQkJc3RhYXRfZGVyX21lc3NzdGVsbGVfa3Vyeigp
OworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgU1RBQVRfREVSX01FU1NTVEVMTEVfUzoKKwkJ
CQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMyk7CisJCQkJeworCQkJCXNldFN0YXRlKDM1Nik7
CisJCQkJc3RhYXRfZGVyX21lc3NzdGVsbGVfcygpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRl
ZmF1bHQ6CisJCQkJdGhyb3cgbmV3IE5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpOworCQkJfQor
CQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4
Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJ
CQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4
aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGlj
IGNsYXNzIFBuaENvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBQ
cm9iZW5fbnJDb250ZXh0IHByb2Jlbl9ucigpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChQ
cm9iZW5fbnJDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBIYXVwdHByb2Jlbm51bW1l
ckNvbnRleHQgaGF1cHRwcm9iZW5udW1tZXIoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQo
SGF1cHRwcm9iZW5udW1tZXJDb250ZXh0LmNsYXNzLDApOworCQl9CisJCXB1YmxpYyBQbmhDb250
ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1
cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQg
Z2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9wbmg7IH0KKwkJQE92ZXJyaWRlCisJCXB1Ymxp
YyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBs
aXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lciku
ZW50ZXJQbmg9Cih0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1
bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFu
Y2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRQbmgoPQp0aGlz
KTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBQbmhDb250ZXh0IHBuaCgpIHRocm93cyBSZWNv
Z25pdGlvbkV4Y2VwdGlvbiB7CisJCVBuaENvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgUG5oQ29u
dGV4dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMzYsIFJVTEVf
cG5oKTsKKwkJdHJ5IHsKKwkJCXNldFN0YXRlKDM2MSk7CisJCQlzd2l0Y2ggKF9pbnB1dC5MQSgx
KSkgeworCQkJY2FzZSBQUk9CRU5fTlI6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEp
OworCQkJCXsKKwkJCQlzZXRTdGF0ZSgzNTkpOworCQkJCXByb2Jlbl9ucigpOworCQkJCX0KKwkJ
CQlicmVhazsKKwkJCWNhc2UgSEFVUFRQUk9CRU5OVU1NRVI6CisJCQkJZW50ZXJPdXRlckFsdChf
bG9jYWxjdHgsIDIpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgzNjApOworCQkJCWhhdXB0cHJvYmVu
bnVtbWVyKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcg
Tm9WaWFibGVBbHRFeGNlcHRpb24odGhpcyk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0
aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9l
cnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIo
dGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1
cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTW1Db250ZXh0IGV4dGVu
ZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgTWVzc21ldGhvZGVfY0NvbnRleHQgbWVz
c21ldGhvZGVfYygpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChNZXNzbWV0aG9kZV9jQ29u
dGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgTWVzc21ldGhvZGVfc0NvbnRleHQgbWVzc21l
dGhvZGVfcygpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChNZXNzbWV0aG9kZV9zQ29udGV4
dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgTW1Db250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBh
cmVudCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0
ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4g
UlVMRV9tbTsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJl
ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlz
dGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlck1tKD0KdGhpcyk7CisJCX0KKwkJ
QE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3Rl
bmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxp
c3RlbmVyKWxpc3RlbmVyKS5leGl0TW0odD0KaGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5h
bCBNbUNvbnRleHQgbW0oKSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb24geworCQlNbUNvbnRl
eHQgX2xvY2FsY3R4ID0zRCBuZXcgTW1Db250ZXh0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRl
clJ1bGUoX2xvY2FsY3R4LCAzOCwgUlVMRV9tbSk7CisJCXRyeSB7CisJCQlzZXRTdGF0ZSgzNjUp
OworCQkJc3dpdGNoIChfaW5wdXQuTEEoMSkpIHsKKwkJCWNhc2UgTUVTU01FVEhPREVfQzoKKwkJ
CQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQkJeworCQkJCXNldFN0YXRlKDM2Myk7
CisJCQkJbWVzc21ldGhvZGVfYygpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgTUVTU01F
VEhPREVfUzoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMik7CisJCQkJeworCQkJCXNl
dFN0YXRlKDM2NCk7CisJCQkJbWVzc21ldGhvZGVfcygpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ
CWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IE5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpOworCQkJ
fQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4
LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7
CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJ
CWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3Rh
dGljIGNsYXNzIE13Q29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGlj
IE1lc3N3ZXJ0Q29udGV4dCBtZXNzd2VydCgpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChN
ZXNzd2VydENvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIE1lc3N3ZXJ0X3NDb250ZXh0
IG1lc3N3ZXJ0X3MoKSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoTWVzc3dlcnRfc0NvbnRl
eHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIE1lc3N3ZXJ0X2lDb250ZXh0IG1lc3N3ZXJ0X2ko
KSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoTWVzc3dlcnRfaUNvbnRleHQuY2xhc3MsMCk7
CisJCX0KKwkJcHVibGljIE1lc3N3ZXJ0X2dDb250ZXh0IG1lc3N3ZXJ0X2coKSB7CisJCQlyZXR1
cm4gZ2V0UnVsZUNvbnRleHQoTWVzc3dlcnRfZ0NvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVi
bGljIE1lc3N3ZXJ0X253Z0NvbnRleHQgbWVzc3dlcnRfbndnKCkgeworCQkJcmV0dXJuIGdldFJ1
bGVDb250ZXh0KE1lc3N3ZXJ0X253Z0NvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIE1l
c3N3ZXJ0X253Z19zQ29udGV4dCBtZXNzd2VydF9ud2dfcygpIHsKKwkJCXJldHVybiBnZXRSdWxl
Q29udGV4dChNZXNzd2VydF9ud2dfc0NvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIE1l
c3N3ZXJ0X253Z19pQ29udGV4dCBtZXNzd2VydF9ud2dfaSgpIHsKKwkJCXJldHVybiBnZXRSdWxl
Q29udGV4dChNZXNzd2VydF9ud2dfaUNvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIE1l
c3N3ZXJ0X253Z19nQ29udGV4dCBtZXNzd2VydF9ud2dfZygpIHsKKwkJCXJldHVybiBnZXRSdWxl
Q29udGV4dChNZXNzd2VydF9ud2dfZ0NvbnRleHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIE13
Q29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlKSB7CisJ
CQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMg
aW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfbXc7IH0KKwkJQE92ZXJyaWRlCisJCXB1
YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYg
KCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5l
cikuZW50ZXJNdyg9CnRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0
UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0
YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdE13KHQ9Cmhp
cyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgTXdDb250ZXh0IG13KCkgdGhyb3dzIFJlY29n
bml0aW9uRXhjZXB0aW9uIHsKKwkJTXdDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IE13Q29udGV4
dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgNDAsIFJVTEVfbXcp
OworCQl0cnkgeworCQkJc2V0U3RhdGUoMzc1KTsKKwkJCXN3aXRjaCAoX2lucHV0LkxBKDEpKSB7
CisJCQljYXNlIE1FU1NXRVJUOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJ
CQl7CisJCQkJc2V0U3RhdGUoMzY3KTsKKwkJCQltZXNzd2VydCgpOworCQkJCX0KKwkJCQlicmVh
azsKKwkJCWNhc2UgTUVTU1dFUlRfUzoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMik7
CisJCQkJeworCQkJCXNldFN0YXRlKDM2OCk7CisJCQkJbWVzc3dlcnRfcygpOworCQkJCX0KKwkJ
CQlicmVhazsKKwkJCWNhc2UgTUVTU1dFUlRfSToKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0
eCwgMyk7CisJCQkJeworCQkJCXNldFN0YXRlKDM2OSk7CisJCQkJbWVzc3dlcnRfaSgpOworCQkJ
CX0KKwkJCQlicmVhazsKKwkJCWNhc2UgTUVTU1dFUlRfRzoKKwkJCQllbnRlck91dGVyQWx0KF9s
b2NhbGN0eCwgNCk7CisJCQkJeworCQkJCXNldFN0YXRlKDM3MCk7CisJCQkJbWVzc3dlcnRfZygp
OworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgTUVTU1dFUlRfTldHOgorCQkJCWVudGVyT3V0
ZXJBbHQoX2xvY2FsY3R4LCA1KTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMzcxKTsKKwkJCQltZXNz
d2VydF9ud2coKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIE1FU1NXRVJUX05XR19TOgor
CQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCA2KTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMzcy
KTsKKwkJCQltZXNzd2VydF9ud2dfcygpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgTUVT
U1dFUlRfTldHX0k6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDcpOworCQkJCXsKKwkJ
CQlzZXRTdGF0ZSgzNzMpOworCQkJCW1lc3N3ZXJ0X253Z19pKCk7CisJCQkJfQorCQkJCWJyZWFr
OworCQkJY2FzZSBNRVNTV0VSVF9OV0dfRzoKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwg
OCk7CisJCQkJeworCQkJCXNldFN0YXRlKDM3NCk7CisJCQkJbWVzc3dlcnRfbndnX2coKTsKKwkJ
CQl9CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBOb1ZpYWJsZUFsdEV4
Y2VwdGlvbih0aGlzKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24g
cmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVw
b3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJ
CX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7
CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBNZXNzX2tvbW1lbnRhckNvbnRleHQgZXh0ZW5k
cyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBLb21tZW50YXJDb250ZXh0IGtvbW1lbnRh
cigpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChLb21tZW50YXJDb250ZXh0LmNsYXNzLDAp
OworCQl9CisJCXB1YmxpYyBLb21tZW50YXJfdENvbnRleHQga29tbWVudGFyX3QoKSB7CisJCQly
ZXR1cm4gZ2V0UnVsZUNvbnRleHQoS29tbWVudGFyX3RDb250ZXh0LmNsYXNzLDApOworCQl9CisJ
CXB1YmxpYyBNZXNzX2tvbW1lbnRhckNvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBp
bnQgaW52b2tpbmdTdGF0ZT0KKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOwor
CQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVf
bWVzc19rb21tZW50YXI7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQ
YXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9m
IExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJNZXM9CnNfa29tbWVu
dGFyKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJz
ZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExh
Zkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdE1lc3M9Cl9rb21tZW50YXIo
dGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgTWVzc19rb21tZW50YXJDb250ZXh0IG1l
c3Nfa29tbWVudGFyKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjPQplcHRpb24geworCQlNZXNzX2tv
bW1lbnRhckNvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgTWVzc19rb21tZW50YXJDb250ZXh0KF9j
dHgsIGdldFM9CnRhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDQyLCBSVUxFX21lc3Nf
a29tbWVudGFyKTsKKwkJdHJ5IHsKKwkJCXNldFN0YXRlKDM3OSk7CisJCQlzd2l0Y2ggKF9pbnB1
dC5MQSgxKSkgeworCQkJY2FzZSBLT01NRU5UQVI6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxj
dHgsIDEpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgzNzcpOworCQkJCWtvbW1lbnRhcigpOworCQkJ
CX0KKwkJCQlicmVhazsKKwkJCWNhc2UgS09NTUVOVEFSX1Q6CisJCQkJZW50ZXJPdXRlckFsdChf
bG9jYWxjdHgsIDIpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgzNzgpOworCQkJCWtvbW1lbnRhcl90
KCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgTm9WaWFi
bGVBbHRFeGNlcHRpb24odGhpcyk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhj
ZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5k
bGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywg
cmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xv
Y2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUG5Db250ZXh0IGV4dGVuZHMgUGFy
c2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgUHJvYmVuX25yQ29udGV4dCBwcm9iZW5fbnIoKSB7
CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoUHJvYmVuX25yQ29udGV4dC5jbGFzcywwKTsKKwkJ
fQorCQlwdWJsaWMgTmViZW5wcm9iZW5udW1tZXJDb250ZXh0IG5lYmVucHJvYmVubnVtbWVyKCkg
eworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KE5lYmVucHJvYmVubnVtbWVyQ29udGV4dC5jbGFz
cywwKTsKKwkJfQorCQlwdWJsaWMgUG5Db250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwg
aW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJ
CX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9w
bjsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3Rl
bmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIg
KSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclBuKD0KdGhpcyk7CisJCX0KKwkJQE92ZXJy
aWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7
CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVy
KWxpc3RlbmVyKS5leGl0UG4odD0KaGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBQbkNv
bnRleHQgcG4oKSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb24geworCQlQbkNvbnRleHQgX2xv
Y2FsY3R4ID0zRCBuZXcgUG5Db250ZXh0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUo
X2xvY2FsY3R4LCA0NCwgUlVMRV9wbik7CisJCXRyeSB7CisJCQlzZXRTdGF0ZSgzODMpOworCQkJ
c3dpdGNoIChfaW5wdXQuTEEoMSkpIHsKKwkJCWNhc2UgUFJPQkVOX05SOgorCQkJCWVudGVyT3V0
ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMzgxKTsKKwkJCQlwcm9i
ZW5fbnIoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIE5FQkVOUFJPQkVOTlVNTUVSOgor
CQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAyKTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMzgy
KTsKKwkJCQluZWJlbnByb2Jlbm51bW1lcigpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1
bHQ6CisJCQkJdGhyb3cgbmV3IE5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpOworCQkJfQorCQl9
CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2Vw
dGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlf
ZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRS
dWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNs
YXNzIFVzQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGljIExpc3Q8
VXJzcHJ1bmdzb3J0ZGF0ZW5Db250ZXh0PiB1cnNwcnVuZ3NvcnRkYXRlbigpIHsKKwkJCXJldHVy
biBnZXRSdWxlQ29udGV4dHMoVXJzcHJ1bmdzb3J0ZGF0ZW5Db250ZXh0LmNsYXNzKTsKKwkJfQor
CQlwdWJsaWMgVXJzcHJ1bmdzb3J0ZGF0ZW5Db250ZXh0IHVyc3BydW5nc29ydGRhdGVuKGludCBp
KSB7CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoVXJzcHJ1bmdzb3J0ZGF0ZW5Db250ZXh0LmNs
YXNzLGkpOworCQl9CisJCXB1YmxpYyBVc0NvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50
LCBpbnQgaW52b2tpbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsK
KwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxF
X3VzOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlz
dGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5l
ciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyVXMoPQp0aGlzKTsKKwkJfQorCQlAT3Zl
cnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIp
IHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVu
ZXIpbGlzdGVuZXIpLmV4aXRVcyh0PQpoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFVz
Q29udGV4dCB1cygpIHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7CisJCVVzQ29udGV4dCBf
bG9jYWxjdHggPTNEIG5ldyBVc0NvbnRleHQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVs
ZShfbG9jYWxjdHgsIDQ2LCBSVUxFX3VzKTsKKwkJaW50IF9sYTsKKwkJdHJ5IHsKKwkJCWVudGVy
T3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDM4NSk7CisJCQltYXRj
aChUX18zKTsKKwkJCXNldFN0YXRlKDM4OSk7CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOwor
CQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl3aGlsZSAoKCgoX2xhKSAmIH4weDNmKSA9M0Q9
M0QgMCAmJiAoKDFMIDw8IF9sYSkgJiAoKDFMIDw8IFVfSEVSS1VORlRTTD0KQU5EX0xBTkcpIHwg
KDFMIDw8IFVfSEVSS1VORlRTTEFORF9LVVJaKSB8ICgxTCA8PCBVX0hFUktVTkZUU0xBTkRfUykg
fCAoMUwgPQo8PCBVX0dFTUVJTkRFU0NITFVFU1NFTCkgfCAoMUwgPDwgVV9HRU1FSU5ERU5BTUUp
IHwgKDFMIDw8IFVfT1JUU19aVVNBVFpLRU49Ck5aQUhMKSB8ICgxTCA8PCBVX0tPT1JESU5BVEVO
KSB8ICgxTCA8PCBVX0tPT1JESU5BVEVOX1MpIHwgKDFMIDw8IFVfT1JUU19aVT0KU0FUWkNPREUp
IHwgKDFMIDw8IFVfT1JUU19aVVNBVFpURVhUKSB8ICgxTCA8PCBVX05VVFNfQ09ERSkpKSAhPTNE
IDApKSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRTdGF0ZSgzODYpOworCQkJCXVyc3BydW5nc29y
dGRhdGVuKCk7CisJCQkJfQorCQkJCX0KKwkJCQlzZXRTdGF0ZSgzOTEpOworCQkJCV9lcnJIYW5k
bGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQl9CisJ
CX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhj
ZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJ
CV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhp
dFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMg
Y2xhc3MgVXJzcHJ1bmdzb3J0ZGF0ZW5Db250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQg
eworCQlwdWJsaWMgVWhDb250ZXh0IHVoKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KFVo
Q29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgVWdDb250ZXh0IHVnKCkgeworCQkJcmV0
dXJuIGdldFJ1bGVDb250ZXh0KFVnQ29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgVV9v
cnRzX3p1c2F0emtlbm56YWhsQ29udGV4dCB1X29ydHNfenVzYXR6a2VubnphaGwoKSB7CisJCQly
ZXR1cm4gZ2V0UnVsZUNvbnRleHQoVV9vcnRzX3p1c2F0emtlbm56YWhsQ29udGV4dC5jbGFzcyww
KTsKKwkJfQorCQlwdWJsaWMgVWtDb250ZXh0IHVrKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250
ZXh0KFVrQ29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgVV9vcnRzX3p1c2F0emNvZGVD
b250ZXh0IHVfb3J0c196dXNhdHpjb2RlKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KFVf
b3J0c196dXNhdHpjb2RlQ29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgVV9vcnRzX3p1
c2F0enRleHRDb250ZXh0IHVfb3J0c196dXNhdHp0ZXh0KCkgeworCQkJcmV0dXJuIGdldFJ1bGVD
b250ZXh0KFVfb3J0c196dXNhdHp0ZXh0Q29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMg
VV9udXRzX2NvZGVDb250ZXh0IHVfbnV0c19jb2RlKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250
ZXh0KFVfbnV0c19jb2RlQ29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgVXJzcHJ1bmdz
b3J0ZGF0ZW5Db250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3Q9
CmF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJp
ZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3Vyc3BydW5nc29ydGRh
dGVuOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlz
dGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5l
ciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyVXJzPQpwcnVuZ3NvcnRkYXRlbih0aGlz
KTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlz
dGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5l
ciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRVcnNwPQpydW5nc29ydGRhdGVuKHRoaXMp
OworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFVyc3BydW5nc29ydGRhdGVuQ29udGV4dCB1cnNw
cnVuZ3NvcnRkYXRlbigpIHRocm93cyBSZWNvZ25pdD0KaW9uRXhjZXB0aW9uIHsKKwkJVXJzcHJ1
bmdzb3J0ZGF0ZW5Db250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFVyc3BydW5nc29ydGRhdGVuQ29u
dGV4dChfY3R4PQosIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCA0OCwgUlVM
RV91cnNwcnVuZ3NvcnRkYXRlbik7CisJCXRyeSB7CisJCQlzZXRTdGF0ZSgzOTkpOworCQkJc3dp
dGNoIChfaW5wdXQuTEEoMSkpIHsKKwkJCWNhc2UgVV9IRVJLVU5GVFNMQU5EX0xBTkc6CisJCQlj
YXNlIFVfSEVSS1VORlRTTEFORF9LVVJaOgorCQkJY2FzZSBVX0hFUktVTkZUU0xBTkRfUzoKKwkJ
CQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQkJeworCQkJCXNldFN0YXRlKDM5Mik7
CisJCQkJdWgoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFVfR0VNRUlOREVTQ0hMVUVT
U0VMOgorCQkJY2FzZSBVX0dFTUVJTkRFTkFNRToKKwkJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0
eCwgMik7CisJCQkJeworCQkJCXNldFN0YXRlKDM5Myk7CisJCQkJdWcoKTsKKwkJCQl9CisJCQkJ
YnJlYWs7CisJCQljYXNlIFVfT1JUU19aVVNBVFpLRU5OWkFITDoKKwkJCQllbnRlck91dGVyQWx0
KF9sb2NhbGN0eCwgMyk7CisJCQkJeworCQkJCXNldFN0YXRlKDM5NCk7CisJCQkJdV9vcnRzX3p1
c2F0emtlbm56YWhsKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBVX0tPT1JESU5BVEVO
OgorCQkJY2FzZSBVX0tPT1JESU5BVEVOX1M6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgs
IDQpOworCQkJCXsKKwkJCQlzZXRTdGF0ZSgzOTUpOworCQkJCXVrKCk7CisJCQkJfQorCQkJCWJy
ZWFrOworCQkJY2FzZSBVX09SVFNfWlVTQVRaQ09ERToKKwkJCQllbnRlck91dGVyQWx0KF9sb2Nh
bGN0eCwgNSk7CisJCQkJeworCQkJCXNldFN0YXRlKDM5Nik7CisJCQkJdV9vcnRzX3p1c2F0emNv
ZGUoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFVfT1JUU19aVVNBVFpURVhUOgorCQkJ
CWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCA2KTsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMzk3KTsK
KwkJCQl1X29ydHNfenVzYXR6dGV4dCgpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVV9O
VVRTX0NPREU6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDcpOworCQkJCXsKKwkJCQlz
ZXRTdGF0ZSgzOTgpOworCQkJCXVfbnV0c19jb2RlKCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJ
ZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgTm9WaWFibGVBbHRFeGNlcHRpb24odGhpcyk7CisJCQl9
CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHgu
ZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsK
KwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJ
ZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0
aWMgY2xhc3MgVWhDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMg
VV9oZXJrdW5mdHNsYW5kX2xhbmdDb250ZXh0IHVfaGVya3VuZnRzbGFuZF9sYW5nKCkgeworCQkJ
cmV0dXJuIGdldFJ1bGVDb250ZXh0KFVfaGVya3VuZnRzbGFuZF9sYW5nQ29udGV4dC5jbGFzcyww
KTsKKwkJfQorCQlwdWJsaWMgVV9oZXJrdW5mdHNsYW5kX2t1cnpDb250ZXh0IHVfaGVya3VuZnRz
bGFuZF9rdXJ6KCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KFVfaGVya3VuZnRzbGFuZF9r
dXJ6Q29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgVV9oZXJrdW5mdHNsYW5kX3NDb250
ZXh0IHVfaGVya3VuZnRzbGFuZF9zKCkgeworCQkJcmV0dXJuIGdldFJ1bGVDb250ZXh0KFVfaGVy
a3VuZnRzbGFuZF9zQ29udGV4dC5jbGFzcywwKTsKKwkJfQorCQlwdWJsaWMgVWhDb250ZXh0KFBh
cnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBh
cmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVs
ZUluZGV4KCkgeyByZXR1cm4gUlVMRV91aDsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQg
ZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVy
IGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclVo
KD0KdGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNl
VHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFm
TGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0VWgodD0KaGlzKTsKKwkJfQor
CX0KKworCXB1YmxpYyBmaW5hbCBVaENvbnRleHQgdWgoKSB0aHJvd3MgUmVjb2duaXRpb25FeGNl
cHRpb24geworCQlVaENvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgVWhDb250ZXh0KF9jdHgsIGdl
dFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCA1MCwgUlVMRV91aCk7CisJCXRyeSB7
CisJCQlzZXRTdGF0ZSg0MDQpOworCQkJc3dpdGNoIChfaW5wdXQuTEEoMSkpIHsKKwkJCWNhc2Ug
VV9IRVJLVU5GVFNMQU5EX0xBTkc6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOwor
CQkJCXsKKwkJCQlzZXRTdGF0ZSg0MDEpOworCQkJCXVfaGVya3VuZnRzbGFuZF9sYW5nKCk7CisJ
CQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBVX0hFUktVTkZUU0xBTkRfS1VSWjoKKwkJCQllbnRl
ck91dGVyQWx0KF9sb2NhbGN0eCwgMik7CisJCQkJeworCQkJCXNldFN0YXRlKDQwMik7CisJCQkJ
dV9oZXJrdW5mdHNsYW5kX2t1cnooKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFVfSEVS
S1VORlRTTEFORF9TOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAzKTsKKwkJCQl7CisJ
CQkJc2V0U3RhdGUoNDAzKTsKKwkJCQl1X2hlcmt1bmZ0c2xhbmRfcygpOworCQkJCX0KKwkJCQli
cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IE5vVmlhYmxlQWx0RXhjZXB0aW9uKHRo
aXMpOworCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJ
X2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0
aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5h
bGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlw
dWJsaWMgc3RhdGljIGNsYXNzIFVnQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsK
KwkJcHVibGljIFVfZ2VtZWluZGVzY2hsdWVzc2VsQ29udGV4dCB1X2dlbWVpbmRlc2NobHVlc3Nl
bCgpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChVX2dlbWVpbmRlc2NobHVlc3NlbENvbnRl
eHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIFVfZ2VtZWluZGVuYW1lQ29udGV4dCB1X2dlbWVp
bmRlbmFtZSgpIHsKKwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChVX2dlbWVpbmRlbmFtZUNvbnRl
eHQuY2xhc3MsMCk7CisJCX0KKwkJcHVibGljIFVnQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBw
YXJlbnQsIGludCBpbnZva2luZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3Rh
dGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJu
IFJVTEVfdWc7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRy
ZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxp
c3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJVZyg9CnRoaXMpOworCQl9CisJ
CUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0
ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZM
aXN0ZW5lcilsaXN0ZW5lcikuZXhpdFVnKHQ9Cmhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmlu
YWwgVWdDb250ZXh0IHVnKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJVWdDb250
ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFVnQ29udGV4dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50
ZXJSdWxlKF9sb2NhbGN0eCwgNTIsIFJVTEVfdWcpOworCQl0cnkgeworCQkJc2V0U3RhdGUoNDA4
KTsKKwkJCXN3aXRjaCAoX2lucHV0LkxBKDEpKSB7CisJCQljYXNlIFVfR0VNRUlOREVTQ0hMVUVT
U0VMOgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCQl7CisJCQkJc2V0U3Rh
dGUoNDA2KTsKKwkJCQl1X2dlbWVpbmRlc2NobHVlc3NlbCgpOworCQkJCX0KKwkJCQlicmVhazsK
KwkJCWNhc2UgVV9HRU1FSU5ERU5BTUU6CisJCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDIp
OworCQkJCXsKKwkJCQlzZXRTdGF0ZSg0MDcpOworCQkJCXVfZ2VtZWluZGVuYW1lKCk7CisJCQkJ
fQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgTm9WaWFibGVBbHRFeGNl
cHRpb24odGhpcyk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJl
KSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9y
dEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9
CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4Owor
CX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgVWtDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNv
bnRleHQgeworCQlwdWJsaWMgVV9rb29yZGluYXRlbkNvbnRleHQgdV9rb29yZGluYXRlbigpIHsK
KwkJCXJldHVybiBnZXRSdWxlQ29udGV4dChVX2tvb3JkaW5hdGVuQ29udGV4dC5jbGFzcywwKTsK
KwkJfQorCQlwdWJsaWMgVV9rb29yZGluYXRlbl9zQ29udGV4dCB1X2tvb3JkaW5hdGVuX3MoKSB7
CisJCQlyZXR1cm4gZ2V0UnVsZUNvbnRleHQoVV9rb29yZGluYXRlbl9zQ29udGV4dC5jbGFzcyww
KTsKKwkJfQorCQlwdWJsaWMgVWtDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50
IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0K
KwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV91azsg
fQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVy
IGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAo
KExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclVrKD0KdGhpcyk7CisJCX0KKwkJQE92ZXJyaWRl
CisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJ
CQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxp
c3RlbmVyKS5leGl0VWsodD0KaGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBVa0NvbnRl
eHQgdWsoKSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb24geworCQlVa0NvbnRleHQgX2xvY2Fs
Y3R4ID0zRCBuZXcgVWtDb250ZXh0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xv
Y2FsY3R4LCA1NCwgUlVMRV91ayk7CisJCXRyeSB7CisJCQlzZXRTdGF0ZSg0MTIpOworCQkJc3dp
dGNoIChfaW5wdXQuTEEoMSkpIHsKKwkJCWNhc2UgVV9LT09SRElOQVRFTjoKKwkJCQllbnRlck91
dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQkJeworCQkJCXNldFN0YXRlKDQxMCk7CisJCQkJdV9r
b29yZGluYXRlbigpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVV9LT09SRElOQVRFTl9T
OgorCQkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAyKTsKKwkJCQl7CisJCQkJc2V0U3RhdGUo
NDExKTsKKwkJCQl1X2tvb3JkaW5hdGVuX3MoKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZh
dWx0OgorCQkJCXRocm93IG5ldyBOb1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzKTsKKwkJCX0KKwkJ
fQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNl
cHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJ
X2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0
UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBj
bGFzcyBWZXJzaW9uQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGlj
IFRlcm1pbmFsTm9kZSBWRVJTSU9OKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlZFUlNJ
T04sIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HX0VTQygpIHsgcmV0dXJuIGdl
dFRva2VuKExhZlBhcnNlci5TVFJJTkdfRVNDLD0KIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5v
ZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgMCk7IH0KKwkJ
cHVibGljIFZlcnNpb25Db250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9r
aW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92
ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV92ZXJzaW9uOyB9
CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIg
bGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgo
TGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyVmVyPQpzaW9uKHRoaXMpOworCQl9CisJCUBPdmVy
cmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikg
eworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5l
cilsaXN0ZW5lcikuZXhpdFZlcnM9Cmlvbih0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5h
bCBWZXJzaW9uQ29udGV4dCB2ZXJzaW9uKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIHsK
KwkJVmVyc2lvbkNvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgVmVyc2lvbkNvbnRleHQoX2N0eCwg
Z2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDU2LCBSVUxFX3ZlcnNpb24pOwor
CQlpbnQgX2xhOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJ
eworCQkJc2V0U3RhdGUoNDE0KTsKKwkJCW1hdGNoKFZFUlNJT04pOworCQkJc2V0U3RhdGUoNDE1
KTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19F
U0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUo
dGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQlj
YXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24g
PTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2Vyckhh
bmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgp
OworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBV
ZWJlcnRyYWd1bmdzZm9ybWF0Q29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJ
cHVibGljIFRlcm1pbmFsTm9kZSBVRUJFUlRSQUdVTkdTRk9STUFUKCkgeyByZXR1cm4gZ2V0VG9r
ZW4oTGFmUGFyc2VyLlVFPQpCRVJUUkFHVU5HU0ZPUk1BVCwgMCk7IH0KKwkJcHVibGljIFRlcm1p
bmFsTm9kZSBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19F
U0MsPQogMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRU
b2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgVWViZXJ0cmFndW5nc2Zvcm1h
dENvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmc9ClN0YXRlKSB7
CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJs
aWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfdWViZXJ0cmFndW5nc2Zvcm1hdDsg
fQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVy
IGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAo
KExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclVlYj0KZXJ0cmFndW5nc2Zvcm1hdCh0aGlzKTsK
KwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVu
ZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciAp
ICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRVZWJlPQpydHJhZ3VuZ3Nmb3JtYXQodGhpcyk7
CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgVWViZXJ0cmFndW5nc2Zvcm1hdENvbnRleHQgdWVi
ZXJ0cmFndW5nc2Zvcm1hdCgpIHRocm93cyBSZWNvPQpnbml0aW9uRXhjZXB0aW9uIHsKKwkJVWVi
ZXJ0cmFndW5nc2Zvcm1hdENvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgVWViZXJ0cmFndW5nc2Zv
cm1hdENvbnRleHQoPQpfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwg
NTgsIFJVTEVfdWViZXJ0cmFndW5nc2Zvcm1hdCk7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQll
bnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg0MTcpOworCQkJ
bWF0Y2goVUVCRVJUUkFHVU5HU0ZPUk1BVCk7CisJCQlzZXRTdGF0ZSg0MTgpOworCQkJX2xhID0z
RCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9
M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCX0g
ZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25p
dGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlf
ZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVy
KHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0
dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIERhdGVuYmFzaXNDb250
ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWluYWxOb2RlIERB
VEVOQkFTSVMoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuREFURU5CQVNJUyw9CiAwKTsg
fQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklOR19FU0MoKSB7IHJldHVybiBnZXRUb2tlbihM
YWZQYXJzZXIuU1RSSU5HX0VTQyw9CiAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklO
RygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBE
YXRlbmJhc2lzQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0
YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlk
ZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfZGF0ZW5iYXNpczsgfQor
CQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxp
c3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExh
Zkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlckRhdD0KZW5iYXNpcyh0aGlzKTsKKwkJfQorCQlAT3Zl
cnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIp
IHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVu
ZXIpbGlzdGVuZXIpLmV4aXREYXRlPQpuYmFzaXModGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMg
ZmluYWwgRGF0ZW5iYXNpc0NvbnRleHQgZGF0ZW5iYXNpcygpIHRocm93cyBSZWNvZ25pdGlvbkV4
Y2VwdGlvbiB7CisJCURhdGVuYmFzaXNDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IERhdGVuYmFz
aXNDb250ZXh0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCA2MCwg
UlVMRV9kYXRlbmJhc2lzKTsKKwkJaW50IF9sYTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQo
X2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDQyMCk7CisJCQltYXRjaChEQVRFTkJB
U0lTKTsKKwkJCXNldFN0YXRlKDQyMSk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlm
ICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJy
SGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7
CisJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJ
CQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9y
KHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZp
bmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKwor
CXB1YmxpYyBzdGF0aWMgY2xhc3MgRGF0ZW5iYXNpc19zQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1
bGVDb250ZXh0IHsKKwkJcHVibGljIFRlcm1pbmFsTm9kZSBEQVRFTkJBU0lTX1MoKSB7IHJldHVy
biBnZXRUb2tlbihMYWZQYXJzZXIuREFURU5CQVNJPQpTX1MsIDApOyB9CisJCXB1YmxpYyBUZXJt
aW5hbE5vZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgMCk7
IH0KKwkJcHVibGljIERhdGVuYmFzaXNfc0NvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50
LCBpbnQgaW52b2tpbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsK
KwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxF
X2RhdGVuYmFzaXNfczsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBh
cnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2Yg
TGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlckRhdD0KZW5iYXNpc19z
KHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRy
ZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxp
c3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdERhdGU9Cm5iYXNpc19zKHRoaXMp
OworCQl9CisJfQorCisJcHVibGljIGZpbmFsIERhdGVuYmFzaXNfc0NvbnRleHQgZGF0ZW5iYXNp
c19zKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aT0Kb24geworCQlEYXRlbmJhc2lzX3NDb250
ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IERhdGVuYmFzaXNfc0NvbnRleHQoX2N0eCwgZ2V0U3RhdGU9
CigpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgNjIsIFJVTEVfZGF0ZW5iYXNpc19zKTsKKwkJ
dHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRl
KDQyMyk7CisJCQltYXRjaChEQVRFTkJBU0lTX1MpOworCQkJc2V0U3RhdGUoNDI0KTsKKwkJCW1h
dGNoKFNUUklORyk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJl
KSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9y
dEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9
CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4Owor
CX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTmV0emtlbm51bmdDb250ZXh0IGV4dGVuZHMgUGFy
c2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWluYWxOb2RlIE5FVFpLRU5OVU5HKCkgeyBy
ZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLk5FVFpLRU5OVU49CkcsIDApOyB9CisJCXB1YmxpYyBU
ZXJtaW5hbE5vZGUgU1RSSU5HX0VTQygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJ
TkdfRVNDLD0KIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKCkgeyByZXR1cm4g
Z2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgMCk7IH0KKwkJcHVibGljIE5ldHprZW5udW5nQ29u
dGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlKSB7CisJCQlz
dXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50
IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfbmV0emtlbm51bmc7IH0KKwkJQE92ZXJyaWRl
CisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgewor
CQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcils
aXN0ZW5lcikuZW50ZXJOZXQ9CnprZW5udW5nKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlw
dWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYg
KCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5l
cikuZXhpdE5ldHo9Cmtlbm51bmcodGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgTmV0
emtlbm51bmdDb250ZXh0IG5ldHprZW5udW5nKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9u
PQogeworCQlOZXR6a2VubnVuZ0NvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgTmV0emtlbm51bmdD
b250ZXh0KF9jdHgsIGdldFN0YXRlKCk9Cik7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDY0LCBS
VUxFX25ldHprZW5udW5nKTsKKwkJaW50IF9sYTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQo
X2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDQyNik7CisJCQltYXRjaChORVRaS0VO
TlVORyk7CisJCQlzZXRTdGF0ZSg0MjcpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlp
ZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkgeworCQkJX2Vy
ckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJY29uc3VtZSgp
OworCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgewor
CQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJv
cih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlm
aW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisK
KwlwdWJsaWMgc3RhdGljIGNsYXNzIEVyemV1Z2VyQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVD
b250ZXh0IHsKKwkJcHVibGljIFRlcm1pbmFsTm9kZSBFUlpFVUdFUigpIHsgcmV0dXJuIGdldFRv
a2VuKExhZlBhcnNlci5FUlpFVUdFUiwgMCk7PQogfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNU
UklOR19FU0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VTQyw9CiAwKTsg
fQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBh
cnNlci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBFcnpldWdlckNvbnRleHQoUGFyc2VyUnVsZUNv
bnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZv
a2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7
IHJldHVybiBSVUxFX2VyemV1Z2VyOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRl
clJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5z
dGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyRXJ6PQpl
dWdlcih0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFy
c2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBM
YWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRFcnplPQp1Z2VyKHRoaXMp
OworCQl9CisJfQorCisJcHVibGljIGZpbmFsIEVyemV1Z2VyQ29udGV4dCBlcnpldWdlcigpIHRo
cm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7CisJCUVyemV1Z2VyQ29udGV4dCBfbG9jYWxjdHgg
PTNEIG5ldyBFcnpldWdlckNvbnRleHQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShf
bG9jYWxjdHgsIDY2LCBSVUxFX2VyemV1Z2VyKTsKKwkJaW50IF9sYTsKKwkJdHJ5IHsKKwkJCWVu
dGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDQyOSk7CisJCQlt
YXRjaChFUlpFVUdFUik7CisJCQlzZXRTdGF0ZSg0MzApOworCQkJX2xhID0zRCBfaW5wdXQuTEEo
MSk7CisJCQlpZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkg
eworCQkJX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJ
Y29uc3VtZSgpOworCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlv
biByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5y
ZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsK
KwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0
eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFN0YWF0X2Rlcl9tZXNzc3RlbGxlX2xhbmdD
b250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvPQpudGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5v
ZGUgU1RBQVRfREVSX01FU1NTVEVMTEVfTEFORygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcj0K
c2VyLlNUQUFUX0RFUl9NRVNTU1RFTExFX0xBTkcsIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5v
ZGUgU1RSSU5HX0VTQygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkdfRVNDLD0K
IDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4o
TGFmUGFyc2VyLlNUUklORywgMCk7IH0KKwkJcHVibGljIFN0YWF0X2Rlcl9tZXNzc3RlbGxlX2xh
bmdDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGluPQp2b2tpbmdTdGF0ZSkg
eworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVi
bGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3N0YWF0X2Rlcl9tZXNzc3RlbGxl
X2w9CmFuZzsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJl
ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlz
dGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclN0YT0KYXRfZGVyX21lc3NzdGVs
bGVfbGFuZyh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUo
UGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2Vv
ZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRTdGFhPQp0X2Rlcl9t
ZXNzc3RlbGxlX2xhbmcodGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgU3RhYXRfZGVy
X21lc3NzdGVsbGVfbGFuZ0NvbnRleHQgc3RhYXRfZGVyX21lc3NzdGVsbGVfbGFuZygpPQogdGhy
b3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJU3RhYXRfZGVyX21lc3NzdGVsbGVfbGFuZ0Nv
bnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgU3RhYXRfZGVyX21lc3NzdGVsbGVfPQpsYW5nQ29udGV4
dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgNjgsIFJVTEVfc3Rh
YXRfZGVyX21lc3NzdGVsbGVfbGFuZyk7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91
dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg0MzIpOworCQkJbWF0Y2go
U1RBQVRfREVSX01FU1NTVEVMTEVfTEFORyk7CisJCQlzZXRTdGF0ZSg0MzMpOworCQkJX2xhID0z
RCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9
M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCX0g
ZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25p
dGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlf
ZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVy
KHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0
dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFN0YWF0X2Rlcl9tZXNz
c3RlbGxlX2t1cnpDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvPQpudGV4dCB7CisJCXB1Ymxp
YyBUZXJtaW5hbE5vZGUgU1RBQVRfREVSX01FU1NTVEVMTEVfS1VSWigpIHsgcmV0dXJuIGdldFRv
a2VuKExhZlBhcj0Kc2VyLlNUQUFUX0RFUl9NRVNTU1RFTExFX0tVUlosIDApOyB9CisJCXB1Ymxp
YyBUZXJtaW5hbE5vZGUgU1RSSU5HX0VTQygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5T
VFJJTkdfRVNDLD0KIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKCkgeyByZXR1
cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgMCk7IH0KKwkJcHVibGljIFN0YWF0X2Rlcl9t
ZXNzc3RlbGxlX2t1cnpDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGluPQp2
b2tpbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlA
T3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3N0YWF0X2Rl
cl9tZXNzc3RlbGxlX2s9CnVyejsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJS
dWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3Rh
bmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclN0YT0KYXRf
ZGVyX21lc3NzdGVsbGVfa3Vyeih0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZv
aWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVu
ZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRT
dGFhPQp0X2Rlcl9tZXNzc3RlbGxlX2t1cnoodGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmlu
YWwgU3RhYXRfZGVyX21lc3NzdGVsbGVfa3VyekNvbnRleHQgc3RhYXRfZGVyX21lc3NzdGVsbGVf
a3VyeigpPQogdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJU3RhYXRfZGVyX21lc3Nz
dGVsbGVfa3VyekNvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgU3RhYXRfZGVyX21lc3NzdGVsbGVf
PQprdXJ6Q29udGV4dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwg
NzAsIFJVTEVfc3RhYXRfZGVyX21lc3NzdGVsbGVfa3Vyeik7CisJCWludCBfbGE7CisJCXRyeSB7
CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg0MzUp
OworCQkJbWF0Y2goU1RBQVRfREVSX01FU1NTVEVMTEVfS1VSWik7CisJCQlzZXRTdGF0ZSg0MzYp
OworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VT
QyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0
aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQorCQkJfQorCQl9CisJCWNh
dGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9
M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFu
ZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7
CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFN0
YWF0X2Rlcl9tZXNzc3RlbGxlX3NDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRlPQp4dCB7
CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RBQVRfREVSX01FU1NTVEVMTEVfUygpIHsgcmV0dXJu
IGdldFRva2VuKExhZlBhcnNlcj0KLlNUQUFUX0RFUl9NRVNTU1RFTExFX1MsIDApOyB9CisJCXB1
YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNU
UklORywgMCk7IH0KKwkJcHVibGljIFN0YWF0X2Rlcl9tZXNzc3RlbGxlX3NDb250ZXh0KFBhcnNl
clJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9rPQppbmdTdGF0ZSkgeworCQkJc3VwZXIocGFy
ZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxl
SW5kZXgoKSB7IHJldHVybiBSVUxFX3N0YWF0X2Rlcl9tZXNzc3RlbGxlX3M9CjsgfQorCQlAT3Zl
cnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVy
KSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3Rl
bmVyKWxpc3RlbmVyKS5lbnRlclN0YT0KYXRfZGVyX21lc3NzdGVsbGVfcyh0aGlzKTsKKwkJfQor
CQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlz
dGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFm
TGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRTdGFhPQp0X2Rlcl9tZXNzc3RlbGxlX3ModGhpcyk7CisJ
CX0KKwl9CisKKwlwdWJsaWMgZmluYWwgU3RhYXRfZGVyX21lc3NzdGVsbGVfc0NvbnRleHQgc3Rh
YXRfZGVyX21lc3NzdGVsbGVfcygpIHRocm93PQpzIFJlY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJ
U3RhYXRfZGVyX21lc3NzdGVsbGVfc0NvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgU3RhYXRfZGVy
X21lc3NzdGVsbGVfc0NvPQpudGV4dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9s
b2NhbGN0eCwgNzIsIFJVTEVfc3RhYXRfZGVyX21lc3NzdGVsbGVfcyk7CisJCXRyeSB7CisJCQll
bnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg0MzgpOworCQkJ
bWF0Y2goU1RBQVRfREVSX01FU1NTVEVMTEVfUyk7CisJCQlzZXRTdGF0ZSg0MzkpOworCQkJbWF0
Y2goU1RSSU5HKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUp
IHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0
RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0K
KwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJ
fQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBNZXNzc3RlbGxlQ29udGV4dCBleHRlbmRzIFBhcnNl
clJ1bGVDb250ZXh0IHsKKwkJcHVibGljIFRlcm1pbmFsTm9kZSBNRVNTU1RFTExFKCkgeyByZXR1
cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLk1FU1NTVEVMTEUsPQogMCk7IH0KKwkJcHVibGljIFRlcm1p
bmFsTm9kZSBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19F
U0MsPQogMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRU
b2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgTWVzc3N0ZWxsZUNvbnRleHQo
UGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0ZSkgeworCQkJc3VwZXIo
cGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRS
dWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX21lc3NzdGVsbGU7IH0KKwkJQE92ZXJyaWRlCisJCXB1
YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYg
KCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5l
cikuZW50ZXJNZXM9CnNzdGVsbGUodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2
b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3Rl
bmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0
TWVzcz0Kc3RlbGxlKHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIE1lc3NzdGVsbGVD
b250ZXh0IG1lc3NzdGVsbGUoKSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb24geworCQlNZXNz
c3RlbGxlQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBNZXNzc3RlbGxlQ29udGV4dChfY3R4LCBn
ZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgNzQsIFJVTEVfbWVzc3N0ZWxsZSk7
CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJ
CQl7CisJCQlzZXRTdGF0ZSg0NDEpOworCQkJbWF0Y2goTUVTU1NURUxMRSk7CisJCQlzZXRTdGF0
ZSg0NDIpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xhPTNEPTNEU1RS
SU5HX0VTQyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIucmVjb3Zlcklu
bGluZSh0aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQorCQkJfQorCQl9
CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2Vw
dGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlf
ZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRS
dWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNs
YXNzIE1lc3NsYWJvckNvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1Ymxp
YyBUZXJtaW5hbE5vZGUgTUVTU0xBQk9SKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLk1F
U1NMQUJPUiwgMD0KKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklOR19FU0MoKSB7IHJl
dHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VTQyw9CiAwKTsgfQorCQlwdWJsaWMgVGVy
bWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkcsIDAp
OyB9CisJCXB1YmxpYyBNZXNzbGFib3JDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwg
aW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJ
CX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9t
ZXNzbGFib3I7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRy
ZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxp
c3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJNZXM9CnNsYWJvcih0aGlzKTsK
KwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVu
ZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciAp
ICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRNZXNzPQpsYWJvcih0aGlzKTsKKwkJfQorCX0K
KworCXB1YmxpYyBmaW5hbCBNZXNzbGFib3JDb250ZXh0IG1lc3NsYWJvcigpIHRocm93cyBSZWNv
Z25pdGlvbkV4Y2VwdGlvbiB7CisJCU1lc3NsYWJvckNvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcg
TWVzc2xhYm9yQ29udGV4dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0
eCwgNzYsIFJVTEVfbWVzc2xhYm9yKTsKKwkJaW50IF9sYTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0
ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDQ0NCk7CisJCQltYXRjaChN
RVNTTEFCT1IpOworCQkJc2V0U3RhdGUoNDQ1KTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOwor
CQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJ
CV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1
bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUp
IHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0
RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0K
KwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJ
fQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBQcm9iZV9pZENvbnRleHQgZXh0ZW5kcyBQYXJzZXJS
dWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgUFJPQkVfSUQoKSB7IHJldHVybiBn
ZXRUb2tlbihMYWZQYXJzZXIuUFJPQkVfSUQsIDApOz0KIH0KKwkJcHVibGljIFRlcm1pbmFsTm9k
ZSBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsPQog
MCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihM
YWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgUHJvYmVfaWRDb250ZXh0KFBhcnNlclJ1
bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwg
aW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4
KCkgeyByZXR1cm4gUlVMRV9wcm9iZV9pZDsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQg
ZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVy
IGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclBy
bz0KYmVfaWQodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxl
KFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNl
b2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0UHJvYj0KZV9pZCh0
aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBQcm9iZV9pZENvbnRleHQgcHJvYmVfaWQo
KSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb24geworCQlQcm9iZV9pZENvbnRleHQgX2xvY2Fs
Y3R4ID0zRCBuZXcgUHJvYmVfaWRDb250ZXh0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1
bGUoX2xvY2FsY3R4LCA3OCwgUlVMRV9wcm9iZV9pZCk7CisJCWludCBfbGE7CisJCXRyeSB7CisJ
CQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg0NDcpOwor
CQkJbWF0Y2goUFJPQkVfSUQpOworCQkJc2V0U3RhdGUoNDQ4KTsKKwkJCV9sYSA9M0QgX2lucHV0
LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5H
KSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2Ugewor
CQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNl
cHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRs
ZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCBy
ZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9j
YWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBNZXNzdW5nc19pZENvbnRleHQgZXh0
ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgTUVTU1VOR1Nf
SUQoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuTUVTU1VOR1NfST0KRCwgMCk7IH0KKwkJ
cHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIu
U1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgTWVzc3VuZ3NfaWRDb250ZXh0KFBhcnNlclJ1bGVDb250
ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tp
bmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyBy
ZXR1cm4gUlVMRV9tZXNzdW5nc19pZDsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50
ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGlu
c3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlck1lcz0K
c3VuZ3NfaWQodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxl
KFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNl
b2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0TWVzcz0KdW5nc19p
ZCh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBNZXNzdW5nc19pZENvbnRleHQgbWVz
c3VuZ3NfaWQoKSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb249CiB7CisJCU1lc3N1bmdzX2lk
Q29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBNZXNzdW5nc19pZENvbnRleHQoX2N0eCwgZ2V0U3Rh
dGUoKT0KKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgODAsIFJVTEVfbWVzc3VuZ3NfaWQpOwor
CQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJc2V0U3Rh
dGUoNDUwKTsKKwkJCW1hdGNoKE1FU1NVTkdTX0lEKTsKKwkJCXNldFN0YXRlKDQ1MSk7CisJCQlt
YXRjaChTVFJJTkcpOworCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiBy
ZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBv
cnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJ
fQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsK
Kwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFByb2Jlbl9uckNvbnRleHQgZXh0ZW5kcyBQYXJz
ZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgUFJPQkVOX05SKCkgeyByZXR1
cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlBST0JFTl9OUiwgMD0KKTsgfQorCQlwdWJsaWMgVGVybWlu
YWxOb2RlIFNUUklOR19FU0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VT
Qyw9CiAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRv
a2VuKExhZlBhcnNlci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBQcm9iZW5fbnJDb250ZXh0KFBh
cnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBh
cmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVs
ZUluZGV4KCkgeyByZXR1cm4gUlVMRV9wcm9iZW5fbnI7IH0KKwkJQE92ZXJyaWRlCisJCXB1Ymxp
YyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBs
aXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lciku
ZW50ZXJQcm89CmJlbl9ucih0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQg
ZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIg
aW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRQcm9i
PQplbl9ucih0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBQcm9iZW5fbnJDb250ZXh0
IHByb2Jlbl9ucigpIHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7CisJCVByb2Jlbl9uckNv
bnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgUHJvYmVuX25yQ29udGV4dChfY3R4LCBnZXRTdGF0ZSgp
KTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgODIsIFJVTEVfcHJvYmVuX25yKTsKKwkJaW50IF9s
YTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNl
dFN0YXRlKDQ1Myk7CisJCQltYXRjaChQUk9CRU5fTlIpOworCQkJc2V0U3RhdGUoNDU0KTsKKwkJ
CV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwg
X2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7
CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAo
UmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJl
OworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIu
cmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9
CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBIYXVwdHBy
b2Jlbm51bW1lckNvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBU
ZXJtaW5hbE5vZGUgSEFVUFRQUk9CRU5OVU1NRVIoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJz
ZXIuSEFVUD0KVFBST0JFTk5VTU1FUiwgMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJ
TkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsPQogMCk7IH0K
KwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJz
ZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgSGF1cHRwcm9iZW5udW1tZXJDb250ZXh0KFBhcnNl
clJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3Q9CmF0ZSkgeworCQkJc3VwZXIocGFy
ZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxl
SW5kZXgoKSB7IHJldHVybiBSVUxFX2hhdXB0cHJvYmVubnVtbWVyOyB9CisJCUBPdmVycmlkZQor
CQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJ
CWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlz
dGVuZXIpLmVudGVySGF1PQpwdHByb2Jlbm51bW1lcih0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUK
KwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJ
CWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlz
dGVuZXIpLmV4aXRIYXVwPQp0cHJvYmVubnVtbWVyKHRoaXMpOworCQl9CisJfQorCisJcHVibGlj
IGZpbmFsIEhhdXB0cHJvYmVubnVtbWVyQ29udGV4dCBoYXVwdHByb2Jlbm51bW1lcigpIHRocm93
cyBSZWNvZ25pdD0KaW9uRXhjZXB0aW9uIHsKKwkJSGF1cHRwcm9iZW5udW1tZXJDb250ZXh0IF9s
b2NhbGN0eCA9M0QgbmV3IEhhdXB0cHJvYmVubnVtbWVyQ29udGV4dChfY3R4PQosIGdldFN0YXRl
KCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCA4NCwgUlVMRV9oYXVwdHByb2Jlbm51bW1lcik7
CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJ
CQl7CisJCQlzZXRTdGF0ZSg0NTYpOworCQkJbWF0Y2goSEFVUFRQUk9CRU5OVU1NRVIpOworCQkJ
c2V0U3RhdGUoNDU3KTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0z
RD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJl
Y292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJ
CX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0
eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUp
OworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJ
CQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0
YXRpYyBjbGFzcyBOZWJlbnByb2Jlbm51bW1lckNvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29u
dGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgTkVCRU5QUk9CRU5OVU1NRVIoKSB7IHJldHVy
biBnZXRUb2tlbihMYWZQYXJzZXIuTkVCRT0KTlBST0JFTk5VTU1FUiwgMCk7IH0KKwkJcHVibGlj
IFRlcm1pbmFsTm9kZSBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNU
UklOR19FU0MsPQogMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVy
biBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgTmViZW5wcm9iZW5u
dW1tZXJDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3Q9CmF0
ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUg
cHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX25lYmVucHJvYmVubnVtbWVy
OyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVu
ZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciAp
ICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyTmViPQplbnByb2Jlbm51bW1lcih0aGlzKTsK
KwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVu
ZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciAp
ICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXROZWJlPQpucHJvYmVubnVtbWVyKHRoaXMpOwor
CQl9CisJfQorCisJcHVibGljIGZpbmFsIE5lYmVucHJvYmVubnVtbWVyQ29udGV4dCBuZWJlbnBy
b2Jlbm51bW1lcigpIHRocm93cyBSZWNvZ25pdD0KaW9uRXhjZXB0aW9uIHsKKwkJTmViZW5wcm9i
ZW5udW1tZXJDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IE5lYmVucHJvYmVubnVtbWVyQ29udGV4
dChfY3R4PQosIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCA4NiwgUlVMRV9u
ZWJlbnByb2Jlbm51bW1lcik7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0
KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg0NTkpOworCQkJbWF0Y2goTkVCRU5Q
Uk9CRU5OVU1NRVIpOworCQkJc2V0U3RhdGUoNDYwKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEp
OworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsK
KwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNv
bnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24g
cmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVw
b3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJ
CX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7
CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBNZXNzcHJvZ3JhbW1fY0NvbnRleHQgZXh0ZW5k
cyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgTUVTU1BST0dSQU1N
X0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuTUVTU1BSTz0KR1JBTU1fQywgMCk7IH0K
KwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFm
UGFyc2VyLlNUUklOR19FU0MsPQogMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkco
KSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgTWVz
c3Byb2dyYW1tX2NDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5n
U3RhdGU9CikgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3Zl
cnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX21lc3Nwcm9ncmFt
bV9jOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlz
dGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5l
ciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyTWVzPQpzcHJvZ3JhbW1fYyh0aGlzKTsK
KwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVu
ZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciAp
ICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRNZXNzPQpwcm9ncmFtbV9jKHRoaXMpOworCQl9
CisJfQorCisJcHVibGljIGZpbmFsIE1lc3Nwcm9ncmFtbV9jQ29udGV4dCBtZXNzcHJvZ3JhbW1f
YygpIHRocm93cyBSZWNvZ25pdGlvbkV4Yz0KZXB0aW9uIHsKKwkJTWVzc3Byb2dyYW1tX2NDb250
ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IE1lc3Nwcm9ncmFtbV9jQ29udGV4dChfY3R4LCBnZXRTPQp0
YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCA4OCwgUlVMRV9tZXNzcHJvZ3JhbW1fYyk7
CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJ
CQl7CisJCQlzZXRTdGF0ZSg0NjIpOworCQkJbWF0Y2goTUVTU1BST0dSQU1NX0MpOworCQkJc2V0
U3RhdGUoNDYzKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0z
RFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292
ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0K
KwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5l
eGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOwor
CQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQll
eGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRp
YyBjbGFzcyBNZXNzcHJvZ3JhbW1fc0NvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7
CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgTUVTU1BST0dSQU1NX1MoKSB7IHJldHVybiBnZXRUb2tl
bihMYWZQYXJzZXIuTUVTU1BSTz0KR1JBTU1fUywgMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9k
ZSBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsPQog
MCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihM
YWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgTWVzc3Byb2dyYW1tX3NDb250ZXh0KFBh
cnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGU9CikgeworCQkJc3VwZXIo
cGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRS
dWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX21lc3Nwcm9ncmFtbV9zOyB9CisJCUBPdmVycmlkZQor
CQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJ
CWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlz
dGVuZXIpLmVudGVyTWVzPQpzcHJvZ3JhbW1fcyh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJ
cHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlm
ICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVu
ZXIpLmV4aXRNZXNzPQpwcm9ncmFtbV9zKHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFs
IE1lc3Nwcm9ncmFtbV9zQ29udGV4dCBtZXNzcHJvZ3JhbW1fcygpIHRocm93cyBSZWNvZ25pdGlv
bkV4Yz0KZXB0aW9uIHsKKwkJTWVzc3Byb2dyYW1tX3NDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3
IE1lc3Nwcm9ncmFtbV9zQ29udGV4dChfY3R4LCBnZXRTPQp0YXRlKCkpOworCQllbnRlclJ1bGUo
X2xvY2FsY3R4LCA5MCwgUlVMRV9tZXNzcHJvZ3JhbW1fcyk7CisJCWludCBfbGE7CisJCXRyeSB7
CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg0NjUp
OworCQkJbWF0Y2goTUVTU1BST0dSQU1NX1MpOworCQkJc2V0U3RhdGUoNDY2KTsKKwkJCV9sYSA9
M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNE
PTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9
IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2du
aXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJ
X2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zl
cih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJl
dHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBNZXNzcHJvZ3JhbW1f
bGFuZENvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5h
bE5vZGUgTUVTU1BST0dSQU1NX0xBTkQoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuTUVT
Uz0KUFJPR1JBTU1fTEFORCwgMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkdfRVND
KCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsPQogMCk7IH0KKwkJcHVi
bGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RS
SU5HLCAwKTsgfQorCQlwdWJsaWMgTWVzc3Byb2dyYW1tX2xhbmRDb250ZXh0KFBhcnNlclJ1bGVD
b250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3Q9CmF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBp
bnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgo
KSB7IHJldHVybiBSVUxFX21lc3Nwcm9ncmFtbV9sYW5kOyB9CisJCUBPdmVycmlkZQorCQlwdWJs
aWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICgg
bGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIp
LmVudGVyTWVzPQpzcHJvZ3JhbW1fbGFuZCh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVi
bGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICgg
bGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIp
LmV4aXRNZXNzPQpwcm9ncmFtbV9sYW5kKHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFs
IE1lc3Nwcm9ncmFtbV9sYW5kQ29udGV4dCBtZXNzcHJvZ3JhbW1fbGFuZCgpIHRocm93cyBSZWNv
Z25pdD0KaW9uRXhjZXB0aW9uIHsKKwkJTWVzc3Byb2dyYW1tX2xhbmRDb250ZXh0IF9sb2NhbGN0
eCA9M0QgbmV3IE1lc3Nwcm9ncmFtbV9sYW5kQ29udGV4dChfY3R4PQosIGdldFN0YXRlKCkpOwor
CQllbnRlclJ1bGUoX2xvY2FsY3R4LCA5MiwgUlVMRV9tZXNzcHJvZ3JhbW1fbGFuZCk7CisJCWlu
dCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJ
CQlzZXRTdGF0ZSg0NjgpOworCQkJbWF0Y2goTUVTU1BST0dSQU1NX0xBTkQpOworCQkJc2V0U3Rh
dGUoNDY5KTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNU
UklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJ
bmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJ
fQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNl
cHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJ
X2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0
UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBj
bGFzcyBQcm9iZW5haG1laW5zdGl0dXRpb25Db250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRl
eD0KdCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgUFJPQkVOQUhNRUlOU1RJVFVUSU9OKCkgeyBy
ZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLj0KUFJPQkVOQUhNRUlOU1RJVFVUSU9OLCAwKTsgfQor
CQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklOR19FU0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQ
YXJzZXIuU1RSSU5HX0VTQyw9CiAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygp
IHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBQcm9i
ZW5haG1laW5zdGl0dXRpb25Db250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGlu
dm9raT0KbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQor
CQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3Byb2Jl
bmFobWVpbnN0aXR1dGlvbjs9CiB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1
bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFu
Y2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyUHJvPQpiZW5h
aG1laW5zdGl0dXRpb24odGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4
aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGlu
c3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0UHJvYj0K
ZW5haG1laW5zdGl0dXRpb24odGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgUHJvYmVu
YWhtZWluc3RpdHV0aW9uQ29udGV4dCBwcm9iZW5haG1laW5zdGl0dXRpb24oKSB0aHJvd3MgPQpS
ZWNvZ25pdGlvbkV4Y2VwdGlvbiB7CisJCVByb2JlbmFobWVpbnN0aXR1dGlvbkNvbnRleHQgX2xv
Y2FsY3R4ID0zRCBuZXcgUHJvYmVuYWhtZWluc3RpdHV0aW9uQ29udD0KZXh0KF9jdHgsIGdldFN0
YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCA5NCwgUlVMRV9wcm9iZW5haG1laW5zdGl0
dXRpb24pOworCQlpbnQgX2xhOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgs
IDEpOworCQkJeworCQkJc2V0U3RhdGUoNDcxKTsKKwkJCW1hdGNoKFBST0JFTkFITUVJTlNUSVRV
VElPTik7CisJCQlzZXRTdGF0ZSg0NzIpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlp
ZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkgeworCQkJX2Vy
ckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJY29uc3VtZSgp
OworCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgewor
CQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJv
cih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlm
aW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisK
KwlwdWJsaWMgc3RhdGljIGNsYXNzIFByb2JlbmFydENvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxl
Q29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgUFJPQkVOQVJUKCkgeyByZXR1cm4gZ2V0
VG9rZW4oTGFmUGFyc2VyLlBST0JFTkFSVCwgMD0KKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2Rl
IFNUUklOR19FU0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VTQyw9CiAw
KTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRva2VuKExh
ZlBhcnNlci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBQcm9iZW5hcnRDb250ZXh0KFBhcnNlclJ1
bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwg
aW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4
KCkgeyByZXR1cm4gUlVMRV9wcm9iZW5hcnQ7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lk
IGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5l
ciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJQ
cm89CmJlbmFydCh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1
bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFu
Y2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRQcm9iPQplbmFy
dCh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBQcm9iZW5hcnRDb250ZXh0IHByb2Jl
bmFydCgpIHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7CisJCVByb2JlbmFydENvbnRleHQg
X2xvY2FsY3R4ID0zRCBuZXcgUHJvYmVuYXJ0Q29udGV4dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJ
ZW50ZXJSdWxlKF9sb2NhbGN0eCwgOTYsIFJVTEVfcHJvYmVuYXJ0KTsKKwkJaW50IF9sYTsKKwkJ
dHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRl
KDQ3NCk7CisJCQltYXRjaChQUk9CRU5BUlQpOworCQkJc2V0U3RhdGUoNDc1KTsKKwkJCV9sYSA9
M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNE
PTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9
IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2du
aXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJ
X2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zl
cih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJl
dHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBaZWl0YmFzaXNDb250
ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWluYWxOb2RlIFpF
SVRCQVNJUygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5aRUlUQkFTSVMsIDA9Cik7IH0K
KwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFm
UGFyc2VyLlNUUklOR19FU0MsPQogMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkco
KSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgWmVp
dGJhc2lzQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRl
KSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBw
dWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfemVpdGJhc2lzOyB9CisJCUBP
dmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVu
ZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlz
dGVuZXIpbGlzdGVuZXIpLmVudGVyWmVpPQp0YmFzaXModGhpcyk7CisJCX0KKwkJQE92ZXJyaWRl
CisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJ
CQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxp
c3RlbmVyKS5leGl0WmVpdD0KYmFzaXModGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwg
WmVpdGJhc2lzQ29udGV4dCB6ZWl0YmFzaXMoKSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb24g
eworCQlaZWl0YmFzaXNDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFplaXRiYXNpc0NvbnRleHQo
X2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDk4LCBSVUxFX3plaXRi
YXNpcyk7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwg
MSk7CisJCQl7CisJCQlzZXRTdGF0ZSg0NzcpOworCQkJbWF0Y2goWkVJVEJBU0lTKTsKKwkJCXNl
dFN0YXRlKDQ3OCk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9
M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNv
dmVySW5saW5lKHRoaXMpOworCQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQl9
CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHgu
ZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsK
KwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJ
ZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0
aWMgY2xhc3MgWmVpdGJhc2lzX3NDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgewor
CQlwdWJsaWMgVGVybWluYWxOb2RlIFpFSVRCQVNJU19TKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFm
UGFyc2VyLlpFSVRCQVNJU189ClMsIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5H
KCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgMCk7IH0KKwkJcHVibGljIFpl
aXRiYXNpc19zQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0
YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlk
ZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfemVpdGJhc2lzX3M7IH0K
KwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBs
aXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChM
YWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJaZWk9CnRiYXNpc19zKHRoaXMpOworCQl9CisJCUBP
dmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5l
cikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0
ZW5lcilsaXN0ZW5lcikuZXhpdFplaXQ9CmJhc2lzX3ModGhpcyk7CisJCX0KKwl9CisKKwlwdWJs
aWMgZmluYWwgWmVpdGJhc2lzX3NDb250ZXh0IHplaXRiYXNpc19zKCkgdGhyb3dzIFJlY29nbml0
aW9uRXhjZXB0aW9uPQogeworCQlaZWl0YmFzaXNfc0NvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcg
WmVpdGJhc2lzX3NDb250ZXh0KF9jdHgsIGdldFN0YXRlKCk9Cik7CisJCWVudGVyUnVsZShfbG9j
YWxjdHgsIDEwMCwgUlVMRV96ZWl0YmFzaXNfcyk7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0
KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg0ODApOworCQkJbWF0Y2goWkVJVEJB
U0lTX1MpOworCQkJc2V0U3RhdGUoNDgxKTsKKwkJCW1hdGNoKFNUUklORyk7CisJCQl9CisJCX0K
KwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0
aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9l
cnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1
bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xh
c3MgU29sbF9kYXR1bV91aHJ6ZWl0X2FDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQ9
CiB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU09MTF9EQVRVTV9VSFJaRUlUX0EoKSB7IHJldHVy
biBnZXRUb2tlbihMYWZQYXJzZXIuUz0KT0xMX0RBVFVNX1VIUlpFSVRfQSwgMCk7IH0KKwkJcHVi
bGljIExpc3Q8VGVybWluYWxOb2RlPiBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbnMoTGFmUGFy
c2VyLlNUUklORyk7PQogfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORyhpbnQgaSkgewor
CQkJcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkcsIGkpOworCQl9CisJCXB1YmxpYyBT
b2xsX2RhdHVtX3VocnplaXRfYUNvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQg
aW52b2tpbj0KZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9
CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfc29s
bF9kYXR1bV91aHJ6ZWl0X2E7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVs
ZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5j
ZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJTb2w9CmxfZGF0
dW1fdWhyemVpdF9hKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0
UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0
YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdFNvbGw9Cl9k
YXR1bV91aHJ6ZWl0X2EodGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgU29sbF9kYXR1
bV91aHJ6ZWl0X2FDb250ZXh0IHNvbGxfZGF0dW1fdWhyemVpdF9hKCkgdGhyb3dzIFJlPQpjb2du
aXRpb25FeGNlcHRpb24geworCQlTb2xsX2RhdHVtX3VocnplaXRfYUNvbnRleHQgX2xvY2FsY3R4
ID0zRCBuZXcgU29sbF9kYXR1bV91aHJ6ZWl0X2FDb250ZXg9CnQoX2N0eCwgZ2V0U3RhdGUoKSk7
CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDEwMiwgUlVMRV9zb2xsX2RhdHVtX3VocnplaXRfYSk7
CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJ
CQl7CisJCQlzZXRTdGF0ZSg0ODMpOworCQkJbWF0Y2goU09MTF9EQVRVTV9VSFJaRUlUX0EpOwor
CQkJc2V0U3RhdGUoNDg0KTsKKwkJCW1hdGNoKFNUUklORyk7CisJCQlzZXRTdGF0ZSg0ODgpOwor
CQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJ
d2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQl7CisJCQkJeworCQkJCXNldFN0YXRlKDQ4NSk7
CisJCQkJbWF0Y2goVF9fNCk7CisJCQkJfQorCQkJCX0KKwkJCQlzZXRTdGF0ZSg0OTApOworCQkJ
CV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9
CisJCQlzZXRTdGF0ZSg0OTEpOworCQkJbWF0Y2goU1RSSU5HKTsKKwkJCX0KKwkJfQorCQljYXRj
aCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNE
IHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRs
ZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOwor
CQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBTb2xs
X2RhdHVtX3VocnplaXRfZUNvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dD0KIHsKKwkJ
cHVibGljIFRlcm1pbmFsTm9kZSBTT0xMX0RBVFVNX1VIUlpFSVRfRSgpIHsgcmV0dXJuIGdldFRv
a2VuKExhZlBhcnNlci5TPQpPTExfREFUVU1fVUhSWkVJVF9FLCAwKTsgfQorCQlwdWJsaWMgTGlz
dDxUZXJtaW5hbE5vZGU+IFNUUklORygpIHsgcmV0dXJuIGdldFRva2VucyhMYWZQYXJzZXIuU1RS
SU5HKTs9CiB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKGludCBpKSB7CisJCQlyZXR1
cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgaSk7CisJCX0KKwkJcHVibGljIFNvbGxfZGF0
dW1fdWhyemVpdF9lQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2lu
PQpnU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92
ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9zb2xsX2RhdHVt
X3VocnplaXRfZTsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNl
VHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFm
TGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclNvbD0KbF9kYXR1bV91aHJ6
ZWl0X2UodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBh
cnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2Yg
TGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0U29sbD0KX2RhdHVtX3Vo
cnplaXRfZSh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBTb2xsX2RhdHVtX3Vocnpl
aXRfZUNvbnRleHQgc29sbF9kYXR1bV91aHJ6ZWl0X2UoKSB0aHJvd3MgUmU9CmNvZ25pdGlvbkV4
Y2VwdGlvbiB7CisJCVNvbGxfZGF0dW1fdWhyemVpdF9lQ29udGV4dCBfbG9jYWxjdHggPTNEIG5l
dyBTb2xsX2RhdHVtX3VocnplaXRfZUNvbnRleD0KdChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50
ZXJSdWxlKF9sb2NhbGN0eCwgMTA0LCBSVUxFX3NvbGxfZGF0dW1fdWhyemVpdF9lKTsKKwkJaW50
IF9sYTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJ
CXNldFN0YXRlKDQ5Myk7CisJCQltYXRjaChTT0xMX0RBVFVNX1VIUlpFSVRfRSk7CisJCQlzZXRT
dGF0ZSg0OTQpOworCQkJbWF0Y2goU1RSSU5HKTsKKwkJCXNldFN0YXRlKDQ5OCk7CisJCQlfZXJy
SGFuZGxlci5zeW5jKHRoaXMpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl3aGlsZSAo
X2xhPTNEPTNEVF9fNCkgeworCQkJCXsKKwkJCQl7CisJCQkJc2V0U3RhdGUoNDk1KTsKKwkJCQlt
YXRjaChUX180KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDUwMCk7CisJCQkJX2Vyckhh
bmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCX0KKwkJCXNl
dFN0YXRlKDUwMSk7CisJCQltYXRjaChTVFJJTkcpOworCQkJfQorCQl9CisJCWNhdGNoIChSZWNv
Z25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJ
CQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNv
dmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJ
cmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFVyc3BydW5nc19k
YXR1bV91aHJ6ZWl0Q29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250PQpleHQgeworCQlwdWJs
aWMgVGVybWluYWxOb2RlIFVSU1BSVU5HU19EQVRVTV9VSFJaRUlUKCkgeyByZXR1cm4gZ2V0VG9r
ZW4oTGFmUGFyc2U9CnIuVVJTUFJVTkdTX0RBVFVNX1VIUlpFSVQsIDApOyB9CisJCXB1YmxpYyBM
aXN0PFRlcm1pbmFsTm9kZT4gU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW5zKExhZlBhcnNlci5T
VFJJTkcpOz0KIH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoaW50IGkpIHsKKwkJCXJl
dHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCBpKTsKKwkJfQorCQlwdWJsaWMgVXJzcHJ1
bmdzX2RhdHVtX3VocnplaXRDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGlu
dm89CmtpbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQor
CQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3Vyc3By
dW5nc19kYXR1bV91aHJ6ZWk9CnQ7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVy
UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0
YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJVcnM9CnBy
dW5nc19kYXR1bV91aHJ6ZWl0KHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9p
ZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5l
ciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdFVy
c3A9CnJ1bmdzX2RhdHVtX3VocnplaXQodGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwg
VXJzcHJ1bmdzX2RhdHVtX3VocnplaXRDb250ZXh0IHVyc3BydW5nc19kYXR1bV91aHJ6ZWl0KCkg
dGhyPQpvd3MgUmVjb2duaXRpb25FeGNlcHRpb24geworCQlVcnNwcnVuZ3NfZGF0dW1fdWhyemVp
dENvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgVXJzcHJ1bmdzX2RhdHVtX3VocnplaXQ9CkNvbnRl
eHQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDEwNiwgUlVMRV91
cnNwcnVuZ3NfZGF0dW1fdWhyemVpdCk7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91
dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg1MDMpOworCQkJbWF0Y2go
VVJTUFJVTkdTX0RBVFVNX1VIUlpFSVQpOworCQkJc2V0U3RhdGUoNTA0KTsKKwkJCW1hdGNoKFNU
UklORyk7CisJCQlzZXRTdGF0ZSg1MDgpOworCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJ
CV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQl7
CisJCQkJeworCQkJCXNldFN0YXRlKDUwNSk7CisJCQkJbWF0Y2goVF9fNCk7CisJCQkJfQorCQkJ
CX0KKwkJCQlzZXRTdGF0ZSg1MTApOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJ
X2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSg1MTEpOworCQkJbWF0Y2go
U1RSSU5HKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsK
KwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJy
b3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJ
ZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQor
CisJcHVibGljIHN0YXRpYyBjbGFzcyBQcm9iZW5haG1lX2RhdHVtX3VocnplaXRfYUNvbnRleHQg
ZXh0ZW5kcyBQYXJzZXJSdWxlQz0Kb250ZXh0IHsKKwkJcHVibGljIFRlcm1pbmFsTm9kZSBQUk9C
RU5BSE1FX0RBVFVNX1VIUlpFSVRfQSgpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhPQpyc2VyLlBS
T0JFTkFITUVfREFUVU1fVUhSWkVJVF9BLCAwKTsgfQorCQlwdWJsaWMgTGlzdDxUZXJtaW5hbE5v
ZGU+IFNUUklORygpIHsgcmV0dXJuIGdldFRva2VucyhMYWZQYXJzZXIuU1RSSU5HKTs9CiB9CisJ
CXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKGludCBpKSB7CisJCQlyZXR1cm4gZ2V0VG9rZW4o
TGFmUGFyc2VyLlNUUklORywgaSk7CisJCX0KKwkJcHVibGljIFByb2JlbmFobWVfZGF0dW1fdWhy
emVpdF9hQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpPQpudm9raW5nU3Rh
dGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRl
IHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9wcm9iZW5haG1lX2RhdHVt
X3VocnplPQppdF9hOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFy
c2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBM
YWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyUHJvPQpiZW5haG1lX2Rh
dHVtX3VocnplaXRfYSh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhp
dFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5z
dGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRQcm9iPQpl
bmFobWVfZGF0dW1fdWhyemVpdF9hKHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFBy
b2JlbmFobWVfZGF0dW1fdWhyemVpdF9hQ29udGV4dCBwcm9iZW5haG1lX2RhdHVtX3VocnplaXRf
YT0KKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJUHJvYmVuYWhtZV9kYXR1bV91
aHJ6ZWl0X2FDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFByb2JlbmFobWVfZGF0dW1fdWhyPQp6
ZWl0X2FDb250ZXh0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAx
MDgsIFJVTEVfcHJvYmVuYWhtZV9kYXR1bV91aHJ6ZWl0X2EpOworCQlpbnQgX2xhOworCQl0cnkg
eworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJc2V0U3RhdGUoNTEz
KTsKKwkJCW1hdGNoKFBST0JFTkFITUVfREFUVU1fVUhSWkVJVF9BKTsKKwkJCXNldFN0YXRlKDUx
NCk7CisJCQltYXRjaChTVFJJTkcpOworCQkJc2V0U3RhdGUoNTE4KTsKKwkJCV9lcnJIYW5kbGVy
LnN5bmModGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCXdoaWxlIChfbGE9M0Q9
M0RUX180KSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRTdGF0ZSg1MTUpOworCQkJCW1hdGNoKFRf
XzQpOworCQkJCX0KKwkJCQl9CisJCQkJc2V0U3RhdGUoNTIwKTsKKwkJCQlfZXJySGFuZGxlci5z
eW5jKHRoaXMpOworCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJfQorCQkJc2V0U3RhdGUo
NTIxKTsKKwkJCW1hdGNoKFNUUklORyk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9u
RXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJI
YW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhp
cywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4g
X2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUHJvYmVuYWhtZV9kYXR1bV91
aHJ6ZWl0X2VDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUM9Cm9udGV4dCB7CisJCXB1YmxpYyBU
ZXJtaW5hbE5vZGUgUFJPQkVOQUhNRV9EQVRVTV9VSFJaRUlUX0UoKSB7IHJldHVybiBnZXRUb2tl
bihMYWZQYT0KcnNlci5QUk9CRU5BSE1FX0RBVFVNX1VIUlpFSVRfRSwgMCk7IH0KKwkJcHVibGlj
IExpc3Q8VGVybWluYWxOb2RlPiBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbnMoTGFmUGFyc2Vy
LlNUUklORyk7PQogfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORyhpbnQgaSkgeworCQkJ
cmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkcsIGkpOworCQl9CisJCXB1YmxpYyBQcm9i
ZW5haG1lX2RhdHVtX3VocnplaXRfZUNvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBp
bnQgaT0KbnZva2luZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOwor
CQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVf
cHJvYmVuYWhtZV9kYXR1bV91aHJ6ZT0KaXRfZTsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZv
aWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3Rl
bmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRl
clBybz0KYmVuYWhtZV9kYXR1bV91aHJ6ZWl0X2UodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJ
CXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlp
ZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3Rl
bmVyKS5leGl0UHJvYj0KZW5haG1lX2RhdHVtX3VocnplaXRfZSh0aGlzKTsKKwkJfQorCX0KKwor
CXB1YmxpYyBmaW5hbCBQcm9iZW5haG1lX2RhdHVtX3VocnplaXRfZUNvbnRleHQgcHJvYmVuYWht
ZV9kYXR1bV91aHJ6ZWl0X2U9CigpIHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7CisJCVBy
b2JlbmFobWVfZGF0dW1fdWhyemVpdF9lQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBQcm9iZW5h
aG1lX2RhdHVtX3Vocj0KemVpdF9lQ29udGV4dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJS
dWxlKF9sb2NhbGN0eCwgMTEwLCBSVUxFX3Byb2JlbmFobWVfZGF0dW1fdWhyemVpdF9lKTsKKwkJ
aW50IF9sYTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsK
KwkJCXNldFN0YXRlKDUyMyk7CisJCQltYXRjaChQUk9CRU5BSE1FX0RBVFVNX1VIUlpFSVRfRSk7
CisJCQlzZXRTdGF0ZSg1MjQpOworCQkJbWF0Y2goU1RSSU5HKTsKKwkJCXNldFN0YXRlKDUyOCk7
CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJ
CQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCXsKKwkJCQl7CisJCQkJc2V0U3RhdGUoNTI1
KTsKKwkJCQltYXRjaChUX180KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDUzMCk7CisJ
CQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJ
CX0KKwkJCXNldFN0YXRlKDUzMSk7CisJCQltYXRjaChTVFJJTkcpOworCQkJfQorCQl9CisJCWNh
dGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9
M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFu
ZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7
CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFVt
d2VsdGJlcmVpY2hfY0NvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1Ymxp
YyBUZXJtaW5hbE5vZGUgVU1XRUxUQkVSRUlDSF9DKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFy
c2VyLlVNV0VMVD0KQkVSRUlDSF9DLCAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklO
R19FU0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VTQyw9CiAwKTsgfQor
CQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNl
ci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBVbXdlbHRiZXJlaWNoX2NDb250ZXh0KFBhcnNlclJ1
bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdD0KZSkgeworCQkJc3VwZXIocGFyZW50
LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5k
ZXgoKSB7IHJldHVybiBSVUxFX3Vtd2VsdGJlcmVpY2hfYzsgfQorCQlAT3ZlcnJpZGUKKwkJcHVi
bGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAo
IGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVy
KS5lbnRlclVtdz0KZWx0YmVyZWljaF9jKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJs
aWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBs
aXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lciku
ZXhpdFVtd2U9Cmx0YmVyZWljaF9jKHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFVt
d2VsdGJlcmVpY2hfY0NvbnRleHQgdW13ZWx0YmVyZWljaF9jKCkgdGhyb3dzIFJlY29nbml0aW9u
RT0KeGNlcHRpb24geworCQlVbXdlbHRiZXJlaWNoX2NDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3
IFVtd2VsdGJlcmVpY2hfY0NvbnRleHQoX2N0eCwgZ2U9CnRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxl
KF9sb2NhbGN0eCwgMTEyLCBSVUxFX3Vtd2VsdGJlcmVpY2hfYyk7CisJCWludCBfbGE7CisJCXRy
eSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg1
MzMpOworCQkJbWF0Y2goVU1XRUxUQkVSRUlDSF9DKTsKKwkJCXNldFN0YXRlKDUzNCk7CisJCQlf
bGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9s
YT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOwor
CQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJl
Y29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsK
KwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJl
Y292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQor
CQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgVW13ZWx0YmVy
ZWljaF9zQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGljIFRlcm1p
bmFsTm9kZSBVTVdFTFRCRVJFSUNIX1MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuVU1X
RUxUPQpCRVJFSUNIX1MsIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HX0VTQygp
IHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkdfRVNDLD0KIDApOyB9CisJCXB1Ymxp
YyBUZXJtaW5hbE5vZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklO
RywgMCk7IH0KKwkJcHVibGljIFVtd2VsdGJlcmVpY2hfc0NvbnRleHQoUGFyc2VyUnVsZUNvbnRl
eHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0PQplKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9r
aW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsg
cmV0dXJuIFJVTEVfdW13ZWx0YmVyZWljaF9zOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9p
ZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVu
ZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVy
VW13PQplbHRiZXJlaWNoX3ModGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lk
IGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVy
IGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0VW13
ZT0KbHRiZXJlaWNoX3ModGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgVW13ZWx0YmVy
ZWljaF9zQ29udGV4dCB1bXdlbHRiZXJlaWNoX3MoKSB0aHJvd3MgUmVjb2duaXRpb25FPQp4Y2Vw
dGlvbiB7CisJCVVtd2VsdGJlcmVpY2hfc0NvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgVW13ZWx0
YmVyZWljaF9zQ29udGV4dChfY3R4LCBnZT0KdFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2Fs
Y3R4LCAxMTQsIFJVTEVfdW13ZWx0YmVyZWljaF9zKTsKKwkJaW50IF9sYTsKKwkJdHJ5IHsKKwkJ
CWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDUzNik7CisJ
CQltYXRjaChVTVdFTFRCRVJFSUNIX1MpOworCQkJc2V0U3RhdGUoNTM3KTsKKwkJCV9sYSA9M0Qg
X2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNE
U1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVs
c2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRp
b25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2Vy
ckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0
aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVy
biBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBEZXNrcmlwdG9yZW5Db250
ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWluYWxOb2RlIERF
U0tSSVBUT1JFTigpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5ERVNLUklQVE89ClJFTiwg
MCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9r
ZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsPQogMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBT
VFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJs
aWMgRGVza3JpcHRvcmVuQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZv
a2luZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBP
dmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfZGVza3JpcHRv
cmVuOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlz
dGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5l
ciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyRGVzPQprcmlwdG9yZW4odGhpcyk7CisJ
CX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVy
IGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAo
KExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0RGVzaz0KcmlwdG9yZW4odGhpcyk7CisJCX0KKwl9
CisKKwlwdWJsaWMgZmluYWwgRGVza3JpcHRvcmVuQ29udGV4dCBkZXNrcmlwdG9yZW4oKSB0aHJv
d3MgUmVjb2duaXRpb25FeGNlcHRpPQpvbiB7CisJCURlc2tyaXB0b3JlbkNvbnRleHQgX2xvY2Fs
Y3R4ID0zRCBuZXcgRGVza3JpcHRvcmVuQ29udGV4dChfY3R4LCBnZXRTdGF0ZT0KKCkpOworCQll
bnRlclJ1bGUoX2xvY2FsY3R4LCAxMTYsIFJVTEVfZGVza3JpcHRvcmVuKTsKKwkJaW50IF9sYTsK
KwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0
YXRlKDUzOSk7CisJCQltYXRjaChERVNLUklQVE9SRU4pOworCQkJc2V0U3RhdGUoNTQwKTsKKwkJ
CV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwg
X2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7
CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAo
UmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJl
OworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIu
cmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9
CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBSZWlfcHJv
Z3JhbW1wdW5rdENvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBU
ZXJtaW5hbE5vZGUgUkVJX1BST0dSQU1NUFVOS1QoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJz
ZXIuUkVJXz0KUFJPR1JBTU1QVU5LVCwgMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJ
TkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsPQogMCk7IH0K
KwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJz
ZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgUmVpX3Byb2dyYW1tcHVua3RDb250ZXh0KFBhcnNl
clJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3Q9CmF0ZSkgeworCQkJc3VwZXIocGFy
ZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxl
SW5kZXgoKSB7IHJldHVybiBSVUxFX3JlaV9wcm9ncmFtbXB1bmt0OyB9CisJCUBPdmVycmlkZQor
CQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJ
CWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlz
dGVuZXIpLmVudGVyUmVpPQpfcHJvZ3JhbW1wdW5rdCh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUK
KwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJ
CWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlz
dGVuZXIpLmV4aXRSZWlfPQpwcm9ncmFtbXB1bmt0KHRoaXMpOworCQl9CisJfQorCisJcHVibGlj
IGZpbmFsIFJlaV9wcm9ncmFtbXB1bmt0Q29udGV4dCByZWlfcHJvZ3JhbW1wdW5rdCgpIHRocm93
cyBSZWNvZ25pdD0KaW9uRXhjZXB0aW9uIHsKKwkJUmVpX3Byb2dyYW1tcHVua3RDb250ZXh0IF9s
b2NhbGN0eCA9M0QgbmV3IFJlaV9wcm9ncmFtbXB1bmt0Q29udGV4dChfY3R4PQosIGdldFN0YXRl
KCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAxMTgsIFJVTEVfcmVpX3Byb2dyYW1tcHVua3Qp
OworCQlpbnQgX2xhOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOwor
CQkJeworCQkJc2V0U3RhdGUoNTQyKTsKKwkJCW1hdGNoKFJFSV9QUk9HUkFNTVBVTktUKTsKKwkJ
CXNldFN0YXRlKDU0Myk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9
M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5y
ZWNvdmVySW5saW5lKHRoaXMpOworCQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJ
CQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxj
dHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJl
KTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgewor
CQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBz
dGF0aWMgY2xhc3MgUmVpX3Byb2dyYW1tcHVua3RncnVwcGVDb250ZXh0IGV4dGVuZHMgUGFyc2Vy
UnVsZUNvbnQ9CmV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgUkVJX1BST0dSQU1NUFVOS1RH
UlVQUEUoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZT0Kci5SRUlfUFJPR1JBTU1QVU5LVEdS
VVBQRSwgMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkdfRVNDKCkgeyByZXR1cm4g
Z2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsPQogMCk7IH0KKwkJcHVibGljIFRlcm1pbmFs
Tm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQor
CQlwdWJsaWMgUmVpX3Byb2dyYW1tcHVua3RncnVwcGVDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0
IHBhcmVudCwgaW50IGludm89CmtpbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2lu
Z1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJl
dHVybiBSVUxFX3JlaV9wcm9ncmFtbXB1bmt0Z3J1cHA9CmU7IH0KKwkJQE92ZXJyaWRlCisJCXB1
YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYg
KCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5l
cikuZW50ZXJSZWk9Cl9wcm9ncmFtbXB1bmt0Z3J1cHBlKHRoaXMpOworCQl9CisJCUBPdmVycmlk
ZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgewor
CQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcils
aXN0ZW5lcikuZXhpdFJlaV89CnByb2dyYW1tcHVua3RncnVwcGUodGhpcyk7CisJCX0KKwl9CisK
KwlwdWJsaWMgZmluYWwgUmVpX3Byb2dyYW1tcHVua3RncnVwcGVDb250ZXh0IHJlaV9wcm9ncmFt
bXB1bmt0Z3J1cHBlKCkgdGhyPQpvd3MgUmVjb2duaXRpb25FeGNlcHRpb24geworCQlSZWlfcHJv
Z3JhbW1wdW5rdGdydXBwZUNvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgUmVpX3Byb2dyYW1tcHVu
a3RncnVwcGU9CkNvbnRleHQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxj
dHgsIDEyMCwgUlVMRV9yZWlfcHJvZ3JhbW1wdW5rdGdydXBwZSk7CisJCWludCBfbGE7CisJCXRy
eSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg1
NDUpOworCQkJbWF0Y2goUkVJX1BST0dSQU1NUFVOS1RHUlVQUEUpOworCQkJc2V0U3RhdGUoNTQ2
KTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19F
U0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUo
dGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQlj
YXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24g
PTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2Vyckhh
bmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgp
OworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBS
ZWZlcmVuel9kYXR1bV91aHJ6ZWl0Q29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZT0KeHQg
eworCQlwdWJsaWMgVGVybWluYWxOb2RlIFJFRkVSRU5aX0RBVFVNX1VIUlpFSVQoKSB7IHJldHVy
biBnZXRUb2tlbihMYWZQYXJzZXI9Ci5SRUZFUkVOWl9EQVRVTV9VSFJaRUlULCAwKTsgfQorCQlw
dWJsaWMgTGlzdDxUZXJtaW5hbE5vZGU+IFNUUklORygpIHsgcmV0dXJuIGdldFRva2VucyhMYWZQ
YXJzZXIuU1RSSU5HKTs9CiB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKGludCBpKSB7
CisJCQlyZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgaSk7CisJCX0KKwkJcHVibGlj
IFJlZmVyZW56X2RhdHVtX3VocnplaXRDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwg
aW50IGludm9rPQppbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsK
KwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxF
X3JlZmVyZW56X2RhdHVtX3VocnplaXQ9CjsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQg
ZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVy
IGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclJl
Zj0KZXJlbnpfZGF0dW1fdWhyemVpdCh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGlj
IHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlz
dGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4
aXRSZWZlPQpyZW56X2RhdHVtX3VocnplaXQodGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmlu
YWwgUmVmZXJlbnpfZGF0dW1fdWhyemVpdENvbnRleHQgcmVmZXJlbnpfZGF0dW1fdWhyemVpdCgp
IHRocm93PQpzIFJlY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJUmVmZXJlbnpfZGF0dW1fdWhyemVp
dENvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgUmVmZXJlbnpfZGF0dW1fdWhyemVpdENvPQpudGV4
dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTIyLCBSVUxFX3Jl
ZmVyZW56X2RhdHVtX3VocnplaXQpOworCQlpbnQgX2xhOworCQl0cnkgeworCQkJZW50ZXJPdXRl
ckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJc2V0U3RhdGUoNTQ4KTsKKwkJCW1hdGNoKFJF
RkVSRU5aX0RBVFVNX1VIUlpFSVQpOworCQkJc2V0U3RhdGUoNTQ5KTsKKwkJCW1hdGNoKFNUUklO
Ryk7CisJCQlzZXRTdGF0ZSg1NTMpOworCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCV9s
YSA9M0QgX2lucHV0LkxBKDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQl7CisJ
CQkJeworCQkJCXNldFN0YXRlKDU1MCk7CisJCQkJbWF0Y2goVF9fNCk7CisJCQkJfQorCQkJCX0K
KwkJCQlzZXRTdGF0ZSg1NTUpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xh
ID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSg1NTYpOworCQkJbWF0Y2goU1RS
SU5HKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJ
CV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3Io
dGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmlu
YWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJ
cHVibGljIHN0YXRpYyBjbGFzcyBUZXN0ZGF0ZW5Db250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNv
bnRleHQgeworCQlwdWJsaWMgVGVybWluYWxOb2RlIFRFU1REQVRFTigpIHsgcmV0dXJuIGdldFRv
a2VuKExhZlBhcnNlci5URVNUREFURU4sIDA9Cik7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBT
VFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJs
aWMgVGVzdGRhdGVuQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2lu
Z1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVy
cmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfdGVzdGRhdGVuOyB9
CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIg
bGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgo
TGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyVGVzPQp0ZGF0ZW4odGhpcyk7CisJCX0KKwkJQE92
ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVy
KSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3Rl
bmVyKWxpc3RlbmVyKS5leGl0VGVzdD0KZGF0ZW4odGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMg
ZmluYWwgVGVzdGRhdGVuQ29udGV4dCB0ZXN0ZGF0ZW4oKSB0aHJvd3MgUmVjb2duaXRpb25FeGNl
cHRpb24geworCQlUZXN0ZGF0ZW5Db250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFRlc3RkYXRlbkNv
bnRleHQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDEyNCwgUlVM
RV90ZXN0ZGF0ZW4pOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOwor
CQkJeworCQkJc2V0U3RhdGUoNTU4KTsKKwkJCW1hdGNoKFRFU1REQVRFTik7CisJCQlzZXRTdGF0
ZSg1NTkpOworCQkJbWF0Y2goU1RSSU5HKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRp
b25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2Vy
ckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0
aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVy
biBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBTemVuYXJpb0NvbnRleHQg
ZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1pFTkFS
SU8oKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1pFTkFSSU8sIDApOz0KIH0KKwkJcHVi
bGljIFRlcm1pbmFsTm9kZSBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2Vy
LlNUUklOR19FU0MsPQogMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJl
dHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgU3plbmFyaW9D
b250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJ
CXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBp
bnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9zemVuYXJpbzsgfQorCQlAT3ZlcnJpZGUK
KwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJ
CQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxp
c3RlbmVyKS5lbnRlclN6ZT0KbmFyaW8odGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1Ymxp
YyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxp
c3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5l
eGl0U3plbj0KYXJpbyh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBTemVuYXJpb0Nv
bnRleHQgc3plbmFyaW8oKSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb24geworCQlTemVuYXJp
b0NvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgU3plbmFyaW9Db250ZXh0KF9jdHgsIGdldFN0YXRl
KCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAxMjYsIFJVTEVfc3plbmFyaW8pOworCQlpbnQg
X2xhOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJ
c2V0U3RhdGUoNTYxKTsKKwkJCW1hdGNoKFNaRU5BUklPKTsKKwkJCXNldFN0YXRlKDU2Mik7CisJ
CQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8
IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMp
OworCQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2gg
KFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCBy
ZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVy
LnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJ
fQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgU2VrX2Rh
dGVuYmFzaXNDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVy
bWluYWxOb2RlIFNFS19EQVRFTkJBU0lTKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNF
S19EQVQ9CkVOQkFTSVMsIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HX0VTQygp
IHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkdfRVNDLD0KIDApOyB9CisJCXB1Ymxp
YyBUZXJtaW5hbE5vZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklO
RywgMCk7IH0KKwkJcHVibGljIFNla19kYXRlbmJhc2lzQ29udGV4dChQYXJzZXJSdWxlQ29udGV4
dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlPQopIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tp
bmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyBy
ZXR1cm4gUlVMRV9zZWtfZGF0ZW5iYXNpczsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQg
ZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVy
IGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclNl
az0KX2RhdGVuYmFzaXModGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4
aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGlu
c3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0U2VrXz0K
ZGF0ZW5iYXNpcyh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBTZWtfZGF0ZW5iYXNp
c0NvbnRleHQgc2VrX2RhdGVuYmFzaXMoKSB0aHJvd3MgUmVjb2duaXRpb25FeGM9CmVwdGlvbiB7
CisJCVNla19kYXRlbmJhc2lzQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBTZWtfZGF0ZW5iYXNp
c0NvbnRleHQoX2N0eCwgZ2V0Uz0KdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTI4
LCBSVUxFX3Nla19kYXRlbmJhc2lzKTsKKwkJaW50IF9sYTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0
ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDU2NCk7CisJCQltYXRjaChT
RUtfREFURU5CQVNJUyk7CisJCQlzZXRTdGF0ZSg1NjUpOworCQkJX2xhID0zRCBfaW5wdXQuTEEo
MSk7CisJCQlpZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkg
eworCQkJX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJ
Y29uc3VtZSgpOworCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlv
biByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5y
ZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsK
KwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0
eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFNla19kYXRlbmJhc2lzX3NDb250ZXh0IGV4
dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWluYWxOb2RlIFNFS19EQVRF
TkJBU0lTX1MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU0VLX0Q9CkFURU5CQVNJU19T
LCAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRva2Vu
KExhZlBhcnNlci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBTZWtfZGF0ZW5iYXNpc19zQ29udGV4
dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YT0KdGUpIHsKKwkJCXN1
cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQg
Z2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9zZWtfZGF0ZW5iYXNpc19zOyB9CisJCUBPdmVy
cmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIp
IHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVu
ZXIpbGlzdGVuZXIpLmVudGVyU2VrPQpfZGF0ZW5iYXNpc19zKHRoaXMpOworCQl9CisJCUBPdmVy
cmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikg
eworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5l
cilsaXN0ZW5lcikuZXhpdFNla189CmRhdGVuYmFzaXNfcyh0aGlzKTsKKwkJfQorCX0KKworCXB1
YmxpYyBmaW5hbCBTZWtfZGF0ZW5iYXNpc19zQ29udGV4dCBzZWtfZGF0ZW5iYXNpc19zKCkgdGhy
b3dzIFJlY29nbml0aW89Cm5FeGNlcHRpb24geworCQlTZWtfZGF0ZW5iYXNpc19zQ29udGV4dCBf
bG9jYWxjdHggPTNEIG5ldyBTZWtfZGF0ZW5iYXNpc19zQ29udGV4dChfY3R4LCA9CmdldFN0YXRl
KCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAxMzAsIFJVTEVfc2VrX2RhdGVuYmFzaXNfcyk7
CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRT
dGF0ZSg1NjcpOworCQkJbWF0Y2goU0VLX0RBVEVOQkFTSVNfUyk7CisJCQlzZXRTdGF0ZSg1Njgp
OworCQkJbWF0Y2goU1RSSU5HKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNl
cHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRs
ZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCBy
ZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9j
YWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBVX2hlcmt1bmZ0c2xhbmRfbGFuZ0Nv
bnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dD0KIHsKKwkJcHVibGljIFRlcm1pbmFsTm9k
ZSBVX0hFUktVTkZUU0xBTkRfTEFORygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5VPQpf
SEVSS1VORlRTTEFORF9MQU5HLCAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklOR19F
U0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VTQyw9CiAwKTsgfQorCQlw
dWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5T
VFJJTkcsIDApOyB9CisJCXB1YmxpYyBVX2hlcmt1bmZ0c2xhbmRfbGFuZ0NvbnRleHQoUGFyc2Vy
UnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbj0KZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJl
bnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJ
bmRleCgpIHsgcmV0dXJuIFJVTEVfdV9oZXJrdW5mdHNsYW5kX2xhbmc7IH0KKwkJQE92ZXJyaWRl
CisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgewor
CQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcils
aXN0ZW5lcikuZW50ZXJVX2g9CmVya3VuZnRzbGFuZF9sYW5nKHRoaXMpOworCQl9CisJCUBPdmVy
cmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikg
eworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5l
cilsaXN0ZW5lcikuZXhpdFVfaGU9CnJrdW5mdHNsYW5kX2xhbmcodGhpcyk7CisJCX0KKwl9CisK
KwlwdWJsaWMgZmluYWwgVV9oZXJrdW5mdHNsYW5kX2xhbmdDb250ZXh0IHVfaGVya3VuZnRzbGFu
ZF9sYW5nKCkgdGhyb3dzIFJlPQpjb2duaXRpb25FeGNlcHRpb24geworCQlVX2hlcmt1bmZ0c2xh
bmRfbGFuZ0NvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgVV9oZXJrdW5mdHNsYW5kX2xhbmdDb250
ZXg9CnQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDEzMiwgUlVM
RV91X2hlcmt1bmZ0c2xhbmRfbGFuZyk7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91
dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg1NzApOworCQkJbWF0Y2go
VV9IRVJLVU5GVFNMQU5EX0xBTkcpOworCQkJc2V0U3RhdGUoNTcxKTsKKwkJCV9sYSA9M0QgX2lu
cHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RS
SU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2Ug
eworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25F
eGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2Vyckhh
bmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlz
LCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBf
bG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBVX2hlcmt1bmZ0c2xhbmRfa3Vy
ekNvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dD0KIHsKKwkJcHVibGljIFRlcm1pbmFs
Tm9kZSBVX0hFUktVTkZUU0xBTkRfS1VSWigpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5V
PQpfSEVSS1VORlRTTEFORF9LVVJaLCAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklO
R19FU0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VTQyw9CiAwKTsgfQor
CQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNl
ci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBVX2hlcmt1bmZ0c2xhbmRfa3VyekNvbnRleHQoUGFy
c2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbj0KZ1N0YXRlKSB7CisJCQlzdXBlcihw
YXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1
bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfdV9oZXJrdW5mdHNsYW5kX2t1cno7IH0KKwkJQE92ZXJy
aWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikg
eworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5l
cilsaXN0ZW5lcikuZW50ZXJVX2g9CmVya3VuZnRzbGFuZF9rdXJ6KHRoaXMpOworCQl9CisJCUBP
dmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5l
cikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0
ZW5lcilsaXN0ZW5lcikuZXhpdFVfaGU9CnJrdW5mdHNsYW5kX2t1cnoodGhpcyk7CisJCX0KKwl9
CisKKwlwdWJsaWMgZmluYWwgVV9oZXJrdW5mdHNsYW5kX2t1cnpDb250ZXh0IHVfaGVya3VuZnRz
bGFuZF9rdXJ6KCkgdGhyb3dzIFJlPQpjb2duaXRpb25FeGNlcHRpb24geworCQlVX2hlcmt1bmZ0
c2xhbmRfa3VyekNvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgVV9oZXJrdW5mdHNsYW5kX2t1cnpD
b250ZXg9CnQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDEzNCwg
UlVMRV91X2hlcmt1bmZ0c2xhbmRfa3Vyeik7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRl
ck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg1NzMpOworCQkJbWF0
Y2goVV9IRVJLVU5GVFNMQU5EX0tVUlopOworCQkJc2V0U3RhdGUoNTc0KTsKKwkJCV9sYSA9M0Qg
X2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNE
U1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVs
c2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRp
b25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2Vy
ckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0
aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVy
biBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBVX2hlcmt1bmZ0c2xhbmRf
c0NvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5v
ZGUgVV9IRVJLVU5GVFNMQU5EX1MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuVV9IRT0K
UktVTkZUU0xBTkRfUywgMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJl
dHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgVV9oZXJrdW5m
dHNsYW5kX3NDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3Q9
CmF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJp
ZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3VfaGVya3VuZnRzbGFu
ZF9zOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlz
dGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5l
ciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyVV9oPQplcmt1bmZ0c2xhbmRfcyh0aGlz
KTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlz
dGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5l
ciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRVX2hlPQpya3VuZnRzbGFuZF9zKHRoaXMp
OworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFVfaGVya3VuZnRzbGFuZF9zQ29udGV4dCB1X2hl
cmt1bmZ0c2xhbmRfcygpIHRocm93cyBSZWNvZ25pdD0KaW9uRXhjZXB0aW9uIHsKKwkJVV9oZXJr
dW5mdHNsYW5kX3NDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFVfaGVya3VuZnRzbGFuZF9zQ29u
dGV4dChfY3R4PQosIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAxMzYsIFJV
TEVfdV9oZXJrdW5mdHNsYW5kX3MpOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxj
dHgsIDEpOworCQkJeworCQkJc2V0U3RhdGUoNTc2KTsKKwkJCW1hdGNoKFVfSEVSS1VORlRTTEFO
RF9TKTsKKwkJCXNldFN0YXRlKDU3Nyk7CisJCQltYXRjaChTVFJJTkcpOworCQkJfQorCQl9CisJ
CWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlv
biA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJy
SGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxl
KCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNz
IFVfZ2VtZWluZGVzY2hsdWVzc2VsQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0PQog
eworCQlwdWJsaWMgVGVybWluYWxOb2RlIFVfR0VNRUlOREVTQ0hMVUVTU0VMKCkgeyByZXR1cm4g
Z2V0VG9rZW4oTGFmUGFyc2VyLlU9Cl9HRU1FSU5ERVNDSExVRVNTRUwsIDApOyB9CisJCXB1Ymxp
YyBUZXJtaW5hbE5vZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklO
RywgMCk7IH0KKwkJcHVibGljIFVfZ2VtZWluZGVzY2hsdWVzc2VsQ29udGV4dChQYXJzZXJSdWxl
Q29udGV4dCBwYXJlbnQsIGludCBpbnZva2luPQpnU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwg
aW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4
KCkgeyByZXR1cm4gUlVMRV91X2dlbWVpbmRlc2NobHVlc3NlbDsgfQorCQlAT3ZlcnJpZGUKKwkJ
cHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlp
ZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3Rl
bmVyKS5lbnRlclVfZz0KZW1laW5kZXNjaGx1ZXNzZWwodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRl
CisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJ
CQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxp
c3RlbmVyKS5leGl0VV9nZT0KbWVpbmRlc2NobHVlc3NlbCh0aGlzKTsKKwkJfQorCX0KKworCXB1
YmxpYyBmaW5hbCBVX2dlbWVpbmRlc2NobHVlc3NlbENvbnRleHQgdV9nZW1laW5kZXNjaGx1ZXNz
ZWwoKSB0aHJvd3MgUmU9CmNvZ25pdGlvbkV4Y2VwdGlvbiB7CisJCVVfZ2VtZWluZGVzY2hsdWVz
c2VsQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBVX2dlbWVpbmRlc2NobHVlc3NlbENvbnRleD0K
dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTM4LCBSVUxFX3Vf
Z2VtZWluZGVzY2hsdWVzc2VsKTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4
LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDU3OSk7CisJCQltYXRjaChVX0dFTUVJTkRFU0NITFVF
U1NFTCk7CisJCQlzZXRTdGF0ZSg1ODApOworCQkJbWF0Y2goU1RSSU5HKTsKKwkJCX0KKwkJfQor
CQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRp
b24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2Vy
ckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVs
ZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFz
cyBVX2dlbWVpbmRlbmFtZUNvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1
YmxpYyBUZXJtaW5hbE5vZGUgVV9HRU1FSU5ERU5BTUUoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQ
YXJzZXIuVV9HRU1FST0KTkRFTkFNRSwgMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJ
TkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsPQogMCk7IH0K
KwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJz
ZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgVV9nZW1laW5kZW5hbWVDb250ZXh0KFBhcnNlclJ1
bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGU9CikgeworCQkJc3VwZXIocGFyZW50
LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5k
ZXgoKSB7IHJldHVybiBSVUxFX3VfZ2VtZWluZGVuYW1lOyB9CisJCUBPdmVycmlkZQorCQlwdWJs
aWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICgg
bGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIp
LmVudGVyVV9nPQplbWVpbmRlbmFtZSh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGlj
IHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlz
dGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4
aXRVX2dlPQptZWluZGVuYW1lKHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFVfZ2Vt
ZWluZGVuYW1lQ29udGV4dCB1X2dlbWVpbmRlbmFtZSgpIHRocm93cyBSZWNvZ25pdGlvbkV4Yz0K
ZXB0aW9uIHsKKwkJVV9nZW1laW5kZW5hbWVDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFVfZ2Vt
ZWluZGVuYW1lQ29udGV4dChfY3R4LCBnZXRTPQp0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2Fs
Y3R4LCAxNDAsIFJVTEVfdV9nZW1laW5kZW5hbWUpOworCQlpbnQgX2xhOworCQl0cnkgeworCQkJ
ZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJc2V0U3RhdGUoNTgyKTsKKwkJ
CW1hdGNoKFVfR0VNRUlOREVOQU1FKTsKKwkJCXNldFN0YXRlKDU4Myk7CisJCQlfbGEgPTNEIF9p
bnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNU
UklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJfSBlbHNl
IHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9u
RXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJI
YW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhp
cywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4g
X2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgVV9vcnRzX3p1c2F0emtlbm56
YWhsQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXg9CnQgeworCQlwdWJsaWMgVGVybWlu
YWxOb2RlIFVfT1JUU19aVVNBVFpLRU5OWkFITCgpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNl
ci49ClVfT1JUU19aVVNBVFpLRU5OWkFITCwgMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBT
VFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJs
aWMgVV9vcnRzX3p1c2F0emtlbm56YWhsQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQs
IGludCBpbnZva2k9Cm5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7
CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVM
RV91X29ydHNfenVzYXR6a2VubnphaGw7PQogfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQg
ZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVy
IGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclVf
bz0KcnRzX3p1c2F0emtlbm56YWhsKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMg
dm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0
ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhp
dFVfb3I9CnRzX3p1c2F0emtlbm56YWhsKHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFs
IFVfb3J0c196dXNhdHprZW5uemFobENvbnRleHQgdV9vcnRzX3p1c2F0emtlbm56YWhsKCkgdGhy
b3dzID0KUmVjb2duaXRpb25FeGNlcHRpb24geworCQlVX29ydHNfenVzYXR6a2VubnphaGxDb250
ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFVfb3J0c196dXNhdHprZW5uemFobENvbnQ9CmV4dChfY3R4
LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTQyLCBSVUxFX3Vfb3J0c196
dXNhdHprZW5uemFobCk7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7
CisJCQl7CisJCQlzZXRTdGF0ZSg1ODUpOworCQkJbWF0Y2goVV9PUlRTX1pVU0FUWktFTk5aQUhM
KTsKKwkJCXNldFN0YXRlKDU4Nik7CisJCQltYXRjaChTVFJJTkcpOworCQkJfQorCQl9CisJCWNh
dGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9
M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFu
ZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7
CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFVf
a29vcmRpbmF0ZW5Db250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMg
VGVybWluYWxOb2RlIFVfS09PUkRJTkFURU4oKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIu
VV9LT09SREk9Ck5BVEVOLCAwKTsgfQorCQlwdWJsaWMgTGlzdDxUZXJtaW5hbE5vZGU+IFNUUklO
R19FU0MoKSB7IHJldHVybiBnZXRUb2tlbnMoTGFmUGFyc2VyLlNUUkk9Ck5HX0VTQyk7IH0KKwkJ
cHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkdfRVNDKGludCBpKSB7CisJCQlyZXR1cm4gZ2V0VG9r
ZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsIGkpOworCQl9CisJCXB1YmxpYyBMaXN0PFRlcm1pbmFs
Tm9kZT4gU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW5zKExhZlBhcnNlci5TVFJJTkcpOz0KIH0K
KwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoaW50IGkpIHsKKwkJCXJldHVybiBnZXRUb2tl
bihMYWZQYXJzZXIuU1RSSU5HLCBpKTsKKwkJfQorCQlwdWJsaWMgVV9rb29yZGluYXRlbkNvbnRl
eHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0ZSk9CiB7CisJCQlz
dXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50
IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfdV9rb29yZGluYXRlbjsgfQorCQlAT3ZlcnJp
ZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7
CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVy
KWxpc3RlbmVyKS5lbnRlclVfaz0Kb29yZGluYXRlbih0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUK
KwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJ
CWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlz
dGVuZXIpLmV4aXRVX2tvPQpvcmRpbmF0ZW4odGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmlu
YWwgVV9rb29yZGluYXRlbkNvbnRleHQgdV9rb29yZGluYXRlbigpIHRocm93cyBSZWNvZ25pdGlv
bkV4Y2VwPQp0aW9uIHsKKwkJVV9rb29yZGluYXRlbkNvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcg
VV9rb29yZGluYXRlbkNvbnRleHQoX2N0eCwgZ2V0U3RhPQp0ZSgpKTsKKwkJZW50ZXJSdWxlKF9s
b2NhbGN0eCwgMTQ0LCBSVUxFX3Vfa29vcmRpbmF0ZW4pOworCQlpbnQgX2xhOworCQl0cnkgewor
CQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJc2V0U3RhdGUoNTg4KTsK
KwkJCW1hdGNoKFVfS09PUkRJTkFURU4pOworCQkJc2V0U3RhdGUoNTg5KTsKKwkJCV9sYSA9M0Qg
X2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNE
U1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVs
c2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCXNldFN0YXRlKDU5Myk7CisJCQlfZXJySGFu
ZGxlci5zeW5jKHRoaXMpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl3aGlsZSAoX2xh
PTNEPTNEVF9fNCkgeworCQkJCXsKKwkJCQl7CisJCQkJc2V0U3RhdGUoNTkwKTsKKwkJCQltYXRj
aChUX180KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDU5NSk7CisJCQkJX2VyckhhbmRs
ZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCX0KKwkJCXNldFN0
YXRlKDU5Nik7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RT
VFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVy
SW5saW5lKHRoaXMpOworCQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQlzZXRT
dGF0ZSg2MDApOworCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCV9sYSA9M0QgX2lucHV0
LkxBKDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQl7CisJCQkJeworCQkJCXNl
dFN0YXRlKDU5Nyk7CisJCQkJbWF0Y2goVF9fNCk7CisJCQkJfQorCQkJCX0KKwkJCQlzZXRTdGF0
ZSg2MDIpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQu
TEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSg2MDMpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7
CisJCQlpZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkgewor
CQkJX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJY29u
c3VtZSgpOworCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiBy
ZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBv
cnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJ
fQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsK
Kwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFVfa29vcmRpbmF0ZW5fc0NvbnRleHQgZXh0ZW5k
cyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgVV9LT09SRElOQVRF
Tl9TKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlVfS09PUj0KRElOQVRFTl9TLCAwKTsg
fQorCQlwdWJsaWMgTGlzdDxUZXJtaW5hbE5vZGU+IFNUUklORygpIHsgcmV0dXJuIGdldFRva2Vu
cyhMYWZQYXJzZXIuU1RSSU5HKTs9CiB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKGlu
dCBpKSB7CisJCQlyZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgaSk7CisJCX0KKwkJ
cHVibGljIExpc3Q8VGVybWluYWxOb2RlPiBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW5z
KExhZlBhcnNlci5TVFJJPQpOR19FU0MpOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5H
X0VTQyhpbnQgaSkgeworCQkJcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkdfRVNDLCBp
KTsKKwkJfQorCQlwdWJsaWMgVV9rb29yZGluYXRlbl9zQ29udGV4dChQYXJzZXJSdWxlQ29udGV4
dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXQ9CmUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tp
bmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyBy
ZXR1cm4gUlVMRV91X2tvb3JkaW5hdGVuX3M7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lk
IGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5l
ciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJV
X2s9Cm9vcmRpbmF0ZW5fcyh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQg
ZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIg
aW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRVX2tv
PQpvcmRpbmF0ZW5fcyh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBVX2tvb3JkaW5h
dGVuX3NDb250ZXh0IHVfa29vcmRpbmF0ZW5fcygpIHRocm93cyBSZWNvZ25pdGlvbkU9CnhjZXB0
aW9uIHsKKwkJVV9rb29yZGluYXRlbl9zQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBVX2tvb3Jk
aW5hdGVuX3NDb250ZXh0KF9jdHgsIGdlPQp0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxj
dHgsIDE0NiwgUlVMRV91X2tvb3JkaW5hdGVuX3MpOworCQlpbnQgX2xhOworCQl0cnkgeworCQkJ
ZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJc2V0U3RhdGUoNjA1KTsKKwkJ
CW1hdGNoKFVfS09PUkRJTkFURU5fUyk7CisJCQlzZXRTdGF0ZSg2MDYpOworCQkJbWF0Y2goU1RS
SU5HKTsKKwkJCXNldFN0YXRlKDYxMCk7CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJ
X2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCXsK
KwkJCQl7CisJCQkJc2V0U3RhdGUoNjA3KTsKKwkJCQltYXRjaChUX180KTsKKwkJCQl9CisJCQkJ
fQorCQkJCXNldFN0YXRlKDYxMik7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlf
bGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCX0KKwkJCXNldFN0YXRlKDYxMyk7CisJCQlfbGEgPTNE
IF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0z
RFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJfSBl
bHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQlzZXRTdGF0ZSg2MTcpOworCQkJX2Vyckhh
bmRsZXIuc3luYyh0aGlzKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJd2hpbGUgKF9s
YT0zRD0zRFRfXzQpIHsKKwkJCQl7CisJCQkJeworCQkJCXNldFN0YXRlKDYxNCk7CisJCQkJbWF0
Y2goVF9fNCk7CisJCQkJfQorCQkJCX0KKwkJCQlzZXRTdGF0ZSg2MTkpOworCQkJCV9lcnJIYW5k
bGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRT
dGF0ZSg2MjApOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xhPTNEPTNE
U1RSSU5HX0VTQyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIucmVjb3Zl
cklubGluZSh0aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQorCQkJfQor
CQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4
Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJ
CQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4
aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGlj
IGNsYXNzIFVfb3J0c196dXNhdHpjb2RlQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0
IHsKKwkJcHVibGljIFRlcm1pbmFsTm9kZSBVX09SVFNfWlVTQVRaQ09ERSgpIHsgcmV0dXJuIGdl
dFRva2VuKExhZlBhcnNlci5VX09SPQpUU19aVVNBVFpDT0RFLCAwKTsgfQorCQlwdWJsaWMgVGVy
bWluYWxOb2RlIFNUUklOR19FU0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5H
X0VTQyw9CiAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdl
dFRva2VuKExhZlBhcnNlci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBVX29ydHNfenVzYXR6Y29k
ZUNvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdD0KYXRlKSB7
CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJs
aWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfdV9vcnRzX3p1c2F0emNvZGU7IH0K
KwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBs
aXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChM
YWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJVX289CnJ0c196dXNhdHpjb2RlKHRoaXMpOworCQl9
CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBs
aXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChM
YWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdFVfb3I9CnRzX3p1c2F0emNvZGUodGhpcyk7CisJCX0K
Kwl9CisKKwlwdWJsaWMgZmluYWwgVV9vcnRzX3p1c2F0emNvZGVDb250ZXh0IHVfb3J0c196dXNh
dHpjb2RlKCkgdGhyb3dzIFJlY29nbml0PQppb25FeGNlcHRpb24geworCQlVX29ydHNfenVzYXR6
Y29kZUNvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgVV9vcnRzX3p1c2F0emNvZGVDb250ZXh0KF9j
dHg9CiwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDE0OCwgUlVMRV91X29y
dHNfenVzYXR6Y29kZSk7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9s
b2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg2MjIpOworCQkJbWF0Y2goVV9PUlRTX1pV
U0FUWkNPREUpOworCQkJc2V0U3RhdGUoNjIzKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOwor
CQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJ
CV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1
bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUp
IHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0
RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0K
KwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJ
fQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBVX29ydHNfenVzYXR6dGV4dENvbnRleHQgZXh0ZW5k
cyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgVV9PUlRTX1pVU0FU
WlRFWFQoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuVV9PUj0KVFNfWlVTQVRaVEVYVCwg
MCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9r
ZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsPQogMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBT
VFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJs
aWMgVV9vcnRzX3p1c2F0enRleHRDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50
IGludm9raW5nU3Q9CmF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJ
fQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3Vf
b3J0c196dXNhdHp0ZXh0OyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUo
UGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2Vv
ZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyVV9vPQpydHNfenVz
YXR6dGV4dCh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUo
UGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2Vv
ZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRVX29yPQp0c196dXNh
dHp0ZXh0KHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFVfb3J0c196dXNhdHp0ZXh0
Q29udGV4dCB1X29ydHNfenVzYXR6dGV4dCgpIHRocm93cyBSZWNvZ25pdD0KaW9uRXhjZXB0aW9u
IHsKKwkJVV9vcnRzX3p1c2F0enRleHRDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFVfb3J0c196
dXNhdHp0ZXh0Q29udGV4dChfY3R4PQosIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2Fs
Y3R4LCAxNTAsIFJVTEVfdV9vcnRzX3p1c2F0enRleHQpOworCQlpbnQgX2xhOworCQl0cnkgewor
CQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJc2V0U3RhdGUoNjI1KTsK
KwkJCW1hdGNoKFVfT1JUU19aVVNBVFpURVhUKTsKKwkJCXNldFN0YXRlKDYyNik7CisJCQlfbGEg
PTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0z
RD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJ
fSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29n
bml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJ
CV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292
ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQly
ZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgVV9udXRzX2NvZGVD
b250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWluYWxOb2Rl
IFVfTlVUU19DT0RFKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlVfTlVUU19DT0Q9CkUs
IDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4o
TGFmUGFyc2VyLlNUUklORywgMCk7IH0KKwkJcHVibGljIFVfbnV0c19jb2RlQ29udGV4dChQYXJz
ZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJl
bnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJ
bmRleCgpIHsgcmV0dXJuIFJVTEVfdV9udXRzX2NvZGU7IH0KKwkJQE92ZXJyaWRlCisJCXB1Ymxp
YyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBs
aXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lciku
ZW50ZXJVX249CnV0c19jb2RlKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9p
ZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5l
ciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdFVf
bnU9CnRzX2NvZGUodGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgVV9udXRzX2NvZGVD
b250ZXh0IHVfbnV0c19jb2RlKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uPQogeworCQlV
X251dHNfY29kZUNvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgVV9udXRzX2NvZGVDb250ZXh0KF9j
dHgsIGdldFN0YXRlKCk9Cik7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDE1MiwgUlVMRV91X251
dHNfY29kZSk7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7
CisJCQlzZXRTdGF0ZSg2MjgpOworCQkJbWF0Y2goVV9OVVRTX0NPREUpOworCQkJc2V0U3RhdGUo
NjI5KTsKKwkJCW1hdGNoKFNUUklORyk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9u
RXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJI
YW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhp
cywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4g
X2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUF9oZXJrdW5mdHNsYW5kX2xh
bmdDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQ9CiB7CisJCXB1YmxpYyBUZXJtaW5h
bE5vZGUgUF9IRVJLVU5GVFNMQU5EX0xBTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIu
UD0KX0hFUktVTkZUU0xBTkRfTEFORywgMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJ
TkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsPQogMCk7IH0K
KwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJz
ZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgUF9oZXJrdW5mdHNsYW5kX2xhbmdDb250ZXh0KFBh
cnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW49CmdTdGF0ZSkgeworCQkJc3VwZXIo
cGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRS
dWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3BfaGVya3VuZnRzbGFuZF9sYW5nOyB9CisJCUBPdmVy
cmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIp
IHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVu
ZXIpbGlzdGVuZXIpLmVudGVyUF9oPQplcmt1bmZ0c2xhbmRfbGFuZyh0aGlzKTsKKwkJfQorCQlA
T3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVu
ZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlz
dGVuZXIpbGlzdGVuZXIpLmV4aXRQX2hlPQpya3VuZnRzbGFuZF9sYW5nKHRoaXMpOworCQl9CisJ
fQorCisJcHVibGljIGZpbmFsIFBfaGVya3VuZnRzbGFuZF9sYW5nQ29udGV4dCBwX2hlcmt1bmZ0
c2xhbmRfbGFuZygpIHRocm93cyBSZT0KY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJUF9oZXJrdW5m
dHNsYW5kX2xhbmdDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFBfaGVya3VuZnRzbGFuZF9sYW5n
Q29udGV4PQp0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAxNTQs
IFJVTEVfcF9oZXJrdW5mdHNsYW5kX2xhbmcpOworCQlpbnQgX2xhOworCQl0cnkgeworCQkJZW50
ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJc2V0U3RhdGUoNjMxKTsKKwkJCW1h
dGNoKFBfSEVSS1VORlRTTEFORF9MQU5HKTsKKwkJCXNldFN0YXRlKDYzMik7CisJCQlfbGEgPTNE
IF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0z
RFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJfSBl
bHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0
aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9l
cnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIo
dGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1
cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUF9oZXJrdW5mdHNsYW5k
X2t1cnpDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQ9CiB7CisJCXB1YmxpYyBUZXJt
aW5hbE5vZGUgUF9IRVJLVU5GVFNMQU5EX0tVUlooKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJz
ZXIuUD0KX0hFUktVTkZUU0xBTkRfS1VSWiwgMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBT
VFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsPQogMCk7
IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQ
YXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgUF9oZXJrdW5mdHNsYW5kX2t1cnpDb250ZXh0
KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW49CmdTdGF0ZSkgeworCQkJc3Vw
ZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBn
ZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3BfaGVya3VuZnRzbGFuZF9rdXJ6OyB9CisJCUBP
dmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVu
ZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlz
dGVuZXIpbGlzdGVuZXIpLmVudGVyUF9oPQplcmt1bmZ0c2xhbmRfa3Vyeih0aGlzKTsKKwkJfQor
CQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlz
dGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFm
TGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRQX2hlPQpya3VuZnRzbGFuZF9rdXJ6KHRoaXMpOworCQl9
CisJfQorCisJcHVibGljIGZpbmFsIFBfaGVya3VuZnRzbGFuZF9rdXJ6Q29udGV4dCBwX2hlcmt1
bmZ0c2xhbmRfa3VyeigpIHRocm93cyBSZT0KY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJUF9oZXJr
dW5mdHNsYW5kX2t1cnpDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFBfaGVya3VuZnRzbGFuZF9r
dXJ6Q29udGV4PQp0KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAx
NTYsIFJVTEVfcF9oZXJrdW5mdHNsYW5kX2t1cnopOworCQlpbnQgX2xhOworCQl0cnkgeworCQkJ
ZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJc2V0U3RhdGUoNjM0KTsKKwkJ
CW1hdGNoKFBfSEVSS1VORlRTTEFORF9LVVJaKTsKKwkJCXNldFN0YXRlKDYzNSk7CisJCQlfbGEg
PTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0z
RD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJ
fSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29n
bml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJ
CV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292
ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQly
ZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUF9oZXJrdW5mdHNs
YW5kX3NDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWlu
YWxOb2RlIFBfSEVSS1VORlRTTEFORF9TKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlBf
SEU9ClJLVU5GVFNMQU5EX1MsIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKCkg
eyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgMCk7IH0KKwkJcHVibGljIFBfaGVy
a3VuZnRzbGFuZF9zQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2lu
Z1N0PQphdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92
ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9wX2hlcmt1bmZ0
c2xhbmRfczsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJl
ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlz
dGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclBfaD0KZXJrdW5mdHNsYW5kX3Mo
dGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJl
ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlz
dGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0UF9oZT0Kcmt1bmZ0c2xhbmRfcyh0
aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBQX2hlcmt1bmZ0c2xhbmRfc0NvbnRleHQg
cF9oZXJrdW5mdHNsYW5kX3MoKSB0aHJvd3MgUmVjb2duaXQ9CmlvbkV4Y2VwdGlvbiB7CisJCVBf
aGVya3VuZnRzbGFuZF9zQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBQX2hlcmt1bmZ0c2xhbmRf
c0NvbnRleHQoX2N0eD0KLCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTU4
LCBSVUxFX3BfaGVya3VuZnRzbGFuZF9zKTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xv
Y2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDYzNyk7CisJCQltYXRjaChQX0hFUktVTkZU
U0xBTkRfUyk7CisJCQlzZXRTdGF0ZSg2MzgpOworCQkJbWF0Y2goU1RSSU5HKTsKKwkJCX0KKwkJ
fQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNl
cHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJ
X2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0
UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBj
bGFzcyBQX2dlbWVpbmRlc2NobHVlc3NlbENvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4
dD0KIHsKKwkJcHVibGljIFRlcm1pbmFsTm9kZSBQX0dFTUVJTkRFU0NITFVFU1NFTCgpIHsgcmV0
dXJuIGdldFRva2VuKExhZlBhcnNlci5QPQpfR0VNRUlOREVTQ0hMVUVTU0VMLCAwKTsgfQorCQlw
dWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5T
VFJJTkcsIDApOyB9CisJCXB1YmxpYyBQX2dlbWVpbmRlc2NobHVlc3NlbENvbnRleHQoUGFyc2Vy
UnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbj0KZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJl
bnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJ
bmRleCgpIHsgcmV0dXJuIFJVTEVfcF9nZW1laW5kZXNjaGx1ZXNzZWw7IH0KKwkJQE92ZXJyaWRl
CisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgewor
CQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcils
aXN0ZW5lcikuZW50ZXJQX2c9CmVtZWluZGVzY2hsdWVzc2VsKHRoaXMpOworCQl9CisJCUBPdmVy
cmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikg
eworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5l
cilsaXN0ZW5lcikuZXhpdFBfZ2U9Cm1laW5kZXNjaGx1ZXNzZWwodGhpcyk7CisJCX0KKwl9CisK
KwlwdWJsaWMgZmluYWwgUF9nZW1laW5kZXNjaGx1ZXNzZWxDb250ZXh0IHBfZ2VtZWluZGVzY2hs
dWVzc2VsKCkgdGhyb3dzIFJlPQpjb2duaXRpb25FeGNlcHRpb24geworCQlQX2dlbWVpbmRlc2No
bHVlc3NlbENvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgUF9nZW1laW5kZXNjaGx1ZXNzZWxDb250
ZXg9CnQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDE2MCwgUlVM
RV9wX2dlbWVpbmRlc2NobHVlc3NlbCk7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2Nh
bGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg2NDApOworCQkJbWF0Y2goUF9HRU1FSU5ERVND
SExVRVNTRUwpOworCQkJc2V0U3RhdGUoNjQxKTsKKwkJCW1hdGNoKFNUUklORyk7CisJCQl9CisJ
CX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhj
ZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJ
CV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhp
dFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMg
Y2xhc3MgUF9nZW1laW5kZW5hbWVDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgewor
CQlwdWJsaWMgVGVybWluYWxOb2RlIFBfR0VNRUlOREVOQU1FKCkgeyByZXR1cm4gZ2V0VG9rZW4o
TGFmUGFyc2VyLlBfR0VNRUk9Ck5ERU5BTUUsIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUg
U1RSSU5HX0VTQygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkdfRVNDLD0KIDAp
OyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFm
UGFyc2VyLlNUUklORywgMCk7IH0KKwkJcHVibGljIFBfZ2VtZWluZGVuYW1lQ29udGV4dChQYXJz
ZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlPQopIHsKKwkJCXN1cGVyKHBh
cmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVs
ZUluZGV4KCkgeyByZXR1cm4gUlVMRV9wX2dlbWVpbmRlbmFtZTsgfQorCQlAT3ZlcnJpZGUKKwkJ
cHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlp
ZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3Rl
bmVyKS5lbnRlclBfZz0KZW1laW5kZW5hbWUodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1
YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAo
IGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVy
KS5leGl0UF9nZT0KbWVpbmRlbmFtZSh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBQ
X2dlbWVpbmRlbmFtZUNvbnRleHQgcF9nZW1laW5kZW5hbWUoKSB0aHJvd3MgUmVjb2duaXRpb25F
eGM9CmVwdGlvbiB7CisJCVBfZ2VtZWluZGVuYW1lQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBQ
X2dlbWVpbmRlbmFtZUNvbnRleHQoX2N0eCwgZ2V0Uz0KdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9s
b2NhbGN0eCwgMTYyLCBSVUxFX3BfZ2VtZWluZGVuYW1lKTsKKwkJaW50IF9sYTsKKwkJdHJ5IHsK
KwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDY0Myk7
CisJCQltYXRjaChQX0dFTUVJTkRFTkFNRSk7CisJCQlzZXRTdGF0ZSg2NDQpOworCQkJX2xhID0z
RCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9
M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCX0g
ZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25p
dGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlf
ZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVy
KHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0
dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFBfb3J0c196dXNhdHpr
ZW5uemFobENvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4PQp0IHsKKwkJcHVibGljIFRl
cm1pbmFsTm9kZSBQX09SVFNfWlVTQVRaS0VOTlpBSEwoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQ
YXJzZXIuPQpQX09SVFNfWlVTQVRaS0VOTlpBSEwsIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5v
ZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgMCk7IH0KKwkJ
cHVibGljIFBfb3J0c196dXNhdHprZW5uemFobENvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFy
ZW50LCBpbnQgaW52b2tpPQpuZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3Rh
dGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJu
IFJVTEVfcF9vcnRzX3p1c2F0emtlbm56YWhsOz0KIH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2
b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0
ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50
ZXJQX289CnJ0c196dXNhdHprZW5uemFobCh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVi
bGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICgg
bGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIp
LmV4aXRQX29yPQp0c196dXNhdHprZW5uemFobCh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBm
aW5hbCBQX29ydHNfenVzYXR6a2VubnphaGxDb250ZXh0IHBfb3J0c196dXNhdHprZW5uemFobCgp
IHRocm93cyA9ClJlY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJUF9vcnRzX3p1c2F0emtlbm56YWhs
Q29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBQX29ydHNfenVzYXR6a2VubnphaGxDb250PQpleHQo
X2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDE2NCwgUlVMRV9wX29y
dHNfenVzYXR6a2VubnphaGwpOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgs
IDEpOworCQkJeworCQkJc2V0U3RhdGUoNjQ2KTsKKwkJCW1hdGNoKFBfT1JUU19aVVNBVFpLRU5O
WkFITCk7CisJCQlzZXRTdGF0ZSg2NDcpOworCQkJbWF0Y2goU1RSSU5HKTsKKwkJCX0KKwkJfQor
CQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRp
b24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2Vy
ckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVs
ZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFz
cyBQX2tvb3JkaW5hdGVuQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVi
bGljIFRlcm1pbmFsTm9kZSBQX0tPT1JESU5BVEVOKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFy
c2VyLlBfS09PUkRJPQpOQVRFTiwgMCk7IH0KKwkJcHVibGljIExpc3Q8VGVybWluYWxOb2RlPiBT
VFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW5zKExhZlBhcnNlci5TVFJJPQpOR19FU0MpOyB9
CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HX0VTQyhpbnQgaSkgeworCQkJcmV0dXJuIGdl
dFRva2VuKExhZlBhcnNlci5TVFJJTkdfRVNDLCBpKTsKKwkJfQorCQlwdWJsaWMgTGlzdDxUZXJt
aW5hbE5vZGU+IFNUUklORygpIHsgcmV0dXJuIGdldFRva2VucyhMYWZQYXJzZXIuU1RSSU5HKTs9
CiB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKGludCBpKSB7CisJCQlyZXR1cm4gZ2V0
VG9rZW4oTGFmUGFyc2VyLlNUUklORywgaSk7CisJCX0KKwkJcHVibGljIFBfa29vcmRpbmF0ZW5D
b250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpPQogewor
CQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGlj
IGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3Bfa29vcmRpbmF0ZW47IH0KKwkJQE92
ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5l
cikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0
ZW5lcilsaXN0ZW5lcikuZW50ZXJQX2s9Cm9vcmRpbmF0ZW4odGhpcyk7CisJCX0KKwkJQE92ZXJy
aWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7
CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVy
KWxpc3RlbmVyKS5leGl0UF9rbz0Kb3JkaW5hdGVuKHRoaXMpOworCQl9CisJfQorCisJcHVibGlj
IGZpbmFsIFBfa29vcmRpbmF0ZW5Db250ZXh0IHBfa29vcmRpbmF0ZW4oKSB0aHJvd3MgUmVjb2du
aXRpb25FeGNlcD0KdGlvbiB7CisJCVBfa29vcmRpbmF0ZW5Db250ZXh0IF9sb2NhbGN0eCA9M0Qg
bmV3IFBfa29vcmRpbmF0ZW5Db250ZXh0KF9jdHgsIGdldFN0YT0KdGUoKSk7CisJCWVudGVyUnVs
ZShfbG9jYWxjdHgsIDE2NiwgUlVMRV9wX2tvb3JkaW5hdGVuKTsKKwkJaW50IF9sYTsKKwkJdHJ5
IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDY0
OSk7CisJCQltYXRjaChQX0tPT1JESU5BVEVOKTsKKwkJCXNldFN0YXRlKDY1MCk7CisJCQlfbGEg
PTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0z
RD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJ
fSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQlzZXRTdGF0ZSg2NTQpOworCQkJX2Vy
ckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJd2hpbGUg
KF9sYT0zRD0zRFRfXzQpIHsKKwkJCQl7CisJCQkJeworCQkJCXNldFN0YXRlKDY1MSk7CisJCQkJ
bWF0Y2goVF9fNCk7CisJCQkJfQorCQkJCX0KKwkJCQlzZXRTdGF0ZSg2NTYpOworCQkJCV9lcnJI
YW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlz
ZXRTdGF0ZSg2NTcpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xhPTNE
PTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIucmVj
b3ZlcklubGluZSh0aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQorCQkJ
c2V0U3RhdGUoNjYxKTsKKwkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQlfbGEgPTNEIF9p
bnB1dC5MQSgxKTsKKwkJCXdoaWxlIChfbGE9M0Q9M0RUX180KSB7CisJCQkJeworCQkJCXsKKwkJ
CQlzZXRTdGF0ZSg2NTgpOworCQkJCW1hdGNoKFRfXzQpOworCQkJCX0KKwkJCQl9CisJCQkJc2V0
U3RhdGUoNjYzKTsKKwkJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJCV9sYSA9M0QgX2lu
cHV0LkxBKDEpOworCQkJfQorCQkJc2V0U3RhdGUoNjY0KTsKKwkJCV9sYSA9M0QgX2lucHV0LkxB
KDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSAp
IHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJ
CWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRp
b24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIu
cmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7
CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxj
dHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBQX2tvb3JkaW5hdGVuX3NDb250ZXh0IGV4
dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWluYWxOb2RlIFBfS09PUkRJ
TkFURU5fUygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5QX0tPT1I9CkRJTkFURU5fUywg
MCk7IH0KKwkJcHVibGljIExpc3Q8VGVybWluYWxOb2RlPiBTVFJJTkcoKSB7IHJldHVybiBnZXRU
b2tlbnMoTGFmUGFyc2VyLlNUUklORyk7PQogfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklO
RyhpbnQgaSkgeworCQkJcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkcsIGkpOworCQl9
CisJCXB1YmxpYyBMaXN0PFRlcm1pbmFsTm9kZT4gU1RSSU5HX0VTQygpIHsgcmV0dXJuIGdldFRv
a2VucyhMYWZQYXJzZXIuU1RSST0KTkdfRVNDKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNU
UklOR19FU0MoaW50IGkpIHsKKwkJCXJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VT
QywgaSk7CisJCX0KKwkJcHVibGljIFBfa29vcmRpbmF0ZW5fc0NvbnRleHQoUGFyc2VyUnVsZUNv
bnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0PQplKSB7CisJCQlzdXBlcihwYXJlbnQsIGlu
dm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgp
IHsgcmV0dXJuIFJVTEVfcF9rb29yZGluYXRlbl9zOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMg
dm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlz
dGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVu
dGVyUF9rPQpvb3JkaW5hdGVuX3ModGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2
b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3Rl
bmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0
UF9rbz0Kb3JkaW5hdGVuX3ModGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgUF9rb29y
ZGluYXRlbl9zQ29udGV4dCBwX2tvb3JkaW5hdGVuX3MoKSB0aHJvd3MgUmVjb2duaXRpb25FPQp4
Y2VwdGlvbiB7CisJCVBfa29vcmRpbmF0ZW5fc0NvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgUF9r
b29yZGluYXRlbl9zQ29udGV4dChfY3R4LCBnZT0KdFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xv
Y2FsY3R4LCAxNjgsIFJVTEVfcF9rb29yZGluYXRlbl9zKTsKKwkJaW50IF9sYTsKKwkJdHJ5IHsK
KwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDY2Nik7
CisJCQltYXRjaChQX0tPT1JESU5BVEVOX1MpOworCQkJc2V0U3RhdGUoNjY3KTsKKwkJCW1hdGNo
KFNUUklORyk7CisJCQlzZXRTdGF0ZSg2NzEpOworCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsK
KwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJ
CQl7CisJCQkJeworCQkJCXNldFN0YXRlKDY2OCk7CisJCQkJbWF0Y2goVF9fNCk7CisJCQkJfQor
CQkJCX0KKwkJCQlzZXRTdGF0ZSg2NzMpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJ
CQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSg2NzQpOworCQkJX2xh
ID0zRCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9
M0Q9M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsKKwkJ
CX0gZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQorCQkJc2V0U3RhdGUoNjc4KTsKKwkJCV9l
cnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCXdoaWxl
IChfbGE9M0Q9M0RUX180KSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRTdGF0ZSg2NzUpOworCQkJ
CW1hdGNoKFRfXzQpOworCQkJCX0KKwkJCQl9CisJCQkJc2V0U3RhdGUoNjgwKTsKKwkJCQlfZXJy
SGFuZGxlci5zeW5jKHRoaXMpOworCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJfQorCQkJ
c2V0U3RhdGUoNjgxKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0z
RD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJl
Y292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJ
CX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0
eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUp
OworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJ
CQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0
YXRpYyBjbGFzcyBQX29ydHNfenVzYXR6Y29kZUNvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29u
dGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgUF9PUlRTX1pVU0FUWkNPREUoKSB7IHJldHVy
biBnZXRUb2tlbihMYWZQYXJzZXIuUF9PUj0KVFNfWlVTQVRaQ09ERSwgMCk7IH0KKwkJcHVibGlj
IFRlcm1pbmFsTm9kZSBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNU
UklOR19FU0MsPQogMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVy
biBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgUF9vcnRzX3p1c2F0
emNvZGVDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3Q9CmF0
ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUg
cHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3Bfb3J0c196dXNhdHpjb2Rl
OyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVu
ZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciAp
ICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyUF9vPQpydHNfenVzYXR6Y29kZSh0aGlzKTsK
KwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVu
ZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciAp
ICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRQX29yPQp0c196dXNhdHpjb2RlKHRoaXMpOwor
CQl9CisJfQorCisJcHVibGljIGZpbmFsIFBfb3J0c196dXNhdHpjb2RlQ29udGV4dCBwX29ydHNf
enVzYXR6Y29kZSgpIHRocm93cyBSZWNvZ25pdD0KaW9uRXhjZXB0aW9uIHsKKwkJUF9vcnRzX3p1
c2F0emNvZGVDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFBfb3J0c196dXNhdHpjb2RlQ29udGV4
dChfY3R4PQosIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAxNzAsIFJVTEVf
cF9vcnRzX3p1c2F0emNvZGUpOworCQlpbnQgX2xhOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFs
dChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJc2V0U3RhdGUoNjgzKTsKKwkJCW1hdGNoKFBfT1JU
U19aVVNBVFpDT0RFKTsKKwkJCXNldFN0YXRlKDY4NCk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgx
KTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7
CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJfSBlbHNlIHsKKwkJCQlj
b25zdW1lKCk7CisJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9u
IHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJl
cG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOwor
CQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4
OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUF9vcnRzX3p1c2F0enRleHRDb250ZXh0IGV4
dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWluYWxOb2RlIFBfT1JUU19a
VVNBVFpURVhUKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlBfT1I9ClRTX1pVU0FUWlRF
WFQsIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HX0VTQygpIHsgcmV0dXJuIGdl
dFRva2VuKExhZlBhcnNlci5TVFJJTkdfRVNDLD0KIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5v
ZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgMCk7IH0KKwkJ
cHVibGljIFBfb3J0c196dXNhdHp0ZXh0Q29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQs
IGludCBpbnZva2luZ1N0PQphdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7
CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVM
RV9wX29ydHNfenVzYXR6dGV4dDsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJS
dWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3Rh
bmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclBfbz0KcnRz
X3p1c2F0enRleHQodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRS
dWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3Rh
bmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0UF9vcj0KdHNf
enVzYXR6dGV4dCh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBQX29ydHNfenVzYXR6
dGV4dENvbnRleHQgcF9vcnRzX3p1c2F0enRleHQoKSB0aHJvd3MgUmVjb2duaXQ9CmlvbkV4Y2Vw
dGlvbiB7CisJCVBfb3J0c196dXNhdHp0ZXh0Q29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBQX29y
dHNfenVzYXR6dGV4dENvbnRleHQoX2N0eD0KLCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9s
b2NhbGN0eCwgMTcyLCBSVUxFX3Bfb3J0c196dXNhdHp0ZXh0KTsKKwkJaW50IF9sYTsKKwkJdHJ5
IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDY4
Nik7CisJCQltYXRjaChQX09SVFNfWlVTQVRaVEVYVCk7CisJCQlzZXRTdGF0ZSg2ODcpOworCQkJ
X2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBf
bGE9M0Q9M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsK
KwkJCX0gZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChS
ZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7
CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5y
ZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0K
KwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFBfbnV0c19j
b2RlQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGljIFRlcm1pbmFs
Tm9kZSBQX05VVFNfQ09ERSgpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5QX05VVFNfQ09E
PQpFLCAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRv
a2VuKExhZlBhcnNlci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBQX251dHNfY29kZUNvbnRleHQo
UGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0ZSkgeworCQkJc3VwZXIo
cGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRS
dWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3BfbnV0c19jb2RlOyB9CisJCUBPdmVycmlkZQorCQlw
dWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlm
ICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVu
ZXIpLmVudGVyUF9uPQp1dHNfY29kZSh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGlj
IHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlz
dGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4
aXRQX251PQp0c19jb2RlKHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFBfbnV0c19j
b2RlQ29udGV4dCBwX251dHNfY29kZSgpIHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbj0KIHsK
KwkJUF9udXRzX2NvZGVDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFBfbnV0c19jb2RlQ29udGV4
dChfY3R4LCBnZXRTdGF0ZSgpPQopOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAxNzQsIFJVTEVf
cF9udXRzX2NvZGUpOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOwor
CQkJeworCQkJc2V0U3RhdGUoNjg5KTsKKwkJCW1hdGNoKFBfTlVUU19DT0RFKTsKKwkJCXNldFN0
YXRlKDY5MCk7CisJCQltYXRjaChTVFJJTkcpOworCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25p
dGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlf
ZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVy
KHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0
dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFBfc2l0ZV9pZENvbnRl
eHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgUF9T
SVRFX0lEKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlBfU0lURV9JRCwgMD0KKTsgfQor
CQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklOR19FU0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQ
YXJzZXIuU1RSSU5HX0VTQyw9CiAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygp
IHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBQX3Np
dGVfaWRDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUp
IHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1
YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9wX3NpdGVfaWQ7IH0KKwkJQE92
ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5l
cikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0
ZW5lcilsaXN0ZW5lcikuZW50ZXJQX3M9Cml0ZV9pZCh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUK
KwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJ
CWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlz
dGVuZXIpLmV4aXRQX3NpPQp0ZV9pZCh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBQ
X3NpdGVfaWRDb250ZXh0IHBfc2l0ZV9pZCgpIHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7
CisJCVBfc2l0ZV9pZENvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgUF9zaXRlX2lkQ29udGV4dChf
Y3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTc2LCBSVUxFX3Bfc2l0
ZV9pZCk7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwg
MSk7CisJCQl7CisJCQlzZXRTdGF0ZSg2OTIpOworCQkJbWF0Y2goUF9TSVRFX0lEKTsKKwkJCXNl
dFN0YXRlKDY5Myk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9
M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNv
dmVySW5saW5lKHRoaXMpOworCQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQl9
CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHgu
ZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsK
KwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJ
ZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0
aWMgY2xhc3MgUF9zaXRlX25hbWVDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgewor
CQlwdWJsaWMgVGVybWluYWxOb2RlIFBfU0lURV9OQU1FKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFm
UGFyc2VyLlBfU0lURV9OQU09CkUsIDApOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5H
X0VTQygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkdfRVNDLD0KIDApOyB9CisJ
CXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2Vy
LlNUUklORywgMCk7IH0KKwkJcHVibGljIFBfc2l0ZV9uYW1lQ29udGV4dChQYXJzZXJSdWxlQ29u
dGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9r
aW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsg
cmV0dXJuIFJVTEVfcF9zaXRlX25hbWU7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVu
dGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBp
bnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJQX3M9
Cml0ZV9uYW1lKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVs
ZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5j
ZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdFBfc2k9CnRlX25h
bWUodGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgUF9zaXRlX25hbWVDb250ZXh0IHBf
c2l0ZV9uYW1lKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uPQogeworCQlQX3NpdGVfbmFt
ZUNvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgUF9zaXRlX25hbWVDb250ZXh0KF9jdHgsIGdldFN0
YXRlKCk9Cik7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDE3OCwgUlVMRV9wX3NpdGVfbmFtZSk7
CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJ
CQl7CisJCQlzZXRTdGF0ZSg2OTUpOworCQkJbWF0Y2goUF9TSVRFX05BTUUpOworCQkJc2V0U3Rh
dGUoNjk2KTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNU
UklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJ
bmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJ
fQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNl
cHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJ
X2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0
UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBj
bGFzcyBQX2hvZWhlX25uQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVi
bGljIFRlcm1pbmFsTm9kZSBQX0hPRUhFX05OKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2Vy
LlBfSE9FSEVfTk4sPQogMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJl
dHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgUF9ob2VoZV9u
bkNvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0ZSkgewor
CQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGlj
IGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3BfaG9laGVfbm47IH0KKwkJQE92ZXJy
aWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikg
eworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5l
cilsaXN0ZW5lcikuZW50ZXJQX2g9Cm9laGVfbm4odGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJ
CXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlp
ZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3Rl
bmVyKS5leGl0UF9obz0KZWhlX25uKHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFBf
aG9laGVfbm5Db250ZXh0IHBfaG9laGVfbm4oKSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb24g
eworCQlQX2hvZWhlX25uQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBQX2hvZWhlX25uQ29udGV4
dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTgwLCBSVUxFX3Bf
aG9laGVfbm4pOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJ
eworCQkJc2V0U3RhdGUoNjk4KTsKKwkJCW1hdGNoKFBfSE9FSEVfTk4pOworCQkJc2V0U3RhdGUo
Njk5KTsKKwkJCW1hdGNoKFNUUklORyk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9u
RXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJI
YW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhp
cywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4g
X2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUF9ob2VoZV9sYW5kQ29udGV4
dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGljIFRlcm1pbmFsTm9kZSBQX0hP
RUhFX0xBTkQoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuUF9IT0VIRV9MPQpBTkQsIDAp
OyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFm
UGFyc2VyLlNUUklORywgMCk7IH0KKwkJcHVibGljIFBfaG9laGVfbGFuZENvbnRleHQoUGFyc2Vy
UnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50
LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5k
ZXgoKSB7IHJldHVybiBSVUxFX3BfaG9laGVfbGFuZDsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGlj
IHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxp
c3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5l
bnRlclBfaD0Kb2VoZV9sYW5kKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9p
ZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5l
ciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdFBf
aG89CmVoZV9sYW5kKHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFBfaG9laGVfbGFu
ZENvbnRleHQgcF9ob2VoZV9sYW5kKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aT0Kb24gewor
CQlQX2hvZWhlX2xhbmRDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFBfaG9laGVfbGFuZENvbnRl
eHQoX2N0eCwgZ2V0U3RhdGU9CigpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTgyLCBSVUxF
X3BfaG9laGVfbGFuZCk7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7
CisJCQl7CisJCQlzZXRTdGF0ZSg3MDEpOworCQkJbWF0Y2goUF9IT0VIRV9MQU5EKTsKKwkJCXNl
dFN0YXRlKDcwMik7CisJCQltYXRjaChTVFJJTkcpOworCQkJfQorCQl9CisJCWNhdGNoIChSZWNv
Z25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJ
CQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNv
dmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJ
cmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIE1laHJ6d2Vja2Zl
bGRDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWluYWxO
b2RlIE1FSFJaV0VDS0ZFTEQoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuTUVIUlpXRUM9
CktGRUxELCAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklOR19FU0MoKSB7IHJldHVy
biBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VTQyw9CiAwKTsgfQorCQlwdWJsaWMgVGVybWlu
YWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkcsIDApOyB9
CisJCXB1YmxpYyBNZWhyendlY2tmZWxkQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQs
IGludCBpbnZva2luZ1N0YXRlKT0KIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7
CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVM
RV9tZWhyendlY2tmZWxkOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUo
UGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2Vv
ZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyTWVoPQpyendlY2tm
ZWxkKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJz
ZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExh
Zkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdE1laHI9Cnp3ZWNrZmVsZCh0
aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBNZWhyendlY2tmZWxkQ29udGV4dCBtZWhy
endlY2tmZWxkKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXA9CnRpb24geworCQlNZWhyendlY2tm
ZWxkQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBNZWhyendlY2tmZWxkQ29udGV4dChfY3R4LCBn
ZXRTdGE9CnRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAxODQsIFJVTEVfbWVocnp3ZWNr
ZmVsZCk7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwg
MSk7CisJCQl7CisJCQlzZXRTdGF0ZSg3MDQpOworCQkJbWF0Y2goTUVIUlpXRUNLRkVMRCk7CisJ
CQlzZXRTdGF0ZSg3MDUpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xh
PTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIu
cmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQor
CQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2Fs
Y3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCBy
ZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsK
KwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMg
c3RhdGljIGNsYXNzIE1lc3NfZGF0dW1fdWhyemVpdENvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxl
Q29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgTUVTU19EQVRVTV9VSFJaRUlUKCkgeyBy
ZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLk1FUz0KU19EQVRVTV9VSFJaRUlULCAwKTsgfQorCQlw
dWJsaWMgTGlzdDxUZXJtaW5hbE5vZGU+IFNUUklORygpIHsgcmV0dXJuIGdldFRva2VucyhMYWZQ
YXJzZXIuU1RSSU5HKTs9CiB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKGludCBpKSB7
CisJCQlyZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgaSk7CisJCX0KKwkJcHVibGlj
IE1lc3NfZGF0dW1fdWhyemVpdENvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQg
aW52b2tpbmdTPQp0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9
CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfbWVz
c19kYXR1bV91aHJ6ZWl0OyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUo
UGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2Vv
ZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyTWVzPQpzX2RhdHVt
X3VocnplaXQodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxl
KFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNl
b2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0TWVzcz0KX2RhdHVt
X3VocnplaXQodGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgTWVzc19kYXR1bV91aHJ6
ZWl0Q29udGV4dCBtZXNzX2RhdHVtX3VocnplaXQoKSB0aHJvd3MgUmVjb2duPQppdGlvbkV4Y2Vw
dGlvbiB7CisJCU1lc3NfZGF0dW1fdWhyemVpdENvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgTWVz
c19kYXR1bV91aHJ6ZWl0Q29udGV4dChfYz0KdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUo
X2xvY2FsY3R4LCAxODYsIFJVTEVfbWVzc19kYXR1bV91aHJ6ZWl0KTsKKwkJaW50IF9sYTsKKwkJ
dHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRl
KDcwNyk7CisJCQltYXRjaChNRVNTX0RBVFVNX1VIUlpFSVQpOworCQkJc2V0U3RhdGUoNzA4KTsK
KwkJCW1hdGNoKFNUUklORyk7CisJCQlzZXRTdGF0ZSg3MTIpOworCQkJX2VyckhhbmRsZXIuc3lu
Yyh0aGlzKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRf
XzQpIHsKKwkJCQl7CisJCQkJeworCQkJCXNldFN0YXRlKDcwOSk7CisJCQkJbWF0Y2goVF9fNCk7
CisJCQkJfQorCQkJCX0KKwkJCQlzZXRTdGF0ZSg3MTQpOworCQkJCV9lcnJIYW5kbGVyLnN5bmMo
dGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSg3MTUp
OworCQkJbWF0Y2goU1RSSU5HKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNl
cHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRs
ZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCBy
ZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9j
YWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBNZXNzemVpdF9zZWt1bmRlbkNvbnRl
eHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgTUVT
U1pFSVRfU0VLVU5ERU4oKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuTUVTUz0KWkVJVF9T
RUtVTkRFTiwgMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBn
ZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAwKTsgfQorCQlwdWJsaWMgTWVzc3plaXRfc2VrdW5k
ZW5Db250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3Q9CmF0ZSkg
eworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVi
bGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX21lc3N6ZWl0X3Nla3VuZGVuOyB9
CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIg
bGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgo
TGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyTWVzPQpzemVpdF9zZWt1bmRlbih0aGlzKTsKKwkJ
fQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIg
bGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgo
TGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRNZXNzPQp6ZWl0X3Nla3VuZGVuKHRoaXMpOworCQl9
CisJfQorCisJcHVibGljIGZpbmFsIE1lc3N6ZWl0X3Nla3VuZGVuQ29udGV4dCBtZXNzemVpdF9z
ZWt1bmRlbigpIHRocm93cyBSZWNvZ25pdD0KaW9uRXhjZXB0aW9uIHsKKwkJTWVzc3plaXRfc2Vr
dW5kZW5Db250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IE1lc3N6ZWl0X3Nla3VuZGVuQ29udGV4dChf
Y3R4PQosIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAxODgsIFJVTEVfbWVz
c3plaXRfc2VrdW5kZW4pOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEp
OworCQkJeworCQkJc2V0U3RhdGUoNzE3KTsKKwkJCW1hdGNoKE1FU1NaRUlUX1NFS1VOREVOKTsK
KwkJCXNldFN0YXRlKDcxOCk7CisJCQltYXRjaChTVFJJTkcpOworCQkJfQorCQl9CisJCWNhdGNo
IChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0Qg
cmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxl
ci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJ
CX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIE1lc3Nt
ZXRob2RlX2NDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVy
bWluYWxOb2RlIE1FU1NNRVRIT0RFX0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuTUVT
U01FVEg9Ck9ERV9DLCAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklOR19FU0MoKSB7
IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VTQyw9CiAwKTsgfQorCQlwdWJsaWMg
VGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkcs
IDApOyB9CisJCXB1YmxpYyBNZXNzbWV0aG9kZV9jQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBw
YXJlbnQsIGludCBpbnZva2luZ1N0YXRlKT0KIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdT
dGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1
cm4gUlVMRV9tZXNzbWV0aG9kZV9jOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRl
clJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5z
dGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyTWVzPQpz
bWV0aG9kZV9jKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVs
ZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5j
ZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdE1lc3M9Cm1ldGhv
ZGVfYyh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBNZXNzbWV0aG9kZV9jQ29udGV4
dCBtZXNzbWV0aG9kZV9jKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXA9CnRpb24geworCQlNZXNz
bWV0aG9kZV9jQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBNZXNzbWV0aG9kZV9jQ29udGV4dChf
Y3R4LCBnZXRTdGE9CnRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAxOTAsIFJVTEVfbWVz
c21ldGhvZGVfYyk7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2Nh
bGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg3MjApOworCQkJbWF0Y2goTUVTU01FVEhPREVf
Qyk7CisJCQlzZXRTdGF0ZSg3MjEpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlpZiAo
ICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkgeworCQkJX2Vyckhh
bmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJY29uc3VtZSgpOwor
CQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJ
X2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0
aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5h
bGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlw
dWJsaWMgc3RhdGljIGNsYXNzIE1lc3NtZXRob2RlX3NDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVs
ZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWluYWxOb2RlIE1FU1NNRVRIT0RFX1MoKSB7IHJldHVy
biBnZXRUb2tlbihMYWZQYXJzZXIuTUVTU01FVEg9Ck9ERV9TLCAwKTsgfQorCQlwdWJsaWMgVGVy
bWluYWxOb2RlIFNUUklOR19FU0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5H
X0VTQyw9CiAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdl
dFRva2VuKExhZlBhcnNlci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBNZXNzbWV0aG9kZV9zQ29u
dGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRlKT0KIHsKKwkJ
CXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBp
bnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9tZXNzbWV0aG9kZV9zOyB9CisJCUBPdmVy
cmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIp
IHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVu
ZXIpbGlzdGVuZXIpLmVudGVyTWVzPQpzbWV0aG9kZV9zKHRoaXMpOworCQl9CisJCUBPdmVycmlk
ZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgewor
CQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcils
aXN0ZW5lcikuZXhpdE1lc3M9Cm1ldGhvZGVfcyh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBm
aW5hbCBNZXNzbWV0aG9kZV9zQ29udGV4dCBtZXNzbWV0aG9kZV9zKCkgdGhyb3dzIFJlY29nbml0
aW9uRXhjZXA9CnRpb24geworCQlNZXNzbWV0aG9kZV9zQ29udGV4dCBfbG9jYWxjdHggPTNEIG5l
dyBNZXNzbWV0aG9kZV9zQ29udGV4dChfY3R4LCBnZXRTdGE9CnRlKCkpOworCQllbnRlclJ1bGUo
X2xvY2FsY3R4LCAxOTIsIFJVTEVfbWVzc21ldGhvZGVfcyk7CisJCWludCBfbGE7CisJCXRyeSB7
CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg3MjMp
OworCQkJbWF0Y2goTUVTU01FVEhPREVfUyk7CisJCQlzZXRTdGF0ZSg3MjQpOworCQkJX2xhID0z
RCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9
M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCX0g
ZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25p
dGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlf
ZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVy
KHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0
dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIEJlYXJiZWl0dW5nc3N0
YXR1c0NvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5h
bE5vZGUgQkVBUkJFSVRVTkdTU1RBVFVTKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLkJF
QT0KUkJFSVRVTkdTU1RBVFVTLCAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklOR19F
U0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VTQyw9CiAwKTsgfQorCQlw
dWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5T
VFJJTkcsIDApOyB9CisJCXB1YmxpYyBCZWFyYmVpdHVuZ3NzdGF0dXNDb250ZXh0KFBhcnNlclJ1
bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nUz0KdGF0ZSkgeworCQkJc3VwZXIocGFyZW50
LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5k
ZXgoKSB7IHJldHVybiBSVUxFX2JlYXJiZWl0dW5nc3N0YXR1czsgfQorCQlAT3ZlcnJpZGUKKwkJ
cHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlp
ZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3Rl
bmVyKS5lbnRlckJlYT0KcmJlaXR1bmdzc3RhdHVzKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQor
CQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJ
aWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0
ZW5lcikuZXhpdEJlYXI9CmJlaXR1bmdzc3RhdHVzKHRoaXMpOworCQl9CisJfQorCisJcHVibGlj
IGZpbmFsIEJlYXJiZWl0dW5nc3N0YXR1c0NvbnRleHQgYmVhcmJlaXR1bmdzc3RhdHVzKCkgdGhy
b3dzIFJlY29nbj0KaXRpb25FeGNlcHRpb24geworCQlCZWFyYmVpdHVuZ3NzdGF0dXNDb250ZXh0
IF9sb2NhbGN0eCA9M0QgbmV3IEJlYXJiZWl0dW5nc3N0YXR1c0NvbnRleHQoX2M9CnR4LCBnZXRT
dGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTk0LCBSVUxFX2JlYXJiZWl0dW5nc3N0
YXR1cyk7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwg
MSk7CisJCQl7CisJCQlzZXRTdGF0ZSg3MjYpOworCQkJbWF0Y2goQkVBUkJFSVRVTkdTU1RBVFVT
KTsKKwkJCXNldFN0YXRlKDcyNyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICgg
IShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJySGFu
ZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJ
CQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlf
bG9jYWxjdHguZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRo
aXMsIHJlKTsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFs
bHkgeworCQkJZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1
YmxpYyBzdGF0aWMgY2xhc3MgUGVwX2ZsYWdDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRl
eHQgeworCQlwdWJsaWMgVGVybWluYWxOb2RlIFBFUF9GTEFHKCkgeyByZXR1cm4gZ2V0VG9rZW4o
TGFmUGFyc2VyLlBFUF9GTEFHLCAwKTs9CiB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5H
KCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgMCk7IH0KKwkJcHVibGljIFBl
cF9mbGFnQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2luZ1N0YXRl
KSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBw
dWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfcGVwX2ZsYWc7IH0KKwkJQE92
ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5l
cikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0
ZW5lcilsaXN0ZW5lcikuZW50ZXJQZXA9Cl9mbGFnKHRoaXMpOworCQl9CisJCUBPdmVycmlkZQor
CQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJ
aWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0
ZW5lcikuZXhpdFBlcF89CmZsYWcodGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMgZmluYWwgUGVw
X2ZsYWdDb250ZXh0IHBlcF9mbGFnKCkgdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIHsKKwkJ
UGVwX2ZsYWdDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IFBlcF9mbGFnQ29udGV4dChfY3R4LCBn
ZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTk2LCBSVUxFX3BlcF9mbGFnKTsK
KwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0
YXRlKDcyOSk7CisJCQltYXRjaChQRVBfRkxBRyk7CisJCQlzZXRTdGF0ZSg3MzApOworCQkJbWF0
Y2goU1RSSU5HKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUp
IHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0
RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0K
KwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJ
fQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBFcmZhc3N1bmdfYWJnZXNjaGxvc3NlbkNvbnRleHQg
ZXh0ZW5kcyBQYXJzZXJSdWxlQ29udD0KZXh0IHsKKwkJcHVibGljIFRlcm1pbmFsTm9kZSBFUkZB
U1NVTkdfQUJHRVNDSExPU1NFTigpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlPQpyLkVSRkFT
U1VOR19BQkdFU0NITE9TU0VOLCAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygp
IHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBFcmZh
c3N1bmdfYWJnZXNjaGxvc3NlbkNvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQg
aW52bz0Ka2luZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9
CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfZXJm
YXNzdW5nX2FiZ2VzY2hsb3NzZT0KbjsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50
ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGlu
c3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlckVyZj0K
YXNzdW5nX2FiZ2VzY2hsb3NzZW4odGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2
b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3Rl
bmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0
RXJmYT0Kc3N1bmdfYWJnZXNjaGxvc3Nlbih0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5h
bCBFcmZhc3N1bmdfYWJnZXNjaGxvc3NlbkNvbnRleHQgZXJmYXNzdW5nX2FiZ2VzY2hsb3NzZW4o
KSB0aHI9Cm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7CisJCUVyZmFzc3VuZ19hYmdlc2NobG9z
c2VuQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBFcmZhc3N1bmdfYWJnZXNjaGxvc3Nlbj0KQ29u
dGV4dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMTk4LCBSVUxF
X2VyZmFzc3VuZ19hYmdlc2NobG9zc2VuKTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xv
Y2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDczMik7CisJCQltYXRjaChFUkZBU1NVTkdf
QUJHRVNDSExPU1NFTik7CisJCQlzZXRTdGF0ZSg3MzMpOworCQkJbWF0Y2goU1RSSU5HKTsKKwkJ
CX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0
eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUp
OworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJ
CQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0
YXRpYyBjbGFzcyBQcm9iZW56dXNhdHpiZXNjaHJlaWJ1bmdDb250ZXh0IGV4dGVuZHMgUGFyc2Vy
UnVsZUNvbj0KdGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgUFJPQkVOWlVTQVRaQkVTQ0hS
RUlCVU5HKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFycz0KZXIuUFJPQkVOWlVTQVRaQkVTQ0hS
RUlCVU5HLCAwKTsgfQorCQlwdWJsaWMgTGlzdDxUZXJtaW5hbE5vZGU+IFNUUklORygpIHsgcmV0
dXJuIGdldFRva2VucyhMYWZQYXJzZXIuU1RSSU5HKTs9CiB9CisJCXB1YmxpYyBUZXJtaW5hbE5v
ZGUgU1RSSU5HKGludCBpKSB7CisJCQlyZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywg
aSk7CisJCX0KKwkJcHVibGljIExpc3Q8VGVybWluYWxOb2RlPiBTVFJJTkdfRVNDKCkgeyByZXR1
cm4gZ2V0VG9rZW5zKExhZlBhcnNlci5TVFJJPQpOR19FU0MpOyB9CisJCXB1YmxpYyBUZXJtaW5h
bE5vZGUgU1RSSU5HX0VTQyhpbnQgaSkgeworCQkJcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5T
VFJJTkdfRVNDLCBpKTsKKwkJfQorCQlwdWJsaWMgUHJvYmVuenVzYXR6YmVzY2hyZWlidW5nQ29u
dGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnY9Cm9raW5nU3RhdGUpIHsKKwkJ
CXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBp
bnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9wcm9iZW56dXNhdHpiZXNjaHJlaWJ1PQpu
ZzsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3Rl
bmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIg
KSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclBybz0KYmVuenVzYXR6YmVzY2hyZWlidW5n
KHRoaXMpOworCQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRy
ZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxp
c3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdFByb2I9CmVuenVzYXR6YmVzY2hy
ZWlidW5nKHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIFByb2Jlbnp1c2F0emJlc2No
cmVpYnVuZ0NvbnRleHQgcHJvYmVuenVzYXR6YmVzY2hyZWlidW5nKCkgdD0KaHJvd3MgUmVjb2du
aXRpb25FeGNlcHRpb24geworCQlQcm9iZW56dXNhdHpiZXNjaHJlaWJ1bmdDb250ZXh0IF9sb2Nh
bGN0eCA9M0QgbmV3IFByb2Jlbnp1c2F0emJlc2NocmVpYnU9Cm5nQ29udGV4dChfY3R4LCBnZXRT
dGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMjAwLCBSVUxFX3Byb2Jlbnp1c2F0emJl
c2NocmVpYnVuZyk7CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2Nh
bGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg3MzUpOworCQkJbWF0Y2goUFJPQkVOWlVTQVRa
QkVTQ0hSRUlCVU5HKTsKKwkJCXNldFN0YXRlKDczNik7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgx
KTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7
CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJfSBlbHNlIHsKKwkJCQlj
b25zdW1lKCk7CisJCQl9CisJCQlzZXRTdGF0ZSg3NDApOworCQkJX2VyckhhbmRsZXIuc3luYyh0
aGlzKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQp
IHsKKwkJCQl7CisJCQkJeworCQkJCXNldFN0YXRlKDczNyk7CisJCQkJbWF0Y2goVF9fNCk7CisJ
CQkJfQorCQkJCX0KKwkJCQlzZXRTdGF0ZSg3NDIpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhp
cyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSg3NDMpOwor
CQkJbWF0Y2goU1RSSU5HKTsKKwkJCXNldFN0YXRlKDc0Nyk7CisJCQlfZXJySGFuZGxlci5zeW5j
KHRoaXMpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl3aGlsZSAoX2xhPTNEPTNEVF9f
NCkgeworCQkJCXsKKwkJCQl7CisJCQkJc2V0U3RhdGUoNzQ0KTsKKwkJCQltYXRjaChUX180KTsK
KwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDc0OSk7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0
aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCX0KKwkJCXNldFN0YXRlKDc1MCk7
CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVND
IHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRo
aXMpOworCQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQlzZXRTdGF0ZSg3NTQp
OworCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOwor
CQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQl7CisJCQkJeworCQkJCXNldFN0YXRlKDc1
MSk7CisJCQkJbWF0Y2goVF9fNCk7CisJCQkJfQorCQkJCX0KKwkJCQlzZXRTdGF0ZSg3NTYpOwor
CQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJ
CQl9CisJCQlzZXRTdGF0ZSg3NTcpOworCQkJbWF0Y2goU1RSSU5HKTsKKwkJCX0KKwkJfQorCQlj
YXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24g
PTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2Vyckhh
bmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgp
OworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBQ
emJfc0NvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5h
bE5vZGUgUFpCX1MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuUFpCX1MsIDApOyB9CisJ
CXB1YmxpYyBMaXN0PFRlcm1pbmFsTm9kZT4gU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW5zKExh
ZlBhcnNlci5TVFJJTkcpOz0KIH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoaW50IGkp
IHsKKwkJCXJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCBpKTsKKwkJfQorCQlwdWJs
aWMgVGVybWluYWxOb2RlIFNUUklOR19FU0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIu
U1RSSU5HX0VTQyw9CiAwKTsgfQorCQlwdWJsaWMgUHpiX3NDb250ZXh0KFBhcnNlclJ1bGVDb250
ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tp
bmdTdGF0ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyBy
ZXR1cm4gUlVMRV9wemJfczsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxl
KFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNl
b2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclB6Yj0KX3ModGhp
cyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxp
c3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVu
ZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0UHpiXz0Kcyh0aGlzKTsKKwkJfQorCX0K
KworCXB1YmxpYyBmaW5hbCBQemJfc0NvbnRleHQgcHpiX3MoKSB0aHJvd3MgUmVjb2duaXRpb25F
eGNlcHRpb24geworCQlQemJfc0NvbnRleHQgX2xvY2FsY3R4ID0zRCBuZXcgUHpiX3NDb250ZXh0
KF9jdHgsIGdldFN0YXRlKCkpOworCQllbnRlclJ1bGUoX2xvY2FsY3R4LCAyMDIsIFJVTEVfcHpi
X3MpOworCQlpbnQgX2xhOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEp
OworCQkJeworCQkJc2V0U3RhdGUoNzU5KTsKKwkJCW1hdGNoKFBaQl9TKTsKKwkJCXNldFN0YXRl
KDc2MCk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJ
TkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5s
aW5lKHRoaXMpOworCQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQlzZXRTdGF0
ZSg3NjQpOworCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxB
KDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQl7CisJCQkJeworCQkJCXNldFN0
YXRlKDc2MSk7CisJCQkJbWF0Y2goVF9fNCk7CisJCQkJfQorCQkJCX0KKwkJCQlzZXRTdGF0ZSg3
NjYpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEo
MSk7CisJCQl9CisJCQlzZXRTdGF0ZSg3NjcpOworCQkJbWF0Y2goU1RSSU5HKTsKKwkJCXNldFN0
YXRlKDc3MSk7CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJX2xhID0zRCBfaW5wdXQu
TEEoMSk7CisJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCXsKKwkJCQl7CisJCQkJc2V0
U3RhdGUoNzY4KTsKKwkJCQltYXRjaChUX180KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRl
KDc3Myk7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5M
QSgxKTsKKwkJCX0KKwkJCXNldFN0YXRlKDc3NCk7CisJCQltYXRjaChTVFJJTkcpOworCQkJc2V0
U3RhdGUoNzc4KTsKKwkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1
dC5MQSgxKTsKKwkJCXdoaWxlIChfbGE9M0Q9M0RUX180KSB7CisJCQkJeworCQkJCXsKKwkJCQlz
ZXRTdGF0ZSg3NzUpOworCQkJCW1hdGNoKFRfXzQpOworCQkJCX0KKwkJCQl9CisJCQkJc2V0U3Rh
dGUoNzgwKTsKKwkJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJCV9sYSA9M0QgX2lucHV0
LkxBKDEpOworCQkJfQorCQkJc2V0U3RhdGUoNzgxKTsKKwkJCW1hdGNoKFNUUklORyk7CisJCQl9
CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHgu
ZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsK
KwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJ
ZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0
aWMgY2xhc3MgTWVzc3dlcnRDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlw
dWJsaWMgVGVybWluYWxOb2RlIE1FU1NXRVJUKCkgeyByZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2Vy
Lk1FU1NXRVJULCAwKTs9CiB9CisJCXB1YmxpYyBMaXN0PFRlcm1pbmFsTm9kZT4gU1RSSU5HKCkg
eyByZXR1cm4gZ2V0VG9rZW5zKExhZlBhcnNlci5TVFJJTkcpOz0KIH0KKwkJcHVibGljIFRlcm1p
bmFsTm9kZSBTVFJJTkcoaW50IGkpIHsKKwkJCXJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RS
SU5HLCBpKTsKKwkJfQorCQlwdWJsaWMgTGlzdDxUZXJtaW5hbE5vZGU+IFNUUklOR19FU0MoKSB7
IHJldHVybiBnZXRUb2tlbnMoTGFmUGFyc2VyLlNUUkk9Ck5HX0VTQyk7IH0KKwkJcHVibGljIFRl
cm1pbmFsTm9kZSBTVFJJTkdfRVNDKGludCBpKSB7CisJCQlyZXR1cm4gZ2V0VG9rZW4oTGFmUGFy
c2VyLlNUUklOR19FU0MsIGkpOworCQl9CisJCXB1YmxpYyBNZXNzd2VydENvbnRleHQoUGFyc2Vy
UnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50
LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5k
ZXgoKSB7IHJldHVybiBSVUxFX21lc3N3ZXJ0OyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9p
ZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVu
ZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVy
TWVzPQpzd2VydCh0aGlzKTsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXhpdFJ1
bGUoUGFyc2VUcmVlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFu
Y2VvZiBMYWZMaXN0ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmV4aXRNZXNzPQp3ZXJ0
KHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIE1lc3N3ZXJ0Q29udGV4dCBtZXNzd2Vy
dCgpIHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7CisJCU1lc3N3ZXJ0Q29udGV4dCBfbG9j
YWxjdHggPTNEIG5ldyBNZXNzd2VydENvbnRleHQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVy
UnVsZShfbG9jYWxjdHgsIDIwNCwgUlVMRV9tZXNzd2VydCk7CisJCWludCBfbGE7CisJCXRyeSB7
CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJCQl7CisJCQlzZXRTdGF0ZSg3ODMp
OworCQkJbWF0Y2goTUVTU1dFUlQpOworCQkJc2V0U3RhdGUoNzg0KTsKKwkJCV9sYSA9M0QgX2lu
cHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RS
SU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2Ug
eworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCXNldFN0YXRlKDc4OCk7CisJCQlfZXJySGFuZGxl
ci5zeW5jKHRoaXMpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl3aGlsZSAoX2xhPTNE
PTNEVF9fNCkgeworCQkJCXsKKwkJCQl7CisJCQkJc2V0U3RhdGUoNzg1KTsKKwkJCQltYXRjaChU
X180KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDc5MCk7CisJCQkJX2VyckhhbmRsZXIu
c3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCX0KKwkJCXNldFN0YXRl
KDc5MSk7CisJCQltYXRjaChTVFJJTkcpOworCQkJc2V0U3RhdGUoNzk1KTsKKwkJCV9lcnJIYW5k
bGVyLnN5bmModGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCXdoaWxlIChfbGE9
M0Q9M0RUX180KSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRTdGF0ZSg3OTIpOworCQkJCW1hdGNo
KFRfXzQpOworCQkJCX0KKwkJCQl9CisJCQkJc2V0U3RhdGUoNzk3KTsKKwkJCQlfZXJySGFuZGxl
ci5zeW5jKHRoaXMpOworCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJfQorCQkJc2V0U3Rh
dGUoNzk4KTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNU
UklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJ
bmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCXNldFN0
YXRlKDgwMik7CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJX2xhID0zRCBfaW5wdXQu
TEEoMSk7CisJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCXsKKwkJCQl7CisJCQkJc2V0
U3RhdGUoNzk5KTsKKwkJCQltYXRjaChUX180KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRl
KDgwNCk7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5M
QSgxKTsKKwkJCX0KKwkJCXNldFN0YXRlKDgwNik7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsK
KwkJCWlmIChfbGE9M0Q9M0RTVFJJTkcpIHsKKwkJCQl7CisJCQkJc2V0U3RhdGUoODA1KTsKKwkJ
CQltYXRjaChTVFJJTkcpOworCQkJCX0KKwkJCX0KKworCQkJfQorCQl9CisJCWNhdGNoIChSZWNv
Z25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJ
CQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNv
dmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJ
cmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIE1lc3N3ZXJ0X3ND
b250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWluYWxOb2Rl
IE1FU1NXRVJUX1MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuTUVTU1dFUlRfUyw9CiAw
KTsgfQorCQlwdWJsaWMgTGlzdDxUZXJtaW5hbE5vZGU+IFNUUklORygpIHsgcmV0dXJuIGdldFRv
a2VucyhMYWZQYXJzZXIuU1RSSU5HKTs9CiB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5H
KGludCBpKSB7CisJCQlyZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgaSk7CisJCX0K
KwkJcHVibGljIE1lc3N3ZXJ0X3NDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50
IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7CisJCX0K
KwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVMRV9tZXNz
d2VydF9zOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVl
TGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0
ZW5lciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyTWVzPQpzd2VydF9zKHRoaXMpOwor
CQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5l
ciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkg
KChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdE1lc3M9CndlcnRfcyh0aGlzKTsKKwkJfQorCX0K
KworCXB1YmxpYyBmaW5hbCBNZXNzd2VydF9zQ29udGV4dCBtZXNzd2VydF9zKCkgdGhyb3dzIFJl
Y29nbml0aW9uRXhjZXB0aW9uIHsKKwkJTWVzc3dlcnRfc0NvbnRleHQgX2xvY2FsY3R4ID0zRCBu
ZXcgTWVzc3dlcnRfc0NvbnRleHQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9j
YWxjdHgsIDIwNiwgUlVMRV9tZXNzd2VydF9zKTsKKwkJaW50IF9sYTsKKwkJdHJ5IHsKKwkJCWVu
dGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDgwOCk7CisJCQlt
YXRjaChNRVNTV0VSVF9TKTsKKwkJCXNldFN0YXRlKDgwOSk7CisJCQltYXRjaChTVFJJTkcpOwor
CQkJc2V0U3RhdGUoODEzKTsKKwkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQlfbGEgPTNE
IF9pbnB1dC5MQSgxKTsKKwkJCXdoaWxlIChfbGE9M0Q9M0RUX180KSB7CisJCQkJeworCQkJCXsK
KwkJCQlzZXRTdGF0ZSg4MTApOworCQkJCW1hdGNoKFRfXzQpOworCQkJCX0KKwkJCQl9CisJCQkJ
c2V0U3RhdGUoODE1KTsKKwkJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJCV9sYSA9M0Qg
X2lucHV0LkxBKDEpOworCQkJfQorCQkJc2V0U3RhdGUoODE2KTsKKwkJCW1hdGNoKFNUUklORyk7
CisJCQlzZXRTdGF0ZSg4MjApOworCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCV9sYSA9
M0QgX2lucHV0LkxBKDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQl7CisJCQkJ
eworCQkJCXNldFN0YXRlKDgxNyk7CisJCQkJbWF0Y2goVF9fNCk7CisJCQkJfQorCQkJCX0KKwkJ
CQlzZXRTdGF0ZSg4MjIpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0z
RCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSg4MjMpOworCQkJbWF0Y2goU1RSSU5H
KTsKKwkJCXNldFN0YXRlKDgyNyk7CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJX2xh
ID0zRCBfaW5wdXQuTEEoMSk7CisJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCXsKKwkJ
CQl7CisJCQkJc2V0U3RhdGUoODI0KTsKKwkJCQltYXRjaChUX180KTsKKwkJCQl9CisJCQkJfQor
CQkJCXNldFN0YXRlKDgyOSk7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEg
PTNEIF9pbnB1dC5MQSgxKTsKKwkJCX0KKwkJCXNldFN0YXRlKDgzMSk7CisJCQlfbGEgPTNEIF9p
bnB1dC5MQSgxKTsKKwkJCWlmIChfbGE9M0Q9M0RTVFJJTkcpIHsKKwkJCQl7CisJCQkJc2V0U3Rh
dGUoODMwKTsKKwkJCQltYXRjaChTVFJJTkcpOworCQkJCX0KKwkJCX0KKworCQkJfQorCQl9CisJ
CWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlv
biA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJy
SGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxl
KCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNz
IE1lc3N3ZXJ0X2lDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMg
VGVybWluYWxOb2RlIE1FU1NXRVJUX0koKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuTUVT
U1dFUlRfSSw9CiAwKTsgfQorCQlwdWJsaWMgTGlzdDxUZXJtaW5hbE5vZGU+IFNUUklORygpIHsg
cmV0dXJuIGdldFRva2VucyhMYWZQYXJzZXIuU1RSSU5HKTs9CiB9CisJCXB1YmxpYyBUZXJtaW5h
bE5vZGUgU1RSSU5HKGludCBpKSB7CisJCQlyZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklO
RywgaSk7CisJCX0KKwkJcHVibGljIExpc3Q8VGVybWluYWxOb2RlPiBTVFJJTkdfRVNDKCkgeyBy
ZXR1cm4gZ2V0VG9rZW5zKExhZlBhcnNlci5TVFJJPQpOR19FU0MpOyB9CisJCXB1YmxpYyBUZXJt
aW5hbE5vZGUgU1RSSU5HX0VTQyhpbnQgaSkgeworCQkJcmV0dXJuIGdldFRva2VuKExhZlBhcnNl
ci5TVFJJTkdfRVNDLCBpKTsKKwkJfQorCQlwdWJsaWMgTWVzc3dlcnRfaUNvbnRleHQoUGFyc2Vy
UnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50
LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5k
ZXgoKSB7IHJldHVybiBSVUxFX21lc3N3ZXJ0X2k7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2
b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0
ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50
ZXJNZXM9CnN3ZXJ0X2kodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4
aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGlu
c3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0TWVzcz0K
d2VydF9pKHRoaXMpOworCQl9CisJfQorCisJcHVibGljIGZpbmFsIE1lc3N3ZXJ0X2lDb250ZXh0
IG1lc3N3ZXJ0X2koKSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb24geworCQlNZXNzd2VydF9p
Q29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBNZXNzd2VydF9pQ29udGV4dChfY3R4LCBnZXRTdGF0
ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMjA4LCBSVUxFX21lc3N3ZXJ0X2kpOworCQlp
bnQgX2xhOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJewor
CQkJc2V0U3RhdGUoODMzKTsKKwkJCW1hdGNoKE1FU1NXRVJUX0kpOworCQkJc2V0U3RhdGUoODM0
KTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19F
U0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUo
dGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCXNldFN0YXRlKDgz
OCk7CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7
CisJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCXsKKwkJCQl7CisJCQkJc2V0U3RhdGUo
ODM1KTsKKwkJCQltYXRjaChUX180KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDg0MCk7
CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsK
KwkJCX0KKwkJCXNldFN0YXRlKDg0MSk7CisJCQltYXRjaChTVFJJTkcpOworCQkJc2V0U3RhdGUo
ODQ1KTsKKwkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgx
KTsKKwkJCXdoaWxlIChfbGE9M0Q9M0RUX180KSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRTdGF0
ZSg4NDIpOworCQkJCW1hdGNoKFRfXzQpOworCQkJCX0KKwkJCQl9CisJCQkJc2V0U3RhdGUoODQ3
KTsKKwkJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEp
OworCQkJfQorCQkJc2V0U3RhdGUoODQ4KTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJ
aWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9l
cnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUo
KTsKKwkJCX0KKwkJCXNldFN0YXRlKDg1Mik7CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOwor
CQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJ
CXsKKwkJCQl7CisJCQkJc2V0U3RhdGUoODQ5KTsKKwkJCQltYXRjaChUX180KTsKKwkJCQl9CisJ
CQkJfQorCQkJCXNldFN0YXRlKDg1NCk7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJ
CQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCX0KKwkJCXNldFN0YXRlKDg2Mik7CisJCQlzd2l0
Y2ggKCBnZXRJbnRlcnByZXRlcigpLmFkYXB0aXZlUHJlZGljdChfaW5wdXQsNjEsX2N0eCkgKSB7
CisJCQljYXNlIDE6CisJCQkJeworCQkJCXNldFN0YXRlKDg1NSk7CisJCQkJbWF0Y2goU1RSSU5H
KTsKKwkJCQlzZXRTdGF0ZSg4NTkpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJ
X2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQkJ
eworCQkJCQl7CisJCQkJCXNldFN0YXRlKDg1Nik7CisJCQkJCW1hdGNoKFRfXzQpOworCQkJCQl9
CisJCQkJCX0KKwkJCQkJc2V0U3RhdGUoODYxKTsKKwkJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlz
KTsKKwkJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQkJfQorCQkJCX0KKwkJCQlicmVhazsK
KwkJCX0KKwkJCXNldFN0YXRlKDg3MSk7CisJCQlzd2l0Y2ggKCBnZXRJbnRlcnByZXRlcigpLmFk
YXB0aXZlUHJlZGljdChfaW5wdXQsNjMsX2N0eCkgKSB7CisJCQljYXNlIDE6CisJCQkJeworCQkJ
CXNldFN0YXRlKDg2NCk7CisJCQkJbWF0Y2goU1RSSU5HKTsKKwkJCQlzZXRTdGF0ZSg4NjgpOwor
CQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJ
CQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQkJeworCQkJCQl7CisJCQkJCXNldFN0YXRl
KDg2NSk7CisJCQkJCW1hdGNoKFRfXzQpOworCQkJCQl9CisJCQkJCX0KKwkJCQkJc2V0U3RhdGUo
ODcwKTsKKwkJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQkJX2xhID0zRCBfaW5wdXQu
TEEoMSk7CisJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCXNldFN0YXRlKDg4MCk7
CisJCQlzd2l0Y2ggKCBnZXRJbnRlcnByZXRlcigpLmFkYXB0aXZlUHJlZGljdChfaW5wdXQsNjUs
X2N0eCkgKSB7CisJCQljYXNlIDE6CisJCQkJeworCQkJCXNldFN0YXRlKDg3Myk7CisJCQkJbWF0
Y2goU1RSSU5HKTsKKwkJCQlzZXRTdGF0ZSg4NzcpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhp
cyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQp
IHsKKwkJCQkJeworCQkJCQl7CisJCQkJCXNldFN0YXRlKDg3NCk7CisJCQkJCW1hdGNoKFRfXzQp
OworCQkJCQl9CisJCQkJCX0KKwkJCQkJc2V0U3RhdGUoODc5KTsKKwkJCQkJX2VyckhhbmRsZXIu
c3luYyh0aGlzKTsKKwkJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQkJfQorCQkJCX0KKwkJ
CQlicmVhazsKKwkJCX0KKwkJCXNldFN0YXRlKDg4Myk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgx
KTsKKwkJCWlmIChfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgeworCQkJ
CXsKKwkJCQlzZXRTdGF0ZSg4ODIpOworCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJCWlm
ICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQkJX2Vy
ckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCQl9IGVsc2UgeworCQkJCQljb25zdW1l
KCk7CisJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlv
bkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJy
SGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRo
aXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJu
IF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIE1lc3N3ZXJ0X2dDb250ZXh0
IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQgeworCQlwdWJsaWMgVGVybWluYWxOb2RlIE1FU1NX
RVJUX0coKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuTUVTU1dFUlRfRyw9CiAwKTsgfQor
CQlwdWJsaWMgTGlzdDxUZXJtaW5hbE5vZGU+IFNUUklORygpIHsgcmV0dXJuIGdldFRva2VucyhM
YWZQYXJzZXIuU1RSSU5HKTs9CiB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKGludCBp
KSB7CisJCQlyZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgaSk7CisJCX0KKwkJcHVi
bGljIExpc3Q8VGVybWluYWxOb2RlPiBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW5zKExh
ZlBhcnNlci5TVFJJPQpOR19FU0MpOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HX0VT
QyhpbnQgaSkgeworCQkJcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkdfRVNDLCBpKTsK
KwkJfQorCQlwdWJsaWMgTWVzc3dlcnRfZ0NvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50
LCBpbnQgaW52b2tpbmdTdGF0ZSkgeworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsK
KwkJfQorCQlAT3ZlcnJpZGUgcHVibGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxF
X21lc3N3ZXJ0X2c7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJz
ZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExh
Zkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJNZXM9CnN3ZXJ0X2codGhp
cyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxp
c3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVu
ZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0TWVzcz0Kd2VydF9nKHRoaXMpOworCQl9
CisJfQorCisJcHVibGljIGZpbmFsIE1lc3N3ZXJ0X2dDb250ZXh0IG1lc3N3ZXJ0X2coKSB0aHJv
d3MgUmVjb2duaXRpb25FeGNlcHRpb24geworCQlNZXNzd2VydF9nQ29udGV4dCBfbG9jYWxjdHgg
PTNEIG5ldyBNZXNzd2VydF9nQ29udGV4dChfY3R4LCBnZXRTdGF0ZSgpKTsKKwkJZW50ZXJSdWxl
KF9sb2NhbGN0eCwgMjEwLCBSVUxFX21lc3N3ZXJ0X2cpOworCQlpbnQgX2xhOworCQl0cnkgewor
CQkJZW50ZXJPdXRlckFsdChfbG9jYWxjdHgsIDEpOworCQkJeworCQkJc2V0U3RhdGUoODg1KTsK
KwkJCW1hdGNoKE1FU1NXRVJUX0cpOworCQkJc2V0U3RhdGUoODg2KTsKKwkJCV9sYSA9M0QgX2lu
cHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RS
SU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2Ug
eworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCXNldFN0YXRlKDg5MCk7CisJCQlfZXJySGFuZGxl
ci5zeW5jKHRoaXMpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl3aGlsZSAoX2xhPTNE
PTNEVF9fNCkgeworCQkJCXsKKwkJCQl7CisJCQkJc2V0U3RhdGUoODg3KTsKKwkJCQltYXRjaChU
X180KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDg5Mik7CisJCQkJX2VyckhhbmRsZXIu
c3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCX0KKwkJCXNldFN0YXRl
KDg5Myk7CisJCQltYXRjaChTVFJJTkcpOworCQkJc2V0U3RhdGUoODk3KTsKKwkJCV9lcnJIYW5k
bGVyLnN5bmModGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCXdoaWxlIChfbGE9
M0Q9M0RUX180KSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRTdGF0ZSg4OTQpOworCQkJCW1hdGNo
KFRfXzQpOworCQkJCX0KKwkJCQl9CisJCQkJc2V0U3RhdGUoODk5KTsKKwkJCQlfZXJySGFuZGxl
ci5zeW5jKHRoaXMpOworCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJfQorCQkJc2V0U3Rh
dGUoOTAwKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNU
UklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJ
bmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCXNldFN0
YXRlKDkwNCk7CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJX2xhID0zRCBfaW5wdXQu
TEEoMSk7CisJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCXsKKwkJCQl7CisJCQkJc2V0
U3RhdGUoOTAxKTsKKwkJCQltYXRjaChUX180KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRl
KDkwNik7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5M
QSgxKTsKKwkJCX0KKwkJCXNldFN0YXRlKDkxNCk7CisJCQlzd2l0Y2ggKCBnZXRJbnRlcnByZXRl
cigpLmFkYXB0aXZlUHJlZGljdChfaW5wdXQsNzEsX2N0eCkgKSB7CisJCQljYXNlIDE6CisJCQkJ
eworCQkJCXNldFN0YXRlKDkwNyk7CisJCQkJbWF0Y2goU1RSSU5HKTsKKwkJCQlzZXRTdGF0ZSg5
MTEpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEo
MSk7CisJCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQkJeworCQkJCQl7CisJCQkJCXNl
dFN0YXRlKDkwOCk7CisJCQkJCW1hdGNoKFRfXzQpOworCQkJCQl9CisJCQkJCX0KKwkJCQkJc2V0
U3RhdGUoOTEzKTsKKwkJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQkJX2xhID0zRCBf
aW5wdXQuTEEoMSk7CisJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCXNldFN0YXRl
KDkyMyk7CisJCQlzd2l0Y2ggKCBnZXRJbnRlcnByZXRlcigpLmFkYXB0aXZlUHJlZGljdChfaW5w
dXQsNzMsX2N0eCkgKSB7CisJCQljYXNlIDE6CisJCQkJeworCQkJCXNldFN0YXRlKDkxNik7CisJ
CQkJbWF0Y2goU1RSSU5HKTsKKwkJCQlzZXRTdGF0ZSg5MjApOworCQkJCV9lcnJIYW5kbGVyLnN5
bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQkJd2hpbGUgKF9sYT0zRD0z
RFRfXzQpIHsKKwkJCQkJeworCQkJCQl7CisJCQkJCXNldFN0YXRlKDkxNyk7CisJCQkJCW1hdGNo
KFRfXzQpOworCQkJCQl9CisJCQkJCX0KKwkJCQkJc2V0U3RhdGUoOTIyKTsKKwkJCQkJX2Vyckhh
bmRsZXIuc3luYyh0aGlzKTsKKwkJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQkJfQorCQkJ
CX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCXNldFN0YXRlKDkzMik7CisJCQlzd2l0Y2ggKCBnZXRJ
bnRlcnByZXRlcigpLmFkYXB0aXZlUHJlZGljdChfaW5wdXQsNzUsX2N0eCkgKSB7CisJCQljYXNl
IDE6CisJCQkJeworCQkJCXNldFN0YXRlKDkyNSk7CisJCQkJbWF0Y2goU1RSSU5HKTsKKwkJCQlz
ZXRTdGF0ZSg5MjkpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBf
aW5wdXQuTEEoMSk7CisJCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQkJeworCQkJCQl7
CisJCQkJCXNldFN0YXRlKDkyNik7CisJCQkJCW1hdGNoKFRfXzQpOworCQkJCQl9CisJCQkJCX0K
KwkJCQkJc2V0U3RhdGUoOTMxKTsKKwkJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQkJ
X2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJ
CXNldFN0YXRlKDkzNSk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmIChfbGE9M0Q9
M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgeworCQkJCXsKKwkJCQlzZXRTdGF0ZSg5
MzQpOworCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJCWlmICggIShfbGE9M0Q9M0RTVFJJ
TkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQkJX2VyckhhbmRsZXIucmVjb3Zlcklu
bGluZSh0aGlzKTsKKwkJCQl9IGVsc2UgeworCQkJCQljb25zdW1lKCk7CisJCQkJfQorCQkJCX0K
KwkJCX0KKworCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgewor
CQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJv
cih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlm
aW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisK
KwlwdWJsaWMgc3RhdGljIGNsYXNzIE1lc3N3ZXJ0X253Z0NvbnRleHQgZXh0ZW5kcyBQYXJzZXJS
dWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgTUVTU1dFUlRfTldHKCkgeyByZXR1
cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLk1FU1NXRVJUXz0KTldHLCAwKTsgfQorCQlwdWJsaWMgTGlz
dDxUZXJtaW5hbE5vZGU+IFNUUklORygpIHsgcmV0dXJuIGdldFRva2VucyhMYWZQYXJzZXIuU1RS
SU5HKTs9CiB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKGludCBpKSB7CisJCQlyZXR1
cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgaSk7CisJCX0KKwkJcHVibGljIExpc3Q8VGVy
bWluYWxOb2RlPiBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW5zKExhZlBhcnNlci5TVFJJ
PQpOR19FU0MpOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HX0VTQyhpbnQgaSkgewor
CQkJcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkdfRVNDLCBpKTsKKwkJfQorCQlwdWJs
aWMgTWVzc3dlcnRfbndnQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZv
a2luZ1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBP
dmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfbWVzc3dlcnRf
bndnOyB9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlz
dGVuZXIgbGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5l
ciApICgoTGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyTWVzPQpzd2VydF9ud2codGhpcyk7CisJ
CX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVy
IGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAo
KExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0TWVzcz0Kd2VydF9ud2codGhpcyk7CisJCX0KKwl9
CisKKwlwdWJsaWMgZmluYWwgTWVzc3dlcnRfbndnQ29udGV4dCBtZXNzd2VydF9ud2coKSB0aHJv
d3MgUmVjb2duaXRpb25FeGNlcHRpPQpvbiB7CisJCU1lc3N3ZXJ0X253Z0NvbnRleHQgX2xvY2Fs
Y3R4ID0zRCBuZXcgTWVzc3dlcnRfbndnQ29udGV4dChfY3R4LCBnZXRTdGF0ZT0KKCkpOworCQll
bnRlclJ1bGUoX2xvY2FsY3R4LCAyMTIsIFJVTEVfbWVzc3dlcnRfbndnKTsKKwkJaW50IF9sYTsK
KwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0
YXRlKDkzNyk7CisJCQltYXRjaChNRVNTV0VSVF9OV0cpOworCQkJc2V0U3RhdGUoOTM4KTsKKwkJ
CV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19FU0MgfHwg
X2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7
CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCXNldFN0YXRlKDk0Mik7CisJ
CQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl3
aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCXsKKwkJCQl7CisJCQkJc2V0U3RhdGUoOTM5KTsK
KwkJCQltYXRjaChUX180KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDk0NCk7CisJCQkJ
X2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCX0K
KwkJCXNldFN0YXRlKDk0NSk7CisJCQltYXRjaChTVFJJTkcpOworCQkJc2V0U3RhdGUoOTQ5KTsK
KwkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJ
CXdoaWxlIChfbGE9M0Q9M0RUX180KSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRTdGF0ZSg5NDYp
OworCQkJCW1hdGNoKFRfXzQpOworCQkJCX0KKwkJCQl9CisJCQkJc2V0U3RhdGUoOTUxKTsKKwkJ
CQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJ
fQorCQkJc2V0U3RhdGUoOTUyKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAh
KF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5k
bGVyLnJlY292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJ
CX0KKwkJCXNldFN0YXRlKDk1Nik7CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJX2xh
ID0zRCBfaW5wdXQuTEEoMSk7CisJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCXsKKwkJ
CQl7CisJCQkJc2V0U3RhdGUoOTUzKTsKKwkJCQltYXRjaChUX180KTsKKwkJCQl9CisJCQkJfQor
CQkJCXNldFN0YXRlKDk1OCk7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEg
PTNEIF9pbnB1dC5MQSgxKTsKKwkJCX0KKwkJCXNldFN0YXRlKDk2Nik7CisJCQlzd2l0Y2ggKCBn
ZXRJbnRlcnByZXRlcigpLmFkYXB0aXZlUHJlZGljdChfaW5wdXQsODEsX2N0eCkgKSB7CisJCQlj
YXNlIDE6CisJCQkJeworCQkJCXNldFN0YXRlKDk1OSk7CisJCQkJbWF0Y2goU1RSSU5HKTsKKwkJ
CQlzZXRTdGF0ZSg5NjMpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0z
RCBfaW5wdXQuTEEoMSk7CisJCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQkJeworCQkJ
CQl7CisJCQkJCXNldFN0YXRlKDk2MCk7CisJCQkJCW1hdGNoKFRfXzQpOworCQkJCQl9CisJCQkJ
CX0KKwkJCQkJc2V0U3RhdGUoOTY1KTsKKwkJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJ
CQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCX0K
KwkJCXNldFN0YXRlKDk2OSk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmIChfbGE9
M0Q9M0RTVFJJTkcpIHsKKwkJCQl7CisJCQkJc2V0U3RhdGUoOTY4KTsKKwkJCQltYXRjaChTVFJJ
TkcpOworCQkJCX0KKwkJCX0KKworCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2Vw
dGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxl
ci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJl
KTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2Nh
bGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIE1lc3N3ZXJ0X253Z19zQ29udGV4dCBl
eHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGljIFRlcm1pbmFsTm9kZSBNRVNTV0VS
VF9OV0dfUygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5NRVNTV0VSPQpUX05XR19TLCAw
KTsgfQorCQlwdWJsaWMgTGlzdDxUZXJtaW5hbE5vZGU+IFNUUklORygpIHsgcmV0dXJuIGdldFRv
a2VucyhMYWZQYXJzZXIuU1RSSU5HKTs9CiB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5H
KGludCBpKSB7CisJCQlyZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgaSk7CisJCX0K
KwkJcHVibGljIE1lc3N3ZXJ0X253Z19zQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQs
IGludCBpbnZva2luZ1N0YXRlPQopIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7
CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVM
RV9tZXNzd2VydF9ud2dfczsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxl
KFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNl
b2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlck1lcz0Kc3dlcnRf
bndnX3ModGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBh
cnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2Yg
TGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0TWVzcz0Kd2VydF9ud2df
cyh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBNZXNzd2VydF9ud2dfc0NvbnRleHQg
bWVzc3dlcnRfbndnX3MoKSB0aHJvd3MgUmVjb2duaXRpb25FeGM9CmVwdGlvbiB7CisJCU1lc3N3
ZXJ0X253Z19zQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBNZXNzd2VydF9ud2dfc0NvbnRleHQo
X2N0eCwgZ2V0Uz0KdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMjE0LCBSVUxFX21l
c3N3ZXJ0X253Z19zKTsKKwkJaW50IF9sYTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xv
Y2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDk3MSk7CisJCQltYXRjaChNRVNTV0VSVF9O
V0dfUyk7CisJCQlzZXRTdGF0ZSg5NzIpOworCQkJbWF0Y2goU1RSSU5HKTsKKwkJCXNldFN0YXRl
KDk3Nik7CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJX2xhID0zRCBfaW5wdXQuTEEo
MSk7CisJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCXsKKwkJCQl7CisJCQkJc2V0U3Rh
dGUoOTczKTsKKwkJCQltYXRjaChUX180KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDk3
OCk7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgx
KTsKKwkJCX0KKwkJCXNldFN0YXRlKDk3OSk7CisJCQltYXRjaChTVFJJTkcpOworCQkJc2V0U3Rh
dGUoOTgzKTsKKwkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1dC5M
QSgxKTsKKwkJCXdoaWxlIChfbGE9M0Q9M0RUX180KSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRT
dGF0ZSg5ODApOworCQkJCW1hdGNoKFRfXzQpOworCQkJCX0KKwkJCQl9CisJCQkJc2V0U3RhdGUo
OTg1KTsKKwkJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJCV9sYSA9M0QgX2lucHV0LkxB
KDEpOworCQkJfQorCQkJc2V0U3RhdGUoOTg2KTsKKwkJCW1hdGNoKFNUUklORyk7CisJCQlzZXRT
dGF0ZSg5OTApOworCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCV9sYSA9M0QgX2lucHV0
LkxBKDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQl7CisJCQkJeworCQkJCXNl
dFN0YXRlKDk4Nyk7CisJCQkJbWF0Y2goVF9fNCk7CisJCQkJfQorCQkJCX0KKwkJCQlzZXRTdGF0
ZSg5OTIpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQu
TEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSgxMDAwKTsKKwkJCXN3aXRjaCAoIGdldEludGVycHJl
dGVyKCkuYWRhcHRpdmVQcmVkaWN0KF9pbnB1dCw4NyxfY3R4KSApIHsKKwkJCWNhc2UgMToKKwkJ
CQl7CisJCQkJc2V0U3RhdGUoOTkzKTsKKwkJCQltYXRjaChTVFJJTkcpOworCQkJCXNldFN0YXRl
KDk5Nyk7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5M
QSgxKTsKKwkJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCQl7CisJCQkJCXsKKwkJCQkJ
c2V0U3RhdGUoOTk0KTsKKwkJCQkJbWF0Y2goVF9fNCk7CisJCQkJCX0KKwkJCQkJfQorCQkJCQlz
ZXRTdGF0ZSg5OTkpOworCQkJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJCQlfbGEgPTNE
IF9pbnB1dC5MQSgxKTsKKwkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJc2V0U3Rh
dGUoMTAwMyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmIChfbGE9M0Q9M0RTVFJJ
TkcpIHsKKwkJCQl7CisJCQkJc2V0U3RhdGUoMTAwMik7CisJCQkJbWF0Y2goU1RSSU5HKTsKKwkJ
CQl9CisJCQl9CisKKwkJCX0KKwkJfQorCQljYXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUp
IHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24gPTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0
RXJyb3IodGhpcywgcmUpOworCQkJX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0K
KwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgpOworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJ
fQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBNZXNzd2VydF9ud2dfaUNvbnRleHQgZXh0ZW5kcyBQ
YXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgTUVTU1dFUlRfTldHX0ko
KSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuTUVTU1dFUj0KVF9OV0dfSSwgMCk7IH0KKwkJ
cHVibGljIExpc3Q8VGVybWluYWxOb2RlPiBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbnMoTGFm
UGFyc2VyLlNUUklORyk7PQogfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORyhpbnQgaSkg
eworCQkJcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkcsIGkpOworCQl9CisJCXB1Ymxp
YyBMaXN0PFRlcm1pbmFsTm9kZT4gU1RSSU5HX0VTQygpIHsgcmV0dXJuIGdldFRva2VucyhMYWZQ
YXJzZXIuU1RSST0KTkdfRVNDKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklOR19FU0Mo
aW50IGkpIHsKKwkJCXJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VTQywgaSk7CisJ
CX0KKwkJcHVibGljIE1lc3N3ZXJ0X253Z19pQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJl
bnQsIGludCBpbnZva2luZ1N0YXRlPQopIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0
ZSk7CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4g
UlVMRV9tZXNzd2VydF9ud2dfaTsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJS
dWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3Rh
bmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlck1lcz0Kc3dl
cnRfbndnX2kodGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxl
KFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNl
b2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0TWVzcz0Kd2VydF9u
d2dfaSh0aGlzKTsKKwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBNZXNzd2VydF9ud2dfaUNvbnRl
eHQgbWVzc3dlcnRfbndnX2koKSB0aHJvd3MgUmVjb2duaXRpb25FeGM9CmVwdGlvbiB7CisJCU1l
c3N3ZXJ0X253Z19pQ29udGV4dCBfbG9jYWxjdHggPTNEIG5ldyBNZXNzd2VydF9ud2dfaUNvbnRl
eHQoX2N0eCwgZ2V0Uz0KdGF0ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMjE2LCBSVUxF
X21lc3N3ZXJ0X253Z19pKTsKKwkJaW50IF9sYTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQo
X2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNldFN0YXRlKDEwMDUpOworCQkJbWF0Y2goTUVTU1dF
UlRfTldHX0kpOworCQkJc2V0U3RhdGUoMTAwNik7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsK
KwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJ
CQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJfSBlbHNlIHsKKwkJCQljb25z
dW1lKCk7CisJCQl9CisJCQlzZXRTdGF0ZSgxMDEwKTsKKwkJCV9lcnJIYW5kbGVyLnN5bmModGhp
cyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCXdoaWxlIChfbGE9M0Q9M0RUX180KSB7
CisJCQkJeworCQkJCXsKKwkJCQlzZXRTdGF0ZSgxMDA3KTsKKwkJCQltYXRjaChUX180KTsKKwkJ
CQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDEwMTIpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhp
cyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSgxMDEzKTsK
KwkJCW1hdGNoKFNUUklORyk7CisJCQlzZXRTdGF0ZSgxMDE3KTsKKwkJCV9lcnJIYW5kbGVyLnN5
bmModGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCXdoaWxlIChfbGE9M0Q9M0RU
X180KSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRTdGF0ZSgxMDE0KTsKKwkJCQltYXRjaChUX180
KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDEwMTkpOworCQkJCV9lcnJIYW5kbGVyLnN5
bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSgx
MDIwKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklO
R19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxp
bmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCXNldFN0YXRl
KDEwMjQpOworCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxB
KDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQl7CisJCQkJeworCQkJCXNldFN0
YXRlKDEwMjEpOworCQkJCW1hdGNoKFRfXzQpOworCQkJCX0KKwkJCQl9CisJCQkJc2V0U3RhdGUo
MTAyNik7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5M
QSgxKTsKKwkJCX0KKwkJCXNldFN0YXRlKDEwMzQpOworCQkJc3dpdGNoICggZ2V0SW50ZXJwcmV0
ZXIoKS5hZGFwdGl2ZVByZWRpY3QoX2lucHV0LDkzLF9jdHgpICkgeworCQkJY2FzZSAxOgorCQkJ
CXsKKwkJCQlzZXRTdGF0ZSgxMDI3KTsKKwkJCQltYXRjaChTVFJJTkcpOworCQkJCXNldFN0YXRl
KDEwMzEpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQu
TEEoMSk7CisJCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQkJeworCQkJCQl7CisJCQkJ
CXNldFN0YXRlKDEwMjgpOworCQkJCQltYXRjaChUX180KTsKKwkJCQkJfQorCQkJCQl9CisJCQkJ
CXNldFN0YXRlKDEwMzMpOworCQkJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJCQlfbGEg
PTNEIF9pbnB1dC5MQSgxKTsKKwkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJc2V0
U3RhdGUoMTA0Myk7CisJCQlzd2l0Y2ggKCBnZXRJbnRlcnByZXRlcigpLmFkYXB0aXZlUHJlZGlj
dChfaW5wdXQsOTUsX2N0eCkgKSB7CisJCQljYXNlIDE6CisJCQkJeworCQkJCXNldFN0YXRlKDEw
MzYpOworCQkJCW1hdGNoKFNUUklORyk7CisJCQkJc2V0U3RhdGUoMTA0MCk7CisJCQkJX2Vyckhh
bmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCQl3aGlsZSAo
X2xhPTNEPTNEVF9fNCkgeworCQkJCQl7CisJCQkJCXsKKwkJCQkJc2V0U3RhdGUoMTAzNyk7CisJ
CQkJCW1hdGNoKFRfXzQpOworCQkJCQl9CisJCQkJCX0KKwkJCQkJc2V0U3RhdGUoMTA0Mik7CisJ
CQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOwor
CQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCQlzZXRTdGF0ZSgxMDUyKTsKKwkJCXN3
aXRjaCAoIGdldEludGVycHJldGVyKCkuYWRhcHRpdmVQcmVkaWN0KF9pbnB1dCw5NyxfY3R4KSAp
IHsKKwkJCWNhc2UgMToKKwkJCQl7CisJCQkJc2V0U3RhdGUoMTA0NSk7CisJCQkJbWF0Y2goU1RS
SU5HKTsKKwkJCQlzZXRTdGF0ZSgxMDQ5KTsKKwkJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOwor
CQkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJCXdoaWxlIChfbGE9M0Q9M0RUX180KSB7CisJ
CQkJCXsKKwkJCQkJeworCQkJCQlzZXRTdGF0ZSgxMDQ2KTsKKwkJCQkJbWF0Y2goVF9fNCk7CisJ
CQkJCX0KKwkJCQkJfQorCQkJCQlzZXRTdGF0ZSgxMDUxKTsKKwkJCQkJX2VyckhhbmRsZXIuc3lu
Yyh0aGlzKTsKKwkJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQkJfQorCQkJCX0KKwkJCQli
cmVhazsKKwkJCX0KKwkJCXNldFN0YXRlKDEwNjEpOworCQkJc3dpdGNoICggZ2V0SW50ZXJwcmV0
ZXIoKS5hZGFwdGl2ZVByZWRpY3QoX2lucHV0LDk5LF9jdHgpICkgeworCQkJY2FzZSAxOgorCQkJ
CXsKKwkJCQlzZXRTdGF0ZSgxMDU0KTsKKwkJCQltYXRjaChTVFJJTkcpOworCQkJCXNldFN0YXRl
KDEwNTgpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQu
TEEoMSk7CisJCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQkJeworCQkJCQl7CisJCQkJ
CXNldFN0YXRlKDEwNTUpOworCQkJCQltYXRjaChUX180KTsKKwkJCQkJfQorCQkJCQl9CisJCQkJ
CXNldFN0YXRlKDEwNjApOworCQkJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJCQlfbGEg
PTNEIF9pbnB1dC5MQSgxKTsKKwkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJc2V0
U3RhdGUoMTA2Myk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9
M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNv
dmVySW5saW5lKHRoaXMpOworCQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQl9
CisJCX0KKwkJY2F0Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHgu
ZXhjZXB0aW9uID0zRCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsK
KwkJCV9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJ
ZXhpdFJ1bGUoKTsKKwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0
aWMgY2xhc3MgTWVzc3dlcnRfbndnX2dDb250ZXh0IGV4dGVuZHMgUGFyc2VyUnVsZUNvbnRleHQg
eworCQlwdWJsaWMgVGVybWluYWxOb2RlIE1FU1NXRVJUX05XR19HKCkgeyByZXR1cm4gZ2V0VG9r
ZW4oTGFmUGFyc2VyLk1FU1NXRVI9ClRfTldHX0csIDApOyB9CisJCXB1YmxpYyBMaXN0PFRlcm1p
bmFsTm9kZT4gU1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW5zKExhZlBhcnNlci5TVFJJTkcpOz0K
IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoaW50IGkpIHsKKwkJCXJldHVybiBnZXRU
b2tlbihMYWZQYXJzZXIuU1RSSU5HLCBpKTsKKwkJfQorCQlwdWJsaWMgTGlzdDxUZXJtaW5hbE5v
ZGU+IFNUUklOR19FU0MoKSB7IHJldHVybiBnZXRUb2tlbnMoTGFmUGFyc2VyLlNUUkk9Ck5HX0VT
Qyk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkdfRVNDKGludCBpKSB7CisJCQlyZXR1
cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsIGkpOworCQl9CisJCXB1YmxpYyBNZXNz
d2VydF9ud2dfZ0NvbnRleHQoUGFyc2VyUnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdT
dGF0ZT0KKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVy
cmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfbWVzc3dlcnRfbndn
X2c7IH0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0
ZW5lciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVy
ICkgKChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZW50ZXJNZXM9CnN3ZXJ0X253Z19nKHRoaXMpOwor
CQl9CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5l
ciBsaXN0ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkg
KChMYWZMaXN0ZW5lcilsaXN0ZW5lcikuZXhpdE1lc3M9CndlcnRfbndnX2codGhpcyk7CisJCX0K
Kwl9CisKKwlwdWJsaWMgZmluYWwgTWVzc3dlcnRfbndnX2dDb250ZXh0IG1lc3N3ZXJ0X253Z19n
KCkgdGhyb3dzIFJlY29nbml0aW9uRXhjPQplcHRpb24geworCQlNZXNzd2VydF9ud2dfZ0NvbnRl
eHQgX2xvY2FsY3R4ID0zRCBuZXcgTWVzc3dlcnRfbndnX2dDb250ZXh0KF9jdHgsIGdldFM9CnRh
dGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDIxOCwgUlVMRV9tZXNzd2VydF9ud2dfZyk7
CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJ
CQl7CisJCQlzZXRTdGF0ZSgxMDY1KTsKKwkJCW1hdGNoKE1FU1NXRVJUX05XR19HKTsKKwkJCXNl
dFN0YXRlKDEwNjYpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xhPTNE
PTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIucmVj
b3ZlcklubGluZSh0aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQorCQkJ
c2V0U3RhdGUoMTA3MCk7CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJX2xhID0zRCBf
aW5wdXQuTEEoMSk7CisJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCXsKKwkJCQl7CisJ
CQkJc2V0U3RhdGUoMTA2Nyk7CisJCQkJbWF0Y2goVF9fNCk7CisJCQkJfQorCQkJCX0KKwkJCQlz
ZXRTdGF0ZSgxMDcyKTsKKwkJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJCV9sYSA9M0Qg
X2lucHV0LkxBKDEpOworCQkJfQorCQkJc2V0U3RhdGUoMTA3Myk7CisJCQltYXRjaChTVFJJTkcp
OworCQkJc2V0U3RhdGUoMTA3Nyk7CisJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJX2xh
ID0zRCBfaW5wdXQuTEEoMSk7CisJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCXsKKwkJ
CQl7CisJCQkJc2V0U3RhdGUoMTA3NCk7CisJCQkJbWF0Y2goVF9fNCk7CisJCQkJfQorCQkJCX0K
KwkJCQlzZXRTdGF0ZSgxMDc5KTsKKwkJCQlfZXJySGFuZGxlci5zeW5jKHRoaXMpOworCQkJCV9s
YSA9M0QgX2lucHV0LkxBKDEpOworCQkJfQorCQkJc2V0U3RhdGUoMTA4MCk7CisJCQlfbGEgPTNE
IF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0z
RFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJfSBl
bHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQlzZXRTdGF0ZSgxMDg0KTsKKwkJCV9lcnJI
YW5kbGVyLnN5bmModGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCXdoaWxlIChf
bGE9M0Q9M0RUX180KSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRTdGF0ZSgxMDgxKTsKKwkJCQlt
YXRjaChUX180KTsKKwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDEwODYpOworCQkJCV9lcnJI
YW5kbGVyLnN5bmModGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlz
ZXRTdGF0ZSgxMDk0KTsKKwkJCXN3aXRjaCAoIGdldEludGVycHJldGVyKCkuYWRhcHRpdmVQcmVk
aWN0KF9pbnB1dCwxMDQsX2N0eCkgKSB7CisJCQljYXNlIDE6CisJCQkJeworCQkJCXNldFN0YXRl
KDEwODcpOworCQkJCW1hdGNoKFNUUklORyk7CisJCQkJc2V0U3RhdGUoMTA5MSk7CisJCQkJX2Vy
ckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCQl3aGls
ZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCQl7CisJCQkJCXsKKwkJCQkJc2V0U3RhdGUoMTA4OCk7
CisJCQkJCW1hdGNoKFRfXzQpOworCQkJCQl9CisJCQkJCX0KKwkJCQkJc2V0U3RhdGUoMTA5Myk7
CisJCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEp
OworCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCQlzZXRTdGF0ZSgxMDk2KTsKKwkJ
CW1hdGNoKFNUUklORyk7CisJCQlzZXRTdGF0ZSgxMTAwKTsKKwkJCV9lcnJIYW5kbGVyLnN5bmMo
dGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCXdoaWxlIChfbGE9M0Q9M0RUX180
KSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRTdGF0ZSgxMDk3KTsKKwkJCQltYXRjaChUX180KTsK
KwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDExMDIpOworCQkJCV9lcnJIYW5kbGVyLnN5bmMo
dGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSgxMTEw
KTsKKwkJCXN3aXRjaCAoIGdldEludGVycHJldGVyKCkuYWRhcHRpdmVQcmVkaWN0KF9pbnB1dCwx
MDcsX2N0eCkgKSB7CisJCQljYXNlIDE6CisJCQkJeworCQkJCXNldFN0YXRlKDExMDMpOworCQkJ
CW1hdGNoKFNUUklORyk7CisJCQkJc2V0U3RhdGUoMTEwNyk7CisJCQkJX2VyckhhbmRsZXIuc3lu
Yyh0aGlzKTsKKwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCQl3aGlsZSAoX2xhPTNEPTNE
VF9fNCkgeworCQkJCQl7CisJCQkJCXsKKwkJCQkJc2V0U3RhdGUoMTEwNCk7CisJCQkJCW1hdGNo
KFRfXzQpOworCQkJCQl9CisJCQkJCX0KKwkJCQkJc2V0U3RhdGUoMTEwOSk7CisJCQkJCV9lcnJI
YW5kbGVyLnN5bmModGhpcyk7CisJCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJCX0KKwkJ
CQl9CisJCQkJYnJlYWs7CisJCQl9CisJCQlzZXRTdGF0ZSgxMTE5KTsKKwkJCXN3aXRjaCAoIGdl
dEludGVycHJldGVyKCkuYWRhcHRpdmVQcmVkaWN0KF9pbnB1dCwxMDksX2N0eCkgKSB7CisJCQlj
YXNlIDE6CisJCQkJeworCQkJCXNldFN0YXRlKDExMTIpOworCQkJCW1hdGNoKFNUUklORyk7CisJ
CQkJc2V0U3RhdGUoMTExNik7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEg
PTNEIF9pbnB1dC5MQSgxKTsKKwkJCQl3aGlsZSAoX2xhPTNEPTNEVF9fNCkgeworCQkJCQl7CisJ
CQkJCXsKKwkJCQkJc2V0U3RhdGUoMTExMyk7CisJCQkJCW1hdGNoKFRfXzQpOworCQkJCQl9CisJ
CQkJCX0KKwkJCQkJc2V0U3RhdGUoMTExOCk7CisJCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7
CisJCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJ
CQl9CisJCQlzZXRTdGF0ZSgxMTIyKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYg
KF9sYT0zRD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSB7CisJCQkJeworCQkJCXNl
dFN0YXRlKDExMjEpOworCQkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJCWlmICggIShfbGE9
M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQkJX2VyckhhbmRsZXIu
cmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCQl9IGVsc2UgeworCQkJCQljb25zdW1lKCk7CisJCQkJ
fQorCQkJCX0KKwkJCX0KKworCQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlv
biByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5y
ZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsK
KwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0
eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIEtvbW1lbnRhckNvbnRleHQgZXh0ZW5kcyBQ
YXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgS09NTUVOVEFSKCkgeyBy
ZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLktPTU1FTlRBUiwgMD0KKTsgfQorCQlwdWJsaWMgTGlz
dDxUZXJtaW5hbE5vZGU+IFNUUklORygpIHsgcmV0dXJuIGdldFRva2VucyhMYWZQYXJzZXIuU1RS
SU5HKTs9CiB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HKGludCBpKSB7CisJCQlyZXR1
cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklORywgaSk7CisJCX0KKwkJcHVibGljIExpc3Q8VGVy
bWluYWxOb2RlPiBTVFJJTkdfRVNDKCkgeyByZXR1cm4gZ2V0VG9rZW5zKExhZlBhcnNlci5TVFJJ
PQpOR19FU0MpOyB9CisJCXB1YmxpYyBUZXJtaW5hbE5vZGUgU1RSSU5HX0VTQyhpbnQgaSkgewor
CQkJcmV0dXJuIGdldFRva2VuKExhZlBhcnNlci5TVFJJTkdfRVNDLCBpKTsKKwkJfQorCQlwdWJs
aWMgS29tbWVudGFyQ29udGV4dChQYXJzZXJSdWxlQ29udGV4dCBwYXJlbnQsIGludCBpbnZva2lu
Z1N0YXRlKSB7CisJCQlzdXBlcihwYXJlbnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVy
cmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJbmRleCgpIHsgcmV0dXJuIFJVTEVfa29tbWVudGFyOyB9
CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbnRlclJ1bGUoUGFyc2VUcmVlTGlzdGVuZXIg
bGlzdGVuZXIpIHsKKwkJCWlmICggbGlzdGVuZXIgaW5zdGFuY2VvZiBMYWZMaXN0ZW5lciApICgo
TGFmTGlzdGVuZXIpbGlzdGVuZXIpLmVudGVyS29tPQptZW50YXIodGhpcyk7CisJCX0KKwkJQE92
ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVy
KSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExhZkxpc3Rl
bmVyKWxpc3RlbmVyKS5leGl0S29tbT0KZW50YXIodGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMg
ZmluYWwgS29tbWVudGFyQ29udGV4dCBrb21tZW50YXIoKSB0aHJvd3MgUmVjb2duaXRpb25FeGNl
cHRpb24geworCQlLb21tZW50YXJDb250ZXh0IF9sb2NhbGN0eCA9M0QgbmV3IEtvbW1lbnRhckNv
bnRleHQoX2N0eCwgZ2V0U3RhdGUoKSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDIyMCwgUlVM
RV9rb21tZW50YXIpOworCQlpbnQgX2xhOworCQl0cnkgeworCQkJZW50ZXJPdXRlckFsdChfbG9j
YWxjdHgsIDEpOworCQkJeworCQkJc2V0U3RhdGUoMTEyNCk7CisJCQltYXRjaChLT01NRU5UQVIp
OworCQkJc2V0U3RhdGUoMTEyNSk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICgg
IShfbGE9M0Q9M0RTVFJJTkdfRVNDIHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJySGFu
ZGxlci5yZWNvdmVySW5saW5lKHRoaXMpOworCQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJ
CQl9CisJCQlzZXRTdGF0ZSgxMTI5KTsKKwkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQlf
bGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCXdoaWxlIChfbGE9M0Q9M0RUX180KSB7CisJCQkJewor
CQkJCXsKKwkJCQlzZXRTdGF0ZSgxMTI2KTsKKwkJCQltYXRjaChUX180KTsKKwkJCQl9CisJCQkJ
fQorCQkJCXNldFN0YXRlKDExMzEpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7CisJCQkJ
X2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSgxMTMyKTsKKwkJCW1hdGNo
KFNUUklORyk7CisJCQlzZXRTdGF0ZSgxMTM2KTsKKwkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7
CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCXdoaWxlIChfbGE9M0Q9M0RUX180KSB7CisJ
CQkJeworCQkJCXsKKwkJCQlzZXRTdGF0ZSgxMTMzKTsKKwkJCQltYXRjaChUX180KTsKKwkJCQl9
CisJCQkJfQorCQkJCXNldFN0YXRlKDExMzgpOworCQkJCV9lcnJIYW5kbGVyLnN5bmModGhpcyk7
CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSgxMTM5KTsKKwkJ
CW1hdGNoKFNUUklORyk7CisJCQlzZXRTdGF0ZSgxMTQzKTsKKwkJCV9lcnJIYW5kbGVyLnN5bmMo
dGhpcyk7CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCXdoaWxlIChfbGE9M0Q9M0RUX180
KSB7CisJCQkJeworCQkJCXsKKwkJCQlzZXRTdGF0ZSgxMTQwKTsKKwkJCQltYXRjaChUX180KTsK
KwkJCQl9CisJCQkJfQorCQkJCXNldFN0YXRlKDExNDUpOworCQkJCV9lcnJIYW5kbGVyLnN5bmMo
dGhpcyk7CisJCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQl9CisJCQlzZXRTdGF0ZSgxMTQ2
KTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0zRD0zRFNUUklOR19F
U0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUo
dGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJCX0KKwkJfQorCQlj
YXRjaCAoUmVjb2duaXRpb25FeGNlcHRpb24gcmUpIHsKKwkJCV9sb2NhbGN0eC5leGNlcHRpb24g
PTNEIHJlOworCQkJX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpOworCQkJX2Vyckhh
bmRsZXIucmVjb3Zlcih0aGlzLCByZSk7CisJCX0KKwkJZmluYWxseSB7CisJCQlleGl0UnVsZSgp
OworCQl9CisJCXJldHVybiBfbG9jYWxjdHg7CisJfQorCisJcHVibGljIHN0YXRpYyBjbGFzcyBL
b21tZW50YXJfdENvbnRleHQgZXh0ZW5kcyBQYXJzZXJSdWxlQ29udGV4dCB7CisJCXB1YmxpYyBU
ZXJtaW5hbE5vZGUgS09NTUVOVEFSX1QoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuS09N
TUVOVEFSXz0KVCwgMCk7IH0KKwkJcHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkdfRVNDKCkgeyBy
ZXR1cm4gZ2V0VG9rZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsPQogMCk7IH0KKwkJcHVibGljIFRl
cm1pbmFsTm9kZSBTVFJJTkcoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HLCAw
KTsgfQorCQlwdWJsaWMgS29tbWVudGFyX3RDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVu
dCwgaW50IGludm9raW5nU3RhdGUpIHsKKwkJCXN1cGVyKHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7
CisJCX0KKwkJQE92ZXJyaWRlIHB1YmxpYyBpbnQgZ2V0UnVsZUluZGV4KCkgeyByZXR1cm4gUlVM
RV9rb21tZW50YXJfdDsgfQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBh
cnNlVHJlZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2Yg
TGFmTGlzdGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlcktvbT0KbWVudGFyX3Qo
dGhpcyk7CisJCX0KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGV4aXRSdWxlKFBhcnNlVHJl
ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlz
dGVuZXIgKSAoKExhZkxpc3RlbmVyKWxpc3RlbmVyKS5leGl0S29tbT0KZW50YXJfdCh0aGlzKTsK
KwkJfQorCX0KKworCXB1YmxpYyBmaW5hbCBLb21tZW50YXJfdENvbnRleHQga29tbWVudGFyX3Qo
KSB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb249CiB7CisJCUtvbW1lbnRhcl90Q29udGV4dCBf
bG9jYWxjdHggPTNEIG5ldyBLb21tZW50YXJfdENvbnRleHQoX2N0eCwgZ2V0U3RhdGUoKT0KKTsK
KwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMjIyLCBSVUxFX2tvbW1lbnRhcl90KTsKKwkJaW50IF9s
YTsKKwkJdHJ5IHsKKwkJCWVudGVyT3V0ZXJBbHQoX2xvY2FsY3R4LCAxKTsKKwkJCXsKKwkJCXNl
dFN0YXRlKDExNDgpOworCQkJbWF0Y2goS09NTUVOVEFSX1QpOworCQkJc2V0U3RhdGUoMTE0OSk7
CisJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCWlmICggIShfbGE9M0Q9M0RTVFJJTkdfRVND
IHx8IF9sYT0zRD0zRFNUUklORykgKSB7CisJCQlfZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRo
aXMpOworCQkJfSBlbHNlIHsKKwkJCQljb25zdW1lKCk7CisJCQl9CisJCQl9CisJCX0KKwkJY2F0
Y2ggKFJlY29nbml0aW9uRXhjZXB0aW9uIHJlKSB7CisJCQlfbG9jYWxjdHguZXhjZXB0aW9uID0z
RCByZTsKKwkJCV9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTsKKwkJCV9lcnJIYW5k
bGVyLnJlY292ZXIodGhpcywgcmUpOworCQl9CisJCWZpbmFsbHkgeworCQkJZXhpdFJ1bGUoKTsK
KwkJfQorCQlyZXR1cm4gX2xvY2FsY3R4OworCX0KKworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUHJv
YmVua29tbWVudGFyQ29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGlj
IFRlcm1pbmFsTm9kZSBQUk9CRU5LT01NRU5UQVIoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJz
ZXIuUFJPQkVOPQpLT01NRU5UQVIsIDApOyB9CisJCXB1YmxpYyBMaXN0PFRlcm1pbmFsTm9kZT4g
U1RSSU5HKCkgeyByZXR1cm4gZ2V0VG9rZW5zKExhZlBhcnNlci5TVFJJTkcpOz0KIH0KKwkJcHVi
bGljIFRlcm1pbmFsTm9kZSBTVFJJTkcoaW50IGkpIHsKKwkJCXJldHVybiBnZXRUb2tlbihMYWZQ
YXJzZXIuU1RSSU5HLCBpKTsKKwkJfQorCQlwdWJsaWMgTGlzdDxUZXJtaW5hbE5vZGU+IFNUUklO
R19FU0MoKSB7IHJldHVybiBnZXRUb2tlbnMoTGFmUGFyc2VyLlNUUkk9Ck5HX0VTQyk7IH0KKwkJ
cHVibGljIFRlcm1pbmFsTm9kZSBTVFJJTkdfRVNDKGludCBpKSB7CisJCQlyZXR1cm4gZ2V0VG9r
ZW4oTGFmUGFyc2VyLlNUUklOR19FU0MsIGkpOworCQl9CisJCXB1YmxpYyBQcm9iZW5rb21tZW50
YXJDb250ZXh0KFBhcnNlclJ1bGVDb250ZXh0IHBhcmVudCwgaW50IGludm9raW5nU3RhdD0KZSkg
eworCQkJc3VwZXIocGFyZW50LCBpbnZva2luZ1N0YXRlKTsKKwkJfQorCQlAT3ZlcnJpZGUgcHVi
bGljIGludCBnZXRSdWxlSW5kZXgoKSB7IHJldHVybiBSVUxFX3Byb2JlbmtvbW1lbnRhcjsgfQor
CQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW50ZXJSdWxlKFBhcnNlVHJlZUxpc3RlbmVyIGxp
c3RlbmVyKSB7CisJCQlpZiAoIGxpc3RlbmVyIGluc3RhbmNlb2YgTGFmTGlzdGVuZXIgKSAoKExh
Zkxpc3RlbmVyKWxpc3RlbmVyKS5lbnRlclBybz0KYmVua29tbWVudGFyKHRoaXMpOworCQl9CisJ
CUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0
ZW5lcikgeworCQkJaWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZM
aXN0ZW5lcilsaXN0ZW5lcikuZXhpdFByb2I9CmVua29tbWVudGFyKHRoaXMpOworCQl9CisJfQor
CisJcHVibGljIGZpbmFsIFByb2JlbmtvbW1lbnRhckNvbnRleHQgcHJvYmVua29tbWVudGFyKCkg
dGhyb3dzIFJlY29nbml0aW9uRT0KeGNlcHRpb24geworCQlQcm9iZW5rb21tZW50YXJDb250ZXh0
IF9sb2NhbGN0eCA9M0QgbmV3IFByb2JlbmtvbW1lbnRhckNvbnRleHQoX2N0eCwgZ2U9CnRTdGF0
ZSgpKTsKKwkJZW50ZXJSdWxlKF9sb2NhbGN0eCwgMjI0LCBSVUxFX3Byb2JlbmtvbW1lbnRhcik7
CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJ
CQl7CisJCQlzZXRTdGF0ZSgxMTUxKTsKKwkJCW1hdGNoKFBST0JFTktPTU1FTlRBUik7CisJCQlz
ZXRTdGF0ZSgxMTUyKTsKKwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJaWYgKCAhKF9sYT0z
RD0zRFNUUklOR19FU0MgfHwgX2xhPTNEPTNEU1RSSU5HKSApIHsKKwkJCV9lcnJIYW5kbGVyLnJl
Y292ZXJJbmxpbmUodGhpcyk7CisJCQl9IGVsc2UgeworCQkJCWNvbnN1bWUoKTsKKwkJCX0KKwkJ
CXNldFN0YXRlKDExNTYpOworCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCV9sYSA9M0Qg
X2lucHV0LkxBKDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQl7CisJCQkJewor
CQkJCXNldFN0YXRlKDExNTMpOworCQkJCW1hdGNoKFRfXzQpOworCQkJCX0KKwkJCQl9CisJCQkJ
c2V0U3RhdGUoMTE1OCk7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlfbGEgPTNE
IF9pbnB1dC5MQSgxKTsKKwkJCX0KKwkJCXNldFN0YXRlKDExNTkpOworCQkJbWF0Y2goU1RSSU5H
KTsKKwkJCXNldFN0YXRlKDExNjMpOworCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCV9s
YSA9M0QgX2lucHV0LkxBKDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJCQl7CisJ
CQkJeworCQkJCXNldFN0YXRlKDExNjApOworCQkJCW1hdGNoKFRfXzQpOworCQkJCX0KKwkJCQl9
CisJCQkJc2V0U3RhdGUoMTE2NSk7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsKKwkJCQlf
bGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCX0KKwkJCXNldFN0YXRlKDExNjYpOworCQkJbWF0Y2go
U1RSSU5HKTsKKwkJCXNldFN0YXRlKDExNzApOworCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsK
KwkJCV9sYSA9M0QgX2lucHV0LkxBKDEpOworCQkJd2hpbGUgKF9sYT0zRD0zRFRfXzQpIHsKKwkJ
CQl7CisJCQkJeworCQkJCXNldFN0YXRlKDExNjcpOworCQkJCW1hdGNoKFRfXzQpOworCQkJCX0K
KwkJCQl9CisJCQkJc2V0U3RhdGUoMTE3Mik7CisJCQkJX2VyckhhbmRsZXIuc3luYyh0aGlzKTsK
KwkJCQlfbGEgPTNEIF9pbnB1dC5MQSgxKTsKKwkJCX0KKwkJCXNldFN0YXRlKDExNzMpOworCQkJ
X2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xhPTNEPTNEU1RSSU5HX0VTQyB8fCBf
bGE9M0Q9M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTsK
KwkJCX0gZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChS
ZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2FsY3R4LmV4Y2VwdGlvbiA9M0QgcmU7
CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7CisJCQlfZXJySGFuZGxlci5y
ZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsKKwkJCWV4aXRSdWxlKCk7CisJCX0K
KwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFByb2Jlbmtv
bW1lbnRhcl90Q29udGV4dCBleHRlbmRzIFBhcnNlclJ1bGVDb250ZXh0IHsKKwkJcHVibGljIFRl
cm1pbmFsTm9kZSBQUk9CRU5LT01NRU5UQVJfVCgpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNl
ci5QUk9CPQpFTktPTU1FTlRBUl9ULCAwKTsgfQorCQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklO
R19FU0MoKSB7IHJldHVybiBnZXRUb2tlbihMYWZQYXJzZXIuU1RSSU5HX0VTQyw9CiAwKTsgfQor
CQlwdWJsaWMgVGVybWluYWxOb2RlIFNUUklORygpIHsgcmV0dXJuIGdldFRva2VuKExhZlBhcnNl
ci5TVFJJTkcsIDApOyB9CisJCXB1YmxpYyBQcm9iZW5rb21tZW50YXJfdENvbnRleHQoUGFyc2Vy
UnVsZUNvbnRleHQgcGFyZW50LCBpbnQgaW52b2tpbmdTdD0KYXRlKSB7CisJCQlzdXBlcihwYXJl
bnQsIGludm9raW5nU3RhdGUpOworCQl9CisJCUBPdmVycmlkZSBwdWJsaWMgaW50IGdldFJ1bGVJ
bmRleCgpIHsgcmV0dXJuIFJVTEVfcHJvYmVua29tbWVudGFyX3Q7IH0KKwkJQE92ZXJyaWRlCisJ
CXB1YmxpYyB2b2lkIGVudGVyUnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJ
aWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0
ZW5lcikuZW50ZXJQcm89CmJlbmtvbW1lbnRhcl90KHRoaXMpOworCQl9CisJCUBPdmVycmlkZQor
CQlwdWJsaWMgdm9pZCBleGl0UnVsZShQYXJzZVRyZWVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJ
aWYgKCBsaXN0ZW5lciBpbnN0YW5jZW9mIExhZkxpc3RlbmVyICkgKChMYWZMaXN0ZW5lcilsaXN0
ZW5lcikuZXhpdFByb2I9CmVua29tbWVudGFyX3QodGhpcyk7CisJCX0KKwl9CisKKwlwdWJsaWMg
ZmluYWwgUHJvYmVua29tbWVudGFyX3RDb250ZXh0IHByb2JlbmtvbW1lbnRhcl90KCkgdGhyb3dz
IFJlY29nbml0PQppb25FeGNlcHRpb24geworCQlQcm9iZW5rb21tZW50YXJfdENvbnRleHQgX2xv
Y2FsY3R4ID0zRCBuZXcgUHJvYmVua29tbWVudGFyX3RDb250ZXh0KF9jdHg9CiwgZ2V0U3RhdGUo
KSk7CisJCWVudGVyUnVsZShfbG9jYWxjdHgsIDIyNiwgUlVMRV9wcm9iZW5rb21tZW50YXJfdCk7
CisJCWludCBfbGE7CisJCXRyeSB7CisJCQllbnRlck91dGVyQWx0KF9sb2NhbGN0eCwgMSk7CisJ
CQl7CisJCQlzZXRTdGF0ZSgxMTc1KTsKKwkJCW1hdGNoKFBST0JFTktPTU1FTlRBUl9UKTsKKwkJ
CXNldFN0YXRlKDExNzYpOworCQkJX2xhID0zRCBfaW5wdXQuTEEoMSk7CisJCQlpZiAoICEoX2xh
PTNEPTNEU1RSSU5HX0VTQyB8fCBfbGE9M0Q9M0RTVFJJTkcpICkgeworCQkJX2VyckhhbmRsZXIu
cmVjb3ZlcklubGluZSh0aGlzKTsKKwkJCX0gZWxzZSB7CisJCQkJY29uc3VtZSgpOworCQkJfQor
CQkJfQorCQl9CisJCWNhdGNoIChSZWNvZ25pdGlvbkV4Y2VwdGlvbiByZSkgeworCQkJX2xvY2Fs
Y3R4LmV4Y2VwdGlvbiA9M0QgcmU7CisJCQlfZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCBy
ZSk7CisJCQlfZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTsKKwkJfQorCQlmaW5hbGx5IHsK
KwkJCWV4aXRSdWxlKCk7CisJCX0KKwkJcmV0dXJuIF9sb2NhbGN0eDsKKwl9CisKKwlwdWJsaWMg
c3RhdGljIGZpbmFsIFN0cmluZyBfc2VyaWFsaXplZEFUTiA9M0QKKwkJIlwzXHUwNDMwXHVkNmQx
XHU4MjA2XHVhZDJkXHU0NDE3XHVhZWYxXHU4ZDgwXHVhYWRkXDNiXHUwNDlkXDRcMlx0XDJcNCIr
CisJCSJcM1x0XDNcNFw0XHRcNFw0XDVcdFw1XDRcNlx0XDZcNFw3XHRcN1w0XGJcdFxiXDRcdFx0
XHRcNFxuXHRcblw0XDEzXHQiKworCQkiXDEzXDRcZlx0XGZcNFxyXHRcclw0XDE2XHRcMTZcNFwx
N1x0XDE3XDRcMjBcdFwyMFw0XDIxXHRcMjFcNFwyMlx0XDIyIisKKwkJIlw0XDIzXHRcMjNcNFwy
NFx0XDI0XDRcMjVcdFwyNVw0XDI2XHRcMjZcNFwyN1x0XDI3XDRcMzBcdFwzMFw0XDMxXHRcMzEi
KworCQkiXDRcMzJcdFwzMlw0XDMzXHRcMzNcNFwzNFx0XDM0XDRcMzVcdFwzNVw0XDM2XHRcMzZc
NFwzN1x0XDM3XDQgXHQgXDQhIisKKwkJIlx0IVw0XCJcdFwiXDQjXHQjXDQkXHQkXDQlXHQlXDQm
XHQmXDRcJ1x0XCdcNChcdChcNClcdClcNCpcdCpcNCtcdCtcNCIrCisJCSIsXHQsXDQtXHQtXDQu
XHQuXDQvXHQvXDRcNjBcdFw2MFw0XDYxXHRcNjFcNFw2Mlx0XDYyXDRcNjNcdFw2M1w0XDY0XHQi
KworCQkiXDY0XDRcNjVcdFw2NVw0XDY2XHRcNjZcNFw2N1x0XDY3XDQ4XHQ4XDQ5XHQ5XDQ6XHQ6
XDQ7XHQ7XDQ8XHQ8XDQ9M0RcdD0KPTNEIisKKwkJIlw0Plx0Plw0P1x0P1w0QFx0QFw0QVx0QVw0
Qlx0Qlw0Q1x0Q1w0RFx0RFw0RVx0RVw0Rlx0Rlw0R1x0R1w0SFx0SFw0SSIrCisJCSJcdElcNEpc
dEpcNEtcdEtcNExcdExcNE1cdE1cNE5cdE5cNE9cdE9cNFBcdFBcNFFcdFFcNFJcdFJcNFNcdFNc
NFRcdFQiKworCQkiXDRVXHRVXDRWXHRWXDRXXHRXXDRYXHRYXDRZXHRZXDRaXHRaXDRbXHRbXDRc
XFx0XFxcNF1cdF1cNF5cdF5cNF9cdF9cNCIrCisJCSJgXHRgXDRhXHRhXDRiXHRiXDRjXHRjXDRk
XHRkXDRlXHRlXDRmXHRmXDRnXHRnXDRoXHRoXDRpXHRpXDRqXHRqXDRrXHQiKworCQkia1w0bFx0
bFw0bVx0bVw0blx0blw0b1x0b1w0cFx0cFw0cVx0cVw0clx0clw0c1x0c1wzXDJcN1wyXHUwMGU4
XG5cMlxmIisKKwkJIlwyXDE2XDJcdTAwZWJcMTNcMlwzXDJcNVwyXHUwMGVlXG5cMlwzXDJcM1wy
XDNcM1wzXDNcM1w0XDNcNFw2XDRcdTAwZjYiKworCQkiXG5cNFxyXDRcMTZcNFx1MDBmN1wzXDVc
M1w1XDNcNVwzXDVcM1w1XDNcNVwzXDVcM1w1XDNcNVwzXDVcM1w1XDNcNVwzIisKKwkJIlw1XDNc
NVwzXDVcM1w1XDNcNVwzXDVcM1w1XDNcNVwzXDVcM1w1XDNcNVwzXDVcM1w1XDNcNVwzXDVcM1w1
XDNcNVwzXDUiKworCQkiXDNcNVwzXDVcM1w1XDNcNVwzXDVcM1w1XDNcNVwzXDVcM1w1XDNcNVwz
XDVcM1w1XDVcNVx1MDEyNFxuXDVcM1w2XDVcNiIrCisJCSJcdTAxMjdcblw2XDNcNlw2XDZcdTAx
MmFcblw2XHJcNlwxNlw2XHUwMTJiXDNcN1wzXDdcM1xiXDNcYlwzXGJcM1xiXDMiKworCQkiXGJc
M1xiXDNcYlwzXGJcM1xiXDNcYlw1XGJcdTAxM2FcblxiXDNcdFwzXHRcNVx0XHUwMTNlXG5cdFwz
XG5cM1xuXDVcbiIrCisJCSJcdTAxNDJcblxuXDNcMTNcM1wxM1w1XDEzXHUwMTQ2XG5cMTNcM1xm
XDNcZlw1XGZcdTAxNGFcblxmXDNcclwzXHJcM1xyIisKKwkJIlw1XHJcdTAxNGZcblxyXDNcMTZc
M1wxNlw1XDE2XHUwMTUzXG5cMTZcM1wxN1wzXDE3XDVcMTdcdTAxNTdcblwxN1wzXDIwPQoiKwor
CQkiXDNcMjBcNVwyMFx1MDE1YlxuXDIwXDNcMjFcM1wyMVw1XDIxXHUwMTVmXG5cMjFcM1wyMlwz
XDIyXDVcMjJcdTAxNjNcbiIrCisJCSJcMjJcM1wyM1wzXDIzXDNcMjNcNVwyM1x1MDE2OFxuXDIz
XDNcMjRcM1wyNFw1XDI0XHUwMTZjXG5cMjRcM1wyNVwzXDI1IisKKwkJIlw1XDI1XHUwMTcwXG5c
MjVcM1wyNlwzXDI2XDNcMjZcM1wyNlwzXDI2XDNcMjZcM1wyNlwzXDI2XDVcMjZcdTAxN2FcbiIr
CisJCSJcMjZcM1wyN1wzXDI3XDVcMjdcdTAxN2VcblwyN1wzXDMwXDNcMzBcNVwzMFx1MDE4Mlxu
XDMwXDNcMzFcM1wzMVw3XDMxIisKKwkJIlx1MDE4NlxuXDMxXGZcMzFcMTZcMzFcdTAxODlcMTNc
MzFcM1wzMlwzXDMyXDNcMzJcM1wzMlwzXDMyXDNcMzJcM1wzMiIrCisJCSJcNVwzMlx1MDE5Mlxu
XDMyXDNcMzNcM1wzM1wzXDMzXDVcMzNcdTAxOTdcblwzM1wzXDM0XDNcMzRcNVwzNFx1MDE5Ylxu
IisKKwkJIlwzNFwzXDM1XDNcMzVcNVwzNVx1MDE5ZlxuXDM1XDNcMzZcM1wzNlwzXDM2XDNcMzdc
M1wzN1wzXDM3XDMgXDMgXDMgXDMiKworCQkiIVwzIVwzIVwzXCJcM1wiXDNcIlwzI1wzI1wzI1wz
JFwzJFwzJFwzJVwzJVwzJVwzJlwzJlwzJlwzXCdcM1wnXDNcJ1wzIisKKwkJIihcMyhcMyhcMylc
MylcMylcMypcMypcMypcMytcMytcMytcMyxcMyxcMyxcMy1cMy1cMy1cMy5cMy5cMy5cMy9cMy9c
MyIrCisJCSIvXDNcNjBcM1w2MFwzXDYwXDNcNjFcM1w2MVwzXDYxXDNcNjJcM1w2MlwzXDYyXDNc
NjNcM1w2M1wzXDYzXDNcNjRcM1w2ND0KIisKKwkJIlwzXDY0XDNcNjVcM1w2NVwzXDY1XDdcNjVc
dTAxZTlcblw2NVxmXDY1XDE2XDY1XHUwMWVjXDEzXDY1XDNcNjVcM1w2NSIrCisJCSJcM1w2Nlwz
XDY2XDNcNjZcN1w2Nlx1MDFmM1xuXDY2XGZcNjZcMTZcNjZcdTAxZjZcMTNcNjZcM1w2NlwzXDY2
XDNcNjciKworCQkiXDNcNjdcM1w2N1w3XDY3XHUwMWZkXG5cNjdcZlw2N1wxNlw2N1x1MDIwMFwx
M1w2N1wzXDY3XDNcNjdcMzhcMzhcMzhcNyIrCisJCSI4XHUwMjA3XG44XGY4XDE2OFx1MDIwYVwx
MzhcMzhcMzhcMzlcMzlcMzlcNzlcdTAyMTFcbjlcZjlcMTY5XHUwMjE0XDEzIisKKwkJIjlcMzlc
MzlcMzpcMzpcMzpcMztcMztcMztcMzxcMzxcMzxcMz0zRFwzPTNEXDM9M0RcMz5cMz5cMz5cMz9c
Mz9cMz9cNz9cPQp1MDIyYSIrCisJCSJcbj9cZj9cMTY/XHUwMjJkXDEzP1wzP1wzP1wzQFwzQFwz
QFwzQVwzQVwzQVwzQlwzQlwzQlwzQ1wzQ1wzQ1wzRFwzRFwzIisKKwkJIkRcM0VcM0VcM0VcM0Zc
M0ZcM0ZcM0dcM0dcM0dcM0hcM0hcM0hcM0lcM0lcM0lcM0pcM0pcM0pcN0pcdTAyNTJcbkpcZiIr
CisJCSJKXDE2Slx1MDI1NVwxM0pcM0pcM0pcN0pcdTAyNTlcbkpcZkpcMTZKXHUwMjVjXDEzSlwz
SlwzSlwzS1wzS1wzS1w3S1x1MD0KMjYzIisKKwkJIlxuS1xmS1wxNktcdTAyNjZcMTNLXDNLXDNL
XDdLXHUwMjZhXG5LXGZLXDE2S1x1MDI2ZFwxM0tcM0tcM0tcM0xcM0xcMyIrCisJCSJMXDNNXDNN
XDNNXDNOXDNOXDNOXDNPXDNPXDNPXDNQXDNQXDNQXDNRXDNRXDNRXDNSXDNSXDNSXDNTXDNTXDNT
XDNUXDMiKworCQkiVFwzVFwzVVwzVVwzVVw3VVx1MDI4ZlxuVVxmVVwxNlVcdTAyOTJcMTNVXDNV
XDNVXDdVXHUwMjk2XG5VXGZVXDE2VVx1MDI9Cjk5IisKKwkJIlwxM1VcM1VcM1VcM1ZcM1ZcM1Zc
N1ZcdTAyYTBcblZcZlZcMTZWXHUwMmEzXDEzVlwzVlwzVlw3Vlx1MDJhN1xuVlxmViIrCisJCSJc
MTZWXHUwMmFhXDEzVlwzVlwzVlwzV1wzV1wzV1wzWFwzWFwzWFwzWVwzWVwzWVwzWlwzWlwzWlwz
W1wzW1wzW1wzXFwiKworCQkiXDNcXFwzXFxcM11cM11cM11cM15cM15cM15cM19cM19cM19cN19c
dTAyYzlcbl9cZl9cMTZfXHUwMmNjXDEzX1wzX1wzIisKKwkJIl9cM2BcM2BcM2BcM2FcM2FcM2Fc
M2JcM2JcM2JcM2NcM2NcM2NcM2RcM2RcM2RcM2VcM2VcM2VcM2ZcM2ZcM2ZcN2ZcdTAyPQplNSIr
CisJCSJcbmZcZmZcMTZmXHUwMmU4XDEzZlwzZlwzZlw3Zlx1MDJlY1xuZlxmZlwxNmZcdTAyZWZc
MTNmXDNmXDNmXDdmXHUwMmYzIisKKwkJIlxuZlxmZlwxNmZcdTAyZjZcMTNmXDNmXDNmXDNnXDNn
XDNnXDdnXHUwMmZkXG5nXGZnXDE2Z1x1MDMwMFwxM2dcM2dcMyIrCisJCSJnXDdnXHUwMzA0XG5n
XGZnXDE2Z1x1MDMwN1wxM2dcM2dcM2dcN2dcdTAzMGJcbmdcZmdcMTZnXHUwMzBlXDEzZ1wzZ1wz
IisKKwkJImdcM2hcM2hcM2hcN2hcdTAzMTVcbmhcZmhcMTZoXHUwMzE4XDEzaFwzaFwzaFw3aFx1
MDMxY1xuaFxmaFwxNmhcdTAzMWYiKworCQkiXDEzaFwzaFwzaFw3aFx1MDMyM1xuaFxmaFwxNmhc
dTAzMjZcMTNoXDNoXDVoXHUwMzI5XG5oXDNpXDNpXDNpXDdpXHUwMzI9CmUiKworCQkiXG5pXGZp
XDE2aVx1MDMzMVwxM2lcM2lcM2lcN2lcdTAzMzVcbmlcZmlcMTZpXHUwMzM4XDEzaVwzaVwzaVw3
aVx1MDMzYyIrCisJCSJcbmlcZmlcMTZpXHUwMzNmXDEzaVwzaVw1aVx1MDM0MlxuaVwzalwzalwz
alw3alx1MDM0N1xualxmalwxNmpcdTAzNGEiKworCQkiXDEzalwzalwzalw3alx1MDM0ZVxualxm
alwxNmpcdTAzNTFcMTNqXDNqXDNqXDdqXHUwMzU1XG5qXGZqXDE2alx1MDM1OCIrCisJCSJcMTNq
XDNqXDNqXDdqXHUwMzVjXG5qXGZqXDE2alx1MDM1ZlwxM2pcNWpcdTAzNjFcbmpcM2pcM2pcN2pc
dTAzNjVcbmoiKworCQkiXGZqXDE2alx1MDM2OFwxM2pcNWpcdTAzNmFcbmpcM2pcM2pcN2pcdTAz
NmVcbmpcZmpcMTZqXHUwMzcxXDEzalw1alx1MDM9CjczIisKKwkJIlxualwzalw1alx1MDM3Nlxu
alwza1wza1wza1w3a1x1MDM3Ylxua1xma1wxNmtcdTAzN2VcMTNrXDNrXDNrXDdrXHUwMzgyPQoi
KworCQkiXG5rXGZrXDE2a1x1MDM4NVwxM2tcM2tcM2tcN2tcdTAzODlcbmtcZmtcMTZrXHUwMzhj
XDEza1wza1wza1w3a1x1MDM5MCIrCisJCSJcbmtcZmtcMTZrXHUwMzkzXDEza1w1a1x1MDM5NVxu
a1wza1wza1w3a1x1MDM5OVxua1xma1wxNmtcdTAzOWNcMTNrXDUiKworCQkia1x1MDM5ZVxua1wz
a1wza1w3a1x1MDNhMlxua1xma1wxNmtcdTAzYTVcMTNrXDVrXHUwM2E3XG5rXDNrXDVrXHUwM2Fh
IisKKwkJIlxua1wzbFwzbFwzbFw3bFx1MDNhZlxubFxmbFwxNmxcdTAzYjJcMTNsXDNsXDNsXDds
XHUwM2I2XG5sXGZsXDE2bFx1MDNiPQo5IisKKwkJIlwxM2xcM2xcM2xcN2xcdTAzYmRcbmxcZmxc
MTZsXHUwM2MwXDEzbFwzbFwzbFw3bFx1MDNjNFxubFxmbFwxNmxcdTAzYzciKworCQkiXDEzbFw1
bFx1MDNjOVxubFwzbFw1bFx1MDNjY1xubFwzbVwzbVwzbVw3bVx1MDNkMVxubVxmbVwxNm1cdTAz
ZDRcMTNtIisKKwkJIlwzbVwzbVw3bVx1MDNkOFxubVxmbVwxNm1cdTAzZGJcMTNtXDNtXDNtXDdt
XHUwM2RmXG5tXGZtXDE2bVx1MDNlMlwxMyIrCisJCSJtXDNtXDNtXDdtXHUwM2U2XG5tXGZtXDE2
bVx1MDNlOVwxM21cNW1cdTAzZWJcbm1cM21cNW1cdTAzZWVcbm1cM25cM24iKworCQkiXDNuXDdu
XHUwM2YzXG5uXGZuXDE2blx1MDNmNlwxM25cM25cM25cN25cdTAzZmFcbm5cZm5cMTZuXHUwM2Zk
XDEzblwzIisKKwkJIm5cM25cN25cdTA0MDFcbm5cZm5cMTZuXHUwNDA0XDEzblwzblwzblw3blx1
MDQwOFxublxmblwxNm5cdTA0MGJcMTNuXDUiKworCQkiblx1MDQwZFxublwzblwzblw3blx1MDQx
MVxublxmblwxNm5cdTA0MTRcMTNuXDVuXHUwNDE2XG5uXDNuXDNuXDduXHUwNDE9CmEiKworCQki
XG5uXGZuXDE2blx1MDQxZFwxM25cNW5cdTA0MWZcbm5cM25cM25cN25cdTA0MjNcbm5cZm5cMTZu
XHUwNDI2XDEzblw1IisKKwkJIm5cdTA0Mjhcbm5cM25cM25cM29cM29cM29cN29cdTA0MmZcbm9c
Zm9cMTZvXHUwNDMyXDEzb1wzb1wzb1w3b1x1MDQzNiIrCisJCSJcbm9cZm9cMTZvXHUwNDM5XDEz
b1wzb1wzb1w3b1x1MDQzZFxub1xmb1wxNm9cdTA0NDBcMTNvXDNvXDNvXDdvXHUwNDQ0IisKKwkJ
Ilxub1xmb1wxNm9cdTA0NDdcMTNvXDVvXHUwNDQ5XG5vXDNvXDNvXDdvXHUwNDRkXG5vXGZvXDE2
b1x1MDQ1MFwxM29cMyIrCisJCSJvXDNvXDdvXHUwNDU0XG5vXGZvXDE2b1x1MDQ1N1wxM29cNW9c
dTA0NTlcbm9cM29cM29cN29cdTA0NWRcbm9cZm9cMTYiKworCQkib1x1MDQ2MFwxM29cNW9cdTA0
NjJcbm9cM29cNW9cdTA0NjVcbm9cM3BcM3BcM3BcN3BcdTA0NmFcbnBcZnBcMTZwXHUwNDY9CmQi
KworCQkiXDEzcFwzcFwzcFw3cFx1MDQ3MVxucFxmcFwxNnBcdTA0NzRcMTNwXDNwXDNwXDdwXHUw
NDc4XG5wXGZwXDE2cFx1MDQ3YiIrCisJCSJcMTNwXDNwXDNwXDNxXDNxXDNxXDNyXDNyXDNyXDdy
XHUwNDg1XG5yXGZyXDE2clx1MDQ4OFwxM3JcM3JcM3JcN3JcdTA0OD0KYyIrCisJCSJcbnJcZnJc
MTZyXHUwNDhmXDEzclwzclwzclw3clx1MDQ5M1xuclxmclwxNnJcdTA0OTZcMTNyXDNyXDNyXDNz
XDNzXDMiKworCQkic1wzc1wyXDJ0XDJcNFw2XGJcblxmXDE2XDIwXDIyXDI0XDI2XDMwXDMyXDM0
XDM2IFwiJCYoKiwuXDYwXDYyXDY0XDY2IisKKwkJIjg6PD5AQkRGSEpMTlBSVFZYWlxcXmBiZGZo
amxucHJ0dnh6fH5cdTAwODBcdTAwODJcdTAwODRcdTAwODZcdTAwODhcdTAwPQo4YSIrCisJCSJc
dTAwOGNcdTAwOGVcdTAwOTBcdTAwOTJcdTAwOTRcdTAwOTZcdTAwOThcdTAwOWFcdTAwOWNcdTAw
OWVcdTAwYTBcdTAwYT0KMiIrCisJCSJcdTAwYTRcdTAwYTZcdTAwYThcdTAwYWFcdTAwYWNcdTAw
YWVcdTAwYjBcdTAwYjJcdTAwYjRcdTAwYjZcdTAwYjhcdTAwYj0KYSIrCisJCSJcdTAwYmNcdTAw
YmVcdTAwYzBcdTAwYzJcdTAwYzRcdTAwYzZcdTAwYzhcdTAwY2FcdTAwY2NcdTAwY2VcdTAwZDBc
dTAwZD0KMiIrCisJCSJcdTAwZDRcdTAwZDZcdTAwZDhcdTAwZGFcdTAwZGNcdTAwZGVcdTAwZTBc
dTAwZTJcdTAwZTRcMlwzXDNcMmBhXHUwNGRkIisKKwkJIlwyXHUwMGU5XDNcMlwyXDJcNFx1MDBm
MVwzXDJcMlwyXDZcdTAwZjNcM1wyXDJcMlxiXHUwMTIzXDNcMlwyXDJcblx1MDEyPQo2IisKKwkJ
IlwzXDJcMlwyXGZcdTAxMmRcM1wyXDJcMlwxNlx1MDEzOVwzXDJcMlwyXDIwXHUwMTNkXDNcMlwy
XDJcMjJcdTAxNDFcMyIrCisJCSJcMlwyXDJcMjRcdTAxNDVcM1wyXDJcMlwyNlx1MDE0OVwzXDJc
MlwyXDMwXHUwMTRlXDNcMlwyXDJcMzJcdTAxNTJcM1wyIisKKwkJIlwyXDJcMzRcdTAxNTZcM1wy
XDJcMlwzNlx1MDE1YVwzXDJcMlwyIFx1MDE1ZVwzXDJcMlwyXCJcdTAxNjJcM1wyXDJcMiIrCisJ
CSIkXHUwMTY3XDNcMlwyXDImXHUwMTZiXDNcMlwyXDIoXHUwMTZmXDNcMlwyXDIqXHUwMTc5XDNc
MlwyXDIsXHUwMTdkXDMiKworCQkiXDJcMlwyLlx1MDE4MVwzXDJcMlwyXDYwXHUwMTgzXDNcMlwy
XDJcNjJcdTAxOTFcM1wyXDJcMlw2NFx1MDE5NlwzXDJcMiIrCisJCSJcMlw2Nlx1MDE5YVwzXDJc
MlwyOFx1MDE5ZVwzXDJcMlwyOlx1MDFhMFwzXDJcMlwyPFx1MDFhM1wzXDJcMlwyPlx1MDFhNj0K
IisKKwkJIlwzXDJcMlwyQFx1MDFhOVwzXDJcMlwyQlx1MDFhY1wzXDJcMlwyRFx1MDFhZlwzXDJc
MlwyRlx1MDFiMlwzXDJcMlwySCIrCisJCSJcdTAxYjVcM1wyXDJcMkpcdTAxYjhcM1wyXDJcMkxc
dTAxYmJcM1wyXDJcMk5cdTAxYmVcM1wyXDJcMlBcdTAxYzFcM1wyIisKKwkJIlwyXDJSXHUwMWM0
XDNcMlwyXDJUXHUwMWM3XDNcMlwyXDJWXHUwMWNhXDNcMlwyXDJYXHUwMWNkXDNcMlwyXDJaXHUw
MWQwPQoiKworCQkiXDNcMlwyXDJcXFx1MDFkM1wzXDJcMlwyXlx1MDFkNlwzXDJcMlwyYFx1MDFk
OVwzXDJcMlwyYlx1MDFkY1wzXDJcMlwyIisKKwkJImRcdTAxZGZcM1wyXDJcMmZcdTAxZTJcM1wy
XDJcMmhcdTAxZTVcM1wyXDJcMmpcdTAxZWZcM1wyXDJcMmxcdTAxZjlcMyIrCisJCSJcMlwyXDJu
XHUwMjAzXDNcMlwyXDJwXHUwMjBkXDNcMlwyXDJyXHUwMjE3XDNcMlwyXDJ0XHUwMjFhXDNcMlwy
XDJ2XHUwMj0KMWQiKworCQkiXDNcMlwyXDJ4XHUwMjIwXDNcMlwyXDJ6XHUwMjIzXDNcMlwyXDJ8
XHUwMjI2XDNcMlwyXDJ+XHUwMjMwXDNcMlwyXDJcdTA9CjA4MCIrCisJCSJcdTAyMzNcM1wyXDJc
Mlx1MDA4Mlx1MDIzNlwzXDJcMlwyXHUwMDg0XHUwMjM5XDNcMlwyXDJcdTAwODZcdTAyM2NcM1wy
IisKKwkJIlwyXDJcdTAwODhcdTAyM2ZcM1wyXDJcMlx1MDA4YVx1MDI0MlwzXDJcMlwyXHUwMDhj
XHUwMjQ1XDNcMlwyXDJcdTAwOGUiKworCQkiXHUwMjQ4XDNcMlwyXDJcdTAwOTBcdTAyNGJcM1wy
XDJcMlx1MDA5Mlx1MDI0ZVwzXDJcMlwyXHUwMDk0XHUwMjVmXDNcMiIrCisJCSJcMlwyXHUwMDk2
XHUwMjcwXDNcMlwyXDJcdTAwOThcdTAyNzNcM1wyXDJcMlx1MDA5YVx1MDI3NlwzXDJcMlwyXHUw
MDljIisKKwkJIlx1MDI3OVwzXDJcMlwyXHUwMDllXHUwMjdjXDNcMlwyXDJcdTAwYTBcdTAyN2Zc
M1wyXDJcMlx1MDBhMlx1MDI4MlwzXDIiKworCQkiXDJcMlx1MDBhNFx1MDI4NVwzXDJcMlwyXHUw
MGE2XHUwMjg4XDNcMlwyXDJcdTAwYThcdTAyOGJcM1wyXDJcMlx1MDBhYSIrCisJCSJcdTAyOWNc
M1wyXDJcMlx1MDBhY1x1MDJhZFwzXDJcMlwyXHUwMGFlXHUwMmIwXDNcMlwyXDJcdTAwYjBcdTAy
YjNcM1wyIisKKwkJIlwyXDJcdTAwYjJcdTAyYjZcM1wyXDJcMlx1MDBiNFx1MDJiOVwzXDJcMlwy
XHUwMGI2XHUwMmJjXDNcMlwyXDJcdTAwYjgiKworCQkiXHUwMmJmXDNcMlwyXDJcdTAwYmFcdTAy
YzJcM1wyXDJcMlx1MDBiY1x1MDJjNVwzXDJcMlwyXHUwMGJlXHUwMmNmXDNcMiIrCisJCSJcMlwy
XHUwMGMwXHUwMmQyXDNcMlwyXDJcdTAwYzJcdTAyZDVcM1wyXDJcMlx1MDBjNFx1MDJkOFwzXDJc
MlwyXHUwMGM2IisKKwkJIlx1MDJkYlwzXDJcMlwyXHUwMGM4XHUwMmRlXDNcMlwyXDJcdTAwY2Fc
dTAyZTFcM1wyXDJcMlx1MDBjY1x1MDJmOVwzXDIiKworCQkiXDJcMlx1MDBjZVx1MDMxMVwzXDJc
MlwyXHUwMGQwXHUwMzJhXDNcMlwyXDJcdTAwZDJcdTAzNDNcM1wyXDJcMlx1MDBkNCIrCisJCSJc
dTAzNzdcM1wyXDJcMlx1MDBkNlx1MDNhYlwzXDJcMlwyXHUwMGQ4XHUwM2NkXDNcMlwyXDJcdTAw
ZGFcdTAzZWZcM1wyIisKKwkJIlwyXDJcdTAwZGNcdTA0MmJcM1wyXDJcMlx1MDBkZVx1MDQ2Nlwz
XDJcMlwyXHUwMGUwXHUwNDdlXDNcMlwyXDJcdTAwZTIiKworCQkiXHUwNDgxXDNcMlwyXDJcdTAw
ZTRcdTA0OTlcM1wyXDJcMlx1MDBlNlx1MDBlOFw1XDZcNFwyXHUwMGU3XHUwMGU2XDNcMiIrCisJ
CSJcMlwyXHUwMGU4XHUwMGViXDNcMlwyXDJcdTAwZTlcdTAwZTdcM1wyXDJcMlx1MDBlOVx1MDBl
YVwzXDJcMlwyXHUwMGVhIisKKwkJIlx1MDBlZFwzXDJcMlwyXHUwMGViXHUwMGU5XDNcMlwyXDJc
dTAwZWNcdTAwZWVcNVw0XDNcMlx1MDBlZFx1MDBlY1wzXDIiKworCQkiXDJcMlx1MDBlZFx1MDBl
ZVwzXDJcMlwyXHUwMGVlXHUwMGVmXDNcMlwyXDJcdTAwZWZcdTAwZjBcN1wyXDJcM1x1MDBmMCIr
CisJCSJcM1wzXDJcMlwyXHUwMGYxXHUwMGYyXDdcM1wyXDJcdTAwZjJcNVwzXDJcMlwyXHUwMGYz
XHUwMGY1XDdcNFwyXDJcdTAwZj0KNCIrCisJCSJcdTAwZjZcNVxiXDVcMlx1MDBmNVx1MDBmNFwz
XDJcMlwyXHUwMGY2XHUwMGY3XDNcMlwyXDJcdTAwZjdcdTAwZjVcM1wyIisKKwkJIlwyXDJcdTAw
ZjdcdTAwZjhcM1wyXDJcMlx1MDBmOFw3XDNcMlwyXDJcdTAwZjlcdTAxMjRcNVwyMFx0XDJcdTAw
ZmFcdTAxPQoyNCIrCisJCSJcNTpcMzZcMlx1MDBmYlx1MDEyNFw1PFwzN1wyXHUwMGZjXHUwMTI0
XDVCXCJcMlx1MDBmZFx1MDEyNFw1RCNcMlx1MDBmZT0KIisKKwkJIlx1MDEyNFw1JFwyM1wyXHUw
MGZmXHUwMTI0XDVMXCdcMlx1MDEwMFx1MDEyNFw1TihcMlx1MDEwMVx1MDEyNFw1UClcMiIrCisJ
CSJcdTAxMDJcdTAxMjRcNSZcMjRcMlx1MDEwM1x1MDEyNFw1XDIyXG5cMlx1MDEwNFx1MDEyNFw1
Xlw2MFwyXHUwMTA1XHUwMT0KMjQiKworCQkiXDVgXDYxXDJcdTAxMDZcdTAxMjRcNWJcNjJcMlx1
MDEwN1x1MDEyNFw1XDM2XDIwXDJcdTAxMDhcdTAxMjRcNW44XDJcdTA9CjEwOSIrCisJCSJcdTAx
MjRcNXA5XDJcdTAxMGFcdTAxMjRcNWhcNjVcMlx1MDEwYlx1MDEyNFw1alw2NlwyXHUwMTBjXHUw
MTI0XDVcMjQiKworCQkiXDEzXDJcdTAxMGRcdTAxMjRcNXY8XDJcdTAxMGVcdTAxMjRcNVwyNlxm
XDJcdTAxMGZcdTAxMjRcNXw/XDJcdTAxMTBcdTA9CjEyNCIrCisJCSJcNX5AXDJcdTAxMTFcdTAx
MjRcNVx1MDA4MEFcMlx1MDExMlx1MDEyNFw1XHUwMDgyQlwyXHUwMTEzXHUwMTI0XDVcNjAiKwor
CQkiXDMxXDJcdTAxMTRcdTAxMjRcNVwzMFxyXDJcdTAxMTVcdTAxMjRcNVwzMlwxNlwyXHUwMTE2
XHUwMTI0XDVcdTAwYTZUIisKKwkJIlwyXHUwMTE3XHUwMTI0XDVcMzRcMTdcMlx1MDExOFx1MDEy
NFw1XHUwMGFjV1wyXHUwMTE5XHUwMTI0XDVcdTAwYWVYXDIiKworCQkiXHUwMTFhXHUwMTI0XDVc
dTAwYjBZXDJcdTAxMWJcdTAxMjRcNVx1MDBiMlpcMlx1MDExY1x1MDEyNFw1XHUwMGI0W1wyIisK
KwkJIlx1MDExZFx1MDEyNFw1XHUwMGI2XFxcMlx1MDExZVx1MDEyNFw1XHUwMGI4XVwyXHUwMTFm
XHUwMTI0XDVcdTAwYmFeXDIiKworCQkiXHUwMTIwXHUwMTI0XDVcblw2XDJcdTAxMjFcdTAxMjRc
NSBcMjFcMlx1MDEyMlx1MDEyNFw1XCJcMjJcMlx1MDEyM1x1MDA9CmY5IisKKwkJIlwzXDJcMlwy
XHUwMTIzXHUwMGZhXDNcMlwyXDJcdTAxMjNcdTAwZmJcM1wyXDJcMlx1MDEyM1x1MDBmY1wzXDJc
MlwyXHUwPQoxMjMiKworCQkiXHUwMGZkXDNcMlwyXDJcdTAxMjNcdTAwZmVcM1wyXDJcMlx1MDEy
M1x1MDBmZlwzXDJcMlwyXHUwMTIzXHUwMTAwXDNcMiIrCisJCSJcMlwyXHUwMTIzXHUwMTAxXDNc
MlwyXDJcdTAxMjNcdTAxMDJcM1wyXDJcMlx1MDEyM1x1MDEwM1wzXDJcMlwyXHUwMTIzIisKKwkJ
Ilx1MDEwNFwzXDJcMlwyXHUwMTIzXHUwMTA1XDNcMlwyXDJcdTAxMjNcdTAxMDZcM1wyXDJcMlx1
MDEyM1x1MDEwN1wzXDIiKworCQkiXDJcMlx1MDEyM1x1MDEwOFwzXDJcMlwyXHUwMTIzXHUwMTA5
XDNcMlwyXDJcdTAxMjNcdTAxMGFcM1wyXDJcMlx1MDEyMyIrCisJCSJcdTAxMGJcM1wyXDJcMlx1
MDEyM1x1MDEwY1wzXDJcMlwyXHUwMTIzXHUwMTBkXDNcMlwyXDJcdTAxMjNcdTAxMGVcM1wyIisK
KwkJIlwyXDJcdTAxMjNcdTAxMGZcM1wyXDJcMlx1MDEyM1x1MDExMFwzXDJcMlwyXHUwMTIzXHUw
MTExXDNcMlwyXDJcdTAxMjMiKworCQkiXHUwMTEyXDNcMlwyXDJcdTAxMjNcdTAxMTNcM1wyXDJc
Mlx1MDEyM1x1MDExNFwzXDJcMlwyXHUwMTIzXHUwMTE1XDNcMiIrCisJCSJcMlwyXHUwMTIzXHUw
MTE2XDNcMlwyXDJcdTAxMjNcdTAxMTdcM1wyXDJcMlx1MDEyM1x1MDExOFwzXDJcMlwyXHUwMTIz
IisKKwkJIlx1MDExOVwzXDJcMlwyXHUwMTIzXHUwMTFhXDNcMlwyXDJcdTAxMjNcdTAxMWJcM1wy
XDJcMlx1MDEyM1x1MDExY1wzXDIiKworCQkiXDJcMlx1MDEyM1x1MDExZFwzXDJcMlwyXHUwMTIz
XHUwMTFlXDNcMlwyXDJcdTAxMjNcdTAxMWZcM1wyXDJcMlx1MDEyMyIrCisJCSJcdTAxMjBcM1wy
XDJcMlx1MDEyM1x1MDEyMVwzXDJcMlwyXHUwMTIzXHUwMTIyXDNcMlwyXDJcdTAxMjRcdFwzXDJc
MlwyIisKKwkJIlx1MDEyNVx1MDEyN1w1XGZcN1wyXHUwMTI2XHUwMTI1XDNcMlwyXDJcdTAxMjZc
dTAxMjdcM1wyXDJcMlx1MDEyN1x1MDEyPQo5IisKKwkJIlwzXDJcMlwyXHUwMTI4XHUwMTJhXDVc
MTZcYlwyXHUwMTI5XHUwMTI4XDNcMlwyXDJcdTAxMmFcdTAxMmJcM1wyXDJcMiIrCisJCSJcdTAx
MmJcdTAxMjlcM1wyXDJcMlx1MDEyYlx1MDEyY1wzXDJcMlwyXHUwMTJjXDEzXDNcMlwyXDJcdTAx
MmRcdTAxMmUiKworCQkiXDdcNVwyXDJcdTAxMmVcclwzXDJcMlwyXHUwMTJmXHUwMTNhXDVSKlwy
XHUwMTMwXHUwMTNhXDUuXDMwXDJcdTAxMzFcdTA9CjEzYSIrCisJCSJcNVx1MDBiY19cMlx1MDEz
Mlx1MDEzYVw1XHUwMGJlYFwyXHUwMTMzXHUwMTNhXDUoXDI1XDJcdTAxMzRcdTAxM2FcNVx1MD0K
MGM0IisKKwkJImNcMlx1MDEzNVx1MDEzYVw1XHUwMGM2ZFwyXHUwMTM2XHUwMTNhXDVcdTAwYzhl
XDJcdTAxMzdcdTAxM2FcNVx1MDBjZSIrCisJCSJoXDJcdTAxMzhcdTAxM2FcNSxcMjdcMlx1MDEz
OVx1MDEyZlwzXDJcMlwyXHUwMTM5XHUwMTMwXDNcMlwyXDJcdTAxMzkiKworCQkiXHUwMTMxXDNc
MlwyXDJcdTAxMzlcdTAxMzJcM1wyXDJcMlx1MDEzOVx1MDEzM1wzXDJcMlwyXHUwMTM5XHUwMTM0
XDNcMiIrCisJCSJcMlwyXHUwMTM5XHUwMTM1XDNcMlwyXDJcdTAxMzlcdTAxMzZcM1wyXDJcMlx1
MDEzOVx1MDEzN1wzXDJcMlwyXHUwMTM5IisKKwkJIlx1MDEzOFwzXDJcMlwyXHUwMTNhXDE3XDNc
MlwyXDJcdTAxM2JcdTAxM2VcNT4gXDJcdTAxM2NcdTAxM2VcNUAhXDJcdTAxPQozZCIrCisJCSJc
dTAxM2JcM1wyXDJcMlx1MDEzZFx1MDEzY1wzXDJcMlwyXHUwMTNlXDIxXDNcMlwyXDJcdTAxM2Zc
dTAxNDJcNVouXDIiKworCQkiXHUwMTQwXHUwMTQyXDVcXC9cMlx1MDE0MVx1MDEzZlwzXDJcMlwy
XHUwMTQxXHUwMTQwXDNcMlwyXDJcdTAxNDJcMjNcMyIrCisJCSJcMlwyXDJcdTAxNDNcdTAxNDZc
NXI6XDJcdTAxNDRcdTAxNDZcNXQ7XDJcdTAxNDVcdTAxNDNcM1wyXDJcMlx1MDE0NVx1MD0KMTQ0
IisKKwkJIlwzXDJcMlwyXHUwMTQ2XDI1XDNcMlwyXDJcdTAxNDdcdTAxNGFcNXg9M0RcMlx1MDE0
OFx1MDE0YVw1ej5cMlx1MDE0OVx1PQowMTQ3IisKKwkJIlwzXDJcMlwyXHUwMTQ5XHUwMTQ4XDNc
MlwyXDJcdTAxNGFcMjdcM1wyXDJcMlx1MDE0Ylx1MDE0Zlw1XHUwMDljT1wyXHUwPQoxNGMiKwor
CQkiXHUwMTRmXDVcdTAwOWVQXDJcdTAxNGRcdTAxNGZcNVx1MDBhMFFcMlx1MDE0ZVx1MDE0Ylwz
XDJcMlwyXHUwMTRlXHUwMTQ9CmMiKworCQkiXDNcMlwyXDJcdTAxNGVcdTAxNGRcM1wyXDJcMlx1
MDE0ZlwzMVwzXDJcMlwyXHUwMTUwXHUwMTUzXDVcdTAwYTJSXDJcdTA9CjE1MSIrCisJCSJcdTAx
NTNcNVx1MDBhNFNcMlx1MDE1Mlx1MDE1MFwzXDJcMlwyXHUwMTUyXHUwMTUxXDNcMlwyXDJcdTAx
NTNcMzNcM1wyIisKKwkJIlwyXDJcdTAxNTRcdTAxNTdcNVx1MDBhOFVcMlx1MDE1NVx1MDE1N1w1
XHUwMGFhVlwyXHUwMTU2XHUwMTU0XDNcMlwyXDIiKworCQkiXHUwMTU2XHUwMTU1XDNcMlwyXDJc
dTAxNTdcMzVcM1wyXDJcMlx1MDE1OFx1MDE1Ylw1ZFw2M1wyXHUwMTU5XHUwMTViIisKKwkJIlw1
Zlw2NFwyXHUwMTVhXHUwMTU4XDNcMlwyXDJcdTAxNWFcdTAxNTlcM1wyXDJcMlx1MDE1YlwzN1wz
XDJcMlwyXHUwMTVjPQoiKworCQkiXHUwMTVmXDVcdTAwY2FmXDJcdTAxNWRcdTAxNWZcNVx1MDBj
Y2dcMlx1MDE1ZVx1MDE1Y1wzXDJcMlwyXHUwMTVlXHUwMTU9CmQiKworCQkiXDNcMlwyXDJcdTAx
NWYhXDNcMlwyXDJcdTAxNjBcdTAxNjNcNVx1MDBlMnJcMlx1MDE2MVx1MDE2M1w1XHUwMGU0c1wy
IisKKwkJIlx1MDE2Mlx1MDE2MFwzXDJcMlwyXHUwMTYyXHUwMTYxXDNcMlwyXDJcdTAxNjMjXDNc
MlwyXDJcdTAxNjRcdTAxNjhcNSIrCisJCSJGJFwyXHUwMTY1XHUwMTY4XDVIJVwyXHUwMTY2XHUw
MTY4XDVKJlwyXHUwMTY3XHUwMTY0XDNcMlwyXDJcdTAxNjdcdTAxNj0KNSIrCisJCSJcM1wyXDJc
Mlx1MDE2N1x1MDE2NlwzXDJcMlwyXHUwMTY4JVwzXDJcMlwyXHUwMTY5XHUwMTZjXDVUK1wyXHUw
MTZhXHUwMT0KNmMiKworCQkiXDVWLFwyXHUwMTZiXHUwMTY5XDNcMlwyXDJcdTAxNmJcdTAxNmFc
M1wyXDJcMlx1MDE2Y1wnXDNcMlwyXDJcdTAxNmRcdTA9CjE3MCIrCisJCSJcNVx1MDBjMGFcMlx1
MDE2ZVx1MDE3MFw1XHUwMGMyYlwyXHUwMTZmXHUwMTZkXDNcMlwyXDJcdTAxNmZcdTAxNmVcM1wy
IisKKwkJIlwyXDJcdTAxNzApXDNcMlwyXDJcdTAxNzFcdTAxN2FcNVx1MDBjZWhcMlx1MDE3Mlx1
MDE3YVw1XHUwMGQwaVwyXHUwMTczPQoiKworCQkiXHUwMTdhXDVcdTAwZDJqXDJcdTAxNzRcdTAx
N2FcNVx1MDBkNGtcMlx1MDE3NVx1MDE3YVw1XHUwMGQ2bFwyXHUwMTc2IisKKwkJIlx1MDE3YVw1
XHUwMGQ4bVwyXHUwMTc3XHUwMTdhXDVcdTAwZGFuXDJcdTAxNzhcdTAxN2FcNVx1MDBkY29cMlx1
MDE3OSIrCisJCSJcdTAxNzFcM1wyXDJcMlx1MDE3OVx1MDE3MlwzXDJcMlwyXHUwMTc5XHUwMTcz
XDNcMlwyXDJcdTAxNzlcdTAxNzRcM1wyIisKKwkJIlwyXDJcdTAxNzlcdTAxNzVcM1wyXDJcMlx1
MDE3OVx1MDE3NlwzXDJcMlwyXHUwMTc5XHUwMTc3XDNcMlwyXDJcdTAxNzkiKworCQkiXHUwMTc4
XDNcMlwyXDJcdTAxN2ErXDNcMlwyXDJcdTAxN2JcdTAxN2VcNVx1MDBkZXBcMlx1MDE3Y1x1MDE3
ZVw1XHUwMGU9CjAiKworCQkicVwyXHUwMTdkXHUwMTdiXDNcMlwyXDJcdTAxN2RcdTAxN2NcM1wy
XDJcMlx1MDE3ZS1cM1wyXDJcMlx1MDE3Zlx1MDE4MiIrCisJCSJcNVQrXDJcdTAxODBcdTAxODJc
NVgtXDJcdTAxODFcdTAxN2ZcM1wyXDJcMlx1MDE4MVx1MDE4MFwzXDJcMlwyXHUwMTgyIisKKwkJ
Ii9cM1wyXDJcMlx1MDE4M1x1MDE4N1w3XDZcMlwyXHUwMTg0XHUwMTg2XDVcNjJcMzJcMlx1MDE4
NVx1MDE4NFwzXDJcMiIrCisJCSJcMlx1MDE4Nlx1MDE4OVwzXDJcMlwyXHUwMTg3XHUwMTg1XDNc
MlwyXDJcdTAxODdcdTAxODhcM1wyXDJcMlx1MDE4OFw2MT0KIisKKwkJIlwzXDJcMlwyXHUwMTg5
XHUwMTg3XDNcMlwyXDJcdTAxOGFcdTAxOTJcNVw2NFwzM1wyXHUwMThiXHUwMTkyXDVcNjZcMzQi
KworCQkiXDJcdTAxOGNcdTAxOTJcNVx1MDA5MElcMlx1MDE4ZFx1MDE5Mlw1OFwzNVwyXHUwMThl
XHUwMTkyXDVcdTAwOTZMXDJcdTA9CjE4ZiIrCisJCSJcdTAxOTJcNVx1MDA5OE1cMlx1MDE5MFx1
MDE5Mlw1XHUwMDlhTlwyXHUwMTkxXHUwMThhXDNcMlwyXDJcdTAxOTFcdTAxOD0KYiIrCisJCSJc
M1wyXDJcMlx1MDE5MVx1MDE4Y1wzXDJcMlwyXHUwMTkxXHUwMThkXDNcMlwyXDJcdTAxOTFcdTAx
OGVcM1wyXDJcMlx1MD0KMTkxIisKKwkJIlx1MDE4ZlwzXDJcMlwyXHUwMTkxXHUwMTkwXDNcMlwy
XDJcdTAxOTJcNjNcM1wyXDJcMlx1MDE5M1x1MDE5N1w1XHUwMDg2PQoiKworCQkiRFwyXHUwMTk0
XHUwMTk3XDVcdTAwODhFXDJcdTAxOTVcdTAxOTdcNVx1MDA4YUZcMlx1MDE5Nlx1MDE5M1wzXDJc
MlwyIisKKwkJIlx1MDE5Nlx1MDE5NFwzXDJcMlwyXHUwMTk2XHUwMTk1XDNcMlwyXDJcdTAxOTdc
NjVcM1wyXDJcMlx1MDE5OFx1MDE5YiIrCisJCSJcNVx1MDA4Y0dcMlx1MDE5OVx1MDE5Ylw1XHUw
MDhlSFwyXHUwMTlhXHUwMTk4XDNcMlwyXDJcdTAxOWFcdTAxOTlcM1wyIisKKwkJIlwyXDJcdTAx
OWJcNjdcM1wyXDJcMlx1MDE5Y1x1MDE5Zlw1XHUwMDkySlwyXHUwMTlkXHUwMTlmXDVcdTAwOTRL
XDJcdTAxPQo5ZSIrCisJCSJcdTAxOWNcM1wyXDJcMlx1MDE5ZVx1MDE5ZFwzXDJcMlwyXHUwMTlm
OVwzXDJcMlwyXHUwMWEwXHUwMWExXDdcYlwyXDIiKworCQkiXHUwMWExXHUwMWEyXHRcMlwyXDJc
dTAxYTI7XDNcMlwyXDJcdTAxYTNcdTAxYTRcN1x0XDJcMlx1MDFhNFx1MDFhNVx0IisKKwkJIlwy
XDJcMlx1MDFhNT0zRFwzXDJcMlwyXHUwMWE2XHUwMWE3XDdcblwyXDJcdTAxYTdcdTAxYThcdFwy
XDJcMlx1MDFhOD9cPQozIisKKwkJIlwyXDJcMlx1MDFhOVx1MDFhYVw3XDEzXDJcMlx1MDFhYVx1
MDFhYlw3YVwyXDJcdTAxYWJBXDNcMlwyXDJcdTAxYWNcdTAxPQphZCIrCisJCSJcN1xmXDJcMlx1
MDFhZFx1MDFhZVx0XDJcMlwyXHUwMWFlQ1wzXDJcMlwyXHUwMWFmXHUwMWIwXDdcclwyXDJcdTAx
YjAiKworCQkiXHUwMWIxXHRcMlwyXDJcdTAxYjFFXDNcMlwyXDJcdTAxYjJcdTAxYjNcN1wxNlwy
XDJcdTAxYjNcdTAxYjRcdFwyXDJcMiIrCisJCSJcdTAxYjRHXDNcMlwyXDJcdTAxYjVcdTAxYjZc
N1wxN1wyXDJcdTAxYjZcdTAxYjdcdFwyXDJcMlx1MDFiN0lcM1wyXDIiKworCQkiXDJcdTAxYjhc
dTAxYjlcN1wyMFwyXDJcdTAxYjlcdTAxYmFcN2FcMlwyXHUwMWJhS1wzXDJcMlwyXHUwMWJiXHUw
MWJjIisKKwkJIlw3XDIxXDJcMlx1MDFiY1x1MDFiZFx0XDJcMlwyXHUwMWJkTVwzXDJcMlwyXHUw
MWJlXHUwMWJmXDdcMjJcMlwyXHUwMWJmPQoiKworCQkiXHUwMWMwXHRcMlwyXDJcdTAxYzBPXDNc
MlwyXDJcdTAxYzFcdTAxYzJcN1wyM1wyXDJcdTAxYzJcdTAxYzNcdFwyXDJcMiIrCisJCSJcdTAx
YzNRXDNcMlwyXDJcdTAxYzRcdTAxYzVcN1wyNFwyXDJcdTAxYzVcdTAxYzZcN2FcMlwyXHUwMWM2
U1wzXDJcMlwyIisKKwkJIlx1MDFjN1x1MDFjOFw3XDI1XDJcMlx1MDFjOFx1MDFjOVx0XDJcMlwy
XHUwMWM5VVwzXDJcMlwyXHUwMWNhXHUwMWNiXDciKworCQkiXDI2XDJcMlx1MDFjYlx1MDFjY1x0
XDJcMlwyXHUwMWNjV1wzXDJcMlwyXHUwMWNkXHUwMWNlXDdcMjdcMlwyXHUwMWNlIisKKwkJIlx1
MDFjZlx0XDJcMlwyXHUwMWNmWVwzXDJcMlwyXHUwMWQwXHUwMWQxXDdcMzBcMlwyXHUwMWQxXHUw
MWQyXHRcMlwyXDIiKworCQkiXHUwMWQyW1wzXDJcMlwyXHUwMWQzXHUwMWQ0XDdcMzFcMlwyXHUw
MWQ0XHUwMWQ1XHRcMlwyXDJcdTAxZDVdXDNcMlwyIisKKwkJIlwyXHUwMWQ2XHUwMWQ3XDdcMzJc
MlwyXHUwMWQ3XHUwMWQ4XHRcMlwyXDJcdTAxZDhfXDNcMlwyXDJcdTAxZDlcdTAxZGEiKworCQki
XDdcMzNcMlwyXHUwMWRhXHUwMWRiXHRcMlwyXDJcdTAxZGJhXDNcMlwyXDJcdTAxZGNcdTAxZGRc
N1wzNFwyXDJcdTAxZGQ9CiIrCisJCSJcdTAxZGVcdFwyXDJcMlx1MDFkZWNcM1wyXDJcMlx1MDFk
Zlx1MDFlMFw3XDM1XDJcMlx1MDFlMFx1MDFlMVx0XDJcMlwyIisKKwkJIlx1MDFlMWVcM1wyXDJc
Mlx1MDFlMlx1MDFlM1w3XDM2XDJcMlx1MDFlM1x1MDFlNFw3YVwyXDJcdTAxZTRnXDNcMlwyXDIi
KworCQkiXHUwMWU1XHUwMWU2XDdcMzdcMlwyXHUwMWU2XHUwMWVhXDdhXDJcMlx1MDFlN1x1MDFl
OVw3XDdcMlwyXHUwMWU4XHUwMWU9CjciKworCQkiXDNcMlwyXDJcdTAxZTlcdTAxZWNcM1wyXDJc
Mlx1MDFlYVx1MDFlOFwzXDJcMlwyXHUwMWVhXHUwMWViXDNcMlwyXDJcdTA9CjFlYiIrCisJCSJc
dTAxZWRcM1wyXDJcMlx1MDFlY1x1MDFlYVwzXDJcMlwyXHUwMWVkXHUwMWVlXDdhXDJcMlx1MDFl
ZWlcM1wyXDJcMlx1MD0KMWVmIisKKwkJIlx1MDFmMFw3IFwyXDJcdTAxZjBcdTAxZjRcN2FcMlwy
XHUwMWYxXHUwMWYzXDdcN1wyXDJcdTAxZjJcdTAxZjFcM1wyXDIiKworCQkiXDJcdTAxZjNcdTAx
ZjZcM1wyXDJcMlx1MDFmNFx1MDFmMlwzXDJcMlwyXHUwMWY0XHUwMWY1XDNcMlwyXDJcdTAxZjVc
dTA9CjFmNyIrCisJCSJcM1wyXDJcMlx1MDFmNlx1MDFmNFwzXDJcMlwyXHUwMWY3XHUwMWY4XDdh
XDJcMlx1MDFmOGtcM1wyXDJcMlx1MDFmOVx1MD0KMWZhIisKKwkJIlw3IVwyXDJcdTAxZmFcdTAx
ZmVcN2FcMlwyXHUwMWZiXHUwMWZkXDdcN1wyXDJcdTAxZmNcdTAxZmJcM1wyXDJcMlx1MDFmPQpk
IisKKwkJIlx1MDIwMFwzXDJcMlwyXHUwMWZlXHUwMWZjXDNcMlwyXDJcdTAxZmVcdTAxZmZcM1wy
XDJcMlx1MDFmZlx1MDIwMVwzXDIiKworCQkiXDJcMlx1MDIwMFx1MDFmZVwzXDJcMlwyXHUwMjAx
XHUwMjAyXDdhXDJcMlx1MDIwMm1cM1wyXDJcMlx1MDIwM1x1MDIwNCIrCisJCSJcN1wiXDJcMlx1
MDIwNFx1MDIwOFw3YVwyXDJcdTAyMDVcdTAyMDdcN1w3XDJcMlx1MDIwNlx1MDIwNVwzXDJcMlwy
XHUwMj0KMDciKworCQkiXHUwMjBhXDNcMlwyXDJcdTAyMDhcdTAyMDZcM1wyXDJcMlx1MDIwOFx1
MDIwOVwzXDJcMlwyXHUwMjA5XHUwMjBiXDNcMiIrCisJCSJcMlwyXHUwMjBhXHUwMjA4XDNcMlwy
XDJcdTAyMGJcdTAyMGNcN2FcMlwyXHUwMjBjb1wzXDJcMlwyXHUwMjBkXHUwMjBlIisKKwkJIlw3
I1wyXDJcdTAyMGVcdTAyMTJcN2FcMlwyXHUwMjBmXHUwMjExXDdcN1wyXDJcdTAyMTBcdTAyMGZc
M1wyXDJcMlx1MDIxPQoxIisKKwkJIlx1MDIxNFwzXDJcMlwyXHUwMjEyXHUwMjEwXDNcMlwyXDJc
dTAyMTJcdTAyMTNcM1wyXDJcMlx1MDIxM1x1MDIxNVwzXDIiKworCQkiXDJcMlx1MDIxNFx1MDIx
MlwzXDJcMlwyXHUwMjE1XHUwMjE2XDdhXDJcMlx1MDIxNnFcM1wyXDJcMlx1MDIxN1x1MDIxOCIr
CisJCSJcNyRcMlwyXHUwMjE4XHUwMjE5XHRcMlwyXDJcdTAyMTlzXDNcMlwyXDJcdTAyMWFcdTAy
MWJcNyVcMlwyXHUwMjFiXHUwMj0KMWMiKworCQkiXHRcMlwyXDJcdTAyMWN1XDNcMlwyXDJcdTAy
MWRcdTAyMWVcNyZcMlwyXHUwMjFlXHUwMjFmXHRcMlwyXDJcdTAyMWZ3IisKKwkJIlwzXDJcMlwy
XHUwMjIwXHUwMjIxXDdcJ1wyXDJcdTAyMjFcdTAyMjJcdFwyXDJcMlx1MDIyMnlcM1wyXDJcMlx1
MDIyMyIrCisJCSJcdTAyMjRcNyhcMlwyXHUwMjI0XHUwMjI1XHRcMlwyXDJcdTAyMjV7XDNcMlwy
XDJcdTAyMjZcdTAyMjdcNylcMlwyXHUwMj0KMjciKworCQkiXHUwMjJiXDdhXDJcMlx1MDIyOFx1
MDIyYVw3XDdcMlwyXHUwMjI5XHUwMjI4XDNcMlwyXDJcdTAyMmFcdTAyMmRcM1wyIisKKwkJIlwy
XDJcdTAyMmJcdTAyMjlcM1wyXDJcMlx1MDIyYlx1MDIyY1wzXDJcMlwyXHUwMjJjXHUwMjJlXDNc
MlwyXDJcdTAyMmQiKworCQkiXHUwMjJiXDNcMlwyXDJcdTAyMmVcdTAyMmZcN2FcMlwyXHUwMjJm
fVwzXDJcMlwyXHUwMjMwXHUwMjMxXDcqXDJcMlx1MDI9CjMxIisKKwkJIlx1MDIzMlw3YVwyXDJc
dTAyMzJcMTc3XDNcMlwyXDJcdTAyMzNcdTAyMzRcNytcMlwyXHUwMjM0XHUwMjM1XHRcMlwyXDIi
KworCQkiXHUwMjM1XHUwMDgxXDNcMlwyXDJcdTAyMzZcdTAyMzdcNyxcMlwyXHUwMjM3XHUwMjM4
XHRcMlwyXDJcdTAyMzhcdTAwODM9CiIrCisJCSJcM1wyXDJcMlx1MDIzOVx1MDIzYVw3LVwyXDJc
dTAyM2FcdTAyM2JcN2FcMlwyXHUwMjNiXHUwMDg1XDNcMlwyXDJcdTAyMz0KYyIrCisJCSJcdTAy
M2RcNy5cMlwyXHUwMjNkXHUwMjNlXHRcMlwyXDJcdTAyM2VcdTAwODdcM1wyXDJcMlx1MDIzZlx1
MDI0MFw3L1wyIisKKwkJIlwyXHUwMjQwXHUwMjQxXHRcMlwyXDJcdTAyNDFcdTAwODlcM1wyXDJc
Mlx1MDI0Mlx1MDI0M1w3XDYwXDJcMlx1MDI0MyIrCisJCSJcdTAyNDRcN2FcMlwyXHUwMjQ0XHUw
MDhiXDNcMlwyXDJcdTAyNDVcdTAyNDZcN1w2MVwyXDJcdTAyNDZcdTAyNDdcN2EiKworCQkiXDJc
Mlx1MDI0N1x1MDA4ZFwzXDJcMlwyXHUwMjQ4XHUwMjQ5XDdcNjJcMlwyXHUwMjQ5XHUwMjRhXHRc
MlwyXDJcdTAyNGE9CiIrCisJCSJcdTAwOGZcM1wyXDJcMlx1MDI0Ylx1MDI0Y1w3XDYzXDJcMlx1
MDI0Y1x1MDI0ZFw3YVwyXDJcdTAyNGRcdTAwOTFcM1wyIisKKwkJIlwyXDJcdTAyNGVcdTAyNGZc
N1w2NFwyXDJcdTAyNGZcdTAyNTNcdFwyXDJcMlx1MDI1MFx1MDI1Mlw3XDdcMlwyXHUwMjUxPQoi
KworCQkiXHUwMjUwXDNcMlwyXDJcdTAyNTJcdTAyNTVcM1wyXDJcMlx1MDI1M1x1MDI1MVwzXDJc
MlwyXHUwMjUzXHUwMjU0XDNcMiIrCisJCSJcMlwyXHUwMjU0XHUwMjU2XDNcMlwyXDJcdTAyNTVc
dTAyNTNcM1wyXDJcMlx1MDI1Nlx1MDI1YVx0XDJcMlwyXHUwMjU3IisKKwkJIlx1MDI1OVw3XDdc
MlwyXHUwMjU4XHUwMjU3XDNcMlwyXDJcdTAyNTlcdTAyNWNcM1wyXDJcMlx1MDI1YVx1MDI1OFwz
XDIiKworCQkiXDJcMlx1MDI1YVx1MDI1YlwzXDJcMlwyXHUwMjViXHUwMjVkXDNcMlwyXDJcdTAy
NWNcdTAyNWFcM1wyXDJcMlx1MDI1ZCIrCisJCSJcdTAyNWVcdFwyXDJcMlx1MDI1ZVx1MDA5M1wz
XDJcMlwyXHUwMjVmXHUwMjYwXDdcNjVcMlwyXHUwMjYwXHUwMjY0XDciKworCQkiYVwyXDJcdTAy
NjFcdTAyNjNcN1w3XDJcMlx1MDI2Mlx1MDI2MVwzXDJcMlwyXHUwMjYzXHUwMjY2XDNcMlwyXDJc
dTAyNjQ9CiIrCisJCSJcdTAyNjJcM1wyXDJcMlx1MDI2NFx1MDI2NVwzXDJcMlwyXHUwMjY1XHUw
MjY3XDNcMlwyXDJcdTAyNjZcdTAyNjRcM1wyIisKKwkJIlwyXDJcdTAyNjdcdTAyNmJcdFwyXDJc
Mlx1MDI2OFx1MDI2YVw3XDdcMlwyXHUwMjY5XHUwMjY4XDNcMlwyXDJcdTAyNmEiKworCQkiXHUw
MjZkXDNcMlwyXDJcdTAyNmJcdTAyNjlcM1wyXDJcMlx1MDI2Ylx1MDI2Y1wzXDJcMlwyXHUwMjZj
XHUwMjZlXDNcMiIrCisJCSJcMlwyXHUwMjZkXHUwMjZiXDNcMlwyXDJcdTAyNmVcdTAyNmZcdFwy
XDJcMlx1MDI2Zlx1MDA5NVwzXDJcMlwyXHUwMjcwIisKKwkJIlx1MDI3MVw3XDY2XDJcMlx1MDI3
MVx1MDI3Mlx0XDJcMlwyXHUwMjcyXHUwMDk3XDNcMlwyXDJcdTAyNzNcdTAyNzRcNyIrCisJCSJc
NjdcMlwyXHUwMjc0XHUwMjc1XHRcMlwyXDJcdTAyNzVcdTAwOTlcM1wyXDJcMlx1MDI3Nlx1MDI3
N1w3OFwyXDJcdTAyNz0KNyIrCisJCSJcdTAyNzhcN2FcMlwyXHUwMjc4XHUwMDliXDNcMlwyXDJc
dTAyNzlcdTAyN2FcNzlcMlwyXHUwMjdhXHUwMjdiXHRcMlwyIisKKwkJIlwyXHUwMjdiXHUwMDlk
XDNcMlwyXDJcdTAyN2NcdTAyN2RcNzpcMlwyXHUwMjdkXHUwMjdlXHRcMlwyXDJcdTAyN2VcdTAw
PQo5ZiIrCisJCSJcM1wyXDJcMlx1MDI3Zlx1MDI4MFw3O1wyXDJcdTAyODBcdTAyODFcN2FcMlwy
XHUwMjgxXHUwMGExXDNcMlwyXDJcdTAyOD0KMiIrCisJCSJcdTAyODNcNzxcMlwyXHUwMjgzXHUw
Mjg0XDdhXDJcMlx1MDI4NFx1MDBhM1wzXDJcMlwyXHUwMjg1XHUwMjg2XDc9M0RcMj0KIisKKwkJ
IlwyXHUwMjg2XHUwMjg3XHRcMlwyXDJcdTAyODdcdTAwYTVcM1wyXDJcMlx1MDI4OFx1MDI4OVw3
PlwyXDJcdTAyODlcdTAyPQo4YSIrCisJCSJcN2FcMlwyXHUwMjhhXHUwMGE3XDNcMlwyXDJcdTAy
OGJcdTAyOGNcNz9cMlwyXHUwMjhjXHUwMjkwXHRcMlwyXDJcdTAyOD0KZCIrCisJCSJcdTAyOGZc
N1w3XDJcMlx1MDI4ZVx1MDI4ZFwzXDJcMlwyXHUwMjhmXHUwMjkyXDNcMlwyXDJcdTAyOTBcdTAy
OGVcM1wyIisKKwkJIlwyXDJcdTAyOTBcdTAyOTFcM1wyXDJcMlx1MDI5MVx1MDI5M1wzXDJcMlwy
XHUwMjkyXHUwMjkwXDNcMlwyXDJcdTAyOTMiKworCQkiXHUwMjk3XHRcMlwyXDJcdTAyOTRcdTAy
OTZcN1w3XDJcMlx1MDI5NVx1MDI5NFwzXDJcMlwyXHUwMjk2XHUwMjk5XDNcMiIrCisJCSJcMlwy
XHUwMjk3XHUwMjk1XDNcMlwyXDJcdTAyOTdcdTAyOThcM1wyXDJcMlx1MDI5OFx1MDI5YVwzXDJc
MlwyXHUwMjk5IisKKwkJIlx1MDI5N1wzXDJcMlwyXHUwMjlhXHUwMjliXHRcMlwyXDJcdTAyOWJc
dTAwYTlcM1wyXDJcMlx1MDI5Y1x1MDI5ZFw3QCIrCisJCSJcMlwyXHUwMjlkXHUwMmExXDdhXDJc
Mlx1MDI5ZVx1MDJhMFw3XDdcMlwyXHUwMjlmXHUwMjllXDNcMlwyXDJcdTAyYTAiKworCQkiXHUw
MmEzXDNcMlwyXDJcdTAyYTFcdTAyOWZcM1wyXDJcMlx1MDJhMVx1MDJhMlwzXDJcMlwyXHUwMmEy
XHUwMmE0XDNcMiIrCisJCSJcMlwyXHUwMmEzXHUwMmExXDNcMlwyXDJcdTAyYTRcdTAyYThcdFwy
XDJcMlx1MDJhNVx1MDJhN1w3XDdcMlwyXHUwMmE2IisKKwkJIlx1MDJhNVwzXDJcMlwyXHUwMmE3
XHUwMmFhXDNcMlwyXDJcdTAyYThcdTAyYTZcM1wyXDJcMlx1MDJhOFx1MDJhOVwzXDIiKworCQki
XDJcMlx1MDJhOVx1MDJhYlwzXDJcMlwyXHUwMmFhXHUwMmE4XDNcMlwyXDJcdTAyYWJcdTAyYWNc
dFwyXDJcMlx1MDJhYyIrCisJCSJcdTAwYWJcM1wyXDJcMlx1MDJhZFx1MDJhZVw3QVwyXDJcdTAy
YWVcdTAyYWZcdFwyXDJcMlx1MDJhZlx1MDBhZFwzXDIiKworCQkiXDJcMlx1MDJiMFx1MDJiMVw3
QlwyXDJcdTAyYjFcdTAyYjJcdFwyXDJcMlx1MDJiMlx1MDBhZlwzXDJcMlwyXHUwMmIzIisKKwkJ
Ilx1MDJiNFw3Q1wyXDJcdTAyYjRcdTAyYjVcN2FcMlwyXHUwMmI1XHUwMGIxXDNcMlwyXDJcdTAy
YjZcdTAyYjdcN0RcMiIrCisJCSJcMlx1MDJiN1x1MDJiOFx0XDJcMlwyXHUwMmI4XHUwMGIzXDNc
MlwyXDJcdTAyYjlcdTAyYmFcN0VcMlwyXHUwMmJhXHUwMj0KYmIiKworCQkiXHRcMlwyXDJcdTAy
YmJcdTAwYjVcM1wyXDJcMlx1MDJiY1x1MDJiZFw3RlwyXDJcdTAyYmRcdTAyYmVcN2FcMlwyXHUw
MmI9CmUiKworCQkiXHUwMGI3XDNcMlwyXDJcdTAyYmZcdTAyYzBcN0dcMlwyXHUwMmMwXHUwMmMx
XDdhXDJcMlx1MDJjMVx1MDBiOVwzXDJcMiIrCisJCSJcMlx1MDJjMlx1MDJjM1w3SFwyXDJcdTAy
YzNcdTAyYzRcdFwyXDJcMlx1MDJjNFx1MDBiYlwzXDJcMlwyXHUwMmM1XHUwMj0KYzYiKworCQki
XDdJXDJcMlx1MDJjNlx1MDJjYVw3YVwyXDJcdTAyYzdcdTAyYzlcN1w3XDJcMlx1MDJjOFx1MDJj
N1wzXDJcMlwyXHUwMmM9CjkiKworCQkiXHUwMmNjXDNcMlwyXDJcdTAyY2FcdTAyYzhcM1wyXDJc
Mlx1MDJjYVx1MDJjYlwzXDJcMlwyXHUwMmNiXHUwMmNkXDNcMiIrCisJCSJcMlwyXHUwMmNjXHUw
MmNhXDNcMlwyXDJcdTAyY2RcdTAyY2VcN2FcMlwyXHUwMmNlXHUwMGJkXDNcMlwyXDJcdTAyY2Yi
KworCQkiXHUwMmQwXDdKXDJcMlx1MDJkMFx1MDJkMVw3YVwyXDJcdTAyZDFcdTAwYmZcM1wyXDJc
Mlx1MDJkMlx1MDJkM1w3S1wyIisKKwkJIlwyXHUwMmQzXHUwMmQ0XHRcMlwyXDJcdTAyZDRcdTAw
YzFcM1wyXDJcMlx1MDJkNVx1MDJkNlw3TFwyXDJcdTAyZDZcdTAyPQpkNyIrCisJCSJcdFwyXDJc
Mlx1MDJkN1x1MDBjM1wzXDJcMlwyXHUwMmQ4XHUwMmQ5XDdNXDJcMlx1MDJkOVx1MDJkYVx0XDJc
MlwyXHUwMj0KZGEiKworCQkiXHUwMGM1XDNcMlwyXDJcdTAyZGJcdTAyZGNcN05cMlwyXHUwMmRj
XHUwMmRkXDdhXDJcMlx1MDJkZFx1MDBjN1wzXDJcMiIrCisJCSJcMlx1MDJkZVx1MDJkZlw3T1wy
XDJcdTAyZGZcdTAyZTBcN2FcMlwyXHUwMmUwXHUwMGM5XDNcMlwyXDJcdTAyZTFcdTAyZT0KMiIr
CisJCSJcN1BcMlwyXHUwMmUyXHUwMmU2XHRcMlwyXDJcdTAyZTNcdTAyZTVcN1w3XDJcMlx1MDJl
NFx1MDJlM1wzXDJcMlwyXHUwMj0KZTUiKworCQkiXHUwMmU4XDNcMlwyXDJcdTAyZTZcdTAyZTRc
M1wyXDJcMlx1MDJlNlx1MDJlN1wzXDJcMlwyXHUwMmU3XHUwMmU5XDNcMiIrCisJCSJcMlwyXHUw
MmU4XHUwMmU2XDNcMlwyXDJcdTAyZTlcdTAyZWRcN2FcMlwyXHUwMmVhXHUwMmVjXDdcN1wyXDJc
dTAyZWIiKworCQkiXHUwMmVhXDNcMlwyXDJcdTAyZWNcdTAyZWZcM1wyXDJcMlx1MDJlZFx1MDJl
YlwzXDJcMlwyXHUwMmVkXHUwMmVlXDNcMiIrCisJCSJcMlwyXHUwMmVlXHUwMmYwXDNcMlwyXDJc
dTAyZWZcdTAyZWRcM1wyXDJcMlx1MDJmMFx1MDJmNFx0XDJcMlwyXHUwMmYxIisKKwkJIlx1MDJm
M1w3XDdcMlwyXHUwMmYyXHUwMmYxXDNcMlwyXDJcdTAyZjNcdTAyZjZcM1wyXDJcMlx1MDJmNFx1
MDJmMlwzXDIiKworCQkiXDJcMlx1MDJmNFx1MDJmNVwzXDJcMlwyXHUwMmY1XHUwMmY3XDNcMlwy
XDJcdTAyZjZcdTAyZjRcM1wyXDJcMlx1MDJmNyIrCisJCSJcdTAyZjhcN2FcMlwyXHUwMmY4XHUw
MGNiXDNcMlwyXDJcdTAyZjlcdTAyZmFcN1FcMlwyXHUwMmZhXHUwMmZlXHRcMlwyIisKKwkJIlwy
XHUwMmZiXHUwMmZkXDdcN1wyXDJcdTAyZmNcdTAyZmJcM1wyXDJcMlx1MDJmZFx1MDMwMFwzXDJc
MlwyXHUwMmZlXHUwPQoyZmMiKworCQkiXDNcMlwyXDJcdTAyZmVcdTAyZmZcM1wyXDJcMlx1MDJm
Zlx1MDMwMVwzXDJcMlwyXHUwMzAwXHUwMmZlXDNcMlwyXDJcdTA9CjMwMSIrCisJCSJcdTAzMDVc
N2FcMlwyXHUwMzAyXHUwMzA0XDdcN1wyXDJcdTAzMDNcdTAzMDJcM1wyXDJcMlx1MDMwNFx1MDMw
N1wzXDIiKworCQkiXDJcMlx1MDMwNVx1MDMwM1wzXDJcMlwyXHUwMzA1XHUwMzA2XDNcMlwyXDJc
dTAzMDZcdTAzMDhcM1wyXDJcMlx1MDMwNyIrCisJCSJcdTAzMDVcM1wyXDJcMlx1MDMwOFx1MDMw
Y1w3YVwyXDJcdTAzMDlcdTAzMGJcN1w3XDJcMlx1MDMwYVx1MDMwOVwzXDIiKworCQkiXDJcMlx1
MDMwYlx1MDMwZVwzXDJcMlwyXHUwMzBjXHUwMzBhXDNcMlwyXDJcdTAzMGNcdTAzMGRcM1wyXDJc
Mlx1MDMwZCIrCisJCSJcdTAzMGZcM1wyXDJcMlx1MDMwZVx1MDMwY1wzXDJcMlwyXHUwMzBmXHUw
MzEwXDdhXDJcMlx1MDMxMFx1MDBjZFwzXDIiKworCQkiXDJcMlx1MDMxMVx1MDMxMlw3UlwyXDJc
dTAzMTJcdTAzMTZcdFwyXDJcMlx1MDMxM1x1MDMxNVw3XDdcMlwyXHUwMzE0IisKKwkJIlx1MDMx
M1wzXDJcMlwyXHUwMzE1XHUwMzE4XDNcMlwyXDJcdTAzMTZcdTAzMTRcM1wyXDJcMlx1MDMxNlx1
MDMxN1wzXDIiKworCQkiXDJcMlx1MDMxN1x1MDMxOVwzXDJcMlwyXHUwMzE4XHUwMzE2XDNcMlwy
XDJcdTAzMTlcdTAzMWRcN2FcMlwyXHUwMzFhIisKKwkJIlx1MDMxY1w3XDdcMlwyXHUwMzFiXHUw
MzFhXDNcMlwyXDJcdTAzMWNcdTAzMWZcM1wyXDJcMlx1MDMxZFx1MDMxYlwzXDIiKworCQkiXDJc
Mlx1MDMxZFx1MDMxZVwzXDJcMlwyXHUwMzFlXHUwMzIwXDNcMlwyXDJcdTAzMWZcdTAzMWRcM1wy
XDJcMlx1MDMyMCIrCisJCSJcdTAzMjRcdFwyXDJcMlx1MDMyMVx1MDMyM1w3XDdcMlwyXHUwMzIy
XHUwMzIxXDNcMlwyXDJcdTAzMjNcdTAzMjZcM1wyIisKKwkJIlwyXDJcdTAzMjRcdTAzMjJcM1wy
XDJcMlx1MDMyNFx1MDMyNVwzXDJcMlwyXHUwMzI1XHUwMzI4XDNcMlwyXDJcdTAzMjYiKworCQki
XHUwMzI0XDNcMlwyXDJcdTAzMjdcdTAzMjlcN2FcMlwyXHUwMzI4XHUwMzI3XDNcMlwyXDJcdTAz
MjhcdTAzMjlcM1wyIisKKwkJIlwyXDJcdTAzMjlcdTAwY2ZcM1wyXDJcMlx1MDMyYVx1MDMyYlw3
U1wyXDJcdTAzMmJcdTAzMmZcN2FcMlwyXHUwMzJjXHUwPQozMmUiKworCQkiXDdcN1wyXDJcdTAz
MmRcdTAzMmNcM1wyXDJcMlx1MDMyZVx1MDMzMVwzXDJcMlwyXHUwMzJmXHUwMzJkXDNcMlwyXDJc
dTA9CjMyZiIrCisJCSJcdTAzMzBcM1wyXDJcMlx1MDMzMFx1MDMzMlwzXDJcMlwyXHUwMzMxXHUw
MzJmXDNcMlwyXDJcdTAzMzJcdTAzMzZcN2EiKworCQkiXDJcMlx1MDMzM1x1MDMzNVw3XDdcMlwy
XHUwMzM0XHUwMzMzXDNcMlwyXDJcdTAzMzVcdTAzMzhcM1wyXDJcMlx1MDMzNiIrCisJCSJcdTAz
MzRcM1wyXDJcMlx1MDMzNlx1MDMzN1wzXDJcMlwyXHUwMzM3XHUwMzM5XDNcMlwyXDJcdTAzMzhc
dTAzMzZcM1wyIisKKwkJIlwyXDJcdTAzMzlcdTAzM2RcN2FcMlwyXHUwMzNhXHUwMzNjXDdcN1wy
XDJcdTAzM2JcdTAzM2FcM1wyXDJcMlx1MDMzYyIrCisJCSJcdTAzM2ZcM1wyXDJcMlx1MDMzZFx1
MDMzYlwzXDJcMlwyXHUwMzNkXHUwMzNlXDNcMlwyXDJcdTAzM2VcdTAzNDFcM1wyIisKKwkJIlwy
XDJcdTAzM2ZcdTAzM2RcM1wyXDJcMlx1MDM0MFx1MDM0Mlw3YVwyXDJcdTAzNDFcdTAzNDBcM1wy
XDJcMlx1MDM0MSIrCisJCSJcdTAzNDJcM1wyXDJcMlx1MDM0Mlx1MDBkMVwzXDJcMlwyXHUwMzQz
XHUwMzQ0XDdUXDJcMlx1MDM0NFx1MDM0OFx0XDIiKworCQkiXDJcMlx1MDM0NVx1MDM0N1w3XDdc
MlwyXHUwMzQ2XHUwMzQ1XDNcMlwyXDJcdTAzNDdcdTAzNGFcM1wyXDJcMlx1MDM0OCIrCisJCSJc
dTAzNDZcM1wyXDJcMlx1MDM0OFx1MDM0OVwzXDJcMlwyXHUwMzQ5XHUwMzRiXDNcMlwyXDJcdTAz
NGFcdTAzNDhcM1wyIisKKwkJIlwyXDJcdTAzNGJcdTAzNGZcN2FcMlwyXHUwMzRjXHUwMzRlXDdc
N1wyXDJcdTAzNGRcdTAzNGNcM1wyXDJcMlx1MDM0ZSIrCisJCSJcdTAzNTFcM1wyXDJcMlx1MDM0
Zlx1MDM0ZFwzXDJcMlwyXHUwMzRmXHUwMzUwXDNcMlwyXDJcdTAzNTBcdTAzNTJcM1wyIisKKwkJ
IlwyXDJcdTAzNTFcdTAzNGZcM1wyXDJcMlx1MDM1Mlx1MDM1Nlx0XDJcMlwyXHUwMzUzXHUwMzU1
XDdcN1wyXDJcdTAzNTQiKworCQkiXHUwMzUzXDNcMlwyXDJcdTAzNTVcdTAzNThcM1wyXDJcMlx1
MDM1Nlx1MDM1NFwzXDJcMlwyXHUwMzU2XHUwMzU3XDNcMiIrCisJCSJcMlwyXHUwMzU3XHUwMzYw
XDNcMlwyXDJcdTAzNThcdTAzNTZcM1wyXDJcMlx1MDM1OVx1MDM1ZFw3YVwyXDJcdTAzNWEiKwor
CQkiXHUwMzVjXDdcN1wyXDJcdTAzNWJcdTAzNWFcM1wyXDJcMlx1MDM1Y1x1MDM1ZlwzXDJcMlwy
XHUwMzVkXHUwMzViXDNcMiIrCisJCSJcMlwyXHUwMzVkXHUwMzVlXDNcMlwyXDJcdTAzNWVcdTAz
NjFcM1wyXDJcMlx1MDM1Zlx1MDM1ZFwzXDJcMlwyXHUwMzYwIisKKwkJIlx1MDM1OVwzXDJcMlwy
XHUwMzYwXHUwMzYxXDNcMlwyXDJcdTAzNjFcdTAzNjlcM1wyXDJcMlx1MDM2Mlx1MDM2Nlw3YSIr
CisJCSJcMlwyXHUwMzYzXHUwMzY1XDdcN1wyXDJcdTAzNjRcdTAzNjNcM1wyXDJcMlx1MDM2NVx1
MDM2OFwzXDJcMlwyXHUwMzY2IisKKwkJIlx1MDM2NFwzXDJcMlwyXHUwMzY2XHUwMzY3XDNcMlwy
XDJcdTAzNjdcdTAzNmFcM1wyXDJcMlx1MDM2OFx1MDM2NlwzXDIiKworCQkiXDJcMlx1MDM2OVx1
MDM2MlwzXDJcMlwyXHUwMzY5XHUwMzZhXDNcMlwyXDJcdTAzNmFcdTAzNzJcM1wyXDJcMlx1MDM2
YiIrCisJCSJcdTAzNmZcN2FcMlwyXHUwMzZjXHUwMzZlXDdcN1wyXDJcdTAzNmRcdTAzNmNcM1wy
XDJcMlx1MDM2ZVx1MDM3MVwzXDIiKworCQkiXDJcMlx1MDM2Zlx1MDM2ZFwzXDJcMlwyXHUwMzZm
XHUwMzcwXDNcMlwyXDJcdTAzNzBcdTAzNzNcM1wyXDJcMlx1MDM3MSIrCisJCSJcdTAzNmZcM1wy
XDJcMlx1MDM3Mlx1MDM2YlwzXDJcMlwyXHUwMzcyXHUwMzczXDNcMlwyXDJcdTAzNzNcdTAzNzVc
M1wyIisKKwkJIlwyXDJcdTAzNzRcdTAzNzZcdFwyXDJcMlx1MDM3NVx1MDM3NFwzXDJcMlwyXHUw
Mzc1XHUwMzc2XDNcMlwyXDJcdTAzNzYiKworCQkiXHUwMGQzXDNcMlwyXDJcdTAzNzdcdTAzNzhc
N1VcMlwyXHUwMzc4XHUwMzdjXHRcMlwyXDJcdTAzNzlcdTAzN2JcN1w3IisKKwkJIlwyXDJcdTAz
N2FcdTAzNzlcM1wyXDJcMlx1MDM3Ylx1MDM3ZVwzXDJcMlwyXHUwMzdjXHUwMzdhXDNcMlwyXDJc
dTAzN2MiKworCQkiXHUwMzdkXDNcMlwyXDJcdTAzN2RcdTAzN2ZcM1wyXDJcMlx1MDM3ZVx1MDM3
Y1wzXDJcMlwyXHUwMzdmXHUwMzgzXDdhIisKKwkJIlwyXDJcdTAzODBcdTAzODJcN1w3XDJcMlx1
MDM4MVx1MDM4MFwzXDJcMlwyXHUwMzgyXHUwMzg1XDNcMlwyXDJcdTAzODMiKworCQkiXHUwMzgx
XDNcMlwyXDJcdTAzODNcdTAzODRcM1wyXDJcMlx1MDM4NFx1MDM4NlwzXDJcMlwyXHUwMzg1XHUw
MzgzXDNcMiIrCisJCSJcMlwyXHUwMzg2XHUwMzhhXHRcMlwyXDJcdTAzODdcdTAzODlcN1w3XDJc
Mlx1MDM4OFx1MDM4N1wzXDJcMlwyXHUwMzg5IisKKwkJIlx1MDM4Y1wzXDJcMlwyXHUwMzhhXHUw
Mzg4XDNcMlwyXDJcdTAzOGFcdTAzOGJcM1wyXDJcMlx1MDM4Ylx1MDM5NFwzXDIiKworCQkiXDJc
Mlx1MDM4Y1x1MDM4YVwzXDJcMlwyXHUwMzhkXHUwMzkxXDdhXDJcMlx1MDM4ZVx1MDM5MFw3XDdc
MlwyXHUwMzhmIisKKwkJIlx1MDM4ZVwzXDJcMlwyXHUwMzkwXHUwMzkzXDNcMlwyXDJcdTAzOTFc
dTAzOGZcM1wyXDJcMlx1MDM5MVx1MDM5MlwzXDIiKworCQkiXDJcMlx1MDM5Mlx1MDM5NVwzXDJc
MlwyXHUwMzkzXHUwMzkxXDNcMlwyXDJcdTAzOTRcdTAzOGRcM1wyXDJcMlx1MDM5NCIrCisJCSJc
dTAzOTVcM1wyXDJcMlx1MDM5NVx1MDM5ZFwzXDJcMlwyXHUwMzk2XHUwMzlhXDdhXDJcMlx1MDM5
N1x1MDM5OVw3XDciKworCQkiXDJcMlx1MDM5OFx1MDM5N1wzXDJcMlwyXHUwMzk5XHUwMzljXDNc
MlwyXDJcdTAzOWFcdTAzOThcM1wyXDJcMlx1MDM5YSIrCisJCSJcdTAzOWJcM1wyXDJcMlx1MDM5
Ylx1MDM5ZVwzXDJcMlwyXHUwMzljXHUwMzlhXDNcMlwyXDJcdTAzOWRcdTAzOTZcM1wyIisKKwkJ
IlwyXDJcdTAzOWRcdTAzOWVcM1wyXDJcMlx1MDM5ZVx1MDNhNlwzXDJcMlwyXHUwMzlmXHUwM2Ez
XDdhXDJcMlx1MDNhMCIrCisJCSJcdTAzYTJcN1w3XDJcMlx1MDNhMVx1MDNhMFwzXDJcMlwyXHUw
M2EyXHUwM2E1XDNcMlwyXDJcdTAzYTNcdTAzYTFcM1wyIisKKwkJIlwyXDJcdTAzYTNcdTAzYTRc
M1wyXDJcMlx1MDNhNFx1MDNhN1wzXDJcMlwyXHUwM2E1XHUwM2EzXDNcMlwyXDJcdTAzYTYiKwor
CQkiXHUwMzlmXDNcMlwyXDJcdTAzYTZcdTAzYTdcM1wyXDJcMlx1MDNhN1x1MDNhOVwzXDJcMlwy
XHUwM2E4XHUwM2FhXHRcMiIrCisJCSJcMlwyXHUwM2E5XHUwM2E4XDNcMlwyXDJcdTAzYTlcdTAz
YWFcM1wyXDJcMlx1MDNhYVx1MDBkNVwzXDJcMlwyXHUwM2FiIisKKwkJIlx1MDNhY1w3VlwyXDJc
dTAzYWNcdTAzYjBcdFwyXDJcMlx1MDNhZFx1MDNhZlw3XDdcMlwyXHUwM2FlXHUwM2FkXDNcMiIr
CisJCSJcMlwyXHUwM2FmXHUwM2IyXDNcMlwyXDJcdTAzYjBcdTAzYWVcM1wyXDJcMlx1MDNiMFx1
MDNiMVwzXDJcMlwyXHUwM2IxIisKKwkJIlx1MDNiM1wzXDJcMlwyXHUwM2IyXHUwM2IwXDNcMlwy
XDJcdTAzYjNcdTAzYjdcN2FcMlwyXHUwM2I0XHUwM2I2XDdcNyIrCisJCSJcMlwyXHUwM2I1XHUw
M2I0XDNcMlwyXDJcdTAzYjZcdTAzYjlcM1wyXDJcMlx1MDNiN1x1MDNiNVwzXDJcMlwyXHUwM2I3
IisKKwkJIlx1MDNiOFwzXDJcMlwyXHUwM2I4XHUwM2JhXDNcMlwyXDJcdTAzYjlcdTAzYjdcM1wy
XDJcMlx1MDNiYVx1MDNiZVx0XDIiKworCQkiXDJcMlx1MDNiYlx1MDNiZFw3XDdcMlwyXHUwM2Jj
XHUwM2JiXDNcMlwyXDJcdTAzYmRcdTAzYzBcM1wyXDJcMlx1MDNiZSIrCisJCSJcdTAzYmNcM1wy
XDJcMlx1MDNiZVx1MDNiZlwzXDJcMlwyXHUwM2JmXHUwM2M4XDNcMlwyXDJcdTAzYzBcdTAzYmVc
M1wyIisKKwkJIlwyXDJcdTAzYzFcdTAzYzVcN2FcMlwyXHUwM2MyXHUwM2M0XDdcN1wyXDJcdTAz
YzNcdTAzYzJcM1wyXDJcMlx1MDNjNCIrCisJCSJcdTAzYzdcM1wyXDJcMlx1MDNjNVx1MDNjM1wz
XDJcMlwyXHUwM2M1XHUwM2M2XDNcMlwyXDJcdTAzYzZcdTAzYzlcM1wyIisKKwkJIlwyXDJcdTAz
YzdcdTAzYzVcM1wyXDJcMlx1MDNjOFx1MDNjMVwzXDJcMlwyXHUwM2M4XHUwM2M5XDNcMlwyXDJc
dTAzYzkiKworCQkiXHUwM2NiXDNcMlwyXDJcdTAzY2FcdTAzY2NcN2FcMlwyXHUwM2NiXHUwM2Nh
XDNcMlwyXDJcdTAzY2JcdTAzY2NcM1wyIisKKwkJIlwyXDJcdTAzY2NcdTAwZDdcM1wyXDJcMlx1
MDNjZFx1MDNjZVw3V1wyXDJcdTAzY2VcdTAzZDJcN2FcMlwyXHUwM2NmXHUwPQozZDEiKworCQki
XDdcN1wyXDJcdTAzZDBcdTAzY2ZcM1wyXDJcMlx1MDNkMVx1MDNkNFwzXDJcMlwyXHUwM2QyXHUw
M2QwXDNcMlwyXDJcdTA9CjNkMiIrCisJCSJcdTAzZDNcM1wyXDJcMlx1MDNkM1x1MDNkNVwzXDJc
MlwyXHUwM2Q0XHUwM2QyXDNcMlwyXDJcdTAzZDVcdTAzZDlcN2EiKworCQkiXDJcMlx1MDNkNlx1
MDNkOFw3XDdcMlwyXHUwM2Q3XHUwM2Q2XDNcMlwyXDJcdTAzZDhcdTAzZGJcM1wyXDJcMlx1MDNk
OSIrCisJCSJcdTAzZDdcM1wyXDJcMlx1MDNkOVx1MDNkYVwzXDJcMlwyXHUwM2RhXHUwM2RjXDNc
MlwyXDJcdTAzZGJcdTAzZDlcM1wyIisKKwkJIlwyXDJcdTAzZGNcdTAzZTBcN2FcMlwyXHUwM2Rk
XHUwM2RmXDdcN1wyXDJcdTAzZGVcdTAzZGRcM1wyXDJcMlx1MDNkZiIrCisJCSJcdTAzZTJcM1wy
XDJcMlx1MDNlMFx1MDNkZVwzXDJcMlwyXHUwM2UwXHUwM2UxXDNcMlwyXDJcdTAzZTFcdTAzZWFc
M1wyIisKKwkJIlwyXDJcdTAzZTJcdTAzZTBcM1wyXDJcMlx1MDNlM1x1MDNlN1w3YVwyXDJcdTAz
ZTRcdTAzZTZcN1w3XDJcMlx1MDNlNSIrCisJCSJcdTAzZTRcM1wyXDJcMlx1MDNlNlx1MDNlOVwz
XDJcMlwyXHUwM2U3XHUwM2U1XDNcMlwyXDJcdTAzZTdcdTAzZThcM1wyIisKKwkJIlwyXDJcdTAz
ZThcdTAzZWJcM1wyXDJcMlx1MDNlOVx1MDNlN1wzXDJcMlwyXHUwM2VhXHUwM2UzXDNcMlwyXDJc
dTAzZWEiKworCQkiXHUwM2ViXDNcMlwyXDJcdTAzZWJcdTAzZWRcM1wyXDJcMlx1MDNlY1x1MDNl
ZVw3YVwyXDJcdTAzZWRcdTAzZWNcM1wyIisKKwkJIlwyXDJcdTAzZWRcdTAzZWVcM1wyXDJcMlx1
MDNlZVx1MDBkOVwzXDJcMlwyXHUwM2VmXHUwM2YwXDdYXDJcMlx1MDNmMCIrCisJCSJcdTAzZjRc
dFwyXDJcMlx1MDNmMVx1MDNmM1w3XDdcMlwyXHUwM2YyXHUwM2YxXDNcMlwyXDJcdTAzZjNcdTAz
ZjZcM1wyIisKKwkJIlwyXDJcdTAzZjRcdTAzZjJcM1wyXDJcMlx1MDNmNFx1MDNmNVwzXDJcMlwy
XHUwM2Y1XHUwM2Y3XDNcMlwyXDJcdTAzZjYiKworCQkiXHUwM2Y0XDNcMlwyXDJcdTAzZjdcdTAz
ZmJcN2FcMlwyXHUwM2Y4XHUwM2ZhXDdcN1wyXDJcdTAzZjlcdTAzZjhcM1wyIisKKwkJIlwyXDJc
dTAzZmFcdTAzZmRcM1wyXDJcMlx1MDNmYlx1MDNmOVwzXDJcMlwyXHUwM2ZiXHUwM2ZjXDNcMlwy
XDJcdTAzZmMiKworCQkiXHUwM2ZlXDNcMlwyXDJcdTAzZmRcdTAzZmJcM1wyXDJcMlx1MDNmZVx1
MDQwMlx0XDJcMlwyXHUwM2ZmXHUwNDAxXDdcNyIrCisJCSJcMlwyXHUwNDAwXHUwM2ZmXDNcMlwy
XDJcdTA0MDFcdTA0MDRcM1wyXDJcMlx1MDQwMlx1MDQwMFwzXDJcMlwyXHUwNDAyIisKKwkJIlx1
MDQwM1wzXDJcMlwyXHUwNDAzXHUwNDBjXDNcMlwyXDJcdTA0MDRcdTA0MDJcM1wyXDJcMlx1MDQw
NVx1MDQwOVw3YSIrCisJCSJcMlwyXHUwNDA2XHUwNDA4XDdcN1wyXDJcdTA0MDdcdTA0MDZcM1wy
XDJcMlx1MDQwOFx1MDQwYlwzXDJcMlwyXHUwNDA5IisKKwkJIlx1MDQwN1wzXDJcMlwyXHUwNDA5
XHUwNDBhXDNcMlwyXDJcdTA0MGFcdTA0MGRcM1wyXDJcMlx1MDQwYlx1MDQwOVwzXDIiKworCQki
XDJcMlx1MDQwY1x1MDQwNVwzXDJcMlwyXHUwNDBjXHUwNDBkXDNcMlwyXDJcdTA0MGRcdTA0MTVc
M1wyXDJcMlx1MDQwZSIrCisJCSJcdTA0MTJcN2FcMlwyXHUwNDBmXHUwNDExXDdcN1wyXDJcdTA0
MTBcdTA0MGZcM1wyXDJcMlx1MDQxMVx1MDQxNFwzXDIiKworCQkiXDJcMlx1MDQxMlx1MDQxMFwz
XDJcMlwyXHUwNDEyXHUwNDEzXDNcMlwyXDJcdTA0MTNcdTA0MTZcM1wyXDJcMlx1MDQxNCIrCisJ
CSJcdTA0MTJcM1wyXDJcMlx1MDQxNVx1MDQwZVwzXDJcMlwyXHUwNDE1XHUwNDE2XDNcMlwyXDJc
dTA0MTZcdTA0MWVcM1wyIisKKwkJIlwyXDJcdTA0MTdcdTA0MWJcN2FcMlwyXHUwNDE4XHUwNDFh
XDdcN1wyXDJcdTA0MTlcdTA0MThcM1wyXDJcMlx1MDQxYSIrCisJCSJcdTA0MWRcM1wyXDJcMlx1
MDQxYlx1MDQxOVwzXDJcMlwyXHUwNDFiXHUwNDFjXDNcMlwyXDJcdTA0MWNcdTA0MWZcM1wyIisK
KwkJIlwyXDJcdTA0MWRcdTA0MWJcM1wyXDJcMlx1MDQxZVx1MDQxN1wzXDJcMlwyXHUwNDFlXHUw
NDFmXDNcMlwyXDJcdTA0MWYiKworCQkiXHUwNDI3XDNcMlwyXDJcdTA0MjBcdTA0MjRcN2FcMlwy
XHUwNDIxXHUwNDIzXDdcN1wyXDJcdTA0MjJcdTA0MjFcM1wyIisKKwkJIlwyXDJcdTA0MjNcdTA0
MjZcM1wyXDJcMlx1MDQyNFx1MDQyMlwzXDJcMlwyXHUwNDI0XHUwNDI1XDNcMlwyXDJcdTA0MjUi
KworCQkiXHUwNDI4XDNcMlwyXDJcdTA0MjZcdTA0MjRcM1wyXDJcMlx1MDQyN1x1MDQyMFwzXDJc
MlwyXHUwNDI3XHUwNDI4XDNcMiIrCisJCSJcMlwyXHUwNDI4XHUwNDI5XDNcMlwyXDJcdTA0Mjlc
dTA0MmFcdFwyXDJcMlx1MDQyYVx1MDBkYlwzXDJcMlwyXHUwNDJiIisKKwkJIlx1MDQyY1w3WVwy
XDJcdTA0MmNcdTA0MzBcdFwyXDJcMlx1MDQyZFx1MDQyZlw3XDdcMlwyXHUwNDJlXHUwNDJkXDNc
MiIrCisJCSJcMlwyXHUwNDJmXHUwNDMyXDNcMlwyXDJcdTA0MzBcdTA0MmVcM1wyXDJcMlx1MDQz
MFx1MDQzMVwzXDJcMlwyXHUwNDMxIisKKwkJIlx1MDQzM1wzXDJcMlwyXHUwNDMyXHUwNDMwXDNc
MlwyXDJcdTA0MzNcdTA0MzdcN2FcMlwyXHUwNDM0XHUwNDM2XDdcNyIrCisJCSJcMlwyXHUwNDM1
XHUwNDM0XDNcMlwyXDJcdTA0MzZcdTA0MzlcM1wyXDJcMlx1MDQzN1x1MDQzNVwzXDJcMlwyXHUw
NDM3IisKKwkJIlx1MDQzOFwzXDJcMlwyXHUwNDM4XHUwNDNhXDNcMlwyXDJcdTA0MzlcdTA0Mzdc
M1wyXDJcMlx1MDQzYVx1MDQzZVx0XDIiKworCQkiXDJcMlx1MDQzYlx1MDQzZFw3XDdcMlwyXHUw
NDNjXHUwNDNiXDNcMlwyXDJcdTA0M2RcdTA0NDBcM1wyXDJcMlx1MDQzZSIrCisJCSJcdTA0M2Nc
M1wyXDJcMlx1MDQzZVx1MDQzZlwzXDJcMlwyXHUwNDNmXHUwNDQ4XDNcMlwyXDJcdTA0NDBcdTA0
M2VcM1wyIisKKwkJIlwyXDJcdTA0NDFcdTA0NDVcN2FcMlwyXHUwNDQyXHUwNDQ0XDdcN1wyXDJc
dTA0NDNcdTA0NDJcM1wyXDJcMlx1MDQ0NCIrCisJCSJcdTA0NDdcM1wyXDJcMlx1MDQ0NVx1MDQ0
M1wzXDJcMlwyXHUwNDQ1XHUwNDQ2XDNcMlwyXDJcdTA0NDZcdTA0NDlcM1wyIisKKwkJIlwyXDJc
dTA0NDdcdTA0NDVcM1wyXDJcMlx1MDQ0OFx1MDQ0MVwzXDJcMlwyXHUwNDQ4XHUwNDQ5XDNcMlwy
XDJcdTA0NDkiKworCQkiXHUwNDRhXDNcMlwyXDJcdTA0NGFcdTA0NGVcN2FcMlwyXHUwNDRiXHUw
NDRkXDdcN1wyXDJcdTA0NGNcdTA0NGJcM1wyIisKKwkJIlwyXDJcdTA0NGRcdTA0NTBcM1wyXDJc
Mlx1MDQ0ZVx1MDQ0Y1wzXDJcMlwyXHUwNDRlXHUwNDRmXDNcMlwyXDJcdTA0NGYiKworCQkiXHUw
NDU4XDNcMlwyXDJcdTA0NTBcdTA0NGVcM1wyXDJcMlx1MDQ1MVx1MDQ1NVw3YVwyXDJcdTA0NTJc
dTA0NTRcN1w3IisKKwkJIlwyXDJcdTA0NTNcdTA0NTJcM1wyXDJcMlx1MDQ1NFx1MDQ1N1wzXDJc
MlwyXHUwNDU1XHUwNDUzXDNcMlwyXDJcdTA0NTUiKworCQkiXHUwNDU2XDNcMlwyXDJcdTA0NTZc
dTA0NTlcM1wyXDJcMlx1MDQ1N1x1MDQ1NVwzXDJcMlwyXHUwNDU4XHUwNDUxXDNcMiIrCisJCSJc
MlwyXHUwNDU4XHUwNDU5XDNcMlwyXDJcdTA0NTlcdTA0NjFcM1wyXDJcMlx1MDQ1YVx1MDQ1ZVw3
YVwyXDJcdTA0NWIiKworCQkiXHUwNDVkXDdcN1wyXDJcdTA0NWNcdTA0NWJcM1wyXDJcMlx1MDQ1
ZFx1MDQ2MFwzXDJcMlwyXHUwNDVlXHUwNDVjXDNcMiIrCisJCSJcMlwyXHUwNDVlXHUwNDVmXDNc
MlwyXDJcdTA0NWZcdTA0NjJcM1wyXDJcMlx1MDQ2MFx1MDQ1ZVwzXDJcMlwyXHUwNDYxIisKKwkJ
Ilx1MDQ1YVwzXDJcMlwyXHUwNDYxXHUwNDYyXDNcMlwyXDJcdTA0NjJcdTA0NjRcM1wyXDJcMlx1
MDQ2M1x1MDQ2NVx0XDIiKworCQkiXDJcMlx1MDQ2NFx1MDQ2M1wzXDJcMlwyXHUwNDY0XHUwNDY1
XDNcMlwyXDJcdTA0NjVcdTAwZGRcM1wyXDJcMlx1MDQ2NiIrCisJCSJcdTA0NjdcN1pcMlwyXHUw
NDY3XHUwNDZiXHRcMlwyXDJcdTA0NjhcdTA0NmFcN1w3XDJcMlx1MDQ2OVx1MDQ2OFwzXDIiKwor
CQkiXDJcMlx1MDQ2YVx1MDQ2ZFwzXDJcMlwyXHUwNDZiXHUwNDY5XDNcMlwyXDJcdTA0NmJcdTA0
NmNcM1wyXDJcMlx1MDQ2YyIrCisJCSJcdTA0NmVcM1wyXDJcMlx1MDQ2ZFx1MDQ2YlwzXDJcMlwy
XHUwNDZlXHUwNDcyXDdhXDJcMlx1MDQ2Zlx1MDQ3MVw3XDciKworCQkiXDJcMlx1MDQ3MFx1MDQ2
ZlwzXDJcMlwyXHUwNDcxXHUwNDc0XDNcMlwyXDJcdTA0NzJcdTA0NzBcM1wyXDJcMlx1MDQ3MiIr
CisJCSJcdTA0NzNcM1wyXDJcMlx1MDQ3M1x1MDQ3NVwzXDJcMlwyXHUwNDc0XHUwNDcyXDNcMlwy
XDJcdTA0NzVcdTA0NzlcN2EiKworCQkiXDJcMlx1MDQ3Nlx1MDQ3OFw3XDdcMlwyXHUwNDc3XHUw
NDc2XDNcMlwyXDJcdTA0NzhcdTA0N2JcM1wyXDJcMlx1MDQ3OSIrCisJCSJcdTA0NzdcM1wyXDJc
Mlx1MDQ3OVx1MDQ3YVwzXDJcMlwyXHUwNDdhXHUwNDdjXDNcMlwyXDJcdTA0N2JcdTA0NzlcM1wy
IisKKwkJIlwyXDJcdTA0N2NcdTA0N2RcdFwyXDJcMlx1MDQ3ZFx1MDBkZlwzXDJcMlwyXHUwNDdl
XHUwNDdmXDdbXDJcMlx1MDQ3ZiIrCisJCSJcdTA0ODBcdFwyXDJcMlx1MDQ4MFx1MDBlMVwzXDJc
MlwyXHUwNDgxXHUwNDgyXDdcXFwyXDJcdTA0ODJcdTA0ODZcdFwyIisKKwkJIlwyXDJcdTA0ODNc
dTA0ODVcN1w3XDJcMlx1MDQ4NFx1MDQ4M1wzXDJcMlwyXHUwNDg1XHUwNDg4XDNcMlwyXDJcdTA0
ODYiKworCQkiXHUwNDg0XDNcMlwyXDJcdTA0ODZcdTA0ODdcM1wyXDJcMlx1MDQ4N1x1MDQ4OVwz
XDJcMlwyXHUwNDg4XHUwNDg2XDNcMiIrCisJCSJcMlwyXHUwNDg5XHUwNDhkXDdhXDJcMlx1MDQ4
YVx1MDQ4Y1w3XDdcMlwyXHUwNDhiXHUwNDhhXDNcMlwyXDJcdTA0OGMiKworCQkiXHUwNDhmXDNc
MlwyXDJcdTA0OGRcdTA0OGJcM1wyXDJcMlx1MDQ4ZFx1MDQ4ZVwzXDJcMlwyXHUwNDhlXHUwNDkw
XDNcMiIrCisJCSJcMlwyXHUwNDhmXHUwNDhkXDNcMlwyXDJcdTA0OTBcdTA0OTRcN2FcMlwyXHUw
NDkxXHUwNDkzXDdcN1wyXDJcdTA0OTIiKworCQkiXHUwNDkxXDNcMlwyXDJcdTA0OTNcdTA0OTZc
M1wyXDJcMlx1MDQ5NFx1MDQ5MlwzXDJcMlwyXHUwNDk0XHUwNDk1XDNcMiIrCisJCSJcMlwyXHUw
NDk1XHUwNDk3XDNcMlwyXDJcdTA0OTZcdTA0OTRcM1wyXDJcMlx1MDQ5N1x1MDQ5OFx0XDJcMlwy
XHUwNDk4IisKKwkJIlx1MDBlM1wzXDJcMlwyXHUwNDk5XHUwNDlhXDddXDJcMlx1MDQ5YVx1MDQ5
Ylx0XDJcMlwyXHUwNDliXHUwMGU1XDNcMiIrCisJCSJcMlwyd1x1MDBlOVx1MDBlZFx1MDBmN1x1
MDEyM1x1MDEyNlx1MDEyYlx1MDEzOVx1MDEzZFx1MDE0MVx1MDE0NVx1MDE0OT0KIisKKwkJIlx1
MDE0ZVx1MDE1Mlx1MDE1Nlx1MDE1YVx1MDE1ZVx1MDE2Mlx1MDE2N1x1MDE2Ylx1MDE2Zlx1MDE3
OVx1MDE3ZFx1MDE4PQoxIisKKwkJIlx1MDE4N1x1MDE5MVx1MDE5Nlx1MDE5YVx1MDE5ZVx1MDFl
YVx1MDFmNFx1MDFmZVx1MDIwOFx1MDIxMlx1MDIyYlx1MDI1PQozIisKKwkJIlx1MDI1YVx1MDI2
NFx1MDI2Ylx1MDI5MFx1MDI5N1x1MDJhMVx1MDJhOFx1MDJjYVx1MDJlNlx1MDJlZFx1MDJmNFx1
MDJmPQplIisKKwkJIlx1MDMwNVx1MDMwY1x1MDMxNlx1MDMxZFx1MDMyNFx1MDMyOFx1MDMyZlx1
MDMzNlx1MDMzZFx1MDM0MVx1MDM0OFx1MDM0PQpmIisKKwkJIlx1MDM1Nlx1MDM1ZFx1MDM2MFx1
MDM2Nlx1MDM2OVx1MDM2Zlx1MDM3Mlx1MDM3NVx1MDM3Y1x1MDM4M1x1MDM4YVx1MDM5PQoxIisK
KwkJIlx1MDM5NFx1MDM5YVx1MDM5ZFx1MDNhM1x1MDNhNlx1MDNhOVx1MDNiMFx1MDNiN1x1MDNi
ZVx1MDNjNVx1MDNjOFx1MDNjPQpiIisKKwkJIlx1MDNkMlx1MDNkOVx1MDNlMFx1MDNlN1x1MDNl
YVx1MDNlZFx1MDNmNFx1MDNmYlx1MDQwMlx1MDQwOVx1MDQwY1x1MDQxPQoyIisKKwkJIlx1MDQx
NVx1MDQxYlx1MDQxZVx1MDQyNFx1MDQyN1x1MDQzMFx1MDQzN1x1MDQzZVx1MDQ0NVx1MDQ0OFx1
MDQ0ZVx1MDQ1PQo1IisKKwkJIlx1MDQ1OFx1MDQ1ZVx1MDQ2MVx1MDQ2NFx1MDQ2Ylx1MDQ3Mlx1
MDQ3OVx1MDQ4Nlx1MDQ4ZFx1MDQ5NCI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBBVE4gX0FUTiA9
M0QKKwkJbmV3IEFUTkRlc2VyaWFsaXplcigpLmRlc2VyaWFsaXplKF9zZXJpYWxpemVkQVROLnRv
Q2hhckFycmF5KCkpOworCXN0YXRpYyB7CisJCV9kZWNpc2lvblRvREZBID0zRCBuZXcgREZBW19B
VE4uZ2V0TnVtYmVyT2ZEZWNpc2lvbnMoKV07CisJCWZvciAoaW50IGkgPTNEIDA7IGkgPCBfQVRO
LmdldE51bWJlck9mRGVjaXNpb25zKCk7IGkrKykgeworCQkJX2RlY2lzaW9uVG9ERkFbaV0gPTNE
IG5ldyBERkEoX0FUTi5nZXREZWNpc2lvblN0YXRlKGkpLCBpKTsKKwkJfQorCX0KK30KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLXIgMjFhYjRkMzUxMzVhIC1yIGZkYzc1MmNkMTdm
ZSBzcmMvbWFpbi9qYXZhL2RlL2ludGV2YXRpb24vbGFkYS9pbXBvcj0KdGVyL2xhZi9MYWZQYXJz
ZXJFeGNlcHRpb24uamF2YQotLS0gYS9zcmMvbWFpbi9qYXZhL2RlL2ludGV2YXRpb24vbGFkYS9p
bXBvcnRlci9sYWYvTGFmUGFyc2VyRXhjZXB0aW9uLmphdmE9CglUdWUgU2VwIDIwIDE2OjAxOjAy
IDIwMTYgKzAyMDAKKysrIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAK
QEAgLTEsMjYgKzAsMCBAQAotLyogQ29weXJpZ2h0IChDKSAyMDEzIGJ5IEJ1bmRlc2FtdCBmdWVy
IFN0cmFobGVuc2NodXR6Ci0gKiBTb2Z0d2FyZSBlbmdpbmVlcmluZyBieSBJbnRldmF0aW9uIEdt
YkgKLSAqCi0gKiBUaGlzIGZpbGUgaXMgRnJlZSBTb2Z0d2FyZSB1bmRlciB0aGUgR05VIEdQTCAo
dj49M0QzKQotICogYW5kIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWSEgQ2hlY2sg
b3V0Ci0gKiB0aGUgZG9jdW1lbnRhdGlvbiBjb21pbmcgd2l0aCBJTUlTLUxhYm9yZGF0ZW4tQXBw
bGljYXRpb24gZm9yIGRldGFpbHMuCi0gKi8KLXBhY2thZ2UgZGUuaW50ZXZhdGlvbi5sYWRhLmlt
cG9ydGVyLmxhZjsKLQotLyoqCi0gKiBFeGNlcHRpb24gdGhyb3duIGluIHRoZSBMQUYgaW1wb3J0
IHByb2Nlc3MuCi0gKgotICogQGF1dGhvciA8YSBocmVmPTNEIm1haWx0bzpycmVua2VydEBpbnRl
dmF0aW9uLmRlIj5SYWltdW5kIFJlbmtlcnQ8L2E+Ci0gKi8KLXB1YmxpYyBjbGFzcyBMYWZQYXJz
ZXJFeGNlcHRpb24KLWV4dGVuZHMgRXhjZXB0aW9uCi17Ci0gICAgLyoqCi0gICAgICoKLSAgICAg
Ki8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPTNEIDFM
OwotCi0gICAgcHVibGljIExhZlBhcnNlckV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkgewotICAg
ICAgICBzdXBlcihtZXNzYWdlKTsKLSAgICB9Ci19CmRpZmYgLXIgMjFhYjRkMzUxMzVhIC1yIGZk
Yzc1MmNkMTdmZSBzcmMvbWFpbi9qYXZhL2RlL2ludGV2YXRpb24vbGFkYS9pbXBvcj0KdGVyL2xh
Zi9MYWZQcm9kdWNlci5qYXZhCi0tLSBhL3NyYy9tYWluL2phdmEvZGUvaW50ZXZhdGlvbi9sYWRh
L2ltcG9ydGVyL2xhZi9MYWZQcm9kdWNlci5qYXZhCVR1ZSBTZT0KcCAyMCAxNjowMTowMiAyMDE2
ICswMjAwCisrKyAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCkBAIC0x
LDQ1NiArMCwwIEBACi0vKiBDb3B5cmlnaHQgKEMpIDIwMTMgYnkgQnVuZGVzYW10IGZ1ZXIgU3Ry
YWhsZW5zY2h1dHoKLSAqIFNvZnR3YXJlIGVuZ2luZWVyaW5nIGJ5IEludGV2YXRpb24gR21iSAot
ICoKLSAqIFRoaXMgZmlsZSBpcyBGcmVlIFNvZnR3YXJlIHVuZGVyIHRoZSBHTlUgR1BMICh2Pj0z
RDMpCi0gKiBhbmQgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZISBDaGVjayBvdXQK
LSAqIHRoZSBkb2N1bWVudGF0aW9uIGNvbWluZyB3aXRoIElNSVMtTGFib3JkYXRlbi1BcHBsaWNh
dGlvbiBmb3IgZGV0YWlscy4KLSAqLwotcGFja2FnZSBkZS5pbnRldmF0aW9uLmxhZGEuaW1wb3J0
ZXIubGFmOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwu
SGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwot
Ci1pbXBvcnQgamF2YXguaW5qZWN0LkluamVjdDsKLQotaW1wb3J0IGRlLmludGV2YXRpb24ubGFk
YS5pbXBvcnRlci5SZXBvcnRJdGVtOwotaW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS5tb2RlbC5s
YW5kLktvbW1lbnRhck07Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLm1vZGVsLmxhbmQuS29t
bWVudGFyUDsKLWltcG9ydCBkZS5pbnRldmF0aW9uLmxhZGEubW9kZWwubGFuZC5NZXNzdW5nOwot
aW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS5tb2RlbC5sYW5kLk1lc3N3ZXJ0OwotaW1wb3J0IGRl
LmludGV2YXRpb24ubGFkYS5tb2RlbC5sYW5kLk9ydHN6dW9yZG51bmc7Ci1pbXBvcnQgZGUuaW50
ZXZhdGlvbi5sYWRhLm1vZGVsLmxhbmQuUHJvYmU7Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRh
Lm1vZGVsLmxhbmQuWnVzYXR6V2VydDsKLWltcG9ydCBkZS5pbnRldmF0aW9uLmxhZGEubW9kZWwu
c3RhbW1kYXRlbi5PcnQ7Ci0KLS8qKgotICogVGhlIExBRlByb2R1Y2VyIGNyZWF0ZXMgZW50aXR5
IG9iamVjdHMgZm9ybSBrZXktdmFsdWUgcGFpcnMgdXNpbmcgdGhlCi0gKiBBdHRyaWJ1dGVNYXBw
ZXIuCi0gKgotICogQGF1dGhvciA8YSBocmVmPTNEIm1haWx0bzpycmVua2VydEBpbnRldmF0aW9u
LmRlIj5SYWltdW5kIFJlbmtlcnQ8L2E+Ci0gKi8KLXB1YmxpYyBjbGFzcyBMYWZQcm9kdWNlcgot
ewotICAgIC8qKgotICAgICAqIFRoZSBwcm9iZSBvYmplY3QgY3JlYXRlZCBieSB0aGlzIHByb2R1
Y2VyLgotICAgICAqLwotICAgIHByaXZhdGUgUHJvYmUgcHJvYmU7Ci0KLSAgICAvKioKLSAgICAg
KiBUaGUgbWVzc3VuZyBvYmplY3QgY3JlYXRlZCBieSB0aGlzIHByb2R1Y2VyLgotICAgICAqLwot
ICAgIHByaXZhdGUgTWVzc3VuZyBtZXNzdW5nOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRvciB1
c2VkIHRvIGJ1aWxkIG9ydCBvYmplY3RzLgotICAgICAqLwotICAgIEBJbmplY3QKLSAgICBwcml2
YXRlIE9ydENyZWF0b3Igb3J0OwotCi0gICAgLyoqCi0gICAgICogUHJvYmVrb21tZW50YXJlIGNy
ZWF0ZWQgYnkgdGhpcyBwcm9kdWNlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIExpc3Q8S29tbWVu
dGFyUD4gcEtvbW1lbnRhcmU7Ci0KLSAgICAvKioKLSAgICAgKiBNZXNzdW5nc2tvbW1lbnRhcmUg
Y3JlYXRlZCBieSB0aGlzIHByb2R1Y2VyLgotICAgICAqLwotICAgIHByaXZhdGUgTWFwPE1lc3N1
bmcsIExpc3Q8S29tbWVudGFyTT4+IG1Lb21tZW50YXJlOwotCi0gICAgLyoqCi0gICAgICogTWVz
c3VuZ2VuIGNyZWF0ZWQgYnkgdGhpcyBwcm9kdWNlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIExp
c3Q8TWVzc3VuZz4gbWVzc3VuZ2VuOwotCi0gICAgLyoqCi0gICAgICogT3J0ZSBjcmVhdGVkIGJ5
IHRoaXMgcHJvZHVjZXIuCi0gICAgICovCi0gICAgcHJpdmF0ZSBMaXN0PE9ydHN6dW9yZG51bmc+
IG9ydHN6dW9yZG51bmdlbjsKLQotICAgIC8qKgotICAgICAqIFNPcnRlIGNyZWF0ZWQgYnkgdGhp
cyBwcm9kdWNlci4KLSAgICAgKi8KLSAgICBwcml2YXRlIExpc3Q8T3J0PiBvcnRlOwotCi0gICAg
LyoqCi0gICAgICogTWVzc3dlcnRlIGNyZWF0ZWQgYnkgdGhpcyBwcm9kdWNlci4KLSAgICAgKi8K
LSAgICBwcml2YXRlIE1hcDxNZXNzdW5nLCBMaXN0PE1lc3N3ZXJ0Pj4gbWVzc3dlcnRlOwotCi0g
ICAgLyoqCi0gICAgICogWnVzYXR6d2VydGUgY3JlYXRlZCBieSB0aGlzIHByb2R1Y2VyLgotICAg
ICAqLwotICAgIHByaXZhdGUgTGlzdDxadXNhdHpXZXJ0PiB6dXNhdHp3ZXJ0ZTsKLQotICAgIC8q
KgotICAgICAqIEZvcm1hdCBtYXBwaW5nIGZvciBwcm9iZSBvYmplY3RzLgotICAgICAqLwotICAg
IHByaXZhdGUgTGlzdDxFbnRyeUZvcm1hdD4gcHJvYmVuRm9ybWF0OwotCi0gICAgLyoqCi0gICAg
ICogRm9ybWF0IG1hcHBpbmcgZm9yIG1lc3N1bmcgb2JqZWN0cy4KLSAgICAgKi8KLSAgICBwcml2
YXRlIExpc3Q8RW50cnlGb3JtYXQ+IG1lc3N1bmdGb3JtYXQ7Ci0KLSAgICAvKioKLSAgICAgKiBG
b3JtYXQgbWFwcGluZyBmb3Igb3J0IG9iamVjdHMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBMaXN0
PEVudHJ5Rm9ybWF0PiBvcnRGb3JtYXQ7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgd2FybmluZ3Mu
Ci0gICAgICovCi0gICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBMaXN0PFJlcG9ydEl0ZW0+PiB3YXJu
aW5nczsKLQotICAgIC8qKgotICAgICAqIFRoZSBlcnJvcnMuCi0gICAgICovCi0gICAgcHJpdmF0
ZSBNYXA8U3RyaW5nLCBMaXN0PFJlcG9ydEl0ZW0+PiBlcnJvcnM7Ci0KLSAgICAvKioKLSAgICAg
KiBUaGUgbWFwcGVyIHVzZWQgdG8gc2V0IGF0dHJpYnV0ZXMuCi0gICAgICovCi0gICAgQEluamVj
dAotICAgIHByaXZhdGUgQXR0cmlidXRlTWFwcGVyIG1hcHBlcjsKLQotICAgIC8qKgotICAgICAq
IERlZmF1bHQgY29udHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb2R1Y2VyIGFuZCByZWFkcyB0
aGUgY29uZmlnIGY9CmlsZQotICAgICAqIHVzaW5nIHRoZSBzeXN0ZW1wcm9wZXJ0eSAiZGUuaW50
ZXZhdGlvbi5sYWRhLmltcG9ydGNvbmZpZyIuCi0gICAgICovCi0gICAgcHVibGljIExhZlByb2R1
Y2VyKCkgewotICAgICAgICB0aGlzLndhcm5pbmdzID0zRCBuZXcgSGFzaE1hcDxTdHJpbmcsIExp
c3Q8UmVwb3J0SXRlbT4+KCk7Ci0gICAgICAgIHRoaXMuZXJyb3JzID0zRCBuZXcgSGFzaE1hcDxT
dHJpbmcsIExpc3Q8UmVwb3J0SXRlbT4+KCk7Ci0gICAgICAgIHRoaXMucHJvYmUgPTNEIG5ldyBQ
cm9iZSgpOwotICAgICAgICB0aGlzLnBLb21tZW50YXJlID0zRCBuZXcgQXJyYXlMaXN0PEtvbW1l
bnRhclA+KCk7Ci0gICAgICAgIHRoaXMubUtvbW1lbnRhcmUgPTNEIG5ldyBIYXNoTWFwPE1lc3N1
bmcsIExpc3Q8S29tbWVudGFyTT4+KCk7Ci0gICAgICAgIHRoaXMubWVzc3VuZ2VuID0zRCBuZXcg
QXJyYXlMaXN0PE1lc3N1bmc+KCk7Ci0gICAgICAgIHRoaXMub3J0c3p1b3JkbnVuZ2VuID0zRCBu
ZXcgQXJyYXlMaXN0PE9ydHN6dW9yZG51bmc+KCk7Ci0gICAgICAgIHRoaXMubWVzc3dlcnRlID0z
RCBuZXcgSGFzaE1hcDxNZXNzdW5nLCBMaXN0PE1lc3N3ZXJ0Pj4oKTsKLSAgICAgICAgU3RyaW5n
IGZpbGVOYW1lID0zRCAiL2ltcG9ydC5qc29uIjsKLSAgICAgICAgTGFmRm9ybWF0IGZvcm1hdCA9
M0QgbmV3IExhZkZvcm1hdCgpOwotICAgICAgICBmb3JtYXQucmVhZENvbmZpZ0ZpbGUoZmlsZU5h
bWUpOwotICAgICAgICBwcm9iZW5Gb3JtYXQgPTNEIGZvcm1hdC5nZXRGb3JtYXQoInByb2JlIik7
Ci0gICAgICAgIG1lc3N1bmdGb3JtYXQgPTNEIGZvcm1hdC5nZXRGb3JtYXQoIm1lc3N1bmciKTsK
LSAgICAgICAgb3J0Rm9ybWF0ID0zRCBmb3JtYXQuZ2V0Rm9ybWF0KCJvcnQiKTsKLSAgICB9Ci0K
LSAgICAvKioKLSAgICAgKiBBZGQgZGF0YSB0byB0aGUgcHJvZHVjZXIuCi0gICAgICogVGhpcyB0
cmlnZ2VycyB0aGUgcHJvZHVjZXIgdG8gY3JlYXRlIGEgbmV3IG9iamVjdCBvciBhZGQgZGF0YSB0
bwotICAgICAqIGV4aXN0aW5nIG9iamVjdHMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ga2V5ICAg
ICAgIFRoZSBrZXkuCi0gICAgICogQHBhcmFtIHZhbHVlcyAgICBUaGUgdmFsdWUKLSAgICAgKiBA
dGhyb3dzIExhZlBhcnNlckV4Y2VwdGlvbgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZERh
dGEoU3RyaW5nIGtleSwgT2JqZWN0IHZhbHVlcykKLSAgICB0aHJvd3MgTGFmUGFyc2VyRXhjZXB0
aW9uIHsKLSAgICAgICAgU3RyaW5nIGxLZXkgPTNEIGtleS50b0xvd2VyQ2FzZSgpOwotICAgICAg
ICBpZihsS2V5LmVxdWFscygicHJvYmVua29tbWVudGFyIikpIHsKLSAgICAgICAgICAgIEtvbW1l
bnRhclAga29tbWVudGFyID0zRCBuZXcgS29tbWVudGFyUCgpOwotICAgICAgICAgICAga29tbWVu
dGFyLnNldFByb2JlSWQodGhpcy5wcm9iZS5nZXRJZCgpKTsKLSAgICAgICAgICAgIHRoaXMucEtv
bW1lbnRhcmUuYWRkKAotICAgICAgICAgICAgICAgIG1hcHBlci5hZGRBdHRyaWJ1dGUobEtleSwg
dmFsdWVzLCBrb21tZW50YXIpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChsS2V5LmVx
dWFscygia29tbWVudGFyIikpIHsKLSAgICAgICAgICAgIEtvbW1lbnRhck0ga29tbWVudGFyID0z
RCBuZXcgS29tbWVudGFyTSgpOwotICAgICAgICAgICAga29tbWVudGFyLnNldE1lc3N1bmdzSWQo
dGhpcy5tZXNzdW5nLmdldElkKCkpOwotICAgICAgICAgICAgaWYgKHRoaXMubUtvbW1lbnRhcmUu
Z2V0KHRoaXMubWVzc3VuZykgPTNEPTNEIG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm1L
b21tZW50YXJlLnB1dCh0aGlzLm1lc3N1bmcsIG5ldyBBcnJheUxpc3Q8S29tbWVudGFyPQpNPigp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMubUtvbW1lbnRhcmUuZ2V0KHRoaXMu
bWVzc3VuZykuYWRkKAotICAgICAgICAgICAgICAgIG1hcHBlci5hZGRBdHRyaWJ1dGUobEtleSwg
dmFsdWVzLCBrb21tZW50YXIpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChsS2V5LmVx
dWFscygicHJvYmVuenVzYXR6YmVzY2hyZWlidW5nIikpIHsKLSAgICAgICAgICAgIFp1c2F0eldl
cnQgd2VydCA9M0QgbmV3IFp1c2F0eldlcnQoKTsKLSAgICAgICAgICAgIFp1c2F0eldlcnQgenVz
YXR6V2VydCA9M0QgbWFwcGVyLmFkZEF0dHJpYnV0ZShsS2V5LCB2YWx1ZXMsIHdlPQpydCk7Ci0g
ICAgICAgICAgICBpZiAoenVzYXR6V2VydCAhPTNEIG51bGwpIHsKLSAgICAgICAgICAgICAgICB6
dXNhdHpXZXJ0LnNldFByb2JlSWQocHJvYmUuZ2V0SWQoKSk7Ci0gICAgICAgICAgICAgICAgdGhp
cy56dXNhdHp3ZXJ0ZS5hZGQoenVzYXR6V2VydCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZWtleSA9M0QgcHJvYmUuZ2V0SWQoKSA9
M0Q9M0QgbnVsbCA/Ci0gICAgICAgICAgICAgICAgICAgICJwcm9iZUlkIiA6IHByb2JlLmdldElk
KCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBMaXN0PFJlcG9ydEl0ZW0+IGVyciA9M0Qg
dGhpcy5lcnJvcnMuZ2V0KGVrZXkpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgPTNEPTNEIG51
bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHV0KGVrZXksIG1hcHBlci5n
ZXRFcnJvcnMoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBlcnIuYWRkQWxsKG1hcHBlci5nZXRFcnJvcnMoKSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KGxLZXkuZXF1YWxzKCJwemJfcyIpKSB7Ci0gICAgICAgICAgICBadXNhdHpXZXJ0IHdlcnQgPTNE
IG5ldyBadXNhdHpXZXJ0KCk7Ci0gICAgICAgICAgICBadXNhdHpXZXJ0IHp1c2F0eldlcnQgPTNE
IG1hcHBlci5hZGRBdHRyaWJ1dGVTKGxLZXksIHZhbHVlcywgdz0KZXJ0KTsKLSAgICAgICAgICAg
IGlmICh6dXNhdHpXZXJ0ICE9M0QgbnVsbCkgewotICAgICAgICAgICAgICAgIHp1c2F0eldlcnQu
c2V0UHJvYmVJZChwcm9iZS5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgICB0aGlzLnp1c2F0endl
cnRlLmFkZCh6dXNhdHpXZXJ0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIFN0cmluZyBla2V5ID0zRCBwcm9iZS5nZXRJZCgpID0zRD0zRCBudWxs
ID8KLSAgICAgICAgICAgICAgICAgICAgInByb2JlSWQiIDogcHJvYmUuZ2V0SWQoKS50b1N0cmlu
ZygpOwotICAgICAgICAgICAgICAgIExpc3Q8UmVwb3J0SXRlbT4gZXJyID0zRCB0aGlzLmVycm9y
cy5nZXQoZWtleSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciA9M0Q9M0QgbnVsbCkgewotICAg
ICAgICAgICAgICAgICAgICB0aGlzLmVycm9ycy5wdXQoZWtleSwgbWFwcGVyLmdldEVycm9ycygp
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGVyci5hZGRBbGwobWFwcGVyLmdldEVycm9ycygpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobEtleS5lcXVh
bHMoIm1lc3N3ZXJ0IikpIHsKLSAgICAgICAgICAgIE1lc3N3ZXJ0IG0gPTNEIG5ldyBNZXNzd2Vy
dCgpOwotICAgICAgICAgICAgbS5zZXRNZXNzdW5nc0lkKHRoaXMubWVzc3VuZy5nZXRJZCgpKTsK
LSAgICAgICAgICAgIE1lc3N3ZXJ0IHdlcnQgPTNEIG1hcHBlci5hZGRBdHRyaWJ1dGUobEtleSwg
dmFsdWVzLCBtKTsKLSAgICAgICAgICAgIGlmICh3ZXJ0ICE9M0QgbnVsbCkgewotICAgICAgICAg
ICAgICAgIGlmICh0aGlzLm1lc3N3ZXJ0ZS5nZXQodGhpcy5tZXNzdW5nKSA9M0Q9M0QgbnVsbCkg
ewotICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3N3ZXJ0ZS5wdXQodGhpcy5tZXNzdW5nLCBu
ZXcgQXJyYXlMaXN0PE1lc3N3ZXI9CnQ+KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB0aGlzLm1lc3N3ZXJ0ZS5nZXQodGhpcy5tZXNzdW5nKS5hZGQoCi0gICAgICAgICAg
ICAgICAgICAgIG1hcHBlci5hZGRBdHRyaWJ1dGUobEtleSwgdmFsdWVzLCB3ZXJ0KSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZWtl
eSA9M0QgcHJvYmUuZ2V0SWQoKSA9M0Q9M0QgbnVsbCA/Ci0gICAgICAgICAgICAgICAgICAgICJw
cm9iZUlkIiA6IHByb2JlLmdldElkKCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBMaXN0
PFJlcG9ydEl0ZW0+IGVyciA9M0QgdGhpcy5lcnJvcnMuZ2V0KGVrZXkpOwotICAgICAgICAgICAg
ICAgIGlmIChlcnIgPTNEPTNEIG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJv
cnMucHV0KGVrZXksIG1hcHBlci5nZXRFcnJvcnMoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBlcnIuYWRkQWxsKG1hcHBl
ci5nZXRFcnJvcnMoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKGlzVmFsaWRNZXNzdW5nKGxLZXksIHZhbHVlcy50b1N0cmlu
ZygpKSkgewotICAgICAgICAgICAgdGhpcy5tZXNzdW5nID0zRCBtYXBwZXIuYWRkQXR0cmlidXRl
KGxLZXksIHZhbHVlcywgdGhpcy5tZXNzdW49CmcpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKGlzVmFsaWRQcm9iZShsS2V5LCB2YWx1ZXMudG9TdHJpbmcoKSkpIHsKLSAgICAgICAgICAg
IHRoaXMucHJvYmUgPTNEIG1hcHBlci5hZGRBdHRyaWJ1dGUobEtleSwgdmFsdWVzLCB0aGlzLnBy
b2JlKTsKLSAgICAgICAgICAgIGlmICh0aGlzLnByb2JlID0zRD0zRCBudWxsKSB7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5lcnJvcnMucHV0KHZhbHVlcy50b1N0cmluZygpLCBtYXBwZXIuZ2V0RXJy
b3JzKCkpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBMYWZQYXJzZXJFeGNlcHRpb24odmFs
dWVzLnRvU3RyaW5nKCkgKyAiIGV4aXN0cyI9Cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBpZiAoaXNWYWxpZE9ydChsS2V5LCB2YWx1ZXMudG9TdHJpbmcoKSkpIHsK
LSAgICAgICAgICAgIHRoaXMub3J0LmFkZEF0dHJpYnV0ZShsS2V5LCB2YWx1ZXMpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhlIGtleSBpcyBkZWZpbmVk
IGluIHRoZSBjb25maWcgZmlsZSBhbmQgdmFsaWRhdGUgdGhlIHZhbD0KdWUKLSAgICAgKiB1c2lu
ZyB0aGUgcGF0dGVybiBkZWZpbmVkIGZvciB0aGlzIGtleS4KLSAgICAgKgotICAgICAqIEBwYXJh
bSBrZXkgICBUaGUga2V5LgotICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUuCi0gICAgICog
QHJldHVybiB2YWxpZCBvciBub3QuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzVmFs
aWRPcnQoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgICAgIGZvciAoRW50cnlGb3Jt
YXQgZWY6IG9ydEZvcm1hdCkgewotICAgICAgICAgICAgaWYgKGVmLmdldEtleSgpLmVxdWFscyhr
ZXkudG9Mb3dlckNhc2UoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZWYuZ2V0UGF0dGVybigp
Lm1hdGNoZXIodmFsdWUpLm1hdGNoZXMoKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoZSBr
ZXkgaXMgZGVmaW5lZCBpbiB0aGUgY29uZmlnIGZpbGUgYW5kIHZhbGlkYXRlIHRoZSB2YWw9CnVl
Ci0gICAgICogdXNpbmcgdGhlIHBhdHRlcm4gZGVmaW5lZCBmb3IgdGhpcyBrZXkuCi0gICAgICoK
LSAgICAgKiBAcGFyYW0ga2V5ICAgVGhlIGtleS4KLSAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZh
bHVlLgotICAgICAqIEByZXR1cm4gdmFsaWQgb3Igbm90LgotICAgICAqLwotICAgIHByaXZhdGUg
Ym9vbGVhbiBpc1ZhbGlkTWVzc3VuZyhTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsKLSAgICAg
ICAgZm9yIChFbnRyeUZvcm1hdCBlZjogbWVzc3VuZ0Zvcm1hdCkgewotICAgICAgICAgICAgaWYg
KGVmLmdldEtleSgpLmVxdWFscyhrZXkudG9Mb3dlckNhc2UoKSkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZWYuZ2V0UGF0dGVybigpLm1hdGNoZXIodmFsdWUpLm1hdGNoZXMoKSkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIENoZWNrIGlmIHRoZSBrZXkgaXMgZGVmaW5lZCBpbiB0aGUgY29uZmlnIGZpbGUgYW5k
IHZhbGlkYXRlIHRoZSB2YWw9CnVlCi0gICAgICogdXNpbmcgdGhlIHBhdHRlcm4gZGVmaW5lZCBm
b3IgdGhpcyBrZXkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ga2V5ICAgVGhlIGtleS4KLSAgICAg
KiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlLgotICAgICAqIEByZXR1cm4gdmFsaWQgb3Igbm90Lgot
ICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc1ZhbGlkUHJvYmUoU3RyaW5nIGtleSwgU3Ry
aW5nIHZhbHVlKSB7Ci0gICAgICAgIGZvciAoRW50cnlGb3JtYXQgZWY6IHByb2JlbkZvcm1hdCkg
ewotICAgICAgICAgICAgaWYgKGVmLmdldEtleSgpLmVxdWFscyhrZXkudG9Mb3dlckNhc2UoKSkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZWYuZ2V0UGF0dGVybigpLm1hdGNoZXIodmFsdWUpLm1h
dGNoZXMoKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIHtAbGluayBMUHJvYmV9IGVudGl0
eS4KLSAgICAgKi8KLSAgICBwdWJsaWMgUHJvYmUgZ2V0UHJvYmUoKSB7Ci0gICAgICAgIHJldHVy
biB0aGlzLnByb2JlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gTGlzdCBvZiB7
QGxpbmsgTE1lc3N1bmd9IGVudGl0aWVzLgotICAgICAqLwotICAgIHB1YmxpYyBMaXN0PE1lc3N1
bmc+IGdldE1lc3N1bmdlbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubWVzc3VuZ2VuOwotICAg
IH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gTGlzdCBvZiB7QGxpbmsgT3J0fSBlbnRpdGll
cy4KLSAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxPcnQ+IGdldE9ydGUoKSB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLm9ydGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiBMaXN0IG9m
IHtAbGluayBMT3J0fSBlbnRpdGllcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxPcnRzenVv
cmRudW5nPiBnZXRPcnRzenVvcmRudW5nZW4oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm9ydHN6
dW9yZG51bmdlbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIExpc3Qgb2Yge0Bs
aW5rIExLb21tZW50YXJQfSBlbnRpdGllcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxLb21t
ZW50YXJQPiBnZXRQcm9iZW5Lb21tZW50YXJlKCkgewotICAgICAgICByZXR1cm4gdGhpcy5wS29t
bWVudGFyZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIExpc3Qgb2Yge0BsaW5r
IExLb21tZW50YXJNfSBlbnRpdGllcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgTWFwPE1lc3N1bmcs
IExpc3Q8S29tbWVudGFyTT4+IGdldE1lc3N1bmdzS29tbWVudGFyZSgpIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMubUtvbW1lbnRhcmU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiBM
aXN0IG9mIHtAbGluayBMTWVzc3dlcnR9IGVudGl0aWVzLgotICAgICAqLwotICAgIHB1YmxpYyBN
YXA8TWVzc3VuZywgTGlzdDxNZXNzd2VydD4+IGdldE1lc3N3ZXJ0ZSgpIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMubWVzc3dlcnRlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gTGlz
dCBvZiB7QGxpbmsgTFp1c2F0eldlcnR9IGVudGl0aWVzLgotICAgICAqLwotICAgIHB1YmxpYyBM
aXN0PFp1c2F0eldlcnQ+IGdldFp1c2F0endlcnRlKCkgewotICAgICAgICByZXR1cm4gdGhpcy56
dXNhdHp3ZXJ0ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXNldCBlcnJvcnMgYW5kIHdh
cm5pbmdzLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgewotICAgICAgICB0aGlz
LmVycm9ycyA9M0QgbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PFJlcG9ydEl0ZW0+PigpOwotICAg
ICAgICB0aGlzLndhcm5pbmdzID0zRCBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8UmVwb3J0SXRl
bT4+KCk7Ci0gICAgICAgIHRoaXMucHJvYmUgPTNEIG5ldyBQcm9iZSgpOwotICAgICAgICB0aGlz
Lm1lc3N1bmdlbiA9M0QgbmV3IEFycmF5TGlzdDxNZXNzdW5nPigpOwotICAgICAgICB0aGlzLm1l
c3N1bmcgPTNEIG51bGw7Ci0gICAgICAgIHRoaXMub3J0c3p1b3JkbnVuZ2VuID0zRCBuZXcgQXJy
YXlMaXN0PE9ydHN6dW9yZG51bmc+KCk7Ci0gICAgICAgIHRoaXMub3J0ZSA9M0QgbmV3IEFycmF5
TGlzdDxPcnQ+KCk7Ci0gICAgICAgIHRoaXMub3J0LnJlc2V0KCk7Ci0gICAgICAgIHRoaXMubWVz
c3dlcnRlID0zRCBuZXcgSGFzaE1hcDxNZXNzdW5nLCBMaXN0PE1lc3N3ZXJ0Pj4oKTsKLSAgICAg
ICAgdGhpcy5tS29tbWVudGFyZSA9M0QgbmV3IEhhc2hNYXA8TWVzc3VuZywgTGlzdDxLb21tZW50
YXJNPj4oKTsKLSAgICAgICAgdGhpcy5wS29tbWVudGFyZSA9M0QgbmV3IEFycmF5TGlzdDxLb21t
ZW50YXJQPigpOwotICAgICAgICBtYXBwZXIucmVzZXQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAgKiBBZGQgdGhlIGN1cnJlbnQge0BsaW5rIExNZXNzdW5nfSBlbnRpdHkgdG8gdGhlIExpc3Qg
YW5kIGNyZWF0ZSBhIG5lPQp3IG9uZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBuZXdNZXNz
dW5nKCkgewotICAgICAgICBpZiAodGhpcy5tZXNzdW5nICE9M0QgbnVsbCkgewotICAgICAgICAg
ICAgaWYgKHRoaXMubWVzc3VuZy5nZXRGZXJ0aWcoKSA9M0Q9M0QgbnVsbCkgewotICAgICAgICAg
ICAgICAgIHRoaXMubWVzc3VuZy5zZXRGZXJ0aWcoZmFsc2UpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHRoaXMubWVzc3VuZy5nZXRHZXBsYW50KCkgPTNEPTNEIG51bGwpIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLm1lc3N1bmcuc2V0R2VwbGFudChmYWxzZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB0aGlzLm1lc3N1bmdlbi5hZGQodGhpcy5tZXNzdW5nKTsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLm1lc3N1bmcgPTNEIG5ldyBNZXNzdW5nKCk7Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogQWRkIHRoZSB7QGxpbmsgT3J0fSBhbmQge0BsaW5rIExPcnR9IGVudGl0
aWVzIHRvIHRoZSBsaXN0cyBhbmQgY3JlYT0KdGUKLSAgICAgKiBhIG5ldyB7QGxpbmsgT3J0Q3Jl
YXRvcn0uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgbmV3T3J0KCkgewotICAgICAgICBpZiAo
dGhpcy5vcnQgIT0zRCBudWxsKSB7Ci0gICAgICAgICAgICBPcnQgbyA9M0QgdGhpcy5vcnQudG9P
cnQoKTsKLSAgICAgICAgICAgIGlmIChvICE9M0QgbnVsbCkgewotICAgICAgICAgICAgICAgIHRo
aXMub3J0ZS5hZGQobyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBPcnRzenVvcmRudW5n
IGxvID0zRCB0aGlzLm9ydC50b09ydHN6dW9yZG51bmcoKTsKLSAgICAgICAgICAgIGlmIChsbyAh
PTNEIG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm9ydHN6dW9yZG51bmdlbi5hZGQobG8p
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIE9ydENyZWF0b3IgY3JlYXRvciA9
M0QgdGhpcy5vcnQ7Ci0gICAgICAgIGNyZWF0b3IucmVzZXQoKTsKLSAgICAgICAgY3JlYXRvci5z
ZXRQcm9iZUlkKHRoaXMucHJvYmUuZ2V0SWQoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog
QHJldHVybiB0aGUgd2FybmluZ3MKLSAgICAgKi8KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgTGlz
dDxSZXBvcnRJdGVtPj4gZ2V0V2FybmluZ3MoKSB7Ci0gICAgICAgIGlmICh0aGlzLnByb2JlID0z
RD0zRCBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy53YXJuaW5nczsKLSAgICAgICAg
fQotICAgICAgICBpZiAobWFwcGVyLmdldFdhcm5pbmdzKCkgPTNEPTNEIG51bGwgfHwgbWFwcGVy
LmdldFdhcm5pbmdzKCkuc2l6ZSg9CikgPTNEPTNEIDApIHsKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLndhcm5pbmdzOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBrZXkgPTNEIHByb2JlLmdl
dElkKCkgPTNEPTNEIG51bGwgPyAicHJvYmVJZCIgOiBwcm9iZS5nZXRJZD0KKCkudG9TdHJpbmco
KTsKLSAgICAgICAgTGlzdDxSZXBvcnRJdGVtPiB3YXJuID0zRCB0aGlzLndhcm5pbmdzLmdldChr
ZXkpOwotICAgICAgICBpZiAod2FybiA9M0Q9M0QgbnVsbCkgewotICAgICAgICAgICAgdGhpcy53
YXJuaW5ncy5wdXQoa2V5LCBtYXBwZXIuZ2V0V2FybmluZ3MoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICB3YXJuLmFkZEFsbChtYXBwZXIuZ2V0V2FybmluZ3MoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMud2FybmluZ3M7Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgICogQHJldHVybiB0aGUgZXJyb3JzCi0gICAgICovCi0gICAgcHVibGljIE1hcDxT
dHJpbmcsIExpc3Q8UmVwb3J0SXRlbT4+IGdldEVycm9ycygpIHsKLSAgICAgICAgaWYgKHRoaXMu
cHJvYmUgPTNEPTNEIG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yczsKLSAg
ICAgICAgfQotICAgICAgICBpZiAobWFwcGVyLmdldEVycm9ycygpID0zRD0zRCBudWxsIHx8IG1h
cHBlci5nZXRFcnJvcnMoKS5zaXplKCkgPQo9M0Q9M0QgMCkgewotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZXJyb3JzOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBrZXkgPTNEIHByb2JlLmdl
dElkQWx0KCkgPTNEPTNEIG51bGwgPwotICAgICAgICAgICAgInByb2JlSWQiIDogcHJvYmUuZ2V0
SWRBbHQoKTsKLSAgICAgICAgTGlzdDxSZXBvcnRJdGVtPiBlcnIgPTNEIHRoaXMuZXJyb3JzLmdl
dChrZXkpOwotICAgICAgICBpZiAoZXJyID0zRD0zRCBudWxsKSB7Ci0gICAgICAgICAgICB0aGlz
LmVycm9ycy5wdXQoa2V5LCBtYXBwZXIuZ2V0RXJyb3JzKCkpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgZXJyLmFkZEFsbChtYXBwZXIuZ2V0RXJyb3JzKCkpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLmVycm9yczsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCBmaW5pc2hPcnQoKSB7Ci0gICAgICAgIGlmIChvcnRlLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC1yIDIxYWI0ZDM1MTM1YSAt
ciBmZGM3NTJjZDE3ZmUgc3JjL21haW4vamF2YS9kZS9pbnRldmF0aW9uL2xhZGEvaW1wb3I9CnRl
ci9sYWYvTGFmUmF3RGF0YS5qYXZhCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAx
OTcwICswMDAwCisrKyBiL3NyYy9tYWluL2phdmEvZGUvaW50ZXZhdGlvbi9sYWRhL2ltcG9ydGVy
L2xhZi9MYWZSYXdEYXRhLmphdmEJRnJpIFNlcD0KIDMwIDE0OjA1OjI4IDIwMTYgKzAyMDAKQEAg
LTAsMCArMSwxMTUgQEAKK3BhY2thZ2UgZGUuaW50ZXZhdGlvbi5sYWRhLmltcG9ydGVyLmxhZjsK
KworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7
CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworcHVibGlj
IGNsYXNzIExhZlJhd0RhdGEgeworCisgICAgcHJpdmF0ZSBMaXN0PExhZlJhd0RhdGEuUHJvYmU+
IHByb2JlOworCisgICAgcHVibGljIExhZlJhd0RhdGEgKCkgeworICAgICAgICB0aGlzLnByb2Jl
ID0zRCBuZXcgQXJyYXlMaXN0PExhZlJhd0RhdGEuUHJvYmU+KCk7CisgICAgfQorCisgICAgcHVi
bGljIGNsYXNzIFByb2JlIHsKKyAgICAgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBTdHJpbmc+IGF0
dHJpYnV0ZXM7CisgICAgICAgIHByaXZhdGUgTGlzdDxMYWZSYXdEYXRhLk1lc3N1bmc+IG1lc3N1
bmc7CisgICAgICAgIHByaXZhdGUgTGlzdDxNYXA8U3RyaW5nLCBTdHJpbmc+PiBrb21tZW50YXI7
CisgICAgICAgIHByaXZhdGUgTGlzdDxNYXA8U3RyaW5nLCBTdHJpbmc+PiB6dXNhdHp3ZXJ0Owor
ICAgICAgICBwcml2YXRlIExpc3Q8TWFwPFN0cmluZywgU3RyaW5nPj4gb3J0OworCisgICAgICAg
IHB1YmxpYyBQcm9iZSgpIHsKKyAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9M0QgbmV3IEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisgICAgICAgICAgICB0aGlzLm9ydCA9M0QgbmV3IEFy
cmF5TGlzdDxNYXA8U3RyaW5nLCBTdHJpbmc+PigpOworICAgICAgICAgICAgdGhpcy5rb21tZW50
YXIgPTNEIG5ldyBBcnJheUxpc3Q8TWFwPFN0cmluZywgU3RyaW5nPj4oKTsKKyAgICAgICAgICAg
IHRoaXMuenVzYXR6d2VydCA9M0QgbmV3IEFycmF5TGlzdDxNYXA8U3RyaW5nLCBTdHJpbmc+Pigp
OworICAgICAgICAgICAgdGhpcy5tZXNzdW5nID0zRCBuZXcgQXJyYXlMaXN0PExhZlJhd0RhdGEu
TWVzc3VuZz4oKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGFkZEF0dHJpYnV0
ZShTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMuYXR0cmlidXRl
cy5wdXQoa2V5LCB2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgTWFwPFN0cmlu
ZywgU3RyaW5nPiBnZXRBdHRyaWJ1dGVzKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXR0
cmlidXRlczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGFkZE1lc3N1bmcoTGFm
UmF3RGF0YS5NZXNzdW5nIG1lc3N1bmcpIHsKKyAgICAgICAgICAgIHRoaXMubWVzc3VuZy5hZGQo
bWVzc3VuZyk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgTGlzdDxMYWZSYXdEYXRhLk1l
c3N1bmc+IGdldE1lc3N1bmdlbigpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3N1bmc7
CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBhZGRLb21tZW50YXIoTWFwPFN0cmlu
ZywgU3RyaW5nPiBrb21tZW50YXIpIHsKKyAgICAgICAgICAgIHRoaXMua29tbWVudGFyLmFkZChr
b21tZW50YXIpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIExpc3Q8TWFwPFN0cmluZywg
U3RyaW5nPj4gZ2V0S29tbWVudGFyZSgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmtvbW1l
bnRhcjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGFkZFp1c2F0endlcnQoTWFw
PFN0cmluZywgU3RyaW5nPiB6dXNhdHp3ZXJ0KSB7CisgICAgICAgICAgICB0aGlzLnp1c2F0endl
cnQuYWRkKHp1c2F0endlcnQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIExpc3Q8TWFw
PFN0cmluZywgU3RyaW5nPj4gZ2V0WnVzYXR6d2VydGUoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy56dXNhdHp3ZXJ0OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgYWRkT3J0
KE1hcDxTdHJpbmcsIFN0cmluZz4gb3J0KSB7CisgICAgICAgICAgICB0aGlzLm9ydC5hZGQob3J0
KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBMaXN0PE1hcDxTdHJpbmcsIFN0cmluZz4+
IGdldE9ydGUoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5vcnQ7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgcHVibGljIGNsYXNzIE1lc3N1bmcgeworICAgICAgICBwcml2YXRlIE1hcDxT
dHJpbmcsIFN0cmluZz4gYXR0cmlidXRlczsKKyAgICAgICAgcHJpdmF0ZSBMaXN0PE1hcDxTdHJp
bmcsIFN0cmluZz4+IG1lc3N3ZXJ0OworICAgICAgICBwcml2YXRlIExpc3Q8TWFwPFN0cmluZywg
U3RyaW5nPj4ga29tbWVudGFyOworCisgICAgICAgIHB1YmxpYyBNZXNzdW5nKCkgeworICAgICAg
ICAgICAgdGhpcy5hdHRyaWJ1dGVzID0zRCBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsK
KyAgICAgICAgICAgIHRoaXMubWVzc3dlcnQgPTNEIG5ldyBBcnJheUxpc3Q8TWFwPFN0cmluZywg
U3RyaW5nPj4oKTsKKyAgICAgICAgICAgIHRoaXMua29tbWVudGFyID0zRCBuZXcgQXJyYXlMaXN0
PE1hcDxTdHJpbmcsIFN0cmluZz4+KCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9p
ZCBhZGRBdHRyaWJ1dGUoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7CisgICAgICAgICAgICB0
aGlzLmF0dHJpYnV0ZXMucHV0KGtleSwgdmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgcHVi
bGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0QXR0cmlidXRlcygpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLmF0dHJpYnV0ZXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBh
ZGRNZXNzd2VydChNYXA8U3RyaW5nLCBTdHJpbmc+IG1lc3N3ZXJ0KSB7CisgICAgICAgICAgICB0
aGlzLm1lc3N3ZXJ0LmFkZChtZXNzd2VydCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMg
TGlzdDxNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRNZXNzd2VydGUoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5tZXNzd2VydDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGFk
ZEtvbW1lbnRhcihNYXA8U3RyaW5nLCBTdHJpbmc+IGtvbW1lbnRhcikgeworICAgICAgICAgICAg
dGhpcy5rb21tZW50YXIuYWRkKGtvbW1lbnRhcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBw
dWJsaWMgdm9pZCBhZGRQcm9iZShMYWZSYXdEYXRhLlByb2JlIHByb2JlKSB7CisgICAgICAgIHRo
aXMucHJvYmUuYWRkKHByb2JlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxMYWZSYXdEYXRh
LlByb2JlPiBnZXRQcm9iZW4oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnByb2JlOworICAgIH0K
KworICAgIHB1YmxpYyBpbnQgY291bnQoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnByb2JlLnNp
emUoKTsKKyAgICB9Cit9CmRpZmYgLXIgMjFhYjRkMzUxMzVhIC1yIGZkYzc1MmNkMTdmZSBzcmMv
bWFpbi9qYXZhL2RlL2ludGV2YXRpb24vbGFkYS9pbXBvcj0KdGVyL2xhZi9MYWZXcml0ZXIuamF2
YQotLS0gYS9zcmMvbWFpbi9qYXZhL2RlL2ludGV2YXRpb24vbGFkYS9pbXBvcnRlci9sYWYvTGFm
V3JpdGVyLmphdmEJVHVlIFNlcCA9CjIwIDE2OjAxOjAyIDIwMTYgKzAyMDAKKysrIC9kZXYvbnVs
bAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKQEAgLTEsMjI2ICswLDAgQEAKLS8qIENv
cHlyaWdodCAoQykgMjAxMyBieSBCdW5kZXNhbXQgZnVlciBTdHJhaGxlbnNjaHV0egotICogU29m
dHdhcmUgZW5naW5lZXJpbmcgYnkgSW50ZXZhdGlvbiBHbWJICi0gKgotICogVGhpcyBmaWxlIGlz
IEZyZWUgU29mdHdhcmUgdW5kZXIgdGhlIEdOVSBHUEwgKHY+PTNEMykKLSAqIGFuZCBjb21lcyB3
aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkhIENoZWNrIG91dAotICogdGhlIGRvY3VtZW50YXRp
b24gY29taW5nIHdpdGggSU1JUy1MYWJvcmRhdGVuLUFwcGxpY2F0aW9uIGZvciBkZXRhaWxzLgot
ICovCi1wYWNrYWdlIGRlLmludGV2YXRpb24ubGFkYS5pbXBvcnRlci5sYWY7Ci0KLWltcG9ydCBq
YXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEu
dXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC5pbmplY3QuSW5qZWN0OwotaW1wb3J0IGphdmF4LnBl
cnNpc3RlbmNlLlBlcnNpc3RlbmNlRXhjZXB0aW9uOwotCi1pbXBvcnQgZGUuaW50ZXZhdGlvbi5s
YWRhLmltcG9ydGVyLlJlcG9ydEl0ZW07Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLm1vZGVs
LmxhbmQuS29tbWVudGFyTTsKLWltcG9ydCBkZS5pbnRldmF0aW9uLmxhZGEubW9kZWwubGFuZC5L
b21tZW50YXJQOwotaW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS5tb2RlbC5sYW5kLk1lc3N1bmc7
Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLm1vZGVsLmxhbmQuTWVzc3dlcnQ7Ci1pbXBvcnQg
ZGUuaW50ZXZhdGlvbi5sYWRhLm1vZGVsLmxhbmQuT3J0c3p1b3JkbnVuZzsKLWltcG9ydCBkZS5p
bnRldmF0aW9uLmxhZGEubW9kZWwubGFuZC5Qcm9iZTsKLWltcG9ydCBkZS5pbnRldmF0aW9uLmxh
ZGEubW9kZWwuc3RhbW1kYXRlbi5PcnQ7Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLnV0aWwu
YW5ub3RhdGlvbi5BdXRob3JpemF0aW9uQ29uZmlnOwotaW1wb3J0IGRlLmludGV2YXRpb24ubGFk
YS51dGlsLmFubm90YXRpb24uUmVwb3NpdG9yeUNvbmZpZzsKLWltcG9ydCBkZS5pbnRldmF0aW9u
LmxhZGEudXRpbC5hdXRoLkF1dGhvcml6YXRpb247Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRh
LnV0aWwuYXV0aC5BdXRob3JpemF0aW9uVHlwZTsKLWltcG9ydCBkZS5pbnRldmF0aW9uLmxhZGEu
dXRpbC5hdXRoLlVzZXJJbmZvOwotaW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS51dGlsLmRhdGEu
UmVwb3NpdG9yeTsKLWltcG9ydCBkZS5pbnRldmF0aW9uLmxhZGEudXRpbC5kYXRhLlJlcG9zaXRv
cnlUeXBlOwotCi0vKioKLSAqIFdyaXRlciB0byBwZXJzaXN0IG5ldyBlbnRpdGllcyBpbiB0aGUg
ZGF0YWJhc2UuCi0gKgotICogQGF1dGhvciA8YSBocmVmPTNEIm1haWx0bzpycmVua2VydEBpbnRl
dmF0aW9uLmRlIj5SYWltdW5kIFJlbmtlcnQ8L2E+Ci0gKi8KLXB1YmxpYyBjbGFzcyBMYWZXcml0
ZXIgewotCi0gICAgLyoqCi0gICAgICogVGhlIHJlcG9zaXRvcnkgdG8gd3JpdGUgZGF0YWJhc2Ug
b2JqZWN0cy4KLSAgICAgKi8KLSAgICBASW5qZWN0Ci0gICAgQFJlcG9zaXRvcnlDb25maWcodHlw
ZT0zRFJlcG9zaXRvcnlUeXBlLlJXKQotICAgIHByaXZhdGUgUmVwb3NpdG9yeSByZXBvc2l0b3J5
OwotCi0gICAgLyoqCi0gICAgICogVGhlIGF1dGhvcml6YXRpb24gbW9kdWxlLgotICAgICAqLwot
ICAgIEBJbmplY3QKLSAgICBAQXV0aG9yaXphdGlvbkNvbmZpZyh0eXBlPTNEQXV0aG9yaXphdGlv
blR5cGUuSEVBREVSKQotICAgIHByaXZhdGUgQXV0aG9yaXphdGlvbiBhdXRob3JpemF0aW9uOwot
Ci0gICAgLyoqCi0gICAgICogVGhlIGVycm9ycy4KLSAgICAgKi8KLSAgICBwcml2YXRlIExpc3Q8
UmVwb3J0SXRlbT4gZXJyb3JzOwotCi0gICAgLyoqCi0gICAgICogVGhlIHdhcm5pbmdzLgotICAg
ICAqLwotICAgIHByaXZhdGUgTGlzdDxSZXBvcnRJdGVtPiB3YXJuaW5nczsKLQotICAgIC8qKgot
ICAgICAqIFRoZSBjdXJyZW50IHByb2JlIGlkIHVzZWQgdG8gY3JlYXRlIGNoaWxkIG9iamVjdHMu
Ci0gICAgICovCi0gICAgcHJpdmF0ZSBJbnRlZ2VyIGN1cnJlbnRQcm9iZUlkOwotCi0gICAgLyoq
Ci0gICAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KLSAgICAgKi8KLSAgICBwdWJsaWMgTGFmV3Jp
dGVyKCkgewotICAgICAgICBlcnJvcnMgPTNEIG5ldyBBcnJheUxpc3Q8UmVwb3J0SXRlbT4oKTsK
LSAgICAgICAgd2FybmluZ3MgPTNEIG5ldyBBcnJheUxpc3Q8UmVwb3J0SXRlbT4oKTsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBXcml0ZSBhIG5ldyB7QGxpbmsgTFByb2JlfSBvYmplY3QgdG8g
dGhlIGRhdGFiYXNlIHVzaW5nCi0gICAgICogYXV0aG9yaXphdGlvbiBhbmQgdmFsaWRhdGlvbi4K
LSAgICAgKgotICAgICAqIEBwYXJhbSBhdXRoICAgICAgVGhlIGF1dGhlbnRpY2F0aW9uIGluZm9y
bWF0aW9uLgotICAgICAqIEBwYXJhbSBwcm9iZSAgICAgVGhlIG5ldyB7QGxpbmsgTFByb2JlfSBv
YmplY3QuCi0gICAgICogQHJldHVybiBzdWNjZXNzCi0gICAgICovCi0gICAgcHVibGljIGJvb2xl
YW4gd3JpdGVQcm9iZShVc2VySW5mbyB1c2VySW5mbywgUHJvYmUgcHJvYmUpIHsKLSAgICAgICAg
aWYgKCFhdXRob3JpemF0aW9uLmlzQXV0aG9yaXplZCh1c2VySW5mbywgcHJvYmUsIFByb2JlLmNs
YXNzKSkgewotICAgICAgICAgICAgZXJyb3JzLmFkZChuZXcgUmVwb3J0SXRlbSgiYXV0aCIsICJu
b3QgYXV0aG9yaXplZCIsIDY5OSkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChwcm9iZS5nZXRJZEFsdCgpID0zRD0zRCBudWxsKSB7Ci0gICAgICAg
ICAgICBlcnJvcnMuYWRkKG5ldyBSZXBvcnRJdGVtKCJwcm9iZUlkIiwgIm1pc3NpbmciLCA2NzMp
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICB0cnkgewot
ICAgICAgICAgICAgcmVwb3NpdG9yeS5jcmVhdGUocHJvYmUsICJsYW5kIik7Ci0gICAgICAgICAg
ICB0aGlzLmN1cnJlbnRQcm9iZUlkID0zRCBwcm9iZS5nZXRJZCgpOwotICAgICAgICB9Ci0gICAg
ICAgIGNhdGNoIChQZXJzaXN0ZW5jZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBlcnJvcnMu
YWRkKG5ldyBSZXBvcnRJdGVtKCJwcm9iZSIsICJ3cml0aW5nIiwgNjcwKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogV3JpdGUgbmV3IHtAbGluayBMTWVzc3VuZ30gb2JqZWN0cyB0byB0
aGUgZGF0YWJhc2UgdXNpbmcKLSAgICAgKiBhdXRob3JpemF0aW9uIGFuZCB2YWxpZGF0aW9uLgot
ICAgICAqCi0gICAgICogQHBhcmFtIGF1dGggICAgICBUaGUgYXV0aGVudGljYXRpb24gaW5mb3Jt
YXRpb24uCi0gICAgICogQHBhcmFtIG1lc3N1bmdlbiBUaGUgbmV3IHtAbGluayBMTWVzc3VuZ30g
b2JqZWN0cy4KLSAgICAgKiBAcmV0dXJuIHN1Y2Nlc3MKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9v
bGVhbiB3cml0ZU1lc3N1bmdlbigKLSAgICAgICAgVXNlckluZm8gdXNlckluZm8sCi0gICAgICAg
IE1lc3N1bmcgbWVzc3VuZwotICAgICkgewotICAgICAgICBtZXNzdW5nLnNldFByb2JlSWQodGhp
cy5jdXJyZW50UHJvYmVJZCk7Ci0gICAgICAgIHJlcG9zaXRvcnkuY3JlYXRlKG1lc3N1bmcsICJs
YW5kIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdy
aXRlIG5ldyB7QGxpbmsgU09ydH0gb2JqZWN0cyB0byB0aGUgZGF0YWJhc2UuCi0gICAgICoKLSAg
ICAgKiBAcGFyYW0gYXV0aCAgICAgIFRoZSBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi4KLSAg
ICAgKiBAcGFyYW0gb3J0ZSAgICAgIExpc3Qgb2Yge0BsaW5rIFNPcnR9IG9iamVjdHMuCi0gICAg
ICogQHJldHVybiBzdWNjZXNzCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gd3JpdGVPcnRl
KFVzZXJJbmZvIHVzZXJJbmZvLCBMaXN0PE9ydD4gb3J0ZSkgewotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXcml0ZSBuZXcge0BsaW5rIExPcnR9IG9iamVj
dHMgdG8gdGhlIGRhdGFiYXNlIHVzaW5nIHZhbGlkYXRpb24uCi0gICAgICoKLSAgICAgKiBAcGFy
YW0gYXV0aCAgVGhlIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uLgotICAgICAqIEBwYXJhbSBv
cnRlICBMaXN0IG9mIHtAbGluayBMT3J0fSBvYmplY3RzLgotICAgICAqIEByZXR1cm4gc3VjY2Vz
cwotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHdyaXRlT3J0c3p1b3JkdW5nKFVzZXJJbmZv
IHVzZXJJbmZvLCBPcnRzenVvcmRudW5nIG9ydCk9CiB7Ci0gICAgICAgIG9ydC5zZXRQcm9iZUlk
KHRoaXMuY3VycmVudFByb2JlSWQpOwotICAgICAgICByZXBvc2l0b3J5LmNyZWF0ZShvcnQsICJs
YW5kIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdy
aXRlIG5ldyB7QGxpbmsgTEtvbW1lbnRhclB9IG9iamVjdHMgdG8gdGhlIGRhdGFiYXNlLgotICAg
ICAqCi0gICAgICogQHBhcmFtIGF1dGggICAgICAgICAgVGhlIGF1dGhlbnRpY2F0aW9uIGluZm9y
bWF0aW9uLgotICAgICAqIEBwYXJhbSBrb21tZW50YXJlICAgIExpc3Qgb2Yge0BsaW5rIExLb21t
ZW50YXJQfSBvYmplY3RzLgotICAgICAqIEByZXR1cm4gc3VjY2VzcwotICAgICAqLwotICAgIHB1
YmxpYyBib29sZWFuIHdyaXRlUHJvYmVuS29tbWVudGFyZSgKLSAgICAgICAgVXNlckluZm8gdXNl
ckluZm8sCi0gICAgICAgIExpc3Q8S29tbWVudGFyUD4ga29tbWVudGFyZQotICAgICkgewotICAg
ICAgICBmb3IoS29tbWVudGFyUCBrb21tZW50YXI6IGtvbW1lbnRhcmUpIHsKLSAgICAgICAgICAg
IGtvbW1lbnRhci5zZXRQcm9iZUlkKHRoaXMuY3VycmVudFByb2JlSWQpOwotICAgICAgICAgICAg
cmVwb3NpdG9yeS5jcmVhdGUoa29tbWVudGFyLCAibGFuZCIpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdyaXRlIG5ldyB7QGxpbmsg
TEtvbW1lbnRhck19IG9iamVjdHMgdG8gdGhlIGRhdGFiYXNlLgotICAgICAqCi0gICAgICogQHBh
cmFtIGF1dGggICAgICAgICAgVGhlIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uLgotICAgICAq
IEBwYXJhbSBrb21tZW50YXJlICAgIExpc3Qgb2Yge0BsaW5rIExLb21tZW50YXJNfSBvYmplY3Rz
LgotICAgICAqIEByZXR1cm4gc3VjY2VzcwotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHdy
aXRlTWVzc3VuZ0tvbW1lbnRhcmUoCi0gICAgICAgIFVzZXJJbmZvIHVzZXJJbmZvLAotICAgICAg
ICBNYXA8TWVzc3VuZywgTGlzdDxLb21tZW50YXJNPj4ga29tbWVudGFyZQotICAgICkgewotICAg
ICAgICBmb3IgKE1lc3N1bmcgbWVzc3VuZyA6IGtvbW1lbnRhcmUua2V5U2V0KCkpIHsKLSAgICAg
ICAgICAgIGZvciAoS29tbWVudGFyTSBrb21tZW50YXI6IGtvbW1lbnRhcmUuZ2V0KG1lc3N1bmcp
KSB7Ci0gICAgICAgICAgICAgICAga29tbWVudGFyLnNldE1lc3N1bmdzSWQobWVzc3VuZy5nZXRJ
ZCgpKTsKLSAgICAgICAgICAgICAgICByZXBvc2l0b3J5LmNyZWF0ZShrb21tZW50YXIsICJsYW5k
Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogV3JpdGUgbmV3IHtAbGluayBMTWVzc3dlcnR9IG9iamVjdHMg
dG8gdGhlIGRhdGFiYXNlIHVzaW5nIHZhbGlkYXRpbz0Kbi4KLSAgICAgKgotICAgICAqIEBwYXJh
bSBhdXRoICAgICAgVGhlIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uLgotICAgICAqIEBwYXJh
bSB3ZXJ0ZSAgICAgTGlzdCBvZiB7QGxpbmsgTE1lc3N3ZXJ0fSBvYmplY3RzLgotICAgICAqIEBy
ZXR1cm4gc3VjY2VzcwotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHdyaXRlTWVzc3dlcnRl
KAotICAgICAgICBVc2VySW5mbyB1c2VySW5mbywKLSAgICAgICAgTWFwPE1lc3N1bmcsIExpc3Q8
TWVzc3dlcnQ+PiB3ZXJ0ZQotICAgICkgewotICAgICAgICBmb3IgKE1lc3N1bmcgbWVzc3VuZyA6
IHdlcnRlLmtleVNldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKE1lc3N3ZXJ0IG1lc3N3ZXJ0OiB3
ZXJ0ZS5nZXQobWVzc3VuZykpIHsKLSAgICAgICAgICAgICAgICBtZXNzd2VydC5zZXRNZXNzdW5n
c0lkKG1lc3N1bmcuZ2V0SWQoKSk7Ci0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5jcmVhdGUo
bWVzc3dlcnQsICJsYW5kIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB0aGUgZXJyb3JzCi0g
ICAgICovCi0gICAgcHVibGljIExpc3Q8UmVwb3J0SXRlbT4gZ2V0RXJyb3JzKCkgewotICAgICAg
ICByZXR1cm4gZXJyb3JzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIHdh
cm5pbmdzCi0gICAgICovCi0gICAgcHVibGljIExpc3Q8UmVwb3J0SXRlbT4gZ2V0V2FybmluZ3Mo
KSB7Ci0gICAgICAgIHJldHVybiB3YXJuaW5nczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBS
ZXNldCB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBy
ZXNldCgpIHsKLSAgICAgICAgdGhpcy53YXJuaW5ncyA9M0QgbmV3IEFycmF5TGlzdDxSZXBvcnRJ
dGVtPigpOwotICAgICAgICB0aGlzLmVycm9ycyA9M0QgbmV3IEFycmF5TGlzdDxSZXBvcnRJdGVt
PigpOwotICAgICAgICB0aGlzLmN1cnJlbnRQcm9iZUlkID0zRCBudWxsOwotICAgIH0KLX0KZGlm
ZiAtciAyMWFiNGQzNTEzNWEgLXIgZmRjNzUyY2QxN2ZlIHNyYy9tYWluL2phdmEvZGUvaW50ZXZh
dGlvbi9sYWRhL2ltcG9yPQp0ZXIvbGFmL09ydENyZWF0b3IuamF2YQotLS0gYS9zcmMvbWFpbi9q
YXZhL2RlL2ludGV2YXRpb24vbGFkYS9pbXBvcnRlci9sYWYvT3J0Q3JlYXRvci5qYXZhCVR1ZSBT
ZXA9CiAyMCAxNjowMTowMiAyMDE2ICswMjAwCisrKyAvZGV2L251bGwJVGh1IEphbiAwMSAwMDow
MDowMCAxOTcwICswMDAwCkBAIC0xLDc5NCArMCwwIEBACi0vKiBDb3B5cmlnaHQgKEMpIDIwMTMg
YnkgQnVuZGVzYW10IGZ1ZXIgU3RyYWhsZW5zY2h1dHoKLSAqIFNvZnR3YXJlIGVuZ2luZWVyaW5n
IGJ5IEludGV2YXRpb24gR21iSAotICoKLSAqIFRoaXMgZmlsZSBpcyBGcmVlIFNvZnR3YXJlIHVu
ZGVyIHRoZSBHTlUgR1BMICh2Pj0zRDMpCi0gKiBhbmQgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5P
IFdBUlJBTlRZISBDaGVjayBvdXQKLSAqIHRoZSBkb2N1bWVudGF0aW9uIGNvbWluZyB3aXRoIElN
SVMtTGFib3JkYXRlbi1BcHBsaWNhdGlvbiBmb3IgZGV0YWlscy4KLSAqLwotcGFja2FnZSBkZS5p
bnRldmF0aW9uLmxhZGEuaW1wb3J0ZXIubGFmOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlz
dDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LmluamVjdC5JbmplY3Q7
Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsKLQotaW1wb3J0IGRlLmludGV2YXRp
b24ubGFkYS5pbXBvcnRlci5SZXBvcnRJdGVtOwotaW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS5t
b2RlbC5sYW5kLk9ydHN6dW9yZG51bmc7Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLm1vZGVs
LnN0YW1tZGF0ZW4uT3J0OwotaW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS5tb2RlbC5zdGFtbWRh
dGVuLlN0YWF0OwotaW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS5tb2RlbC5zdGFtbWRhdGVuLlZl
cndhbHR1bmdzZWluaGVpdDsKLWltcG9ydCBkZS5pbnRldmF0aW9uLmxhZGEudXRpbC5hbm5vdGF0
aW9uLlJlcG9zaXRvcnlDb25maWc7Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLnV0aWwuZGF0
YS5RdWVyeUJ1aWxkZXI7Ci1pbXBvcnQgZGUuaW50ZXZhdGlvbi5sYWRhLnV0aWwuZGF0YS5SZXBv
c2l0b3J5OwotaW1wb3J0IGRlLmludGV2YXRpb24ubGFkYS51dGlsLmRhdGEuUmVwb3NpdG9yeVR5
cGU7Ci0KLS8qKgotICogQ2xhc3MgdG8gcHJvZHVjZSBPcnQvTE9ydCBvYmplY3RzIGZyb20gYSBn
aXZlbiBzZXQgb2YgYXR0cmlidXRlcy4KLSAqCi0gKiBAYXV0aG9yIDxhIGhyZWY9M0QibWFpbHRv
OnJyZW5rZXJ0QGludGV2YXRpb24uZGUiPlJhaW11bmQgUmVua2VydDwvYT4KLSAqLwotcHVibGlj
IGNsYXNzIE9ydENyZWF0b3IKLXsKLSAgICBASW5qZWN0Ci0gICAgcHJpdmF0ZSBMb2dnZXIgbG9n
Z2VyOwotCi0gICAgQEluamVjdAotICAgIEBSZXBvc2l0b3J5Q29uZmlnKHR5cGU9M0RSZXBvc2l0
b3J5VHlwZS5SVykKLSAgICBwcml2YXRlIFJlcG9zaXRvcnkgcmVwb3NpdG9yeTsKLQotICAgIC8q
KgotICAgICAqIExpc3Qgb2Ygd2FybmluZ3MuCi0gICAgICovCi0gICAgcHJpdmF0ZSBMaXN0PFJl
cG9ydEl0ZW0+IHdhcm5pbmdzOwotCi0gICAgLyoqCi0gICAgICogTGlzdCBvZiBlcnJvcnMuCi0g
ICAgICovCi0gICAgcHJpdmF0ZSBMaXN0PFJlcG9ydEl0ZW0+IGVycm9yczsKLQotICAgIHByaXZh
dGUgSW50ZWdlciBwcm9iZUlkOwotICAgIHByaXZhdGUgSW50ZWdlciBvcnRJZDsKLSAgICBwcml2
YXRlIFN0cmluZyBvcnRDb2RlOwotICAgIHByaXZhdGUgU3RyaW5nIG9ydFR5cDsKLSAgICBwcml2
YXRlIFN0cmluZyB6dXNhdHp0ZXh0OwotICAgIHByaXZhdGUgU3RyaW5nIGxhbmRMYW5nOwotICAg
IHByaXZhdGUgU3RyaW5nIGxhbmRLdXJ6OwotICAgIHByaXZhdGUgU3RyaW5nIGxhbmRTOwotICAg
IHByaXZhdGUgU3RyaW5nIGdlbVNjaGx1ZXNzZWw7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZ2VtTmFt
ZTsKLSAgICBwcml2YXRlIFN0cmluZyBrb29yZEFydDsKLSAgICBwcml2YXRlIFN0cmluZyBrb29y
ZDsKLSAgICBwcml2YXRlIFN0cmluZyBrb29yZFM7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgYmV6ZWlj
aG51bmc7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgYmVzY2hyZWlidW5nOwotICAgIHByaXZhdGUgU3Ry
aW5nIG51dHM7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgaG9laGU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcg
a29vcmRpbmF0ZW47Ci0gICAgcHJpdmF0ZSBTdHJpbmcga29vcmRpbmF0ZW5TOwotCi0gICAgcHVi
bGljIE9ydENyZWF0b3IoKSB7Ci0gICAgICAgIHRoaXMub3J0SWQgPTNEIG51bGw7Ci0gICAgICAg
IHRoaXMud2FybmluZ3MgPTNEIG5ldyBBcnJheUxpc3Q8UmVwb3J0SXRlbT4oKTsKLSAgICAgICAg
dGhpcy5lcnJvcnMgPTNEIG5ldyBBcnJheUxpc3Q8UmVwb3J0SXRlbT4oKTsKLSAgICB9Ci0KLSAg
ICAvKioKLSAgICAgKiBAcmV0dXJuIHRoZSB3YXJuaW5ncwotICAgICAqLwotICAgIHB1YmxpYyBM
aXN0PFJlcG9ydEl0ZW0+IGdldFdhcm5pbmdzKCkgewotICAgICAgICByZXR1cm4gd2FybmluZ3M7
Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB0aGUgZXJyb3JzCi0gICAgICovCi0g
ICAgcHVibGljIExpc3Q8UmVwb3J0SXRlbT4gZ2V0RXJyb3JzKCkgewotICAgICAgICByZXR1cm4g
ZXJyb3JzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIHByb2JlSWQKLSAg
ICAgKi8KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRQcm9iZUlkKCkgewotICAgICAgICByZXR1cm4g
dGhpcy5wcm9iZUlkOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBwcm9iZUlkIHRo
ZSBwcm9iZUlkIHRvIHNldAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFByb2JlSWQoSW50
ZWdlciBwcm9iZUlkKSB7Ci0gICAgICAgIHRoaXMucHJvYmVJZCA9M0QgcHJvYmVJZDsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHRoZSBvcnRDb2RlCi0gICAgICovCi0gICAgcHVi
bGljIFN0cmluZyBnZXRPcnRDb2RlKCkgewotICAgICAgICByZXR1cm4gb3J0Q29kZTsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0gb3J0Q29kZSAgIHRoZSBvcnRDb2RlIHRvIHNldAot
ICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE9ydENvZGUoU3RyaW5nIG9ydENvZGUpIHsKLSAg
ICAgICAgdGhpcy5vcnRDb2RlID0zRCBvcnRDb2RlOwotICAgIH0KLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4gdGhlIG9ydFR5cAotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0T3J0VHlw
KCkgewotICAgICAgICByZXR1cm4gb3J0VHlwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSBvcnRUeXAgdGhlIG9ydFR5cCB0byBzZXQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBz
ZXRPcnRUeXAoU3RyaW5nIG9ydFR5cCkgewotICAgICAgICB0aGlzLm9ydFR5cCA9M0Qgb3J0VHlw
OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIHp1c2F0enRleHQKLSAgICAg
Ki8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFp1c2F0enRleHQoKSB7Ci0gICAgICAgIHJldHVybiB6
dXNhdHp0ZXh0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB6dXNhdHp0ZXh0IHRo
ZSB6dXNhdHp0ZXh0IHRvIHNldAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFp1c2F0enRl
eHQoU3RyaW5nIHp1c2F0enRleHQpIHsKLSAgICAgICAgdGhpcy56dXNhdHp0ZXh0ID0zRCB6dXNh
dHp0ZXh0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIGxhbmRMYW5nCi0g
ICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRMYW5kTGFuZygpIHsKLSAgICAgICAgcmV0dXJu
IGxhbmRMYW5nOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBsYW5kTGFuZyB0aGUg
bGFuZExhbmcgdG8gc2V0Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0TGFuZExhbmcoU3Ry
aW5nIGxhbmRMYW5nKSB7Ci0gICAgICAgIHRoaXMubGFuZExhbmcgPTNEIGxhbmRMYW5nOwotICAg
IH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIGxhbmRLdXJ6Ci0gICAgICovCi0gICAg
cHVibGljIFN0cmluZyBnZXRMYW5kS3VyeigpIHsKLSAgICAgICAgcmV0dXJuIGxhbmRLdXJ6Owot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBsYW5kS3VyeiB0aGUgbGFuZEt1cnogdG8g
c2V0Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0TGFuZEt1cnooU3RyaW5nIGxhbmRLdXJ6
KSB7Ci0gICAgICAgIHRoaXMubGFuZEt1cnogPTNEIGxhbmRLdXJ6OwotICAgIH0KLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4gdGhlIGxhbmRTCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBn
ZXRMYW5kUygpIHsKLSAgICAgICAgcmV0dXJuIGxhbmRTOwotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSBsYW5kUyB0aGUgbGFuZFMgdG8gc2V0Ci0gICAgICovCi0gICAgcHVibGljIHZv
aWQgc2V0TGFuZFMoU3RyaW5nIGxhbmRTKSB7Ci0gICAgICAgIHRoaXMubGFuZFMgPTNEIGxhbmRT
OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIGdlbVNjaGx1ZXNzZWwKLSAg
ICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldEdlbVNjaGx1ZXNzZWwoKSB7Ci0gICAgICAgIHJl
dHVybiBnZW1TY2hsdWVzc2VsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBnZW1T
Y2hsdWVzc2VsIHRoZSBnZW1TY2hsdWVzc2VsIHRvIHNldAotICAgICAqLwotICAgIHB1YmxpYyB2
b2lkIHNldEdlbVNjaGx1ZXNzZWwoU3RyaW5nIGdlbVNjaGx1ZXNzZWwpIHsKLSAgICAgICAgdGhp
cy5nZW1TY2hsdWVzc2VsID0zRCBnZW1TY2hsdWVzc2VsOwotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4gdGhlIGtvb3JkQXJ0Ci0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRL
b29yZEFydCgpIHsKLSAgICAgICAgcmV0dXJuIGtvb3JkQXJ0OwotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSBrb29yZEFydCB0aGUga29vcmRBcnQgdG8gc2V0Ci0gICAgICovCi0gICAg
cHVibGljIHZvaWQgc2V0S29vcmRBcnQoU3RyaW5nIGtvb3JkQXJ0KSB7Ci0gICAgICAgIHRoaXMu
a29vcmRBcnQgPTNEIGtvb3JkQXJ0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4g
dGhlIGtvb3JkCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRLb29yZCgpIHsKLSAgICAg
ICAgcmV0dXJuIGtvb3JkOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBrb29yZCB0
aGUga29vcmQgdG8gc2V0Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0S29vcmQoU3RyaW5n
IGtvb3JkKSB7Ci0gICAgICAgIHRoaXMua29vcmQgPTNEIGtvb3JkOwotICAgIH0KLQotICAgIC8q
KgotICAgICAqIEByZXR1cm4gdGhlIGtvb3JkUwotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcg
Z2V0S29vcmRTKCkgewotICAgICAgICByZXR1cm4ga29vcmRTOwotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSBrb29yZFMgdGhlIGtvb3JkUyB0byBzZXQKLSAgICAgKi8KLSAgICBwdWJs
aWMgdm9pZCBzZXRLb29yZFMoU3RyaW5nIGtvb3JkUykgewotICAgICAgICB0aGlzLmtvb3JkUyA9
M0Qga29vcmRTOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhlIG51dHMKLSAg
ICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE51dHMoKSB7Ci0gICAgICAgIHJldHVybiBudXRz
OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBudXRzIHRoZSBudXRzIHRvIHNldAot
ICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE51dHMoU3RyaW5nIG51dHMpIHsKLSAgICAgICAg
dGhpcy5udXRzID0zRCBudXRzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gdGhl
IGhvZWhlCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRIb2VoZSgpIHsKLSAgICAgICAg
cmV0dXJuIGhvZWhlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBob2VoZSB0aGUg
aG9laGUgdG8gc2V0Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0SG9laGUoU3RyaW5nIGhv
ZWhlKSB7Ci0gICAgICAgIHRoaXMuaG9laGUgPTNEIGhvZWhlOwotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIEByZXR1cm4gdGhlIGJlemVpY2h1bmcKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5n
IGdldEJlemVpY2hudW5nKCkgewotICAgICAgICByZXR1cm4gYmV6ZWljaG51bmc7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIGJlemVpY2hudW5nIHRoZSBiZXplaWNobnVuZyB0byBz
ZXQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRCZXplaWNobnVuZyhTdHJpbmcgYmV6ZWlj
aG51bmcpIHsKLSAgICAgICAgdGhpcy5iZXplaWNobnVuZyA9M0QgYmV6ZWljaG51bmc7Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB0aGUgZ2VtTmFtZQotICAgICAqLwotICAgIHB1
YmxpYyBTdHJpbmcgZ2V0R2VtTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIGdlbU5hbWU7Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIGdlbU5hbWUgdGhlIGdlbU5hbWUgdG8gc2V0Ci0g
ICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0R2VtTmFtZShTdHJpbmcgZ2VtTmFtZSkgewotICAg
ICAgICB0aGlzLmdlbU5hbWUgPTNEIGdlbU5hbWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog
QHJldHVybiB0aGUgYmVzY2hyZWlidW5nCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRC
ZXNjaHJlaWJ1bmcoKSB7Ci0gICAgICAgIHJldHVybiBiZXNjaHJlaWJ1bmc7Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIGJlc2NocmVpYnVuZyB0aGUgYmVzY2hyZWlidW5nIHRvIHNl
dAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEJlc2NocmVpYnVuZyhTdHJpbmcgYmVzY2hy
ZWlidW5nKSB7Ci0gICAgICAgIHRoaXMuYmVzY2hyZWlidW5nID0zRCBiZXNjaHJlaWJ1bmc7Ci0g
ICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB0aGUga29vcmRpbmF0ZW4KLSAgICAgKi8K
LSAgICBwdWJsaWMgU3RyaW5nIGdldEtvb3JkaW5hdGVuKCkgewotICAgICAgICByZXR1cm4ga29v
cmRpbmF0ZW47Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIGtvb3JkaW5hdGVuIHRo
ZSBrb29yZGluYXRlbiB0byBzZXQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRLb29yZGlu
YXRlbihTdHJpbmcga29vcmRpbmF0ZW4pIHsKLSAgICAgICAgdGhpcy5rb29yZGluYXRlbiA9M0Qg
a29vcmRpbmF0ZW47Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB0aGUga29vcmRp
bmF0ZW5TCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRLb29yZGluYXRlblMoKSB7Ci0g
ICAgICAgIHJldHVybiBrb29yZGluYXRlblM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIGtvb3JkaW5hdGVuUyB0aGUga29vcmRpbmF0ZW5TIHRvIHNldAotICAgICAqLwotICAgIHB1
YmxpYyB2b2lkIHNldEtvb3JkaW5hdGVuUyhTdHJpbmcga29vcmRpbmF0ZW5TKSB7Ci0gICAgICAg
IHRoaXMua29vcmRpbmF0ZW5TID0zRCBrb29yZGluYXRlblM7Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogQWRkIGFuIGF0dHJpYnV0ZSB0byB0aGUgT3J0Q3JlYXRvci4gVGhlIGNyZWF0b3IgaXMg
dXNlZCB0byBidWlsZCB0aGUKLSAgICAgKiB0d28gb2JqZWN0cyBPcnQgYW5kIExPcnQuCi0gICAg
ICoKLSAgICAgKiBAcGFyYW0ga2V5ICAgICAgIFRoZSBrZXkgbWFwcGluZyB0byBhIG9iamVjdCBt
ZW1iZXIuCi0gICAgICogQHBhcmFtIHZhbHVlICAgICBUaGUgdmFsdWUgdG8gc2V0LgotICAgICAq
IEBwYXJhbSBvcnQgICAgICAgVGhlIGNyZWF0b3Igb2JqZWN0LgotICAgICAqIEByZXR1cm4gVGhl
IHVwZGF0ZWQgY3JlYXRvciBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkQXR0
cmlidXRlKAotICAgICAgICBTdHJpbmcga2V5LAotICAgICAgICBPYmplY3QgdmFsdWUKLSAgICAp
IHsKLSAgICAgICAgaWYgKCJvcnRfY29kZSIuZXF1YWxzKGtleSkpIHsKLSAgICAgICAgICAgIHRo
aXMuc2V0T3J0Q29kZSh2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
Im9ydF90eXAiLmVxdWFscyhrZXkpKSB7Ci0gICAgICAgICAgICB0aGlzLnNldE9ydFR5cCh2YWx1
ZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIm9ydF96dXNhdHoiLmVxdWFs
cyhrZXkpKSB7Ci0gICAgICAgICAgICB0aGlzLnNldFp1c2F0enRleHQodmFsdWUudG9TdHJpbmco
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCJvcnRfbGFuZF9sYW5nIi5lcXVhbHMoa2V5KSkg
ewotICAgICAgICAgICAgdGhpcy5zZXRMYW5kTGFuZyh2YWx1ZS50b1N0cmluZygpKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIm9ydF9sYW5kX2t1cnoiLmVxdWFscyhrZXkpKSB7Ci0gICAgICAg
ICAgICB0aGlzLnNldExhbmRLdXJ6KHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICgib3J0X2xhbmRfcyIuZXF1YWxzKGtleSkpIHsKLSAgICAgICAgICAgIHRoaXMuc2V0
TGFuZFModmFsdWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCJvcnRfZ2Vt
ZWluZGVzY2hsdWVzc2VsIi5lcXVhbHMoa2V5KSkgewotICAgICAgICAgICAgdGhpcy5zZXRHZW1T
Y2hsdWVzc2VsKHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgib3J0
X2JlemVpY2hudW5nIi5lcXVhbHMoa2V5KSkgewotICAgICAgICAgICAgdGhpcy5zZXRCZXplaWNo
bnVuZyh2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIm9ydF9iZXNj
aHJlaWJ1bmciLmVxdWFscyhrZXkpKSB7Ci0gICAgICAgICAgICB0aGlzLnNldEJlc2NocmVpYnVu
Zyh2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIm9ydF9udXRzX2Nv
ZGUiLmVxdWFscyhrZXkpKSB7Ci0gICAgICAgICAgICB0aGlzLnNldE51dHModmFsdWUudG9TdHJp
bmcoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCJvcnRfaG9laGVfbGFuZCIuZXF1YWxzKGtl
eSkpIHsKLSAgICAgICAgICAgIHRoaXMuc2V0SG9laGUodmFsdWUudG9TdHJpbmcoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCJvcnRfa29vcmRpbmF0ZW4iLmVxdWFscyhrZXkpKSB7Ci0gICAg
ICAgICAgICB0aGlzLnNldEtvb3JkaW5hdGVuKHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9
Ci0gICAgICAgIGlmICgib3J0X2tvb3JkaW5hdGVuX3MiLmVxdWFscyhrZXkpKSB7Ci0gICAgICAg
ICAgICB0aGlzLnNldEtvb3JkaW5hdGVuUyh2YWx1ZS50b1N0cmluZygpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIHRoZSBPcnQgb2JqZWN0LgotICAgICAq
Ci0gICAgICogQHJldHVybiBUaGUgbmV3IE9ydC4KLSAgICAgKi8KLSAgICBwdWJsaWMgT3J0IHRv
T3J0KCkgewotICAgICAgICBpZiAodGhpcy5vcnRDb2RlICE9M0QgbnVsbCAmJiB0aGlzLm9ydENv
ZGUubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQot
ICAgICAgICBsb2dnZXIuZGVidWcoImNyZWF0ZSBhIG5ldyBvcnQiKTsKLSAgICAgICAgT3J0IG9y
dCA9M0QgbmV3IE9ydCgpOwotICAgICAgICByZXBvc2l0b3J5LmNyZWF0ZShvcnQsICJzdGFtbSIp
OwotICAgICAgICB0aGlzLm9ydElkID0zRCBvcnQuZ2V0SWQoKTsKLSAgICAgICAgYm9vbGVhbiBr
b29yZCA9M0QgdHJ1ZTsKLSAgICAgICAgaWYgKHRoaXMua29vcmRpbmF0ZW5TICE9M0QgbnVsbCAm
JiB0aGlzLmtvb3JkaW5hdGVuUy5sZW5ndGgoKSA+IDApPQogewotICAgICAgICAgICAgb3J0ID0z
RCBzZXRLb29yZGluYXRlblMob3J0KTsKLSAgICAgICAgICAgIGtvb3JkID0zRCBmYWxzZTsKLSAg
ICAgICAgICAgIGlmICh0aGlzLmtvb3JkaW5hdGVuICE9M0QgbnVsbCAmJiB0aGlzLmtvb3JkaW5h
dGVuLmxlbmd0aCgpID4gPQowKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5hZGQo
bmV3IFJlcG9ydEl0ZW0oImtvb2RpbmF0ZW4iLCBudWxsLCA2MzEpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0aGlzLmtvb3JkaW5hdGVuICE9M0QgbnVsbCAm
JiB0aGlzLmtvb3JkaW5hdGVuLmxlbmd0aCgpID49CiAwKSB7Ci0gICAgICAgICAgICBvcnQgPTNE
IHNldEtvb3JkaW5hdGVuKG9ydCk7Ci0gICAgICAgICAgICBrb29yZCA9M0QgZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKHRoaXMuZ2VtU2NobHVlc3NlbCAhPTNEIG51bGwgJiYKLSAgICAg
ICAgICAgIHRoaXMuZ2VtU2NobHVlc3NlbC5sZW5ndGgoKSA+IDApewotICAgICAgICAgICAgb3J0
ID0zRCBzZXRHZW1laW5kZVMob3J0LCBrb29yZCk7Ci0gICAgICAgICAgICBrb29yZCA9M0QgZmFs
c2U7Ci0gICAgICAgICAgICBpZih0aGlzLmdlbU5hbWUgIT0zRCBudWxsICYmIHRoaXMuZ2VtTmFt
ZS5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLmFkZChuZXcg
UmVwb3J0SXRlbSgiZ2VtTmFtZSIsIG51bGwsIDYzMSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKHRoaXMuZ2VtTmFtZSAhPTNEIG51bGwgJiYgdGhpcy5nZW1O
YW1lLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgb3J0ID0zRCBzZXRHZW1laW5kZShvcnQs
IGtvb3JkKTsKLSAgICAgICAgICAgIGtvb3JkID0zRCBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBpZih0aGlzLmxhbmRTICE9M0QgbnVsbCAmJiB0aGlzLmxhbmRTLmxlbmd0aCgpID4gMCkgewot
ICAgICAgICAgICAgb3J0ID0zRCBzZXRMYW5kUyhvcnQsIGtvb3JkKTsKLSAgICAgICAgICAgIGtv
b3JkID0zRCBmYWxzZTsKLSAgICAgICAgICAgIGlmICh0aGlzLmxhbmRMYW5nICE9M0QgbnVsbCAm
JiB0aGlzLmxhbmRMYW5nLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgICAgIHRoaXMud2Fy
bmluZ3MuYWRkKG5ldyBSZXBvcnRJdGVtKCJsYW5kTGFuZyIsIG51bGwsIDYzMSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKHRoaXMubGFuZEt1cnogIT0zRCBudWxsICYmIHRoaXMu
bGFuZEt1cnoubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5h
ZGQobmV3IFJlcG9ydEl0ZW0oImxhbmRLdXJ6IiwgbnVsbCwgNjMxKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAodGhpcy5sYW5kS3VyeiAhPTNEIG51bGwgJiYg
dGhpcy5sYW5kS3Vyei5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIG9ydCA9M0Qgc2V0TGFu
ZEt1cnoob3J0LCBrb29yZCk7Ci0gICAgICAgICAgICBrb29yZCA9M0QgZmFsc2U7Ci0gICAgICAg
ICAgICBpZiAodGhpcy5sYW5kTGFuZyAhPTNEIG51bGwgJiYgdGhpcy5sYW5kTGFuZy5sZW5ndGgo
KSA+IDApIHsKLSAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLmFkZChuZXcgUmVwb3J0SXRl
bSgibGFuZExhbmciLCBudWxsLCA2MzEpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmICh0aGlzLmxhbmRMYW5nICE9M0QgbnVsbCAmJiB0aGlzLmxhbmRMYW5nLmxl
bmd0aCgpID4gMCkgewotICAgICAgICAgICAgb3J0ID0zRCBzZXRMYW5kTGFuZyhvcnQsIGtvb3Jk
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoa29vcmQpIHsKLSAgICAgICAgICAgIHRoaXMud2Fy
bmluZ3MuYWRkKG5ldyBSZXBvcnRJdGVtKCJrb29yZGluYXRlbiIsIG51bGwsIDYzMSkpOwotICAg
ICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRoaXMubnV0cyAh
PTNEIG51bGwgJiYgdGhpcy5udXRzLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgb3J0LnNl
dE51dHNDb2RlKG51dHMpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG9ydC5nZXRHZW1J
ZCgpICE9M0QgbnVsbCAmJgotICAgICAgICAgICAgb3J0LmdldEdlbUlkKCkubGVuZ3RoKCkgPiAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICBRdWVyeUJ1aWxkZXI8VmVyd2FsdHVuZ3NlaW5oZWl0
PiBidWlsZGVyID0zRAotICAgICAgICAgICAgICAgIG5ldyBRdWVyeUJ1aWxkZXI8VmVyd2FsdHVu
Z3NlaW5oZWl0PigKLSAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5lbnRpdHlNYW5hZ2Vy
KCJzdGFtbSIpLAotICAgICAgICAgICAgICAgICAgICBWZXJ3YWx0dW5nc2VpbmhlaXQuY2xhc3Mp
OwotICAgICAgICAgICAgYnVpbGRlci5hbmQoImlkIiwgb3J0LmdldEdlbUlkKCkpOwotICAgICAg
ICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gICAgICAgICAgICBMaXN0PFZl
cndhbHR1bmdzZWluaGVpdD4gZWluaGVpdCA9M0QKLSAgICAgICAgICAgICAgICAoTGlzdDxWZXJ3
YWx0dW5nc2VpbmhlaXQ+KXJlcG9zaXRvcnkuZmlsdGVyKAotICAgICAgICAgICAgICAgICAgICBi
dWlsZGVyLmdldFF1ZXJ5KCksCi0gICAgICAgICAgICAgICAgICAgICJzdGFtbSIpLmdldERhdGEo
KTsKLQotICAgICAgICAgICAgaWYgKCFlaW5oZWl0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgIG9ydC5zZXROdXRzQ29kZShlaW5oZWl0LmdldCgwKS5nZXROdXRzKCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIG9ydC5zZXRMYW5ndGV4dChiZXNjaHJlaWJ1bmcpOwot
ICAgICAgICBpZiAodGhpcy5ob2VoZSAhPTNEIG51bGwpIHsKLSAgICAgICAgICAgIG9ydC5zZXRI
b2VoZUxhbmQoRmxvYXQudmFsdWVPZihob2VoZSkpOwotICAgICAgICB9Ci0gICAgICAgIHJlcG9z
aXRvcnkudXBkYXRlKG9ydCwgInN0YW1tIik7Ci0gICAgICAgIHJldHVybiBvcnQ7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogRmluZCB0aGUgU1N0YWF0IG9iamVjdCBpZGVudGlmaWVkIGJ5IHRo
ZSBsYW5kX2xhbmcgc3RyaW5nIGFuZCBzZXQgYQotICAgICAqIHJlZmVyZW5jZSB0byB0aGUgb3J0
IG9iamVjdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvcnQgICAgICAgVGhlIG9ydCBvYmplY3Qu
Ci0gICAgICogQHBhcmFtIGtvb3JkICAgICBTZXQgdGhlIGNvb3JkaW5hdGVzIG9yIG5vdC4KLSAg
ICAgKiBAcmV0dXJuIFRoZSBPcnQgb2JqZWN0LgotICAgICAqLwotICAgIHByaXZhdGUgT3J0IHNl
dExhbmRMYW5nKE9ydCBvcnQsIGJvb2xlYW4ga29vcmQpIHsKLSAgICAgICAgUXVlcnlCdWlsZGVy
PFN0YWF0PiBidWlsZGVyID0zRAotICAgICAgICAgICAgbmV3IFF1ZXJ5QnVpbGRlcjxTdGFhdD4o
Ci0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5lbnRpdHlNYW5hZ2VyKCJzdGFtbSIpLAotICAg
ICAgICAgICAgICAgIFN0YWF0LmNsYXNzKTsKLSAgICAgICAgYnVpbGRlci5hbmQoInN0YWF0Iiwg
dGhpcy5sYW5kTGFuZyk7Ci0gICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQot
ICAgICAgICBMaXN0PFN0YWF0PiBzdGFhdCA9M0QKLSAgICAgICAgICAgIChMaXN0PFN0YWF0Pily
ZXBvc2l0b3J5LmZpbHRlcigKLSAgICAgICAgICAgICAgICBidWlsZGVyLmdldFF1ZXJ5KCksCi0g
ICAgICAgICAgICAgICAgInN0YW1tIikuZ2V0RGF0YSgpOwotCi0gICAgICAgIGlmIChzdGFhdC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHRoaXMud2FybmluZ3MuYWRkKG5ldyBSZXBvcnRJdGVt
KCJsYW5kTGFuZyIsIG51bGwsIDYzMSkpOwotICAgICAgICAgICAgcmV0dXJuIG9ydDsKLSAgICAg
ICAgfQotICAgICAgICBvcnQuc2V0U3RhYXRJZChzdGFhdC5nZXQoMCkuZ2V0SWQoKSk7Ci0gICAg
ICAgIGlmIChrb29yZCkgewotICAgICAgICAgICAgb3J0LnNldEtvb3JkWEV4dGVybihzdGFhdC5n
ZXQoMCkuZ2V0S29vcmRYRXh0ZXJuKCkpOwotICAgICAgICAgICAgb3J0LnNldEtvb3JkWUV4dGVy
bihzdGFhdC5nZXQoMCkuZ2V0S29vcmRZRXh0ZXJuKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBvcnQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmluZCB0aGUgU1N0YWF0IG9iamVj
dCBpZGVudGlmaWVkIGJ5IHRoZSBsYW5kX2t1cnogc3RyaW5nIGFuZCBzZXQgYQotICAgICAqIHJl
ZmVyZW5jZSB0byB0aGUgb3J0IG9iamVjdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvcnQgICAg
ICAgVGhlIG9ydCBvYmplY3QuCi0gICAgICogQHBhcmFtIGtvb3JkICAgICBTZXQgdGhlIGNvb3Jk
aW5hdGVzIG9yIG5vdC4KLSAgICAgKiBAcmV0dXJuIFRoZSBPcnQgb2JqZWN0LgotICAgICAqLwot
ICAgIHByaXZhdGUgT3J0IHNldExhbmRLdXJ6KE9ydCBvcnQsIGJvb2xlYW4ga29vcmQpIHsKLSAg
ICAgICAgUXVlcnlCdWlsZGVyPFN0YWF0PiBidWlsZGVyID0zRAotICAgICAgICAgICAgbmV3IFF1
ZXJ5QnVpbGRlcjxTdGFhdD4oCi0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5lbnRpdHlNYW5h
Z2VyKCJzdGFtbSIpLAotICAgICAgICAgICAgICAgIFN0YWF0LmNsYXNzKTsKLSAgICAgICAgYnVp
bGRlci5hbmQoInN0YWF0S3VyeiIsIHRoaXMubGFuZEt1cnopOwotICAgICAgICBAU3VwcHJlc3NX
YXJuaW5ncygidW5jaGVja2VkIikKLSAgICAgICAgTGlzdDxTdGFhdD4gc3RhYXQgPTNECi0gICAg
ICAgICAgICAoTGlzdDxTdGFhdD4pcmVwb3NpdG9yeS5maWx0ZXIoCi0gICAgICAgICAgICAgICAg
YnVpbGRlci5nZXRRdWVyeSgpLAotICAgICAgICAgICAgICAgICJzdGFtbSIpLmdldERhdGEoKTsK
LQotICAgICAgICBpZiAoc3RhYXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB0aGlzLndhcm5p
bmdzLmFkZChuZXcgUmVwb3J0SXRlbSgibGFuZEt1cnoiLCBudWxsLCA2MzEpKTsKLSAgICAgICAg
ICAgIHJldHVybiBvcnQ7Ci0gICAgICAgIH0KLSAgICAgICAgb3J0LnNldFN0YWF0SWQoc3RhYXQu
Z2V0KDApLmdldElkKCkpOwotICAgICAgICBpZiAoa29vcmQpIHsKLSAgICAgICAgICAgIG9ydC5z
ZXRLb29yZFhFeHRlcm4oc3RhYXQuZ2V0KDApLmdldEtvb3JkWEV4dGVybigpKTsKLSAgICAgICAg
ICAgIG9ydC5zZXRLb29yZFlFeHRlcm4oc3RhYXQuZ2V0KDApLmdldEtvb3JkWUV4dGVybigpKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gb3J0OwotICAgIH0KLQotICAgIC8qKgotICAgICAq
IEZpbmQgdGhlIFNTdGFhdCBvYmplY3QgaWRlbnRpZmllZCBieSB0aGUgbGFuZF9zIGlkIGFuZCBz
ZXQgYQotICAgICAqIHJlZmVyZW5jZSB0byB0aGUgb3J0IG9iamVjdC4KLSAgICAgKgotICAgICAq
IEBwYXJhbSBvcnQgICAgICAgVGhlIG9ydCBvYmplY3QuCi0gICAgICogQHBhcmFtIGtvb3JkICAg
ICBTZXQgdGhlIGNvb3JkaW5hdGVzIG9yIG5vdC4KLSAgICAgKiBAcmV0dXJuIFRoZSBPcnQgb2Jq
ZWN0LgotICAgICAqLwotICAgIHByaXZhdGUgT3J0IHNldExhbmRTKE9ydCBvcnQsIGJvb2xlYW4g
a29vcmQpIHsKLSAgICAgICAgb3J0LnNldFN0YWF0SWQoSW50ZWdlci52YWx1ZU9mKHRoaXMubGFu
ZFMpKTsKLSAgICAgICAgaWYgKGtvb3JkKSB7Ci0gICAgICAgICAgICBRdWVyeUJ1aWxkZXI8U3Rh
YXQ+IGJ1aWxkZXIgPTNECi0gICAgICAgICAgICAgICAgbmV3IFF1ZXJ5QnVpbGRlcjxTdGFhdD4o
Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuZW50aXR5TWFuYWdlcigic3RhbW0iKSwK
LSAgICAgICAgICAgICAgICAgICAgU3RhYXQuY2xhc3MpOwotICAgICAgICAgICAgYnVpbGRlci5h
bmQoImlkIiwgdGhpcy5sYW5kUyk7Ci0gICAgICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5j
aGVja2VkIikKLSAgICAgICAgICAgIExpc3Q8U3RhYXQ+IHN0YWF0ID0zRAotICAgICAgICAgICAg
ICAgIChMaXN0PFN0YWF0PilyZXBvc2l0b3J5LmZpbHRlcigKLSAgICAgICAgICAgICAgICAgICAg
YnVpbGRlci5nZXRRdWVyeSgpLAotICAgICAgICAgICAgICAgICAgICAic3RhbW0iKS5nZXREYXRh
KCk7Ci0KLSAgICAgICAgICAgIGlmIChzdGFhdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLndhcm5pbmdzLmFkZChuZXcgUmVwb3J0SXRlbSgic3RhYXQiLCBudWxsLCA2MzEpKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gb3J0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
b3J0LnNldEtvb3JkWEV4dGVybihzdGFhdC5nZXQoMCkuZ2V0S29vcmRYRXh0ZXJuKCkpOwotICAg
ICAgICAgICAgb3J0LnNldExvbmdpdHVkZShEb3VibGUudmFsdWVPZihzdGFhdC5nZXQoMCkuZ2V0
S29vcmRYRXh0ZXJuKCk9CikpOwotICAgICAgICAgICAgb3J0LnNldEtvb3JkWUV4dGVybihzdGFh
dC5nZXQoMCkuZ2V0S29vcmRZRXh0ZXJuKCkpOwotICAgICAgICAgICAgb3J0LnNldExhdGl0dWRl
KERvdWJsZS52YWx1ZU9mKHN0YWF0LmdldCgwKS5nZXRLb29yZFlFeHRlcm4oKSk9Cik7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG9ydDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGaW5k
IHRoZSBTVmVyd2FsdHVuZ3NlaW5oZWl0IG9iamVjdCBpZGVudGlmaWVkIGJ5IHRoZSBnZW1fbmFt
ZSBzdHJpPQpuZwotICAgICAqIGFuZCBzZXQgYSByZWZlcmVuY2UgdG8gdGhlIG9ydCBvYmplY3Qu
Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gb3J0ICAgICAgIFRoZSBvcnQgb2JqZWN0LgotICAgICAq
IEBwYXJhbSBrb29yZCAgICAgU2V0IHRoZSBjb29yZGluYXRlcyBvciBub3QuCi0gICAgICogQHJl
dHVybiBUaGUgT3J0IG9iamVjdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIE9ydCBzZXRHZW1laW5k
ZShPcnQgb3J0LCBib29sZWFuIGtvb3JkKSB7Ci0gICAgICAgIFF1ZXJ5QnVpbGRlcjxWZXJ3YWx0
dW5nc2VpbmhlaXQ+IGJ1aWxkZXIgPTNECi0gICAgICAgICAgICBuZXcgUXVlcnlCdWlsZGVyPFZl
cndhbHR1bmdzZWluaGVpdD4oCi0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5lbnRpdHlNYW5h
Z2VyKCJzdGFtbSIpLAotICAgICAgICAgICAgICAgIFZlcndhbHR1bmdzZWluaGVpdC5jbGFzcyk7
Ci0gICAgICAgIGJ1aWxkZXIuYW5kKCJiZXplaWNobnVuZyIsIHRoaXMuZ2VtTmFtZSk7Ci0gICAg
ICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICAgICAgICBMaXN0PFZlcndhbHR1
bmdzZWluaGVpdD4gZWluaGVpdD0zRAotICAgICAgICAgICAgKExpc3Q8VmVyd2FsdHVuZ3NlaW5o
ZWl0PilyZXBvc2l0b3J5LmZpbHRlcigKLSAgICAgICAgICAgICAgICBidWlsZGVyLmdldFF1ZXJ5
KCksCi0gICAgICAgICAgICAgICAgInN0YW1tIikuZ2V0RGF0YSgpOwotICAgICAgICBpZiAoZWlu
aGVpdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHRoaXMud2FybmluZ3MuYWRkKG5ldyBSZXBv
cnRJdGVtKCJ2ZXJ3YWx0dW5nc2VpbmhlaXQiLCBudWxsLCA2PQozMSkpOwotICAgICAgICAgICAg
cmV0dXJuIG9ydDsKLSAgICAgICAgfQotICAgICAgICBvcnQuc2V0R2VtSWQoZWluaGVpdC5nZXQo
MCkuZ2V0SWQoKSk7Ci0gICAgICAgIGlmIChrb29yZCkgewotICAgICAgICAgICAgb3J0LnNldEtv
b3JkWEV4dGVybihlaW5oZWl0LmdldCgwKS5nZXRLb29yZFhFeHRlcm4oKSk7Ci0gICAgICAgICAg
ICBvcnQuc2V0S29vcmRZRXh0ZXJuKGVpbmhlaXQuZ2V0KDApLmdldEtvb3JkWUV4dGVybigpKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gb3J0OwotICAgIH0KLQotICAgIC8qKgotICAgICAq
IEZpbmQgdGhlIFNWZXJ3YWx0dW5nc2VpbmhlaXQgb2JqZWN0IGlkZW50aWZpZWQgYnkgdGhlIGdl
bV9zY2hsdWVzc2U9CmwgaWQKLSAgICAgKiBhbmQgc2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBvcnQg
b2JqZWN0LgotICAgICAqCi0gICAgICogQHBhcmFtIG9ydCAgICAgICBUaGUgb3J0IG9iamVjdC4K
LSAgICAgKiBAcGFyYW0ga29vcmQgICAgIFNldCB0aGUgY29vcmRpbmF0ZXMgb3Igbm90LgotICAg
ICAqIEByZXR1cm4gVGhlIE9ydCBvYmplY3QuCi0gICAgICovCi0gICAgcHJpdmF0ZSBPcnQgc2V0
R2VtZWluZGVTKE9ydCBvcnQsIGJvb2xlYW4ga29vcmQpIHsKLSAgICAgICAgb3J0LnNldEdlbUlk
KHRoaXMuZ2VtU2NobHVlc3NlbCk7Ci0gICAgICAgIGlmIChrb29yZCkgewotICAgICAgICAgICAg
UXVlcnlCdWlsZGVyPFZlcndhbHR1bmdzZWluaGVpdD4gYnVpbGRlciA9M0QKLSAgICAgICAgICAg
ICAgICBuZXcgUXVlcnlCdWlsZGVyPFZlcndhbHR1bmdzZWluaGVpdD4oCi0gICAgICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcnkuZW50aXR5TWFuYWdlcigic3RhbW0iKSwKLSAgICAgICAgICAgICAg
ICAgICAgVmVyd2FsdHVuZ3NlaW5oZWl0LmNsYXNzKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYW5k
KCJiZXplaWNobnVuZyIsIHRoaXMuZ2VtTmFtZSk7Ci0gICAgICAgICAgICBAU3VwcHJlc3NXYXJu
aW5ncygidW5jaGVja2VkIikKLSAgICAgICAgICAgIExpc3Q8VmVyd2FsdHVuZ3NlaW5oZWl0PiBl
aW5oZWl0PTNECi0gICAgICAgICAgICAgICAgKExpc3Q8VmVyd2FsdHVuZ3NlaW5oZWl0PilyZXBv
c2l0b3J5LmZpbHRlcigKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5nZXRRdWVyeSgpLAot
ICAgICAgICAgICAgICAgICAgICAic3RhbW0iKS5nZXREYXRhKCk7Ci0gICAgICAgICAgICBpZiAo
ZWluaGVpdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLmFkZChu
ZXcgUmVwb3J0SXRlbSgidmVyd2FsdHVuZ3NlaW5oZWl0IiwgbnVsPQpsLCA2MzEpKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gb3J0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3J0LnNl
dEtvb3JkWEV4dGVybihlaW5oZWl0LmdldCgwKS5nZXRLb29yZFhFeHRlcm4oKSk7Ci0gICAgICAg
ICAgICBvcnQuc2V0S29vcmRZRXh0ZXJuKGVpbmhlaXQuZ2V0KDApLmdldEtvb3JkWUV4dGVybigp
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gb3J0OwotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIFBhcnNlIHRoZSBjb29yZGluYXRlcyBhbmQgdGhlIHRoZSBhdHRyaWJ1dGVzIHRvIHRoZSBu
ZXcgb3J0IG9iamVjdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvcnQgICAgICAgVGhlIG9ydCBv
YmplY3QuCi0gICAgICogQHJldHVybiBUaGUgT3J0IG9iamVjdC4KLSAgICAgKi8KLSAgICBwcml2
YXRlIE9ydCBzZXRLb29yZGluYXRlbihPcnQgb3J0KSB7Ci0gICAgICAgIFN0cmluZyBhcnQgPTNE
ICIiOwotICAgICAgICBTdHJpbmcgeCA9M0QgIiI7Ci0gICAgICAgIFN0cmluZyB5ID0zRCAiIjsK
LSAgICAgICAgU3RyaW5nIHRtcCA9M0QgIiI7Ci0gICAgICAgIGlmICh0aGlzLmtvb3JkaW5hdGVu
LnN0YXJ0c1dpdGgoIlwiIikpIHsKLSAgICAgICAgICAgIHRtcCA9M0QgdGhpcy5rb29yZGluYXRl
bi5zdWJzdHJpbmcoMSk7Ci0gICAgICAgICAgICBhcnQgPTNEIHRtcC5zdWJzdHJpbmcoMCwgdG1w
LmluZGV4T2YoIlwiIikpOwotICAgICAgICAgICAgdG1wID0zRCB0bXAuc3Vic3RyaW5nKHRtcC5p
bmRleE9mKCJcIiIpICsgMik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBhcnQgPTNEIHRoaXMua29vcmRpbmF0ZW4uc3Vic3RyaW5nKDAsIHRoaXMua29vcmRpbmF0ZW4u
aW5kZXhPZj0KKCIgIikpOwotICAgICAgICAgICAgdG1wID0zRCB0aGlzLmtvb3JkaW5hdGVuLnN1
YnN0cmluZygKLSAgICAgICAgICAgICAgICAwLCB0aGlzLmtvb3JkaW5hdGVuLmluZGV4T2YoIiAi
KSArIDEpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0bXAuc3RhcnRzV2l0aCgiXCIiKSkgewot
ICAgICAgICAgICAgdG1wID0zRCB0bXAuc3Vic3RyaW5nKDEpOwotICAgICAgICAgICAgeCA9M0Qg
dG1wLnN1YnN0cmluZygwLCB0bXAuaW5kZXhPZigiXCIiKSk7Ci0gICAgICAgICAgICB0bXAgPTNE
IHRtcC5zdWJzdHJpbmcoMCwgdG1wLmluZGV4T2YoIlwiIikgKyAyKTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHggPTNEIHRtcC5zdWJzdHJpbmcoMCwgdG1wLmluZGV4
T2YoIiAiKSk7Ci0gICAgICAgICAgICB0bXAgPTNEIHRtcC5zdWJzdHJpbmcoMCwgdG1wLmluZGV4
T2YoIiAiKSArIDEpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0bXAuc3RhcnRzV2l0aCgiXCIi
KSkgewotICAgICAgICAgICAgdG1wID0zRCB0bXAuc3Vic3RyaW5nKDEpOwotICAgICAgICAgICAg
eSA9M0QgdG1wLnN1YnN0cmluZygwLCB0bXAuaW5kZXhPZigiXCIiKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB5ID0zRCB0bXA7Ci0gICAgICAgIH0KLSAgICAgICAg
b3J0LnNldEtvb3JkWEV4dGVybih4KTsKLSAgICAgICAgb3J0LnNldEtvb3JkWUV4dGVybih5KTsK
LSAgICAgICAgb3J0LnNldEtkYUlkKEludGVnZXIudmFsdWVPZihhcnQpKTsKLSAgICAgICAgcmV0
dXJuIG9ydDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQYXJzZSB0aGUgY29vcmRpbmF0ZXMg
YW5kIHRoZSB0aGUgYXR0cmlidXRlcyB0byB0aGUgbmV3IG9ydCBvYmplY3QuCi0gICAgICoKLSAg
ICAgKiBAcGFyYW0gb3J0ICAgICAgIFRoZSBvcnQgb2JqZWN0LgotICAgICAqIEByZXR1cm4gVGhl
IE9ydCBvYmplY3QuCi0gICAgICovCi0gICAgcHJpdmF0ZSBPcnQgc2V0S29vcmRpbmF0ZW5TKE9y
dCBvcnQpIHsKLSAgICAgICAgU3RyaW5nIGFydCA9M0QgIiI7Ci0gICAgICAgIFN0cmluZyB4ID0z
RCAiIjsKLSAgICAgICAgU3RyaW5nIHkgPTNEICIiOwotICAgICAgICBTdHJpbmcgdG1wID0zRCAi
IjsKLSAgICAgICAgaWYgKHRoaXMua29vcmRpbmF0ZW5TLnN0YXJ0c1dpdGgoIlwiIikpIHsKLSAg
ICAgICAgICAgIHRtcCA9M0QgdGhpcy5rb29yZGluYXRlblMuc3Vic3RyaW5nKDEpOwotICAgICAg
ICAgICAgYXJ0ID0zRCB0bXAuc3Vic3RyaW5nKDAsIHRtcC5pbmRleE9mKCJcIiIpKTsKLSAgICAg
ICAgICAgIHRtcCA9M0QgdG1wLnN1YnN0cmluZyh0bXAuaW5kZXhPZigiXCIiKSArIDIpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXJ0ID0zRCB0aGlzLmtvb3JkaW5h
dGVuUy5zdWJzdHJpbmcoMCwgdGhpcy5rb29yZGluYXRlblMuaW5kZXg9Ck9mKCIgIikpOwotICAg
ICAgICAgICAgdG1wID0zRCB0aGlzLmtvb3JkaW5hdGVuUy5zdWJzdHJpbmcoCi0gICAgICAgICAg
ICAgICAgdGhpcy5rb29yZGluYXRlblMuaW5kZXhPZigiICIpICsgMSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHRtcC5zdGFydHNXaXRoKCJcIiIpKSB7Ci0gICAgICAgICAgICB0bXAgPTNEIHRt
cC5zdWJzdHJpbmcoMSk7Ci0gICAgICAgICAgICB4ID0zRCB0bXAuc3Vic3RyaW5nKDAsIHRtcC5p
bmRleE9mKCJcIiIpKTsKLSAgICAgICAgICAgIHRtcCA9M0QgdG1wLnN1YnN0cmluZyh0bXAuaW5k
ZXhPZigiXCIiKSArIDIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
eCA9M0QgdG1wLnN1YnN0cmluZygwLCB0bXAuaW5kZXhPZigiICIpKTsKLSAgICAgICAgICAgIHRt
cCA9M0QgdG1wLnN1YnN0cmluZyh0bXAuaW5kZXhPZigiICIpICsgMSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHRtcC5zdGFydHNXaXRoKCJcIiIpKSB7Ci0gICAgICAgICAgICB0bXAgPTNEIHRt
cC5zdWJzdHJpbmcoMSk7Ci0gICAgICAgICAgICB5ID0zRCB0bXAuc3Vic3RyaW5nKDAsIHRtcC5p
bmRleE9mKCJcIiIpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHkg
PTNEIHRtcDsKLSAgICAgICAgfQotICAgICAgICBvcnQuc2V0S29vcmRYRXh0ZXJuKHgpOwotICAg
ICAgICBvcnQuc2V0TG9uZ2l0dWRlKERvdWJsZS52YWx1ZU9mKHgpKTsKLSAgICAgICAgb3J0LnNl
dEtvb3JkWUV4dGVybih5KTsKLSAgICAgICAgb3J0LnNldExhdGl0dWRlKERvdWJsZS52YWx1ZU9m
KHkpKTsKLSAgICAgICAgb3J0LnNldEtkYUlkKEludGVnZXIudmFsdWVPZihhcnQpKTsKLSAgICAg
ICAgcmV0dXJuIG9ydDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgdGhlIG5ldyBM
T3J0IG9iamVjdCBmcm9tIHRoZSBnaXZlbiBhdHRyaWJ1dGVzLgotICAgICAqCi0gICAgICogQHJl
dHVybiBUaGUgbmV3IExPcnQgb2JqZWN0LgotICAgICAqLwotICAgIHB1YmxpYyBPcnRzenVvcmRu
dW5nIHRvT3J0c3p1b3JkbnVuZygpIHsKLSAgICAgICAgaWYgKHRoaXMub3J0SWQgPTNEPTNEIG51
bGwgJiYKLSAgICAgICAgICAgICh0aGlzLm9ydENvZGUgPTNEPTNEIG51bGwgfHwgdGhpcy5vcnRD
b2RlLmxlbmd0aCgpID0zRD0zRCAwKQotICAgICAgICApIHsKLSAgICAgICAgICAgIHJldHVybiBu
dWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmKHRoaXMub3J0Q29kZSAhPTNEIG51bGwgJiYgdGhp
cy5vcnRDb2RlLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgUXVlcnlCdWlsZGVyPE9ydD4g
YnVpbGRlciA9M0QKLSAgICAgICAgICAgICAgICBuZXcgUXVlcnlCdWlsZGVyPE9ydD4oCi0gICAg
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuZW50aXR5TWFuYWdlcigic3RhbW0iKSwKLSAgICAg
ICAgICAgICAgICAgICAgT3J0LmNsYXNzKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYW5kKCJiZXpl
aWNobnVuZyIsIHRoaXMub3J0Q29kZSk7Ci0gICAgICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygi
dW5jaGVja2VkIikKLSAgICAgICAgICAgIExpc3Q8T3J0PiBvcnRlPTNECi0gICAgICAgICAgICAg
ICAgKExpc3Q8T3J0PilyZXBvc2l0b3J5LmZpbHRlcigKLSAgICAgICAgICAgICAgICAgICAgYnVp
bGRlci5nZXRRdWVyeSgpLAotICAgICAgICAgICAgICAgICAgICAic3RhbW0iKS5nZXREYXRhKCk7
Ci0gICAgICAgICAgICBpZiAob3J0ZSAhPTNEIG51bGwgJiYgIW9ydGUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5vcnRJZCA9M0Qgb3J0ZS5nZXQoMCkuZ2V0SWQoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBPcnRzenVvcmRudW5nIG9ydCA9M0QgbmV3IE9y
dHN6dW9yZG51bmcoKTsKLSAgICAgICAgb3J0LnNldE9ydElkKExvbmcudmFsdWVPZih0aGlzLm9y
dElkKSk7Ci0gICAgICAgIG9ydC5zZXRQcm9iZUlkKHRoaXMucHJvYmVJZCk7Ci0gICAgICAgIG9y
dC5zZXRPcnRzenVvcmRudW5nVHlwKHRoaXMub3J0VHlwKTsKLSAgICAgICAgb3J0LnNldE9ydHN6
dXNhdHp0ZXh0KHRoaXMuenVzYXR6dGV4dCk7Ci0gICAgICAgIHJldHVybiBvcnQ7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogUmVzZXQgdGhlIGN1cnJlbnQgZGF0YSBzZXRzLgotICAgICAqLwot
ICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgewotICAgICAgICB0aGlzLmJlc2NocmVpYnVuZyA9M0Qg
bnVsbDsKLSAgICAgICAgdGhpcy5iZXplaWNobnVuZyA9M0QgbnVsbDsKLSAgICAgICAgdGhpcy5n
ZW1OYW1lID0zRCBudWxsOwotICAgICAgICB0aGlzLmdlbVNjaGx1ZXNzZWwgPTNEIG51bGw7Ci0g
ICAgICAgIHRoaXMuaG9laGUgPTNEIG51bGw7Ci0gICAgICAgIHRoaXMua29vcmQgPTNEIG51bGw7
Ci0gICAgICAgIHRoaXMua29vcmRBcnQgPTNEIG51bGw7Ci0gICAgICAgIHRoaXMua29vcmRpbmF0
ZW4gPTNEIG51bGw7Ci0gICAgICAgIHRoaXMua29vcmRpbmF0ZW5TID0zRCBudWxsOwotICAgICAg
ICB0aGlzLmtvb3JkUyA9M0QgbnVsbDsKLSAgICAgICAgdGhpcy5sYW5kS3VyeiA9M0QgbnVsbDsK
LSAgICAgICAgdGhpcy5sYW5kTGFuZyA9M0QgbnVsbDsKLSAgICAgICAgdGhpcy5sYW5kUyA9M0Qg
bnVsbDsKLSAgICAgICAgdGhpcy5udXRzID0zRCBudWxsOwotICAgICAgICB0aGlzLm9ydENvZGUg
PTNEIG51bGw7Ci0gICAgICAgIHRoaXMub3J0SWQgPTNEIG51bGw7Ci0gICAgICAgIHRoaXMub3J0
VHlwID0zRCBudWxsOwotICAgICAgICB0aGlzLnByb2JlSWQgPTNEIG51bGw7Ci0gICAgICAgIHRo
aXMuenVzYXR6dGV4dCA9M0QgbnVsbDsKLSAgICB9Ci19CmRpZmYgLXIgMjFhYjRkMzUxMzVhIC1y
IGZkYzc1MmNkMTdmZSBzcmMvbWFpbi9qYXZhL2RlL2ludGV2YXRpb24vbGFkYS9yZXN0Lz0KaW1w
b3J0ZXIvTGFmSW1wb3J0U2VydmljZS5qYXZhCi0tLSBhL3NyYy9tYWluL2phdmEvZGUvaW50ZXZh
dGlvbi9sYWRhL3Jlc3QvaW1wb3J0ZXIvTGFmSW1wb3J0U2VydmljZS5qYXZhCT0KVHVlIFNlcCAy
MCAxNjowMTowMiAyMDE2ICswMjAwCisrKyBiL3NyYy9tYWluL2phdmEvZGUvaW50ZXZhdGlvbi9s
YWRhL3Jlc3QvaW1wb3J0ZXIvTGFmSW1wb3J0U2VydmljZS5qYXZhCT0KRnJpIFNlcCAzMCAxNDow
NToyOCAyMDE2ICswMjAwCkBAIC0zNCw3ICszNCw3IEBACiAgKgogICogQGF1dGhvciA8YSBocmVm
PTNEIm1haWx0bzpycmVua2VydEBpbnRldmF0aW9uLmRlIj5SYWltdW5kIFJlbmtlcnQ8L2E+CiAg
Ki8KLUBQYXRoKCJkYXRhL2xhZi9pbXBvcnQiKQorQFBhdGgoImRhdGEvaW1wb3J0IikKIEBSZXF1
ZXN0U2NvcGVkCiBwdWJsaWMgY2xhc3MgTGFmSW1wb3J0U2VydmljZSB7Cj0yMApAQCAtNjUsNyAr
NjUsOCBAQAogICAgIEBDb25zdW1lcyhNZWRpYVR5cGUuVEVYVF9QTEFJTikKICAgICBwdWJsaWMg
UmVzcG9uc2UgdXBsb2FkKAogICAgICAgICBTdHJpbmcgY29udGVudCwKLSAgICAgICAgQENvbnRl
eHQgSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKKyAgICAgICAgQENvbnRleHQgSHR0cFNl
cnZsZXRSZXF1ZXN0IHJlcXVlc3QKKyAgICApIHsKICAgICAgICAgVXNlckluZm8gdXNlckluZm8g
PTNEIGF1dGhvcml6YXRpb24uZ2V0SW5mbyhyZXF1ZXN0KTsKPTIwCiAgICAgICAgIGltcG9ydGVy
LmRvSW1wb3J0KGNvbnRlbnQsIHVzZXJJbmZvKTsK


More information about the Lada-commits mailing list