Transaction executed successfully

Transaction Details

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

Transaction hash
10B85909EDE5BEC274F43984449564CA0A1D58741CA7C5A8DFA25C943DA4DFCB

Transaction overview

Status
Success
Execution completed
Block
#271558
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
67,591,249
Gas consumed
FEE
180000ugnot
Transaction fee

Participants

Sender
Package / Realm
Not available
Memo
None

Message

Message #1
m_addpkg
Caller
Arguments
g136j0m08pkm2lwwde9dmlx8uee26llent9s5cpf32000000ugnot

Execution log

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

Events

No events emitted by this transaction.

Raw encoded transaction

Csr6AgoML3ZtLm1fYWRkcGtnErj6AgooZzEzNmowbTA4cGttMmx3d2RlOWRtbHg4dWVlMjZsbGVudDlzNWNwZhL7+QIKBGhvbWUSF2duby5sYW5kL3Ivc2FtY3Jldy9ob21lGp0WCgpiYW5uZXIuZ25vEo4WcGFja2FnZSBob21lCgppbXBvcnQgImVuY29kaW5nL2Jhc2U2NCIKCi8vIFRoaXMgZmlsZSBpcyBzaGFyZWQsIHVuY2hhbmdlZCwgYnkgZXZlcnkgU2Ftb3VyYcOvIGhvbWUgcmVhbG0sIHNvIHRoZSBwYWdlcwovLyBrZWVwIG9uZSB2aXN1YWwgaWRlbnRpdHkuIFdoYXQgZGlmZmVycyBsaXZlcyBpbiBjb250ZW50Lmduby4KCi8vIHRvcmlpTWFzayBpcyB0aGUgU2Ftb3VyYcOvIENvb3AgbWFyaywgcmVkcmF3biBhcyB2ZWN0b3JzOiBhIHRvcmlpIGdhdGUgY3V0Ci8vIG91dCBvZiBhIGZ1bGwgY2lyY2xlLCBpbiBhIDQ4MHg0ODAgYm94LiBFdmVyeXRoaW5nIHBhaW50ZWQgdGhyb3VnaCB0aGUgbWFzawovLyB0YWtlcyB0aGUgc2hhcGUgb2YgdGhlIG1hcmsuCmNvbnN0IHRvcmlpTWFzayA9IGA8bWFzayBpZD0idG9yaWkiPjxjaXJjbGUgY3g9IjIzOCIgY3k9IjI0MCIgcj0iMjQwIiBmaWxsPSIjZmZmIi8+PGcgZmlsbD0iIzAwMCI+YCArCglgPHBhdGggZD0iTS0xMCA5MCBRMjM4IDE2NCA0OTAgOTAgTDQ5MCAxNDAgUTIzOCAxOTAgLTEwIDE0MCBaIi8+YCArCglgPHBhdGggZD0iTTEwMiAxNDAgTDE2NSAxNDAgTDE2MiAyMDYgTDk2IDIwNiBaIi8+YCArCglgPHBhdGggZD0iTTMwMiAxNDAgTDM2NCAxNDAgTDM3MCAyMDYgTDMwNCAyMDYgWiIvPmAgKwoJYDxyZWN0IHg9Ii0xMCIgeT0iMjA1IiB3aWR0aD0iNTAwIiBoZWlnaHQ9IjQxIi8+YCArCglgPHBhdGggZD0iTTg5IDI0NSBMMTU5IDI0NSBMMTQ1IDQ5MCBMNTUgNDkwIFoiLz5gICsKCWA8cmVjdCB4PSItMTAiIHk9IjI3NCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIzMiIvPmAgKwoJYDxwYXRoIGQ9Ik0zMDcgMjQ1IEwzNzcgMjQ1IEw0MTEgNDkwIEwzMjEgNDkwIFoiLz5gICsKCWA8cGF0aCBkPSJNMzgyIDI5NiBMNDkwIDM5OCBMNDkwIDQ1NSBMMzkwIDM1OCBaIi8+YCArCglgPC9nPjwvbWFzaz5gCgp0eXBlIGhlcm9UZXh0IHN0cnVjdCB7CglraWNrZXIgICBzdHJpbmcgLy8gc21hbGwgcmVkIGNhcHMgbGluZSBhYm92ZSB0aGUgdGl0bGUKCXRpdGxlICAgIHN0cmluZwoJc3VidGl0bGUgc3RyaW5nCgl0YWdsaW5lICBzdHJpbmcgLy8gcmVkIG1vbm9zcGFjZSBsaW5lCglmb290bGluZSBzdHJpbmcgLy8gZ3JleSBtb25vc3BhY2UgbGluZQoJYWx0ICAgICAgc3RyaW5nCn0KCi8vIGhlcm9TVkcgZHJhd3MgdGhlIHBhZ2UgYmFubmVyOiB0aGUgbWFyayBzZXQgaW4gYSByZWQgc3VuIG9uIHRoZSByaWdodCwgdGhlCi8vIHRleHQgc3RhY2sgb24gdGhlIGxlZnQuCmZ1bmMgaGVyb1NWRyhoIGhlcm9UZXh0KSBzdHJpbmcgewoJcmV0dXJuIGA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9Ijk2MCIgaGVpZ2h0PSIzMDAiIHZpZXdCb3g9IjAgMCA5NjAgMzAwIj5gICsKCQlgPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJiZyIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjEiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzBlMGUwZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzJhMGMxMCIvPjwvbGluZWFyR3JhZGllbnQ+YCArCgkJdG9yaWlNYXNrICsgYDwvZGVmcz5gICsKCQlgPHJlY3Qgd2lkdGg9Ijk2MCIgaGVpZ2h0PSIzMDAiIHJ4PSIxOCIgZmlsbD0idXJsKCNiZykiLz5gICsKCQlgPGcgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utb3BhY2l0eT0iLjA1Ij48cGF0aCBkPSJNMCA2MEg5NjBNMCAxMjBIOTYwTTAgMTgwSDk2ME0wIDI0MEg5NjAiLz48L2c+YCArCgkJYDxjaXJjbGUgY3g9Ijc5MCIgY3k9IjE1MCIgcj0iMTI4IiBmaWxsPSIjZTYzOTQ2Ii8+YCArCgkJYDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY4NiA0Nikgc2NhbGUoLjQzMzMpIj48cmVjdCB3aWR0aD0iNDgwIiBoZWlnaHQ9IjQ4MCIgZmlsbD0iI2Y0ZWZlNiIgbWFzaz0idXJsKCN0b3JpaSkiLz48L2c+YCArCgkJYDx0ZXh0IHg9IjU2IiB5PSI3OCIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSxNZW5sbyxtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIGxldHRlci1zcGFjaW5nPSIzIiBmaWxsPSIjZTYzOTQ2Ij5gICsgeG1sVGV4dChoLmtpY2tlcikgKyBgPC90ZXh0PmAgKwoJCWA8dGV4dCB4PSI1MiIgeT0iMTYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sU2Vnb2UgVUksc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9IjgwMCIgZm9udC1zaXplPSI3NiIgZmlsbD0iI2ZmZmZmZiI+YCArIHhtbFRleHQoaC50aXRsZSkgKyBgPC90ZXh0PmAgKwoJCWA8dGV4dCB4PSI1NiIgeT0iMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sU2Vnb2UgVUksc2Fucy1zZXJpZiIgZm9udC1zaXplPSIyMiIgZmlsbD0iI2U4ZTJkOCI+YCArIHhtbFRleHQoaC5zdWJ0aXRsZSkgKyBgPC90ZXh0PmAgKwoJCWA8dGV4dCB4PSI1NiIgeT0iMjM2IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLE1lbmxvLG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNiIgZmlsbD0iI2U2Mzk0NiI+YCArIHhtbFRleHQoaC50YWdsaW5lKSArIGA8L3RleHQ+YCArCgkJYDx0ZXh0IHg9IjU2IiB5PSIyNjYiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsTWVubG8sbW9ub3NwYWNlIiBmb250LXNpemU9IjEyIiBmaWxsPSIjOGE4YThhIj5gICsgeG1sVGV4dChoLmZvb3RsaW5lKSArIGA8L3RleHQ+YCArCgkJYDwvc3ZnPmAKfQoKZnVuYyBoZXJvSW1hZ2UoKSBzdHJpbmcgewoJcmV0dXJuICIhWyIgKyBtZFRleHQoaGVyby5hbHQpICsgIl0oZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiICsKCQliYXNlNjQuU3RkRW5jb2RpbmcuRW5jb2RlVG9TdHJpbmcoW11ieXRlKGhlcm9TVkcoaGVybykpKSArICIpIgp9ChrlpgEKC2NvbnRlbnQuZ25vEtSmAXBhY2thZ2UgaG9tZQoKLy8gZGVmYXVsdENyZXcgc2VlZHMgdGhlIHJvc3RlciBhdCBkZXBsb3kgdGltZTogZXZlcnlvbmUgd2hvIGNvbnRyaWJ1dGVkIHRvCi8vIGdubyB3aXRoIHNhbWNyZXcgb3ZlciB0aGUgbGFzdCBmb3VyIHllYXJzLCB0ZWFtIGJ5IHRlYW0sIGluIHRoZSBvcmRlciB0aGUKLy8gY2FyZHMgYXBwZWFyLiBGb3JtZXIgbWVtYmVycyBhcmUgaW4gdGhlIGFsdW1uaSB0ZWFtLCBkcmF3biBpbiBncmV5LiBDYXJkcyBsaW5rIHRvIGEgcHVibGljIHBhZ2UgdW50aWwgTGlua1Byb2ZpbGUgdGllcyBhIG1lbWJlciB0byB0aGVpcgovLyBnbm8ubGFuZCBpZGVudGl0eS4KY29uc3QgKAoJZ2ggICAgICAgID0gImh0dHBzOi8vZ2l0aHViLmNvbS8iCglhYm91dENyZXcgPSAiaHR0cHM6Ly93d3cuc2Ftb3VyYWkud29ybGQvYWJvdXQvIgopCgpmdW5jIGRlZmF1bHRDcmV3KCkgW11zdHJ1Y3R7IGlkLCBoYW5kbGUsIHJvbGUsIHRlYW0sIHVybCBzdHJpbmcgfSB7CglyZXR1cm4gW11zdHJ1Y3R7IGlkLCBoYW5kbGUsIHJvbGUsIHRlYW0sIHVybCBzdHJpbmcgfXsKCQl7Inp4eG1hIiwgInrDtMOWbWEiLCAiRm91bmRlciwgQ0VPICYgQ1RPIiwgImVuZ2luZWVyaW5nIiwgZ2ggKyAienh4bWEifSwKCQl7ImdoMHN0IiwgImdoMHN0IiwgIkdub1ZNIGNvcmUgwrcgNjIgUFJzIGluIGdubyIsICJlbmdpbmVlcmluZyIsIGdoICsgIm9tYXJzeSJ9LAoJCXsibWlrZWNpdG8iLCAibWlrZWNpdG8iLCAiR25vVk0gwrcgMzkgUFJzIGluIGdubyIsICJlbmdpbmVlcmluZyIsIGdoICsgIlZpbGxhcXVpcmFubSJ9LAoJCXsibWlrYWVsIiwgIk1pa2FlbCBWYWxsZW5ldCIsICJnbm8ubGFuZCAmIEdub1ZNIMK3IDQxIFBScyIsICJlbmdpbmVlcmluZyIsIGdoICsgIm12YWxsZW5ldCJ9LAoJCXsibG91cnMiLCAibG91cnMiLCAiVmFsaWRhdG9ycyAmIERldk9wcyIsICJlbmdpbmVlcmluZyIsIGdoICsgImxvdWlzMTQ0NDgifSwKCQl7ImRhdmlkIiwgImRhdmlkIiwgIkRldlJlbCDCtyA3MCBQUnMgaW4gZ25vIiwgImVuZ2luZWVyaW5nIiwgZ2ggKyAiZGF2ZC1nemwifSwKCQl7InlvaGFubiIsICJZb2hhbm4gRy4iLCAiQ28tZm91bmRlciDCtyBGaWxtIGRpcmVjdG9yIiwgIm1lZGlhIiwgYWJvdXRDcmV3fSwKCQl7ImZhbm55IiwgIkZhbm55IFouIiwgIkZpbG0gbWFrZXIgwrcgUGhvdG9ncmFwaGVyIiwgIm1lZGlhIiwgYWJvdXRDcmV3fSwKCQl7InRob21hcyIsICJUaG9tYXMgSS4iLCAiRmlsbSBtYWtlciDCtyBNZWRpYSBkaXJlY3RvciIsICJtZWRpYSIsIGFib3V0Q3Jld30sCgkJeyJvcmlhbmUiLCAiT3JpYW5lIFQuIiwgIlBob3RvZ3JhcGhlciDCtyBSZXBvcnRlciIsICJtZWRpYSIsIGFib3V0Q3Jld30sCgkJeyJuMGl6bjBpeiIsICJuMGl6bjBpeiIsICJnbm8ubGFuZCDCtyBUZXJpdG9yaSDCtyBaZW5hbyIsICJhbHVtbmkiLCBnaCArICJuMGl6bjBpeiJ9LAoJCXsiZGFkaWRvdSIsICJkYWRpZG91IiwgIkZyb250LWVuZCDCtyBUZXJpdG9yaSDCtyBaZW5hbyIsICJhbHVtbmkiLCBnaCArICJXYURhZGlkb3UifSwKCQl7Im1vb25pYSIsICJtb29uaWEiLCAiZ25vbG92ZSDCtyBnbm9kYW9raXQgwrcgWmVuYW8iLCAiYWx1bW5pIiwgZ2ggKyAibW9vbmlhIn0sCgkJeyJodGhpZXUxMTEwIiwgImh0aGlldTExMTAiLCAiR25vVk0gwrcgOCBQUnMgwrcgVGVyaXRvcmkiLCAiYWx1bW5pIiwgZ2ggKyAiaHRoaWV1MTExMCJ9LAoJCXsib21uaXdpcmVkIiwgIm9tbml3aXJlZCIsICJ0bTIgwrcgVGVyaXRvcmkiLCAiYWx1bW5pIiwgZ2ggKyAib21uaXdpcmVkIn0sCgkJeyJhbW96cGF5IiwgIkFtb3pQYXkiLCAiRGV2T3BzIMK3IGdubyBkb2NzIiwgImFsdW1uaSIsIGdoICsgIkFtb3pQYXkifSwKCX0KfQoKLy8gZGVmYXVsdFByb2ZpbGVzIGFyZSB0aGUgbWVtYmVycyBhbHJlYWR5IG9uIGNoYWluLgpmdW5jIGRlZmF1bHRQcm9maWxlcygpIFtdc3RydWN0IHsKCWlkICAgc3RyaW5nCglhZGRyIGFkZHJlc3MKCWhvbWUgc3RyaW5nCglsaW5lIHN0cmluZwp9IHsKCXJldHVybiBbXXN0cnVjdCB7CgkJaWQgICBzdHJpbmcKCQlhZGRyIGFkZHJlc3MKCQlob21lIHN0cmluZwoJCWxpbmUgc3RyaW5nCgl9ewoJCXsienh4bWEiLCAiZzE3NDd0NW0yZjA4cGxxamxyamsycTBxbGQ3NDY1aHh6OGdreDU5YyIsICIvci9nMTc0N3Q1bTJmMDhwbHFqbHJqazJxMHFsZDc0NjVoeHo4Z2t4NTljL2hvbWUiLCAiPDMgaXMgdGhlIGVuY3J5cHRpb24ga2V5LiJ9LAoJfQp9Cgpjb25zdCBtZW1iYSA9ICJodHRwczovL21lbWJhLnNhbW91cmFpLmFwcC9tYWlubmV0IgoKdmFyIGhlcm8gPSBoZXJvVGV4dHsKCWtpY2tlcjogICAiU0FNT1VSQcOPIENPT1AgwrcgR05PLkxBTkQgwrcgUEFSSVMiLAoJdGl0bGU6ICAgICJzYW1jcmV3IiwKCXN1YnRpdGxlOiAiVGhlIGduby5sYW5kIGNyZXcgb2YgU2Ftb3VyYcOvIENvb3AiLAoJdGFnbGluZTogICJjb3JlIGNvbnRyaWJ1dG9ycyDCtyBnZW5lc2lzIHZhbGlkYXRvciDCtyBkZXNpZ24gcGFydG5lciIsCglmb290bGluZTogImZpbG0gY3JldyDCtyBlbmdpbmVlcmluZyBzdHVkaW8gwrcgc2luY2UgMjAxNiIsCglhbHQ6ICAgICAgInNhbWNyZXcsIHRoZSBnbm8ubGFuZCBjcmV3IG9mIFNhbW91cmHDryBDb29wIiwKfQoKLy8gZGVmYXVsdFNsb3RzIGFuZCBkZWZhdWx0R2FsbGVyaWVzIHNlZWQgdGhlIHBhZ2UgYXQgZGVwbG95IHRpbWUuIFRoZXkgYXJlCi8vIGZ1bmN0aW9ucywgbm90IHBhY2thZ2UgdmFyaWFibGVzLCBzbyB0aGUgc2VlZCB0ZXh0IGlzIHN0b3JlZCBvbmNlIChpbiB0aGUKLy8gc2xvdCBhbmQgZ2FsbGVyeSB0cmVlcykgaW5zdGVhZCBvZiB0d2ljZS4gQWZ0ZXIgZGVwbG95IHRoZSBjaGFpbiBpcyB0aGUKLy8gc291cmNlIG9mIHRydXRoOiBlZGl0IHdpdGggU2V0IGFuZCBTZXRHYWxsZXJ5LCBub3QgYnkgcmVkZXBsb3lpbmcuCmZ1bmMgZGVmYXVsdFNsb3RzKCkgW11zdHJ1Y3R7IHNsdWcsIGJvZHkgc3RyaW5nIH0gewoJcmV0dXJuIFtdc3RydWN0eyBzbHVnLCBib2R5IHN0cmluZyB9ewoJCXsibGF5b3V0IiwgYDpoZXJvOgoKOmludHJvOgoKIyMg6YGTIENvcmUgY29udHJpYnV0b3JzLCBmb3VyIHllYXJzIHJ1bm5pbmcKCjpjb3JlOgoKIyMg5rqQIE9wZW4gc291cmNlCgo6b3NzOgoKOmdhbGxlcnkub3NzOgoKIyMg5L2cIFByb2R1Y3RzCgo6cHJvZHVjdHM6Cgo6Z2FsbGVyeS5wcm9kdWN0czoKCiMjIOe1hCBJbnNpZGUgTWVtYmEKCjptZW1iYToKCjpnYWxsZXJ5Lm1lbWJhOgoKIyMg5a6IIFdoYXQgd2UgcnVuCgo6cnVuOgoKIyMg5L6NIFRoZSBjcmV3Cgo6Y3JldzoKCiMjIOmMsiBnbm8ubGFuZCBvbiBmaWxtCgo6Z25vZmlsbToKCjpnYWxsZXJ5LmdubzoKCiMjIOelrSBFdmVudHMKCjpldmVudHM6Cgo6Z2FsbGVyeS5ldmVudHM6CgojIyDloLEgQ29udHJpYnV0aW9uIHJlcG9ydHMKCjpyZXBvcnRzOgoKOmdhbGxlcnkucmVwb3J0czoKCiMjIOWtpiBQZWVyIERldjogZ25vLmxhbmQsIHRhdWdodCBvbiB2aWRlbwoKOnBlZXJkZXY6Cgo6Z2FsbGVyeS5wZWVyZGV2OgoKIyMg5peFIFdFQiBUUklQCgo6d2VidHJpcDoKCjpnYWxsZXJ5LndlYnRyaXA6CgojIyDmmKAgRmlsbXMgYnkgdGhlIGNyZXcKCjpmaWxtczoKCjpnYWxsZXJ5LmZpbG1zOgoKIyMg6KiYIEZyb20gdGhlIGJsb2cKCjpibG9nOgoKOmdhbGxlcnkuYmxvZzoKCiMjIOWNsCBPbiBjaGFpbgoKOnBhY2thZ2VzOgoKIyMg6ZaAIEZpbmQgdXMKCjpjb250YWN0OgoKLS0tCgoqVGhpcyBwYWdlIGlzIGEgY29udHJhY3QuKiBgICsgImA6cmVhbG06YCIgKyBgIMK3IHJldiA6cmV2OiDCtyBibG9jayA6aGVpZ2h0OiBvbiA6Y2hhaW5pZDogwrcgZXZlcnkgcG9zdGVyIG9uIGl0IGlzIGRyYXduIG9uIGNoYWluIMK3IFtzbG90c10oL3Ivc2FtY3Jldy9ob21lOnNsb3RzKQoKOmFzY2lpOgpgfSwKCgkJLy8gVGhlIFNhbW91cmHDryBDb29wIG1hcmsgYWdhaW4sIGFzIGEgc2lnbi1vZmYsIGRyYXduIGluIGhhbGYgYmxvY2tzIGZyb20KCQkvLyB0aGUgbG9nbydzIG93biBwaXhlbHMuCgkJeyJhc2NpaSIsICJgYGAiICsgYAogICAgICAgICAgICAgIOKWhOKWhOKWhOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWhOKWhOKWhAogICAgICAgICAg4paE4paE4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paE4paECiAgICAgICDiloTiloTilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojiloTiloQKICAgICDiloTilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojiloQKICAgIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiAogICAgICAgICDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloAKICDiloTiloQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDiloTiloQKIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAgICAgIOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhCAgICAgIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiAriloTilojilojilojilojilojilojilojiloggICAgICDilojilojilojilojilojilojilojilojilojilojilojilojiloggICAgICDilojilojilojilojilojilojilojilojilojiloQgICAgICAgUyBBIE0gTyBVIFIgQSDDjyAgIEMgUiBFIFcK4paA4paA4paA4paA4paA4paA4paA4paA4paAICAgICAg4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paAICAgICAg4paA4paA4paA4paA4paA4paA4paA4paA4paA4paACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbG0gY3JldyDCtyBlbmdpbmVlcmluZyBzdHVkaW8K4paI4paI4paI4paI4paI4paI4paI4paIICAgICAgIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWhCAgICAgIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAgICAgICBnbm8ubGFuZCBjb3JlIGNvbnRyaWJ1dG9ycwriloDiloDiloDiloDiloDiloDiloDiloAgICAgICDiloTilojilojilojilojilojilojilojilojilojilojilojilojilojiloggICAgICDilojilojilojilojilojilojilojilojiloggICAgICAgUGFyaXMgwrcgc2luY2UgMjAxNgogICAgICAgICAgICAgIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAgICAgIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWgAog4paI4paI4paI4paI4paI4paI4paAICAgICAg4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paIICAgICAgIOKWgOKWiOKWiOKWiOKWiOKWiOKWiAogIOKWiOKWiOKWiOKWiOKWiCAgICAgICDilojilojilojilojilojilojilojilojilojilojilojilojilojilojiloggICAgICAgICDiloDilojilojilogKICAg4paI4paI4paI4paIICAgICAgIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAgICAgICDiloQgICDiloAKICAgIOKWgOKWiOKWiCAgICAgICDilojilojilojilojilojilojilojilojilojilojilojilojilojilojiloggICAgICAg4paA4paI4paECiAgICAg4paAICAgICAgICDilojilojilojilojilojilojilojilojilojilojilojilojilojilojiloggICAgICAgIOKWiOKWgAogICAgICAgICAgICAgIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiAogICAgICAgICAgICAg4paE4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paICiAgICAgICAgICAgICAg4paA4paA4paA4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paA4paACmAgKyAiYGBgIn0sCgoJCXsiaW50cm8iLCBgPiAqKnNhbWNyZXcqKiBpcyB0aGUgZ25vLmxhbmQgdGVhbSBvZiBbU2Ftb3VyYcOvIENvb3BdKGh0dHBzOi8vd3d3LnNhbW91cmFpLndvcmxkKSwgYSB3b3JrZXIgY29vcGVyYXRpdmUgZnJvbSBQYXJpcyB0aGF0IGlzIGEgZmlsbSBjcmV3IGFuZCBhbiBlbmdpbmVlcmluZyBzdHVkaW8gaW4gb25lIGNvbXBhbnkuCgpXZSBjb250cmlidXRlIHRvIHRoZSBjaGFpbidzIGNvcmUsIHJ1biBvbmUgb2YgaXRzIGdlbmVzaXMgdmFsaWRhdG9ycywgYnVpbGQgb3VyIG93biBwcm9kdWN0cyBvbiBpdCBhcyBhIGRlc2lnbiBwYXJ0bmVyLCByZXNlYXJjaCBob3cgb3JnYW5pc2F0aW9ucyBnb3Zlcm4gdGhlbXNlbHZlcywgYW5kIGZpbG0gdGhlIGVjb3N5c3RlbSBhcyBpdCBncm93cy5gfSwKCgkJeyJjb3JlIiwgYFRoZSBjcmV3IGhhcyAqKlsyNTYgbWVyZ2VkIHB1bGwgcmVxdWVzdHMgaW4gZ25vbGFuZy9nbm9dKGh0dHBzOi8vZ2l0aHViLmNvbS9nbm9sYW5nL2duby9wdWxscz9xPWlzJTNBcHIraXMlM0FtZXJnZWQrYXV0aG9yJTNBb21hcnN5K2F1dGhvciUzQVZpbGxhcXVpcmFubSthdXRob3IlM0FtdmFsbGVuZXQrYXV0aG9yJTNBZGF2ZC1nemwrYXV0aG9yJTNBbjBpem4waXorYXV0aG9yJTNBaHRoaWV1MTExMCthdXRob3IlM0Ftb29uaWErYXV0aG9yJTNBV2FEYWRpZG91K2F1dGhvciUzQW9tbml3aXJlZCthdXRob3IlM0FBbW96UGF5KSoqLCBhYm91dCBvbmUgaW4gZWxldmVuIG9mIGV2ZXJ5IFBSIG1lcmdlZCB0aGVyZSwgYW5kIG1vcmUgZWFjaCB5ZWFyOiA0OCBpbiAyMDI0LCA3OSBpbiAyMDI1LCAxMjggc28gZmFyIGluIDIwMjYuCgp8IHwgd2hhdCB3ZSBkbyB8CnwgLS0tIHwgLS0tIHwKfCAqKkdub1ZNKiogfCBUaGUgaW50ZXJwcmV0ZXIsIGl0cyB0eXBlIGNoZWNrZXIsIHN0ZGxpYnMgYW5kIHRlc3Qgc3VpdGUuIHwKfCAqKlNlY3VyaXR5KiogfCBIYXJkZW5pbmcgdGhlIFZNLCBjb25zZW5zdXMgYW5kIHAycCBhZ2FpbnN0IGNyYXNoZXMsIG92ZXJmbG93cyBhbmQgbWFsZm9ybWVkIGlucHV0LiB8CnwgKipDaGFpbiAmIHRvb2xpbmcqKiB8IGduby5sYW5kIG5vZGUsIHRtMiwgZ2VuZXNpcyB0b29scywgYCArICJgZ25vZGV2YCIgKyBgLCBkb2NzLiB8CnwgKipWYWxpZGF0b3JzKiogfCBBIGdlbmVzaXMgdmFsaWRhdG9yLCBbZ25vbW9uaXRvcmluZ10oaHR0cHM6Ly9naXRodWIuY29tL3NhbW91cmFpd29ybGQvZ25vbW9uaXRvcmluZyksIFt2YWxpZGF0b3IgdG9vbGluZ10oaHR0cHM6Ly9naXRodWIuY29tL3NhbW91cmFpd29ybGQvZ25vLXZhbGlkYXRvci10b29scykgYW5kIHRoZSBba2F0YW5hXShodHRwczovL2dpdGh1Yi5jb20vc2Ftb3VyYWl3b3JsZC9rYXRhbmEpIEdvdkRBTyBkYWVtb24uIHwKfCAqKkdvdmVybmFuY2UgcmVzZWFyY2gqKiB8IE91ciBbcmVzZWFyY2ggbGFiXShodHRwczovL3NhbW91cmFpd29ybGQuZ2l0aHViLmlvL2dvdi1yZXNlYXJjaC13aWtpLykgc3R1ZGllcyBjb29wZXJhdGl2ZXMsIERBT3MgYW5kIG9wZW4tc291cmNlIHByb2plY3RzLiBbZ25vZGFva2l0XShodHRwczovL2dpdGh1Yi5jb20vc2Ftb3VyYWl3b3JsZC9nbm9kYW9raXQpIGFuZCBNZW1iYSBhcmUgaXRzIG91dHB1dC4gfAp8ICoqRGVzaWduIHBhcnRuZXIqKiB8IFdlIHNoaXAgb3VyIG93biBwcm9kdWN0cyBvbiBnbm8ubGFuZCBhbmQgc2VuZCB3aGF0IHRoZXkgdGVhY2ggdXMgYmFjayB1cHN0cmVhbS4gfAp8ICoqRG9jdW1lbnRhdGlvbioqIHwgUmV0cmVhdCBhbmQgZXZlbnQgcmVwb3J0cyBmb3IgdGhlIGNvcmUgdGVhbSwgdGhlIFBlZXIgRGV2IHR1dG9yaWFscywgdGhlIFdFQiBUUklQIGludGVydmlld3MuIHxgfSwKCgkJeyJydW4iLCBgLSAqKkEgZ2VuZXNpcyB2YWxpZGF0b3IuKiogT25lIG9mIHRoZSBmb3VyIHZhbGlkYXRvcnMgc2VjdXJpbmcgYCArICJgZ25vbGFuZC0xYCIgKyBgIHNpbmNlIG1haW5uZXQgbGF1bmNoIG9uIDEyIFNlcHRlbWJlciAyMDI2LgotICoqVmFsaWRhdG9yIG1vbml0b3JpbmcuKiogW2dub21vbml0b3JpbmddKGh0dHBzOi8vZ2l0aHViLmNvbS9zYW1vdXJhaXdvcmxkL2dub21vbml0b3JpbmcpIHdhdGNoZXMgdGhlIGNoYWluIGFuZCBwYWdlcyB0aGUgaHVtYW5zLgotICoqR292REFPIHRvb2xpbmcuKiogW2thdGFuYV0oaHR0cHM6Ly9naXRodWIuY29tL3NhbW91cmFpd29ybGQva2F0YW5hKSBhdXRvbWF0ZXMgdmFsaWRhdG9yIGVqZWN0aW9uIGZvciBHb3ZEQU8uYH0sCgoJCXsicHJvZHVjdHMiLCBgUHJvZHVjdHMgYnVpbHQgYW5kIHJ1biBieSB0aGUgY29vcC4gVGhlIGxpdmUgb25lcyBhcmUgb3BlbiB0byBhbnlvbmUuYH0sCgoJCXsibWVtYmEiLCBgW01lbWJhXShodHRwczovL21lbWJhLnNhbW91cmFpLmFwcCkgaXMgYW4gZXhwZXJpbWVudGFsIG9wZXJhdGluZyBzeXN0ZW0gZm9yIGRlY2VudHJhbGlzZWQgb3JnYW5pc2F0aW9ucywgYW5kIHRoZSBkaXJlY3Qgb3V0cHV0IG9mIG91ciBnb3Zlcm5hbmNlIHJlc2VhcmNoLiBJdCBpcyBNSVQtbGljZW5zZWQgYW5kIFtvcGVuIHNvdXJjZV0oaHR0cHM6Ly9naXRodWIuY29tL3NhbW91cmFpd29ybGQvbWVtYmEpLiBFYWNoIG9mIGl0cyBwYXJ0cyBpcyBhIHByb2R1Y3QgaW4gaXRzIG93biByaWdodC4gSG92ZXIgYSBjYXJkIGZvciBkZXRhaWxzLgoKRXZlcnkgZ2FtZSB1c2VzIG9uZSBkYWlseSBzZWVkIGZvciBldmVyeW9uZSwgZHJhd24gZnJvbSBhIGduby5sYW5kIGJsb2NrLCBhbmQgbmVlZHMgbm8gd2FsbGV0LmB9LAoKCQl7Imdub2ZpbG0iLCBgVGhlIGNyZXcgZmlsbXMgZ25vLmxhbmQgZnJvbSB0aGUgaW5zaWRlOiBicmFuZCBmaWxtcywgY29yZS10ZWFtIHJldHJlYXRzLCBwb3J0cmFpdHMgb2YgdGhlIHRlYW1zIGJ1aWxkaW5nIG9uIGl0LmB9LAoKCQl7Im9zcyIsIGBFdmVyeXRoaW5nIHdlIGNhbiBvcGVuLCB3ZSBvcGVuLiBUaGVzZSBhcmUgb3VyIHB1YmxpYyBnbm8gcmVwb3NpdG9yaWVzIG9uIFtHaXRIdWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9zYW1vdXJhaXdvcmxkKS5gfSwKCgkJeyJldmVudHMiLCBgV2UgcHJvZHVjZSB0aGUgZXZlbnRzIHdlIGJlbGlldmUgaW4sIGFuZCB3ZSBmaWxtIHRoZSByZXN0IG9mIHRoZSBlY29zeXN0ZW0ncy4gKipQYXJpcyBQMlAgRmVzdGl2YWwqKjogZml2ZSBkYXlzIG9mIHBlZXItdG8tcGVlciBhdCBHcm91bmQgQ29udHJvbCwgZnJlZSwgZm9yIDUsMDAwIHBlb3BsZS4gVGhlIMOJZGl0aW9uICMxIHRhbGtzIGFyZSBbYWxsIG9ubGluZV0oaHR0cHM6Ly9wMnAuc2Ftb3VyYWkudHYpLiAqKkh5cGVyIEhhY2t0aXZlIEZlc3RpdmFsKio6IGEgZmlsbSBmZXN0aXZhbCBmb3IgaW5kZXBlbmRlbnQgZG9jdW1lbnRhcmllcyBmdW5kZWQgYnkgU2Ftb3VyYcOvIEdyYW50cy4gSXQgaGFzIGhhZCB0aHJlZSBlZGl0aW9ucywgdHdvIGF0IG1rMiBRdWFpIGRlIFNlaW5lLCBhbmQgc2VsbHMgaXRzIHRpY2tldHMgb24gWmVuYW8uYH0sCgoJCXsicmVwb3J0cyIsIGBFYWNoIHllYXIsIG9uZSBmaWxtIHNob3dzIGV2ZXJ5dGhpbmcgdGhlIGNvb3Agc2hpcHBlZC5gfSwKCgkJeyJwZWVyZGV2IiwgYEEgMTctbGVzc29uIGN1cnJpY3VsdW0sIHByb2R1Y2VkIGVuZCB0byBlbmQgYnkgdGhlIGNvb3AsIHRoYXQgdGFrZXMgYSBkZXZlbG9wZXIgZnJvbSBhbiBlbXB0eSBtYWNoaW5lIHRvIEdvdkRBTyBhbmQgdGhlIGludGVycmVhbG0gc3BlYy4gV2F0Y2ggaXQgb24gW3RoZSBQZWVyIERldiBjaGFubmVsXShodHRwczovL3d3dy55b3V0dWJlLmNvbS9AcGVlcmRldmxlYXJuaW5nKSBvciBhcyBbb25lIHBsYXlsaXN0XShodHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMSlpyUWlreWZNYy1rQm9qWGdBb2pPejRVUVB1cTREaVkpLmB9LAoKCQl7IndlYnRyaXAiLCBgRWlnaHQgY29udmVyc2F0aW9ucyB3aXRoIGduby5sYW5kIGFuZCB3ZWIzIGJ1aWxkZXJzLCBmaWxtZWQgYnkgdGhlIGNyZXcgaW4gMjAyNC5gfSwKCgkJeyJmaWxtcyIsIGA0MCBmZXN0aXZhbCBzZWxlY3Rpb25zLCAzIHdpbnMuIFtUaGUgVW5kZXJncm91bmQgU2lzdGluZSBDaGFwZWxdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9ZnNSRkhtZGl5R0UpIHRvb2sgQmVzdCBEb2N1bWVudGFyeSBhdCB0aGUgTG9uZG9uIEluZGVwZW5kZW50IEZpbG0gQXdhcmRzIGFuZCB3YXMgcmVsZWFzZWQgZnJlZSBvbiBib3RoIElQRlMgYW5kIFlvdVR1YmUuYH0sCgoJCXsiYmxvZyIsIGBSZXNlYXJjaCBub3RlcywgZXNzYXlzIGFuZCBwcm9kdWN0IHdyaXRlLXVwcyBmcm9tIHRoZSBjb29wLiBbQWxsIHBvc3RzXShodHRwczovL3d3dy5zYW1vdXJhaS53b3JsZC9ibG9nLykgwrcgW1JTU10oaHR0cHM6Ly93d3cuc2Ftb3VyYWkud29ybGQvYmxvZy9yc3MueG1sKWB9LAoKCQl7InBhY2thZ2VzIiwgYCoqUmVhbG1zOioqIFtBcHAgU3RvcmVdKC9yL3NhbWNyZXcvbWVtYmFfYXBwc3RvcmVfdjMpIMK3IFtmZWVkXSgvci9zYW1jcmV3L21lbWJhX2ZlZWRfdjEpIMK3IFtEQU8gY2hhbm5lbHNdKC9yL3NhbWNyZXcvbWVtYmFfZGFvX2NoYW5uZWxzX3YyKSDCtyBbcXVlc3RzXSgvci9zYW1jcmV3L21lbWJhX3F1ZXN0X2F0dGVzdGF0aW9uX3YxKSDCtyBbcmV2aWV3c10oL3Ivc2FtY3Jldy9tZW1iYV9yZXZpZXdzX3YyKSDCtyBbZmVlZGJhY2tdKC9yL3NhbWNyZXcvbWVtYmFfZmVlZGJhY2tfdjIpIMK3IFtlc2Nyb3ddKC9yL3NhbWNyZXcvZXNjcm93X3YzKSDCtyBbbWFya2V0IGNvbmZpZ10oL3Ivc2FtY3Jldy9tZW1iYV9tYXJrZXRfY29uZmlnKSDCtyBbYXJjYWRlIGxlYWRlcmJvYXJkXSgvci9zYW1jcmV3L21lbWJhX2FyY2FkZV9sZWFkZXJib2FyZF92MSkgwrcgW0dub0J1aWxkZXJzIGJhZGdlc10oL3Ivc2FtY3Jldy9nbm9idWlsZGVyc19iYWRnZXNfdjIpCgoqKkxpYnJhcmllczoqKiBbYXZsXSgvcC9zYW1jcmV3L2F2bCkgwrcgW3BpZWNoYXJ0XSgvcC9zYW1jcmV3L3BpZWNoYXJ0L3YwKSDCtyBbdGFibGVzb3J0XSgvcC9zYW1jcmV3L3RhYmxlc29ydC92MCkgwrcgW3VybGZpbHRlcl0oL3Avc2FtY3Jldy91cmxmaWx0ZXIvdjApYH0sCgoJCXsiY29udGFjdCIsIGBbc2Ftb3VyYWkud29ybGRdKGh0dHBzOi8vd3d3LnNhbW91cmFpLndvcmxkKSDCtyBbR2l0SHViXShodHRwczovL2dpdGh1Yi5jb20vc2Ftb3VyYWl3b3JsZCkgwrcgW1NhbW91cmHDryBUVl0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vY2hhbm5lbC9VQzBnRXhTU3p5VThnVHFVam9ZZXJJOEEpIMK3IFtQZWVyIERldl0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vQHBlZXJkZXZsZWFybmluZykgwrcgW1hdKGh0dHBzOi8vd3d3LnR3aXR0ZXIuY29tL3NhbW91cmFpY29vcCkgwrcgW1RlbGVncmFtXShodHRwczovL3QubWUvc2Ftb3VyYWljb29wKSDCtyBoZWxsb0BzYW1vdXJhaS5jb29wYH0sCgl9Cn0KCmNvbnN0ICgKCXl0ICAgPSAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0iCglnaHN3ID0gImh0dHBzOi8vZ2l0aHViLmNvbS9zYW1vdXJhaXdvcmxkLyIKKQoKZnVuYyBkZWZhdWx0R2FsbGVyaWVzKCkgW11zdHJ1Y3R7IG5hbWUsIHNwZWMgc3RyaW5nIH0gewoJcmV0dXJuIFtdc3RydWN0eyBuYW1lLCBzcGVjIHN0cmluZyB9ewoJCXsiZ25vIiwgYApnbm8gfCBHbm86IFRoZSBQb3dlciBUbyBCdWlsZCBXaGF0IE1hdHRlcnMgfCBnbm8ubGFuZCDCtyBicmFuZCBmaWxtIHwgYCArIHl0ICsgYE05MjBQTzN5ckhrCmdubyB8IEFsaWdubWVudCBSZXRyZWF0LCBUdXJpbiB8IGduby5sYW5kIGNvcmUgdGVhbSDCtyByZXRyZWF0IHJlcG9ydCB8IGAgKyB5dCArIGAzY3pNSzNzMzBLUQpnbm8gfCBJbnNpZGUgT25ibG9jIHwgZ25vLmxhbmQgwrcgdGVhbSBwb3J0cmFpdCDCtyBOb3YgMjAyNCB8IGAgKyB5dCArIGA3dW14SFlESjRCawpgfSwKCgkJeyJwcm9kdWN0cyIsIGAKcHJvZHVjdCB8IE1lbWJhIHwgRXhwZXJpbWVudGFsIMK3IG9yZ2FuaXphdGlvbnMgT1MgfCBodHRwczovL21lbWJhLnNhbW91cmFpLmFwcApwcm9kdWN0IHwgWmVuYW8gfCBCZXRhIMK3IHRpY2tldGluZyAmIGNvbW11bml0aWVzIHwgaHR0cHM6Ly96ZW5hby5pbwpwcm9kdWN0IHwgZ25vbG92ZSB8IExpdmUgwrcgd2hvIGJ1aWxkcyBnbm8ubGFuZCB8IGh0dHBzOi8vZ25vbG92ZS53b3JsZApwcm9kdWN0IHwgVmlzaW8gfCBMaXZlIMK3IHZpZGVvIG1lZXRpbmdzLCBubyBhY2NvdW50IHwgaHR0cHM6Ly92aXNpby5zYW1vdXJhaS5hcHAKcHJvZHVjdCB8IEdyZWZmb24gfCBCZXRhIMK3IHNlbGYtaG9zdCBpbiBvbmUgY2xpY2sgfCBodHRwczovL2dyZWZmb24uaW8KcHJvZHVjdCB8IFJlcG9ydHogfCBMaXZlIMK3IHRoZSBjb21tb25zLCBmcm9tIEdpdEh1YiB8IGh0dHBzOi8vcmVwb3J0ei5kZXYKcHJvZHVjdCB8IENvb3AgTmF0aW9uIHwgTGl2ZSDCtyB0aGUgY29vcGVyYXRpdmUgbWFuaWZlc3RvIHwgaHR0cHM6Ly9jb29wbmF0aW9uLmZyCnByb2R1Y3QgfCBBbGFybUZyaWVuZHMgfCBTb29uIMK3IGZyaWVuZHMgd2FrZSB5b3UgdXAgfCBodHRwczovL2FsYXJtZnJpZW5kcy5zYW1vdXJhaS5hcHAKYH0sCgoJCXsibWVtYmEiLCBgCm1lbWJhIHwgTXVsdGlzaWcgV2FsbGV0IHwgRm9yIG9yZ2FuaXphdGlvbnMgwrcgQWRlbmEgJiBnbm9rZXkgfCBgICsgbWVtYmEgKyBgL211bHRpc2lnIHwgQ3JlYXRlIG9yIGltcG9ydCBhIG11bHRpc2lnLCBwcm9wb3NlIHNlbmRzIGFuZCBjb250cmFjdCBjYWxscywgY29sbGVjdCBzaWduYXR1cmVzIGZyb20gQWRlbmEgb3IgZ25va2V5LCB0aGVuIGJyb2FkY2FzdC4KbWVtYmEgfCBEQU8gTWFuYWdlbWVudCB8IENyZWF0ZSwgdm90ZSwgZXhlY3V0ZSDCtyBHb3ZEQU8gfCBgICsgbWVtYmEgKyBgL2RhbyB8IEJyb3dzZSBHb3ZEQU8gYW5kIGNvbW11bml0eSBEQU9zLCB2b3RlLCBleGVjdXRlLCBjcmVhdGUgeW91ciBvd24gYW5kIHRhbGsgaW4gREFPIGNoYW5uZWxzLgptZW1iYSB8IFZhbGlkYXRvciBNb25pdG9yaW5nIHwgUmVsaWFiaWxpdHkgc2NvcmVzIMK3IGhhY2tlciB2aWV3IHwgYCArIG1lbWJhICsgYC92YWxpZGF0b3JzIHwgRXZlcnkgdmFsaWRhdG9yIHNjb3JlZCBmb3IgcmVsaWFiaWxpdHksIHBsdXMgYSBsaXZlIGNvbnNlbnN1cyBoYWNrZXIgdmlldy4KbWVtYmEgfCBBbGVydGluZyB8IEdvdkRBTyAmIHZhbGlkYXRvcnMgwrcgMyBjaGFubmVscyB8IGAgKyBtZW1iYSArIGAvYWxlcnRzIHwgR292REFPIGFuZCB2YWxpZGF0b3IgYWxlcnRzIG9uIERpc2NvcmQsIFNsYWNrIGFuZCBUZWxlZ3JhbS4KbWVtYmEgfCBPbi1jaGFpbiBBcHAgU3RvcmUgfCBSZWdpc3RyeSDCtyBzdWJtaXNzaW9ucyDCtyBjdXJhdGlvbiB8IGAgKyBtZW1iYSArIGAvYXBwcyB8IFRoZSBlY29zeXN0ZW0ncyBhcHBzLCB3aXRoIGFuIG9uLWNoYWluIHJlZ2lzdHJ5LCBzdWJtaXNzaW9ucyBhbmQgY3VyYXRpb24uCm1lbWJhIHwgRGlyZWN0b3J5IHwgREFPcyDCtyByZWFsbXMgwrcgcGFja2FnZXMgwrcgdXNlcnMgfCBgICsgbWVtYmEgKyBgL2RpcmVjdG9yeSB8IFNlYXJjaCBEQU9zLCByZWFsbXMsIHBhY2thZ2VzLCB0b2tlbnMgYW5kIHVzZXJzLCB3aXRoIHNvdXJjZSBhbmQgcmVuZGVyIHNpZGUgYnkgc2lkZS4KbWVtYmEgfCBEZXYgUmVwb3J0cyB8IGdub2xvdmUgc2NvcmVib2FyZCDCtyB3ZWVrbHkgcmVwb3J0cyB8IGAgKyBtZW1iYSArIGAvZ25vbG92ZSB8IFRoZSBnbm9sb3ZlIGNvbnRyaWJ1dG9yIHNjb3JlYm9hcmQsIHdlZWtseSByZXBvcnRzIGFuZCB0ZWFtIGFuYWx5dGljcy4KbWVtYmEgfCBUb2tlbiBMYXVuY2hlciB8IEdSQzIwIMK3IGJyb3dzZSAmIGxhdW5jaCB8IGAgKyBtZW1iYSArIGAvdG9rZW5zIHwgQnJvd3NlIEdSQzIwIHRva2VucyBhbmQgbGF1bmNoIHlvdXIgb3duLgptZW1iYSB8IFNvY2lhbCBGZWVkIHwgT24tY2hhaW4gcG9zdHMgwrcgb3BlbiBtb2RlcmF0aW9uIHwgYCArIG1lbWJhICsgYC9mZWVkIHwgQW4gb24tY2hhaW4gc29jaWFsIGZlZWQgd2l0aCBhIHB1YmxpYyBtb2RlcmF0aW9uIGxvZy4KbWVtYmEgfCBRdWVzdHMgJiBCYWRnZXMgfCBHbm9CdWlsZGVycyDCtyA4NSBxdWVzdHMgwrcgOCByYW5rcyB8IGAgKyBtZW1iYSArIGAvcXVlc3RzIHwgR25vQnVpbGRlcnM6IDg1IHF1ZXN0cywgOCByYW5rcywgYSBsZWFkZXJib2FyZCBhbmQgb24tY2hhaW4gYmFkZ2VzLgpnYW1lIHwgU3BhY2UgSW52YWRlcnMgfCBEYWlseSBvciBmcmVlIHBsYXkgwrcgbm8gd2FsbGV0IHwgYCArIG1lbWJhICsgYC9nYW1lL3NwYWNlLWludmFkZXJzIHwgTWFyY2hpbmcgd2F2ZXMsIGNvbWJvcywgYSBteXN0ZXJ5IFVGTyBhbmQgZGVzdHJ1Y3RpYmxlIGJ1bmtlcnMuIERhaWx5IG9yIGZyZWUgcGxheSwga2V5Ym9hcmQgb3IgdG91Y2guCmdhbWUgfCBCbG9jayBQYXJ0eSB8IERhaWx5IDTDlzQgbWVyZ2Ugwrcgc2VlZGVkIGJ5IGEgYmxvY2sgfCBgICsgbWVtYmEgKyBgL2dhbWUgfCBBIGRhaWx5IHRpbGUtbWVyZ2UgcHV6emxlLiBFdmVyeW9uZSBnZXRzIHRoZSBzYW1lIGJvYXJkLCBzZWVkZWQgZnJvbSBhIHJlYWwgZ25vLmxhbmQgYmxvY2suIFN0cmVha3MgYW5kIGEgZGFpbHkgbGVhZGVyYm9hcmQuCmdhbWUgfCBCQVJSSUNBREUgfCA5MC1zZWNvbmQgbGFuZSBkZWZlbmNlIMK3IDggd2F2ZXMgfCBgICsgbWVtYmEgKyBgL2dhbWUvYmFycmljYWRlIHwgSG9sZCB0aGUgYmFycmljYWRlIGFnYWluc3QgVGhlIE9yZGVyIGZvciA4IHdhdmVzIHVwIHRvIHRoZSBCcm9hZGNhc3QgVG93ZXIsIHRoZW4gYW4gZW5kbGVzcyBzaWVnZS4gUnVucyBjYW4gYmUgY2VydGlmaWVkIG9uIGNoYWluLgpgfSwKCgkJeyJvc3MiLCBgCm9zcyB8IG1lbWJhIHwgTXVsdGlzaWcgJiBEQU8gZ292ZXJuYW5jZSBmb3IgZ25vLmxhbmQgfCBgICsgZ2hzdyArIGBtZW1iYQpvc3MgfCBnbm9sb3ZlIHwgVGhlIGduby5sYW5kIGNvbnRyaWJ1dG9yIHNjb3JlYm9hcmQgfCBgICsgZ2hzdyArIGBnbm9sb3ZlCm9zcyB8IHplbmFvIHwgRXZlbnQgdGlja2V0aW5nICYgY29tbXVuaXRpZXMgfCBgICsgZ2hzdyArIGB6ZW5hbwpvc3MgfCBnbm9kYW9raXQgfCBBIGZyYW1ld29yayBmb3IgREFPcyBpbiBHbm8gfCBgICsgZ2hzdyArIGBnbm9kYW9raXQKb3NzIHwgZ25vbW9uaXRvcmluZyB8IE1vbml0b3JpbmcgZm9yIGdubyB2YWxpZGF0b3JzIHwgYCArIGdoc3cgKyBgZ25vbW9uaXRvcmluZwpvc3MgfCBrYXRhbmEgfCBHb3ZEQU8gdmFsaWRhdG9yLWVqZWN0aW9uIGRhZW1vbiB8IGAgKyBnaHN3ICsgYGthdGFuYQpvc3MgfCBnbm8tdmFsaWRhdG9yLXRvb2xzIHwgVmFsaWRhdG9ycyAmIHNlbnRyaWVzIGFzIGNvZGUgfCBgICsgZ2hzdyArIGBnbm8tdmFsaWRhdG9yLXRvb2xzCm9zcyB8IGdvdi1yZXNlYXJjaC13aWtpIHwgVGhlIGdvdmVybmFuY2UgcmVzZWFyY2ggbGFiIHwgYCArIGdoc3cgKyBgZ292LXJlc2VhcmNoLXdpa2kKb3NzIHwgcGVlcmRldiB8IFRoZSBQZWVyIERldiBjaGFubmVsLCBpbiB0aGUgb3BlbiB8IGAgKyBnaHN3ICsgYHBlZXJkZXYKb3NzIHwgdmFsaWRhdG9yLWRpYWdub3N0aWNzIHwgVGhlIHZhbGlkYXRvciBmaXJlLWRyaWxsIHBvcnRhbCB8IGAgKyBnaHN3ICsgYHZhbGlkYXRvci1kaWFnbm9zdGljcwpvc3MgfCBnbm8tb25ib2FyZGluZy1ib3QgfCBWYWxpZGF0b3Igb25ib2FyZGluZywgb24gRGlzY29yZCB8IGAgKyBnaHN3ICsgYGduby1vbmJvYXJkaW5nLWJvdApvc3MgfCBnbm8tZ292ZGFvLWFjdGl2aXR5LXBhcnNlciB8IEdvdkRBTyB2b3RlciBhY3Rpdml0eSAmIHRlc3QgZW52IHwgYCArIGdoc3cgKyBgZ25vLWdvdmRhby1hY3Rpdml0eS1wYXJzZXIKYH0sCgoJCXsiZXZlbnRzIiwgYApmZXN0aXZhbCB8IFBhcmlzIFAyUCBGZXN0aXZhbCB8IENvLWZvdW5kZWQgYnkgesO0w5ZtYSDCtyBHcm91bmQgQ29udHJvbCB8IGAgKyB5dCArIGBQUTlJNzN0Sm9iVQpmZXN0aXZhbCB8IEh5cGVyIEhhY2t0aXZlIEZlc3RpdmFsIHwgMyBlZGl0aW9ucyDCtyBtazIgUXVhaSBkZSBTZWluZSB8IGh0dHBzOi8vaHlwZXJoYWNrdGl2ZS5pbwpldmVudCB8IFdlYjMgU3VtbWl0IHwgV2ViMyBGb3VuZGF0aW9uIMK3IEJlcmxpbiAyMDI0LTI1IHwgYCArIHl0ICsgYFBSRzBjblY3WUc4CmV2ZW50IHwgZFdlYiBDYW1wIHwgSW50ZXJuZXQgQXJjaGl2ZSDCtyBDYWxpZm9ybmlhIDIwMjIgfCBgICsgeXQgKyBgeng3RGR1djBIZDQKZXZlbnQgfCBGdW5kaW5nIHRoZSBDb21tb25zIHwgU2FuIEZyYW5jaXNjbyDCtyBCdWVub3MgQWlyZXMgfCBgICsgeXQgKyBgYk9aclVoYTlhUTgKYH0sCgoJCXsicmVwb3J0cyIsIGAKcmVwb3J0IHwgQ29udHJpYnV0aW9uIFJlcG9ydCAyMDI1IHwgU2Ftb3VyYcOvIENvb3AgwrcgV2VsY29tZSB0byAyMDI2IHwgYCArIHl0ICsgYGFHNE0zN0ZYNElJCnJlcG9ydCB8IENvbnRyaWJ1dGlvbiBSZXBvcnQgMjAyNCB8IFNhbW91cmHDryBDb29wIMK3IFdlbGNvbWUgdG8gMjAyNSB8IGAgKyB5dCArIGAzN0w0dlVMc3pMUQpyZXBvcnQgfCBDb250cmlidXRpb24gUmVwb3J0IDIwMjMgfCBTYW1vdXJhw68gQ29vcCDCtyBXZWxjb21lIHRvIDIwMjQgfCBgICsgeXQgKyBgdGowaW1HVkpIUWMKYH0sCgoJCXsicGVlcmRldiIsIGAKcGVlcmRldiB8IFNldHVwIHlvdXIgbG9jYWwgZW52aXJvbm1lbnQgfCBMZXNzb24gMSB8IGAgKyB5dCArIGBDOFJ1QV91VTNGcwpwZWVyZGV2IHwgQnVpbGQgYW5kIHRlc3QgeW91ciBmaXJzdCBkQXBwIHwgTGVzc29uIDIgfCBgICsgeXQgKyBgbnpvNlFneFFIZ3cKcGVlcmRldiB8IFJlZ2lzdGVyIHlvdXIgVXNlciBTcGFjZSB8IExlc3NvbiAzIHwgYCArIHl0ICsgYFI1dDFHbUJSVVZrCnBlZXJkZXYgfCBUcmFuc2FjdGlvbiB0eXBlcyB8IGNhbGwgwrcgcnVuIMK3IGFkZHBrZyDCtyBzZW5kIHwgYCArIHl0ICsgYC1aM00xWFZ4V1U4CnBlZXJkZXYgfCBDb2lucyBhbmQgR1JDMjAgfCBMZXNzb24gNSB8IGAgKyB5dCArIGA0dHdvVXlqbzRyQQpwZWVyZGV2IHwgQVZMIHRyZWUgdnMgbWFwIHwgTGVzc29uIDYgfCBgICsgeXQgKyBgUWg3M01xeHhLVE0KcGVlcmRldiB8IERlcGxveWluZyBHbm8gcGFja2FnZXMgfCBMZXNzb24gNyB8IGAgKyB5dCArIGBCN2JTcmVDd0lscwpwZWVyZGV2IHwgSW50ZXJhY3RpdmUgZG9jdW1lbnRhdGlvbiB8IExlc3NvbiA4IHwgYCArIHl0ICsgYHpwR3hNUW8zVi1vCnBlZXJkZXYgfCBFZmZlY3RpdmUgcHJvZ3JhbW1pbmcgaW4gR25vIHwgTGVzc29uIDkgfCBgICsgeXQgKyBgVU5KU3VNZGpURkEKcGVlcmRldiB8IEludGVycmVhbG0gc3BlY2lmaWNhdGlvbiB8IExlc3NvbiAxMCB8IGAgKyB5dCArIGBKSmp1Ny1HZVJiQQpwZWVyZGV2IHwgREFPcyBhbmQgbW9kdWxhciBnb3Zlcm5hbmNlIHwgTGVzc29uIDExIHwgYCArIHl0ICsgYFNwaFBnc2pLUXlRCnBlZXJkZXYgfCBHb3Zlcm5hbmNlIERBTyAoR292REFPKSB8IExlc3NvbiAxMiB8IGAgKyB5dCArIGBqTS02ZXp5bl92NApwZWVyZGV2IHwgSW5kZXggeW91ciB0cmFuc2FjdGlvbnMgfCB0eC1pbmRleGVyIHwgYCArIHl0ICsgYDhsZDBuc1YzN1NBCnBlZXJkZXYgfCBNb25pdG9yIHlvdXIgdmFsaWRhdG9yIHwgZ25vbW9uaXRvcmluZyB8IGAgKyB5dCArIGB1andiS1NGU193ZwpwZWVyZGV2IHwgRXh0ZW5kIHlvdXIgSURFIHwgVlMgQ29kZSDCtyBOZW92aW0gwrcgRW1hY3MgwrcgSmV0QnJhaW5zIHwgYCArIHl0ICsgYFNzazFtLVlHbnlvCnBlZXJkZXYgfCBTZWN1cmUgeW91ciB3YWxsZXQgfCBMZXNzb24gMTYgfCBgICsgeXQgKyBgcTJqbE44S1hCTUEKcGVlcmRldiB8IEdubyB2cyBTb2xpZGl0eSB8IExlc3NvbiAxNyB8IGAgKyB5dCArIGBPaTc3aHZKQ1ZiVQpgfSwKCgkJeyJ3ZWJ0cmlwIiwgYAp3ZWJ0cmlwIHwgIzEgQ3JlYXRpbmcgYSBOZXcgRXJhIHdpdGggR25vIHwgTWFuZnJlZCBUb3Vyb24gwrcgZ25vLmxhbmQgfCBgICsgeXQgKyBgSHYyUVNJanpfVTgKd2VidHJpcCB8ICMyIEJ1aWxkaW5nIFRydXN0IGluIFdlYjMgfCBJc2FhYyBQYXRrYSDCtyBTaGllbGQzIHwgYCArIHl0ICsgYGhLYzllV1UyX0NJCndlYnRyaXAgfCAjMyBEaWdpdGFsIEFydCBEaXNydXB0b3JzIHwgRGlzdHJpYnV0ZWQgR2FsbGVyeSB8IGAgKyB5dCArIGA0bnZWYWs5N2Vpawp3ZWJ0cmlwIHwgIzQgRGVjZW50cmFsaXppbmcgRGlnaXRhbCBDb21tdW5pdGllcyB8IE1vcmdhbiBCYXphbGdldHRlIMK3IGduby5sYW5kIHwgYCArIHl0ICsgYEhwcmwyV2tNWUNBCndlYnRyaXAgfCAjNSBCcmlkZ2luZyBXZWIyIGFuZCBXZWIzIHwgRG9uZ3dvbiBTaGluIMK3IE9uYmxvYyB8IGAgKyB5dCArIGAta2JfTjRZN2NtMAp3ZWJ0cmlwIHwgIzYgVGhlIEZ1dHVyZSBvZiBTdGFraW5nIGFuZCBORlRzIHwgQWRyaWVuIEZhZ3VldCDCtyBTdGFrZUxhYiB8IGAgKyB5dCArIGAwY09kSW9RMW5wSQp3ZWJ0cmlwIHwgIzcgUGVyc29uYWwgRGV2ZWxvcG1lbnQgYW5kIEJsb2NrY2hhaW4gfCBEcmFnb3MgUm91YSB8IGAgKyB5dCArIGBhdzhTSmFqelJkQQp3ZWJ0cmlwIHwgIzggV29yay1MaWZlIEJhbGFuY2UgJiBQcm9kdWN0IERlc2lnbiB8IERpYW5lIHwgYCArIHl0ICsgYHJfUzlZYndGOVVNCmB9LAoKCQl7ImJsb2ciLCBgCmJsb2cgfCBHbm8ubGFuZCBpbiAyMDI2OiB0aGUgYmV0YSBtYWlubmV0IHwgMjcgQXVnIDIwMjYgwrcgZ25vLmxhbmQgfCBodHRwczovL3d3dy5zYW1vdXJhaS53b3JsZC9ibG9nL2duby1sYW5kLWluLTIwMjYtd2hhdC1hLWJldGEtbWFpbm5ldC1hY3R1YWxseS1tZWFucy8gfCBUaGUgY2hhaW4gaXMgbGl2ZSBhbmQgdGhlIHRva2VuIGNhbm5vdCBtb3ZlIHlldDogd2hhdCBoYXMgc2hpcHBlZCwgd2hhdCBoYXMgbm90LCBhbmQgd2hhdCB0aGUgcHJvamVjdCBoYXMgYWN0dWFsbHkgcHJvbWlzZWQuCmJsb2cgfCBTYW1vdXJhw68gR292ZXJuYW5jZSBSZXNlYXJjaCBMYWIgfCA1IE5vdiAyMDI1IMK3IGdvdmVybmFuY2UgfCBodHRwczovL3d3dy5zYW1vdXJhaS53b3JsZC9ibG9nL3NhbW91cmElQzMlQUYtZ292ZXJuYW5jZS1yZXNlYXJjaC1sYWItdW5lLW5vdXZlbGxlLSVDMyVBOXRhcGUtcG91ci1sYS1jb29wJUMzJUE5cmF0aXZlLyB8IFRoZSBjb29wIG9wZW5zIGEgcmVzZWFyY2ggbGFiIG9uIGNvb3BlcmF0aXZlIGFuZCBkaXN0cmlidXRlZCBnb3Zlcm5hbmNlLCBhZnRlciBlaWdodCB5ZWFycyBvZiBidWlsZGluZy4KYmxvZyB8IERlY2VudHJhbGl6ZWQgZ292ZXJuYW5jZSBvciB0aGUgY2xhc3NpYyBtb2RlbCB8IDcgSmFuIDIwMjYgwrcgZ292ZXJuYW5jZSB8IGh0dHBzOi8vd3d3LnNhbW91cmFpLndvcmxkL2Jsb2cvZGVjZW50cmFsaXplZC1nb3Zlcm5hbmNlLXZzLWNsYXNzaWMtbW9kZWwvIHwgRGVjZW50cmFsaXplZCAoREFPLCBibG9ja2NoYWluKSBhbmQgY2xhc3NpYyBnb3Zlcm5hbmNlIGNvbXBhcmVkOiBhZHZhbnRhZ2VzLCBsaW1pdHMsIGNvc3RzIGFuZCB1c2UgY2FzZXMuCmJsb2cgfCBDcnlwdG8gKEFudGktKUNvbW1vbnM/IFBhcnQgMSB8IDIzIEp1biAyMDI2IMK3IHJlc2VhcmNoIHwgaHR0cHM6Ly93d3cuc2Ftb3VyYWkud29ybGQvYmxvZy9jcnlwdG8tYW50aS1jb21tb25zLWNvbnRyb3ZlcnNpZXMtc3Vycm91bmRpbmctdGhlLXN0YXR1cy1vZi1iaXRjb2luLWFuZC1wdWJsaWMtYmxvY2tjaGFpbnMtYXMtZGlnLyB8IENhbiBCaXRjb2luIGFuZCBwdWJsaWMgYmxvY2tjaGFpbnMgYmUgY2FsbGVkIGRpZ2l0YWwgY29tbW9ucz8gUGFydCAxIG1hcHMgdGhlIGNvbnRyb3ZlcnN5LgpibG9nIHwgQ29vcGVyYXRpdmUgJiBXZWIzIEdsb3NzYXJ5IHwgMTMgSmFuIDIwMjYgwrcgcmVzZWFyY2ggfCBodHRwczovL3d3dy5zYW1vdXJhaS53b3JsZC9ibG9nL2Nvb3BlcmF0aXZlLXdlYjMtZ2xvc3Nhcnktdi0wLTEvIHwgQSBsaXZpbmcgZ2xvc3NhcnkgdHJhbnNsYXRpbmcgYmV0d2VlbiBjb29wZXJhdGl2ZSBhbmQgV2ViMyB2b2NhYnVsYXJpZXMsIGZvciBjb29wcyBtZWV0aW5nIHRoZSBEQU8gYW5kIFdlYjMgYnVpbGRlcnMgbWVldGluZyB0aGUgY29vcC4KYmxvZyB8IEluc2lnaHQgUmVwb3J0ICMxOiBQaGlsIEguIHwgMTIgRGVjIDIwMjUgwrcgaW50ZXJ2aWV3IHwgaHR0cHM6Ly93d3cuc2Ftb3VyYWkud29ybGQvYmxvZy9pbnNpZ2h0LXJlcG9ydC1zZXJpZXMtZXh0ZXJuYWwtaW50ZXJ2aWV3LTEtcGhpbC1oLyB8IFRoZSBmaXJzdCBvZiBhbiBpbnRlcnZpZXcgc2VyaWVzIG9uIGRpc3RyaWJ1dGVkIGdvdmVybmFuY2UuCmJsb2cgfCBGcm9tIFN0YXJ0dXAgTmF0aW9uIHRvIENvb3AgTmF0aW9uIHwgNCBTZXAgMjAyNiDCtyBlc3NheSB8IGh0dHBzOi8vd3d3LnNhbW91cmFpLndvcmxkL2Jsb2cvZnJvbS1zdGFydHVwLW5hdGlvbi10by1jb29wLW5hdGlvbi8gfCBTaWducyBvZiBhIHB1YmxpYyBhbmQgY29vcGVyYXRpdmUgdGVjaCBhd2FrZW5pbmcgaW4gRnJhbmNlLCB0aGUgcmlza3Mgb2Ygc292ZXJlaWdudHkgd2FzaGluZywgYW5kIGhvdyB0byB0YWtlIHBhcnQuCmJsb2cgfCBSZXBvcnR6OiB0aGUgZGlnaXRhbCBjb21tb25zLCBsaXZlIHwgMzEgQXVnIDIwMjYgwrcgcHJvZHVjdCB8IGh0dHBzOi8vd3d3LnNhbW91cmFpLndvcmxkL2Jsb2cvcmVwb3J0ei13aG8tYnVpbGRzLXRoZS1kaWdpdGFsLWNvbW1vbnMtbGl2ZS1mcm9tLWdpdGh1Yi8gfCBBIGNvbnRyaWJ1dGlvbiBib2FyZCBidWlsdCBmcm9tIHRoZSBwdWJsaWMgR2l0SHViIEFQSTogd2hhdCBpdCBjb3VudHMsIGFuZCB3aGF0IGl0IHJlZnVzZXMgdG8gY291bnQuCmJsb2cgfCBHcmVmZm9uOiBzZWxmLWhvc3RlZCBkZXBsb3ltZW50IHwgNSBBdWcgMjAyNiDCtyBwcm9kdWN0IHwgaHR0cHM6Ly93d3cuc2Ftb3VyYWkud29ybGQvYmxvZy9ncmVmZm9uLWlvLXNlbGYtaG9zdGVkLWRlcGxveW1lbnQtcGxhdGZvcm0vIHwgQSB0ZWNobmljYWwgdG91ciBvZiBHcmVmZm9uOiBpdHMgY29udHJvbCBwbGFuZSwgd29ya2VycyBhbmQgYnVpbHQtaW4gY2VydGlmaWNhdGUgYXV0aG9yaXR5LgpgfSwKCgkJeyJmaWxtcyIsIGAKZmlsbSB8IFRoZSBVbmRlcmdyb3VuZCBTaXN0aW5lIENoYXBlbCB8IEZlYXR1cmUgZG9jdW1lbnRhcnkgwrcgMjAyMSB8IGAgKyB5dCArIGBmc1JGSG1kaXlHRQpmaWxtIHwgSGFzaGlyaXlhIHwgRG9jdW1lbnRhcnkgwrcgMjAyNSB8IGAgKyB5dCArIGBPcU1UbVNFYnFxWQpmaWxtIHwgU295IFlvIHwgRG9jdW1lbnRhcnkgwrcgMjAyNSB8IGAgKyB5dCArIGBmV0UyZnBadURFTQpmaWxtIHwgTWHDsWFuYSBjdWVzdGEgbcOhcyB8IERvY3VtZW50YXJ5IMK3IDIwMjYgfCBgICsgeXQgKyBgUEVBUjdsOGRHRWsKZmlsbSB8IENvbW11bml0eSBOZXR3b3JrcyB8IERvY3VtZW50YXJ5IMK3IDIwMjQgfCBgICsgeXQgKyBgSnVIVnRlRWhOem8KZmlsbSB8IEknbSBKdXN0IGEgTG9zdCBHdXkgfCBTaG9ydCBmaWxtIMK3IDIwMjUgfCBgICsgeXQgKyBgODRSZ1F4ZEkzbjgKYH0sCgl9Cn0KGuxCCghjcmV3LmdubxLfQnBhY2thZ2UgaG9tZQoKaW1wb3J0ICgKCSJzdHJjb252IgoJInN0cmluZ3MiCgoJImNoYWluL3J1bnRpbWUiCgoJImduby5sYW5kL3AvbnQvYXZsL3YwIgopCgovLyBUaGUgY3JldyByb3N0ZXIgbGlzdHMgZXZlcnlvbmUgd2hvIGJ1aWx0IHdpdGggc2FtY3Jldywgd2hldGhlciBvciBub3QgdGhleQovLyBoYXZlIGEgZ25vLmxhbmQgaWRlbnRpdHkgeWV0LgovLwovLyBBIG1lbWJlciBiZWxvbmdzIHRvIGEgdGVhbSAoZW5naW5lZXJpbmcsIG1lZGlhLCAuLi4pIGFuZCBzdGFydHMgd2l0aCBhCi8vIHB1YmxpYyBsaW5rLCB1c3VhbGx5IHRoZWlyIEdpdEh1YiBwcm9maWxlLiBPbmNlIHRoZXkgaGF2ZSBhbiBvbi1jaGFpbgovLyBpZGVudGl0eSwgdGhlIGFkbWluIHJ1bnMgTGlua1Byb2ZpbGU6IHRoZSBjYXJkIHRoZW4gbGlua3MgdG8gdGhlaXIgaG9tZQovLyByZWFsbSAob3IgL3UvPGFkZHJlc3M+KSwgaXMgbWFya2VkIE9OIENIQUlOLCBhbmQgdGhlIG1lbWJlciBjYW4gd3JpdGUgdGhlaXIKLy8gb3duIGxpbmUgd2l0aCBTZXRMaW5lLgoKY29uc3QgKAoJbWF4Q3JldyAgICAgID0gOTYgLy8gZWFjaCBjYXJkIGNvc3RzIHJlbmRlciBnYXM7IGtlZXBzIFJlbmRlcigiIikgZmFyIGJlbG93IHRoZSBxdWVyeSBjZWlsaW5nCgltYXhJRExlbiAgICAgPSAzMgoJbWF4SGFuZGxlTGVuID0gMzIKCW1heFJvbGVMZW4gICA9IDQwCgltYXhMaW5lTGVuICAgPSAxNjAKKQoKdHlwZSBtZW1iZXIgc3RydWN0IHsKCWlkICAgICBzdHJpbmcgLy8gc3RhYmxlIGtleSwgW2EtejAtOS5fLV0KCWhhbmRsZSBzdHJpbmcgLy8gc2hvd24gb24gdGhlIGNhcmQKCXJvbGUgICBzdHJpbmcKCXRlYW0gICBzdHJpbmcgLy8gW2EtejAtOS5fLV0sIGdyb3VwcyB0aGUgY2FyZHMKCXVybCAgICBzdHJpbmcgLy8gcHVibGljIGxpbmsgdXNlZCB1bnRpbCB0aGUgbWVtYmVyIGlzIG9uIGNoYWluCglhZGRyICAgYWRkcmVzcwoJaG9tZSAgIHN0cmluZyAvLyAiL3IvLi4uIiBob21lIHJlYWxtLCBwcmVmZXJyZWQgbGluayBvbmNlIHNldAoJbGluZSAgIHN0cmluZwoJb3JkZXIgIGludAoJam9pbmVkIGludDY0Cn0KCnZhciAoCgljcmV3ICAgICAgPSBhdmwuTmV3VHJlZSgpIC8vIGlkIC0+ICptZW1iZXIKCWJ5QWRkciAgICA9IGF2bC5OZXdUcmVlKCkgLy8gYWRkcmVzcyBzdHJpbmcgLT4gaWQsIGZvciBTZXRMaW5lCgluZXh0T3JkZXIgaW50CikKCi8vIG9uZUxpbmUgcmVqZWN0cyB0ZXh0IHRoYXQgd291bGQgYnJlYWsgb3V0IG9mIGl0cyBtYXJrZG93biBvciBTVkcgc2xvdC4KZnVuYyBvbmVMaW5lKGZpZWxkLCBzIHN0cmluZywgbWF4IGludCkgewoJaWYgbGVuKHMpID4gbWF4IHsKCQlwYW5pYyhmaWVsZCArICIgdG9vIGxvbmc6IG1heCAiICsgc3RyY29udi5JdG9hKG1heCkgKyAiIGJ5dGVzIikKCX0KCWlmIHN0cmluZ3MuQ29udGFpbnNBbnkocywgInxcblxyIikgewoJCXBhbmljKGZpZWxkICsgIiBtdXN0IGJlIG9uZSBsaW5lIHdpdGhvdXQgJ3wnIikKCX0KfQoKZnVuYyB2YWxpZFVSTCh1IHN0cmluZykgYm9vbCB7CglyZXR1cm4gKHN0cmluZ3MuSGFzUHJlZml4KHUsICJodHRwczovLyIpIHx8IHN0cmluZ3MuSGFzUHJlZml4KHUsICIvIikgJiYgIXN0cmluZ3MuSGFzUHJlZml4KHUsICIvLyIpKSAmJgoJCWxlbih1KSA8PSAyMDAgJiYgIXN0cmluZ3MuQ29udGFpbnNBbnkodSwgIiAoKTw+XCJ8XFxcblxyIikKfQoKLy8gbWRFc2NhcGUgdHVybnMgbWVtYmVyLXdyaXR0ZW4gdGV4dCBpbnRvIHBsYWluIHRleHQ6IGV2ZXJ5IGNoYXJhY3RlciB0aGF0Ci8vIG1hcmtkb3duIGNvdWxkIHJlYWQgYXMgYSBsaW5rLCBpbWFnZSwgZW1waGFzaXMsIGNvZGUgb3IgSFRNTCBpcyBlc2NhcGVkLgpmdW5jIG1kRXNjYXBlKHMgc3RyaW5nKSBzdHJpbmcgewoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCglmb3IgXywgciA6PSByYW5nZSBzIHsKCQlpZiBzdHJpbmdzLkNvbnRhaW5zUnVuZSgiXFxgKl9bXSgpPD4hI3x+e30iLCByKSB7CgkJCWIuV3JpdGVCeXRlKCdcXCcpCgkJfQoJCWIuV3JpdGVSdW5lKHIpCgl9CglyZXR1cm4gYi5TdHJpbmcoKQp9CgpmdW5jIGFkZE1lbWJlcihpZCwgaGFuZGxlLCByb2xlLCB0ZWFtLCB1cmwgc3RyaW5nKSB7CglpZiBsZW4oaWQpID4gbWF4SURMZW4gfHwgIXZhbGlkU2x1ZyhpZCkgewoJCXBhbmljKCJpbnZhbGlkIG1lbWJlciBpZDogd2FudCAxLTMyIGJ5dGVzIG9mIFthLXowLTkuXy1dIikKCX0KCWlmIGNyZXcuSGFzKGlkKSB7CgkJcGFuaWMoImFscmVhZHkgaW4gdGhlIGNyZXc6ICIgKyBpZCkKCX0KCWlmIGNyZXcuU2l6ZSgpID49IG1heENyZXcgewoJCXBhbmljKCJ0aGUgcm9zdGVyIGlzIGZ1bGw6ICIgKyBzdHJjb252Lkl0b2EobWF4Q3JldykgKyAiIG1lbWJlcnMiKQoJfQoJbSA6PSAmbWVtYmVye2lkOiBpZH0KCXNldElkZW50aXR5KG0sIGhhbmRsZSwgcm9sZSwgdGVhbSwgdXJsKQoJbmV4dE9yZGVyKysKCW0ub3JkZXIgPSBuZXh0T3JkZXIKCW0uam9pbmVkID0gcnVudGltZS5DaGFpbkhlaWdodCgpCgljcmV3LlNldChpZCwgbSkKfQoKZnVuYyBzZXRJZGVudGl0eShtICptZW1iZXIsIGhhbmRsZSwgcm9sZSwgdGVhbSwgdXJsIHN0cmluZykgewoJaWYgaGFuZGxlID09ICIiIHsKCQlwYW5pYygiaGFuZGxlIHJlcXVpcmVkIikKCX0KCW9uZUxpbmUoImhhbmRsZSIsIGhhbmRsZSwgbWF4SGFuZGxlTGVuKQoJb25lTGluZSgicm9sZSIsIHJvbGUsIG1heFJvbGVMZW4pCglpZiBsZW4odGVhbSkgPiBtYXhJRExlbiB8fCAhdmFsaWRTbHVnKHRlYW0pIHsKCQlwYW5pYygiaW52YWxpZCB0ZWFtOiB3YW50IDEtMzIgYnl0ZXMgb2YgW2EtejAtOS5fLV0iKQoJfQoJaWYgIXZhbGlkVVJMKHVybCkgewoJCXBhbmljKCJsaW5rIG11c3QgYmUgaHR0cHM6Ly8gb3IgYSAvcGF0aCwgd2l0aG91dCBzcGFjZXMgb3IgbWFya2Rvd24gY2hhcmFjdGVycyIpCgl9CgltLmhhbmRsZSwgbS5yb2xlLCBtLnRlYW0sIG0udXJsID0gaGFuZGxlLCByb2xlLCB0ZWFtLCB1cmwKfQoKZnVuYyBtdXN0TWVtYmVyKGlkIHN0cmluZykgKm1lbWJlciB7Cgl2IDo9IGNyZXcuR2V0KGlkKQoJaWYgdiA9PSBuaWwgewoJCXBhbmljKCJub3QgaW4gdGhlIGNyZXc6ICIgKyBpZCkKCX0KCXJldHVybiB2LigqbWVtYmVyKQp9CgovLyBBZGRNZW1iZXIgcHV0cyBzb21lb25lIG9uIHRoZSByb3N0ZXIsIGluIGEgdGVhbSwgbGlua2VkIHRvIGEgcHVibGljIHBhZ2UuCmZ1bmMgQWRkTWVtYmVyKGN1ciByZWFsbSwgaWQsIGhhbmRsZSwgcm9sZSwgdGVhbSwgdXJsIHN0cmluZykgewoJYXNzZXJ0QWRtaW4oY3VyKQoJYWRkTWVtYmVyKGlkLCBoYW5kbGUsIHJvbGUsIHRlYW0sIHVybCkKfQoKLy8gVXBkYXRlTWVtYmVyIGNoYW5nZXMgYSBtZW1iZXIncyBoYW5kbGUsIHJvbGUsIHRlYW0gYW5kIHB1YmxpYyBsaW5rLgpmdW5jIFVwZGF0ZU1lbWJlcihjdXIgcmVhbG0sIGlkLCBoYW5kbGUsIHJvbGUsIHRlYW0sIHVybCBzdHJpbmcpIHsKCWFzc2VydEFkbWluKGN1cikKCXNldElkZW50aXR5KG11c3RNZW1iZXIoaWQpLCBoYW5kbGUsIHJvbGUsIHRlYW0sIHVybCkKfQoKLy8gTGlua1Byb2ZpbGUgdGllcyBhIG1lbWJlciB0byB0aGVpciBnbm8ubGFuZCBpZGVudGl0eS4gaG9tZSBpcyB0aGVpciBob21lCi8vIHJlYWxtIHBhdGggKCIvci8uLi4iKSwgb3IgIiIgdG8gbGluayB0byAvdS88YWRkcj4uIEZyb20gdGhlbiBvbiB0aGUgbWVtYmVyCi8vIGNhbiB3cml0ZSB0aGVpciBvd24gbGluZSB3aXRoIFNldExpbmUuCmZ1bmMgTGlua1Byb2ZpbGUoY3VyIHJlYWxtLCBpZCBzdHJpbmcsIGFkZHIgYWRkcmVzcywgaG9tZSBzdHJpbmcpIHsKCWFzc2VydEFkbWluKGN1cikKCW0gOj0gbXVzdE1lbWJlcihpZCkKCWlmICFhZGRyLklzVmFsaWQoKSB7CgkJcGFuaWMoImludmFsaWQgYWRkcmVzcyIpCgl9CglpZiBob21lICE9ICIiICYmICghc3RyaW5ncy5IYXNQcmVmaXgoaG9tZSwgIi9yLyIpIHx8IHN0cmluZ3MuQ29udGFpbnNBbnkoaG9tZSwgIiAoKTw+XCJ8XFxcblxyIikpIHsKCQlwYW5pYygiaG9tZSBtdXN0IGJlIGEgL3IvLi4uIHBhdGgiKQoJfQoJaWYgb3RoZXIgOj0gYnlBZGRyLkdldChhZGRyLlN0cmluZygpKTsgb3RoZXIgIT0gbmlsICYmIG90aGVyLihzdHJpbmcpICE9IGlkIHsKCQlwYW5pYygiYWRkcmVzcyBhbHJlYWR5IGxpbmtlZCB0byAiICsgb3RoZXIuKHN0cmluZykpCgl9CglpZiBtLmFkZHIgIT0gIiIgewoJCWJ5QWRkci5SZW1vdmUobS5hZGRyLlN0cmluZygpKQoJfQoJaWYgbS5hZGRyICE9IGFkZHIgewoJCW0ubGluZSA9ICIiIC8vIGEgbGluZSBiZWxvbmdzIHRvIHRoZSBhZGRyZXNzIHRoYXQgd3JvdGUgaXQKCX0KCW0uYWRkciwgbS5ob21lID0gYWRkciwgaG9tZQoJYnlBZGRyLlNldChhZGRyLlN0cmluZygpLCBpZCkKfQoKLy8gQ2xlYXJMaW5lIHJlbW92ZXMgYSBtZW1iZXIncyBsaW5lLCBmb3IgbW9kZXJhdGlvbi4KZnVuYyBDbGVhckxpbmUoY3VyIHJlYWxtLCBpZCBzdHJpbmcpIHsKCWFzc2VydEFkbWluKGN1cikKCW11c3RNZW1iZXIoaWQpLmxpbmUgPSAiIgp9CgovLyBSZW1vdmVNZW1iZXIgdGFrZXMgc29tZW9uZSBvZmYgdGhlIHJvc3Rlci4KZnVuYyBSZW1vdmVNZW1iZXIoY3VyIHJlYWxtLCBpZCBzdHJpbmcpIHsKCWFzc2VydEFkbWluKGN1cikKCW0gOj0gbXVzdE1lbWJlcihpZCkKCWlmIG0uYWRkciAhPSAiIiB7CgkJYnlBZGRyLlJlbW92ZShtLmFkZHIuU3RyaW5nKCkpCgl9CgljcmV3LlJlbW92ZShpZCkKfQoKLy8gU2V0TGluZSBsZXRzIGEgY3JldyBtZW1iZXIgd2l0aCBhIGxpbmtlZCBwcm9maWxlIHdyaXRlIHRoZWlyIG93biBsaW5lLiBJdAovLyByZW5kZXJzIGFzIHBsYWluIHRleHQ6IG1hcmtkb3duIGluIGl0IGlzIGVzY2FwZWQuCmZ1bmMgU2V0TGluZShjdXIgcmVhbG0sIGxpbmUgc3RyaW5nKSB7CgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpCgl2IDo9IGJ5QWRkci5HZXQoY2FsbGVyLlN0cmluZygpKQoJaWYgdiA9PSBuaWwgewoJCXBhbmljKCJubyBjcmV3IHByb2ZpbGUgbGlua2VkIHRvICIgKyBjYWxsZXIuU3RyaW5nKCkpCgl9CglvbmVMaW5lKCJsaW5lIiwgbGluZSwgbWF4TGluZUxlbikKCW11c3RNZW1iZXIodi4oc3RyaW5nKSkubGluZSA9IGxpbmUKfQoKLy8gSXNNZW1iZXIgcmVwb3J0cyB3aGV0aGVyIGFkZHIgaXMgbGlua2VkIHRvIGEgY3JldyBwcm9maWxlLgpmdW5jIElzTWVtYmVyKGFkZHIgYWRkcmVzcykgYm9vbCB7IHJldHVybiBieUFkZHIuSGFzKGFkZHIuU3RyaW5nKCkpIH0KCi8vIENyZXdTaXplIHJldHVybnMgdGhlIG51bWJlciBvZiBtZW1iZXJzIG9uIHRoZSByb3N0ZXIuCmZ1bmMgQ3Jld1NpemUoKSBpbnQgeyByZXR1cm4gY3Jldy5TaXplKCkgfQoKLy8gbGluayBpcyB3aGVyZSBhIG1lbWJlcidzIGNhcmQgcG9pbnRzOiBob21lIHJlYWxtLCB0aGVuIG9uLWNoYWluIHByb2ZpbGUsCi8vIHRoZW4gdGhlaXIgcHVibGljIGxpbmsuCmZ1bmMgKG0gKm1lbWJlcikgbGluaygpIHN0cmluZyB7Cglzd2l0Y2ggewoJY2FzZSBtLmhvbWUgIT0gIiI6CgkJcmV0dXJuIG0uaG9tZQoJY2FzZSBtLmFkZHIgIT0gIiI6CgkJcmV0dXJuICIvdS8iICsgbS5hZGRyLlN0cmluZygpCgl9CglyZXR1cm4gbS51cmwKfQoKLy8gdGVhbVRpdGxlcyBuYW1lcyB0aGUga25vd24gdGVhbXM7IGFueSBvdGhlciB0ZWFtIHNob3dzIGl0cyByYXcgbmFtZS4KdmFyIHRlYW1UaXRsZXMgPSBtYXBbc3RyaW5nXXN0cmluZ3sKCSJlbmdpbmVlcmluZyI6ICJFbmdpbmVlcmluZyBjcmV3IiwKCSJtZWRpYSI6ICAgICAgICJNZWRpYSBjcmV3IiwKCSJhbHVtbmkiOiAgICAgICJBbHVtbmkiLAp9CgovLyB0ZWFtS2luZHMgcGlja3MgdGhlIHBvc3RlciBzdHlsZSBvZiBhIHRlYW0ncyBjYXJkcy4KdmFyIHRlYW1LaW5kcyA9IG1hcFtzdHJpbmddc3RyaW5newoJIm1lZGlhIjogICJtZW1iZXItbWVkaWEiLAoJImFsdW1uaSI6ICJtZW1iZXItYWx1bW5pIiwKfQoKLy8gY3Jld1RhYmxlIHNob3dzIHRoZSByb3N0ZXIgdGVhbSBieSB0ZWFtLCB0ZWFtcyBpbiB0aGUgb3JkZXIgdGhlaXIgZmlyc3QKLy8gbWVtYmVyIGpvaW5lZCwgbWVtYmVycyBpbiB0aGUgb3JkZXIgdGhleSBqb2luZWQ6IG9uZSBwb3N0ZXIgZWFjaCwgdGhlbiB0aGUKLy8gbGluZXMgdGhleSB3cm90ZSB0aGVtc2VsdmVzLgpmdW5jIGNyZXdUYWJsZSgpIHN0cmluZyB7CglpZiBjcmV3LlNpemUoKSA9PSAwIHsKCQlyZXR1cm4gIl9UaGUgcm9zdGVyIGlzIGVtcHR5Ll8iCgl9CgltZW1iZXJzIDo9IG1ha2UoW10qbWVtYmVyLCAwLCBjcmV3LlNpemUoKSkKCWNyZXcuSXRlcmF0ZSgiIiwgIiIsIGZ1bmMoXyBzdHJpbmcsIHYgYW55KSBib29sIHsKCQltIDo9IHYuKCptZW1iZXIpCgkJaSA6PSBsZW4obWVtYmVycykKCQltZW1iZXJzID0gYXBwZW5kKG1lbWJlcnMsIG0pCgkJZm9yIGkgPiAwICYmIG1lbWJlcnNbaS0xXS5vcmRlciA+IG0ub3JkZXIgewoJCQltZW1iZXJzW2ldID0gbWVtYmVyc1tpLTFdCgkJCWktLQoJCX0KCQltZW1iZXJzW2ldID0gbQoJCXJldHVybiBmYWxzZQoJfSkKCgl2YXIgdGVhbXMgW11zdHJpbmcKCWJ5VGVhbSA6PSBtYXBbc3RyaW5nXVtdKm1lbWJlcnt9Cglmb3IgXywgbSA6PSByYW5nZSBtZW1iZXJzIHsKCQlpZiBfLCBvayA6PSBieVRlYW1bbS50ZWFtXTsgIW9rIHsKCQkJdGVhbXMgPSBhcHBlbmQodGVhbXMsIG0udGVhbSkKCQl9CgkJYnlUZWFtW20udGVhbV0gPSBhcHBlbmQoYnlUZWFtW20udGVhbV0sIG0pCgl9CgoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCglvbkNoYWluIDo9IDAKCXZhciBjb3VudHMgW11zdHJpbmcKCWZvciBfLCB0ZWFtIDo9IHJhbmdlIHRlYW1zIHsKCQlncm91cCA6PSBieVRlYW1bdGVhbV0KCQl0aXRsZSA6PSB0ZWFtVGl0bGVzW3RlYW1dCgkJaWYgdGl0bGUgPT0gIiIgewoJCQl0aXRsZSA9IHRlYW0KCQl9CgkJY291bnRzID0gYXBwZW5kKGNvdW50cywgc3RyY29udi5JdG9hKGxlbihncm91cCkpKyIgIitzdHJpbmdzLlRvTG93ZXIoc3RyaW5ncy5UcmltU3VmZml4KHRpdGxlLCAiIGNyZXciKSkpCgkJYi5Xcml0ZVN0cmluZygiKioiICsgdGl0bGUgKyAiKioiKQoJCWlmIHRlYW0gPT0gImFsdW1uaSIgewoJCQliLldyaXRlU3RyaW5nKCI6IGZvcm1lciBjcmV3IG1lbWJlcnMgd2hvIGJ1aWx0IGdubyB3aXRoIHVzLiIpCgkJfQoJCWIuV3JpdGVTdHJpbmcoIlxuXG4iKQoJCWtpbmQgOj0gdGVhbUtpbmRzW3RlYW1dCgkJaWYga2luZCA9PSAiIiB7CgkJCWtpbmQgPSAibWVtYmVyIgoJCX0KCQlmb3IgaSA6PSAwOyBpIDwgbGVuKGdyb3VwKTsgaSArPSBjYXJkc1BlclJvdyB7CgkJCWIuV3JpdGVTdHJpbmcoIjxnbm8tY29sdW1ucz5cbiIpCgkJCWZvciBqIDo9IGk7IGogPCBpK2NhcmRzUGVyUm93OyBqKysgewoJCQkJaWYgaiA+IGkgewoJCQkJCWIuV3JpdGVTdHJpbmcoIjxnbm8tY29sdW1ucy1zZXAgLz5cbiIpCgkJCQl9CgkJCQlpZiBqID49IGxlbihncm91cCkgewoJCQkJCWNvbnRpbnVlCgkJCQl9CgkJCQltIDo9IGdyb3VwW2pdCgkJCQluIDo9IHN0cmNvbnYuSXRvYShqICsgMSkKCQkJCWlmIGogPCA5IHsKCQkJCQluID0gIjAiICsgbgoJCQkJfQoJCQkJbGFiZWwgOj0gc3RyaW5ncy5Ub1VwcGVyKHN0cmluZ3MuVHJpbVN1ZmZpeCh0aXRsZSwgIiBjcmV3IikpICsgIiDCtyAiICsgbgoJCQkJaWYgbS5hZGRyICE9ICIiIHsKCQkJCQlsYWJlbCArPSAiIMK3IE9OIENIQUlOIgoJCQkJCW9uQ2hhaW4rKwoJCQkJfQoJCQkJYyA6PSBjYXJke2tpbmQ6IGtpbmQsIHRpdGxlOiBtLmhhbmRsZSwgbWV0YTogbS5yb2xlLCB1cmw6IG0ubGluaygpLCBsYWJlbDogbGFiZWx9CgkJCQliLldyaXRlU3RyaW5nKCJbIVsiICsgbWRUZXh0KG0uaGFuZGxlKSArICJdKCIgKyBwb3N0ZXJVUkkoYykgKyAiKV0oIiArIGMudXJsICsgIilcbiIpCgkJCX0KCQkJYi5Xcml0ZVN0cmluZygiPC9nbm8tY29sdW1ucz5cblxuIikKCQl9Cgl9CgoJYi5Xcml0ZVN0cmluZygiKiIgKyBzdHJjb252Lkl0b2EobGVuKG1lbWJlcnMpKSArICIgc2FtdXJhaSAoIiArIHN0cmluZ3MuSm9pbihjb3VudHMsICIsICIpICsgIiksICIgKwoJCXN0cmNvbnYuSXRvYShvbkNoYWluKSArICIgb24gY2hhaW4gc28gZmFyLiBBIGNhcmQgbGlua3MgdG8gaXRzIG93bmVyJ3MgcHVibGljIHBhZ2UgdW50aWwgdGhleSBoYXZlIGEgZ25vLmxhbmQgcHJvZmlsZS4qIikKCgl2YXIgbGluZXMgc3RyaW5ncy5CdWlsZGVyCglmb3IgXywgbSA6PSByYW5nZSBtZW1iZXJzIHsKCQlpZiBtLmxpbmUgIT0gIiIgewoJCQlsaW5lcy5Xcml0ZVN0cmluZygiLSAqKlsiICsgbWRUZXh0KG0uaGFuZGxlKSArICJdKCIgKyBtLmxpbmsoKSArICIpKio6ICIgKyBtZEVzY2FwZShtLmxpbmUpICsgIlxuIikKCQl9Cgl9CglpZiBsaW5lcy5MZW4oKSA+IDAgewoJCWIuV3JpdGVTdHJpbmcoIlxuXG4qKkluIHRoZWlyIG93biB3b3Jkcy4qKlxuXG4iICsgbGluZXMuU3RyaW5nKCkpCgl9CgliLldyaXRlU3RyaW5nKCJcbipDcmV3IG1lbWJlcnMgb24gY2hhaW4gd3JpdGUgdGhlaXIgb3duIGxpbmUgd2l0aCBbU2V0TGluZV0oIiArIHdlYlBhdGggKyAiJGhlbHAmZnVuYz1TZXRMaW5lKS4qIikKCXJldHVybiBiLlN0cmluZygpCn0KGuRECgtnYWxsZXJ5LmdubxLURHBhY2thZ2UgaG9tZQoKaW1wb3J0ICgKCSJlbmNvZGluZy9iYXNlNjQiCgkic3RyaW5ncyIKCgkiZ25vLmxhbmQvcC9udC9hdmwvdjAiCikKCi8vIFRoaXMgZmlsZSBpcyBzaGFyZWQsIHVuY2hhbmdlZCwgYnkgZXZlcnkgU2Ftb3VyYcOvIGhvbWUgcmVhbG0uCi8vCi8vIEEgZ2FsbGVyeSBpcyBhIG5hbWVkIGxpc3Qgb2YgY2FyZHMuIGdub3dlYidzIENTUCBvbmx5IHBhaW50cyBpbWFnZXMgZnJvbSBhCi8vIGZldyBob3N0cyAoWW91VHViZSB0aHVtYm5haWxzIGFyZSBub3QgYW1vbmcgdGhlbSkgYnV0IGl0IGFsbG93cwovLyBkYXRhOmltYWdlL3N2Zyt4bWwsIHNvIGV2ZXJ5IGNhcmQgaXMgYSBwb3N0ZXIgZHJhd24gaGVyZSwgb24gY2hhaW4sIGFuZAovLyBsaW5rZWQgdG8gaXRzIHZpZGVvIG9yIHNpdGUuCi8vCi8vIEEgZ2FsbGVyeSBpcyB3cml0dGVuIGluIG9uZSBTZXQtbGlrZSBjYWxsIGFzIGxpbmVzIG9mCi8vCi8vCWtpbmQgfCB0aXRsZSB8IG1ldGEgfCB1cmwgW3wgZGVzY3JpcHRpb25dCi8vCi8vIFRoZSBvcHRpb25hbCBkZXNjcmlwdGlvbiBiZWNvbWVzIHRoZSBjYXJkJ3MgaG92ZXIgdGV4dC4KLy8gYW5kIHJlbmRlcmVkIHdoZXJldmVyIHRoZSBsYXlvdXQgc2F5cyA6Z2FsbGVyeS48bmFtZT46LgoKY29uc3QgKAoJZ2FsbGVyeVByZWZpeCA9ICJnYWxsZXJ5LiIKCWNhcmRzUGVyUm93ICAgPSAzCgltYXhDYXJkcyAgICAgID0gNDgKCW1heFRpdGxlTGVuICAgPSA4MAoJbWF4TWV0YUxlbiAgICA9IDgwCgltYXhEZXNjTGVuICAgID0gMjAwCikKCnR5cGUgY2FyZCBzdHJ1Y3QgewoJa2luZCwgdGl0bGUsIG1ldGEsIHVybCBzdHJpbmcKCWRlc2MgICAgICAgICAgICAgICAgICAgc3RyaW5nIC8vIGhvdmVyIHRleHQsIG9wdGlvbmFsCglsYWJlbCAgICAgICAgICAgICAgICAgIHN0cmluZyAvLyBvdmVycmlkZXMgdGhlIGtpbmQncyBsYWJlbCB3aGVuIHNldAp9Cgp2YXIgZ2FsbGVyaWVzID0gYXZsLk5ld1RyZWUoKSAvLyBuYW1lIC0+IFtdY2FyZAoKdHlwZSBzdHlsZSBzdHJ1Y3QgewoJbGFiZWwsIGdseXBoLCBhY2NlbnQsIHNoYWRlIHN0cmluZwoJdmlkZW8gICAgICAgICAgICAgICAgICAgICAgIGJvb2wKfQoKdmFyIHN0eWxlcyA9IG1hcFtzdHJpbmddc3R5bGV7CgkicmVwb3J0IjogICAgICAgIHsiQ09OVFJJQlVUSU9OIFJFUE9SVCIsICLloLEiLCAiI2U2Mzk0NiIsICIjM2ExMDE0IiwgdHJ1ZX0sCgkiZ25vIjogICAgICAgICAgIHsiR05PLkxBTkQgwrcgRklMTUVEIEJZIFNBTU9VUkHDjyIsICLpgZMiLCAiIzJlYzRiNiIsICIjMGQyZTJiIiwgdHJ1ZX0sCgkid2VidHJpcCI6ICAgICAgIHsiV0VCIFRSSVAgwrcgU0VSSUVTIiwgIuaXhSIsICIjZmY3YWEyIiwgIiMzYTE0MjIiLCB0cnVlfSwKCSJwZWVyZGV2IjogICAgICAgeyJQRUVSIERFViDCtyBHTk8gVFVUT1JJQUwiLCAi5a2mIiwgIiM0ZWE4ZGUiLCAiIzBmMjUzNiIsIHRydWV9LAoJImV2ZW50IjogICAgICAgICB7IkVWRU5UIiwgIuelrSIsICIjZjRhMjYxIiwgIiMzYTI0MTIiLCB0cnVlfSwKCSJmZXN0aXZhbCI6ICAgICAgeyJGRVNUSVZBTCDCtyBCWSBTQU1PVVJBw48iLCAi56WtIiwgIiNmNGEyNjEiLCAiIzNhMjQxMiIsIGZhbHNlfSwKCSJmaWxtIjogICAgICAgICAgeyJGSUxNIMK3IERJUkVDVEVEIEJZIFRIRSBDUkVXIiwgIuaYoCIsICIjYjM4OGViIiwgIiMyNjFhMzYiLCB0cnVlfSwKCSJwcm9kdWN0IjogICAgICAgeyJQUk9EVUNUIiwgIuS9nCIsICIjZTljNDZhIiwgIiMzNTJiMTAiLCBmYWxzZX0sCgkibWVtYmEiOiAgICAgICAgIHsiTUVNQkEgwrcgUFJPRFVDVCIsICLntYQiLCAiI2U5YzQ2YSIsICIjMzUyYjEwIiwgZmFsc2V9LAoJImdhbWUiOiAgICAgICAgICB7IkFSQ0FERSDCtyBQTEFZIElOIE1FTUJBIiwgIumBiiIsICIjOGFjOTI2IiwgIiMxYzJhMGIiLCB0cnVlfSwKCSJvc3MiOiAgICAgICAgICAgeyJPUEVOIFNPVVJDRSDCtyBHSVRIVUIiLCAi5rqQIiwgIiNhOGIzYmQiLCAiIzFiMjAyNiIsIGZhbHNlfSwKCSJibG9nIjogICAgICAgICAgeyJCTE9HIMK3IFNBTU9VUkFJLldPUkxEIiwgIuiomCIsICIjZThlMmQ4IiwgIiMyYTI2MjAiLCBmYWxzZX0sCgkibWVtYmVyIjogICAgICAgIHsiU0FNT1VSQcOPIMK3IENSRVciLCAi5L6NIiwgIiNlNjM5NDYiLCAiIzJhMTAxMiIsIGZhbHNlfSwKCSJtZW1iZXItbWVkaWEiOiAgeyJTQU1PVVJBw48gwrcgTUVESUEiLCAi5pigIiwgIiNiMzg4ZWIiLCAiIzI2MWEzNiIsIGZhbHNlfSwKCSJtZW1iZXItYWx1bW5pIjogeyJTQU1PVVJBw48gwrcgQUxVTU5JIiwgIuS+jSIsICIjOWFhMGE2IiwgIiMxZDFmMjIiLCBmYWxzZX0sCn0KCmZ1bmMgc3R5bGVPZihraW5kIHN0cmluZykgc3R5bGUgewoJaWYgcywgb2sgOj0gc3R5bGVzW2tpbmRdOyBvayB7CgkJcmV0dXJuIHMKCX0KCXJldHVybiBzdHlsZXtzdHJpbmdzLlRvVXBwZXIoa2luZCksICLkvo0iLCAiI2U2Mzk0NiIsICIjMmExMDEyIiwgZmFsc2V9Cn0KCi8vIFNldEdhbGxlcnkgcmVwbGFjZXMgYSB3aG9sZSBnYWxsZXJ5IGZyb20gaXRzIGxpbmUgZm9ybWF0LgpmdW5jIFNldEdhbGxlcnkoY3VyIHJlYWxtLCBuYW1lLCBzcGVjIHN0cmluZykgewoJYXNzZXJ0QWRtaW4oY3VyKQoJaWYgIXZhbGlkU2x1ZyhuYW1lKSB7CgkJcGFuaWMoImludmFsaWQgZ2FsbGVyeSBuYW1lOiAiICsgbmFtZSkKCX0KCWNhcmRzIDo9IHBhcnNlR2FsbGVyeShzcGVjKQoJcmV2KysKCWdhbGxlcmllcy5TZXQobmFtZSwgY2FyZHMpCn0KCi8vIERlbGV0ZUdhbGxlcnkgcmVtb3ZlcyBhIGdhbGxlcnkuCmZ1bmMgRGVsZXRlR2FsbGVyeShjdXIgcmVhbG0sIG5hbWUgc3RyaW5nKSB7Cglhc3NlcnRBZG1pbihjdXIpCglpZiBfLCByZW1vdmVkIDo9IGdhbGxlcmllcy5SZW1vdmUobmFtZSk7ICFyZW1vdmVkIHsKCQlwYW5pYygibm8gc3VjaCBnYWxsZXJ5OiAiICsgbmFtZSkKCX0KCXJldisrCn0KCmZ1bmMgcGFyc2VHYWxsZXJ5KHNwZWMgc3RyaW5nKSBbXWNhcmQgewoJdmFyIGNhcmRzIFtdY2FyZAoJZm9yIF8sIGxpbmUgOj0gcmFuZ2Ugc3RyaW5ncy5TcGxpdChzcGVjLCAiXG4iKSB7CgkJbGluZSA9IHN0cmluZ3MuVHJpbVNwYWNlKGxpbmUpCgkJaWYgbGluZSA9PSAiIiB8fCBzdHJpbmdzLkhhc1ByZWZpeChsaW5lLCAiIyIpIHsKCQkJY29udGludWUKCQl9CgkJZiA6PSBzdHJpbmdzLlNwbGl0KGxpbmUsICJ8IikKCQlpZiBsZW4oZikgIT0gNCAmJiBsZW4oZikgIT0gNSB7CgkJCXBhbmljKCJnYWxsZXJ5IGxpbmUgbmVlZHMgNCBvciA1IGZpZWxkcyAoa2luZCB8IHRpdGxlIHwgbWV0YSB8IHVybCBbfCBkZXNjcmlwdGlvbl0pOiAiICsgbGluZSkKCQl9CgkJYyA6PSBjYXJkewoJCQlraW5kOiAgc3RyaW5ncy5UcmltU3BhY2UoZlswXSksCgkJCXRpdGxlOiBzdHJpbmdzLlRyaW1TcGFjZShmWzFdKSwKCQkJbWV0YTogIHN0cmluZ3MuVHJpbVNwYWNlKGZbMl0pLAoJCQl1cmw6ICAgc3RyaW5ncy5UcmltU3BhY2UoZlszXSksCgkJfQoJCWlmIGxlbihmKSA9PSA1IHsKCQkJYy5kZXNjID0gc3RyaW5ncy5UcmltU3BhY2UoZls0XSkKCQkJaWYgbGVuKGMuZGVzYykgPiBtYXhEZXNjTGVuIHx8IHN0cmluZ3MuQ29udGFpbnNBbnkoYy5kZXNjLCAiXCJcXCIpIHsKCQkJCXBhbmljKCJnYWxsZXJ5IGRlc2NyaXB0aW9uIG11c3QgYmUgYXQgbW9zdCAyMDAgYnl0ZXMsIHdpdGhvdXQgcXVvdGVzIG9yIGJhY2tzbGFzaGVzOiAiICsgbGluZSkKCQkJfQoJCX0KCQlpZiAhdmFsaWRTbHVnKGMua2luZCkgfHwgYy50aXRsZSA9PSAiIiB8fCBsZW4oYy50aXRsZSkgPiBtYXhUaXRsZUxlbiB8fCBsZW4oYy5tZXRhKSA+IG1heE1ldGFMZW4gewoJCQlwYW5pYygiYmFkIGdhbGxlcnkgbGluZTogIiArIGxpbmUpCgkJfQoJCWlmICFzdHJpbmdzLkhhc1ByZWZpeChjLnVybCwgImh0dHBzOi8vIikgJiYgKCFzdHJpbmdzLkhhc1ByZWZpeChjLnVybCwgIi8iKSB8fCBzdHJpbmdzLkhhc1ByZWZpeChjLnVybCwgIi8vIikpIHsKCQkJcGFuaWMoImdhbGxlcnkgdXJsIG11c3QgYmUgaHR0cHM6Ly8gb3IgYSAvcGF0aDogIiArIGMudXJsKQoJCX0KCQlpZiBzdHJpbmdzLkNvbnRhaW5zQW55KGMudXJsLCAiICgpPD5cIlxcIikgewoJCQlwYW5pYygiZ2FsbGVyeSB1cmwgaGFzIGNoYXJhY3RlcnMgbWFya2Rvd24gd291bGQgYnJlYWsgb246ICIgKyBjLnVybCkKCQl9CgkJY2FyZHMgPSBhcHBlbmQoY2FyZHMsIGMpCgl9CglpZiBsZW4oY2FyZHMpID09IDAgfHwgbGVuKGNhcmRzKSA+IG1heENhcmRzIHsKCQlwYW5pYygiYSBnYWxsZXJ5IGhvbGRzIDEgdG8gNDggY2FyZHMiKQoJfQoJcmV0dXJuIGNhcmRzCn0KCi8vIHJlbmRlckdhbGxlcnkgbGF5cyBjYXJkcyBvdXQgY2FyZHNQZXJSb3cgdG8gYSByb3csIGVhY2ggb25lIGEgcG9zdGVyIHRoYXQKLy8gbGlua3MgdG8gaXRzIHRhcmdldC4KZnVuYyByZW5kZXJHYWxsZXJ5KG5hbWUgc3RyaW5nKSAoc3RyaW5nLCBib29sKSB7Cgl2IDo9IGdhbGxlcmllcy5HZXQobmFtZSkKCWlmIHYgPT0gbmlsIHsKCQlyZXR1cm4gIiIsIGZhbHNlCgl9CgljYXJkcyA6PSB2LihbXWNhcmQpCgl2YXIgYiBzdHJpbmdzLkJ1aWxkZXIKCWZvciBpIDo9IDA7IGkgPCBsZW4oY2FyZHMpOyBpICs9IGNhcmRzUGVyUm93IHsKCQliLldyaXRlU3RyaW5nKCI8Z25vLWNvbHVtbnM+XG4iKQoJCWZvciBqIDo9IGk7IGogPCBpK2NhcmRzUGVyUm93OyBqKysgewoJCQlpZiBqID4gaSB7CgkJCQliLldyaXRlU3RyaW5nKCI8Z25vLWNvbHVtbnMtc2VwIC8+XG4iKQoJCQl9CgkJCWlmIGogPCBsZW4oY2FyZHMpIHsKCQkJCWMgOj0gY2FyZHNbal0KCQkJCWIuV3JpdGVTdHJpbmcoIlshWyIgKyBtZFRleHQoYy50aXRsZSkgKyAiXSgiICsgcG9zdGVyVVJJKGMpICsgIildKCIgKyBjLnVybCArIGxpbmtUaXRsZShjLmRlc2MpICsgIilcbiIpCgkJCX0KCQl9CgkJYi5Xcml0ZVN0cmluZygiPC9nbm8tY29sdW1ucz5cblxuIikKCX0KCXJldHVybiBzdHJpbmdzLlRyaW1TdWZmaXgoYi5TdHJpbmcoKSwgIlxuXG4iKSwgdHJ1ZQp9CgovLyBsaW5rVGl0bGUgcmVuZGVycyBhbiBvcHRpb25hbCBtYXJrZG93biBsaW5rIHRpdGxlLCB3aGljaCBnbm93ZWIgZW1pdHMgYXMKLy8gdGhlIGxpbmsncyBob3ZlciB0ZXh0LgpmdW5jIGxpbmtUaXRsZShkZXNjIHN0cmluZykgc3RyaW5nIHsKCWlmIGRlc2MgPT0gIiIgewoJCXJldHVybiAiIgoJfQoJcmV0dXJuIGAgImAgKyBkZXNjICsgYCJgCn0KCi8vIG1kVGV4dCBrZWVwcyBhIHRpdGxlIGZyb20gY2xvc2luZyB0aGUgbWFya2Rvd24gaW1hZ2UgYWx0IHRleHQgZWFybHkuCmZ1bmMgbWRUZXh0KHMgc3RyaW5nKSBzdHJpbmcgewoJcmV0dXJuIHN0cmluZ3MuTmV3UmVwbGFjZXIoIlsiLCAiKCIsICJdIiwgIikiLCAiXFwiLCAiLyIpLlJlcGxhY2UocykKfQoKZnVuYyB4bWxUZXh0KHMgc3RyaW5nKSBzdHJpbmcgewoJcmV0dXJuIHN0cmluZ3MuTmV3UmVwbGFjZXIoIiYiLCAiJmFtcDsiLCAiPCIsICImbHQ7IiwgIj4iLCAiJmd0OyIsICJcIiIsICImcXVvdDsiLCAiJyIsICImIzM5OyIpLlJlcGxhY2UocykKfQoKLy8gd3JhcCBzcGxpdHMgcyBpbnRvIGF0IG1vc3QgdHdvIGxpbmVzIG9mIGFib3V0IHdpZHRoIHJ1bmVzOyB0aGUgc2Vjb25kIGxpbmUKLy8gaXMgY3V0IHdpdGggYW4gZWxsaXBzaXMgd2hlbiB0aGUgdGl0bGUgaXMgbG9uZ2VyLgpmdW5jIHdyYXAocyBzdHJpbmcsIHdpZHRoIGludCkgW11zdHJpbmcgewoJd29yZHMgOj0gc3RyaW5ncy5GaWVsZHMocykKCXZhciBsaW5lcyBbXXN0cmluZwoJY3VyIDo9ICIiCglmb3IgXywgdyA6PSByYW5nZSB3b3JkcyB7CgkJaWYgY3VyID09ICIiIHsKCQkJY3VyID0gdwoJCX0gZWxzZSBpZiBydW5lTGVuKGN1cikrMStydW5lTGVuKHcpIDw9IHdpZHRoIHsKCQkJY3VyICs9ICIgIiArIHcKCQl9IGVsc2UgewoJCQlsaW5lcyA9IGFwcGVuZChsaW5lcywgY3VyKQoJCQljdXIgPSB3CgkJfQoJfQoJaWYgY3VyICE9ICIiIHsKCQlsaW5lcyA9IGFwcGVuZChsaW5lcywgY3VyKQoJfQoJaWYgbGVuKGxpbmVzKSA+IDIgewoJCXNlY29uZCA6PSBbXXJ1bmUoc3RyaW5ncy5Kb2luKGxpbmVzWzE6XSwgIiAiKSkKCQlpZiBsZW4oc2Vjb25kKSA+IHdpZHRoIHsKCQkJc2Vjb25kID0gYXBwZW5kKHNlY29uZFs6d2lkdGgtMV0sICfigKYnKQoJCX0KCQlsaW5lcyA9IFtdc3RyaW5ne2xpbmVzWzBdLCBzdHJpbmcoc2Vjb25kKX0KCX0KCXJldHVybiBsaW5lcwp9CgpmdW5jIHJ1bmVMZW4ocyBzdHJpbmcpIGludCB7IHJldHVybiBsZW4oW11ydW5lKHMpKSB9CgovLyBjbGlwIGN1dHMgcyB0byBhdCBtb3N0IG4gcnVuZXMsIGVuZGluZyB3aXRoIGFuIGVsbGlwc2lzIHdoZW4gaXQgaGFkIHRvIGN1dC4KZnVuYyBjbGlwKHMgc3RyaW5nLCBuIGludCkgc3RyaW5nIHsKCXIgOj0gW11ydW5lKHMpCglpZiBsZW4ocikgPD0gbiB7CgkJcmV0dXJuIHMKCX0KCXJldHVybiBzdHJpbmcoYXBwZW5kKHJbOm4tMV0sICfigKYnKSkKfQoKZnVuYyBwb3N0ZXJVUkkoYyBjYXJkKSBzdHJpbmcgewoJcmV0dXJuICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCIgKyBiYXNlNjQuU3RkRW5jb2RpbmcuRW5jb2RlVG9TdHJpbmcoW11ieXRlKHBvc3RlcihjKSkpCn0KCi8vIHBvc3RlciBkcmF3cyBhIDMyMHgxODAgY2FyZDogYSBkYXJrIGdyYWRpZW50LCBhIHJpc2luZyBzdW4gaW4gdGhlIGtpbmQncwovLyBhY2NlbnQgKGEgcGxheSBidXR0b24gZm9yIHZpZGVvcyksIGEgbGFyZ2Uga2Fuamkgd2F0ZXJtYXJrLCB0aGUga2luZCBsYWJlbCwKLy8gdGhlIHRpdGxlIG9uIHVwIHRvIHR3byBsaW5lcyBhbmQgYSBtZXRhIGxpbmUuCmZ1bmMgcG9zdGVyKGMgY2FyZCkgc3RyaW5nIHsKCXN0IDo9IHN0eWxlT2YoYy5raW5kKQoJaWYgYy5sYWJlbCAhPSAiIiB7CgkJc3QubGFiZWwgPSBjLmxhYmVsCgl9Cgl2YXIgYiBzdHJpbmdzLkJ1aWxkZXIKCWIuV3JpdGVTdHJpbmcoYDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMzIwIiBoZWlnaHQ9IjE4MCIgdmlld0JveD0iMCAwIDMyMCAxODAiPmApCgliLldyaXRlU3RyaW5nKGA8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIxIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMxMjEyMTIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9ImAgKyBzdC5zaGFkZSArIGAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz5gKQoJYi5Xcml0ZVN0cmluZyhgPHJlY3Qgd2lkdGg9IjMyMCIgaGVpZ2h0PSIxODAiIHJ4PSIxNCIgZmlsbD0idXJsKCNnKSIvPmApCgliLldyaXRlU3RyaW5nKGA8dGV4dCB4PSIzMDYiIHk9IjE3MCIgdGV4dC1hbmNob3I9ImVuZCIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjEyMCIgZmlsbD0iI2ZmZmZmZiIgZmlsbC1vcGFjaXR5PSIuMDYiPmAgKyBzdC5nbHlwaCArIGA8L3RleHQ+YCkKCWIuV3JpdGVTdHJpbmcoYDxjaXJjbGUgY3g9IjI2OCIgY3k9IjUyIiByPSIzMCIgZmlsbD0iYCArIHN0LmFjY2VudCArIGAiLz5gKQoJaWYgc3QudmlkZW8gewoJCWIuV3JpdGVTdHJpbmcoYDxwYXRoIGQ9Ik0yNjAgMzggTDI4MiA1MiBMMjYwIDY2IFoiIGZpbGw9IiMxMjEyMTIiLz5gKQoJfSBlbHNlIHsKCQliLldyaXRlU3RyaW5nKGA8cGF0aCBkPSJNMjU2IDUyIEgyODAgTTI3MiA0NCBMMjgwIDUyIEwyNzIgNjAiIHN0cm9rZT0iIzEyMTIxMiIgc3Ryb2tlLXdpZHRoPSI0IiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz5gKQoJfQoJYi5Xcml0ZVN0cmluZyhgPHJlY3QgeD0iMTgiIHk9IjIwIiB3aWR0aD0iMyIgaGVpZ2h0PSIxMiIgZmlsbD0iYCArIHN0LmFjY2VudCArIGAiLz5gKQoJYi5Xcml0ZVN0cmluZyhgPHRleHQgeD0iMjciIHk9IjMxIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLE1lbmxvLG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMCIgbGV0dGVyLXNwYWNpbmc9IjEuNSIgZmlsbD0iYCArIHN0LmFjY2VudCArIGAiPmAgKyB4bWxUZXh0KHN0LmxhYmVsKSArIGA8L3RleHQ+YCkKCWxpbmVzIDo9IHdyYXAoYy50aXRsZSwgMjQpCgl5IDo9IDEwOAoJaWYgbGVuKGxpbmVzKSA9PSAxIHsKCQl5ID0gMTI2Cgl9Cglmb3IgXywgbCA6PSByYW5nZSBsaW5lcyB7CgkJYi5Xcml0ZVN0cmluZyhgPHRleHQgeD0iMTgiIHk9ImAgKyBpdG9hKHkpICsgYCIgZm9udC1mYW1pbHk9InN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLFNlZ29lIFVJLHNhbnMtc2VyaWYiIGZvbnQtd2VpZ2h0PSI3MDAiIGZvbnQtc2l6ZT0iMjAiIGZpbGw9IiNmZmZmZmYiPmAgKyB4bWxUZXh0KGwpICsgYDwvdGV4dD5gKQoJCXkgKz0gMjUKCX0KCS8vIFRoZSBtZXRhIGxpbmUgaHVncyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcjogZ25vd2ViIGRyYXdzIGl0cwoJLy8gZXh0ZXJuYWwtbGluayBiYWRnZSBvdmVyIHRoZSBib3R0b20tbGVmdCBvbmUuCgliLldyaXRlU3RyaW5nKGA8dGV4dCB4PSIzMDQiIHk9IjE2NCIgdGV4dC1hbmNob3I9ImVuZCIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSxNZW5sbyxtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTEiIGZpbGw9IiNiZGJkYmQiPmAgKyB4bWxUZXh0KGNsaXAoYy5tZXRhLCA0MCkpICsgYDwvdGV4dD5gKQoJYi5Xcml0ZVN0cmluZyhgPC9zdmc+YCkKCXJldHVybiBiLlN0cmluZygpCn0KCmZ1bmMgaXRvYShuIGludCkgc3RyaW5nIHsKCWlmIG4gPT0gMCB7CgkJcmV0dXJuICIwIgoJfQoJdmFyIGQgW11ieXRlCglmb3IgbiA+IDAgewoJCWQgPSBhcHBlbmQoW11ieXRle2J5dGUoJzAnICsgbiUxMCl9LCBkLi4uKQoJCW4gLz0gMTAKCX0KCXJldHVybiBzdHJpbmcoZCkKfQoaTQoLZ25vbW9kLnRvbWwSPm1vZHVsZSA9ICJnbm8ubGFuZC9yL3NhbWNyZXcvaG9tZSIKZ25vID0gIjAuOSIKcHJpdmF0ZSA9IHRydWUKGpgcCghob21lLmdubxKLHC8vIFBhY2thZ2UgaG9tZSBpcyBzYW1jcmV3J3MgcGFnZSBvbiBnbm8ubGFuZCwgc2VydmVkIGF0IC91L3NhbWNyZXcuCi8vCi8vIFRoZSBwYWdlIGlzIGFzc2VtYmxlZCBmcm9tIFNMT1RTIChuYW1lZCBtYXJrZG93biBmcmFnbWVudHMsIG9uZSBTZXQgZWFjaCk7Ci8vIHRoZSBzbG90IG5hbWVkICJsYXlvdXQiIGlzIHRoZSB0ZW1wbGF0ZSBhbmQgZXZlcnkgOnNsdWc6IGluIGl0IGlzIGZpbGxlZCBpbgovLyBhIHNpbmdsZSBwYXNzLiBUaGUgY3JldyByb3N0ZXIgaXMgbm90IGEgc2xvdDogc2VlIGNyZXcuZ25vLgovLwovLyBUaGUgYWRtaW4gc3RhcnRzIGFzIHRoZSBzYW1jcmV3IG5hbWVzcGFjZSBtdWx0aXNpZyBhbmQgbW92ZXMgd2l0aCBhCi8vIHR3by1zdGVwIFByb3Bvc2VBZG1pbiAvIEFjY2VwdEFkbWluLCBzbyBpdCBjYW4gbGF0ZXIgYmUgaGFuZGVkIHRvIHRoZSBEQU8uCnBhY2thZ2UgaG9tZQoKaW1wb3J0ICgKCSJzdHJjb252IgoJInN0cmluZ3MiCgoJImNoYWluL3J1bnRpbWUiCgoJImduby5sYW5kL3AvbnQvYXZsL3YwIgopCgpjb25zdCAoCglsYXlvdXRTbHVnID0gImxheW91dCIKCW1heFNsdWdMZW4gPSA2NAopCgp0eXBlIHNsb3Qgc3RydWN0IHsKCWJvZHkgICAgc3RyaW5nCglyZXYgICAgIGludAoJdXBkYXRlZCBpbnQ2NAp9Cgp2YXIgKAoJYWRtaW4gICAgICAgID0gYWRkcmVzcygiZzEzNmowbTA4cGttMmx3d2RlOWRtbHg4dWVlMjZsbGVudDlzNWNwZiIpIC8vIHNhbWNyZXcgbmFtZXNwYWNlLCAyLW9mLTMKCXBlbmRpbmdBZG1pbiBhZGRyZXNzCgoJc2xvdHMgPSBhdmwuTmV3VHJlZSgpIC8vIHNsdWcgLT4gKnNsb3QKCXJldiAgIGludAopCgp2YXIgcmVzZXJ2ZWRTbHVncyA9IFtdc3RyaW5neyJjaGFpbmlkIiwgImNyZXciLCAiaGVpZ2h0IiwgImhlcm8iLCAicmVhbG0iLCAicmV2In0KCmZ1bmMgaW5pdCgpIHsKCWggOj0gcnVudGltZS5DaGFpbkhlaWdodCgpCglmb3IgXywgcyA6PSByYW5nZSBkZWZhdWx0U2xvdHMoKSB7CgkJcmV2KysKCQlzbG90cy5TZXQocy5zbHVnLCAmc2xvdHtib2R5OiBzLmJvZHksIHJldjogcmV2LCB1cGRhdGVkOiBofSkKCX0KCWZvciBfLCBnIDo9IHJhbmdlIGRlZmF1bHRHYWxsZXJpZXMoKSB7CgkJZ2FsbGVyaWVzLlNldChnLm5hbWUsIHBhcnNlR2FsbGVyeShnLnNwZWMpKQoJfQoJZm9yIF8sIG0gOj0gcmFuZ2UgZGVmYXVsdENyZXcoKSB7CgkJYWRkTWVtYmVyKG0uaWQsIG0uaGFuZGxlLCBtLnJvbGUsIG0udGVhbSwgbS51cmwpCgl9Cglmb3IgXywgcCA6PSByYW5nZSBkZWZhdWx0UHJvZmlsZXMoKSB7CgkJbSA6PSBtdXN0TWVtYmVyKHAuaWQpCgkJbS5hZGRyLCBtLmhvbWUsIG0ubGluZSA9IHAuYWRkciwgcC5ob21lLCBwLmxpbmUKCQlieUFkZHIuU2V0KHAuYWRkci5TdHJpbmcoKSwgcC5pZCkKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEFkbWluCgpmdW5jIGFzc2VydEFkbWluKGN1ciByZWFsbSkgewoJaWYgY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpICE9IGFkbWluIHsKCQlwYW5pYygicmVzdHJpY3RlZCB0byBhZG1pbiIpCgl9Cn0KCi8vIEFkbWluIHJldHVybnMgdGhlIGN1cnJlbnQgYWRtaW4gYWRkcmVzcy4KZnVuYyBBZG1pbigpIGFkZHJlc3MgeyByZXR1cm4gYWRtaW4gfQoKLy8gUHJvcG9zZUFkbWluIHN0YXJ0cyBhIGhhbmRvdmVyLiBOb3RoaW5nIGNoYW5nZXMgdW50aWwgdGhlIG5ldyBhZGRyZXNzIGNhbGxzCi8vIEFjY2VwdEFkbWluLCBzbyBhIHR5cG8gY2Fubm90IGxvY2sgdGhlIHBhZ2UuCmZ1bmMgUHJvcG9zZUFkbWluKGN1ciByZWFsbSwgbmV4dCBhZGRyZXNzKSB7Cglhc3NlcnRBZG1pbihjdXIpCglpZiAhbmV4dC5Jc1ZhbGlkKCkgewoJCXBhbmljKCJpbnZhbGlkIGFkZHJlc3MiKQoJfQoJcGVuZGluZ0FkbWluID0gbmV4dAp9CgovLyBBY2NlcHRBZG1pbiBjb21wbGV0ZXMgYSBoYW5kb3ZlciBzdGFydGVkIGJ5IFByb3Bvc2VBZG1pbi4KZnVuYyBBY2NlcHRBZG1pbihjdXIgcmVhbG0pIHsKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkKCWlmIHBlbmRpbmdBZG1pbiA9PSAiIiB8fCBjYWxsZXIgIT0gcGVuZGluZ0FkbWluIHsKCQlwYW5pYygicmVzdHJpY3RlZCB0byB0aGUgcHJvcG9zZWQgYWRtaW4iKQoJfQoJYWRtaW4gPSBjYWxsZXIKCXBlbmRpbmdBZG1pbiA9ICIiCn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBTbG90cwoKZnVuYyB2YWxpZFNsdWcoc2x1ZyBzdHJpbmcpIGJvb2wgewoJaWYgbGVuKHNsdWcpID09IDAgfHwgbGVuKHNsdWcpID4gbWF4U2x1Z0xlbiB7CgkJcmV0dXJuIGZhbHNlCgl9Cglmb3IgaSA6PSAwOyBpIDwgbGVuKHNsdWcpOyBpKysgewoJCWMgOj0gc2x1Z1tpXQoJCWlmICEoYyA+PSAnYScgJiYgYyA8PSAneicgfHwgYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgYyA9PSAnLScgfHwgYyA9PSAnXycgfHwgYyA9PSAnLicpIHsKCQkJcmV0dXJuIGZhbHNlCgkJfQoJfQoJcmV0dXJuIHRydWUKfQoKZnVuYyBhc3NlcnRXcml0YWJsZVNsdWcoc2x1ZyBzdHJpbmcpIHsKCWlmICF2YWxpZFNsdWcoc2x1ZykgewoJCXBhbmljKCJpbnZhbGlkIHNsdWc6IHdhbnQgMS0iICsgc3RyY29udi5JdG9hKG1heFNsdWdMZW4pICsgIiBieXRlcyBvZiBbYS16MC05Ll8tXSwgZ290ICIgKyBzdHJjb252LlF1b3RlKHNsdWcpKQoJfQoJZm9yIF8sIHIgOj0gcmFuZ2UgcmVzZXJ2ZWRTbHVncyB7CgkJaWYgc2x1ZyA9PSByIHsKCQkJcGFuaWMoInJlc2VydmVkIHNsdWc6ICIgKyBzbHVnKQoJCX0KCX0KCWlmIHN0cmluZ3MuSGFzUHJlZml4KHNsdWcsIGdhbGxlcnlQcmVmaXgpIHsKCQlwYW5pYygicmVzZXJ2ZWQgc2x1ZzogIiArIGdhbGxlcnlQcmVmaXggKyAiKiByZW5kZXJzIGEgZ2FsbGVyeSwgdXNlIFNldEdhbGxlcnkiKQoJfQp9CgovLyBTZXQgY3JlYXRlcyBvciByZXBsYWNlcyBvbmUgc2xvdC4KZnVuYyBTZXQoY3VyIHJlYWxtLCBzbHVnLCBib2R5IHN0cmluZykgewoJYXNzZXJ0QWRtaW4oY3VyKQoJYXNzZXJ0V3JpdGFibGVTbHVnKHNsdWcpCglyZXYrKwoJc2xvdHMuU2V0KHNsdWcsICZzbG90e2JvZHk6IGJvZHksIHJldjogcmV2LCB1cGRhdGVkOiBydW50aW1lLkNoYWluSGVpZ2h0KCl9KQp9CgovLyBEZWxldGUgcmVtb3ZlcyBhIHNsb3QuIERlbGV0aW5nICJsYXlvdXQiIGZhbGxzIGJhY2sgdG8gdGhlIGJ1aWx0LWluIGxheW91dC4KZnVuYyBEZWxldGUoY3VyIHJlYWxtLCBzbHVnIHN0cmluZykgewoJYXNzZXJ0QWRtaW4oY3VyKQoJaWYgXywgcmVtb3ZlZCA6PSBzbG90cy5SZW1vdmUoc2x1Zyk7ICFyZW1vdmVkIHsKCQlwYW5pYygibm8gc3VjaCBzbG90OiAiICsgc2x1ZykKCX0KCXJldisrCn0KCi8vIEdldCByZXR1cm5zIGEgc2xvdCBib2R5LCBvciAiIiB3aGVuIHRoZSBzbG90IGRvZXMgbm90IGV4aXN0LgpmdW5jIEdldChzbHVnIHN0cmluZykgc3RyaW5nIHsKCWlmIHYgOj0gc2xvdHMuR2V0KHNsdWcpOyB2ICE9IG5pbCB7CgkJcmV0dXJuIHYuKCpzbG90KS5ib2R5Cgl9CglyZXR1cm4gIiIKfQoa7BcKCnJlbmRlci5nbm8S3RdwYWNrYWdlIGhvbWUKCmltcG9ydCAoCgkic3RyY29udiIKCSJzdHJpbmdzIgoKCSJjaGFpbi9ydW50aW1lIgopCgpjb25zdCAoCglyZWFsbVBhdGggPSAiZ25vLmxhbmQvci9zYW1jcmV3L2hvbWUiCgl3ZWJQYXRoICAgPSAiL3Ivc2FtY3Jldy9ob21lIgopCgpjb25zdCBmYWxsYmFja0xheW91dCA9ICIjIHNhbWNyZXdcblxuOmludHJvOlxuXG4jIyBUaGUgY3Jld1xuXG46Y3JldzpcbiIKCi8vIFJlbmRlciBzZXJ2ZXM6Ci8vCi8vCSIiICAgICAgICAgICAgIHRoZSB0ZWFtIHBhZ2UKLy8JInNsb3RzIiAgICAgICAgdGhlIHNsb3QgaW5kZXgKLy8JInNsb3RzLzxzbHVnPiIgb25lIHNsb3QncyByYXcgbWFya2Rvd24KZnVuYyBSZW5kZXIocGF0aCBzdHJpbmcpIHN0cmluZyB7Cglzd2l0Y2ggewoJY2FzZSBwYXRoID09ICIiOgoJCXJldHVybiByZW5kZXJQYWdlKCkKCWNhc2UgcGF0aCA9PSAic2xvdHMiOgoJCXJldHVybiByZW5kZXJJbmRleCgpCgljYXNlIHN0cmluZ3MuSGFzUHJlZml4KHBhdGgsICJzbG90cy8iKToKCQlyZXR1cm4gcmVuZGVyU2xvdChzdHJpbmdzLlRyaW1QcmVmaXgocGF0aCwgInNsb3RzLyIpKQoJfQoJLy8gVGhlIHBhdGggaXMgbm90IGVjaG9lZDogaXQgY29tZXMgZnJvbSB0aGUgdmlzaXRvcidzIFVSTC4KCXJldHVybiAiIyBOb3QgZm91bmRcblxuVGhpcyBwYWdlIGRvZXMgbm90IGV4aXN0LlxuXG5bQmFjayBob21lXSgiICsgd2ViUGF0aCArICIpXG4iCn0KCmZ1bmMgcmVuZGVyUGFnZSgpIHN0cmluZyB7CglsYXlvdXQgOj0gR2V0KGxheW91dFNsdWcpCglpZiBsYXlvdXQgPT0gIiIgewoJCWxheW91dCA9IGZhbGxiYWNrTGF5b3V0Cgl9CglyZXR1cm4gZmlsbChsYXlvdXQpCn0KCi8vIGZpbGwgcmVwbGFjZXMgZXZlcnkgOnNsdWc6IGluIHMsIGluIG9uZSBsZWZ0LXRvLXJpZ2h0IHBhc3MuIFJlcGxhY2VtZW50IHRleHQKLy8gaXMgbmV2ZXIgcmVzY2FubmVkLCBhbmQgYW4gdW5rbm93biBwbGFjZWhvbGRlciBzdGF5cyB2ZXJiYXRpbS4KZnVuYyBmaWxsKHMgc3RyaW5nKSBzdHJpbmcgewoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCglmb3IgewoJCWkgOj0gc3RyaW5ncy5JbmRleEJ5dGUocywgJzonKQoJCWlmIGkgPCAwIHsKCQkJYi5Xcml0ZVN0cmluZyhzKQoJCQlyZXR1cm4gYi5TdHJpbmcoKQoJCX0KCQliLldyaXRlU3RyaW5nKHNbOmldKQoJCXMgPSBzW2k6XQoJCWogOj0gc3RyaW5ncy5JbmRleEJ5dGUoc1sxOl0sICc6JykKCQlpZiBqIDwgMCB7CgkJCWIuV3JpdGVTdHJpbmcocykKCQkJcmV0dXJuIGIuU3RyaW5nKCkKCQl9CgkJaWYgdiwgb2sgOj0gbG9va3VwKHNbMSA6IGorMV0pOyBvayB7CgkJCWIuV3JpdGVTdHJpbmcodikKCQkJcyA9IHNbaisyOl0KCQkJY29udGludWUKCQl9CgkJYi5Xcml0ZVN0cmluZygiOiIpCgkJcyA9IHNbMTpdCgl9Cn0KCmZ1bmMgbG9va3VwKHNsdWcgc3RyaW5nKSAoc3RyaW5nLCBib29sKSB7CglpZiAhdmFsaWRTbHVnKHNsdWcpIHsKCQlyZXR1cm4gIiIsIGZhbHNlCgl9Cglzd2l0Y2ggc2x1ZyB7CgljYXNlICJjaGFpbmlkIjoKCQlyZXR1cm4gcnVudGltZS5DaGFpbklEKCksIHRydWUKCWNhc2UgImNyZXciOgoJCXJldHVybiBjcmV3VGFibGUoKSwgdHJ1ZQoJY2FzZSAiaGVybyI6CgkJcmV0dXJuIGhlcm9JbWFnZSgpLCB0cnVlCgljYXNlICJoZWlnaHQiOgoJCXJldHVybiBzdHJjb252LkZvcm1hdEludChydW50aW1lLkNoYWluSGVpZ2h0KCksIDEwKSwgdHJ1ZQoJY2FzZSAicmVhbG0iOgoJCXJldHVybiByZWFsbVBhdGgsIHRydWUKCWNhc2UgInJldiI6CgkJcmV0dXJuIHN0cmNvbnYuSXRvYShyZXYpLCB0cnVlCgl9CglpZiBzdHJpbmdzLkhhc1ByZWZpeChzbHVnLCBnYWxsZXJ5UHJlZml4KSB7CgkJcmV0dXJuIHJlbmRlckdhbGxlcnkoc3RyaW5ncy5UcmltUHJlZml4KHNsdWcsIGdhbGxlcnlQcmVmaXgpKQoJfQoJaWYgdiA6PSBzbG90cy5HZXQoc2x1Zyk7IHYgIT0gbmlsIHsKCQlyZXR1cm4gdi4oKnNsb3QpLmJvZHksIHRydWUKCX0KCXJldHVybiAiIiwgZmFsc2UKfQoKZnVuYyByZW5kZXJJbmRleCgpIHN0cmluZyB7Cgl2YXIgYiBzdHJpbmdzLkJ1aWxkZXIKCWIuV3JpdGVTdHJpbmcoIiMgU2xvdHNcblxucmV2ICIgKyBzdHJjb252Lkl0b2EocmV2KSArICIgwrcgIiArIHN0cmNvbnYuSXRvYShzbG90cy5TaXplKCkpICsgIiBzbG90KHMpIMK3IGFkbWluICIgKyBhZG1pbi5TdHJpbmcoKSArICJcblxuIikKCWIuV3JpdGVTdHJpbmcoInwgc2xvdCB8IGJ5dGVzIHwgcmV2IHwgaGVpZ2h0IHxcbnwgLS0tIHwgLS0tOiB8IC0tLTogfCAtLS06IHxcbiIpCglzbG90cy5JdGVyYXRlKCIiLCAiIiwgZnVuYyhrZXkgc3RyaW5nLCB2YWx1ZSBhbnkpIGJvb2wgewoJCXMgOj0gdmFsdWUuKCpzbG90KQoJCWIuV3JpdGVTdHJpbmcoInwgWyIgKyBrZXkgKyAiXSgiICsgd2ViUGF0aCArICI6c2xvdHMvIiArIGtleSArICIpIHwgIiArCgkJCXN0cmNvbnYuSXRvYShsZW4ocy5ib2R5KSkgKyAiIHwgIiArIHN0cmNvbnYuSXRvYShzLnJldikgKyAiIHwgIiArCgkJCXN0cmNvbnYuRm9ybWF0SW50KHMudXBkYXRlZCwgMTApICsgIiB8XG4iKQoJCXJldHVybiBmYWxzZQoJfSkKCXJldHVybiBiLlN0cmluZygpCn0KCmZ1bmMgcmVuZGVyU2xvdChzbHVnIHN0cmluZykgc3RyaW5nIHsKCXYgOj0gc2xvdHMuR2V0KHNsdWcpCglpZiB2ID09IG5pbCB7CgkJcmV0dXJuICIjIE5vdCBmb3VuZFxuXG5ObyBzdWNoIHNsb3QuXG5cbltTbG90IGluZGV4XSgiICsgd2ViUGF0aCArICI6c2xvdHMpXG4iCgl9CglzIDo9IHYuKCpzbG90KQoJYm9keSA6PSBzLmJvZHkKCWlmICFzdHJpbmdzLkhhc1N1ZmZpeChib2R5LCAiXG4iKSB7CgkJYm9keSArPSAiXG4iCgl9CglyZXR1cm4gIiMgIiArIHNsdWcgKyAiXG5cbiIgKyBzdHJjb252Lkl0b2EobGVuKHMuYm9keSkpICsgIiBieXRlcyDCtyByZXYgIiArIHN0cmNvbnYuSXRvYShzLnJldikgKwoJCSIgwrcgd3JpdHRlbiBhdCBoZWlnaHQgIiArIHN0cmNvbnYuRm9ybWF0SW50KHMudXBkYXRlZCwgMTApICsgIlxuXG5gYGBgXG4iICsgYm9keSArICJgYGBgXG4iCn0KIiIKEy9nbm8uTWVtUGFja2FnZVR5cGUSCwoJTVBVc2VyQWxsIg0zMjAwMDAwMHVnbm90EhIIgLi4chILMTgwMDAwdWdub3QaiAMKzQEKEi90bS5QdWJLZXlNdWx0aXNpZxK2AQgCEjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohA11OyvOPLagDVsrHEKIBIExVRF5lt7wVCj+fUZRBL1/tEjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohAyjjid64ZCYQ4EmlZ/C3lgV3/Xw9yB1LU+J1q+rdkaZ4EjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohAyDlf14q7C2aBqar/Qryh6dVR9VACxVZV6fOaM3X5YEAEosBCgUIAxIBoBJAWiqXkkRGjCPkuufdQHYfQ04dSrvKrBCObf3HZg385eNP6uIrRUb+8Ie/zBUuvLHf+GGeNMTs9FrV1K2w3Wa1tRJArcJdmTlNYgfd27Ko9JTJ36l6lCHlXzGO7Z8orOdwiXIGj9zveZiT+LvFRjX49QD1fMieE1oHtu4nk03HPJZFNxooZzFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFsdXV4ZQ==

Raw transaction data

Raw JSON data