{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "hash": "UUhnD9iiS2c/8LMPla7suFLgyYx/MeAZWKlC+BuF5Dk=",
    "height": "332075",
    "index": 0,
    "tx_result": {
      "ResponseBase": {
        "Error": null,
        "Data": null,
        "Events": null,
        "Log": "msg:0,success:true,log:,events:[]",
        "Info": ""
      },
      "GasWanted": "42089829",
      "GasUsed": "28059876"
    },
    "tx": "CrGeAQoML3ZtLm1fYWRkcGtnEp+eAQooZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMxLinQEKDGRlcHJlY2lhdGlvbhJAZ25vLmxhbmQvcC9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL2RlcHJlY2lhdGlvbhqlnAEKEGRlcHJlY2lhdGlvbi5nbm8Sj5wBLy8gUGFja2FnZSBkZXByZWNpYXRpb24gaXMgdGhlIGNhcnJ5aW5nIGFtb3VudCBvZiBhIGNhcGl0YWwgYXNzZXQgYXMgYSBwdXJlCi8vIGZ1bmN0aW9uIG9mIGhvdyBtYW55IHdob2xlIHBlcmlvZHMgaXQgaGFzIGJlZW4gaW4gc2VydmljZS4KLy8KLy8gQSByZWFsbSBzdG9yZXMgdGhlIHBsYW4gYW5kIHRoZSBkYXRlIHRoZSBhc3NldCB3YXMgcGxhY2VkIGluIHNlcnZpY2UsIGFuZAovLyBhc2tzIHRoaXMgcGFja2FnZSB3aGF0IGl0IGlzIHdvcnRoIG5vdyBhbmQgd2hhdCB0byBjaGFyZ2UgZm9yIHRoZSBzcGFuCi8vIHNpbmNlIGl0IGxhc3QgYXNrZWQuIE5vdGhpbmcgaGVyZSByZWFkcyB0aGUgY2hhaW4sIGhvbGRzIHN0YXRlLCBvciBrbm93cwovLyB3aGF0IGEgbGVkZ2VyIGlzLCBzbyBhIHJlYWxtIGNhbiB0ZXN0IGEgZGVjYWRlIG9mIGl0cyBvd24gZGVwcmVjaWF0aW9uCi8vIHdpdGhvdXQgYSBub2RlLgovLwovLwlzLCBlcnIgOj0gTmV3KDEyMDAwMCwgMCwgMTIwKSAgICAgICAgICAgICAgICAgLy8gMTIwMDAwIG92ZXIgMTIwIG1vbnRocwovLwluLCBfIDo9IFBlcmlvZHMocGxhY2VkQXQsIG5vdywgTW9udGhseSkKLy8JY2hhcmdlLCBfIDo9IHMuQ2hhcmdlKGJvb2tlZCwgbikgICAgICAgICAgICAgIC8vIHdoYXQgdG8gcG9zdAovLwljYXJyeWluZywgXyA6PSBzLkNhcnJ5aW5nQXQobikgICAgICAgICAgICAgICAgLy8gd2hhdCBpdCBpcyB3b3J0aAovLwovLyAjIFdoeSB0aGlzIGlzIGEgZnVuY3Rpb24gb2YgbiBhbmQgbm90IGFuIGFjY3VtdWxhdG9yCi8vCi8vIFRoZSBvYnZpb3VzIGltcGxlbWVudGF0aW9uIHN0b3JlcyB0aGUgY2FycnlpbmcgYW1vdW50LCBzdWJ0cmFjdHMgYSBwZXItcGVyaW9kCi8vIGNoYXJnZSwgYW5kIGFkdmFuY2VzIGFuIGFuY2hvciB0byBub3cuIEl0IGlzIHdyb25nIGluIGEgd2F5IHRoYXQgaXMgc3BlY2lmaWMKLy8gYW5kIHF1aWV0OiB0aGUgcGVyLXBlcmlvZCBjaGFyZ2UgaXMgYW4gaW50ZWdlciBkaXZpc2lvbiwgc28gZWFjaCBjYWxsCi8vIHRydW5jYXRlcywgYW5kIHRoZSBwYXJ0LXBlcmlvZCB0aGUgY2FsbCBsYW5kcyBpbiBpcyBmb3JmZWl0ZWQuIFJ1biB0d2ljZSBhcwovLyBvZnRlbiBhbmQgeW91IGZvcmZlaXQgdHdpY2UgYXMgbXVjaCDigJQgd2hpY2ggZm9yIGFuIGFzc2V0IHJlZ2lzdGVyIG1lYW5zCi8vICpydW5uaW5nIHRoZSBzY2hlZHVsZSBtb3JlIG9mdGVuIGRlcHJlY2lhdGVzIGxlc3MqLiBUaGF0IGlzIGEgbWlzc3RhdGVtZW50Ci8vIG9mIGFzc2V0IHZhbHVlLCBub3QgYSByb3VuZGluZyBwcmVmZXJlbmNlLgovLwovLyBbcC9tb3VsL3gvZ2FtZXMvYWNjcnVhbF0gbmFtZXMgdGhpcyBidWcgYW5kIGZpeGVzIGl0IGJ5IGFkdmFuY2luZyB0aGUgYW5jaG9yCi8vIG9ubHkgYnkgdGhlIHdob2xlIHBlcmlvZHMgaXQgYWN0dWFsbHkgcGFpZCBmb3IsIGxlYXZpbmcgdGhlIHJlbWFpbmRlciBvbiB0aGUKLy8gY2xvY2ssIGFuZCBpdCBzdGF0ZXMgdGhlIGludmFyaWFudCB0aGF0IHJ1bGVzIHRoZSBidWcgb3V0OgovLwovLwlBZHZhbmNlKHMsIGEsIGMpID09IEFkdmFuY2UoQWR2YW5jZShzLCBhLCBiKSwgYiwgYykgICBmb3IgYSA8PSBiIDw9IGMKLy8KLy8gVGhhdCBpbnZhcmlhbnQgaXMgYWRvcHRlZCBoZXJlLCBhbmQgdGhlIHdheSBpdCBpcyBvYnRhaW5lZCBpcyBkaWZmZXJlbnQgYW5kCi8vIHN0cm9uZ2VyLiBOb3RoaW5nIGluIHRoaXMgcGFja2FnZSBpcyBhbiBhY2N1bXVsYXRvcjogW1NjaGVkdWxlLkNhcnJ5aW5nQXRdCi8vIGlzIGEgcHVyZSBmdW5jdGlvbiBvZiB0aGUgcGVyaW9kIGNvdW50LCBhbmQgW1NjaGVkdWxlLkNoYXJnZV0gaXMgdGhlCi8vIGRpZmZlcmVuY2Ugb2YgaXQgYXQgdHdvIHBvaW50cy4gU28gY2hhcmdlcyAqKnRlbGVzY29wZSoqIOKAlAovLwovLwlDaGFyZ2UoYSwgYikgKyBDaGFyZ2UoYiwgYykgPT0gQ2hhcmdlKGEsIGMpCi8vCi8vIOKAlCBieSBjb25zdHJ1Y3Rpb24gcmF0aGVyIHRoYW4gYnkgY2FyZWZ1bCBhbmNob3IgYXJpdGhtZXRpYywgYW5kIHRoZXJlIGlzIG5vCi8vIHN0b3JlZCBjYXJyeWluZyBhbW91bnQgdGhhdCBjb3VsZCBkcmlmdCBmcm9tIHRoZSBzY2hlZHVsZSBhdCBhbGwuIEEgcmVhbG0KLy8gdGhhdCBsb3NlcyB0cmFjayBvZiB3aGF0IGl0IGhhcyBib29rZWQgY2FuIHJlY29tcHV0ZSBpdCBmcm9tIHRoZSBkYXRlcy4KLy8gW1Rlc3RDaGFyZ2VzVGVsZXNjb3BlXSBhc3NlcnRzIGl0IG92ZXIgcHNldWRvLXJhbmRvbSBwYXJ0aXRpb25zLCBiZWNhdXNlIGFuCi8vIGltcGxlbWVudGF0aW9uIHRoYXQgdHJ1bmNhdGVzIHBlciBjYWxsIHBhc3NlcyBldmVyeSByb3VuZCBzcGFuIGFuZCBmYWlscwovLyBvbmx5IG9uIHRoZSBvbmVzIHRoYXQgbGFuZCBtaWQtcGVyaW9kLgovLwovLyBUaGUgcmVhZCBwYXRoIGNhbm5vdCBkaXNhZ3JlZSB3aXRoIHRoZSB3cml0ZSBwYXRoIGZvciB0aGUgc2FtZSByZWFzb246IHRoZXJlCi8vIGlzIG9uZSBmdW5jdGlvbiwgYW5kIGBDaGFyZ2VgIGlzIGRlZmluZWQgaW4gdGVybXMgb2YgaXQuCi8vCi8vICMgV2h5IGEgYm91bmRlZCBsb29wIGlzIHRoZSByaWdodCBhbnN3ZXIgaGVyZSBhbmQgTygxKSBpcyBub3QgYXZhaWxhYmxlCi8vCi8vIGFjY3J1YWwgbXVzdCBiZSBjbG9zZWQgZm9ybSBiZWNhdXNlIGVsYXBzZWQgdGltZSBpcyB1bmJvdW5kZWQ6IHRoZSBwbGF5ZXIKLy8gd2hvIHJldHVybnMgYWZ0ZXIgYSBtb250aCBpcyBleGFjdGx5IHRoZSBvbmUgd2hvc2UgUmVuZGVyIHRpbWVzIG91dC4KLy8gRGVwcmVjaWF0aW9uIGhhcyBubyBzdWNoIGV4cG9zdXJlLCBhbmQgZGVjbGluaW5nIGJhbGFuY2UgaGFzIG5vIGludGVnZXIKLy8gY2xvc2VkIGZvcm0g4oCUIHBlcmlvZCBuIGlzIHRoZSByYXRlIGFwcGxpZWQgbiB0aW1lcywgd2l0aCB0aGUgZmxvb3IgdGFrZW4KLy8gZWFjaCBwZXJpb2QsIGFuZCB0YWtpbmcgdGhlIGZsb29yIG9uY2UgYXQgdGhlIGVuZCBpcyBhIGRpZmZlcmVudCBhbmQgd3JvbmcKLy8gbnVtYmVyLgovLwovLyBXaGF0IGJvdW5kcyB0aGUgbG9vcCBpbnN0ZWFkIGlzIHRoZSBhc3NldCdzIG93biAqKmRlY2xhcmVkIHVzZWZ1bCBsaWZlKio6Ci8vIFtTY2hlZHVsZS5DYXJyeWluZ0F0XSBjbGFtcHMgYXQgYExpZmVgIHBlcmlvZHMsIGBMaWZlYCBpcyB2YWxpZGF0ZWQgYWdhaW5zdAovLyBbTWF4TGlmZV0gYXQgY29uc3RydWN0aW9uLCBhbmQgdGhlIGxvb3AgZXhpdHMgZWFybHkgb25jZSB0aGUgc2FsdmFnZSBmbG9vcgovLyBpcyByZWFjaGVkLiBTbyB0aGUgY29zdCBvZiBhIGNhbGwgaXMgYm91bmRlZCBieSBhIG51bWJlciB0aGUgY2FsbGVyIGRlY2xhcmVkCi8vIGFuZCB0aGlzIHBhY2thZ2UgY2hlY2tlZCwgbm90IGJ5IGhvdyBsb25nIGFnbyB0aGUgYXNzZXQgd2FzIGJvdWdodC4gVGhhdCBpcwovLyBhIGRpZmZlcmVudCBzYWZldHkgYXJndW1lbnQgZnJvbSBjbG9zZWQtZm9ybSBhbmQgaXQgaXMgdGhlIG9uZSB0aGF0IG1ha2VzCi8vIGRlY2xpbmluZyBiYWxhbmNlIGltcGxlbWVudGFibGUgYXQgYWxsLiBTdHJhaWdodCBsaW5lICppcyogY2xvc2VkIGZvcm0gYW5kCi8vIHRha2VzIG5vIGxvb3AuCi8vCi8vICMgV2hhdCB0aGlzIHBhY2thZ2UgZG9lcyBub3QgY2xhaW0KLy8KLy8gICAtICoqTm8gbm92ZWx0eSBmb3IgdGhlIHN0cmFpZ2h0LWxpbmUgYXJpdGhtZXRpYy4qKiBBIHF1YW50aXR5IG1vdmluZyBhdCBhCi8vICAgICBmaXhlZCByYXRlIHBlciBwZXJpb2QgdG93YXJkIGEgYm91bmQgaXMgc2hpcHBlZCBlbHNld2hlcmUgaW4gdGhpcwovLyAgICAgZWNvc3lzdGVtIG1vcmUgdGhhbiBvbmNlOyBzZWUgRElTQ09WRVJZLm1kIMKnIDEuIFdoYXQgd2FzIG5vdCBmb3VuZCBpbiB0aGUKLy8gICAgIHNlYXJjaGVkIHNvdXJjZXMgaXMgdGhlIGRvbWFpbiBtb2RlbCDigJQgYSBzYWx2YWdlIGZsb29yLCBhIGNhcnJ5aW5nCi8vICAgICBhbW91bnQsIGEgZGVjbGluaW5nLWJhbGFuY2Ugc2NoZWR1bGUgb3ZlciBpbnRlZ2Vycy4KLy8gICAtICoqTm90aGluZyBhYm91dCBtb25leS4qKiBBIGNhcnJ5aW5nIGFtb3VudCBpcyBhIG51bWJlciBpbiBhIHBsYW4uIFRoaXMKLy8gICAgIHBhY2thZ2UgbmV2ZXIgc2VlcyBhIGNvaW4sIGFuZCBhIHJlYWxtIHVzaW5nIGl0IG11c3Qgbm90IGluZmVyIGN1c3RvZHkKLy8gICAgIGZyb20gaXQuCi8vICAgLSAqKk5vIHBlcmlvZCBjb252ZW50aW9uIGJleW9uZCB3aG9sZSBwZXJpb2RzLioqIEFuIGFzc2V0IHBsYWNlZCBpbgovLyAgICAgc2VydmljZSBtaWQtcGVyaW9kIGRlcHJlY2lhdGVzIGZyb20gaXRzIHBsYWNlZC1pbi1zZXJ2aWNlIGRhdGUsIG5vdCBmcm9tCi8vICAgICB0aGUgc3RhcnQgb2YgdGhlIGNhbGVuZGFyIHBlcmlvZCBpdCBmZWxsIGluLiBIYWxmLXllYXIgYW5kIG1pZC1tb250aAovLyAgICAgY29udmVudGlvbnMgYXJlIGEgY2FsbGVyJ3Mgam9iOiBzaGlmdCBgcGxhY2VkQXRgLiBTZWUgwqcgNCBvZiBBVURJVC5tZC4KLy8gICAtICoqTm8gc3dpdGNoIHRvIHN0cmFpZ2h0IGxpbmUuKiogVGV4dGJvb2sgZGVjbGluaW5nIGJhbGFuY2Ugb2Z0ZW4KLy8gICAgIGNyb3NzZXMgb3ZlciB0byBzdHJhaWdodCBsaW5lIG9uY2UgdGhlIGxhdHRlciBjaGFyZ2VzIG1vcmUuIFRoaXMgZG9lcwovLyAgICAgbm90OyBzZWUgW1NjaGVkdWxlLkNhcnJ5aW5nQXRdIG9uIHdoYXQgaGFwcGVucyBhdCBgTGlmZWAgaW5zdGVhZC4KLy8KLy8gW3AvbW91bC94L2dhbWVzL2FjY3J1YWxdOiAvcC9tb3VsL3gvZ2FtZXMvYWNjcnVhbC92MApwYWNrYWdlIGRlcHJlY2lhdGlvbgoKaW1wb3J0ICJlcnJvcnMiCgovLyBNYXhMaWZlIGJvdW5kcyB0aGUgZGVjbGFyZWQgdXNlZnVsIGxpZmUgaW4gd2hvbGUgcGVyaW9kcywgYW5kIHNvIGJvdW5kcyB0aGUKLy8gZGVjbGluaW5nLWJhbGFuY2UgbG9vcCBpbiBbU2NoZWR1bGUuQ2FycnlpbmdBdF0uIDEyMDAgaXMgYSBjZW50dXJ5IG9mCi8vIG1vbnRobHkgcGVyaW9kcywgd2hpY2ggaXMgcGFzdCB0aGUgcG9pbnQgd2hlcmUgYW55IHJlYWwgc2NoZWR1bGUgc3RvcHMKLy8gYmVpbmcgbWVhbmluZ2Z1bC4KLy8KLy8gV2hhdCB0aGUgYm91bmQgY29zdHMgaXMgc3RhdGVkIGhlcmUgcmF0aGVyIHRoYW4gd2F2ZWQgYXQsIGJlY2F1c2UgdGhlCi8vIGVhcmxpZXIgd29yZGluZyBjbGFpbWVkIHRoZSBsb29wICJpcyBub3QgYSBnYXMgaGF6YXJkIGV2ZW4gaW4gYSBSZW5kZXIiIGFuZAovLyBubyBnYXMgd2FzIGV2ZXIgbWVhc3VyZWQuIFRoZSBmaWd1cmVzIHRoYXQgd2VyZTogQ2FycnlpbmdBdCBydW5zIHRoZSBsb29wIG4KLy8gdGltZXMgd2l0aCBuIDwgTGlmZSwgc28gYXQgbW9zdCBNYXhMaWZlLTEgPSAxMTk5IGl0ZXJhdGlvbnMgcGVyIGNhbGwsIGFuZAovLyBbU2NoZWR1bGUuQ2hhcmdlXSBldmFsdWF0ZXMgQ2FycnlpbmdBdCB0d2ljZSwgc28gb25lIENoYXJnZSBjYW4gcnVuIDIzOTguCi8vIFRoZSBlYXJseSBleGl0IGF0IHRoZSBzYWx2YWdlIGZsb29yIGlzIGFuIG9wdGltaXNhdGlvbiBhbmQgbm90IHBhcnQgb2YgdGhlCi8vIGJvdW5kIOKAlCBhIHNjaGVkdWxlIHdob3NlIHBlci1wZXJpb2QgY2hhcmdlIHRydW5jYXRlcyB0byB6ZXJvCi8vIChDb3N0KlJhdGVOdW0gPCBSYXRlRGVuKSBuZXZlciBtb3ZlcyBvZmYgQ29zdCwgbmV2ZXIgcmVhY2hlcyB0aGUgZmxvb3IsIGFuZAovLyBzbyBydW5zIHRoZSBmdWxsIDExOTkgb24gZXZlcnkgY2FsbCBmb3IgdGhlIGFzc2V0J3Mgd2hvbGUgbGlmZS4gQSByZWFsbQovLyB0aGF0IHdhbGtzIG1hbnkgYXNzZXRzIGluIG9uZSB0cmFuc2FjdGlvbiwgb3IgcmVuZGVycyB0aGVtLCBtdXN0IHNpemUgdGhhdAovLyBhZ2FpbnN0IHRoZSBnYXMgaXQgaGFzLiBUaGlzIHBhY2thZ2UgYm91bmRzIHRoZSB3b3JrOyBpdCBkb2VzIG5vdCBwcmljZSBpdC4KY29uc3QgTWF4TGlmZSA9IDEyMDAKCi8vIFBlcmlvZCBsZW5ndGhzIGluIHNlY29uZHMsIGZvciBhIGNhbGxlciB0aGF0IGtlZXBzIHRpbWUgaW4gdW5peCBzZWNvbmRzLgovLyBUaGV5IGFyZSBjb252ZW5pZW5jZXMgYW5kIG5vdCBhIGNhbGVuZGFyOiBNb250aGx5IGlzIDMwIGRheXMgYW5kIFllYXJseSBpcwovLyAzNjUsIHNvIG5laXRoZXIgdHJhY2tzIG1vbnRoIGxlbmd0aHMgb3IgbGVhcCB5ZWFycy4gQSBjYWxsZXIgdGhhdCBuZWVkcyBhCi8vIHJlYWwgY2FsZW5kYXIgbXVzdCBjb21wdXRlIGl0cyBvd24gcGVyaW9kIGNvdW50IGFuZCBwYXNzIGl0IHRvIHRoZQovLyBDYXJyeWluZ0F0L0NoYXJnZSBwYWlyIGRpcmVjdGx5LCB3aGljaCB0YWtlIHBlcmlvZCBjb3VudHMgYW5kIG5vdCB0aW1lcy4KY29uc3QgKAoJRGFpbHkgICBpbnQ2NCA9IDg2NDAwCglNb250aGx5IGludDY0ID0gMzAgKiBEYWlseQoJWWVhcmx5ICBpbnQ2NCA9IDM2NSAqIERhaWx5CikKCnZhciAoCgkvLyBFcnJCYWRDb3N0IGlzIHJldHVybmVkIHdoZW4gY29zdCBpcyBub3QgcG9zaXRpdmUuIEEgemVyby1jb3N0IGFzc2V0CgkvLyBoYXMgbm90aGluZyB0byBkZXByZWNpYXRlIGFuZCBtYWtlcyBCYXNpcyBkZWdlbmVyYXRlLgoJRXJyQmFkQ29zdCA9IGVycm9ycy5OZXcoImRlcHJlY2lhdGlvbjogY29zdCBtdXN0IGJlIHBvc2l0aXZlIikKCgkvLyBFcnJCYWRTYWx2YWdlIGlzIHJldHVybmVkIHdoZW4gc2FsdmFnZSBpcyBuZWdhdGl2ZSwgb3IgaXMgbm90IGxlc3MKCS8vIHRoYW4gY29zdC4gU2FsdmFnZSBlcXVhbCB0byBjb3N0IGlzIGEgbm9uLWRlcHJlY2lhdGluZyBhc3NldCwgd2hpY2gKCS8vIGlzIGxlZ2l0aW1hdGUgYm9va2tlZXBpbmcgYnV0IGlzIG5vdCBhIHNjaGVkdWxlOiB0aGVyZSBpcyBubyBjaGFyZ2UKCS8vIHRvIHBvc3QsIGV2ZXIsIGFuZCBzaWxlbnRseSBhY2NlcHRpbmcgaXQgd291bGQgaGF2ZSBhIHJlYWxtIG9wZW4KCS8vIGFjY291bnRzIGFuZCBwb3N0IG5vdGhpbmcuCglFcnJCYWRTYWx2YWdlID0gZXJyb3JzLk5ldygiZGVwcmVjaWF0aW9uOiBzYWx2YWdlIG11c3QgYmUgaW4gWzAsIGNvc3QpIikKCgkvLyBFcnJCYWRMaWZlIGlzIHJldHVybmVkIHdoZW4gdGhlIHVzZWZ1bCBsaWZlIGlzIG5vdCBwb3NpdGl2ZSBvcgoJLy8gZXhjZWVkcyBNYXhMaWZlLgoJRXJyQmFkTGlmZSA9IGVycm9ycy5OZXcoImRlcHJlY2lhdGlvbjogbGlmZSBtdXN0IGJlIGluIFsxLCBNYXhMaWZlXSIpCgoJLy8gRXJyQmFkTWV0aG9kIGlzIHJldHVybmVkIGZvciBhIG1ldGhvZCBvdXRzaWRlIHRoZSBkZWNsYXJlZCBzZXQuCglFcnJCYWRNZXRob2QgPSBlcnJvcnMuTmV3KCJkZXByZWNpYXRpb246IHVua25vd24gbWV0aG9kIikKCgkvLyBFcnJCYWRSYXRlIGlzIHJldHVybmVkIHdoZW4gYSBkZWNsaW5pbmctYmFsYW5jZSBmYWN0b3IgaXMgbm90IGEKCS8vIHByb3BlciBmcmFjdGlvbiBpbiAoMCwgMSkuIEEgcmF0ZSBvZiAxIHdyaXRlcyB0aGUgYXNzZXQgb2ZmIGluIG9uZQoJLy8gcGVyaW9kIGFuZCBhIHJhdGUgb2YgMCBuZXZlciBjaGFyZ2VzIGFueXRoaW5nOyBib3RoIGFyZSBiZXR0ZXIgc2FpZAoJLy8gYW5vdGhlciB3YXksIHNvIG5laXRoZXIgaXMgYWNjZXB0ZWQgaGVyZS4KCUVyckJhZFJhdGUgPSBlcnJvcnMuTmV3KCJkZXByZWNpYXRpb246IHJhdGUgbXVzdCBzYXRpc2Z5IDAgPCBudW0gPCBkZW4iKQoKCS8vIEVyckJhZFBlcmlvZCBpcyByZXR1cm5lZCB3aGVuIGEgcGVyaW9kIGxlbmd0aCBpcyBub3QgcG9zaXRpdmUuCglFcnJCYWRQZXJpb2QgPSBlcnJvcnMuTmV3KCJkZXByZWNpYXRpb246IHBlcmlvZCBtdXN0IGJlIHBvc2l0aXZlIikKCgkvLyBFcnJCYWNrd2FyZHMgaXMgcmV0dXJuZWQgd2hlbiBub3cgZmFsbHMgYmVmb3JlIHRoZSBwbGFjZWQtaW4tc2VydmljZQoJLy8gdGltZS4gVGltZSBtb3ZpbmcgYmFja3dhcmRzIGlzIGEgY2FsbGVyIGJ1ZyDigJQgYSBzdG9yZWQgdGltZXN0YW1wIGZyb20KCS8vIGFub3RoZXIgY2xvY2ssIGEgdGVzdCB0aGF0IHJld291bmQg4oCUIGFuZCB0cmVhdGluZyBpdCBhcyB6ZXJvIGVsYXBzZWQKCS8vIHdvdWxkIGhpZGUgaXQuCglFcnJCYWNrd2FyZHMgPSBlcnJvcnMuTmV3KCJkZXByZWNpYXRpb246IG5vdyBmYWxscyBiZWZvcmUgcGxhY2VkQXQiKQoKCS8vIEVyckJhZFNwYW4gaXMgcmV0dXJuZWQgYnkgQ2hhcmdlIHdoZW4gdGhlIHNwYW4gcnVucyBiYWNrd2FyZHMsIHdoaWNoCgkvLyB3b3VsZCBtYWtlIGEgZGVwcmVjaWF0aW9uIGNoYXJnZSBuZWdhdGl2ZSBhbmQgY3JlZGl0IGFuIGV4cGVuc2UuCglFcnJCYWRTcGFuID0gZXJyb3JzLk5ldygiZGVwcmVjaWF0aW9uOiBjaGFyZ2Ugc3BhbiBtdXN0IG5vdCBydW4gYmFja3dhcmRzIikKCgkvLyBFcnJPdmVyZmxvdyBpcyByZXR1cm5lZCB3aGVuIHRoZSBhcml0aG1ldGljIHdvdWxkIHdyYXAuIE1vc3QKCS8vIG92ZXJmbG93IGlzIGV4Y2x1ZGVkIGF0IGNvbnN0cnVjdGlvbiBpbnN0ZWFkOyBzZWUgTmV3LgoJRXJyT3ZlcmZsb3cgPSBlcnJvcnMuTmV3KCJkZXByZWNpYXRpb246IGludDY0IG92ZXJmbG93IikKKQoKLy8gVGhlIGJvdW5kcyBhcmUgd3JpdHRlbiBhcyBsaXRlcmFscyByYXRoZXIgdGhhbiBhcyB0aGUgdXN1YWwgYGludDY0KDEpPDw2MyAtIDFgCi8vIGlkaW9tLCB3aGljaCBkb2VzIG5vdCBjb21waWxlOiB0aGUgc2hpZnQgaXMgZXZhbHVhdGVkIGluIHRoZSBhbHJlYWR5LXR5cGVkCi8vIGludDY0IGFuZCBvdmVyZmxvd3MgYmVmb3JlIHRoZSBzdWJ0cmFjdGlvbiBjYW4gYnJpbmcgaXQgYmFjayBpbiByYW5nZS4gSXQgaXMKLy8gYSBjb21waWxlIGVycm9yIGhlcmUgcmF0aGVyIHRoYW4gYSB3cm9uZyBudW1iZXIsIGJ1dCBpdCBpcyB0aGUgc2FtZSBzaGFwZSBhcwovLyB0aGUgYXJpdGhtZXRpYyB0aGlzIHBhY2thZ2UgZXhpc3RzIHRvIGdldCByaWdodCwgc28gaXQgaXMgd29ydGggbmFtaW5nLgpjb25zdCAoCgltYXhJbnQ2NCBpbnQ2NCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDcKCW1heEludDMyIGludDY0ID0gMjE0NzQ4MzY0NwopCgovLyBNZXRob2QgaXMgaG93IHRoZSBiYXNpcyBpcyBzcHJlYWQgYWNyb3NzIHRoZSB1c2VmdWwgbGlmZS4KdHlwZSBNZXRob2QgdWludDgKCmNvbnN0ICgKCS8vIFN0cmFpZ2h0TGluZSBjaGFyZ2VzIHRoZSBiYXNpcyBldmVubHkgYWNyb3NzIHRoZSBsaWZlLiBDbG9zZWQgZm9ybS4KCVN0cmFpZ2h0TGluZSBNZXRob2QgPSAxCgoJLy8gRGVjbGluaW5nQmFsYW5jZSBjaGFyZ2VzIGEgZml4ZWQgZnJhY3Rpb24gb2YgdGhlIHJlbWFpbmluZyBjYXJyeWluZwoJLy8gYW1vdW50IGVhY2ggcGVyaW9kLCBzbyBlYXJseSBwZXJpb2RzIGNoYXJnZSBtb3JlLiBOb3QgY2xvc2VkIGZvcm0KCS8vIG92ZXIgaW50ZWdlcnM7IHNlZSB0aGUgcGFja2FnZSBkb2Mgb24gd2h5IHRoZSBsb29wIGlzIGJvdW5kZWQuCglEZWNsaW5pbmdCYWxhbmNlIE1ldGhvZCA9IDIKKQoKLy8gVmFsaWQgcmVwb3J0cyB3aGV0aGVyIG0gaXMgYSBtZXRob2QgdGhpcyBwYWNrYWdlIGltcGxlbWVudHMuCmZ1bmMgKG0gTWV0aG9kKSBWYWxpZCgpIGJvb2wgeyByZXR1cm4gbSA9PSBTdHJhaWdodExpbmUgfHwgbSA9PSBEZWNsaW5pbmdCYWxhbmNlIH0KCi8vIFN0cmluZyBuYW1lcyB0aGUgbWV0aG9kLiBUaGUgemVybyBNZXRob2QgaXMgImludmFsaWQiIHJhdGhlciB0aGFuIGVtcHR5LCBzbwovLyBhIGNhbGxlciB0aGF0IHJlbmRlcnMgaXQgd2l0aG91dCBjaGVja2luZyBWYWxpZCBwcmludHMgc29tZXRoaW5nIHRoYXQgcmVhZHMKLy8gYXMgd3JvbmcgaW5zdGVhZCBvZiBzb21ldGhpbmcgdGhhdCByZWFkcyBhcyBtaXNzaW5nLgpmdW5jIChtIE1ldGhvZCkgU3RyaW5nKCkgc3RyaW5nIHsKCXN3aXRjaCBtIHsKCWNhc2UgU3RyYWlnaHRMaW5lOgoJCXJldHVybiAic3RyYWlnaHQtbGluZSIKCWNhc2UgRGVjbGluaW5nQmFsYW5jZToKCQlyZXR1cm4gImRlY2xpbmluZy1iYWxhbmNlIgoJfQoJcmV0dXJuICJpbnZhbGlkIgp9CgovLyBTY2hlZHVsZSBpcyB0aGUgZGVwcmVjaWF0aW9uIHBsYW4gZm9yIG9uZSBhc3NldC4gSXQgaXMgYSB2YWx1ZSwgY2FycmllcyBubwovLyBzdGF0ZSBhYm91dCB3aGF0IGhhcyBiZWVuIGJvb2tlZCwgYW5kIGlzIHNhZmUgdG8gY29weS4gQ29uc3RydWN0IHdpdGgKLy8gW05ld10gb3IgW05ld0RlY2xpbmluZ10gc28gdGhlIGludmFyaWFudHMg4oCUIGluY2x1ZGluZyB0aGUgb3ZlcmZsb3cKLy8gcHJlY29uZGl0aW9ucyDigJQgYXJlIGNoZWNrZWQgb25jZSByYXRoZXIgdGhhbiBvbiBldmVyeSBjYWxsLgp0eXBlIFNjaGVkdWxlIHN0cnVjdCB7CgkvLyBDb3N0IGlzIHRoZSBkZXByZWNpYWJsZSBiYXNpcyBhdCBwbGFjZWQtaW4tc2VydmljZS4KCUNvc3QgaW50NjQKCgkvLyBTYWx2YWdlIGlzIHRoZSBmbG9vci4gVGhlIGNhcnJ5aW5nIGFtb3VudCBuZXZlciBmYWxscyBiZWxvdyBpdCBhbmQKCS8vIHJlYWNoZXMgaXQgZXhhY3RseSBhdCBMaWZlLgoJU2FsdmFnZSBpbnQ2NAoKCS8vIExpZmUgaXMgdGhlIHVzZWZ1bCBsaWZlIGluIHdob2xlIHBlcmlvZHMuCglMaWZlIGludDMyCgoJLy8gTWV0aG9kIGlzIGhvdyB0aGUgYmFzaXMgaXMgc3ByZWFkLgoJTWV0aG9kIE1ldGhvZAoKCS8vIFJhdGVOdW0gYW5kIFJhdGVEZW4gYXJlIHRoZSBkZWNsaW5pbmctYmFsYW5jZSBmYWN0b3IgYXMgYSBwcm9wZXIKCS8vIGZyYWN0aW9uLiBCb3RoIGFyZSB6ZXJvIGZvciBTdHJhaWdodExpbmUuCglSYXRlTnVtIGludDY0CglSYXRlRGVuIGludDY0Cn0KCi8vIE5ldyB2YWxpZGF0ZXMgYW5kIHJldHVybnMgYSBzdHJhaWdodC1saW5lIHNjaGVkdWxlLgpmdW5jIE5ldyhjb3N0LCBzYWx2YWdlIGludDY0LCBsaWZlIGludDMyKSAoU2NoZWR1bGUsIGVycm9yKSB7CglzIDo9IFNjaGVkdWxle0Nvc3Q6IGNvc3QsIFNhbHZhZ2U6IHNhbHZhZ2UsIExpZmU6IGxpZmUsIE1ldGhvZDogU3RyYWlnaHRMaW5lfQoJaWYgZXJyIDo9IHMuY2hlY2soKTsgZXJyICE9IG5pbCB7CgkJcmV0dXJuIFNjaGVkdWxle30sIGVycgoJfQoJcmV0dXJuIHMsIG5pbAp9CgovLyBOZXdEZWNsaW5pbmcgdmFsaWRhdGVzIGFuZCByZXR1cm5zIGEgZGVjbGluaW5nLWJhbGFuY2Ugc2NoZWR1bGUgY2hhcmdpbmcKLy8gbnVtL2RlbiBvZiB0aGUgcmVtYWluaW5nIGNhcnJ5aW5nIGFtb3VudCBlYWNoIHBlcmlvZC4gRG91YmxlLWRlY2xpbmluZyBvdmVyCi8vIGEgMTAtcGVyaW9kIGxpZmUgaXMgbnVtPTIsIGRlbj0xMC4KZnVuYyBOZXdEZWNsaW5pbmcoY29zdCwgc2FsdmFnZSBpbnQ2NCwgbGlmZSBpbnQzMiwgbnVtLCBkZW4gaW50NjQpIChTY2hlZHVsZSwgZXJyb3IpIHsKCXMgOj0gU2NoZWR1bGV7CgkJQ29zdDogY29zdCwgU2FsdmFnZTogc2FsdmFnZSwgTGlmZTogbGlmZSwKCQlNZXRob2Q6IERlY2xpbmluZ0JhbGFuY2UsIFJhdGVOdW06IG51bSwgUmF0ZURlbjogZGVuLAoJfQoJaWYgZXJyIDo9IHMuY2hlY2soKTsgZXJyICE9IG5pbCB7CgkJcmV0dXJuIFNjaGVkdWxle30sIGVycgoJfQoJcmV0dXJuIHMsIG5pbAp9CgovLyBjaGVjayB2YWxpZGF0ZXMgZXZlcnkgZmllbGQgYW5kLCBjcml0aWNhbGx5LCB0aGUgdHdvIG92ZXJmbG93Ci8vIHByZWNvbmRpdGlvbnMuIEVzdGFibGlzaGluZyB0aGVtIGhlcmUgaXMgd2hhdCBsZXRzIENhcnJ5aW5nQXQgYW5kIENoYXJnZSBiZQovLyB0b3RhbCBmdW5jdGlvbnMgb24gYSBjb25zdHJ1Y3RlZCBTY2hlZHVsZTogYSB6ZXJvIHZhbHVlIHN0aWxsIGZhaWxzLCB3aGljaAovLyBpcyB3aHkgZXZlcnkgbWV0aG9kIGNhbGxzIGNoZWNrIHJhdGhlciB0aGFuIHRydXN0aW5nIGl0cyByZWNlaXZlci4KZnVuYyAocyBTY2hlZHVsZSkgY2hlY2soKSBlcnJvciB7CglpZiBzLkNvc3QgPD0gMCB7CgkJcmV0dXJuIEVyckJhZENvc3QKCX0KCWlmIHMuU2FsdmFnZSA8IDAgfHwgcy5TYWx2YWdlID49IHMuQ29zdCB7CgkJcmV0dXJuIEVyckJhZFNhbHZhZ2UKCX0KCWlmIHMuTGlmZSA8PSAwIHx8IGludDY0KHMuTGlmZSkgPiBNYXhMaWZlIHsKCQlyZXR1cm4gRXJyQmFkTGlmZQoJfQoJaWYgIXMuTWV0aG9kLlZhbGlkKCkgewoJCXJldHVybiBFcnJCYWRNZXRob2QKCX0KCXN3aXRjaCBzLk1ldGhvZCB7CgljYXNlIFN0cmFpZ2h0TGluZToKCQkvLyBCYXNpcypuIGlzIHRoZSBvbmx5IHByb2R1Y3QsIGFuZCBuIDw9IExpZmUuCgkJaWYgcy5CYXNpcygpID4gbWF4SW50NjQvaW50NjQocy5MaWZlKSB7CgkJCXJldHVybiBFcnJPdmVyZmxvdwoJCX0KCWNhc2UgRGVjbGluaW5nQmFsYW5jZToKCQlpZiBzLlJhdGVEZW4gPD0gMCB8fCBzLlJhdGVOdW0gPD0gMCB8fCBzLlJhdGVOdW0gPj0gcy5SYXRlRGVuIHsKCQkJcmV0dXJuIEVyckJhZFJhdGUKCQl9CgkJLy8gYypSYXRlTnVtIGlzIHRoZSBvbmx5IHByb2R1Y3QgYW5kIGMgPD0gQ29zdCwgc28gQ29zdCpSYXRlRGVuCgkJLy8gYm91bmRzIGl0LiBDaGVja2luZyBhZ2FpbnN0IFJhdGVEZW4gcmF0aGVyIHRoYW4gUmF0ZU51bSBpcwoJCS8vIGRlbGliZXJhdGU6IGl0IGlzIHRoZSBsb29zZXIgcXVhbnRpdHksIHNvIHRoZSBwcmVjb25kaXRpb24KCQkvLyBzdGF5cyB0cnVlIGlmIGEgbGF0ZXIgY2hhbmdlIG1vdmVzIHRoZSBtdWx0aXBsaWNhdGlvbi4KCQlpZiBzLkNvc3QgPiBtYXhJbnQ2NC9zLlJhdGVEZW4gewoJCQlyZXR1cm4gRXJyT3ZlcmZsb3cKCQl9Cgl9CglyZXR1cm4gbmlsCn0KCi8vIFZhbGlkIHJlcG9ydHMgd2hldGhlciB0aGUgc2NoZWR1bGUgaXMgd2VsbC1mb3JtZWQuIEEgemVybyBTY2hlZHVsZSBpcyBub3QuCmZ1bmMgKHMgU2NoZWR1bGUpIFZhbGlkKCkgYm9vbCB7IHJldHVybiBzLmNoZWNrKCkgPT0gbmlsIH0KCi8vIEJhc2lzIGlzIENvc3QgLSBTYWx2YWdlOiB0aGUgdG90YWwgdGhhdCB3aWxsIGV2ZXIgYmUgY2hhcmdlZCBhY3Jvc3MgdGhlCi8vIHdob2xlIGxpZmUsIHVuZGVyIGVpdGhlciBtZXRob2QuCi8vCi8vIEl0IGRvZXMgbm90IHZhbGlkYXRlLCBhbmQgaXQgaXMgdGhlIG9ubHkgZXhwb3J0ZWQgbWV0aG9kIGhlcmUgdGhhdCBkb2VzCi8vIG5vdC4gVGhhdCBpcyBmb3JjZWQgcmF0aGVyIHRoYW4gY2hvc2VuOiBjaGVjaygpIGNhbGxzIEJhc2lzIHRvIGVzdGFibGlzaAovLyBvbmUgb2YgaXRzIG93biBvdmVyZmxvdyBwcmVjb25kaXRpb25zLCBzbyBCYXNpcyBjYW5ub3QgY2FsbCBjaGVjaygpLiBJdCBpcwovLyB0aGVyZWZvcmUgYSBiYXJlIHN1YnRyYWN0aW9uIG92ZXIgd2hhdGV2ZXIgZmllbGRzIGl0IHdhcyBoYW5kZWQsIGFuZCBvbiBhbgovLyBpbGwtZm9ybWVkIHNjaGVkdWxlIGl0IHJldHVybnMgYW4gYXJiaXRyYXJ5IG51bWJlciDigJQgU2NoZWR1bGV7Q29zdDoKLy8gbWF4SW50NjQsIFNhbHZhZ2U6IC0xfSB3cmFwcyB0byBtaW5JbnQ2NC4gQSB6ZXJvIHJlc3VsdCBtZWFucyAiaW52YWxpZCwgb3IKLy8gemVybyBjb3N0IiwgbmV2ZXIgImZ1bGx5IGRlcHJlY2lhdGVkIjsgZGVwcmVjaWF0aW9uIGJvb2tlZCB0byBkYXRlIGlzCi8vIFtTY2hlZHVsZS5BY2N1bXVsYXRlZEF0XSwgd2hpY2ggZG9lcyB2YWxpZGF0ZS4gR3VhcmQgYSBjYWxsZXItc3VwcGxpZWQKLy8gc2NoZWR1bGUgd2l0aCBbU2NoZWR1bGUuVmFsaWRdIGJlZm9yZSBxdW90aW5nIEJhc2lzIGZyb20gaXQuCmZ1bmMgKHMgU2NoZWR1bGUpIEJhc2lzKCkgaW50NjQgeyByZXR1cm4gcy5Db3N0IC0gcy5TYWx2YWdlIH0KCi8vIENhcnJ5aW5nQXQgcmV0dXJucyB0aGUgY2FycnlpbmcgYW1vdW50IGFmdGVyIG4gd2hvbGUgcGVyaW9kcyBpbiBzZXJ2aWNlLgovLwovLyBJdCBpcyBtb25vdG9uZSBub24taW5jcmVhc2luZyBpbiBuLCBlcXVhbHMgQ29zdCBhdCBuIDw9IDAsIGFuZCBlcXVhbHMKLy8gU2FsdmFnZSBleGFjdGx5IGF0IGV2ZXJ5IG4gPj0gTGlmZS4gVGhhdCBsYXN0IGNsYW1wIGlzIGEgZGVjbGFyZWQKLy8gY29udmVudGlvbiBhbmQgaXMgZG9pbmcgcmVhbCB3b3JrIHVuZGVyIERlY2xpbmluZ0JhbGFuY2UsIHdoaWNoIGFwcHJvYWNoZXMKLy8gdGhlIGZsb29yIGFzeW1wdG90aWNhbGx5IGFuZCB3b3VsZCBvdGhlcndpc2UgbmV2ZXIgcmVhY2ggaXQ6IHRoZSBmaW5hbAovLyBwZXJpb2QgYWJzb3JicyB3aGF0ZXZlciByZW1haW5zLiBUaGUgY29uc2VxdWVuY2UgaXMgd29ydGggc3RhdGluZyBiZWNhdXNlIGl0Ci8vIGlzIHZpc2libGUgaW4gdGhlIG51bWJlcnMg4oCUIGEgZGVjbGluaW5nLWJhbGFuY2Ugc2NoZWR1bGUncyBsYXN0IGNoYXJnZSBjYW4KLy8gYmUgbXVjaCBsYXJnZXIgdGhhbiB0aGUgb25lIGJlZm9yZSBpdC4gVGV4dGJvb2tzIHVzdWFsbHkgYXZvaWQgdGhhdCBieQovLyBjcm9zc2luZyBvdmVyIHRvIHN0cmFpZ2h0IGxpbmUgcGFydHdheTsgdGhpcyBwYWNrYWdlIGRvZXMgbm90LCBiZWNhdXNlIHRoZQovLyBjcm9zc292ZXIgcnVsZSBpcyBhIHBvbGljeSBjaG9pY2UgdGhhdCBiZWxvbmdzIHRvIHRoZSBjYWxsZXIgYW5kIGJ1cnlpbmcgaXQKLy8gaGVyZSB3b3VsZCBtYWtlIHRoZSBzY2hlZHVsZSB1bmV4cGxhaW5hYmxlIGZyb20gaXRzIG93biBmaWVsZHMuCi8vCi8vIEEgZGVjbGluaW5nLWJhbGFuY2Ugc2NoZWR1bGUgd2hvc2UgcGVyLXBlcmlvZCBjaGFyZ2UgdHJ1bmNhdGVzIHRvIHplcm8KLy8gbmV2ZXIgZGVwcmVjaWF0ZXMgYXQgYWxsLiBUaGUgY2hhcmdlIGlzIChjKlJhdGVOdW0pL1JhdGVEZW4gaW4gaW50ZWdlcnMsIHNvCi8vIHdoZW5ldmVyIENvc3QqUmF0ZU51bSA8IFJhdGVEZW4gaXQgaXMgMCwgYyBuZXZlciBtb3ZlcyBvZmYgQ29zdCwgYW5kCi8vIENhcnJ5aW5nQXQgcmV0dXJucyBDb3N0IGF0IGV2ZXJ5IG4gYmVsb3cgTGlmZSBhbmQgU2FsdmFnZSBhdCBMaWZlIOKAlCB0aGUKLy8gd2hvbGUgb2YgdGhlIGJhc2lzIGZhbGxzIGluIHRoZSBsYXN0IHBlcmlvZC4gVGhhdCBpcyBpbnRlZ2VyIHRydW5jYXRpb24KLy8gYmVoYXZpbmcgY29ycmVjdGx5IGFuZCBpdCBpcyBhY2NlcHRlZCByYXRoZXIgdGhhbiBndWFyZGVkLCBiZWNhdXNlIHRoZQovLyBhbHRlcm5hdGl2ZSBpcyBhIG1pbmltdW0tY2hhcmdlIHJ1bGUsIHdoaWNoIGlzIGEgcG9saWN5IGEgY2FsbGVyIG1heQovLyByZWFzb25hYmx5IHdhbnQgZWl0aGVyIHdheSBhbmQgY2Fubm90IGJlIGluZmVycmVkIGZyb20gdGhlIGZpZWxkcy4gSXQgaXMKLy8gZG9jdW1lbnRlZCBiZWNhdXNlIGl0IGlzIGludmlzaWJsZSBpbiB0aGUgb3JkaW5hcnkgbnVtYmVycyBhbmQgaXMgdGhlIG9uZQovLyBzaGFwZSB0aGF0IGFsc28gZGVmZWF0cyB0aGUgbG9vcCdzIGVhcmx5IGV4aXQ7IHNlZSBbTWF4TGlmZV0gb24gdGhlIGNvc3QuCi8vCi8vIFVuZGVyIFN0cmFpZ2h0TGluZSB0aGUgcmVzdWx0IGlzIGNsb3NlZCBmb3JtLiBVbmRlciBEZWNsaW5pbmdCYWxhbmNlIGl0Ci8vIGNvc3RzIE8obWluKG4sIExpZmUpKSBpdGVyYXRpb25zLCBib3VuZGVkIGJ5IE1heExpZmUgYW5kIGV4aXRpbmcgZWFybHkgYXQKLy8gdGhlIGZsb29yOyBzZWUgdGhlIHBhY2thZ2UgZG9jLgpmdW5jIChzIFNjaGVkdWxlKSBDYXJyeWluZ0F0KG4gaW50MzIpIChpbnQ2NCwgZXJyb3IpIHsKCWlmIGVyciA6PSBzLmNoZWNrKCk7IGVyciAhPSBuaWwgewoJCXJldHVybiAwLCBlcnIKCX0KCWlmIG4gPD0gMCB7CgkJcmV0dXJuIHMuQ29zdCwgbmlsCgl9CglpZiBuID49IHMuTGlmZSB7CgkJcmV0dXJuIHMuU2FsdmFnZSwgbmlsCgl9CglpZiBzLk1ldGhvZCA9PSBTdHJhaWdodExpbmUgewoJCS8vIEJhc2lzKm4gY2Fubm90IG92ZXJmbG93OiBjaGVjaygpIGVzdGFibGlzaGVkCgkJLy8gQmFzaXMgPD0gbWF4SW50NjQvTGlmZSBhbmQgbiA8IExpZmUuCgkJcmV0dXJuIHMuQ29zdCAtIChzLkJhc2lzKCkqaW50NjQobikpL2ludDY0KHMuTGlmZSksIG5pbAoJfQoJYyA6PSBzLkNvc3QKCWZvciBpIDo9IGludDMyKDApOyBpIDwgbjsgaSsrIHsKCQkvLyBjKlJhdGVOdW0gY2Fubm90IG92ZXJmbG93OiBjaGVjaygpIGVzdGFibGlzaGVkCgkJLy8gQ29zdCA8PSBtYXhJbnQ2NC9SYXRlRGVuLCBSYXRlTnVtIDwgUmF0ZURlbiwgYW5kIGMgPD0gQ29zdC4KCQljaGFyZ2UgOj0gKGMgKiBzLlJhdGVOdW0pIC8gcy5SYXRlRGVuCgkJaWYgYy1jaGFyZ2UgPCBzLlNhbHZhZ2UgewoJCQljaGFyZ2UgPSBjIC0gcy5TYWx2YWdlCgkJfQoJCWMgLT0gY2hhcmdlCgkJaWYgYyA8PSBzLlNhbHZhZ2UgewoJCQlyZXR1cm4gcy5TYWx2YWdlLCBuaWwKCQl9Cgl9CglyZXR1cm4gYywgbmlsCn0KCi8vIEFjY3VtdWxhdGVkQXQgcmV0dXJucyBhY2N1bXVsYXRlZCBkZXByZWNpYXRpb24gYWZ0ZXIgbiB3aG9sZSBwZXJpb2RzOiB0aGUKLy8gY29udHJhLWFzc2V0IGJhbGFuY2UsIENvc3QgLSBDYXJyeWluZ0F0KG4pLiBJdCBpcyBkZWZpbmVkIGluIHRlcm1zIG9mCi8vIENhcnJ5aW5nQXQgc28gdGhlIHR3byBjYW4gbmV2ZXIgZGlzYWdyZWUsIHdoaWNoIGlzIHRoZSBzYW1lIHJlYXNvbiBDaGFyZ2UKLy8gaXMuCmZ1bmMgKHMgU2NoZWR1bGUpIEFjY3VtdWxhdGVkQXQobiBpbnQzMikgKGludDY0LCBlcnJvcikgewoJYywgZXJyIDo9IHMuQ2FycnlpbmdBdChuKQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIDAsIGVycgoJfQoJcmV0dXJuIHMuQ29zdCAtIGMsIG5pbAp9CgovLyBDaGFyZ2UgcmV0dXJucyB0aGUgZGVwcmVjaWF0aW9uIGV4cGVuc2UgZm9yIG1vdmluZyBhIHNjaGVkdWxlIGZyb20gYGZyb21gCi8vIHdob2xlIHBlcmlvZHMgYm9va2VkIHRvIGB0b2AuCi8vCi8vIEl0IGlzIHRoZSBkaWZmZXJlbmNlIG9mIENhcnJ5aW5nQXQgYXQgdGhlIHR3byBwb2ludHMsIHdoaWNoIG1ha2VzIGNoYXJnZXMKLy8gdGVsZXNjb3BlIGV4YWN0bHk6Ci8vCi8vCUNoYXJnZShhLCBiKSArIENoYXJnZShiLCBjKSA9PSBDaGFyZ2UoYSwgYykgICBmb3IgYSA8PSBiIDw9IGMKLy8KLy8gU28gaG93IG9mdGVuIGEgcmVhbG0gcnVucyB0aGUgc2NoZWR1bGUgY2Fubm90IGNoYW5nZSB0aGUgdG90YWwgaXQgYm9va3MsIGFuZAovLyBhIHJlYWxtIHRoYXQgaGFzIGJvb2tlZCB0aHJvdWdoIHBlcmlvZCBgZnJvbWAgY2FuIHBvc3QgQ2hhcmdlKGZyb20sIG5vdykKLy8gd2l0aCBubyBzdG9yZWQgY2FycnlpbmcgYW1vdW50IHRvIGRyaWZ0LiBUaGUgcmVzdWx0IGlzIG5ldmVyIG5lZ2F0aXZlOyBhCi8vIHNwYW4gdGhhdCBydW5zIGJhY2t3YXJkcyBpcyBFcnJCYWRTcGFuIHJhdGhlciB0aGFuIGEgY3JlZGl0IHRvIGFuIGV4cGVuc2UKLy8gYWNjb3VudC4KZnVuYyAocyBTY2hlZHVsZSkgQ2hhcmdlKGZyb20sIHRvIGludDMyKSAoaW50NjQsIGVycm9yKSB7CglpZiBlcnIgOj0gcy5jaGVjaygpOyBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gMCwgZXJyCgl9CglpZiB0byA8IGZyb20gewoJCXJldHVybiAwLCBFcnJCYWRTcGFuCgl9CgliZWZvcmUsIGVyciA6PSBzLkNhcnJ5aW5nQXQoZnJvbSkKCWlmIGVyciAhPSBuaWwgewoJCXJldHVybiAwLCBlcnIKCX0KCWFmdGVyLCBlcnIgOj0gcy5DYXJyeWluZ0F0KHRvKQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIDAsIGVycgoJfQoJLy8gYmVmb3JlID49IGFmdGVyIGJlY2F1c2UgQ2FycnlpbmdBdCBpcyBtb25vdG9uZSBub24taW5jcmVhc2luZywgc28gdGhlCgkvLyBkaWZmZXJlbmNlIGlzIG5vbi1uZWdhdGl2ZSBhbmQgY2Fubm90IG92ZXJmbG93OiBib3RoIGxpZSBpbgoJLy8gW1NhbHZhZ2UsIENvc3RdLgoJcmV0dXJuIGJlZm9yZSAtIGFmdGVyLCBuaWwKfQoKLy8gUGVyaW9kcyByZXR1cm5zIHRoZSB3aG9sZSBwZXJpb2RzIGVsYXBzZWQgYmV0d2VlbiBwbGFjZWRBdCBhbmQgbm93LgovLwovLyBBIHBhcnRpYWwgcGVyaW9kIGluIHByb2dyZXNzIGlzIG5vdCBjb3VudGVkIGFuZCBpcyBub3QgbG9zdDogaXQgaXMgY291bnRlZAovLyBieSBhIGxhdGVyIGNhbGwsIG9uY2UgaXQgY29tcGxldGVzLiBUaGF0IGlzIHdoYXQgbWFrZXMgdGhlIHRlbGVzY29waW5nCi8vIHByb3BlcnR5IGFib3ZlIHJlYWNoIHRoZSByaWdodCB0b3RhbCBob3dldmVyIHRoZSBjYWxsZXIgc2xpY2VzIHRpbWUuCi8vCi8vIFRoZSBzcGFuIGlzIG1lYXN1cmVkIGluIHVpbnQ2NCBvbiBwdXJwb3NlLCBhbmQgdGhlIHJlYXNvbiBpcyB0aGUgd2hvbGUKLy8gY29ycmVjdG5lc3MgYXJndW1lbnQuIGBub3cgPj0gcGxhY2VkQXRgIGlzIGFscmVhZHkgZW5mb3JjZWQgYWJvdmUsIHNvIHRoZQovLyB0cnVlIGVsYXBzZWQgc3BhbiBpcyBub24tbmVnYXRpdmU7IGl0cyBsYXJnZXN0IHZhbHVlIGlzCi8vIG1heEludDY0IC0gbWluSW50NjQgPSAyXjY0IC0gMSwgd2hpY2ggZG9lcyBub3QgZml0IGluIGFuIGludDY0IGFuZCBmaXRzCi8vICpleGFjdGx5KiBpbiBhIHVpbnQ2NC4gaW50NjQgc3VidHJhY3Rpb24gd3JhcHMgdHdvJ3MtY29tcGxlbWVudCwgc28gdGhlIGJpdAovLyBwYXR0ZXJuIG9mIG5vdyAtIHBsYWNlZEF0IGlzIGFscmVhZHkgdGhlIGxvdyA2NCBiaXRzIG9mIHRoZSB0cnVlIGRpZmZlcmVuY2UsCi8vIGFuZCByZWFkaW5nIHRoYXQgcGF0dGVybiBhcyBhIHVpbnQ2NCByZWNvdmVycyB0aGUgZGlmZmVyZW5jZSB3aXRoIG5vIGxvc3MsCi8vIG5vIGNsYW1wIGFuZCBubyByZWFjaGFibGUgd3JhcC4gRXJyT3ZlcmZsb3cgdGhlcmVmb3JlIG1lYW5zIGV4YWN0bHkgb25lCi8vIHRoaW5nIGhlcmUg4oCUIHRoZSBxdW90aWVudCBkb2VzIG5vdCBmaXQgaW4gYW4gaW50MzIg4oCUIGFuZCB0aGUgc3VidHJhY3Rpb24KLy8gbmVlZHMgbm8gZ3VhcmQgYXQgYWxsLgovLwovLyBUaGUgZ3VhcmQgaXQgcmVwbGFjZXMsIGBwbGFjZWRBdCA8IDAgJiYgbm93ID4gMCAmJiBlbGFwc2VkIDwgMGAsIHdhcyB3cm9uZwovLyBpbiAqYm90aCogZGlyZWN0aW9ucywgbWVhc3VyZWQgYnkgZXhoYXVzdGl2ZSBkaWZmZXJlbnRpYWwgc3dlZXAgYWdhaW5zdAovLyBleGFjdCBhcml0aG1ldGljIHJhdGhlciB0aGFuIHJlYXNvbmVkIGFib3V0OiBpdCByZXR1cm5lZCAoMCwgbmlsKSBmb3IKLy8gUGVyaW9kcyhtaW5JbnQ2NCwgMCwgMSkgYW5kIGV2ZW4gYSBuZWdhdGl2ZSBjb3VudCBmb3IKLy8gUGVyaW9kcyhtaW5JbnQ2NCwgMCwgMl42MiksIGFuZCBpdCByZWplY3RlZCByZXByZXNlbnRhYmxlIGFuc3dlcnMgc3VjaCBhcwovLyBQZXJpb2RzKC0xLCBtYXhJbnQ2NCwgbWF4SW50NjQpLCB3aG9zZSBjb3VudCBpcyAxLiBTZWUgwqcgNSBvZiBBVURJVC5tZC4KZnVuYyBQZXJpb2RzKHBsYWNlZEF0LCBub3csIHBlcmlvZCBpbnQ2NCkgKGludDMyLCBlcnJvcikgewoJaWYgcGVyaW9kIDw9IDAgewoJCXJldHVybiAwLCBFcnJCYWRQZXJpb2QKCX0KCWlmIG5vdyA8IHBsYWNlZEF0IHsKCQlyZXR1cm4gMCwgRXJyQmFja3dhcmRzCgl9CgluIDo9ICh1aW50NjQobm93KSAtIHVpbnQ2NChwbGFjZWRBdCkpIC8gdWludDY0KHBlcmlvZCkKCWlmIG4gPiB1aW50NjQobWF4SW50MzIpIHsKCQlyZXR1cm4gMCwgRXJyT3ZlcmZsb3cKCX0KCXJldHVybiBpbnQzMihuKSwgbmlsCn0KCi8vIEZ1bGx5RGVwcmVjaWF0ZWRBdCByZXR1cm5zIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBhc3NldCBmaXJzdCBjYXJyaWVzIG9ubHkKLy8gaXRzIHNhbHZhZ2UgdmFsdWUsIGZvciBhIHJlYWxtIHRoYXQgd2FudHMgdG8gdGVsbCBhIHJlYWRlciB3aGVuIHRoZSBjaGFyZ2VzCi8vIHN0b3AuIEl0IGlzIHBsYWNlZEF0ICsgTGlmZSpwZXJpb2QuCi8vCi8vIFVuZGVyIERlY2xpbmluZ0JhbGFuY2UgdGhlIGNhcnJ5aW5nIGFtb3VudCBtYXkgc2l0IHZlcnkgY2xvc2UgdG8gc2FsdmFnZQovLyB3ZWxsIGJlZm9yZSB0aGlzIHRpbWUsIGFuZCB1bmRlciBib3RoIG1ldGhvZHMgaXQgaXMgbm90IGF0IHNhbHZhZ2UgdW50aWwKLy8gdGhpcyB0aW1lLCBiZWNhdXNlIExpZmUgaXMgd2hhdCB0aGUgY2xhbXAgaW4gQ2FycnlpbmdBdCB1c2VzLgpmdW5jIChzIFNjaGVkdWxlKSBGdWxseURlcHJlY2lhdGVkQXQocGxhY2VkQXQsIHBlcmlvZCBpbnQ2NCkgKGludDY0LCBlcnJvcikgewoJaWYgZXJyIDo9IHMuY2hlY2soKTsgZXJyICE9IG5pbCB7CgkJcmV0dXJuIDAsIGVycgoJfQoJaWYgcGVyaW9kIDw9IDAgewoJCXJldHVybiAwLCBFcnJCYWRQZXJpb2QKCX0KCWlmIGludDY0KHMuTGlmZSkgPiBtYXhJbnQ2NC9wZXJpb2QgewoJCXJldHVybiAwLCBFcnJPdmVyZmxvdwoJfQoJc3BhbiA6PSBpbnQ2NChzLkxpZmUpICogcGVyaW9kCglpZiBwbGFjZWRBdCA+IG1heEludDY0LXNwYW4gewoJCXJldHVybiAwLCBFcnJPdmVyZmxvdwoJfQoJcmV0dXJuIHBsYWNlZEF0ICsgc3BhbiwgbmlsCn0KGmcKC2dub21vZC50b21sElhtb2R1bGUgPSAiZ25vLmxhbmQvcC9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL2RlcHJlY2lhdGlvbiIKZ25vID0gIjAuOSIKIg0xMDAwMDAwMHVnbm90EhEIyvWRKBIKODQxODB1Z25vdBqoAQo6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQIW9DF2ySV4zjQumeJvrSn3/nxG7XBDVv+rkxV/YrsOmBJAEZZCuDWwmimOolCxAauOYbSRna4Bc8Ko0EAr5tp0rs8qdFDmF5IuXpW/6w6k2Yfix1Dp5jUiih7S6J6q7FFJeRooZzFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFsdXV4ZQ=="
  }
}