Transaction executed successfully
Transaction Details
Inspect execution, participants, message data, gas usage, events and raw transaction data.
Transaction hash
9CD0DBC13D9B2011AF839755B7F33EB8C432404975F48A093D371157E36D4DD9
Transaction overview
Execution summary
TX INDEX
0
Position in block
GAS WANTED
101,469,000
Requested gas limit
GAS USED
27,373,062
Gas consumed
FEE
304407ugnot
Transaction fee
Participants
Message
Message #1
m_addpkg
Arguments
g1manfred47kzduec920z88wfr64ylksmdcedlf55000000ugnot
Message #2
m_addpkg
Arguments
g1manfred47kzduec920z88wfr64ylksmdcedlf55000000ugnot
Message #3
m_addpkg
Arguments
g1manfred47kzduec920z88wfr64ylksmdcedlf55000000ugnot
Message #4
m_addpkg
Arguments
g1manfred47kzduec920z88wfr64ylksmdcedlf55000000ugnot
Execution log
msg:0,success:true,log:,events:[]
msg:1,success:true,log:,events:[]
msg:2,success:true,log:,events:[]
msg:3,success:true,log:,events:[]
Events
No events emitted by this transaction.
Raw encoded transaction
Ct84Cgwvdm0ubV9hZGRwa2cSzjgKKGcxbWFuZnJlZDQ3a3pkdWVjOTIwejg4d2ZyNjR5bGtzbWRjZWRsZjUSkzgKBXBpbG90Ehhnbm8ubGFuZC9yL21vdWwvcGlsb3QvdjAa6w8KCVJFQURNRS5tZBLdDyMgYGduby5sYW5kL3IvbW91bC9waWxvdC92MGAKCm1vdWwncyByZWFsbS1kcml2ZW4gYWNjb3VudC4gSXQgaG9sZHMgdGhlIGZ1bmRzIGFuZCB0aGUgaWRlbnRpdHk7IG1vdWwncyBrZXkgcGlsb3RzIGl0OyBpdHMKcG93ZXJzIGFycml2ZSBhZnRlcndhcmRzIGFzIHNlcGFyYXRlIHJlYWxtcyB0aGlzIG9uZSBuZXZlciBpbXBvcnRzLgoKQWxsIGJlaGF2aW91ciBpcyBpbiBbYHAvbW91bC9waWxvdGBdKC4uLy4uLy4uL3AvbW91bC9waWxvdCksIHdoaWNoIGV4cGxhaW5zIHRoZSB0d28gZ3JhbnRzCmFuZCB3aHkgYFJldm9rZWAgdGFrZXMgYmFjayBhIHB1cnNlIGJ1dCBuZXZlciBhbiBpZGVudGl0eS4gVGhpcyByZWFsbSBpcyB0aGUgaW5zdGFuY2U6IGEKYCpwaWxvdC5QaWxvdGAsIG9uZS1saW5lIGNyb3NzaW5nIHJlLWV4cG9ydHMgZm9yd2FyZGluZyBgY3VyYCwgYW5kIGBSZW5kZXJgLgoKQSBwb3dlciB0byB0cnkgaXQgd2l0aDogW2ByL21vdWwveC9waWxvdGRlbW9gXSguLi94L3BpbG90ZGVtbykuCgoqKmBDbGFpbWAgaXMgcGlubmVkIHRvIGBnMW1hbmZyZWQ0N2t6ZHVlYzkyMHo4OHdmcjY0eWxrc21kY2VkbGY1YCBpbiB0aGUgc291cmNlLioqIEEgZGVwbG95CmxhbmRzIGluIG9uZSBibG9jayBhbmQgdGhlIGNsYWltIGlzIGEgc2Vjb25kIHRyYW5zYWN0aW9uLCBzbyB0YWtpbmcgdGhlIG93bmVyIGZyb20gd2hvZXZlcgpjYWxscyBmaXJzdCBpcyBhIHJhY2UgYW55b25lIG9uIGNoYWluIGNhbiB3aW4sIGFuZCB0aGlzIHBhdGggY2FuIG5ldmVyIGJlIHJlZGVwbG95ZWQgdG8gdW5kbwppdC4KCmBgYHNoCiMgb25jZSwgYW5kIG9ubHkgdGhpcyBhZGRyZXNzIGNhbgpnbm9rZXkgbWFrZXR4IGNhbGwgLXBrZ3BhdGggZ25vLmxhbmQvci9tb3VsL3BpbG90L3YwIC1mdW5jIENsYWltIC4uLiBtb3VsCgojIGF1dGhvcmlzZSBhIHBhdGggdGhhdCBkb2VzIG5vdCBoYXZlIHRvIGV4aXN0IHlldApnbm9rZXkgbWFrZXR4IGNhbGwgLXBrZ3BhdGggZ25vLmxhbmQvci9tb3VsL3BpbG90L3YwIC1mdW5jIEFwcHJvdmUgXAogIC1hcmdzIGduby5sYW5kL3IvbW91bC94L3BpbG90ZGVtby92MCAtYXJncyBwYXlvdXQgLWFyZ3MgZmFsc2UgLWFyZ3MgMTAwMCAuLi4gbW91bApgYGAKCioqUHVibGljIG9uIHB1cnBvc2UuKiogQSBtb2R1bGUgcmVhbG0gaW1wb3J0cyB0aGlzIG9uZSBhbmQgcGVyc2lzdHMgb2JqZWN0cyBpdCBvd25zLCBib3RoIG9mCndoaWNoIGEgcHJpdmF0ZSByZWFsbSByZWZ1c2VzLCBhbmQgYSByZWRlcGxveSB3b3VsZCB3aXBlIHRoZSBvd25lciwgdGhlIHJvc3RlciBhbmQgZXZlcnkKYnVkZ2V0IHdoaWxlIGxlYXZpbmcgdGhlIGNvaW5zIGF0IHRoZSB0cmVhc3VyeSBhZGRyZXNzLgoKPCEtLSBCRUdJTiBHTk9DT05UUkFDVFMgRk9PVEVSIChnZW5lcmF0ZWQgYnkgYG1ha2UgcmVhZG1lc2A7IGRvIG5vdCBlZGl0IGJlbG93KSAtLT4KCi0tLQoKUGFydCBvZiAqKlttb3VsL2duby1jb250cmFjdHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb3VsL2duby1jb250cmFjdHMpKiog4oCUIG1vdWwncyB2ZXJzaW9uZWQgZ25vLmxhbmQgY29udHJhY3RzLiBTZWUgdGhlIHJlcG9zaXRvcnkgZm9yIHRoZSBmdWxsIGNhdGFsb2csIGJ1aWxkL3Rlc3QgdG9vbGluZywgYW5kIHVzYWdlLgoKKipEZXBlbmRlbmN5IGdyYXBoOioqCgohW2duby5sYW5kL3IvbW91bC9waWxvdC92MCBkZXBlbmRlbmN5IGdyYXBoXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW91bC9nbm8tY29udHJhY3RzL21haW4vX2Fzc2V0cy9nbm8ubGFuZC9yL21vdWwvcGlsb3QvdjAvZGVwcy5wbmcpCgo+IOKaoO+4jyAqKkRpc2NsYWltZXI6KiogcHJvdmlkZWQgYXMtaXMsIHdpdGhvdXQgd2FycmFudHk7IG5vdCBzZWN1cml0eS1hdWRpdGVkLiBGdWxsIGRpc2NsYWltZXI6IFtESVNDTEFJTUVSXShodHRwczovL2dpdGh1Yi5jb20vbW91bC9nbm8tY29udHJhY3RzL2Jsb2IvbWFpbi9ESVNDTEFJTUVSLm1kKS4KCjwhLS0gRU5EIEdOT0NPTlRSQUNUUyBGT09URVIgLS0+Chq0AwoLZ25vbW9kLnRvbWwSpANtb2R1bGUgPSAiZ25vLmxhbmQvci9tb3VsL3BpbG90L3YwIgpnbm8gPSAiMC45IgoKIyBwdWJsaWM6IGEgbW9kdWxlIHJlYWxtIG11c3QgaW1wb3J0IHRoaXMgYWNjb3VudCBhbmQgcGVyc2lzdCBvYmplY3RzIGl0IG93bnMKIyAoYSBQdXJzZSwgdGhlIEFjY291bnQgaGFuZGxlKSwgYm90aCBvZiB3aGljaCBhIHByaXZhdGUgcmVhbG0gcmVmdXNlcy4gQW5kIGEKIyByZWRlcGxveSB3aXBlcyBldmVyeSBwYWNrYWdlLWxldmVsIHZhciB3aGlsZSBrZWVwaW5nIHRoZSBjb2lucywgd2hpY2ggZm9yIGFuCiMgYWNjb3VudCBtZWFucyB0aGUgb3duZXIsIHRoZSByb3N0ZXIgYW5kIGV2ZXJ5IGJ1ZGdldCB2YW5pc2ggd2hpbGUgdGhlCiMgdHJlYXN1cnkgc3RheXM6IHRoZSBvbmUgcmVhbG0gdGhhdCBtdXN0IG5ldmVyIGJlIHJlcGxhY2VhYmxlLgoawxYKCXBpbG90LmdubxK1Fi8vIHVudHJ1c3RlZC1yZW5kZXI6IHRoaXMgcmVhbG0gc3RvcmVzIG5vIHN0cmluZyBvZiBpdHMgb3duLiBUaGUgb25seSB0d28gYQovLyBjYWxsZXIgc3VwcGxpZXMsIGEgbW9kdWxlIHBhdGggYW5kIGl0cyBzdWJwYXRoLCBhcmUgd3JpdHRlbiBzb2xlbHkgYnkgdGhlCi8vIG93bmVyIHRocm91Z2ggQXBwcm92ZSBhbmQgY2hhcnNldC12YWxpZGF0ZWQgdGhlcmUgKHAvbW91bC9waWxvdCBhc3NlcnRQbGFpbiksCi8vIHdoaWNoIGlzIHdoYXQgbGV0cyBSZW5kZXIgaW50ZXJwb2xhdGUgdGhlbS4KLy8gUGFja2FnZSBwaWxvdCBpcyBtb3VsJ3MgcmVhbG0tZHJpdmVuIGFjY291bnQ6IGl0IGhvbGRzIHRoZSBmdW5kcyBhbmQgdGhlCi8vIGlkZW50aXR5LCBtb3VsJ3Mga2V5IHBpbG90cyBpdCwgYW5kIGl0cyBwb3dlcnMgYXJyaXZlIGFmdGVyd2FyZHMgYXMKLy8gc2VwYXJhdGUgcmVhbG1zIHRoYXQgdGhpcyBvbmUgbmV2ZXIgaW1wb3J0cy4KLy8KLy8gQWxsIGJlaGF2aW91ciBpcyBpbiBnbm8ubGFuZC9wL21vdWwvcGlsb3QvdjA7IHRoaXMgcmVhbG0gaXMgdGhlIGluc3RhbmNlLgovLyBEZW1vIG9mIGEgcG93ZXI6IHIvbW91bC94L3BpbG90ZGVtby4KcGFja2FnZSBwaWxvdAoKaW1wb3J0ICJnbm8ubGFuZC9wL21vdWwvcGlsb3QvdjAiCgovLyBvd25lciBpcyBwaW5uZWQgaW4gdGhlIHNvdXJjZSByYXRoZXIgdGhhbiB0YWtlbiBmcm9tIHdob2V2ZXIgY2FsbHMgQ2xhaW0KLy8gZmlyc3QuIEEgZGVwbG95IGxhbmRzIGluIGl0cyBvd24gYmxvY2sgYW5kIHRoZSBjbGFpbSBpcyBhIHNlY29uZAovLyB0cmFuc2FjdGlvbiwgc28gYW4gdW5waW5uZWQgQ2xhaW0gaXMgYSByYWNlIGFueW9uZSBvbiBjaGFpbiBjYW4gd2luLCBhbmQKLy8gdGhpcyBhY2NvdW50IGNhbiBuZXZlciBiZSByZWRlcGxveWVkIHRvIHVuZG8gaXQuCmNvbnN0IG93bmVyID0gImcxbWFuZnJlZDQ3a3pkdWVjOTIwejg4d2ZyNjR5bGtzbWRjZWRsZjUiCgp2YXIgYWNjdCAqcGlsb3QuUGlsb3QKCi8vIENsYWltIGFybXMgdGhlIGFjY291bnQuIE9uY2UsIGFuZCBvbmx5IGJ5IGl0cyBvd25lci4KZnVuYyBDbGFpbShjdXIgcmVhbG0pIHsKCWlmIGFjY3QgIT0gbmlsIHsKCQlwYW5pYygicGlsb3Q6IGFscmVhZHkgY2xhaW1lZCIpCgl9CglpZiBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkgIT0gb3duZXIgewoJCXBhbmljKCJwaWxvdDogb25seSAiICsgb3duZXIgKyAiIGNhbiBjbGFpbSB0aGlzIGFjY291bnQiKQoJfQoJYWNjdCA9IHBpbG90Lk5ldygwLCBjdXIpCn0KCi8vIEFwcHJvdmUgYXV0aG9yaXNlcyBhIHBhY2thZ2UgcGF0aCB0byBpbnN0YWxsIGl0c2VsZiBsYXRlciwgdW5kZXIgYSBuYW1lZAovLyBzdWItaWRlbnRpdHksIHdpdGggYSBncmFudCBhbmQgYSBidWRnZXQuIFRoZSBjb2RlIG5lZWQgbm90IGV4aXN0IHlldC4KZnVuYyBBcHByb3ZlKGN1ciByZWFsbSwgcGF0aCwgc3VicGF0aCBzdHJpbmcsIGlkZW50aXR5IGJvb2wsIGJ1ZGdldCBpbnQ2NCkgewoJZ3JhbnQgOj0gcGlsb3QuR3JhbnRQdXJzZQoJaWYgaWRlbnRpdHkgewoJCWdyYW50ID0gcGlsb3QuR3JhbnRJZGVudGl0eQoJfQoJbXVzdCgpLkFwcHJvdmUoMCwgY3VyLCBwYXRoLCBzdWJwYXRoLCBncmFudCwgYnVkZ2V0KQp9CgovLyBTZXRCdWRnZXQgY2hhbmdlcyB3aGF0IGEgbW9kdWxlIG1heSBzdGlsbCBzcGVuZCwgaW5jbHVkaW5nIHRocm91Z2ggYSBwdXJzZQovLyBpdCBhbHJlYWR5IGhvbGRzLgpmdW5jIFNldEJ1ZGdldChjdXIgcmVhbG0sIHBhdGggc3RyaW5nLCBidWRnZXQgaW50NjQpIHsgbXVzdCgpLlNldEJ1ZGdldCgwLCBjdXIsIHBhdGgsIGJ1ZGdldCkgfQoKLy8gUmV2b2tlIHN0b3BzIGEgbW9kdWxlLiBJdCBjYW5ub3QgdGFrZSBiYWNrIGEgZ3JhbnRlZCBpZGVudGl0eS4KZnVuYyBSZXZva2UoY3VyIHJlYWxtLCBwYXRoIHN0cmluZykgeyBtdXN0KCkuUmV2b2tlKDAsIGN1ciwgcGF0aCkgfQoKLy8gRnVuZCBtb3ZlcyBjb2lucyBmcm9tIHRoZSBtYWluIHRyZWFzdXJ5IGludG8gb25lIG1vZHVsZSdzIHN1Yi10cmVhc3VyeS4KZnVuYyBGdW5kKGN1ciByZWFsbSwgcGF0aCBzdHJpbmcsIGFtb3VudCBpbnQ2NCkgeyBtdXN0KCkuRnVuZCgwLCBjdXIsIHBhdGgsIGFtb3VudCkgfQoKLy8gRXhlYyBkcml2ZXMgYW4gaW5zdGFsbGVkIG1vZHVsZS4KZnVuYyBFeGVjKGN1ciByZWFsbSwgcGF0aCwgYXJncyBzdHJpbmcpIHN0cmluZyB7IHJldHVybiBtdXN0KCkuRXhlYygwLCBjdXIsIHBhdGgsIGFyZ3MpIH0KCi8vIEhhbmRsZSBpcyBob3cgYSBtb2R1bGUgcmVhbG0gcmVhY2hlcyB0aGlzIGFjY291bnQuIEl0cyB0d28gbWV0aG9kcyBrZXkgb24KLy8gdGhlIGNhbGxlcidzIG93biBwa2dwYXRoLCB3aGljaCBubyByZWFsbSBjYW4gZm9yZ2UgZm9yIGFub3RoZXIuCmZ1bmMgSGFuZGxlKCkgKnBpbG90LkFjY291bnQgeyByZXR1cm4gbXVzdCgpLkhhbmRsZSgpIH0KCi8vIEFkZHJlc3MgaXMgdGhlIG1haW4gdHJlYXN1cnkuCmZ1bmMgQWRkcmVzcygpIGFkZHJlc3MgeyByZXR1cm4gbXVzdCgpLkFkZHJlc3MoKSB9CgovLyBTdWJBZGRyZXNzIGlzIG9uZSBtb2R1bGUncyB0cmVhc3VyeS4KZnVuYyBTdWJBZGRyZXNzKHBhdGggc3RyaW5nKSBhZGRyZXNzIHsgcmV0dXJuIG11c3QoKS5TdWJBZGRyZXNzKHBhdGgpIH0KCmZ1bmMgUmVuZGVyKHBhdGggc3RyaW5nKSBzdHJpbmcgewoJaWYgYWNjdCA9PSBuaWwgewoJCXJldHVybiAiIyBnbm8ubGFuZC9yL21vdWwvcGlsb3RcblxuVW5jbGFpbWVkLlxuIgoJfQoJcmV0dXJuIGFjY3QuUmVuZGVyKHBhdGgpCn0KCmZ1bmMgbXVzdCgpICpwaWxvdC5QaWxvdCB7CglpZiBhY2N0ID09IG5pbCB7CgkJcGFuaWMoInBpbG90OiB1bmNsYWltZWQiKQoJfQoJcmV0dXJuIGFjY3QKfQoahA4KDnBpbG90X3Rlc3QuZ25vEvENcGFja2FnZSBwaWxvdAoKaW1wb3J0ICgKCSJ0ZXN0aW5nIgoKCSJnbm8ubGFuZC9wL250L3Rlc3R1dGlscy92MCIKCSJnbm8ubGFuZC9wL250L3Vhc3NlcnQvdjAiCikKCnZhciAoCgkvLyB0aGUgYWRkcmVzcyBDbGFpbSBpcyBwaW5uZWQgdG8sIG5vdCBhIHRlc3QgYWRkcmVzcwoJbW91bCAgICA9IGFkZHJlc3MoImcxbWFuZnJlZDQ3a3pkdWVjOTIwejg4d2ZyNjR5bGtzbWRjZWRsZjUiKQoJc29tZW9uZSA9IHRlc3R1dGlscy5UZXN0QWRkcmVzcygic29tZW9uZSIpCikKCmZ1bmMgVGVzdENsYWltSXNPbmNlQW5kT3duZXJHYXRlZChjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJLy8gYW55b25lIGVsc2UgcmFjaW5nIHRoZSBkZXBsb3kgaXMgcmVmdXNlZCwgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mCgkvLyBwaW5uaW5nIHRoZSBhZGRyZXNzIGluIHRoZSBzb3VyY2UKCXRlc3RpbmcuU2V0UmVhbG0odGVzdGluZy5OZXdVc2VyUmVhbG0oc29tZW9uZSkpCgl1YXNzZXJ0LkFib3J0c0NvbnRhaW5zKHQsIGN1ciwgIm9ubHkgZzFtYW5mcmVkIiwgZnVuYygpIHsgQ2xhaW0oY3Jvc3MoY3VyKSkgfSkKCgl0ZXN0aW5nLlNldFJlYWxtKHRlc3RpbmcuTmV3VXNlclJlYWxtKG1vdWwpKQoJQ2xhaW0oY3Jvc3MoY3VyKSkKCXVhc3NlcnQuRXF1YWwodCwgbW91bC5TdHJpbmcoKSwgYWNjdC5Pd25lcigpLlN0cmluZygpKQoKCXRlc3RpbmcuU2V0UmVhbG0odGVzdGluZy5OZXdVc2VyUmVhbG0oc29tZW9uZSkpCgl1YXNzZXJ0LkFib3J0c0NvbnRhaW5zKHQsIGN1ciwgImFscmVhZHkgY2xhaW1lZCIsIGZ1bmMoKSB7IENsYWltKGNyb3NzKGN1cikpIH0pCgl1YXNzZXJ0LkFib3J0c0NvbnRhaW5zKHQsIGN1ciwgIm5vdCB0aGUgb3duZXIiLCBmdW5jKCkgewoJCUFwcHJvdmUoY3Jvc3MoY3VyKSwgImduby5sYW5kL3IveC9ub3BlL3YwIiwgIm5vcGUiLCBmYWxzZSwgMSkKCX0pCgoJdGVzdGluZy5TZXRSZWFsbSh0ZXN0aW5nLk5ld1VzZXJSZWFsbShtb3VsKSkKCXVhc3NlcnQuQWJvcnRzQ29udGFpbnModCwgY3VyLCAiW2EtekEtWjAtOS5fLy1dIiwgZnVuYygpIHsKCQlBcHByb3ZlKGNyb3NzKGN1ciksICJnbm8ubGFuZC9yL3gvbm9wZS92MCIsICJwYXl8b3V0IiwgZmFsc2UsIDEpCgl9KQp9CgpmdW5jIFRlc3RSZW5kZXIoY3VyIHJlYWxtLCB0ICp0ZXN0aW5nLlQpIHsKCXRlc3RpbmcuU2V0UmVhbG0odGVzdGluZy5OZXdVc2VyUmVhbG0obW91bCkpCglBcHByb3ZlKGNyb3NzKGN1ciksICJnbm8ubGFuZC9yL21vdWwveC9waWxvdGRlbW8vdjAiLCAicGF5b3V0IiwgZmFsc2UsIDI1MCkKCgl3YW50IDo9ICIjIGduby5sYW5kL3IvbW91bC9waWxvdC92MFxuXG4iICsKCQkifCB8IHxcbnwtLS18LS0tfFxuIiArCgkJInwgb3duZXIgfCAiICsgbW91bC5TdHJpbmcoKSArICIgfFxuIiArCgkJInwgdHJlYXN1cnkgfCAiICsgQWRkcmVzcygpLlN0cmluZygpICsgIiB8XG4iICsKCQkifCBiYWxhbmNlIHwgMCB1Z25vdCB8XG5cbiIgKwoJCSIjIyBwb3dlcnNcblxuIiArCgkJInwgcGF0aCB8IGdyYW50IHwgaWRlbnRpdHkgfCBzdGF0ZSB8IGxlZnQgfCBydW5zIHwgc3ViLXRyZWFzdXJ5IHxcbiIgKwoJCSJ8LS0tfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfFxuIiArCgkJInwgYGduby5sYW5kL3IvbW91bC94L3BpbG90ZGVtby92MGAgfCBwdXJzZSB8IGBnbm8ubGFuZC9yL21vdWwvcGlsb3QvdjAjcGF5b3V0YCB8IGFwcHJvdmVkIHwgMjUwIHwgMCB8IDAgdWdub3QgfFxuIgoJdWFzc2VydC5FcXVhbCh0LCB3YW50LCBSZW5kZXIoIiIpKQp9CiIMNTAwMDAwMHVnbm90CqAVCgwvdm0ubV9hZGRwa2cSjxUKKGcxbWFuZnJlZDQ3a3pkdWVjOTIwejg4d2ZyNjR5bGtzbWRjZWRsZjUS1BQKA2JhZBIsZ25vLmxhbmQvci9tb3VsL3gvdXBncmFkZS9zY2hlbWEvaW1wbC9iYWQvdjAa5AgKCVJFQURNRS5tZBLWCCMgYGduby5sYW5kL3IvbW91bC94L3VwZ3JhZGUvc2NoZW1hL2ltcGwvYmFkL3YwYAoKVGhlIGhhbmRsZXIgdGhhdCAqKmV4aXN0cyB0byBiZSByZWZ1c2VkKiouIEl0IHNhdGlzZmllcyBgZmFjYWRlLkhhbmRsZXJgIGV4YWN0bHkgYXMKd2VsbCBhcyB0aGUgb3RoZXJzIGRvLCBhbmQgZHJvcHMgYSB2ZXJiIGFuZCByZXNoYXBlcyBhbm90aGVyLCB3aGljaCBvbmx5IGEgc2NoZW1hIGRpZmYKY2FuIHNlZS4gTm90aGluZyBpbiBnbm9zIHR5cGUgc3lzdGVtIGNhbi4KClNlZSBbdGhlIHBhdHRlcm5dKC4uLy4uL1JFQURNRS5tZCkgYW5kIFt0aGUgZXhwbG9yYXRpb25dKC4uLy4uLy4uL1JFQURNRS5tZCkuCgo8IS0tIEJFR0lOIEdOT0NPTlRSQUNUUyBGT09URVIgKGdlbmVyYXRlZCBieSBgbWFrZSByZWFkbWVzYDsgZG8gbm90IGVkaXQgYmVsb3cpIC0tPgoKLS0tCgpQYXJ0IG9mICoqW21vdWwvZ25vLWNvbnRyYWN0c10oaHR0cHM6Ly9naXRodWIuY29tL21vdWwvZ25vLWNvbnRyYWN0cykqKiDigJQgbW91bCdzIHZlcnNpb25lZCBnbm8ubGFuZCBjb250cmFjdHMuIFNlZSB0aGUgcmVwb3NpdG9yeSBmb3IgdGhlIGZ1bGwgY2F0YWxvZywgYnVpbGQvdGVzdCB0b29saW5nLCBhbmQgdXNhZ2UuCgoqKkRlcGVuZGVuY3kgZ3JhcGg6KioKCiFbZ25vLmxhbmQvci9tb3VsL3gvdXBncmFkZS9zY2hlbWEvaW1wbC9iYWQvdjAgZGVwZW5kZW5jeSBncmFwaF0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vdWwvZ25vLWNvbnRyYWN0cy9tYWluL19hc3NldHMvZ25vLmxhbmQvci9tb3VsL3gvdXBncmFkZS9zY2hlbWEvaW1wbC9iYWQvdjAvZGVwcy5wbmcpCgo+IPCfp6ogKipIaWdobHkgZXhwZXJpbWVudGFsIOKAlCBwb3RlbnRpYWxseSB2aWJlLWNvZGVkLioqIE5vdCBhdWRpdGVkOyBtYXkgYnJlYWssIGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCBhdCBhbnkgdGltZS4gRG8gbm90IHVzZSB3aXRoIGFueXRoaW5nIG9mIHZhbHVlLiBGdWxsIGRpc2NsYWltZXI6IFtESVNDTEFJTUVSXShodHRwczovL2dpdGh1Yi5jb20vbW91bC9nbm8tY29udHJhY3RzL2Jsb2IvbWFpbi9ESVNDTEFJTUVSLm1kKS4KCjwhLS0gRU5EIEdOT0NPTlRSQUNUUyBGT09URVIgLS0+ChruCQoHYmFkLmdubxLiCS8vIFBhY2thZ2UgYmFkIGlzIHRoZSBoYW5kbGVyIHJlYWxtIHRoYXQgZXhpc3RzIHRvIGJlIHJlZnVzZWQgKHBhdHRlcm4gRzsgc2VlCi8vIC4uLy4uL1JFQURNRS5tZCkuCi8vCi8vIEl0IHNhdGlzZmllcyBmYWNhZGUuSGFuZGxlciBleGFjdGx5IGFzIHdlbGwgYXMgdGhlIG90aGVycyBkbzogc2FtZSBtZXRob2RzLAovLyBzYW1lIHNpZ25hdHVyZXMsIGNvbXBpbGVzIGFuZCBwcm9wb3NlcyBpdHNlbGYgd2l0aG91dCBjb21wbGFpbnQuIFdoYXQgaXQgZG9lcwovLyBpcyBkcm9wIHRoZSAidXBwZXIiIHZlcmIgYW5kIGNoYW5nZSAicmVwZWF0IiB0byB0YWtlIG9uZSBhcmd1bWVudCBpbnN0ZWFkIG9mCi8vIHR3bywgYm90aCBvZiB3aGljaCBicmVhayBhIGNhbGxlciBhbHJlYWR5IGNvbXBpbGVkIGFnYWluc3QgdjAuCi8vCi8vIE5vdGhpbmcgaW4gZ25vJ3MgdHlwZSBzeXN0ZW0gY2FuIHNlZSB0aGF0LiBBIEdvIGludGVyZmFjZSBzYXlzIHdoYXQgbWV0aG9kcwovLyBleGlzdCwgbm90IHdoaWNoIHZlcmJzIHRoZSBkYXRhIGJlaGluZCB0aGVtIHN0aWxsIGFuc3dlcnMsIHdoaWNoIGlzIHRoZSB3aG9sZQovLyBhcmd1bWVudCBmb3IgZGVjbGFyaW5nIHRoZSBBUEkgYXMgZGF0YSBhbmQgZGlmZmluZyBpdCBhdCBhY2NlcHQgdGltZS4KcGFja2FnZSBiYWQKCmltcG9ydCAoCglmYWNhZGUgImduby5sYW5kL3IvbW91bC94L3VwZ3JhZGUvc2NoZW1hL2ZhY2FkZS92MCIKKQoKLy8gc2NoZW1hIGRyb3BzICJ1cHBlciIgZW50aXJlbHkgYW5kIGdpdmVzICJyZXBlYXQiIHRoZSB3cm9uZyBhcml0eS4KY29uc3Qgc2NoZW1hID0gYHJlcGVhdCBzYAoKdHlwZSBoYW5kbGVyIHN0cnVjdHt9CgpmdW5jIChoYW5kbGVyKSBTY2hlbWEoKSBzdHJpbmcgeyByZXR1cm4gc2NoZW1hIH0KCmZ1bmMgKGhhbmRsZXIpIEludm9rZSh2ZXJiIHN0cmluZywgYXJncyBbXXN0cmluZykgc3RyaW5nIHsKCXJldHVybiAidGhpcyBoYW5kbGVyIG5ldmVyIGdldHMgdG8gcnVuIgp9CgovLyBJbnN0YW5jZSBleHBvc2VzIHRoZSBzaW5nbGV0b24uCmZ1bmMgSW5zdGFuY2UoKSBmYWNhZGUuSGFuZGxlciB7IHJldHVybiBoYW5kbGVye30gfQoKLy8gUGF0aCBpcyB0aGlzIHJlYWxtJ3Mgb3duIHBhY2thZ2UgcGF0aC4KY29uc3QgUGF0aCA9ICJnbm8ubGFuZC9yL21vdWwveC91cGdyYWRlL3NjaGVtYS9pbXBsL2JhZC92MCIKCmZ1bmMgaW5pdChjdXIgcmVhbG0pIHsKCWZhY2FkZS5Qcm9wb3NlKGNyb3NzKGN1ciksIEluc3RhbmNlKCkpCn0KGsYBCgtnbm9tb2QudG9tbBK2AW1vZHVsZSA9ICJnbm8ubGFuZC9yL21vdWwveC91cGdyYWRlL3NjaGVtYS9pbXBsL2JhZC92MCIKZ25vID0gIjAuOSIKIyBwdWJsaWM6IGhhbmRzIGl0cyBvd24gaGFuZGxlciB0byB0aGUgZmFjYWRlOyBwcml2YXRlIGFib3J0cyB3aXRoICJjYW5ub3QgcGVyc2lzdCBvYmplY3QgZnJvbSB0aGUgcHJpdmF0ZSByZWFsbSIKIgw1MDAwMDAwdWdub3QKnBgKDC92bS5tX2FkZHBrZxKLGAooZzFtYW5mcmVkNDdremR1ZWM5MjB6ODh3ZnI2NHlsa3NtZGNlZGxmNRLQFwoEaW1wbBIoZ25vLmxhbmQvci9tb3VsL3gvdXBncmFkZS9zY2hlbWEvaW1wbC92MBqDCAoJUkVBRE1FLm1kEvUHIyBgZ25vLmxhbmQvci9tb3VsL3gvdXBncmFkZS9zY2hlbWEvaW1wbC92MGAKClZlcnNpb24gMCBvZiB0aGUgKipoYW5kbGVyIHJlYWxtKiogb2YgcGF0dGVybiBHLiBUd28gdmVyYnMsIGB1cHBlcmAgYW5kIGByZXBlYXRgLApkZWNsYXJlZCBhcyB0ZXh0IHJhdGhlciB0aGFuIGFzIGEgbWV0aG9kIHNldC4KClNlZSBbdGhlIHBhdHRlcm5dKC4uLy4uL1JFQURNRS5tZCkgYW5kIFt0aGUgZXhwbG9yYXRpb25dKC4uLy4uLy4uL1JFQURNRS5tZCkuCgo8IS0tIEJFR0lOIEdOT0NPTlRSQUNUUyBGT09URVIgKGdlbmVyYXRlZCBieSBgbWFrZSByZWFkbWVzYDsgZG8gbm90IGVkaXQgYmVsb3cpIC0tPgoKLS0tCgpQYXJ0IG9mICoqW21vdWwvZ25vLWNvbnRyYWN0c10oaHR0cHM6Ly9naXRodWIuY29tL21vdWwvZ25vLWNvbnRyYWN0cykqKiDigJQgbW91bCdzIHZlcnNpb25lZCBnbm8ubGFuZCBjb250cmFjdHMuIFNlZSB0aGUgcmVwb3NpdG9yeSBmb3IgdGhlIGZ1bGwgY2F0YWxvZywgYnVpbGQvdGVzdCB0b29saW5nLCBhbmQgdXNhZ2UuCgoqKkRlcGVuZGVuY3kgZ3JhcGg6KioKCiFbZ25vLmxhbmQvci9tb3VsL3gvdXBncmFkZS9zY2hlbWEvaW1wbC92MCBkZXBlbmRlbmN5IGdyYXBoXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW91bC9nbm8tY29udHJhY3RzL21haW4vX2Fzc2V0cy9nbm8ubGFuZC9yL21vdWwveC91cGdyYWRlL3NjaGVtYS9pbXBsL3YwL2RlcHMucG5nKQoKPiDwn6eqICoqSGlnaGx5IGV4cGVyaW1lbnRhbCDigJQgcG90ZW50aWFsbHkgdmliZS1jb2RlZC4qKiBOb3QgYXVkaXRlZDsgbWF5IGJyZWFrLCBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQgYXQgYW55IHRpbWUuIERvIG5vdCB1c2Ugd2l0aCBhbnl0aGluZyBvZiB2YWx1ZS4gRnVsbCBkaXNjbGFpbWVyOiBbRElTQ0xBSU1FUl0oaHR0cHM6Ly9naXRodWIuY29tL21vdWwvZ25vLWNvbnRyYWN0cy9ibG9iL21haW4vRElTQ0xBSU1FUi5tZCkuCgo8IS0tIEVORCBHTk9DT05UUkFDVFMgRk9PVEVSIC0tPgoawgEKC2dub21vZC50b21sErIBbW9kdWxlID0gImduby5sYW5kL3IvbW91bC94L3VwZ3JhZGUvc2NoZW1hL2ltcGwvdjAiCmdubyA9ICIwLjkiCiMgcHVibGljOiBoYW5kcyBpdHMgb3duIGhhbmRsZXIgdG8gdGhlIGZhY2FkZTsgcHJpdmF0ZSBhYm9ydHMgd2l0aCAiY2Fubm90IHBlcnNpc3Qgb2JqZWN0IGZyb20gdGhlIHByaXZhdGUgcmVhbG0iChrSDQoIaW1wbC5nbm8SxQ0vLyBQYWNrYWdlIGltcGwgaXMgdmVyc2lvbiAwIG9mIHRoZSBoYW5kbGVyIHJlYWxtIG9mIHRoZSAiQVBJIGFzIGRhdGEiIHVwZ3JhZGUKLy8gcGF0dGVybiAocGF0dGVybiBHOyBzZWUgLi4vLi4vUkVBRE1FLm1kKS4KLy8KLy8gVHdvIHZlcmJzLCBkZWNsYXJlZCBhcyB0ZXh0IHJhdGhlciB0aGFuIGFzIGEgbWV0aG9kIHNldC4gRGVwbG95aW5nIG5vbWluYXRlcwovLyBpdDsgdGhlIGZhY2FkZSBvd25lciBhY2NlcHRzIGl0IGJ5IHBhdGguCnBhY2thZ2UgaW1wbAoKaW1wb3J0ICgKCSJzdHJpbmdzIgoKCWZhY2FkZSAiZ25vLmxhbmQvci9tb3VsL3gvdXBncmFkZS9zY2hlbWEvZmFjYWRlL3YwIgopCgovLyBzY2hlbWEgaXMgdGhpcyB2ZXJzaW9uJ3Mgd2hvbGUgQVBJLiBPbmUgdmVyYiBwZXIgbGluZSwgbmFtZSB0aGVuIHBhcmFtZXRlcnMuCmNvbnN0IHNjaGVtYSA9IGB1cHBlciBzCnJlcGVhdCBzIG5gCgp0eXBlIGhhbmRsZXIgc3RydWN0e30KCmZ1bmMgKGhhbmRsZXIpIFNjaGVtYSgpIHN0cmluZyB7IHJldHVybiBzY2hlbWEgfQoKZnVuYyAoaGFuZGxlcikgSW52b2tlKHZlcmIgc3RyaW5nLCBhcmdzIFtdc3RyaW5nKSBzdHJpbmcgewoJc3dpdGNoIHZlcmIgewoJY2FzZSAidXBwZXIiOgoJCXJldHVybiBzdHJpbmdzLlRvVXBwZXIoYXJnc1swXSkKCWNhc2UgInJlcGVhdCI6CgkJcmV0dXJuIHN0cmluZ3MuUmVwZWF0KGFyZ3NbMF0sIGF0b2koYXJnc1sxXSkpCgl9CgkvLyBVbnJlYWNoYWJsZTogdGhlIGZhY2FkZSBjaGVja2VkIHRoZSB2ZXJiIGFnYWluc3QgdGhpcyBzY2hlbWEgZmlyc3QuCglwYW5pYygidW5rbm93biB2ZXJiICIgKyB2ZXJiKQp9CgovLyBhdG9pIGlzIGhhbmQtcm9sbGVkIHRvIGtlZXAgdGhlIGZhaWx1cmUgbWVzc2FnZSBhYm91dCB0aGUgQVJHVU1FTlQgcmF0aGVyCi8vIHRoYW4gYWJvdXQgc3RyY29udiwgd2hpY2ggaXMgdGhlIHdob2xlIGRpZmZlcmVuY2UgYSB0eXBlZCBib3VuZGFyeSB3b3VsZCBoYXZlCi8vIG1hZGUgaGVyZS4KZnVuYyBhdG9pKHMgc3RyaW5nKSBpbnQgewoJaWYgcyA9PSAiIiB7CgkJcGFuaWMoImV4cGVjdGVkIGEgbnVtYmVyLCBnb3QgYW4gZW1wdHkgYXJndW1lbnQiKQoJfQoJbiA6PSAwCglmb3IgXywgYyA6PSByYW5nZSBzIHsKCQlpZiBjIDwgJzAnIHx8IGMgPiAnOScgewoJCQlwYW5pYygiZXhwZWN0ZWQgYSBudW1iZXIsIGdvdCAiICsgcykKCQl9CgkJbiA9IG4qMTAgKyBpbnQoYy0nMCcpCgkJaWYgbiA+IDY0IHsKCQkJcGFuaWMoInJlZnVzaW5nIHRvIHJlcGVhdCBtb3JlIHRoYW4gNjQgdGltZXMiKQoJCX0KCX0KCXJldHVybiBuCn0KCi8vIEluc3RhbmNlIGV4cG9zZXMgdGhlIHNpbmdsZXRvbi4KZnVuYyBJbnN0YW5jZSgpIGZhY2FkZS5IYW5kbGVyIHsgcmV0dXJuIGhhbmRsZXJ7fSB9CgovLyBQYXRoIGlzIHRoaXMgcmVhbG0ncyBvd24gcGFja2FnZSBwYXRoLCB0aGUgc3RyaW5nIHRoZSBmYWNhZGUgb3duZXIgYWNjZXB0cy4KY29uc3QgUGF0aCA9ICJnbm8ubGFuZC9yL21vdWwveC91cGdyYWRlL3NjaGVtYS9pbXBsL3YwIgoKZnVuYyBpbml0KGN1ciByZWFsbSkgewoJZmFjYWRlLlByb3Bvc2UoY3Jvc3MoY3VyKSwgSW5zdGFuY2UoKSkKfQoKLy8gUHJvcG9zZSByZS1ub21pbmF0ZXMgdGhpcyBoYW5kbGVyLCBzbyBhIHJvbGxiYWNrIG5lZWRzIG5vIHJlZGVwbG95LgpmdW5jIFByb3Bvc2UoY3VyIHJlYWxtKSB7CglmYWNhZGUuUHJvcG9zZShjcm9zcyhjdXIpLCBJbnN0YW5jZSgpKQp9CiIMNTAwMDAwMHVnbm90Co4/Cgwvdm0ubV9hZGRwa2cS/T4KKGcxbWFuZnJlZDQ3a3pkdWVjOTIwejg4d2ZyNjR5bGtzbWRjZWRsZjUSwj4KBGltcGwSKGduby5sYW5kL3IvbW91bC94L3VwZ3JhZGUvc2NoZW1hL2ltcGwvdjEaqgkKCVJFQURNRS5tZBKcCSMgYGduby5sYW5kL3IvbW91bC94L3VwZ3JhZGUvc2NoZW1hL2ltcGwvdjFgCgpWZXJzaW9uIDEgb2YgdGhlICoqaGFuZGxlciByZWFsbSoqIG9mIHBhdHRlcm4gRy4gQWRkcyBgc3Vycm91bmRgIGFuZCBrZWVwcyBib3RoIG9mCltgdjBgXSguLi9nZW4wKXMgdmVyYnMgdW50b3VjaGVkLCB3aGljaCBpcyB3aGF0IGxldHMgdGhlIGZhY2FkZSBhY2NlcHQgaXQ6IGdyb3dpbmcKdGhlIEFQSSBjb3N0cyBubyBuZXcgcmVhbG0gYW5kIG5vIG5ldyBzaWduYXR1cmUgYXQgdGhlIHBlcm1hbmVudCBwYXRoLgoKQWxzbyBjYXJyaWVzIHRoZSB0d2luIG9mIGBhZG1pbnJlZ2BzIGRpc3BhdGNoLWNvc3QgdGVzdC4KClNlZSBbdGhlIHBhdHRlcm5dKC4uLy4uL1JFQURNRS5tZCkgYW5kIFt0aGUgZXhwbG9yYXRpb25dKC4uLy4uLy4uL1JFQURNRS5tZCkuCgo8IS0tIEJFR0lOIEdOT0NPTlRSQUNUUyBGT09URVIgKGdlbmVyYXRlZCBieSBgbWFrZSByZWFkbWVzYDsgZG8gbm90IGVkaXQgYmVsb3cpIC0tPgoKLS0tCgpQYXJ0IG9mICoqW21vdWwvZ25vLWNvbnRyYWN0c10oaHR0cHM6Ly9naXRodWIuY29tL21vdWwvZ25vLWNvbnRyYWN0cykqKiDigJQgbW91bCdzIHZlcnNpb25lZCBnbm8ubGFuZCBjb250cmFjdHMuIFNlZSB0aGUgcmVwb3NpdG9yeSBmb3IgdGhlIGZ1bGwgY2F0YWxvZywgYnVpbGQvdGVzdCB0b29saW5nLCBhbmQgdXNhZ2UuCgoqKkRlcGVuZGVuY3kgZ3JhcGg6KioKCiFbZ25vLmxhbmQvci9tb3VsL3gvdXBncmFkZS9zY2hlbWEvaW1wbC92MSBkZXBlbmRlbmN5IGdyYXBoXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW91bC9nbm8tY29udHJhY3RzL21haW4vX2Fzc2V0cy9nbm8ubGFuZC9yL21vdWwveC91cGdyYWRlL3NjaGVtYS9pbXBsL3YxL2RlcHMucG5nKQoKPiDwn6eqICoqSGlnaGx5IGV4cGVyaW1lbnRhbCDigJQgcG90ZW50aWFsbHkgdmliZS1jb2RlZC4qKiBOb3QgYXVkaXRlZDsgbWF5IGJyZWFrLCBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQgYXQgYW55IHRpbWUuIERvIG5vdCB1c2Ugd2l0aCBhbnl0aGluZyBvZiB2YWx1ZS4gRnVsbCBkaXNjbGFpbWVyOiBbRElTQ0xBSU1FUl0oaHR0cHM6Ly9naXRodWIuY29tL21vdWwvZ25vLWNvbnRyYWN0cy9ibG9iL21haW4vRElTQ0xBSU1FUi5tZCkuCgo8IS0tIEVORCBHTk9DT05UUkFDVFMgRk9PVEVSIC0tPgoawgEKC2dub21vZC50b21sErIBbW9kdWxlID0gImduby5sYW5kL3IvbW91bC94L3VwZ3JhZGUvc2NoZW1hL2ltcGwvdjEiCmdubyA9ICIwLjkiCiMgcHVibGljOiBoYW5kcyBpdHMgb3duIGhhbmRsZXIgdG8gdGhlIGZhY2FkZTsgcHJpdmF0ZSBhYm9ydHMgd2l0aCAiY2Fubm90IHBlcnNpc3Qgb2JqZWN0IGZyb20gdGhlIHByaXZhdGUgcmVhbG0iChrfDgoIaW1wbC5nbm8S0g4vLyBQYWNrYWdlIGltcGwgaXMgdmVyc2lvbiAxIG9mIHRoZSBoYW5kbGVyIHJlYWxtIG9mIHRoZSAiQVBJIGFzIGRhdGEiIHVwZ3JhZGUKLy8gcGF0dGVybiAocGF0dGVybiBHOyBzZWUgLi4vLi4vUkVBRE1FLm1kKS4KLy8KLy8gVGhyZWUgdmVyYnM6IGl0IEFERFMgb25lIGFuZCBrZWVwcyBib3RoIG9mIHYwJ3MgdW50b3VjaGVkLCB3aGljaCBpcyB3aGF0Ci8vIGxldHMgdGhlIGZhY2FkZSBhY2NlcHQgaXQuIEdyb3dpbmcgdGhlIEFQSSBjb3N0cyBubyBuZXcgcmVhbG0gYW5kIG5vIG5ldwovLyBzaWduYXR1cmUgYXQgdGhlIHBlcm1hbmVudCBwYXRoLgpwYWNrYWdlIGltcGwKCmltcG9ydCAoCgkic3RyaW5ncyIKCglmYWNhZGUgImduby5sYW5kL3IvbW91bC94L3VwZ3JhZGUvc2NoZW1hL2ZhY2FkZS92MCIKKQoKLy8gc2NoZW1hIGlzIHRoaXMgdmVyc2lvbidzIHdob2xlIEFQSS4gT25lIHZlcmIgcGVyIGxpbmUsIG5hbWUgdGhlbiBwYXJhbWV0ZXJzLgpjb25zdCBzY2hlbWEgPSBgdXBwZXIgcwpyZXBlYXQgcyBuCnN1cnJvdW5kIHMgbGVmdCByaWdodGAKCnR5cGUgaGFuZGxlciBzdHJ1Y3R7fQoKZnVuYyAoaGFuZGxlcikgU2NoZW1hKCkgc3RyaW5nIHsgcmV0dXJuIHNjaGVtYSB9CgpmdW5jIChoYW5kbGVyKSBJbnZva2UodmVyYiBzdHJpbmcsIGFyZ3MgW11zdHJpbmcpIHN0cmluZyB7Cglzd2l0Y2ggdmVyYiB7CgljYXNlICJ1cHBlciI6CgkJcmV0dXJuIHN0cmluZ3MuVG9VcHBlcihhcmdzWzBdKQoJY2FzZSAicmVwZWF0IjoKCQlyZXR1cm4gc3RyaW5ncy5SZXBlYXQoYXJnc1swXSwgYXRvaShhcmdzWzFdKSkKCWNhc2UgInN1cnJvdW5kIjoKCQlyZXR1cm4gYXJnc1sxXSArIGFyZ3NbMF0gKyBhcmdzWzJdCgl9CgkvLyBVbnJlYWNoYWJsZTogdGhlIGZhY2FkZSBjaGVja2VkIHRoZSB2ZXJiIGFnYWluc3QgdGhpcyBzY2hlbWEgZmlyc3QuCglwYW5pYygidW5rbm93biB2ZXJiICIgKyB2ZXJiKQp9CgovLyBhdG9pIGlzIGhhbmQtcm9sbGVkIHRvIGtlZXAgdGhlIGZhaWx1cmUgbWVzc2FnZSBhYm91dCB0aGUgQVJHVU1FTlQgcmF0aGVyCi8vIHRoYW4gYWJvdXQgc3RyY29udiwgd2hpY2ggaXMgdGhlIHdob2xlIGRpZmZlcmVuY2UgYSB0eXBlZCBib3VuZGFyeSB3b3VsZCBoYXZlCi8vIG1hZGUgaGVyZS4KZnVuYyBhdG9pKHMgc3RyaW5nKSBpbnQgewoJaWYgcyA9PSAiIiB7CgkJcGFuaWMoImV4cGVjdGVkIGEgbnVtYmVyLCBnb3QgYW4gZW1wdHkgYXJndW1lbnQiKQoJfQoJbiA6PSAwCglmb3IgXywgYyA6PSByYW5nZSBzIHsKCQlpZiBjIDwgJzAnIHx8IGMgPiAnOScgewoJCQlwYW5pYygiZXhwZWN0ZWQgYSBudW1iZXIsIGdvdCAiICsgcykKCQl9CgkJbiA9IG4qMTAgKyBpbnQoYy0nMCcpCgkJaWYgbiA+IDY0IHsKCQkJcGFuaWMoInJlZnVzaW5nIHRvIHJlcGVhdCBtb3JlIHRoYW4gNjQgdGltZXMiKQoJCX0KCX0KCXJldHVybiBuCn0KCi8vIEluc3RhbmNlIGV4cG9zZXMgdGhlIHNpbmdsZXRvbi4KZnVuYyBJbnN0YW5jZSgpIGZhY2FkZS5IYW5kbGVyIHsgcmV0dXJuIGhhbmRsZXJ7fSB9CgovLyBQYXRoIGlzIHRoaXMgcmVhbG0ncyBvd24gcGFja2FnZSBwYXRoLCB0aGUgc3RyaW5nIHRoZSBmYWNhZGUgb3duZXIgYWNjZXB0cy4KY29uc3QgUGF0aCA9ICJnbm8ubGFuZC9yL21vdWwveC91cGdyYWRlL3NjaGVtYS9pbXBsL3YxIgoKZnVuYyBpbml0KGN1ciByZWFsbSkgewoJZmFjYWRlLlByb3Bvc2UoY3Jvc3MoY3VyKSwgSW5zdGFuY2UoKSkKfQoKLy8gUHJvcG9zZSByZS1ub21pbmF0ZXMgdGhpcyBoYW5kbGVyLCBzbyBhIHJvbGxiYWNrIG5lZWRzIG5vIHJlZGVwbG95LgpmdW5jIFByb3Bvc2UoY3VyIHJlYWxtKSB7CglmYWNhZGUuUHJvcG9zZShjcm9zcyhjdXIpLCBJbnN0YW5jZSgpKQp9Chq7JAoNaW1wbF90ZXN0LmdubxKpJHBhY2thZ2UgaW1wbAoKaW1wb3J0ICgKCSJ0ZXN0aW5nIgoKCWZhY2FkZSAiZ25vLmxhbmQvci9tb3VsL3gvdXBncmFkZS9zY2hlbWEvZmFjYWRlL3YwIgoJYmFkICJnbm8ubGFuZC9yL21vdWwveC91cGdyYWRlL3NjaGVtYS9pbXBsL2JhZC92MCIKCWltcGx2MCAiZ25vLmxhbmQvci9tb3VsL3gvdXBncmFkZS9zY2hlbWEvaW1wbC92MCIKCgkiZ25vLmxhbmQvcC9udC91YXNzZXJ0L3YwIgopCgovLyBUZXN0R3Jvd1RoZUFQSSBpcyB0aGUgd2hvbGUgcGF0dGVybjogdGhyZWUgaGFuZGxlcnMgcHJvcG9zZSB0aGVtc2VsdmVzLCB0aGUKLy8gQVBJIGlzIGVudW1lcmFibGUgd2l0aG91dCBhIHRyYW5zYWN0aW9uLCBpdCBncm93cyB3aXRob3V0IGEgbmV3IHNpZ25hdHVyZSBhdAovLyB0aGUgcGVybWFuZW50IHBhdGgsIGFuZCB0aGUgb25lIGNhbmRpZGF0ZSB0aGF0IHdvdWxkIGJyZWFrIGEgY2FsbGVyIGlzCi8vIHJlZnVzZWQgZGVzcGl0ZSBzYXRpc2Z5aW5nIHRoZSBpbnRlcmZhY2UuCmZ1bmMgVGVzdEdyb3dUaGVBUEkoY3VyIHJlYWxtLCB0ICp0ZXN0aW5nLlQpIHsKCXRlc3RpbmcuU2V0UmVhbG0odGVzdGluZy5OZXdVc2VyUmVhbG0oZmFjYWRlLk93bmFibGUuT3duZXIoKSkpCgl1YXNzZXJ0LkVxdWFsKHQsIDMsIGxlbihmYWNhZGUuQ2FuZGlkYXRlcygpKSwgImFsbCB0aHJlZSBoYW5kbGVycyBub21pbmF0ZWQgdGhlbXNlbHZlcyIpCgoJLy8gdjA6IHR3byB2ZXJicywgYW5kIGEgY2FsbGVyIGNhbiBkaXNjb3ZlciB0aGVtIHdpdGggbm8gdHJhbnNhY3Rpb24uCglmYWNhZGUuQWNjZXB0KGNyb3NzKGN1ciksIGltcGx2MC5QYXRoKQoJdWFzc2VydC5FcXVhbCh0LCAidXBwZXIsIHJlcGVhdCIsIGpvaW5WZXJicyhmYWNhZGUuVmVyYnMoKSkpCgl1YXNzZXJ0LkVxdWFsKHQsICJyZXBlYXQocywgbikiLCBmYWNhZGUuU2lnbmF0dXJlKCJyZXBlYXQiKSkKCXVhc3NlcnQuRXF1YWwodCwgIkdOTyIsIGZhY2FkZS5DYWxsKGNyb3NzKGN1ciksICJ1cHBlciIsICJnbm8iKSkKCXVhc3NlcnQuRXF1YWwodCwgImFiYWIiLCBmYWNhZGUuQ2FsbChjcm9zcyhjdXIpLCAicmVwZWF0IiwgImFifDIiKSkKCgkvLyBUaGUgZmFjYWRlIGNoZWNrcyBhcml0eSBiZWZvcmUgdGhlIGhhbmRsZXIgcnVucywgc28gdGhlIG1lc3NhZ2UgbmFtZXMgdGhlCgkvLyBzaWduYXR1cmUgcmF0aGVyIHRoYW4gd2hhdGV2ZXIgdGhlIGhhbmRsZXIgd291bGQgaGF2ZSBkb25lLgoJdWFzc2VydC5BYm9ydHNDb250YWlucyh0LCBjdXIsICJ2ZXJiIHJlcGVhdCB0YWtlcyAyIGFyZ3VtZW50KHMpLCBnb3QgMSwgc2lnbmF0dXJlIGlzIHJlcGVhdChzLCBuKSIsIGZ1bmMoKSB7CgkJZmFjYWRlLkNhbGwoY3Jvc3MoY3VyKSwgInJlcGVhdCIsICJhYiIpCgl9KQoJdWFzc2VydC5BYm9ydHNDb250YWlucyh0LCBjdXIsICJ1bmtub3duIHZlcmIgbm9wZSwga25vd246IHVwcGVyLCByZXBlYXQiLCBmdW5jKCkgewoJCWZhY2FkZS5DYWxsKGNyb3NzKGN1ciksICJub3BlIiwgIiIpCgl9KQoKCS8vIHYxIEFERFMgYSB2ZXJiIGFuZCBrZWVwcyB0aGUgb3RoZXIgdHdvLCBzbyBpdCBpcyBhY2NlcHRlZC4gTm8gbmV3IHJlYWxtLAoJLy8gbm8gbmV3IHNpZ25hdHVyZSBhdCB0aGUgcGVybWFuZW50IHBhdGgsIGFuZCBvbGQgY2FsbGVycyBhcmUgdW50b3VjaGVkLgoJZmFjYWRlLkFjY2VwdChjcm9zcyhjdXIpLCBQYXRoKQoJdWFzc2VydC5FcXVhbCh0LCAidXBwZXIsIHJlcGVhdCwgc3Vycm91bmQiLCBqb2luVmVyYnMoZmFjYWRlLlZlcmJzKCkpKQoJdWFzc2VydC5FcXVhbCh0LCAiW2dub10iLCBmYWNhZGUuQ2FsbChjcm9zcyhjdXIpLCAic3Vycm91bmQiLCAiZ25vfFt8XSIpKQoJdWFzc2VydC5FcXVhbCh0LCAiR05PIiwgZmFjYWRlLkNhbGwoY3Jvc3MoY3VyKSwgInVwcGVyIiwgImdubyIpLCAidjAncyB2ZXJicyBzdGlsbCBhbnN3ZXIiKQoKCS8vIFRoZSByZWZ1c2FsLiBiYWQgc2F0aXNmaWVzIEhhbmRsZXIgZXhhY3RseSBhcyB3ZWxsIGFzIHRoZSBvdGhlcnMgZG87IHdoYXQKCS8vIGl0IGRvZXMgaXMgZHJvcCBhIHZlcmIgYW5kIHJlc2hhcGUgYW5vdGhlciwgd2hpY2ggb25seSB0aGUgc2NoZW1hIHNlZXMuCgl1YXNzZXJ0LkFib3J0c0NvbnRhaW5zKHQsIGN1ciwgInNjaGVtYSByZWdyZXNzaW9uOiB0aGUgY2FuZGlkYXRlIGRyb3BzIHZlcmIgdXBwZXIiLCBmdW5jKCkgewoJCWZhY2FkZS5BY2NlcHQoY3Jvc3MoY3VyKSwgYmFkLlBhdGgpCgl9KQoJdWFzc2VydC5FcXVhbCh0LCBQYXRoLCBmYWNhZGUuTGl2ZSgpLCAiYSByZWZ1c2VkIGFjY2VwdCBjaGFuZ2VzIG5vdGhpbmciKQoKCS8vIFRoZSBkaWZmIGlzIFNZTU1FVFJJQywgd2hpY2ggdGhlIGZpcnN0IGRyYWZ0IG9mIHRoaXMgdGVzdCBnb3Qgd3Jvbmc6IG5vdwoJLy8gdGhhdCB2MSBoYXMgYWRkZWQgYSB2ZXJiLCByb2xsaW5nIGJhY2sgdG8gdjAgRFJPUFMgaXQgYW5kIGlzIGEgcmVncmVzc2lvbgoJLy8gYnkgdGhlIHNhbWUgcnVsZS4gQWNjZXB0IHJlZnVzZXMgdGhlIHJvbGxiYWNrLgoJdWFzc2VydC5BYm9ydHNDb250YWlucyh0LCBjdXIsICJzY2hlbWEgcmVncmVzc2lvbjogdGhlIGNhbmRpZGF0ZSBkcm9wcyB2ZXJiIHN1cnJvdW5kIiwgZnVuYygpIHsKCQlmYWNhZGUuQWNjZXB0KGNyb3NzKGN1ciksIGltcGx2MC5QYXRoKQoJfSkKCXVhc3NlcnQuRXF1YWwodCwgUGF0aCwgZmFjYWRlLkxpdmUoKSkKCgkvLyBXaGljaCBpcyB3aHkgdGhlIG92ZXJyaWRlIGV4aXN0cy4gQSBwYXR0ZXJuIHRoYXQgY2FuIG9ubHkgbW92ZSBmb3J3YXJkIGlzCgkvLyB3b3JzZSB0aGFuIG9uZSB3aXRoIG5vIGRpZmYgYXQgYWxsLgoJZmFjYWRlLkFjY2VwdEJyZWFraW5nKGNyb3NzKGN1ciksIGltcGx2MC5QYXRoKQoJdWFzc2VydC5FcXVhbCh0LCAidXBwZXIsIHJlcGVhdCIsIGpvaW5WZXJicyhmYWNhZGUuVmVyYnMoKSkpCglmYWNhZGUuQWNjZXB0KGNyb3NzKGN1ciksIFBhdGgpCgoJdWFzc2VydC5FcXVhbCh0LCAidXBwZXIgc1xucmVwZWF0IHMgblxuc3Vycm91bmQgcyBsZWZ0IHJpZ2h0XG4iLCBmYWNhZGUuU2NoZW1hVGV4dCgpKQoJdWFzc2VydC5FcXVhbCh0LCAic2NoZW1hL2ZhY2FkZS92MDogZ25vLmxhbmQvci9tb3VsL3gvdXBncmFkZS9zY2hlbWEvaW1wbC92MVxuIisKCQkiLSB1cHBlcihzKVxuLSByZXBlYXQocywgbilcbi0gc3Vycm91bmQocywgbGVmdCwgcmlnaHQpXG4iLCBmYWNhZGUuUmVuZGVyKCIiKSkKfQoKLy8gVGVzdERpc3BhdGNoQ29zdDEwMCBkb2VzIDEwMCBkaXNwYXRjaGVzIHRocm91Z2ggdGhpcyBwYXR0ZXJuJ3MgZW50cnkgcG9pbnQsCi8vIHNvIGBnbm8gdGVzdCAtcHJpbnQtcnVudGltZS1tZXRyaWNzYCBwcmludHMgYSBjeWNsZSBjb3VudCBmb3IgYSBrbm93bgovLyB3b3JrbG9hZC4gSXRzIHR3aW4gaXMgVGVzdERpc3BhdGNoQ29zdDEwMCBpbiBhZG1pbnJlZy9pbXBsL2dlbjEuCi8vCi8vIEl0IG1lYXN1cmVzIHdoYXQgYSBjYWxsIGNvc3RzIHRocm91Z2ggZWFjaCBwYXR0ZXJuIEFTIFNISVBQRUQsIHdoaWNoIGlzIHRoZQovLyBudW1iZXIgdGhhdCBkZWNpZGVzIGJldHdlZW4gdGhlbS4gSXQgaXMgTk9UIHRoZSBjb3N0IG9mIHRoZSBzdHJpbmcgYm91bmRhcnkKLy8gaW4gaXNvbGF0aW9uOiB0aGlzIHBhdGggYWxzbyBjcm9zc2VzIGEgcmVhbG0gYW5kIHRoZSB0eXBlZCBvbmUgZG9lcyBub3QuCmZ1bmMgVGVzdERpc3BhdGNoQ29zdDEwMChjdXIgcmVhbG0sIHQgKnRlc3RpbmcuVCkgewoJLy8gUnVucyBhZnRlciBUZXN0R3Jvd1RoZUFQSSwgc28gdjEgaXMgYWxyZWFkeSBsaXZlLiBBY2NlcHRpbmcgYW55dGhpbmcgaGVyZQoJLy8gd291bGQgZmlnaHQgdGhhdCB0ZXN0J3Mgc3RhdGUsIGFuZCB0aGUgdmVyYiBjb3N0cyB0aGUgc2FtZSBlaXRoZXIgd2F5LgoJZm9yIGkgOj0gMDsgaSA8IDEwMDsgaSsrIHsKCQlmYWNhZGUuQ2FsbChjcm9zcyhjdXIpLCAidXBwZXIiLCAiZ25vIikKCX0KCXVhc3NlcnQuRXF1YWwodCwgIkdOTyIsIGZhY2FkZS5DYWxsKGNyb3NzKGN1ciksICJ1cHBlciIsICJnbm8iKSkKfQoKLy8gVGVzdE1hbGZvcm1lZFNjaGVtYUlzUmVqZWN0ZWRBdFByb3Bvc2FsIGNoZWNrcyB0aGUgb3RoZXIgdmFsaWRhdGlvbiBlZGdlOiBhCi8vIHNjaGVtYSB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgbmV2ZXIgYmVjb21lcyBhIGNhbmRpZGF0ZS4KZnVuYyBUZXN0TWFsZm9ybWVkU2NoZW1hSXNSZWplY3RlZEF0UHJvcG9zYWwoY3VyIHJlYWxtLCB0ICp0ZXN0aW5nLlQpIHsKCXVhc3NlcnQuQWJvcnRzQ29udGFpbnModCwgY3VyLCAibWFsZm9ybWVkIHNjaGVtYSIsIGZ1bmMoKSB7CgkJZmFjYWRlLlByb3Bvc2UoY3Jvc3MoY3VyKSwgYmFkU2NoZW1he30pCgl9KQp9Cgp0eXBlIGJhZFNjaGVtYSBzdHJ1Y3R7fQoKZnVuYyAoYmFkU2NoZW1hKSBTY2hlbWEoKSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gIlVwcGVyIHMiIH0gLy8gY2FwaXRhbCwgbm90IFthLXowLTlfXQpmdW5jIChiYWRTY2hlbWEpIEludm9rZShzdHJpbmcsIFtdc3RyaW5nKSBzdHJpbmcgICAgICAgICB7IHJldHVybiAiIiB9CgpmdW5jIGpvaW5WZXJicyh2IFtdc3RyaW5nKSBzdHJpbmcgewoJb3V0IDo9ICIiCglmb3IgaSwgcyA6PSByYW5nZSB2IHsKCQlpZiBpID4gMCB7CgkJCW91dCArPSAiLCAiCgkJfQoJCW91dCArPSBzCgl9CglyZXR1cm4gb3V0Cn0KIgw1MDAwMDAwdWdub3QSEgiQreJgEgszMDQ0MDd1Z25vdBqoAQo6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQIAUko/jSwAOonEP0X+r2647UW246Nfe75rO0n/ni2DyBJAz0YpvnkeQansxWhzb5yo1ndW/7YoriEkXCeLKSXeEklkVD3a6ESFAwHq4vs+l55VqSrmewMtY8YTgJTR3ZlyUBooZzFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFsdXV4ZQ==