[mb-commits] r13715 - in search_server/trunk: index/src/main/java/org/musicbrainz/search/index index/src/test/java/org/musicbrainz/search/index servlet/src/main/java/org/musicbrainz/search/servlet/mmd2 servlet/src/test/java/org/musicbrainz/search/servlet

[email protected] Wed, 02 Oct 2013 13:01:59 +0000
Newsgroups gmane.comp.audio.musicbrainz.cvs
Message-ID <E1VRM3z-0003bG-Ef@wiley>
QXV0aG9yOiBpamFiegpEYXRlOiAyMDEzLTEwLTAyIDEzOjAxOjU5ICswMDAwIChXZWQsIDAyIE9j
dCAyMDEzKQpOZXcgUmV2aXNpb246IDEzNzE1CgpNb2RpZmllZDoKICAgc2VhcmNoX3NlcnZlci90
cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvQXJ0
aXN0SW5kZXguamF2YQogICBzZWFyY2hfc2VydmVyL3RydW5rL2luZGV4L3NyYy9tYWluL2phdmEv
b3JnL211c2ljYnJhaW56L3NlYXJjaC9pbmRleC9MYWJlbEluZGV4LmphdmEKICAgc2VhcmNoX3Nl
cnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5k
ZXgvV29ya0luZGV4LmphdmEKICAgc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9q
YXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvV29ya0luZGV4RmllbGQuamF2YQogICBz
ZWFyY2hfc2VydmVyL3RydW5rL2luZGV4L3NyYy90ZXN0L2phdmEvb3JnL211c2ljYnJhaW56L3Nl
YXJjaC9pbmRleC9BYnN0cmFjdEluZGV4VGVzdC5qYXZhCiAgIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsv
aW5kZXgvc3JjL3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L1dvcmtJbmRl
eFRlc3QuamF2YQogICBzZWFyY2hfc2VydmVyL3RydW5rL3NlcnZsZXQvc3JjL21haW4vamF2YS9v
cmcvbXVzaWNicmFpbnovc2VhcmNoL3NlcnZsZXQvbW1kMi9Xb3JrV3JpdGVyLmphdmEKICAgc2Vh
cmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3NyYy90ZXN0L2phdmEvb3JnL211c2ljYnJhaW56L3Nl
YXJjaC9zZXJ2bGV0L0ZpbmRXb3JrVGVzdC5qYXZhCkxvZzoKU0VBUkNILTI4ODogSW5jbHVkZSBh
bGlhcyBzb3J0bmFtZXMgd2hlbiBzZWFyY2hpbmcgd29ya3MKCk1vZGlmaWVkOiBzZWFyY2hfc2Vy
dmVyL3RydW5rL2luZGV4L3NyYy9tYWluL2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9pbmRl
eC9BcnRpc3RJbmRleC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5k
ZXgvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L0FydGlzdEluZGV4
LmphdmEJMjAxMy0xMC0wMiAxMTo0MjoxNSBVVEMgKHJldiAxMzcxNCkKKysrIHNlYXJjaF9zZXJ2
ZXIvdHJ1bmsvaW5kZXgvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4
L0FydGlzdEluZGV4LmphdmEJMjAxMy0xMC0wMiAxMzowMTo1OSBVVEMgKHJldiAxMzcxNSkKQEAg
LTM4Nyw4ICszODcsMTAgQEAKICAgICAgICAgICAgIEFsaWFzTGlzdCBhbGlhc0xpc3QgPSBvZi5j
cmVhdGVBbGlhc0xpc3QoKTsKICAgICAgICAgICAgIGZvciAoQWxpYXMgbmV4dEFsaWFzIDogYWxp
YXNlcy5nZXQoYXJ0aXN0SWQpKSB7CiAgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlz
dEluZGV4RmllbGQuQUxJQVMsIG5leHRBbGlhcy5nZXRDb250ZW50KCkpOwotICAgICAgICAgICAg
ICAgIGlmKCFuZXh0QWxpYXMuZ2V0U29ydE5hbWUoKS5lcXVhbHMobmV4dEFsaWFzLmdldENvbnRl
bnQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4Rmll
bGQuQUxJQVMsIG5leHRBbGlhcy5nZXRTb3J0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBpZigh
U3RyaW5ncy5pc051bGxPckVtcHR5KG5leHRBbGlhcy5nZXRTb3J0TmFtZSgpKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZighbmV4dEFsaWFzLmdldFNvcnROYW1lKCkuZXF1YWxzKG5leHRBbGlh
cy5nZXRDb250ZW50KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2MuYWRkRmllbGQo
QXJ0aXN0SW5kZXhGaWVsZC5BTElBUywgbmV4dEFsaWFzLmdldFNvcnROYW1lKCkpOworICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFsaWFz
TGlzdC5nZXRBbGlhcygpLmFkZChuZXh0QWxpYXMpOwogICAgICAgICAgICAgfQoKTW9kaWZpZWQ6
IHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnov
c2VhcmNoL2luZGV4L0xhYmVsSW5kZXguamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZWFyY2hfc2VydmVy
L3RydW5rL2luZGV4L3NyYy9tYWluL2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9pbmRleC9M
YWJlbEluZGV4LmphdmEJMjAxMy0xMC0wMiAxMTo0MjoxNSBVVEMgKHJldiAxMzcxNCkKKysrIHNl
YXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2Vh
cmNoL2luZGV4L0xhYmVsSW5kZXguamF2YQkyMDEzLTEwLTAyIDEzOjAxOjU5IFVUQyAocmV2IDEz
NzE1KQpAQCAtMzE2LDggKzMxNiwxMCBAQAogICAgICAgICAgICAgQWxpYXNMaXN0IGFsaWFzTGlz
dCA9IG9mLmNyZWF0ZUFsaWFzTGlzdCgpOwogICAgICAgICAgICAgZm9yIChBbGlhcyBuZXh0QWxp
YXMgOiBhbGlhc2VzLmdldChsYWJlbElkKSkgewogICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVs
ZChMYWJlbEluZGV4RmllbGQuQUxJQVMsIG5leHRBbGlhcy5nZXRDb250ZW50KCkpOwotICAgICAg
ICAgICAgICAgIGlmKCFuZXh0QWxpYXMuZ2V0U29ydE5hbWUoKS5lcXVhbHMobmV4dEFsaWFzLmdl
dENvbnRlbnQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKExhYmVsSW5k
ZXhGaWVsZC5BTElBUywgbmV4dEFsaWFzLmdldFNvcnROYW1lKCkpOworICAgICAgICAgICAgICAg
IGlmKCFTdHJpbmdzLmlzTnVsbE9yRW1wdHkobmV4dEFsaWFzLmdldFNvcnROYW1lKCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmKCFuZXh0QWxpYXMuZ2V0U29ydE5hbWUoKS5lcXVhbHMobmV4
dEFsaWFzLmdldENvbnRlbnQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvYy5hZGRG
aWVsZChMYWJlbEluZGV4RmllbGQuQUxJQVMsIG5leHRBbGlhcy5nZXRTb3J0TmFtZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBh
bGlhc0xpc3QuZ2V0QWxpYXMoKS5hZGQobmV4dEFsaWFzKTsKICAgICAgICAgICAgIH0KCk1vZGlm
aWVkOiBzZWFyY2hfc2VydmVyL3RydW5rL2luZGV4L3NyYy9tYWluL2phdmEvb3JnL211c2ljYnJh
aW56L3NlYXJjaC9pbmRleC9Xb3JrSW5kZXguamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZWFyY2hfc2Vy
dmVyL3RydW5rL2luZGV4L3NyYy9tYWluL2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9pbmRl
eC9Xb3JrSW5kZXguamF2YQkyMDEzLTEwLTAyIDExOjQyOjE1IFVUQyAocmV2IDEzNzE0KQorKysg
c2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9z
ZWFyY2gvaW5kZXgvV29ya0luZGV4LmphdmEJMjAxMy0xMC0wMiAxMzowMTo1OSBVVEMgKHJldiAx
MzcxNSkKQEAgLTE5LDYgKzE5LDcgQEAKIAogcGFja2FnZSBvcmcubXVzaWNicmFpbnouc2VhcmNo
LmluZGV4OwogCitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uYmFzZS5TdHJpbmdzOwogaW1wb3J0
IG9yZy5hcGFjaGUubHVjZW5lLmFuYWx5c2lzLkFuYWx5emVyOwogaW1wb3J0IG9yZy5hcGFjaGUu
bHVjZW5lLmRvY3VtZW50LkRvY3VtZW50OwogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLmluZGV4
LkluZGV4V3JpdGVyOwpAQCAtMjYsMTEgKzI3LDkgQEAKIGltcG9ydCBvcmcubXVzaWNicmFpbnou
c2VhcmNoLk1iRG9jdW1lbnQ7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0
IGphdmEubWF0aC5CaWdJbnRlZ2VyOwogaW1wb3J0IGphdmEuc3FsLio7Ci1pbXBvcnQgamF2YS51
dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51
dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKIAog
CiBwdWJsaWMgY2xhc3MgV29ya0luZGV4IGV4dGVuZHMgRGF0YWJhc2VJbmRleCB7CkBAIC05NSw5
ICs5NCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIiBPUkRFUiBCWSBhdy5pZCIpOwog
CiAgICAgICAgIGFkZFByZXBhcmVkU3RhdGVtZW50KCJBTElBU0VTIiwKLSAgICAgICAgICAgICAg
ICAiU0VMRUNUIHdvcmtfYWxpYXMud29yayBhcyB3b3JrLCB3b3JrX2FsaWFzLm5hbWUgYXMgYWxp
YXMgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiIEZST00gd29ya19hbGlhcyAiICsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICIgV0hFUkUgd29yayBCRVRXRUVOID8gQU5EID8iKTsKKyAg
ICAgICAgICAgICAgICAiU0VMRUNUIGEud29yayBhcyB3b3JrLCBhLm5hbWUgYXMgYWxpYXMsIGEu
c29ydF9uYW1lIGFzIGFsaWFzX3NvcnRuYW1lLCBhLnByaW1hcnlfZm9yX2xvY2FsZSwgYS5sb2Nh
bGUsIGF0dC5uYW1lIGFzIHR5cGUsIiArCisgICAgICAgICAgICAgICAgICAgICAgICAiYS5iZWdp
bl9kYXRlX3llYXIsIGEuYmVnaW5fZGF0ZV9tb250aCwgYS5iZWdpbl9kYXRlX2RheSwgYS5lbmRf
ZGF0ZV95ZWFyLCBhLmVuZF9kYXRlX21vbnRoLCBhLmVuZF9kYXRlX2RheSIgKworICAgICAgICAg
ICAgICAgICAgICAgICAgIiBGUk9NIHdvcmtfYWxpYXMgYSIgKworICAgICAgICAgICAgICAgICAg
ICAgICAgIiAgTEVGVCBKT0lOIHdvcmtfYWxpYXNfdHlwZSBhdHQgb24gKGEudHlwZT1hdHQuaWQp
IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiIFdIRVJFIHdvcmsgQkVUV0VFTiA/IEFORCA/
IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiIE9SREVSIEJZIHdvcmssIGFsaWFzLCBhbGlh
c19zb3J0bmFtZSIpOwogCiAgICAgICAgIGFkZFByZXBhcmVkU3RhdGVtZW50KCJJU1dDUyIsCiAg
ICAgICAgICAgICAgICAgIlNFTEVDVCB3b3JrLCBpc3djIiArCkBAIC0yMTIsMjMgKzIxNCw1MiBA
QAogICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uCiAgICAgICogQHRocm93cyBJT0V4Y2VwdGlv
bgogICAgICAqLwotICAgIHByaXZhdGUgTWFwPEludGVnZXIsIExpc3Q8U3RyaW5nPj4gbG9hZEFs
aWFzZXMoaW50IG1pbiwgaW50IG1heCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24g
ewotICAgICAgICBNYXA8SW50ZWdlciwgTGlzdDxTdHJpbmc+PiBhbGlhc2VzID0gbmV3IEhhc2hN
YXA8SW50ZWdlciwgTGlzdDxTdHJpbmc+PigpOworICAgIHByaXZhdGUgIE1hcDxJbnRlZ2VyLCBT
ZXQ8QWxpYXM+PiBsb2FkQWxpYXNlcyhpbnQgbWluLCBpbnQgbWF4KSB0aHJvd3MgU1FMRXhjZXB0
aW9uLCBJT0V4Y2VwdGlvbiB7CisKKyAgICAgICAgT2JqZWN0RmFjdG9yeSBvZiA9IG5ldyBPYmpl
Y3RGYWN0b3J5KCk7CisKKyAgICAgICAgLy8gR2V0IGxhYmVscyBhbGlhc2VzCisgICAgICAgIC8v
QWxpYXNlcworICAgICAgICBNYXA8SW50ZWdlciwgU2V0PEFsaWFzPj4gYWxpYXNlcyA9IG5ldyBI
YXNoTWFwPEludGVnZXIsIFNldDxBbGlhcz4+KCk7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50
IHN0ID0gZ2V0UHJlcGFyZWRTdGF0ZW1lbnQoIkFMSUFTRVMiKTsKICAgICAgICAgc3Quc2V0SW50
KDEsIG1pbik7CiAgICAgICAgIHN0LnNldEludCgyLCBtYXgpOwogICAgICAgICBSZXN1bHRTZXQg
cnMgPSBzdC5leGVjdXRlUXVlcnkoKTsKICAgICAgICAgd2hpbGUgKHJzLm5leHQoKSkgewotICAg
ICAgICAgICAgaW50IHdvcmtJZCA9IHJzLmdldEludCgid29yayIpOwotCi0gICAgICAgICAgICBM
aXN0PFN0cmluZz4gbGlzdDsKLSAgICAgICAgICAgIGlmICghYWxpYXNlcy5jb250YWluc0tleSh3
b3JrSWQpKSB7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IG5ldyBMaW5rZWRMaXN0PFN0cmluZz4o
KTsKLSAgICAgICAgICAgICAgICBhbGlhc2VzLnB1dCh3b3JrSWQsIGxpc3QpOworICAgICAgICAg
ICAgaW50IGFydGlzdElkID0gcnMuZ2V0SW50KCJ3b3JrIik7CisgICAgICAgICAgICBTZXQ8QWxp
YXM+IGxpc3Q7CisgICAgICAgICAgICBpZiAoIWFsaWFzZXMuY29udGFpbnNLZXkoYXJ0aXN0SWQp
KSB7CisgICAgICAgICAgICAgICAgbGlzdCA9IG5ldyBMaW5rZWRIYXNoU2V0PEFsaWFzPigpOwor
ICAgICAgICAgICAgICAgIGFsaWFzZXMucHV0KGFydGlzdElkLCBsaXN0KTsKICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IGFsaWFzZXMuZ2V0KHdvcmtJZCk7Cisg
ICAgICAgICAgICAgICAgbGlzdCA9IGFsaWFzZXMuZ2V0KGFydGlzdElkKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGxpc3QuYWRkKHJzLmdldFN0cmluZygiYWxpYXMiKSk7CisgICAgICAg
ICAgICBBbGlhcyBhbGlhcyA9IG9mLmNyZWF0ZUFsaWFzKCk7CisgICAgICAgICAgICBhbGlhcy5z
ZXRDb250ZW50KHJzLmdldFN0cmluZygiYWxpYXMiKSk7CisgICAgICAgICAgICBhbGlhcy5zZXRT
b3J0TmFtZShycy5nZXRTdHJpbmcoImFsaWFzX3NvcnRuYW1lIikpOworICAgICAgICAgICAgYm9v
bGVhbiBpc1ByaW1hcnkgPSBycy5nZXRCb29sZWFuKCJwcmltYXJ5X2Zvcl9sb2NhbGUiKTsKKyAg
ICAgICAgICAgIGlmKGlzUHJpbWFyeSkgeworICAgICAgICAgICAgICAgIGFsaWFzLnNldFByaW1h
cnkoInByaW1hcnkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBsb2NhbGUg
PSBycy5nZXRTdHJpbmcoImxvY2FsZSIpOworICAgICAgICAgICAgaWYobG9jYWxlIT1udWxsKSB7
CisgICAgICAgICAgICAgICAgYWxpYXMuc2V0TG9jYWxlKGxvY2FsZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBTdHJpbmcgdHlwZSA9IHJzLmdldFN0cmluZygidHlwZSIpOworICAgICAg
ICAgICAgaWYodHlwZSE9bnVsbCkgeworICAgICAgICAgICAgICAgIGFsaWFzLnNldFR5cGUodHlw
ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0cmluZyBiZWdpbiA9IFV0aWxzLmZv
cm1hdERhdGUocnMuZ2V0SW50KCJiZWdpbl9kYXRlX3llYXIiKSwgcnMuZ2V0SW50KCJiZWdpbl9k
YXRlX21vbnRoIiksIHJzLmdldEludCgiYmVnaW5fZGF0ZV9kYXkiKSk7CisgICAgICAgICAgICBp
ZighU3RyaW5ncy5pc051bGxPckVtcHR5KGJlZ2luKSkgIHsKKyAgICAgICAgICAgICAgICBhbGlh
cy5zZXRCZWdpbkRhdGUoYmVnaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdHJp
bmcgZW5kID0gVXRpbHMuZm9ybWF0RGF0ZShycy5nZXRJbnQoImVuZF9kYXRlX3llYXIiKSwgcnMu
Z2V0SW50KCJlbmRfZGF0ZV9tb250aCIpLCBycy5nZXRJbnQoImVuZF9kYXRlX2RheSIpKTsKKyAg
ICAgICAgICAgIGlmKCFTdHJpbmdzLmlzTnVsbE9yRW1wdHkoZW5kKSkgIHsKKyAgICAgICAgICAg
ICAgICBhbGlhcy5zZXRFbmREYXRlKGVuZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBs
aXN0LmFkZChhbGlhcyk7CiAgICAgICAgIH0KICAgICAgICAgcnMuY2xvc2UoKTsKICAgICAgICAg
cmV0dXJuIGFsaWFzZXM7CkBAIC0yNzcsNyArMzA4LDcgQEAKIAogICAgICAgICBNYXA8SW50ZWdl
ciwgTGlzdDxUYWc+PiAgICB0YWdzICAgICAgICAgICAgID0gbG9hZFRhZ3MobWluLCBtYXgpOwog
ICAgICAgICBNYXA8SW50ZWdlciwgUmVsYXRpb25MaXN0PiBhcnRpc3RSZWxhdGlvbnMgID0gbG9h
ZEFydGlzdFJlbGF0aW9ucyhtaW4sIG1heCk7Ci0gICAgICAgIE1hcDxJbnRlZ2VyLCBMaXN0PFN0
cmluZz4+IGFsaWFzZXMgICAgICAgICAgPSBsb2FkQWxpYXNlcyhtaW4sIG1heCk7CisgICAgICAg
IE1hcDxJbnRlZ2VyLCBTZXQ8QWxpYXM+PiBhbGlhc2VzICAgICAgICAgICAgPSBsb2FkQWxpYXNl
cyhtaW4sIG1heCk7CiAgICAgICAgIE1hcDxJbnRlZ2VyLCBMaXN0PFN0cmluZz4+IGlzd2NzICAg
ICAgICAgICAgPSBsb2FkSVNXQ3MobWluLG1heCk7CiAKICAgICAgICAgLy9Xb3JrcwpAQCAtMjk1
LDI0ICszMjYsNDcgQEAKICAgICBwdWJsaWMgRG9jdW1lbnQgZG9jdW1lbnRGcm9tUmVzdWx0U2V0
KFJlc3VsdFNldCBycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1hcDxJbnRlZ2VyLCBMaXN0PFRhZz4+IHRhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNYXA8SW50ZWdlciwgUmVsYXRpb25MaXN0PiBhcnRpc3RzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPEludGVnZXIsIExpc3Q8
U3RyaW5nPj4gYWxpYXNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1hcDxJbnRlZ2VyLCBTZXQ8QWxpYXM+PiAgIGFsaWFzZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8SW50ZWdlciwgTGlzdDxTdHJpbmc+PiBpc3dj
cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB0aHJvd3MgU1FM
RXhjZXB0aW9uIHsKICAgICAgICAgTWJEb2N1bWVudCBkb2MgPSBuZXcgTWJEb2N1bWVudCgpOwor
CisgICAgICAgIE9iamVjdEZhY3Rvcnkgb2YgPSBuZXcgT2JqZWN0RmFjdG9yeSgpOworICAgICAg
ICBXb3JrIHdvcmsgPSBvZi5jcmVhdGVXb3JrKCk7CisKICAgICAgICAgaW50IGlkID0gcnMuZ2V0
SW50KCJ3aWQiKTsKKyAgICAgICAgU3RyaW5nIGd1aWQgPSBycy5nZXRTdHJpbmcoImdpZCIpOwog
ICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuSUQsIGlkKTsKLSAgICAgICAgZG9j
LmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLldPUktfSUQsIHJzLmdldFN0cmluZygiZ2lkIikpOwor
ICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuV09SS19JRCwgZ3VpZCk7CisgICAg
ICAgIHdvcmsuc2V0SWQoZ3VpZCk7CisKICAgICAgICAgU3RyaW5nIG5hbWUgPSBycy5nZXRTdHJp
bmcoIm5hbWUiKTsKICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLldPUkssIG5h
bWUpOwogICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuV09SS19BQ0NFTlQsIG5h
bWUpOwotICAgICAgICBkb2MuYWRkRmllbGRPck5vVmFsdWUoV29ya0luZGV4RmllbGQuTFlSSUNT
X0xBTkcscnMuZ2V0U3RyaW5nKCJsYW5ndWFnZSIpKTsKLSAgICAgICAgZG9jLmFkZEZpZWxkT3JO
b1ZhbHVlKFdvcmtJbmRleEZpZWxkLlRZUEUsIHJzLmdldFN0cmluZygidHlwZSIpKTsKLSAgICAg
ICAgZG9jLmFkZEZpZWxkT3JOb1ZhbHVlKFdvcmtJbmRleEZpZWxkLkNPTU1FTlQsIHJzLmdldFN0
cmluZygiY29tbWVudCIpKTsKKyAgICAgICAgd29yay5zZXRUaXRsZShuYW1lKTsKIAorICAgICAg
ICBTdHJpbmcgbGFuZ3VhZ2UgPSBycy5nZXRTdHJpbmcoImxhbmd1YWdlIik7CisgICAgICAgIGRv
Yy5hZGRGaWVsZE9yTm9WYWx1ZShXb3JrSW5kZXhGaWVsZC5MWVJJQ1NfTEFORyxsYW5ndWFnZSk7
CisgICAgICAgIGlmICghU3RyaW5ncy5pc051bGxPckVtcHR5KGxhbmd1YWdlKSkgeworICAgICAg
ICAgICAgd29yay5zZXRMYW5ndWFnZShsYW5ndWFnZSk7CisgICAgICAgIH0KKworICAgICAgICBT
dHJpbmcgdHlwZSA9IHJzLmdldFN0cmluZygidHlwZSIpOworICAgICAgICBkb2MuYWRkRmllbGRP
ck5vVmFsdWUoV29ya0luZGV4RmllbGQuVFlQRSwgdHlwZSk7CisgICAgICAgIGlmICghU3RyaW5n
cy5pc051bGxPckVtcHR5KHR5cGUpKSB7CisgICAgICAgICAgICB3b3JrLnNldFR5cGUodHlwZSk7
CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgY29tbWVudCA9IHJzLmdldFN0cmluZygiY29t
bWVudCIpOworICAgICAgICBkb2MuYWRkRmllbGRPck5vVmFsdWUoV29ya0luZGV4RmllbGQuQ09N
TUVOVCwgY29tbWVudCk7CisgICAgICAgIGlmICghU3RyaW5ncy5pc051bGxPckVtcHR5KGNvbW1l
bnQpKSB7CisgICAgICAgICAgICB3b3JrLnNldERpc2FtYmlndWF0aW9uKGNvbW1lbnQpOworICAg
ICAgICB9CisKICAgICAgICAgaWYgKGFydGlzdHMuY29udGFpbnNLZXkoaWQpKSB7CiAgICAgICAg
ICAgICBSZWxhdGlvbkxpc3QgcmwgPSBhcnRpc3RzLmdldChpZCk7CisgICAgICAgICAgICB3b3Jr
LmdldFJlbGF0aW9uTGlzdCgpLmFkZChybCk7CiAgICAgICAgICAgICBpZiAocmwuZ2V0UmVsYXRp
b24oKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRl
eEZpZWxkLkFSVElTVF9SRUxBVElPTiwgTU1EU2VyaWFsaXplci5zZXJpYWxpemUocmwpKTsKICAg
ICAgICAgICAgICAgICBmb3IgKFJlbGF0aW9uIHIgOiBhcnRpc3RzLmdldChpZCkuZ2V0UmVsYXRp
b24oKSkgewogICAgICAgICAgICAgICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQu
QVJUSVNUX0lELCByLmdldEFydGlzdCgpLmdldElkKCkpOwogICAgICAgICAgICAgICAgICAgICBk
b2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuQVJUSVNULCByLmdldEFydGlzdCgpLmdldE5hbWUo
KSk7CkBAIC0zMjEsMjYgKzM3NSw0NyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGFsaWFz
ZXMuY29udGFpbnNLZXkoaWQpKSB7Ci0gICAgICAgICAgICBmb3IgKFN0cmluZyBhbGlhcyA6IGFs
aWFzZXMuZ2V0KGlkKSkgewotICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhG
aWVsZC5BTElBUywgYWxpYXMpOworICAgICAgICAgICAgQWxpYXNMaXN0IGFsaWFzTGlzdCA9IG9m
LmNyZWF0ZUFsaWFzTGlzdCgpOworICAgICAgICAgICAgZm9yIChBbGlhcyBuZXh0QWxpYXMgOiBh
bGlhc2VzLmdldChpZCkpIHsKKyAgICAgICAgICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4
RmllbGQuQUxJQVMsIG5leHRBbGlhcy5nZXRDb250ZW50KCkpOworICAgICAgICAgICAgICAgIGlm
KCFTdHJpbmdzLmlzTnVsbE9yRW1wdHkobmV4dEFsaWFzLmdldFNvcnROYW1lKCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmKCFuZXh0QWxpYXMuZ2V0U29ydE5hbWUoKS5lcXVhbHMobmV4dEFs
aWFzLmdldENvbnRlbnQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVs
ZChXb3JrSW5kZXhGaWVsZC5BTElBUywgbmV4dEFsaWFzLmdldFNvcnROYW1lKCkpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFsaWFz
TGlzdC5nZXRBbGlhcygpLmFkZChuZXh0QWxpYXMpOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgd29yay5zZXRBbGlhc0xpc3QoYWxpYXNMaXN0KTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChpc3djcy5jb250YWluc0tleShpZCkpIHsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIGlzd2Mg
OiBpc3djcy5nZXQoaWQpKSB7Ci0gICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRl
eEZpZWxkLklTV0MsIGlzd2MpOworICAgICAgICAgICAgSXN3Y0xpc3QgaXN3Y0xpc3QgPSBvZi5j
cmVhdGVJc3djTGlzdCgpOworICAgICAgICAgICAgZm9yIChTdHJpbmcgaXN3Y0NvZGUgOiBpc3dj
cy5nZXQoaWQpKSB7CisgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxk
LklTV0MsIGlzd2NDb2RlKTsKKyAgICAgICAgICAgICAgICBpc3djTGlzdC5nZXRJc3djKCkuYWRk
KGlzd2NDb2RlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdvcmsuc2V0SXN3Y0xpc3Qo
aXN3Y0xpc3QpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICBlbHNlCisgICAg
ICAgIHsKICAgICAgICAgICAgIGRvYy5hZGRGaWVsZE9yTm9WYWx1ZShXb3JrSW5kZXhGaWVsZC5J
U1dDLCBudWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0YWdzLmNvbnRhaW5zS2V5KGlk
KSkgewotICAgICAgICAgICAgZm9yIChUYWcgdGFnIDogdGFncy5nZXQoaWQpKSB7Ci0gICAgICAg
ICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLlRBRywgdGFnLmdldE5hbWUoKSk7
Ci0gICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLlRBR0NPVU5ULCB0
YWcuZ2V0Q291bnQoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIFRhZ0xpc3QgdGFnTGlzdCA9
IG9mLmNyZWF0ZVRhZ0xpc3QoKTsKKyAgICAgICAgICAgIGZvciAoVGFnIG5leHRUYWcgOiB0YWdz
LmdldChpZCkpIHsKKyAgICAgICAgICAgICAgICBUYWcgdGFnID0gb2YuY3JlYXRlVGFnKCk7Cisg
ICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLlRBRywgbmV4dFRhZy5n
ZXROYW1lKCkpOworICAgICAgICAgICAgICAgIHRhZy5zZXROYW1lKG5leHRUYWcuZ2V0TmFtZSgp
KTsKKyAgICAgICAgICAgICAgICB0YWcuc2V0Q291bnQobmV3IEJpZ0ludGVnZXIobmV4dFRhZy5n
ZXRDb3VudCgpLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAgICB0YWdMaXN0LmdldFRhZygp
LmFkZCh0YWcpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgd29yay5zZXRUYWdMaXN0KHRh
Z0xpc3QpOwogICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHN0b3JlID0gTU1EU2VyaWFsaXpl
ci5zZXJpYWxpemUod29yayk7CisgICAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhGaWVsZC5X
T1JLX1NUT1JFLCBzdG9yZSk7CisKICAgICAgICAgcmV0dXJuIGRvYy5nZXRMdWNlbmVEb2N1bWVu
dCgpOwogICAgIH0KIAoKTW9kaWZpZWQ6IHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL21h
aW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L1dvcmtJbmRleEZpZWxkLmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29y
Zy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvV29ya0luZGV4RmllbGQuamF2YQkyMDEzLTEwLTAy
IDExOjQyOjE1IFVUQyAocmV2IDEzNzE0KQorKysgc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9z
cmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvV29ya0luZGV4RmllbGQu
amF2YQkyMDEzLTEwLTAyIDEzOjAxOjU5IFVUQyAocmV2IDEzNzE1KQpAQCAtMTgsMTYgKzE4LDE1
IEBACiAgICAgQUxJQVMJCSAgICAgICAgKCJhbGlhcyIsCQkgICAgTXVzaWNCcmFpbnpGaWVsZFR5
cGVzLlRFWFRfU1RPUkVEX0FOQUxZWkVELCBuZXcgTXVzaWNicmFpbnpXaXRoUG9zR2FwQW5hbHl6
ZXIoKSksCiAgICAgQVJUSVNUX0lECQkgICAgKCJhcmlkIiwJCQlNdXNpY0JyYWluekZpZWxkVHlw
ZXMuVEVYVF9OT1RfU1RPUkVEX05PVF9BTkFMWVpFRF9OT19OT1JNUywgbmV3IEtleXdvcmRBbmFs
eXplcigpKSwKICAgICBBUlRJU1QgICAgICAgICAgICAgICgiYXJ0aXN0IiwgICAgICAgICAgTXVz
aWNCcmFpbnpGaWVsZFR5cGVzLlRFWFRfTk9UX1NUT1JFRF9BTkFMWVpFRCwgbmV3IE11c2ljYnJh
aW56V2l0aFBvc0dhcEFuYWx5emVyKCkpLAotICAgIEFSVElTVF9SRUxBVElPTiAgICAgKCJhcnRp
c3RyZWxhdGlvbiIsICBNdXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9TVE9SRURfTk9UX0lOREVY
RUQpLAogICAgIENPTU1FTlQJCSAgICAgICAgKCJjb21tZW50IiwJCSAgICBNdXNpY0JyYWluekZp
ZWxkVHlwZXMuVEVYVF9TVE9SRURfQU5BTFlaRUQpLAogICAgIElTV0MJCSAgICAgICAgKCJpc3dj
IiwJCSAgICBNdXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9TVE9SRURfQU5BTFlaRURfTk9fTk9S
TVMsIG5ldyBDYXNlSW5zZW5zaXRpdmVLZXl3b3JkQW5hbHl6ZXIoKSksCiAgICAgTFlSSUNTX0xB
TkcJCSAgICAoImxhbmciLAkgICAgICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX1NUT1JF
RF9OT1RfQU5BTFlaRURfTk9fTk9STVMsIG5ldyBDYXNlSW5zZW5zaXRpdmVLZXl3b3JkQW5hbHl6
ZXIoKSksCiAgICAgVFlQRQkJICAgICAgICAoInR5cGUiLAkJICAgIE11c2ljQnJhaW56RmllbGRU
eXBlcy5URVhUX1NUT1JFRF9BTkFMWVpFRF9OT19OT1JNUywgbmV3IENhc2VJbnNlbnNpdGl2ZUtl
eXdvcmRBbmFseXplcigpKSwKICAgICBUQUcJCSAgICAgICAgICAgICgidGFnIiwJCSAgICAgICAg
TXVzaWNCcmFpbnpGaWVsZFR5cGVzLlRFWFRfU1RPUkVEX0FOQUxZWkVELCBuZXcgTXVzaWNicmFp
bnpXaXRoUG9zR2FwQW5hbHl6ZXIoKSksCi0gICAgVEFHQ09VTlQgICAgICAgICAgICAoInRhZ2Nv
dW50IiwJICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX1NUT1JFRF9OT1RfSU5ERVhFRCks
CiAgICAgV09SSwkJCSAgICAoIndvcmsiLAkJICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhU
X1NUT1JFRF9BTkFMWVpFRCwgbmV3IFRpdGxlQW5hbHl6ZXIoKSksCiAgICAgV09SS19BQ0NFTlQg
ICAgICAgICAoIndvcmthY2NlbnQiLCAgICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX05P
VF9TVE9SRURfQU5BTFlaRUQsIG5ldyBNdXNpY2JyYWluektlZXBBY2NlbnRzQW5hbHl6ZXIoKSks
CiAgICAgV09SS19JRAkJICAgICAgICAoIndpZCIsCQkgICAgICAgIE11c2ljQnJhaW56RmllbGRU
eXBlcy5URVhUX1NUT1JFRF9OT1RfQU5BTFlaRURfTk9fTk9STVMsIG5ldyBLZXl3b3JkQW5hbHl6
ZXIoKSksCisgICAgV09SS19TVE9SRQkJICAgICgid29ya3N0b3JlIiwgICAgICAgTXVzaWNCcmFp
bnpGaWVsZFR5cGVzLlRFWFRfU1RPUkVEX05PVF9JTkRFWEVEKSwKICAgICA7CiAKICAgICBwcml2
YXRlIFN0cmluZyBuYW1lOwoKTW9kaWZpZWQ6IHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3Jj
L3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L0Fic3RyYWN0SW5kZXhUZXN0
LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvdGVzdC9q
YXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvQWJzdHJhY3RJbmRleFRlc3QuamF2YQky
MDEzLTEwLTAyIDExOjQyOjE1IFVUQyAocmV2IDEzNzE0KQorKysgc2VhcmNoX3NlcnZlci90cnVu
ay9pbmRleC9zcmMvdGVzdC9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvQWJzdHJh
Y3RJbmRleFRlc3QuamF2YQkyMDEzLTEwLTAyIDEzOjAxOjU5IFVUQyAocmV2IDEzNzE1KQpAQCAt
Nzk5LDYgKzc5OSw3IEBACiAgICAgICAgICAgICAgICAgIiAgaWQgc2VyaWFsIE5PVCBOVUxMLCIg
KwogICAgICAgICAgICAgICAgICIgIHdvcmsgaW50ZWdlciBOT1QgTlVMTCwiICsKICAgICAgICAg
ICAgICAgICAiICBuYW1lIGNoYXJhY3RlciB2YXJ5aW5nKDI1NSksIiArCisgICAgICAgICAgICAg
ICAgIiAgbG9jYWxlIHRleHQsIiArCiAgICAgICAgICAgICAgICAgIiAgc29ydF9uYW1lIGNoYXJh
Y3RlciB2YXJ5aW5nKDI1NSksIiArCiAgICAgICAgICAgICAgICAgIiAgdHlwZSAgICAgICAgICAg
ICAgICBJTlRFR0VSLCIgKwogICAgICAgICAgICAgICAgICIgIGJlZ2luX2RhdGVfeWVhciAgICAg
U01BTExJTlQsIiArCkBAIC04MDcsNiArODA4LDcgQEAKICAgICAgICAgICAgICAgICAiICBlbmRf
ZGF0ZV95ZWFyICAgICAgIFNNQUxMSU5ULCIgKwogICAgICAgICAgICAgICAgICIgIGVuZF9kYXRl
X21vbnRoICAgICAgU01BTExJTlQsIiArCiAgICAgICAgICAgICAgICAgIiAgZW5kX2RhdGVfZGF5
ICAgICAgICBTTUFMTElOVCwiICsKKyAgICAgICAgICAgICAgICAiICBwcmltYXJ5X2Zvcl9sb2Nh
bGUgIEJPT0xFQU4sIiAgKwogICAgICAgICAgICAgICAgICIgIGxhc3RfdXBkYXRlZCB0aW1lc3Rh
bXAsIiArCiAgICAgICAgICAgICAgICAgIiAgZWRpdHNfcGVuZGluZyBpbnRlZ2VyIE5PVCBOVUxM
IERFRkFVTFQgMCIgKwogICAgICAgICAgICAgICAgICIpIik7CgpNb2RpZmllZDogc2VhcmNoX3Nl
cnZlci90cnVuay9pbmRleC9zcmMvdGVzdC9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5k
ZXgvV29ya0luZGV4VGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsv
aW5kZXgvc3JjL3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L1dvcmtJbmRl
eFRlc3QuamF2YQkyMDEzLTEwLTAyIDExOjQyOjE1IFVUQyAocmV2IDEzNzE0KQorKysgc2VhcmNo
X3NlcnZlci90cnVuay9pbmRleC9zcmMvdGVzdC9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gv
aW5kZXgvV29ya0luZGV4VGVzdC5qYXZhCTIwMTMtMTAtMDIgMTM6MDE6NTkgVVRDIChyZXYgMTM3
MTUpCkBAIC02LDcgKzYsOSBAQAogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLmluZGV4LkluZGV4
V3JpdGVyOwogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLnN0b3JlLlJBTURpcmVjdG9yeTsKIGlt
cG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcubXVzaWNicmFpbnoubW1kMi5MYWJlbDsK
IGltcG9ydCBvcmcubXVzaWNicmFpbnoubW1kMi5SZWxhdGlvbkxpc3Q7CitpbXBvcnQgb3JnLm11
c2ljYnJhaW56Lm1tZDIuV29yazsKIAogaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKIApAQCAt
NDcsNyArNDksNyBAQAogICAgICAgICAgICAgICAgICIgVkFMVUVTICgxLCAnYTUzOWJiMWUtZjJl
MS00YjQ1LTlkYjgtODA1Mzg0MWU3NTAzJywgJ1dvcmsnLCAxLCAgJ2RlbW8nLCAxKSIpOwogICAg
ICAgICBzdG10LmFkZEJhdGNoKCJJTlNFUlQgSU5UTyBsYW5ndWFnZSAoaWQsIGlzb19jb2RlXzMs
IGlzb19jb2RlXzJ0LCBpc29fY29kZV8yYiwgaXNvX2NvZGVfMiwgbmFtZSwgZnJlcXVlbmN5KSAi
ICsKICAgICAgICAgICAgICAgICAiIFZBTFVFUyAoMSwgJ2VuZycsICdlbmcnLCAnZW5nJywgJ2Vu
JywgJ0VuZ2xpc2gnLCAxKSIpOwotICAgICAgICBzdG10LmFkZEJhdGNoKCJJTlNFUlQgSU5UTyB3
b3JrX2FsaWFzICh3b3JrLCBuYW1lKSBWQUxVRVMgKDEsICdQbGF5JykiKTsKKyAgICAgICAgc3Rt
dC5hZGRCYXRjaCgiSU5TRVJUIElOVE8gd29ya19hbGlhcyAod29yaywgbmFtZSwgc29ydF9uYW1l
KSBWQUxVRVMgKDEsICdQbGF5JywgJycpIik7CiAKICAgICAgICAgc3RtdC5hZGRCYXRjaCgiSU5T
RVJUIElOVE8gdGFnIChpZCwgbmFtZSwgcmVmX2NvdW50KSBWQUxVRVMgKDEsICdDbGFzc2ljYWwn
LCAyKTsiKTsKICAgICAgICAgc3RtdC5hZGRCYXRjaCgiSU5TRVJUIElOVE8gd29ya190YWcgKHdv
cmssIHRhZywgY291bnQpIFZBTFVFUyAoMSwgMSwgMTApIik7CkBAIC0xMDUsNyArMTA3LDYgQEAK
ICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRzKFdvcmtJbmRleEZpZWxk
LklTV0MuZ2V0TmFtZSgpKS5sZW5ndGgpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRv
Yy5nZXRGaWVsZHMoV29ya0luZGV4RmllbGQuVFlQRS5nZXROYW1lKCkpLmxlbmd0aCk7CiAgICAg
ICAgICAgICBhc3NlcnRFcXVhbHMoIi0iLCBkb2MuZ2V0RmllbGQoV29ya0luZGV4RmllbGQuVFlQ
RS5nZXROYW1lKCkpLnN0cmluZ1ZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEs
IGRvYy5nZXRGaWVsZHMoV29ya0luZGV4RmllbGQuQVJUSVNUX1JFTEFUSU9OLmdldE5hbWUoKSku
bGVuZ3RoKTsKICAgICAgICAgICAgIGlyLmNsb3NlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0y
MTcsMTIgKzIxOCwxMSBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgaXIubnVtRG9jcygpKTsK
ICAgICAgICAgewogICAgICAgICAgICAgRG9jdW1lbnQgZG9jID0gaXIuZG9jdW1lbnQoMSk7Ci0g
ICAgICAgICAgICBSZWxhdGlvbkxpc3QgcmMgPSAoUmVsYXRpb25MaXN0KSBNTURTZXJpYWxpemVy
Ci0gICAgICAgICAgICAgICAgICAgIC51bnNlcmlhbGl6ZShkb2MuZ2V0KFdvcmtJbmRleEZpZWxk
LkFSVElTVF9SRUxBVElPTi5nZXROYW1lKCkpLCBSZWxhdGlvbkxpc3QuY2xhc3MpOwotICAgICAg
ICAgICAgYXNzZXJ0Tm90TnVsbChyYyk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNjZDQ4
NzljLTVlODgtNDM4NS1iMTMxLWJmNjUyOTZiZjI0NSIscmMuZ2V0UmVsYXRpb24oKS5nZXQoMCku
Z2V0QXJ0aXN0KCkuZ2V0SWQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkVjaG8gJiBU
aGUgQnVubnltZW4iLHJjLmdldFJlbGF0aW9uKCkuZ2V0KDApLmdldEFydGlzdCgpLmdldE5hbWUo
KSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNvbXBvc2VyIixyYy5nZXRSZWxhdGlvbigp
LmdldCgwKS5nZXRUeXBlKCkpOworICAgICAgICAgICAgV29yayB3b3JrID0gKFdvcmspIE1NRFNl
cmlhbGl6ZXIKKyAgICAgICAgICAgICAgICAgICAgLnVuc2VyaWFsaXplKGRvYy5nZXQoV29ya0lu
ZGV4RmllbGQuV09SS19TVE9SRS5nZXROYW1lKCkpLCBXb3JrLmNsYXNzKTsKKyAgICAgICAgICAg
IGFzc2VydEVxdWFscygiY2NkNDg3OWMtNWU4OC00Mzg1LWIxMzEtYmY2NTI5NmJmMjQ1Iiwgd29y
ay5nZXRSZWxhdGlvbkxpc3QoKS5nZXQoMCkuZ2V0UmVsYXRpb24oKS5nZXQoMCkuZ2V0QXJ0aXN0
KCkuZ2V0SWQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkVjaG8gJiBUaGUgQnVubnlt
ZW4iLCB3b3JrLmdldFJlbGF0aW9uTGlzdCgpLmdldCgwKS5nZXRSZWxhdGlvbigpLmdldCgwKS5n
ZXRBcnRpc3QoKS5nZXROYW1lKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJjb21wb3Nl
ciIsIHdvcmsuZ2V0UmVsYXRpb25MaXN0KCkuZ2V0KDApLmdldFJlbGF0aW9uKCkuZ2V0KDApLmdl
dFR5cGUoKSk7CiAKICAgICAgICAgICAgIGlyLmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTIzOCwx
MyArMjM4LDEzIEBACiAgICAgICAgIGFzc2VydEVxdWFscygyLCBpci5udW1Eb2NzKCkpOwogICAg
ICAgICB7CiAgICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBpci5kb2N1bWVudCgxKTsKLSAgICAg
ICAgICAgIFJlbGF0aW9uTGlzdCByYyA9IChSZWxhdGlvbkxpc3QpIE1NRFNlcmlhbGl6ZXIKLSAg
ICAgICAgICAgICAgICAgICAgLnVuc2VyaWFsaXplKGRvYy5nZXQoV29ya0luZGV4RmllbGQuQVJU
SVNUX1JFTEFUSU9OLmdldE5hbWUoKSksIFJlbGF0aW9uTGlzdC5jbGFzcyk7Ci0gICAgICAgICAg
ICBhc3NlcnROb3ROdWxsKHJjKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiY2NkNDg3OWMt
NWU4OC00Mzg1LWIxMzEtYmY2NTI5NmJmMjQ1IixyYy5nZXRSZWxhdGlvbigpLmdldCgwKS5nZXRB
cnRpc3QoKS5nZXRJZCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiRWNobyAmIFRoZSBC
dW5ueW1lbiIscmMuZ2V0UmVsYXRpb24oKS5nZXQoMCkuZ2V0QXJ0aXN0KCkuZ2V0TmFtZSgpKTsK
LSAgICAgICAgICAgIGFzc2VydEVxdWFscygiY29tcG9zZXIiLHJjLmdldFJlbGF0aW9uKCkuZ2V0
KDApLmdldFR5cGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFkZGl0aW9uYWwiLHJj
LmdldFJlbGF0aW9uKCkuZ2V0KDApLmdldEF0dHJpYnV0ZUxpc3QoKS5nZXRBdHRyaWJ1dGUoKS5n
ZXQoMCkpOworICAgICAgICAgICAgV29yayB3b3JrID0gKFdvcmspIE1NRFNlcmlhbGl6ZXIKKyAg
ICAgICAgICAgICAgICAgICAgLnVuc2VyaWFsaXplKGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09S
S19TVE9SRS5nZXROYW1lKCkpLCBXb3JrLmNsYXNzKTsKKyAgICAgICAgICAgIGFzc2VydE5vdE51
bGwod29yayk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNjZDQ4NzljLTVlODgtNDM4NS1i
MTMxLWJmNjUyOTZiZjI0NSIsIHdvcmsuZ2V0UmVsYXRpb25MaXN0KCkuZ2V0KDApLmdldFJlbGF0
aW9uKCkuZ2V0KDApLmdldEFydGlzdCgpLmdldElkKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1
YWxzKCJFY2hvICYgVGhlIEJ1bm55bWVuIix3b3JrLmdldFJlbGF0aW9uTGlzdCgpLmdldCgwKS5n
ZXRSZWxhdGlvbigpLmdldCgwKS5nZXRBcnRpc3QoKS5nZXROYW1lKCkpOworICAgICAgICAgICAg
YXNzZXJ0RXF1YWxzKCJjb21wb3NlciIsd29yay5nZXRSZWxhdGlvbkxpc3QoKS5nZXQoMCkuZ2V0
UmVsYXRpb24oKS5nZXQoMCkuZ2V0VHlwZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygi
YWRkaXRpb25hbCIsd29yay5nZXRSZWxhdGlvbkxpc3QoKS5nZXQoMCkuZ2V0UmVsYXRpb24oKS5n
ZXQoMCkuZ2V0QXR0cmlidXRlTGlzdCgpLmdldEF0dHJpYnV0ZSgpLmdldCgwKSk7CiAgICAgICAg
ICAgICBpci5jbG9zZSgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzAwLDggKzMwMCwxMCBAQAog
ICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRvYy5nZXRGaWVsZHMoV29ya0luZGV4RmllbGQu
V09SSy5nZXROYW1lKCkpLmxlbmd0aCk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZG9j
LmdldEZpZWxkcyhXb3JrSW5kZXhGaWVsZC5UQUcuZ2V0TmFtZSgpKS5sZW5ndGgpOwogICAgICAg
ICAgICAgYXNzZXJ0RXF1YWxzKCJDbGFzc2ljYWwiLCBkb2MuZ2V0RmllbGQoV29ya0luZGV4Rmll
bGQuVEFHLmdldE5hbWUoKSkuc3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVh
bHMoMSwgZG9jLmdldEZpZWxkcyhXb3JrSW5kZXhGaWVsZC5UQUdDT1VOVC5nZXROYW1lKCkpLmxl
bmd0aCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIjEwIiwgZG9jLmdldEZpZWxkKFdvcmtJ
bmRleEZpZWxkLlRBR0NPVU5ULmdldE5hbWUoKSkuc3RyaW5nVmFsdWUoKSk7CisKKyAgICAgICAg
ICAgIFdvcmsgd29yayA9IChXb3JrKSBNTURTZXJpYWxpemVyLnVuc2VyaWFsaXplKGRvYy5nZXQo
V29ya0luZGV4RmllbGQuV09SS19TVE9SRS5nZXROYW1lKCkpLCBXb3JrLmNsYXNzKTsKKyAgICAg
ICAgICAgIGFzc2VydE5vdE51bGwod29yayk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAs
IHdvcmsuZ2V0VGFnTGlzdCgpLmdldFRhZygpLmdldCgwKS5nZXRDb3VudCgpLmludFZhbHVlKCkp
OwogICAgICAgICB9CiAgICAgICAgIGlyLmNsb3NlKCk7CiAgICAgfQoKTW9kaWZpZWQ6IHNlYXJj
aF9zZXJ2ZXIvdHJ1bmsvc2VydmxldC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFy
Y2gvc2VydmxldC9tbWQyL1dvcmtXcml0ZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZWFyY2hfc2Vy
dmVyL3RydW5rL3NlcnZsZXQvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL3Nl
cnZsZXQvbW1kMi9Xb3JrV3JpdGVyLmphdmEJMjAxMy0xMC0wMiAxMTo0MjoxNSBVVEMgKHJldiAx
MzcxNCkKKysrIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvc2VydmxldC9zcmMvbWFpbi9qYXZhL29yZy9t
dXNpY2JyYWluei9zZWFyY2gvc2VydmxldC9tbWQyL1dvcmtXcml0ZXIuamF2YQkyMDEzLTEwLTAy
IDEzOjAxOjU5IFVUQyAocmV2IDEzNzE1KQpAQCAtMzAsNiArMzAsNyBAQAogCiBpbXBvcnQgb3Jn
Lm11c2ljYnJhaW56Lm1tZDIuKjsKIGltcG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNoLk1iRG9j
dW1lbnQ7CitpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5pbmRleC5MYWJlbEluZGV4Rmll
bGQ7CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5pbmRleC5NTURTZXJpYWxpemVyOwog
aW1wb3J0IG9yZy5tdXNpY2JyYWluei5zZWFyY2guaW5kZXguUmVjb3JkaW5nSW5kZXhGaWVsZDsK
IGltcG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNoLmluZGV4LldvcmtJbmRleEZpZWxkOwpAQCAt
ODYsODkgKzg3LDExIEBACiAgICAgICogQHBhcmFtIHJlc3VsdAogICAgICAqIEB0aHJvd3MgSU9F
eGNlcHRpb24KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB3cml0ZShMaXN0IGxpc3QsIFJlc3Vs
dCByZXN1bHQpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLQotICAgICAgICBPYmplY3RGYWN0
b3J5IG9mID0gbmV3IE9iamVjdEZhY3RvcnkoKTsKLQorICAgIHB1YmxpYyB2b2lkIHdyaXRlKExp
c3QgbGlzdCwgUmVzdWx0IHJlc3VsdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgTWJE
b2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0gICAgICAgIFdvcmsgd29yayA9IG9mLmNy
ZWF0ZVdvcmsoKTsKLSAgICAgICAgd29yay5zZXRJZChkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldP
UktfSUQpKTsKKyAgICAgICAgV29yayB3b3JrID0gKFdvcmspIE1NRFNlcmlhbGl6ZXIudW5zZXJp
YWxpemUoZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLX1NUT1JFKSwgV29yay5jbGFzcyk7CiAg
ICAgICAgIHdvcmsuc2V0U2NvcmUoU3RyaW5nLnZhbHVlT2YocmVzdWx0LmdldE5vcm1hbGl6ZWRT
Y29yZSgpKSk7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUgPSBkb2MuZ2V0KFdvcmtJbmRleEZpZWxk
LldPUkspOwotICAgICAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB3b3JrLnNldFRpdGxlKG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGNvbW1l
bnQgPSBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLkNPTU1FTlQpOwotICAgICAgICBpZiAoaXNOb3RO
b1ZhbHVlKGNvbW1lbnQpKQotICAgICAgICB7Ci0gICAgICAgICAgICB3b3JrLnNldERpc2FtYmln
dWF0aW9uKGNvbW1lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHR5cGUgPSBkb2Mu
Z2V0KFdvcmtJbmRleEZpZWxkLlRZUEUpOwotICAgICAgICBpZiAoaXNOb3ROb1ZhbHVlKHR5cGUp
KQotICAgICAgICB7Ci0gICAgICAgICAgICB3b3JrLnNldFR5cGUodHlwZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBTdHJpbmcgbHlyaWNzTGFuZ3VhZ2UgPSBkb2MuZ2V0KFdvcmtJbmRleEZpZWxk
LkxZUklDU19MQU5HKTsKLSAgICAgICAgaWYgKGlzTm90Tm9WYWx1ZShseXJpY3NMYW5ndWFnZSkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHdvcmsuc2V0TGFuZ3VhZ2UobHlyaWNzTGFuZ3VhZ2Up
OwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nW10gaXN3Y3MgPSBkb2MuZ2V0VmFsdWVzKFdv
cmtJbmRleEZpZWxkLklTV0MpOwotICAgICAgICBpZiAoaXN3Y3MubGVuZ3RoID4gMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgSXN3Y0xpc3QgaXN3Y0xpc3QgPSBvZi5jcmVhdGVJc3djTGlzdCgp
OwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpc3djcy5sZW5ndGg7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNOb3ROb1ZhbHVlKGlzd2NzW2ldKSkg
ewotICAgICAgICAgICAgICAgICAgICBpc3djTGlzdC5nZXRJc3djKCkuYWRkKGlzd2NzW2ldKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZihpc3djTGlz
dC5nZXRJc3djKCkuc2l6ZSgpPjApIHsKLSAgICAgICAgICAgICAgICB3b3JrLnNldElzd2NMaXN0
KGlzd2NMaXN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBh
cnRpc3RSZWxhdGlvbiA9IGRvYy5nZXQoV29ya0luZGV4RmllbGQuQVJUSVNUX1JFTEFUSU9OKTsK
LSAgICAgICAgaWYgKGFydGlzdFJlbGF0aW9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIFJlbGF0aW9uTGlzdCByYyA9IChSZWxhdGlvbkxpc3QpIE1NRFNlcmlhbGl6ZXIudW5zZXJp
YWxpemUoYXJ0aXN0UmVsYXRpb24sIFJlbGF0aW9uTGlzdC5jbGFzcyk7Ci0gICAgICAgICAgICB3
b3JrLmdldFJlbGF0aW9uTGlzdCgpLmFkZChyYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJp
bmdbXSBhbGlhc2VzID0gZG9jLmdldFZhbHVlcyhXb3JrSW5kZXhGaWVsZC5BTElBUyk7Ci0gICAg
ICAgIGlmIChhbGlhc2VzLmxlbmd0aCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFsaWFz
TGlzdCBhbGlhc0xpc3QgPSBvZi5jcmVhdGVBbGlhc0xpc3QoKTsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgYWxpYXNlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBBbGlhcyBhbGlhcyA9IG9mLmNyZWF0ZUFsaWFzKCk7Ci0gICAgICAgICAgICAg
ICAgYWxpYXMuc2V0Q29udGVudChhbGlhc2VzW2ldKTsKLSAgICAgICAgICAgICAgICBhbGlhc0xp
c3QuZ2V0QWxpYXMoKS5hZGQoYWxpYXMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd29y
ay5zZXRBbGlhc0xpc3QoYWxpYXNMaXN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZ1td
IHRhZ3MgPSBkb2MuZ2V0VmFsdWVzKFdvcmtJbmRleEZpZWxkLlRBRyk7Ci0gICAgICAgIFN0cmlu
Z1tdIHRhZ0NvdW50cyA9IGRvYy5nZXRWYWx1ZXMoV29ya0luZGV4RmllbGQuVEFHQ09VTlQpOwot
ICAgICAgICBpZiAodGFncy5sZW5ndGggPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBUYWdM
aXN0IHRhZ0xpc3QgPSBvZi5jcmVhdGVUYWdMaXN0KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgVGFnIHRhZyA9IG9mLmNyZWF0ZVRhZygpOwotICAgICAgICAgICAgICAgIHRhZy5zZXROYW1l
KHRhZ3NbaV0pOwotICAgICAgICAgICAgICAgIHRhZy5zZXRDb3VudChuZXcgQmlnSW50ZWdlcih0
YWdDb3VudHNbaV0pKTsKLSAgICAgICAgICAgICAgICB0YWdMaXN0LmdldFRhZygpLmFkZCh0YWcp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd29yay5zZXRUYWdMaXN0KHRhZ0xpc3QpOwot
ICAgICAgICB9CiAgICAgICAgIGxpc3QuYWRkKHdvcmspOwogICAgIH0KKwogfQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKCk1vZGlmaWVkOiBzZWFyY2hfc2VydmVyL3RydW5rL3NlcnZsZXQv
c3JjL3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL3NlcnZsZXQvRmluZFdvcmtUZXN0
LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gc2VhcmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3NyYy90ZXN0
L2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9zZXJ2bGV0L0ZpbmRXb3JrVGVzdC5qYXZhCTIw
MTMtMTAtMDIgMTE6NDI6MTUgVVRDIChyZXYgMTM3MTQpCisrKyBzZWFyY2hfc2VydmVyL3RydW5r
L3NlcnZsZXQvc3JjL3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL3NlcnZsZXQvRmlu
ZFdvcmtUZXN0LmphdmEJMjAxMy0xMC0wMiAxMzowMTo1OSBVVEMgKHJldiAxMzcxNSkKQEAgLTUs
OCArNSwxMCBAQAogCiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLmlv
LlN0cmluZ1dyaXRlcjsKK2ltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKIGltcG9ydCBqYXZh
LnV0aWwuRGF0ZTsKIAoraW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmJhc2UuU3RyaW5nczsKIGlt
cG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5hbmFseXNpcy5BbmFseXplcjsKIGltcG9ydCBvcmcuYXBh
Y2hlLmx1Y2VuZS5pbmRleC5JbmRleFdyaXRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5p
bmRleC5JbmRleFdyaXRlckNvbmZpZzsKQEAgLTE0LDEyICsxNiw3IEBACiBpbXBvcnQgb3JnLmFw
YWNoZS5sdWNlbmUuc3RvcmUuUkFNRGlyZWN0b3J5OwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7
CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLm11c2ljYnJhaW56Lm1tZDIuQXJ0
aXN0OwotaW1wb3J0IG9yZy5tdXNpY2JyYWluei5tbWQyLkF0dHJpYnV0ZUxpc3Q7Ci1pbXBvcnQg
b3JnLm11c2ljYnJhaW56Lm1tZDIuRGVmRGlyZWN0aW9uOwotaW1wb3J0IG9yZy5tdXNpY2JyYWlu
ei5tbWQyLk9iamVjdEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLm11c2ljYnJhaW56Lm1tZDIuUmVsYXRp
b247Ci1pbXBvcnQgb3JnLm11c2ljYnJhaW56Lm1tZDIuUmVsYXRpb25MaXN0OworaW1wb3J0IG9y
Zy5tdXNpY2JyYWluei5tbWQyLio7CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5MdWNl
bmVWZXJzaW9uOwogaW1wb3J0IG9yZy5tdXNpY2JyYWluei5zZWFyY2guTWJEb2N1bWVudDsKIGlt
cG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNoLmluZGV4LkRhdGFiYXNlSW5kZXg7CkBAIC0zMywy
NDIgKzMwLDI5NiBAQAogICovCiBwdWJsaWMgY2xhc3MgRmluZFdvcmtUZXN0IHsKIAotICBwcml2
YXRlIEFic3RyYWN0U2VhcmNoU2VydmVyIHNzOwotICBwcml2YXRlIEFic3RyYWN0RGlzbWF4U2Vh
cmNoU2VydmVyIHNkOworICAgIHByaXZhdGUgQWJzdHJhY3RTZWFyY2hTZXJ2ZXIgc3M7CisgICAg
cHJpdmF0ZSBBYnN0cmFjdERpc21heFNlYXJjaFNlcnZlciBzZDsKIAotICBAQmVmb3JlCi0gIHB1
YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUkFNRGlyZWN0b3J5IHJh
bURpciA9IG5ldyBSQU1EaXJlY3RvcnkoKTsKLSAgICBPYmplY3RGYWN0b3J5IG9mID0gbmV3IE9i
amVjdEZhY3RvcnkoKTsKKyAgICBAQmVmb3JlCisgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJv
d3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUkFNRGlyZWN0b3J5IHJhbURpciA9IG5ldyBSQU1EaXJl
Y3RvcnkoKTsKKyAgICAgICAgT2JqZWN0RmFjdG9yeSBvZiA9IG5ldyBPYmplY3RGYWN0b3J5KCk7
CiAKLSAgICBBbmFseXplciBhbmFseXplciA9IERhdGFiYXNlSW5kZXguZ2V0QW5hbHl6ZXIoV29y
a0luZGV4RmllbGQuY2xhc3MpOwotICAgIEluZGV4V3JpdGVyQ29uZmlnICB3cml0ZXJDb25maWcg
PSBuZXcgSW5kZXhXcml0ZXJDb25maWcoTHVjZW5lVmVyc2lvbi5MVUNFTkVfVkVSU0lPTixhbmFs
eXplcik7Ci0gICAgSW5kZXhXcml0ZXIgd3JpdGVyID0gbmV3IEluZGV4V3JpdGVyKHJhbURpciwg
d3JpdGVyQ29uZmlnKTsKLSAgICB7Ci0gICAgICBNYkRvY3VtZW50IGRvYyA9IG5ldyBNYkRvY3Vt
ZW50KCk7Ci0gICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuV09SS19JRCwgIjRmZjg5
Y2YwLTg2YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZiIpOwotICAgICAgZG9jLmFkZEZpZWxkKFdv
cmtJbmRleEZpZWxkLldPUkssICJTeW1waG9ueSBOby4gNSIpOwotICAgICAgZG9jLmFkZEZpZWxk
KFdvcmtJbmRleEZpZWxkLklTV0MsICJULTEwMTc3OTMwNC0xIik7Ci0gICAgICBkb2MuYWRkRmll
bGQoV29ya0luZGV4RmllbGQuSVNXQywgIkItMTAxNzc5MzA0LTEiKTsKLSAgICAgIGRvYy5hZGRG
aWVsZChXb3JrSW5kZXhGaWVsZC5BUlRJU1RfSUQsICIxZjlkZjE5Mi1hNjIxLTRmNTQtODg1MC0y
YzUzNzNiN2VhYzkiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhGaWVsZC5BUlRJU1Qs
ICLQn9GR0YLRgCDQmNC70YzQuNGHINCn0LDQudC60L7QstGB0LrQuNC5Iik7Ci0gICAgICBkb2Mu
YWRkRmllbGQoV29ya0luZGV4RmllbGQuQ09NTUVOVCwgImRlbW8iKTsKLSAgICAgIGRvYy5hZGRG
aWVsZChXb3JrSW5kZXhGaWVsZC5MWVJJQ1NfTEFORywgImVuZyIpOwotICAgICAgZG9jLmFkZEZp
ZWxkKFdvcmtJbmRleEZpZWxkLlRZUEUsICJPcGVyYSIpOwotICAgICAgZG9jLmFkZEZpZWxkKFdv
cmtJbmRleEZpZWxkLkFMSUFTLCAiU3ltcDUiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5k
ZXhGaWVsZC5UQUcsICJjbGFzc2ljYWwiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhG
aWVsZC5UQUdDT1VOVCwgIjEwIik7CisgICAgICAgIEFuYWx5emVyIGFuYWx5emVyID0gRGF0YWJh
c2VJbmRleC5nZXRBbmFseXplcihXb3JrSW5kZXhGaWVsZC5jbGFzcyk7CisgICAgICAgIEluZGV4
V3JpdGVyQ29uZmlnIHdyaXRlckNvbmZpZyA9IG5ldyBJbmRleFdyaXRlckNvbmZpZyhMdWNlbmVW
ZXJzaW9uLkxVQ0VORV9WRVJTSU9OLCBhbmFseXplcik7CisgICAgICAgIEluZGV4V3JpdGVyIHdy
aXRlciA9IG5ldyBJbmRleFdyaXRlcihyYW1EaXIsIHdyaXRlckNvbmZpZyk7CisgICAgICAgIHsK
KyAgICAgICAgICAgIE1iRG9jdW1lbnQgZG9jID0gbmV3IE1iRG9jdW1lbnQoKTsKIAorICAgICAg
ICAgICAgV29yayB3b3JrID0gb2YuY3JlYXRlV29yaygpOworICAgICAgICAgICAgZG9jLmFkZEZp
ZWxkKFdvcmtJbmRleEZpZWxkLldPUktfSUQsICI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFm
YzZmMTc2ZmYiKTsKKyAgICAgICAgICAgIHdvcmsuc2V0SWQoIjRmZjg5Y2YwLTg2YWYtMTFkZS05
MGVkLTAwMWZjNmYxNzZmZiIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZp
ZWxkLldPUkssICJTeW1waG9ueSBOby4gNSIpOworICAgICAgICAgICAgd29yay5zZXRUaXRsZSgi
U3ltcGhvbnkgTm8uIDUiKTsKIAotICAgICAgUmVsYXRpb25MaXN0IHJsID0gb2YuY3JlYXRlUmVs
YXRpb25MaXN0KCk7Ci0gICAgICBybC5zZXRUYXJnZXRUeXBlKCJhcnRpc3QiKTsKLSAgICAgIHsK
LSAgICAgICAgUmVsYXRpb24gcmVsYXRpb24gPSBvZi5jcmVhdGVSZWxhdGlvbigpOwotICAgICAg
ICBBdHRyaWJ1dGVMaXN0IGFsICA9IG9mLmNyZWF0ZUF0dHJpYnV0ZUxpc3QoKTsKLSAgICAgICAg
QXJ0aXN0IGFydGlzdCA9IG9mLmNyZWF0ZUFydGlzdCgpOwotICAgICAgICBhcnRpc3Quc2V0SWQo
IjFmOWRmMTkyLWE2MjEtNGY1NC04ODUwLTJjNTM3M2I3ZWFjOSIpOwotICAgICAgICBhcnRpc3Qu
c2V0TmFtZSgi0J/RkdGC0YAg0JjQu9GM0LjRhyDQp9Cw0LnQutC+0LLRgdC60LjQuSIpOwotICAg
ICAgICBhcnRpc3Quc2V0U29ydE5hbWUoItCf0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC50LrQvtCy
0YHQutC40LkiKTsKLSAgICAgICAgcmVsYXRpb24uc2V0QXJ0aXN0KGFydGlzdCk7Ci0gICAgICAg
IHJlbGF0aW9uLnNldFR5cGUoImNvbXBvc2VyIik7Ci0gICAgICAgIHJlbGF0aW9uLnNldERpcmVj
dGlvbihEZWZEaXJlY3Rpb24uQkFDS1dBUkQpOwotICAgICAgICBhbC5nZXRBdHRyaWJ1dGUoKS5h
ZGQoImFkZGl0aW9uYWwiKTsKLSAgICAgICAgcmVsYXRpb24uc2V0QXR0cmlidXRlTGlzdChhbCk7
Ci0gICAgICAgIHJsLmdldFJlbGF0aW9uKCkuYWRkKHJlbGF0aW9uKTsKLSAgICAgIH0KLSAgICAg
IHsKLSAgICAgICAgUmVsYXRpb24gcmVsYXRpb24gPSBvZi5jcmVhdGVSZWxhdGlvbigpOwotICAg
ICAgICBBdHRyaWJ1dGVMaXN0IGFsICA9IG9mLmNyZWF0ZUF0dHJpYnV0ZUxpc3QoKTsKLSAgICAg
ICAgQXJ0aXN0IGFydGlzdCA9IG9mLmNyZWF0ZUFydGlzdCgpOwotICAgICAgICBhcnRpc3Quc2V0
SWQoImFiY2RlZmdoLWE2MjEtNGY1NC04ODUwLTJjNTM3M2I3ZWFjOSIpOwotICAgICAgICBhcnRp
c3Quc2V0TmFtZSgiZnJhbmsiKTsKLSAgICAgICAgYXJ0aXN0LnNldFNvcnROYW1lKCJ0dXJuZXIi
KTsKLSAgICAgICAgcmVsYXRpb24uc2V0QXJ0aXN0KGFydGlzdCk7Ci0gICAgICAgIHJlbGF0aW9u
LnNldFR5cGUoIndyaXRlciIpOwotICAgICAgICByZWxhdGlvbi5zZXREaXJlY3Rpb24oRGVmRGly
ZWN0aW9uLkJBQ0tXQVJEKTsKLSAgICAgICAgcmwuZ2V0UmVsYXRpb24oKS5hZGQocmVsYXRpb24p
OwotICAgICAgfQotICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLkFSVElTVF9SRUxB
VElPTiwgTU1EU2VyaWFsaXplci5zZXJpYWxpemUocmwpKTsKLSAgICAgIHdyaXRlci5hZGREb2N1
bWVudChkb2MuZ2V0THVjZW5lRG9jdW1lbnQoKSk7Ci0gICAgfQorICAgICAgICAgICAgSXN3Y0xp
c3QgaXN3Y0xpc3QgPSBvZi5jcmVhdGVJc3djTGlzdCgpOworICAgICAgICAgICAgaXN3Y0xpc3Qu
Z2V0SXN3YygpLmFkZCgiVC0xMDE3NzkzMDQtMSIpOworICAgICAgICAgICAgaXN3Y0xpc3QuZ2V0
SXN3YygpLmFkZCgiQi0xMDE3NzkzMDQtMSIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdv
cmtJbmRleEZpZWxkLklTV0MsICJULTEwMTc3OTMwNC0xIik7CisgICAgICAgICAgICBkb2MuYWRk
RmllbGQoV29ya0luZGV4RmllbGQuSVNXQywgIkItMTAxNzc5MzA0LTEiKTsKKyAgICAgICAgICAg
IHdvcmsuc2V0SXN3Y0xpc3QoaXN3Y0xpc3QpOwogCi0gICAgICB7Ci0gICAgICAgICAgTWJEb2N1
bWVudCBkb2MgPSBuZXcgTWJEb2N1bWVudCgpOwotICAgICAgICAgIGRvYy5hZGRGaWVsZChXb3Jr
SW5kZXhGaWVsZC5XT1JLX0lELCAiYmJhMWRhMTYtNmEwZC0zMjk5LWFhY2YtMDQyZjhlMTNiMGI3
Iik7Ci0gICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLldPUkssICJEZWJhc2Vy
Iik7Ci0gICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLkFSVElTVF9JRCwgIjc4
OWY2NzY4LTU4MzAtNGIwOC04YjRmLWYzODU2NmIyZWIxZCIpOwotICAgICAgICAgIGRvYy5hZGRG
aWVsZChXb3JrSW5kZXhGaWVsZC5BUlRJU1QsICJCYWNrIEZyYW5jaXMiKTsKLSAgICAgICAgICBk
b2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuTFlSSUNTX0xBTkcsICJlc3AiKTsKLSAgICAgICAg
ICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuVFlQRSwgIlNvbmciKTsKLSAgICAgICAgICBk
b2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuQUxJQVMsICJEZWJhc2VyIChDbGlmIE5vcnJlbGwg
bWl4KSIpOwotICAgICAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhGaWVsZC5JU1dDLCAiLSIp
OworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLkFSVElTVF9JRCwgIjFm
OWRmMTkyLWE2MjEtNGY1NC04ODUwLTJjNTM3M2I3ZWFjOSIpOworICAgICAgICAgICAgZG9jLmFk
ZEZpZWxkKFdvcmtJbmRleEZpZWxkLkFSVElTVCwgItCf0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC5
0LrQvtCy0YHQutC40LkiKTsKIAorICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZp
ZWxkLkNPTU1FTlQsICJkZW1vIik7CisgICAgICAgICAgICB3b3JrLnNldERpc2FtYmlndWF0aW9u
KCJkZW1vIik7CiAKLSAgICAgICAgICBSZWxhdGlvbkxpc3QgcmwgPSBvZi5jcmVhdGVSZWxhdGlv
bkxpc3QoKTsKLSAgICAgICAgICBybC5zZXRUYXJnZXRUeXBlKCJhcnRpc3QiKTsKLSAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIFJlbGF0aW9uIHJlbGF0aW9uID0gb2YuY3JlYXRlUmVsYXRpb24o
KTsKLSAgICAgICAgICAgICAgQXR0cmlidXRlTGlzdCBhbCAgPSBvZi5jcmVhdGVBdHRyaWJ1dGVM
aXN0KCk7Ci0gICAgICAgICAgICAgIEFydGlzdCBhcnRpc3QgPSBvZi5jcmVhdGVBcnRpc3QoKTsK
LSAgICAgICAgICAgICAgYXJ0aXN0LnNldElkKCI3ODlmNjc2OC01ODMwLTRiMDgtOGI0Zi1mMzg1
NjZiMmViMWQiKTsKLSAgICAgICAgICAgICAgYXJ0aXN0LnNldE5hbWUoIkJsYWNrIEZyYW5jaXMi
KTsKLSAgICAgICAgICAgICAgYXJ0aXN0LnNldFNvcnROYW1lKCJGcmFuY2lzLCBCbGFjayIpOwot
ICAgICAgICAgICAgICByZWxhdGlvbi5zZXRBcnRpc3QoYXJ0aXN0KTsKLSAgICAgICAgICAgICAg
cmVsYXRpb24uc2V0VHlwZSgiY29tcG9zZXIiKTsKLSAgICAgICAgICAgICAgcmVsYXRpb24uc2V0
RGlyZWN0aW9uKERlZkRpcmVjdGlvbi5CQUNLV0FSRCk7Ci0gICAgICAgICAgICAgIGFsLmdldEF0
dHJpYnV0ZSgpLmFkZCgiYWRkaXRpb25hbCIpOwotICAgICAgICAgICAgICByZWxhdGlvbi5zZXRB
dHRyaWJ1dGVMaXN0KGFsKTsKLSAgICAgICAgICAgICAgcmwuZ2V0UmVsYXRpb24oKS5hZGQocmVs
YXRpb24pOwotICAgICAgICAgIH0KLSAgICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4Rmll
bGQuQVJUSVNUX1JFTEFUSU9OLCBNTURTZXJpYWxpemVyLnNlcmlhbGl6ZShybCkpOwotICAgICAg
ICAgIHdyaXRlci5hZGREb2N1bWVudChkb2MuZ2V0THVjZW5lRG9jdW1lbnQoKSk7Ci0gICAgICB9
CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuTFlSSUNTX0xBTkcsICJl
bmciKTsKKyAgICAgICAgICAgIHdvcmsuc2V0TGFuZ3VhZ2UoImVuZyIpOwogCi0gICAgewotICAg
ICAgTWJEb2N1bWVudCBkb2MgPSBuZXcgTWJEb2N1bWVudCgpOwotICAgICAgZG9jLmFkZEZpZWxk
KE1ldGFJbmRleEZpZWxkLk1FVEEsIE1ldGFJbmRleEZpZWxkLk1FVEFfVkFMVUUpOwotICAgICAg
ZG9jLmFkZE51bWVyaWNGaWVsZChNZXRhSW5kZXhGaWVsZC5MQVNUX1VQREFURUQsIG5ldyBEYXRl
KCkuZ2V0VGltZSgpKTsKLSAgICAgIHdyaXRlci5hZGREb2N1bWVudChkb2MuZ2V0THVjZW5lRG9j
dW1lbnQoKSk7Ci0gICAgfQorICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxk
LlRZUEUsICJPcGVyYSIpOworICAgICAgICAgICAgd29yay5zZXRUeXBlKCJPcGVyYSIpOwogCi0g
ICAgd3JpdGVyLmNsb3NlKCk7Ci0gICAgU2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVyTWFuYWdlciA9
IG5ldyBTZWFyY2hlck1hbmFnZXIocmFtRGlyLCBuZXcgTXVzaWNCcmFpbnpTZWFyY2hlckZhY3Rv
cnkoUmVzb3VyY2VUeXBlLldPUkspKTsKLSAgICBzcyA9IG5ldyBXb3JrU2VhcmNoKHNlYXJjaGVy
TWFuYWdlcik7Ci0gICAgc2QgPSBuZXcgV29ya0Rpc21heFNlYXJjaChzcyk7Ci0gIH0KKyAgICAg
ICAgICAgIEFsaWFzTGlzdCBhbGlhc0xpc3QgPSBvZi5jcmVhdGVBbGlhc0xpc3QoKTsKKyAgICAg
ICAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhGaWVsZC5BTElBUywgIlN5bXA1Iik7CisgICAg
ICAgICAgICBBbGlhcyBhbGlhcyA9IG9mLmNyZWF0ZUFsaWFzKCk7CisgICAgICAgICAgICBhbGlh
cy5zZXRDb250ZW50KCJTeW1wNSIpOworICAgICAgICAgICAgYWxpYXNMaXN0LmdldEFsaWFzKCku
YWRkKGFsaWFzKTsKKyAgICAgICAgICAgIHdvcmsuc2V0QWxpYXNMaXN0KGFsaWFzTGlzdCk7CiAK
LSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEZpbmRXb3JrQnlJZCgpIHRocm93cyBFeGNlcHRp
b24gewotICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJ3aWQ6XCI0ZmY4OWNmMC04NmFmLTEx
ZGUtOTBlZC0wMDFmYzZmMTc2ZmZcIiIsIDAsIDEwKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVz
LmdldFRvdGFsSGl0cygpKTsKLSAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDAp
OwotICAgIE1iRG9jdW1lbnQgZG9jID0gcmVzdWx0LmdldERvYygpOwotICAgIGFzc2VydEVxdWFs
cygiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5k
ZXhGaWVsZC5XT1JLX0lEKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRv
Yy5nZXQoV29ya0luZGV4RmllbGQuV09SSykpOwotICB9CisgICAgICAgICAgICBkb2MuYWRkRmll
bGQoV29ya0luZGV4RmllbGQuVEFHLCAiY2xhc3NpY2FsIik7CisgICAgICAgICAgICBUYWdMaXN0
IHRhZ0xpc3QgPSBvZi5jcmVhdGVUYWdMaXN0KCk7CisgICAgICAgICAgICBUYWcgdGFnID0gb2Yu
Y3JlYXRlVGFnKCk7CisgICAgICAgICAgICB0YWcuc2V0TmFtZSgiY2xhc3NpY2FsIik7CisgICAg
ICAgICAgICB0YWcuc2V0Q291bnQoQmlnSW50ZWdlci52YWx1ZU9mKDEwKSk7CisgICAgICAgICAg
ICB0YWdMaXN0LmdldFRhZygpLmFkZCh0YWcpOworICAgICAgICAgICAgd29yay5zZXRUYWdMaXN0
KHRhZ0xpc3QpOwogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5TmFtZSgp
IHRocm93cyBFeGNlcHRpb24gewotICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJ3b3JrOlwi
U3ltcGhvbnkgTm8uIDVcIiIsIDAsIDEwKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRv
dGFsSGl0cygpKTsKLSAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOwotICAg
IE1iRG9jdW1lbnQgZG9jID0gcmVzdWx0LmdldERvYygpOwotICAgIGFzc2VydEVxdWFscygiNGZm
ODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5kZXhGaWVs
ZC5XT1JLX0lEKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRvYy5nZXQo
V29ya0luZGV4RmllbGQuV09SSykpOwotICB9CiAKLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dEZpbmRXb3JrQnlMeXJpY3NMYW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUmVzdWx0cyBy
ZXMgPSBzcy5zZWFyY2goImxhbmc6ZW5nIiwgMCwgMTApOwotICAgIGFzc2VydEVxdWFscygxLCBy
ZXMuZ2V0VG90YWxIaXRzKCkpOwotICAgIFJlc3VsdCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQo
MCk7Ci0gICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJ
bmRleEZpZWxkLldPUktfSUQpKTsKLSAgICBhc3NlcnRFcXVhbHMoIlN5bXBob255IE5vLiA1Iiwg
ZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLKSk7Ci0gIH0KKyAgICAgICAgICAgIFJlbGF0aW9u
TGlzdCBybCA9IG9mLmNyZWF0ZVJlbGF0aW9uTGlzdCgpOworICAgICAgICAgICAgcmwuc2V0VGFy
Z2V0VHlwZSgiYXJ0aXN0Iik7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUmVsYXRp
b24gcmVsYXRpb24gPSBvZi5jcmVhdGVSZWxhdGlvbigpOworICAgICAgICAgICAgICAgIEF0dHJp
YnV0ZUxpc3QgYWwgPSBvZi5jcmVhdGVBdHRyaWJ1dGVMaXN0KCk7CisgICAgICAgICAgICAgICAg
QXJ0aXN0IGFydGlzdDEgPSBvZi5jcmVhdGVBcnRpc3QoKTsKKyAgICAgICAgICAgICAgICBhcnRp
c3QxLnNldElkKCIxZjlkZjE5Mi1hNjIxLTRmNTQtODg1MC0yYzUzNzNiN2VhYzkiKTsKKyAgICAg
ICAgICAgICAgICBhcnRpc3QxLnNldE5hbWUoItCf0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC50LrQ
vtCy0YHQutC40LkiKTsKKyAgICAgICAgICAgICAgICBhcnRpc3QxLnNldFNvcnROYW1lKCLQn9GR
0YLRgCDQmNC70YzQuNGHINCn0LDQudC60L7QstGB0LrQuNC5Iik7CisgICAgICAgICAgICAgICAg
cmVsYXRpb24uc2V0QXJ0aXN0KGFydGlzdDEpOworICAgICAgICAgICAgICAgIHJlbGF0aW9uLnNl
dFR5cGUoImNvbXBvc2VyIik7CisgICAgICAgICAgICAgICAgcmVsYXRpb24uc2V0RGlyZWN0aW9u
KERlZkRpcmVjdGlvbi5CQUNLV0FSRCk7CisgICAgICAgICAgICAgICAgYWwuZ2V0QXR0cmlidXRl
KCkuYWRkKCJhZGRpdGlvbmFsIik7CisgICAgICAgICAgICAgICAgcmVsYXRpb24uc2V0QXR0cmli
dXRlTGlzdChhbCk7CisgICAgICAgICAgICAgICAgcmwuZ2V0UmVsYXRpb24oKS5hZGQocmVsYXRp
b24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJlbGF0
aW9uIHJlbGF0aW9uID0gb2YuY3JlYXRlUmVsYXRpb24oKTsKKyAgICAgICAgICAgICAgICBBdHRy
aWJ1dGVMaXN0IGFsID0gb2YuY3JlYXRlQXR0cmlidXRlTGlzdCgpOworICAgICAgICAgICAgICAg
IEFydGlzdCBhcnRpc3QxID0gb2YuY3JlYXRlQXJ0aXN0KCk7CisgICAgICAgICAgICAgICAgYXJ0
aXN0MS5zZXRJZCgiYWJjZGVmZ2gtYTYyMS00ZjU0LTg4NTAtMmM1MzczYjdlYWM5Iik7CisgICAg
ICAgICAgICAgICAgYXJ0aXN0MS5zZXROYW1lKCJmcmFuayIpOworICAgICAgICAgICAgICAgIGFy
dGlzdDEuc2V0U29ydE5hbWUoInR1cm5lciIpOworICAgICAgICAgICAgICAgIHJlbGF0aW9uLnNl
dEFydGlzdChhcnRpc3QxKTsKKyAgICAgICAgICAgICAgICByZWxhdGlvbi5zZXRUeXBlKCJ3cml0
ZXIiKTsKKyAgICAgICAgICAgICAgICByZWxhdGlvbi5zZXREaXJlY3Rpb24oRGVmRGlyZWN0aW9u
LkJBQ0tXQVJEKTsKKyAgICAgICAgICAgICAgICBybC5nZXRSZWxhdGlvbigpLmFkZChyZWxhdGlv
bik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JrLmdldFJlbGF0aW9uTGlzdCgpLmFk
ZChybCk7CisgICAgICAgICAgICBTdHJpbmcgc3RvcmUgPSBNTURTZXJpYWxpemVyLnNlcmlhbGl6
ZSh3b3JrKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhGaWVsZC5XT1JLX1NU
T1JFLCBzdG9yZSk7CisgICAgICAgICAgICB3cml0ZXIuYWRkRG9jdW1lbnQoZG9jLmdldEx1Y2Vu
ZURvY3VtZW50KCkpOworICAgICAgICB9CiAKLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEZp
bmRXb3JrQnlEaXNtYXgxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUmVzdWx0cyByZXMgPSBz
ZC5zZWFyY2goIlN5bXBob255IE5vLiA1IiwgMCwgMTApOwotICAgIGFzc2VydEVxdWFscygxLCBy
ZXMuZ2V0VG90YWxIaXRzKCkpOwotICAgIFJlc3VsdCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQo
MCk7Ci0gICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJ
bmRleEZpZWxkLldPUktfSUQpKTsKLSAgICBhc3NlcnRFcXVhbHMoIlN5bXBob255IE5vLiA1Iiwg
ZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLKSk7Ci0gIH0KKyAgICAgICAgeworICAgICAgICAg
ICAgV29yayB3b3JrID0gb2YuY3JlYXRlV29yaygpOworICAgICAgICAgICAgTWJEb2N1bWVudCBk
b2MgPSBuZXcgTWJEb2N1bWVudCgpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRl
eEZpZWxkLldPUktfSUQsICJiYmExZGExNi02YTBkLTMyOTktYWFjZi0wNDJmOGUxM2IwYjciKTsK
KyAgICAgICAgICAgIHdvcmsuc2V0SWQoImJiYTFkYTE2LTZhMGQtMzI5OS1hYWNmLTA0MmY4ZTEz
YjBiNyIpOwogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5RGlzbWF4Migp
IHRocm93cyBFeGNlcHRpb24gewotICAgIFJlc3VsdHMgcmVzID0gc2Quc2VhcmNoKCJTeW1waG9u
eSIsIDAsIDEwKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsKLSAg
ICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOwotICAgIE1iRG9jdW1lbnQgZG9j
ID0gcmVzdWx0LmdldERvYygpOwotICAgIGFzc2VydEVxdWFscygiNGZmODljZjAtODZhZi0xMWRl
LTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLX0lEKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQu
V09SSykpOwotICB9CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuV09S
SywgIkRlYmFzZXIiKTsKKyAgICAgICAgICAgIHdvcmsuc2V0VGl0bGUoIkRlYmFzZXIiKTsKIAot
ICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RmluZFdvcmtCeUNvbW1lbnQoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiY29tbWVudDpkZW1vIiwgMCwg
MTApOwotICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOwotICAgIFJlc3Vs
dCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQoMCk7Ci0gICAgTWJEb2N1bWVudCBkb2MgPSByZXN1
bHQuZ2V0RG9jKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0w
MDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUktfSUQpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoImRlbW8iLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLkNPTU1FTlQpKTsKLSAgfQor
ICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLkxZUklDU19MQU5HLCAiZXNw
Iik7CisgICAgICAgICAgICB3b3JrLnNldExhbmd1YWdlKCJlc3AiKTsKIAotICBAVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0RmluZFdvcmtCeUFydGlzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAg
IFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJhcnRpc3Q6XCLQn9GR0YLRgCDQmNC70YzQuNGHINCn
0LDQudC60L7QstGB0LrQuNC5XCIiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5n
ZXRUb3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsK
LSAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMo
IjRmZjg5Y2YwLTg2YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZiIsIGRvYy5nZXQoV29ya0luZGV4
RmllbGQuV09SS19JRCkpOwotICAgIGFzc2VydEVxdWFscygiU3ltcGhvbnkgTm8uIDUiLCBkb2Mu
Z2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsKLSAgfQorICAgICAgICAgICAgZG9jLmFkZEZpZWxk
KFdvcmtJbmRleEZpZWxkLlRZUEUsICJTb25nIik7CisgICAgICAgICAgICB3b3JrLnNldFR5cGUo
IlNvbmciKTsKIAorICAgICAgICAgICAgQWxpYXNMaXN0IGFsaWFzTGlzdCA9IG9mLmNyZWF0ZUFs
aWFzTGlzdCgpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLkFMSUFT
LCAiRGViYXNlciAoQ2xpZiBOb3JyZWxsIG1peCkiKTsKKyAgICAgICAgICAgIEFsaWFzIGFsaWFz
ID0gb2YuY3JlYXRlQWxpYXMoKTsKKyAgICAgICAgICAgIGFsaWFzLnNldENvbnRlbnQoIkRlYmFz
ZXIgKENsaWYgTm9ycmVsbCBtaXgpIik7CisgICAgICAgICAgICBhbGlhc0xpc3QuZ2V0QWxpYXMo
KS5hZGQoYWxpYXMpOworICAgICAgICAgICAgd29yay5zZXRBbGlhc0xpc3QoYWxpYXNMaXN0KTsK
IAotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RmluZFdvcmtCeUlTV0MoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiaXN3YzpcIlQtMTAxNzc5MzA0
LTFcIiIsIDAsIDEwKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsK
LSAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOwotICAgIE1iRG9jdW1lbnQg
ZG9jID0gcmVzdWx0LmdldERvYygpOwotICAgIGFzc2VydEVxdWFscygiNGZmODljZjAtODZhZi0x
MWRlLTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLX0lEKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4Rmll
bGQuV09SSykpOwotICB9CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQu
SVNXQywgIi0iKTsKIAotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RmluZFdvcmtCeVR5cGUo
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgidHlwZTpc
Im9wZXJhXCIiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMo
KSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICBNYkRvY3Vt
ZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjRmZjg5Y2YwLTg2
YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZiIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09SS19J
RCkpOwotICAgIGFzc2VydEVxdWFscygiU3ltcGhvbnkgTm8uIDUiLCBkb2MuZ2V0KFdvcmtJbmRl
eEZpZWxkLldPUkspKTsKLSAgfQogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29y
a0J5QWxpYXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJj
aCgiYWxpYXM6c3ltcDUiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3Rh
bEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICBN
YkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjRmZjg5
Y2YwLTg2YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZiIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQu
V09SS19JRCkpOwotICAgIGFzc2VydEVxdWFscygiU3ltcGhvbnkgTm8uIDUiLCBkb2MuZ2V0KFdv
cmtJbmRleEZpZWxkLldPUkspKTsKLSAgfQorICAgICAgICAgICAgUmVsYXRpb25MaXN0IHJsID0g
b2YuY3JlYXRlUmVsYXRpb25MaXN0KCk7CisgICAgICAgICAgICBybC5zZXRUYXJnZXRUeXBlKCJh
cnRpc3QiKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSZWxhdGlvbiByZWxhdGlv
biA9IG9mLmNyZWF0ZVJlbGF0aW9uKCk7CisgICAgICAgICAgICAgICAgQXR0cmlidXRlTGlzdCBh
bCA9IG9mLmNyZWF0ZUF0dHJpYnV0ZUxpc3QoKTsKKyAgICAgICAgICAgICAgICBBcnRpc3QgYXJ0
aXN0ID0gb2YuY3JlYXRlQXJ0aXN0KCk7CisgICAgICAgICAgICAgICAgYXJ0aXN0LnNldElkKCI3
ODlmNjc2OC01ODMwLTRiMDgtOGI0Zi1mMzg1NjZiMmViMWQiKTsKKyAgICAgICAgICAgICAgICBh
cnRpc3Quc2V0TmFtZSgiQmxhY2sgRnJhbmNpcyIpOworICAgICAgICAgICAgICAgIGFydGlzdC5z
ZXRTb3J0TmFtZSgiRnJhbmNpcywgQmxhY2siKTsKKyAgICAgICAgICAgICAgICBkb2MuYWRkRmll
bGQoV29ya0luZGV4RmllbGQuQVJUSVNUX0lELCAiNzg5ZjY3NjgtNTgzMC00YjA4LThiNGYtZjM4
NTY2YjJlYjFkIik7CisgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxk
LkFSVElTVCwgIkJhY2sgRnJhbmNpcyIpOworICAgICAgICAgICAgICAgIHJlbGF0aW9uLnNldEFy
dGlzdChhcnRpc3QpOworICAgICAgICAgICAgICAgIHJlbGF0aW9uLnNldFR5cGUoImNvbXBvc2Vy
Iik7CisgICAgICAgICAgICAgICAgcmVsYXRpb24uc2V0RGlyZWN0aW9uKERlZkRpcmVjdGlvbi5C
QUNLV0FSRCk7CisgICAgICAgICAgICAgICAgYWwuZ2V0QXR0cmlidXRlKCkuYWRkKCJhZGRpdGlv
bmFsIik7CisgICAgICAgICAgICAgICAgcmVsYXRpb24uc2V0QXR0cmlidXRlTGlzdChhbCk7Cisg
ICAgICAgICAgICAgICAgcmwuZ2V0UmVsYXRpb24oKS5hZGQocmVsYXRpb24pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgd29yay5nZXRSZWxhdGlvbkxpc3QoKS5hZGQocmwpOworICAgICAg
ICAgICAgU3RyaW5nIHN0b3JlID0gTU1EU2VyaWFsaXplci5zZXJpYWxpemUod29yayk7CisgICAg
ICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuV09SS19TVE9SRSwgc3RvcmUpOwog
Ci0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5VGFnKCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goInRhZzpjbGFzc2ljYWwiLCAwLCAx
MCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0
IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3Vs
dC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjRmZjg5Y2YwLTg2YWYtMTFkZS05MGVkLTAw
MWZjNmYxNzZmZiIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09SS19JRCkpOwotICAgIGFzc2Vy
dEVxdWFscygiU3ltcGhvbnkgTm8uIDUiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsK
LSAgfQorICAgICAgICAgICAgd3JpdGVyLmFkZERvY3VtZW50KGRvYy5nZXRMdWNlbmVEb2N1bWVu
dCgpKTsKKyAgICAgICAgfQogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5
RGVmYXVsdFVzaW5nTmFtZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFJlc3VsdHMgcmVzID0g
c3Muc2VhcmNoKCJcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRz
LmdldCgwKTsKLSAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3Nl
cnRFcXVhbHMoIjRmZjg5Y2YwLTg2YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZiIsIGRvYy5nZXQo
V29ya0luZGV4RmllbGQuV09SS19JRCkpOwotICAgIGFzc2VydEVxdWFscygiU3ltcGhvbnkgTm8u
IDUiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsKLSAgfQorICAgICAgICB7CisgICAg
ICAgICAgICBNYkRvY3VtZW50IGRvYyA9IG5ldyBNYkRvY3VtZW50KCk7CisgICAgICAgICAgICBk
b2MuYWRkRmllbGQoTWV0YUluZGV4RmllbGQuTUVUQSwgTWV0YUluZGV4RmllbGQuTUVUQV9WQUxV
RSk7CisgICAgICAgICAgICBkb2MuYWRkTnVtZXJpY0ZpZWxkKE1ldGFJbmRleEZpZWxkLkxBU1Rf
VVBEQVRFRCwgbmV3IERhdGUoKS5nZXRUaW1lKCkpOworICAgICAgICAgICAgd3JpdGVyLmFkZERv
Y3VtZW50KGRvYy5nZXRMdWNlbmVEb2N1bWVudCgpKTsKKyAgICAgICAgfQogCi0gIEBUZXN0Ci0g
IHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5RGVmYXVsdFVzaW5nQWxpYXMoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgic3ltcDUiLCAwLCAxMCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3Vs
dCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXRE
b2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjRmZjg5Y2YwLTg2YWYtMTFkZS05MGVkLTAwMWZjNmYx
NzZmZiIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09SS19JRCkpOwotICAgIGFzc2VydEVxdWFs
cygiU3ltcGhvbnkgTm8uIDUiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsKLSAgfQor
ICAgICAgICB3cml0ZXIuY2xvc2UoKTsKKyAgICAgICAgU2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVy
TWFuYWdlciA9IG5ldyBTZWFyY2hlck1hbmFnZXIocmFtRGlyLCBuZXcgTXVzaWNCcmFpbnpTZWFy
Y2hlckZhY3RvcnkoUmVzb3VyY2VUeXBlLldPUkspKTsKKyAgICAgICAgc3MgPSBuZXcKIAorICAg
ICAgICAgICAgICAgIFdvcmtTZWFyY2goc2VhcmNoZXJNYW5hZ2VyKTsKKworICAgICAgICBzZCA9
IG5ldworCisgICAgICAgICAgICAgICAgV29ya0Rpc21heFNlYXJjaChzcyk7CisKKyAgICB9CisK
ICAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5SWQoKSB0aHJvd3MgRXhj
ZXB0aW9uIHsKKyAgICAgICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goIndpZDpcIjRmZjg5Y2Yw
LTg2YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZlwiIiwgMCwgMTApOworICAgICAgICBhc3NlcnRF
cXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsKKyAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHJl
cy5yZXN1bHRzLmdldCgwKTsKKyAgICAgICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9j
KCk7CisgICAgICAgIGFzc2VydEVxdWFscygiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2
ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLX0lEKSk7CisgICAgICAgIGFzc2Vy
dEVxdWFscygiU3ltcGhvbnkgTm8uIDUiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsK
KyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5TmFtZSgp
IHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgid29y
azpcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBy
ZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMu
Z2V0KDApOworICAgICAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKKyAgICAg
ICAgYXNzZXJ0RXF1YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBk
b2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUktfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJT
eW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09SSykpOworICAgIH0KKwor
ICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRXb3JrQnlMeXJpY3NMYW5nKCkgdGhy
b3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJsYW5nOmVu
ZyIsIDAsIDEwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7
CisgICAgICAgIFJlc3VsdCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQoMCk7CisgICAgICAgIE1i
RG9jdW1lbnQgZG9jID0gcmVzdWx0LmdldERvYygpOworICAgICAgICBhc3NlcnRFcXVhbHMoIjRm
Zjg5Y2YwLTg2YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZiIsIGRvYy5nZXQoV29ya0luZGV4Rmll
bGQuV09SS19JRCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIlN5bXBob255IE5vLiA1IiwgZG9j
LmdldChXb3JrSW5kZXhGaWVsZC5XT1JLKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJs
aWMgdm9pZCB0ZXN0RmluZFdvcmtCeURpc21heDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAg
ICAgUmVzdWx0cyByZXMgPSBzZC5zZWFyY2goIlN5bXBob255IE5vLiA1IiwgMCwgMTApOworICAg
ICAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsKKyAgICAgICAgUmVzdWx0
IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKKyAgICAgICAgTWJEb2N1bWVudCBkb2MgPSBy
ZXN1bHQuZ2V0RG9jKCk7CisgICAgICAgIGFzc2VydEVxdWFscygiNGZmODljZjAtODZhZi0xMWRl
LTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLX0lEKSk7Cisg
ICAgICAgIGFzc2VydEVxdWFscygiU3ltcGhvbnkgTm8uIDUiLCBkb2MuZ2V0KFdvcmtJbmRleEZp
ZWxkLldPUkspKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5k
V29ya0J5RGlzbWF4MigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1bHRzIHJlcyA9
IHNkLnNlYXJjaCgiU3ltcGhvbnkiLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBy
ZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMu
Z2V0KDApOworICAgICAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKKyAgICAg
ICAgYXNzZXJ0RXF1YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBk
b2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUktfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJT
eW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09SSykpOworICAgIH0KKwor
ICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRXb3JrQnlDb21tZW50KCkgdGhyb3dz
IEV4Y2VwdGlvbiB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJjb21tZW50OmRl
bW8iLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkp
OworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOworICAgICAgICBN
YkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0
ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJbmRleEZp
ZWxkLldPUktfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJkZW1vIiwgZG9jLmdldChXb3Jr
SW5kZXhGaWVsZC5DT01NRU5UKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9p
ZCB0ZXN0RmluZFdvcmtCeUFydGlzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1
bHRzIHJlcyA9IHNzLnNlYXJjaCgiYXJ0aXN0Olwi0J/RkdGC0YAg0JjQu9GM0LjRhyDQp9Cw0LnQ
utC+0LLRgdC60LjQuVwiIiwgMCwgMTApOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdl
dFRvdGFsSGl0cygpKTsKKyAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgw
KTsKKyAgICAgICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7CisgICAgICAgIGFz
c2VydEVxdWFscygiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdl
dChXb3JrSW5kZXhGaWVsZC5XT1JLX0lEKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiU3ltcGhv
bnkgTm8uIDUiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsKKyAgICB9CisKKworICAg
IEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRXb3JrQnlJU1dDKCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJpc3djOlwiVC0xMDE3Nzkz
MDQtMVwiIiwgMCwgMTApOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0
cygpKTsKKyAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKKyAgICAg
ICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7CisgICAgICAgIGFzc2VydEVxdWFs
cygiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5k
ZXhGaWVsZC5XT1JLX0lEKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiU3ltcGhvbnkgTm8uIDUi
LCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAg
IHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5VHlwZSgpIHRocm93cyBFeGNlcHRpb24geworICAg
ICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgidHlwZTpcIm9wZXJhXCIiLCAwLCAxMCk7Cisg
ICAgICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBSZXN1
bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOworICAgICAgICBNYkRvY3VtZW50IGRvYyA9
IHJlc3VsdC5nZXREb2MoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0ZmY4OWNmMC04NmFmLTEx
ZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUktfSUQpKTsK
KyAgICAgICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4
RmllbGQuV09SSykpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZp
bmRXb3JrQnlBbGlhcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1bHRzIHJlcyA9
IHNzLnNlYXJjaCgiYWxpYXM6c3ltcDUiLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygx
LCByZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3Vs
dHMuZ2V0KDApOworICAgICAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKKyAg
ICAgICAgYXNzZXJ0RXF1YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYi
LCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUktfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxz
KCJTeW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09SSykpOworICAgIH0K
KworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRXb3JrQnlUYWcoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKKyAgICAgICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goInRhZzpjbGFzc2lj
YWwiLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkp
OworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOworICAgICAgICBN
YkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0
ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJbmRleEZp
ZWxkLldPUktfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRv
Yy5nZXQoV29ya0luZGV4RmllbGQuV09SSykpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVi
bGljIHZvaWQgdGVzdEZpbmRXb3JrQnlEZWZhdWx0VXNpbmdOYW1lKCkgdGhyb3dzIEV4Y2VwdGlv
biB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJcIlN5bXBob255IE5vLiA1XCIi
LCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOwor
ICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOworICAgICAgICBNYkRv
Y3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0ZmY4
OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxk
LldPUktfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRvYy5n
ZXQoV29ya0luZGV4RmllbGQuV09SSykpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGlj
IHZvaWQgdGVzdEZpbmRXb3JrQnlEZWZhdWx0VXNpbmdBbGlhcygpIHRocm93cyBFeGNlcHRpb24g
eworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgic3ltcDUiLCAwLCAxMCk7CisgICAg
ICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBSZXN1bHQg
cmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOworICAgICAgICBNYkRvY3VtZW50IGRvYyA9IHJl
c3VsdC5nZXREb2MoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUt
OTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUktfSUQpKTsKKyAg
ICAgICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4Rmll
bGQuV09SSykpOworICAgIH0KKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEZpbmRX
b3JrQnlOb0lTV0MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgUmVzdWx0cyByZXMgPSBz
cy5zZWFyY2goImlzd2M6XFwtIiwgMCwgMTApOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVz
LmdldFRvdGFsSGl0cygpKTsKQEAgLTI4NCwxNTAgKzMzNSwxNTEgQEAKICAgICAgICAgUmVzdWx0
c1dyaXRlciB3cml0ZXIgPSBzcy5nZXRNbWQyV3JpdGVyKCk7CiAgICAgICAgIFN0cmluZ1dyaXRl
ciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKICAgICAgICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcg
UHJpbnRXcml0ZXIoc3cpOwotICAgICAgICB3cml0ZXIud3JpdGUocHIsIHJlcyxTZWFyY2hTZXJ2
ZXJTZXJ2bGV0LlJFU1BPTlNFX1hNTCwgdHJ1ZSk7CisgICAgICAgIHdyaXRlci53cml0ZShwciwg
cmVzLCBTZWFyY2hTZXJ2ZXJTZXJ2bGV0LlJFU1BPTlNFX1hNTCwgdHJ1ZSk7CiAgICAgICAgIHBy
LmNsb3NlKCk7CiAgICAgICAgIFN0cmluZyBvdXRwdXQgPSBzdy50b1N0cmluZygpOwogICAgICAg
ICBTeXN0ZW0ub3V0LnByaW50bG4oIlhtbCBpcyIgKyBvdXRwdXQpOwogICAgICAgICBhc3NlcnRU
cnVlKCFvdXRwdXQuY29udGFpbnMoIjxpc3djPiIpKTsKICAgICB9Ci0gIC8qKgotICAgKiBUZXN0
cwotICAgKgotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLSAgQFRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdE91dHB1dEFzWG1sKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICBSZXN1bHRz
IHJlcyA9IHNzLnNlYXJjaCgid29yazpcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxKTsKLSAgICBS
ZXN1bHRzV3JpdGVyIHdyaXRlciA9IHNzLmdldE1tZDJXcml0ZXIoKTsKLSAgICBTdHJpbmdXcml0
ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJp
bnRXcml0ZXIoc3cpOwotICAgIHdyaXRlci53cml0ZShwciwgcmVzLFNlYXJjaFNlcnZlclNlcnZs
ZXQuUkVTUE9OU0VfWE1MLCB0cnVlKTsKLSAgICBwci5jbG9zZSgpOwotICAgIFN0cmluZyBvdXRw
dXQgPSBzdy50b1N0cmluZygpOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWG1sIGlzIiArIG91
dHB1dCk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoImNvdW50PVwiMVwiIikpOwot
ICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJvZmZzZXQ9XCIwXCIiKSk7Ci0gICAgYXNz
ZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoImlkPVwiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAx
ZmM2ZjE3NmZmXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjx0aXRsZT5T
eW1waG9ueSBOby4gNTwvdGl0bGU+IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5z
KCI8bmFtZT7Qn9GR0YLRgCDQmNC70YzQuNGHINCn0LDQudC60L7QstGB0LrQuNC5PC9uYW1lPiIp
KTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGRpc2FtYmlndWF0aW9uPmRlbW88
L2Rpc2FtYmlndWF0aW9uPiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPHNv
cnQtbmFtZT7Qn9GR0YLRgCDQmNC70YzQuNGHINCn0LDQudC60L7QstGB0LrQuNC5PC9zb3J0LW5h
bWU+IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8cmVsYXRpb24gdHlwZT1c
ImNvbXBvc2VyXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxpc3djPlQt
MTAxNzc5MzA0LTE8L2lzd2M+IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8
aXN3Yz5CLTEwMTc3OTMwNC0xPC9pc3djPiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250
YWlucygiPGxhbmd1YWdlPmVuZzwvbGFuZ3VhZ2U+IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0
LmNvbnRhaW5zKCI8cmVsYXRpb24tbGlzdCB0YXJnZXQtdHlwZT1cImFydGlzdFwiPiIpKTsKLSAg
ICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGRpcmVjdGlvbj5iYWNrd2FyZDwvZGlyZWN0
aW9uPiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGF0dHJpYnV0ZS1saXN0
PiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGF0dHJpYnV0ZT5hZGRpdGlv
bmFsPC9hdHRyaWJ1dGU+IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJ0eXBl
PVwiT3BlcmFcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGFsaWFzPlN5
bXA1PC9hbGlhcz4iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjx0YWctbGlz
dD4iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjx0YWcgY291bnQ9XCIxMFwi
PiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPG5hbWU+Y2xhc3NpY2FsPC9u
YW1lPiIpKTsKKyAgICAvKioKKyAgICAgKiBUZXN0cworICAgICAqCisgICAgICogQHRocm93cyBF
eGNlcHRpb24KKyAgICAgKi8KKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RPdXRwdXRB
c1htbCgpIHRocm93cyBFeGNlcHRpb24gewogCi0gIH0KKyAgICAgICAgUmVzdWx0cyByZXMgPSBz
cy5zZWFyY2goIndvcms6XCJTeW1waG9ueSBOby4gNVwiIiwgMCwgMSk7CisgICAgICAgIFJlc3Vs
dHNXcml0ZXIgd3JpdGVyID0gc3MuZ2V0TW1kMldyaXRlcigpOworICAgICAgICBTdHJpbmdXcml0
ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7CisgICAgICAgIFByaW50V3JpdGVyIHByID0gbmV3
IFByaW50V3JpdGVyKHN3KTsKKyAgICAgICAgd3JpdGVyLndyaXRlKHByLCByZXMsIFNlYXJjaFNl
cnZlclNlcnZsZXQuUkVTUE9OU0VfWE1MLCB0cnVlKTsKKyAgICAgICAgcHIuY2xvc2UoKTsKKyAg
ICAgICAgU3RyaW5nIG91dHB1dCA9IHN3LnRvU3RyaW5nKCk7CisgICAgICAgIFN5c3RlbS5vdXQu
cHJpbnRsbigiWG1sIGlzIiArIG91dHB1dCk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNv
bnRhaW5zKCJjb3VudD1cIjFcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFp
bnMoIm9mZnNldD1cIjBcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo
ImlkPVwiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZmXCIiKSk7CisgICAgICAg
IGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8dGl0bGU+U3ltcGhvbnkgTm8uIDU8L3RpdGxl
PiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxuYW1lPtCf0ZHRgtGA
INCY0LvRjNC40Ycg0KfQsNC50LrQvtCy0YHQutC40Lk8L25hbWU+IikpOworICAgICAgICBhc3Nl
cnRUcnVlKG91dHB1dC5jb250YWlucygiPGRpc2FtYmlndWF0aW9uPmRlbW88L2Rpc2FtYmlndWF0
aW9uPiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxzb3J0LW5hbWU+
0J/RkdGC0YAg0JjQu9GM0LjRhyDQp9Cw0LnQutC+0LLRgdC60LjQuTwvc29ydC1uYW1lPiIpKTsK
KyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxyZWxhdGlvbiB0eXBlPVwiY29t
cG9zZXJcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxpc3djPlQt
MTAxNzc5MzA0LTE8L2lzd2M+IikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlu
cygiPGlzd2M+Qi0xMDE3NzkzMDQtMTwvaXN3Yz4iKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0
cHV0LmNvbnRhaW5zKCI8bGFuZ3VhZ2U+ZW5nPC9sYW5ndWFnZT4iKSk7CisgICAgICAgIGFzc2Vy
dFRydWUob3V0cHV0LmNvbnRhaW5zKCI8cmVsYXRpb24tbGlzdCB0YXJnZXQtdHlwZT1cImFydGlz
dFwiPiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxkaXJlY3Rpb24+
YmFja3dhcmQ8L2RpcmVjdGlvbj4iKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRh
aW5zKCI8YXR0cmlidXRlLWxpc3Q+IikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250
YWlucygiPGF0dHJpYnV0ZT5hZGRpdGlvbmFsPC9hdHRyaWJ1dGU+IikpOworICAgICAgICBhc3Nl
cnRUcnVlKG91dHB1dC5jb250YWlucygidHlwZT1cIk9wZXJhXCIiKSk7CisgICAgICAgIGFzc2Vy
dFRydWUob3V0cHV0LmNvbnRhaW5zKCI8YWxpYXM+U3ltcDU8L2FsaWFzPiIpKTsKKyAgICAgICAg
YXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjx0YWctbGlzdD4iKSk7CisgICAgICAgIGFzc2Vy
dFRydWUob3V0cHV0LmNvbnRhaW5zKCI8dGFnIGNvdW50PVwiMTBcIj4iKSk7CisgICAgICAgIGFz
c2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8bmFtZT5jbGFzc2ljYWw8L25hbWU+IikpOwogCi0g
IC8qKgotICAgKiBUZXN0cwotICAgKgotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLSAg
QFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdE91dHB1dEFzSnNvbigpIHRocm93cyBFeGNlcHRpb24g
eworICAgIH0KIAotICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJ3b3JrOlwiU3ltcGhvbnkg
Tm8uIDVcIiIsIDAsIDEpOwotICAgIFJlc3VsdHNXcml0ZXIgd3JpdGVyID0gc3MuZ2V0TW1kMldy
aXRlcigpOwotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQ
cmludFdyaXRlciBwciA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0gICAgd3JpdGVyLndyaXRlKHBy
LCByZXMsIFNlYXJjaFNlcnZlclNlcnZsZXQuUkVTUE9OU0VfSlNPTik7Ci0gICAgcHIuY2xvc2Uo
KTsKKyAgICAvKioKKyAgICAgKiBUZXN0cworICAgICAqCisgICAgICogQHRocm93cyBFeGNlcHRp
b24KKyAgICAgKi8KKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RPdXRwdXRBc0pzb24o
KSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgIFN0cmluZyBvdXRwdXQgPSBzdy50b1N0cmluZygp
OwotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSnNvbiBpcyIgKyBvdXRwdXQpOworICAgICAgICBS
ZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgid29yazpcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxKTsK
KyAgICAgICAgUmVzdWx0c1dyaXRlciB3cml0ZXIgPSBzcy5nZXRNbWQyV3JpdGVyKCk7CisgICAg
ICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKKyAgICAgICAgUHJpbnRX
cml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOworICAgICAgICB3cml0ZXIud3JpdGUocHIs
IHJlcywgU2VhcmNoU2VydmVyU2VydmxldC5SRVNQT05TRV9KU09OKTsKKyAgICAgICAgcHIuY2xv
c2UoKTsKIAotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNvdW50XCI6MSIpKTsK
LSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJvZmZzZXRcIjowIikpOwotICAgIGFz
c2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcIndvcmtcIjpbe1wiaWRcIjpcIjRmZjg5Y2YwLTg2
YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZlwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNv
bnRhaW5zKCJcInR5cGVcIjpcIk9wZXJhXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29u
dGFpbnMoIlwic2NvcmVcIjpcIjEwMFwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRh
aW5zKCJcInRpdGxlXCI6XCJTeW1waG9ueSBOby4gNVwiIikpOwotICAgIGFzc2VydFRydWUob3V0
cHV0LmNvbnRhaW5zKCJcImxhbmd1YWdlXCI6XCJlbmdcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91
dHB1dC5jb250YWlucygiXCJpc3djLWxpc3RcIjp7XCJpc3djXCI6W1wiVC0xMDE3NzkzMDQtMVwi
LFwiQi0xMDE3NzkzMDQtMVwiXX0iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo
IlwiZGlzYW1iaWd1YXRpb25cIjpcImRlbW9cIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5j
b250YWlucygiXCJhbGlhcy1saXN0XCI6e1wiYWxpYXNcIjpbXCJTeW1wNVwiXX0iKSk7Ci0gICAg
YXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwicmVsYXRpb24tbGlzdFwiOlt7XCJ0YXJnZXQt
dHlwZVwiOlwiYXJ0aXN0XCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwi
cmVsYXRpb25cIjpbe1widHlwZVwiOlwiY29tcG9zZXJcIixcImRpcmVjdGlvblwiOlwiYmFja3dh
cmRcIixcImF0dHJpYnV0ZS1saXN0XCI6e1wiYXR0cmlidXRlXCI6W1wiYWRkaXRpb25hbFwiXX0i
KSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiYXJ0aXN0XCI6e1wiaWRcIjpc
IjFmOWRmMTkyLWE2MjEtNGY1NC04ODUwLTJjNTM3M2I3ZWFjOVwiIikpOwotICAgIGFzc2VydFRy
dWUob3V0cHV0LmNvbnRhaW5zKCJcIm5hbWVcIjpcItCf0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC5
0LrQvtCy0YHQutC40LlcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJz
b3J0LW5hbWVcIjpcItCf0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC50LrQvtCy0YHQutC40LlcIiIp
KTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJ0YWctbGlzdFwiOntcInRhZ1wi
IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcIm5hbWVcIjpcImNsYXNzaWNh
bFwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNvdW50XCI6MTAiKSk7
Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIiIpKTsKLSAgfQorICAgICAgICBTdHJp
bmcgb3V0cHV0ID0gc3cudG9TdHJpbmcoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJK
c29uIGlzIiArIG91dHB1dCk7CiAKLSAgLyoqCi0gICAqIFRlc3RzCi0gICAqCi0gICAqIEB0aHJv
d3MgRXhjZXB0aW9uCi0gICAqLwotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0T3V0cHV0QXNK
c29uTmV3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNv
bnRhaW5zKCJcImNvdW50XCI6MSIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFp
bnMoIlwib2Zmc2V0XCI6MCIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo
Ilwid29ya1wiOlt7XCJpZFwiOlwiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZm
XCIiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInR5cGVcIjpcIk9w
ZXJhXCIiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInNjb3JlXCI6
XCIxMDBcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwidGl0bGVc
IjpcIlN5bXBob255IE5vLiA1XCIiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRh
aW5zKCJcImxhbmd1YWdlXCI6XCJlbmdcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQu
Y29udGFpbnMoIlwiaXN3Yy1saXN0XCI6e1wiaXN3Y1wiOltcIlQtMTAxNzc5MzA0LTFcIixcIkIt
MTAxNzc5MzA0LTFcIl19IikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygi
XCJkaXNhbWJpZ3VhdGlvblwiOlwiZGVtb1wiIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1
dC5jb250YWlucygiXCJhbGlhcy1saXN0XCI6e1wiYWxpYXNcIjpbXCJTeW1wNVwiXX0iKSk7Cisg
ICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInJlbGF0aW9uLWxpc3RcIjpbe1wi
dGFyZ2V0LXR5cGVcIjpcImFydGlzdFwiIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5j
b250YWlucygiXCJyZWxhdGlvblwiOlt7XCJ0eXBlXCI6XCJjb21wb3NlclwiLFwiZGlyZWN0aW9u
XCI6XCJiYWNrd2FyZFwiLFwiYXR0cmlidXRlLWxpc3RcIjp7XCJhdHRyaWJ1dGVcIjpbXCJhZGRp
dGlvbmFsXCJdfSIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiYXJ0
aXN0XCI6e1wiaWRcIjpcIjFmOWRmMTkyLWE2MjEtNGY1NC04ODUwLTJjNTM3M2I3ZWFjOVwiIikp
OworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJuYW1lXCI6XCLQn9GR0YLR
gCDQmNC70YzQuNGHINCn0LDQudC60L7QstGB0LrQuNC5XCIiKSk7CisgICAgICAgIGFzc2VydFRy
dWUob3V0cHV0LmNvbnRhaW5zKCJcInNvcnQtbmFtZVwiOlwi0J/RkdGC0YAg0JjQu9GM0LjRhyDQ
p9Cw0LnQutC+0LLRgdC60LjQuVwiIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250
YWlucygiXCJ0YWctbGlzdFwiOntcInRhZ1wiIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1
dC5jb250YWlucygiXCJuYW1lXCI6XCJjbGFzc2ljYWxcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1
ZShvdXRwdXQuY29udGFpbnMoIlwiY291bnRcIjoxMCIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShv
dXRwdXQuY29udGFpbnMoIiIpKTsKKyAgICB9CiAKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJj
aCgid29yazpcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxKTsKLSAgICBSZXN1bHRzV3JpdGVyIHdy
aXRlciA9IHNzLmdldE1tZDJXcml0ZXIoKTsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3Ry
aW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwot
ICAgIHdyaXRlci53cml0ZShwciwgcmVzLCBTZWFyY2hTZXJ2ZXJTZXJ2bGV0LlJFU1BPTlNFX0pT
T05fTkVXKTsKLSAgICBwci5jbG9zZSgpOworICAgIC8qKgorICAgICAqIFRlc3RzCisgICAgICoK
KyAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgorICAgICAqLworICAgIEBUZXN0CisgICAgcHVibGlj
IHZvaWQgdGVzdE91dHB1dEFzSnNvbk5ldygpIHRocm93cyBFeGNlcHRpb24gewogCi0gICAgU3Ry
aW5nIG91dHB1dCA9IHN3LnRvU3RyaW5nKCk7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKCJKc29u
IE5ldyBpcyIgKyBvdXRwdXQpOworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgid29y
azpcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxKTsKKyAgICAgICAgUmVzdWx0c1dyaXRlciB3cml0
ZXIgPSBzcy5nZXRNbWQyV3JpdGVyKCk7CisgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBT
dHJpbmdXcml0ZXIoKTsKKyAgICAgICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIo
c3cpOworICAgICAgICB3cml0ZXIud3JpdGUocHIsIHJlcywgU2VhcmNoU2VydmVyU2VydmxldC5S
RVNQT05TRV9KU09OX05FVyk7CisgICAgICAgIHByLmNsb3NlKCk7CiAKLSAgICBhc3NlcnRUcnVl
KG91dHB1dC5jb250YWlucygiXCJjb3VudFwiOjEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQu
Y29udGFpbnMoIlwib2Zmc2V0XCI6MCIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlu
cygiXCJ3b3JrXCI6W3tcImlkXCI6XCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2
ZmZcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJ0eXBlXCI6XCJPcGVy
YVwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInNjb3JlXCI6XCIxMDBc
IiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJ0aXRsZVwiOlwiU3ltcGhv
bnkgTm8uIDVcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJsYW5ndWFn
ZVwiOlwiZW5nXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoImlzd2NzXCI6
W1wiVC0xMDE3NzkzMDQtMVwiLFwiQi0xMDE3NzkzMDQtMVwiXSIpKTsKLSAgICBhc3NlcnRUcnVl
KG91dHB1dC5jb250YWlucygiXCJkaXNhbWJpZ3VhdGlvblwiOlwiZGVtb1wiIikpOwotICAgIGFz
c2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImFsaWFzZXNcIjpbe1wibmFtZVwiOlwiU3ltcDVc
IixcImxvY2FsZVwiOm51bGwsXCJ0eXBlXCI6bnVsbCxcImJlZ2luLWRhdGVcIjpudWxsLFwiZW5k
LWRhdGVcIjpudWxsfV0iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwicmVs
YXRpb25zXCI6W3siKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiYXJ0aXN0
XCI6e1wiaWRcIjpcIjFmOWRmMTkyLWE2MjEtNGY1NC04ODUwLTJjNTM3M2I3ZWFjOVwiIikpOwot
ICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcIm5hbWVcIjpcItCf0ZHRgtGAINCY0LvR
jNC40Ycg0KfQsNC50LrQvtCy0YHQutC40LlcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5j
b250YWlucygiXCJzb3J0LW5hbWVcIjpcItCf0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC50LrQvtCy
0YHQutC40LlcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJ0YWdzXCI6
W3tcImNvdW50XCI6MTAsXCJuYW1lXCI6XCJjbGFzc2ljYWxcIn0iKSk7Ci0gICAgYXNzZXJ0VHJ1
ZShvdXRwdXQuY29udGFpbnMoIlwiY291bnRcIjoxMCIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1
dC5jb250YWlucygiIikpOwotICB9CisgICAgICAgIFN0cmluZyBvdXRwdXQgPSBzdy50b1N0cmlu
ZygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpzb24gTmV3IGlzIiArIG91dHB1dCk7
CiAKLSAgLyoqCi0gICAqIFRlc3RzCi0gICAqCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAq
LwotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0T3V0cHV0QXNKc29uTmV3UHJldHR5KCkgdGhy
b3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNv
dW50XCI6MSIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwib2Zmc2V0
XCI6MCIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwid29ya1wiOlt7
XCJpZFwiOlwiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZmXCIiKSk7CisgICAg
ICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInR5cGVcIjpcIk9wZXJhXCIiKSk7Cisg
ICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInNjb3JlXCI6XCIxMDBcIiIpKTsK
KyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwidGl0bGVcIjpcIlN5bXBob255
IE5vLiA1XCIiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImxhbmd1
YWdlXCI6XCJlbmdcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoImlz
d2NzXCI6W1wiVC0xMDE3NzkzMDQtMVwiLFwiQi0xMDE3NzkzMDQtMVwiXSIpKTsKKyAgICAgICAg
YXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiZGlzYW1iaWd1YXRpb25cIjpcImRlbW9cIiIp
KTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiYWxpYXNlc1wiOlt7XCJu
YW1lXCI6XCJTeW1wNVwiLFwibG9jYWxlXCI6bnVsbCxcInR5cGVcIjpudWxsLFwiYmVnaW4tZGF0
ZVwiOm51bGwsXCJlbmQtZGF0ZVwiOm51bGx9XSIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRw
dXQuY29udGFpbnMoIlwicmVsYXRpb25zXCI6W3siKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0
cHV0LmNvbnRhaW5zKCJcImFydGlzdFwiOntcImlkXCI6XCIxZjlkZjE5Mi1hNjIxLTRmNTQtODg1
MC0yYzUzNzNiN2VhYzlcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo
IlwibmFtZVwiOlwi0J/RkdGC0YAg0JjQu9GM0LjRhyDQp9Cw0LnQutC+0LLRgdC60LjQuVwiIikp
OworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJzb3J0LW5hbWVcIjpcItCf
0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC50LrQvtCy0YHQutC40LlcIiIpKTsKKyAgICAgICAgYXNz
ZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwidGFnc1wiOlt7XCJjb3VudFwiOjEwLFwibmFtZVwi
OlwiY2xhc3NpY2FsXCJ9IikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygi
XCJjb3VudFwiOjEwIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiIikp
OworICAgIH0KIAotICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJ3b3JrOlwiU3ltcGhvbnkg
Tm8uIDVcIiIsIDAsIDEpOwotICAgIFJlc3VsdHNXcml0ZXIgd3JpdGVyID0gc3MuZ2V0TW1kMldy
aXRlcigpOwotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQ
cmludFdyaXRlciBwciA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0gICAgd3JpdGVyLndyaXRlKHBy
LCByZXMsIFNlYXJjaFNlcnZlclNlcnZsZXQuUkVTUE9OU0VfSlNPTl9ORVcsIHRydWUpOwotICAg
IHByLmNsb3NlKCk7CisgICAgLyoqCisgICAgICogVGVzdHMKKyAgICAgKgorICAgICAqIEB0aHJv
d3MgRXhjZXB0aW9uCisgICAgICovCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0T3V0
cHV0QXNKc29uTmV3UHJldHR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICBTdHJpbmcgb3V0
cHV0ID0gc3cudG9TdHJpbmcoKTsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpzb24gTmV3IFBy
ZXR0eSBpcyIgKyBvdXRwdXQpOworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgid29y
azpcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxKTsKKyAgICAgICAgUmVzdWx0c1dyaXRlciB3cml0
ZXIgPSBzcy5nZXRNbWQyV3JpdGVyKCk7CisgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBT
dHJpbmdXcml0ZXIoKTsKKyAgICAgICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIo
c3cpOworICAgICAgICB3cml0ZXIud3JpdGUocHIsIHJlcywgU2VhcmNoU2VydmVyU2VydmxldC5S
RVNQT05TRV9KU09OX05FVywgdHJ1ZSk7CisgICAgICAgIHByLmNsb3NlKCk7CiAKLSAgICBhc3Nl
cnRUcnVlKG91dHB1dC5jb250YWlucygiXCJjb3VudFwiIDogMSIpKTsKLSAgICBhc3NlcnRUcnVl
KG91dHB1dC5jb250YWlucygiIikpOwotICB9CisgICAgICAgIFN0cmluZyBvdXRwdXQgPSBzdy50
b1N0cmluZygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpzb24gTmV3IFByZXR0eSBp
cyIgKyBvdXRwdXQpOwogCisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNv
dW50XCIgOiAxIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiIikpOwor
ICAgIH0KIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0T3V0cHV0QXNYbWxJc1By
ZXR0eSgpIHRocm93cyBFeGNlcHRpb24gewogCkBAIC00MzUsMTEgKzQ4NywxMSBAQAogICAgICAg
ICBSZXN1bHRzV3JpdGVyIHdyaXRlciA9IHNzLmdldE1tZDJXcml0ZXIoKTsKICAgICAgICAgU3Ry
aW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwogICAgICAgICBQcmludFdyaXRlciBw
ciA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0gICAgICAgIHdyaXRlci53cml0ZShwciwgcmVzLFNl
YXJjaFNlcnZlclNlcnZsZXQuUkVTUE9OU0VfWE1MLCB0cnVlKTsKKyAgICAgICAgd3JpdGVyLndy
aXRlKHByLCByZXMsIFNlYXJjaFNlcnZlclNlcnZsZXQuUkVTUE9OU0VfWE1MLCB0cnVlKTsKICAg
ICAgICAgcHIuY2xvc2UoKTsKICAgICAgICAgU3RyaW5nIG91dHB1dCA9IHN3LnRvU3RyaW5nKCk7
CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWG1sIGlzIiArIG91dHB1dCk7Ci0gICAgICAg
IGFzc2VydFRydWUob3V0cHV0LnNwbGl0KCJcbiIpLmxlbmd0aD4yMCk7CisgICAgICAgIGFzc2Vy
dFRydWUob3V0cHV0LnNwbGl0KCJcbiIpLmxlbmd0aCA+IDIwKTsKIAogICAgIH0KIH0KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTXVzaWNCcmFpbnotY29tbWl0cyBtYWlsaW5nIGxpc3QKTXVzaWNCcmFp
bnotY29tbWl0c0BsaXN0cy5tdXNpY2JyYWluei5vcmcKaHR0cDovL2xpc3RzLm11c2ljYnJhaW56
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL211c2ljYnJhaW56LWNvbW1pdHM=