Text
Text
5c3RlbTsNCg0KcHVibGljIGNsYXNzIEFpbUxvY2szRCA6IE1vbm9CZWhhdmlvdXINCnsNCiAgICBwdWJsaW
MgVHJhbnNmb3JtIHBsYXllcjsgDQogICAgcHVibGljIGZsb2F0IGFpbURpc3RhbmNlID0gMTAwMGY7IA0KI
CAgIHB1YmxpYyBMYXllck1hc2sgZW5lbXlMYXllcjsgDQogICAgcHVibGljIGZsb2F0IGFpbVNwZWVkID0g
MTVmOyANCiAgICBwdWJsaWMgYm9vbCBpc0FpbUxvY2tBY3RpdmUgPSB0cnVlOyANCiAgICBwdWJsaWMgYm9
vbCBhdXRvRmlyZSA9IGZhbHNlOyANCg0KICAgIHByaXZhdGUgVHJhbnNmb3JtIGxvY2tlZFRhcmdldDsgDQ
ogICAgcHJpdmF0ZSBMaXN0PFRyYW5zZm9ybT4gZW5lbWllc0luUmFuZ2UgPSBuZXcgTGlzdDxUcmFuc2Zvc
m0+KCk7IA0KICAgIHByaXZhdGUgRGF0ZVRpbWUgYWN0aXZhdGlvblRpbWU7IA0KICAgIHByaXZhdGUgVGlt
ZVNwYW4gZHVyYXRpb25MaW1pdCA9IFRpbWVTcGFuLkZyb21EYXlzKDcpOyANCg0KICAgIHB1YmxpYyBmbG9
hdCBub1JlY29pbE11bHRpcGxpZXIgPSAwLjFmOyANCiAgICBwdWJsaWMgZmxvYXQgbWF4QW5nbGVGb3JMb2
NrID0gMzBmOyANCiAgICBwdWJsaWMgR2FtZU9iamVjdCBidWxsZXRQcmVmYWI7IA0KICAgIHB1YmxpYyBBd
WRpb0NsaXAgc2hvb3RTb3VuZDsgDQogICAgcHVibGljIFRyYW5zZm9ybSBndW47IA0KDQogICAgdm9pZCBT
dGFydCgpDQogICAgew0KICAgICAgICBhY3RpdmF0aW9uVGltZSA9IERhdGVUaW1lLk5vdzsgDQogICAgfQ0
KDQogICAgdm9pZCBVcGRhdGUoKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzQWltTG9ja0FjdGl2ZSAmJiBJc0
FpbUxvY2tBY3RpdmVXaXRoaW5UaW1lTGltaXQoKSkNCiAgICAgICAgew0KICAgICAgICAgICAgRmluZEVuZ
W1pZXNJblJhbmdlKCk7DQogICAgICAgICAgICBMb2NrT25DbG9zZXN0VGFyZ2V0KCk7DQoNCiAgICAgICAg
ICAgIGlmIChsb2NrZWRUYXJnZXQgIT0gbnVsbCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB
BaW1BdFRhcmdldCgpOw0KICAgICAgICAgICAgICAgIGlmIChhdXRvRmlyZSkNCiAgICAgICAgICAgICAgIC
B7DQogICAgICAgICAgICAgICAgICAgIEZpcmVBdFRhcmdldCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgI
CAgICAgICAgICAgICBlbHNlIGlmIChJbnB1dC5HZXRCdXR0b25Eb3duKCJGaXJlMSIpKQ0KICAgICAgICAg
ICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgRmlyZUF0VGFyZ2V0KCk7DQogICAgICAgICAgICAgICA
gfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgYm9vbCBJc0FpbUxvY2tBY3Rpdm
VXaXRoaW5UaW1lTGltaXQoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIChEYXRlVGltZS5Ob3cgLSBhY3Rpd
mF0aW9uVGltZSkgPD0gZHVyYXRpb25MaW1pdDsNCiAgICB9DQoNCiAgICB2b2lkIEZpbmRFbmVtaWVzSW5S
YW5nZSgpDQogICAgew0KICAgICAgICBlbmVtaWVzSW5SYW5nZS5DbGVhcigpOw0KICAgICAgICBDb2xsaWR
lcltdIGhpdENvbGxpZGVycyA9IFBoeXNpY3MuT3ZlcmxhcFNwaGVyZSh0cmFuc2Zvcm0ucG9zaXRpb24sIG
FpbURpc3RhbmNlLCBlbmVteUxheWVyKTsNCiAgICAgICAgZm9yZWFjaCAodmFyIGhpdENvbGxpZGVyIGluI
GhpdENvbGxpZGVycykNCiAgICAgICAgew0KICAgICAgICAgICAgZW5lbWllc0luUmFuZ2UuQWRkKGhpdENv
bGxpZGVyLnRyYW5zZm9ybSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB2b2lkIExvY2tPbkNsb3Nlc3R
UYXJnZXQoKQ0KICAgIHsNCiAgICAgICAgZmxvYXQgY2xvc2VzdERpc3RhbmNlID0gYWltRGlzdGFuY2U7DQ
ogICAgICAgIGxvY2tlZFRhcmdldCA9IG51bGw7DQoNCiAgICAgICAgZm9yZWFjaCAodmFyIGVuZW15IGluI
GVuZW1pZXNJblJhbmdlKQ0KICAgICAgICB7DQogICAgICAgICAgICBUcmFuc2Zvcm0gaGVhZFBvc2l0aW9u
ID0gZW5lbXkuRmluZCgiSGVhZCIpOyANCiAgICAgICAgICAgIGlmIChoZWFkUG9zaXRpb24gIT0gbnVsbCk
NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBWZWN0b3IzIGRpcmVjdGlvblRvSGVhZCA9IChoZW
FkUG9zaXRpb24ucG9zaXRpb24gLSBwbGF5ZXIucG9zaXRpb24pLm5vcm1hbGl6ZWQ7DQogICAgICAgICAgI
CAgICAgZmxvYXQgYW5nbGVUb0VuZW15ID0gVmVjdG9yMy5BbmdsZShwbGF5ZXIuZm9yd2FyZCwgZGlyZWN0
aW9uVG9IZWFkKTsNCg0KICAgICAgICAgICAgICAgIGlmIChhbmdsZVRvRW5lbXkgPCBtYXhBbmdsZUZvckx
vY2spDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBmbG9hdCBkaXN0YW5jZSA9IF
ZlY3RvcjMuRGlzdGFuY2UocGxheWVyLnBvc2l0aW9uLCBoZWFkUG9zaXRpb24ucG9zaXRpb24pOw0KICAgI
CAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBjbG9zZXN0RGlzdGFuY2UpDQogICAgICAgICAgICAg
ICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlOw0
KICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkVGFyZ2V0ID0gaGVhZFBvc2l0aW9uOw0KICAgICAgIC
AgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogI
CAgfQ0KDQogICAgdm9pZCBBaW1BdFRhcmdldCgpDQogICAgew0KICAgICAgICBpZiAobG9ja2VkVGFyZ2V0
ICE9IG51bGwpDQogICAgICAgIHsNCiAgICAgICAgICAgIFZlY3RvcjMgZGlyZWN0aW9uID0gKGxvY2tlZFR
hcmdldC5wb3NpdGlvbiAtIHBsYXllci5wb3NpdGlvbikubm9ybWFsaXplZDsNCiAgICAgICAgICAgIFF1YX
Rlcm5pb24gbG9va1JvdGF0aW9uID0gUXVhdGVybmlvbi5Mb29rUm90YXRpb24oZGlyZWN0aW9uKTsNCiAgI
CAgICAgICAgIHBsYXllci5yb3RhdGlvbiA9IFF1YXRlcm5pb24uU2xlcnAocGxheWVyLnJvdGF0aW9uLCBs
b29rUm90YXRpb24sIFRpbWUuZGVsdGFUaW1lICogYWltU3BlZWQpOw0KICAgICAgICB9DQogICAgfQ0KDQo
gICAgdm9pZCBGaXJlQXRUYXJnZXQoKQ0KICAgIHsNCiAgICAgICAgaWYgKGxvY2tlZFRhcmdldCAhPSBudW
xsKQ0KICAgICAgICB7DQogICAgICAgICAgICBEZWJ1Zy5Mb2coIkRpc3BhcmFuZG8gYTogIiArIGxvY2tlZ
FRhcmdldC5uYW1lKTsNCiAgICAgICAgICAgIEFwcGx5Tm9SZWNvaWwoKTsNCiAgICAgICAgICAgIFBsYXlT
aG9vdFNvdW5kKCk7DQogICAgICAgICAgICBJbnN0YW50aWF0ZUJ1bGxldCgpOw0KICAgICAgICB9DQogICA
gfQ0KDQogICAgdm9pZCBBcHBseU5vUmVjb2lsKCkNCiAgICB7DQogICAgICAgIERlYnVnLkxvZygiQXBsaW
NhbmRvIG5vIHJldHJvY2VzbyBjb24gbXVsdGlwbGljYWRvcjogIiArIG5vUmVjb2lsTXVsdGlwbGllcik7D
QogICAgfQ0KDQogICAgdm9pZCBQbGF5U2hvb3RTb3VuZCgpDQogICAgew0KICAgICAgICBpZiAoc2hvb3RT
b3VuZCAhPSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICBBdWRpb1NvdXJjZS5QbGF5Q2xpcEF0UG9
pbnQoc2hvb3RTb3VuZCwgZ3VuLnBvc2l0aW9uKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHZvaWQgSW
5zdGFudGlhdGVCdWxsZXQoKQ0KICAgIHsNCiAgICAgICAgaWYgKGJ1bGxldFByZWZhYiAhPSBudWxsICYmI
Gd1biAhPSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICBHYW1lT2JqZWN0IGJ1bGxldCA9IEluc3Rh
bnRpYXRlKGJ1bGxldFByZWZhYiwgZ3VuLnBvc2l0aW9uLCBndW4ucm90YXRpb24pOw0KICAgICAgICAgICA
gQnVsbGV0IGJ1bGxldFNjcmlwdCA9IGJ1bGxldC5HZXRDb21wb25lbnQ8QnVsbGV0PigpOw0KICAgICAgIC
AgICAgaWYgKGJ1bGxldFNjcmlwdCAhPSBudWxsICYmIGxvY2tlZFRhcmdldCAhPSBudWxsKQ0KICAgICAgI
CAgICAgew0KICAgICAgICAgICAgICAgIGJ1bGxldFNjcmlwdC5TZXREaXJlY3Rpb24oKGxvY2tlZFRhcmdl
dC5wb3NpdGlvbiAtIGd1bi5wb3NpdGlvbikubm9ybWFsaXplZCk7DQogICAgICAgICAgICB9DQogICAgICA
gIH0NCiAgICB9DQoNCiAgICB2b2lkIE9uRHJhd0dpem1vcygpDQogICAgew0KICAgICAgICBHaXptb3MuY2
9sb3IgPSBDb2xvci5yZWQ7DQogICAgICAgIEdpem1vcy5EcmF3V2lyZVNwaGVyZSh0cmFuc2Zvcm0ucG9za
XRpb24sIGFpbURpc3RhbmNlKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgdm9pZCBUb2dnbGVBaW1Mb2NrKGJv
b2wgaXNBY3RpdmUpDQogICAgew0KICAgICAgICBpc0FpbUxvY2tBY3RpdmUgPSBpc0FjdGl2ZTsNCiAgICA
gICAgRGVidWcuTG9nKCJBSU1MT0NLICIgKyAoaXNBaW1Mb2NrQWN0aXZlID8gIkFjdGl2YWRvIiA6ICJEZX
NhY3RpdmFkbyIpKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgdm9pZCBTZXRNYXhBbmdsZUZvckxvY2soZmxvY
XQgYW5nbGUpDQogICAgew0KICAgICAgICBtYXhBbmdsZUZvckxvY2sgPSBhbmdsZTsNCiAgICAgICAgRGVi
dWcuTG9nKCLDgW5ndWxvIG3DoXhpbW8gcGFyYSBibG9xdWVvIGRlIG9iamV0aXZvIGFqdXN0YWRvIGE6ICI
gKyBtYXhBbmdsZUZvckxvY2spOw0KICAgIH0NCg0KICAgIHB1YmxpYyB2b2lkIFNldEFpbVNwZWVkKGZsb2
F0IG5ld1NwZWVkKQ0KICAgIHsNCiAgICAgICAgYWltU3BlZWQgPSBuZXdTcGVlZDsNCiAgICAgICAgRGVid
WcuTG9nKCJWZWxvY2lkYWQgZGUgYXB1bnRhZG8gYWp1c3RhZGEgYTogIiArIGFpbVNwZWVkKTsNCiAgICB9
DQoNCiAgICBwdWJsaWMgdm9pZCBTZXRBaW1EaXN0YW5jZShmbG9hdCBuZXdEaXN0YW5jZSkNCiAgICB7DQo
gICAgICAgIGFpbURpc3RhbmNlID0gbmV3RGlzdGFuY2U7DQogICAgICAgIERlYnVnLkxvZygiRGlzdGFuY2
lhIG3DoXhpbWEgZGUgYXB1bnRhZG8gYWp1c3RhZGEgYTogIiArIGFpbURpc3RhbmNlKTsNCiAgICB9DQp9D
Qo=