{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "hash": "PyHxIUgQ6DLYU4E7ehPvJziKNt7YS7qSxyEbnsxgb3Q=",
    "height": "659854",
    "index": 0,
    "tx_result": {
      "ResponseBase": {
        "Error": null,
        "Data": null,
        "Events": [
          {
            "@type": "/tm.StorageDepositEvent",
            "bytes_delta": "28629",
            "fee_delta": "2862900ugnot",
            "pkg_path": "gno.land/r/g1ut6uspuh73e02yauxpmyt8g3wwddaq8utagvm3/upkeep"
          }
        ],
        "Log": "msg:0,success:true,log:,events:[]",
        "Info": ""
      },
      "GasWanted": "48202960",
      "GasUsed": "32135297"
    },
    "tx": "CvF2Cgwvdm0ubV9hZGRwa2cS4HYKKGcxdXQ2dXNwdWg3M2UwMnlhdXhwbXl0OGczd3dkZGFxOHV0YWd2bTMSpHYKBnVwa2VlcBI6Z25vLmxhbmQvci9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL3Vwa2VlcBphCgtnbm9tb2QudG9tbBJSbW9kdWxlID0gImduby5sYW5kL3IvZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMy91cGtlZXAiCmdubyA9ICIwLjkiChr6dAoKdXBrZWVwLmdubxLrdC8vIFBhY2thZ2UgdXBrZWVwIHBheXMgcGVvcGxlIHRvIHJ1biB0aGUgZWNvc3lzdGVtJ3MgcGVybWlzc2lvbmxlc3MKLy8gdmFsdmVzLiBUaGUgcG9ydGZvbGlvJ3MgcmVhbG1zIGRlbGliZXJhdGVseSBleHBvc2UgbWFpbnRlbmFuY2UKLy8gZW50cnlwb2ludHMgdGhhdCBhbnlvbmUgbWF5IGNhbGwg4oCUIHN1YnNjcmlwdGlvbnMuRXhwaXJlIGZyZWVzIGEgbGFwc2VkCi8vIHN1YnNjcmlwdGlvbiBzbG90LCB0aW1lbG9ja19ndWFyZGlhbi5FeGVjdXRlIGZpcmVzIGEgbWF0dXJlZCB0aW1lbG9ja2VkCi8vIGFjdGlvbiDigJQgYmVjYXVzZSBubyBzbG90J3MgbGl2ZW5lc3MgbWF5IGRlcGVuZCBvbiBhbiBpbnRlcmVzdGVkIHBhcnR5Ci8vIHNob3dpbmcgdXAuIFRoaXMgcmVhbG0gYWRkcyB0aGUgbWlzc2luZyBlY29ub21pY3M6IGZ1bmRlcnMgZmluYW5jZSBhCi8vIHJld2FyZCBwb3QsIGFuZCB3aG9ldmVyIHRyaWdnZXJzIGEgdmFsdmUgVEhST1VHSCB0aGlzIHJlYWxtIGlzIGNyZWRpdGVkCi8vIGEgYm91bmRlZCByZXdhcmQsIGNsYWltYWJsZSBieSBwdWxsLgovLwovLyBUSEUgUkVBTE0tVE8tUkVBTE0gQk9VTkRBUlksIFBSRUNJU0VMWToKLy8KLy8Jd2hpY2ggY2FsbHMgd2hpY2ggICAgIDogdXBrZWVwIC0+IHN1YnNjcmlwdGlvbnMuRXhwaXJlKGNyb3NzLCBpZCkKLy8JICAgICAgICAgICAgICAgICAgICAgICAgdXBrZWVwIC0+IHRpbWVsb2NrX2d1YXJkaWFuLkV4ZWN1dGUoY3Jvc3MsIGlkKQovLwl3aHkgaXQgaXMgbmVjZXNzYXJ5ICAgOiB0aGUgcmV3YXJkIG11c3QgYmUgY29uZGl0aW9uZWQgb24gdGhlIHZhbHZlCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbGx5IGZpcmluZy4gT25seSBtYWtpbmcgdGhlIGNhbGwgZnJvbQovLwkgICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhpcyByZWFsbSB0aWVzICJ0aGUgdmFsdmUgZmlyZWQiIGFuZAovLwkgICAgICAgICAgICAgICAgICAgICAgICAidGhlIHJld2FyZCBpcyBjcmVkaXRlZCIgaW50byBvbmUgYXRvbWljCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uOyBvYnNlcnZpbmcgZnJvbSBvdXRzaWRlIGNhbm5vdC4KLy8JY2FsbGVyIGlkZW50aXR5ICAgICAgIDogZG93bnN0cmVhbSBzZWVzIGN1ci5QcmV2aW91cygpID0gVEhJUyByZWFsbSwKLy8JICAgICAgICAgICAgICAgICAgICAgICAgbm90IHRoZSBwb2tpbmcgRU9BLiBCb3RoIHZhbHZlcyBhcmUKLy8JICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbmxlc3MgQlkgREVTSUdOIGFuZCB1c2UgdGhlIGNhbGxlcgovLwkgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eSBmb3Igbm90aGluZywgc28gdGhlIGludGVybWVkaWFyeQovLwkgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIG5vIGF1dGhvcml6YXRpb24gb3V0Y29tZS4gVGhpcyByZWFsbQovLwkgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgYSBkZXB1dHkgZm9yIGFueSBkb3duc3RyZWFtIGF1dGhvcml0eQovLwkgICAgICAgICAgICAgICAgICAgICAgICDigJQgaXQgaG9sZHMgbm9uZSB0byBjb25mdXNlLgovLwlhdXRob3JpemF0aW9uIGJvdW5kYXJ5OiB1cHN0cmVhbSwgYW55b25lIG1heSBwb2tlICh0aGUgcmV3YXJkIGlzIHRoZQovLwkgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IHRoaW5nIGF0IHN0YWtlIGFuZCB0aGUgcG90IGlzIHRoZSBvbmx5Ci8vCSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSkuIERvd25zdHJlYW0sIGVhY2ggdmFsdmUgZW5mb3JjZXMgaXRzCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIG93biBTVEFURSBjb25kaXRpb25zIChncmFjZSBlbGFwc2VkLCBkZWxheQovLwkgICAgICAgICAgICAgICAgICAgICAgICBtYXR1cmVkKSBleGFjdGx5IGFzIGl0IHdvdWxkIGZvciBhIGRpcmVjdAovLwkgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZXIuCi8vCW9yZGVyaW5nICAgICAgICAgICAgICA6IGRvd25zdHJlYW0gY2FsbCBGSVJTVCwgcmV3YXJkIGFjY291bnRpbmcKLy8JICAgICAgICAgICAgICAgICAgICAgICAgQUZURVIuIEEgZG93bnN0cmVhbSBhYm9ydCB0aGVyZWZvcmUgcmV2ZXJ0cwovLwkgICAgICAgICAgICAgICAgICAgICAgICB0aGUgd2hvbGUgdHJhbnNhY3Rpb24gYmVmb3JlIGFueSBwb3Qgb3IKLy8JICAgICAgICAgICAgICAgICAgICAgICAgbGVkZ2VyIG11dGF0aW9uIGV4aXN0cy4KLy8JZmFpbHVyZSBiZWhhdmlvciAgICAgIDogYW55IGRvd25zdHJlYW0gcGFuaWMgKG5vdCBleHBpcmFibGUsIHRvbwovLwkgICAgICAgICAgICAgICAgICAgICAgICBlYXJseSwgYWxyZWFkeSBleGVjdXRlZCwgdW5rbm93biBpZC4uLikKLy8JICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRzIHRoaXMgdHJhbnNhY3Rpb24uIE5vIHBhcnRpYWwgc3RhdGUsCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIG5vIHJld2FyZCwgYnkgVk0gYXRvbWljaXR5IOKAlCBub3QgYnkgY2xlYW51cAovLwkgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLgovLwlhdG9taWNpdHkgYXNzdW1wdGlvbnMgOiBhIEdubyB0cmFuc2FjdGlvbiBpcyBhbGwtb3Itbm90aGluZyBhY3Jvc3MKLy8JICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0gYm91bmRhcmllczsgdGhlcmUgaXMgbm8gY2F0Y2gvcmVjb3ZlcgovLwkgICAgICAgICAgICAgICAgICAgICAgICBhbnl3aGVyZSBvbiB0aGlzIHBhdGggKGFuZCBub25lIG1heSBiZSBhZGRlZAovLwkgICAgICAgICAgICAgICAgICAgICAgICDigJQgcmVjb3Zlcnkgd291bGQgYnJlYWsgZXhhY3RseSB0aGlzCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIGd1YXJhbnRlZSkuCi8vCXZhbHVlIG1vdmVtZW50ICAgICAgICA6IG5vbmUgY3Jvc3NlcyB0aGUgYm91bmRhcnkuIEJvdGggdmFsdmVzIG1vdmUKLy8JICAgICAgICAgICAgICAgICAgICAgICAgbm8gY29pbnM7IHRoZSBwb2tlIHRyYW5zYWN0aW9uIG11c3QgY2Fycnkgbm8KLy8JICAgICAgICAgICAgICAgICAgICAgICAgY29pbnMgKHN1YnNjcmlwdGlvbnMnIGFzc2VydE5vU2VuZCByZWFkcyB0aGUKLy8JICAgICAgICAgICAgICAgICAgICAgICAgT1JJR0lOIGVudmVsb3BlIHVuY29uZGl0aW9uYWxseSDigJQgbWVhc3VyZWQsCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBhc3N1bWVkKS4gUmV3YXJkcyBtb3ZlIG9ubHkgaW5zaWRlIHRoaXMKLy8JICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0ncyBsZWRnZXIsIGZ1bmRlZCBieSBleHBsaWNpdCBGdW5kCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9ucy4KLy8JZG93bnN0cmVhbSByZWplY3Rpb24gIDogcmV3YXJkIGRlbmllZCBhdXRvbWF0aWNhbGx5IOKAlCB0aGUgYWJvcnQgaXMKLy8JICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRlbmlhbC4KLy8JZG93bnN0cmVhbSB0cnVzdCAgICAgIDogbmVpdGhlciB2YWx2ZSB0cnVzdHMgbm9yIHZhbGlkYXRlcyB0aGUKLy8JICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVyOyBib3RoIHZhbGlkYXRlIHN0YXRlLiBUaGlzIHJlYWxtCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY2FsbHkgZG9lcyBub3QgdHJ1c3QgdGhlIGRvd25zdHJlYW0KLy8JICAgICAgICAgICAgICAgICAgICAgICAgUkVQTFkgYmV5b25kICJpdCBkaWQgbm90IGFib3J0Ii4KLy8JcmVwbGF5ICAgICAgICAgICAgICAgIDogZW5mb3JjZWQgZG93bnN0cmVhbS4gQSBzZWNvbmQgRXhwaXJlIG9uIHRoZQovLwkgICAgICAgICAgICAgICAgICAgICAgICBzYW1lIHN1YnNjcmlwdGlvbiBhYm9ydHMgKCJzdWJzY3JpcHRpb24gaXMKLy8JICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJlZCIpOyBhIHNlY29uZCBFeGVjdXRlIGFib3J0cyAoImFjdGlvbgovLwkgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGV4ZWN1dGVkIikuIEEgcG9rZXIgY2Fubm90IGJlIHBhaWQKLy8JICAgICAgICAgICAgICAgICAgICAgICAgdHdpY2UgZm9yIG9uZSB2YWx2ZSBldmVudC4KLy8JYWR2ZXJzYXJpYWwgY2FsbGVycyAgIDogYW4gRU9BIG9yIHJlYWxtIHBva2luZyB3aXRoIGJvZ3VzIGlkcywKLy8JICAgICAgICAgICAgICAgICAgICAgICAgcHJlbWF0dXJlIHRhcmdldHMsIG9yIHJlcGxheXMgaGl0cyBhCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIGRvd25zdHJlYW0gYWJvcnQgYW5kIHBheXMgaXRzIG93biBnYXMuIFRoZQovLwkgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgZWNvbm9taWMgZWRnZSDigJQgbWFudWZhY3R1cmluZwovLwkgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmFibGUgc3RhdGUgdG8gZmFybSByZXdhcmRzIOKAlCBkaWZmZXJzCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIHBlciB0YXNrLiBzdWJfZXhwaXJlOiBldmVyeSBmYXJtZWQKLy8JICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uIHBlcm1hbmVudGx5IGxvY2tzIGEgc3ViLXJlY29yZAovLwkgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlIGRlcG9zaXQgb2Ygcm91Z2hseSAzMCwwMDB1Z25vdCBhdAovLwkgICAgICAgICAgICAgICAgICAgICAgICB0aGUgb2JzZXJ2ZWQgMTAwdWdub3QvYnl0ZSByYXRlIChFeHBpcmUKLy8JICAgICAgICAgICAgICAgICAgICAgICAgZmxpcHMgc3RhdHVzOyBpdCBkb2VzIG5vdCBmcmVlIHRoZSByZWNvcmQpLAovLwkgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBleGNlZWRzIE1heFJld2FyZCBiZWZvcmUgcHJpY2UgYW5kCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIGdhcyDigJQgbG9zcy1tYWtpbmcgYXQgYW55IGxlZ2FsIHNldHRpbmcuCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsb2NrX2V4ZWN1dGU6IGEgZmFybWVkIEFjdGlvbiByZWNvcmQgaXMKLy8JICAgICAgICAgICAgICAgICAgICAgICAgc21hbGwgYW5kIGl0cyBkZXBvc2l0IGNhbiBzaXQgYmVsb3cgdGhlCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIGNhcCwgc28gZmFybWluZyByZXNpc3RhbmNlIHRoZXJlIHJlc3RzIG9uCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhZG1pbiBrZWVwaW5nIHRoZSBzZXR0aW5nIGJlbG93IHRoZQovLwkgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZCBjeWNsZSBjb3N0LiBGdW5kZXJzIHRydXN0IHRoZSBjYXAKLy8JICAgICAgICAgICAgICAgICAgICAgICAgQU5EIHRoZSBhZG1pbidzIHJld2FyZCBwb2xpY3ksIG5vdCB0aGUgY2FwCi8vCSAgICAgICAgICAgICAgICAgICAgICAgIGFsb25lLiBUaGUgcG90IGlzIGEgZG9uYXRpb24gZWl0aGVyIHdheSDigJQKLy8JICAgICAgICAgICAgICAgICAgICAgICAgZmFybWluZyBjYW4gZHJhaW4gaXQsIG5ldmVyIHRoaXJkLXBhcnR5Ci8vCSAgICAgICAgICAgICAgICAgICAgICAgIGJhbGFuY2VzLgovLwovLyBSZXdhcmRzIGRlZmF1bHQgdG8gMCBwZXIgdGFzazsgdGhlIGFkbWluIHNldHMgdGhlbSB3aXRoaW4gdGhlCi8vIGNvbXBpbGUtdGltZSBNYXhSZXdhcmQuIFRoZSBwb3Qgb25seSBtb3ZlcyBkb3duIHZpYSBzdWNjZXNzZnVsIHBva2VzCi8vIGFuZCBvbmx5IHVwIHZpYSBGdW5kLiBDb25zZXJ2YXRpb246IEhlbGQgPT0gcG90ICsgVXNlcnNUb3RhbAovLyAoKyBvdXQtb2YtYmFuZCBzdXJwbHVzLCByZWNvdmVyYWJsZSBhYm92ZSB0aGF0IHJlc2VydmUgYnkgU3dlZXBEZW5vbSkuCi8vIFRoZSBsZWRnZXIncyBmZWUgY2FwIGlzIDAg4oCUIG5vIGZlZSBleGlzdHMgYW55d2hlcmUgaW4gdGhpcyByZWFsbS4KcGFja2FnZSB1cGtlZXAKCmltcG9ydCAoCgkiY2hhaW4iCgkiY2hhaW4vcnVudGltZS91bnNhZmUiCgkic3RyY29udiIKCgkiZ25vLmxhbmQvcC9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL2NvaW5pbyIKCSJnbm8ubGFuZC9wL2cxdXQ2dXNwdWg3M2UwMnlhdXhwbXl0OGczd3dkZGFxOHV0YWd2bTMvZmVlbGVkZ2VyIgoKCXN1YnMgImduby5sYW5kL3IvZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMy9zdWJzY3JpcHRpb25zIgoJZ3VhcmRpYW4gImduby5sYW5kL3IvZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMy90aW1lbG9ja19ndWFyZGlhbiIKKQoKLy8gRGVub20gaXMgdGhlIG9ubHkgYXNzZXQgdGhpcyByZWFsbSBhY2NlcHRzLgpjb25zdCBEZW5vbSA9ICJ1Z25vdCIKCi8vIFRhc2sgaWRlbnRpZmllcnMg4oCUIHRoZSB0d28gc3VwcG9ydGVkIHZhbHZlcy4KY29uc3QgKAoJVGFza1N1YkV4cGlyZSAgICAgICA9ICJzdWJfZXhwaXJlIgoJVGFza1RpbWVsb2NrRXhlY3V0ZSA9ICJ0aW1lbG9ja19leGVjdXRlIgopCgovLyBNYXhSZXdhcmQgaXMgdGhlIGNvbXBpbGUtdGltZSBjZWlsaW5nIG9uIHRoZSBwZXItcG9rZSByZXdhcmQ6Ci8vIDIwLDAwMHVnbm90ICgwLjAyIEdOT1QpLiBJdCBib3VuZHMgd2hhdCBhbnkgc2luZ2xlIHBva2UgY2FuIGV4dHJhY3QKLy8gZnJvbSB0aGUgcG90LiBGb3Igc3ViX2V4cGlyZSBpdCBhbHNvIGRlZmVhdHMgZmFybWluZyBvdXRyaWdodDogb25lCi8vIG1hbnVmYWN0dXJlZCBleHBpcmFibGUgc3Vic2NyaXB0aW9uIHBlcm1hbmVudGx5IGxvY2tzIGEgc3ViLXJlY29yZAovLyBkZXBvc2l0IG9mIH4zMCwwMDB1Z25vdCBhdCB0aGUgb2JzZXJ2ZWQgMTAwdWdub3QvYnl0ZSByYXRlIOKAlCBhbHJlYWR5Ci8vIGFib3ZlIHRoZSBjYXAgYmVmb3JlIHByaWNlIGFuZCBnYXMuIEZvciB0aW1lbG9ja19leGVjdXRlIHRoZSBmYXJtZWQKLy8gQWN0aW9uIHJlY29yZCBpcyBzbWFsbGVyIGFuZCBpdHMgZGVwb3NpdCBjYW4gc2l0IGJlbG93IHRoZSBjYXAsIHNvCi8vIHRoZXJlIHRoZSBhZG1pbidzIHNldHRpbmcsIGtlcHQgYmVsb3cgdGhlIG1lYXN1cmVkIGZhcm0tY3ljbGUgY29zdCwKLy8gaXMgd2hhdCBkZXRlcnMgZmFybWluZy4gRnVuZGVycyB0cnVzdCB0aGUgY2FwIGFuZCB0aGUgYWRtaW4ncwovLyBwb2xpY3kgdG9nZXRoZXI7IHRoZSBwb3QgdGhleSBmdW5kIGlzIGFuIGV4cGxpY2l0IGRvbmF0aW9uIGVpdGhlcgovLyB3YXkuCmNvbnN0IE1heFJld2FyZCA9IGludDY0KDIwMDAwKQoKdmFyICgKCWFkbWluICAgICAgICBhZGRyZXNzIC8vIG1heSBzZXQgcmV3YXJkcywgc3RhZ2UgYSBzdWNjZXNzb3IKCXBlbmRpbmdBZG1pbiBhZGRyZXNzIC8vIHN0YWdlZCBieSBUcmFuc2ZlckFkbWluLCBjb21wbGV0ZXMgdmlhIEFjY2VwdEFkbWluCglzd2VlcGVyICAgICAgYWRkcmVzcyAvLyBtYXkgc3dlZXAgb3V0LW9mLWJhbmQgc3VycGx1cwoKCXNlbGYgYWRkcmVzcyAvLyB0aGlzIHJlYWxtJ3MgYWRkcmVzcywgY2FwdHVyZWQgYXQgZGVwbG95Cglwb3QgIGludDY0ICAgLy8gZnVuZGVkLCBub3QteWV0LWF3YXJkZWQgdWdub3QKCglyZXdhcmRzID0gbWFwW3N0cmluZ11pbnQ2NHsKCQlUYXNrU3ViRXhwaXJlOiAgICAgICAwLAoJCVRhc2tUaW1lbG9ja0V4ZWN1dGU6IDAsCgl9CglsZWRnZXIgPSBmZWVsZWRnZXIuTXVzdE5ldygwKQoKCS8vIGxpZmV0aW1lIGNvdW50ZXJzLCByZW5kZXJlZCBmb3Igb3BlcmF0b3JzCglwb2tlcyAgaW50NjQKCWZ1bmRlZCBpbnQ2NAopCgpmdW5jIGluaXQoKSB7CglhZG1pbiA9IHVuc2FmZS5PcmlnaW5DYWxsZXIoKQoJc3dlZXBlciA9IGFkbWluCglzZWxmID0gdW5zYWZlLkN1cnJlbnRSZWFsbSgpLkFkZHJlc3MoKQp9CgovLyAtLS0gZnVuZGluZyAtLS0KCi8vIEZ1bmQgYWRkcyB0aGUgYXR0YWNoZWQgY29pbnMgdG8gdGhlIHJld2FyZCBwb3QuIEFueW9uZSBtYXkgZnVuZDsKLy8gZnVuZGluZyBpcyBhIGRvbmF0aW9uIHRvIGVjb3N5c3RlbSBtYWludGVuYW5jZSBhbmQgaXMgbm90IHJlZnVuZGFibGUuCmZ1bmMgRnVuZChjdXIgcmVhbG0pIHsKCWZ1bmRlciwgYW1vdW50IDo9IGNvaW5pby5SZWNlaXZlKDAsIGN1ciwgRGVub20pCgluZXdQb3QsIG9rIDo9IGNoZWNrZWRBZGQocG90LCBhbW91bnQpCglpZiAhb2sgewoJCXBhbmljKCJwb3Qgd291bGQgb3ZlcmZsb3ciKQoJfQoJcG90ID0gbmV3UG90CglmdW5kZWQgKz0gYW1vdW50CgljaGFpbi5FbWl0KCJGdW5kZWQiLCAiZnJvbSIsIGZ1bmRlci5TdHJpbmcoKSwgImFtb3VudCIsIGl0b2EoYW1vdW50KSwKCQkicG90IiwgaXRvYShwb3QpKQp9CgovLyAtLS0gdGhlIHBva2VzOiB0aGUgcmVhbG0tdG8tcmVhbG0gY2FsbHMgLS0tCgovLyBQb2tlRXhwaXJlIHRyaWdnZXJzIHN1YnNjcmlwdGlvbnMuRXhwaXJlKHN1YklEKSB0aHJvdWdoIHRoaXMgcmVhbG0gYW5kCi8vIGNyZWRpdHMgdGhlIGNhbGxlciB0aGUgc3ViX2V4cGlyZSByZXdhcmQuIFRoZSBkb3duc3RyZWFtIHJlYWxtIGRlY2lkZXMKLy8gd2hldGhlciB0aGUgc3Vic2NyaXB0aW9uIGlzIGV4cGlyYWJsZTsgaXRzIGFib3J0IGlzIHRoZSBhdXRob3JpemF0aW9uLgovLyBUaGUgdHJhbnNhY3Rpb24gbXVzdCBhdHRhY2ggbm8gY29pbnMgKHRoZSBkb3duc3RyZWFtIHJlYWxtIGNoZWNrcyB0aGUKLy8gb3JpZ2luIGVudmVsb3BlKS4KZnVuYyBQb2tlRXhwaXJlKGN1ciByZWFsbSwgc3ViSUQgaW50NjQpIHsKCWFzc2VydE5vU2VuZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpCglyZXdhcmQgOj0gcmVxdWlyZVJld2FyZChUYXNrU3ViRXhwaXJlKQoKCS8vIERvd25zdHJlYW0gZmlyc3Q6IGFuIGFib3J0IGhlcmUgcmV2ZXJ0cyBldmVyeXRoaW5nIGJlbG93LgoJc3Vicy5FeHBpcmUoY3Jvc3MoY3VyKSwgc3ViSUQpCgoJYXdhcmQoY2FsbGVyLCByZXdhcmQsIFRhc2tTdWJFeHBpcmUsIGl0b2Eoc3ViSUQpKQp9CgovLyBQb2tlRXhlY3V0ZSB0cmlnZ2VycyB0aW1lbG9ja19ndWFyZGlhbi5FeGVjdXRlKGFjdGlvbklEKSB0aHJvdWdoIHRoaXMKLy8gcmVhbG0gYW5kIGNyZWRpdHMgdGhlIGNhbGxlciB0aGUgdGltZWxvY2tfZXhlY3V0ZSByZXdhcmQuIFRoZSBndWFyZGlhbgovLyBkZWNpZGVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBleGVjdXRhYmxlOyBpdHMgYWJvcnQgaXMgdGhlCi8vIGF1dGhvcml6YXRpb24uCmZ1bmMgUG9rZUV4ZWN1dGUoY3VyIHJlYWxtLCBhY3Rpb25JRCBzdHJpbmcpIHsKCWFzc2VydE5vU2VuZCgpCgljYWxsZXIgOj0gY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpCglyZXdhcmQgOj0gcmVxdWlyZVJld2FyZChUYXNrVGltZWxvY2tFeGVjdXRlKQoKCWd1YXJkaWFuLkV4ZWN1dGUoY3Jvc3MoY3VyKSwgYWN0aW9uSUQpCgoJYXdhcmQoY2FsbGVyLCByZXdhcmQsIFRhc2tUaW1lbG9ja0V4ZWN1dGUsIGFjdGlvbklEKQp9CgovLyBhd2FyZCBtb3ZlcyByZXdhcmQgZnJvbSB0aGUgcG90IHRvIHRoZSBjYWxsZXIncyBjbGFpbWFibGUgYmFsYW5jZS4KLy8gQ2FsbGVycyBoYXZlIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhhdCB0aGUgcG90IGNvdmVycyBpdC4KZnVuYyBhd2FyZChjYWxsZXIgYWRkcmVzcywgcmV3YXJkIGludDY0LCB0YXNrLCB0YXJnZXQgc3RyaW5nKSB7Cglwb3QgLT0gcmV3YXJkCglsZWRnZXIuTXVzdERlcG9zaXQoY2FsbGVyLlN0cmluZygpLCByZXdhcmQsIDApCglwb2tlcysrCgljaGFpbi5FbWl0KCJQb2tlZCIsCgkJInRhc2siLCB0YXNrLAoJCSJ0YXJnZXQiLCB0YXJnZXQsCgkJImNhbGxlciIsIGNhbGxlci5TdHJpbmcoKSwKCQkicmV3YXJkIiwgaXRvYShyZXdhcmQpLAoJCSJwb3QiLCBpdG9hKHBvdCksCgkpCn0KCi8vIHJlcXVpcmVSZXdhcmQgcmV0dXJucyB0aGUgY29uZmlndXJlZCByZXdhcmQgZm9yIGEgdGFzaywgcmVmdXNpbmcgd2hlbgovLyB0aGUgdGFzayBpcyB1bmtub3duLCB1bnJld2FyZGVkLCBvciB0aGUgcG90IGNhbm5vdCBjb3ZlciBpdC4gUmVmdXNhbAovLyBvbiBhbiBlbXB0eSBwb3QgaXMgZGVsaWJlcmF0ZTogYm90aCB2YWx2ZXMgcmVtYWluIGRpcmVjdGx5IGNhbGxhYmxlIG9uCi8vIHRoZWlyIG93biByZWFsbXMsIHNvIGFuIHVucmV3YXJkZWQgZGV0b3VyIHRocm91Z2ggdGhpcyBvbmUgaXMgb25seSBhCi8vIGdhcyB0cmFwIGZvciB0aGUgY2FsbGVyLgpmdW5jIHJlcXVpcmVSZXdhcmQodGFzayBzdHJpbmcpIGludDY0IHsKCXIsIG9rIDo9IHJld2FyZHNbdGFza10KCWlmICFvayB7CgkJcGFuaWMoInVua25vd24gdGFzazogIiArIHRhc2spCgl9CglpZiByIDw9IDAgewoJCXBhbmljKCJubyByZXdhcmQgY29uZmlndXJlZCBmb3IgIiArIHRhc2spCgl9CglpZiBwb3QgPCByIHsKCQlwYW5pYygicmV3YXJkIHBvdCBjYW5ub3QgY292ZXIgIiArIHRhc2sgKyAiOiBwb3QgIiArIGl0b2EocG90KSArCgkJCSIsIHJld2FyZCAiICsgaXRvYShyKSkKCX0KCXJldHVybiByCn0KCi8vIC0tLSBjbGFpbXMgLS0tCgovLyBDbGFpbSBzZW5kcyBhbW91bnQgdWdub3Qgb2YgdGhlIGNhbGxlcidzIGVhcm5lZCBiYWxhbmNlIGJhY2sgdG8gdGhlCi8vIGNhbGxlci4KZnVuYyBDbGFpbShjdXIgcmVhbG0sIGFtb3VudCBpbnQ2NCkgewoJYXNzZXJ0Tm9TZW5kKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkKCWlmIGVyciA6PSBsZWRnZXIuV2l0aGRyYXcoY2FsbGVyLlN0cmluZygpLCBhbW91bnQpOyBlcnIgIT0gbmlsIHsKCQlwYW5pYyhlcnIpCgl9Cgljb2luaW8uUGF5b3V0KDAsIGN1ciwgY2FsbGVyLCBEZW5vbSwgYW1vdW50KQoJY2hhaW4uRW1pdCgiQ2xhaW0iLCAidG8iLCBjYWxsZXIuU3RyaW5nKCksICJhbW91bnQiLCBpdG9hKGFtb3VudCkpCn0KCi8vIENsYWltQWxsIHNlbmRzIHRoZSBjYWxsZXIncyBlbnRpcmUgZWFybmVkIGJhbGFuY2UgYmFjayB0byB0aGUgY2FsbGVyLgpmdW5jIENsYWltQWxsKGN1ciByZWFsbSkgewoJYXNzZXJ0Tm9TZW5kKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkKCWFtb3VudCwgZXJyIDo9IGxlZGdlci5XaXRoZHJhd0FsbChjYWxsZXIuU3RyaW5nKCkpCglpZiBlcnIgIT0gbmlsIHsKCQlwYW5pYyhlcnIpCgl9CglpZiBhbW91bnQgPT0gMCB7CgkJcGFuaWMoIm5vdGhpbmcgdG8gY2xhaW0iKQoJfQoJY29pbmlvLlBheW91dCgwLCBjdXIsIGNhbGxlciwgRGVub20sIGFtb3VudCkKCWNoYWluLkVtaXQoIkNsYWltIiwgInRvIiwgY2FsbGVyLlN0cmluZygpLCAiYW1vdW50IiwgaXRvYShhbW91bnQpKQp9CgovLyAtLS0gYWRtaW5pc3RyYXRpb24gLS0tCgovLyBTZXRSZXdhcmQgY29uZmlndXJlcyB0aGUgcGVyLXBva2UgcmV3YXJkIGZvciBhIHRhc2ssIGJvdW5kZWQgYnkKLy8gTWF4UmV3YXJkLiBBZG1pbiBvbmx5LiBaZXJvIGRpc2FibGVzIHRoZSB0YXNrLgpmdW5jIFNldFJld2FyZChjdXIgcmVhbG0sIHRhc2sgc3RyaW5nLCBhbW91bnQgaW50NjQpIHsKCWFzc2VydE5vU2VuZCgpCglhc3NlcnRBZG1pbihjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkpCglpZiBfLCBvayA6PSByZXdhcmRzW3Rhc2tdOyAhb2sgewoJCXBhbmljKCJ1bmtub3duIHRhc2s6ICIgKyB0YXNrKQoJfQoJaWYgYW1vdW50IDwgMCB8fCBhbW91bnQgPiBNYXhSZXdhcmQgewoJCXBhbmljKCJyZXdhcmQgbXVzdCBiZSBpbiBbMCwgIiArIGl0b2EoTWF4UmV3YXJkKSArICJdIikKCX0KCW9sZCA6PSByZXdhcmRzW3Rhc2tdCglyZXdhcmRzW3Rhc2tdID0gYW1vdW50CgljaGFpbi5FbWl0KCJSZXdhcmRDaGFuZ2VkIiwgInRhc2siLCB0YXNrLCAib2xkIiwgaXRvYShvbGQpLCAibmV3IiwgaXRvYShhbW91bnQpKQp9CgovLyBTd2VlcERlbm9tIHJlY292ZXJzIG91dC1vZi1iYW5kIGNvaW5zIHRvIHRoZSBzd2VlcGVyLiBGb3IgdGhlIHBvdAovLyBkZW5vbSB0aGUgcmVzZXJ2ZSBpcyBwb3QgKyBlYXJuZWQgYmFsYW5jZXMg4oCUIGJvdGggc3RydWN0dXJhbGx5Ci8vIHVucmVhY2hhYmxlLiBTd2VlcGVyIG9ubHkuCmZ1bmMgU3dlZXBEZW5vbShjdXIgcmVhbG0sIGRlbm9tIHN0cmluZykgewoJYXNzZXJ0Tm9TZW5kKCkKCWlmIGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKSAhPSBzd2VlcGVyIHsKCQlwYW5pYygic3dlZXBlciBvbmx5IikKCX0KCXJlc2VydmUgOj0gaW50NjQoMCkKCWlmIGRlbm9tID09IERlbm9tIHsKCQlyZXNlcnZlID0gcG90ICsgbGVkZ2VyLkxpYWJpbGl0aWVzKCkKCX0KCXN3ZXB0IDo9IGNvaW5pby5Td2VlcCgwLCBjdXIsIHN3ZWVwZXIsIGRlbm9tLCByZXNlcnZlKQoJY2hhaW4uRW1pdCgiU3VycGx1c1N3ZXB0IiwgInRvIiwgc3dlZXBlci5TdHJpbmcoKSwgImNvaW5zIiwgaXRvYShzd2VwdCkrZGVub20pCn0KCi8vIFRyYW5zZmVyQWRtaW4gc3RhZ2VzIGEgdHdvLXN0ZXAgYWRtaW4gaGFuZG92ZXIuCmZ1bmMgVHJhbnNmZXJBZG1pbihjdXIgcmVhbG0sIHN1Y2Nlc3NvciBhZGRyZXNzKSB7Cglhc3NlcnROb1NlbmQoKQoJYXNzZXJ0QWRtaW4oY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpKQoJdmFyIHplcm8gYWRkcmVzcwoJaWYgc3VjY2Vzc29yID09IHplcm8gewoJCXBhbmljKCJzdWNjZXNzb3IgbXVzdCBub3QgYmUgdGhlIHplcm8gYWRkcmVzcyIpCgl9CglwZW5kaW5nQWRtaW4gPSBzdWNjZXNzb3IKCWNoYWluLkVtaXQoIkFkbWluVHJhbnNmZXJTdGFnZWQiLCAiZnJvbSIsIGFkbWluLlN0cmluZygpLCAidG8iLCBzdWNjZXNzb3IuU3RyaW5nKCkpCn0KCi8vIEFjY2VwdEFkbWluIGNvbXBsZXRlcyB0aGUgaGFuZG92ZXI7IG9ubHkgdGhlIHN0YWdlZCBzdWNjZXNzb3IgbWF5LgovLyBUaGUgc3dlZXBlciByb2xlIG1vdmVzIHdpdGggdGhlIGFkbWluLgpmdW5jIEFjY2VwdEFkbWluKGN1ciByZWFsbSkgewoJYXNzZXJ0Tm9TZW5kKCkKCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkKCWlmIGNhbGxlciAhPSBwZW5kaW5nQWRtaW4gewoJCXBhbmljKCJvbmx5IHRoZSBzdGFnZWQgc3VjY2Vzc29yIG1heSBhY2NlcHQiKQoJfQoJb2xkIDo9IGFkbWluCglhZG1pbiA9IGNhbGxlcgoJc3dlZXBlciA9IGNhbGxlcgoJdmFyIHplcm8gYWRkcmVzcwoJcGVuZGluZ0FkbWluID0gemVybwoJY2hhaW4uRW1pdCgiQWRtaW5UcmFuc2ZlcnJlZCIsICJmcm9tIiwgb2xkLlN0cmluZygpLCAidG8iLCBhZG1pbi5TdHJpbmcoKSkKfQoKLy8gLS0tIHZpZXdzIC0tLQoKZnVuYyBBZG1pbigpIGFkZHJlc3MgICAgICAgIHsgcmV0dXJuIGFkbWluIH0KZnVuYyBQZW5kaW5nQWRtaW4oKSBhZGRyZXNzIHsgcmV0dXJuIHBlbmRpbmdBZG1pbiB9CmZ1bmMgUG90KCkgaW50NjQgICAgICAgICAgICB7IHJldHVybiBwb3QgfQpmdW5jIFJld2FyZEZvcih0YXNrIHN0cmluZykgaW50NjQgewoJciwgb2sgOj0gcmV3YXJkc1t0YXNrXQoJaWYgIW9rIHsKCQlwYW5pYygidW5rbm93biB0YXNrOiAiICsgdGFzaykKCX0KCXJldHVybiByCn0KZnVuYyBCYWxhbmNlT2YoYSBhZGRyZXNzKSBpbnQ2NCB7IHJldHVybiBsZWRnZXIuQmFsYW5jZU9mKGEuU3RyaW5nKCkpIH0KZnVuYyBVc2Vyc1RvdGFsKCkgaW50NjQgICAgICAgICB7IHJldHVybiBsZWRnZXIuVXNlcnNUb3RhbCgpIH0KZnVuYyBQb2tlcygpIGludDY0ICAgICAgICAgICAgICB7IHJldHVybiBwb2tlcyB9CmZ1bmMgRnVuZGVkKCkgaW50NjQgICAgICAgICAgICAgeyByZXR1cm4gZnVuZGVkIH0KZnVuYyBBZGRyZXNzKCkgYWRkcmVzcyAgICAgICAgICB7IHJldHVybiBzZWxmIH0KZnVuYyBIZWxkKCkgaW50NjQgICAgICAgICAgICAgICB7IHJldHVybiBjb2luaW8uSGVsZEF0KHNlbGYsIERlbm9tKSB9CgovLyAtLS0gcmVuZGVyIC0tLQoKZnVuYyBSZW5kZXIocGF0aCBzdHJpbmcpIHN0cmluZyB7CglpZiBwYXRoICE9ICIiIHsKCQlyZXR1cm4gInVua25vd24gcGFnZTsgdHJ5IHRoZSByZWFsbSByb290IgoJfQoJb3V0IDo9ICIjIHVwa2VlcFxuXG4iCglvdXQgKz0gIlJld2FyZHMgZm9yIHJ1bm5pbmcgdGhlIGVjb3N5c3RlbSdzIHBlcm1pc3Npb25sZXNzIHZhbHZlcy4gIiArCgkJIkZ1bmQgdGhlIHBvdDsgcG9rZSBhIHZhbHZlIHRocm91Z2ggdGhpcyByZWFsbTsgY2xhaW0gd2hhdCB5b3UgIiArCgkJImVhcm4uIEEgcG9rZSBzdWNjZWVkcyBvbmx5IHdoZW4gdGhlIGRvd25zdHJlYW0gcmVhbG0gYWNjZXB0cyAiICsKCQkidGhlIHZhbHZlIGNhbGwgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24uXG5cbiIKCW91dCArPSAiLSBwb3Q6ICIgKyBpdG9hKHBvdCkgKyBEZW5vbSArICJcbiIKCW91dCArPSAiLSBlYXJuZWQsIHVuY2xhaW1lZDogIiArIGl0b2EobGVkZ2VyLlVzZXJzVG90YWwoKSkgKyBEZW5vbSArICJcbiIKCW91dCArPSAiLSBsaWZldGltZSBwb2tlczogIiArIGl0b2EocG9rZXMpICsgIlxuIgoJb3V0ICs9ICItIGxpZmV0aW1lIGZ1bmRpbmc6ICIgKyBpdG9hKGZ1bmRlZCkgKyBEZW5vbSArICJcblxuIgoJb3V0ICs9ICIjIyByZXdhcmRzIHBlciBwb2tlXG5cbiIKCW91dCArPSAiLSBgIiArIFRhc2tTdWJFeHBpcmUgKyAiYCAoc3Vic2NyaXB0aW9ucy5FeHBpcmUpOiAiICsKCQlpdG9hKHJld2FyZHNbVGFza1N1YkV4cGlyZV0pICsgRGVub20gKyAiXG4iCglvdXQgKz0gIi0gYCIgKyBUYXNrVGltZWxvY2tFeGVjdXRlICsgImAgKHRpbWVsb2NrX2d1YXJkaWFuLkV4ZWN1dGUpOiAiICsKCQlpdG9hKHJld2FyZHNbVGFza1RpbWVsb2NrRXhlY3V0ZV0pICsgRGVub20gKyAiXG4iCglvdXQgKz0gIlxuKGNhcCBwZXIgcG9rZTogIiArIGl0b2EoTWF4UmV3YXJkKSArIERlbm9tICsgIiwgY29tcGlsZS10aW1lKVxuIgoJcmV0dXJuIG91dAp9CgovLyAtLS0gaW50ZXJuYWxzIC0tLQoKZnVuYyBhc3NlcnROb1NlbmQoKSB7CglpZiBsZW4odW5zYWZlLk9yaWdpblNlbmQoKSkgIT0gMCB7CgkJcGFuaWMoInRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWNjZXB0IGNvaW5zIikKCX0KfQoKZnVuYyBhc3NlcnRBZG1pbihjYWxsZXIgYWRkcmVzcykgewoJaWYgY2FsbGVyICE9IGFkbWluIHsKCQlwYW5pYygiYWRtaW4gb25seSIpCgl9Cn0KCmZ1bmMgY2hlY2tlZEFkZChhLCBiIGludDY0KSAoaW50NjQsIGJvb2wpIHsKCWlmIGIgPiAwICYmIGEgPiBpbnQ2NChedWludDY0KDApPj4xKS1iIHsKCQlyZXR1cm4gMCwgZmFsc2UKCX0KCXJldHVybiBhICsgYiwgdHJ1ZQp9CgpmdW5jIGl0b2EobiBpbnQ2NCkgc3RyaW5nIHsgcmV0dXJuIHN0cmNvbnYuRm9ybWF0SW50KG4sIDEwKSB9CiINMTAwMDAwMDB1Z25vdBIRCKCT/C0SCjk2NDA2dWdub3QaqAEKOgoTL3RtLlB1YktleVNlY3AyNTZrMRIjCiECFvQxdskleM40Lpnib60p9/58Ru1wQ1b/q5MVf2K7DpgSQA/QVwxKojIU3FvaKnMJAU1ASKvHi4kvE34lZN+aQFgGQVu4JhrEX8qW1r0KHIg1KHntR1LZnPF0bCQ1PqUzD0IaKGcxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxbHV1eGU="
  }
}