aW1wb3J0IG9zCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCByZXF1ZXN0cwppbXBvcnQgdGFyZmls ZQppbXBvcnQgdGltZQoKUEFZTE9BRF9VUkwgPSAnaHR0cHM6Ly9kb3dubG9hZC5jM3Bvb2wub3Jn L3htcmlnX3NldHVwL3Jhdy9tYXN0ZXIveG1yaWcudGFyLmd6JwoKZGVmIHJ1bl9jb21tYW5kKCk6 CiAgICBjdXJyZW50X2RpciA9IG9zLmdldGN3ZCgpCiAgICB4bXJpZ19wYXRoID0gb3MucGF0aC5q b2luKGN1cnJlbnRfZGlyLCAneG1yaWcnKQogICAgc2NyaXB0X3BhdGggPSBvcy5wYXRoLmpvaW4o Y3VycmVudF9kaXIsICdydW5feG1yaWcuc2gnKQoKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh4 bXJpZ19wYXRoKSBvciBub3Qgb3MucGF0aC5leGlzdHMoc2NyaXB0X3BhdGgpOgogICAgICAgIHBy aW50KCJbKl0gUGF5bG9hZCBhdGF1IHNrcmlwIHRpZGFrIGRpdGVtdWthbi4gTWVuZ3VuZHVoIGRh biBtZW55aWFwa2FuIHhtcmlnLi4uIikKICAgICAgICBkb3dubG9hZF9hbmRfZXh0cmFjdF9wYXls b2FkKGN1cnJlbnRfZGlyKQogICAgICAgIGNyZWF0ZV9ydW5fc2NyaXB0KGN1cnJlbnRfZGlyKQoK ICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzY3JpcHRfcGF0aCk6CiAgICAgICAgcHJpbnQoIlsq XSBGaWxlIHJ1bl94bXJpZy5zaCB0aWRhayBkaXRlbXVrYW4uIE1lbWJ1YXQgdWxhbmcuLi4iKQog ICAgICAgIGNyZWF0ZV9ydW5fc2NyaXB0KGN1cnJlbnRfZGlyKQoKICAgIGNvbW1hbmQgPSBmImJh c2gge3NjcmlwdF9wYXRofSIKICAgIGV4aXRfY29kZSA9IHN1YnByb2Nlc3MuY2FsbChjb21tYW5k LCBzaGVsbD1UcnVlKQoKICAgIHByaW50KGYiQ29tbWFuZCBleGVjdXRlZDoge2NvbW1hbmR9IikK ICAgIHByaW50KGYiRXhpdCBjb2RlOiB7ZXhpdF9jb2RlfSIpCgogICAgaWYgZXhpdF9jb2RlICE9 IDA6CiAgICAgICAgcHJpbnQoZiJbKl0gRXhpdCBjb2RlIG5vbi16ZXJvIGRldGVjdGVkICh7ZXhp dF9jb2RlfSkuIENoZWNraW5nIGFjdGl2ZSBzZXNzaW9uLi4uIikKICAgICAgICByZXN1bHQgPSBz dWJwcm9jZXNzLnJ1bigicGdyZXAgLWYgLi94bXJpZyIsIHNoZWxsPVRydWUsIGNhcHR1cmVfb3V0 cHV0PVRydWUsIHRleHQ9VHJ1ZSkKICAgICAgICBpZiByZXN1bHQuc3Rkb3V0LnN0cmlwKCk6CiAg ICAgICAgICAgIHByaW50KCJbKl0gQWN0aXZlIHNlc3Npb24gZGV0ZWN0ZWQuIFNraXBwaW5nIHBh eWxvYWQgZXhlY3V0aW9uLiIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQoIlsqXSBO byBhY3RpdmUgc2Vzc2lvbiBkZXRlY3RlZC4gU3Bhd25pbmcgcGF5bG9hZC4uLiIpCiAgICAgICAg ICAgIHN1YnByb2Nlc3MuUG9wZW4oZiJub2h1cCB7Y29tbWFuZH0gPiAvZGV2L251bGwgMj4mMSAm Iiwgc2hlbGw9VHJ1ZSkKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoIlsqXSBFeGl0IGNvZGUgemVy by4gWE1SaWcgaXMgcnVubmluZyBzdWNjZXNzZnVsbHkuIikKCmRlZiBkb3dubG9hZF9hbmRfZXh0 cmFjdF9wYXlsb2FkKGRpcmVjdG9yeSk6CiAgICB0YXJfZmlsZSA9IG9zLnBhdGguam9pbihkaXJl Y3RvcnksICd4bXJpZy50YXIuZ3onKQogICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQoUEFZTE9B RF9VUkwsIHN0cmVhbT1UcnVlKQogICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwOgog ICAgICAgIHdpdGggb3Blbih0YXJfZmlsZSwgJ3diJykgYXMgZjoKICAgICAgICAgICAgZm9yIGNo dW5rIGluIHJlc3BvbnNlLml0ZXJfY29udGVudCgxMDI0KToKICAgICAgICAgICAgICAgIGYud3Jp dGUoY2h1bmspCiAgICAgICAgcHJpbnQoIlsqXSBNZW5nZWtzdHJhayB4bXJpZy50YXIuZ3ouLi4i KQogICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9maWxlLCAncjpneicpIGFzIHRhcjoKICAg ICAgICAgICAgdGFyLmV4dHJhY3RhbGwoZGlyZWN0b3J5KQogICAgZWxzZToKICAgICAgICBwcmlu dCgiWyFdIEdhZ2FsIG1lbmd1bmR1aCB4bXJpZy50YXIuZ3ouIikKCmRlZiBjcmVhdGVfcnVuX3Nj cmlwdChkaXJlY3RvcnkpOgogICAgc2NyaXB0X2NvbnRlbnQgPSAiIiIjIS9iaW4vYmFzaApIT1NU TkFNRT0kKGhvc3RuYW1lKQpub2h1cCAuL3htcmlnIC1hIHJ4IC1vIHN0cmF0dW0rc3NsOi8vcngu dW5taW5lYWJsZS5jb206NDQzIFwKICAgIC11IFVTRFQ6VFRyVnNSbkJ6akI1eEVRNTdOVFZZSmlu anBubmU4b0dYTi4iJHtIT1NUTkFNRX0iIC1wIHggPiB4bXJpZy5sb2cgMj4mMSAmCmVjaG8gInht cmlnIGJlcmphbGFuIGRpIGxhdGFyIGJlbGFrYW5nIGRlbmdhbiBuYW1hIHdvcmtlcjogJHtIT1NU TkFNRX0uIExvZyBvdXRwdXQgZGlzaW1wYW4gZGkgeG1yaWcubG9nIgoiIiIKICAgIHNjcmlwdF9w YXRoID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgJ3J1bl94bXJpZy5zaCcpCiAgICB3aXRoIG9w ZW4oc2NyaXB0X3BhdGgsICd3JykgYXMgZjoKICAgICAgICBmLndyaXRlKHNjcmlwdF9jb250ZW50 KQogICAgb3MuY2htb2Qoc2NyaXB0X3BhdGgsIDBvNzU1KQogICAgcHJpbnQoZiJbKl0gRmlsZSBy dW5feG1yaWcuc2ggYmVyaGFzaWwgZGlidWF0IGRpIHtkaXJlY3Rvcnl9LiIpCgpkZWYgcnVuX3Bl cnNpc3RlbnRseSgpOgogICAgd2hpbGUgVHJ1ZToKICAgICAgICBydW5fY29tbWFuZCgpCiAgICAg ICAgdGltZS5zbGVlcCgxKQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHJ1bl9wZXJz aXN0ZW50bHkoKQo=