Transaction executed successfully

Transaction Details

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

Transaction hash
1DBE2FC2D774977A97A601AB87ECBA7E15D1B23AC013197B5372E40455166EC1

Transaction overview

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

Execution summary

TX INDEX
2
Position in block
GAS WANTED
35,288,892
Requested gas limit
GAS USED
33,608,438
Gas consumed
FEE
35289ugnot
Transaction fee

Participants

Sender
Package / Realm
Not available
Memo
None

Message

Message #1
m_addpkg
Caller
Arguments
g1lnkytfqcjwllws63gvf0mv9yt04aswy4y9amhm

Execution log

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

Events

No events emitted by this transaction.

Raw encoded transaction

CuTAAQoML3ZtLm1fYWRkcGtnEtLAAQooZzFsbmt5dGZxY2p3bGx3czYzZ3ZmMG12OXl0MDRhc3d5NHk5YW1obRKkwAEKC3VwZ3JhZGVhYmxlEkJnbm8ubGFuZC9wL2cxbG5reXRmcWNqd2xsd3M2M2d2ZjBtdjl5dDA0YXN3eTR5OWFtaG0vdXBncmFkZWFibGUvdjAaoyIKDWF1dGhvcml0eS5nbm8SkSJwYWNrYWdlIHVwZ3JhZGVhYmxlCgppbXBvcnQgInN0cmluZ3MiCgovLyBBdXRob3JpdHkgZGVjaWRlcyB3aG8gbWF5IGNoYW5nZSB3aGF0IGEgW1Byb3h5XSBwb2ludHMgYXQuCi8vCi8vIEl0IGlzIGhhbmRlZCB0aGUgaWRlbnRpdHkgb2YgdGhlIGNhbGxlciAtLSB0aGUgcmVhbG0gdGhhdCBjcm9zc2VkIGludG8gdGhlCi8vIHJlYWxtIGhvbGRpbmcgdGhlIFByb3h5LiBXaGVuIGEgdHJhbnNhY3Rpb24gaXMgc2VudCBzdHJhaWdodCB0byB0aGF0IHJlYWxtCi8vIHRoZSBjYWxsZXIgaXMgYSB1c2VyOiBwa2dQYXRoIGlzIGVtcHR5IGFuZCBhZGRyIGlzIHRoZSBzaWduZXIuIFdoZW4gdGhlCi8vIGNhbGwgYXJyaXZlcyB0aHJvdWdoIGFub3RoZXIgcmVhbG0sIHNheSBhIERBTyBleGVjdXRpbmcgYSBwcm9wb3NhbCwgcGtnUGF0aAovLyBuYW1lcyB0aGF0IHJlYWxtIGFuZCBhZGRyIGlzIHRoZSByZWFsbSdzIG93biBhZGRyZXNzLgovLwovLyBCb3RoIGhhbHZlcyBhcmUgcGFzc2VkIGJlY2F1c2UgdGhlIHR3byBhdXRob3JpemF0aW9uIHN0eWxlcyBvbiBnbm8ubGFuZAovLyByZWFkIGRpZmZlcmVudCBvbmVzOiBhbiBvd25lciBjaGVjayBjb21wYXJlcyBhZGRyZXNzZXMsIGEgZ292ZXJuYW5jZSBjaGVjawovLyBjb21wYXJlcyByZWFsbSBwYXRocy4gQW4gaW1wbGVtZW50YXRpb24gbXVzdCByZWFkIHRoZSBoYWxmIGl0IG1lYW5zIGFuZAovLyBpZ25vcmUgdGhlIG90aGVyLiBJbiBwYXJ0aWN1bGFyIGFuIGVtcHR5IHBrZ1BhdGggaXMgbm90IGEgcmVhbG0gLS0gaXQgaXMKLy8gZXZlcnkgdXNlciBjYWxsIC0tIHNvIGEgcGF0aCBjaGVjayBtdXN0IHJlamVjdCBpdCBleHBsaWNpdGx5Lgp0eXBlIEF1dGhvcml0eSBpbnRlcmZhY2UgewoJQXV0aG9yaXplZChhZGRyIGFkZHJlc3MsIHBrZ1BhdGggc3RyaW5nKSBib29sCglTdHJpbmcoKSBzdHJpbmcKfQoKLy8gQWRkckF1dGhvcml0eSBhdXRob3JpemVzIGV4YWN0bHkgb25lIGFkZHJlc3M6IHRoZSBzaWduZXIgb2YgYSBkaXJlY3QgY2FsbCwKLy8gb3IgYSByZWFsbSBhY3RpbmcgYXQgdGhhdCBhZGRyZXNzLgp0eXBlIEFkZHJBdXRob3JpdHkgc3RydWN0IHsKCWFkZHIgYWRkcmVzcwp9CgovLyBOZXdBZGRyQXV0aG9yaXR5IHJldHVybnMgYW4gQXV0aG9yaXR5IGhvbGRpbmcgYWRkci4KZnVuYyBOZXdBZGRyQXV0aG9yaXR5KGFkZHIgYWRkcmVzcykgKkFkZHJBdXRob3JpdHkgewoJaWYgIWFkZHIuSXNWYWxpZCgpIHsKCQlwYW5pYyhFcnJCYWRBZGRyZXNzKQoJfQoJcmV0dXJuICZBZGRyQXV0aG9yaXR5e2FkZHI6IGFkZHJ9Cn0KCmZ1bmMgKGEgKkFkZHJBdXRob3JpdHkpIEF1dGhvcml6ZWQoYWRkciBhZGRyZXNzLCBfIHN0cmluZykgYm9vbCB7CglyZXR1cm4gYSAhPSBuaWwgJiYgYWRkci5Jc1ZhbGlkKCkgJiYgYWRkciA9PSBhLmFkZHIKfQoKLy8gQWRkcmVzcyByZXR1cm5zIHRoZSBhdXRob3JpemVkIGFkZHJlc3MuCmZ1bmMgKGEgKkFkZHJBdXRob3JpdHkpIEFkZHJlc3MoKSBhZGRyZXNzIHsKCWlmIGEgPT0gbmlsIHsKCQlyZXR1cm4gIiIKCX0KCXJldHVybiBhLmFkZHIKfQoKZnVuYyAoYSAqQWRkckF1dGhvcml0eSkgU3RyaW5nKCkgc3RyaW5nIHsKCWlmIGEgPT0gbmlsIHsKCQlyZXR1cm4gImFkZHI6PG5pbD4iCgl9CglyZXR1cm4gImFkZHI6IiArIGEuYWRkci5TdHJpbmcoKQp9CgovLyBSZWFsbUF1dGhvcml0eSBhdXRob3JpemVzIGEgZml4ZWQgc2V0IG9mIHJlYWxtIHBhdGhzLCB0aGUgc2hhcGUgci9nb3YvZGFvCi8vIHVzZXM6IGEgZ292ZXJuYW5jZSByZWFsbSBleGVjdXRlcyB0aGUgdXBncmFkZSwgYW5kIHRoZSBwcm94eSByZWNvZ25pemVzIGl0Ci8vIGJ5IHRoZSBwYXRoIGl0IHdhcyBkZXBsb3llZCBhdCByYXRoZXIgdGhhbiBieSBhbiBhZGRyZXNzLgovLwovLyBNb3JlIHRoYW4gb25lIHBhdGggaXMgYWxsb3dlZCBzbyB0aGF0IGF1dGhvcml0eSBjYW4gYmUgbW92ZWQgd2l0aG91dCBhIGdhcDoKLy8gbGlzdCBib3RoIHRoZSBvbGQgYW5kIHRoZSBuZXcgZ292ZXJuYW5jZSByZWFsbSwgbGV0IHRoZSBuZXcgb25lIHRha2Ugb3ZlciwKLy8gdGhlbiBuYXJyb3cgdGhlIGxpc3QuCnR5cGUgUmVhbG1BdXRob3JpdHkgc3RydWN0IHsKCXBhdGhzIFtdc3RyaW5nCn0KCi8vIE5ld1JlYWxtQXV0aG9yaXR5IHJldHVybnMgYW4gQXV0aG9yaXR5IGhvbGRpbmcgcGF0aHMuIEl0IHBhbmljcyBvbiBhbiBlbXB0eQovLyBsaXN0IHJhdGhlciB0aGFuIGF1dGhvcml6aW5nIG5vYm9keSwgYW5kIG9uIGEgYmxhbmsgb3IgcGFkZGVkIGVudHJ5IHJhdGhlcgovLyB0aGFuIHN0b3Jpbmcgb25lIHRoYXQgY2FuIG5ldmVyIG1hdGNoIGEgY2FsbGVyIC0tIG9yLCBmb3IgYSBibGFuayBvbmUsCi8vIG1hdGNoZXMgZXZlcnkgdXNlciBjYWxsLgpmdW5jIE5ld1JlYWxtQXV0aG9yaXR5KHBhdGhzIC4uLnN0cmluZykgKlJlYWxtQXV0aG9yaXR5IHsKCWlmIGxlbihwYXRocykgPT0gMCB7CgkJcGFuaWMoRXJyTm9BdXRob3JpdHkpCgl9CglvdXQgOj0gbWFrZShbXXN0cmluZywgMCwgbGVuKHBhdGhzKSkKCWZvciBfLCBwIDo9IHJhbmdlIHBhdGhzIHsKCQlpZiBwID09ICIiIHx8IHAgIT0gc3RyaW5ncy5UcmltU3BhY2UocCkgewoJCQlwYW5pYyhFcnJCYWRSZWFsbVBhdGgpCgkJfQoJCW91dCA9IGFwcGVuZChvdXQsIHApCgl9CglyZXR1cm4gJlJlYWxtQXV0aG9yaXR5e3BhdGhzOiBvdXR9Cn0KCmZ1bmMgKGEgKlJlYWxtQXV0aG9yaXR5KSBBdXRob3JpemVkKF8gYWRkcmVzcywgcGtnUGF0aCBzdHJpbmcpIGJvb2wgewoJaWYgYSA9PSBuaWwgfHwgcGtnUGF0aCA9PSAiIiB7CgkJcmV0dXJuIGZhbHNlCgl9Cglmb3IgXywgcCA6PSByYW5nZSBhLnBhdGhzIHsKCQlpZiBwID09IHBrZ1BhdGggewoJCQlyZXR1cm4gdHJ1ZQoJCX0KCX0KCXJldHVybiBmYWxzZQp9CgovLyBQYXRocyByZXR1cm5zIGEgY29weSBvZiB0aGUgYXV0aG9yaXplZCByZWFsbSBwYXRocy4KZnVuYyAoYSAqUmVhbG1BdXRob3JpdHkpIFBhdGhzKCkgW11zdHJpbmcgewoJaWYgYSA9PSBuaWwgewoJCXJldHVybiBuaWwKCX0KCWR1cCA6PSBtYWtlKFtdc3RyaW5nLCBsZW4oYS5wYXRocykpCgljb3B5KGR1cCwgYS5wYXRocykKCXJldHVybiBkdXAKfQoKZnVuYyAoYSAqUmVhbG1BdXRob3JpdHkpIFN0cmluZygpIHN0cmluZyB7CglpZiBhID09IG5pbCB7CgkJcmV0dXJuICJyZWFsbXM6PG5pbD4iCgl9CglyZXR1cm4gInJlYWxtczoiICsgc3RyaW5ncy5Kb2luKGEucGF0aHMsICIsIikKfQoKLy8gQW55T2YgYXV0aG9yaXplcyBhIGNhbGxlciB0aGF0IGFueSBvZiBpdHMgbWVtYmVycyBhdXRob3JpemVzLiBJdCBpcyB0aGUKLy8gaGFuZG92ZXIgc2hhcGUgZm9yIHRoZSBjb21tb24gY2FzZTogaG9sZCBhbiBhZGRyZXNzIGF1dGhvcml0eSB3aGlsZSB5b3UgYXJlCi8vIHN0aWxsIGRlcGxveWluZywgYWRkIHRoZSBnb3Zlcm5hbmNlIHJlYWxtLCBkcm9wIHRoZSBhZGRyZXNzIGxhdGVyLgp0eXBlIEFueU9mIHN0cnVjdCB7CglhdXRocyBbXUF1dGhvcml0eQp9CgovLyBOZXdBbnlPZiByZXR1cm5zIGFuIEF1dGhvcml0eSBzYXRpc2ZpZWQgYnkgYW55IG9mIGF1dGhzLiBJdCBwYW5pY3Mgb24gYW4KLy8gZW1wdHkgbGlzdCBvciBhIG5pbCBtZW1iZXIsIGJvdGggb2Ygd2hpY2ggd291bGQgc2lsZW50bHkgd2Vha2VuIG9yIHZvaWQKLy8gdGhlIGNoZWNrLgpmdW5jIE5ld0FueU9mKGF1dGhzIC4uLkF1dGhvcml0eSkgKkFueU9mIHsKCWlmIGxlbihhdXRocykgPT0gMCB7CgkJcGFuaWMoRXJyTm9BdXRob3JpdHkpCgl9CglvdXQgOj0gbWFrZShbXUF1dGhvcml0eSwgMCwgbGVuKGF1dGhzKSkKCWZvciBfLCBhIDo9IHJhbmdlIGF1dGhzIHsKCQlpZiBhID09IG5pbCB7CgkJCXBhbmljKEVyck5vQXV0aG9yaXR5KQoJCX0KCQlvdXQgPSBhcHBlbmQob3V0LCBhKQoJfQoJcmV0dXJuICZBbnlPZnthdXRoczogb3V0fQp9CgpmdW5jIChhICpBbnlPZikgQXV0aG9yaXplZChhZGRyIGFkZHJlc3MsIHBrZ1BhdGggc3RyaW5nKSBib29sIHsKCWlmIGEgPT0gbmlsIHsKCQlyZXR1cm4gZmFsc2UKCX0KCWZvciBfLCBzdWIgOj0gcmFuZ2UgYS5hdXRocyB7CgkJaWYgc3ViLkF1dGhvcml6ZWQoYWRkciwgcGtnUGF0aCkgewoJCQlyZXR1cm4gdHJ1ZQoJCX0KCX0KCXJldHVybiBmYWxzZQp9CgpmdW5jIChhICpBbnlPZikgU3RyaW5nKCkgc3RyaW5nIHsKCWlmIGEgPT0gbmlsIHsKCQlyZXR1cm4gImFueU9mOjxuaWw+IgoJfQoJcGFydHMgOj0gbWFrZShbXXN0cmluZywgMCwgbGVuKGEuYXV0aHMpKQoJZm9yIF8sIHN1YiA6PSByYW5nZSBhLmF1dGhzIHsKCQlwYXJ0cyA9IGFwcGVuZChwYXJ0cywgc3ViLlN0cmluZygpKQoJfQoJcmV0dXJuICJhbnlPZigiICsgc3RyaW5ncy5Kb2luKHBhcnRzLCAiICIpICsgIikiCn0KGroSCgplcnJvcnMuZ25vEqsScGFja2FnZSB1cGdyYWRlYWJsZQoKaW1wb3J0ICJlcnJvcnMiCgp2YXIgKAoJLy8gRXJyTm9BdXRob3JpdHkgaXMgcmFpc2VkIHdoZW4gYSBQcm94eSBpcyBidWlsdCwgb3IgaGFuZGVkLCBhIG5pbAoJLy8gYXV0aG9yaXR5LiBUaGVyZSBpcyBubyAibm9ib2R5IiBhdXRob3JpdHk6IHRvIGVuZCB1cGdyYWRlYWJpbGl0eSwKCS8vIEZyZWV6ZSBpdC4KCUVyck5vQXV0aG9yaXR5ID0gZXJyb3JzLk5ldygidXBncmFkZWFibGU6IGFuIGF1dGhvcml0eSBpcyByZXF1aXJlZCIpCgoJLy8gRXJyVW5hdXRob3JpemVkIGlzIHJhaXNlZCB3aGVuIHRoZSBjYWxsZXIgaXMgbm90IHRoZSBhdXRob3JpdHkuCglFcnJVbmF1dGhvcml6ZWQgPSBlcnJvcnMuTmV3KCJ1cGdyYWRlYWJsZTogY2FsbGVyIGlzIG5vdCB0aGUgYXV0aG9yaXR5IikKCgkvLyBFcnJTdGFsZVJlYWxtIGlzIHJhaXNlZCB3aGVuIHRoZSB0aHJlYWRlZCByZWFsbSB2YWx1ZSBpcyBub3QgdGhlCgkvLyBjYWxsZXIncyBsaXZlIGN1ciAtLSBhIHN0YXNoZWQgb3IgcmVwbGF5ZWQgY2FwdHVyZS4KCUVyclN0YWxlUmVhbG0gPSBlcnJvcnMuTmV3KCJ1cGdyYWRlYWJsZTogcmVhbG0gdmFsdWUgaXMgbm90IHRoZSBjYWxsZXIncyBsaXZlIGN1ciIpCgoJLy8gRXJyRnJvemVuIGlzIHJhaXNlZCBieSBldmVyeSBtdXRhdGluZyBtZXRob2Qgb25jZSBGcmVlemUgaGFzIHJ1bi4KCUVyckZyb3plbiA9IGVycm9ycy5OZXcoInVwZ3JhZGVhYmxlOiBwcm94eSBpcyBmcm96ZW4iKQoKCS8vIEVyck5vSW1wbCBpcyByYWlzZWQgd2hlbiB0aGUgcHJveHkgaXMgYXNrZWQgZm9yIGFuIGltcGxlbWVudGF0aW9uIGl0CgkvLyBkb2VzIG5vdCBoYXZlIHlldC4KCUVyck5vSW1wbCA9IGVycm9ycy5OZXcoInVwZ3JhZGVhYmxlOiBubyBpbXBsZW1lbnRhdGlvbiBpcyBsaXZlIikKCgkvLyBFcnJOb3ROZXN0ZWQgaXMgcmFpc2VkIHdoZW4gYSBjYW5kaWRhdGUgcmVnaXN0ZXJzIGZyb20gYSByZWFsbSB0aGF0IGlzCgkvLyBub3QgdW5kZXIgdGhlIHByb3h5IHJlYWxtJ3Mgb3duIHBhdGguIFNlZSBOZXcgYW5kIE5ld09wZW4uCglFcnJOb3ROZXN0ZWQgPSBlcnJvcnMuTmV3KCJ1cGdyYWRlYWJsZTogY2FuZGlkYXRlIHJlYWxtIGlzIG5vdCBuZXN0ZWQgdW5kZXIgdGhpcyBvbmUiKQoKCS8vIEVyck5vdEFSZWFsbSBpcyByYWlzZWQgd2hlbiBhIGNhbmRpZGF0ZSByZWdpc3RlcnMgZnJvbSBhIHVzZXIgY2FsbAoJLy8gcmF0aGVyIHRoYW4gZnJvbSBhIGRlcGxveWVkIHJlYWxtLCBzbyB0aGVyZSBpcyBubyBwYXRoIHRvIHJlY29yZC4KCUVyck5vdEFSZWFsbSA9IGVycm9ycy5OZXcoInVwZ3JhZGVhYmxlOiBvbmx5IGEgZGVwbG95ZWQgcmVhbG0gY2FuIHJlZ2lzdGVyIGEgY2FuZGlkYXRlIikKCgkvLyBFcnJOaWxJbXBsIGlzIHJhaXNlZCB3aGVuIHRoZSByZWdpc3RlcmVkIGltcGxlbWVudGF0aW9uIGlzIG5pbC4KCUVyck5pbEltcGwgPSBlcnJvcnMuTmV3KCJ1cGdyYWRlYWJsZTogaW1wbGVtZW50YXRpb24gaXMgbmlsIikKCgkvLyBFcnJVbmtub3duUGF0aCBpcyByYWlzZWQgd2hlbiBhY2NlcHRpbmcgb3Igd2l0aGRyYXdpbmcgYSBwYXRoIHRoYXQgaGFzCgkvLyBubyBjYW5kaWRhdGUgcmVnaXN0ZXJlZCBhZ2FpbnN0IGl0LgoJRXJyVW5rbm93blBhdGggPSBlcnJvcnMuTmV3KCJ1cGdyYWRlYWJsZTogbm8gY2FuZGlkYXRlIHJlZ2lzdGVyZWQgYXQgdGhhdCBwYXRoIikKCgkvLyBFcnJOb0hpc3RvcnkgaXMgcmFpc2VkIGJ5IFJvbGxiYWNrIHdoZW4gbm90aGluZyBoYXMgYmVlbiByZXBsYWNlZCB5ZXQuCglFcnJOb0hpc3RvcnkgPSBlcnJvcnMuTmV3KCJ1cGdyYWRlYWJsZTogbm8gcHJldmlvdXMgcmVsZWFzZSB0byByb2xsIGJhY2sgdG8iKQoKCS8vIEVyckJhZEFkZHJlc3MgaXMgcmFpc2VkIHdoZW4gYW4gYXV0aG9yaXR5IGlzIGJ1aWx0IGZyb20gYW4gaW52YWxpZAoJLy8gYWRkcmVzcy4KCUVyckJhZEFkZHJlc3MgPSBlcnJvcnMuTmV3KCJ1cGdyYWRlYWJsZTogaW52YWxpZCBhZGRyZXNzIikKCgkvLyBFcnJCYWRSZWFsbVBhdGggaXMgcmFpc2VkIHdoZW4gYW4gYXV0aG9yaXR5IGlzIGJ1aWx0IGZyb20gYSByZWFsbSBwYXRoCgkvLyB0aGF0IGlzIGJsYW5rIG9yIGNhcnJpZXMgc3Vycm91bmRpbmcgd2hpdGVzcGFjZS4gQm90aCBhcmUgc2lsZW50CgkvLyBsb2Nrb3V0czogYSBibGFuayBlbnRyeSBtYXRjaGVzIGV2ZXJ5IHVzZXIgY2FsbCwgYW5kIGEgcGFkZGVkIG9uZQoJLy8gbWF0Y2hlcyBubyBjYWxsZXIgYXQgYWxsLgoJRXJyQmFkUmVhbG1QYXRoID0gZXJyb3JzLk5ldygidXBncmFkZWFibGU6IGF1dGhvcml0eSByZWFsbSBwYXRocyBtdXN0IGJlIG5vbi1ibGFuayBhbmQgdW5wYWRkZWQiKQopChppCgtnbm9tb2QudG9tbBJabW9kdWxlID0gImduby5sYW5kL3AvZzFsbmt5dGZxY2p3bGx3czYzZ3ZmMG12OXl0MDRhc3d5NHk5YW1obS91cGdyYWRlYWJsZS92MCIKZ25vID0gIjAuOSIKGt2JAQoPdXBncmFkZWFibGUuZ25vEsiJAS8vIFBhY2thZ2UgdXBncmFkZWFibGUgbGV0cyBhIHJlYWxtIGF0IGEgcGVybWFuZW50IHBhdGggc2VydmUgYmVoYXZpb3IgdGhhdAovLyBjYW4gY2hhbmdlLgovLwovLyBBIGduby5sYW5kIHBhY2thZ2UgcGF0aCBpcyBpbW11dGFibGUuIFRoZSBWTSBrZWVwZXIgcmVmdXNlcyBNc2dBZGRQYWNrYWdlCi8vIGF0IGEgcGF0aCB0aGF0IGFscmVhZHkgaG9sZHMgYSBwYWNrYWdlLCBhbmQgdGhlIG9uZSBleGNlcHRpb24gLS0gcHJpdmF0ZQovLyA9IHRydWUgaW4gZ25vbW9kLnRvbWwgLS0gYnV5cyByZWRlcGxveWFiaWxpdHkgYnkgZ2l2aW5nIHVwIGltcG9ydGFiaWxpdHksCi8vIGFuZCBzdGFydHMgdGhlIHJlYWxtJ3MgZ2xvYmFscyBvdmVyIGZyb20gbm90aGluZyBiZXNpZGVzLiBTbyBhIHJlYWxtIG90aGVyCi8vIHBlb3BsZSBpbXBvcnQgY2Fubm90IGhhdmUgaXRzIGNvZGUgcmVwbGFjZWQuIFdoYXQgaXQgY2FuIGRvIGlzIGRlY2lkZSBhdAovLyBjYWxsIHRpbWUgd2hpY2ggb2JqZWN0IGl0IGNhbGxzLCBhbmQgdGhhdCBvYmplY3QgY2FuIGxpdmUgaW4gYSByZWFsbQovLyBkZXBsb3llZCB5ZWFycyBsYXRlci4gVGhlcmUgaXMgbm8gZGVsZWdhdGVjYWxsIGhlcmUgYW5kIGltcG9ydHMgcmVzb2x2ZQovLyBzdGF0aWNhbGx5OiB0aGUgaW5kaXJlY3Rpb24gaXMgYW4gb3JkaW5hcnkgaW50ZXJmYWNlIHZhbHVlLCBoYW5kZWQgb3ZlciBieQovLyB0aGUgcmVhbG0gdGhhdCBpbXBsZW1lbnRzIGl0LgovLwovLyBbUHJveHldIGlzIHRoZSBib29ra2VlcGluZyBmb3IgdGhhdC4gSXQgaG9sZHMgdGhlIG9uZSBsaXZlIGltcGxlbWVudGF0aW9uLAovLyB0aGUgY2FuZGlkYXRlcyB3YWl0aW5nIHRvIHJlcGxhY2UgaXQsIGFuZCB0aGUgb25lcyBpdCB1c2VkIHRvIGJlLCB3aXRoIGFuCi8vIFtBdXRob3JpdHldIGRlY2lkaW5nIHdobyBtYXkgbW92ZSBiZXR3ZWVuIHRoZW0uIFdoYXQgaXQgZGVsaWJlcmF0ZWx5IGRvZXMKLy8gbm90IGhvbGQgaXMgeW91ciBzdGF0ZS4gU3RhdGUgYmVsb25ncyBpbiB0aGUgcmVhbG0gYXQgdGhlIHBlcm1hbmVudCBwYXRoLAovLyBvciBpbiBhIHJlYWxtIG9mIGl0cyBvd24sIHNvIHRoYXQgcmVwbGFjaW5nIGFuIGltcGxlbWVudGF0aW9uIGRvZXMgbm90Ci8vIHRvdWNoIGl0IC0tIHNlZSB0aGUgY291bnRlciBleGFtcGxlIHVuZGVyIHIvIGZvciBib3RoIGhhbHZlcy4KLy8KLy8gVGhpcyBpcyBhIHAvIHBhY2thZ2Ugb24gcHVycG9zZS4gUHVyZSBwYWNrYWdlcyBjYW4gbmV2ZXIgYmUgcmVkZXBsb3llZCwgc28KLy8gdGhlIHJ1bGVzIGJlbG93IGNhbm5vdCBiZSBzd2FwcGVkIG91dCBmcm9tIHVuZGVyIHRoZSByZWFsbSB0aGF0IHJlbGllcyBvbgovLyB0aGVtLCB3aGljaCBpcyBleGFjdGx5IHRoZSBwcm9wZXJ0eSBhbiB1cGdyYWRlIG1lY2hhbmlzbSBoYXMgdG8gaGF2ZS4KLy8KLy8gIyBUaHJlYWRpbmcgY3VyCi8vCi8vIEV2ZXJ5IGF1dGhvcml0eS1zZW5zaXRpdmUgbWV0aG9kIHRha2VzIChfIGludCwgcmxtIHJlYWxtKTogdGhlIGNhbGxlcgovLyB0aHJlYWRzIGl0cyBvd24gY3VyIGFzIGRhdGEgaW5zdGVhZCBvZiBjcm9zc2luZyBpbnRvIHRoaXMgcGFja2FnZS4gVGhlCi8vIGxlYWRpbmcgaW50IGtlZXBzIHJsbSBvdXQgb2YgZmlyc3QgcG9zaXRpb24sIHdoZXJlIGl0IHdvdWxkIGRlY2xhcmUgYQovLyBjcm9zc2luZyBmdW5jdGlvbi4gcmxtLlByZXZpb3VzKCkgaXMgdGhlbiB0aGUgcmVhbG0gdGhhdCBjcm9zc2VkIGludG8gdGhlCi8vIGNhbGxlciAtLSB0aGUgdXNlciBzZW5kaW5nIHRoZSB0cmFuc2FjdGlvbiwgdGhlIGdvdmVybmFuY2UgcmVhbG0gZXhlY3V0aW5nCi8vIGEgcHJvcG9zYWwsIG9yIHRoZSBpbXBsZW1lbnRhdGlvbiByZWFsbSByZWdpc3RlcmluZyBpdHNlbGYgLS0gYW5kCi8vIHJsbS5Jc0N1cnJlbnQoKSBpcyB3aGF0IG1ha2VzIHRoYXQgdW5mb3JnZWFibGU6IGEgcmVhbG0gdmFsdWUgY2Fubm90IGJlCi8vIHBlcnNpc3RlZCwgYW5kIGEgc3RhbGUgY2FwdHVyZSBmYWlscyB0aGUgY2hlY2suCnBhY2thZ2UgdXBncmFkZWFibGUKCmltcG9ydCAoCgkiY2hhaW4iCgkiY2hhaW4vcnVudGltZSIKCSJzdHJpbmdzIgopCgovLyBFdmVudCB0eXBlcyBlbWl0dGVkIG9uIGV2ZXJ5IHN0YXRlIGNoYW5nZSwgc28gYW4gaW5kZXhlciBjYW4gcmVjb25zdHJ1Y3QKLy8gd2hpY2ggY29kZSBzZXJ2ZWQgd2hpY2ggYmxvY2sgd2l0aG91dCByZXBsYXlpbmcgdGhlIHJlYWxtLgpjb25zdCAoCglQcm9wb3NlRXZlbnQgICA9ICJVcGdyYWRlUHJvcG9zZWQiCglXaXRoZHJhd0V2ZW50ICA9ICJVcGdyYWRlV2l0aGRyYXduIgoJQWNjZXB0RXZlbnQgICAgPSAiVXBncmFkZUFjY2VwdGVkIgoJUm9sbGJhY2tFdmVudCAgPSAiVXBncmFkZVJvbGxlZEJhY2siCglGb3JnZXRFdmVudCAgICA9ICJVcGdyYWRlSGlzdG9yeURyb3BwZWQiCglFeHRlbmRFdmVudCAgICA9ICJVcGdyYWRlRXh0ZW5zaW9uQWRkZWQiCglVbmV4dGVuZEV2ZW50ICA9ICJVcGdyYWRlRXh0ZW5zaW9uRHJvcHBlZCIKCUZyZWV6ZUV2ZW50ICAgID0gIlVwZ3JhZGVGcm96ZW4iCglBdXRob3JpdHlFdmVudCA9ICJVcGdyYWRlQXV0aG9yaXR5VHJhbnNmZXJyZWQiCikKCi8vIFJlbGVhc2UgaXMgb25lIGltcGxlbWVudGF0aW9uOiB0aGUgb2JqZWN0LCBhbmQgdGhlIHJlYWxtIHRoYXQgYXV0aG9yZWQgaXQuCi8vCi8vIFBrZ1BhdGggaXMgcmVhZCBvZmYgdGhlIGNyb3NzaW5nIGZyYW1lIGF0IHJlZ2lzdHJhdGlvbiwgbmV2ZXIgdGFrZW4gYXMgYW4KLy8gYXJndW1lbnQsIHNvIGl0IG5hbWVzIHRoZSByZWFsbSB0aGUgY29kZSBhY3R1YWxseSBsaXZlcyBhdC4gVGhhdCBpcyB3aGF0Ci8vIG1ha2VzIGl0IHdvcnRoIHJldmlld2luZyBiZWZvcmUgYW4gdXBncmFkZSBpcyBhY2NlcHRlZCwgYW5kIHdoYXQgbGV0cyBhCi8vIHN0YXRlIHJlYWxtIHJlY29nbml6ZSB0aGUgbGl2ZSBpbXBsZW1lbnRhdGlvbiBsYXRlci4KLy8KLy8gUmVsZWFzZSBpcyByZXR1cm5lZCBieSB2YWx1ZS4gVGhlIHByb3h5J3Mgb3duIGNvcHkgc3RheXMgdW5yZWFjaGFibGUgZnJvbQovLyBvdXRzaWRlLCBzbyBhIHJlYWRlciBjYW5ub3QgcmV3cml0ZSBoaXN0b3J5Lgp0eXBlIFJlbGVhc2Ugc3RydWN0IHsKCXBrZ1BhdGggc3RyaW5nCglpbXBsICAgIGFueQoJaGVpZ2h0ICBpbnQ2NAp9CgovLyBQa2dQYXRoIHJldHVybnMgdGhlIHJlYWxtIHBhdGggdGhlIGltcGxlbWVudGF0aW9uIHdhcyByZWdpc3RlcmVkIGZyb20uCmZ1bmMgKHIgUmVsZWFzZSkgUGtnUGF0aCgpIHN0cmluZyB7IHJldHVybiByLnBrZ1BhdGggfQoKLy8gSW1wbCByZXR1cm5zIHRoZSBpbXBsZW1lbnRhdGlvbiBvYmplY3QuCmZ1bmMgKHIgUmVsZWFzZSkgSW1wbCgpIGFueSB7IHJldHVybiByLmltcGwgfQoKLy8gSGVpZ2h0IHJldHVybnMgdGhlIGJsb2NrIGhlaWdodCBhdCB3aGljaCB0aGUgaW1wbGVtZW50YXRpb24gcmVnaXN0ZXJlZC4KZnVuYyAociBSZWxlYXNlKSBIZWlnaHQoKSBpbnQ2NCB7IHJldHVybiByLmhlaWdodCB9CgovLyBJc1plcm8gcmVwb3J0cyB3aGV0aGVyIHIgaXMgdGhlIHplcm8gUmVsZWFzZSwgd2hpY2ggaXMgd2hhdCBhY2Nlc3NvcnMKLy8gcmV0dXJuIGFsb25nc2lkZSBhIGZhbHNlIG9rLgpmdW5jIChyIFJlbGVhc2UpIElzWmVybygpIGJvb2wgeyByZXR1cm4gci5wa2dQYXRoID09ICIiIH0KCi8vIFByb3h5IGhvbGRzIHRoZSBsaXZlIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgYm9va2tlZXBpbmcgYXJvdW5kIHJlcGxhY2luZwovLyBpdC4gS2VlcCBvbmUgYXMgYSByZWFsbS1sZXZlbCB2YXJpYWJsZTsgaXQgcGVyc2lzdHMgd2l0aCB0aGUgcmVhbG0uCnR5cGUgUHJveHkgc3RydWN0IHsKCWF1dGggICAgQXV0aG9yaXR5CglsaXZlICAgICpSZWxlYXNlCglwZW5kaW5nIFtdKlJlbGVhc2UgLy8ga2VwdCBzb3J0ZWQgYnkgcGtnUGF0aAoJcGFzdCAgICAgW10qUmVsZWFzZQoJZXh0cyAgICAgW11zdHJpbmcgLy8ga2VwdCBzb3J0ZWQ7IHJlYWxtcyBhbGxvd2VkIHRvIGFjdCBhcyB0aGlzIG9uZQoJZnJvemVuICAgYm9vbAoJbmVzdGVkICAgYm9vbAp9CgovLyBOZXcgcmV0dXJucyBhIFByb3h5IHdob3NlIGNhbmRpZGF0ZXMgbXVzdCByZWdpc3RlciBmcm9tIGEgcmVhbG0gbmVzdGVkCi8vIHVuZGVyIHRoZSByZWFsbSBob2xkaW5nIGl0OiBnbm8ubGFuZC9yL3lvdS9hcHAvaW1wbC92MSB1bmRlcgovLyBnbm8ubGFuZC9yL3lvdS9hcHAuIERlcGxveWluZyB1bmRlciB0aGF0IHByZWZpeCBuZWVkcyB5b3VyIG5hbWVzcGFjZSwgc28KLy8gdGhlIHBlbmRpbmcgc2V0IGNhbm5vdCBiZSBmaWxsZWQgYnkgc3RyYW5nZXJzLgovLwovLyBJdCBwYW5pY3Mgb24gYSBuaWwgYXV0aG9yaXR5LiBVcGdyYWRlYWJpbGl0eSB3aXRoIG5vIGF1dGhvcml0eSBpcyBub3QKLy8gIm5vYm9keSBjYW4gdXBncmFkZSIgLS0gdG8gcmVhY2ggdGhhdCwgRnJlZXplLgpmdW5jIE5ldyhhdXRoIEF1dGhvcml0eSkgKlByb3h5IHsKCXJldHVybiBuZXdQcm94eShhdXRoLCB0cnVlKQp9CgovLyBOZXdPcGVuIGlzIE5ldyB3aXRob3V0IHRoZSBuZXN0aW5nIHJ1bGU6IGFueSBkZXBsb3llZCByZWFsbSBtYXkgcmVnaXN0ZXIgYQovLyBjYW5kaWRhdGUgYW5kIHRoZSBhdXRob3JpdHkgYWxvbmUgZGVjaWRlcy4gVXNlIGl0IHdoZW4gaW1wbGVtZW50YXRpb25zCi8vIGNvbWUgZnJvbSBvdXRzaWRlIHlvdXIgbmFtZXNwYWNlLiBUaGUgY29zdCBpcyB0aGF0IGFueW9uZSBjYW4gYWRkIGVudHJpZXMKLy8gdG8gdGhlIHBlbmRpbmcgc2V0LCB3aGljaCBsaXZlcyBpbiB5b3VyIHJlYWxtJ3Mgc3RvcmFnZTsgV2l0aGRyYXcgY2xlYXJzCi8vIHRoZW0uCmZ1bmMgTmV3T3BlbihhdXRoIEF1dGhvcml0eSkgKlByb3h5IHsKCXJldHVybiBuZXdQcm94eShhdXRoLCBmYWxzZSkKfQoKZnVuYyBuZXdQcm94eShhdXRoIEF1dGhvcml0eSwgbmVzdGVkIGJvb2wpICpQcm94eSB7CglpZiBhdXRoID09IG5pbCB7CgkJcGFuaWMoRXJyTm9BdXRob3JpdHkpCgl9CglyZXR1cm4gJlByb3h5ewoJCWF1dGg6ICAgYXV0aCwKCQluZXN0ZWQ6IG5lc3RlZCwKCX0KfQoKLy8gSW1wbCByZXR1cm5zIHRoZSBsaXZlIGltcGxlbWVudGF0aW9uLCBhbmQgcGFuaWNzIHdpdGggRXJyTm9JbXBsIGlmIG5vdGhpbmcKLy8gaGFzIGJlZW4gYWNjZXB0ZWQgeWV0LiBSZWFsbXMgY2FsbCB0aGlzIG9uIGV2ZXJ5IHJlcXVlc3QsIHNvIHRoZSBwYW5pYyBpcwovLyB0aGUgaG9uZXN0IGFuc3dlcjogYSBwcm94eSB3aXRoIG5vIGltcGxlbWVudGF0aW9uIGhhcyBubyBiZWhhdmlvciB0byBzZXJ2ZS4KZnVuYyAocCAqUHJveHkpIEltcGwoKSBhbnkgewoJaWYgcC5saXZlID09IG5pbCB7CgkJcGFuaWMoRXJyTm9JbXBsKQoJfQoJcmV0dXJuIHAubGl2ZS5pbXBsCn0KCi8vIFRyeUltcGwgcmV0dXJucyB0aGUgbGl2ZSBpbXBsZW1lbnRhdGlvbiBhbmQgd2hldGhlciB0aGVyZSBpcyBvbmUsIGZvcgovLyBjYWxsZXJzIHRoYXQgd291bGQgcmF0aGVyIHJlbmRlciBhbiBlbXB0eSBwYWdlIHRoYW4gZmFpbCB0aGUgdHJhbnNhY3Rpb24uCmZ1bmMgKHAgKlByb3h5KSBUcnlJbXBsKCkgKGFueSwgYm9vbCkgewoJaWYgcC5saXZlID09IG5pbCB7CgkJcmV0dXJuIG5pbCwgZmFsc2UKCX0KCXJldHVybiBwLmxpdmUuaW1wbCwgdHJ1ZQp9CgovLyBMaXZlIHJldHVybnMgdGhlIGxpdmUgcmVsZWFzZS4KZnVuYyAocCAqUHJveHkpIExpdmUoKSAoUmVsZWFzZSwgYm9vbCkgewoJaWYgcC5saXZlID09IG5pbCB7CgkJcmV0dXJuIFJlbGVhc2V7fSwgZmFsc2UKCX0KCXJldHVybiAqcC5saXZlLCB0cnVlCn0KCi8vIExpdmVQYXRoIHJldHVybnMgdGhlIHJlYWxtIHBhdGggb2YgdGhlIGxpdmUgaW1wbGVtZW50YXRpb24sIG9yICIiIGlmIHRoZXJlCi8vIGlzIG5vbmUuIEEgc3RhdGUgcmVhbG0gdGhhdCB3YW50cyB0byBncmFudCB3cml0ZSBhY2Nlc3MgdG8gd2hpY2hldmVyCi8vIGltcGxlbWVudGF0aW9uIGlzIGN1cnJlbnQgY29tcGFyZXMgaXRzIGNhbGxlciBhZ2FpbnN0IHRoaXMuCmZ1bmMgKHAgKlByb3h5KSBMaXZlUGF0aCgpIHN0cmluZyB7CglpZiBwLmxpdmUgPT0gbmlsIHsKCQlyZXR1cm4gIiIKCX0KCXJldHVybiBwLmxpdmUucGtnUGF0aAp9CgovLyBQZW5kaW5nIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgY2FuZGlkYXRlcywgb3JkZXJlZCBieSBwYXRoLgpmdW5jIChwICpQcm94eSkgUGVuZGluZygpIFtdUmVsZWFzZSB7CglvdXQgOj0gbWFrZShbXVJlbGVhc2UsIDAsIGxlbihwLnBlbmRpbmcpKQoJZm9yIF8sIHIgOj0gcmFuZ2UgcC5wZW5kaW5nIHsKCQlvdXQgPSBhcHBlbmQob3V0LCAqcikKCX0KCXJldHVybiBvdXQKfQoKLy8gSGlzdG9yeSByZXR1cm5zIHRoZSByZWxlYXNlcyB0aGlzIHByb3h5IGhhcyBhbHJlYWR5IHNlcnZlZCwgb2xkZXN0IGZpcnN0LgovLyBJdCBleGNsdWRlcyB0aGUgbGl2ZSBvbmUsIGFuZCBGb3JnZXQgZW1wdGllcyBpdC4KZnVuYyAocCAqUHJveHkpIEhpc3RvcnkoKSBbXVJlbGVhc2UgewoJb3V0IDo9IG1ha2UoW11SZWxlYXNlLCAwLCBsZW4ocC5wYXN0KSkKCWZvciBfLCByIDo9IHJhbmdlIHAucGFzdCB7CgkJb3V0ID0gYXBwZW5kKG91dCwgKnIpCgl9CglyZXR1cm4gb3V0Cn0KCi8vIEZyb3plbiByZXBvcnRzIHdoZXRoZXIgdXBncmFkZWFiaWxpdHkgaGFzIGVuZGVkLgpmdW5jIChwICpQcm94eSkgRnJvemVuKCkgYm9vbCB7IHJldHVybiBwLmZyb3plbiB9CgovLyBBdXRob3JpdHkgcmV0dXJucyB0aGUgY3VycmVudCBhdXRob3JpdHkuCmZ1bmMgKHAgKlByb3h5KSBBdXRob3JpdHkoKSBBdXRob3JpdHkgeyByZXR1cm4gcC5hdXRoIH0KCi8vIEV4dGVuc2lvbnMgcmV0dXJucyB0aGUgcmVhbG0gcGF0aHMgYWxsb3dlZCB0byBhY3QgYXMgdGhlIHJlYWxtIGhvbGRpbmcgdGhpcwovLyBwcm94eSwgaW4gc29ydGVkIG9yZGVyLgovLwovLyBBIHJlYWxtIHBhdGggaXMgZml4ZWQsIHNvIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgb2YgdGhlIHJlYWxtIGhvbGRpbmcgdGhpcwovLyBwcm94eSBjYW4gbmV2ZXIgZ3Jvdy4gV2hhdCBjYW4gZ3JvdyBpcyB0aGUgc2V0IG9mIE9USEVSIHJlYWxtcyBwZXJtaXR0ZWQgdG8KLy8gcnVuIGFnYWluc3QgaXRzIHN0YXRlOiBhIHJlYWxtIGRlcGxveWVkIGxhdGVyIGRlY2xhcmVzIGFuIGludGVyZmFjZSBvZiBpdHMKLy8gb3duLCBhc3NlcnRzIHRoZSBsaXZlIGltcGxlbWVudGF0aW9uIHRvIGl0LCBhbmQgY2FsbHMgdGhyb3VnaC4gVGhhdCBpcyBob3cKLy8gYW4gYXBwbGljYXRpb24gYWRkcyBhbiBlbnRyeSBwb2ludCBpdCBkaWQgbm90IHNoaXAgd2l0aC4gU2VlIHRoZQovLyAiZXh0ZW5kaW5nIGEgZnJvemVuIEFQSSIgcGF0dGVybiBpbiB0aGUgcmVwb3NpdG9yeSBkb2NzLgovLwovLyBUaGUgc3RhdGUgYWNjZXNzb3IgaW4gdGhlIHJlYWxtIGhvbGRpbmcgdGhpcyBwcm94eSBpcyB3aGF0IGNvbnN1bHRzIHRoaXMgLS0KLy8gbm90aGluZyBoZXJlIHJlYWNoZXMgaW50byB5b3VyIHN0YXRlIG9uIGl0cyBvd24uCmZ1bmMgKHAgKlByb3h5KSBFeHRlbnNpb25zKCkgW11zdHJpbmcgewoJZHVwIDo9IG1ha2UoW11zdHJpbmcsIGxlbihwLmV4dHMpKQoJY29weShkdXAsIHAuZXh0cykKCXJldHVybiBkdXAKfQoKLy8gSXNFeHRlbnNpb24gcmVwb3J0cyB3aGV0aGVyIHBrZ1BhdGggbWF5IGFjdCBhcyB0aGUgcmVhbG0gaG9sZGluZyB0aGlzIHByb3h5LgovLyBDYWxsIGl0IGZyb20gdGhlIHN0YXRlIGFjY2Vzc29yLCBhbG9uZ3NpZGUgdGhlIGNoZWNrIGZvciB0aGUgcmVhbG0ncyBvd24KLy8gcGF0aC4KZnVuYyAocCAqUHJveHkpIElzRXh0ZW5zaW9uKHBrZ1BhdGggc3RyaW5nKSBib29sIHsKCWlmIHBrZ1BhdGggPT0gIiIgewoJCXJldHVybiBmYWxzZSAvLyBhIHVzZXIgY2FsbCBpcyBub3QgYSByZWFsbQoJfQoJZm9yIF8sIGUgOj0gcmFuZ2UgcC5leHRzIHsKCQlpZiBlID09IHBrZ1BhdGggewoJCQlyZXR1cm4gdHJ1ZQoJCX0KCX0KCXJldHVybiBmYWxzZQp9CgovLyBBZGRFeHRlbnNpb24gcGVybWl0cyBwa2dQYXRoIHRvIGFjdCBhcyB0aGUgcmVhbG0gaG9sZGluZyB0aGlzIHByb3h5LgovLwovLyBUaGlzIGdyYW50cyB0aGUgYXV0aG9yaXR5IG5vIHBvd2VyIGl0IGRpZCBub3QgaGF2ZS4gQW4gYXV0aG9yaXR5IHRoYXQgY2FuCi8vIEFjY2VwdCBhbiBhcmJpdHJhcnkgaW1wbGVtZW50YXRpb24gY2FuIGFscmVhZHkgcnVuIGFyYml0cmFyeSBjb2RlIGFnYWluc3QKLy8gdGhlIHN0YXRlOyBuYW1pbmcgYSBzZWNvbmQgcmVhbG0gdGhhdCBtYXkgZG8gdGhlIHNhbWUgd2lkZW5zIHdoYXQgaXMKLy8gcmVhY2hhYmxlLCBub3Qgd2hvIGRlY2lkZXMuIEl0IGRvZXMgd2lkZW4gdGhlIHN1cmZhY2UgYSByZXZpZXdlciBoYXMgdG8KLy8gcmVhZCwgd2hpY2ggaXMgd2h5IEV4dGVuc2lvbnMgaXMgcHVibGljIGFuZCBSZW5kZXIgc2hvdWxkIHNob3cgaXQuCi8vCi8vIENhbGxlcjogdGhlIGF1dGhvcml0eS4KZnVuYyAocCAqUHJveHkpIEFkZEV4dGVuc2lvbihfIGludCwgcmxtIHJlYWxtLCBwa2dQYXRoIHN0cmluZykgewoJcC5hc3NlcnRNdXRhYmxlKCkKCXAuYXNzZXJ0QXV0aG9yaXplZCgwLCBybG0pCglpZiBwa2dQYXRoID09ICIiIHx8IHBrZ1BhdGggIT0gc3RyaW5ncy5UcmltU3BhY2UocGtnUGF0aCkgewoJCXBhbmljKEVyckJhZFJlYWxtUGF0aCkKCX0KCWlmIHAuSXNFeHRlbnNpb24ocGtnUGF0aCkgewoJCXJldHVybgoJfQoJYXQgOj0gbGVuKHAuZXh0cykKCWZvciBpLCBlIDo9IHJhbmdlIHAuZXh0cyB7CgkJaWYgcGtnUGF0aCA8IGUgewoJCQlhdCA9IGkKCQkJYnJlYWsKCQl9Cgl9CglwLmV4dHMgPSBhcHBlbmQocC5leHRzLCAiIikKCWNvcHkocC5leHRzW2F0KzE6XSwgcC5leHRzW2F0Ol0pCglwLmV4dHNbYXRdID0gcGtnUGF0aAoJY2hhaW4uRW1pdChFeHRlbmRFdmVudCwgInJlYWxtIiwgcGtnUGF0aCkKfQoKLy8gRHJvcEV4dGVuc2lvbiByZXZva2VzIHBrZ1BhdGguIFRoZSBleHRlbnNpb24gcmVhbG0gc3RheXMgZGVwbG95ZWQgYW5kIGtlZXBzCi8vIGFuc3dlcmluZyBjYWxsczsgaXQganVzdCBzdG9wcyBiZWluZyBhYmxlIHRvIHJlYWNoIHRoZSBzdGF0ZSwgc28gd2hhdGV2ZXIgaXQKLy8gZXhwb3NlZCBzdGFydHMgcGFuaWNraW5nIHJhdGhlciB0aGFuIGRpc2FwcGVhcmluZy4KLy8KLy8gQ2FsbGVyOiB0aGUgYXV0aG9yaXR5LgpmdW5jIChwICpQcm94eSkgRHJvcEV4dGVuc2lvbihfIGludCwgcmxtIHJlYWxtLCBwa2dQYXRoIHN0cmluZykgewoJcC5hc3NlcnRNdXRhYmxlKCkKCXAuYXNzZXJ0QXV0aG9yaXplZCgwLCBybG0pCglmb3IgaSwgZSA6PSByYW5nZSBwLmV4dHMgewoJCWlmIGUgPT0gcGtnUGF0aCB7CgkJCXAuZXh0cyA9IGFwcGVuZChwLmV4dHNbOmldLCBwLmV4dHNbaSsxOl0uLi4pCgkJCWNoYWluLkVtaXQoVW5leHRlbmRFdmVudCwgInJlYWxtIiwgcGtnUGF0aCkKCQkJcmV0dXJuCgkJfQoJfQoJcGFuaWMoRXJyVW5rbm93blBhdGgpCn0KCi8vIEFzc2VydEF1dGhvcml6ZWQgcGFuaWNzIHVubGVzcyBybG0ncyBjYWxsZXIgaXMgdGhlIGF1dGhvcml0eS4gSXQgZXhpc3RzIGZvcgovLyB3cmFwcGVycyB0aGF0IGRvIHdvcmsgb2YgdGhlaXIgb3duIGJlZm9yZSBkZWxlZ2F0aW5nIC0tIGEgc2NoZW1hIGNoZWNrCi8vIGJlZm9yZSBBY2NlcHQsIHNheSAtLSBzbyB0aGF0IGFuIHVuYXV0aG9yaXplZCBjYWxsZXIgaXMgcmVmdXNlZCBmb3IgdGhlCi8vIHJpZ2h0IHJlYXNvbiByYXRoZXIgdGhhbiB0cmlwcGluZyBvdmVyIHRoZSB3cmFwcGVyJ3Mgb3duIHZhbGlkYXRpb24gZmlyc3QuCmZ1bmMgKHAgKlByb3h5KSBBc3NlcnRBdXRob3JpemVkKF8gaW50LCBybG0gcmVhbG0pIHsgcC5hc3NlcnRBdXRob3JpemVkKDAsIHJsbSkgfQoKLy8gUHJvcG9zZSByZWdpc3RlcnMgaW1wbCBhcyBhIGNhbmRpZGF0ZSwgZmlsZWQgdW5kZXIgdGhlIHBhdGggb2YgdGhlIHJlYWxtCi8vIHRoYXQgaXMgY2FsbGluZy4KLy8KLy8gVGhhdCBwYXRoIGNvbWVzIG9mZiB0aGUgY3Jvc3NpbmcgZnJhbWUgcmF0aGVyIHRoYW4gZnJvbSBhbiBhcmd1bWVudCwgYW5kCi8vIHRoYXQgaXMgdGhlIHBvaW50IG9mIHRoZSB3aG9sZSBtZWNoYW5pc206IGEgY2FuZGlkYXRlIGNhbm5vdCBjbGFpbSB0byBoYXZlCi8vIGJlZW4gYXV0aG9yZWQgYnkgYSBwYXRoIGl0IGRvZXMgbm90IG9jY3VweS4gV2hvZXZlciBhY2NlcHRzIGl0IGlzCi8vIHRoZXJlZm9yZSBhY2NlcHRpbmcgY29kZSB0aGV5IGNhbiBnbyBhbmQgcmVhZCBhdCB0aGF0IHBhdGgsIGFuZCBhIHN0YXRlCi8vIHJlYWxtIHRoYXQgZ2F0ZXMgd3JpdGVzIG9uIExpdmVQYXRoIGlzIGdhdGluZyBvbiB0aGUgc2FtZSBhdXRoZW50aWNhdGVkCi8vIHN0cmluZy4KLy8KLy8gVGhlIGltcGxlbWVudGF0aW9uIHJlYWxtIGNhbGxzIHRoaXMgZnJvbSBpdHMgb3duIGluaXQsIHNvIGRlcGxveWluZyB0aGUKLy8gbmV3IHZlcnNpb24gaXMgd2hhdCBub21pbmF0ZXMgaXQuIE5vdGhpbmcgaXMgc2VydmVkIHVudGlsIHRoZSBhdXRob3JpdHkKLy8gYWNjZXB0cy4gUmUtcmVnaXN0ZXJpbmcgZnJvbSB0aGUgc2FtZSByZWFsbSByZXBsYWNlcyB0aGF0IGNhbmRpZGF0ZSwgd2hpY2gKLy8gaXMgdGhlIHJldHJ5IHBhdGggYWZ0ZXIgYSBmYWlsZWQgZGVwbG95bWVudC4KZnVuYyAocCAqUHJveHkpIFByb3Bvc2UoXyBpbnQsIHJsbSByZWFsbSwgaW1wbCBhbnkpIHsKCXAuYXNzZXJ0TXV0YWJsZSgpCglpZiAhcmxtLklzQ3VycmVudCgpIHsKCQlwYW5pYyhFcnJTdGFsZVJlYWxtKQoJfQoJaWYgaW1wbCA9PSBuaWwgewoJCXBhbmljKEVyck5pbEltcGwpCgl9CgoJcHJldiA6PSBybG0uUHJldmlvdXMoKQoJZnJvbSA6PSBwcmV2LlBrZ1BhdGgoKQoJaWYgZnJvbSA9PSAiIiB8fCBwcmV2LklzRXBoZW1lcmFsKCkgewoJCS8vIEEgdXNlciBjYWxsIGhhcyBubyBwYXRoIHRvIHJlY29yZCBhdCBhbGwuIEFuIGVwaGVtZXJhbCBvbmUgZG9lcwoJCS8vIGhhdmUgYSBwYXRoIC0tIGBnbm9rZXkgbWFrZXR4IHJ1bmAgZXhlY3V0ZXMgaW4gL2UvPGFkZHI+L3J1biAtLQoJCS8vIGJ1dCBpdCBkb2VzIG5vdCBvdXRsaXZlIHRoZSB0cmFuc2FjdGlvbiwgc28gZmlsaW5nIGEgY2FuZGlkYXRlCgkJLy8gdW5kZXIgaXQgcmVjb3JkcyBhIHBhdGggdGhhdCB3aWxsIG5ldmVyIGhvbGQgdGhlIGNvZGUgaXQgY2xhaW1zLgoJCS8vIFRoZSBlbXB0aW5lc3MgY2hlY2sgYWxvbmUgZG9lcyBub3QgY2F0Y2ggdGhhdCBvbmUuCgkJcGFuaWMoRXJyTm90QVJlYWxtKQoJfQoJaWYgcC5uZXN0ZWQgJiYgIWlzTmVzdGVkKHJsbS5Qa2dQYXRoKCksIGZyb20pIHsKCQlwYW5pYyhFcnJOb3ROZXN0ZWQpCgl9CgoJcC5zZXRQZW5kaW5nKCZSZWxlYXNlewoJCXBrZ1BhdGg6IGZyb20sCgkJaW1wbDogICAgaW1wbCwKCQloZWlnaHQ6ICBydW50aW1lLkNoYWluSGVpZ2h0KCksCgl9KQoJY2hhaW4uRW1pdChQcm9wb3NlRXZlbnQsICJpbXBsIiwgZnJvbSkKfQoKLy8gV2l0aGRyYXcgZHJvcHMgYSBjYW5kaWRhdGUuIFRoZSBhdXRob3JpdHkgbWF5IGRyb3AgYW55OyBhIHJlYWxtIG1heSBhbHdheXMKLy8gZHJvcCBpdHMgb3duLCB3aGljaCBpcyBob3cgYSBzdXBlcnNlZGVkIGNhbmRpZGF0ZSBzdG9wcyBjb3N0aW5nIHN0b3JhZ2UKLy8gd2l0aG91dCB0aGUgYXV0aG9yaXR5IGhhdmluZyB0byBhY3QuCmZ1bmMgKHAgKlByb3h5KSBXaXRoZHJhdyhfIGludCwgcmxtIHJlYWxtLCBwa2dQYXRoIHN0cmluZykgewoJcC5hc3NlcnRNdXRhYmxlKCkKCWlmICFybG0uSXNDdXJyZW50KCkgewoJCXBhbmljKEVyclN0YWxlUmVhbG0pCgl9CglpZiBybG0uUHJldmlvdXMoKS5Qa2dQYXRoKCkgIT0gcGtnUGF0aCB7CgkJcC5hc3NlcnRBdXRob3JpemVkKDAsIHJsbSkKCX0KCWlmICFwLnJlbW92ZVBlbmRpbmcocGtnUGF0aCkgewoJCXBhbmljKEVyclVua25vd25QYXRoKQoJfQoJY2hhaW4uRW1pdChXaXRoZHJhd0V2ZW50LCAiaW1wbCIsIHBrZ1BhdGgpCn0KCi8vIEFjY2VwdCBtYWtlcyB0aGUgY2FuZGlkYXRlIGF0IHBrZ1BhdGggdGhlIGxpdmUgaW1wbGVtZW50YXRpb24sIGFuZCBmaWxlcwovLyB0aGUgb25lIGl0IHJlcGxhY2VzIGluIEhpc3RvcnkuCi8vCi8vIFRoaXMgaXMgdGhlIHVwZ3JhZGUuIEl0IGlzIGEgc2VwYXJhdGUgdHJhbnNhY3Rpb24gZnJvbSB0aGUgZGVwbG95bWVudCB0aGF0Ci8vIHJlZ2lzdGVyZWQgdGhlIGNhbmRpZGF0ZSwgYnkgYSBzZXBhcmF0ZSBwcmluY2lwYWwsIHdoaWNoIGlzIHdoYXQgZ2l2ZXMgdGhlCi8vIGF1dGhvcml0eSBzb21ldGhpbmcgcmV2aWV3YWJsZSB0byBhY3Qgb24gLS0gdGhlIHNhbWUgdHdvLXBoYXNlIHNoYXBlCi8vIGduby5sYW5kIGl0c2VsZiB1c2VzIHdoZW4gYSBjaGFpbiBwYXJrcyBhIHN1Ym1pc3Npb24gdW50aWwgYW4gYXBwcm92ZXIKLy8gZW5hYmxlcyBpdC4KZnVuYyAocCAqUHJveHkpIEFjY2VwdChfIGludCwgcmxtIHJlYWxtLCBwa2dQYXRoIHN0cmluZykgewoJcC5hc3NlcnRNdXRhYmxlKCkKCXAuYXNzZXJ0QXV0aG9yaXplZCgwLCBybG0pCgoJaSA6PSBwLmZpbmRQZW5kaW5nKHBrZ1BhdGgpCglpZiBpIDwgMCB7CgkJcGFuaWMoRXJyVW5rbm93blBhdGgpCgl9CglyZWwgOj0gcC5wZW5kaW5nW2ldCglwLnJlbW92ZVBlbmRpbmcocGtnUGF0aCkKCglmcm9tIDo9ICIiCglpZiBwLmxpdmUgIT0gbmlsIHsKCQlmcm9tID0gcC5saXZlLnBrZ1BhdGgKCQlwLnBhc3QgPSBhcHBlbmQocC5wYXN0LCBwLmxpdmUpCgl9CglwLmxpdmUgPSByZWwKCWNoYWluLkVtaXQoQWNjZXB0RXZlbnQsICJpbXBsIiwgcGtnUGF0aCwgInJlcGxhY2VkIiwgZnJvbSkKfQoKLy8gUm9sbGJhY2sgcHV0cyB0aGUgcHJldmlvdXMgcmVsZWFzZSBiYWNrIGluIGZyb250LCBhbmQgcmV0dXJucyB0aGUgb25lIGl0Ci8vIGRpc3BsYWNlcyB0byB0aGUgcGVuZGluZyBzZXQgc28gYSBmaXhlZCB2ZXJzaW9uIGNhbiBiZSByZS1hY2NlcHRlZCB3aXRob3V0Ci8vIHJlZGVwbG95aW5nIGl0LgovLwovLyBUaGlzIGlzIHdoeSBIaXN0b3J5IGlzIGtlcHQ6IHRoZSByZWxlYXNlIG9iamVjdHMgc3RheSByZWFjaGFibGUsIGFuZAovLyByZWFjaGFibGUgaXMgdGhlIG9ubHkgZm9ybSBvZiAic3RpbGwgZGVwbG95ZWQiIHRoYXQgbWF0dGVycyBoZXJlLiBJdCBjb3N0cwovLyBzdG9yYWdlLCB3aGljaCBpcyB3aGF0IEZvcmdldCBpcyBmb3Igb25jZSBhIHZlcnNpb24gaGFzIHByb3ZlbiBpdHNlbGYuCmZ1bmMgKHAgKlByb3h5KSBSb2xsYmFjayhfIGludCwgcmxtIHJlYWxtKSB7CglwLmFzc2VydE11dGFibGUoKQoJcC5hc3NlcnRBdXRob3JpemVkKDAsIHJsbSkKCgluIDo9IGxlbihwLnBhc3QpCglpZiBuID09IDAgewoJCXBhbmljKEVyck5vSGlzdG9yeSkKCX0KCXByZXYgOj0gcC5wYXN0W24tMV0KCXAucGFzdCA9IHAucGFzdFs6bi0xXQoKCWZyb20gOj0gIiIKCWlmIHAubGl2ZSAhPSBuaWwgewoJCWZyb20gPSBwLmxpdmUucGtnUGF0aAoJCXAuc2V0UGVuZGluZyhwLmxpdmUpCgl9CglwLmxpdmUgPSBwcmV2CgljaGFpbi5FbWl0KFJvbGxiYWNrRXZlbnQsICJpbXBsIiwgcHJldi5wa2dQYXRoLCAicmVwbGFjZWQiLCBmcm9tKQp9CgovLyBGb3JnZXQgZHJvcHMgdGhlIGhpc3RvcnksIHJlbGVhc2luZyB0aGUgb2xkIGltcGxlbWVudGF0aW9ucy4gUm9sbGJhY2sKLy8gc3RvcHMgd29ya2luZyAtLSB0aGVyZSBpcyBub3RoaW5nIHRvIHJvbGwgYmFjayB0byAtLSBzbyB0aGlzIGlzIHRoZSAidGhlCi8vIGN1cnJlbnQgdmVyc2lvbiBoYXMgcHJvdmVuIGl0c2VsZiIgbW92ZSwgbm90IHJvdXRpbmUgY2xlYW51cC4KZnVuYyAocCAqUHJveHkpIEZvcmdldChfIGludCwgcmxtIHJlYWxtKSB7CglwLmFzc2VydE11dGFibGUoKQoJcC5hc3NlcnRBdXRob3JpemVkKDAsIHJsbSkKCWRyb3BwZWQgOj0gbGVuKHAucGFzdCkKCXAucGFzdCA9IG5pbAoJY2hhaW4uRW1pdChGb3JnZXRFdmVudCwgImRyb3BwZWQiLCBpdG9hKGRyb3BwZWQpKQp9CgovLyBUcmFuc2ZlckF1dGhvcml0eSBoYW5kcyB0aGUgcG93ZXIgdG8gdXBncmFkZSB0byBhdXRoLiBJdCBwYW5pY3Mgb24gbmlsOgovLyB0aGVyZSBpcyBubyB3YXkgdG8gbGVhdmUgYSBwcm94eSB1cGdyYWRlYWJsZSBieSBub2JvZHksIGJlY2F1c2UgdGhhdCBzdGF0ZQovLyBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgbWlzdGFrZS4gRnJlZXplIHNheXMgaXQgb24gcHVycG9zZS4KZnVuYyAocCAqUHJveHkpIFRyYW5zZmVyQXV0aG9yaXR5KF8gaW50LCBybG0gcmVhbG0sIGF1dGggQXV0aG9yaXR5KSB7CglwLmFzc2VydE11dGFibGUoKQoJcC5hc3NlcnRBdXRob3JpemVkKDAsIHJsbSkKCWlmIGF1dGggPT0gbmlsIHsKCQlwYW5pYyhFcnJOb0F1dGhvcml0eSkKCX0KCW9sZCA6PSBwLmF1dGguU3RyaW5nKCkKCXAuYXV0aCA9IGF1dGgKCWNoYWluLkVtaXQoQXV0aG9yaXR5RXZlbnQsICJmcm9tIiwgb2xkLCAidG8iLCBhdXRoLlN0cmluZygpKQp9CgovLyBGcmVlemUgZW5kcyB1cGdyYWRlYWJpbGl0eSBmb3IgZ29vZC4gVGhlIGxpdmUgaW1wbGVtZW50YXRpb24ga2VlcHMgc2VydmluZwovLyBhbmQgbm90aGluZyBjYW4gcmVwbGFjZSBpdDogbm8gdW5mcmVlemUsIGJ5IGRlc2lnbiwgYmVjYXVzZSBhIHByb3h5IHRoYXQKLy8gY2FuIGJlIHRoYXdlZCBoYXMgbm90IGFjdHVhbGx5IGdpdmVuIGFueXRoaW5nIHVwLiBUaGlzIGlzIGhvdyBhIHJlYWxtCi8vIGdyYWR1YXRlcyBmcm9tICJ3ZSBhcmUgc3RpbGwgZml4aW5nIGl0IiB0byBzb21ldGhpbmcgb3RoZXIgcmVhbG1zIGNhbgovLyBidWlsZCBvbiAtLSBhbiBpbnRlcnJlYWxtIGNvbnRyYWN0IGlzIG9ubHkgYXMgdHJ1c3R3b3J0aHkgYXMgdGhlIGxlYXN0Ci8vIG11dGFibGUgcmVhbG0gYmVoaW5kIGl0LgovLwovLyBJdCByZWZ1c2VzIHRvIGZyZWV6ZSB3aXRoIG5vdGhpbmcgbGl2ZSwgd2hpY2ggd291bGQgbGVhdmUgdGhlIHJlYWxtCi8vIHBlcm1hbmVudGx5IHVuYWJsZSB0byBhbnN3ZXIgYSBjYWxsLgovLwovLyBGcmVlemluZyBmaW5hbGl6ZXMgdGhlIGV4dGVuc2lvbiBzZXQuIFdoYXRldmVyIGlzIHJlZ2lzdGVyZWQgc3Vydml2ZXMgKHRoZQovLyBmcm96ZW4gaW1wbGVtZW50YXRpb24gbWF5IGRlcGVuZCBvbiBpdCksIGJ1dCBhZnRlcndhcmRzIG5vdGhpbmcgY2FuIGJlIGFkZGVkCi8vIGFuZCAtLSBiZWNhdXNlIERyb3AgaXMgYSBtdXRhdGlvbiB0b28gLS0gbm90aGluZyBjYW4gYmUgZHJvcHBlZC4gU28gYQovLyByZWdpc3RlcmVkIGV4dGVuc2lvbiBrZWVwcyBpdHMgYWNjZXNzIHRvIHRoZSByZWFsbSdzIHN0YXRlIGZvciBnb29kLiBSZXZpZXcKLy8gdGhlIGV4dGVuc2lvbnMgYmVmb3JlIHlvdSBmcmVlemU7IHlvdSBjYW5ub3QgcmV2b2tlIG9uZSBhZnRlci4KZnVuYyAocCAqUHJveHkpIEZyZWV6ZShfIGludCwgcmxtIHJlYWxtKSB7CglwLmFzc2VydE11dGFibGUoKQoJcC5hc3NlcnRBdXRob3JpemVkKDAsIHJsbSkKCWlmIHAubGl2ZSA9PSBuaWwgewoJCXBhbmljKEVyck5vSW1wbCkKCX0KCXAuZnJvemVuID0gdHJ1ZQoJcC5wZW5kaW5nID0gbmlsCglwLnBhc3QgPSBuaWwKCS8vIEV4dGVuc2lvbnMgYXJlIGRlbGliZXJhdGVseSBrZXB0LiBUaGV5IGFyZSByZWFjaGFibGUgY29kZSB0aGF0IHRoZQoJLy8gZnJvemVuIGltcGxlbWVudGF0aW9uIG1heSBkZXBlbmQgb24sIGFuZCBkcm9wcGluZyB0aGVtIGhlcmUgd291bGQKCS8vIGJyZWFrIGVudHJ5IHBvaW50cyB0aGF0IHdlcmUgd29ya2luZyBhIGJsb2NrIGFnbyAtLSBhIGZyZWV6ZSBzaG91bGQKCS8vIGZpeCB0aGUgcmVhbG0ncyBiZWhhdmlvciwgbm90IGNoYW5nZSBpdC4KCWNoYWluLkVtaXQoRnJlZXplRXZlbnQsICJpbXBsIiwgcC5saXZlLnBrZ1BhdGgpCn0KCi8vIGlzTmVzdGVkIHJlcG9ydHMgd2hldGhlciBjaGlsZCBpcyBwYXJlbnQsIG9yIHNpdHMgdW5kZXIgaXQuIFRoZSB0cmFpbGluZwovLyBzZXBhcmF0b3JzIGFyZSB3aGF0IGtlZXAgZ25vLmxhbmQvci95b3UvYXBwbGlhbmNlIGZyb20gY291bnRpbmcgYXMgbmVzdGVkCi8vIHVuZGVyIGduby5sYW5kL3IveW91L2FwcC4KZnVuYyBpc05lc3RlZChwYXJlbnQsIGNoaWxkIHN0cmluZykgYm9vbCB7CglyZXR1cm4gc3RyaW5ncy5IYXNQcmVmaXgoY2hpbGQrIi8iLCBwYXJlbnQrIi8iKQp9CgovLyBmaW5kUGVuZGluZyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY2FuZGlkYXRlIGF0IHBrZ1BhdGgsIG9yIC0xLgpmdW5jIChwICpQcm94eSkgZmluZFBlbmRpbmcocGtnUGF0aCBzdHJpbmcpIGludCB7Cglmb3IgaSwgciA6PSByYW5nZSBwLnBlbmRpbmcgewoJCWlmIHIucGtnUGF0aCA9PSBwa2dQYXRoIHsKCQkJcmV0dXJuIGkKCQl9Cgl9CglyZXR1cm4gLTEKfQoKLy8gc2V0UGVuZGluZyBpbnNlcnRzIHJlbCwgb3IgcmVwbGFjZXMgdGhlIGNhbmRpZGF0ZSBhbHJlYWR5IGF0IGl0cyBwYXRoLgovLyBUaGUgc2xpY2UgaXMga2VwdCBzb3J0ZWQgc28gUGVuZGluZyBhbmQgYW55IFJlbmRlciBidWlsdCBvbiBpdCByZWFkIHRoZQovLyBzYW1lIHdheSBvbiBldmVyeSBub2RlLgpmdW5jIChwICpQcm94eSkgc2V0UGVuZGluZyhyZWwgKlJlbGVhc2UpIHsKCWlmIGkgOj0gcC5maW5kUGVuZGluZyhyZWwucGtnUGF0aCk7IGkgPj0gMCB7CgkJcC5wZW5kaW5nW2ldID0gcmVsCgkJcmV0dXJuCgl9CglhdCA6PSBsZW4ocC5wZW5kaW5nKQoJZm9yIGksIHIgOj0gcmFuZ2UgcC5wZW5kaW5nIHsKCQlpZiByZWwucGtnUGF0aCA8IHIucGtnUGF0aCB7CgkJCWF0ID0gaQoJCQlicmVhawoJCX0KCX0KCXAucGVuZGluZyA9IGFwcGVuZChwLnBlbmRpbmcsIG5pbCkKCWNvcHkocC5wZW5kaW5nW2F0KzE6XSwgcC5wZW5kaW5nW2F0Ol0pCglwLnBlbmRpbmdbYXRdID0gcmVsCn0KCi8vIHJlbW92ZVBlbmRpbmcgZHJvcHMgdGhlIGNhbmRpZGF0ZSBhdCBwa2dQYXRoLCByZXBvcnRpbmcgd2hldGhlciBvbmUgd2FzCi8vIHRoZXJlLgpmdW5jIChwICpQcm94eSkgcmVtb3ZlUGVuZGluZyhwa2dQYXRoIHN0cmluZykgYm9vbCB7CglpIDo9IHAuZmluZFBlbmRpbmcocGtnUGF0aCkKCWlmIGkgPCAwIHsKCQlyZXR1cm4gZmFsc2UKCX0KCXAucGVuZGluZyA9IGFwcGVuZChwLnBlbmRpbmdbOmldLCBwLnBlbmRpbmdbaSsxOl0uLi4pCglyZXR1cm4gdHJ1ZQp9CgpmdW5jIChwICpQcm94eSkgYXNzZXJ0TXV0YWJsZSgpIHsKCWlmIHAuZnJvemVuIHsKCQlwYW5pYyhFcnJGcm96ZW4pCgl9Cn0KCmZ1bmMgKHAgKlByb3h5KSBhc3NlcnRBdXRob3JpemVkKF8gaW50LCBybG0gcmVhbG0pIHsKCWlmICFybG0uSXNDdXJyZW50KCkgewoJCXBhbmljKEVyclN0YWxlUmVhbG0pCgl9CgljYWxsZXIgOj0gcmxtLlByZXZpb3VzKCkKCWlmICFwLmF1dGguQXV0aG9yaXplZChjYWxsZXIuQWRkcmVzcygpLCBjYWxsZXIuUGtnUGF0aCgpKSB7CgkJcGFuaWMoRXJyVW5hdXRob3JpemVkKQoJfQp9CgovLyBpdG9hIGF2b2lkcyBwdWxsaW5nIHVmbXQgaW4gZm9yIG9uZSBldmVudCBhdHRyaWJ1dGUuCmZ1bmMgaXRvYShuIGludCkgc3RyaW5nIHsKCWlmIG4gPT0gMCB7CgkJcmV0dXJuICIwIgoJfQoJbmVnIDo9IG4gPCAwCglpZiBuZWcgewoJCW4gPSAtbgoJfQoJdmFyIGJ1ZiBbMjBdYnl0ZQoJaSA6PSBsZW4oYnVmKQoJZm9yIG4gPiAwIHsKCQlpLS0KCQlidWZbaV0gPSBieXRlKCcwJyArIG4lMTApCgkJbiAvPSAxMAoJfQoJaWYgbmVnIHsKCQlpLS0KCQlidWZbaV0gPSAnLScKCX0KCXJldHVybiBzdHJpbmcoYnVmW2k6XSkKfQoiIgoTL2duby5NZW1QYWNrYWdlVHlwZRILCglNUFVzZXJBbGwSEQj43NMhEgozNTI4OXVnbm90GqgBCjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohA1NIDBDNAdANKQ04Kmp4OrDflZtELpNQ8fj+39iIww82EkCK/ZQCw0HpOq5ClrSEvbRKSQYZDTTgZY9ANZAakliizSjNIf7SEpWWU5RuNxjovwDe059RKalL1at1JVCG6FOJGihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl

Raw transaction data

Raw JSON data