Transaction executed successfully
Transaction Details
Inspect execution, participants, message data, gas usage, events and raw transaction data.
Transaction hash
6250CDF7AE1E486D094D7BF8B674371D607A65C9A9E8C210DFFBE6F2E497E92F
Transaction overview
Execution summary
TX INDEX
1
Position in block
GAS WANTED
150,000,000
Requested gas limit
GAS USED
26,564,234
Gas consumed
FEE
150000ugnot
Transaction fee
Participants
Message
Message #1
m_addpkg
Arguments
g1qp5pt8cdq2f6kfdamn3yuxwg6quqnfpyewzz3910000000ugnot
Execution log
msg:0,success:true,log:,events:[]
Events
No events emitted by this transaction.
Raw encoded transaction
CtCVAQoML3ZtLm1fYWRkcGtnEr6VAQooZzFxcDVwdDhjZHEyZjZrZmRhbW4zeXV4d2c2cXVxbmZweWV3enozORKBlQEKCWZlZWxlZGdlchI9Z25vLmxhbmQvcC9nMXFwNXB0OGNkcTJmNmtmZGFtbjN5dXh3ZzZxdXFuZnB5ZXd6ejM5L2ZlZWxlZGdlchqlRAoNZmVlbGVkZ2VyLmdubxKTRC8vIFBhY2thZ2UgZmVlbGVkZ2VyIGlzIGEgcHVyZSBhY2NvdW50aW5nIHByaW1pdGl2ZSBmb3IgcmVhbG1zIHRoYXQgaG9sZAovLyBjb2lucyBvbiBiZWhhbGYgb2YgdXNlcnMgYW5kIGNoYXJnZSBhbiBleHBsaWNpdCBwcm90b2NvbCBmZWUgb24KLy8gZGVwb3NpdHMuIEl0IHRyYWNrcyBwZXItYWNjb3VudCBiYWxhbmNlcywgdGhlIHN1bSBvZiB1c2VyIGxpYWJpbGl0aWVzLAovLyBhbmQgYSBzZXBhcmF0ZWx5LWFjY3J1ZWQgZmVlIHBvdC4gSXQgbmV2ZXIgdG91Y2hlcyBjb2lucyBpdHNlbGY6IHRoZQovLyBpbXBvcnRpbmcgcmVhbG0gbW92ZXMgY29pbnMgYW5kIGRyaXZlcyB0aGlzIGxlZGdlciwga2VlcGluZyB0aGUgdHdvIGluCi8vIGxvY2stc3RlcCBzbyB0aGF0Ci8vCi8vCWNvaW5zIGhlbGQgYnkgcmVhbG0gPT0gVXNlcnNUb3RhbCgpICsgRmVlc0FjY3J1ZWQoKSArIHN1cnBsdXMKLy8KLy8gd2hlcmUgc3VycGx1cyBpcyBjb2lucyBwdXNoZWQgdG8gdGhlIHJlYWxtIG91dHNpZGUgdGhlIGxlZGdlcidzIGZsb3cKLy8gKGFsd2F5cyA+PSAwLCBhbmQgMCBpZiBldmVyeSBjb2luIG1vdmVtZW50IGdvZXMgdGhyb3VnaCB0aGUgbGVkZ2VyKS4KLy8KLy8gRmVlIG1vZGVsOgovLyAgIC0gRmVlcyBhcmUgZXhwcmVzc2VkIGluIGJhc2lzIHBvaW50cyAoMSBicHMgPSAwLjAxJSk7IEJwc0Rlbm9taW5hdG9yCi8vICAgICBpcyAxMDAwMCwgc28gYnBzID09IDEwMDAwIG1lYW5zIHRoZSB3aG9sZSBkZXBvc2l0IGlzIGZlZS4KLy8gICAtIGZlZSA9IGZsb29yKGFtb3VudCAqIGJwcyAvIDEwMDAwKS4gUm91bmRpbmcgYWx3YXlzIGZhdm9ycyB0aGUKLy8gICAgIERFUE9TSVRPUjogYW55IGZyYWN0aW9uYWwgZmVlIGlzIGRyb3BwZWQsIHRoZSBhY2NvdW50IGlzIGNyZWRpdGVkCi8vICAgICBhbW91bnQgLSBmZWUuIEEgc21hbGwgZGVwb3NpdCBtYXkgdGhlcmVmb3JlIHBheSB6ZXJvIGZlZS4KLy8gICAtIFRoZXJlIGlzIG5vIG1pbmltdW0gZmVlLiBUaGUgbWF4aW11bSBmZWUgaXMgYm91bmRlZCBieSB0aGUKLy8gICAgIHBlci1sZWRnZXIgY2FwIHNldCBhdCBjb25zdHJ1Y3Rpb24gKG1heEZlZUJwcyA8PSAxMDAwMCksIHNvIGEgZmVlCi8vICAgICBjYW4gbmV2ZXIgZXhjZWVkIGl0cyBkZXBvc2l0LgovLyAgIC0gYnBzID09IDAgaXMgYSB2YWxpZCBjb25maWd1cmF0aW9uOiBmZWUgaXMgZXhhY3RseSAwIGFuZCB0aGUgZnVsbAovLyAgICAgYW1vdW50IGlzIGNyZWRpdGVkLgovLwovLyBBbGwgZmFpbHVyZXMgYXJlIHJldHVybmVkIGFzIGVycm9ycyBhbmQgbGVhdmUgdGhlIGxlZGdlciBDT01QTEVURUxZCi8vIFVOQ0hBTkdFRDsgY2FsbGVycyBpbiByZWFsbXMgdHlwaWNhbGx5IHdyYXAgY2FsbHMgc28gYW4gZXJyb3IgcGFuaWNzCi8vIGFuZCBhYm9ydHMgdGhlIHRyYW5zYWN0aW9uLiBNdXN0KiB3cmFwcGVycyBhcmUgcHJvdmlkZWQgYW5kIGFyZSB0aGUKLy8gb25seSBmdW5jdGlvbnMgaW4gdGhpcyBwYWNrYWdlIHRoYXQgcGFuaWMuCi8vCi8vIFRoZSBsZWRnZXIgaXMgYWRkcmVzcy1hZ25vc3RpYzogYWNjb3VudHMgYXJlIG5vbi1lbXB0eSBzdHJpbmdzLiBSZWFsbXMKLy8gbm9ybWFsbHkgdXNlIGFkZHJlc3MuU3RyaW5nKCkuCnBhY2thZ2UgZmVlbGVkZ2VyCgppbXBvcnQgKAoJImVycm9ycyIKCgkiZ25vLmxhbmQvcC9udC9hdmwvdjAiCikKCi8vIEJwc0Rlbm9taW5hdG9yIGlzIHRoZSBmZWUgYmFzaXM6IGZlZXMgYXJlIGJwcy9CcHNEZW5vbWluYXRvciBvZiB0aGUKLy8gZGVwb3NpdGVkIGFtb3VudC4KY29uc3QgQnBzRGVub21pbmF0b3IgPSBpbnQ2NCgxMDAwMCkKCi8vIEVycm9ycyByZXR1cm5lZCBieSBMZWRnZXIgb3BlcmF0aW9ucy4KdmFyICgKCUVyckVtcHR5QWNjb3VudCAgPSBlcnJvcnMuTmV3KCJmZWVsZWRnZXI6IGVtcHR5IGFjY291bnQga2V5IikKCUVyckludmFsaWRBbW91bnQgPSBlcnJvcnMuTmV3KCJmZWVsZWRnZXI6IGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlIikKCUVyckludmFsaWRCcHMgICAgPSBlcnJvcnMuTmV3KCJmZWVsZWRnZXI6IGZlZSBicHMgb3V0IG9mIHJhbmdlIikKCUVyckluc3VmZmljaWVudCAgPSBlcnJvcnMuTmV3KCJmZWVsZWRnZXI6IGluc3VmZmljaWVudCBiYWxhbmNlIikKCUVyck92ZXJmbG93ICAgICAgPSBlcnJvcnMuTmV3KCJmZWVsZWRnZXI6IGludDY0IG92ZXJmbG93IikKKQoKLy8gTGVkZ2VyIHRyYWNrcyBwZXItYWNjb3VudCBiYWxhbmNlcywgdGhlaXIgc3VtICh1c2VyIGxpYWJpbGl0aWVzKSwgYW5kCi8vIHNlcGFyYXRlbHktYWNjcnVlZCBwcm90b2NvbCBmZWVzLiBUaGUgemVybyB2YWx1ZSBpcyBub3QgdXNhYmxlOwovLyBjb25zdHJ1Y3Qgd2l0aCBOZXcuCnR5cGUgTGVkZ2VyIHN0cnVjdCB7CgltYXhGZWVCcHMgICBpbnQ2NAoJYmFsYW5jZXMgICAgKmF2bC5UcmVlIC8vIGFjY291bnQgc3RyaW5nIC0+IGludDY0IChhbHdheXMgPiAwKQoJdXNlcnNUb3RhbCAgaW50NjQgICAgIC8vID09IHN1bSBvZiBhbGwgYmFsYW5jZXMKCWZlZXNBY2NydWVkIGludDY0ICAgICAvLyBmZWVzIGNoYXJnZWQgYnV0IG5vdCB5ZXQgd2l0aGRyYXduCn0KCi8vIE5ldyByZXR1cm5zIGFuIGVtcHR5IGxlZGdlciB0aGF0IHJlamVjdHMgZGVwb3NpdCBmZWVzIGFib3ZlIG1heEZlZUJwcy4KLy8gbWF4RmVlQnBzIG11c3QgYmUgaW4gWzAsIEJwc0Rlbm9taW5hdG9yXS4KZnVuYyBOZXcobWF4RmVlQnBzIGludDY0KSAoKkxlZGdlciwgZXJyb3IpIHsKCWlmIG1heEZlZUJwcyA8IDAgfHwgbWF4RmVlQnBzID4gQnBzRGVub21pbmF0b3IgewoJCXJldHVybiBuaWwsIEVyckludmFsaWRCcHMKCX0KCXJldHVybiAmTGVkZ2VyewoJCW1heEZlZUJwczogbWF4RmVlQnBzLAoJCWJhbGFuY2VzOiAgYXZsLk5ld1RyZWUoKSwKCX0sIG5pbAp9CgovLyBNdXN0TmV3IGlzIE5ldyBidXQgcGFuaWNzIG9uIGVycm9yLgpmdW5jIE11c3ROZXcobWF4RmVlQnBzIGludDY0KSAqTGVkZ2VyIHsKCWwsIGVyciA6PSBOZXcobWF4RmVlQnBzKQoJaWYgZXJyICE9IG5pbCB7CgkJcGFuaWMoZXJyKQoJfQoJcmV0dXJuIGwKfQoKLy8gTWF4RmVlQnBzIHJldHVybnMgdGhlIGxlZGdlcidzIGhhcmQgZmVlIGNhcC4KZnVuYyAobCAqTGVkZ2VyKSBNYXhGZWVCcHMoKSBpbnQ2NCB7CglyZXR1cm4gbC5tYXhGZWVCcHMKfQoKLy8gRmVlRm9yIHJldHVybnMgdGhlIGZlZSBjaGFyZ2VkIG9uIGFtb3VudCBhdCBicHMsIHVzaW5nIHRoZSBsZWRnZXIncwovLyByb3VuZGluZyBydWxlOiBmbG9vcihhbW91bnQgKiBicHMgLyBCcHNEZW5vbWluYXRvcikuIEl0IGlzIGEgcHVyZQovLyBwcmV2aWV3IOKAlCBubyBzdGF0ZSBpcyByZWFkIG9yIHdyaXR0ZW4gYmV5b25kIHZhbGlkYXRpb24gYWdhaW5zdAovLyBCcHNEZW5vbWluYXRvciAoTk9UIHRoZSBsZWRnZXIgY2FwOyB1c2UgaXQgdG8gaW5zcGVjdCBhbnkgcG9saWN5KS4KLy8gYW1vdW50IG11c3QgYmUgPj0gMCBhbmQgYnBzIGluIFswLCBCcHNEZW5vbWluYXRvcl0uCmZ1bmMgRmVlRm9yKGFtb3VudCwgYnBzIGludDY0KSAoaW50NjQsIGVycm9yKSB7CglpZiBhbW91bnQgPCAwIHsKCQlyZXR1cm4gMCwgRXJySW52YWxpZEFtb3VudAoJfQoJaWYgYnBzIDwgMCB8fCBicHMgPiBCcHNEZW5vbWluYXRvciB7CgkJcmV0dXJuIDAsIEVyckludmFsaWRCcHMKCX0KCXJldHVybiBmZWVGb3IoYW1vdW50LCBicHMpLCBuaWwKfQoKLy8gZmVlRm9yIGNvbXB1dGVzIGZsb29yKGFtb3VudCpicHMvQnBzRGVub21pbmF0b3IpIHdpdGhvdXQgaW50ZXJtZWRpYXRlCi8vIG92ZXJmbG93OiBhbW91bnQgPSBxKkJwc0Rlbm9taW5hdG9yICsgciwgc28gdGhlIGZlZSBpcwovLyBxKmJwcyArIGZsb29yKHIqYnBzL0Jwc0Rlbm9taW5hdG9yKS4gcSpicHMgPD0gYW1vdW50IGJlY2F1c2UKLy8gYnBzIDw9IEJwc0Rlbm9taW5hdG9yLCBhbmQgcipicHMgPCBCcHNEZW5vbWluYXRvcl4yICgxMF44KSwgc28gZXZlcnkKLy8gaW50ZXJtZWRpYXRlIGZpdHMgY29tZm9ydGFibHkgaW4gaW50NjQuIElucHV0cyBtdXN0IGJlIHByZS12YWxpZGF0ZWQuCmZ1bmMgZmVlRm9yKGFtb3VudCwgYnBzIGludDY0KSBpbnQ2NCB7CglxIDo9IGFtb3VudCAvIEJwc0Rlbm9taW5hdG9yCglyIDo9IGFtb3VudCAlIEJwc0Rlbm9taW5hdG9yCglyZXR1cm4gcSpicHMgKyByKmJwcy9CcHNEZW5vbWluYXRvcgp9CgovLyBEZXBvc2l0IGNyZWRpdHMgYWNjb3VudCB3aXRoIGFtb3VudCBtaW51cyB0aGUgZmVlIGF0IGZlZUJwcywgYWNjcnVpbmcKLy8gdGhlIGZlZSB0byB0aGUgZmVlIHBvdC4gUmV0dXJucyB0aGUgY3JlZGl0ZWQgYW1vdW50IGFuZCB0aGUgZmVlCi8vIChjcmVkaXRlZCArIGZlZSA9PSBhbW91bnQgYWx3YXlzKS4gRmFpbHMgd2l0aCBFcnJFbXB0eUFjY291bnQsCi8vIEVyckludmFsaWRBbW91bnQgKGFtb3VudCA8PSAwKSwgRXJySW52YWxpZEJwcyAoZmVlQnBzIG91dHNpZGUKLy8gWzAsIE1heEZlZUJwc10pLCBvciBFcnJPdmVyZmxvdyBpZiB0aGUgYWNjb3VudCBiYWxhbmNlIG9yIHRvdGFsCi8vIGxpYWJpbGl0aWVzIHdvdWxkIGxlYXZlIGludDY0IHJhbmdlLiBPbiBlcnJvciBub3RoaW5nIGlzIG1vZGlmaWVkLgpmdW5jIChsICpMZWRnZXIpIERlcG9zaXQoYWNjb3VudCBzdHJpbmcsIGFtb3VudCwgZmVlQnBzIGludDY0KSAoY3JlZGl0ZWQsIGZlZSBpbnQ2NCwgZXJyIGVycm9yKSB7CglpZiBhY2NvdW50ID09ICIiIHsKCQlyZXR1cm4gMCwgMCwgRXJyRW1wdHlBY2NvdW50Cgl9CglpZiBhbW91bnQgPD0gMCB7CgkJcmV0dXJuIDAsIDAsIEVyckludmFsaWRBbW91bnQKCX0KCWlmIGZlZUJwcyA8IDAgfHwgZmVlQnBzID4gbC5tYXhGZWVCcHMgewoJCXJldHVybiAwLCAwLCBFcnJJbnZhbGlkQnBzCgl9CgoJZmVlID0gZmVlRm9yKGFtb3VudCwgZmVlQnBzKQoJY3JlZGl0ZWQgPSBhbW91bnQgLSBmZWUgLy8gPj0gMDsgPiAwIHdoZW5ldmVyIGZlZUJwcyA8IEJwc0Rlbm9taW5hdG9yCgoJbmV3QmFsYW5jZSwgb2sgOj0gY2hlY2tlZEFkZChsLkJhbGFuY2VPZihhY2NvdW50KSwgY3JlZGl0ZWQpCglpZiAhb2sgewoJCXJldHVybiAwLCAwLCBFcnJPdmVyZmxvdwoJfQoJbmV3VXNlcnNUb3RhbCwgb2sgOj0gY2hlY2tlZEFkZChsLnVzZXJzVG90YWwsIGNyZWRpdGVkKQoJaWYgIW9rIHsKCQlyZXR1cm4gMCwgMCwgRXJyT3ZlcmZsb3cKCX0KCW5ld0ZlZXNBY2NydWVkLCBvayA6PSBjaGVja2VkQWRkKGwuZmVlc0FjY3J1ZWQsIGZlZSkKCWlmICFvayB7CgkJcmV0dXJuIDAsIDAsIEVyck92ZXJmbG93Cgl9CgkvLyBUb3RhbCBsaWFiaWxpdGllcyBtdXN0IHN0YXkgcmVwcmVzZW50YWJsZSBhcyBvbmUgaW50NjQsIHNpbmNlIHRoZXkKCS8vIG1pcnJvciBhIHNpbmdsZSBjb2luIGJhbGFuY2UgaGVsZCBieSB0aGUgaW1wb3J0aW5nIHJlYWxtLgoJaWYgXywgb2sgOj0gY2hlY2tlZEFkZChuZXdVc2Vyc1RvdGFsLCBuZXdGZWVzQWNjcnVlZCk7ICFvayB7CgkJcmV0dXJuIDAsIDAsIEVyck92ZXJmbG93Cgl9CgoJaWYgbmV3QmFsYW5jZSA+IDAgewoJCWwuYmFsYW5jZXMuU2V0KGFjY291bnQsIG5ld0JhbGFuY2UpCgl9CglsLnVzZXJzVG90YWwgPSBuZXdVc2Vyc1RvdGFsCglsLmZlZXNBY2NydWVkID0gbmV3RmVlc0FjY3J1ZWQKCXJldHVybiBjcmVkaXRlZCwgZmVlLCBuaWwKfQoKLy8gTXVzdERlcG9zaXQgaXMgRGVwb3NpdCBidXQgcGFuaWNzIG9uIGVycm9yLgpmdW5jIChsICpMZWRnZXIpIE11c3REZXBvc2l0KGFjY291bnQgc3RyaW5nLCBhbW91bnQsIGZlZUJwcyBpbnQ2NCkgKGNyZWRpdGVkLCBmZWUgaW50NjQpIHsKCWNyZWRpdGVkLCBmZWUsIGVyciA6PSBsLkRlcG9zaXQoYWNjb3VudCwgYW1vdW50LCBmZWVCcHMpCglpZiBlcnIgIT0gbmlsIHsKCQlwYW5pYyhlcnIpCgl9CglyZXR1cm4gY3JlZGl0ZWQsIGZlZQp9CgovLyBXaXRoZHJhdyBkZWJpdHMgYW1vdW50IGZyb20gYWNjb3VudC4gRmFpbHMgd2l0aCBFcnJFbXB0eUFjY291bnQsCi8vIEVyckludmFsaWRBbW91bnQgKGFtb3VudCA8PSAwKSwgb3IgRXJySW5zdWZmaWNpZW50IGlmIHRoZSBiYWxhbmNlIGlzCi8vIHNtYWxsZXIgdGhhbiBhbW91bnQuIEEgYmFsYW5jZSBkcmFpbmVkIHRvIHplcm8gaXMgcmVtb3ZlZCBmcm9tCi8vIHN0b3JhZ2UuIE9uIGVycm9yIG5vdGhpbmcgaXMgbW9kaWZpZWQuCmZ1bmMgKGwgKkxlZGdlcikgV2l0aGRyYXcoYWNjb3VudCBzdHJpbmcsIGFtb3VudCBpbnQ2NCkgZXJyb3IgewoJaWYgYWNjb3VudCA9PSAiIiB7CgkJcmV0dXJuIEVyckVtcHR5QWNjb3VudAoJfQoJaWYgYW1vdW50IDw9IDAgewoJCXJldHVybiBFcnJJbnZhbGlkQW1vdW50Cgl9CgliYWxhbmNlIDo9IGwuQmFsYW5jZU9mKGFjY291bnQpCglpZiBiYWxhbmNlIDwgYW1vdW50IHsKCQlyZXR1cm4gRXJySW5zdWZmaWNpZW50Cgl9CglpZiBiYWxhbmNlID09IGFtb3VudCB7CgkJbC5iYWxhbmNlcy5SZW1vdmUoYWNjb3VudCkKCX0gZWxzZSB7CgkJbC5iYWxhbmNlcy5TZXQoYWNjb3VudCwgYmFsYW5jZS1hbW91bnQpCgl9CgkvLyB1c2Vyc1RvdGFsID49IGJhbGFuY2UgPj0gYW1vdW50IGJ5IHRoZSBzdW0gaW52YXJpYW50LCBzbyB0aGlzCgkvLyBjYW5ub3QgdW5kZXJmbG93LgoJbC51c2Vyc1RvdGFsIC09IGFtb3VudAoJcmV0dXJuIG5pbAp9CgovLyBNdXN0V2l0aGRyYXcgaXMgV2l0aGRyYXcgYnV0IHBhbmljcyBvbiBlcnJvci4KZnVuYyAobCAqTGVkZ2VyKSBNdXN0V2l0aGRyYXcoYWNjb3VudCBzdHJpbmcsIGFtb3VudCBpbnQ2NCkgewoJaWYgZXJyIDo9IGwuV2l0aGRyYXcoYWNjb3VudCwgYW1vdW50KTsgZXJyICE9IG5pbCB7CgkJcGFuaWMoZXJyKQoJfQp9CgovLyBXaXRoZHJhd0FsbCBkcmFpbnMgYWNjb3VudCdzIGVudGlyZSBiYWxhbmNlIGFuZCByZXR1cm5zIGl0LiBSZXR1cm5zCi8vICgwLCBuaWwpIGlmIHRoZSBhY2NvdW50IGhvbGRzIG5vdGhpbmcuIEZhaWxzIG9ubHkgd2l0aAovLyBFcnJFbXB0eUFjY291bnQuCmZ1bmMgKGwgKkxlZGdlcikgV2l0aGRyYXdBbGwoYWNjb3VudCBzdHJpbmcpIChpbnQ2NCwgZXJyb3IpIHsKCWlmIGFjY291bnQgPT0gIiIgewoJCXJldHVybiAwLCBFcnJFbXB0eUFjY291bnQKCX0KCWJhbGFuY2UgOj0gbC5CYWxhbmNlT2YoYWNjb3VudCkKCWlmIGJhbGFuY2UgPT0gMCB7CgkJcmV0dXJuIDAsIG5pbAoJfQoJbC5iYWxhbmNlcy5SZW1vdmUoYWNjb3VudCkKCWwudXNlcnNUb3RhbCAtPSBiYWxhbmNlCglyZXR1cm4gYmFsYW5jZSwgbmlsCn0KCi8vIFdpdGhkcmF3RmVlcyBkcmFpbnMgdGhlIGFjY3J1ZWQgZmVlIHBvdCBhbmQgcmV0dXJucyB0aGUgYW1vdW50Ci8vICgwIGlmIG5vdGhpbmcgaGFzIGFjY3J1ZWQpLiBOZXZlciBmYWlscy4KZnVuYyAobCAqTGVkZ2VyKSBXaXRoZHJhd0ZlZXMoKSBpbnQ2NCB7CglmZWVzIDo9IGwuZmVlc0FjY3J1ZWQKCWwuZmVlc0FjY3J1ZWQgPSAwCglyZXR1cm4gZmVlcwp9CgovLyBCYWxhbmNlT2YgcmV0dXJucyBhY2NvdW50J3MgYmFsYW5jZSwgb3IgMCBpZiBhYnNlbnQuCmZ1bmMgKGwgKkxlZGdlcikgQmFsYW5jZU9mKGFjY291bnQgc3RyaW5nKSBpbnQ2NCB7Cgl2IDo9IGwuYmFsYW5jZXMuR2V0KGFjY291bnQpCglpZiB2ID09IG5pbCB7CgkJcmV0dXJuIDAKCX0KCXJldHVybiB2LihpbnQ2NCkKfQoKLy8gVXNlcnNUb3RhbCByZXR1cm5zIHRoZSBzdW0gb2YgYWxsIGFjY291bnQgYmFsYW5jZXMgKHVzZXIgbGlhYmlsaXRpZXMpLgpmdW5jIChsICpMZWRnZXIpIFVzZXJzVG90YWwoKSBpbnQ2NCB7CglyZXR1cm4gbC51c2Vyc1RvdGFsCn0KCi8vIEZlZXNBY2NydWVkIHJldHVybnMgdGhlIGZlZSBwb3Q6IGNoYXJnZWQgYnV0IG5vdCB5ZXQgd2l0aGRyYXduLgpmdW5jIChsICpMZWRnZXIpIEZlZXNBY2NydWVkKCkgaW50NjQgewoJcmV0dXJuIGwuZmVlc0FjY3J1ZWQKfQoKLy8gTGlhYmlsaXRpZXMgcmV0dXJucyBVc2Vyc1RvdGFsKCkgKyBGZWVzQWNjcnVlZCgpIOKAlCBldmVyeXRoaW5nIHRoZQovLyBpbXBvcnRpbmcgcmVhbG0gb3dlcy4gRGVwb3NpdCBndWFyYW50ZWVzIHRoaXMgc3VtIGZpdHMgaW4gaW50NjQuCmZ1bmMgKGwgKkxlZGdlcikgTGlhYmlsaXRpZXMoKSBpbnQ2NCB7CglyZXR1cm4gbC51c2Vyc1RvdGFsICsgbC5mZWVzQWNjcnVlZAp9CgovLyBBY2NvdW50cyByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWNjb3VudHMgd2l0aCBhIG5vbi16ZXJvIGJhbGFuY2UuCmZ1bmMgKGwgKkxlZGdlcikgQWNjb3VudHMoKSBpbnQgewoJcmV0dXJuIGwuYmFsYW5jZXMuU2l6ZSgpCn0KCi8vIEl0ZXJhdGUgY2FsbHMgZm4gZm9yIGVhY2ggYWNjb3VudCBpbiBzb3J0ZWQgb3JkZXIgd2l0aCBpdHMgYmFsYW5jZS4KLy8gSXRlcmF0aW9uIHN0b3BzIGVhcmx5IHdoZW4gZm4gcmV0dXJucyB0cnVlLgpmdW5jIChsICpMZWRnZXIpIEl0ZXJhdGUoZm4gZnVuYyhhY2NvdW50IHN0cmluZywgYmFsYW5jZSBpbnQ2NCkgYm9vbCkgewoJbC5iYWxhbmNlcy5JdGVyYXRlKCIiLCAiIiwgZnVuYyhrZXkgc3RyaW5nLCB2YWx1ZSBhbnkpIGJvb2wgewoJCXJldHVybiBmbihrZXksIHZhbHVlLihpbnQ2NCkpCgl9KQp9CgovLyBjaGVja2VkQWRkIHJldHVybnMgYStiIGFuZCByZXBvcnRzIHdoZXRoZXIgdGhlIGFkZGl0aW9uIGRpZCBub3QKLy8gb3ZlcmZsb3cgaW50NjQuCmZ1bmMgY2hlY2tlZEFkZChhLCBiIGludDY0KSAoaW50NjQsIGJvb2wpIHsKCXN1bSA6PSBhICsgYgoJaWYgKGIgPiAwICYmIHN1bSA8IGEpIHx8IChiIDwgMCAmJiBzdW0gPiBhKSB7CgkJcmV0dXJuIDAsIGZhbHNlCgl9CglyZXR1cm4gc3VtLCB0cnVlCn0KGoJPChJmZWVsZWRnZXJfdGVzdC5nbm8S605wYWNrYWdlIGZlZWxlZGdlcgoKaW1wb3J0ICJ0ZXN0aW5nIgoKY29uc3QgKAoJbWF4SW50NjQgPSBpbnQ2NCgxPDw2MyAtIDEpCgltaW5JbnQ2NCA9IGludDY0KC0xIDw8IDYzKQopCgovLyBtdXN0UGFuaWNXaXRoIGFzc2VydHMgZm4gcGFuaWNzIHdpdGggYW4gZXJyb3Igd2hvc2UgbWVzc2FnZSBpcyB3YW50LgovLyBOb24tY3Jvc3NpbmcgcGFuaWNzIGluIHRoZSBzYW1lIHBhY2thZ2UgYXJlIHJlY292ZXJhYmxlLgpmdW5jIG11c3RQYW5pY1dpdGgodCAqdGVzdGluZy5ULCB3YW50IHN0cmluZywgZm4gZnVuYygpKSB7Cgl0LkhlbHBlcigpCglkZWZlciBmdW5jKCkgewoJCXIgOj0gcmVjb3ZlcigpCgkJaWYgciA9PSBuaWwgewoJCQl0LkZhdGFsZigiZXhwZWN0ZWQgcGFuaWMgJXEsIGdvdCBub25lIiwgd2FudCkKCQl9CgkJZXJyLCBvayA6PSByLihlcnJvcikKCQlpZiAhb2sgfHwgZXJyLkVycm9yKCkgIT0gd2FudCB7CgkJCXQuRmF0YWxmKCJwYW5pYyA9ICV2LCB3YW50ICVxIiwgciwgd2FudCkKCQl9Cgl9KCkKCWZuKCkKfQoKZnVuYyBUZXN0TmV3Qm91bmRzKHQgKnRlc3RpbmcuVCkgewoJZm9yIF8sIGJhZCA6PSByYW5nZSBbXWludDY0ey0xLCBCcHNEZW5vbWluYXRvciArIDEsIG1pbkludDY0LCBtYXhJbnQ2NH0gewoJCWlmIF8sIGVyciA6PSBOZXcoYmFkKTsgZXJyICE9IEVyckludmFsaWRCcHMgewoJCQl0LkZhdGFsZigiTmV3KCVkKSBlcnIgPSAldiwgd2FudCBFcnJJbnZhbGlkQnBzIiwgYmFkLCBlcnIpCgkJfQoJfQoJZm9yIF8sIG9rIDo9IHJhbmdlIFtdaW50NjR7MCwgMSwgQnBzRGVub21pbmF0b3J9IHsKCQlpZiBfLCBlcnIgOj0gTmV3KG9rKTsgZXJyICE9IG5pbCB7CgkJCXQuRmF0YWxmKCJOZXcoJWQpIGVyciA9ICV2Iiwgb2ssIGVycikKCQl9Cgl9CgltdXN0UGFuaWNXaXRoKHQsIEVyckludmFsaWRCcHMuRXJyb3IoKSwgZnVuYygpIHsgTXVzdE5ldygtMSkgfSkKfQoKZnVuYyBUZXN0RmVlRm9yUm91bmRpbmcodCAqdGVzdGluZy5UKSB7CgkvLyBmbG9vcihtYXggKiAwLjk5OTkpIGNvbXB1dGVkIHRoZSBzYW1lIG92ZXJmbG93LWZyZWUgd2F5IGZlZUZvciBkb2VzLgoJd2FudE1heEF0OTk5OSA6PSBtYXhJbnQ2NC8xMDAwMCo5OTk5ICsgbWF4SW50NjQlMTAwMDAqOTk5OS8xMDAwMAoJY2FzZXMgOj0gW11zdHJ1Y3QgewoJCWFtb3VudCwgYnBzLCB3YW50IGludDY0Cgl9ewoJCXs5OTksIDEwMCwgOX0sICAgICAgLy8gOS45OSBmbG9vcnMgdG8gOQoJCXsxMDAwMCwgMSwgMX0sICAgICAgLy8gZXhhY3QKCQl7OTk5OSwgMSwgMH0sICAgICAgIC8vIDAuOTk5OSBmbG9vcnMgdG8gMCDigJQgbm8gbWluaW11bSBmZWUKCQl7MSwgOTk5OSwgMH0sICAgICAgIC8vIDAuOTk5OSBmbG9vcnMgdG8gMAoJCXsxMCwgOTk5OSwgOX0sICAgICAgLy8gOS45OTkgZmxvb3JzIHRvIDkKCQl7MTAwLCAxMDAwMCwgMTAwfSwgIC8vIGZ1bGwtZmVlIGJwczogZmVlID09IGFtb3VudAoJCXswLCA1MDAsIDB9LCAgICAgICAgLy8gemVybyBhbW91bnQgcHJldmlld3MgemVybyBmZWUKCQl7MTAwMCwgMCwgMH0sICAgICAgIC8vIHplcm8tZmVlIGNvbmZpZwoJCXsxMDAwLCAyNTAsIDI1fSwgICAgLy8gZXhhY3QgMi41JQoJCXs5OTksIDI1MCwgMjR9LCAgICAgLy8gMjQuOTc1IGZsb29ycyB0byAyNAoJCXttYXhJbnQ2NCwgMTAwMDAsIG1heEludDY0fSwgLy8gbm8gaW50ZXJtZWRpYXRlIG92ZXJmbG93CgkJe21heEludDY0LCA5OTk5LCB3YW50TWF4QXQ5OTk5fSwKCX0KCWZvciBfLCBjIDo9IHJhbmdlIGNhc2VzIHsKCQlnb3QsIGVyciA6PSBGZWVGb3IoYy5hbW91bnQsIGMuYnBzKQoJCWlmIGVyciAhPSBuaWwgewoJCQl0LkZhdGFsZigiRmVlRm9yKCVkLCVkKSBlcnIgPSAldiIsIGMuYW1vdW50LCBjLmJwcywgZXJyKQoJCX0KCQlpZiBnb3QgIT0gYy53YW50IHsKCQkJdC5GYXRhbGYoIkZlZUZvciglZCwlZCkgPSAlZCwgd2FudCAlZCIsIGMuYW1vdW50LCBjLmJwcywgZ290LCBjLndhbnQpCgkJfQoJCWlmIGdvdCA8IDAgfHwgZ290ID4gYy5hbW91bnQgewoJCQl0LkZhdGFsZigiRmVlRm9yKCVkLCVkKSA9ICVkIG91dCBvZiBbMCxhbW91bnRdIiwgYy5hbW91bnQsIGMuYnBzLCBnb3QpCgkJfQoJfQoJaWYgXywgZXJyIDo9IEZlZUZvcigtMSwgMTAwKTsgZXJyICE9IEVyckludmFsaWRBbW91bnQgewoJCXQuRmF0YWxmKCJGZWVGb3IoLTEsMTAwKSBlcnIgPSAldiwgd2FudCBFcnJJbnZhbGlkQW1vdW50IiwgZXJyKQoJfQoJaWYgXywgZXJyIDo9IEZlZUZvcigxMDAsIC0xKTsgZXJyICE9IEVyckludmFsaWRCcHMgewoJCXQuRmF0YWxmKCJGZWVGb3IoMTAwLC0xKSBlcnIgPSAldiwgd2FudCBFcnJJbnZhbGlkQnBzIiwgZXJyKQoJfQoJaWYgXywgZXJyIDo9IEZlZUZvcigxMDAsIEJwc0Rlbm9taW5hdG9yKzEpOyBlcnIgIT0gRXJySW52YWxpZEJwcyB7CgkJdC5GYXRhbGYoIkZlZUZvciBvdmVyLWJwcyBlcnIgPSAldiwgd2FudCBFcnJJbnZhbGlkQnBzIiwgZXJyKQoJfQp9CgpmdW5jIFRlc3REZXBvc2l0VmFsaWRhdGlvbih0ICp0ZXN0aW5nLlQpIHsKCWwgOj0gTXVzdE5ldyg1MDApCgl0eXBlIGJhZCBzdHJ1Y3QgewoJCWFjY291bnQgICAgIHN0cmluZwoJCWFtb3VudCwgYnBzIGludDY0CgkJd2FudCAgICAgICAgZXJyb3IKCX0KCWZvciBfLCBjIDo9IHJhbmdlIFtdYmFkewoJCXsiIiwgMTAwLCAwLCBFcnJFbXB0eUFjY291bnR9LAoJCXsiYWxpY2UiLCAwLCAwLCBFcnJJbnZhbGlkQW1vdW50fSwKCQl7ImFsaWNlIiwgLTcsIDAsIEVyckludmFsaWRBbW91bnR9LAoJCXsiYWxpY2UiLCBtaW5JbnQ2NCwgMCwgRXJySW52YWxpZEFtb3VudH0sCgkJeyJhbGljZSIsIDEwMCwgLTEsIEVyckludmFsaWRCcHN9LAoJCXsiYWxpY2UiLCAxMDAsIDUwMSwgRXJySW52YWxpZEJwc30sIC8vIGFib3ZlIHRoZSBsZWRnZXIgY2FwCgl9IHsKCQlpZiBfLCBfLCBlcnIgOj0gbC5EZXBvc2l0KGMuYWNjb3VudCwgYy5hbW91bnQsIGMuYnBzKTsgZXJyICE9IGMud2FudCB7CgkJCXQuRmF0YWxmKCJEZXBvc2l0KCVxLCVkLCVkKSBlcnIgPSAldiwgd2FudCAldiIsIGMuYWNjb3VudCwgYy5hbW91bnQsIGMuYnBzLCBlcnIsIGMud2FudCkKCQl9Cgl9CglpZiBsLlVzZXJzVG90YWwoKSAhPSAwIHx8IGwuRmVlc0FjY3J1ZWQoKSAhPSAwIHx8IGwuQWNjb3VudHMoKSAhPSAwIHsKCQl0LkZhdGFsKCJmYWlsZWQgZGVwb3NpdHMgbXV0YXRlZCBzdGF0ZSIpCgl9Cn0KCmZ1bmMgVGVzdERlcG9zaXRBbmRBY2N1bXVsYXRlKHQgKnRlc3RpbmcuVCkgewoJbCA6PSBNdXN0TmV3KDEwMDApCgljcmVkaXRlZCwgZmVlLCBlcnIgOj0gbC5EZXBvc2l0KCJhbGljZSIsIDEwMDAsIDI1MCkKCWlmIGVyciAhPSBuaWwgfHwgY3JlZGl0ZWQgIT0gOTc1IHx8IGZlZSAhPSAyNSB7CgkJdC5GYXRhbGYoIkRlcG9zaXQgPSAoJWQsJWQsJXYpLCB3YW50ICg5NzUsMjUsbmlsKSIsIGNyZWRpdGVkLCBmZWUsIGVycikKCX0KCWNyZWRpdGVkLCBmZWUsIGVyciA9IGwuRGVwb3NpdCgiYWxpY2UiLCA5OTksIDI1MCkKCWlmIGVyciAhPSBuaWwgfHwgY3JlZGl0ZWQgIT0gOTc1IHx8IGZlZSAhPSAyNCB7IC8vIGZlZSBmbG9vcnMsIGNyZWRpdCByb3VuZHMgdXAKCQl0LkZhdGFsZigiRGVwb3NpdCMyID0gKCVkLCVkLCV2KSwgd2FudCAoOTc1LDI0LG5pbCkiLCBjcmVkaXRlZCwgZmVlLCBlcnIpCgl9CglpZiBnb3QgOj0gbC5CYWxhbmNlT2YoImFsaWNlIik7IGdvdCAhPSAxOTUwIHsKCQl0LkZhdGFsZigiQmFsYW5jZU9mID0gJWQsIHdhbnQgMTk1MCIsIGdvdCkKCX0KCWlmIGwuVXNlcnNUb3RhbCgpICE9IDE5NTAgfHwgbC5GZWVzQWNjcnVlZCgpICE9IDQ5IHx8IGwuTGlhYmlsaXRpZXMoKSAhPSAxOTk5IHsKCQl0LkZhdGFsZigidG90YWxzID0gJWQvJWQvJWQiLCBsLlVzZXJzVG90YWwoKSwgbC5GZWVzQWNjcnVlZCgpLCBsLkxpYWJpbGl0aWVzKCkpCgl9CgkvLyBjcmVkaXRlZCArIGZlZSBhbHdheXMgcmVhc3NlbWJsZXMgYm90aCBkZXBvc2l0cyBleGFjdGx5LgoJaWYgbC5MaWFiaWxpdGllcygpICE9IDEwMDArOTk5IHsKCQl0LkZhdGFsKCJjb25zZXJ2YXRpb24gYnJva2VuOiBjcmVkaXRlZCtmZWUgIT0gZGVwb3NpdGVkIikKCX0KfQoKZnVuYyBUZXN0RnVsbEZlZUJwc0NyZWRpdHNaZXJvKHQgKnRlc3RpbmcuVCkgewoJbCA6PSBNdXN0TmV3KEJwc0Rlbm9taW5hdG9yKQoJY3JlZGl0ZWQsIGZlZSwgZXJyIDo9IGwuRGVwb3NpdCgiYWxpY2UiLCA3NzcsIEJwc0Rlbm9taW5hdG9yKQoJaWYgZXJyICE9IG5pbCB8fCBjcmVkaXRlZCAhPSAwIHx8IGZlZSAhPSA3NzcgewoJCXQuRmF0YWxmKCJEZXBvc2l0ID0gKCVkLCVkLCV2KSwgd2FudCAoMCw3NzcsbmlsKSIsIGNyZWRpdGVkLCBmZWUsIGVycikKCX0KCWlmIGwuQWNjb3VudHMoKSAhPSAwIHx8IGwuQmFsYW5jZU9mKCJhbGljZSIpICE9IDAgewoJCXQuRmF0YWwoInplcm8tY3JlZGl0IGRlcG9zaXQgbXVzdCBub3QgY3JlYXRlIGFuIGFjY291bnQgZW50cnkiKQoJfQoJaWYgbC5GZWVzQWNjcnVlZCgpICE9IDc3NyB8fCBsLlVzZXJzVG90YWwoKSAhPSAwIHsKCQl0LkZhdGFsKCJmZWUgcG90IG1pc21hdGNoIG9uIGZ1bGwtZmVlIGRlcG9zaXQiKQoJfQp9CgpmdW5jIFRlc3REZXBvc2l0T3ZlcmZsb3codCAqdGVzdGluZy5UKSB7CglsIDo9IE11c3ROZXcoQnBzRGVub21pbmF0b3IpCglpZiBfLCBfLCBlcnIgOj0gbC5EZXBvc2l0KCJhbGljZSIsIG1heEludDY0LCAwKTsgZXJyICE9IG5pbCB7CgkJdC5GYXRhbGYoInNlZWQgZGVwb3NpdCBlcnIgPSAldiIsIGVycikKCX0KCS8vIEFjY291bnQgYmFsYW5jZSB3b3VsZCBvdmVyZmxvdy4KCWlmIF8sIF8sIGVyciA6PSBsLkRlcG9zaXQoImFsaWNlIiwgMSwgMCk7IGVyciAhPSBFcnJPdmVyZmxvdyB7CgkJdC5GYXRhbGYoImJhbGFuY2Utb3ZlcmZsb3cgZXJyID0gJXYsIHdhbnQgRXJyT3ZlcmZsb3ciLCBlcnIpCgl9CgkvLyBKb2ludCBsaWFiaWxpdGllcyAodXNlcnMgKyBmZWVzKSB3b3VsZCBvdmVyZmxvdyBldmVuIHRob3VnaCB0aGUKCS8vIGZlZSBwb3QgYWxvbmUgd291bGQgbm90LgoJaWYgXywgXywgZXJyIDo9IGwuRGVwb3NpdCgiYm9iIiwgMTAwLCBCcHNEZW5vbWluYXRvcik7IGVyciAhPSBFcnJPdmVyZmxvdyB7CgkJdC5GYXRhbGYoImxpYWJpbGl0aWVzLW92ZXJmbG93IGVyciA9ICV2LCB3YW50IEVyck92ZXJmbG93IiwgZXJyKQoJfQoJaWYgbC5CYWxhbmNlT2YoImJvYiIpICE9IDAgfHwgbC5GZWVzQWNjcnVlZCgpICE9IDAgfHwgbC5Vc2Vyc1RvdGFsKCkgIT0gbWF4SW50NjQgewoJCXQuRmF0YWwoImZhaWxlZCBvdmVyZmxvdyBkZXBvc2l0cyBtdXRhdGVkIHN0YXRlIikKCX0KfQoKZnVuYyBUZXN0V2l0aGRyYXcodCAqdGVzdGluZy5UKSB7CglsIDo9IE11c3ROZXcoMCkKCWwuTXVzdERlcG9zaXQoImFsaWNlIiwgMTAwMCwgMCkKCglpZiBlcnIgOj0gbC5XaXRoZHJhdygiIiwgMTApOyBlcnIgIT0gRXJyRW1wdHlBY2NvdW50IHsKCQl0LkZhdGFsZigiZW1wdHkgYWNjb3VudCBlcnIgPSAldiIsIGVycikKCX0KCWlmIGVyciA6PSBsLldpdGhkcmF3KCJhbGljZSIsIDApOyBlcnIgIT0gRXJySW52YWxpZEFtb3VudCB7CgkJdC5GYXRhbGYoInplcm8gYW1vdW50IGVyciA9ICV2IiwgZXJyKQoJfQoJaWYgZXJyIDo9IGwuV2l0aGRyYXcoImFsaWNlIiwgLTMpOyBlcnIgIT0gRXJySW52YWxpZEFtb3VudCB7CgkJdC5GYXRhbGYoIm5lZ2F0aXZlIGFtb3VudCBlcnIgPSAldiIsIGVycikKCX0KCWlmIGVyciA6PSBsLldpdGhkcmF3KCJhbGljZSIsIDEwMDEpOyBlcnIgIT0gRXJySW5zdWZmaWNpZW50IHsKCQl0LkZhdGFsZigib3Zlci1iYWxhbmNlIGVyciA9ICV2IiwgZXJyKQoJfQoJaWYgZXJyIDo9IGwuV2l0aGRyYXcoImdob3N0IiwgMSk7IGVyciAhPSBFcnJJbnN1ZmZpY2llbnQgewoJCXQuRmF0YWxmKCJhYnNlbnQgYWNjb3VudCBlcnIgPSAldiIsIGVycikKCX0KCWlmIGwuQmFsYW5jZU9mKCJhbGljZSIpICE9IDEwMDAgfHwgbC5Vc2Vyc1RvdGFsKCkgIT0gMTAwMCB7CgkJdC5GYXRhbCgiZmFpbGVkIHdpdGhkcmF3YWxzIG11dGF0ZWQgc3RhdGUiKQoJfQoKCWlmIGVyciA6PSBsLldpdGhkcmF3KCJhbGljZSIsIDQwMCk7IGVyciAhPSBuaWwgewoJCXQuRmF0YWxmKCJwYXJ0aWFsIHdpdGhkcmF3IGVyciA9ICV2IiwgZXJyKQoJfQoJaWYgbC5CYWxhbmNlT2YoImFsaWNlIikgIT0gNjAwIHx8IGwuVXNlcnNUb3RhbCgpICE9IDYwMCB8fCBsLkFjY291bnRzKCkgIT0gMSB7CgkJdC5GYXRhbCgicGFydGlhbCB3aXRoZHJhdyB3cm9uZyBzdGF0ZSIpCgl9CglpZiBlcnIgOj0gbC5XaXRoZHJhdygiYWxpY2UiLCA2MDApOyBlcnIgIT0gbmlsIHsKCQl0LkZhdGFsZigiZXhhY3Qgd2l0aGRyYXcgZXJyID0gJXYiLCBlcnIpCgl9CglpZiBsLkJhbGFuY2VPZigiYWxpY2UiKSAhPSAwIHx8IGwuVXNlcnNUb3RhbCgpICE9IDAgfHwgbC5BY2NvdW50cygpICE9IDAgewoJCXQuRmF0YWwoImV4YWN0IHdpdGhkcmF3IG11c3QgcmVtb3ZlIHRoZSBhY2NvdW50IGVudHJ5IikKCX0KCWlmIGVyciA6PSBsLldpdGhkcmF3KCJhbGljZSIsIDEpOyBlcnIgIT0gRXJySW5zdWZmaWNpZW50IHsKCQl0LkZhdGFsZigicmVwZWF0IHdpdGhkcmF3IGVyciA9ICV2LCB3YW50IEVyckluc3VmZmljaWVudCIsIGVycikKCX0KCW11c3RQYW5pY1dpdGgodCwgRXJySW5zdWZmaWNpZW50LkVycm9yKCksIGZ1bmMoKSB7IGwuTXVzdFdpdGhkcmF3KCJhbGljZSIsIDEpIH0pCn0KCmZ1bmMgVGVzdFdpdGhkcmF3QWxsKHQgKnRlc3RpbmcuVCkgewoJbCA6PSBNdXN0TmV3KDApCglpZiBnb3QsIGVyciA6PSBsLldpdGhkcmF3QWxsKCJub2JvZHkiKTsgZXJyICE9IG5pbCB8fCBnb3QgIT0gMCB7CgkJdC5GYXRhbGYoIldpdGhkcmF3QWxsKG5vYm9keSkgPSAoJWQsJXYpLCB3YW50ICgwLG5pbCkiLCBnb3QsIGVycikKCX0KCWlmIF8sIGVyciA6PSBsLldpdGhkcmF3QWxsKCIiKTsgZXJyICE9IEVyckVtcHR5QWNjb3VudCB7CgkJdC5GYXRhbGYoIldpdGhkcmF3QWxsKFwiXCIpIGVyciA9ICV2IiwgZXJyKQoJfQoJbC5NdXN0RGVwb3NpdCgiYWxpY2UiLCA1NTUsIDApCglpZiBnb3QsIGVyciA6PSBsLldpdGhkcmF3QWxsKCJhbGljZSIpOyBlcnIgIT0gbmlsIHx8IGdvdCAhPSA1NTUgewoJCXQuRmF0YWxmKCJXaXRoZHJhd0FsbCA9ICglZCwldiksIHdhbnQgKDU1NSxuaWwpIiwgZ290LCBlcnIpCgl9CglpZiBnb3QsIGVyciA6PSBsLldpdGhkcmF3QWxsKCJhbGljZSIpOyBlcnIgIT0gbmlsIHx8IGdvdCAhPSAwIHsKCQl0LkZhdGFsZigicmVwZWF0IFdpdGhkcmF3QWxsID0gKCVkLCV2KSwgd2FudCAoMCxuaWwpIiwgZ290LCBlcnIpCgl9CglpZiBsLlVzZXJzVG90YWwoKSAhPSAwIHx8IGwuQWNjb3VudHMoKSAhPSAwIHsKCQl0LkZhdGFsKCJXaXRoZHJhd0FsbCBsZWZ0IHN0YXRlIGJlaGluZCIpCgl9Cn0KCmZ1bmMgVGVzdFdpdGhkcmF3RmVlcyh0ICp0ZXN0aW5nLlQpIHsKCWwgOj0gTXVzdE5ldygxMDAwKQoJbC5NdXN0RGVwb3NpdCgiYWxpY2UiLCAxMDAwMCwgMTAwMCkgLy8gZmVlIDEwMDAKCWwuTXVzdERlcG9zaXQoImJvYiIsIDEwMDAwLCAxMDAwKSAgIC8vIGZlZSAxMDAwCglpZiBnb3QgOj0gbC5XaXRoZHJhd0ZlZXMoKTsgZ290ICE9IDIwMDAgewoJCXQuRmF0YWxmKCJXaXRoZHJhd0ZlZXMgPSAlZCwgd2FudCAyMDAwIiwgZ290KQoJfQoJaWYgZ290IDo9IGwuV2l0aGRyYXdGZWVzKCk7IGdvdCAhPSAwIHsKCQl0LkZhdGFsZigicmVwZWF0IFdpdGhkcmF3RmVlcyA9ICVkLCB3YW50IDAiLCBnb3QpCgl9CglpZiBsLkZlZXNBY2NydWVkKCkgIT0gMCB8fCBsLlVzZXJzVG90YWwoKSAhPSAxODAwMCB7CgkJdC5GYXRhbCgiV2l0aGRyYXdGZWVzIGNvcnJ1cHRlZCB0b3RhbHMiKQoJfQp9CgpmdW5jIFRlc3RDb25zZXJ2YXRpb25BY3Jvc3NTZXF1ZW5jZSh0ICp0ZXN0aW5nLlQpIHsKCWwgOj0gTXVzdE5ldygxMDAwKQoJZGVwb3NpdGVkIDo9IGludDY0KDApCgl3aXRoZHJhd24gOj0gaW50NjQoMCkKCWZlZXNPdXQgOj0gaW50NjQoMCkKCglzdGVwIDo9IGZ1bmMoKSB7CgkJdC5IZWxwZXIoKQoJCS8vIEludGVybmFsIGNvbnNpc3RlbmN5OiB1c2Vyc1RvdGFsID09IHN1bSBvZiBiYWxhbmNlcy4KCQlzdW0gOj0gaW50NjQoMCkKCQlsLkl0ZXJhdGUoZnVuYyhfIHN0cmluZywgYiBpbnQ2NCkgYm9vbCB7CgkJCWlmIGIgPD0gMCB7CgkJCQl0LkZhdGFsKCJ6ZXJvL25lZ2F0aXZlIGJhbGFuY2Ugc3RvcmVkIikKCQkJfQoJCQlzdW0gKz0gYgoJCQlyZXR1cm4gZmFsc2UKCQl9KQoJCWlmIHN1bSAhPSBsLlVzZXJzVG90YWwoKSB7CgkJCXQuRmF0YWxmKCJ1c2Vyc1RvdGFsICVkICE9IM6jIGJhbGFuY2VzICVkIiwgbC5Vc2Vyc1RvdGFsKCksIHN1bSkKCQl9CgkJLy8gQ29uc2VydmF0aW9uOiBldmVyeXRoaW5nIGluID09IGV2ZXJ5dGhpbmcgb3dlZCArIGV2ZXJ5dGhpbmcgb3V0LgoJCWlmIGRlcG9zaXRlZCAhPSBsLkxpYWJpbGl0aWVzKCkrd2l0aGRyYXduK2ZlZXNPdXQgewoJCQl0LkZhdGFsZigiY29uc2VydmF0aW9uOiBpbj0lZCBvd2VkPSVkIG91dD0lZCslZCIsCgkJCQlkZXBvc2l0ZWQsIGwuTGlhYmlsaXRpZXMoKSwgd2l0aGRyYXduLCBmZWVzT3V0KQoJCX0KCX0KCglkZXBvc2l0IDo9IGZ1bmMod2hvIHN0cmluZywgYW10LCBicHMgaW50NjQpIHsKCQlsLk11c3REZXBvc2l0KHdobywgYW10LCBicHMpCgkJZGVwb3NpdGVkICs9IGFtdAoJCXN0ZXAoKQoJfQoJY2xhaW0gOj0gZnVuYyh3aG8gc3RyaW5nLCBhbXQgaW50NjQpIHsKCQlsLk11c3RXaXRoZHJhdyh3aG8sIGFtdCkKCQl3aXRoZHJhd24gKz0gYW10CgkJc3RlcCgpCgl9CgoJZGVwb3NpdCgiYWxpY2UiLCAxMDAwLCAwKQoJZGVwb3NpdCgiYm9iIiwgOTk5LCAyNTApCglkZXBvc2l0KCJhbGljZSIsIDEyMzQ1LCAxMDAwKQoJY2xhaW0oImFsaWNlIiwgMTAwMCkKCWRlcG9zaXQoImNhcm9sIiwgMSwgMTAwMCkgLy8gZmVlIGZsb29ycyB0byAwCglmZWVzT3V0ICs9IGwuV2l0aGRyYXdGZWVzKCkKCXN0ZXAoKQoJY2xhaW0oImJvYiIsIDk3NCkKCWFsbCwgXyA6PSBsLldpdGhkcmF3QWxsKCJhbGljZSIpCgl3aXRoZHJhd24gKz0gYWxsCglzdGVwKCkKCWRlcG9zaXQoImRhdmUiLCA3LCA5OTkpCglmZWVzT3V0ICs9IGwuV2l0aGRyYXdGZWVzKCkKCXN0ZXAoKQp9CgpmdW5jIFRlc3RDaGVja2VkQWRkQnJhbmNoZXModCAqdGVzdGluZy5UKSB7CgljYXNlcyA6PSBbXXN0cnVjdCB7CgkJYSwgYiwgd2FudCBpbnQ2NAoJCW9rICAgICAgICAgYm9vbAoJfXsKCQl7NSwgMywgOCwgdHJ1ZX0sCgkJezUsIC0zLCAyLCB0cnVlfSwgICAvLyBuZWdhdGl2ZS1iIGJyYW5jaCwgbm8gb3ZlcmZsb3cKCQl7LTQsIC02LCAtMTAsIHRydWV9LAoJCXttYXhJbnQ2NCwgMSwgMCwgZmFsc2V9LCAgLy8gcG9zaXRpdmUgb3ZlcmZsb3cKCQl7bWluSW50NjQsIC0xLCAwLCBmYWxzZX0sIC8vIG5lZ2F0aXZlIG92ZXJmbG93CgkJe21heEludDY0LCAtbWF4SW50NjQsIDAsIHRydWV9LAoJfQoJZm9yIF8sIGMgOj0gcmFuZ2UgY2FzZXMgewoJCWdvdCwgb2sgOj0gY2hlY2tlZEFkZChjLmEsIGMuYikKCQlpZiBvayAhPSBjLm9rIHx8IChvayAmJiBnb3QgIT0gYy53YW50KSB7CgkJCXQuRmF0YWxmKCJjaGVja2VkQWRkKCVkLCVkKSA9ICglZCwldiksIHdhbnQgKCVkLCV2KSIsIGMuYSwgYy5iLCBnb3QsIG9rLCBjLndhbnQsIGMub2spCgkJfQoJfQp9CgpmdW5jIFRlc3RJdGVyYXRlU29ydGVkQW5kRWFybHlTdG9wKHQgKnRlc3RpbmcuVCkgewoJbCA6PSBNdXN0TmV3KDApCglsLk11c3REZXBvc2l0KCJjYXJvbCIsIDMsIDApCglsLk11c3REZXBvc2l0KCJhbGljZSIsIDEsIDApCglsLk11c3REZXBvc2l0KCJib2IiLCAyLCAwKQoJZ290IDo9ICIiCglsLkl0ZXJhdGUoZnVuYyhhIHN0cmluZywgXyBpbnQ2NCkgYm9vbCB7CgkJZ290ICs9IGEgKyAiLCIKCQlyZXR1cm4gZmFsc2UKCX0pCglpZiBnb3QgIT0gImFsaWNlLGJvYixjYXJvbCwiIHsKCQl0LkZhdGFsZigiSXRlcmF0ZSBvcmRlciA9ICVxIiwgZ290KQoJfQoJbiA6PSAwCglsLkl0ZXJhdGUoZnVuYyhzdHJpbmcsIGludDY0KSBib29sIHsgbisrOyByZXR1cm4gbiA9PSAyIH0pCglpZiBuICE9IDIgewoJCXQuRmF0YWxmKCJlYXJseSBzdG9wIHZpc2l0ZWQgJWQiLCBuKQoJfQp9ChpkCgtnbm9tb2QudG9tbBJVbW9kdWxlID0gImduby5sYW5kL3AvZzFxcDVwdDhjZHEyZjZrZmRhbW4zeXV4d2c2cXVxbmZweWV3enozOS9mZWVsZWRnZXIiCmdubyA9ICIwLjkiCiIiChMvZ25vLk1lbVBhY2thZ2VUeXBlEgsKCU1QVXNlckFsbCINMTAwMDAwMDB1Z25vdBITCIDGho8BEgsxNTAwMDB1Z25vdBqoAQo6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQI+F/3SD44LzJd5QXHh1vF/QcCo6KniXCcPaMD4J5RVpxJA8IPCbHx+/+vOjTg8Jg9BfaHJtt1WSQIYXLv1x5pLnvQpWwf/7PDyyFHZCWcyFYJmqkgg2+moxEONfiXrwZjm5RooZzFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFsdXV4ZQ==