@keep-network/tbtc-v2 1.5.0-goerli.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/artifacts/.chainId +1 -1
  2. package/artifacts/Bank.json +23 -23
  3. package/artifacts/Bridge.json +26 -39
  4. package/artifacts/BridgeGovernance.json +25 -25
  5. package/artifacts/BridgeGovernanceParameters.json +10 -10
  6. package/artifacts/Deposit.json +14 -14
  7. package/artifacts/DepositSweep.json +13 -13
  8. package/artifacts/DonationVault.json +14 -14
  9. package/artifacts/Fraud.json +13 -13
  10. package/artifacts/LightRelay.json +52 -70
  11. package/artifacts/LightRelayMaintainerProxy.json +28 -28
  12. package/artifacts/MaintainerProxy.json +47 -47
  13. package/artifacts/MovingFunds.json +13 -13
  14. package/artifacts/Redemption.json +13 -13
  15. package/artifacts/TBTC.json +36 -37
  16. package/artifacts/TBTCVault.json +47 -47
  17. package/artifacts/VendingMachine.json +34 -35
  18. package/artifacts/VendingMachineV2.json +360 -0
  19. package/artifacts/VendingMachineV3.json +405 -0
  20. package/artifacts/WalletCoordinator.json +58 -20
  21. package/artifacts/Wallets.json +13 -13
  22. package/artifacts/solcInputs/7cc3eda3cb3ff2522d18b5e7b31ea228.json +102 -0
  23. package/artifacts/solcInputs/802132f7da69a8a4226cb9424480847b.json +218 -0
  24. package/artifacts/solcInputs/{f862bd134ddc06352fa5be0644481600.json → 887fad6b16575ba42183543c324eeb0e.json} +6 -6
  25. package/artifacts/solcInputs/{037e4828b80945fc4739f966d98aa575.json → b0025f1f7efe4824592ac0c9793776c3.json} +3 -18
  26. package/artifacts/solcInputs/{bd85e9d9f3c6834572e1a00ba6963ba0.json → d71d4b4434e6669852eaf643ebd2a7bc.json} +2 -2
  27. package/artifacts/solcInputs/{deff85fc9ae9b5be07226c67809262df.json → fccb130292c8c7cc958ab4fa31a3e180.json} +3 -3
  28. package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
  29. package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
  30. package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.dbg.json +1 -1
  31. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
  32. package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  33. package/build/contracts/bridge/BridgeGovernanceParameters.sol/BridgeGovernanceParameters.dbg.json +1 -1
  34. package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
  35. package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
  36. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
  37. package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
  38. package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
  39. package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +1 -1
  40. package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
  41. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
  42. package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
  43. package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
  44. package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
  45. package/build/contracts/bridge/VendingMachineV2.sol/VendingMachineV2.dbg.json +1 -1
  46. package/build/contracts/bridge/VendingMachineV3.sol/VendingMachineV3.dbg.json +1 -1
  47. package/build/contracts/bridge/WalletCoordinator.sol/WalletCoordinator.dbg.json +1 -1
  48. package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
  49. package/build/contracts/l2/L2TBTC.sol/L2TBTC.dbg.json +1 -1
  50. package/build/contracts/l2/L2WormholeGateway.sol/IWormholeTokenBridge.dbg.json +1 -1
  51. package/build/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.dbg.json +1 -1
  52. package/build/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.json +2 -15
  53. package/build/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.dbg.json +1 -1
  54. package/build/contracts/relay/LightRelay.sol/ILightRelay.dbg.json +1 -1
  55. package/build/contracts/relay/LightRelay.sol/LightRelay.dbg.json +1 -1
  56. package/build/contracts/relay/LightRelay.sol/RelayUtils.dbg.json +1 -1
  57. package/build/contracts/relay/LightRelayMaintainerProxy.sol/LightRelayMaintainerProxy.dbg.json +1 -1
  58. package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
  59. package/build/contracts/vault/DonationVault.sol/DonationVault.dbg.json +1 -1
  60. package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
  61. package/build/contracts/vault/TBTCOptimisticMinting.sol/TBTCOptimisticMinting.dbg.json +1 -1
  62. package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
  63. package/contracts/l2/L2WormholeGateway.sol +7 -27
  64. package/deploy/81_upgrade_wallet_coordinator_v2.ts +99 -0
  65. package/export/artifacts/@keep-network/bitcoin-spv-sol/contracts/BTCUtils.sol/BTCUtils.json +20 -20
  66. package/export/artifacts/@keep-network/ecdsa/contracts/EcdsaDkgValidator.sol/EcdsaDkgValidator.json +2010 -2010
  67. package/export/artifacts/@keep-network/ecdsa/contracts/WalletRegistry.sol/WalletRegistry.json +383 -383
  68. package/export/artifacts/@keep-network/ecdsa/contracts/libraries/EcdsaDkg.sol/EcdsaDkg.json +22 -22
  69. package/export/artifacts/@keep-network/ecdsa/contracts/libraries/EcdsaInactivity.sol/EcdsaInactivity.json +1859 -1859
  70. package/export/artifacts/@keep-network/random-beacon/contracts/ReimbursementPool.sol/ReimbursementPool.json +598 -598
  71. package/export/artifacts/contracts/bridge/Bridge.sol/Bridge.json +7381 -7381
  72. package/export/artifacts/contracts/bridge/VendingMachine.sol/VendingMachine.json +6 -6
  73. package/export/artifacts/contracts/bridge/VendingMachineV2.sol/VendingMachineV2.json +6 -6
  74. package/export/artifacts/contracts/bridge/VendingMachineV3.sol/VendingMachineV3.json +6 -6
  75. package/export/artifacts/contracts/bridge/WalletCoordinator.sol/WalletCoordinator.json +5563 -5563
  76. package/export/artifacts/contracts/l2/L2TBTC.sol/L2TBTC.json +40 -40
  77. package/export/artifacts/contracts/l2/L2WormholeGateway.sol/L2WormholeGateway.json +3064 -3532
  78. package/export/artifacts/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.json +2454 -2454
  79. package/export/artifacts/contracts/relay/LightRelay.sol/LightRelay.json +1941 -1941
  80. package/export/artifacts/contracts/relay/LightRelayMaintainerProxy.sol/LightRelayMaintainerProxy.json +1044 -1044
  81. package/export/artifacts/contracts/test/BankStub.sol/BankStub.json +2 -2
  82. package/export/artifacts/contracts/test/BridgeStub.sol/BridgeStub.json +8422 -8422
  83. package/export/artifacts/contracts/test/GoerliLightRelay.sol/GoerliLightRelay.json +1943 -1943
  84. package/export/artifacts/contracts/test/HeartbeatStub.sol/HeartbeatStub.json +2 -2
  85. package/export/artifacts/contracts/test/LightRelayStub.sol/LightRelayStub.json +2066 -2066
  86. package/export/artifacts/contracts/test/ReceiveApprovalStub.sol/ReceiveApprovalStub.json +7 -7
  87. package/export/artifacts/contracts/test/SystemTestRelay.sol/SystemTestRelay.json +568 -568
  88. package/export/artifacts/contracts/test/TestERC20.sol/TestERC20.json +6 -6
  89. package/export/artifacts/contracts/test/TestERC721.sol/TestERC721.json +8 -8
  90. package/export/artifacts/contracts/test/TestEcdsaLib.sol/TestEcdsaLib.json +2 -2
  91. package/export/artifacts/contracts/test/WormholeBridgeStub.sol/WormholeBridgeStub.json +42 -42
  92. package/export/artifacts/contracts/token/TBTC.sol/TBTC.json +2 -2
  93. package/export/artifacts/contracts/vault/DonationVault.sol/DonationVault.json +11 -11
  94. package/export/artifacts/contracts/vault/TBTCVault.sol/TBTCVault.json +3525 -3525
  95. package/export/deploy/81_upgrade_wallet_coordinator_v2.js +140 -0
  96. package/export/hardhat.config.js +7 -0
  97. package/export/typechain/factories/EcdsaAuthorization__factory.js +1 -1
  98. package/export/typechain/factories/IStaking__factory.js +13 -0
  99. package/export/typechain/factories/L2WormholeGateway__factory.js +1 -14
  100. package/export/typechain/factories/WalletRegistry__factory.js +1 -1
  101. package/export/typechain/factories/WormholeBridgeStub__factory.js +1 -1
  102. package/export.json +267 -0
  103. package/package.json +5 -4
  104. package/artifacts/.DS_Store +0 -0
  105. package/export/deploy/35_transfer_wallet_coordinator_ownership.js +0 -60
  106. package/export/deploy/36_deploy_light_relay_maintainer_proxy.js +0 -86
  107. package/export/deploy/37_authorize_maintainer_in_light_relay_maintainer_proxy.js +0 -65
  108. package/export/deploy/38_transfer_light_relay_maintainer_proxy_ownership.js +0 -60
  109. package/export/deploy/39_authorize_light_relay_maintainer_proxy_in_reimbursement_pool.js +0 -70
  110. package/export/deploy/40_authorize_light_relay_maintainer_proxy_in_light_relay.js +0 -66
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (_) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ var func = function (hre) {
51
+ return __awaiter(this, void 0, void 0, function () {
52
+ var ethers, helpers, deployments, deployer, proxyDeployment, implementationContractFactory, newImplementationAddress, proxyAdmin, proxyAdminOwner, upgradeTxData, walletCoordinatorArtifact, walletCoordinator, walletCoordinatorOwner, updateRedemptionProposalParametersTxData;
53
+ return __generator(this, function (_a) {
54
+ switch (_a.label) {
55
+ case 0:
56
+ ethers = hre.ethers, helpers = hre.helpers, deployments = hre.deployments;
57
+ return [4 /*yield*/, helpers.signers.getNamedSigners()];
58
+ case 1:
59
+ deployer = (_a.sent()).deployer;
60
+ return [4 /*yield*/, deployments.get("WalletCoordinator")];
61
+ case 2:
62
+ proxyDeployment = _a.sent();
63
+ return [4 /*yield*/, ethers.getContractFactory("WalletCoordinator", {
64
+ signer: deployer,
65
+ })
66
+ // Deploy new implementation contract
67
+ ];
68
+ case 3:
69
+ implementationContractFactory = _a.sent();
70
+ return [4 /*yield*/, hre.upgrades.prepareUpgrade(proxyDeployment, implementationContractFactory, {
71
+ kind: "transparent",
72
+ })];
73
+ case 4:
74
+ newImplementationAddress = (_a.sent());
75
+ deployments.log("new implementation contract deployed at: ".concat(newImplementationAddress));
76
+ return [4 /*yield*/, hre.upgrades.admin.getInstance()];
77
+ case 5:
78
+ proxyAdmin = (_a.sent());
79
+ return [4 /*yield*/, proxyAdmin.owner()];
80
+ case 6:
81
+ proxyAdminOwner = _a.sent();
82
+ return [4 /*yield*/, proxyAdmin.interface.encodeFunctionData("upgrade", [proxyDeployment.address, newImplementationAddress])];
83
+ case 7:
84
+ upgradeTxData = _a.sent();
85
+ deployments.log("proxy admin owner ".concat(proxyAdminOwner, " is required to upgrade proxy implementation with transaction:\n") +
86
+ "\t\tfrom: ".concat(proxyAdminOwner, "\n") +
87
+ "\t\tto: ".concat(proxyAdmin.address, "\n") +
88
+ "\t\tdata: ".concat(upgradeTxData));
89
+ walletCoordinatorArtifact = hre.artifacts.readArtifactSync("WalletCoordinator");
90
+ return [4 /*yield*/, deployments.save("WalletCoordinator", __assign(__assign({}, proxyDeployment), { abi: walletCoordinatorArtifact.abi, implementation: newImplementationAddress }))
91
+ // Assemble parameters upgrade transaction.
92
+ ];
93
+ case 8:
94
+ _a.sent();
95
+ return [4 /*yield*/, helpers.contracts.getContract("WalletCoordinator")];
96
+ case 9:
97
+ walletCoordinator = _a.sent();
98
+ return [4 /*yield*/, walletCoordinator.owner()];
99
+ case 10:
100
+ walletCoordinatorOwner = _a.sent();
101
+ updateRedemptionProposalParametersTxData = walletCoordinator.interface.encodeFunctionData("updateRedemptionProposalParameters", [7200, 600, 7200, 20, 20000]);
102
+ deployments.log("WalletCoordinator owner ".concat(walletCoordinatorOwner, " is required to update redemption proposal parameters with transaction:\n") +
103
+ "\t\tfrom: ".concat(walletCoordinatorOwner, "\n") +
104
+ "\t\tto: ".concat(walletCoordinator.address, "\n") +
105
+ "\t\tdata: ".concat(updateRedemptionProposalParametersTxData));
106
+ if (!hre.network.tags.etherscan) return [3 /*break*/, 12];
107
+ // We use `verify` instead of `verify:verify` as the `verify` task is defined
108
+ // in "@openzeppelin/hardhat-upgrades" to perform Etherscan verification
109
+ // of Proxy and Implementation contracts.
110
+ return [4 /*yield*/, hre.run("verify", {
111
+ address: newImplementationAddress,
112
+ constructorArgsParams: proxyDeployment.args,
113
+ })];
114
+ case 11:
115
+ // We use `verify` instead of `verify:verify` as the `verify` task is defined
116
+ // in "@openzeppelin/hardhat-upgrades" to perform Etherscan verification
117
+ // of Proxy and Implementation contracts.
118
+ _a.sent();
119
+ _a.label = 12;
120
+ case 12:
121
+ if (!hre.network.tags.tenderly) return [3 /*break*/, 14];
122
+ return [4 /*yield*/, hre.tenderly.verify({
123
+ name: "WalletCoordinator",
124
+ address: newImplementationAddress,
125
+ })];
126
+ case 13:
127
+ _a.sent();
128
+ _a.label = 14;
129
+ case 14: return [2 /*return*/];
130
+ }
131
+ });
132
+ });
133
+ };
134
+ exports.default = func;
135
+ func.tags = ["UpgradeWalletCoordinator"];
136
+ // When running an upgrade uncomment the skip below and run the command:
137
+ // yarn deploy --tags UpgradeWalletCoordinator --network <NETWORK>
138
+ func.skip = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
139
+ return [2 /*return*/, true];
140
+ }); }); };
@@ -12,6 +12,7 @@ require("hardhat-deploy");
12
12
  require("@tenderly/hardhat-tenderly");
13
13
  require("@typechain/hardhat");
14
14
  require("hardhat-dependency-compiler");
