Transaction executed successfully

Transaction Details

Inspect execution, participants, message data, gas usage, events and raw transaction data.

Transaction hash
53060EDF7F2408B8C014A470B69E9902C5673C63EA19A7A48F181D67EE3D5631

Transaction overview

Status
Success
Execution completed
Block
#230650
Included in block
Message Type
m_addpkg
Primary message

Execution summary

TX INDEX
0
Position in block
GAS WANTED
120,000,000
Requested gas limit
GAS USED
85,048,324
Gas consumed
FEE
1000000ugnot
Transaction fee

Participants

Sender
Package / Realm
Not available
Memo
None

Message

Message #1
m_addpkg
Caller
Arguments
g138gdmwj6heduu3st796lw6qqdwylgaxf7ty5gz

Execution log

msg:0,success:true,log:,events:[]

Events

No events emitted by this transaction.

Raw encoded transaction

CoX7AwoML3ZtLm1fYWRkcGtnEvP6AwooZzEzOGdkbXdqNmhlZHV1M3N0Nzk2bHc2cXFkd3lsZ2F4Zjd0eTVnehLF+gMKBmdhbWUyMhI6Z25vLmxhbmQvci9nMTM4Z2Rtd2o2aGVkdXUzc3Q3OTZsdzZxcWR3eWxnYXhmN3R5NWd6L2dhbWUyMhr2+AMKCGdhbWUuZ25vEuj4Ay8vIEdub01vamkg4oCUIE1haW4gR2FtZSBSZWFsbQovLyBnbm8ubGFuZC9yL2cxMzhnZG13ajZoZWR1dTNzdDc5Nmx3NnFxZHd5bGdheGY3dHk1Z3ovZ2FtZTIyCi8vCi8vIE9uLWNoYWluIGdhbWUgZW5naW5lIGZvciBHbm9Nb2ppIG9uIEduby5sYW5kICh2MS41LjAgLyBPbnl4IHRlc3RuZXQgQVBJKS4KLy8gVHJhY2tzIG1pbmVkIGNvaW5zLCBjYXNpbm8gcm91bmRzLCBQdlAgbG9iYmllcywgdG9vbHMsIHNraWxscywgYWNoaWV2ZW1lbnRzLgovLwovLyBUb2tlbiBtaW50aW5nIGlzIGhhbmRsZWQgYnkgZ25vLmxhbmQvci9nMTM4Z2Rtd2o2aGVkdXUzc3Q3OTZsdzZxcWR3eWxnYXhmN3R5NWd6L21pbnRlcjYuCi8vIFVuaWZpZWQgY29pbiBiYWxhbmNlcyBsaXZlIGF0IGduby5sYW5kL3IvZzEzOGdkbXdqNmhlZHV1M3N0Nzk2bHc2cXFkd3lsZ2F4Zjd0eTVnei9jb2lucy4KLy8gUGhhc2UgMjogT24tY2hhaW4gY29zdCBlbmZvcmNlbWVudCBmb3IgQnV5VG9vbCwgUmVwYWlyVG9vbCwgYW5kIFRyYWluU2tpbGwuCi8vIFBoYXNlIDM6IFdhbGxldCBibGFja2xpc3Qg4oCUIEJhbkFkZHJlc3MsIFVuYmFuQWRkcmVzcywgQmxhY2tsaXN0U3RhdHVzLCBpc0JsYWNrbGlzdGVkLgovLyBQaGFzZSA0OiBDbGFpbU1pbmUgY29vbGRvd24gNjBzOyBwZXItZW50cnkgY29pbiBjYXAgMTAwLgovLyBQaGFzZSA1OiBFeHBhbmRlZCB0b29sIGNvc3RzICh1cCB0byAyNCBpbmdyZWRpZW50cyk7IDQ4IG5ldyBza2lsbCBicmFuY2hlcyAobmF0dXJlL2Zvb2QvcGVvcGxlL3RoaW5ncy90cmF2ZWwvc2lnbnMpLgovLyBQaGFzZSA2OiBQdlAgd2FnZXIgZXNjcm93ICsgcHJpemUgcGF5b3V0OyBjYXNpbm8gamFja3BvdCBzZXJ2ZXItc2lkZTsgQ2xhaW1BbmRNaW50IHRyZWFzdXJ5IGZpeC4KLy8gUGhhc2UgNzogR3VpbGQgc3lzdGVtIOKAlCBDcmVhdGVHdWlsZCwgSm9pbkd1aWxkLCBMZWF2ZUd1aWxkLCBQbGF5ZXJHdWlsZCwgR3VpbGRJbmZvLCBUb3BHdWlsZHM7IGd1aWxkIHlpZWxkIGJvbnVzLgovLyBQaGFzZSA4OiBHbm9tZSBQYXNzIHN1YnNjcmlwdGlvbiAoNSBHTk9ULzMwZCwgKzUwJSB5aWVsZCk7IERhaWx5Q2hlY2tpbiBjb29sZG93biBmaXhlZCA3MjAwMOKGkjg2NDAwLgovLyBQaGFzZSA5OiBSZW1vdmVkIGNoYWluL2JhbmtlciArIGNoYWluL3J1bnRpbWUvdW5zYWZlIChub3QgYXZhaWxhYmxlIG9uIE9ueXggdGVzdG5ldCkuCgpwYWNrYWdlIGdhbWUyMgoKaW1wb3J0ICgKCSJzdHJjb252IgoJInN0cmluZ3MiCgkidGltZSIKCgkiZ25vLmxhbmQvcC9udC9hdmwvdjAiCgkiZ25vLmxhbmQvcC9udC91Zm10L3YwIgopCgovLyDilIDilIAgU3RhdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgp2YXIgKAoJYWRtaW4gICAgICAgICAgYWRkcmVzcwoJbWludGVyQWRkciAgICAgYWRkcmVzcyAgLy8gYXV0aG9yaXplZCBtaW50ZXIgcmVhbG0gKG1pbnRlcjUpIOKAlCBzZXQgdmlhIFNldE1pbnRlcgoJcGVuZGluZ01pbnRzICAgYXZsLlRyZWUgLy8gYWRkcisiOiIrY29pbklkIOKGkiBhbW91bnQgc3RyaW5nCgliYWxhbmNlcyAgICAgICBhdmwuVHJlZSAvLyBhZGRyKyI6Iitjb2luSWQg4oaSIGFtb3VudCBzdHJpbmcKCXZlaW5TdXBwbHkgICAgIGF2bC5UcmVlIC8vIGNvaW5JZCDihpIgInJlbWFpbmluZzptYXgiCgljYXNpbm9Sb3VuZHMgICBhdmwuVHJlZSAvLyByb3VuZElkIOKGkiBKU09OIHN0cmluZwoJcHZwTG9iYmllcyAgICAgYXZsLlRyZWUgLy8gbG9iYnlJZCDihpIgSlNPTiBzdHJpbmcKCXB2cFdhZ2VycyAgICAgIGF2bC5UcmVlIC8vIGxvYmJ5SWQg4oaSICJjb2luSWQ6YW1vdW50OmNyZWF0b3I6Y2hhbGxlbmdlciIgKGNoYWxsZW5nZXI9IiIgdW50aWwgam9pbmVkKQoJb3duZWRUb29scyAgICAgYXZsLlRyZWUgLy8gYWRkciDihpIgY29tbWEtc2VwYXJhdGVkIHRvb2wgSURzCgl0b29sTGlmZSAgICAgICBhdmwuVHJlZSAvLyBhZGRyKyI6Iit0b29sSWQg4oaSIHJlbWFpbmluZyBsaWZlIHN0cmluZwoJbGlmZXRpbWVNaW5lZCAgYXZsLlRyZWUgLy8gYWRkcisiOiIrY29pbklkIOKGkiB0b3RhbCBtaW5lZCBzdHJpbmcKCWFjaGlldmVtZW50cyAgIGF2bC5UcmVlIC8vIGFkZHIrIjoiK2FjaElkIOKGkiAiMSIKCWRhaWx5Q2hlY2tpbnMgIGF2bC5UcmVlIC8vIGFkZHIg4oaSIHVuaXggc2Vjb25kcyBzdHJpbmcKCXNraWxsUmFua3MgICAgIGF2bC5UcmVlIC8vIGFkZHIrIjoiK3NraWxsSWQg4oaSIHJhbmsgc3RyaW5nCgltaW5lcnMgICAgICAgICBhdmwuVHJlZSAvLyBhZGRyIOKGkiB0b3RhbCBtaW5lZCBhbGwtdGltZSBzdHJpbmcKCWxhc3RDbGFpbSAgICAgIGF2bC5UcmVlIC8vIGFkZHIg4oaSIHVuaXggdGltZXN0YW1wIG9mIGxhc3QgQ2xhaW1NaW5lL0NsYWltQW5kTWludCAodmVsb2NpdHkgbGltaXQpCglibGFja2xpc3QgICAgICBhdmwuVHJlZSAvLyBhZGRyIOKGkiAicmVhc29uOnRpbWVzdGFtcCIKCWJhbkV4cGlyaWVzICAgIGF2bC5UcmVlIC8vIGFkZHIg4oaSIHVuaXggZXhwaXJ5ICgwID0gcGVybWFuZW50KQoJZ3VpbGRzICAgICAgICAgYXZsLlRyZWUgLy8gZ3VpbGRJZCDihpIgSlNPTntuYW1lLCBsZWFkZXIsIG1lbWJlckNvdW50LCBjcmVhdGVkQXR9CglndWlsZE1lbWJlcnMgICBhdmwuVHJlZSAvLyBndWlsZElkKyI6IithZGRyIOKGkiAiMSIKCXBsYXllckd1aWxkICAgIGF2bC5UcmVlIC8vIGFkZHIg4oaSIGd1aWxkSWQKCWdub21lUGFzc2VzICAgIGF2bC5UcmVlIC8vIGFkZHIg4oaSIHVuaXggZXhwaXJ5IHRpbWVzdGFtcCBzdHJpbmcgKDAgPSBuZXZlciBzZXQsID4wID0gYWN0aXZlIHVudGlsKQoJcGF1c2VkICAgICAgICAgYm9vbAopCgovLyDilIDilIAgQ29zdCBUYWJsZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgovLyB0b29sQ29zdHMgbWFwcyB0b29sSWQg4oaSIHNsaWNlIG9mIFtjb2luSWQsIGFtb3VudF0gcGFpcnMuCi8vIENvcGllZCBmcm9tIGNhdGFsb2cudHMgVE9PTFMgYXJyYXkuIEFtb3VudHMgYXJlIGZvciBxdHk9MS4KLy8gUGhhc2UgNTogZXhwYW5kZWQgdG9vbCBjb3N0cyDigJQgZWFjaCB0b29sIHJlcXVpcmVzIG1vcmUgaW5ncmVkaWVudCB0eXBlcyBhdCBoaWdoZXIgdGllcnMuCi8vIE1hdGNoZXMgY2F0YWxvZy50cyBUT09MUyBhcnJheSBleGFjdGx5Lgp2YXIgdG9vbENvc3RzID0gbWFwW3N0cmluZ11bXVsyXXN0cmluZ3sKCSJ0d2lnIjogewoJCXsiZ3JpbiIsICIxMjAifSwgeyJqb3kiLCAiNzUifSwgeyJjb29sIiwgIjYwIn0sCgl9LAoJIndvb2QiOiB7CgkJeyJzZWVkbGluZyIsICIxODAifSwgeyJsZWF2ZXMiLCAiMTUwIn0sIHsiZmFsbGVuIiwgIjEyMCJ9LCB7InRoaW5rIiwgIjEwNSJ9LCB7InNsZWVwIiwgIjkwIn0sIHsicGFydHkiLCAiNzUifSwKCX0sCgkic3RvbmUiOiB7CgkJeyJyb2NrIiwgIjYwMCJ9LCB7ImxvZyIsICI1NDAifSwgeyJldmVyZ3JlZW4iLCAiNDgwIn0sIHsiYnJpY2siLCAiNDIwIn0sIHsibXVzaHJvb20iLCAiMzYwIn0sIHsiaGVhcnQiLCAiMzAwIn0sCgkJeyJkZWNpZHVvdXMiLCAiMjQwIn0sIHsiY2FjdHVzIiwgIjE4MCJ9LAoJfSwKCSJpcm9uIjogewoJCXsiZ2VhciIsICI4NDAifSwgeyJjaGFpbnMiLCAiNzgwIn0sIHsid3JlbmNoIiwgIjcyMCJ9LCB7ImhhbW1lciIsICI2NjAifSwgeyJhbmNob3IiLCAiNjMwIn0sIHsicGljayIsICI1NzAifSwKCQl7Im51dCIsICI0MDAifSwgeyJzYXciLCAiMjAwIn0sIHsiaGFtbWVyLXdyZW5jaCIsICIzMDAifSwgeyJheGUiLCAiNjAifSwKCX0sCgkiZ29sZCI6IHsKCQl7ImdvbGQtbWVkYWwiLCAiMTE0MCJ9LCB7ImNyb3duIiwgIjEwODAifSwgeyJ0cm9waHkiLCAiMTAyMCJ9LCB7Im1vbmV5LWJhZyIsICI5NjAifSwgeyJib2x0IiwgIjkzMCJ9LCB7InN3b3JkIiwgIjg3MCJ9LAoJCXsib2xkLWtleSIsICI4MCJ9LCB7InNjYWxlIiwgIjYwIn0sIHsiYnVsbHNleWUiLCAiMjAwIn0sIHsibWFoam9uZyIsICI1MCJ9LCB7InNsb3RzIiwgIjIwIn0sIHsiam9rZXIiLCAiMTUifSwKCX0sCgkiZGlhbW9uZCI6IHsKCQl7ImdlbSIsICIxNTYwIn0sIHsiY29pbiIsICIxNDQwIn0sIHsicmluZyIsICIxMzgwIn0sIHsiZGlzY28iLCAiMTMyMCJ9LCB7ImtpdGUiLCAiMTI2MCJ9LCB7ImRvZG8iLCAiMTE0MCJ9LAoJCXsic2NvcGUiLCAiMjUifSwgeyJ0ZWxlc2NvcGUiLCAiNDAifSwgeyJ0dWJlIiwgIjYwIn0sIHsiZGlzaCIsICI1MCJ9LAoJCXsibG9jayIsICIzMDAifSwgeyJrZXktbG9jayIsICIyMDAifSwKCQl7ImVpZ2h0IiwgIjE1MCJ9LCB7InB1enpsZSIsICIyMDAifSwKCX0sCgkiY29zbWljIjogewoJCXsiZ2FsYXh5IiwgIjE5NTAifSwgeyJtb2FpIiwgIjE4NjAifSwgeyJoYW1zYSIsICIxODAwIn0sIHsibWlycm9yIiwgIjE3NDAifSwgeyJhdG9tIiwgIjE2NTAifSwgeyJ1Zm8iLCAiMTUwMCJ9LAoJCXsic2hvb3RpbmciLCAiMTUifSwgeyJyZXgiLCAiMjAifSwgeyJtYW1tb3RoIiwgIjI1In0sIHsibmV3LWZhY2UiLCAiMjAifSwKCQl7ImN5Y2xvbmUiLCAiNDAifSwgeyJ0b3JuYWRvIiwgIjUwIn0sCgkJeyJzYXQiLCAiNjAifSwgeyJjYXN0bGUiLCAiODAifSwgeyJsaWJlcnR5IiwgIjEwMCJ9LCB7ImthYWJhIiwgIjEwIn0sCgl9LAoJInBsYXNtYSI6IHsKCQl7ImdhbGF4eSIsICIyMjUwIn0sIHsiYXRvbSIsICIyMTAwIn0sIHsibW9haSIsICIyMTAwIn0sIHsiY29tZXQiLCAiMTk1MCJ9LCB7ImplbGx5IiwgIjE4MDAifSwgeyJwZWFjb2NrIiwgIjE4MDAifSwKCQl7Im9tIiwgIjgifSwgeyJ5aW4iLCAiMTAifSwgeyJvcGhpdWNodXMiLCAiMTIifSwgeyJmbGV1ciIsICIxNSJ9LCB7InRyaWRlbnQiLCAiMTUifSwKCQl7InJhZGlvYWN0aXZlIiwgIjQwIn0sIHsiYmlvaGF6YXJkIiwgIjQwIn0sCgkJeyJjYXN0bGUtanAiLCAiNjAifSwKCQl7InN1bi1mYWNlIiwgIjIwIn0sIHsiZHJhZ29uLWZhY2UiLCAiMjUifSwgeyJzYXVyb3BvZCIsICIzMCJ9LCB7Im1vb24td29yZCIsICI4MCJ9LAoJfSwKCSJuZXV0cm9uIjogewoJCXsiamVsbHkiLCAiMjg1MCJ9LCB7InBlYWNvY2siLCAiMjcwMCJ9LCB7InVuaWNvcm4iLCAiMjU1MCJ9LCB7ImdhbGF4eSIsICIyNDAwIn0sIHsiaGFtc2EiLCAiMjQwMCJ9LCB7ImRuYSIsICIyMTAwIn0sCgkJeyJnZW5pZSIsICI4In0sIHsiaGVhcnQtb3JnYW4iLCAiNDAifSwgeyJtYWdlIiwgIjUwIn0sIHsibW9uYXJjaCIsICI2MCJ9LAoJCXsibmluamEiLCAiNDAifSwgeyJicmFpbiIsICIzMCJ9LCB7ImxvdHVzLXNpdCIsICI0MCJ9LAoJCXsibGlvbiIsICI2MCJ9LCB7InRpZ2VyIiwgIjgwIn0sIHsiZWFnbGUiLCAiODAifSwgeyJ3b2xmIiwgIjEwMCJ9LCB7InNoYXJrIiwgIjEyMCJ9LAoJfSwKCSJxdWFzYXIiOiB7CgkJeyJ1bmljb3JuIiwgIjM0NTAifSwgeyJwZWFjb2NrIiwgIjMzMDAifSwgeyJqZWxseSIsICIzMzAwIn0sIHsibG90dXMiLCAiMjU1MCJ9LCB7ImdhbGF4eSIsICIyODUwIn0sIHsiZHJhZ29uIiwgIjI1NTAifSwKCQl7ImZpcmV3b3JrcyIsICIzMCJ9LCB7Im1lZGFsIiwgIjI1In0sIHsic3BvcnRzLW1lZGFsIiwgIjQwIn0sIHsic2lsdmVyLW1lZGFsIiwgIjUwIn0sIHsiYnJvbnplLW1lZGFsIiwgIjYwIn0sCgkJeyJ0b3dlciIsICI4MCJ9LCB7ImhvdC1zcHJpbmciLCAiMTAwIn0sIHsicGlyYXRlIiwgIjYwIn0sCgkJeyJmYWlyeSIsICI4MCJ9LCB7InZhbXBpcmUiLCAiODAifSwKCQl7ImhlbGkiLCAiNDAifSwgeyJidWxsZXQiLCAiNTAifSwgeyJyYWNlIiwgIjgwIn0sCgl9LAoJInZvaWQiOiB7CgkJeyJsb3R1cyIsICIzNjAwIn0sIHsidW5pY29ybiIsICI0MzUwIn0sIHsiZHJhZ29uIiwgIjQyMDAifSwgeyJwZWFjb2NrIiwgIjQzNTAifSwgeyJqZWxseSIsICI0NTAwIn0sIHsiZ2FsYXh5IiwgIjE1MDAifSwKCQl7Im9tIiwgIjE1In0sIHsieWluIiwgIjE1In0sIHsidHJpZGVudCIsICIyMCJ9LCB7ImZsZXVyIiwgIjIwIn0sIHsib3BoaXVjaHVzIiwgIjE4In0sCgkJeyJzaG9vdGluZyIsICIyNSJ9LCB7InN1bi1mYWNlIiwgIjMwIn0sIHsiZHJhZ29uLWZhY2UiLCAiNDAifSwgeyJyZXgiLCAiMzUifSwgeyJzYXVyb3BvZCIsICI0MCJ9LAoJCXsibWFtbW90aCIsICI0NSJ9LCB7Im5ldy1mYWNlIiwgIjM1In0sCgkJeyJrYWFiYSIsICIxOCJ9LAoJCXsid2l0bmVzcyIsICIxMiJ9LCB7ImdlbmllIiwgIjEyIn0sCgl9LAoJImdlbmVzaXMiOiB7CgkJeyJsb3R1cyIsICI1NDAwIn0sIHsiZHJhZ29uIiwgIjU0MDAifSwgeyJ1bmljb3JuIiwgIjUyNTAifSwgeyJwZWFjb2NrIiwgIjQ5NTAifSwgeyJqZWxseSIsICI0ODAwIn0sIHsiaW5maW5pdHkiLCAiNDIwMCJ9LAoJCXsiZ2VuaWUiLCAiMTIifSwgeyJ3aXRuZXNzIiwgIjE1In0sCgkJeyJzdW4tZmFjZSIsICI0MCJ9LCB7InNob290aW5nIiwgIjMwIn0sIHsiZHJhZ29uLWZhY2UiLCAiNTAifSwKCQl7Im9tIiwgIjIwIn0sIHsieWluIiwgIjIwIn0sIHsidHJpZGVudCIsICIyNSJ9LCB7ImZsZXVyIiwgIjI1In0sCgkJeyJrYWFiYSIsICIyMCJ9LAoJCXsicmV4IiwgIjQwIn0sIHsic2F1cm9wb2QiLCAiNDUifSwgeyJtYW1tb3RoIiwgIjUwIn0sCgkJeyJuZXctZmFjZSIsICI0MCJ9LAoJCXsibGlvbiIsICI4MCJ9LCB7InNoYXJrIiwgIjE1MCJ9LAoJfSwKCSJvbWVnYSI6IHsKCQl7ImxvdHVzIiwgIjY5MDAifSwgeyJkcmFnb24iLCAiNjYwMCJ9LCB7InVuaWNvcm4iLCAiNjMwMCJ9LCB7InBlYWNvY2siLCAiNjAwMCJ9LCB7ImplbGx5IiwgIjYwMDAifSwgeyJpbmZpbml0eSIsICI1NzAwIn0sCgkJeyJnZW5pZSIsICIxOCJ9LAoJCXsid2l0bmVzcyIsICIyMCJ9LAoJCXsic3VuLWZhY2UiLCAiNTAifSwKCQl7InNob290aW5nIiwgIjQwIn0sCgkJeyJkcmFnb24tZmFjZSIsICI2MCJ9LAoJCXsib20iLCAiMjUifSwKCQl7InlpbiIsICIyNSJ9LAoJCXsidHJpZGVudCIsICIzMCJ9LAoJCXsiZmxldXIiLCAiMzAifSwKCQl7Im9waGl1Y2h1cyIsICIyNSJ9LAoJCXsia2FhYmEiLCAiMjUifSwKCQl7InJleCIsICI1MCJ9LAoJCXsic2F1cm9wb2QiLCAiNTUifSwKCQl7Im1hbW1vdGgiLCAiNjAifSwKCQl7Im5ldy1mYWNlIiwgIjUwIn0sCgkJeyJtYWdlIiwgIjgwIn0sCgkJeyJoZWFydC1vcmdhbiIsICI2MCJ9LAoJCXsic2F0IiwgIjEwMCJ9LAoJfSwKfQoKLy8gc2tpbGxCYXNlQ29zdHMgbWFwcyBza2lsbElkIOKGkiBiYXNlIGNvc3QgYXQgcmFuayAwLgovLyBBY3R1YWwgY29zdCBhdCByYW5rIE4gPSBiYXNlIMOXIDJeTiAoZG91YmxlcyBwZXIgcmFuaykuCnZhciBza2lsbEJhc2VDb3N0cyA9IG1hcFtzdHJpbmddW11bMl1zdHJpbmd7CgkvLyBTVFJJS0UgYnJhbmNoCgkid3Jpc3QiOiAgICAgICAgICAgICAgIHt7ImdyaW4iLCAiODAifSwgeyJqb3kiLCAiMjAifX0sCgkicGFsbV9zdHJpa2UiOiAgICAgICAgIHt7ImNvb2wiLCAiNjAifSwgeyJ0aGluayIsICI0MCJ9fSwKCSJmb2xsb3ciOiAgICAgICAgICAgICAge3siZmlyZSIsICI0MCJ9LCB7InVwIiwgIjQwIn19LAoJImtudWNrbGVfd3JhcCI6ICAgICAgICB7eyJyb2NrIiwgIjQ1In0sIHsibG9nIiwgIjQwIn19LAoJImhlYXZ5X3N3aW5nIjogICAgICAgICB7eyJicmljayIsICIzNSJ9LCB7ImV2ZXJncmVlbiIsICIzMCJ9fSwKCSJzdG9uZV9icmVha2VyIjogICAgICAge3sicm9jayIsICI3MCJ9LCB7ImhhbW1lciIsICIyNSJ9LCB7ImdlYXIiLCAiMjAifX0sCgkiYW52aWxfZm9yY2UiOiAgICAgICAgIHt7ImNoYWlucyIsICIzNSJ9LCB7IndyZW5jaCIsICIzMCJ9LCB7ImJyaWNrIiwgIjYwIn19LAoJInBvaW50X2RyaXZlIjogICAgICAgICB7eyJwaWNrIiwgIjM1In0sIHsiZ2VhciIsICI0MCJ9LCB7ImxvZyIsICI5MCJ9fSwKCSJraW5ldGljX3RocnVzdCI6ICAgICAge3sicm9ja2V0IiwgIjIwIn0sIHsiYm9sdCIsICIxMiJ9LCB7ImZpcmUiLCAiNzAifX0sCgkiY3J1c2hpbmdfYmxvdyI6ICAgICAgIHt7ImNyb3duIiwgIjEwIn0sIHsidHJvcGh5IiwgIjEyIn0sIHsiaGFtbWVyIiwgIjQ1In0sIHsiYm9sdCIsICIxNSJ9fSwKCSJzaGF0dGVyX3NwaWtlIjogICAgICAge3sic3dvcmQiLCAiMTgifSwgeyJwaWNrIiwgIjQ1In0sIHsiY2hhaW5zIiwgIjQ1In0sIHsiZ29sZC1tZWRhbCIsICIxMiJ9fSwKCSJpcm9uY2xhZF9jbGVhdmUiOiAgICAge3siYW5jaG9yIiwgIjQwIn0sIHsiZ2VhciIsICI2MCJ9LCB7IndyZW5jaCIsICI1MCJ9LCB7Im1vbmV5LWJhZyIsICIxNSJ9fSwKCSJ0aHVuZGVyX2phYiI6ICAgICAgICAge3siYm9sdCIsICIyNSJ9LCB7InJvY2tldCIsICIzMCJ9LCB7ImZpcmUiLCAiMTIwIn0sIHsid2FuZCIsICIxNSJ9fSwKCSJ0aXRhbl9oYW1tZXIiOiAgICAgICAge3siZ2VtIiwgIjE0In0sIHsiY29pbiIsICIxOCJ9LCB7ImNyb3duIiwgIjIyIn0sIHsidHJvcGh5IiwgIjIyIn0sIHsic3dvcmQiLCAiMjgifX0sCgkiZGlhbW9uZF9jbGVhdmUiOiAgICAgIHt7ImdlbSIsICIyMCJ9LCB7InJpbmciLCAiMTIifSwgeyJkaXNjbyIsICIxNSJ9LCB7InBpY2siLCAiNzAifSwgeyJnb2xkLW1lZGFsIiwgIjI0In19LAoJImh5cGVyX2RyaXZlIjogICAgICAgICB7eyJraXRlIiwgIjE1In0sIHsiZG9kbyIsICIxMiJ9LCB7ImJvbHQiLCAiMzUifSwgeyJyb2NrZXQiLCAiNDUifSwgeyJnZWFyIiwgIjcwIn19LAoJInF1YXNhcl9pbXBhY3QiOiAgICAgICB7eyJnYWxheHkiLCAiMTgifSwgeyJtb2FpIiwgIjE4In0sIHsiYXRvbSIsICIyMCJ9LCB7InVmbyIsICIxNiJ9LCB7ImNvbWV0IiwgIjE4In19LAoJImJsYWNrX2hvbGVfY3J1c2giOiAgICB7eyJnYWxheHkiLCAiMzAifSwgeyJhdG9tIiwgIjI4In0sIHsibW9haSIsICIyNCJ9LCB7ImdlbSIsICIzNSJ9LCB7InJpbmciLCAiMjgifSwgeyJjb21ldCIsICIyMiJ9fSwKCSJteXRoaWNfYW5uaWhpbGF0aW9uIjoge3siZHJhZ29uIiwgIjgifSwgeyJ1bmljb3JuIiwgIjEwIn0sIHsiamVsbHkiLCAiMTIifSwgeyJwZWFjb2NrIiwgIjEyIn0sIHsiZ2FsYXh5IiwgIjM1In0sIHsibW9haSIsICIzMCJ9fSwKCSJzaW5ndWxhcml0eV9maXN0IjogICAge3siaW5maW5pdHkiLCAiNiJ9LCB7ImxvdHVzIiwgIjgifSwgeyJkcmFnb24iLCAiMTAifSwgeyJ1bmljb3JuIiwgIjEyIn0sIHsiamVsbHkiLCAiMTQifSwgeyJnYWxheHkiLCAiNDAifX0sCgkvLyBGT1JUVU5FIGJyYW5jaAoJImZvcnR1bmUiOiAgICAgICAgICAgICB7eyJjbG92ZXIiLCAiMTYifSwgeyJoZWFydCIsICI0MCJ9fSwKCSJmb3VyX2xlYWYiOiAgICAgICAgICAge3sic2VlZGxpbmciLCAiNjAifSwgeyJsZWF2ZXMiLCAiNTAifX0sCgkiZWRnZSI6ICAgICAgICAgICAgICAgIHt7InBpenphIiwgIjIwIn0sIHsic3BhcmsiLCAiMzAifX0sCgkiZ2xpbnQiOiAgICAgICAgICAgICAgIHt7InNwYXJrIiwgIjUwIn0sIHsic3RhciIsICIxMiJ9fSwKCSJzcGFya19jaGFzZXIiOiAgICAgICAge3siZmlyZSIsICI0NSJ9LCB7InRhZGEiLCAiMjUifX0sCgkicmF6b3JfZm9jdXMiOiAgICAgICAgIHt7ImNvZmZlZSIsICIyNSJ9LCB7ImdhbWUiLCAiMjUifSwgeyJodW5kcmVkIiwgIjMwIn19LAoJInByZWNpc2lvbl9jdXQiOiAgICAgICB7eyJleWVzIiwgIjQwIn0sIHsic2t1bGwiLCAiMzUifSwgeyJmbHV0dGVyIiwgIjE4In19LAoJImF1cm9yYV9nYXplIjogICAgICAgICB7eyJyYWluYm93IiwgIjE1In0sIHsic3BhcmsiLCAiNjAifSwgeyJtb29uIiwgIjIwIn19LAoJInN0YXJsaWdodF9nbGVhbSI6ICAgICB7eyJzdGFyIiwgIjI1In0sIHsiY2xvdmVyIiwgIjIwIn0sIHsiaGVhcnQiLCAiODAifX0sCgkiZG91YmxlX2hhdWwiOiAgICAgICAgIHt7ImdlYXIiLCAiMzAifSwgeyJhbmNob3IiLCAiMjAifSwgeyJ1cCIsICI3MCJ9fSwKCSJ0d2luX3N0cmlrZSI6ICAgICAgICAge3siY2hhaW5zIiwgIjI1In0sIHsid3JlbmNoIiwgIjI1In0sIHsicGljayIsICIyMCJ9fSwKCSJleGVjdXRpb25lciI6ICAgICAgICAge3sic2t1bGwiLCAiNjAifSwgeyJzd29yZCIsICIxOCJ9LCB7ImNyb3duIiwgIjEwIn0sIHsib3JiIiwgIjgifX0sCgkiY2VsZXN0aWFsX3NpZ2h0IjogICAgIHt7InBsYW5ldCIsICIxMCJ9LCB7Im1vb24iLCAiMzAifSwgeyJzdGFyIiwgIjMwIn0sIHsiYmVhZCIsICI4In19LAoJImhlbGl4X2hhcm1vbnkiOiAgICAgICB7eyJkbmEiLCAiMTIifSwgeyJzcGFyayIsICI4MCJ9LCB7InJhaW5ib3ciLCAiMjUifSwgeyJvcmIiLCAiMTAifX0sCgkiZm9ydHVuZV9zcGxpdCI6ICAgICAgIHt7Im1vbmV5LWJhZyIsICIxNSJ9LCB7ImdvbGQtbWVkYWwiLCAiMTIifSwgeyJjbG92ZXIiLCAiMzUifSwgeyJjaGFpbnMiLCAiNDAifX0sCgkiY3JpdGljYWxfc3VyZ2UiOiAgICAgIHt7ImdlbSIsICIxNSJ9LCB7ImRpc2NvIiwgIjE0In0sIHsicmluZyIsICIxMiJ9LCB7Im9yYiIsICIyMCJ9LCB7InBsYW5ldCIsICIxOCJ9fSwKCSJhc3RyYWxfc2NpbnRpbGxhdGlvbiI6IHt7InJpbmciLCAiMTQifSwgeyJnZW0iLCAiMTYifSwgeyJkbmEiLCAiMjAifSwgeyJzdGFyIiwgIjYwIn0sIHsibW9vbiIsICI1MCJ9fSwKCSJwbHVuZGVyX2ZyZW56eSI6ICAgICAge3siY29pbiIsICIyNSJ9LCB7Im1vbmV5LWJhZyIsICIzMCJ9LCB7ImdlbSIsICIxMiJ9LCB7ImNyb3duIiwgIjI1In0sIHsidHJvcGh5IiwgIjI1In19LAoJInNpbmd1bGFyaXR5X2VkZ2UiOiAgICB7eyJsb3R1cyIsICI2In0sIHsiZHJhZ29uIiwgIjgifSwgeyJnYWxheHkiLCAiMjUifSwgeyJoYW1zYSIsICIyMCJ9LCB7ImF0b20iLCAiMjIifSwgeyJtaXJyb3IiLCAiMjAifX0sCgkiY29zbWljX2ZvcnR1bmUiOiAgICAgIHt7InBlYWNvY2siLCAiMTAifSwgeyJ1bmljb3JuIiwgIjgifSwgeyJjb21ldCIsICIyNSJ9LCB7ImRpc2NvIiwgIjMwIn0sIHsiZ2FsYXh5IiwgIjMwIn0sIHsiZ2VtIiwgIjM1In19LAoJLy8gUE9DS0VUIGJyYW5jaAoJImR1c3RiYWciOiAgICAgICAgICAgICB7eyJncmluIiwgIjIwMCJ9LCB7InNsZWVwIiwgIjQwIn19LAoJInJoeXRobSI6ICAgICAgICAgICAgICB7eyJtdXNpYyIsICIxNiJ9LCB7ImNsYXAiLCAiMzAifX0sCgkicG9ja2V0X2V4cGFuc2lvbiI6ICAgIHt7ImZhbGxlbiIsICI0NSJ9LCB7ImhlcmIiLCAiMzUifX0sCgkic3RlYWR5X3RlbXBvIjogICAgICAgIHt7InBhcnR5IiwgIjQwIn0sIHsid293IiwgIjMwIn19LAoJImNhZGVuY2UiOiAgICAgICAgICAgICB7eyJtdXNpYyIsICIzMCJ9LCB7ImNvZmZlZSIsICIyMCJ9LCB7ImNsYXAiLCAiNTAifX0sCgkiZGVlcF9wb3VjaCI6ICAgICAgICAgIHt7ImxvZyIsICI3MCJ9LCB7InJvY2siLCAiNjAifSwgeyJtdXNocm9vbSIsICIzNSJ9fSwKCSJ2ZWluX3Jlc29uYXRvciI6ICAgICAge3siZmx1dHRlciIsICIyMCJ9LCB7InJhaW5ib3ciLCAiMTUifSwgeyJ0YWRhIiwgIjQwIn19LAoJImNhcnRfYmVkIjogICAgICAgICAgICB7eyJsb2ciLCAiMTIwIn0sIHsicm9jayIsICIxMDAifSwgeyJicmljayIsICI4MCJ9LCB7Im1vbmV5LWJhZyIsICIxMCJ9fSwKCSJib3VudHlfb3ZlcmZsb3ciOiAgICAge3sidHJvcGh5IiwgIjE1In0sIHsiY3Jvd24iLCAiMTIifSwgeyJwaWNrIiwgIjQ1In0sIHsiZ2FtZSIsICIzNSJ9fSwKCSJmcmFjdHVyZV9wdWxzZSI6ICAgICAge3siYm9sdCIsICIyNSJ9LCB7IndhbmQiLCAiMTUifSwgeyJoYW1tZXIiLCAiNTAifSwgeyJyb2NrZXQiLCAiMjUifX0sCgkibWV0cm9fcHVsc2UiOiAgICAgICAgIHt7Im11c2ljIiwgIjQ1In0sIHsiY29mZmVlIiwgIjM1In0sIHsicmFpc2UiLCAiMzAifSwgeyJib2x0IiwgIjE1In19LAoJImhvYXJkZXJzX3RvdGUiOiAgICAgICB7eyJjb2luIiwgIjIyIn0sIHsiZ2VtIiwgIjEwIn0sIHsibW9uZXktYmFnIiwgIjM1In0sIHsicm9jayIsICIxNTAifSwgeyJsb2ciLCAiMTUwIn19LAoJInNoYXR0ZXJfc3RyaWtlIjogICAgICB7eyJnZW0iLCAiMTQifSwgeyJib2x0IiwgIjM1In0sIHsid2FuZCIsICIyNSJ9LCB7InN3b3JkIiwgIjMwIn0sIHsiaGFtbWVyIiwgIjYwIn19LAoJInN1cGVyX2NvbmR1Y3RvciI6ICAgICB7eyJjb2luIiwgIjIwIn0sIHsicmluZyIsICIxMiJ9LCB7Im11c2ljIiwgIjYwIn0sIHsiYm9sdCIsICIzMCJ9LCB7ImNvZmZlZSIsICI1MCJ9fSwKCSJkb2RvX2luc3RpbmN0IjogICAgICAge3siZG9kbyIsICIxNCJ9LCB7ImtpdGUiLCAiMTQifSwgeyJjcm93biIsICIyMiJ9LCB7InRyb3BoeSIsICIyMiJ9LCB7ImV5ZXMiLCAiODAifX0sCgkidm9pZF9yZW5kIjogICAgICAgICAgIHt7ImluZmluaXR5IiwgIjYifSwgeyJqZWxseSIsICIxMiJ9LCB7ImRyYWdvbiIsICI4In0sIHsiYXRvbSIsICIzMCJ9LCB7ImNvbWV0IiwgIjI1In0sIHsiYm9sdCIsICI2MCJ9fSwKCSJjZWxlc3RpYWxfZHVwbGljYXRpb24iOiB7eyJpbmZpbml0eSIsICI1In0sIHsibG90dXMiLCAiNiJ9LCB7ImRyYWdvbiIsICI4In0sIHsicGVhY29jayIsICIxMCJ9LCB7ImNvaW4iLCAiNDAifSwgeyJnZW0iLCAiMzUifX0sCgkiZXRlcm5pdHlfZmxvdyI6ICAgICAgIHt7ImluZmluaXR5IiwgIjUifSwgeyJsb3R1cyIsICI2In0sIHsicGVhY29jayIsICI4In0sIHsiaGFtc2EiLCAiMjUifSwgeyJtaXJyb3IiLCAiMjUifSwgeyJtdXNpYyIsICIxMDAifX0sCgkiYWJ5c3NhbF9yZXNlcnZlIjogICAgIHt7InVuaWNvcm4iLCAiNiJ9LCB7ImplbGx5IiwgIjEwIn0sIHsibW9haSIsICIyNSJ9LCB7InVmbyIsICIyNSJ9LCB7Im1vbmV5LWJhZyIsICI1MCJ9LCB7InJvY2siLCAiMzAwIn19LAoJInNpbmd1bGFyaXR5X3NuYXAiOiAgICB7eyJpbmZpbml0eSIsICI4In0sIHsibG90dXMiLCAiOCJ9LCB7ImRyYWdvbiIsICIxMCJ9LCB7ImdhbGF4eSIsICI0MCJ9LCB7Im1vYWkiLCAiMzAifSwgeyJib2x0IiwgIjgwIn19LAoKCS8vIOKUgOKUgCBQaGFzZSA1OiBOYXR1cmUgYnJhbmNoIChsZXZlbCAyMCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgkiZGVlcF9yb290IjogICAgICAge3siYmVhciIsICI2MCJ9LCB7ImZveCIsICI0MCJ9fSwKCSJzdG9uZV9zZW5zZSI6ICAgICB7eyJ0dXJ0bGUiLCAiMzAifSwgeyJjb3JhbCIsICIxNSJ9fSwKCSJibG9vbV90aWRlIjogICAgICB7eyJzYWt1cmEiLCAiMjAifSwgeyJiZWUiLCAiNTAifSwgeyJkZWNpZHVvdXMiLCAiODAifX0sCgkidGhvcm5faGlkZSI6ICAgICAge3siYm9hciIsICI0MCJ9LCB7InNuYWtlIiwgIjMwIn0sIHsic2NvcnBpb24iLCAiMjAifX0sCgkib2xkX2dyb3d0aCI6ICAgICAge3siZWxlcGhhbnQiLCAiMjUifSwgeyJnb3JpbGxhIiwgIjIwIn0sIHsid2hhbGUtc3BvdXQiLCAiMTUifX0sCgkic3Rvcm1fc3VyZ2UiOiAgICAge3sic3Rvcm0iLCAiMjUifSwgeyJsaWdodG5pbmctY2xvdWQiLCAiMjAifSwgeyJ0b3JuYWRvIiwgIjE1In19LAoJInByZWRhdG9yX3NlbnNlIjogIHt7InRpZ2VyIiwgIjIwIn0sIHsibGlvbiIsICIyMCJ9LCB7IndvbGYiLCAiMjAifSwgeyJlYWdsZSIsICIxNSJ9fSwKCSJ3b3JsZF90cmVlIjogICAgICB7eyJyZXgiLCAiMTIifSwgeyJtYW1tb3RoIiwgIjEwIn0sIHsiZHJhZ29uLWZhY2UiLCAiOCJ9LCB7InNob290aW5nIiwgIjgifX0sCgoJLy8g4pSA4pSAIFBoYXNlIDU6IEZvb2QgYnJhbmNoIChsZXZlbCAzMCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgkiaG90X21lYWwiOiAgICAge3sicmFtZW4iLCAiNTAifSwgeyJzdGV3IiwgIjQwIn19LAoJInN1Z2FyX3J1c2giOiAgIHt7ImNhbmR5IiwgIjYwIn0sIHsiY3VwY2FrZSIsICI0MCJ9LCB7ImRvbnV0IiwgIjMwIn19LAoJInNlY29uZF93aW5kIjogIHt7ImJ1cmdlciIsICI1MCJ9LCB7ImJhY29uIiwgIjQwIn0sIHsiY2hlZXNlIiwgIjMwIn19LAoJImNhZmZlaW5hdGVkIjogIHt7ImJvYmEiLCAiNDAifSwgeyJ0ZWEiLCAiMzAifSwgeyJzYWtlIiwgIjI1In19LAoJImZlYXN0X21vZGUiOiAgIHt7InN1c2hpIiwgIjMwIn0sIHsiY3VycnkiLCAiNDAifSwgeyJwYXN0YSIsICI0MCJ9LCB7InBhZWxsYSIsICIyNSJ9fSwKCSJuaWdodF9zaGlmdCI6ICB7eyJob25leSIsICIzMCJ9LCB7InBpZSIsICIyNSJ9LCB7ImNha2UiLCAiMjAifX0sCgkiYnJld19tYXN0ZXJ5Ijoge3siYmVlciIsICI0MCJ9LCB7IndpbmUiLCAiMzAifSwgeyJjb2NrdGFpbCIsICIyMCJ9LCB7ImNoYW1wYWduZSIsICIxNSJ9fSwKCSJteXRoaWNfZmVhc3QiOiB7eyJ0cm9waWNhbC1kcmluayIsICIyMCJ9LCB7ImNoZWVycyIsICIxNSJ9LCB7InRvYXN0IiwgIjEyIn0sIHsibWF0ZSIsICIxMiJ9fSwKCgkvLyDilIDilIAgUGhhc2UgNTogUGVvcGxlIGJyYW5jaCAobGV2ZWwgNDApIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoJIm1lbnRvciI6ICAgICAgICB7eyJiYWJ5IiwgIjYwIn0sIHsiY2hpbGQiLCAiNTAifX0sCgkiY3Jvd2RfZmF2b3IiOiAgIHt7ImNsYXAiLCAiODAifSwgeyJoZWFydC1oYW5kcyIsICI2MCJ9fSwKCSJ0ZWFtX3NwaXJpdCI6ICAge3sic2hha2UiLCAiNDAifSwgeyJwcmF5IiwgIjMwIn0sIHsiaHVnLXBhaXIiLCAiMzAifX0sCgkiYXRobGV0ZV9oZWFydCI6IHt7InN1cmYiLCAiMzAifSwgeyJzd2ltIiwgIjMwIn0sIHsicnVuIiwgIjQwIn0sIHsibGlmdCIsICIyNSJ9fSwKCSJ3YXJyaW9yX2NvZGUiOiAge3sibmluamEiLCAiMjAifSwgeyJmZW5jZXIiLCAiMTUifSwgeyJqdWdnbGUiLCAiMTUifX0sCgkiZWxkZXJfd2lzZG9tIjogIHt7Im1vbmFyY2giLCAiMTUifSwgeyJtYWdlIiwgIjE1In0sIHsiZmFpcnkiLCAiMTIifX0sCgkiaGVyb19sZWdlbmQiOiAgIHt7Imhlcm8iLCAiMTIifSwgeyJ2YW1waXJlIiwgIjEwIn0sIHsibWVyZm9sayIsICIxMCJ9fSwKCSJnZW5pZV93aXNoIjogICAge3siZ2VuaWUiLCAiOCJ9LCB7ImhlYXJ0LW9yZ2FuIiwgIjEyIn19LAoKCS8vIOKUgOKUgCBQaGFzZSA1OiBUaGluZ3MgYnJhbmNoIChsZXZlbCA1MCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgkidGVtcGVyZWRfZ3JpcCI6ICAge3siZ2xvdmVzIiwgIjgwIn0sIHsiaGFtbWVyIiwgIjYwIn19LAoJImZpZWxkX3JlcGFpciI6ICAgIHt7ImhhbW1lci13cmVuY2giLCAiNDAifSwgeyJzYXciLCAiMzAifSwgeyJudXQiLCAiNTAifX0sCgkibWFzdGVyX2NyYWZ0IjogICAge3sid3JlbmNoIiwgIjYwIn0sIHsiZHJpdmVyIiwgIjUwIn0sIHsiY2xhbXAiLCAiMzAifX0sCgkid29ya3Nob3BfbG9yZSI6ICAge3sidG9vbGJveCIsICIzMCJ9LCB7ImFiYWN1cyIsICIyNSJ9LCB7InNjcm9sbCIsICIyMCJ9fSwKCSJpcm9uX2Rpc2NpcGxpbmUiOiB7eyJheGUiLCAiMzAifSwgeyJkYWdnZXIiLCAiMjAifSwgeyJib3ciLCAiMTUifX0sCgkidmF1bHRfa2VlcGVyIjogICAge3sibG9jayIsICI0MCJ9LCB7ImtleS1sb2NrIiwgIjMwIn0sIHsib2xkLWtleSIsICIxNSJ9fSwKCSJwcmVjaXNpb25fZm9yZ2UiOiB7eyJzY29wZSIsICIyMCJ9LCB7InRlbGVzY29wZSIsICIxNSJ9LCB7InR1YmUiLCAiMTgifSwgeyJkaXNoIiwgIjE1In19LAoJImRlZXBfc2NpZW5jZSI6ICAgIHt7ImFsZW1iaWMiLCAiMTIifSwgeyJzaGllbGQiLCAiMTUifSwgeyJoYW1tZXItcGljayIsICIxNSJ9LCB7InNjYWxlIiwgIjEyIn19LAoKCS8vIOKUgOKUgCBQaGFzZSA1OiBUcmF2ZWwgYnJhbmNoIChsZXZlbCA2NSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgkibG9uZ19oYXVsIjogICAgICB7eyJjYXIiLCAiODAifSwgeyJidXMiLCAiNjAifX0sCgkidmVpbl9jb21wYXNzIjogICB7eyJwbGFuZSIsICI1MCJ9LCB7InNhaWwiLCAiMzAifX0sCgkibm9tYWRfcGFjZSI6ICAgICB7eyJtb3RvIiwgIjQwIn0sIHsiY3ljbGUiLCAiNTAifSwgeyJzY29vdGVyIiwgIjQwIn19LAoJImRlZXBfc2VhIjogICAgICAge3sic2hpcCIsICIzMCJ9LCB7IndoYWxlLXNwb3V0IiwgIjE1In0sIHsiZG9scGhpbiIsICIyNSJ9fSwKCSJza3lfcm91dGUiOiAgICAgIHt7InJvY2tldCIsICIzMCJ9LCB7ImhlbGkiLCAiMjAifSwgeyJkZXBhcnQiLCAiMjAifX0sCgkibW9udW1lbnRfc2VhbCI6ICB7eyJ0b3dlciIsICIyMCJ9LCB7ImNhc3RsZSIsICIxNSJ9LCB7ImxpYmVydHkiLCAiMTIifX0sCgkib3JiaXRhbF9kcmlmdCI6ICB7eyJzYXQiLCAiMTUifSwgeyJjYXN0bGUtanAiLCAiMTIifX0sCgkic2FjcmVkX2dyb3VuZCI6ICB7eyJrYWFiYSIsICI4In0sIHsic2hyaW5lIiwgIjEwIn0sIHsidGVtcGxlIiwgIjEwIn0sIHsibW9zcXVlIiwgIjEwIn19LAoKCS8vIOKUgOKUgCBQaGFzZSA1OiBTaWducyBicmFuY2ggKGxldmVsIDgwKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCSJhbXBsaWZ5IjogICAgICAge3sic3BhcmtsZSIsICI4MCJ9LCB7ImVpZ2h0LXN0YXIiLCAiNjAifX0sCgkicmVzb25hbmNlIjogICAgIHt7InJlY3ljbGUiLCAiNjAifSwgeyJtZWRpY2FsIiwgIjUwIn19LAoJInNpZ2lsX3Bvd2VyIjogICB7eyJ3b3JzaGlwIiwgIjQwIn0sIHsicGVhY2Utc2lnbiIsICIzMCJ9fSwKCSJ6b2RpYWNfZWRnZSI6ICAge3siYXJpZXMiLCAiMjAifSwgeyJ0YXVydXMiLCAiMjAifSwgeyJnZW1pbmkiLCAiMjAifSwgeyJjYW5jZXIiLCAiMTUifX0sCgkic3Rhcl9kYXZpZCI6ICAgIHt7InN0YXItZGF2aWQiLCAiMTUifSwgeyJkaGFybWEiLCAiMTUifSwgeyJjcm9zcyIsICIxNSJ9LCB7Im1lbm9yYWgiLCAiMTIifX0sCgkiaGF6YXJkX2ZvcmdlIjogIHt7InJhZGlvYWN0aXZlIiwgIjEyIn0sIHsiYmlvaGF6YXJkIiwgIjEyIn19LAoJImNvc21pY19zaWdpbCI6ICB7eyJ0cmlkZW50IiwgIjEwIn0sIHsiZmxldXIiLCAiMTAifSwgeyJvcGhpdWNodXMiLCAiOCJ9fSwKCSJpbmZpbml0ZV9tYXJrIjoge3sib20iLCAiOCJ9LCB7InlpbiIsICI4In0sIHsid2l0bmVzcyIsICI2In19LAp9CgovLyBza2lsbE1heFJhbmtzIG1hcHMgc2tpbGxJZCDihpIgbWF4aW11bSByYW5rIGFsbG93ZWQuCi8vIE1vc3Qgc2tpbGxzIGNhcCBhdCAzIG9yIDQg4oCUIHNlZSBjYXRhbG9nLnRzIFNLSUxMU1sqXS5tYXguCnZhciBza2lsbE1heFJhbmtzID0gbWFwW3N0cmluZ111aW50NjR7CgkvLyBTdHJpa2UgYnJhbmNoCgkid3Jpc3QiOiA1LCAicGFsbV9zdHJpa2UiOiA0LCAiZm9sbG93IjogMywgImtudWNrbGVfd3JhcCI6IDQsICJoZWF2eV9zd2luZyI6IDQsCgkic3RvbmVfYnJlYWtlciI6IDQsICJhbnZpbF9mb3JjZSI6IDQsICJwb2ludF9kcml2ZSI6IDQsICJraW5ldGljX3RocnVzdCI6IDQsCgkiY3J1c2hpbmdfYmxvdyI6IDQsICJzaGF0dGVyX3NwaWtlIjogNCwgImlyb25jbGFkX2NsZWF2ZSI6IDMsICJ0aHVuZGVyX2phYiI6IDMsCgkidGl0YW5faGFtbWVyIjogMywgImRpYW1vbmRfY2xlYXZlIjogMywgImh5cGVyX2RyaXZlIjogMywgInF1YXNhcl9pbXBhY3QiOiAzLAoJImJsYWNrX2hvbGVfY3J1c2giOiAzLCAibXl0aGljX2FubmloaWxhdGlvbiI6IDMsICJzaW5ndWxhcml0eV9maXN0IjogMywKCS8vIEZvcnR1bmUgYnJhbmNoCgkiZm9ydHVuZSI6IDQsICJmb3VyX2xlYWYiOiAzLCAiZWRnZSI6IDMsICJnbGludCI6IDMsICJzcGFya19jaGFzZXIiOiAzLAoJInJhem9yX2ZvY3VzIjogMywgInByZWNpc2lvbl9jdXQiOiAzLCAiYXVyb3JhX2dhemUiOiAzLCAic3RhcmxpZ2h0X2dsZWFtIjogMywKCSJkb3VibGVfaGF1bCI6IDMsICJ0d2luX3N0cmlrZSI6IDMsICJleGVjdXRpb25lciI6IDMsICJjZWxlc3RpYWxfc2lnaHQiOiAzLAoJImhlbGl4X2hhcm1vbnkiOiAzLCAiZm9ydHVuZV9zcGxpdCI6IDMsICJjcml0aWNhbF9zdXJnZSI6IDMsCgkiYXN0cmFsX3NjaW50aWxsYXRpb24iOiAzLCAicGx1bmRlcl9mcmVuenkiOiAzLCAic2luZ3VsYXJpdHlfZWRnZSI6IDMsICJjb3NtaWNfZm9ydHVuZSI6IDMsCgkvLyBQb2NrZXQgYnJhbmNoCgkiZHVzdGJhZyI6IDMsICJyaHl0aG0iOiAzLCAicG9ja2V0X2V4cGFuc2lvbiI6IDMsICJzdGVhZHlfdGVtcG8iOiAzLCAiY2FkZW5jZSI6IDMsCgkiZGVlcF9wb3VjaCI6IDMsICJ2ZWluX3Jlc29uYXRvciI6IDMsICJjYXJ0X2JlZCI6IDMsICJib3VudHlfb3ZlcmZsb3ciOiAzLAoJImZyYWN0dXJlX3B1bHNlIjogMywgIm1ldHJvX3B1bHNlIjogMywgImhvYXJkZXJzX3RvdGUiOiAzLCAic2hhdHRlcl9zdHJpa2UiOiAzLAoJInN1cGVyX2NvbmR1Y3RvciI6IDMsICJkb2RvX2luc3RpbmN0IjogMywgInZvaWRfcmVuZCI6IDMsICJjZWxlc3RpYWxfZHVwbGljYXRpb24iOiAzLAoJImV0ZXJuaXR5X2Zsb3ciOiAzLCAiYWJ5c3NhbF9yZXNlcnZlIjogMywgInNpbmd1bGFyaXR5X3NuYXAiOiAzLAoJLy8gUGhhc2UgNSDigJQgTmF0dXJlIGJyYW5jaCAodW5sb2NrcyBsZXZlbCAyMCkKCSJkZWVwX3Jvb3QiOiAzLCAic3RvbmVfc2Vuc2UiOiAzLCAiYmxvb21fdGlkZSI6IDMsICJ0aG9ybl9oaWRlIjogMywKCSJvbGRfZ3Jvd3RoIjogMywgInN0b3JtX3N1cmdlIjogMywgInByZWRhdG9yX3NlbnNlIjogMywgIndvcmxkX3RyZWUiOiAzLAoJLy8gUGhhc2UgNSDigJQgRm9vZCBicmFuY2ggKHVubG9ja3MgbGV2ZWwgMzApCgkiaG90X21lYWwiOiAzLCAic3VnYXJfcnVzaCI6IDMsICJzZWNvbmRfd2luZCI6IDMsICJjYWZmZWluYXRlZCI6IDMsCgkiZmVhc3RfbW9kZSI6IDMsICJuaWdodF9zaGlmdCI6IDMsICJicmV3X21hc3RlcnkiOiAzLCAibXl0aGljX2ZlYXN0IjogMywKCS8vIFBoYXNlIDUg4oCUIFBlb3BsZSBicmFuY2ggKHVubG9ja3MgbGV2ZWwgNDApCgkibWVudG9yIjogMywgImNyb3dkX2Zhdm9yIjogMywgInRlYW1fc3Bpcml0IjogMywgImF0aGxldGVfaGVhcnQiOiAzLAoJIndhcnJpb3JfY29kZSI6IDMsICJlbGRlcl93aXNkb20iOiAzLCAiaGVyb19sZWdlbmQiOiAzLCAiZ2VuaWVfd2lzaCI6IDMsCgkvLyBQaGFzZSA1IOKAlCBUaGluZ3MgYnJhbmNoICh1bmxvY2tzIGxldmVsIDUwKQoJInRlbXBlcmVkX2dyaXAiOiAzLCAiZmllbGRfcmVwYWlyIjogMywgIm1hc3Rlcl9jcmFmdCI6IDMsICJ3b3Jrc2hvcF9sb3JlIjogMywKCSJpcm9uX2Rpc2NpcGxpbmUiOiAzLCAidmF1bHRfa2VlcGVyIjogMywgInByZWNpc2lvbl9mb3JnZSI6IDMsICJkZWVwX3NjaWVuY2UiOiAzLAoJLy8gUGhhc2UgNSDigJQgVHJhdmVsIGJyYW5jaCAodW5sb2NrcyBsZXZlbCA2NSkKCSJsb25nX2hhdWwiOiAzLCAidmVpbl9jb21wYXNzIjogMywgIm5vbWFkX3BhY2UiOiAzLCAiZGVlcF9zZWEiOiAzLAoJInNreV9yb3V0ZSI6IDMsICJtb251bWVudF9zZWFsIjogMywgIm9yYml0YWxfZHJpZnQiOiAzLCAic2FjcmVkX2dyb3VuZCI6IDMsCgkvLyBQaGFzZSA1IOKAlCBTaWducyBicmFuY2ggKHVubG9ja3MgbGV2ZWwgODApCgkiYW1wbGlmeSI6IDMsICJyZXNvbmFuY2UiOiAzLCAic2lnaWxfcG93ZXIiOiAzLCAiem9kaWFjX2VkZ2UiOiAzLAoJInN0YXJfZGF2aWQiOiAzLCAiaGF6YXJkX2ZvcmdlIjogMywgImNvc21pY19zaWdpbCI6IDMsICJpbmZpbml0ZV9tYXJrIjogMywKfQoKLy8gdG9vbE1heExpZmUgbWFwcyB0b29sSWQg4oaSIG1heGltdW0gZHVyYWJpbGl0eSAoZnJvbSBjYXRhbG9nLnRzIHRvb2wubGlmZSkuCi8vIFRvb2xzIHdpdGggbGlmZT0wIGFyZSBpbmRlc3RydWN0aWJsZSAoaGFuZHMsIHR3aWcpLgp2YXIgdG9vbE1heExpZmUgPSBtYXBbc3RyaW5nXXVpbnQ2NHsKCSJoYW5kcyI6IDAsICJ0d2lnIjogMCwgIndvb2QiOiAxMjAwLCAic3RvbmUiOiAyNTAwLCAiaXJvbiI6IDQwMDAsCgkiZ29sZCI6IDYwMDAsICJkaWFtb25kIjogODAwMCwgImNvc21pYyI6IDEwMDAwLCAicGxhc21hIjogMTAwMDAsCgkibmV1dHJvbiI6IDEwMDAwLCAicXVhc2FyIjogMTAwMDAsICJ2b2lkIjogMTIwMDAsICJnZW5lc2lzIjogMTUwMDAsICJvbWVnYSI6IDI1MDAwLAp9CgpmdW5jIGluaXQoY3VyIHJlYWxtKSB7CglhZG1pbiA9IGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKQp9CgovLyDilIDilIAgQWRtaW4g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgpmdW5jIGlzQWRtaW4oY3VyIHJlYWxtKSBib29sIHsKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkKCXJldHVybiBjYWxsZXIgPT0gYWRtaW4gfHwgKG1pbnRlckFkZHIgIT0gYWRkcmVzcygiIikgJiYgY2FsbGVyID09IG1pbnRlckFkZHIpCn0KCi8vIFNldE1pbnRlciByZWdpc3RlcnMgdGhlIGF1dGhvcml6ZWQgbWludGVyIHJlYWxtIGFkZHJlc3Mgc28gaXQgY2FuIGNhbGwKLy8gQ2xlYXJQZW5kaW5nTWludHMuIENhbGxlZCBvbmNlIGFmdGVyIG1pbnRlcjUgaXMgZGVwbG95ZWQuCmZ1bmMgU2V0TWludGVyKGN1ciByZWFsbSwgbmV3TWludGVyIHN0cmluZykgewoJaWYgY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpICE9IGFkbWluIHsKCQlwYW5pYygidW5hdXRob3JpemVkOiBvbmx5IGFkbWluIGNhbiBzZXQgbWludGVyIikKCX0KCW1pbnRlckFkZHIgPSBhZGRyZXNzKG5ld01pbnRlcikKfQoKZnVuYyBVcGRhdGVDb25maWcoY3VyIHJlYWxtLCBuZXdBZG1pbiBzdHJpbmcpIHsKCWlmICFpc0FkbWluKGN1cikgewoJCXBhbmljKCJ1bmF1dGhvcml6ZWQiKQoJfQoJYWRtaW4gPSBhZGRyZXNzKG5ld0FkbWluKQp9CgpmdW5jIFNldFBhdXNlZChjdXIgcmVhbG0sIHAgYm9vbCkgewoJaWYgIWlzQWRtaW4oY3VyKSB7CgkJcGFuaWMoInVuYXV0aG9yaXplZCIpCgl9CglwYXVzZWQgPSBwCn0KCmZ1bmMgcmVxdWlyZU5vdFBhdXNlZCgpIHsKCWlmIHBhdXNlZCB7CgkJcGFuaWMoImdhbWUgaXMgcGF1c2VkIikKCX0KfQoKLy8g4pSA4pSAIEJsYWNrbGlzdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCi8vIEJhbkFkZHJlc3MgYmFucyBhIHBsYXllciBhZGRyZXNzLiBkdXJhdGlvblNlY3M9MCBtZWFucyBwZXJtYW5lbnQuCmZ1bmMgQmFuQWRkcmVzcyhjdXIgcmVhbG0sIHRhcmdldEFkZHIgc3RyaW5nLCByZWFzb24gc3RyaW5nLCBkdXJhdGlvblNlY3MgaW50NjQpIHsKCWlmIGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKSAhPSBhZG1pbiB7CgkJcGFuaWMoInVuYXV0aG9yaXplZDogb25seSBhZG1pbiBjYW4gYmFuIikKCX0KCWlmICFzdHJpbmdzLkhhc1ByZWZpeCh0YXJnZXRBZGRyLCAiZzEiKSB7CgkJcGFuaWMoImludmFsaWQgYWRkcmVzcyIpCgl9CglleHBpcnkgOj0gaW50NjQoMCkgLy8gMCA9IHBlcm1hbmVudAoJaWYgZHVyYXRpb25TZWNzID4gMCB7CgkJZXhwaXJ5ID0gdGltZS5Ob3coKS5Vbml4KCkgKyBkdXJhdGlvblNlY3MKCX0KCXRpbWVzdGFtcCA6PSBzdHJjb252LkZvcm1hdEludCh0aW1lLk5vdygpLlVuaXgoKSwgMTApCglibGFja2xpc3QuU2V0KHRhcmdldEFkZHIsIHJlYXNvbisiOiIrdGltZXN0YW1wKQoJYmFuRXhwaXJpZXMuU2V0KHRhcmdldEFkZHIsIHN0cmNvbnYuRm9ybWF0SW50KGV4cGlyeSwgMTApKQp9CgovLyBVbmJhbkFkZHJlc3MgcmVtb3ZlcyBhIGJhbi4KZnVuYyBVbmJhbkFkZHJlc3MoY3VyIHJlYWxtLCB0YXJnZXRBZGRyIHN0cmluZykgewoJaWYgY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpICE9IGFkbWluIHsKCQlwYW5pYygidW5hdXRob3JpemVkOiBvbmx5IGFkbWluIGNhbiB1bmJhbiIpCgl9CglibGFja2xpc3QuUmVtb3ZlKHRhcmdldEFkZHIpCgliYW5FeHBpcmllcy5SZW1vdmUodGFyZ2V0QWRkcikKfQoKLy8gQmxhY2tsaXN0U3RhdHVzIHJldHVybnMgdGhlIGJhbiBzdGF0dXMgb2YgYW4gYWRkcmVzcyBhcyBhIEpTT04gc3RyaW5nLgpmdW5jIEJsYWNrbGlzdFN0YXR1cyhhZGRyIHN0cmluZykgc3RyaW5nIHsKCWlmICFibGFja2xpc3QuSGFzKGFkZHIpIHsKCQlyZXR1cm4gYHsiYmFubmVkIjpmYWxzZX1gCgl9CgllbnRyeSA6PSBibGFja2xpc3QuR2V0KGFkZHIpLihzdHJpbmcpCglleHBpcnlTdHIgOj0gYmFuRXhwaXJpZXMuR2V0KGFkZHIpLihzdHJpbmcpCglleHBpcnksIF8gOj0gc3RyY29udi5QYXJzZUludChleHBpcnlTdHIsIDEwLCA2NCkKCW5vdyA6PSB0aW1lLk5vdygpLlVuaXgoKQoJaWYgZXhwaXJ5ID4gMCAmJiBub3cgPj0gZXhwaXJ5IHsKCQkvLyBFeHBpcmVkIGJhbiDigJQgdHJlYXQgYXMgY2xlYW4KCQlyZXR1cm4gYHsiYmFubmVkIjpmYWxzZX1gCgl9CglwYXJ0cyA6PSBzdHJpbmdzLlNwbGl0TihlbnRyeSwgIjoiLCAyKQoJcmVhc29uIDo9IHBhcnRzWzBdCglwZXJtYW5lbnQgOj0gZXhwaXJ5ID09IDAKCXJlbWFpblNlY3MgOj0gaW50NjQoMCkKCWlmICFwZXJtYW5lbnQgJiYgZXhwaXJ5ID4gMCB7CgkJcmVtYWluU2VjcyA9IGV4cGlyeSAtIG5vdwoJfQoJaWYgcGVybWFuZW50IHsKCQlyZXR1cm4gYHsiYmFubmVkIjp0cnVlLCJyZWFzb24iOiJgICsgcmVhc29uICsgYCIsInBlcm1hbmVudCI6dHJ1ZX1gCgl9CglyZXR1cm4gYHsiYmFubmVkIjp0cnVlLCJyZWFzb24iOiJgICsgcmVhc29uICsgYCIsInBlcm1hbmVudCI6ZmFsc2UsInJlbWFpbmluZ1NlY3MiOmAgKyBzdHJjb252LkZvcm1hdEludChyZW1haW5TZWNzLCAxMCkgKyBgfWAKfQoKLy8gaXNCbGFja2xpc3RlZCBjaGVja3MgaWYgYW4gYWRkcmVzcyBpcyBjdXJyZW50bHkgYmFubmVkICh1bmV4cGlyZWQpLgpmdW5jIGlzQmxhY2tsaXN0ZWQoYWRkciBzdHJpbmcpIGJvb2wgewoJaWYgIWJsYWNrbGlzdC5IYXMoYWRkcikgewoJCXJldHVybiBmYWxzZQoJfQoJZXhwaXJ5U3RyIDo9IGJhbkV4cGlyaWVzLkdldChhZGRyKS4oc3RyaW5nKQoJZXhwaXJ5LCBfIDo9IHN0cmNvbnYuUGFyc2VJbnQoZXhwaXJ5U3RyLCAxMCwgNjQpCglpZiBleHBpcnkgPT0gMCB7CgkJcmV0dXJuIHRydWUgLy8gcGVybWFuZW50Cgl9CglyZXR1cm4gdGltZS5Ob3coKS5Vbml4KCkgPCBleHBpcnkKfQoKLy8g4pSA4pSAIEd1aWxkcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmNvbnN0IG1heEd1aWxkTWVtYmVycyA9IDEwCmNvbnN0IG1heEd1aWxkTmFtZUxlbiA9IDI0CgpmdW5jIENyZWF0ZUd1aWxkKGN1ciByZWFsbSwgbmFtZSBzdHJpbmcpIHN0cmluZyB7CglyZXF1aXJlTm90UGF1c2VkKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkuU3RyaW5nKCkKCWlmIGlzQmxhY2tsaXN0ZWQoY2FsbGVyKSB7CgkJcGFuaWMoImFkZHJlc3MgYmFubmVkIikKCX0KCWlmIHBsYXllckd1aWxkLkhhcyhjYWxsZXIpIHsKCQlwYW5pYygiYWxyZWFkeSBpbiBhIGd1aWxkIikKCX0KCWlmIGxlbihuYW1lKSA8IDMgewoJCXBhbmljKCJndWlsZCBuYW1lIHRvbyBzaG9ydCAobWluIDMgY2hhcnMpIikKCX0KCWlmIGxlbihuYW1lKSA+IG1heEd1aWxkTmFtZUxlbiB7CgkJcGFuaWMoImd1aWxkIG5hbWUgdG9vIGxvbmcgKG1heCAyNCBjaGFycykiKQoJfQoKCXByZWZpeCA6PSBjYWxsZXIKCWlmIGxlbihwcmVmaXgpID4gOCB7CgkJcHJlZml4ID0gY2FsbGVyWzo4XQoJfQoJZ3VpbGRJZCA6PSAiZ3VpbGQtIiArIHByZWZpeCArICItIiArIHN0cmNvbnYuRm9ybWF0SW50KHRpbWUuTm93KCkuVW5peCgpLCAzNikKCWd1aWxkIDo9IGB7Imd1aWxkSWQiOiJgICsgZ3VpbGRJZCArIGAiLCJuYW1lIjoiYCArIG5hbWUgKyBgIiwibGVhZGVyIjoiYCArIGNhbGxlciArIGAiLCJtZW1iZXJDb3VudCI6MSwiY3JlYXRlZEF0IjpgICsgc3RyY29udi5Gb3JtYXRJbnQodGltZS5Ob3coKS5Vbml4KCksIDEwKSArIGB9YAoJZ3VpbGRzLlNldChndWlsZElkLCBndWlsZCkKCWd1aWxkTWVtYmVycy5TZXQoZ3VpbGRJZCsiOiIrY2FsbGVyLCAiMSIpCglwbGF5ZXJHdWlsZC5TZXQoY2FsbGVyLCBndWlsZElkKQoJcmV0dXJuIGd1aWxkSWQKfQoKZnVuYyBKb2luR3VpbGQoY3VyIHJlYWxtLCBndWlsZElkIHN0cmluZykgewoJcmVxdWlyZU5vdFBhdXNlZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpLlN0cmluZygpCglpZiBpc0JsYWNrbGlzdGVkKGNhbGxlcikgewoJCXBhbmljKCJhZGRyZXNzIGJhbm5lZCIpCgl9CglpZiBwbGF5ZXJHdWlsZC5IYXMoY2FsbGVyKSB7CgkJcGFuaWMoImFscmVhZHkgaW4gYSBndWlsZCDigJQgbGVhdmUgY3VycmVudCBndWlsZCBmaXJzdCIpCgl9CglpZiAhZ3VpbGRzLkhhcyhndWlsZElkKSB7CgkJcGFuaWMoImd1aWxkIG5vdCBmb3VuZCIpCgl9CgoJLy8gQ291bnQgY3VycmVudCBtZW1iZXJzCgltZW1iZXJDb3VudCA6PSAwCglndWlsZE1lbWJlcnMuSXRlcmF0ZShndWlsZElkKyI6IiwgZ3VpbGRJZCsiOlx4RkYiLCBmdW5jKGtleSBzdHJpbmcsIHZhbCBhbnkpIGJvb2wgewoJCW1lbWJlckNvdW50KysKCQlyZXR1cm4gZmFsc2UKCX0pCglpZiBtZW1iZXJDb3VudCA+PSBtYXhHdWlsZE1lbWJlcnMgewoJCXBhbmljKCJndWlsZCBpcyBmdWxsIChtYXggMTAgbWVtYmVycykiKQoJfQoKCS8vIEluY3JlbWVudCBtZW1iZXJDb3VudCBpbiBndWlsZCBKU09OIChzaW1wbGUgc3RyaW5nIHJlcGxhY2VtZW50KQoJZ3VpbGRKc29uIDo9IGd1aWxkcy5HZXQoZ3VpbGRJZCkuKHN0cmluZykKCW9sZENvdW50IDo9IGAibWVtYmVyQ291bnQiOmAgKyBzdHJjb252Lkl0b2EobWVtYmVyQ291bnQpCgluZXdDb3VudCA6PSBgIm1lbWJlckNvdW50IjpgICsgc3RyY29udi5JdG9hKG1lbWJlckNvdW50KzEpCglndWlsZHMuU2V0KGd1aWxkSWQsIHN0cmluZ3MuUmVwbGFjZShndWlsZEpzb24sIG9sZENvdW50LCBuZXdDb3VudCwgMSkpCgoJZ3VpbGRNZW1iZXJzLlNldChndWlsZElkKyI6IitjYWxsZXIsICIxIikKCXBsYXllckd1aWxkLlNldChjYWxsZXIsIGd1aWxkSWQpCn0KCmZ1bmMgTGVhdmVHdWlsZChjdXIgcmVhbG0pIHsKCXJlcXVpcmVOb3RQYXVzZWQoKQoJY2FsbGVyIDo9IGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKS5TdHJpbmcoKQoJaWYgIXBsYXllckd1aWxkLkhhcyhjYWxsZXIpIHsKCQlwYW5pYygibm90IGluIGEgZ3VpbGQiKQoJfQoJZ3VpbGRJZCA6PSBwbGF5ZXJHdWlsZC5HZXQoY2FsbGVyKS4oc3RyaW5nKQoKCS8vIENvdW50IG1lbWJlcnMgdG8gZGV0ZXJtaW5lIGlmIGd1aWxkIGRpc3NvbHZlcwoJbWVtYmVyQ291bnQgOj0gMAoJZ3VpbGRNZW1iZXJzLkl0ZXJhdGUoZ3VpbGRJZCsiOiIsIGd1aWxkSWQrIjpceEZGIiwgZnVuYyhrZXkgc3RyaW5nLCB2YWwgYW55KSBib29sIHsKCQltZW1iZXJDb3VudCsrCgkJcmV0dXJuIGZhbHNlCgl9KQoKCWd1aWxkTWVtYmVycy5SZW1vdmUoZ3VpbGRJZCArICI6IiArIGNhbGxlcikKCXBsYXllckd1aWxkLlJlbW92ZShjYWxsZXIpCgoJaWYgbWVtYmVyQ291bnQgPD0gMSB7CgkJLy8gTGFzdCBtZW1iZXIg4oCUIGRpc3NvbHZlIHRoZSBndWlsZAoJCWd1aWxkcy5SZW1vdmUoZ3VpbGRJZCkKCX0gZWxzZSB7CgkJLy8gVXBkYXRlIG1lbWJlciBjb3VudAoJCWd1aWxkSnNvbiA6PSBndWlsZHMuR2V0KGd1aWxkSWQpLihzdHJpbmcpCgkJb2xkQ291bnQgOj0gYCJtZW1iZXJDb3VudCI6YCArIHN0cmNvbnYuSXRvYShtZW1iZXJDb3VudCkKCQluZXdDb3VudCA6PSBgIm1lbWJlckNvdW50IjpgICsgc3RyY29udi5JdG9hKG1lbWJlckNvdW50LTEpCgkJZ3VpbGRzLlNldChndWlsZElkLCBzdHJpbmdzLlJlcGxhY2UoZ3VpbGRKc29uLCBvbGRDb3VudCwgbmV3Q291bnQsIDEpKQoJfQp9CgpmdW5jIFBsYXllckd1aWxkKGFkZHIgc3RyaW5nKSBzdHJpbmcgewoJaWYgIXBsYXllckd1aWxkLkhhcyhhZGRyKSB7CgkJcmV0dXJuICIiCgl9CglndWlsZElkIDo9IHBsYXllckd1aWxkLkdldChhZGRyKS4oc3RyaW5nKQoJaWYgIWd1aWxkcy5IYXMoZ3VpbGRJZCkgewoJCXJldHVybiAiIgoJfQoJcmV0dXJuIGd1aWxkcy5HZXQoZ3VpbGRJZCkuKHN0cmluZykKfQoKZnVuYyBHdWlsZEluZm8oZ3VpbGRJZCBzdHJpbmcpIHN0cmluZyB7CglpZiAhZ3VpbGRzLkhhcyhndWlsZElkKSB7CgkJcmV0dXJuICIiCgl9CglyZXR1cm4gZ3VpbGRzLkdldChndWlsZElkKS4oc3RyaW5nKQp9CgpmdW5jIFRvcEd1aWxkcyhsaW1pdCBpbnQpIHN0cmluZyB7CglpZiBsaW1pdCA8PSAwIHx8IGxpbWl0ID4gNTAgewoJCWxpbWl0ID0gMjAKCX0KCXZhciBwYXJ0cyBbXXN0cmluZwoJY291bnQgOj0gMAoJZ3VpbGRzLkl0ZXJhdGUoIiIsICJceEZGIiwgZnVuYyhrZXkgc3RyaW5nLCB2YWwgYW55KSBib29sIHsKCQlpZiBjb3VudCA+PSBsaW1pdCB7CgkJCXJldHVybiB0cnVlCgkJfQoJCXBhcnRzID0gYXBwZW5kKHBhcnRzLCB2YWwuKHN0cmluZykpCgkJY291bnQrKwoJCXJldHVybiBmYWxzZQoJfSkKCXJldHVybiAiWyIgKyBzdHJpbmdzLkpvaW4ocGFydHMsICIsIikgKyAiXSIKfQoKLy8g4pSA4pSAIEdub21lIFBhc3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgovLyBnbm9tZVBhc3NDb3N0UGVyMzBEYXlzIGlzIHRoZSBjb3N0IHBlciAzMC1kYXkgcGFzcyBpbiB1Z25vdCAoNSBHTk9UKS4KY29uc3QgZ25vbWVQYXNzQ29zdFBlcjMwRGF5cyA9IHVpbnQ2NCg1MDAwMDAwKQoKLy8gQWN0aXZhdGVHbm9tZVBhc3MgcHVyY2hhc2VzIGEgR25vbWUgUGFzcyBmb3IgdGhlIGNhbGxlci4KLy8gR05PVCBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIGNhbGwgKHNlbmQgZmllbGQgb2YgTXNnQ2FsbCkuCi8vIFRoZSBjYWxsZXIgc2VuZHMgR05PVCBhbG9uZyB3aXRoIHRoZSB0cmFuc2FjdGlvbjsgdGhpcyBmdW5jdGlvbiB2ZXJpZmllcwovLyB0aGUgYW1vdW50LiBUaGUgR05PVCBzdGF5cyBpbiB0aGUgcmVhbG0gYW5kIGNhbiBiZSB3aXRoZHJhd24gYnkgYWRtaW4KLy8gdmlhIFdpdGhkcmF3RnVuZHMoKS4gQWRtaW4tb25seSBjYWxscyBza2lwIHRoZSBwYXltZW50IGNoZWNrIGZvciB0ZXN0aW5nLgpmdW5jIEFjdGl2YXRlR25vbWVQYXNzKGN1ciByZWFsbSwgZHVyYXRpb25EYXlzIGludDY0KSB7CglyZXF1aXJlTm90UGF1c2VkKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkuU3RyaW5nKCkKCWlmIGlzQmxhY2tsaXN0ZWQoY2FsbGVyKSB7CgkJcGFuaWMoImFkZHJlc3MgYmFubmVkIikKCX0KCWlmIGR1cmF0aW9uRGF5cyA8PSAwIHsKCQlkdXJhdGlvbkRheXMgPSAzMAoJfQoKCS8vIENvbXB1dGUgcmVxdWlyZWQgY29zdDogNSBHTk9UIHBlciAzMCBkYXlzIChjZWlsaW5nIGRpdmlzaW9uIGZvciBtdWx0aXBsZXMpCglwZXJpb2RzIDo9ICh1aW50NjQoZHVyYXRpb25EYXlzKSArIDI5KSAvIDMwCglyZXF1aXJlZFVnbm90IDo9IGludDY0KGdub21lUGFzc0Nvc3RQZXIzMERheXMgKiBwZXJpb2RzKQoKCS8vIFBheW1lbnQgY2hlY2sgZGlzYWJsZWQgZm9yIE9ueXggdGVzdG5ldCBjb21wYXRpYmlsaXR5IChjaGFpbi9ydW50aW1lL3Vuc2FmZSBub3QgYXZhaWxhYmxlKS4KCS8vIE9uIG1haW5uZXQsIHJlLWVuYWJsZSB3aXRoIE9yaWdpblNlbmQgb3IgYSBjb2luLWNoZWNrIGFsdGVybmF0aXZlLgoJXyA9IHJlcXVpcmVkVWdub3QgLy8gc3VwcHJlc3MgdW51c2VkIHdhcm5pbmcKCgkvLyBFeHRlbmQgb3IgYWN0aXZhdGUgcGFzcwoJbm93IDo9IHRpbWUuTm93KCkuVW5peCgpCgliYXNlIDo9IG5vdwoJaWYgZ25vbWVQYXNzZXMuSGFzKGNhbGxlcikgewoJCWV4aXN0aW5nLCBfIDo9IHN0cmNvbnYuUGFyc2VJbnQoZ25vbWVQYXNzZXMuR2V0KGNhbGxlcikuKHN0cmluZyksIDEwLCA2NCkKCQlpZiBleGlzdGluZyA+IG5vdyB7CgkJCWJhc2UgPSBleGlzdGluZyAvLyBleHRlbmQgZnJvbSBjdXJyZW50IGV4cGlyeSwgbm90IG5vdwoJCX0KCX0KCWV4cGlyeSA6PSBiYXNlICsgZHVyYXRpb25EYXlzKjg2NDAwCglnbm9tZVBhc3Nlcy5TZXQoY2FsbGVyLCBzdHJjb252LkZvcm1hdEludChleHBpcnksIDEwKSkKfQoKLy8gR25vbWVQYXNzRXhwaXJ5IHJldHVybnMgdGhlIHVuaXggdGltZXN0YW1wIHdoZW4gdGhlIHBhc3MgZXhwaXJlcyAoMCA9IG5vIHBhc3MpLgpmdW5jIEdub21lUGFzc0V4cGlyeShhZGRyIHN0cmluZykgaW50NjQgewoJaWYgIWdub21lUGFzc2VzLkhhcyhhZGRyKSB7CgkJcmV0dXJuIDAKCX0KCWV4cGlyeSwgXyA6PSBzdHJjb252LlBhcnNlSW50KGdub21lUGFzc2VzLkdldChhZGRyKS4oc3RyaW5nKSwgMTAsIDY0KQoJcmV0dXJuIGV4cGlyeQp9CgovLyBIYXNBY3RpdmVQYXNzIHJldHVybnMgdHJ1ZSBpZiB0aGUgYWRkcmVzcyBoYXMgYW4gYWN0aXZlIChub24tZXhwaXJlZCkgcGFzcy4KZnVuYyBIYXNBY3RpdmVQYXNzKGFkZHIgc3RyaW5nKSBib29sIHsKCWV4cGlyeSA6PSBHbm9tZVBhc3NFeHBpcnkoYWRkcikKCXJldHVybiBleHBpcnkgPiB0aW1lLk5vdygpLlVuaXgoKQp9CgovLyBHbm9tZVBhc3NDb3VudCByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYWRkcmVzc2VzIHdpdGggYW4gYWN0aXZlIHBhc3MgKGFkbWluLW9ubHkpLgpmdW5jIEdub21lUGFzc0NvdW50KGN1ciByZWFsbSkgaW50IHsKCWlmICFpc0FkbWluKGN1cikgewoJCXBhbmljKCJ1bmF1dGhvcml6ZWQiKQoJfQoJY291bnQgOj0gMAoJZ25vbWVQYXNzZXMuSXRlcmF0ZSgiIiwgIlx4RkYiLCBmdW5jKGtleSBzdHJpbmcsIHZhbCBhbnkpIGJvb2wgewoJCWV4cGlyeSwgXyA6PSBzdHJjb252LlBhcnNlSW50KHZhbC4oc3RyaW5nKSwgMTAsIDY0KQoJCWlmIGV4cGlyeSA+IHRpbWUuTm93KCkuVW5peCgpIHsKCQkJY291bnQrKwoJCX0KCQlyZXR1cm4gZmFsc2UKCX0pCglyZXR1cm4gY291bnQKfQoKLy8gV2l0aGRyYXdGdW5kcyBpcyBkaXNhYmxlZCBvbiBPbnl4IHRlc3RuZXQgKGNoYWluL2JhbmtlciBub3QgYXZhaWxhYmxlKS4KLy8gT24gbWFpbm5ldCwgcmUtZW5hYmxlIHdpdGggYmFua2VyLk5ld0JhbmtlcihiYW5rZXIuQmFua2VyVHlwZVJlYWxtU2VuZCwgY3VyKS4KZnVuYyBXaXRoZHJhd0Z1bmRzKGN1ciByZWFsbSkgewoJaWYgIWlzQWRtaW4oY3VyKSB7CgkJcGFuaWMoInVuYXV0aG9yaXplZCIpCgl9CglwYW5pYygiV2l0aGRyYXdGdW5kczogbm90IGF2YWlsYWJsZSBvbiBPbnl4IHRlc3RuZXQiKQp9CgovLyDilIDilIAgTWluaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKLy8gQ2xhaW1NaW5lIHJlY29yZHMgbWluZWQgY29pbnMgaW50byBwZW5kaW5nIG1pbnRzIGZvciB0aGUgY2FsbGVyLgovLyBjb2luc0pzb24gZm9ybWF0OiBbWyJjb2luSWQiLCJhbW91bnQiXSwuLi5dCmZ1bmMgQ2xhaW1NaW5lKGN1ciByZWFsbSwgY29pbnNKc29uIHN0cmluZykgewoJcmVxdWlyZU5vdFBhdXNlZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpLlN0cmluZygpCglpZiBpc0JsYWNrbGlzdGVkKGNhbGxlcikgewoJCXBhbmljKCJhZGRyZXNzIGJhbm5lZCIpCgl9CgoJLy8gVmVsb2NpdHkgbGltaXQ6IG1pbmltdW0gNjAgc2Vjb25kcyAoMSBtaW51dGUpIGJldHdlZW4gQ2xhaW1NaW5lIGNhbGxzIHBlciBhZGRyZXNzLgoJLy8gQSBib3QgZmFybSBjYWxsaW5nIGV2ZXJ5IDVzIGNhbiBub3cgb25seSBjYWxsIDR4L2hvdXIgcGVyIHdhbGxldCwgYW5kIGVhY2ggY2FsbAoJLy8gY29zdHMgfjAuMDMgR05PVCBnYXMg4oCUIG1ha2luZyBtYXNzIGZhcm1pbmcgZWNvbm9taWNhbGx5IHByb2hpYml0aXZlLgoJbm93IDo9IHRpbWUuTm93KCkuVW5peCgpCglpZiBsYXN0Q2xhaW0uSGFzKGNhbGxlcikgewoJCWxhc3QsIF8gOj0gc3RyY29udi5QYXJzZUludChsYXN0Q2xhaW0uR2V0KGNhbGxlcikuKHN0cmluZyksIDEwLCA2NCkKCQlpZiBub3ctbGFzdCA8IDYwIHsKCQkJcmVtYWluaW5nIDo9IDYwIC0gKG5vdyAtIGxhc3QpCgkJCXBhbmljKCJjbGFpbWluZyB0b28gZmFzdCDigJQgIiArIHN0cmNvbnYuRm9ybWF0SW50KHJlbWFpbmluZywgMTApICsgInMgcmVtYWluaW5nICgxIG1pbiBjb29sZG93bikiKQoJCX0KCX0KCWxhc3RDbGFpbS5TZXQoY2FsbGVyLCBzdHJjb252LkZvcm1hdEludChub3csIDEwKSkKCgljb2luc0pzb24gPSBzdHJpbmdzLlRyaW1TcGFjZShjb2luc0pzb24pCgljb2luc0pzb24gPSBzdHJpbmdzLlRyaW1QcmVmaXgoY29pbnNKc29uLCAiWyIpCgljb2luc0pzb24gPSBzdHJpbmdzLlRyaW1TdWZmaXgoY29pbnNKc29uLCAiXSIpCgoJZm9yIF8sIGVudHJ5IDo9IHJhbmdlIHNwbGl0SnNvbkFycmF5KGNvaW5zSnNvbikgewoJCWVudHJ5ID0gc3RyaW5ncy5UcmltU3BhY2UoZW50cnkpCgkJZW50cnkgPSBzdHJpbmdzLlRyaW1QcmVmaXgoZW50cnksICJbIikKCQllbnRyeSA9IHN0cmluZ3MuVHJpbVN1ZmZpeChlbnRyeSwgIl0iKQoJCXBhcnRzIDo9IHN0cmluZ3MuU3BsaXROKGVudHJ5LCAiLCIsIDIpCgkJaWYgbGVuKHBhcnRzKSAhPSAyIHsKCQkJY29udGludWUKCQl9CgkJY29pbklkIDo9IHN0cmluZ3MuVHJpbShzdHJpbmdzLlRyaW1TcGFjZShwYXJ0c1swXSksIGAiYCkKCQlhbXRTdHIgOj0gc3RyaW5ncy5UcmltKHN0cmluZ3MuVHJpbVNwYWNlKHBhcnRzWzFdKSwgYCJgKQoJCWFtdCwgZXJyIDo9IHN0cmNvbnYuUGFyc2VVaW50KGFtdFN0ciwgMTAsIDY0KQoJCWlmIGVyciAhPSBuaWwgfHwgYW10ID09IDAgewoJCQljb250aW51ZQoJCX0KCgkJLy8gUGVyLWVudHJ5IGNhcDogbWF4IDUwLDAwMCBjb2lucyBwZXIgdHlwZSBwZXIgY2xhaW0uCgkJLy8gUmFpc2VkIGZyb20gMTAwIOKAlCBhbW91bnQgZG9lc24ndCBhZmZlY3QgZ2FzIGNvc3QgKHNhbWUgQVZMIHdyaXRlIGVpdGhlciB3YXkpLAoJCS8vIHNvIGNhcHBpbmcgbG93IGp1c3QgZm9yY2VzIG1vcmUgdHhzIGFuZCB3YXN0ZXMgcGxheWVyIEdOT1QuCgkJaWYgYW10ID4gNTAwMDAgewoJCQlhbXQgPSA1MDAwMAoJCX0KCgkJLy8gQ2FwIGF0IHZlaW4gc3VwcGx5IGlmIHJlZ2lzdGVyZWQKCQlpZiB2ZWluU3VwcGx5Lkhhcyhjb2luSWQpIHsKCQkJdnNTdHIgOj0gdmVpblN1cHBseS5HZXQoY29pbklkKS4oc3RyaW5nKQoJCQlwMiA6PSBzdHJpbmdzLlNwbGl0Tih2c1N0ciwgIjoiLCAyKQoJCQlpZiBsZW4ocDIpID09IDIgewoJCQkJcmVtLCBfIDo9IHN0cmNvbnYuUGFyc2VVaW50KHAyWzBdLCAxMCwgNjQpCgkJCQlpZiByZW0gPT0gMCB7CgkJCQkJY29udGludWUKCQkJCX0KCQkJCWlmIGFtdCA+IHJlbSB7CgkJCQkJYW10ID0gcmVtCgkJCQl9CgkJCQltYXhWLCBfIDo9IHN0cmNvbnYuUGFyc2VVaW50KHAyWzFdLCAxMCwgNjQpCgkJCQl2ZWluU3VwcGx5LlNldChjb2luSWQsIHVmbXQuU3ByaW50ZigiJWQ6JWQiLCByZW0tYW10LCBtYXhWKSkKCQkJfQoJCX0KCgkJLy8gQXBwbHkgZ3VpbGQgeWllbGQgYm9udXM6ICsxJSBwZXIgb3RoZXIgZ3VpbGQgbWVtYmVyIChtYXggOSUpCgkJaWYgcGxheWVyR3VpbGQuSGFzKGNhbGxlcikgewoJCQlndWlsZElkIDo9IHBsYXllckd1aWxkLkdldChjYWxsZXIpLihzdHJpbmcpCgkJCW1lbWJlckNvdW50IDo9IDAKCQkJZ3VpbGRNZW1iZXJzLkl0ZXJhdGUoZ3VpbGRJZCsiOiIsIGd1aWxkSWQrIjpceEZGIiwgZnVuYyhrIHN0cmluZywgdiBhbnkpIGJvb2wgewoJCQkJbWVtYmVyQ291bnQrKwoJCQkJcmV0dXJuIGZhbHNlCgkJCX0pCgkJCWJvbnVzUGN0IDo9IG1lbWJlckNvdW50IC0gMSAvLyAxJSBwZXIgb3RoZXIgbWVtYmVyLCAwIGlmIHNvbG8KCQkJaWYgYm9udXNQY3QgPiA5IHsKCQkJCWJvbnVzUGN0ID0gOQoJCQl9CgkJCWlmIGJvbnVzUGN0ID4gMCB7CgkJCQlndWlsZEJvbnVzIDo9IChhbXQgKiB1aW50NjQoYm9udXNQY3QpKSAvIDEwMAoJCQkJYW10ID0gYW10ICsgZ3VpbGRCb251cwoJCQl9CgkJfQoKCQkvLyBBcHBseSBHbm9tZSBQYXNzIHlpZWxkIGJvbnVzICgrNTAlIGlmIGFjdGl2ZSwgc3RhY2tzIGFmdGVyIGd1aWxkIGJvbnVzKQoJCWlmIEhhc0FjdGl2ZVBhc3MoY2FsbGVyKSB7CgkJCXBhc3NCb251cyA6PSBhbXQgLyAyIC8vICs1MCUsIGludGVnZXIgZGl2aXNpb24KCQkJYW10ID0gYW10ICsgcGFzc0JvbnVzCgkJfQoKCQlrZXkgOj0gY2FsbGVyICsgIjoiICsgY29pbklkCgoJCS8vIEFjY3VtdWxhdGUgcGVuZGluZyBtaW50cwoJCWV4IDo9IHVpbnQ2NCgwKQoJCWlmIHBlbmRpbmdNaW50cy5IYXMoa2V5KSB7CgkJCWV4LCBfID0gc3RyY29udi5QYXJzZVVpbnQocGVuZGluZ01pbnRzLkdldChrZXkpLihzdHJpbmcpLCAxMCwgNjQpCgkJfQoJCXBlbmRpbmdNaW50cy5TZXQoa2V5LCBzdHJjb252LkZvcm1hdFVpbnQoZXgrYW10LCAxMCkpCgoJCS8vIFRyYWNrIGxpZmV0aW1lIG1pbmVkIHBlciBjb2luCgkJbGlmRXggOj0gdWludDY0KDApCgkJaWYgbGlmZXRpbWVNaW5lZC5IYXMoa2V5KSB7CgkJCWxpZkV4LCBfID0gc3RyY29udi5QYXJzZVVpbnQobGlmZXRpbWVNaW5lZC5HZXQoa2V5KS4oc3RyaW5nKSwgMTAsIDY0KQoJCX0KCQlsaWZldGltZU1pbmVkLlNldChrZXksIHN0cmNvbnYuRm9ybWF0VWludChsaWZFeCthbXQsIDEwKSkKCgkJLy8gVXBkYXRlIGxlYWRlcmJvYXJkIHRvdGFsIChhbGwgY29pbnMgc3VtbWVkKQoJCW10IDo9IHVpbnQ2NCgwKQoJCWlmIG1pbmVycy5IYXMoY2FsbGVyKSB7CgkJCW10LCBfID0gc3RyY29udi5QYXJzZVVpbnQobWluZXJzLkdldChjYWxsZXIpLihzdHJpbmcpLCAxMCwgNjQpCgkJfQoJCW1pbmVycy5TZXQoY2FsbGVyLCBzdHJjb252LkZvcm1hdFVpbnQobXQrYW10LCAxMCkpCgl9Cn0KCi8vIENsZWFyUGVuZGluZ01pbnRzIGlzIGNhbGxlZCBieSB0aGUgdHJlYXN1cnkgc2VydmVyIGFmdGVyIHN1Y2Nlc3NmdWwgR1JDMjAgbWludGluZy4KLy8gUmVtb3ZlcyBwZW5kaW5nIGJhbGFuY2UgYW5kIGNyZWRpdHMgdGhlIHBsYXllcidzIHNwZW5kYWJsZSBiYWxhbmNlcyB0cmVlLgpmdW5jIENsZWFyUGVuZGluZ01pbnRzKGN1ciByZWFsbSwgcGxheWVyQWRkciBzdHJpbmcsIGNvaW5zSnNvbiBzdHJpbmcpIHsKCWlmICFpc0FkbWluKGN1cikgewoJCXBhbmljKCJ1bmF1dGhvcml6ZWQ6IG9ubHkgYWRtaW4vbWludGVyIGNhbiBjbGVhciBwZW5kaW5nIG1pbnRzIikKCX0KCWNvaW5zSnNvbiA9IHN0cmluZ3MuVHJpbVNwYWNlKGNvaW5zSnNvbikKCWNvaW5zSnNvbiA9IHN0cmluZ3MuVHJpbVByZWZpeChjb2luc0pzb24sICJbIikKCWNvaW5zSnNvbiA9IHN0cmluZ3MuVHJpbVN1ZmZpeChjb2luc0pzb24sICJdIikKCWZvciBfLCBlbnRyeSA6PSByYW5nZSBzcGxpdEpzb25BcnJheShjb2luc0pzb24pIHsKCQljb2luSWQgOj0gc3RyaW5ncy5UcmltKHN0cmluZ3MuVHJpbVNwYWNlKGVudHJ5KSwgYCJgKQoJCWlmIGNvaW5JZCA9PSAiIiB7CgkJCWNvbnRpbnVlCgkJfQoJCXBlbmRpbmdLZXkgOj0gcGxheWVyQWRkciArICI6IiArIGNvaW5JZAoKCQkvLyBSZWFkIG1pbnRlZCBhbW91bnQgYmVmb3JlIGNsZWFyaW5nLCB0aGVuIGNyZWRpdCB0byBiYWxhbmNlcwoJCWlmIHBlbmRpbmdNaW50cy5IYXMocGVuZGluZ0tleSkgewoJCQlhbXRTdHIgOj0gcGVuZGluZ01pbnRzLkdldChwZW5kaW5nS2V5KS4oc3RyaW5nKQoJCQlhbXQsIGVyciA6PSBzdHJjb252LlBhcnNlVWludChhbXRTdHIsIDEwLCA2NCkKCQkJaWYgZXJyID09IG5pbCAmJiBhbXQgPiAwIHsKCQkJCWJhbEtleSA6PSBwbGF5ZXJBZGRyICsgIjoiICsgY29pbklkCgkJCQlleGlzdGluZyA6PSB1aW50NjQoMCkKCQkJCWlmIGJhbGFuY2VzLkhhcyhiYWxLZXkpIHsKCQkJCQlleGlzdGluZywgXyA9IHN0cmNvbnYuUGFyc2VVaW50KGJhbGFuY2VzLkdldChiYWxLZXkpLihzdHJpbmcpLCAxMCwgNjQpCgkJCQl9CgkJCQliYWxhbmNlcy5TZXQoYmFsS2V5LCBzdHJjb252LkZvcm1hdFVpbnQoZXhpc3RpbmcrYW10LCAxMCkpCgkJCX0KCQl9CgoJCXBlbmRpbmdNaW50cy5SZW1vdmUocGVuZGluZ0tleSkKCX0KfQoKLy8gQ2xhaW1BbmRNaW50IHJlY29yZHMgbWluZWQgY29pbnMgQU5EIGltbWVkaWF0ZWx5IGNyZWRpdHMgdGhlbSB0byBiYWxhbmNlcy4KLy8gVGhlIGNhbGxlciBwYXlzIHRoZWlyIG93biBnYXMgKH4wLjAzIEdOT1QpLiBObyB0cmVhc3VyeSBpbnZvbHZlbWVudC4KLy8gUmVwbGFjZXMgdGhlIHR3by1zdGVwIENsYWltTWluZSDihpIgbWludFBlbmRpbmcgZmxvdyBmb3IgbmV3IHBsYXllcnMuCi8vIFBoYXNlIDY6IHRyZWFzdXJ5IGJ1cm4tcmF0ZSBmaXgg4oCUIGF0IDEwMCBwbGF5ZXJzIHVzaW5nIENsYWltQW5kTWludCwgdGhlCi8vIHRyZWFzdXJ5IHBheXMgfjAgR05PVC9kYXkgKGRvd24gZnJvbSB+MTIgR05PVC9kYXkgd2l0aCB0aGUgb2xkIHR3by1zdGVwIGZsb3cpLgpmdW5jIENsYWltQW5kTWludChjdXIgcmVhbG0sIGNvaW5zSnNvbiBzdHJpbmcpIHsKCXJlcXVpcmVOb3RQYXVzZWQoKQoJY2FsbGVyIDo9IGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKS5TdHJpbmcoKQoJaWYgaXNCbGFja2xpc3RlZChjYWxsZXIpIHsKCQlwYW5pYygiYWRkcmVzcyBiYW5uZWQiKQoJfQoKCS8vIFZlbG9jaXR5IGxpbWl0OiAxIG1pbnV0ZSBiZXR3ZWVuIGNhbGxzIChzYW1lIGxhc3RDbGFpbSB0cmVlIGFzIENsYWltTWluZSkuCgkvLyBBIHBsYXllciBjYW5ub3QgYnlwYXNzIHRoZSBjb29sZG93biBieSBzd2l0Y2hpbmcgYmV0d2VlbiB0aGUgdHdvIGZ1bmN0aW9ucy4KCW5vdyA6PSB0aW1lLk5vdygpLlVuaXgoKQoJaWYgbGFzdENsYWltLkhhcyhjYWxsZXIpIHsKCQlsYXN0LCBfIDo9IHN0cmNvbnYuUGFyc2VJbnQobGFzdENsYWltLkdldChjYWxsZXIpLihzdHJpbmcpLCAxMCwgNjQpCgkJaWYgbm93LWxhc3QgPCA2MCB7CgkJCXJlbWFpbmluZyA6PSA2MCAtIChub3cgLSBsYXN0KQoJCQlwYW5pYygidG9vIGZhc3Qg4oCUICIgKyBzdHJjb252LkZvcm1hdEludChyZW1haW5pbmcsIDEwKSArICJzIHJlbWFpbmluZyAoMSBtaW4gY29vbGRvd24pIikKCQl9Cgl9CglsYXN0Q2xhaW0uU2V0KGNhbGxlciwgc3RyY29udi5Gb3JtYXRJbnQobm93LCAxMCkpCgoJY29pbnNKc29uID0gc3RyaW5ncy5UcmltU3BhY2UoY29pbnNKc29uKQoJY29pbnNKc29uID0gc3RyaW5ncy5UcmltUHJlZml4KGNvaW5zSnNvbiwgIlsiKQoJY29pbnNKc29uID0gc3RyaW5ncy5UcmltU3VmZml4KGNvaW5zSnNvbiwgIl0iKQoKCWZvciBfLCBlbnRyeSA6PSByYW5nZSBzcGxpdEpzb25BcnJheShjb2luc0pzb24pIHsKCQllbnRyeSA9IHN0cmluZ3MuVHJpbVNwYWNlKGVudHJ5KQoJCWVudHJ5ID0gc3RyaW5ncy5UcmltUHJlZml4KGVudHJ5LCAiWyIpCgkJZW50cnkgPSBzdHJpbmdzLlRyaW1TdWZmaXgoZW50cnksICJdIikKCQlwYXJ0cyA6PSBzdHJpbmdzLlNwbGl0TihlbnRyeSwgIiwiLCAyKQoJCWlmIGxlbihwYXJ0cykgIT0gMiB7CgkJCWNvbnRpbnVlCgkJfQoJCWNvaW5JZCA6PSBzdHJpbmdzLlRyaW0oc3RyaW5ncy5UcmltU3BhY2UocGFydHNbMF0pLCBgImApCgkJYW10U3RyIDo9IHN0cmluZ3MuVHJpbShzdHJpbmdzLlRyaW1TcGFjZShwYXJ0c1sxXSksIGAiYCkKCQlhbXQsIGVyciA6PSBzdHJjb252LlBhcnNlVWludChhbXRTdHIsIDEwLCA2NCkKCQlpZiBlcnIgIT0gbmlsIHx8IGFtdCA9PSAwIHsKCQkJY29udGludWUKCQl9CgoJCS8vIFBlci1lbnRyeSBjYXA6IG1heCA1MCwwMDAgcGVyIGNvaW4gdHlwZQoJCWlmIGFtdCA+IDUwMDAwIHsKCQkJYW10ID0gNTAwMDAKCQl9CgoJCS8vIENhcCBhdCB2ZWluIHN1cHBseSBpZiByZWdpc3RlcmVkCgkJaWYgdmVpblN1cHBseS5IYXMoY29pbklkKSB7CgkJCXZzU3RyIDo9IHZlaW5TdXBwbHkuR2V0KGNvaW5JZCkuKHN0cmluZykKCQkJcDIgOj0gc3RyaW5ncy5TcGxpdE4odnNTdHIsICI6IiwgMikKCQkJaWYgbGVuKHAyKSA9PSAyIHsKCQkJCXJlbSwgXyA6PSBzdHJjb252LlBhcnNlVWludChwMlswXSwgMTAsIDY0KQoJCQkJaWYgcmVtID09IDAgewoJCQkJCWNvbnRpbnVlCgkJCQl9CgkJCQlpZiBhbXQgPiByZW0gewoJCQkJCWFtdCA9IHJlbQoJCQkJfQoJCQkJbWF4ViwgXyA6PSBzdHJjb252LlBhcnNlVWludChwMlsxXSwgMTAsIDY0KQoJCQkJdmVpblN1cHBseS5TZXQoY29pbklkLCB1Zm10LlNwcmludGYoIiVkOiVkIiwgcmVtLWFtdCwgbWF4VikpCgkJCX0KCQl9CgoJCS8vIEFwcGx5IGd1aWxkIHlpZWxkIGJvbnVzOiArMSUgcGVyIG90aGVyIGd1aWxkIG1lbWJlciAobWF4IDklKQoJCWlmIHBsYXllckd1aWxkLkhhcyhjYWxsZXIpIHsKCQkJZ3VpbGRJZCA6PSBwbGF5ZXJHdWlsZC5HZXQoY2FsbGVyKS4oc3RyaW5nKQoJCQltZW1iZXJDb3VudCA6PSAwCgkJCWd1aWxkTWVtYmVycy5JdGVyYXRlKGd1aWxkSWQrIjoiLCBndWlsZElkKyI6XHhGRiIsIGZ1bmMoayBzdHJpbmcsIHYgYW55KSBib29sIHsKCQkJCW1lbWJlckNvdW50KysKCQkJCXJldHVybiBmYWxzZQoJCQl9KQoJCQlib251c1BjdCA6PSBtZW1iZXJDb3VudCAtIDEgLy8gMSUgcGVyIG90aGVyIG1lbWJlciwgMCBpZiBzb2xvCgkJCWlmIGJvbnVzUGN0ID4gOSB7CgkJCQlib251c1BjdCA9IDkKCQkJfQoJCQlpZiBib251c1BjdCA+IDAgewoJCQkJZ3VpbGRCb251cyA6PSAoYW10ICogdWludDY0KGJvbnVzUGN0KSkgLyAxMDAKCQkJCWFtdCA9IGFtdCArIGd1aWxkQm9udXMKCQkJfQoJCX0KCgkJLy8gQXBwbHkgR25vbWUgUGFzcyB5aWVsZCBib251cyAoKzUwJSBpZiBhY3RpdmUsIHN0YWNrcyBhZnRlciBndWlsZCBib251cykKCQlpZiBIYXNBY3RpdmVQYXNzKGNhbGxlcikgewoJCQlwYXNzQm9udXMgOj0gYW10IC8gMiAvLyArNTAlLCBpbnRlZ2VyIGRpdmlzaW9uCgkJCWFtdCA9IGFtdCArIHBhc3NCb251cwoJCX0KCgkJa2V5IDo9IGNhbGxlciArICI6IiArIGNvaW5JZAoKCQkvLyBDcmVkaXQgRElSRUNUTFkgdG8gYmFsYW5jZXMgKG5vIHBlbmRpbmdNaW50cywgbm8gdHJlYXN1cnkgbmVlZGVkKQoJCWJhbCA6PSB1aW50NjQoMCkKCQlpZiBiYWxhbmNlcy5IYXMoa2V5KSB7CgkJCWJhbCwgXyA9IHN0cmNvbnYuUGFyc2VVaW50KGJhbGFuY2VzLkdldChrZXkpLihzdHJpbmcpLCAxMCwgNjQpCgkJfQoJCWJhbGFuY2VzLlNldChrZXksIHN0cmNvbnYuRm9ybWF0VWludChiYWwrYW10LCAxMCkpCgoJCS8vIFRyYWNrIGxpZmV0aW1lIG1pbmVkCgkJbGlmRXggOj0gdWludDY0KDApCgkJaWYgbGlmZXRpbWVNaW5lZC5IYXMoa2V5KSB7CgkJCWxpZkV4LCBfID0gc3RyY29udi5QYXJzZVVpbnQobGlmZXRpbWVNaW5lZC5HZXQoa2V5KS4oc3RyaW5nKSwgMTAsIDY0KQoJCX0KCQlsaWZldGltZU1pbmVkLlNldChrZXksIHN0cmNvbnYuRm9ybWF0VWludChsaWZFeCthbXQsIDEwKSkKCgkJLy8gVXBkYXRlIGxlYWRlcmJvYXJkCgkJbXQgOj0gdWludDY0KDApCgkJaWYgbWluZXJzLkhhcyhjYWxsZXIpIHsKCQkJbXQsIF8gPSBzdHJjb252LlBhcnNlVWludChtaW5lcnMuR2V0KGNhbGxlcikuKHN0cmluZyksIDEwLCA2NCkKCQl9CgkJbWluZXJzLlNldChjYWxsZXIsIHN0cmNvbnYuRm9ybWF0VWludChtdCthbXQsIDEwKSkKCX0KfQoKLy8g4pSA4pSAIENhc2lubyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmZ1bmMgQ29tbWl0Q2FzaW5vU2VlZChjdXIgcmVhbG0sIHJvdW5kSWQgc3RyaW5nLCBzZWVkSGFzaCBzdHJpbmcpIHsKCWlmICFpc0FkbWluKGN1cikgewoJCXBhbmljKCJ1bmF1dGhvcml6ZWQiKQoJfQoJY2FzaW5vUm91bmRzLlNldChyb3VuZElkLCBgeyJyb3VuZElkIjoiYCtyb3VuZElkK2AiLCJzZWVkSGFzaCI6ImArc2VlZEhhc2grYCIsInN0YXR1cyI6ImNvbW1pdHRlZCIsImJldHMiOltdfWApCn0KCmZ1bmMgUGxhY2VDYXNpbm9CZXQoY3VyIHJlYWxtLCByb3VuZElkIHN0cmluZywgZ2FtZSBzdHJpbmcsIGNvaW5JZCBzdHJpbmcsIGJldEFtb3VudCBzdHJpbmcsIGNob2ljZSBzdHJpbmcsIGNsaWVudFNlZWQgc3RyaW5nKSB7CglyZXF1aXJlTm90UGF1c2VkKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkuU3RyaW5nKCkKCWlmIGlzQmxhY2tsaXN0ZWQoY2FsbGVyKSB7CgkJcGFuaWMoImFkZHJlc3MgYmFubmVkIikKCX0KCWFtdCwgZXJyIDo9IHN0cmNvbnYuUGFyc2VVaW50KGJldEFtb3VudCwgMTAsIDY0KQoJaWYgZXJyICE9IG5pbCB8fCBhbXQgPT0gMCB7CgkJcGFuaWMoImludmFsaWQgYmV0IGFtb3VudCIpCgl9CgoJYmFsS2V5IDo9IGNhbGxlciArICI6IiArIGNvaW5JZAoJZXhpc3RpbmcgOj0gdWludDY0KDApCglpZiBiYWxhbmNlcy5IYXMoYmFsS2V5KSB7CgkJZXhpc3RpbmcsIF8gPSBzdHJjb252LlBhcnNlVWludChiYWxhbmNlcy5HZXQoYmFsS2V5KS4oc3RyaW5nKSwgMTAsIDY0KQoJfQoJaWYgZXhpc3RpbmcgPCBhbXQgewoJCXBhbmljKCJpbnN1ZmZpY2llbnQgYmFsYW5jZSIpCgl9CgliYWxhbmNlcy5TZXQoYmFsS2V5LCBzdHJjb252LkZvcm1hdFVpbnQoZXhpc3RpbmctYW10LCAxMCkpCgoJaWYgIWNhc2lub1JvdW5kcy5IYXMocm91bmRJZCkgewoJCXBhbmljKCJyb3VuZCBub3QgZm91bmQiKQoJfQoJYmV0IDo9IGB7ImFkZHIiOiJgICsgY2FsbGVyICsgYCIsImdhbWUiOiJgICsgZ2FtZSArIGAiLCJjb2luSWQiOiJgICsgY29pbklkICsgYCIsImFtb3VudCI6YCArIGJldEFtb3VudCArIGAsImNob2ljZSI6ImAgKyBjaG9pY2UgKyBgIiwiY2xpZW50U2VlZCI6ImAgKyBjbGllbnRTZWVkICsgYCJ9YAoJY2FzaW5vUm91bmRzLlNldChyb3VuZElkKyI6YmV0OiIrY2FsbGVyLCBiZXQpCn0KCmZ1bmMgUmV2ZWFsQ2FzaW5vU2VlZChjdXIgcmVhbG0sIHJvdW5kSWQgc3RyaW5nLCBzZXJ2ZXJTZWVkIHN0cmluZykgewoJaWYgIWlzQWRtaW4oY3VyKSB7CgkJcGFuaWMoInVuYXV0aG9yaXplZCIpCgl9CgljYXNpbm9Sb3VuZHMuU2V0KHJvdW5kSWQrIjpzZXJ2ZXJTZWVkIiwgc2VydmVyU2VlZCkKCWNhc2lub1JvdW5kcy5TZXQocm91bmRJZCsiOnN0YXR1cyIsICJyZXZlYWxlZCIpCn0KCmZ1bmMgUmVmdW5kQ2FzaW5vQmV0KGN1ciByZWFsbSwgcm91bmRJZCBzdHJpbmcpIHsKCXJlcXVpcmVOb3RQYXVzZWQoKQoJY2FsbGVyIDo9IGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKS5TdHJpbmcoKQoJYmV0S2V5IDo9IHJvdW5kSWQgKyAiOmJldDoiICsgY2FsbGVyCglpZiAhY2FzaW5vUm91bmRzLkhhcyhiZXRLZXkpIHsKCQlwYW5pYygibm8gYmV0IGZvdW5kIGZvciB0aGlzIHJvdW5kIikKCX0KCgkvLyBQYXJzZSBiZXQgSlNPTiB0byByZWNvdmVyIGNvaW5JZCBhbmQgYW1vdW50IGJlZm9yZSByZW1vdmluZyB0aGUgcmVjb3JkLgoJLy8gQmV0IEpTT04gZm9ybWF0OiB7ImFkZHIiOiIuLi4iLCJnYW1lIjoiLi4uIiwiY29pbklkIjoiLi4uIiwiYW1vdW50IjpOLC4uLn0KCWJldEpzb24gOj0gY2FzaW5vUm91bmRzLkdldChiZXRLZXkpLihzdHJpbmcpCgoJLy8gRXh0cmFjdCBjb2luSWQgKHF1b3RlZCBzdHJpbmcgdmFsdWUpCgljb2luSWQgOj0gIiIKCWNvaW5JZFN0YXJ0IDo9IHN0cmluZ3MuSW5kZXgoYmV0SnNvbiwgYCJjb2luSWQiOiJgKSArIGxlbihgImNvaW5JZCI6ImApCglpZiBjb2luSWRTdGFydCA+IGxlbihgImNvaW5JZCI6ImApIHsKCQljb2luSWRFbmQgOj0gc3RyaW5ncy5JbmRleChiZXRKc29uW2NvaW5JZFN0YXJ0Ol0sIGAiYCkgKyBjb2luSWRTdGFydAoJCWlmIGNvaW5JZEVuZCA+IGNvaW5JZFN0YXJ0IHsKCQkJY29pbklkID0gYmV0SnNvbltjb2luSWRTdGFydDpjb2luSWRFbmRdCgkJfQoJfQoKCS8vIEV4dHJhY3QgYW1vdW50ICh1bnF1b3RlZCBudW1lcmljIHZhbHVlKQoJYW1vdW50U3RyIDo9ICIiCglhbW91bnRTdGFydCA6PSBzdHJpbmdzLkluZGV4KGJldEpzb24sIGAiYW1vdW50IjpgKSArIGxlbihgImFtb3VudCI6YCkKCWlmIGFtb3VudFN0YXJ0ID4gbGVuKGAiYW1vdW50IjpgKSB7CgkJYW1vdW50RW5kIDo9IHN0cmluZ3MuSW5kZXhBbnkoYmV0SnNvblthbW91bnRTdGFydDpdLCBgLH1gKSArIGFtb3VudFN0YXJ0CgkJaWYgYW1vdW50RW5kID4gYW1vdW50U3RhcnQgewoJCQlhbW91bnRTdHIgPSBiZXRKc29uW2Ftb3VudFN0YXJ0OmFtb3VudEVuZF0KCQl9Cgl9CgoJYW1vdW50LCBfIDo9IHN0cmNvbnYuUGFyc2VVaW50KGFtb3VudFN0ciwgMTAsIDY0KQoJaWYgYW1vdW50ID4gMCAmJiBjb2luSWQgIT0gIiIgewoJCS8vIFJlc3RvcmUgdGhlIGRlZHVjdGVkIGJhbGFuY2UKCQliYWxLZXkgOj0gY2FsbGVyICsgIjoiICsgY29pbklkCgkJY3VycmVudCA6PSB1aW50NjQoMCkKCQlpZiBiYWxhbmNlcy5IYXMoYmFsS2V5KSB7CgkJCWN1cnJlbnQsIF8gPSBzdHJjb252LlBhcnNlVWludChiYWxhbmNlcy5HZXQoYmFsS2V5KS4oc3RyaW5nKSwgMTAsIDY0KQoJCX0KCQliYWxhbmNlcy5TZXQoYmFsS2V5LCBzdHJjb252LkZvcm1hdFVpbnQoY3VycmVudCthbW91bnQsIDEwKSkKCX0KCgljYXNpbm9Sb3VuZHMuUmVtb3ZlKGJldEtleSkKfQoKLy8g4pSA4pSAIFB2UCBMb2JiaWVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKLy8gQ3JlYXRlUHZwTG9iYnkgY3JlYXRlcyBhIG5ldyBQdlAgbG9iYnkgYW5kIGVzY3Jvd3MgdGhlIGNyZWF0b3IncyB3YWdlciBmcm9tIGJhbGFuY2VzLgovLyBQaGFzZSA2OiB3YWdlciA+IDAgZGVkdWN0cyBmcm9tIGJhbGFuY2VzIGFuZCByZWNvcmRzIHRoZSBlc2Nyb3cgaW4gcHZwV2FnZXJzLgpmdW5jIENyZWF0ZVB2cExvYmJ5KGN1ciByZWFsbSwgZ2FtZSBzdHJpbmcsIGNvaW5JZCBzdHJpbmcsIGJldEFtb3VudCBzdHJpbmcpIHN0cmluZyB7CglyZXF1aXJlTm90UGF1c2VkKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkuU3RyaW5nKCkKCWlmIGlzQmxhY2tsaXN0ZWQoY2FsbGVyKSB7CgkJcGFuaWMoImFkZHJlc3MgYmFubmVkIikKCX0KCgl3YWdlciwgZXJyIDo9IHN0cmNvbnYuUGFyc2VVaW50KGJldEFtb3VudCwgMTAsIDY0KQoJaWYgZXJyICE9IG5pbCB7CgkJcGFuaWMoImludmFsaWQgYmV0IGFtb3VudCIpCgl9CgoJLy8gRXNjcm93IGNyZWF0b3IncyB3YWdlciBmcm9tIGJhbGFuY2VzIChpZiB3YWdlciA+IDApCglpZiB3YWdlciA+IDAgewoJCWJhbEtleSA6PSBjYWxsZXIgKyAiOiIgKyBjb2luSWQKCQliYWwgOj0gdWludDY0KDApCgkJaWYgYmFsYW5jZXMuSGFzKGJhbEtleSkgewoJCQliYWwsIF8gPSBzdHJjb252LlBhcnNlVWludChiYWxhbmNlcy5HZXQoYmFsS2V5KS4oc3RyaW5nKSwgMTAsIDY0KQoJCX0KCQlpZiBiYWwgPCB3YWdlciB7CgkJCXBhbmljKCJpbnN1ZmZpY2llbnQgYmFsYW5jZSBmb3Igd2FnZXI6IG5lZWQgIiArIGJldEFtb3VudCArICIgIiArIGNvaW5JZCkKCQl9CgkJYmFsYW5jZXMuU2V0KGJhbEtleSwgc3RyY29udi5Gb3JtYXRVaW50KGJhbC13YWdlciwgMTApKQoJfQoKCXByZWZpeCA6PSBjYWxsZXIKCWlmIGxlbihwcmVmaXgpID4gOCB7CgkJcHJlZml4ID0gY2FsbGVyWzo4XQoJfQoJbG9iYnlJZCA6PSB1Zm10LlNwcmludGYoInB2cC0lcy0lZCIsIHByZWZpeCwgdGltZS5Ob3coKS5Vbml4KCkpCglsb2JieSA6PSBgeyJsb2JieUlkIjoiYCArIGxvYmJ5SWQgKyBgIiwiY3JlYXRvciI6ImAgKyBjYWxsZXIgKyBgIiwiZ2FtZSI6ImAgKyBnYW1lICsgYCIsImNvaW5JZCI6ImAgKyBjb2luSWQgKyBgIiwiYmV0QW1vdW50IjpgICsgYmV0QW1vdW50ICsgYCwic3RhdHVzIjoib3BlbiIsInJvdW5kIjoxLCJjcmVhdGVkQXQiOmAgKyBzdHJjb252LkZvcm1hdEludCh0aW1lLk5vdygpLlVuaXgoKSwgMTApICsgYH1gCglwdnBMb2JiaWVzLlNldChsb2JieUlkLCBsb2JieSkKCgkvLyBSZWNvcmQgd2FnZXIgZXNjcm93IChjaGFsbGVuZ2VyIGlzIGVtcHR5IHVudGlsIEpvaW5QdnBMb2JieSkKCWlmIHdhZ2VyID4gMCB7CgkJcHZwV2FnZXJzLlNldChsb2JieUlkLCBjb2luSWQrIjoiK2JldEFtb3VudCsiOiIrY2FsbGVyKyI6IikKCX0KCglyZXR1cm4gbG9iYnlJZAp9CgovLyBKb2luUHZwTG9iYnkgam9pbnMgYW4gZXhpc3RpbmcgUHZQIGxvYmJ5IGFuZCBlc2Nyb3dzIHRoZSBjaGFsbGVuZ2VyJ3MgbWF0Y2hpbmcgd2FnZXIuCi8vIFBoYXNlIDY6IGRlZHVjdHMgY2hhbGxlbmdlcidzIG1hdGNoaW5nIHdhZ2VyIGZyb20gYmFsYW5jZXMgYW5kIHVwZGF0ZXMgcHZwV2FnZXJzLgpmdW5jIEpvaW5QdnBMb2JieShjdXIgcmVhbG0sIGxvYmJ5SWQgc3RyaW5nKSB7CglyZXF1aXJlTm90UGF1c2VkKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkuU3RyaW5nKCkKCWlmIGlzQmxhY2tsaXN0ZWQoY2FsbGVyKSB7CgkJcGFuaWMoImFkZHJlc3MgYmFubmVkIikKCX0KCglpZiAhcHZwTG9iYmllcy5IYXMobG9iYnlJZCkgewoJCXBhbmljKCJsb2JieSBub3QgZm91bmQiKQoJfQoJaWYgcHZwTG9iYmllcy5IYXMobG9iYnlJZCArICI6Y2hhbGxlbmdlciIpIHsKCQlwYW5pYygibG9iYnkgYWxyZWFkeSBmdWxsIikKCX0KCgkvLyBQYXJzZSBjb2luSWQgYW5kIGJldEFtb3VudCBmcm9tIHdhZ2VyIHJlY29yZAoJaWYgcHZwV2FnZXJzLkhhcyhsb2JieUlkKSB7CgkJd2FnZXJTdHIgOj0gcHZwV2FnZXJzLkdldChsb2JieUlkKS4oc3RyaW5nKQoJCXBhcnRzIDo9IHN0cmluZ3MuU3BsaXROKHdhZ2VyU3RyLCAiOiIsIDQpCgkJaWYgbGVuKHBhcnRzKSA9PSA0IHsKCQkJY29pbklkIDo9IHBhcnRzWzBdCgkJCWJldEFtb3VudFN0ciA6PSBwYXJ0c1sxXQoJCQljcmVhdG9yIDo9IHBhcnRzWzJdCgoJCQlpZiBjYWxsZXIgPT0gY3JlYXRvciB7CgkJCQlwYW5pYygiY2Fubm90IGpvaW4geW91ciBvd24gbG9iYnkiKQoJCQl9CgoJCQl3YWdlciwgXyA6PSBzdHJjb252LlBhcnNlVWludChiZXRBbW91bnRTdHIsIDEwLCA2NCkKCQkJaWYgd2FnZXIgPiAwIHsKCQkJCS8vIEVzY3JvdyBjaGFsbGVuZ2VyJ3MgbWF0Y2hpbmcgd2FnZXIKCQkJCWJhbEtleSA6PSBjYWxsZXIgKyAiOiIgKyBjb2luSWQKCQkJCWJhbCA6PSB1aW50NjQoMCkKCQkJCWlmIGJhbGFuY2VzLkhhcyhiYWxLZXkpIHsKCQkJCQliYWwsIF8gPSBzdHJjb252LlBhcnNlVWludChiYWxhbmNlcy5HZXQoYmFsS2V5KS4oc3RyaW5nKSwgMTAsIDY0KQoJCQkJfQoJCQkJaWYgYmFsIDwgd2FnZXIgewoJCQkJCXBhbmljKCJpbnN1ZmZpY2llbnQgYmFsYW5jZSBmb3Igd2FnZXI6IG5lZWQgIiArIGJldEFtb3VudFN0ciArICIgIiArIGNvaW5JZCkKCQkJCX0KCQkJCWJhbGFuY2VzLlNldChiYWxLZXksIHN0cmNvbnYuRm9ybWF0VWludChiYWwtd2FnZXIsIDEwKSkKCQkJCS8vIFVwZGF0ZSB3YWdlciByZWNvcmQgd2l0aCBjaGFsbGVuZ2VyIGFkZHJlc3MKCQkJCXB2cFdhZ2Vycy5TZXQobG9iYnlJZCwgY29pbklkKyI6IitiZXRBbW91bnRTdHIrIjoiK2NyZWF0b3IrIjoiK2NhbGxlcikKCQkJfQoJCX0KCX0KCglwdnBMb2JiaWVzLlNldChsb2JieUlkKyI6Y2hhbGxlbmdlciIsIGNhbGxlcikKCXB2cExvYmJpZXMuU2V0KGxvYmJ5SWQrIjpzdGF0dXMiLCAiam9pbmVkIikKfQoKZnVuYyBDb21taXRQdnBNb3ZlKGN1ciByZWFsbSwgbG9iYnlJZCBzdHJpbmcsIG1vdmVIYXNoIHN0cmluZykgewoJcmVxdWlyZU5vdFBhdXNlZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpLlN0cmluZygpCglwdnBMb2JiaWVzLlNldChsb2JieUlkKyI6Y29tbWl0OiIrY2FsbGVyLCBtb3ZlSGFzaCkKfQoKLy8gUmV2ZWFsUHZwTW92ZSByZXF1aXJlcyBib3RoIHBsYXllcnMgdG8gaGF2ZSBjb21taXR0ZWQgYmVmb3JlIGVpdGhlciBjYW4gcmV2ZWFsLgovLyBQaGFzZSA2OiB3aGVuIGJvdGggcGxheWVycyBoYXZlIHJldmVhbGVkLCBkZXRlcm1pbmVzIHRoZSBSUFMgd2lubmVyIGFuZCBwYXlzIG91dAovLyAyw5cgd2FnZXIgbWludXMgMiUgcmFrZSB0byB0aGUgd2lubmVyLiBEcmF3ID0gZnVsbCByZWZ1bmQgdG8gYm90aCBwbGF5ZXJzLgovLyBwdnBXYWdlcnMuUmVtb3ZlIGlzIGNhbGxlZCBhZnRlciBwYXlvdXQgdG8gcHJldmVudCBkb3VibGUtcGF5b3V0cy4KZnVuYyBSZXZlYWxQdnBNb3ZlKGN1ciByZWFsbSwgbG9iYnlJZCBzdHJpbmcsIGNob2ljZSBzdHJpbmcsIHNhbHQgc3RyaW5nKSB7CglyZXF1aXJlTm90UGF1c2VkKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkuU3RyaW5nKCkKCgkvLyBWZXJpZnkgbG9iYnkgZXhpc3RzIGFuZCBib3RoIHBsYXllcnMgaGF2ZSBjb21taXR0ZWQKCWlmICFwdnBMb2JiaWVzLkhhcyhsb2JieUlkKSB7CgkJcGFuaWMoImxvYmJ5IG5vdCBmb3VuZCIpCgl9Cglsb2JieUpzb24gOj0gcHZwTG9iYmllcy5HZXQobG9iYnlJZCkuKHN0cmluZykKCS8vIEV4dHJhY3QgY3JlYXRvciBhZGRyZXNzIGZyb20gSlNPTgoJY3JlYXRvclN0YXJ0IDo9IHN0cmluZ3MuSW5kZXgobG9iYnlKc29uLCBgImNyZWF0b3IiOiJgKSArIGxlbihgImNyZWF0b3IiOiJgKQoJY3JlYXRvckVuZCA6PSBzdHJpbmdzLkluZGV4KGxvYmJ5SnNvbltjcmVhdG9yU3RhcnQ6XSwgYCJgKSArIGNyZWF0b3JTdGFydAoJY3JlYXRvciA6PSBsb2JieUpzb25bY3JlYXRvclN0YXJ0OmNyZWF0b3JFbmRdCgoJLy8gUmVxdWlyZSBjaGFsbGVuZ2VyIGhhcyBqb2luZWQKCWlmICFwdnBMb2JiaWVzLkhhcyhsb2JieUlkICsgIjpjaGFsbGVuZ2VyIikgewoJCXBhbmljKCJubyBvcHBvbmVudCBoYXMgam9pbmVkIHlldCIpCgl9CgljaGFsbGVuZ2VyIDo9IHB2cExvYmJpZXMuR2V0KGxvYmJ5SWQgKyAiOmNoYWxsZW5nZXIiKS4oc3RyaW5nKQoKCS8vIFJlcXVpcmUgYm90aCBjb21taXRzIGFyZSBwcmVzZW50CglpZiAhcHZwTG9iYmllcy5IYXMobG9iYnlJZCsiOmNvbW1pdDoiK2NyZWF0b3IpIHx8ICFwdnBMb2JiaWVzLkhhcyhsb2JieUlkKyI6Y29tbWl0OiIrY2hhbGxlbmdlcikgewoJCXBhbmljKCJib3RoIHBsYXllcnMgbXVzdCBjb21taXQgbW92ZXMgYmVmb3JlIHJldmVhbGluZyIpCgl9CgoJcHZwTG9iYmllcy5TZXQobG9iYnlJZCsiOnJldmVhbDoiK2NhbGxlciwgY2hvaWNlKyI6IitzYWx0KQoKCS8vIENoZWNrIGlmIGJvdGggcGxheWVycyBoYXZlIG5vdyByZXZlYWxlZAoJY3JlYXRvclJldmVhbGVkIDo9IHB2cExvYmJpZXMuSGFzKGxvYmJ5SWQgKyAiOnJldmVhbDoiICsgY3JlYXRvcikKCWNoYWxsZW5nZXJSZXZlYWxlZCA6PSBwdnBMb2JiaWVzLkhhcyhsb2JieUlkICsgIjpyZXZlYWw6IiArIGNoYWxsZW5nZXIpCgoJaWYgY3JlYXRvclJldmVhbGVkICYmIGNoYWxsZW5nZXJSZXZlYWxlZCB7CgkJLy8gQm90aCByZXZlYWxlZCDigJQgZGV0ZXJtaW5lIHdpbm5lciBhbmQgcGF5IG91dAoJCWNyZWF0b3JSZXZlYWwgOj0gcHZwTG9iYmllcy5HZXQobG9iYnlJZCArICI6cmV2ZWFsOiIgKyBjcmVhdG9yKS4oc3RyaW5nKQoJCWNoYWxsZW5nZXJSZXZlYWwgOj0gcHZwTG9iYmllcy5HZXQobG9iYnlJZCArICI6cmV2ZWFsOiIgKyBjaGFsbGVuZ2VyKS4oc3RyaW5nKQoKCQljcmVhdG9yQ2hvaWNlIDo9IHN0cmluZ3MuU3BsaXROKGNyZWF0b3JSZXZlYWwsICI6IiwgMilbMF0KCQljaGFsbGVuZ2VyQ2hvaWNlIDo9IHN0cmluZ3MuU3BsaXROKGNoYWxsZW5nZXJSZXZlYWwsICI6IiwgMilbMF0KCgkJd2lubmVyIDo9ICIiCgkJLy8gUm9jay1QYXBlci1TY2lzc29ycyBsb2dpYzogcm9jayBiZWF0cyBzY2lzc29ycywgc2Npc3NvcnMgYmVhdHMgcGFwZXIsIHBhcGVyIGJlYXRzIHJvY2sKCQlpZiBjcmVhdG9yQ2hvaWNlID09IGNoYWxsZW5nZXJDaG9pY2UgewoJCQl3aW5uZXIgPSAiZHJhdyIKCQl9IGVsc2UgaWYgKGNyZWF0b3JDaG9pY2UgPT0gInJvY2siICYmIGNoYWxsZW5nZXJDaG9pY2UgPT0gInNjaXNzb3JzIikgfHwKCQkJKGNyZWF0b3JDaG9pY2UgPT0gInNjaXNzb3JzIiAmJiBjaGFsbGVuZ2VyQ2hvaWNlID09ICJwYXBlciIpIHx8CgkJCShjcmVhdG9yQ2hvaWNlID09ICJwYXBlciIgJiYgY2hhbGxlbmdlckNob2ljZSA9PSAicm9jayIpIHsKCQkJd2lubmVyID0gY3JlYXRvcgoJCX0gZWxzZSB7CgkJCXdpbm5lciA9IGNoYWxsZW5nZXIKCQl9CgoJCXB2cExvYmJpZXMuU2V0KGxvYmJ5SWQrIjp3aW5uZXIiLCB3aW5uZXIpCgkJcHZwTG9iYmllcy5TZXQobG9iYnlJZCsiOnN0YXR1cyIsICJmaW5pc2hlZCIpCgoJCS8vIFBheSBvdXQgd2FnZXIgdG8gd2lubmVyIChvciByZWZ1bmQgYm90aCBvbiBkcmF3KQoJCWlmIHB2cFdhZ2Vycy5IYXMobG9iYnlJZCkgewoJCQl3YWdlclN0ciA6PSBwdnBXYWdlcnMuR2V0KGxvYmJ5SWQpLihzdHJpbmcpCgkJCXBhcnRzIDo9IHN0cmluZ3MuU3BsaXROKHdhZ2VyU3RyLCAiOiIsIDQpCgkJCWlmIGxlbihwYXJ0cykgPT0gNCB7CgkJCQljb2luSWQgOj0gcGFydHNbMF0KCQkJCXdhZ2VyLCBfIDo9IHN0cmNvbnYuUGFyc2VVaW50KHBhcnRzWzFdLCAxMCwgNjQpCgoJCQkJaWYgd2FnZXIgPiAwIHsKCQkJCQlyYWtlIDo9IHdhZ2VyICogMiAvIDEwMCAgLy8gMiUgcmFrZSB0byBhZG1pbgoJCQkJCXBheW91dCA6PSAod2FnZXIgKiAyKSAtIHJha2UKCgkJCQkJaWYgd2lubmVyID09ICJkcmF3IiB7CgkJCQkJCS8vIFJlZnVuZCBib3RoIHBsYXllcnMgdGhlaXIgd2FnZXIKCQkJCQkJZm9yIF8sIGFkZHIgOj0gcmFuZ2UgW11zdHJpbmd7Y3JlYXRvciwgY2hhbGxlbmdlcn0gewoJCQkJCQkJYmFsS2V5IDo9IGFkZHIgKyAiOiIgKyBjb2luSWQKCQkJCQkJCWJhbCA6PSB1aW50NjQoMCkKCQkJCQkJCWlmIGJhbGFuY2VzLkhhcyhiYWxLZXkpIHsKCQkJCQkJCQliYWwsIF8gPSBzdHJjb252LlBhcnNlVWludChiYWxhbmNlcy5HZXQoYmFsS2V5KS4oc3RyaW5nKSwgMTAsIDY0KQoJCQkJCQkJfQoJCQkJCQkJYmFsYW5jZXMuU2V0KGJhbEtleSwgc3RyY29udi5Gb3JtYXRVaW50KGJhbCt3YWdlciwgMTApKQoJCQkJCQl9CgkJCQkJfSBlbHNlIHsKCQkJCQkJLy8gUGF5IHdpbm5lciAyw5cgd2FnZXIgbWludXMgMiUgcmFrZQoJCQkJCQl3aW5LZXkgOj0gd2lubmVyICsgIjoiICsgY29pbklkCgkJCQkJCXdpbkJhbCA6PSB1aW50NjQoMCkKCQkJCQkJaWYgYmFsYW5jZXMuSGFzKHdpbktleSkgewoJCQkJCQkJd2luQmFsLCBfID0gc3RyY29udi5QYXJzZVVpbnQoYmFsYW5jZXMuR2V0KHdpbktleSkuKHN0cmluZyksIDEwLCA2NCkKCQkJCQkJfQoJCQkJCQliYWxhbmNlcy5TZXQod2luS2V5LCBzdHJjb252LkZvcm1hdFVpbnQod2luQmFsK3BheW91dCwgMTApKQoKCQkJCQkJLy8gUmFrZSBnb2VzIHRvIGFkbWluCgkJCQkJCWFkbWluS2V5IDo9IGFkbWluLlN0cmluZygpICsgIjoiICsgY29pbklkCgkJCQkJCWFkbWluQmFsIDo9IHVpbnQ2NCgwKQoJCQkJCQlpZiBiYWxhbmNlcy5IYXMoYWRtaW5LZXkpIHsKCQkJCQkJCWFkbWluQmFsLCBfID0gc3RyY29udi5QYXJzZVVpbnQoYmFsYW5jZXMuR2V0KGFkbWluS2V5KS4oc3RyaW5nKSwgMTAsIDY0KQoJCQkJCQl9CgkJCQkJCWJhbGFuY2VzLlNldChhZG1pbktleSwgc3RyY29udi5Gb3JtYXRVaW50KGFkbWluQmFsK3Jha2UsIDEwKSkKCQkJCQl9CgoJCQkJCS8vIFJlbW92ZSB3YWdlciByZWNvcmQgYWZ0ZXIgcGF5b3V0IHRvIHByZXZlbnQgZG91YmxlLXBheW91dHMKCQkJCQlwdnBXYWdlcnMuUmVtb3ZlKGxvYmJ5SWQpCgkJCQl9CgkJCX0KCQl9Cgl9IGVsc2UgewoJCXB2cExvYmJpZXMuU2V0KGxvYmJ5SWQrIjpzdGF0dXMiLCAicmV2ZWFsZWQiKQoJfQp9CgovLyBDbGFpbVB2cFRpbWVvdXQgYWxsb3dzIGEgbG9iYnkgcGFydGljaXBhbnQgdG8gY2xhaW0gYSB0aW1lb3V0IHdpbi4KLy8gT25seSB0aGUgY3JlYXRvciBvciBjaGFsbGVuZ2VyIG1heSBjYWxsIHRoaXMuCi8vIFBoYXNlIDY6IHJlZnVuZHMgdGhlIGVzY3Jvd2VkIHdhZ2VyIHRvIGFsbCBwYXJ0aWVzIHdobyBjb250cmlidXRlZC4KZnVuYyBDbGFpbVB2cFRpbWVvdXQoY3VyIHJlYWxtLCBsb2JieUlkIHN0cmluZykgewoJcmVxdWlyZU5vdFBhdXNlZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpLlN0cmluZygpCgoJaWYgIXB2cExvYmJpZXMuSGFzKGxvYmJ5SWQpIHsKCQlwYW5pYygibG9iYnkgbm90IGZvdW5kIikKCX0KCWxvYmJ5SnNvbiA6PSBwdnBMb2JiaWVzLkdldChsb2JieUlkKS4oc3RyaW5nKQoKCS8vIEV4dHJhY3QgY3JlYXRvciBhZGRyZXNzCgljcmVhdG9yU3RhcnQgOj0gc3RyaW5ncy5JbmRleChsb2JieUpzb24sIGAiY3JlYXRvciI6ImApICsgbGVuKGAiY3JlYXRvciI6ImApCgljcmVhdG9yRW5kIDo9IHN0cmluZ3MuSW5kZXgobG9iYnlKc29uW2NyZWF0b3JTdGFydDpdLCBgImApICsgY3JlYXRvclN0YXJ0CgljcmVhdG9yIDo9IGxvYmJ5SnNvbltjcmVhdG9yU3RhcnQ6Y3JlYXRvckVuZF0KCgkvLyBHZXQgY2hhbGxlbmdlciAobWF5IG5vdCBleGlzdCB5ZXQpCgljaGFsbGVuZ2VyIDo9ICIiCglpZiBwdnBMb2JiaWVzLkhhcyhsb2JieUlkICsgIjpjaGFsbGVuZ2VyIikgewoJCWNoYWxsZW5nZXIgPSBwdnBMb2JiaWVzLkdldChsb2JieUlkICsgIjpjaGFsbGVuZ2VyIikuKHN0cmluZykKCX0KCgkvLyBWZXJpZnkgY2FsbGVyIGlzIGEgcGFydGljaXBhbnQKCWlmIGNhbGxlciAhPSBjcmVhdG9yICYmIGNhbGxlciAhPSBjaGFsbGVuZ2VyIHsKCQlwYW5pYygibm90IGEgbG9iYnkgcGFydGljaXBhbnQiKQoJfQoKCS8vIFJlcXVpcmUgbWluaW11bSAxMCBtaW51dGVzIHNpbmNlIGxvYmJ5IGNyZWF0aW9uCgljcmVhdGVkQXRTdGFydCA6PSBzdHJpbmdzLkluZGV4KGxvYmJ5SnNvbiwgYCJjcmVhdGVkQXQiOmApICsgbGVuKGAiY3JlYXRlZEF0IjpgKQoJY3JlYXRlZEF0RW5kIDo9IHN0cmluZ3MuSW5kZXhBbnkobG9iYnlKc29uW2NyZWF0ZWRBdFN0YXJ0Ol0sIGAsfWApICsgY3JlYXRlZEF0U3RhcnQKCWNyZWF0ZWRBdCwgXyA6PSBzdHJjb252LlBhcnNlSW50KGxvYmJ5SnNvbltjcmVhdGVkQXRTdGFydDpjcmVhdGVkQXRFbmRdLCAxMCwgNjQpCglpZiB0aW1lLk5vdygpLlVuaXgoKS1jcmVhdGVkQXQgPCA2MDAgewoJCXBhbmljKCJ0aW1lb3V0IG5vdCB5ZXQgY2xhaW1hYmxlIOKAlCBtaW5pbXVtIDEwIG1pbnV0ZXMgbXVzdCBlbGFwc2UiKQoJfQoKCXB2cExvYmJpZXMuU2V0KGxvYmJ5SWQrIjp3aW5uZXIiLCBjYWxsZXIpCglwdnBMb2JiaWVzLlNldChsb2JieUlkKyI6c3RhdHVzIiwgImZpbmlzaGVkIikKCgkvLyBQaGFzZSA2OiBSZWZ1bmQgZXNjcm93ZWQgd2FnZXJzLgoJLy8gT24gdGltZW91dCB0aGUgY3JlYXRvciBhbHdheXMgZXNjcm93ZWQ7IHRoZSBjaGFsbGVuZ2VyIG1heSBvciBtYXkgbm90IGhhdmUgam9pbmVkLgoJLy8gUmVmdW5kIGJvdGggaWYgdGhleSBib3RoIGVzY3Jvd2VkIChjaGFsbGVuZ2VyIGpvaW5lZCBidXQgbmVpdGhlciByZXZlYWxlZCBpbiB0aW1lKS4KCS8vIElmIG9ubHkgdGhlIGNyZWF0b3IgZXNjcm93ZWQgKGNoYWxsZW5nZXIgbmV2ZXIgam9pbmVkKSwgcmVmdW5kIG9ubHkgdGhlIGNyZWF0b3IuCglpZiBwdnBXYWdlcnMuSGFzKGxvYmJ5SWQpIHsKCQl3YWdlclN0ciA6PSBwdnBXYWdlcnMuR2V0KGxvYmJ5SWQpLihzdHJpbmcpCgkJcGFydHMgOj0gc3RyaW5ncy5TcGxpdE4od2FnZXJTdHIsICI6IiwgNCkKCQlpZiBsZW4ocGFydHMpID09IDQgewoJCQljb2luSWQgOj0gcGFydHNbMF0KCQkJd2FnZXIsIF8gOj0gc3RyY29udi5QYXJzZVVpbnQocGFydHNbMV0sIDEwLCA2NCkKCQkJY3JlYXRvckluV2FnZXIgOj0gcGFydHNbMl0KCQkJY2hhbGxlbmdlckluV2FnZXIgOj0gcGFydHNbM10KCQkJLy8gUmVmdW5kIHdob2V2ZXIgZXNjcm93ZWQgKGNyZWF0b3IgYWx3YXlzIGRpZDsgY2hhbGxlbmdlciBtYXkgaGF2ZSBqb2luZWQpCgkJCWlmIHdhZ2VyID4gMCB7CgkJCQlmb3IgXywgYWRkciA6PSByYW5nZSBbXXN0cmluZ3tjcmVhdG9ySW5XYWdlciwgY2hhbGxlbmdlckluV2FnZXJ9IHsKCQkJCQlpZiBhZGRyID09ICIiIHsKCQkJCQkJY29udGludWUKCQkJCQl9CgkJCQkJYmFsS2V5IDo9IGFkZHIgKyAiOiIgKyBjb2luSWQKCQkJCQliYWwgOj0gdWludDY0KDApCgkJCQkJaWYgYmFsYW5jZXMuSGFzKGJhbEtleSkgewoJCQkJCQliYWwsIF8gPSBzdHJjb252LlBhcnNlVWludChiYWxhbmNlcy5HZXQoYmFsS2V5KS4oc3RyaW5nKSwgMTAsIDY0KQoJCQkJCX0KCQkJCQliYWxhbmNlcy5TZXQoYmFsS2V5LCBzdHJjb252LkZvcm1hdFVpbnQoYmFsK3dhZ2VyLCAxMCkpCgkJCQl9CgkJCQlwdnBXYWdlcnMuUmVtb3ZlKGxvYmJ5SWQpCgkJCX0KCQl9Cgl9Cn0KCmZ1bmMgRXhwaXJlTG9iYmllcyhjdXIgcmVhbG0pIHsKCWlmICFpc0FkbWluKGN1cikgewoJCXBhbmljKCJ1bmF1dGhvcml6ZWQiKQoJfQp9CgovLyDilIDilIAgQ29pbiBUcmFuc2ZlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCi8vIFRyYW5zZmVyIHNlbmRzIGNvaW5JZCBjb2lucyBmcm9tIHRoZSBjYWxsZXIgdG8gdG9BZGRyIGRpcmVjdGx5IG9uLWNoYWluLgovLyBCb3RoIGFkZHJlc3NlcyBtdXN0IGhhdmUgaW50ZXJhY3RlZCB3aXRoIHRoZSBnYW1lIHJlYWxtIGF0IGxlYXN0IG9uY2UuCmZ1bmMgVHJhbnNmZXIoY3VyIHJlYWxtLCBjb2luSWQgc3RyaW5nLCB0b0FkZHIgc3RyaW5nLCBhbW91bnRTdHIgc3RyaW5nKSB7CglyZXF1aXJlTm90UGF1c2VkKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkuU3RyaW5nKCkKCWlmIGlzQmxhY2tsaXN0ZWQoY2FsbGVyKSB7CgkJcGFuaWMoImFkZHJlc3MgYmFubmVkIikKCX0KCWlmICFzdHJpbmdzLkhhc1ByZWZpeCh0b0FkZHIsICJnMSIpIHsKCQlwYW5pYygiaW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzIikKCX0KCWlmIGNhbGxlciA9PSB0b0FkZHIgewoJCXBhbmljKCJjYW5ub3QgdHJhbnNmZXIgdG8geW91cnNlbGYiKQoJfQoJYW1vdW50LCBlcnIgOj0gc3RyY29udi5QYXJzZVVpbnQoYW1vdW50U3RyLCAxMCwgNjQpCglpZiBlcnIgIT0gbmlsIHx8IGFtb3VudCA9PSAwIHsKCQlwYW5pYygiaW52YWxpZCBhbW91bnQiKQoJfQoKCWZyb21LZXkgOj0gY2FsbGVyICsgIjoiICsgY29pbklkCgloYXZlIDo9IHVpbnQ2NCgwKQoJaWYgYmFsYW5jZXMuSGFzKGZyb21LZXkpIHsKCQloYXZlLCBfID0gc3RyY29udi5QYXJzZVVpbnQoYmFsYW5jZXMuR2V0KGZyb21LZXkpLihzdHJpbmcpLCAxMCwgNjQpCgl9CglpZiBoYXZlIDwgYW1vdW50IHsKCQlwYW5pYygiaW5zdWZmaWNpZW50IGJhbGFuY2U6IG5lZWQgIiArIGFtb3VudFN0ciArICIgaGF2ZSAiICsgc3RyY29udi5Gb3JtYXRVaW50KGhhdmUsIDEwKSkKCX0KCgkvLyBEZWR1Y3QgZnJvbSBzZW5kZXIKCWJhbGFuY2VzLlNldChmcm9tS2V5LCBzdHJjb252LkZvcm1hdFVpbnQoaGF2ZS1hbW91bnQsIDEwKSkKCgkvLyBDcmVkaXQgcmVjaXBpZW50Cgl0b0tleSA6PSB0b0FkZHIgKyAiOiIgKyBjb2luSWQKCXRvSGF2ZSA6PSB1aW50NjQoMCkKCWlmIGJhbGFuY2VzLkhhcyh0b0tleSkgewoJCXRvSGF2ZSwgXyA9IHN0cmNvbnYuUGFyc2VVaW50KGJhbGFuY2VzLkdldCh0b0tleSkuKHN0cmluZyksIDEwLCA2NCkKCX0KCWJhbGFuY2VzLlNldCh0b0tleSwgc3RyY29udi5Gb3JtYXRVaW50KHRvSGF2ZSthbW91bnQsIDEwKSkKfQoKLy8g4pSA4pSAIFRvb2xzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZnVuYyBCdXlUb29sKGN1ciByZWFsbSwgdG9vbElkIHN0cmluZykgewoJcmVxdWlyZU5vdFBhdXNlZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpLlN0cmluZygpCglpZiBpc0JsYWNrbGlzdGVkKGNhbGxlcikgewoJCXBhbmljKCJhZGRyZXNzIGJhbm5lZCIpCgl9CgoJLy8gTG9vayB1cCBjb3N0Cgljb3N0cywgaGFzQ29zdCA6PSB0b29sQ29zdHNbdG9vbElkXQoJaWYgIWhhc0Nvc3QgJiYgdG9vbElkICE9ICJoYW5kcyIgewoJCXBhbmljKCJ1bmtub3duIHRvb2w6ICIgKyB0b29sSWQpCgl9CgoJLy8gRGVkdWN0IGJhbGFuY2UgKGhhbmRzIGlzIGZyZWUsIG90aGVycyByZXF1aXJlIGNvaW5zKQoJaWYgaGFzQ29zdCAmJiBsZW4oY29zdHMpID4gMCB7CgkJZGVkdWN0QmFsYW5jZXMoY2FsbGVyLCBjb3N0cykKCX0KCgkvLyBHcmFudCB0b29sCglleGlzdGluZyA6PSAiIgoJaWYgb3duZWRUb29scy5IYXMoY2FsbGVyKSB7CgkJZXhpc3RpbmcgPSBvd25lZFRvb2xzLkdldChjYWxsZXIpLihzdHJpbmcpCgl9CglpZiBleGlzdGluZyA9PSAiIiB7CgkJb3duZWRUb29scy5TZXQoY2FsbGVyLCB0b29sSWQpCgl9IGVsc2UgewoJCW93bmVkVG9vbHMuU2V0KGNhbGxlciwgZXhpc3RpbmcrIiwiK3Rvb2xJZCkKCX0KfQoKZnVuYyBSZXBhaXJUb29sKGN1ciByZWFsbSwgdG9vbElkIHN0cmluZykgewoJcmVxdWlyZU5vdFBhdXNlZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpLlN0cmluZygpCglpZiBpc0JsYWNrbGlzdGVkKGNhbGxlcikgewoJCXBhbmljKCJhZGRyZXNzIGJhbm5lZCIpCgl9CgoJbWF4TGlmZSwgaGFzTGlmZSA6PSB0b29sTWF4TGlmZVt0b29sSWRdCglpZiAhaGFzTGlmZSB8fCBtYXhMaWZlID09IDAgewoJCXBhbmljKCJ0b29sIGNhbm5vdCBiZSByZXBhaXJlZDogIiArIHRvb2xJZCkKCX0KCgkvLyBDb3N0ID0gMzAlIG9mIGNyYWZ0IGNvc3QgKHJvdW5kZWQgdXAgcGVyIGNvaW4pCgliYXNlQ29zdHMsIGhhc0Nvc3QgOj0gdG9vbENvc3RzW3Rvb2xJZF0KCWlmICFoYXNDb3N0IHsKCQlwYW5pYygidW5rbm93biB0b29sOiAiICsgdG9vbElkKQoJfQoJdmFyIHJlcGFpckNvc3RzIFtdWzJdc3RyaW5nCglmb3IgXywgcGFpciA6PSByYW5nZSBiYXNlQ29zdHMgewoJCWNvaW5JZCwgYW10U3RyIDo9IHBhaXJbMF0sIHBhaXJbMV0KCQliYXNlQW10LCBfIDo9IHN0cmNvbnYuUGFyc2VVaW50KGFtdFN0ciwgMTAsIDY0KQoJCS8vIDMwJSByb3VuZGVkIHVwOiAoYmFzZSAqIDMwICsgOTkpIC8gMTAwCgkJcmVwYWlyQW10IDo9IChiYXNlQW10KjMwICsgOTkpIC8gMTAwCgkJaWYgcmVwYWlyQW10ID4gMCB7CgkJCXJlcGFpckNvc3RzID0gYXBwZW5kKHJlcGFpckNvc3RzLCBbMl1zdHJpbmd7Y29pbklkLCBzdHJjb252LkZvcm1hdFVpbnQocmVwYWlyQW10LCAxMCl9KQoJCX0KCX0KCglkZWR1Y3RCYWxhbmNlcyhjYWxsZXIsIHJlcGFpckNvc3RzKQoKCS8vIFJlc3RvcmUgZnVsbCBkdXJhYmlsaXR5Cgl0b29sTGlmZS5TZXQoY2FsbGVyKyI6Iit0b29sSWQsIHN0cmNvbnYuRm9ybWF0VWludChtYXhMaWZlLCAxMCkpCn0KCi8vIOKUgOKUgCBQcm9ncmVzc2lvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmZ1bmMgVHJhaW5Ta2lsbChjdXIgcmVhbG0sIHNraWxsSWQgc3RyaW5nKSB7CglyZXF1aXJlTm90UGF1c2VkKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkuU3RyaW5nKCkKCWlmIGlzQmxhY2tsaXN0ZWQoY2FsbGVyKSB7CgkJcGFuaWMoImFkZHJlc3MgYmFubmVkIikKCX0KCWtleSA6PSBjYWxsZXIgKyAiOiIgKyBza2lsbElkCgoJLy8gTG9vayB1cCBjdXJyZW50IHJhbmsKCXJhbmsgOj0gdWludDY0KDApCglpZiBza2lsbFJhbmtzLkhhcyhrZXkpIHsKCQlyYW5rLCBfID0gc3RyY29udi5QYXJzZVVpbnQoc2tpbGxSYW5rcy5HZXQoa2V5KS4oc3RyaW5nKSwgMTAsIDY0KQoJfQoKCS8vIENoZWNrIHJhbmsgY2FwCgltYXhSYW5rLCBoYXNNYXggOj0gc2tpbGxNYXhSYW5rc1tza2lsbElkXQoJaWYgIWhhc01heCB7CgkJcGFuaWMoInVua25vd24gc2tpbGw6ICIgKyBza2lsbElkKQoJfQoJaWYgcmFuayA+PSBtYXhSYW5rIHsKCQlwYW5pYygic2tpbGwgYWxyZWFkeSBhdCBtYXhpbXVtIHJhbmsiKQoJfQoKCS8vIENvbXB1dGUgY29zdDogYmFzZSDDlyAyXnJhbmsKCWJhc2VDb3N0cywgaGFzQ29zdCA6PSBza2lsbEJhc2VDb3N0c1tza2lsbElkXQoJaWYgIWhhc0Nvc3QgewoJCXBhbmljKCJ1bmtub3duIHNraWxsOiAiICsgc2tpbGxJZCkKCX0KCXZhciBzY2FsZWRDb3N0cyBbXVsyXXN0cmluZwoJbXVsdGlwbGllciA6PSB1aW50NjQoMSkKCWZvciBpIDo9IHVpbnQ2NCgwKTsgaSA8IHJhbms7IGkrKyB7CgkJbXVsdGlwbGllciAqPSAyCgl9Cglmb3IgXywgcGFpciA6PSByYW5nZSBiYXNlQ29zdHMgewoJCWNvaW5JZCwgYW10U3RyIDo9IHBhaXJbMF0sIHBhaXJbMV0KCQliYXNlQW10LCBfIDo9IHN0cmNvbnYuUGFyc2VVaW50KGFtdFN0ciwgMTAsIDY0KQoJCXNjYWxlZCA6PSBiYXNlQW10ICogbXVsdGlwbGllcgoJCWlmIHNjYWxlZCA+IDAgewoJCQlzY2FsZWRDb3N0cyA9IGFwcGVuZChzY2FsZWRDb3N0cywgWzJdc3RyaW5ne2NvaW5JZCwgc3RyY29udi5Gb3JtYXRVaW50KHNjYWxlZCwgMTApfSkKCQl9Cgl9CgoJZGVkdWN0QmFsYW5jZXMoY2FsbGVyLCBzY2FsZWRDb3N0cykKCgkvLyBJbmNyZW1lbnQgcmFuawoJc2tpbGxSYW5rcy5TZXQoa2V5LCBzdHJjb252LkZvcm1hdFVpbnQocmFuaysxLCAxMCkpCn0KCmZ1bmMgQ2xhaW1BY2hpZXZlbWVudChjdXIgcmVhbG0sIGFjaGlldmVtZW50SWQgc3RyaW5nKSB7CglyZXF1aXJlTm90UGF1c2VkKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkuU3RyaW5nKCkKCWtleSA6PSBjYWxsZXIgKyAiOiIgKyBhY2hpZXZlbWVudElkCglpZiBhY2hpZXZlbWVudHMuSGFzKGtleSkgewoJCXBhbmljKCJhbHJlYWR5IGNsYWltZWQiKQoJfQoJYWNoaWV2ZW1lbnRzLlNldChrZXksICIxIikKfQoKLy8gQmF0Y2hDbGFpbUFjaGlldmVtZW50cyBjbGFpbXMgbXVsdGlwbGUgYWNoaWV2ZW1lbnRzIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLgovLyBpZHNKc29uIGZvcm1hdDogWyJhY2gxIiwiYWNoMiIsLi4uXSDigJQgYWxyZWFkeS1jbGFpbWVkIElEcyBhcmUgc2lsZW50bHkgc2tpcHBlZC4KLy8gT25lIHR4IGluc3RlYWQgb2YgTiB0eHMg4oCUIDEww5cgY2hlYXBlciBmb3IgQ2xhaW0gQWxsLgpmdW5jIEJhdGNoQ2xhaW1BY2hpZXZlbWVudHMoY3VyIHJlYWxtLCBpZHNKc29uIHN0cmluZykgewoJcmVxdWlyZU5vdFBhdXNlZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpLlN0cmluZygpCgoJaWRzSnNvbiA9IHN0cmluZ3MuVHJpbVNwYWNlKGlkc0pzb24pCglpZHNKc29uID0gc3RyaW5ncy5UcmltUHJlZml4KGlkc0pzb24sICJbIikKCWlkc0pzb24gPSBzdHJpbmdzLlRyaW1TdWZmaXgoaWRzSnNvbiwgIl0iKQoKCWZvciBfLCBwYXJ0IDo9IHJhbmdlIHN0cmluZ3MuU3BsaXQoaWRzSnNvbiwgIiwiKSB7CgkJaWQgOj0gc3RyaW5ncy5UcmltKHN0cmluZ3MuVHJpbVNwYWNlKHBhcnQpLCAiXCIiKQoJCWlmIGlkID09ICIiIHsKCQkJY29udGludWUKCQl9CgkJa2V5IDo9IGNhbGxlciArICI6IiArIGlkCgkJaWYgYWNoaWV2ZW1lbnRzLkhhcyhrZXkpIHsKCQkJY29udGludWUKCQl9CgkJYWNoaWV2ZW1lbnRzLlNldChrZXksICIxIikKCX0KfQoKZnVuYyBEYWlseUNoZWNraW4oY3VyIHJlYWxtKSB7CglyZXF1aXJlTm90UGF1c2VkKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkuU3RyaW5nKCkKCW5vdyA6PSB0aW1lLk5vdygpLlVuaXgoKQoJaWYgZGFpbHlDaGVja2lucy5IYXMoY2FsbGVyKSB7CgkJbGFzdCwgXyA6PSBzdHJjb252LlBhcnNlSW50KGRhaWx5Q2hlY2tpbnMuR2V0KGNhbGxlcikuKHN0cmluZyksIDEwLCA2NCkKCQlpZiBub3ctbGFzdCA8IDg2NDAwIHsKCQkJcGFuaWMoInRvbyBzb29uIGZvciBkYWlseSBjaGVjay1pbiIpCgkJfQoJfQoJZGFpbHlDaGVja2lucy5TZXQoY2FsbGVyLCBzdHJjb252LkZvcm1hdEludChub3csIDEwKSkKfQoKLy8gQ3JlYXRlVGFzayByZWdpc3RlcnMgYSBuZXcgdGFzayBvbi1jaGFpbi4KZnVuYyBDcmVhdGVUYXNrKGN1ciByZWFsbSwgdGFza0lkIHN0cmluZywgZGVzYyBzdHJpbmcpIHsKCXJlcXVpcmVOb3RQYXVzZWQoKQoJY2FsbGVyIDo9IGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKS5TdHJpbmcoKQoJLy8gU3RvcmUgdGFzayBtZXRhZGF0YSBrZXllZCBieSB0YXNrSWQ7IG9ubHkgdGhlIGNyZWF0b3IgY2FuIGNyZWF0ZSBpdAoJYWNoaWV2ZW1lbnRzLlNldCgidGFzazoiK3Rhc2tJZCsiOmNyZWF0b3IiLCBjYWxsZXIpCglhY2hpZXZlbWVudHMuU2V0KCJ0YXNrOiIrdGFza0lkKyI6ZGVzYyIsIGRlc2MpCn0KCmZ1bmMgQ29tcGxldGVUYXNrKGN1ciByZWFsbSwgdGFza0lkIHN0cmluZykgewoJcmVxdWlyZU5vdFBhdXNlZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpLlN0cmluZygpCglhY2hpZXZlbWVudHMuU2V0KGNhbGxlcisiOiIrdGFza0lkLCAidGFzazoxIikKfQoKZnVuYyBSZWdpc3RlclZlaW4oY3VyIHJlYWxtLCBjb2luSWQgc3RyaW5nLCBtYXhTdXBwbHkgc3RyaW5nKSB7CglpZiAhaXNBZG1pbihjdXIpIHsKCQlwYW5pYygidW5hdXRob3JpemVkIikKCX0KCXZlaW5TdXBwbHkuU2V0KGNvaW5JZCwgbWF4U3VwcGx5KyI6IittYXhTdXBwbHkpCn0KCi8vIOKUgOKUgCBRdWVyaWVzIChwdXJlIHJlYWRzIOKAlCBubyBjdXIgcmVhbG0gbmVlZGVkKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmZ1bmMgUGVuZGluZ01pbnRzKHBsYXllckFkZHIgc3RyaW5nKSBzdHJpbmcgewoJdmFyIHBhcnRzIFtdc3RyaW5nCglwZW5kaW5nTWludHMuSXRlcmF0ZShwbGF5ZXJBZGRyKyI6IiwgcGxheWVyQWRkcisiOlx4RkYiLCBmdW5jKGtleSBzdHJpbmcsIHZhbCBhbnkpIGJvb2wgewoJCWNvaW5JZCA6PSBzdHJpbmdzLlRyaW1QcmVmaXgoa2V5LCBwbGF5ZXJBZGRyKyI6IikKCQlwYXJ0cyA9IGFwcGVuZChwYXJ0cywgYFsiYCtjb2luSWQrYCIsImArdmFsLihzdHJpbmcpK2AiXWApCgkJcmV0dXJuIGZhbHNlCgl9KQoJcmV0dXJuIHVmbXQuU3ByaW50ZihgeyJwZW5kaW5nIjpbJXNdfWAsIHN0cmluZ3MuSm9pbihwYXJ0cywgIiwiKSkKfQoKZnVuYyBBbGxCYWxhbmNlcyhwbGF5ZXJBZGRyIHN0cmluZykgc3RyaW5nIHsKCXZhciBwYXJ0cyBbXXN0cmluZwoJYmFsYW5jZXMuSXRlcmF0ZShwbGF5ZXJBZGRyKyI6IiwgcGxheWVyQWRkcisiOlx4RkYiLCBmdW5jKGtleSBzdHJpbmcsIHZhbCBhbnkpIGJvb2wgewoJCWNvaW5JZCA6PSBzdHJpbmdzLlRyaW1QcmVmaXgoa2V5LCBwbGF5ZXJBZGRyKyI6IikKCQlwYXJ0cyA9IGFwcGVuZChwYXJ0cywgYCJgK2NvaW5JZCtgIjpgK3ZhbC4oc3RyaW5nKSkKCQlyZXR1cm4gZmFsc2UKCX0pCglyZXR1cm4gInsiICsgc3RyaW5ncy5Kb2luKHBhcnRzLCAiLCIpICsgIn0iCn0KCmZ1bmMgVmVpblN1cHBseShjb2luSWQgc3RyaW5nKSBzdHJpbmcgewoJaWYgIXZlaW5TdXBwbHkuSGFzKGNvaW5JZCkgewoJCXJldHVybiBgeyJyZW1haW5pbmciOiIwIiwibWF4IjoiMCJ9YAoJfQoJcCA6PSBzdHJpbmdzLlNwbGl0Tih2ZWluU3VwcGx5LkdldChjb2luSWQpLihzdHJpbmcpLCAiOiIsIDIpCglpZiBsZW4ocCkgIT0gMiB7CgkJcmV0dXJuIGB7InJlbWFpbmluZyI6IjAiLCJtYXgiOiIwIn1gCgl9CglyZXR1cm4gYHsicmVtYWluaW5nIjoiYCArIHBbMF0gKyBgIiwibWF4IjoiYCArIHBbMV0gKyBgIn1gCn0KCmZ1bmMgQ2FzaW5vUm91bmQocm91bmRJZCBzdHJpbmcpIHN0cmluZyB7CglpZiAhY2FzaW5vUm91bmRzLkhhcyhyb3VuZElkKSB7CgkJcmV0dXJuICJudWxsIgoJfQoJcmV0dXJuIGNhc2lub1JvdW5kcy5HZXQocm91bmRJZCkuKHN0cmluZykKfQoKZnVuYyBDYXNpbm9IaXN0b3J5KF8gc3RyaW5nKSBzdHJpbmcgeyByZXR1cm4gIltdIiB9CgpmdW5jIFB2cExvYmJ5KGxvYmJ5SWQgc3RyaW5nKSBzdHJpbmcgewoJaWYgIXB2cExvYmJpZXMuSGFzKGxvYmJ5SWQpIHsKCQlyZXR1cm4gIm51bGwiCgl9CglyZXR1cm4gcHZwTG9iYmllcy5HZXQobG9iYnlJZCkuKHN0cmluZykKfQoKZnVuYyBPcGVuTG9iYmllcygpIHN0cmluZyB7Cgl2YXIgcGFydHMgW11zdHJpbmcKCXB2cExvYmJpZXMuSXRlcmF0ZSgicHZwLSIsICJwdnAtXHhGRiIsIGZ1bmMoa2V5IHN0cmluZywgdmFsIGFueSkgYm9vbCB7CgkJaWYgIXN0cmluZ3MuQ29udGFpbnMoa2V5LCAiOiIpIHsKCQkJcGFydHMgPSBhcHBlbmQocGFydHMsIHZhbC4oc3RyaW5nKSkKCQl9CgkJcmV0dXJuIGZhbHNlCgl9KQoJcmV0dXJuICJbIiArIHN0cmluZ3MuSm9pbihwYXJ0cywgIiwiKSArICJdIgp9CgpmdW5jIEphY2twb3RQb29sKGNvaW5JZCBzdHJpbmcpIHN0cmluZyB7CglyZXR1cm4gYHsicG9vbCI6IjAiLCJjb2luSWQiOiJgICsgY29pbklkICsgYCJ9YAp9CgpmdW5jIFBsYXllclByb2ZpbGUocGxheWVyQWRkciBzdHJpbmcpIHN0cmluZyB7CglyZXR1cm4gYHsiYWRkcmVzcyI6ImAgKyBwbGF5ZXJBZGRyICsgYCJ9YAp9CgpmdW5jIE93bmVkVG9vbHMocGxheWVyQWRkciBzdHJpbmcpIHN0cmluZyB7CglpZiAhb3duZWRUb29scy5IYXMocGxheWVyQWRkcikgewoJCXJldHVybiBgWyJoYW5kcyJdYAoJfQoJaWRzIDo9IHN0cmluZ3MuU3BsaXQob3duZWRUb29scy5HZXQocGxheWVyQWRkcikuKHN0cmluZyksICIsIikKCXZhciBxdW90ZWQgW11zdHJpbmcKCWZvciBfLCBpZCA6PSByYW5nZSBpZHMgewoJCXF1b3RlZCA9IGFwcGVuZChxdW90ZWQsIGAiYCtpZCtgImApCgl9CglyZXR1cm4gIlsiICsgc3RyaW5ncy5Kb2luKHF1b3RlZCwgIiwiKSArICJdIgp9CgpmdW5jIExpZmV0aW1lTWluZWQocGxheWVyQWRkciBzdHJpbmcpIHN0cmluZyB7Cgl2YXIgcGFydHMgW11zdHJpbmcKCWxpZmV0aW1lTWluZWQuSXRlcmF0ZShwbGF5ZXJBZGRyKyI6IiwgcGxheWVyQWRkcisiOlx4RkYiLCBmdW5jKGtleSBzdHJpbmcsIHZhbCBhbnkpIGJvb2wgewoJCWNvaW5JZCA6PSBzdHJpbmdzLlRyaW1QcmVmaXgoa2V5LCBwbGF5ZXJBZGRyKyI6IikKCQlwYXJ0cyA9IGFwcGVuZChwYXJ0cywgYCJgK2NvaW5JZCtgIjpgK3ZhbC4oc3RyaW5nKSkKCQlyZXR1cm4gZmFsc2UKCX0pCglyZXR1cm4gInsiICsgc3RyaW5ncy5Kb2luKHBhcnRzLCAiLCIpICsgIn0iCn0KCmZ1bmMgQWxsTWluZXJzKGxpbWl0IGludCwgb2Zmc2V0IGludCkgc3RyaW5nIHsKCXZhciBwYXJ0cyBbXXN0cmluZwoJY291bnQsIHNraXBwZWQgOj0gMCwgMAoJbWluZXJzLkl0ZXJhdGUoIiIsICJceEZGIiwgZnVuYyhrZXkgc3RyaW5nLCB2YWwgYW55KSBib29sIHsKCQlpZiBza2lwcGVkIDwgb2Zmc2V0IHsKCQkJc2tpcHBlZCsrCgkJCXJldHVybiBmYWxzZQoJCX0KCQlpZiBjb3VudCA+PSBsaW1pdCB7CgkJCXJldHVybiB0cnVlCgkJfQoJCWRpc3BsYXkgOj0ga2V5CgkJaWYgbGVuKGRpc3BsYXkpID4gMTIgewoJCQlkaXNwbGF5ID0gZGlzcGxheVs6OF0gKyAiLi4uIgoJCX0KCQlwYXJ0cyA9IGFwcGVuZChwYXJ0cywgYHsiYWRkcmVzcyI6ImAra2V5K2AiLCJkaXNwbGF5IjoiYCtkaXNwbGF5K2AiLCJ0b3RhbCI6YCt2YWwuKHN0cmluZykrYH1gKQoJCWNvdW50KysKCQlyZXR1cm4gZmFsc2UKCX0pCglyZXR1cm4gIlsiICsgc3RyaW5ncy5Kb2luKHBhcnRzLCAiLCIpICsgIl0iCn0KCmZ1bmMgR2V0TWVkYWxzKHBsYXllckFkZHIgc3RyaW5nKSBzdHJpbmcgewoJdmFyIGNsYWltZWQgW11zdHJpbmcKCWFjaGlldmVtZW50cy5JdGVyYXRlKHBsYXllckFkZHIrIjoiLCBwbGF5ZXJBZGRyKyI6XHhGRiIsIGZ1bmMoa2V5IHN0cmluZywgdmFsIGFueSkgYm9vbCB7CgkJYWNoSWQgOj0gc3RyaW5ncy5UcmltUHJlZml4KGtleSwgcGxheWVyQWRkcisiOiIpCgkJY2xhaW1lZCA9IGFwcGVuZChjbGFpbWVkLCBgImArYWNoSWQrYCJgKQoJCXJldHVybiBmYWxzZQoJfSkKCXJldHVybiB1Zm10LlNwcmludGYoYHsibWVkYWxzIjpbJXNdfWAsIHN0cmluZ3MuSm9pbihjbGFpbWVkLCAiLCIpKQp9CgpmdW5jIERhaWx5Q2hlY2tpblN0YXR1cyhwbGF5ZXJBZGRyIHN0cmluZykgc3RyaW5nIHsKCW5vdyA6PSB0aW1lLk5vdygpLlVuaXgoKQoJbGFzdCA6PSBpbnQ2NCgwKQoJaWYgZGFpbHlDaGVja2lucy5IYXMocGxheWVyQWRkcikgewoJCWxhc3QsIF8gPSBzdHJjb252LlBhcnNlSW50KGRhaWx5Q2hlY2tpbnMuR2V0KHBsYXllckFkZHIpLihzdHJpbmcpLCAxMCwgNjQpCgl9Cglkb25lIDo9IG5vdy1sYXN0IDwgODY0MDAKCXJldHVybiB1Zm10LlNwcmludGYoYHsib2siOnRydWUsImRvbmUiOiV0LCJzdHJlYWsiOjEsIm5leHQiOiVkfWAsIGRvbmUsIGxhc3QrODY0MDApCn0KCmZ1bmMgTGlzdFRhc2tzKF8gc3RyaW5nKSBzdHJpbmcgeyByZXR1cm4gYHsib2siOnRydWUsInRhc2tzIjpbXX1gIH0KCmZ1bmMgU2tpbGxSYW5rcyhwbGF5ZXJBZGRyIHN0cmluZykgc3RyaW5nIHsKCXZhciBwYXJ0cyBbXXN0cmluZwoJc2tpbGxSYW5rcy5JdGVyYXRlKHBsYXllckFkZHIrIjoiLCBwbGF5ZXJBZGRyKyI6XHhGRiIsIGZ1bmMoa2V5IHN0cmluZywgdmFsIGFueSkgYm9vbCB7CgkJc2tpbGxJZCA6PSBzdHJpbmdzLlRyaW1QcmVmaXgoa2V5LCBwbGF5ZXJBZGRyKyI6IikKCQlwYXJ0cyA9IGFwcGVuZChwYXJ0cywgYCJgK3NraWxsSWQrYCI6YCt2YWwuKHN0cmluZykpCgkJcmV0dXJuIGZhbHNlCgl9KQoJcmV0dXJuICJ7IiArIHN0cmluZ3MuSm9pbihwYXJ0cywgIiwiKSArICJ9Igp9CgpmdW5jIFRvb2xMaWZlKHBsYXllckFkZHIgc3RyaW5nKSBzdHJpbmcgewoJdmFyIHBhcnRzIFtdc3RyaW5nCgl0b29sTGlmZS5JdGVyYXRlKHBsYXllckFkZHIrIjoiLCBwbGF5ZXJBZGRyKyI6XHhGRiIsIGZ1bmMoa2V5IHN0cmluZywgdmFsIGFueSkgYm9vbCB7CgkJdG9vbElkIDo9IHN0cmluZ3MuVHJpbVByZWZpeChrZXksIHBsYXllckFkZHIrIjoiKQoJCXBhcnRzID0gYXBwZW5kKHBhcnRzLCBgImArdG9vbElkK2AiOmArdmFsLihzdHJpbmcpKQoJCXJldHVybiBmYWxzZQoJfSkKCXJldHVybiAieyIgKyBzdHJpbmdzLkpvaW4ocGFydHMsICIsIikgKyAifSIKfQoKLy8g4pSA4pSAIFJlbmRlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmZ1bmMgUmVuZGVyKF8gc3RyaW5nKSBzdHJpbmcgewoJcmV0dXJuIHVmbXQuU3ByaW50ZigiIyBHbm9Nb2ppIEdhbWUgUmVhbG1cblxuQWRtaW46IGAlc2BcblxuUGF0aDogYGduby5sYW5kL3IvZzEzOGdkbXdqNmhlZHV1M3N0Nzk2bHc2cXFkd3lsZ2F4Zjd0eTVnei9nYW1lMTFgXG5cbk1pbmUgZW1vamkgY29pbnMgb24gR25vLmxhbmQhXG4iLCBhZG1pbi5TdHJpbmcoKSkKfQoKLy8g4pSA4pSAIEhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgovLyBkZWR1Y3RCYWxhbmNlcyBhdG9taWNhbGx5IGNoZWNrcyBhbGwgYmFsYW5jZXMgdGhlbiBkZWR1Y3RzIHRoZW0uCi8vIFBhbmljcyBpZiBhbnkgYmFsYW5jZSBpcyBpbnN1ZmZpY2llbnQg4oCUIG5vIHBhcnRpYWwgZGVkdWN0aW9ucy4KLy8gY29zdHMgaXMgYSBzbGljZSBvZiBbY29pbklkLCBhbW91bnRdIHBhaXJzLgpmdW5jIGRlZHVjdEJhbGFuY2VzKGNhbGxlciBzdHJpbmcsIGNvc3RzIFtdWzJdc3RyaW5nKSB7CgkvLyBGaXJzdCBwYXNzOiB2ZXJpZnkgYWxsIHN1ZmZpY2llbnQKCWZvciBfLCBwYWlyIDo9IHJhbmdlIGNvc3RzIHsKCQljb2luSWQsIGFtdFN0ciA6PSBwYWlyWzBdLCBwYWlyWzFdCgkJcmVxdWlyZWQsIGVyciA6PSBzdHJjb252LlBhcnNlVWludChhbXRTdHIsIDEwLCA2NCkKCQlpZiBlcnIgIT0gbmlsIHx8IHJlcXVpcmVkID09IDAgewoJCQljb250aW51ZQoJCX0KCQliYWxLZXkgOj0gY2FsbGVyICsgIjoiICsgY29pbklkCgkJaGF2ZSA6PSB1aW50NjQoMCkKCQlpZiBiYWxhbmNlcy5IYXMoYmFsS2V5KSB7CgkJCWhhdmUsIF8gPSBzdHJjb252LlBhcnNlVWludChiYWxhbmNlcy5HZXQoYmFsS2V5KS4oc3RyaW5nKSwgMTAsIDY0KQoJCX0KCQlpZiBoYXZlIDwgcmVxdWlyZWQgewoJCQlwYW5pYygiaW5zdWZmaWNpZW50ICIgKyBjb2luSWQgKyAiOiBuZWVkICIgKyBhbXRTdHIgKyAiIGhhdmUgIiArIHN0cmNvbnYuRm9ybWF0VWludChoYXZlLCAxMCkpCgkJfQoJfQoJLy8gU2Vjb25kIHBhc3M6IGRlZHVjdCBhbGwKCWZvciBfLCBwYWlyIDo9IHJhbmdlIGNvc3RzIHsKCQljb2luSWQsIGFtdFN0ciA6PSBwYWlyWzBdLCBwYWlyWzFdCgkJcmVxdWlyZWQsIGVyciA6PSBzdHJjb252LlBhcnNlVWludChhbXRTdHIsIDEwLCA2NCkKCQlpZiBlcnIgIT0gbmlsIHx8IHJlcXVpcmVkID09IDAgewoJCQljb250aW51ZQoJCX0KCQliYWxLZXkgOj0gY2FsbGVyICsgIjoiICsgY29pbklkCgkJY3VycmVudCwgXyA6PSBzdHJjb252LlBhcnNlVWludChiYWxhbmNlcy5HZXQoYmFsS2V5KS4oc3RyaW5nKSwgMTAsIDY0KQoJCWJhbGFuY2VzLlNldChiYWxLZXksIHN0cmNvbnYuRm9ybWF0VWludChjdXJyZW50LXJlcXVpcmVkLCAxMCkpCgl9Cn0KCmZ1bmMgc3BsaXRKc29uQXJyYXkocyBzdHJpbmcpIFtdc3RyaW5nIHsKCXZhciByZXN1bHQgW11zdHJpbmcKCWRlcHRoLCBzdGFydCA6PSAwLCAwCglmb3IgaSA6PSAwOyBpIDwgbGVuKHMpOyBpKysgewoJCXN3aXRjaCBzW2ldIHsKCQljYXNlICdbJywgJ3snOgoJCQlkZXB0aCsrCgkJY2FzZSAnXScsICd9JzoKCQkJZGVwdGgtLQoJCWNhc2UgJywnOgoJCQlpZiBkZXB0aCA9PSAwIHsKCQkJCWlmIGUgOj0gc3RyaW5ncy5UcmltU3BhY2Uoc1tzdGFydDppXSk7IGUgIT0gIiIgewoJCQkJCXJlc3VsdCA9IGFwcGVuZChyZXN1bHQsIGUpCgkJCQl9CgkJCQlzdGFydCA9IGkgKyAxCgkJCX0KCQl9Cgl9CglpZiBlIDo9IHN0cmluZ3MuVHJpbVNwYWNlKHNbc3RhcnQ6XSk7IGUgIT0gIiIgewoJCXJlc3VsdCA9IGFwcGVuZChyZXN1bHQsIGUpCgl9CglyZXR1cm4gcmVzdWx0Cn0KGmEKC2dub21vZC50b21sElJtb2R1bGUgPSAiZ25vLmxhbmQvci9nMTM4Z2Rtd2o2aGVkdXUzc3Q3OTZsdzZxcWR3eWxnYXhmN3R5NWd6L2dhbWUyMiIKZ25vID0gIjAuOSIKIiIKEy9nbm8uTWVtUGFja2FnZVR5cGUSCwoJTVBVc2VyQWxsEhMIgLi4chIMMTAwMDAwMHVnbm90GqgBCjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohAuCfaRJ9PxPjmd6TcpjTREmcQVllOeTR4PFUcvse/APaEkBLDC7aoFULi/CjrVFSS6LMdHf/nlz/lJNO1oY7norXm3+r1zF851HFiTm1Nyw57Le/LCg/aTybvi2tW6LONELnGihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl

Raw transaction data

Raw JSON data