15
+ require("solidity-docgen");
15
16
  var ecdsaSolidityCompilerConfig = {
16
17
  version: "0.8.17",
17
18
  settings: {
@@ -239,5 +240,11 @@ var config = {
239
240
  typechain: {
240
241
  outDir: "typechain",
241
242
  },
243
+ docgen: {
244
+ outputDir: "generated-docs",
245
+ templates: "docgen-templates",
246
+ pages: "files",
247
+ exclude: ["./test"],
248
+ },
242
249
  };
243
250
  exports.default = config;
@@ -216,7 +216,7 @@ var _abi = [
216
216
  type: "event",
217
217
  },
218
218
  ];
219
- var _bytecode = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ef980b5c06a5abfe2dba2ee8b6086d834403146d60b7dbb10477c99fc5366a3064736f6c63430008110033";
219
+ var _bytecode = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208b4ced2cd257bfed7884198cce950bec01f58124c97ae9f49a85c285fe9e258664736f6c63430008110033";
220
220
  var isSuperArgs = function (xs) { return xs.length > 1; };
221
221
  var EcdsaAuthorization__factory = /** @class */ (function (_super) {
222
222
  __extends(EcdsaAuthorization__factory, _super);
@@ -274,6 +274,19 @@ var _abi = [
274
274
  stateMutability: "nonpayable",
275
275
  type: "function",
276
276
  },
277
+ {
278
+ inputs: [
279
+ {
280
+ internalType: "address",
281
+ name: "stakingProvider",
282
+ type: "address",
283
+ },
284
+ ],
285
+ name: "refreshKeepStakeOwner",
286
+ outputs: [],
287
+ stateMutability: "nonpayable",
288
+ type: "function",
289
+ },
277
290
  {
278
291
  inputs: [
279
292
  {
@@ -217,19 +217,6 @@ var _abi = [
217
217
  stateMutability: "view",
218
218
  type: "function",
219
219
  },
220
- {
221
- inputs: [
222
- {
223
- internalType: "uint256",
224
- name: "amount",
225
- type: "uint256",
226
- },
227
- ],
228
- name: "depositWormholeTbtc",
229
- outputs: [],
230
- stateMutability: "nonpayable",
231
- type: "function",
232
- },
233
220
  {
234
221
  inputs: [
235
222
  {
@@ -466,7 +453,7 @@ var _abi = [
466
453
  type: "function",
467
454
  },
468
455
  ];
469
- var _bytecode = "0x608060405234801561001057600080fd5b50611e6d806100206000396000f3fe60806040526004361061010e5760003560e01c80638da5cb5b116100a5578063e1308b3311610074578063f2fde38b11610059578063f2fde38b146102f1578063f4734b0c14610311578063f69785f31461033157600080fd5b8063e1308b33146102b1578063e78cea92146102d157600080fd5b80638da5cb5b1461021f578063b4ccd8681461023d578063c0c53b8b1461026a578063ca05f9851461028a57600080fd5b806349072f12116100e157806349072f12146101b45780635d21a596146101ca578063715018a6146101ea57806375b1beaa146101ff57600080fd5b80630b575fe6146101135780632d3802421461014e578063363da98e1461017257806344949c9214610194575b600080fd5b34801561011f57600080fd5b5061013161012e36600461188a565b90565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561015a57600080fd5b50610164609c5481565b604051908152602001610145565b34801561017e57600080fd5b5061019261018d36600461188a565b61035d565b005b3480156101a057600080fd5b506101926101af36600461188a565b6103a0565b3480156101c057600080fd5b50610164609b5481565b3480156101d657600080fd5b506101926101e53660046118a3565b6104d3565b3480156101f657600080fd5b506101926108a0565b34801561020b57600080fd5b5061019261021a366004611925565b6108b4565b34801561022b57600080fd5b506033546001600160a01b0316610131565b34801561024957600080fd5b50610164610258366004611951565b609a6020526000908152604090205481565b34801561027657600080fd5b5061019261028536600461198a565b61090f565b34801561029657600080fd5b506101646102a53660046119d5565b6001600160a01b031690565b3480156102bd57600080fd5b50609954610131906001600160a01b031681565b3480156102dd57600080fd5b50609754610131906001600160a01b031681565b3480156102fd57600080fd5b5061019261030c3660046119d5565b610bca565b34801561031d57600080fd5b50609854610131906001600160a01b031681565b61034461033f3660046119f2565b610c5a565b60405167ffffffffffffffff9091168152602001610145565b6103656110ab565b609b8190556040518181527f876c61ade8d7fbb62356eefa0f1cb0d6d95fc5269dbe8d0d636051daa88d73999060200160405180910390a150565b609b5481609c546103b19190611a67565b11156104045760405162461bcd60e51b815260206004820152601660248201527f4d696e74696e67206c696d69742065786365656465640000000000000000000060448201526064015b60405180910390fd5b60408051338152602081018390527ff7f6725b273ddbe730c152e645cb3a946dd37dbc34344ba45f20975ff85aeb92910160405180910390a180609c600082825461044f9190611a67565b909155505060985461046c906001600160a01b0316333084611105565b6099546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b1580156104b857600080fd5b505af11580156104cc573d6000803e3d6000fd5b5050505050565b6098546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561051c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105409190611a7a565b6097546040517fc3f511c10000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b039091169063c3f511c1906105919087908790600401611a93565b6000604051808303816000875af11580156105b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105d89190810190611bae565b6098546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611a7a565b905060006106588483611be3565b9050600081116106aa5760405162461bcd60e51b815260206004820152601360248201527f4e6f2074425443207472616e736665727265640000000000000000000000000060448201526064016103fb565b6097546040517fea63738d00000000000000000000000000000000000000000000000000000000815260009161074c916001600160a01b039091169063ea63738d906106fa908890600401611c22565b600060405180830381865afa158015610717573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261073f9190810190611c56565b60e0015161012e90611d1f565b90506001600160a01b0381166107a45760405162461bcd60e51b815260206004820152601860248201527f307830207265636569766572206e6f7420616c6c6f776564000000000000000060448201526064016103fb565b609b5482609c546107b59190611a67565b11156107d7576098546107d2906001600160a01b031682846111b6565b610855565b81609c60008282546107e99190611a67565b90915550506099546040516340c10f1960e01b81526001600160a01b03838116600483015260248201859052909116906340c10f1990604401600060405180830381600087803b15801561083c57600080fd5b505af1158015610850573d6000803e3d6000fd5b505050505b604080516001600160a01b0383168152602081018490527fc7f080a0d33152d54d5972f0bac2d7984089c4849e2af42bca1a572728d339d7910160405180910390a150505050505050565b6108a86110ab565b6108b26000611204565b565b6108bc6110ab565b61ffff82166000818152609a6020908152604091829020849055815192835282018390527f1b29e2aa7a790fb04e7d6d73bf7ca63e2b4b1ffe0354fe94b4739c91f1a15359910160405180910390a15050565b600054610100900460ff161580801561092f5750600054600160ff909116105b806109495750303b158015610949575060005460ff166001145b6109bb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016103fb565b6000805460ff1916600117905580156109de576000805461ff0019166101001790555b6109e6611263565b6109ee6112d6565b6001600160a01b038416610a6a5760405162461bcd60e51b815260206004820152602760248201527f576f726d686f6c65206272696467652061646472657373206d757374206e6f7460448201527f206265203078300000000000000000000000000000000000000000000000000060648201526084016103fb565b6001600160a01b038316610acc5760405162461bcd60e51b8152602060048201526024808201527f42726964676520746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b60648201526084016103fb565b6001600160a01b038216610b2e5760405162461bcd60e51b8152602060048201526024808201527f4c325442544320746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b60648201526084016103fb565b609780546001600160a01b0380871673ffffffffffffffffffffffffffffffffffffffff1992831617909255609880548684169083161790556099805492851692909116919091179055600019609b558015610bc4576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610bd26110ab565b6001600160a01b038116610c4e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103fb565b610c5781611204565b50565b6000610c64611349565b83610cb15760405162461bcd60e51b815260206004820152601960248201527f30783020726563697069656e74206e6f7420616c6c6f7765640000000000000060448201526064016103fb565b85600003610d015760405162461bcd60e51b815260206004820152601460248201527f416d6f756e74206d757374206e6f74206265203000000000000000000000000060448201526064016103fb565b610d0a866113a2565b955085600003610d5c5760405162461bcd60e51b815260206004820152601860248201527f416d6f756e7420746f6f206c6f7720746f20627269646765000000000000000060448201526064016103fb565b6098546040516370a0823160e01b815230600482015287916001600160a01b0316906370a0823190602401602060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc89190611a7a565b1015610e3c5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f75676820776f726d686f6c65207442544320696e207468652060448201527f6761746577617920746f2062726964676500000000000000000000000000000060648201526084016103fb565b61ffff85166000818152609a60209081526040918290205482518a815291820193909352908101829052606081018690526080810185905263ffffffff841660a08201527ffcdb8efef11d13bb0ebc515477ece314fdac305aeba3d6d9d371838bbe2435cf9060c00160405180910390a186609c6000828254610ebf9190611be3565b90915550506099546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018990526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610f2957600080fd5b505af1158015610f3d573d6000803e3d6000fd5b5050609754609854610f5e93506001600160a01b03908116925016896113ca565b80611024576097546098546040517f0f5287b00000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018a905261ffff89166044820152606481018890526084810187905263ffffffff861660a4820152911690630f5287b090349060c4015b60206040518083038185885af1158015610ff7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061101c9190611d46565b915050611098565b6097546098546040805160208082018a905282518083039091018152818301928390527fc5a5ebda000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363c5a5ebda933493610fd99392909116918d918d9189918c91604401611d70565b6110a26001606555565b95945050505050565b6033546001600160a01b031633146108b25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103fb565b6040516001600160a01b0380851660248301528316604482015260648101829052610bc49085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261151f565b6040516001600160a01b0383166024820152604481018290526111ff9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611152565b505050565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166112ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b2611604565b600054610100900460ff166113415760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b2611678565b60026065540361139b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103fb565b6002606555565b60006113b36402540be40083611dc0565b91506113c46402540be40083611de2565b92915050565b80158061145d57506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145b9190611a7a565b155b6114cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103fb565b6040516001600160a01b0383166024820152604481018290526111ff9084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611152565b6001606555565b6000611574826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116e39092919063ffffffff16565b8051909150156111ff57808060200190518101906115929190611df9565b6111ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103fb565b600054610100900460ff1661166f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b6108b233611204565b600054610100900460ff166115185760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103fb565b60606116f284846000856116fa565b949350505050565b6060824710156117725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103fb565b600080866001600160a01b0316858760405161178e9190611e1b565b60006040518083038185875af1925050503d80600081146117cb576040519150601f19603f3d011682016040523d82523d6000602084013e6117d0565b606091505b50915091506117e1878383876117ec565b979650505050505050565b6060831561185b578251600003611854576001600160a01b0385163b6118545760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103fb565b50816116f2565b6116f283838151156118705781518083602001fd5b8060405162461bcd60e51b81526004016103fb9190611c22565b60006020828403121561189c57600080fd5b5035919050565b600080602083850312156118b657600080fd5b823567ffffffffffffffff808211156118ce57600080fd5b818501915085601f8301126118e257600080fd5b8135818111156118f157600080fd5b86602082850101111561190357600080fd5b60209290920196919550909350505050565b61ffff81168114610c5757600080fd5b6000806040838503121561193857600080fd5b823561194381611915565b946020939093013593505050565b60006020828403121561196357600080fd5b813561196e81611915565b9392505050565b6001600160a01b0381168114610c5757600080fd5b60008060006060848603121561199f57600080fd5b83356119aa81611975565b925060208401356119ba81611975565b915060408401356119ca81611975565b809150509250925092565b6000602082840312156119e757600080fd5b813561196e81611975565b600080600080600060a08688031215611a0a57600080fd5b853594506020860135611a1c81611915565b93506040860135925060608601359150608086013563ffffffff81168114611a4357600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b808201808211156113c4576113c4611a51565b600060208284031215611a8c57600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715611afc57611afc611ac2565b60405290565b60005b83811015611b1d578181015183820152602001611b05565b50506000910152565b600082601f830112611b3757600080fd5b815167ffffffffffffffff80821115611b5257611b52611ac2565b604051601f8301601f19908116603f01168101908282118183101715611b7a57611b7a611ac2565b81604052838152866020858801011115611b9357600080fd5b611ba4846020830160208901611b02565b9695505050505050565b600060208284031215611bc057600080fd5b815167ffffffffffffffff811115611bd757600080fd5b6116f284828501611b26565b818103818111156113c4576113c4611a51565b60008151808452611c0e816020860160208601611b02565b601f01601f19169290920160200192915050565b60208152600061196e6020830184611bf6565b805160ff81168114611c4657600080fd5b919050565b8051611c4681611915565b600060208284031215611c6857600080fd5b815167ffffffffffffffff80821115611c8057600080fd5b908301906101008286031215611c9557600080fd5b611c9d611ad8565b611ca683611c35565b81526020830151602082015260408301516040820152611cc860608401611c4b565b606082015260808301516080820152611ce360a08401611c4b565b60a082015260c083015160c082015260e083015182811115611d0457600080fd5b611d1087828601611b26565b60e08301525095945050505050565b80516020808301519190811015611d40576000198160200360031b1b821691505b50919050565b600060208284031215611d5857600080fd5b815167ffffffffffffffff8116811461196e57600080fd5b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201526000611db460c0830184611bf6565b98975050505050505050565b600082611ddd57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176113c4576113c4611a51565b600060208284031215611e0b57600080fd5b8151801515811461196e57600080fd5b60008251611e2d818460208701611b02565b919091019291505056fea26469706673582212203fcf6da3edc8eecb75051e8952eff919f1a9ccbf1e1cb6683ec8af46d847e39a64736f6c63430008110033";
456
+ var _bytecode = "0x608060405234801561001057600080fd5b50611cde806100206000396000f3fe6080604052600436106100f35760003560e01c8063b4ccd8681161008a578063e78cea9211610059578063e78cea9214610296578063f2fde38b146102b6578063f4734b0c146102d6578063f69785f3146102f657600080fd5b8063b4ccd86814610202578063c0c53b8b1461022f578063ca05f9851461024f578063e1308b331461027657600080fd5b80635d21a596116100c65780635d21a5961461018f578063715018a6146101af57806375b1beaa146101c45780638da5cb5b146101e457600080fd5b80630b575fe6146100f85780632d38024214610133578063363da98e1461015757806349072f1214610179575b600080fd5b34801561010457600080fd5b506101166101133660046116fb565b90565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013f57600080fd5b50610149609c5481565b60405190815260200161012a565b34801561016357600080fd5b506101776101723660046116fb565b610322565b005b34801561018557600080fd5b50610149609b5481565b34801561019b57600080fd5b506101776101aa366004611714565b610365565b3480156101bb57600080fd5b50610177610762565b3480156101d057600080fd5b506101776101df366004611796565b610776565b3480156101f057600080fd5b506033546001600160a01b0316610116565b34801561020e57600080fd5b5061014961021d3660046117c2565b609a6020526000908152604090205481565b34801561023b57600080fd5b5061017761024a3660046117fb565b6107d1565b34801561025b57600080fd5b5061014961026a366004611846565b6001600160a01b031690565b34801561028257600080fd5b50609954610116906001600160a01b031681565b3480156102a257600080fd5b50609754610116906001600160a01b031681565b3480156102c257600080fd5b506101776102d1366004611846565b610a8c565b3480156102e257600080fd5b50609854610116906001600160a01b031681565b610309610304366004611863565b610b1c565b60405167ffffffffffffffff909116815260200161012a565b61032a610f6d565b609b8190556040518181527f876c61ade8d7fbb62356eefa0f1cb0d6d95fc5269dbe8d0d636051daa88d73999060200160405180910390a150565b61036d610fc7565b6098546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156103b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103da91906118c2565b6097546040517fc3f511c10000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b039091169063c3f511c19061042b90879087906004016118db565b6000604051808303816000875af115801561044a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047291908101906119f6565b6098546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e491906118c2565b905060006104f28483611a41565b9050600081116105495760405162461bcd60e51b815260206004820152601360248201527f4e6f2074425443207472616e736665727265640000000000000000000000000060448201526064015b60405180910390fd5b6097546040517fea63738d0000000000000000000000000000000000000000000000000000000081526000916105eb916001600160a01b039091169063ea63738d90610599908890600401611a80565b600060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105de9190810190611ab4565b60e0015161011390611b7d565b90506001600160a01b0381166106435760405162461bcd60e51b815260206004820152601860248201527f307830207265636569766572206e6f7420616c6c6f77656400000000000000006044820152606401610540565b609b5482609c546106549190611ba4565b111561067657609854610671906001600160a01b03168284611020565b61070d565b81609c60008282546106889190611ba4565b90915550506099546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260248201859052909116906340c10f1990604401600060405180830381600087803b1580156106f457600080fd5b505af1158015610708573d6000803e3d6000fd5b505050505b604080516001600160a01b0383168152602081018490527fc7f080a0d33152d54d5972f0bac2d7984089c4849e2af42bca1a572728d339d7910160405180910390a1505050505061075e6001606555565b5050565b61076a610f6d565b61077460006110d5565b565b61077e610f6d565b61ffff82166000818152609a6020908152604091829020849055815192835282018390527f1b29e2aa7a790fb04e7d6d73bf7ca63e2b4b1ffe0354fe94b4739c91f1a15359910160405180910390a15050565b600054610100900460ff16158080156107f15750600054600160ff909116105b8061080b5750303b15801561080b575060005460ff166001145b61087d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610540565b6000805460ff1916600117905580156108a0576000805461ff0019166101001790555b6108a8611134565b6108b06111a7565b6001600160a01b03841661092c5760405162461bcd60e51b815260206004820152602760248201527f576f726d686f6c65206272696467652061646472657373206d757374206e6f7460448201527f20626520307830000000000000000000000000000000000000000000000000006064820152608401610540565b6001600160a01b03831661098e5760405162461bcd60e51b8152602060048201526024808201527f42726964676520746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b6064820152608401610540565b6001600160a01b0382166109f05760405162461bcd60e51b8152602060048201526024808201527f4c325442544320746f6b656e2061646472657373206d757374206e6f742062656044820152630203078360e41b6064820152608401610540565b609780546001600160a01b0380871673ffffffffffffffffffffffffffffffffffffffff1992831617909255609880548684169083161790556099805492851692909116919091179055600019609b558015610a86576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610a94610f6d565b6001600160a01b038116610b105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610540565b610b19816110d5565b50565b6000610b26610fc7565b83610b735760405162461bcd60e51b815260206004820152601960248201527f30783020726563697069656e74206e6f7420616c6c6f776564000000000000006044820152606401610540565b85600003610bc35760405162461bcd60e51b815260206004820152601460248201527f416d6f756e74206d757374206e6f7420626520300000000000000000000000006044820152606401610540565b610bcc8661121a565b955085600003610c1e5760405162461bcd60e51b815260206004820152601860248201527f416d6f756e7420746f6f206c6f7720746f2062726964676500000000000000006044820152606401610540565b6098546040516370a0823160e01b815230600482015287916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a91906118c2565b1015610cfe5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f75676820776f726d686f6c65207442544320696e207468652060448201527f6761746577617920746f206272696467650000000000000000000000000000006064820152608401610540565b61ffff85166000818152609a60209081526040918290205482518a815291820193909352908101829052606081018690526080810185905263ffffffff841660a08201527ffcdb8efef11d13bb0ebc515477ece314fdac305aeba3d6d9d371838bbe2435cf9060c00160405180910390a186609c6000828254610d819190611a41565b90915550506099546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018990526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b5050609754609854610e2093506001600160a01b0390811692501689611242565b80610ee6576097546098546040517f0f5287b00000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018a905261ffff89166044820152606481018890526084810187905263ffffffff861660a4820152911690630f5287b090349060c4015b60206040518083038185885af1158015610eb9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ede9190611bb7565b915050610f5a565b6097546098546040805160208082018a905282518083039091018152818301928390527fc5a5ebda000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363c5a5ebda933493610e9b9392909116918d918d9189918c91604401611be1565b610f646001606555565b95945050505050565b6033546001600160a01b031633146107745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610540565b6002606554036110195760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610540565b6002606555565b6040516001600160a01b0383166024820152604481018290526110c99084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611390565b505050565b6001606555565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661119f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b610774611475565b600054610100900460ff166112125760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b6107746114e9565b600061122b6402540be40083611c31565b915061123c6402540be40083611c53565b92915050565b8015806112d557506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156112af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d391906118c2565b155b6113475760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610540565b6040516001600160a01b0383166024820152604481018290526110c99084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611065565b60006113e5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115549092919063ffffffff16565b8051909150156110c957808060200190518101906114039190611c6a565b6110c95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610540565b600054610100900460ff166114e05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b610774336110d5565b600054610100900460ff166110ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610540565b6060611563848460008561156b565b949350505050565b6060824710156115e35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610540565b600080866001600160a01b031685876040516115ff9190611c8c565b60006040518083038185875af1925050503d806000811461163c576040519150601f19603f3d011682016040523d82523d6000602084013e611641565b606091505b50915091506116528783838761165d565b979650505050505050565b606083156116cc5782516000036116c5576001600160a01b0385163b6116c55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610540565b5081611563565b61156383838151156116e15781518083602001fd5b8060405162461bcd60e51b81526004016105409190611a80565b60006020828403121561170d57600080fd5b5035919050565b6000806020838503121561172757600080fd5b823567ffffffffffffffff8082111561173f57600080fd5b818501915085601f83011261175357600080fd5b81358181111561176257600080fd5b86602082850101111561177457600080fd5b60209290920196919550909350505050565b61ffff81168114610b1957600080fd5b600080604083850312156117a957600080fd5b82356117b481611786565b946020939093013593505050565b6000602082840312156117d457600080fd5b81356117df81611786565b9392505050565b6001600160a01b0381168114610b1957600080fd5b60008060006060848603121561181057600080fd5b833561181b816117e6565b9250602084013561182b816117e6565b9150604084013561183b816117e6565b809150509250925092565b60006020828403121561185857600080fd5b81356117df816117e6565b600080600080600060a0868803121561187b57600080fd5b85359450602086013561188d81611786565b93506040860135925060608601359150608086013563ffffffff811681146118b457600080fd5b809150509295509295909350565b6000602082840312156118d457600080fd5b5051919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff811182821017156119445761194461190a565b60405290565b60005b8381101561196557818101518382015260200161194d565b50506000910152565b600082601f83011261197f57600080fd5b815167ffffffffffffffff8082111561199a5761199a61190a565b604051601f8301601f19908116603f011681019082821181831017156119c2576119c261190a565b816040528381528660208588010111156119db57600080fd5b6119ec84602083016020890161194a565b9695505050505050565b600060208284031215611a0857600080fd5b815167ffffffffffffffff811115611a1f57600080fd5b6115638482850161196e565b634e487b7160e01b600052601160045260246000fd5b8181038181111561123c5761123c611a2b565b60008151808452611a6c81602086016020860161194a565b601f01601f19169290920160200192915050565b6020815260006117df6020830184611a54565b805160ff81168114611aa457600080fd5b919050565b8051611aa481611786565b600060208284031215611ac657600080fd5b815167ffffffffffffffff80821115611ade57600080fd5b908301906101008286031215611af357600080fd5b611afb611920565b611b0483611a93565b81526020830151602082015260408301516040820152611b2660608401611aa9565b606082015260808301516080820152611b4160a08401611aa9565b60a082015260c083015160c082015260e083015182811115611b6257600080fd5b611b6e8782860161196e565b60e08301525095945050505050565b80516020808301519190811015611b9e576000198160200360031b1b821691505b50919050565b8082018082111561123c5761123c611a2b565b600060208284031215611bc957600080fd5b815167ffffffffffffffff811681146117df57600080fd5b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201526000611c2560c0830184611a54565b98975050505050505050565b600082611c4e57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761123c5761123c611a2b565b600060208284031215611c7c57600080fd5b815180151581146117df57600080fd5b60008251611c9e81846020870161194a565b919091019291505056fea2646970667358221220b291d4f116eaee9a0315797c6438d633227d2a991caa1d3985922e37d89cae9964736f6c63430008110033";
470
457
  var isSuperArgs = function (xs) { return xs.length > 1; };
471
458
  var L2WormholeGateway__factory = /** @class */ (function (_super) {
472
459
  __extends(L2WormholeGateway__factory, _super);
@@ -1928,7 +1928,7 @@ var _abi = [
1928
1928
  type: "function",
1929
1929
  },
1930
1930
  ];
1931
- var _bytecode = "0x60c06040523480156200001157600080fd5b50604051620060aa380380620060aa833981016040819052620000349162000134565b6001600160a01b03808316608052811660a0526200005162000059565b505062000173565b606454610100900460ff1615620000c65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60645460ff908116101562000119576064805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013157600080fd5b50565b600080604083850312156200014857600080fd5b825162000155816200011b565b602084015190925062000168816200011b565b809150509250929050565b60805160a051615e4d6200025d600039600081816104ea01528181610a3a01528181610a8701528181610adb01528181610b2901528181610d1501528181610f0901528181611374015281816115af0152818161169501528181611f30015281816122ca01526125d70152600081816107e601528181610aa801528181610afc01528181610b4a01528181610c2a01528181610fa501528181611119015281816112ff015281816118780152818161198b01528181611dbe0152818161216b0152818161236601528181612557015281816125f80152818161265701526127300152615e4d6000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80637e0049fd116101e9578063c9bacaad1161010f578063df07ce59116100ad578063f0820c921161007c578063f0820c921461097e578063f7186ce01461098f578063f854a27f146109a2578063fd2a4788146109b557600080fd5b8063df07ce5914610922578063e03e453514610935578063e686440f1461094a578063e83ab3a51461095d57600080fd5b8063d38bfff4116100e9578063d38bfff4146108c8578063d855c631146108db578063d8dc404d146108e3578063ded56d45146108f657600080fd5b8063c9bacaad1461088d578063cc562388146108a0578063d0bcc0e3146108b557600080fd5b8063a04e298011610187578063c09975cd11610156578063c09975cd14610828578063c0c53b8b1461083b578063c7c49c981461084e578063c88e70f41461087a57600080fd5b8063a04e2980146107c6578063b13b55b2146107d9578063b54a2374146107e1578063b5e9ce8b1461080857600080fd5b806388a59590116101c357806388a595901461073a5780638dcbdf4a146107755780639879d19b146107885780639c9de0281461079b57600080fd5b80637e0049fd146106e55780637e33cba6146106f8578063830f9e021461070b57600080fd5b806352902301116102ce5780636c9ecd641161026c578063770124d31161023b578063770124d3146105f2578063789d392a146105fa5780637b14729e146106755780637b35b4e6146106d257600080fd5b80636c9ecd64146105b15780636febd464146105c457806372cc8c6d146105d757806375e0ae5a146105df57600080fd5b8063663032cd116102a8578063663032cd1461057057806368c34948146105835780636a7f7a901461058b5780636b5f2bff1461059e57600080fd5b8063529023011461052f5780635aa6e6751461054a5780635c5b38701461055d57600080fd5b8063227fd44f1161033b5780633682a450116103155780633682a450146104bf57806342d86693146104d25780634cf088d9146104e55780634d99f4731461050c57600080fd5b8063227fd44f146104865780633137676614610499578063343bb927146104ac57600080fd5b8063167f051711610377578063167f0517146104325780631ae879e81461043a5780631c5b07621461044e5780631d35fa631461046157600080fd5b806308aa090b1461039e57806314a85474146103f1578063153622b314610406575b600080fd5b6103a66109c8565b6040516103e89190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b60405180910390f35b6104046103ff366004614e62565b610a2f565b005b6101065461041a906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b610404610ad4565b6101055461041a906001600160a01b031681565b61040461045c366004614ead565b610b22565b60fc546001600160601b03165b6040516001600160601b0390911681526020016103e8565b610404610494366004614eca565b610b72565b6104046104a7366004614ee7565b610bf1565b6104046104ba366004614f21565b610e40565b6104046104cd366004614ead565b610ea4565b6104046104e0366004614ead565b610eaf565b61041a7f000000000000000000000000000000000000000000000000000000000000000081565b61051f61051a366004614f21565b611064565b60405190151581526020016103e8565b60fd5460fe54604080519283526020830191909152016103e8565b60005461041a906001600160a01b031681565b61040461056b366004614ee7565b61107f565b61040461057e366004614ead565b6112b6565b61051f611358565b610404610599366004614e62565b611369565b6104046105ac366004614ead565b6113be565b6104046105bf366004614f3a565b611437565b6104046105d2366004614f3a565b6114a9565b610404611513565b6104046105ed366004614ead565b6115a8565b61051f6115d4565b610653610608366004614f21565b60408051606080820183526000808352602080840182905292840181905293845260ca8252928290208251938401835280548452600181015491840191909152600201549082015290565b60408051825181526020808401519082015291810151908201526060016103e8565b6106a36065546001600160601b038116916001600160401b03600160601b8304811692600160a01b90041690565b604080516001600160601b0390941684526001600160401b0392831660208501529116908201526060016103e8565b6104046106e0366004614ead565b6115e0565b6104046106f3366004614ee7565b611668565b61046e610706366004614ead565b61168c565b61072c610719366004614f21565b6101046020526000908152604090205481565b6040519081526020016103e8565b60ff5461010054610101546101025461010354604080519586526020860194909452928401919091526060830152608082015260a0016103e8565b610404610783366004614f5c565b6116ba565b610404610796366004614fdb565b611772565b6107ae6107a9366004614ead565b611b2b565b6040516001600160401b0390911681526020016103e8565b6104046107d4366004615069565b611b38565b610404611bea565b61041a7f000000000000000000000000000000000000000000000000000000000000000081565b61081b610816366004614f21565b611c51565b6040516103e891906150fe565b60325461041a906001600160a01b031681565b610404610849366004615111565b611c5e565b61041a61085c366004614ead565b6001600160a01b039081166000908152606660205260409020541690565b610404610888366004614f5c565b611e92565b61040461089b366004614e62565b611f25565b6108a8611f7a565b6040516103e89190615167565b6104046108c3366004614ead565b611f86565b6104046108d6366004614ead565b611fff565b610404612093565b6104046108f136600461518f565b6120d0565b61041a610904366004614ead565b6001600160a01b039081166000908152606760205260409020541690565b61051f61093036600461520a565b612342565b61093d612533565b6040516103e891906152b1565b61051f610958366004614ead565b6125ce565b61097061096b366004614ee7565b61261d565b6040516103e89291906152c4565b6065546001600160601b031661046e565b61051f61099d366004614ead565b612635565b61046e6109b0366004614ead565b6126c4565b61046e6109c3366004614ead565b6127a2565b6109fa6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b506040805160a0810182526099548152609a546020820152609b5491810191909152609c546060820152609d54608082015290565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a805760405162461bcd60e51b8152600401610a77906152df565b60405180910390fd5b610acf60657f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008686866127c9565b505050565b610b2060657f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612935565b565b610b6f60657f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612b0f565b50565b6000546001600160a01b03163314610b9c5760405162461bcd60e51b8152600401610a7790615321565b60fc80546001600160601b0319166001600160601b0383169081179091556040519081527fe132b87eb6644ee4d4c3c32744f7e1c3906335a2d4f99330767bf573909c7d84906020015b60405180910390a150565b600080610bff609784612cee565b604051638871ca5d60e01b815263ffffffff8216600482015291935091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638871ca5d90602401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190615358565b6040805160018082528183019092529192506000919060208083019080368337019050506001600160a01b038084166000908152606760205260409020549192501681600081518110610cea57610cea61538b565b6001600160a01b03928316602091820292909201015260fc5460fd546040516383ddba8f60e01b81527f0000000000000000000000000000000000000000000000000000000000000000909316926383ddba8f92610d5a926001600160601b0390911691339087906004016153a1565b600060405180830381600087803b158015610d7457600080fd5b505af1925050508015610d85575060015b610dde5760fc54604080516001600160601b0390921682526001600160a01b038416602083015285917f14621289a12ab59e0737decc388bba91d929c723defb4682d5d19b9a12ecfecb910160405180910390a2610e2f565b60fc54604080516001600160601b0390921682526001600160a01b038416602083015285917f88f76c659db78142f88e94db3ca791869495394c6c1b3d412ced9022dc97c9e3910160405180910390a25b610e396097613057565b5050505050565b610105546001600160a01b03163314610e6b5760405162461bcd60e51b8152600401610a7790615414565b610e7660ca826130ab565b60405181907fa6ae4af610b8ada39d3675190ead27a5552631a8e33f53e4e37dbb082f11a73e90600090a250565b610b6f6065826130f8565b6001600160a01b038181166000908152606660205260409020541680610ee75760405162461bcd60e51b8152600401610a779061544b565b604051632de9480760e01b81526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690632de9480790602401606060405180830381865afa158015610f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f769190615475565b50604051637104c0e560e11b81526001600160a01b0385811660048301528281166024830152919350600092507f00000000000000000000000000000000000000000000000000000000000000009091169063e20981ca906044016020604051808303816000875af1158015610ff0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101491906154b7565b6040516001600160601b03821681529091506001600160a01b038516907f38532b6dea69d7266fa923c7813d190be37625f2454ddfa3d93c45c79482e3fd9060200160405180910390a250505050565b600081815260ca602052604081206001015415155b92915050565b60005a9050600061109160978461335b565b9050600080806110b660c08701356110ac60208901896154d4565b60ca929190613782565b925092509250856040516020016110cd919061575a565b60405160208183030381529060405280519060200120837fbe8f27cef1f3d94120c9c547c3614f5b992fdb0c0a497cc920fde06546291ab460405160405180910390a38351156111a5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663942f68928560fe54426111559190615783565b6040518363ffffffff1660e01b8152600401611172929190615796565b600060405180830381600087803b15801561118c57600080fd5b505af11580156111a0573d6000803e3d6000fd5b505050505b6101055460405163547d07a160e11b81526004810185905260248101849052604481018390526001600160a01b039091169063a8fa0f4290606401600060405180830381600087803b1580156111fa57600080fd5b505af115801561120e573d6000803e3d6000fd5b5050505061121c60976137fd565b603254610100546001600160a01b0390911690637ad226dc905a61124090896157b8565b60ff5461124d9190615783565b6112579190615783565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b15801561129657600080fd5b505af11580156112aa573d6000803e3d6000fd5b50505050505050505050565b6000546001600160a01b031633146112e05760405162461bcd60e51b8152600401610a7790615321565b604051632a59250560e21b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a9649414906024015b600060405180830381600087803b15801561134457600080fd5b505af1158015610e39573d6000803e3d6000fd5b60006113646097613861565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113b15760405162461bcd60e51b8152600401610a77906152df565b610acf60658484846138b2565b6000546001600160a01b031633146113e85760405162461bcd60e51b8152600401610a7790615321565b61010680546001600160a01b0319166001600160a01b0383169081179091556040519081527f2b34e21b6daa8fcf8cba1c3ed709cbed2b0231d5fb60e9ccd8c2e75a5674bcb390602001610be6565b6000546001600160a01b031633146114615760405162461bcd60e51b8152600401610a7790615321565b60fd82905560fe81905560408051838152602081018390527ff3a6ee10a78fb7d212e87d9be970fb16bd7324e9dc9c38d21cd7ecde781a1d2a91015b60405180910390a15050565b610106546001600160a01b031633146115045760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74207468652052616e646f6d20426561636f6e006044820152606401610a77565b61150f609783613aed565b5050565b610105546001600160a01b0316331461153e5760405162461bcd60e51b8152600401610a7790615414565b6115486097613b9a565b610106546040516310da3b0360e21b81523060048201526001600160a01b0390911690634368ec0c90602401600060405180830381600087803b15801561158e57600080fd5b505af11580156115a2573d6000803e3d6000fd5b50505050565b610b6f60657f000000000000000000000000000000000000000000000000000000000000000083613c65565b60006113646097613ea6565b6000546001600160a01b0316331461160a5760405162461bcd60e51b8152600401610a7790615321565b6040516001600160a01b03821681527f0e2d2343d31b085b7c4e56d1c8a6ec79f7ab07460386f1c9a1756239fe2533ac9060200160405180910390a1603280546001600160a01b0319166001600160a01b0392909216919091179055565b61168161167860208301836154d4565b60ca9190613ee0565b610b6f609782614039565b600061107960657f000000000000000000000000000000000000000000000000000000000000000084614349565b6000546001600160a01b031633146116e45760405162461bcd60e51b8152600401610a7790615321565b6116ef609786614384565b6116fa6097856143e5565b611705609784614446565b611710609783614487565b61171b6097826144e8565b604080518681526020810186905290810184905260608101839052608081018290527f59ae8ed7b3a7e5f6dde4cff478f0ac0aa652c5edc4f4757b09a778a430b02c569060a0015b60405180910390a15050505050565b60005a8535600081815261010460205260409020549192509085146117c95760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206e6f6e636560981b6044820152606401610a77565b6000806117d760ca846145a2565b909250905060006117e960ca856145f2565b905086866040516020016117fe9291906157cb565b60405160208183030381529060405280519060200120811461185a5760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642067726f7570206d656d6265727360581b6044820152606401610a77565b600073__$c28dd63714b1a086d50ecbb702fff9dbb7$__63f4df04be7f00000000000000000000000000000000000000000000000000000000000000008c87876040516020016118b4929190918252602082015260400190565b6040516020818303038152906040528d8d8d6040518763ffffffff1660e01b81526004016118e7969594939291906157ed565b600060405180830381865af4158015611904573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261192c9190810190615924565b60008681526101046020526040812080549293509061194a836159c2565b9091555050604080518a815233602082015286917f326e1ff7c130ed708307116f79cf7dbca649503e7082e5e35a19ceeee1523b39910160405180910390a27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663942f68928260fe54426119c79190615783565b6040518363ffffffff1660e01b81526004016119e4929190615796565b600060405180830381600087803b1580156119fe57600080fd5b505af1158015611a12573d6000803e3d6000fd5b50611a279250505060608b0160408c016159db565b15611a9a5761010554604051631ee74c0960e11b81526004810187905260248101869052604481018590526001600160a01b0390911690633dce981290606401600060405180830381600087803b158015611a8157600080fd5b505af1158015611a95573d6000803e3d6000fd5b505050505b603254610101546001600160a01b0390911690637ad226dc905a611abe908a6157b8565b611ac89190615783565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b158015611b0757600080fd5b505af1158015611b1b573d6000803e3d6000fd5b5050505050505050505050505050565b6000611079606583614634565b6000546001600160a01b03163314611b625760405162461bcd60e51b8152600401610a7790615321565b606580546001600160601b0319166001600160601b038516179055611b886065836146cc565b611b936065826146f4565b604080516001600160601b03851681526001600160401b03848116602083015283168183015290517f544b726e42801bb47073854eeedae851903f66fe32a5bd24e626e10b90027b519181900360600190a1505050565b60005a9050611bf9609761471c565b603254610102546001600160a01b0390911690637ad226dc905a611c1d90856157b8565b611c279190615783565b6040516001600160e01b031960e084901b168152600481019190915233602482015260440161132a565b606061107960ca836147a3565b606454610100900460ff1615808015611c7e5750606454600160ff909116105b80611c985750303b158015611c98575060645460ff166001145b611cfb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a77565b6064805460ff191660011790558015611d1e576064805461ff0019166101001790555b61010680546001600160a01b038086166001600160a01b0319928316179092556032805492851692909116919091179055611d58336147de565b606580546001600160601b031916690878678326eac9000000179055611d826065623b53806146cc565b611d906065623b53806146f4565b60fc80546001600160601b0319166815af1d78b58c400000179055606460fd556212750060fe55611de360977f000000000000000000000000000000000000000000000000000000000000000086614838565b611df06097612d00614384565b611dfc6097600a6143e5565b611e09609761c350614446565b611e166097610915614487565b611e22609760146144e8565b62046cd060ff55620119406101005562016b4861010155611c52610102556108fc6101035580156115a2576064805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6000546001600160a01b03163314611ebc5760405162461bcd60e51b8152600401610a7790615321565b60ff859055610100849055610101839055610102829055610103819055604080518681526020810186905290810184905260608101839052608081018290527f8a3e64fa6013a36bccca7362e8826b11ba41e57fb60f55309c0ca48904dad0829060a001611763565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611f6d5760405162461bcd60e51b8152600401610a77906152df565b610acf606584848461492d565b600061136460976149fa565b6000546001600160a01b03163314611fb05760405162461bcd60e51b8152600401610a7790615321565b61010580546001600160a01b0319166001600160a01b0383169081179091556040519081527fa1993af5a189ba5ad4155263c920cfee33ce0593a8eb231a13bb3ce6f39459e390602001610be6565b6000546001600160a01b031633146120295760405162461bcd60e51b8152600401610a7790615321565b6001600160a01b03811661208a5760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f206164647265604482015261737360f01b6064820152608401610a77565b610b6f816147de565b60005a90506120a26097614a91565b603254610103546001600160a01b0390911690637ad226dc905a6120c690856157b8565b611c2791906157b8565b610105546001600160a01b031633146120fb5760405162461bcd60e51b8152600401610a7790615414565b600061210860ca856145f2565b9050828260405160200161211d9291906157cb565b6040516020818303038152906040528051906020012081146121515760405162461bcd60e51b8152600401610a77906159f8565b604051637bfcd47d60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f7f9a8fa906121a290879087906004016157cb565b600060405180830381865afa1580156121bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121e79190810190615a3a565b90506000836001600160401b0381111561220357612203615375565b60405190808252806020026020018201604052801561222c578160200160208202803683370190505b50905060005b82518110156122b2576122768382815181106122505761225061538b565b60200260200101516001600160a01b039081166000908152606760205260409020541690565b8282815181106122885761228861538b565b6001600160a01b0390921660209283029190910190910152806122aa816159c2565b915050612232565b506040516383ddba8f60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906383ddba8f90612305908c908c908c9087906004016153a1565b600060405180830381600087803b15801561231f57600080fd5b505af1158015612333573d6000803e3d6000fd5b50505050505050505050505050565b604051635a48b46b60e01b81526001600160a01b03838116600483015260009182917f00000000000000000000000000000000000000000000000000000000000000001690635a48b46b90602401602060405180830381865afa1580156123ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d19190615ac8565b90508063ffffffff166000036124295760405162461bcd60e51b815260206004820152601d60248201527f4e6f74206120736f72746974696f6e20706f6f6c206f70657261746f720000006044820152606401610a77565b600061243660ca896145f2565b9050868660405160200161244b9291906157cb565b60405160208183030381529060405280519060200120811461247f5760405162461bcd60e51b8152600401610a77906159f8565b836001111580156124905750858411155b6124e85760405162461bcd60e51b815260206004820152602360248201527f57616c6c6574206d656d62657220696e646578206973206f7574206f662072616044820152626e676560e81b6064820152608401610a77565b63ffffffff821687876124fc6001886157b8565b81811061250b5761250b61538b565b90506020020160208101906125209190615ae5565b63ffffffff161498975050505050505050565b60a054604051636c2530b960e01b81526064600482015260248101919091526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636c2530b990604401600060405180830381865afa1580156125a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113649190810190615924565b600061107960657f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000085614b10565b6000606061262c609784614c84565b91509150915091565b6040516307b8c36760e51b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063f7186ce090602401602060405180830381865afa1580156126a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110799190615b02565b6000806126e9836001600160a01b039081166000908152606660205260409020541690565b90506001600160a01b0381166127115760405162461bcd60e51b8152600401610a779061544b565b60405163439f18fd60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063873e31fa90602401602060405180830381865afa158015612777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279b91906154b7565b9392505050565b6001600160a01b0381166000908152606860205260408120546001600160601b0316611079565b6001600160a01b03808416600090815260018801602052604090205416806127f1575061292d565b6040516307b8c36760e51b81526001600160a01b03828116600483015286169063f7186ce090602401602060405180830381865afa158015612837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285b9190615b02565b1561292b57846001600160a01b031663a4e2d6346040518163ffffffff1660e01b8152600401602060405180830381865afa15801561289e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c29190615b02565b1561291f57604080516001600160601b038086168252841660208201526001600160a01b0380841692908716917f1b09380d63e78fd72c1d79a805a7e2dfadf02b22418e24bebff51376b7df33b0910160405180910390a361292b565b61292b87878784612b0f565b505b505050505050565b3360008181526002850160205260409020546001600160a01b03168061296d5760405162461bcd60e51b8152600401610a779061544b565b6001600160a01b0381166000908152600386016020526040812080549091906129a4908890889086906001600160601b0316614d68565b9050806001600160601b03166000036129ff5760405162461bcd60e51b815260206004820152601f60248201527f417574686f72697a6174696f6e2062656c6f7720746865206d696e696d756d006044820152606401610a77565b836001600160a01b0316836001600160a01b03167f5075aaa89894a888eb2cac81a27320c60855febb0cf1706b66bdc754e640d43360405160405180910390a3604051630483483160e31b81526001600160a01b0386169063241a418890612a6d9087908590600401615b1f565b600060405180830381600087803b158015612a8757600080fd5b505af1158015612a9b573d6000803e3d6000fd5b5050835467fffffffffffffffe19600160601b9091046001600160401b031601915061292b9050578654612adf90600160601b90046001600160401b031642615b41565b82546001600160401b0391909116600160601b0267ffffffffffffffff60601b1990911617825550505050505050565b6001600160a01b0380821660009081526002860160205260409020541680612b495760405162461bcd60e51b8152600401610a779061544b565b6001600160a01b03808216600081815260038801602052604080822090519093861692917f1231fe5ee649a593b524a494cd53146a196380a872115a0d0fe16c0735afdf2691a36040516307b8c36760e51b81526001600160a01b03848116600483015285169063f7186ce090602401602060405180830381865afa158015612bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfa9190615b02565b15612c81578054600090612c1c908890889086906001600160601b0316614d68565b60405163dc7520c560e01b81529091506001600160a01b0386169063dc7520c590612c4d9087908590600401615b1f565b600060405180830381600087803b158015612c6757600080fd5b505af1158015612c7b573d6000803e3d6000fd5b50505050505b805467fffffffffffffffe19600160601b9091046001600160401b03160161292d578554612cbf90600160601b90046001600160401b031642615b41565b81546001600160401b0391909116600160601b0267ffffffffffffffff60601b19909116178155505050505050565b6000806003612cfc856149fa565b6003811115612d0d57612d0d615151565b14612d5a5760405162461bcd60e51b815260206004820152601e60248201527f43757272656e74207374617465206973206e6f74204348414c4c454e474500006044820152606401610a77565b6003840154600c850154612d6e9190615783565b431115612dc95760405162461bcd60e51b815260206004820152602360248201527f4368616c6c656e676520706572696f642068617320616c7265616479207061736044820152621cd95960ea1b6064820152608401610a77565b83600b015483604051602001612ddf919061575a565b6040516020818303038152906040528051906020012014612e685760405162461bcd60e51b815260206004820152603a60248201527f526573756c7420756e646572206368616c6c656e67652069732064696666657260448201527f656e74207468616e20746865207375626d6974746564206f6e650000000000006064820152608401610a77565b6001840154600985015460088601546040516373b33d5d60e11b81526001600160a01b039093169263e7667aba92612ea4928892600401615b68565b600060405180830381865afa925050508015612ee257506040513d6000823e601f3d908101601f19168201604052612edf9190810190615b8d565b60015b612f5757336001600160a01b031684600b01547f703feb01415a2995816e8d082fd7aad0eacada1a2f63fdb3226e47f8a0285436604051612f4a906020808252601390820152721d985b1a59185d1a5bdb881c995d995c9d1959606a1b604082015260600190565b60405180910390a3612fe6565b8115612f9d5760405162461bcd60e51b8152602060048201526015602482015274756e6a7573746966696564206368616c6c656e676560581b6044820152606401610a77565b336001600160a01b031686600b01547f703feb01415a2995816e8d082fd7aad0eacada1a2f63fdb3226e47f8a028543683604051612fdb91906150fe565b60405180910390a350505b600b8401549150612ffa60a0840184615c36565b613006600186356157b8565b8181106130155761301561538b565b905060200201602081019061302a9190615ae5565b905083600801544361303c91906157b8565b600a8501556000600b8501819055600c8501555b9250929050565b60048101545a1015610b6f5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420656e6f75676820657874726120676173206c656674000000000000006044820152606401610a77565b6000818152602083905260409020600101546130d95760405162461bcd60e51b8152600401610a7790615c7f565b6000908152602091909152604081208181556001810182905560020155565b336001600160a01b03821661314f5760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722063616e206e6f74206265207a65726f20616464726573736044820152606401610a77565b6001600160a01b03818116600090815260018501602052604090205416156131cf5760405162461bcd60e51b815260206004820152602d60248201527f4f70657261746f7220616c72656164792073657420666f72207468652073746160448201526c35b4b73390383937bb34b232b960991b6064820152608401610a77565b6001600160a01b03828116600090815260028501602052604090205416156132395760405162461bcd60e51b815260206004820152601f60248201527f4f70657261746f72206164647265737320616c726561647920696e20757365006044820152606401610a77565b6001600160a01b038116600090815260038401602052604090208054600160601b90046001600160401b0316156132cc5760405162461bcd60e51b815260206004820152603160248201527f546865726520697320612070656e64696e6720617574686f72697a6174696f6e60448201527008191958dc99585cd9481c995c5d595cdd607a1b6064820152608401610a77565b826001600160a01b0316826001600160a01b03167fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c160405160405180910390a3506001600160a01b03908116600081815260018501602090815260408083208054959096166001600160a01b031995861681179096559482526002909501909452919092208054909216179055565b60606003613368846149fa565b600381111561337957613379615151565b146133c65760405162461bcd60e51b815260206004820152601e60248201527f43757272656e74207374617465206973206e6f74204348414c4c454e474500006044820152606401610a77565b6003830154600c8401546000916133dc91615783565b90508043116134395760405162461bcd60e51b815260206004820152602360248201527f4368616c6c656e676520706572696f6420686173206e6f7420706173736564206044820152621e595d60ea1b6064820152608401610a77565b83600b01548360405160200161344f919061575a565b60405160208183030381529060405280519060200120146134d85760405162461bcd60e51b815260206004820152603960248201527f526573756c7420756e64657220617070726f76616c206973206469666665726560448201527f6e74207468616e20746865207375626d6974746564206f6e65000000000000006064820152608401610a77565b83546000906001600160a01b0316638871ca5d6134f860a0870187615c36565b613504600189356157b8565b8181106135135761351361538b565b90506020020160208101906135289190615ae5565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa15801561356a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061358e9190615358565b9050336001600160a01b03821614806135b4575060068501546135b19083615783565b43115b6136325760405162461bcd60e51b815260206004820152604360248201527f4f6e6c792074686520444b4720726573756c74207375626d697474657220636160448201527f6e20617070726f76652074686520726573756c742061742074686973206d6f6d606482015262195b9d60ea1b608482015260a401610a77565b61363f6040850185615c36565b90506001600160401b0381111561365857613658615375565b604051908082528060200260200182016040528015613681578160200160208202803683370190505b50925060005b6136946040860186615c36565b9050811015613748576136aa60a0860186615c36565b60016136b96040890189615c36565b858181106136c9576136c961538b565b90506020020160208101906136de9190615ccf565b6136e89190615cea565b60ff168181106136fa576136fa61538b565b905060200201602081019061370f9190615ae5565b8482815181106137215761372161538b565b63ffffffff9092166020928302919091019091015280613740816159c2565b915050613687565b50600b8501546040513391907fe6e9d5eba171e82025efb3f3d44fd35905e7283d104284cb9f3bbc5bf1e4276f90600090a3505092915050565b60008060008484604051613797929190615d03565b60405190819003902092506137b0602060008688615d13565b6137b991615d3d565b91506137c88460208188615d13565b6137d191615d3d565b600084815260209890985260409097209586555060018501819055600290940185905594929392915050565b60006008820181905560098201819055600a8201819055600b8201819055600c820181905581546040805163a69df4b560e01b815290516001600160a01b039092169263a69df4b59260048084019382900301818387803b15801561134457600080fd5b6000600261386e836149fa565b600381111561387f5761387f615151565b14801561107957506005820154600a83015460088401546138a09190615783565b6138aa9190615783565b431192915050565b6001600160601b03811615806138d6575083546001600160601b0390811690821610155b6139405760405162461bcd60e51b815260206004820152603560248201527f417574686f72697a6174696f6e20616d6f756e742073686f756c642062652030604482015274206f722061626f766520746865206d696e696d756d60581b6064820152608401610a77565b6001600160a01b038084166000908152600186016020526040812054909116908161396c575042613976565b506001600160401b035b60006139828486615d5b565b6001600160a01b03871660009081526003890160205260409020805491925090600160601b90046001600160401b031680158015906139ca57506001600160401b0381811614155b15613a5d5788546139eb90600160a01b90046001600160401b031682615d7b565b6001600160401b0316421015613a5d5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f7567682074696d65207061737365642073696e636520746865604482015270081bdc9a59da5b985b081c995c5d595cdd607a1b6064820152608401610a77565b81546001600160401b038516600160601b81026001600160a01b03199092166001600160601b0386811691909117929092178455604080518a8416815292891660208401528201526001600160a01b0386811691908a16907f545cbf267cef6fe43f11f6219417ab43a0e8e345adbaae5f626d9bc325e8535a9060600160405180910390a3505050505050505050565b6001613af8836149fa565b6003811115613b0957613b09615151565b14613b615760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207374617465206973206e6f74204157414954494e475f5345604482015261115160f21b6064820152608401610a77565b60405181907fb2ad26c2940889d79df2ee9c758a8aefa00c5ca90eee119af0e5d795df3b98bb90600090a2436008830155600990910155565b6000613ba5826149fa565b6003811115613bb657613bb6615151565b14613bd35760405162461bcd60e51b8152600401610a7790615d9b565b6040517f5c3ed2397d4d21298b2fb5027ac8e2d42e3c9c72bbb55ddb030e2a36a0cdff6b90600090a1805460408051637c1e845d60e11b815290516001600160a01b039092169163f83d08ba9160048082019260009290919082900301818387803b158015613c4157600080fd5b505af1158015613c55573d6000803e3d6000fd5b5050505043816007018190555050565b6001600160a01b038116600090815260038401602052604090208054600160601b90046001600160401b0316613ce95760405162461bcd60e51b8152602060048201526024808201527f417574686f72697a6174696f6e206465637265617365206e6f742072657175656044820152631cdd195960e21b6064820152608401610a77565b805467fffffffffffffffe19600160601b9091046001600160401b031601613d685760405162461bcd60e51b815260206004820152602c60248201527f417574686f72697a6174696f6e2064656372656173652072657175657374206e60448201526b1bdd081858dd1a5d985d195960a21b6064820152608401610a77565b8054600160601b90046001600160401b0316421015613dd95760405162461bcd60e51b815260206004820152602760248201527f417574686f72697a6174696f6e2064656372656173652064656c6179206e6f74604482015266081c185cdcd95960ca1b6064820152608401610a77565b6040516001600160a01b038316907f50270a522c2fef97b6b7385c2aa4a4518adda681530e0a1fe9f5e840f6f2cd9d90600090a2604051633af0572d60e11b81526001600160a01b0383811660048301528416906375e0ae5a906024016020604051808303816000875af1158015613e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e7991906154b7565b50506001600160a01b031660009081526003909201602052506040902080546001600160a01b0319169055565b60006001613eb3836149fa565b6003811115613ec457613ec4615151565b1480156110795750600282015460078301546138aa9190615783565b60408114613f305760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964206c656e677468206f6620746865207075626c6963206b65796044820152606401610a77565b60008282604051613f42929190615d03565b604080519182900390912060008181526020879052919091206001015490915015613fc75760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420776974682074686520676976656e207075626c6963206b657960448201526e20616c72656164792065786973747360881b6064820152608401610a77565b6000613fd66020828587615d13565b613fdf91615d3d565b905080610e395760405162461bcd60e51b815260206004820152602260248201527f57616c6c6574207075626c6963206b6579206d757374206265206e6f6e2d7a65604482015261726f60f01b6064820152608401610a77565b6002614044836149fa565b600381111561405557614055615151565b146140ae5760405162461bcd60e51b8152602060048201526024808201527f43757272656e74207374617465206973206e6f74204157414954494e475f524560448201526314d5531560e21b6064820152608401610a77565b6140b782613861565b156141045760405162461bcd60e51b815260206004820152601a60248201527f444b472074696d656f757420616c7265616479207061737365640000000000006044820152606401610a77565b81546040516307b8c36760e51b81523360048201526001600160a01b0390911690819063f7186ce090602401602060405180830381865afa15801561414d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141719190615b02565b6141c95760405162461bcd60e51b815260206004820152602360248201527f5375626d6974746572206e6f7420696e2074686520736f72746974696f6e20706044820152621bdbdb60ea1b6064820152608401610a77565b336001600160a01b038216638871ca5d6141e660a0860186615c36565b6141f2600188356157b8565b8181106142015761420161538b565b90506020020160208101906142169190615ae5565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa158015614258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427c9190615358565b6001600160a01b0316146142d25760405162461bcd60e51b815260206004820152601a60248201527f556e6578706563746564207375626d697474657220696e6465780000000000006044820152606401610a77565b816040516020016142e3919061575a565b60408051601f19818403018152908290528051602090910120600b850181905543600c8601556009850154917f8e7fd4293d7db11807147d8890c287fad3396fbb09a4e92273fc7856076c153a9061433c90869061575a565b60405180910390a3505050565b6001600160a01b038116600090815260038401602052604081205461437c908590859085906001600160601b0316614d68565b949350505050565b600061438f836149fa565b60038111156143a0576143a0615151565b146143bd5760405162461bcd60e51b8152600401610a7790615d9b565b600081116143dd5760405162461bcd60e51b8152600401610a7790615dd2565b600290910155565b60006143f0836149fa565b600381111561440157614401615151565b1461441e5760405162461bcd60e51b8152600401610a7790615d9b565b6000811161443e5760405162461bcd60e51b8152600401610a7790615dd2565b600390910155565b6000614451836149fa565b600381111561446257614462615151565b1461447f5760405162461bcd60e51b8152600401610a7790615d9b565b600490910155565b6000614492836149fa565b60038111156144a3576144a3615151565b146144c05760405162461bcd60e51b8152600401610a7790615d9b565b600081116144e05760405162461bcd60e51b8152600401610a7790615dd2565b600590910155565b60006144f3836149fa565b600381111561450457614504615151565b146145215760405162461bcd60e51b8152600401610a7790615d9b565b6005820154811061459a5760405162461bcd60e51b815260206004820152603d60248201527f4e65772076616c75652073686f756c64206265206c657373207468616e20726560448201527f73756c74207375626d697373696f6e20706572696f64206c656e6774680000006064820152608401610a77565b600690910155565b60008181526020839052604081206001015481906145d25760405162461bcd60e51b8152600401610a7790615c7f565b505060009081526020919091526040902060018101546002909101549091565b6000818152602083905260408120600101546146205760405162461bcd60e51b8152600401610a7790615c7f565b506000908152602091909152604090205490565b6001600160a01b03811660009081526003830160205260408120805467fffffffffffffffe19600160601b9091046001600160401b031601614680576001600160401b03915050611079565b805442906001600160401b03600160601b9091048116908216116146c05781546146bb908290600160601b90046001600160401b0316615d7b565b6146c3565b60005b95945050505050565b81546001600160401b03909116600160601b0267ffffffffffffffff60601b19909116179055565b81546001600160401b03909116600160a01b0267ffffffffffffffff60a01b19909116179055565b61472581613ea6565b6147715760405162461bcd60e51b815260206004820152601f60248201527f4177616974696e67207365656420686173206e6f742074696d6564206f7574006044820152606401610a77565b6040517f68c52f05452e81639fa06f379aee3178cddee4725521fff886f244c99e868b5090600090a1610b6f816137fd565b60606000806147b285856145a2565b604080516020810193909352828101919091528051808303820181526060909201905295945050505050565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910161149d565b82546001600160a01b03161561489b5760405162461bcd60e51b815260206004820152602260248201527f536f72746974696f6e20506f6f6c206164647265737320616c72656164792073604482015261195d60f21b6064820152608401610a77565b60018301546001600160a01b0316156149005760405162461bcd60e51b815260206004820152602160248201527f444b472056616c696461746f72206164647265737320616c72656164792073656044820152601d60fa1b6064820152608401610a77565b82546001600160a01b03199081166001600160a01b03938416178455600190930180549093169116179055565b83546001600160601b03908116908216101561498b5760405162461bcd60e51b815260206004820152601f60248201527f417574686f72697a6174696f6e2062656c6f7720746865206d696e696d756d006044820152606401610a77565b6001600160a01b0383811660008181526001870160209081526040918290205482516001600160601b03888116825287169281019290925282519416938493927f87f9f9f59204f53d57a89a817c6083a17979cd0531791c91e18551a56e3cfdd7928290030190a35050505050565b805460408051632938b58d60e21b815290516000926001600160a01b03169163a4e2d6349160048083019260209291908290030181865afa158015614a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a679190615b02565b15614a8c5750600881015460019015614a8c5750600c81015460029015614a8c575060035b919050565b614a9a81613861565b614ade5760405162461bcd60e51b81526020600482015260156024820152741112d1c81a185cc81b9bdd081d1a5b5959081bdd5d605a1b6044820152606401610a77565b6040517f2852b3e178dd281713b041c3d90b4815bb55b7ec812931d1e8e8d8bb2ed72d3e90600090a1610b6f816137fd565b6001600160a01b03808216600090815260028601602052604081205490911680614b4c5760405162461bcd60e51b8152600401610a779061544b565b6001600160a01b038116600090815260038701602052604081208054909190614b83908990899086906001600160601b0316614d68565b6040516307b8c36760e51b81526001600160a01b0387811660048301529192509087169063f7186ce090602401602060405180830381865afa158015614bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bf19190615b02565b614c09576001600160601b031615925061437c915050565b6040516304de824f60e41b81526001600160a01b03871690634de824f090614c379088908590600401615b1f565b602060405180830381865afa158015614c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c789190615b02565b98975050505050505050565b600060606000846008015411614cdc5760405162461bcd60e51b815260206004820152601860248201527f444b4720686173206e6f74206265656e207374617274656400000000000000006044820152606401610a77565b6001840154600985015460088601546040516373b33d5d60e11b81526001600160a01b039093169263e7667aba92614d18928892600401615b68565b600060405180830381865afa158015614d35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d5d9190810190615b8d565b915091509250929050565b604051637004922d60e11b81526001600160a01b038381166004830152306024830152600091829186169063e009245a90604401602060405180830381865afa158015614db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ddd91906154b7565b90506000836001600160601b0316826001600160601b031611614e01576000614e0b565b614e0b8483615d5b565b87549091506001600160601b039081169082161015614e2f5760009250505061437c565b915061437c9050565b6001600160a01b0381168114610b6f57600080fd5b6001600160601b0381168114610b6f57600080fd5b600080600060608486031215614e7757600080fd5b8335614e8281614e38565b92506020840135614e9281614e4d565b91506040840135614ea281614e4d565b809150509250925092565b600060208284031215614ebf57600080fd5b813561279b81614e38565b600060208284031215614edc57600080fd5b813561279b81614e4d565b600060208284031215614ef957600080fd5b81356001600160401b03811115614f0f57600080fd5b820160e0818503121561279b57600080fd5b600060208284031215614f3357600080fd5b5035919050565b60008060408385031215614f4d57600080fd5b50508035926020909101359150565b600080600080600060a08688031215614f7457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008083601f840112614fa957600080fd5b5081356001600160401b03811115614fc057600080fd5b6020830191508360208260051b850101111561305057600080fd5b60008060008060608587031215614ff157600080fd5b84356001600160401b038082111561500857600080fd5b9086019060a0828903121561501c57600080fd5b909450602086013593506040860135908082111561503957600080fd5b5061504687828801614f97565b95989497509550505050565b80356001600160401b0381168114614a8c57600080fd5b60008060006060848603121561507e57600080fd5b833561508981614e4d565b925061509760208501615052565b91506150a560408501615052565b90509250925092565b60005b838110156150c95781810151838201526020016150b1565b50506000910152565b600081518084526150ea8160208601602086016150ae565b601f01601f19169290920160200192915050565b60208152600061279b60208301846150d2565b60008060006060848603121561512657600080fd5b833561513181614e38565b9250602084013561514181614e38565b91506040840135614ea281614e38565b634e487b7160e01b600052602160045260246000fd5b602081016004831061518957634e487b7160e01b600052602160045260246000fd5b91905290565b60008060008060008060a087890312156151a857600080fd5b86356151b381614e4d565b95506020870135945060408701356151ca81614e38565b93506060870135925060808701356001600160401b038111156151ec57600080fd5b6151f889828a01614f97565b979a9699509497509295939492505050565b60008060008060006080868803121561522257600080fd5b8535945060208601356001600160401b0381111561523f57600080fd5b61524b88828901614f97565b909550935050604086013561525f81614e38565b949793965091946060013592915050565b600081518084526020808501945080840160005b838110156152a657815163ffffffff1687529582019590820190600101615284565b509495945050505050565b60208152600061279b6020830184615270565b821515815260406020820152600061437c60408301846150d2565b60208082526022908201527f43616c6c6572206973206e6f7420746865207374616b696e6720636f6e74726160408201526118dd60f21b606082015260800190565b6020808252601c908201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604082015260600190565b60006020828403121561536a57600080fd5b815161279b81614e38565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160601b038516815260208082018590526001600160a01b038481166040840152608060608401819052845190840181905260009285810192909160a0860190855b818110156154045785518416835294840194918401916001016153e6565b50909a9950505050505050505050565b6020808252601e908201527f43616c6c6572206973206e6f74207468652057616c6c6574204f776e65720000604082015260600190565b60208082526010908201526f2ab735b737bbb71037b832b930ba37b960811b604082015260600190565b60008060006060848603121561548a57600080fd5b835161549581614e38565b60208501519093506154a681614e38565b6040850151909250614ea281614e38565b6000602082840312156154c957600080fd5b815161279b81614e4d565b6000808335601e198436030181126154eb57600080fd5b8301803591506001600160401b0382111561550557600080fd5b60200191503681900382131561305057600080fd5b6000808335601e1984360301811261553157600080fd5b83016020810192503590506001600160401b0381111561555057600080fd5b80360382131561305057600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261559f57600080fd5b83016020810192503590506001600160401b038111156155be57600080fd5b8060051b360382131561305057600080fd5b803560ff81168114614a8c57600080fd5b81835260006001600160fb1b038311156155fa57600080fd5b8260051b80836020870137939093016020019392505050565b63ffffffff81168114610b6f57600080fd5b8183526000602080850194508260005b858110156152a657813561564881615613565b63ffffffff1687529582019590820190600101615635565b80358252600060206156748184018461551a565b60e08387015261568860e08701828461555f565b9150506156986040850185615588565b868303604088015280835290916000919084015b818310156156d45760ff6156bf856155d0565b168152928401926001929092019184016156ac565b6156e1606088018861551a565b9550935087810360608901526156f881868661555f565b94505050505061570b6080840184615588565b858303608087015261571e8382846155e1565b9250505061572f60a0840184615588565b85830360a0870152615742838284615625565b9250505060c083013560c08501528091505092915050565b60208152600061279b6020830184615660565b634e487b7160e01b600052601160045260246000fd5b808201808211156110795761107961576d565b6040815260006157a96040830185615270565b90508260208301529392505050565b818103818111156110795761107961576d565b60208152600061437c602083018486615625565b8015158114610b6f57600080fd5b60018060a01b038716815260a06020820152853560a082015260006158156020880188615588565b60a060c085015261582b610140850182846155e1565b915050604088013561583c816157df565b151560e0840152615850606089018961551a565b609f19808685030161010087015261586984838561555f565b935061587860808c018c615588565b935091508086850301610120870152506158938383836155e1565b9250505082810360408401526158a981886150d2565b905085606084015282810360808401526158c4818587615625565b9998505050505050505050565b604051601f8201601f191681016001600160401b03811182821017156158f9576158f9615375565b604052919050565b60006001600160401b0382111561591a5761591a615375565b5060051b60200190565b6000602080838503121561593757600080fd5b82516001600160401b0381111561594d57600080fd5b8301601f8101851361595e57600080fd5b805161597161596c82615901565b6158d1565b81815260059190911b8201830190838101908783111561599057600080fd5b928401925b828410156159b75783516159a881615613565b82529284019290840190615995565b979650505050505050565b6000600182016159d4576159d461576d565b5060010190565b6000602082840312156159ed57600080fd5b813561279b816157df565b60208082526022908201527f496e76616c69642077616c6c6574206d656d62657273206964656e7469666965604082015261727360f01b606082015260800190565b60006020808385031215615a4d57600080fd5b82516001600160401b03811115615a6357600080fd5b8301601f81018513615a7457600080fd5b8051615a8261596c82615901565b81815260059190911b82018301908381019087831115615aa157600080fd5b928401925b828410156159b7578351615ab981614e38565b82529284019290840190615aa6565b600060208284031215615ada57600080fd5b815161279b81615613565b600060208284031215615af757600080fd5b813561279b81615613565b600060208284031215615b1457600080fd5b815161279b816157df565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160401b03818116838216019080821115615b6157615b6161576d565b5092915050565b606081526000615b7b6060830186615660565b60208301949094525060400152919050565b60008060408385031215615ba057600080fd5b8251615bab816157df565b60208401519092506001600160401b0380821115615bc857600080fd5b818501915085601f830112615bdc57600080fd5b815181811115615bee57615bee615375565b615c01601f8201601f19166020016158d1565b9150808252866020828501011115615c1857600080fd5b615c298160208401602086016150ae565b5080925050509250929050565b6000808335601e19843603018112615c4d57600080fd5b8301803591506001600160401b03821115615c6757600080fd5b6020019150600581901b360382131561305057600080fd5b60208082526030908201527f57616c6c657420776974682074686520676976656e20494420686173206e6f7460408201526f081899595b881c9959da5cdd195c995960821b606082015260800190565b600060208284031215615ce157600080fd5b61279b826155d0565b60ff82811682821603908111156110795761107961576d565b8183823760009101908152919050565b60008085851115615d2357600080fd5b83861115615d3057600080fd5b5050820193919092039150565b8035602083101561107957600019602084900360031b1b1692915050565b6001600160601b03828116828216039080821115615b6157615b6161576d565b6001600160401b03828116828216039080821115615b6157615b6161576d565b60208082526019908201527f43757272656e74207374617465206973206e6f742049444c4500000000000000604082015260600190565b60208082526025908201527f4e65772076616c75652073686f756c642062652067726561746572207468616e604082015264207a65726f60d81b60608201526080019056fea264697066735822122017ad1c7f51706a66828695994b819834cf442702d1710de1dc37502378e07db964736f6c63430008110033";
1931
+ var _bytecode = "0x60c06040523480156200001157600080fd5b50604051620060ab380380620060ab833981016040819052620000349162000134565b6001600160a01b03808316608052811660a0526200005162000059565b505062000173565b606454610100900460ff1615620000c65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60645460ff908116101562000119576064805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013157600080fd5b50565b600080604083850312156200014857600080fd5b825162000155816200011b565b602084015190925062000168816200011b565b809150509250929050565b60805160a051615e4e6200025d600039600081816104ea01528181610a3a01528181610a8701528181610adb01528181610b2901528181610d1501528181610f0901528181611374015281816115af0152818161169501528181611f31015281816122cb01526125d80152600081816107e601528181610aa801528181610afc01528181610b4a01528181610c2a01528181610fa501528181611119015281816112ff015281816118780152818161198b01528181611dbe0152818161216c0152818161236701528181612558015281816125f90152818161265801526127310152615e4e6000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80637e0049fd116101e9578063c9bacaad1161010f578063df07ce59116100ad578063f0820c921161007c578063f0820c921461097e578063f7186ce01461098f578063f854a27f146109a2578063fd2a4788146109b557600080fd5b8063df07ce5914610922578063e03e453514610935578063e686440f1461094a578063e83ab3a51461095d57600080fd5b8063d38bfff4116100e9578063d38bfff4146108c8578063d855c631146108db578063d8dc404d146108e3578063ded56d45146108f657600080fd5b8063c9bacaad1461088d578063cc562388146108a0578063d0bcc0e3146108b557600080fd5b8063a04e298011610187578063c09975cd11610156578063c09975cd14610828578063c0c53b8b1461083b578063c7c49c981461084e578063c88e70f41461087a57600080fd5b8063a04e2980146107c6578063b13b55b2146107d9578063b54a2374146107e1578063b5e9ce8b1461080857600080fd5b806388a59590116101c357806388a595901461073a5780638dcbdf4a146107755780639879d19b146107885780639c9de0281461079b57600080fd5b80637e0049fd146106e55780637e33cba6146106f8578063830f9e021461070b57600080fd5b806352902301116102ce5780636c9ecd641161026c578063770124d31161023b578063770124d3146105f2578063789d392a146105fa5780637b14729e146106755780637b35b4e6146106d257600080fd5b80636c9ecd64146105b15780636febd464146105c457806372cc8c6d146105d757806375e0ae5a146105df57600080fd5b8063663032cd116102a8578063663032cd1461057057806368c34948146105835780636a7f7a901461058b5780636b5f2bff1461059e57600080fd5b8063529023011461052f5780635aa6e6751461054a5780635c5b38701461055d57600080fd5b8063227fd44f1161033b5780633682a450116103155780633682a450146104bf57806342d86693146104d25780634cf088d9146104e55780634d99f4731461050c57600080fd5b8063227fd44f146104865780633137676614610499578063343bb927146104ac57600080fd5b8063167f051711610377578063167f0517146104325780631ae879e81461043a5780631c5b07621461044e5780631d35fa631461046157600080fd5b806308aa090b1461039e57806314a85474146103f1578063153622b314610406575b600080fd5b6103a66109c8565b6040516103e89190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b60405180910390f35b6104046103ff366004614e63565b610a2f565b005b6101065461041a906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b610404610ad4565b6101055461041a906001600160a01b031681565b61040461045c366004614eae565b610b22565b60fc546001600160601b03165b6040516001600160601b0390911681526020016103e8565b610404610494366004614ecb565b610b72565b6104046104a7366004614ee8565b610bf1565b6104046104ba366004614f22565b610e40565b6104046104cd366004614eae565b610ea4565b6104046104e0366004614eae565b610eaf565b61041a7f000000000000000000000000000000000000000000000000000000000000000081565b61051f61051a366004614f22565b611064565b60405190151581526020016103e8565b60fd5460fe54604080519283526020830191909152016103e8565b60005461041a906001600160a01b031681565b61040461056b366004614ee8565b61107f565b61040461057e366004614eae565b6112b6565b61051f611358565b610404610599366004614e63565b611369565b6104046105ac366004614eae565b6113be565b6104046105bf366004614f3b565b611437565b6104046105d2366004614f3b565b6114a9565b610404611513565b6104046105ed366004614eae565b6115a8565b61051f6115d4565b610653610608366004614f22565b60408051606080820183526000808352602080840182905292840181905293845260ca8252928290208251938401835280548452600181015491840191909152600201549082015290565b60408051825181526020808401519082015291810151908201526060016103e8565b6106a36065546001600160601b038116916001600160401b03600160601b8304811692600160a01b90041690565b604080516001600160601b0390941684526001600160401b0392831660208501529116908201526060016103e8565b6104046106e0366004614eae565b6115e0565b6104046106f3366004614ee8565b611668565b61046e610706366004614eae565b61168c565b61072c610719366004614f22565b6101046020526000908152604090205481565b6040519081526020016103e8565b60ff5461010054610101546101025461010354604080519586526020860194909452928401919091526060830152608082015260a0016103e8565b610404610783366004614f5d565b6116ba565b610404610796366004614fdc565b611772565b6107ae6107a9366004614eae565b611b2b565b6040516001600160401b0390911681526020016103e8565b6104046107d436600461506a565b611b38565b610404611bea565b61041a7f000000000000000000000000000000000000000000000000000000000000000081565b61081b610816366004614f22565b611c51565b6040516103e891906150ff565b60325461041a906001600160a01b031681565b610404610849366004615112565b611c5e565b61041a61085c366004614eae565b6001600160a01b039081166000908152606660205260409020541690565b610404610888366004614f5d565b611e93565b61040461089b366004614e63565b611f26565b6108a8611f7b565b6040516103e89190615168565b6104046108c3366004614eae565b611f87565b6104046108d6366004614eae565b612000565b610404612094565b6104046108f1366004615190565b6120d1565b61041a610904366004614eae565b6001600160a01b039081166000908152606760205260409020541690565b61051f61093036600461520b565b612343565b61093d612534565b6040516103e891906152b2565b61051f610958366004614eae565b6125cf565b61097061096b366004614ee8565b61261e565b6040516103e89291906152c5565b6065546001600160601b031661046e565b61051f61099d366004614eae565b612636565b61046e6109b0366004614eae565b6126c5565b61046e6109c3366004614eae565b6127a3565b6109fa6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b506040805160a0810182526099548152609a546020820152609b5491810191909152609c546060820152609d54608082015290565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a805760405162461bcd60e51b8152600401610a77906152e0565b60405180910390fd5b610acf60657f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008686866127ca565b505050565b610b2060657f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612936565b565b610b6f60657f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612b10565b50565b6000546001600160a01b03163314610b9c5760405162461bcd60e51b8152600401610a7790615322565b60fc80546001600160601b0319166001600160601b0383169081179091556040519081527fe132b87eb6644ee4d4c3c32744f7e1c3906335a2d4f99330767bf573909c7d84906020015b60405180910390a150565b600080610bff609784612cef565b604051638871ca5d60e01b815263ffffffff8216600482015291935091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638871ca5d90602401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190615359565b6040805160018082528183019092529192506000919060208083019080368337019050506001600160a01b038084166000908152606760205260409020549192501681600081518110610cea57610cea61538c565b6001600160a01b03928316602091820292909201015260fc5460fd546040516383ddba8f60e01b81527f0000000000000000000000000000000000000000000000000000000000000000909316926383ddba8f92610d5a926001600160601b0390911691339087906004016153a2565b600060405180830381600087803b158015610d7457600080fd5b505af1925050508015610d85575060015b610dde5760fc54604080516001600160601b0390921682526001600160a01b038416602083015285917f14621289a12ab59e0737decc388bba91d929c723defb4682d5d19b9a12ecfecb910160405180910390a2610e2f565b60fc54604080516001600160601b0390921682526001600160a01b038416602083015285917f88f76c659db78142f88e94db3ca791869495394c6c1b3d412ced9022dc97c9e3910160405180910390a25b610e396097613058565b5050505050565b610105546001600160a01b03163314610e6b5760405162461bcd60e51b8152600401610a7790615415565b610e7660ca826130ac565b60405181907fa6ae4af610b8ada39d3675190ead27a5552631a8e33f53e4e37dbb082f11a73e90600090a250565b610b6f6065826130f9565b6001600160a01b038181166000908152606660205260409020541680610ee75760405162461bcd60e51b8152600401610a779061544c565b604051632de9480760e01b81526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690632de9480790602401606060405180830381865afa158015610f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f769190615476565b50604051637104c0e560e11b81526001600160a01b0385811660048301528281166024830152919350600092507f00000000000000000000000000000000000000000000000000000000000000009091169063e20981ca906044016020604051808303816000875af1158015610ff0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101491906154b8565b6040516001600160601b03821681529091506001600160a01b038516907f38532b6dea69d7266fa923c7813d190be37625f2454ddfa3d93c45c79482e3fd9060200160405180910390a250505050565b600081815260ca602052604081206001015415155b92915050565b60005a9050600061109160978461335c565b9050600080806110b660c08701356110ac60208901896154d5565b60ca929190613783565b925092509250856040516020016110cd919061575b565b60405160208183030381529060405280519060200120837fbe8f27cef1f3d94120c9c547c3614f5b992fdb0c0a497cc920fde06546291ab460405160405180910390a38351156111a5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663942f68928560fe54426111559190615784565b6040518363ffffffff1660e01b8152600401611172929190615797565b600060405180830381600087803b15801561118c57600080fd5b505af11580156111a0573d6000803e3d6000fd5b505050505b6101055460405163547d07a160e11b81526004810185905260248101849052604481018390526001600160a01b039091169063a8fa0f4290606401600060405180830381600087803b1580156111fa57600080fd5b505af115801561120e573d6000803e3d6000fd5b5050505061121c60976137fe565b603254610100546001600160a01b0390911690637ad226dc905a61124090896157b9565b60ff5461124d9190615784565b6112579190615784565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b15801561129657600080fd5b505af11580156112aa573d6000803e3d6000fd5b50505050505050505050565b6000546001600160a01b031633146112e05760405162461bcd60e51b8152600401610a7790615322565b604051632a59250560e21b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a9649414906024015b600060405180830381600087803b15801561134457600080fd5b505af1158015610e39573d6000803e3d6000fd5b60006113646097613862565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113b15760405162461bcd60e51b8152600401610a77906152e0565b610acf60658484846138b3565b6000546001600160a01b031633146113e85760405162461bcd60e51b8152600401610a7790615322565b61010680546001600160a01b0319166001600160a01b0383169081179091556040519081527f2b34e21b6daa8fcf8cba1c3ed709cbed2b0231d5fb60e9ccd8c2e75a5674bcb390602001610be6565b6000546001600160a01b031633146114615760405162461bcd60e51b8152600401610a7790615322565b60fd82905560fe81905560408051838152602081018390527ff3a6ee10a78fb7d212e87d9be970fb16bd7324e9dc9c38d21cd7ecde781a1d2a91015b60405180910390a15050565b610106546001600160a01b031633146115045760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74207468652052616e646f6d20426561636f6e006044820152606401610a77565b61150f609783613aee565b5050565b610105546001600160a01b0316331461153e5760405162461bcd60e51b8152600401610a7790615415565b6115486097613b9b565b610106546040516310da3b0360e21b81523060048201526001600160a01b0390911690634368ec0c90602401600060405180830381600087803b15801561158e57600080fd5b505af11580156115a2573d6000803e3d6000fd5b50505050565b610b6f60657f000000000000000000000000000000000000000000000000000000000000000083613c66565b60006113646097613ea7565b6000546001600160a01b0316331461160a5760405162461bcd60e51b8152600401610a7790615322565b6040516001600160a01b03821681527f0e2d2343d31b085b7c4e56d1c8a6ec79f7ab07460386f1c9a1756239fe2533ac9060200160405180910390a1603280546001600160a01b0319166001600160a01b0392909216919091179055565b61168161167860208301836154d5565b60ca9190613ee1565b610b6f60978261403a565b600061107960657f00000000000000000000000000000000000000000000000000000000000000008461434a565b6000546001600160a01b031633146116e45760405162461bcd60e51b8152600401610a7790615322565b6116ef609786614385565b6116fa6097856143e6565b611705609784614447565b611710609783614488565b61171b6097826144e9565b604080518681526020810186905290810184905260608101839052608081018290527f59ae8ed7b3a7e5f6dde4cff478f0ac0aa652c5edc4f4757b09a778a430b02c569060a0015b60405180910390a15050505050565b60005a8535600081815261010460205260409020549192509085146117c95760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206e6f6e636560981b6044820152606401610a77565b6000806117d760ca846145a3565b909250905060006117e960ca856145f3565b905086866040516020016117fe9291906157cc565b60405160208183030381529060405280519060200120811461185a5760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642067726f7570206d656d6265727360581b6044820152606401610a77565b600073__$c28dd63714b1a086d50ecbb702fff9dbb7$__63f4df04be7f00000000000000000000000000000000000000000000000000000000000000008c87876040516020016118b4929190918252602082015260400190565b6040516020818303038152906040528d8d8d6040518763ffffffff1660e01b81526004016118e7969594939291906157ee565b600060405180830381865af4158015611904573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261192c9190810190615925565b60008681526101046020526040812080549293509061194a836159c3565b9091555050604080518a815233602082015286917f326e1ff7c130ed708307116f79cf7dbca649503e7082e5e35a19ceeee1523b39910160405180910390a27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663942f68928260fe54426119c79190615784565b6040518363ffffffff1660e01b81526004016119e4929190615797565b600060405180830381600087803b1580156119fe57600080fd5b505af1158015611a12573d6000803e3d6000fd5b50611a279250505060608b0160408c016159dc565b15611a9a5761010554604051631ee74c0960e11b81526004810187905260248101869052604481018590526001600160a01b0390911690633dce981290606401600060405180830381600087803b158015611a8157600080fd5b505af1158015611a95573d6000803e3d6000fd5b505050505b603254610101546001600160a01b0390911690637ad226dc905a611abe908a6157b9565b611ac89190615784565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b158015611b0757600080fd5b505af1158015611b1b573d6000803e3d6000fd5b5050505050505050505050505050565b6000611079606583614635565b6000546001600160a01b03163314611b625760405162461bcd60e51b8152600401610a7790615322565b606580546001600160601b0319166001600160601b038516179055611b886065836146cd565b611b936065826146f5565b604080516001600160601b03851681526001600160401b03848116602083015283168183015290517f544b726e42801bb47073854eeedae851903f66fe32a5bd24e626e10b90027b519181900360600190a1505050565b60005a9050611bf9609761471d565b603254610102546001600160a01b0390911690637ad226dc905a611c1d90856157b9565b611c279190615784565b6040516001600160e01b031960e084901b168152600481019190915233602482015260440161132a565b606061107960ca836147a4565b606454610100900460ff1615808015611c7e5750606454600160ff909116105b80611c985750303b158015611c98575060645460ff166001145b611cfb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a77565b6064805460ff191660011790558015611d1e576064805461ff0019166101001790555b61010680546001600160a01b038086166001600160a01b0319928316179092556032805492851692909116919091179055611d58336147df565b606580546001600160601b031916690878678326eac9000000179055611d826065623b53806146cd565b611d906065623b53806146f5565b60fc80546001600160601b0319166815af1d78b58c400000179055606460fd556212750060fe55611de360977f000000000000000000000000000000000000000000000000000000000000000086614839565b611df06097612d00614385565b611dfd6097612d006143e6565b611e0a609761c350614447565b611e1760976107d0614488565b611e23609760146144e9565b62046cd060ff55620119406101005562016b4861010155611c52610102556108fc6101035580156115a2576064805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6000546001600160a01b03163314611ebd5760405162461bcd60e51b8152600401610a7790615322565b60ff859055610100849055610101839055610102829055610103819055604080518681526020810186905290810184905260608101839052608081018290527f8a3e64fa6013a36bccca7362e8826b11ba41e57fb60f55309c0ca48904dad0829060a001611763565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611f6e5760405162461bcd60e51b8152600401610a77906152e0565b610acf606584848461492e565b600061136460976149fb565b6000546001600160a01b03163314611fb15760405162461bcd60e51b8152600401610a7790615322565b61010580546001600160a01b0319166001600160a01b0383169081179091556040519081527fa1993af5a189ba5ad4155263c920cfee33ce0593a8eb231a13bb3ce6f39459e390602001610be6565b6000546001600160a01b0316331461202a5760405162461bcd60e51b8152600401610a7790615322565b6001600160a01b03811661208b5760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f206164647265604482015261737360f01b6064820152608401610a77565b610b6f816147df565b60005a90506120a36097614a92565b603254610103546001600160a01b0390911690637ad226dc905a6120c790856157b9565b611c2791906157b9565b610105546001600160a01b031633146120fc5760405162461bcd60e51b8152600401610a7790615415565b600061210960ca856145f3565b9050828260405160200161211e9291906157cc565b6040516020818303038152906040528051906020012081146121525760405162461bcd60e51b8152600401610a77906159f9565b604051637bfcd47d60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f7f9a8fa906121a390879087906004016157cc565b600060405180830381865afa1580156121c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121e89190810190615a3b565b90506000836001600160401b0381111561220457612204615376565b60405190808252806020026020018201604052801561222d578160200160208202803683370190505b50905060005b82518110156122b3576122778382815181106122515761225161538c565b60200260200101516001600160a01b039081166000908152606760205260409020541690565b8282815181106122895761228961538c565b6001600160a01b0390921660209283029190910190910152806122ab816159c3565b915050612233565b506040516383ddba8f60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906383ddba8f90612306908c908c908c9087906004016153a2565b600060405180830381600087803b15801561232057600080fd5b505af1158015612334573d6000803e3d6000fd5b50505050505050505050505050565b604051635a48b46b60e01b81526001600160a01b03838116600483015260009182917f00000000000000000000000000000000000000000000000000000000000000001690635a48b46b90602401602060405180830381865afa1580156123ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d29190615ac9565b90508063ffffffff1660000361242a5760405162461bcd60e51b815260206004820152601d60248201527f4e6f74206120736f72746974696f6e20706f6f6c206f70657261746f720000006044820152606401610a77565b600061243760ca896145f3565b9050868660405160200161244c9291906157cc565b6040516020818303038152906040528051906020012081146124805760405162461bcd60e51b8152600401610a77906159f9565b836001111580156124915750858411155b6124e95760405162461bcd60e51b815260206004820152602360248201527f57616c6c6574206d656d62657220696e646578206973206f7574206f662072616044820152626e676560e81b6064820152608401610a77565b63ffffffff821687876124fd6001886157b9565b81811061250c5761250c61538c565b90506020020160208101906125219190615ae6565b63ffffffff161498975050505050505050565b60a054604051636c2530b960e01b81526064600482015260248101919091526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636c2530b990604401600060405180830381865afa1580156125a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113649190810190615925565b600061107960657f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000085614b11565b6000606061262d609784614c85565b91509150915091565b6040516307b8c36760e51b81526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063f7186ce090602401602060405180830381865afa1580156126a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110799190615b03565b6000806126ea836001600160a01b039081166000908152606660205260409020541690565b90506001600160a01b0381166127125760405162461bcd60e51b8152600401610a779061544c565b60405163439f18fd60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063873e31fa90602401602060405180830381865afa158015612778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279c91906154b8565b9392505050565b6001600160a01b0381166000908152606860205260408120546001600160601b0316611079565b6001600160a01b03808416600090815260018801602052604090205416806127f2575061292e565b6040516307b8c36760e51b81526001600160a01b03828116600483015286169063f7186ce090602401602060405180830381865afa158015612838573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285c9190615b03565b1561292c57846001600160a01b031663a4e2d6346040518163ffffffff1660e01b8152600401602060405180830381865afa15801561289f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c39190615b03565b1561292057604080516001600160601b038086168252841660208201526001600160a01b0380841692908716917f1b09380d63e78fd72c1d79a805a7e2dfadf02b22418e24bebff51376b7df33b0910160405180910390a361292c565b61292c87878784612b10565b505b505050505050565b3360008181526002850160205260409020546001600160a01b03168061296e5760405162461bcd60e51b8152600401610a779061544c565b6001600160a01b0381166000908152600386016020526040812080549091906129a5908890889086906001600160601b0316614d69565b9050806001600160601b0316600003612a005760405162461bcd60e51b815260206004820152601f60248201527f417574686f72697a6174696f6e2062656c6f7720746865206d696e696d756d006044820152606401610a77565b836001600160a01b0316836001600160a01b03167f5075aaa89894a888eb2cac81a27320c60855febb0cf1706b66bdc754e640d43360405160405180910390a3604051630483483160e31b81526001600160a01b0386169063241a418890612a6e9087908590600401615b20565b600060405180830381600087803b158015612a8857600080fd5b505af1158015612a9c573d6000803e3d6000fd5b5050835467fffffffffffffffe19600160601b9091046001600160401b031601915061292c9050578654612ae090600160601b90046001600160401b031642615b42565b82546001600160401b0391909116600160601b0267ffffffffffffffff60601b1990911617825550505050505050565b6001600160a01b0380821660009081526002860160205260409020541680612b4a5760405162461bcd60e51b8152600401610a779061544c565b6001600160a01b03808216600081815260038801602052604080822090519093861692917f1231fe5ee649a593b524a494cd53146a196380a872115a0d0fe16c0735afdf2691a36040516307b8c36760e51b81526001600160a01b03848116600483015285169063f7186ce090602401602060405180830381865afa158015612bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfb9190615b03565b15612c82578054600090612c1d908890889086906001600160601b0316614d69565b60405163dc7520c560e01b81529091506001600160a01b0386169063dc7520c590612c4e9087908590600401615b20565b600060405180830381600087803b158015612c6857600080fd5b505af1158015612c7c573d6000803e3d6000fd5b50505050505b805467fffffffffffffffe19600160601b9091046001600160401b03160161292e578554612cc090600160601b90046001600160401b031642615b42565b81546001600160401b0391909116600160601b0267ffffffffffffffff60601b19909116178155505050505050565b6000806003612cfd856149fb565b6003811115612d0e57612d0e615152565b14612d5b5760405162461bcd60e51b815260206004820152601e60248201527f43757272656e74207374617465206973206e6f74204348414c4c454e474500006044820152606401610a77565b6003840154600c850154612d6f9190615784565b431115612dca5760405162461bcd60e51b815260206004820152602360248201527f4368616c6c656e676520706572696f642068617320616c7265616479207061736044820152621cd95960ea1b6064820152608401610a77565b83600b015483604051602001612de0919061575b565b6040516020818303038152906040528051906020012014612e695760405162461bcd60e51b815260206004820152603a60248201527f526573756c7420756e646572206368616c6c656e67652069732064696666657260448201527f656e74207468616e20746865207375626d6974746564206f6e650000000000006064820152608401610a77565b6001840154600985015460088601546040516373b33d5d60e11b81526001600160a01b039093169263e7667aba92612ea5928892600401615b69565b600060405180830381865afa925050508015612ee357506040513d6000823e601f3d908101601f19168201604052612ee09190810190615b8e565b60015b612f5857336001600160a01b031684600b01547f703feb01415a2995816e8d082fd7aad0eacada1a2f63fdb3226e47f8a0285436604051612f4b906020808252601390820152721d985b1a59185d1a5bdb881c995d995c9d1959606a1b604082015260600190565b60405180910390a3612fe7565b8115612f9e5760405162461bcd60e51b8152602060048201526015602482015274756e6a7573746966696564206368616c6c656e676560581b6044820152606401610a77565b336001600160a01b031686600b01547f703feb01415a2995816e8d082fd7aad0eacada1a2f63fdb3226e47f8a028543683604051612fdc91906150ff565b60405180910390a350505b600b8401549150612ffb60a0840184615c37565b613007600186356157b9565b8181106130165761301661538c565b905060200201602081019061302b9190615ae6565b905083600801544361303d91906157b9565b600a8501556000600b8501819055600c8501555b9250929050565b60048101545a1015610b6f5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420656e6f75676820657874726120676173206c656674000000000000006044820152606401610a77565b6000818152602083905260409020600101546130da5760405162461bcd60e51b8152600401610a7790615c80565b6000908152602091909152604081208181556001810182905560020155565b336001600160a01b0382166131505760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722063616e206e6f74206265207a65726f20616464726573736044820152606401610a77565b6001600160a01b03818116600090815260018501602052604090205416156131d05760405162461bcd60e51b815260206004820152602d60248201527f4f70657261746f7220616c72656164792073657420666f72207468652073746160448201526c35b4b73390383937bb34b232b960991b6064820152608401610a77565b6001600160a01b038281166000908152600285016020526040902054161561323a5760405162461bcd60e51b815260206004820152601f60248201527f4f70657261746f72206164647265737320616c726561647920696e20757365006044820152606401610a77565b6001600160a01b038116600090815260038401602052604090208054600160601b90046001600160401b0316156132cd5760405162461bcd60e51b815260206004820152603160248201527f546865726520697320612070656e64696e6720617574686f72697a6174696f6e60448201527008191958dc99585cd9481c995c5d595cdd607a1b6064820152608401610a77565b826001600160a01b0316826001600160a01b03167fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c160405160405180910390a3506001600160a01b03908116600081815260018501602090815260408083208054959096166001600160a01b031995861681179096559482526002909501909452919092208054909216179055565b60606003613369846149fb565b600381111561337a5761337a615152565b146133c75760405162461bcd60e51b815260206004820152601e60248201527f43757272656e74207374617465206973206e6f74204348414c4c454e474500006044820152606401610a77565b6003830154600c8401546000916133dd91615784565b905080431161343a5760405162461bcd60e51b815260206004820152602360248201527f4368616c6c656e676520706572696f6420686173206e6f7420706173736564206044820152621e595d60ea1b6064820152608401610a77565b83600b015483604051602001613450919061575b565b60405160208183030381529060405280519060200120146134d95760405162461bcd60e51b815260206004820152603960248201527f526573756c7420756e64657220617070726f76616c206973206469666665726560448201527f6e74207468616e20746865207375626d6974746564206f6e65000000000000006064820152608401610a77565b83546000906001600160a01b0316638871ca5d6134f960a0870187615c37565b613505600189356157b9565b8181106135145761351461538c565b90506020020160208101906135299190615ae6565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa15801561356b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061358f9190615359565b9050336001600160a01b03821614806135b5575060068501546135b29083615784565b43115b6136335760405162461bcd60e51b815260206004820152604360248201527f4f6e6c792074686520444b4720726573756c74207375626d697474657220636160448201527f6e20617070726f76652074686520726573756c742061742074686973206d6f6d606482015262195b9d60ea1b608482015260a401610a77565b6136406040850185615c37565b90506001600160401b0381111561365957613659615376565b604051908082528060200260200182016040528015613682578160200160208202803683370190505b50925060005b6136956040860186615c37565b9050811015613749576136ab60a0860186615c37565b60016136ba6040890189615c37565b858181106136ca576136ca61538c565b90506020020160208101906136df9190615cd0565b6136e99190615ceb565b60ff168181106136fb576136fb61538c565b90506020020160208101906137109190615ae6565b8482815181106137225761372261538c565b63ffffffff9092166020928302919091019091015280613741816159c3565b915050613688565b50600b8501546040513391907fe6e9d5eba171e82025efb3f3d44fd35905e7283d104284cb9f3bbc5bf1e4276f90600090a3505092915050565b60008060008484604051613798929190615d04565b60405190819003902092506137b1602060008688615d14565b6137ba91615d3e565b91506137c98460208188615d14565b6137d291615d3e565b600084815260209890985260409097209586555060018501819055600290940185905594929392915050565b60006008820181905560098201819055600a8201819055600b8201819055600c820181905581546040805163a69df4b560e01b815290516001600160a01b039092169263a69df4b59260048084019382900301818387803b15801561134457600080fd5b6000600261386f836149fb565b600381111561388057613880615152565b14801561107957506005820154600a83015460088401546138a19190615784565b6138ab9190615784565b431192915050565b6001600160601b03811615806138d7575083546001600160601b0390811690821610155b6139415760405162461bcd60e51b815260206004820152603560248201527f417574686f72697a6174696f6e20616d6f756e742073686f756c642062652030604482015274206f722061626f766520746865206d696e696d756d60581b6064820152608401610a77565b6001600160a01b038084166000908152600186016020526040812054909116908161396d575042613977565b506001600160401b035b60006139838486615d5c565b6001600160a01b03871660009081526003890160205260409020805491925090600160601b90046001600160401b031680158015906139cb57506001600160401b0381811614155b15613a5e5788546139ec90600160a01b90046001600160401b031682615d7c565b6001600160401b0316421015613a5e5760405162461bcd60e51b815260206004820152603160248201527f4e6f7420656e6f7567682074696d65207061737365642073696e636520746865604482015270081bdc9a59da5b985b081c995c5d595cdd607a1b6064820152608401610a77565b81546001600160401b038516600160601b81026001600160a01b03199092166001600160601b0386811691909117929092178455604080518a8416815292891660208401528201526001600160a01b0386811691908a16907f545cbf267cef6fe43f11f6219417ab43a0e8e345adbaae5f626d9bc325e8535a9060600160405180910390a3505050505050505050565b6001613af9836149fb565b6003811115613b0a57613b0a615152565b14613b625760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207374617465206973206e6f74204157414954494e475f5345604482015261115160f21b6064820152608401610a77565b60405181907fb2ad26c2940889d79df2ee9c758a8aefa00c5ca90eee119af0e5d795df3b98bb90600090a2436008830155600990910155565b6000613ba6826149fb565b6003811115613bb757613bb7615152565b14613bd45760405162461bcd60e51b8152600401610a7790615d9c565b6040517f5c3ed2397d4d21298b2fb5027ac8e2d42e3c9c72bbb55ddb030e2a36a0cdff6b90600090a1805460408051637c1e845d60e11b815290516001600160a01b039092169163f83d08ba9160048082019260009290919082900301818387803b158015613c4257600080fd5b505af1158015613c56573d6000803e3d6000fd5b5050505043816007018190555050565b6001600160a01b038116600090815260038401602052604090208054600160601b90046001600160401b0316613cea5760405162461bcd60e51b8152602060048201526024808201527f417574686f72697a6174696f6e206465637265617365206e6f742072657175656044820152631cdd195960e21b6064820152608401610a77565b805467fffffffffffffffe19600160601b9091046001600160401b031601613d695760405162461bcd60e51b815260206004820152602c60248201527f417574686f72697a6174696f6e2064656372656173652072657175657374206e60448201526b1bdd081858dd1a5d985d195960a21b6064820152608401610a77565b8054600160601b90046001600160401b0316421015613dda5760405162461bcd60e51b815260206004820152602760248201527f417574686f72697a6174696f6e2064656372656173652064656c6179206e6f74604482015266081c185cdcd95960ca1b6064820152608401610a77565b6040516001600160a01b038316907f50270a522c2fef97b6b7385c2aa4a4518adda681530e0a1fe9f5e840f6f2cd9d90600090a2604051633af0572d60e11b81526001600160a01b0383811660048301528416906375e0ae5a906024016020604051808303816000875af1158015613e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e7a91906154b8565b50506001600160a01b031660009081526003909201602052506040902080546001600160a01b0319169055565b60006001613eb4836149fb565b6003811115613ec557613ec5615152565b1480156110795750600282015460078301546138ab9190615784565b60408114613f315760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964206c656e677468206f6620746865207075626c6963206b65796044820152606401610a77565b60008282604051613f43929190615d04565b604080519182900390912060008181526020879052919091206001015490915015613fc85760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420776974682074686520676976656e207075626c6963206b657960448201526e20616c72656164792065786973747360881b6064820152608401610a77565b6000613fd76020828587615d14565b613fe091615d3e565b905080610e395760405162461bcd60e51b815260206004820152602260248201527f57616c6c6574207075626c6963206b6579206d757374206265206e6f6e2d7a65604482015261726f60f01b6064820152608401610a77565b6002614045836149fb565b600381111561405657614056615152565b146140af5760405162461bcd60e51b8152602060048201526024808201527f43757272656e74207374617465206973206e6f74204157414954494e475f524560448201526314d5531560e21b6064820152608401610a77565b6140b882613862565b156141055760405162461bcd60e51b815260206004820152601a60248201527f444b472074696d656f757420616c7265616479207061737365640000000000006044820152606401610a77565b81546040516307b8c36760e51b81523360048201526001600160a01b0390911690819063f7186ce090602401602060405180830381865afa15801561414e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141729190615b03565b6141ca5760405162461bcd60e51b815260206004820152602360248201527f5375626d6974746572206e6f7420696e2074686520736f72746974696f6e20706044820152621bdbdb60ea1b6064820152608401610a77565b336001600160a01b038216638871ca5d6141e760a0860186615c37565b6141f3600188356157b9565b8181106142025761420261538c565b90506020020160208101906142179190615ae6565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa158015614259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427d9190615359565b6001600160a01b0316146142d35760405162461bcd60e51b815260206004820152601a60248201527f556e6578706563746564207375626d697474657220696e6465780000000000006044820152606401610a77565b816040516020016142e4919061575b565b60408051601f19818403018152908290528051602090910120600b850181905543600c8601556009850154917f8e7fd4293d7db11807147d8890c287fad3396fbb09a4e92273fc7856076c153a9061433d90869061575b565b60405180910390a3505050565b6001600160a01b038116600090815260038401602052604081205461437d908590859085906001600160601b0316614d69565b949350505050565b6000614390836149fb565b60038111156143a1576143a1615152565b146143be5760405162461bcd60e51b8152600401610a7790615d9c565b600081116143de5760405162461bcd60e51b8152600401610a7790615dd3565b600290910155565b60006143f1836149fb565b600381111561440257614402615152565b1461441f5760405162461bcd60e51b8152600401610a7790615d9c565b6000811161443f5760405162461bcd60e51b8152600401610a7790615dd3565b600390910155565b6000614452836149fb565b600381111561446357614463615152565b146144805760405162461bcd60e51b8152600401610a7790615d9c565b600490910155565b6000614493836149fb565b60038111156144a4576144a4615152565b146144c15760405162461bcd60e51b8152600401610a7790615d9c565b600081116144e15760405162461bcd60e51b8152600401610a7790615dd3565b600590910155565b60006144f4836149fb565b600381111561450557614505615152565b146145225760405162461bcd60e51b8152600401610a7790615d9c565b6005820154811061459b5760405162461bcd60e51b815260206004820152603d60248201527f4e65772076616c75652073686f756c64206265206c657373207468616e20726560448201527f73756c74207375626d697373696f6e20706572696f64206c656e6774680000006064820152608401610a77565b600690910155565b60008181526020839052604081206001015481906145d35760405162461bcd60e51b8152600401610a7790615c80565b505060009081526020919091526040902060018101546002909101549091565b6000818152602083905260408120600101546146215760405162461bcd60e51b8152600401610a7790615c80565b506000908152602091909152604090205490565b6001600160a01b03811660009081526003830160205260408120805467fffffffffffffffe19600160601b9091046001600160401b031601614681576001600160401b03915050611079565b805442906001600160401b03600160601b9091048116908216116146c15781546146bc908290600160601b90046001600160401b0316615d7c565b6146c4565b60005b95945050505050565b81546001600160401b03909116600160601b0267ffffffffffffffff60601b19909116179055565b81546001600160401b03909116600160a01b0267ffffffffffffffff60a01b19909116179055565b61472681613ea7565b6147725760405162461bcd60e51b815260206004820152601f60248201527f4177616974696e67207365656420686173206e6f742074696d6564206f7574006044820152606401610a77565b6040517f68c52f05452e81639fa06f379aee3178cddee4725521fff886f244c99e868b5090600090a1610b6f816137fe565b60606000806147b385856145a3565b604080516020810193909352828101919091528051808303820181526060909201905295945050505050565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910161149d565b82546001600160a01b03161561489c5760405162461bcd60e51b815260206004820152602260248201527f536f72746974696f6e20506f6f6c206164647265737320616c72656164792073604482015261195d60f21b6064820152608401610a77565b60018301546001600160a01b0316156149015760405162461bcd60e51b815260206004820152602160248201527f444b472056616c696461746f72206164647265737320616c72656164792073656044820152601d60fa1b6064820152608401610a77565b82546001600160a01b03199081166001600160a01b03938416178455600190930180549093169116179055565b83546001600160601b03908116908216101561498c5760405162461bcd60e51b815260206004820152601f60248201527f417574686f72697a6174696f6e2062656c6f7720746865206d696e696d756d006044820152606401610a77565b6001600160a01b0383811660008181526001870160209081526040918290205482516001600160601b03888116825287169281019290925282519416938493927f87f9f9f59204f53d57a89a817c6083a17979cd0531791c91e18551a56e3cfdd7928290030190a35050505050565b805460408051632938b58d60e21b815290516000926001600160a01b03169163a4e2d6349160048083019260209291908290030181865afa158015614a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a689190615b03565b15614a8d5750600881015460019015614a8d5750600c81015460029015614a8d575060035b919050565b614a9b81613862565b614adf5760405162461bcd60e51b81526020600482015260156024820152741112d1c81a185cc81b9bdd081d1a5b5959081bdd5d605a1b6044820152606401610a77565b6040517f2852b3e178dd281713b041c3d90b4815bb55b7ec812931d1e8e8d8bb2ed72d3e90600090a1610b6f816137fe565b6001600160a01b03808216600090815260028601602052604081205490911680614b4d5760405162461bcd60e51b8152600401610a779061544c565b6001600160a01b038116600090815260038701602052604081208054909190614b84908990899086906001600160601b0316614d69565b6040516307b8c36760e51b81526001600160a01b0387811660048301529192509087169063f7186ce090602401602060405180830381865afa158015614bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bf29190615b03565b614c0a576001600160601b031615925061437d915050565b6040516304de824f60e41b81526001600160a01b03871690634de824f090614c389088908590600401615b20565b602060405180830381865afa158015614c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c799190615b03565b98975050505050505050565b600060606000846008015411614cdd5760405162461bcd60e51b815260206004820152601860248201527f444b4720686173206e6f74206265656e207374617274656400000000000000006044820152606401610a77565b6001840154600985015460088601546040516373b33d5d60e11b81526001600160a01b039093169263e7667aba92614d19928892600401615b69565b600060405180830381865afa158015614d36573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d5e9190810190615b8e565b915091509250929050565b604051637004922d60e11b81526001600160a01b038381166004830152306024830152600091829186169063e009245a90604401602060405180830381865afa158015614dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dde91906154b8565b90506000836001600160601b0316826001600160601b031611614e02576000614e0c565b614e0c8483615d5c565b87549091506001600160601b039081169082161015614e305760009250505061437d565b915061437d9050565b6001600160a01b0381168114610b6f57600080fd5b6001600160601b0381168114610b6f57600080fd5b600080600060608486031215614e7857600080fd5b8335614e8381614e39565b92506020840135614e9381614e4e565b91506040840135614ea381614e4e565b809150509250925092565b600060208284031215614ec057600080fd5b813561279c81614e39565b600060208284031215614edd57600080fd5b813561279c81614e4e565b600060208284031215614efa57600080fd5b81356001600160401b03811115614f1057600080fd5b820160e0818503121561279c57600080fd5b600060208284031215614f3457600080fd5b5035919050565b60008060408385031215614f4e57600080fd5b50508035926020909101359150565b600080600080600060a08688031215614f7557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008083601f840112614faa57600080fd5b5081356001600160401b03811115614fc157600080fd5b6020830191508360208260051b850101111561305157600080fd5b60008060008060608587031215614ff257600080fd5b84356001600160401b038082111561500957600080fd5b9086019060a0828903121561501d57600080fd5b909450602086013593506040860135908082111561503a57600080fd5b5061504787828801614f98565b95989497509550505050565b80356001600160401b0381168114614a8d57600080fd5b60008060006060848603121561507f57600080fd5b833561508a81614e4e565b925061509860208501615053565b91506150a660408501615053565b90509250925092565b60005b838110156150ca5781810151838201526020016150b2565b50506000910152565b600081518084526150eb8160208601602086016150af565b601f01601f19169290920160200192915050565b60208152600061279c60208301846150d3565b60008060006060848603121561512757600080fd5b833561513281614e39565b9250602084013561514281614e39565b91506040840135614ea381614e39565b634e487b7160e01b600052602160045260246000fd5b602081016004831061518a57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060008060008060a087890312156151a957600080fd5b86356151b481614e4e565b95506020870135945060408701356151cb81614e39565b93506060870135925060808701356001600160401b038111156151ed57600080fd5b6151f989828a01614f98565b979a9699509497509295939492505050565b60008060008060006080868803121561522357600080fd5b8535945060208601356001600160401b0381111561524057600080fd5b61524c88828901614f98565b909550935050604086013561526081614e39565b949793965091946060013592915050565b600081518084526020808501945080840160005b838110156152a757815163ffffffff1687529582019590820190600101615285565b509495945050505050565b60208152600061279c6020830184615271565b821515815260406020820152600061437d60408301846150d3565b60208082526022908201527f43616c6c6572206973206e6f7420746865207374616b696e6720636f6e74726160408201526118dd60f21b606082015260800190565b6020808252601c908201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604082015260600190565b60006020828403121561536b57600080fd5b815161279c81614e39565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160601b038516815260208082018590526001600160a01b038481166040840152608060608401819052845190840181905260009285810192909160a0860190855b818110156154055785518416835294840194918401916001016153e7565b50909a9950505050505050505050565b6020808252601e908201527f43616c6c6572206973206e6f74207468652057616c6c6574204f776e65720000604082015260600190565b60208082526010908201526f2ab735b737bbb71037b832b930ba37b960811b604082015260600190565b60008060006060848603121561548b57600080fd5b835161549681614e39565b60208501519093506154a781614e39565b6040850151909250614ea381614e39565b6000602082840312156154ca57600080fd5b815161279c81614e4e565b6000808335601e198436030181126154ec57600080fd5b8301803591506001600160401b0382111561550657600080fd5b60200191503681900382131561305157600080fd5b6000808335601e1984360301811261553257600080fd5b83016020810192503590506001600160401b0381111561555157600080fd5b80360382131561305157600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126155a057600080fd5b83016020810192503590506001600160401b038111156155bf57600080fd5b8060051b360382131561305157600080fd5b803560ff81168114614a8d57600080fd5b81835260006001600160fb1b038311156155fb57600080fd5b8260051b80836020870137939093016020019392505050565b63ffffffff81168114610b6f57600080fd5b8183526000602080850194508260005b858110156152a757813561564981615614565b63ffffffff1687529582019590820190600101615636565b80358252600060206156758184018461551b565b60e08387015261568960e087018284615560565b9150506156996040850185615589565b868303604088015280835290916000919084015b818310156156d55760ff6156c0856155d1565b168152928401926001929092019184016156ad565b6156e2606088018861551b565b9550935087810360608901526156f9818686615560565b94505050505061570c6080840184615589565b858303608087015261571f8382846155e2565b9250505061573060a0840184615589565b85830360a0870152615743838284615626565b9250505060c083013560c08501528091505092915050565b60208152600061279c6020830184615661565b634e487b7160e01b600052601160045260246000fd5b808201808211156110795761107961576e565b6040815260006157aa6040830185615271565b90508260208301529392505050565b818103818111156110795761107961576e565b60208152600061437d602083018486615626565b8015158114610b6f57600080fd5b60018060a01b038716815260a06020820152853560a082015260006158166020880188615589565b60a060c085015261582c610140850182846155e2565b915050604088013561583d816157e0565b151560e0840152615851606089018961551b565b609f19808685030161010087015261586a848385615560565b935061587960808c018c615589565b935091508086850301610120870152506158948383836155e2565b9250505082810360408401526158aa81886150d3565b905085606084015282810360808401526158c5818587615626565b9998505050505050505050565b604051601f8201601f191681016001600160401b03811182821017156158fa576158fa615376565b604052919050565b60006001600160401b0382111561591b5761591b615376565b5060051b60200190565b6000602080838503121561593857600080fd5b82516001600160401b0381111561594e57600080fd5b8301601f8101851361595f57600080fd5b805161597261596d82615902565b6158d2565b81815260059190911b8201830190838101908783111561599157600080fd5b928401925b828410156159b85783516159a981615614565b82529284019290840190615996565b979650505050505050565b6000600182016159d5576159d561576e565b5060010190565b6000602082840312156159ee57600080fd5b813561279c816157e0565b60208082526022908201527f496e76616c69642077616c6c6574206d656d62657273206964656e7469666965604082015261727360f01b606082015260800190565b60006020808385031215615a4e57600080fd5b82516001600160401b03811115615a6457600080fd5b8301601f81018513615a7557600080fd5b8051615a8361596d82615902565b81815260059190911b82018301908381019087831115615aa257600080fd5b928401925b828410156159b8578351615aba81614e39565b82529284019290840190615aa7565b600060208284031215615adb57600080fd5b815161279c81615614565b600060208284031215615af857600080fd5b813561279c81615614565b600060208284031215615b1557600080fd5b815161279c816157e0565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160401b03818116838216019080821115615b6257615b6261576e565b5092915050565b606081526000615b7c6060830186615661565b60208301949094525060400152919050565b60008060408385031215615ba157600080fd5b8251615bac816157e0565b60208401519092506001600160401b0380821115615bc957600080fd5b818501915085601f830112615bdd57600080fd5b815181811115615bef57615bef615376565b615c02601f8201601f19166020016158d2565b9150808252866020828501011115615c1957600080fd5b615c2a8160208401602086016150af565b5080925050509250929050565b6000808335601e19843603018112615c4e57600080fd5b8301803591506001600160401b03821115615c6857600080fd5b6020019150600581901b360382131561305157600080fd5b60208082526030908201527f57616c6c657420776974682074686520676976656e20494420686173206e6f7460408201526f081899595b881c9959da5cdd195c995960821b606082015260800190565b600060208284031215615ce257600080fd5b61279c826155d1565b60ff82811682821603908111156110795761107961576e565b8183823760009101908152919050565b60008085851115615d2457600080fd5b83861115615d3157600080fd5b5050820193919092039150565b8035602083101561107957600019602084900360031b1b1692915050565b6001600160601b03828116828216039080821115615b6257615b6261576e565b6001600160401b03828116828216039080821115615b6257615b6261576e565b60208082526019908201527f43757272656e74207374617465206973206e6f742049444c4500000000000000604082015260600190565b60208082526025908201527f4e65772076616c75652073686f756c642062652067726561746572207468616e604082015264207a65726f60d81b60608201526080019056fea2646970667358221220aefca9a30743965e439ed44f15c4499befc72bfa4f9ee4e4722b5787f775da8f64736f6c63430008110033";
1932
1932
  var isSuperArgs = function (xs) {
1933
1933
  return (typeof xs[0] === "string" ||
1934
1934
  Array.isArray(xs[0]) ||
@@ -408,7 +408,7 @@ var _abi = [
408
408
  type: "function",
409
409
  },
410
410
  ];
411
- var _bytecode = "0x608060405234801561001057600080fd5b50604051610b08380380610b0883398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610a75806100936000396000f3fe6080604052600436106100b15760003560e01c8063c3f511c111610069578063e566df311161004e578063e566df31146101bb578063ea63738d146101db578063efcb70c01461020857600080fd5b8063c3f511c11461017b578063c5a5ebda146101a857600080fd5b8063504d27fd1161009a578063504d27fd1461010b57806381c82233146101215780639542c9f11461014357600080fd5b80630f5287b0146100b657806316fed3e2146100e7575b600080fd5b6100c96100c4366004610577565b610228565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156100f357600080fd5b506100fd60025481565b6040519081526020016100de565b34801561011757600080fd5b506100fd60015481565b34801561012d57600080fd5b5061014161013c3660046105d8565b600155565b005b34801561014f57600080fd5b50600054610163906001600160a01b031681565b6040516001600160a01b0390911681526020016100de565b34801561018757600080fd5b5061019b6101963660046106f9565b6102a0565b6040516100de9190610786565b6100c96101b63660046107a0565b61041e565b3480156101c757600080fd5b506101416101d63660046105d8565b600255565b3480156101e757600080fd5b506101fb6101f63660046106f9565b61046f565b6040516100de9190610823565b34801561021457600080fd5b5061014161022336600461089b565b6104ca565b604080516001600160a01b03881681526020810187905261ffff861681830152606081018590526080810184905263ffffffff831660a082015290516000917f4d24ef3f381c3d7e8696045268f69c41ec3dee2c5bd1aaa48daf8ec2ec7fe436919081900360c00190a1506103099695505050505050565b60607f6efaccd86b6ce8325db6ad038d68e09f9b1af9a0fc1ed121ebe9d870aafc2086826040516102d19190610786565b60405180910390a16000546001546040516340c10f1960e01b815233600482015260248101919091526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561032957600080fd5b505af115801561033d573d6000803e3d6000fd5b5050604080516101008101825260018152600260208083018290527f300000000000000000000000000000000000000000000000000000000000000083850152600460608401527f50000000000000000000000000000000000000000000000000000000000000006080840152600660a08401527f700000000000000000000000000000000000000000000000000000000000000060c08401529054835180830191909152835180820383018152908401845260e083015291519093506104079250839101610823565b604051602081830303815290604052915050919050565b60007f8f36aa28e4f86a5b6d397422d004b60e74eda866a331d074749b789d70ca3144878787878787604051610459969594939291906108c5565b60405180910390a1506103789695505050505050565b60408051610100810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c083019190915260e0820152825190916104c49184018101908401610976565b92915050565b6000546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f1990604401600060405180830381600087803b15801561051857600080fd5b505af115801561052c573d6000803e3d6000fd5b505050505050565b80356001600160a01b038116811461054b57600080fd5b919050565b61ffff8116811461056057600080fd5b50565b803563ffffffff8116811461054b57600080fd5b60008060008060008060c0878903121561059057600080fd5b61059987610534565b95506020870135945060408701356105b081610550565b935060608701359250608087013591506105cc60a08801610563565b90509295509295509295565b6000602082840312156105ea57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715610644576106446105f1565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610673576106736105f1565b604052919050565b600067ffffffffffffffff821115610695576106956105f1565b50601f01601f191660200190565b600082601f8301126106b457600080fd5b81356106c76106c28261067b565b61064a565b8181528460208386010111156106dc57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b61072e848285016106a3565b949350505050565b60005b83811015610751578181015183820152602001610739565b50506000910152565b60008151808452610772816020860160208601610736565b601f01601f19169290920160200192915050565b602081526000610799602083018461075a565b9392505050565b60008060008060008060c087890312156107b957600080fd5b6107c287610534565b95506020870135945060408701356107d981610550565b9350606087013592506107ee60808801610563565b915060a087013567ffffffffffffffff81111561080a57600080fd5b61081689828a016106a3565b9150509295509295509295565b6020815260ff8251166020820152602082015160408201526040820151606082015261ffff6060830151166080820152608082015160a0820152600060a083015161087460c084018261ffff169052565b5060c083015160e083015260e083015161010080818501525061072e61012084018261075a565b600080604083850312156108ae57600080fd5b6108b783610534565b946020939093013593505050565b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a0820152600061090960c083018461075a565b98975050505050505050565b805160ff8116811461054b57600080fd5b805161054b81610550565b600082601f83011261094257600080fd5b81516109506106c28261067b565b81815284602083860101111561096557600080fd5b61072e826020830160208701610736565b60006020828403121561098857600080fd5b815167ffffffffffffffff808211156109a057600080fd5b9083019061010082860312156109b557600080fd5b6109bd610620565b6109c683610915565b815260208301516020820152604083015160408201526109e860608401610926565b606082015260808301516080820152610a0360a08401610926565b60a082015260c083015160c082015260e083015182811115610a2457600080fd5b610a3087828601610931565b60e0830152509594505050505056fea2646970667358221220d666f4abaa644e652f6af266dcfacd11e95277b42f3180b2fbd131dc28194ef864736f6c63430008110033";
411
+ var _bytecode = "0x608060405234801561001057600080fd5b50604051610b08380380610b0883398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610a75806100936000396000f3fe6080604052600436106100b15760003560e01c8063c3f511c111610069578063e566df311161004e578063e566df31146101bb578063ea63738d146101db578063efcb70c01461020857600080fd5b8063c3f511c11461017b578063c5a5ebda146101a857600080fd5b8063504d27fd1161009a578063504d27fd1461010b57806381c82233146101215780639542c9f11461014357600080fd5b80630f5287b0146100b657806316fed3e2146100e7575b600080fd5b6100c96100c4366004610577565b610228565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156100f357600080fd5b506100fd60025481565b6040519081526020016100de565b34801561011757600080fd5b506100fd60015481565b34801561012d57600080fd5b5061014161013c3660046105d8565b600155565b005b34801561014f57600080fd5b50600054610163906001600160a01b031681565b6040516001600160a01b0390911681526020016100de565b34801561018757600080fd5b5061019b6101963660046106f9565b6102a0565b6040516100de9190610786565b6100c96101b63660046107a0565b61041e565b3480156101c757600080fd5b506101416101d63660046105d8565b600255565b3480156101e757600080fd5b506101fb6101f63660046106f9565b61046f565b6040516100de9190610823565b34801561021457600080fd5b5061014161022336600461089b565b6104ca565b604080516001600160a01b03881681526020810187905261ffff861681830152606081018590526080810184905263ffffffff831660a082015290516000917f4d24ef3f381c3d7e8696045268f69c41ec3dee2c5bd1aaa48daf8ec2ec7fe436919081900360c00190a1506103099695505050505050565b60607f6efaccd86b6ce8325db6ad038d68e09f9b1af9a0fc1ed121ebe9d870aafc2086826040516102d19190610786565b60405180910390a16000546001546040516340c10f1960e01b815233600482015260248101919091526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561032957600080fd5b505af115801561033d573d6000803e3d6000fd5b5050604080516101008101825260018152600260208083018290527f300000000000000000000000000000000000000000000000000000000000000083850152600460608401527f50000000000000000000000000000000000000000000000000000000000000006080840152600660a08401527f700000000000000000000000000000000000000000000000000000000000000060c08401529054835180830191909152835180820383018152908401845260e083015291519093506104079250839101610823565b604051602081830303815290604052915050919050565b60007f8f36aa28e4f86a5b6d397422d004b60e74eda866a331d074749b789d70ca3144878787878787604051610459969594939291906108c5565b60405180910390a1506103789695505050505050565b60408051610100810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c083019190915260e0820152825190916104c49184018101908401610976565b92915050565b6000546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f1990604401600060405180830381600087803b15801561051857600080fd5b505af115801561052c573d6000803e3d6000fd5b505050505050565b80356001600160a01b038116811461054b57600080fd5b919050565b61ffff8116811461056057600080fd5b50565b803563ffffffff8116811461054b57600080fd5b60008060008060008060c0878903121561059057600080fd5b61059987610534565b95506020870135945060408701356105b081610550565b935060608701359250608087013591506105cc60a08801610563565b90509295509295509295565b6000602082840312156105ea57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715610644576106446105f1565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610673576106736105f1565b604052919050565b600067ffffffffffffffff821115610695576106956105f1565b50601f01601f191660200190565b600082601f8301126106b457600080fd5b81356106c76106c28261067b565b61064a565b8181528460208386010111156106dc57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561070b57600080fd5b813567ffffffffffffffff81111561072257600080fd5b61072e848285016106a3565b949350505050565b60005b83811015610751578181015183820152602001610739565b50506000910152565b60008151808452610772816020860160208601610736565b601f01601f19169290920160200192915050565b602081526000610799602083018461075a565b9392505050565b60008060008060008060c087890312156107b957600080fd5b6107c287610534565b95506020870135945060408701356107d981610550565b9350606087013592506107ee60808801610563565b915060a087013567ffffffffffffffff81111561080a57600080fd5b61081689828a016106a3565b9150509295509295509295565b6020815260ff8251166020820152602082015160408201526040820151606082015261ffff6060830151166080820152608082015160a0820152600060a083015161087460c084018261ffff169052565b5060c083015160e083015260e083015161010080818501525061072e61012084018261075a565b600080604083850312156108ae57600080fd5b6108b783610534565b946020939093013593505050565b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a0820152600061090960c083018461075a565b98975050505050505050565b805160ff8116811461054b57600080fd5b805161054b81610550565b600082601f83011261094257600080fd5b81516109506106c28261067b565b81815284602083860101111561096557600080fd5b61072e826020830160208701610736565b60006020828403121561098857600080fd5b815167ffffffffffffffff808211156109a057600080fd5b9083019061010082860312156109b557600080fd5b6109bd610620565b6109c683610915565b815260208301516020820152604083015160408201526109e860608401610926565b606082015260808301516080820152610a0360a08401610926565b60a082015260c083015160c082015260e083015182811115610a2457600080fd5b610a3087828601610931565b60e0830152509594505050505056fea2646970667358221220913de8d1db6fa583b976d45f865e25f5fd92a6626c1bddca76ad1d23088eee1764736f6c63430008110033";
412
412
  var isSuperArgs = function (xs) { return xs.length > 1; };
413
413
  var WormholeBridgeStub__factory = /** @class */ (function (_super) {
414
414
  __extends(WormholeBridgeStub__factory, _super);