@keep-network/tbtc-v2 0.1.1-dev.82 → 0.1.1-dev.83

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 (69) hide show
  1. package/artifacts/Bank.json +8 -8
  2. package/artifacts/Bridge.json +33 -11
  3. package/artifacts/Deposit.json +7 -7
  4. package/artifacts/DepositSweep.json +7 -7
  5. package/artifacts/EcdsaDkgValidator.json +1 -1
  6. package/artifacts/EcdsaInactivity.json +1 -1
  7. package/artifacts/EcdsaSortitionPool.json +2 -2
  8. package/artifacts/Fraud.json +7 -7
  9. package/artifacts/KeepRegistry.json +1 -1
  10. package/artifacts/KeepStake.json +2 -2
  11. package/artifacts/KeepToken.json +2 -2
  12. package/artifacts/KeepTokenStaking.json +1 -1
  13. package/artifacts/MovingFunds.json +9 -9
  14. package/artifacts/NuCypherStakingEscrow.json +1 -1
  15. package/artifacts/NuCypherToken.json +2 -2
  16. package/artifacts/RandomBeaconStub.json +1 -1
  17. package/artifacts/Redemption.json +26 -14
  18. package/artifacts/ReimbursementPool.json +2 -2
  19. package/artifacts/Relay.json +11 -11
  20. package/artifacts/T.json +2 -2
  21. package/artifacts/TBTC.json +13 -13
  22. package/artifacts/TBTCToken.json +13 -13
  23. package/artifacts/TBTCVault.json +12 -12
  24. package/artifacts/TokenStaking.json +1 -1
  25. package/artifacts/TokenholderGovernor.json +9 -9
  26. package/artifacts/TokenholderTimelock.json +8 -8
  27. package/artifacts/VendingMachine.json +11 -11
  28. package/artifacts/VendingMachineKeep.json +1 -1
  29. package/artifacts/VendingMachineNuCypher.json +1 -1
  30. package/artifacts/WalletRegistry.json +5 -5
  31. package/artifacts/WalletRegistryGovernance.json +2 -2
  32. package/artifacts/Wallets.json +9 -9
  33. package/artifacts/solcInputs/{5cd0a97e230d515eacf46fb60ea8963a.json → 21fcfd91cc383ddf1b3799814408151d.json} +9 -6
  34. package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
  35. package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
  36. package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.dbg.json +1 -1
  37. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
  38. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.json +2 -2
  39. package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  40. package/build/contracts/bridge/Bridge.sol/Bridge.json +73 -42
  41. package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
  42. package/build/contracts/bridge/BridgeState.sol/BridgeState.json +2 -2
  43. package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
  44. package/build/contracts/bridge/Deposit.sol/Deposit.json +2 -2
  45. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
  46. package/build/contracts/bridge/DepositSweep.sol/DepositSweep.json +2 -2
  47. package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
  48. package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
  49. package/build/contracts/bridge/Fraud.sol/Fraud.json +2 -2
  50. package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +1 -1
  51. package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
  52. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
  53. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.json +2 -2
  54. package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
  55. package/build/contracts/bridge/Redemption.sol/OutboundTx.json +2 -2
  56. package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
  57. package/build/contracts/bridge/Redemption.sol/Redemption.json +2 -2
  58. package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
  59. package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
  60. package/build/contracts/bridge/Wallets.sol/Wallets.json +2 -2
  61. package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
  62. package/build/contracts/vault/DonationVault.sol/DonationVault.dbg.json +1 -1
  63. package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
  64. package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
  65. package/contracts/bridge/BitcoinTx.sol +1 -1
  66. package/contracts/bridge/Bridge.sol +85 -6
  67. package/contracts/bridge/Redemption.sol +160 -6
  68. package/export.json +22 -0
  69. package/package.json +1 -1
@@ -85,8 +85,8 @@
85
85
  "type": "event"
86
86
  }
87
87
  ],
88
- "bytecode": "0x613c8061003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c80637333b36914610050578063a164de6e14610072578063a76558b314610092575b600080fd5b81801561005c57600080fd5b5061007061006b366004613508565b6100b2565b005b81801561007e57600080fd5b5061007061008d366004613587565b610869565b81801561009e57600080fd5b506100706100ad36600461361f565b610c03565b6001600160601b031985166000908152601d87016020526040902060016002820154600160c01b900460ff1660058111156100ef576100ef6136da565b146101415760405162461bcd60e51b815260206004820152601c60248201527f57616c6c6574206d75737420626520696e204c6976652073746174650000000060448201526064015b60405180910390fd5b60018101548061019d5760405162461bcd60e51b815260206004820152602160248201527f4e6f206d61696e205554584f20666f722074686520676976656e2077616c6c656044820152601d60fa1b6064820152608401610138565b8086356101b06040890160208a01613704565b6101c060608a0160408b0161371f565b6040516020016101fd9392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60405160208183030381529060405280519060200120146102605760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f2064617461000000000000000000006044820152606401610138565b6000610292600060c01b878760405160200161027e9392919061373a565b604051602081830303815290604052611184565b9050600081511161030b5760405162461bcd60e51b815260206004820152602e60248201527f52656465656d6572206f757470757420736372697074206d757374206265206160448201527f207374616e6461726420747970650000000000000000000000000000000000006064820152608401610138565b80805190602001208860405160200161033491906001600160601b031991909116815260140190565b6040516020818303038152906040528051906020012014156103be5760405162461bcd60e51b815260206004820152603760248201527f52656465656d6572206f757470757420736372697074206d757374206e6f742060448201527f706f696e7420746f207468652077616c6c657420504b480000000000000000006064820152608401610138565b600e89015467ffffffffffffffff90811690851610156104205760405162461bcd60e51b815260206004820152601b60248201527f526564656d7074696f6e20616d6f756e7420746f6f20736d616c6c00000000006044820152606401610138565b60008887876040516020016104379392919061375e565b60408051808303601f190181529181528151602092830120600081815260128e01909352912060010154909150600160801b900463ffffffff161561050a5760405162461bcd60e51b815260206004820152604a60248201527f546865726520697320612070656e64696e6720726564656d7074696f6e20726560448201527f71756573742066726f6d20746869732077616c6c657420746f2074686520736160648201527f6d65206164647265737300000000000000000000000000000000000000000000608482015260a401610138565b600e8a015460009068010000000000000000900467ffffffffffffffff16610533576000610558565b600e8b01546105589068010000000000000000900467ffffffffffffffff16876137ae565b600e8c0154909150600160801b900467ffffffffffffffff1661057b82886137d5565b60028701805460009061059990849067ffffffffffffffff166137fe565b82546101009290920a67ffffffffffffffff81810219909316918316021790915560028801541690506105d260608c0160408d0161371f565b67ffffffffffffffff16101561062a5760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742077616c6c65742066756e6473000000000000006044820152606401610138565b6040518060a00160405280336001600160a01b031681526020018867ffffffffffffffff1681526020018367ffffffffffffffff1681526020018267ffffffffffffffff1681526020014263ffffffff168152508c601201600085815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff160217905550905050336001600160a01b03168b6bffffffffffffffffffffffff19167f97a0199072f487232635d50ab75860891afe0b91c976ed2fc76502c4d82d0d958b8b8b87876040516107c8959493929190613853565b60405180910390a38b546040517f7c6db49c00000000000000000000000000000000000000000000000000000000815233600482015230602482015267ffffffffffffffff891660448201526001600160a01b0390911690637c6db49c90606401600060405180830381600087803b15801561084357600080fd5b505af1158015610857573d6000803e3d6000fd5b50505050505050505050505050505050565b600061087686868661142a565b90506108c7866108896020880188613892565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925087915061171a9050565b6001600160601b031982166000908152601d8701602052604090206002810154600160c01b900460ff166001816005811115610905576109056136da565b148061092257506002816005811115610920576109206136da565b145b6109945760405162461bcd60e51b815260206004820152602b60248201527f57616c6c6574206d75737420626520696e204c697665206f72204d6f76696e6760448201527f46756e64732073746174650000000000000000000000000000000000000000006064820152608401610138565b60006109e3896109a760408b018b613892565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611974915050565b606081015190915067ffffffffffffffff1615610a64578381604001518260600151604051602001610a429392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60408051601f1981840301815291905280516020909101206001840155610a6c565b600060018401555b8051600284018054600090610a8c90849067ffffffffffffffff166137d5565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846bffffffffffffffffffffffff19167fa45596c10f758d32ec8cca64a0fbfe776052b08fdb3f026e0a87f52118bf8fbe85604051610af391815260200190565b60405180910390a2885481516040517f392aee4300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526001600160a01b039091169063392aee4390602401600060405180830381600087803b158015610b6557600080fd5b505af1158015610b79573d6000803e3d6000fd5b50508a546004808d015460208601516040516356a6d9ef60e01b81526001600160a01b039283169381019390935267ffffffffffffffff16602483015290911692506356a6d9ef91506044015b600060405180830381600087803b158015610be057600080fd5b505af1158015610bf4573d6000803e3d6000fd5b50505050505050505050505050565b6000858383604051602001610c1a9392919061375e565b60408051808303601f190181528282528051602091820120600081815260128c01835283902060a08501845280546001600160a01b0381168652600160a01b900467ffffffffffffffff9081169386019390935260010154808316938501939093526801000000000000000083049091166060840152600160801b90910463ffffffff1660808301819052909250610cfe5760405162461bcd60e51b815260206004820152602160248201527f526564656d7074696f6e207265717565737420646f6573206e6f7420657869736044820152601d60fa1b6064820152608401610138565b4288600f0154826080015163ffffffff16610d1991906138d9565b10610d8b5760405162461bcd60e51b8152602060048201526024808201527f526564656d7074696f6e207265717565737420686173206e6f742074696d656460448201527f206f7574000000000000000000000000000000000000000000000000000000006064820152608401610138565b6001600160601b031987166000908152601d890160209081526040918290209183015190830151610dbc91906137d5565b600282018054600090610dda90849067ffffffffffffffff166137d5565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060016005811115610e1357610e136136da565b6002820154600160c01b900460ff166005811115610e3357610e336136da565b1480610e5d5750600280820154600160c01b900460ff166005811115610e5b57610e5b6136da565b145b80610e87575060056002820154600160c01b900460ff166005811115610e8557610e856136da565b145b610ef95760405162461bcd60e51b815260206004820152603b60248201527f5468652077616c6c6574206d75737420626520696e204c6976652c204d6f766960448201527f6e6746756e6473206f72205465726d696e6174656420737461746500000000006064820152608401610138565b600083815260138a016020908152604080832085518154878501516001600160a01b039092166001600160e01b031991821617600160a01b67ffffffffffffffff93841602178355878401516001938401805460608b015160808c01519386167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000009190951602939093177fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff16600160801b63ffffffff909216919091021790915560128e019093529220805490911681558101805473ffffffffffffffffffffffffffffffffffffffff191690556002820154600160c01b900460ff166005811115611018576110186136da565b14806110425750600280820154600160c01b900460ff166005811115611040576110406136da565b145b156110f3576110518989611aab565b600289015460108a015460118b015483546040517fd8dc404d0000000000000000000000000000000000000000000000000000000081526001600160a01b039094169363d8dc404d936110c0936bffffffffffffffffffffffff9091169290913391908e908e906004016138f1565b600060405180830381600087803b1580156110da57600080fd5b505af11580156110ee573d6000803e3d6000fd5b505050505b876bffffffffffffffffffffffff19167f013dddc8debc4730cd01232fdcea9ae6013689837732356c187fe5edb9a8a8d58686604051611134929190613973565b60405180910390a28854825160208401516040516356a6d9ef60e01b81526001600160a01b03928316600482015267ffffffffffffffff90911660248201529116906356a6d9ef90604401610bc6565b606060008260088151811061119b5761119b613987565b0160200151835160f89190911c91506111b582600961399d565b60ff16146111d3575050604080516020810190915260008152919050565b826009815181106111e6576111e6613987565b016020015160f81c61128c5760028160ff161015611214575050604080516020810190915260008152919050565b600083600a8151811061122957611229613987565b016020015160f81c905061123e6002836139c2565b60ff168114158061125c57508060201415801561125c575080601414155b1561127857505060408051602081019091526000815292915050565b61128484600b83611ba0565b949350505050565b6000611299846008611c6a565b90507f1976a900000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156113765783600b815181106112f8576112f8613987565b60209101015160f81c601414158061134d57506113236002855161131c91906139e5565b8590611c6a565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191661222b60f21b14155b1561136957505060408051602081019091526000815292915050565b61128484600c6014611ba0565b7f17a91400000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156114135783600185516113cf91906139e5565b815181106113df576113df613987565b60209101015160f81c60871461140657505060408051602081019091526000815292915050565b61128484600b6014611ba0565b505050604080516020810190915260008152919050565b600061147661143c6020850185613892565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c8292505050565b6114c25760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420696e70757420766563746f722070726f76696465640000006044820152606401610138565b61150c6114d26040850185613892565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d3292505050565b6115585760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206f757470757420766563746f722070726f766964656400006044820152606401610138565b6115bb61156860208501856139fc565b6115756020860186613892565b6115826040880188613892565b61159260808a0160608b016139fc565b6040516020016115a796959493929190613a26565b604051602081830303815290604052611dd5565b905061165661160a6115d06040850185613892565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dfc92505050565b6116148480613892565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869493925050506020860135611e09565b6116c85760405162461bcd60e51b815260206004820152603c60248201527f5478206d65726b6c652070726f6f66206973206e6f742076616c696420666f7260448201527f2070726f76696465642068656164657220616e642074782068617368000000006064820152608401610138565b611713846116d96040850185613892565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4592505050565b9392505050565b6001600160601b031981166000908152601d85016020526040902060010154806117865760405162461bcd60e51b815260206004820152601d60248201527f4e6f206d61696e205554584f20666f7220676976656e2077616c6c65740000006044820152606401610138565b8083356117996040860160208701613704565b6117a9606087016040880161371f565b6040516020016117e69392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60405160208183030381529060405280519060200120146118495760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f2064617461000000000000000000006044820152606401610138565b600080611855866121b4565b9092509050843582148015611884575063ffffffff811661187c6040870160208801613704565b63ffffffff16145b6118f65760405162461bcd60e51b815260206004820152603f60248201527f4f7574626f756e64207472616e73616374696f6e20696e707574206d7573742060448201527f706f696e7420746f207468652077616c6c65742773206d61696e205554584f006064820152608401610138565b6001601988016000873561191060408a0160208b01613704565b60405160200161193792919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550505050505050565b604080516080810182526000808252602082018190529181018290526060810182905290806119a28561228f565b909250905060006119b48360016138d9565b6040517f1976a9140000000000000000000000000000000000000000000000000000000060208201526001600160601b03198716602482015261222b60f21b6038820152909150600090603a0160408051601f198184030181529082905280516020918201207f1600140000000000000000000000000000000000000000000000000000000000918301919091526001600160601b0319881660238301529150600090603701604051602081830303815290604052805190602001209050611a9e8989896040518060800160405280888152602001898152602001878152602001868152506122a6565b9998505050505050505050565b6001600160601b031981166000908152601d83016020526040902060020154600160c01b900460ff166001816005811115611ae857611ae86136da565b1480611b0557506002816005811115611b0357611b036136da565b145b611b775760405162461bcd60e51b815260206004820152603160248201527f45434453412077616c6c6574206d75737420626520696e204c697665206f722060448201527f4d6f76696e6746756e64732073746174650000000000000000000000000000006064820152608401610138565b6001816005811115611b8b57611b8b6136da565b1415611b9b57611b9b83836124a5565b505050565b606081611bbc5750604080516020810190915260008152611713565b6000611bc883856138d9565b90508381118015611bda575080855110155b611c265760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e6473000000000000000000000000006044820152606401610138565b604051915082604083010160405282825283850182038460208701018481015b80821015611c5f57815183830152602082019150611c46565b505050509392505050565b6000611c798383016020015190565b90505b92915050565b6000806000611c908461228f565b9092509050801580611ca3575060001982145b15611cb2575060009392505050565b6000611cbf8360016138d9565b905060005b82811015611d255785518210611ce05750600095945050505050565b6000611cec87846125ef565b9050600019811415611d05575060009695505050505050565b611d0f81846138d9565b9250508080611d1d90613a68565b915050611cc4565b5093519093149392505050565b6000806000611d408461228f565b9092509050801580611d53575060001982145b15611d62575060009392505050565b6000611d6f8360016138d9565b905060005b82811015611d255785518210611d905750600095945050505050565b6000611d9c878461263a565b9050600019811415611db5575060009695505050505050565b611dbf81846138d9565b9250508080611dcd90613a68565b915050611d74565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6044810151600090611c7c565b60008385148015611e18575081155b8015611e2357508251155b15611e3057506001611284565b611e3c858486856126a0565b95945050505050565b6001820154604080517f113764be00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691600091839163113764be91600480820192602092909190829003018186803b158015611eaa57600080fd5b505afa158015611ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee29190613a83565b90506000826001600160a01b0316632b97be246040518163ffffffff1660e01b815260040160206040518083038186803b158015611f1f57600080fd5b505afa158015611f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f579190613a83565b9050600080611f6d611f6887612748565b6127dd565b905083811415611f7f57839150611ffd565b82811415611f8f57829150611ffd565b60405162461bcd60e51b815260206004820152602560248201527f4e6f742061742063757272656e74206f722070726576696f757320646966666960448201527f63756c74790000000000000000000000000000000000000000000000000000006064820152608401610138565b600061200887612805565b90506000198114156120825760405162461bcd60e51b815260206004820152602360248201527f496e76616c6964206c656e677468206f6620746865206865616465727320636860448201527f61696e00000000000000000000000000000000000000000000000000000000006064820152608401610138565b6001198114156120d45760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206865616465727320636861696e00000000000000000000006044820152606401610138565b6002198114156121265760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420776f726b20696e2061206865616465720000006044820152606401610138565b60038801546121359084613a9c565b8110156121aa5760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420616363756d756c61746564206469666669637560448201527f6c747920696e2068656164657220636861696e000000000000000000000000006064820152608401610138565b5050505050505050565b60008060006121c28461228f565b9150508060011461223b5760405162461bcd60e51b815260206004820152602d60248201527f4f7574626f756e64207472616e73616374696f6e206d7573742068617665206160448201527f2073696e676c6520696e707574000000000000000000000000000000000000006064820152608401610138565b60006122478582612a0c565b905061225281612bf2565b935061228661226082612bff565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b92505050915091565b60008061229d836000612c0c565b91509150915091565b604080516080810182526000808252602082018190529181018290526060810182905290805b83602001518110156124285783516000906122e890889061263a565b85519091506000906122fc90899084611ba0565b9050600061230982612d8a565b90506000612327600880855161231f91906139e5565b859190611ba0565b9050866060015167ffffffffffffffff166000148015612363575060408801518151602083012014806123635750606088015181516020830120145b8015612379575060008267ffffffffffffffff16115b1561239f5763ffffffff8516604088015267ffffffffffffffff821660608801526123f9565b6000806123ae8d8c8587612e01565b9150915081896000018181516123c491906137fe565b67ffffffffffffffff169052506020890180518291906123e59083906137fe565b67ffffffffffffffff169052506001975050505b838860000181815161240b91906138d9565b9052508493506124209250839150613a689050565b9150506122cc565b508061249c5760405162461bcd60e51b815260206004820152603b60248201527f526564656d7074696f6e207472616e73616374696f6e206d7573742070726f6360448201527f657373206174206c65617374206f6e6520726564656d7074696f6e00000000006064820152608401610138565b50949350505050565b6001600160601b031981166000908152601d83016020526040902060018101546124d8576124d38383613190565b61256f565b60028101805463ffffffff42166c01000000000000000000000000027fffffffffffffff00ffffffffffffffff00000000ffffffffffffffffffffffff90911617780200000000000000000000000000000000000000000000000017905580546040516001600160601b0319841691907fbdc9ce990a067e5fd3a5d8dfc68e27e9f221aaa3fe55265e0b7e93c460b3efe290600090a35b601b83015460601b6001600160601b031990811690831614156125ac57601b8301805473ffffffffffffffffffffffffffffffffffffffff191690555b601b83018054600160a01b900463ffffffff169060146125cb83613abb565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050565b60008060006125fe8585613230565b90925090506000198214156126195760001992505050611c7c565b806126258360256138d9565b61262f91906138d9565b611e3c9060046138d9565b60006126478260096138d9565b835110156126585750600019611c7c565b60008061266f8561266a8660086138d9565b612c0c565b909250905060001982141561268a5760001992505050611c7c565b806126968360096138d9565b611e3c91906138d9565b6000602084516126b09190613adb565b156126bd57506000611284565b83516126cb57506000611284565b818560005b865181101561273b576126e4600284613adb565b60011415612709576127026126fc8883016020015190565b83613272565b9150612722565b61271f8261271a8984016020015190565b613272565b91505b60019290921c916127346020826138d9565b90506126d0565b5090931495945050505050565b600080612756836048611c6a565b60e81c9050600083604b8151811061277057612770613987565b016020015160f81c905060006127a483600060108262ffffff16901c8261ff001660108462ffffff16901b17179050919050565b62ffffff16905060006127b86003846139c2565b60ff1690506127c981610100613bd3565b6127d39083613a9c565b9695505050505050565b6000611c7c7bffff00000000000000000000000000000000000000000000000000008361327e565b6000605082516128159190613adb565b156128235750600019919050565b506040805160808101909152605081526000908190815b8451811015612a045761284e85838361328a565b801561286e5761285e828461331f565b61286e5750600119949350505050565b600061287983612748565b905061288483611dd5565b9350806129c88560008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b604082901c77ffffffffffffffff0000000000000000ffffffffffffffff16179050608081901b608082901c179050919050565b11156129db575060021995945050505050565b6129ee6129e7826127dd565b8690613348565b94506129fd90506050826138d9565b905061283a565b505050919050565b6060600080612a1a8561228f565b9092509050600019821415612a975760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e670000000000000000000000000000000000000000000000000000000000006064820152608401610138565b808410612ae65760405162461bcd60e51b815260206004820152601060248201527f56696e2072656164206f76657272756e000000000000000000000000000000006044820152606401610138565b600080612af48460016138d9565b905060005b86811015612b7d57612b0b88836125ef565b9250600019831415612b5f5760405162461bcd60e51b815260206004820152601760248201527f42616420566172496e7420696e207363726970745369670000000000000000006044820152606401610138565b612b6983836138d9565b915080612b7581613a68565b915050612af9565b50612b8887826125ef565b9150600019821415612bdc5760405162461bcd60e51b815260206004820152601760248201527f42616420566172496e7420696e207363726970745369670000000000000000006044820152606401610138565b612be7878284611ba0565b979650505050505050565b6020810151600090611c7c565b6000611c7c826020611c6a565b6000806000612c1b85856133a6565b905060ff8116612c4d576000858581518110612c3957612c39613987565b016020015190935060f81c9150612d839050565b83612c5982600161399d565b60ff16612c6691906138d9565b85511015612c7d5760001960009250925050612d83565b60008160ff1660021415612cc257612cb7612ca3612c9c8760016138d9565b8890611c6a565b62ffff0060e882901c1660f89190911c1790565b61ffff169050612d79565b8160ff1660041415612cec57612cdf612260612c9c8760016138d9565b63ffffffff169050612d79565b8160ff1660081415612d7957612d6c612d09612c9c8760016138d9565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600080612d9683613432565b60c01c905060006112848264ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b60008060008585604051602001612e19929190613bdf565b60408051808303601f190181529181528151602092830120600081815260128b01909352912060010154909150600160801b900463ffffffff1615612fd6576000818152601288016020526040812060018101548154919291612e909167ffffffffffffffff90811691600160a01b9004166137d5565b600183015490915067ffffffffffffffff80881691612ebd916801000000000000000090910416836137d5565b67ffffffffffffffff1611158015612ee957508067ffffffffffffffff168667ffffffffffffffff1611155b612f815760405162461bcd60e51b815260206004820152604660248201527f4f75747075742076616c7565206973206e6f742077697468696e20746865206160448201527f636365707461626c652072616e6765206f66207468652070656e64696e67207260648201527f6571756573740000000000000000000000000000000000000000000000000000608482015260a401610138565b600191820154600084815260128b016020526040902080546001600160e01b0319168155909201805473ffffffffffffffffffffffffffffffffffffffff19169055935067ffffffffffffffff169150613186565b600081815260138801602052604090206001810154600160801b900463ffffffff166130695760405162461bcd60e51b8152602060048201526024808201527f4f75747075742069732061206e6f6e2d72657175657374656420726564656d7060448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610138565b600181015481546000916130929167ffffffffffffffff91821691600160a01b909104166137d5565b600183015490915067ffffffffffffffff808816916130bf916801000000000000000090910416836137d5565b67ffffffffffffffff16111580156130eb57508067ffffffffffffffff168667ffffffffffffffff1611155b6131835760405162461bcd60e51b815260206004820152604860248201527f4f75747075742076616c7565206973206e6f742077697468696e20746865206160448201527f636365707461626c652072616e6765206f66207468652074696d6564206f757460648201527f2072657175657374000000000000000000000000000000000000000000000000608482015260a401610138565b50505b5094509492505050565b6001600160601b031981166000818152601d8401602052604080822060028101805463ffffffff4216600160801b027fffffffffffffff00ffffffff00000000ffffffffffffffffffffffffffffffff909116177803000000000000000000000000000000000000000000000000179055805491519093927f68cb496f5e64383745876664ef119840f154a729c03ba866b8aecb5c9f53d51691a3505050565b60008061323e8360256138d9565b84511015613253575060001990506000612d83565b6000806132658661266a8760246138d9565b9097909650945050505050565b6000611c79838361343e565b6000611c798284613c36565b8151600061329882846138d9565b905082811180156132aa575080855110155b6132f65760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e6473000000000000000000000000006044820152606401610138565b826020860101602085018382015b808310156121aa578251825260209283019290910190613304565b60008061332b8461346c565b905082811461333e576000915050611c7c565b5060019392505050565b600061335482846138d9565b905082811015611c7c5760405162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e000000000000006044820152606401610138565b60008282815181106133ba576133ba613987565b60209101015160f81c60ff14156133d357506008611c7c565b8282815181106133e5576133e5613987565b60209101015160f81c60fe14156133fe57506004611c7c565b82828151811061341057613410613987565b60209101015160f81c60fd141561342957506002611c7c565b50600092915050565b6000611c7c8282611c6a565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b6024810151600090611c7c565b80356001600160601b03198116811461349157600080fd5b919050565b6000606082840312156134a857600080fd5b50919050565b60008083601f8401126134c057600080fd5b50813567ffffffffffffffff8111156134d857600080fd5b602083019150836020828501011115612d8357600080fd5b803567ffffffffffffffff8116811461349157600080fd5b60008060008060008060e0878903121561352157600080fd5b8635955061353160208801613479565b94506135408860408901613496565b935060a087013567ffffffffffffffff81111561355c57600080fd5b61356889828a016134ae565b909450925061357b905060c088016134f0565b90509295509295509295565b600080600080600060e0868803121561359f57600080fd5b85359450602086013567ffffffffffffffff808211156135be57600080fd5b908701906080828a0312156135d257600080fd5b909450604087013590808211156135e857600080fd5b506135f588828901613496565b9350506136058760608801613496565b915061361360c08701613479565b90509295509295909350565b6000806000806000806080878903121561363857600080fd5b8635955061364860208801613479565b9450604087013567ffffffffffffffff8082111561366557600080fd5b818901915089601f83011261367957600080fd5b81358181111561368857600080fd5b8a60208260051b850101111561369d57600080fd5b6020830196508095505060608901359150808211156136bb57600080fd5b506136c889828a016134ae565b979a9699509497509295939492505050565b634e487b7160e01b600052602160045260246000fd5b803563ffffffff8116811461349157600080fd5b60006020828403121561371657600080fd5b611c79826136f0565b60006020828403121561373157600080fd5b611c79826134f0565b6001600160c01b031984168152818360088301376000910160080190815292915050565b6001600160601b031984168152818360148301376000910160140190815292915050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600067ffffffffffffffff808416806137c9576137c9613782565b92169190910492915050565b600067ffffffffffffffff838116908316818110156137f6576137f6613798565b039392505050565b600067ffffffffffffffff80831681851680830382111561382157613821613798565b01949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60808152600061386760808301878961382a565b67ffffffffffffffff9586166020840152938516604083015250921660609092019190915292915050565b6000808335601e198436030181126138a957600080fd5b83018035915067ffffffffffffffff8211156138c457600080fd5b602001915036819003821315612d8357600080fd5b600082198211156138ec576138ec613798565b500190565b600060a082016bffffffffffffffffffffffff89168352602088818501526001600160a01b038816604085015286606085015260a060808501528185835260c08501905086925060005b868110156139645763ffffffff613951856136f0565b168252928201929082019060010161393b565b509a9950505050505050505050565b60208152600061128460208301848661382a565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff038211156139ba576139ba613798565b019392505050565b600060ff821660ff8416808210156139dc576139dc613798565b90039392505050565b6000828210156139f7576139f7613798565b500390565b600060208284031215613a0e57600080fd5b81356001600160e01b03198116811461171357600080fd5b60006001600160e01b03198089168352868860048501378683016004810160008152868882375093169390920160048101939093525050600801949350505050565b6000600019821415613a7c57613a7c613798565b5060010190565b600060208284031215613a9557600080fd5b5051919050565b6000816000190483118215151615613ab657613ab6613798565b500290565b600063ffffffff821680613ad157613ad1613798565b6000190192915050565b600082613aea57613aea613782565b500690565b600181815b80851115613b2a578160001904821115613b1057613b10613798565b80851615613b1d57918102915b93841c9390800290613af4565b509250929050565b600082613b4157506001611c7c565b81613b4e57506000611c7c565b8160018114613b645760028114613b6e57613b8a565b6001915050611c7c565b60ff841115613b7f57613b7f613798565b50506001821b611c7c565b5060208310610133831016604e8410600b8410161715613bad575081810a611c7c565b613bb78383613aef565b8060001904821115613bcb57613bcb613798565b029392505050565b6000611c798383613b32565b6bffffffffffffffffffffffff19831681526000825160005b81811015613c155760208186018101516014868401015201613bf8565b81811115613c27576000601483860101525b50919091016014019392505050565b600082613c4557613c45613782565b50049056fea2646970667358221220a76fbc5baed8062c0acedf1219dba2a3d39bbc79d673ca498158681ba6a11b3564736f6c63430008090033",
89
- "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c80637333b36914610050578063a164de6e14610072578063a76558b314610092575b600080fd5b81801561005c57600080fd5b5061007061006b366004613508565b6100b2565b005b81801561007e57600080fd5b5061007061008d366004613587565b610869565b81801561009e57600080fd5b506100706100ad36600461361f565b610c03565b6001600160601b031985166000908152601d87016020526040902060016002820154600160c01b900460ff1660058111156100ef576100ef6136da565b146101415760405162461bcd60e51b815260206004820152601c60248201527f57616c6c6574206d75737420626520696e204c6976652073746174650000000060448201526064015b60405180910390fd5b60018101548061019d5760405162461bcd60e51b815260206004820152602160248201527f4e6f206d61696e205554584f20666f722074686520676976656e2077616c6c656044820152601d60fa1b6064820152608401610138565b8086356101b06040890160208a01613704565b6101c060608a0160408b0161371f565b6040516020016101fd9392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60405160208183030381529060405280519060200120146102605760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f2064617461000000000000000000006044820152606401610138565b6000610292600060c01b878760405160200161027e9392919061373a565b604051602081830303815290604052611184565b9050600081511161030b5760405162461bcd60e51b815260206004820152602e60248201527f52656465656d6572206f757470757420736372697074206d757374206265206160448201527f207374616e6461726420747970650000000000000000000000000000000000006064820152608401610138565b80805190602001208860405160200161033491906001600160601b031991909116815260140190565b6040516020818303038152906040528051906020012014156103be5760405162461bcd60e51b815260206004820152603760248201527f52656465656d6572206f757470757420736372697074206d757374206e6f742060448201527f706f696e7420746f207468652077616c6c657420504b480000000000000000006064820152608401610138565b600e89015467ffffffffffffffff90811690851610156104205760405162461bcd60e51b815260206004820152601b60248201527f526564656d7074696f6e20616d6f756e7420746f6f20736d616c6c00000000006044820152606401610138565b60008887876040516020016104379392919061375e565b60408051808303601f190181529181528151602092830120600081815260128e01909352912060010154909150600160801b900463ffffffff161561050a5760405162461bcd60e51b815260206004820152604a60248201527f546865726520697320612070656e64696e6720726564656d7074696f6e20726560448201527f71756573742066726f6d20746869732077616c6c657420746f2074686520736160648201527f6d65206164647265737300000000000000000000000000000000000000000000608482015260a401610138565b600e8a015460009068010000000000000000900467ffffffffffffffff16610533576000610558565b600e8b01546105589068010000000000000000900467ffffffffffffffff16876137ae565b600e8c0154909150600160801b900467ffffffffffffffff1661057b82886137d5565b60028701805460009061059990849067ffffffffffffffff166137fe565b82546101009290920a67ffffffffffffffff81810219909316918316021790915560028801541690506105d260608c0160408d0161371f565b67ffffffffffffffff16101561062a5760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742077616c6c65742066756e6473000000000000006044820152606401610138565b6040518060a00160405280336001600160a01b031681526020018867ffffffffffffffff1681526020018367ffffffffffffffff1681526020018267ffffffffffffffff1681526020014263ffffffff168152508c601201600085815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff160217905550905050336001600160a01b03168b6bffffffffffffffffffffffff19167f97a0199072f487232635d50ab75860891afe0b91c976ed2fc76502c4d82d0d958b8b8b87876040516107c8959493929190613853565b60405180910390a38b546040517f7c6db49c00000000000000000000000000000000000000000000000000000000815233600482015230602482015267ffffffffffffffff891660448201526001600160a01b0390911690637c6db49c90606401600060405180830381600087803b15801561084357600080fd5b505af1158015610857573d6000803e3d6000fd5b50505050505050505050505050505050565b600061087686868661142a565b90506108c7866108896020880188613892565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925087915061171a9050565b6001600160601b031982166000908152601d8701602052604090206002810154600160c01b900460ff166001816005811115610905576109056136da565b148061092257506002816005811115610920576109206136da565b145b6109945760405162461bcd60e51b815260206004820152602b60248201527f57616c6c6574206d75737420626520696e204c697665206f72204d6f76696e6760448201527f46756e64732073746174650000000000000000000000000000000000000000006064820152608401610138565b60006109e3896109a760408b018b613892565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611974915050565b606081015190915067ffffffffffffffff1615610a64578381604001518260600151604051602001610a429392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60408051601f1981840301815291905280516020909101206001840155610a6c565b600060018401555b8051600284018054600090610a8c90849067ffffffffffffffff166137d5565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846bffffffffffffffffffffffff19167fa45596c10f758d32ec8cca64a0fbfe776052b08fdb3f026e0a87f52118bf8fbe85604051610af391815260200190565b60405180910390a2885481516040517f392aee4300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526001600160a01b039091169063392aee4390602401600060405180830381600087803b158015610b6557600080fd5b505af1158015610b79573d6000803e3d6000fd5b50508a546004808d015460208601516040516356a6d9ef60e01b81526001600160a01b039283169381019390935267ffffffffffffffff16602483015290911692506356a6d9ef91506044015b600060405180830381600087803b158015610be057600080fd5b505af1158015610bf4573d6000803e3d6000fd5b50505050505050505050505050565b6000858383604051602001610c1a9392919061375e565b60408051808303601f190181528282528051602091820120600081815260128c01835283902060a08501845280546001600160a01b0381168652600160a01b900467ffffffffffffffff9081169386019390935260010154808316938501939093526801000000000000000083049091166060840152600160801b90910463ffffffff1660808301819052909250610cfe5760405162461bcd60e51b815260206004820152602160248201527f526564656d7074696f6e207265717565737420646f6573206e6f7420657869736044820152601d60fa1b6064820152608401610138565b4288600f0154826080015163ffffffff16610d1991906138d9565b10610d8b5760405162461bcd60e51b8152602060048201526024808201527f526564656d7074696f6e207265717565737420686173206e6f742074696d656460448201527f206f7574000000000000000000000000000000000000000000000000000000006064820152608401610138565b6001600160601b031987166000908152601d890160209081526040918290209183015190830151610dbc91906137d5565b600282018054600090610dda90849067ffffffffffffffff166137d5565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060016005811115610e1357610e136136da565b6002820154600160c01b900460ff166005811115610e3357610e336136da565b1480610e5d5750600280820154600160c01b900460ff166005811115610e5b57610e5b6136da565b145b80610e87575060056002820154600160c01b900460ff166005811115610e8557610e856136da565b145b610ef95760405162461bcd60e51b815260206004820152603b60248201527f5468652077616c6c6574206d75737420626520696e204c6976652c204d6f766960448201527f6e6746756e6473206f72205465726d696e6174656420737461746500000000006064820152608401610138565b600083815260138a016020908152604080832085518154878501516001600160a01b039092166001600160e01b031991821617600160a01b67ffffffffffffffff93841602178355878401516001938401805460608b015160808c01519386167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000009190951602939093177fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff16600160801b63ffffffff909216919091021790915560128e019093529220805490911681558101805473ffffffffffffffffffffffffffffffffffffffff191690556002820154600160c01b900460ff166005811115611018576110186136da565b14806110425750600280820154600160c01b900460ff166005811115611040576110406136da565b145b156110f3576110518989611aab565b600289015460108a015460118b015483546040517fd8dc404d0000000000000000000000000000000000000000000000000000000081526001600160a01b039094169363d8dc404d936110c0936bffffffffffffffffffffffff9091169290913391908e908e906004016138f1565b600060405180830381600087803b1580156110da57600080fd5b505af11580156110ee573d6000803e3d6000fd5b505050505b876bffffffffffffffffffffffff19167f013dddc8debc4730cd01232fdcea9ae6013689837732356c187fe5edb9a8a8d58686604051611134929190613973565b60405180910390a28854825160208401516040516356a6d9ef60e01b81526001600160a01b03928316600482015267ffffffffffffffff90911660248201529116906356a6d9ef90604401610bc6565b606060008260088151811061119b5761119b613987565b0160200151835160f89190911c91506111b582600961399d565b60ff16146111d3575050604080516020810190915260008152919050565b826009815181106111e6576111e6613987565b016020015160f81c61128c5760028160ff161015611214575050604080516020810190915260008152919050565b600083600a8151811061122957611229613987565b016020015160f81c905061123e6002836139c2565b60ff168114158061125c57508060201415801561125c575080601414155b1561127857505060408051602081019091526000815292915050565b61128484600b83611ba0565b949350505050565b6000611299846008611c6a565b90507f1976a900000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156113765783600b815181106112f8576112f8613987565b60209101015160f81c601414158061134d57506113236002855161131c91906139e5565b8590611c6a565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191661222b60f21b14155b1561136957505060408051602081019091526000815292915050565b61128484600c6014611ba0565b7f17a91400000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156114135783600185516113cf91906139e5565b815181106113df576113df613987565b60209101015160f81c60871461140657505060408051602081019091526000815292915050565b61128484600b6014611ba0565b505050604080516020810190915260008152919050565b600061147661143c6020850185613892565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c8292505050565b6114c25760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420696e70757420766563746f722070726f76696465640000006044820152606401610138565b61150c6114d26040850185613892565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d3292505050565b6115585760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206f757470757420766563746f722070726f766964656400006044820152606401610138565b6115bb61156860208501856139fc565b6115756020860186613892565b6115826040880188613892565b61159260808a0160608b016139fc565b6040516020016115a796959493929190613a26565b604051602081830303815290604052611dd5565b905061165661160a6115d06040850185613892565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611dfc92505050565b6116148480613892565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869493925050506020860135611e09565b6116c85760405162461bcd60e51b815260206004820152603c60248201527f5478206d65726b6c652070726f6f66206973206e6f742076616c696420666f7260448201527f2070726f76696465642068656164657220616e642074782068617368000000006064820152608401610138565b611713846116d96040850185613892565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4592505050565b9392505050565b6001600160601b031981166000908152601d85016020526040902060010154806117865760405162461bcd60e51b815260206004820152601d60248201527f4e6f206d61696e205554584f20666f7220676976656e2077616c6c65740000006044820152606401610138565b8083356117996040860160208701613704565b6117a9606087016040880161371f565b6040516020016117e69392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60405160208183030381529060405280519060200120146118495760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f2064617461000000000000000000006044820152606401610138565b600080611855866121b4565b9092509050843582148015611884575063ffffffff811661187c6040870160208801613704565b63ffffffff16145b6118f65760405162461bcd60e51b815260206004820152603f60248201527f4f7574626f756e64207472616e73616374696f6e20696e707574206d7573742060448201527f706f696e7420746f207468652077616c6c65742773206d61696e205554584f006064820152608401610138565b6001601988016000873561191060408a0160208b01613704565b60405160200161193792919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550505050505050565b604080516080810182526000808252602082018190529181018290526060810182905290806119a28561228f565b909250905060006119b48360016138d9565b6040517f1976a9140000000000000000000000000000000000000000000000000000000060208201526001600160601b03198716602482015261222b60f21b6038820152909150600090603a0160408051601f198184030181529082905280516020918201207f1600140000000000000000000000000000000000000000000000000000000000918301919091526001600160601b0319881660238301529150600090603701604051602081830303815290604052805190602001209050611a9e8989896040518060800160405280888152602001898152602001878152602001868152506122a6565b9998505050505050505050565b6001600160601b031981166000908152601d83016020526040902060020154600160c01b900460ff166001816005811115611ae857611ae86136da565b1480611b0557506002816005811115611b0357611b036136da565b145b611b775760405162461bcd60e51b815260206004820152603160248201527f45434453412077616c6c6574206d75737420626520696e204c697665206f722060448201527f4d6f76696e6746756e64732073746174650000000000000000000000000000006064820152608401610138565b6001816005811115611b8b57611b8b6136da565b1415611b9b57611b9b83836124a5565b505050565b606081611bbc5750604080516020810190915260008152611713565b6000611bc883856138d9565b90508381118015611bda575080855110155b611c265760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e6473000000000000000000000000006044820152606401610138565b604051915082604083010160405282825283850182038460208701018481015b80821015611c5f57815183830152602082019150611c46565b505050509392505050565b6000611c798383016020015190565b90505b92915050565b6000806000611c908461228f565b9092509050801580611ca3575060001982145b15611cb2575060009392505050565b6000611cbf8360016138d9565b905060005b82811015611d255785518210611ce05750600095945050505050565b6000611cec87846125ef565b9050600019811415611d05575060009695505050505050565b611d0f81846138d9565b9250508080611d1d90613a68565b915050611cc4565b5093519093149392505050565b6000806000611d408461228f565b9092509050801580611d53575060001982145b15611d62575060009392505050565b6000611d6f8360016138d9565b905060005b82811015611d255785518210611d905750600095945050505050565b6000611d9c878461263a565b9050600019811415611db5575060009695505050505050565b611dbf81846138d9565b9250508080611dcd90613a68565b915050611d74565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6044810151600090611c7c565b60008385148015611e18575081155b8015611e2357508251155b15611e3057506001611284565b611e3c858486856126a0565b95945050505050565b6001820154604080517f113764be00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691600091839163113764be91600480820192602092909190829003018186803b158015611eaa57600080fd5b505afa158015611ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee29190613a83565b90506000826001600160a01b0316632b97be246040518163ffffffff1660e01b815260040160206040518083038186803b158015611f1f57600080fd5b505afa158015611f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f579190613a83565b9050600080611f6d611f6887612748565b6127dd565b905083811415611f7f57839150611ffd565b82811415611f8f57829150611ffd565b60405162461bcd60e51b815260206004820152602560248201527f4e6f742061742063757272656e74206f722070726576696f757320646966666960448201527f63756c74790000000000000000000000000000000000000000000000000000006064820152608401610138565b600061200887612805565b90506000198114156120825760405162461bcd60e51b815260206004820152602360248201527f496e76616c6964206c656e677468206f6620746865206865616465727320636860448201527f61696e00000000000000000000000000000000000000000000000000000000006064820152608401610138565b6001198114156120d45760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206865616465727320636861696e00000000000000000000006044820152606401610138565b6002198114156121265760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420776f726b20696e2061206865616465720000006044820152606401610138565b60038801546121359084613a9c565b8110156121aa5760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420616363756d756c61746564206469666669637560448201527f6c747920696e2068656164657220636861696e000000000000000000000000006064820152608401610138565b5050505050505050565b60008060006121c28461228f565b9150508060011461223b5760405162461bcd60e51b815260206004820152602d60248201527f4f7574626f756e64207472616e73616374696f6e206d7573742068617665206160448201527f2073696e676c6520696e707574000000000000000000000000000000000000006064820152608401610138565b60006122478582612a0c565b905061225281612bf2565b935061228661226082612bff565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b92505050915091565b60008061229d836000612c0c565b91509150915091565b604080516080810182526000808252602082018190529181018290526060810182905290805b83602001518110156124285783516000906122e890889061263a565b85519091506000906122fc90899084611ba0565b9050600061230982612d8a565b90506000612327600880855161231f91906139e5565b859190611ba0565b9050866060015167ffffffffffffffff166000148015612363575060408801518151602083012014806123635750606088015181516020830120145b8015612379575060008267ffffffffffffffff16115b1561239f5763ffffffff8516604088015267ffffffffffffffff821660608801526123f9565b6000806123ae8d8c8587612e01565b9150915081896000018181516123c491906137fe565b67ffffffffffffffff169052506020890180518291906123e59083906137fe565b67ffffffffffffffff169052506001975050505b838860000181815161240b91906138d9565b9052508493506124209250839150613a689050565b9150506122cc565b508061249c5760405162461bcd60e51b815260206004820152603b60248201527f526564656d7074696f6e207472616e73616374696f6e206d7573742070726f6360448201527f657373206174206c65617374206f6e6520726564656d7074696f6e00000000006064820152608401610138565b50949350505050565b6001600160601b031981166000908152601d83016020526040902060018101546124d8576124d38383613190565b61256f565b60028101805463ffffffff42166c01000000000000000000000000027fffffffffffffff00ffffffffffffffff00000000ffffffffffffffffffffffff90911617780200000000000000000000000000000000000000000000000017905580546040516001600160601b0319841691907fbdc9ce990a067e5fd3a5d8dfc68e27e9f221aaa3fe55265e0b7e93c460b3efe290600090a35b601b83015460601b6001600160601b031990811690831614156125ac57601b8301805473ffffffffffffffffffffffffffffffffffffffff191690555b601b83018054600160a01b900463ffffffff169060146125cb83613abb565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050565b60008060006125fe8585613230565b90925090506000198214156126195760001992505050611c7c565b806126258360256138d9565b61262f91906138d9565b611e3c9060046138d9565b60006126478260096138d9565b835110156126585750600019611c7c565b60008061266f8561266a8660086138d9565b612c0c565b909250905060001982141561268a5760001992505050611c7c565b806126968360096138d9565b611e3c91906138d9565b6000602084516126b09190613adb565b156126bd57506000611284565b83516126cb57506000611284565b818560005b865181101561273b576126e4600284613adb565b60011415612709576127026126fc8883016020015190565b83613272565b9150612722565b61271f8261271a8984016020015190565b613272565b91505b60019290921c916127346020826138d9565b90506126d0565b5090931495945050505050565b600080612756836048611c6a565b60e81c9050600083604b8151811061277057612770613987565b016020015160f81c905060006127a483600060108262ffffff16901c8261ff001660108462ffffff16901b17179050919050565b62ffffff16905060006127b86003846139c2565b60ff1690506127c981610100613bd3565b6127d39083613a9c565b9695505050505050565b6000611c7c7bffff00000000000000000000000000000000000000000000000000008361327e565b6000605082516128159190613adb565b156128235750600019919050565b506040805160808101909152605081526000908190815b8451811015612a045761284e85838361328a565b801561286e5761285e828461331f565b61286e5750600119949350505050565b600061287983612748565b905061288483611dd5565b9350806129c88560008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b604082901c77ffffffffffffffff0000000000000000ffffffffffffffff16179050608081901b608082901c179050919050565b11156129db575060021995945050505050565b6129ee6129e7826127dd565b8690613348565b94506129fd90506050826138d9565b905061283a565b505050919050565b6060600080612a1a8561228f565b9092509050600019821415612a975760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e670000000000000000000000000000000000000000000000000000000000006064820152608401610138565b808410612ae65760405162461bcd60e51b815260206004820152601060248201527f56696e2072656164206f76657272756e000000000000000000000000000000006044820152606401610138565b600080612af48460016138d9565b905060005b86811015612b7d57612b0b88836125ef565b9250600019831415612b5f5760405162461bcd60e51b815260206004820152601760248201527f42616420566172496e7420696e207363726970745369670000000000000000006044820152606401610138565b612b6983836138d9565b915080612b7581613a68565b915050612af9565b50612b8887826125ef565b9150600019821415612bdc5760405162461bcd60e51b815260206004820152601760248201527f42616420566172496e7420696e207363726970745369670000000000000000006044820152606401610138565b612be7878284611ba0565b979650505050505050565b6020810151600090611c7c565b6000611c7c826020611c6a565b6000806000612c1b85856133a6565b905060ff8116612c4d576000858581518110612c3957612c39613987565b016020015190935060f81c9150612d839050565b83612c5982600161399d565b60ff16612c6691906138d9565b85511015612c7d5760001960009250925050612d83565b60008160ff1660021415612cc257612cb7612ca3612c9c8760016138d9565b8890611c6a565b62ffff0060e882901c1660f89190911c1790565b61ffff169050612d79565b8160ff1660041415612cec57612cdf612260612c9c8760016138d9565b63ffffffff169050612d79565b8160ff1660081415612d7957612d6c612d09612c9c8760016138d9565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600080612d9683613432565b60c01c905060006112848264ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b60008060008585604051602001612e19929190613bdf565b60408051808303601f190181529181528151602092830120600081815260128b01909352912060010154909150600160801b900463ffffffff1615612fd6576000818152601288016020526040812060018101548154919291612e909167ffffffffffffffff90811691600160a01b9004166137d5565b600183015490915067ffffffffffffffff80881691612ebd916801000000000000000090910416836137d5565b67ffffffffffffffff1611158015612ee957508067ffffffffffffffff168667ffffffffffffffff1611155b612f815760405162461bcd60e51b815260206004820152604660248201527f4f75747075742076616c7565206973206e6f742077697468696e20746865206160448201527f636365707461626c652072616e6765206f66207468652070656e64696e67207260648201527f6571756573740000000000000000000000000000000000000000000000000000608482015260a401610138565b600191820154600084815260128b016020526040902080546001600160e01b0319168155909201805473ffffffffffffffffffffffffffffffffffffffff19169055935067ffffffffffffffff169150613186565b600081815260138801602052604090206001810154600160801b900463ffffffff166130695760405162461bcd60e51b8152602060048201526024808201527f4f75747075742069732061206e6f6e2d72657175657374656420726564656d7060448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610138565b600181015481546000916130929167ffffffffffffffff91821691600160a01b909104166137d5565b600183015490915067ffffffffffffffff808816916130bf916801000000000000000090910416836137d5565b67ffffffffffffffff16111580156130eb57508067ffffffffffffffff168667ffffffffffffffff1611155b6131835760405162461bcd60e51b815260206004820152604860248201527f4f75747075742076616c7565206973206e6f742077697468696e20746865206160448201527f636365707461626c652072616e6765206f66207468652074696d6564206f757460648201527f2072657175657374000000000000000000000000000000000000000000000000608482015260a401610138565b50505b5094509492505050565b6001600160601b031981166000818152601d8401602052604080822060028101805463ffffffff4216600160801b027fffffffffffffff00ffffffff00000000ffffffffffffffffffffffffffffffff909116177803000000000000000000000000000000000000000000000000179055805491519093927f68cb496f5e64383745876664ef119840f154a729c03ba866b8aecb5c9f53d51691a3505050565b60008061323e8360256138d9565b84511015613253575060001990506000612d83565b6000806132658661266a8760246138d9565b9097909650945050505050565b6000611c79838361343e565b6000611c798284613c36565b8151600061329882846138d9565b905082811180156132aa575080855110155b6132f65760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e6473000000000000000000000000006044820152606401610138565b826020860101602085018382015b808310156121aa578251825260209283019290910190613304565b60008061332b8461346c565b905082811461333e576000915050611c7c565b5060019392505050565b600061335482846138d9565b905082811015611c7c5760405162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e000000000000006044820152606401610138565b60008282815181106133ba576133ba613987565b60209101015160f81c60ff14156133d357506008611c7c565b8282815181106133e5576133e5613987565b60209101015160f81c60fe14156133fe57506004611c7c565b82828151811061341057613410613987565b60209101015160f81c60fd141561342957506002611c7c565b50600092915050565b6000611c7c8282611c6a565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b6024810151600090611c7c565b80356001600160601b03198116811461349157600080fd5b919050565b6000606082840312156134a857600080fd5b50919050565b60008083601f8401126134c057600080fd5b50813567ffffffffffffffff8111156134d857600080fd5b602083019150836020828501011115612d8357600080fd5b803567ffffffffffffffff8116811461349157600080fd5b60008060008060008060e0878903121561352157600080fd5b8635955061353160208801613479565b94506135408860408901613496565b935060a087013567ffffffffffffffff81111561355c57600080fd5b61356889828a016134ae565b909450925061357b905060c088016134f0565b90509295509295509295565b600080600080600060e0868803121561359f57600080fd5b85359450602086013567ffffffffffffffff808211156135be57600080fd5b908701906080828a0312156135d257600080fd5b909450604087013590808211156135e857600080fd5b506135f588828901613496565b9350506136058760608801613496565b915061361360c08701613479565b90509295509295909350565b6000806000806000806080878903121561363857600080fd5b8635955061364860208801613479565b9450604087013567ffffffffffffffff8082111561366557600080fd5b818901915089601f83011261367957600080fd5b81358181111561368857600080fd5b8a60208260051b850101111561369d57600080fd5b6020830196508095505060608901359150808211156136bb57600080fd5b506136c889828a016134ae565b979a9699509497509295939492505050565b634e487b7160e01b600052602160045260246000fd5b803563ffffffff8116811461349157600080fd5b60006020828403121561371657600080fd5b611c79826136f0565b60006020828403121561373157600080fd5b611c79826134f0565b6001600160c01b031984168152818360088301376000910160080190815292915050565b6001600160601b031984168152818360148301376000910160140190815292915050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600067ffffffffffffffff808416806137c9576137c9613782565b92169190910492915050565b600067ffffffffffffffff838116908316818110156137f6576137f6613798565b039392505050565b600067ffffffffffffffff80831681851680830382111561382157613821613798565b01949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60808152600061386760808301878961382a565b67ffffffffffffffff9586166020840152938516604083015250921660609092019190915292915050565b6000808335601e198436030181126138a957600080fd5b83018035915067ffffffffffffffff8211156138c457600080fd5b602001915036819003821315612d8357600080fd5b600082198211156138ec576138ec613798565b500190565b600060a082016bffffffffffffffffffffffff89168352602088818501526001600160a01b038816604085015286606085015260a060808501528185835260c08501905086925060005b868110156139645763ffffffff613951856136f0565b168252928201929082019060010161393b565b509a9950505050505050505050565b60208152600061128460208301848661382a565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff038211156139ba576139ba613798565b019392505050565b600060ff821660ff8416808210156139dc576139dc613798565b90039392505050565b6000828210156139f7576139f7613798565b500390565b600060208284031215613a0e57600080fd5b81356001600160e01b03198116811461171357600080fd5b60006001600160e01b03198089168352868860048501378683016004810160008152868882375093169390920160048101939093525050600801949350505050565b6000600019821415613a7c57613a7c613798565b5060010190565b600060208284031215613a9557600080fd5b5051919050565b6000816000190483118215151615613ab657613ab6613798565b500290565b600063ffffffff821680613ad157613ad1613798565b6000190192915050565b600082613aea57613aea613782565b500690565b600181815b80851115613b2a578160001904821115613b1057613b10613798565b80851615613b1d57918102915b93841c9390800290613af4565b509250929050565b600082613b4157506001611c7c565b81613b4e57506000611c7c565b8160018114613b645760028114613b6e57613b8a565b6001915050611c7c565b60ff841115613b7f57613b7f613798565b50506001821b611c7c565b5060208310610133831016604e8410600b8410161715613bad575081810a611c7c565b613bb78383613aef565b8060001904821115613bcb57613bcb613798565b029392505050565b6000611c798383613b32565b6bffffffffffffffffffffffff19831681526000825160005b81811015613c155760208186018101516014868401015201613bf8565b81811115613c27576000601483860101525b50919091016014019392505050565b600082613c4557613c45613782565b50049056fea2646970667358221220a76fbc5baed8062c0acedf1219dba2a3d39bbc79d673ca498158681ba6a11b3564736f6c63430008090033",
88
+ "bytecode": "0x613f6f61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063a164de6e1461005b578063a76558b31461007d578063d25398081461009d578063f5ada442146100bd575b600080fd5b81801561006757600080fd5b5061007b610076366004613562565b6100dd565b005b81801561008957600080fd5b5061007b61009836600461363a565b610476565b8180156100a957600080fd5b5061007b6100b8366004613723565b6109f1565b8180156100c957600080fd5b5061007b6100d8366004613793565b610a55565b60006100ea868686610ab2565b905061013b866100fd6020880188613826565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150610da29050565b6001600160601b031982166000908152601d8701602052604090206002810154600160c01b900460ff1660018160058111156101795761017961386c565b1480610196575060028160058111156101945761019461386c565b145b61020d5760405162461bcd60e51b815260206004820152602b60248201527f57616c6c6574206d75737420626520696e204c697665206f72204d6f76696e6760448201527f46756e647320737461746500000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600061025c8961022060408b018b613826565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610ffc915050565b60608101519091506001600160401b0316156102dc5783816040015182606001516040516020016102ba9392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60408051601f19818403018152919052805160209091012060018401556102e4565b600060018401555b80516002840180546000906103039084906001600160401b0316613898565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550846bffffffffffffffffffffffff19167fa45596c10f758d32ec8cca64a0fbfe776052b08fdb3f026e0a87f52118bf8fbe8560405161036891815260200190565b60405180910390a2885481516040517f392aee430000000000000000000000000000000000000000000000000000000081526001600160401b0390911660048201526001600160a01b039091169063392aee4390602401600060405180830381600087803b1580156103d957600080fd5b505af11580156103ed573d6000803e3d6000fd5b50508a546004808d015460208601516040516356a6d9ef60e01b81526001600160a01b03928316938101939093526001600160401b0316602483015290911692506356a6d9ef91506044015b600060405180830381600087803b15801561045357600080fd5b505af1158015610467573d6000803e3d6000fd5b50505050505050505050505050565b600085838360405160200161048d939291906138c0565b60408051808303601f190181528282528051602091820120600081815260128c01835283902060a08501845280546001600160a01b0381168652600160a01b90046001600160401b039081169386019390935260010154808316938501939093526801000000000000000083049091166060840152600160801b90910463ffffffff16608083018190529092506105705760405162461bcd60e51b815260206004820152602160248201527f526564656d7074696f6e207265717565737420646f6573206e6f7420657869736044820152601d60fa1b6064820152608401610204565b4288600f0154826080015163ffffffff1661058b91906138e4565b106105fd5760405162461bcd60e51b8152602060048201526024808201527f526564656d7074696f6e207265717565737420686173206e6f742074696d656460448201527f206f7574000000000000000000000000000000000000000000000000000000006064820152608401610204565b6001600160601b031987166000908152601d89016020908152604091829020918301519083015161062e9190613898565b60028201805460009061064b9084906001600160401b0316613898565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550600160058111156106825761068261386c565b6002820154600160c01b900460ff1660058111156106a2576106a261386c565b14806106cc5750600280820154600160c01b900460ff1660058111156106ca576106ca61386c565b145b806106f6575060056002820154600160c01b900460ff1660058111156106f4576106f461386c565b145b6107685760405162461bcd60e51b815260206004820152603b60248201527f5468652077616c6c6574206d75737420626520696e204c6976652c204d6f766960448201527f6e6746756e6473206f72205465726d696e6174656420737461746500000000006064820152608401610204565b600083815260138a016020908152604080832085518154878501516001600160a01b039092166001600160e01b031991821617600160a01b6001600160401b0393841602178355878401516001938401805460608b015160808c01519386167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000009190951602939093177fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff16600160801b63ffffffff909216919091021790915560128e019093529220805490911681558101805473ffffffffffffffffffffffffffffffffffffffff191690556002820154600160c01b900460ff1660058111156108865761088661386c565b14806108b05750600280820154600160c01b900460ff1660058111156108ae576108ae61386c565b145b15610961576108bf8989611133565b600289015460108a015460118b015483546040517fd8dc404d0000000000000000000000000000000000000000000000000000000081526001600160a01b039094169363d8dc404d9361092e936bffffffffffffffffffffffff9091169290913391908e908e90600401613910565b600060405180830381600087803b15801561094857600080fd5b505af115801561095c573d6000803e3d6000fd5b505050505b876bffffffffffffffffffffffff19167f013dddc8debc4730cd01232fdcea9ae6013689837732356c187fe5edb9a8a8d586866040516109a2929190613992565b60405180910390a28854825160208401516040516356a6d9ef60e01b81526001600160a01b0392831660048201526001600160401b0390911660248201529116906356a6d9ef90604401610439565b60008080808080610a0487890189613a07565b955095509550955095509550610a488b8660405180606001604052808881526020018763ffffffff168152602001866001600160401b03168152508d8a868f611228565b5050505050505050505050565b610aa98787610a6936899003890189613ae8565b878888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611228915050565b50505050505050565b6000610afe610ac46020850185613826565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119c592505050565b610b4a5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420696e70757420766563746f722070726f76696465640000006044820152606401610204565b610b94610b5a6040850185613826565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7592505050565b610be05760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206f757470757420766563746f722070726f766964656400006044820152606401610204565b610c43610bf06020850185613b4c565b610bfd6020860186613826565b610c0a6040880188613826565b610c1a60808a0160608b01613b4c565b604051602001610c2f96959493929190613b76565b604051602081830303815290604052611b18565b9050610cde610c92610c586040850185613826565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b3f92505050565b610c9c8480613826565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869493925050506020860135611b4e565b610d505760405162461bcd60e51b815260206004820152603c60248201527f5478206d65726b6c652070726f6f66206973206e6f742076616c696420666f7260448201527f2070726f76696465642068656164657220616e642074782068617368000000006064820152608401610204565b610d9b84610d616040850185613826565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b9392505050565b6001600160601b031981166000908152601d8501602052604090206001015480610e0e5760405162461bcd60e51b815260206004820152601d60248201527f4e6f206d61696e205554584f20666f7220676976656e2077616c6c65740000006044820152606401610204565b808335610e216040860160208701613bb8565b610e316060870160408801613bd3565b604051602001610e6e9392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b6040516020818303038152906040528051906020012014610ed15760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f2064617461000000000000000000006044820152606401610204565b600080610edd86611efb565b9092509050843582148015610f0c575063ffffffff8116610f046040870160208801613bb8565b63ffffffff16145b610f7e5760405162461bcd60e51b815260206004820152603f60248201527f4f7574626f756e64207472616e73616374696f6e20696e707574206d7573742060448201527f706f696e7420746f207468652077616c6c65742773206d61696e205554584f006064820152608401610204565b60016019880160008735610f9860408a0160208b01613bb8565b604051602001610fbf92919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550505050505050565b6040805160808101825260008082526020820181905291810182905260608101829052908061102a85611fd6565b9092509050600061103c8360016138e4565b6040517f1976a9140000000000000000000000000000000000000000000000000000000060208201526001600160601b03198716602482015261222b60f21b6038820152909150600090603a0160408051601f198184030181529082905280516020918201207f1600140000000000000000000000000000000000000000000000000000000000918301919091526001600160601b0319881660238301529150600090603701604051602081830303815290604052805190602001209050611126898989604051806080016040528088815260200189815260200187815260200186815250611fed565b9998505050505050505050565b6001600160601b031981166000908152601d83016020526040902060020154600160c01b900460ff1660018160058111156111705761117061386c565b148061118d5750600281600581111561118b5761118b61386c565b145b6111ff5760405162461bcd60e51b815260206004820152603160248201527f45434453412077616c6c6574206d75737420626520696e204c697665206f722060448201527f4d6f76696e6746756e64732073746174650000000000000000000000000000006064820152608401610204565b60018160058111156112135761121361386c565b14156112235761122383836121e7565b505050565b6001600160601b031986166000908152601d88016020526040902060016002820154600160c01b900460ff1660058111156112655761126561386c565b146112b25760405162461bcd60e51b815260206004820152601c60248201527f57616c6c6574206d75737420626520696e204c697665207374617465000000006044820152606401610204565b60018101548061130e5760405162461bcd60e51b815260206004820152602160248201527f4e6f206d61696e205554584f20666f722074686520676976656e2077616c6c656044820152601d60fa1b6064820152608401610204565b8087600001518860200151896040015160405160200161135b9392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60405160208183030381529060405280519060200120146113be5760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f2064617461000000000000000000006044820152606401610204565b60006113ee600060c01b866040516020016113da929190613c1e565b604051602081830303815290604052612331565b905060008151116114675760405162461bcd60e51b815260206004820152602e60248201527f52656465656d6572206f757470757420736372697074206d757374206265206160448201527f207374616e6461726420747970650000000000000000000000000000000000006064820152608401610204565b80805190602001208960405160200161149091906001600160601b031991909116815260140190565b60405160208183030381529060405280519060200120141561151a5760405162461bcd60e51b815260206004820152603760248201527f52656465656d6572206f757470757420736372697074206d757374206e6f742060448201527f706f696e7420746f207468652077616c6c657420504b480000000000000000006064820152608401610204565b600e8a01546001600160401b03908116908516101561157b5760405162461bcd60e51b815260206004820152601b60248201527f526564656d7074696f6e20616d6f756e7420746f6f20736d616c6c00000000006044820152606401610204565b60008986604051602001611590929190613c4e565b60408051808303601f190181529181528151602092830120600081815260128f01909352912060010154909150600160801b900463ffffffff16156116635760405162461bcd60e51b815260206004820152604a60248201527f546865726520697320612070656e64696e6720726564656d7074696f6e20726560448201527f71756573742066726f6d20746869732077616c6c657420746f2074686520736160648201527f6d65206164647265737300000000000000000000000000000000000000000000608482015260a401610204565b600e8b01546000906801000000000000000090046001600160401b031661168b5760006116af565b600e8c01546116af906801000000000000000090046001600160401b031687613c99565b600e8d0154909150600160801b90046001600160401b03166116d18288613898565b6002870180546000906116ee9084906001600160401b0316613cbf565b92506101000a8154816001600160401b0302191690836001600160401b031602179055508560020160009054906101000a90046001600160401b03166001600160401b03168b604001516001600160401b0316101561178f5760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742077616c6c65742066756e6473000000000000006044820152606401610204565b6040518060a001604052808a6001600160a01b03168152602001886001600160401b03168152602001836001600160401b03168152602001826001600160401b031681526020014263ffffffff168152508d601201600085815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010160006101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160010160086101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff160217905550905050886001600160a01b03168c6bffffffffffffffffffffffff19167f97a0199072f487232635d50ab75860891afe0b91c976ed2fc76502c4d82d0d958a8a86866040516119229493929190613cea565b60405180910390a38c546040517f7c6db49c0000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301523060248301526001600160401b038a16604483015290911690637c6db49c90606401600060405180830381600087803b15801561199e57600080fd5b505af11580156119b2573d6000803e3d6000fd5b5050505050505050505050505050505050565b60008060006119d384611fd6565b90925090508015806119e6575060001982145b156119f5575060009392505050565b6000611a028360016138e4565b905060005b82811015611a685785518210611a235750600095945050505050565b6000611a2f87846125cf565b9050600019811415611a48575060009695505050505050565b611a5281846138e4565b9250508080611a6090613d39565b915050611a07565b5093519093149392505050565b6000806000611a8384611fd6565b9092509050801580611a96575060001982145b15611aa5575060009392505050565b6000611ab28360016138e4565b905060005b82811015611a685785518210611ad35750600095945050505050565b6000611adf8784612623565b9050600019811415611af8575060009695505050505050565b611b0281846138e4565b9250508080611b1090613d39565b915050611ab7565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b60448101516000905b92915050565b60008385148015611b5d575081155b8015611b6857508251155b15611b7557506001611b84565b611b8185848685612689565b90505b949350505050565b6001820154604080517f113764be00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691600091839163113764be91600480820192602092909190829003018186803b158015611bf157600080fd5b505afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c299190613d54565b90506000826001600160a01b0316632b97be246040518163ffffffff1660e01b815260040160206040518083038186803b158015611c6657600080fd5b505afa158015611c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9e9190613d54565b9050600080611cb4611caf87612731565b6127c6565b905083811415611cc657839150611d44565b82811415611cd657829150611d44565b60405162461bcd60e51b815260206004820152602560248201527f4e6f742061742063757272656e74206f722070726576696f757320646966666960448201527f63756c74790000000000000000000000000000000000000000000000000000006064820152608401610204565b6000611d4f876127ee565b9050600019811415611dc95760405162461bcd60e51b815260206004820152602360248201527f496e76616c6964206c656e677468206f6620746865206865616465727320636860448201527f61696e00000000000000000000000000000000000000000000000000000000006064820152608401610204565b600119811415611e1b5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206865616465727320636861696e00000000000000000000006044820152606401610204565b600219811415611e6d5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420776f726b20696e2061206865616465720000006044820152606401610204565b6003880154611e7c9084613d6d565b811015611ef15760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420616363756d756c61746564206469666669637560448201527f6c747920696e2068656164657220636861696e000000000000000000000000006064820152608401610204565b5050505050505050565b6000806000611f0984611fd6565b91505080600114611f825760405162461bcd60e51b815260206004820152602d60248201527f4f7574626f756e64207472616e73616374696f6e206d7573742068617665206160448201527f2073696e676c6520696e707574000000000000000000000000000000000000006064820152608401610204565b6000611f8e85826129f5565b9050611f9981612bdb565b9350611fcd611fa782612be8565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b92505050915091565b600080611fe4836000612bf5565b91509150915091565b604080516080810182526000808252602082018190529181018290526060810182905290805b836020015181101561216a57835160009061202f908890612623565b855190915060009061204390899084612d71565b9050600061205082612e3b565b9050600061206e60088085516120669190613d8c565b859190612d71565b905086606001516001600160401b031660001480156120a9575060408801518151602083012014806120a95750606088015181516020830120145b80156120be57506000826001600160401b0316115b156120e35763ffffffff851660408801526001600160401b038216606088015261213b565b6000806120f28d8c8587612eb1565b9150915081896000018181516121089190613cbf565b6001600160401b0316905250602089018051829190612128908390613cbf565b6001600160401b03169052506001975050505b838860000181815161214d91906138e4565b9052508493506121629250839150613d399050565b915050612013565b50806121de5760405162461bcd60e51b815260206004820152603b60248201527f526564656d7074696f6e207472616e73616374696f6e206d7573742070726f6360448201527f657373206174206c65617374206f6e6520726564656d7074696f6e00000000006064820152608401610204565b50949350505050565b6001600160601b031981166000908152601d830160205260409020600181015461221a576122158383613235565b6122b1565b60028101805463ffffffff42166c01000000000000000000000000027fffffffffffffff00ffffffffffffffff00000000ffffffffffffffffffffffff90911617780200000000000000000000000000000000000000000000000017905580546040516001600160601b0319841691907fbdc9ce990a067e5fd3a5d8dfc68e27e9f221aaa3fe55265e0b7e93c460b3efe290600090a35b601b83015460601b6001600160601b031990811690831614156122ee57601b8301805473ffffffffffffffffffffffffffffffffffffffff191690555b601b83018054600160a01b900463ffffffff1690601461230d83613da3565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050565b606060008260088151811061234857612348613dc3565b0160200151835160f89190911c9150612362826009613dd9565b60ff1614612380575050604080516020810190915260008152919050565b8260098151811061239357612393613dc3565b016020015160f81c6124315760028160ff1610156123c1575050604080516020810190915260008152919050565b600083600a815181106123d6576123d6613dc3565b016020015160f81c90506123eb600283613dfe565b60ff1681141580612409575080602014158015612409575080601414155b1561242557505060408051602081019091526000815292915050565b611b8484600b83612d71565b600061243e8460086132d5565b90507f1976a900000000000000000000000000000000000000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000008216141561251b5783600b8151811061249d5761249d613dc3565b60209101015160f81c60141415806124f257506124c8600285516124c19190613d8c565b85906132d5565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191661222b60f21b14155b1561250e57505060408051602081019091526000815292915050565b611b8484600c6014612d71565b7f17a91400000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156125b85783600185516125749190613d8c565b8151811061258457612584613dc3565b60209101015160f81c6087146125ab57505060408051602081019091526000815292915050565b611b8484600b6014612d71565b505050604080516020810190915260008152919050565b60008060006125de85856132e4565b90925090506000198214156125f95760001992505050611b48565b806126058360256138e4565b61260f91906138e4565b61261a9060046138e4565b95945050505050565b60006126308260096138e4565b835110156126415750600019611b48565b600080612658856126538660086138e4565b612bf5565b90925090506000198214156126735760001992505050611b48565b8061267f8360096138e4565b61261a91906138e4565b6000602084516126999190613e21565b156126a657506000611b84565b83516126b457506000611b84565b818560005b8651811015612724576126cd600284613e21565b600114156126f2576126eb6126e58883016020015190565b83613326565b915061270b565b612708826127038984016020015190565b613326565b91505b60019290921c9161271d6020826138e4565b90506126b9565b5090931495945050505050565b60008061273f8360486132d5565b60e81c9050600083604b8151811061275957612759613dc3565b016020015160f81c9050600061278d83600060108262ffffff16901c8261ff001660108462ffffff16901b17179050919050565b62ffffff16905060006127a1600384613dfe565b60ff1690506127b281610100613f19565b6127bc9083613d6d565b9695505050505050565b6000611b487bffff000000000000000000000000000000000000000000000000000083613332565b6000605082516127fe9190613e21565b1561280c5750600019919050565b506040805160808101909152605081526000908190815b84518110156129ed5761283785838361333e565b80156128575761284782846133d3565b6128575750600119949350505050565b600061286283612731565b905061286d83611b18565b9350806129b18560008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b604082901c77ffffffffffffffff0000000000000000ffffffffffffffff16179050608081901b608082901c179050919050565b11156129c4575060021995945050505050565b6129d76129d0826127c6565b86906133fc565b94506129e690506050826138e4565b9050612823565b505050919050565b6060600080612a0385611fd6565b9092509050600019821415612a805760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e670000000000000000000000000000000000000000000000000000000000006064820152608401610204565b808410612acf5760405162461bcd60e51b815260206004820152601060248201527f56696e2072656164206f76657272756e000000000000000000000000000000006044820152606401610204565b600080612add8460016138e4565b905060005b86811015612b6657612af488836125cf565b9250600019831415612b485760405162461bcd60e51b815260206004820152601760248201527f42616420566172496e7420696e207363726970745369670000000000000000006044820152606401610204565b612b5283836138e4565b915080612b5e81613d39565b915050612ae2565b50612b7187826125cf565b9150600019821415612bc55760405162461bcd60e51b815260206004820152601760248201527f42616420566172496e7420696e207363726970745369670000000000000000006044820152606401610204565b612bd0878284612d71565b979650505050505050565b6020810151600090611b48565b6000611b488260206132d5565b6000806000612c04858561345a565b905060ff8116612c36576000858581518110612c2257612c22613dc3565b016020015190935060f81c9150612d6a9050565b83612c42826001613dd9565b60ff16612c4f91906138e4565b85511015612c665760001960009250925050612d6a565b60008160ff1660021415612cab57612ca0612c8c612c858760016138e4565b88906132d5565b62ffff0060e882901c1660f89190911c1790565b61ffff169050612d60565b8160ff1660041415612cd557612cc8611fa7612c858760016138e4565b63ffffffff169050612d60565b8160ff1660081415612d6057612d54612cf2612c858760016138e4565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b606081612d8d5750604080516020810190915260008152610d9b565b6000612d9983856138e4565b90508381118015612dab575080855110155b612df75760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e6473000000000000000000000000006044820152606401610204565b604051915082604083010160405282825283850182038460208701018481015b80821015612e3057815183830152602082019150612e17565b505050509392505050565b600080612e47836134e6565b60c01c90506000611b848264ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b60008060008585604051602001612ec9929190613c4e565b60408051808303601f190181529181528151602092830120600081815260128b01909352912060010154909150600160801b900463ffffffff1615613080576000818152601288016020526040812060018101548154919291612f3f916001600160401b0390811691600160a01b900416613898565b60018301549091506001600160401b0380881691612f6b91680100000000000000009091041683613898565b6001600160401b031611158015612f945750806001600160401b0316866001600160401b031611155b61302c5760405162461bcd60e51b815260206004820152604660248201527f4f75747075742076616c7565206973206e6f742077697468696e20746865206160448201527f636365707461626c652072616e6765206f66207468652070656e64696e67207260648201527f6571756573740000000000000000000000000000000000000000000000000000608482015260a401610204565b600191820154600084815260128b016020526040902080546001600160e01b0319168155909201805473ffffffffffffffffffffffffffffffffffffffff1916905593506001600160401b0316915061322b565b600081815260138801602052604090206001810154600160801b900463ffffffff166131135760405162461bcd60e51b8152602060048201526024808201527f4f75747075742069732061206e6f6e2d72657175657374656420726564656d7060448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610204565b6001810154815460009161313b916001600160401b0391821691600160a01b90910416613898565b60018301549091506001600160401b038088169161316791680100000000000000009091041683613898565b6001600160401b0316111580156131905750806001600160401b0316866001600160401b031611155b6132285760405162461bcd60e51b815260206004820152604860248201527f4f75747075742076616c7565206973206e6f742077697468696e20746865206160448201527f636365707461626c652072616e6765206f66207468652074696d6564206f757460648201527f2072657175657374000000000000000000000000000000000000000000000000608482015260a401610204565b50505b5094509492505050565b6001600160601b031981166000818152601d8401602052604080822060028101805463ffffffff4216600160801b027fffffffffffffff00ffffffff00000000ffffffffffffffffffffffffffffffff909116177803000000000000000000000000000000000000000000000000179055805491519093927f68cb496f5e64383745876664ef119840f154a729c03ba866b8aecb5c9f53d51691a3505050565b6000610d9b8383016020015190565b6000806132f28360256138e4565b84511015613307575060001990506000612d6a565b600080613319866126538760246138e4565b9097909650945050505050565b6000610d9b83836134f2565b6000610d9b8284613f25565b8151600061334c82846138e4565b9050828111801561335e575080855110155b6133aa5760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e6473000000000000000000000000006044820152606401610204565b826020860101602085018382015b80831015611ef15782518252602092830192909101906133b8565b6000806133df84613520565b90508281146133f2576000915050611b48565b5060019392505050565b600061340882846138e4565b905082811015611b485760405162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e000000000000006044820152606401610204565b600082828151811061346e5761346e613dc3565b60209101015160f81c60ff141561348757506008611b48565b82828151811061349957613499613dc3565b60209101015160f81c60fe14156134b257506004611b48565b8282815181106134c4576134c4613dc3565b60209101015160f81c60fd14156134dd57506002611b48565b50600092915050565b6000611b4882826132d5565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b6024810151600090611b48565b60006060828403121561353f57600080fd5b50919050565b80356001600160601b03198116811461355d57600080fd5b919050565b600080600080600060e0868803121561357a57600080fd5b8535945060208601356001600160401b038082111561359857600080fd5b908701906080828a0312156135ac57600080fd5b909450604087013590808211156135c257600080fd5b506135cf8882890161352d565b9350506135df876060880161352d565b91506135ed60c08701613545565b90509295509295909350565b60008083601f84011261360b57600080fd5b5081356001600160401b0381111561362257600080fd5b602083019150836020828501011115612d6a57600080fd5b6000806000806000806080878903121561365357600080fd5b8635955061366360208801613545565b945060408701356001600160401b038082111561367f57600080fd5b818901915089601f83011261369357600080fd5b8135818111156136a257600080fd5b8a60208260051b85010111156136b757600080fd5b6020830196508095505060608901359150808211156136d557600080fd5b506136e289828a016135f9565b979a9699509497509295939492505050565b6001600160a01b038116811461370957600080fd5b50565b80356001600160401b038116811461355d57600080fd5b60008060008060006080868803121561373b57600080fd5b85359450602086013561374d816136f4565b935061375b6040870161370c565b925060608601356001600160401b0381111561377657600080fd5b613782888289016135f9565b969995985093965092949392505050565b6000806000806000806000610100888a0312156137af57600080fd5b873596506137bf60208901613545565b95506137ce8960408a0161352d565b945060a08801356137de816136f4565b935060c08801356001600160401b038111156137f957600080fd5b6138058a828b016135f9565b9094509250613818905060e0890161370c565b905092959891949750929550565b6000808335601e1984360301811261383d57600080fd5b8301803591506001600160401b0382111561385757600080fd5b602001915036819003821315612d6a57600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03838116908316818110156138b8576138b8613882565b039392505050565b6001600160601b031984168152818360148301376000910160140190815292915050565b600082198211156138f7576138f7613882565b500190565b803563ffffffff8116811461355d57600080fd5b600060a082016bffffffffffffffffffffffff89168352602088818501526001600160a01b038816604085015286606085015260a060808501528185835260c08501905086925060005b868110156139835763ffffffff613970856138fc565b168252928201929082019060010161395a565b509a9950505050505050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156139ff576139ff6139c1565b604052919050565b60008060008060008060c08789031215613a2057600080fd5b8635613a2b816136f4565b95506020613a3a888201613545565b955060408801359450613a4f606089016138fc565b9350613a5d6080890161370c565b925060a08801356001600160401b0380821115613a7957600080fd5b818a0191508a601f830112613a8d57600080fd5b813581811115613a9f57613a9f6139c1565b613ab1601f8201601f191685016139d7565b91508082528b84828501011115613ac757600080fd5b80848401858401376000848284010152508093505050509295509295509295565b600060608284031215613afa57600080fd5b604051606081018181106001600160401b0382111715613b1c57613b1c6139c1565b60405282358152613b2f602084016138fc565b6020820152613b406040840161370c565b60408201529392505050565b600060208284031215613b5e57600080fd5b81356001600160e01b031981168114610d9b57600080fd5b60006001600160e01b03198089168352868860048501378683016004810160008152868882375093169390920160048101939093525050600801949350505050565b600060208284031215613bca57600080fd5b610d9b826138fc565b600060208284031215613be557600080fd5b610d9b8261370c565b60005b83811015613c09578181015183820152602001613bf1565b83811115613c18576000848401525b50505050565b6001600160c01b03198316815260008251613c40816008850160208701613bee565b919091016008019392505050565b6bffffffffffffffffffffffff198316815260008251613c75816014850160208701613bee565b919091016014019392505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680613cb357613cb3613c83565b92169190910492915050565b60006001600160401b03808316818516808303821115613ce157613ce1613882565b01949350505050565b6080815260008551806080840152613d098160a0850160208a01613bee565b6001600160401b03958616602084015293851660408301525092166060830152601f01601f19160160a001919050565b6000600019821415613d4d57613d4d613882565b5060010190565b600060208284031215613d6657600080fd5b5051919050565b6000816000190483118215151615613d8757613d87613882565b500290565b600082821015613d9e57613d9e613882565b500390565b600063ffffffff821680613db957613db9613882565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115613df657613df6613882565b019392505050565b600060ff821660ff841680821015613e1857613e18613882565b90039392505050565b600082613e3057613e30613c83565b500690565b600181815b80851115613e70578160001904821115613e5657613e56613882565b80851615613e6357918102915b93841c9390800290613e3a565b509250929050565b600082613e8757506001611b48565b81613e9457506000611b48565b8160018114613eaa5760028114613eb457613ed0565b6001915050611b48565b60ff841115613ec557613ec5613882565b50506001821b611b48565b5060208310610133831016604e8410600b8410161715613ef3575081810a611b48565b613efd8383613e35565b8060001904821115613f1157613f11613882565b029392505050565b6000610d9b8383613e78565b600082613f3457613f34613c83565b50049056fea2646970667358221220785b72aaf2193fde4a48ec7dde70010a15cfbe3982c42059ff3f1269acf7935b64736f6c63430008090033",
89
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063a164de6e1461005b578063a76558b31461007d578063d25398081461009d578063f5ada442146100bd575b600080fd5b81801561006757600080fd5b5061007b610076366004613562565b6100dd565b005b81801561008957600080fd5b5061007b61009836600461363a565b610476565b8180156100a957600080fd5b5061007b6100b8366004613723565b6109f1565b8180156100c957600080fd5b5061007b6100d8366004613793565b610a55565b60006100ea868686610ab2565b905061013b866100fd6020880188613826565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150610da29050565b6001600160601b031982166000908152601d8701602052604090206002810154600160c01b900460ff1660018160058111156101795761017961386c565b1480610196575060028160058111156101945761019461386c565b145b61020d5760405162461bcd60e51b815260206004820152602b60248201527f57616c6c6574206d75737420626520696e204c697665206f72204d6f76696e6760448201527f46756e647320737461746500000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600061025c8961022060408b018b613826565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610ffc915050565b60608101519091506001600160401b0316156102dc5783816040015182606001516040516020016102ba9392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60408051601f19818403018152919052805160209091012060018401556102e4565b600060018401555b80516002840180546000906103039084906001600160401b0316613898565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550846bffffffffffffffffffffffff19167fa45596c10f758d32ec8cca64a0fbfe776052b08fdb3f026e0a87f52118bf8fbe8560405161036891815260200190565b60405180910390a2885481516040517f392aee430000000000000000000000000000000000000000000000000000000081526001600160401b0390911660048201526001600160a01b039091169063392aee4390602401600060405180830381600087803b1580156103d957600080fd5b505af11580156103ed573d6000803e3d6000fd5b50508a546004808d015460208601516040516356a6d9ef60e01b81526001600160a01b03928316938101939093526001600160401b0316602483015290911692506356a6d9ef91506044015b600060405180830381600087803b15801561045357600080fd5b505af1158015610467573d6000803e3d6000fd5b50505050505050505050505050565b600085838360405160200161048d939291906138c0565b60408051808303601f190181528282528051602091820120600081815260128c01835283902060a08501845280546001600160a01b0381168652600160a01b90046001600160401b039081169386019390935260010154808316938501939093526801000000000000000083049091166060840152600160801b90910463ffffffff16608083018190529092506105705760405162461bcd60e51b815260206004820152602160248201527f526564656d7074696f6e207265717565737420646f6573206e6f7420657869736044820152601d60fa1b6064820152608401610204565b4288600f0154826080015163ffffffff1661058b91906138e4565b106105fd5760405162461bcd60e51b8152602060048201526024808201527f526564656d7074696f6e207265717565737420686173206e6f742074696d656460448201527f206f7574000000000000000000000000000000000000000000000000000000006064820152608401610204565b6001600160601b031987166000908152601d89016020908152604091829020918301519083015161062e9190613898565b60028201805460009061064b9084906001600160401b0316613898565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550600160058111156106825761068261386c565b6002820154600160c01b900460ff1660058111156106a2576106a261386c565b14806106cc5750600280820154600160c01b900460ff1660058111156106ca576106ca61386c565b145b806106f6575060056002820154600160c01b900460ff1660058111156106f4576106f461386c565b145b6107685760405162461bcd60e51b815260206004820152603b60248201527f5468652077616c6c6574206d75737420626520696e204c6976652c204d6f766960448201527f6e6746756e6473206f72205465726d696e6174656420737461746500000000006064820152608401610204565b600083815260138a016020908152604080832085518154878501516001600160a01b039092166001600160e01b031991821617600160a01b6001600160401b0393841602178355878401516001938401805460608b015160808c01519386167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000009190951602939093177fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff16600160801b63ffffffff909216919091021790915560128e019093529220805490911681558101805473ffffffffffffffffffffffffffffffffffffffff191690556002820154600160c01b900460ff1660058111156108865761088661386c565b14806108b05750600280820154600160c01b900460ff1660058111156108ae576108ae61386c565b145b15610961576108bf8989611133565b600289015460108a015460118b015483546040517fd8dc404d0000000000000000000000000000000000000000000000000000000081526001600160a01b039094169363d8dc404d9361092e936bffffffffffffffffffffffff9091169290913391908e908e90600401613910565b600060405180830381600087803b15801561094857600080fd5b505af115801561095c573d6000803e3d6000fd5b505050505b876bffffffffffffffffffffffff19167f013dddc8debc4730cd01232fdcea9ae6013689837732356c187fe5edb9a8a8d586866040516109a2929190613992565b60405180910390a28854825160208401516040516356a6d9ef60e01b81526001600160a01b0392831660048201526001600160401b0390911660248201529116906356a6d9ef90604401610439565b60008080808080610a0487890189613a07565b955095509550955095509550610a488b8660405180606001604052808881526020018763ffffffff168152602001866001600160401b03168152508d8a868f611228565b5050505050505050505050565b610aa98787610a6936899003890189613ae8565b878888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611228915050565b50505050505050565b6000610afe610ac46020850185613826565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119c592505050565b610b4a5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420696e70757420766563746f722070726f76696465640000006044820152606401610204565b610b94610b5a6040850185613826565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7592505050565b610be05760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206f757470757420766563746f722070726f766964656400006044820152606401610204565b610c43610bf06020850185613b4c565b610bfd6020860186613826565b610c0a6040880188613826565b610c1a60808a0160608b01613b4c565b604051602001610c2f96959493929190613b76565b604051602081830303815290604052611b18565b9050610cde610c92610c586040850185613826565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b3f92505050565b610c9c8480613826565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869493925050506020860135611b4e565b610d505760405162461bcd60e51b815260206004820152603c60248201527f5478206d65726b6c652070726f6f66206973206e6f742076616c696420666f7260448201527f2070726f76696465642068656164657220616e642074782068617368000000006064820152608401610204565b610d9b84610d616040850185613826565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b9392505050565b6001600160601b031981166000908152601d8501602052604090206001015480610e0e5760405162461bcd60e51b815260206004820152601d60248201527f4e6f206d61696e205554584f20666f7220676976656e2077616c6c65740000006044820152606401610204565b808335610e216040860160208701613bb8565b610e316060870160408801613bd3565b604051602001610e6e9392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b6040516020818303038152906040528051906020012014610ed15760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f2064617461000000000000000000006044820152606401610204565b600080610edd86611efb565b9092509050843582148015610f0c575063ffffffff8116610f046040870160208801613bb8565b63ffffffff16145b610f7e5760405162461bcd60e51b815260206004820152603f60248201527f4f7574626f756e64207472616e73616374696f6e20696e707574206d7573742060448201527f706f696e7420746f207468652077616c6c65742773206d61696e205554584f006064820152608401610204565b60016019880160008735610f9860408a0160208b01613bb8565b604051602001610fbf92919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550505050505050565b6040805160808101825260008082526020820181905291810182905260608101829052908061102a85611fd6565b9092509050600061103c8360016138e4565b6040517f1976a9140000000000000000000000000000000000000000000000000000000060208201526001600160601b03198716602482015261222b60f21b6038820152909150600090603a0160408051601f198184030181529082905280516020918201207f1600140000000000000000000000000000000000000000000000000000000000918301919091526001600160601b0319881660238301529150600090603701604051602081830303815290604052805190602001209050611126898989604051806080016040528088815260200189815260200187815260200186815250611fed565b9998505050505050505050565b6001600160601b031981166000908152601d83016020526040902060020154600160c01b900460ff1660018160058111156111705761117061386c565b148061118d5750600281600581111561118b5761118b61386c565b145b6111ff5760405162461bcd60e51b815260206004820152603160248201527f45434453412077616c6c6574206d75737420626520696e204c697665206f722060448201527f4d6f76696e6746756e64732073746174650000000000000000000000000000006064820152608401610204565b60018160058111156112135761121361386c565b14156112235761122383836121e7565b505050565b6001600160601b031986166000908152601d88016020526040902060016002820154600160c01b900460ff1660058111156112655761126561386c565b146112b25760405162461bcd60e51b815260206004820152601c60248201527f57616c6c6574206d75737420626520696e204c697665207374617465000000006044820152606401610204565b60018101548061130e5760405162461bcd60e51b815260206004820152602160248201527f4e6f206d61696e205554584f20666f722074686520676976656e2077616c6c656044820152601d60fa1b6064820152608401610204565b8087600001518860200151896040015160405160200161135b9392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60405160208183030381529060405280519060200120146113be5760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f2064617461000000000000000000006044820152606401610204565b60006113ee600060c01b866040516020016113da929190613c1e565b604051602081830303815290604052612331565b905060008151116114675760405162461bcd60e51b815260206004820152602e60248201527f52656465656d6572206f757470757420736372697074206d757374206265206160448201527f207374616e6461726420747970650000000000000000000000000000000000006064820152608401610204565b80805190602001208960405160200161149091906001600160601b031991909116815260140190565b60405160208183030381529060405280519060200120141561151a5760405162461bcd60e51b815260206004820152603760248201527f52656465656d6572206f757470757420736372697074206d757374206e6f742060448201527f706f696e7420746f207468652077616c6c657420504b480000000000000000006064820152608401610204565b600e8a01546001600160401b03908116908516101561157b5760405162461bcd60e51b815260206004820152601b60248201527f526564656d7074696f6e20616d6f756e7420746f6f20736d616c6c00000000006044820152606401610204565b60008986604051602001611590929190613c4e565b60408051808303601f190181529181528151602092830120600081815260128f01909352912060010154909150600160801b900463ffffffff16156116635760405162461bcd60e51b815260206004820152604a60248201527f546865726520697320612070656e64696e6720726564656d7074696f6e20726560448201527f71756573742066726f6d20746869732077616c6c657420746f2074686520736160648201527f6d65206164647265737300000000000000000000000000000000000000000000608482015260a401610204565b600e8b01546000906801000000000000000090046001600160401b031661168b5760006116af565b600e8c01546116af906801000000000000000090046001600160401b031687613c99565b600e8d0154909150600160801b90046001600160401b03166116d18288613898565b6002870180546000906116ee9084906001600160401b0316613cbf565b92506101000a8154816001600160401b0302191690836001600160401b031602179055508560020160009054906101000a90046001600160401b03166001600160401b03168b604001516001600160401b0316101561178f5760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742077616c6c65742066756e6473000000000000006044820152606401610204565b6040518060a001604052808a6001600160a01b03168152602001886001600160401b03168152602001836001600160401b03168152602001826001600160401b031681526020014263ffffffff168152508d601201600085815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010160006101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160010160086101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff160217905550905050886001600160a01b03168c6bffffffffffffffffffffffff19167f97a0199072f487232635d50ab75860891afe0b91c976ed2fc76502c4d82d0d958a8a86866040516119229493929190613cea565b60405180910390a38c546040517f7c6db49c0000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301523060248301526001600160401b038a16604483015290911690637c6db49c90606401600060405180830381600087803b15801561199e57600080fd5b505af11580156119b2573d6000803e3d6000fd5b5050505050505050505050505050505050565b60008060006119d384611fd6565b90925090508015806119e6575060001982145b156119f5575060009392505050565b6000611a028360016138e4565b905060005b82811015611a685785518210611a235750600095945050505050565b6000611a2f87846125cf565b9050600019811415611a48575060009695505050505050565b611a5281846138e4565b9250508080611a6090613d39565b915050611a07565b5093519093149392505050565b6000806000611a8384611fd6565b9092509050801580611a96575060001982145b15611aa5575060009392505050565b6000611ab28360016138e4565b905060005b82811015611a685785518210611ad35750600095945050505050565b6000611adf8784612623565b9050600019811415611af8575060009695505050505050565b611b0281846138e4565b9250508080611b1090613d39565b915050611ab7565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b60448101516000905b92915050565b60008385148015611b5d575081155b8015611b6857508251155b15611b7557506001611b84565b611b8185848685612689565b90505b949350505050565b6001820154604080517f113764be00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691600091839163113764be91600480820192602092909190829003018186803b158015611bf157600080fd5b505afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c299190613d54565b90506000826001600160a01b0316632b97be246040518163ffffffff1660e01b815260040160206040518083038186803b158015611c6657600080fd5b505afa158015611c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9e9190613d54565b9050600080611cb4611caf87612731565b6127c6565b905083811415611cc657839150611d44565b82811415611cd657829150611d44565b60405162461bcd60e51b815260206004820152602560248201527f4e6f742061742063757272656e74206f722070726576696f757320646966666960448201527f63756c74790000000000000000000000000000000000000000000000000000006064820152608401610204565b6000611d4f876127ee565b9050600019811415611dc95760405162461bcd60e51b815260206004820152602360248201527f496e76616c6964206c656e677468206f6620746865206865616465727320636860448201527f61696e00000000000000000000000000000000000000000000000000000000006064820152608401610204565b600119811415611e1b5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206865616465727320636861696e00000000000000000000006044820152606401610204565b600219811415611e6d5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420776f726b20696e2061206865616465720000006044820152606401610204565b6003880154611e7c9084613d6d565b811015611ef15760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420616363756d756c61746564206469666669637560448201527f6c747920696e2068656164657220636861696e000000000000000000000000006064820152608401610204565b5050505050505050565b6000806000611f0984611fd6565b91505080600114611f825760405162461bcd60e51b815260206004820152602d60248201527f4f7574626f756e64207472616e73616374696f6e206d7573742068617665206160448201527f2073696e676c6520696e707574000000000000000000000000000000000000006064820152608401610204565b6000611f8e85826129f5565b9050611f9981612bdb565b9350611fcd611fa782612be8565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b92505050915091565b600080611fe4836000612bf5565b91509150915091565b604080516080810182526000808252602082018190529181018290526060810182905290805b836020015181101561216a57835160009061202f908890612623565b855190915060009061204390899084612d71565b9050600061205082612e3b565b9050600061206e60088085516120669190613d8c565b859190612d71565b905086606001516001600160401b031660001480156120a9575060408801518151602083012014806120a95750606088015181516020830120145b80156120be57506000826001600160401b0316115b156120e35763ffffffff851660408801526001600160401b038216606088015261213b565b6000806120f28d8c8587612eb1565b9150915081896000018181516121089190613cbf565b6001600160401b0316905250602089018051829190612128908390613cbf565b6001600160401b03169052506001975050505b838860000181815161214d91906138e4565b9052508493506121629250839150613d399050565b915050612013565b50806121de5760405162461bcd60e51b815260206004820152603b60248201527f526564656d7074696f6e207472616e73616374696f6e206d7573742070726f6360448201527f657373206174206c65617374206f6e6520726564656d7074696f6e00000000006064820152608401610204565b50949350505050565b6001600160601b031981166000908152601d830160205260409020600181015461221a576122158383613235565b6122b1565b60028101805463ffffffff42166c01000000000000000000000000027fffffffffffffff00ffffffffffffffff00000000ffffffffffffffffffffffff90911617780200000000000000000000000000000000000000000000000017905580546040516001600160601b0319841691907fbdc9ce990a067e5fd3a5d8dfc68e27e9f221aaa3fe55265e0b7e93c460b3efe290600090a35b601b83015460601b6001600160601b031990811690831614156122ee57601b8301805473ffffffffffffffffffffffffffffffffffffffff191690555b601b83018054600160a01b900463ffffffff1690601461230d83613da3565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050565b606060008260088151811061234857612348613dc3565b0160200151835160f89190911c9150612362826009613dd9565b60ff1614612380575050604080516020810190915260008152919050565b8260098151811061239357612393613dc3565b016020015160f81c6124315760028160ff1610156123c1575050604080516020810190915260008152919050565b600083600a815181106123d6576123d6613dc3565b016020015160f81c90506123eb600283613dfe565b60ff1681141580612409575080602014158015612409575080601414155b1561242557505060408051602081019091526000815292915050565b611b8484600b83612d71565b600061243e8460086132d5565b90507f1976a900000000000000000000000000000000000000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000008216141561251b5783600b8151811061249d5761249d613dc3565b60209101015160f81c60141415806124f257506124c8600285516124c19190613d8c565b85906132d5565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191661222b60f21b14155b1561250e57505060408051602081019091526000815292915050565b611b8484600c6014612d71565b7f17a91400000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156125b85783600185516125749190613d8c565b8151811061258457612584613dc3565b60209101015160f81c6087146125ab57505060408051602081019091526000815292915050565b611b8484600b6014612d71565b505050604080516020810190915260008152919050565b60008060006125de85856132e4565b90925090506000198214156125f95760001992505050611b48565b806126058360256138e4565b61260f91906138e4565b61261a9060046138e4565b95945050505050565b60006126308260096138e4565b835110156126415750600019611b48565b600080612658856126538660086138e4565b612bf5565b90925090506000198214156126735760001992505050611b48565b8061267f8360096138e4565b61261a91906138e4565b6000602084516126999190613e21565b156126a657506000611b84565b83516126b457506000611b84565b818560005b8651811015612724576126cd600284613e21565b600114156126f2576126eb6126e58883016020015190565b83613326565b915061270b565b612708826127038984016020015190565b613326565b91505b60019290921c9161271d6020826138e4565b90506126b9565b5090931495945050505050565b60008061273f8360486132d5565b60e81c9050600083604b8151811061275957612759613dc3565b016020015160f81c9050600061278d83600060108262ffffff16901c8261ff001660108462ffffff16901b17179050919050565b62ffffff16905060006127a1600384613dfe565b60ff1690506127b281610100613f19565b6127bc9083613d6d565b9695505050505050565b6000611b487bffff000000000000000000000000000000000000000000000000000083613332565b6000605082516127fe9190613e21565b1561280c5750600019919050565b506040805160808101909152605081526000908190815b84518110156129ed5761283785838361333e565b80156128575761284782846133d3565b6128575750600119949350505050565b600061286283612731565b905061286d83611b18565b9350806129b18560008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b604082901c77ffffffffffffffff0000000000000000ffffffffffffffff16179050608081901b608082901c179050919050565b11156129c4575060021995945050505050565b6129d76129d0826127c6565b86906133fc565b94506129e690506050826138e4565b9050612823565b505050919050565b6060600080612a0385611fd6565b9092509050600019821415612a805760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e670000000000000000000000000000000000000000000000000000000000006064820152608401610204565b808410612acf5760405162461bcd60e51b815260206004820152601060248201527f56696e2072656164206f76657272756e000000000000000000000000000000006044820152606401610204565b600080612add8460016138e4565b905060005b86811015612b6657612af488836125cf565b9250600019831415612b485760405162461bcd60e51b815260206004820152601760248201527f42616420566172496e7420696e207363726970745369670000000000000000006044820152606401610204565b612b5283836138e4565b915080612b5e81613d39565b915050612ae2565b50612b7187826125cf565b9150600019821415612bc55760405162461bcd60e51b815260206004820152601760248201527f42616420566172496e7420696e207363726970745369670000000000000000006044820152606401610204565b612bd0878284612d71565b979650505050505050565b6020810151600090611b48565b6000611b488260206132d5565b6000806000612c04858561345a565b905060ff8116612c36576000858581518110612c2257612c22613dc3565b016020015190935060f81c9150612d6a9050565b83612c42826001613dd9565b60ff16612c4f91906138e4565b85511015612c665760001960009250925050612d6a565b60008160ff1660021415612cab57612ca0612c8c612c858760016138e4565b88906132d5565b62ffff0060e882901c1660f89190911c1790565b61ffff169050612d60565b8160ff1660041415612cd557612cc8611fa7612c858760016138e4565b63ffffffff169050612d60565b8160ff1660081415612d6057612d54612cf2612c858760016138e4565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b6001600160401b031690505b60ff909116925090505b9250929050565b606081612d8d5750604080516020810190915260008152610d9b565b6000612d9983856138e4565b90508381118015612dab575080855110155b612df75760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e6473000000000000000000000000006044820152606401610204565b604051915082604083010160405282825283850182038460208701018481015b80821015612e3057815183830152602082019150612e17565b505050509392505050565b600080612e47836134e6565b60c01c90506000611b848264ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b6001600160401b031666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b60008060008585604051602001612ec9929190613c4e565b60408051808303601f190181529181528151602092830120600081815260128b01909352912060010154909150600160801b900463ffffffff1615613080576000818152601288016020526040812060018101548154919291612f3f916001600160401b0390811691600160a01b900416613898565b60018301549091506001600160401b0380881691612f6b91680100000000000000009091041683613898565b6001600160401b031611158015612f945750806001600160401b0316866001600160401b031611155b61302c5760405162461bcd60e51b815260206004820152604660248201527f4f75747075742076616c7565206973206e6f742077697468696e20746865206160448201527f636365707461626c652072616e6765206f66207468652070656e64696e67207260648201527f6571756573740000000000000000000000000000000000000000000000000000608482015260a401610204565b600191820154600084815260128b016020526040902080546001600160e01b0319168155909201805473ffffffffffffffffffffffffffffffffffffffff1916905593506001600160401b0316915061322b565b600081815260138801602052604090206001810154600160801b900463ffffffff166131135760405162461bcd60e51b8152602060048201526024808201527f4f75747075742069732061206e6f6e2d72657175657374656420726564656d7060448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610204565b6001810154815460009161313b916001600160401b0391821691600160a01b90910416613898565b60018301549091506001600160401b038088169161316791680100000000000000009091041683613898565b6001600160401b0316111580156131905750806001600160401b0316866001600160401b031611155b6132285760405162461bcd60e51b815260206004820152604860248201527f4f75747075742076616c7565206973206e6f742077697468696e20746865206160448201527f636365707461626c652072616e6765206f66207468652074696d6564206f757460648201527f2072657175657374000000000000000000000000000000000000000000000000608482015260a401610204565b50505b5094509492505050565b6001600160601b031981166000818152601d8401602052604080822060028101805463ffffffff4216600160801b027fffffffffffffff00ffffffff00000000ffffffffffffffffffffffffffffffff909116177803000000000000000000000000000000000000000000000000179055805491519093927f68cb496f5e64383745876664ef119840f154a729c03ba866b8aecb5c9f53d51691a3505050565b6000610d9b8383016020015190565b6000806132f28360256138e4565b84511015613307575060001990506000612d6a565b600080613319866126538760246138e4565b9097909650945050505050565b6000610d9b83836134f2565b6000610d9b8284613f25565b8151600061334c82846138e4565b9050828111801561335e575080855110155b6133aa5760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e6473000000000000000000000000006044820152606401610204565b826020860101602085018382015b80831015611ef15782518252602092830192909101906133b8565b6000806133df84613520565b90508281146133f2576000915050611b48565b5060019392505050565b600061340882846138e4565b905082811015611b485760405162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e000000000000006044820152606401610204565b600082828151811061346e5761346e613dc3565b60209101015160f81c60ff141561348757506008611b48565b82828151811061349957613499613dc3565b60209101015160f81c60fe14156134b257506004611b48565b8282815181106134c4576134c4613dc3565b60209101015160f81c60fd14156134dd57506002611b48565b50600092915050565b6000611b4882826132d5565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b6024810151600090611b48565b60006060828403121561353f57600080fd5b50919050565b80356001600160601b03198116811461355d57600080fd5b919050565b600080600080600060e0868803121561357a57600080fd5b8535945060208601356001600160401b038082111561359857600080fd5b908701906080828a0312156135ac57600080fd5b909450604087013590808211156135c257600080fd5b506135cf8882890161352d565b9350506135df876060880161352d565b91506135ed60c08701613545565b90509295509295909350565b60008083601f84011261360b57600080fd5b5081356001600160401b0381111561362257600080fd5b602083019150836020828501011115612d6a57600080fd5b6000806000806000806080878903121561365357600080fd5b8635955061366360208801613545565b945060408701356001600160401b038082111561367f57600080fd5b818901915089601f83011261369357600080fd5b8135818111156136a257600080fd5b8a60208260051b85010111156136b757600080fd5b6020830196508095505060608901359150808211156136d557600080fd5b506136e289828a016135f9565b979a9699509497509295939492505050565b6001600160a01b038116811461370957600080fd5b50565b80356001600160401b038116811461355d57600080fd5b60008060008060006080868803121561373b57600080fd5b85359450602086013561374d816136f4565b935061375b6040870161370c565b925060608601356001600160401b0381111561377657600080fd5b613782888289016135f9565b969995985093965092949392505050565b6000806000806000806000610100888a0312156137af57600080fd5b873596506137bf60208901613545565b95506137ce8960408a0161352d565b945060a08801356137de816136f4565b935060c08801356001600160401b038111156137f957600080fd5b6138058a828b016135f9565b9094509250613818905060e0890161370c565b905092959891949750929550565b6000808335601e1984360301811261383d57600080fd5b8301803591506001600160401b0382111561385757600080fd5b602001915036819003821315612d6a57600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03838116908316818110156138b8576138b8613882565b039392505050565b6001600160601b031984168152818360148301376000910160140190815292915050565b600082198211156138f7576138f7613882565b500190565b803563ffffffff8116811461355d57600080fd5b600060a082016bffffffffffffffffffffffff89168352602088818501526001600160a01b038816604085015286606085015260a060808501528185835260c08501905086925060005b868110156139835763ffffffff613970856138fc565b168252928201929082019060010161395a565b509a9950505050505050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156139ff576139ff6139c1565b604052919050565b60008060008060008060c08789031215613a2057600080fd5b8635613a2b816136f4565b95506020613a3a888201613545565b955060408801359450613a4f606089016138fc565b9350613a5d6080890161370c565b925060a08801356001600160401b0380821115613a7957600080fd5b818a0191508a601f830112613a8d57600080fd5b813581811115613a9f57613a9f6139c1565b613ab1601f8201601f191685016139d7565b91508082528b84828501011115613ac757600080fd5b80848401858401376000848284010152508093505050509295509295509295565b600060608284031215613afa57600080fd5b604051606081018181106001600160401b0382111715613b1c57613b1c6139c1565b60405282358152613b2f602084016138fc565b6020820152613b406040840161370c565b60408201529392505050565b600060208284031215613b5e57600080fd5b81356001600160e01b031981168114610d9b57600080fd5b60006001600160e01b03198089168352868860048501378683016004810160008152868882375093169390920160048101939093525050600801949350505050565b600060208284031215613bca57600080fd5b610d9b826138fc565b600060208284031215613be557600080fd5b610d9b8261370c565b60005b83811015613c09578181015183820152602001613bf1565b83811115613c18576000848401525b50505050565b6001600160c01b03198316815260008251613c40816008850160208701613bee565b919091016008019392505050565b6bffffffffffffffffffffffff198316815260008251613c75816014850160208701613bee565b919091016014019392505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680613cb357613cb3613c83565b92169190910492915050565b60006001600160401b03808316818516808303821115613ce157613ce1613882565b01949350505050565b6080815260008551806080840152613d098160a0850160208a01613bee565b6001600160401b03958616602084015293851660408301525092166060830152601f01601f19160160a001919050565b6000600019821415613d4d57613d4d613882565b5060010190565b600060208284031215613d6657600080fd5b5051919050565b6000816000190483118215151615613d8757613d87613882565b500290565b600082821015613d9e57613d9e613882565b500390565b600063ffffffff821680613db957613db9613882565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115613df657613df6613882565b019392505050565b600060ff821660ff841680821015613e1857613e18613882565b90039392505050565b600082613e3057613e30613c83565b500690565b600181815b80851115613e70578160001904821115613e5657613e56613882565b80851615613e6357918102915b93841c9390800290613e3a565b509250929050565b600082613e8757506001611b48565b81613e9457506000611b48565b8160018114613eaa5760028114613eb457613ed0565b6001915050611b48565b60ff841115613ec557613ec5613882565b50506001821b611b48565b5060208310610133831016604e8410600b8410161715613ef3575081810a611b48565b613efd8383613e35565b8060001904821115613f1157613f11613882565b029392505050565b6000610d9b8383613e78565b600082613f3457613f34613c83565b50049056fea2646970667358221220785b72aaf2193fde4a48ec7dde70010a15cfbe3982c42059ff3f1269acf7935b64736f6c63430008090033",
90
90
  "linkReferences": {},
91
91
  "deployedLinkReferences": {}
92
92
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2f661eb6688b9666498c8c4f7b944986.json"
3
+ "buildInfo": "../../../build-info/29ef0a6bb6e97f2d5d1c2fddde0fca46.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2f661eb6688b9666498c8c4f7b944986.json"
3
+ "buildInfo": "../../../build-info/29ef0a6bb6e97f2d5d1c2fddde0fca46.json"
4
4
  }
@@ -105,8 +105,8 @@
105
105
  "type": "event"
106
106
  }
107
107
  ],
108
- "bytecode": "0x610fd561003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80634afbe4c91461005b57806399b0b8471461007d578063c87de7f41461009d578063d079fbb1146100bd575b600080fd5b81801561006757600080fd5b5061007b610076366004610d79565b6100dd565b005b81801561008957600080fd5b5061007b610098366004610dc3565b610307565b8180156100a957600080fd5b5061007b6100b8366004610e14565b610540565b8180156100c957600080fd5b5061007b6100d8366004610e40565b610666565b60028401546001600160a01b0316331461014e5760405162461bcd60e51b815260206004820152602760248201527f43616c6c6572206973206e6f74207468652045434453412057616c6c657420526044820152666567697374727960c81b60648201526084015b60405180910390fd5b600061016261015d8484610965565b610a0f565b6bffffffffffffffffffffffff1981166000908152601d8701602052604081209192506002820154600160c01b900460ff1660058111156101a5576101a5610e6d565b146102185760405162461bcd60e51b815260206004820152602860248201527f45434453412077616c6c657420686173206265656e20616c726561647920726560448201527f67697374657265640000000000000000000000000000000000000000000000006064820152608401610145565b8481556002810180547fffffffffffffff00ffffffffffffffffffffffff00000000ffffffffffffffff16680100000000000000004263ffffffff9081169190910291909117600160c01b17909155601b8701805473ffffffffffffffffffffffffffffffffffffffff1916606085901c17808255600160a01b90049091169060146102a383610e99565b91906101000a81548163ffffffff021916908363ffffffff16021790555050816bffffffffffffffffffffffff1916857f2dbb47dce81d6b11cca1f1e3b10143d6f7e1e7e92d2dd9aacbb1f875379d308e60405160405180910390a3505050505050565b601b83015460601b6bffffffffffffffffffffffff1990811690831614156103975760405162461bcd60e51b815260206004820152602c60248201527f4163746976652077616c6c65742063616e6e6f7420626520636f6e736964657260448201527f656420636c6f736561626c6500000000000000000000000000000000000000006064820152608401610145565b6bffffffffffffffffffffffff1982166000908152601d84016020526040902060016002820154600160c01b900460ff1660058111156103d9576103d9610e6d565b146104315760405162461bcd60e51b815260206004820152602260248201527f45434453412077616c6c6574206d75737420626520696e204c69766520737461604482015261746560f01b6064820152608401610145565b601a840154600282015460009161047e9163ffffffff7c01000000000000000000000000000000000000000000000000000000009092048216916801000000000000000090910416610ebd565b63ffffffff16421015905080806104bd5750601a850154600160a01b900467ffffffffffffffff166104b1868686610a36565b67ffffffffffffffff16105b61052f5760405162461bcd60e51b815260206004820152603660248201527f57616c6c6574206e6565647320746f206265206f6c6420656e6f756768206f7260448201527f206861766520746f6f20666577207361746f73686973000000000000000000006064820152608401610145565b6105398585610b6e565b5050505050565b60028301546001600160a01b031633146105ac5760405162461bcd60e51b815260206004820152602760248201527f43616c6c6572206973206e6f74207468652045434453412057616c6c657420526044820152666567697374727960c81b6064820152608401610145565b60006105bb61015d8484610965565b905060016bffffffffffffffffffffffff1982166000908152601d86016020526040902060020154600160c01b900460ff1660058111156105fe576105fe610e6d565b146106565760405162461bcd60e51b815260206004820152602260248201527f45434453412077616c6c6574206d75737420626520696e204c69766520737461604482015261746560f01b6064820152608401610145565b6106608482610b6e565b50505050565b6002820154604080517fcc56238800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cc562388916004808301926020929190829003018186803b1580156106c657600080fd5b505afa1580156106da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fe9190610ee5565b600381111561070f5761070f610e6d565b146107825760405162461bcd60e51b815260206004820152602360248201527f57616c6c6574206372656174696f6e20616c726561647920696e2070726f677260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610145565b601b82015460601b6bffffffffffffffffffffffff198116156108cd5760006107ac848385610a36565b6bffffffffffffffffffffffff1983166000908152601d86016020526040812060020154601a87015492935063ffffffff680100000000000000009091048116926107f8911683610ebd565b63ffffffff16421015905080801561082a5750601a86015467ffffffffffffffff640100000000909104811690841610155b806108575750601a86015467ffffffffffffffff6c01000000000000000000000000909104811690841610155b6108c95760405162461bcd60e51b815260206004820152602660248201527f57616c6c6574206372656174696f6e20636f6e646974696f6e7320617265206e60448201527f6f74206d657400000000000000000000000000000000000000000000000000006064820152608401610145565b5050505b6040517f31fecb80caf1e1128496dd5a6f1083ba29fd5fe64c3fe04e2d1b6f9cfc27d5a390600090a18260020160009054906101000a90046001600160a01b03166001600160a01b03166372cc8c6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561094857600080fd5b505af115801561095c573d6000803e3d6000fd5b50505050505050565b60606000610974600284610f0d565b61099f57507f02000000000000000000000000000000000000000000000000000000000000006109c2565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff00000000000000000000000000000000000000000000000000000000000000821660208201526021810185905260410160405160208183030381529060405291505092915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b6bffffffffffffffffffffffff1982166000908152601d840160205260408120600101548015610b6657808335610a736040860160208701610f2f565b610a836060870160408801610f55565b604051602001610af09392919092835260e09190911b7fffffffff0000000000000000000000000000000000000000000000000000000016602083015260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166024820152602c0190565b6040516020818303038152906040528051906020012014610b535760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077616c6c6574206d61696e205554584f20646174610000006044820152606401610145565b610b636060840160408501610f55565b91505b509392505050565b6bffffffffffffffffffffffff1981166000908152601d8301602052604090206001810154610ba657610ba18383610cc7565b610c42565b60028101805463ffffffff42166c01000000000000000000000000027fffffffffffffff00ffffffffffffffff00000000ffffffffffffffffffffffff90911617780200000000000000000000000000000000000000000000000017905580546040516bffffffffffffffffffffffff19841691907fbdc9ce990a067e5fd3a5d8dfc68e27e9f221aaa3fe55265e0b7e93c460b3efe290600090a35b601b83015460601b6bffffffffffffffffffffffff199081169083161415610c8457601b8301805473ffffffffffffffffffffffffffffffffffffffff191690555b601b83018054600160a01b900463ffffffff16906014610ca383610f7f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050565b6bffffffffffffffffffffffff1981166000818152601d8401602052604080822060028101805463ffffffff4216700100000000000000000000000000000000027fffffffffffffff00ffffffff00000000ffffffffffffffffffffffffffffffff909116177803000000000000000000000000000000000000000000000000179055805491519093927f68cb496f5e64383745876664ef119840f154a729c03ba866b8aecb5c9f53d51691a3505050565b60008060008060808587031215610d8f57600080fd5b5050823594602084013594506040840135936060013592509050565b600060608284031215610dbd57600080fd5b50919050565b600080600060a08486031215610dd857600080fd5b8335925060208401356bffffffffffffffffffffffff1981168114610dfc57600080fd5b9150610e0b8560408601610dab565b90509250925092565b600080600060608486031215610e2957600080fd5b505081359360208301359350604090920135919050565b60008060808385031215610e5357600080fd5b82359150610e648460208501610dab565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681811415610eb357610eb3610e83565b6001019392505050565b600063ffffffff808316818516808303821115610edc57610edc610e83565b01949350505050565b600060208284031215610ef757600080fd5b815160048110610f0657600080fd5b9392505050565b600082610f2a57634e487b7160e01b600052601260045260246000fd5b500690565b600060208284031215610f4157600080fd5b813563ffffffff81168114610f0657600080fd5b600060208284031215610f6757600080fd5b813567ffffffffffffffff81168114610f0657600080fd5b600063ffffffff821680610f9557610f95610e83565b600019019291505056fea2646970667358221220032509c42dba3466f812053d38008d22d5bb4cec29e22aa766e2bcc3e784afae64736f6c63430008090033",
109
- "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80634afbe4c91461005b57806399b0b8471461007d578063c87de7f41461009d578063d079fbb1146100bd575b600080fd5b81801561006757600080fd5b5061007b610076366004610d79565b6100dd565b005b81801561008957600080fd5b5061007b610098366004610dc3565b610307565b8180156100a957600080fd5b5061007b6100b8366004610e14565b610540565b8180156100c957600080fd5b5061007b6100d8366004610e40565b610666565b60028401546001600160a01b0316331461014e5760405162461bcd60e51b815260206004820152602760248201527f43616c6c6572206973206e6f74207468652045434453412057616c6c657420526044820152666567697374727960c81b60648201526084015b60405180910390fd5b600061016261015d8484610965565b610a0f565b6bffffffffffffffffffffffff1981166000908152601d8701602052604081209192506002820154600160c01b900460ff1660058111156101a5576101a5610e6d565b146102185760405162461bcd60e51b815260206004820152602860248201527f45434453412077616c6c657420686173206265656e20616c726561647920726560448201527f67697374657265640000000000000000000000000000000000000000000000006064820152608401610145565b8481556002810180547fffffffffffffff00ffffffffffffffffffffffff00000000ffffffffffffffff16680100000000000000004263ffffffff9081169190910291909117600160c01b17909155601b8701805473ffffffffffffffffffffffffffffffffffffffff1916606085901c17808255600160a01b90049091169060146102a383610e99565b91906101000a81548163ffffffff021916908363ffffffff16021790555050816bffffffffffffffffffffffff1916857f2dbb47dce81d6b11cca1f1e3b10143d6f7e1e7e92d2dd9aacbb1f875379d308e60405160405180910390a3505050505050565b601b83015460601b6bffffffffffffffffffffffff1990811690831614156103975760405162461bcd60e51b815260206004820152602c60248201527f4163746976652077616c6c65742063616e6e6f7420626520636f6e736964657260448201527f656420636c6f736561626c6500000000000000000000000000000000000000006064820152608401610145565b6bffffffffffffffffffffffff1982166000908152601d84016020526040902060016002820154600160c01b900460ff1660058111156103d9576103d9610e6d565b146104315760405162461bcd60e51b815260206004820152602260248201527f45434453412077616c6c6574206d75737420626520696e204c69766520737461604482015261746560f01b6064820152608401610145565b601a840154600282015460009161047e9163ffffffff7c01000000000000000000000000000000000000000000000000000000009092048216916801000000000000000090910416610ebd565b63ffffffff16421015905080806104bd5750601a850154600160a01b900467ffffffffffffffff166104b1868686610a36565b67ffffffffffffffff16105b61052f5760405162461bcd60e51b815260206004820152603660248201527f57616c6c6574206e6565647320746f206265206f6c6420656e6f756768206f7260448201527f206861766520746f6f20666577207361746f73686973000000000000000000006064820152608401610145565b6105398585610b6e565b5050505050565b60028301546001600160a01b031633146105ac5760405162461bcd60e51b815260206004820152602760248201527f43616c6c6572206973206e6f74207468652045434453412057616c6c657420526044820152666567697374727960c81b6064820152608401610145565b60006105bb61015d8484610965565b905060016bffffffffffffffffffffffff1982166000908152601d86016020526040902060020154600160c01b900460ff1660058111156105fe576105fe610e6d565b146106565760405162461bcd60e51b815260206004820152602260248201527f45434453412077616c6c6574206d75737420626520696e204c69766520737461604482015261746560f01b6064820152608401610145565b6106608482610b6e565b50505050565b6002820154604080517fcc56238800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cc562388916004808301926020929190829003018186803b1580156106c657600080fd5b505afa1580156106da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fe9190610ee5565b600381111561070f5761070f610e6d565b146107825760405162461bcd60e51b815260206004820152602360248201527f57616c6c6574206372656174696f6e20616c726561647920696e2070726f677260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610145565b601b82015460601b6bffffffffffffffffffffffff198116156108cd5760006107ac848385610a36565b6bffffffffffffffffffffffff1983166000908152601d86016020526040812060020154601a87015492935063ffffffff680100000000000000009091048116926107f8911683610ebd565b63ffffffff16421015905080801561082a5750601a86015467ffffffffffffffff640100000000909104811690841610155b806108575750601a86015467ffffffffffffffff6c01000000000000000000000000909104811690841610155b6108c95760405162461bcd60e51b815260206004820152602660248201527f57616c6c6574206372656174696f6e20636f6e646974696f6e7320617265206e60448201527f6f74206d657400000000000000000000000000000000000000000000000000006064820152608401610145565b5050505b6040517f31fecb80caf1e1128496dd5a6f1083ba29fd5fe64c3fe04e2d1b6f9cfc27d5a390600090a18260020160009054906101000a90046001600160a01b03166001600160a01b03166372cc8c6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561094857600080fd5b505af115801561095c573d6000803e3d6000fd5b50505050505050565b60606000610974600284610f0d565b61099f57507f02000000000000000000000000000000000000000000000000000000000000006109c2565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff00000000000000000000000000000000000000000000000000000000000000821660208201526021810185905260410160405160208183030381529060405291505092915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b6bffffffffffffffffffffffff1982166000908152601d840160205260408120600101548015610b6657808335610a736040860160208701610f2f565b610a836060870160408801610f55565b604051602001610af09392919092835260e09190911b7fffffffff0000000000000000000000000000000000000000000000000000000016602083015260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166024820152602c0190565b6040516020818303038152906040528051906020012014610b535760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077616c6c6574206d61696e205554584f20646174610000006044820152606401610145565b610b636060840160408501610f55565b91505b509392505050565b6bffffffffffffffffffffffff1981166000908152601d8301602052604090206001810154610ba657610ba18383610cc7565b610c42565b60028101805463ffffffff42166c01000000000000000000000000027fffffffffffffff00ffffffffffffffff00000000ffffffffffffffffffffffff90911617780200000000000000000000000000000000000000000000000017905580546040516bffffffffffffffffffffffff19841691907fbdc9ce990a067e5fd3a5d8dfc68e27e9f221aaa3fe55265e0b7e93c460b3efe290600090a35b601b83015460601b6bffffffffffffffffffffffff199081169083161415610c8457601b8301805473ffffffffffffffffffffffffffffffffffffffff191690555b601b83018054600160a01b900463ffffffff16906014610ca383610f7f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050565b6bffffffffffffffffffffffff1981166000818152601d8401602052604080822060028101805463ffffffff4216700100000000000000000000000000000000027fffffffffffffff00ffffffff00000000ffffffffffffffffffffffffffffffff909116177803000000000000000000000000000000000000000000000000179055805491519093927f68cb496f5e64383745876664ef119840f154a729c03ba866b8aecb5c9f53d51691a3505050565b60008060008060808587031215610d8f57600080fd5b5050823594602084013594506040840135936060013592509050565b600060608284031215610dbd57600080fd5b50919050565b600080600060a08486031215610dd857600080fd5b8335925060208401356bffffffffffffffffffffffff1981168114610dfc57600080fd5b9150610e0b8560408601610dab565b90509250925092565b600080600060608486031215610e2957600080fd5b505081359360208301359350604090920135919050565b60008060808385031215610e5357600080fd5b82359150610e648460208501610dab565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681811415610eb357610eb3610e83565b6001019392505050565b600063ffffffff808316818516808303821115610edc57610edc610e83565b01949350505050565b600060208284031215610ef757600080fd5b815160048110610f0657600080fd5b9392505050565b600082610f2a57634e487b7160e01b600052601260045260246000fd5b500690565b600060208284031215610f4157600080fd5b813563ffffffff81168114610f0657600080fd5b600060208284031215610f6757600080fd5b813567ffffffffffffffff81168114610f0657600080fd5b600063ffffffff821680610f9557610f95610e83565b600019019291505056fea2646970667358221220032509c42dba3466f812053d38008d22d5bb4cec29e22aa766e2bcc3e784afae64736f6c63430008090033",
108
+ "bytecode": "0x610fd561003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80634afbe4c91461005b57806399b0b8471461007d578063c87de7f41461009d578063d079fbb1146100bd575b600080fd5b81801561006757600080fd5b5061007b610076366004610d79565b6100dd565b005b81801561008957600080fd5b5061007b610098366004610dc3565b610307565b8180156100a957600080fd5b5061007b6100b8366004610e14565b610540565b8180156100c957600080fd5b5061007b6100d8366004610e40565b610666565b60028401546001600160a01b0316331461014e5760405162461bcd60e51b815260206004820152602760248201527f43616c6c6572206973206e6f74207468652045434453412057616c6c657420526044820152666567697374727960c81b60648201526084015b60405180910390fd5b600061016261015d8484610965565b610a0f565b6bffffffffffffffffffffffff1981166000908152601d8701602052604081209192506002820154600160c01b900460ff1660058111156101a5576101a5610e6d565b146102185760405162461bcd60e51b815260206004820152602860248201527f45434453412077616c6c657420686173206265656e20616c726561647920726560448201527f67697374657265640000000000000000000000000000000000000000000000006064820152608401610145565b8481556002810180547fffffffffffffff00ffffffffffffffffffffffff00000000ffffffffffffffff16680100000000000000004263ffffffff9081169190910291909117600160c01b17909155601b8701805473ffffffffffffffffffffffffffffffffffffffff1916606085901c17808255600160a01b90049091169060146102a383610e99565b91906101000a81548163ffffffff021916908363ffffffff16021790555050816bffffffffffffffffffffffff1916857f2dbb47dce81d6b11cca1f1e3b10143d6f7e1e7e92d2dd9aacbb1f875379d308e60405160405180910390a3505050505050565b601b83015460601b6bffffffffffffffffffffffff1990811690831614156103975760405162461bcd60e51b815260206004820152602c60248201527f4163746976652077616c6c65742063616e6e6f7420626520636f6e736964657260448201527f656420636c6f736561626c6500000000000000000000000000000000000000006064820152608401610145565b6bffffffffffffffffffffffff1982166000908152601d84016020526040902060016002820154600160c01b900460ff1660058111156103d9576103d9610e6d565b146104315760405162461bcd60e51b815260206004820152602260248201527f45434453412077616c6c6574206d75737420626520696e204c69766520737461604482015261746560f01b6064820152608401610145565b601a840154600282015460009161047e9163ffffffff7c01000000000000000000000000000000000000000000000000000000009092048216916801000000000000000090910416610ebd565b63ffffffff16421015905080806104bd5750601a850154600160a01b900467ffffffffffffffff166104b1868686610a36565b67ffffffffffffffff16105b61052f5760405162461bcd60e51b815260206004820152603660248201527f57616c6c6574206e6565647320746f206265206f6c6420656e6f756768206f7260448201527f206861766520746f6f20666577207361746f73686973000000000000000000006064820152608401610145565b6105398585610b6e565b5050505050565b60028301546001600160a01b031633146105ac5760405162461bcd60e51b815260206004820152602760248201527f43616c6c6572206973206e6f74207468652045434453412057616c6c657420526044820152666567697374727960c81b6064820152608401610145565b60006105bb61015d8484610965565b905060016bffffffffffffffffffffffff1982166000908152601d86016020526040902060020154600160c01b900460ff1660058111156105fe576105fe610e6d565b146106565760405162461bcd60e51b815260206004820152602260248201527f45434453412077616c6c6574206d75737420626520696e204c69766520737461604482015261746560f01b6064820152608401610145565b6106608482610b6e565b50505050565b6002820154604080517fcc56238800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cc562388916004808301926020929190829003018186803b1580156106c657600080fd5b505afa1580156106da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fe9190610ee5565b600381111561070f5761070f610e6d565b146107825760405162461bcd60e51b815260206004820152602360248201527f57616c6c6574206372656174696f6e20616c726561647920696e2070726f677260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610145565b601b82015460601b6bffffffffffffffffffffffff198116156108cd5760006107ac848385610a36565b6bffffffffffffffffffffffff1983166000908152601d86016020526040812060020154601a87015492935063ffffffff680100000000000000009091048116926107f8911683610ebd565b63ffffffff16421015905080801561082a5750601a86015467ffffffffffffffff640100000000909104811690841610155b806108575750601a86015467ffffffffffffffff6c01000000000000000000000000909104811690841610155b6108c95760405162461bcd60e51b815260206004820152602660248201527f57616c6c6574206372656174696f6e20636f6e646974696f6e7320617265206e60448201527f6f74206d657400000000000000000000000000000000000000000000000000006064820152608401610145565b5050505b6040517f31fecb80caf1e1128496dd5a6f1083ba29fd5fe64c3fe04e2d1b6f9cfc27d5a390600090a18260020160009054906101000a90046001600160a01b03166001600160a01b03166372cc8c6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561094857600080fd5b505af115801561095c573d6000803e3d6000fd5b50505050505050565b60606000610974600284610f0d565b61099f57507f02000000000000000000000000000000000000000000000000000000000000006109c2565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff00000000000000000000000000000000000000000000000000000000000000821660208201526021810185905260410160405160208183030381529060405291505092915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b6bffffffffffffffffffffffff1982166000908152601d840160205260408120600101548015610b6657808335610a736040860160208701610f2f565b610a836060870160408801610f55565b604051602001610af09392919092835260e09190911b7fffffffff0000000000000000000000000000000000000000000000000000000016602083015260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166024820152602c0190565b6040516020818303038152906040528051906020012014610b535760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077616c6c6574206d61696e205554584f20646174610000006044820152606401610145565b610b636060840160408501610f55565b91505b509392505050565b6bffffffffffffffffffffffff1981166000908152601d8301602052604090206001810154610ba657610ba18383610cc7565b610c42565b60028101805463ffffffff42166c01000000000000000000000000027fffffffffffffff00ffffffffffffffff00000000ffffffffffffffffffffffff90911617780200000000000000000000000000000000000000000000000017905580546040516bffffffffffffffffffffffff19841691907fbdc9ce990a067e5fd3a5d8dfc68e27e9f221aaa3fe55265e0b7e93c460b3efe290600090a35b601b83015460601b6bffffffffffffffffffffffff199081169083161415610c8457601b8301805473ffffffffffffffffffffffffffffffffffffffff191690555b601b83018054600160a01b900463ffffffff16906014610ca383610f7f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050565b6bffffffffffffffffffffffff1981166000818152601d8401602052604080822060028101805463ffffffff4216700100000000000000000000000000000000027fffffffffffffff00ffffffff00000000ffffffffffffffffffffffffffffffff909116177803000000000000000000000000000000000000000000000000179055805491519093927f68cb496f5e64383745876664ef119840f154a729c03ba866b8aecb5c9f53d51691a3505050565b60008060008060808587031215610d8f57600080fd5b5050823594602084013594506040840135936060013592509050565b600060608284031215610dbd57600080fd5b50919050565b600080600060a08486031215610dd857600080fd5b8335925060208401356bffffffffffffffffffffffff1981168114610dfc57600080fd5b9150610e0b8560408601610dab565b90509250925092565b600080600060608486031215610e2957600080fd5b505081359360208301359350604090920135919050565b60008060808385031215610e5357600080fd5b82359150610e648460208501610dab565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681811415610eb357610eb3610e83565b6001019392505050565b600063ffffffff808316818516808303821115610edc57610edc610e83565b01949350505050565b600060208284031215610ef757600080fd5b815160048110610f0657600080fd5b9392505050565b600082610f2a57634e487b7160e01b600052601260045260246000fd5b500690565b600060208284031215610f4157600080fd5b813563ffffffff81168114610f0657600080fd5b600060208284031215610f6757600080fd5b813567ffffffffffffffff81168114610f0657600080fd5b600063ffffffff821680610f9557610f95610e83565b600019019291505056fea264697066735822122058a385bb36f684a149e5ec65e7c60f253fd4d155082aab25f735dcb185517f3764736f6c63430008090033",
109
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80634afbe4c91461005b57806399b0b8471461007d578063c87de7f41461009d578063d079fbb1146100bd575b600080fd5b81801561006757600080fd5b5061007b610076366004610d79565b6100dd565b005b81801561008957600080fd5b5061007b610098366004610dc3565b610307565b8180156100a957600080fd5b5061007b6100b8366004610e14565b610540565b8180156100c957600080fd5b5061007b6100d8366004610e40565b610666565b60028401546001600160a01b0316331461014e5760405162461bcd60e51b815260206004820152602760248201527f43616c6c6572206973206e6f74207468652045434453412057616c6c657420526044820152666567697374727960c81b60648201526084015b60405180910390fd5b600061016261015d8484610965565b610a0f565b6bffffffffffffffffffffffff1981166000908152601d8701602052604081209192506002820154600160c01b900460ff1660058111156101a5576101a5610e6d565b146102185760405162461bcd60e51b815260206004820152602860248201527f45434453412077616c6c657420686173206265656e20616c726561647920726560448201527f67697374657265640000000000000000000000000000000000000000000000006064820152608401610145565b8481556002810180547fffffffffffffff00ffffffffffffffffffffffff00000000ffffffffffffffff16680100000000000000004263ffffffff9081169190910291909117600160c01b17909155601b8701805473ffffffffffffffffffffffffffffffffffffffff1916606085901c17808255600160a01b90049091169060146102a383610e99565b91906101000a81548163ffffffff021916908363ffffffff16021790555050816bffffffffffffffffffffffff1916857f2dbb47dce81d6b11cca1f1e3b10143d6f7e1e7e92d2dd9aacbb1f875379d308e60405160405180910390a3505050505050565b601b83015460601b6bffffffffffffffffffffffff1990811690831614156103975760405162461bcd60e51b815260206004820152602c60248201527f4163746976652077616c6c65742063616e6e6f7420626520636f6e736964657260448201527f656420636c6f736561626c6500000000000000000000000000000000000000006064820152608401610145565b6bffffffffffffffffffffffff1982166000908152601d84016020526040902060016002820154600160c01b900460ff1660058111156103d9576103d9610e6d565b146104315760405162461bcd60e51b815260206004820152602260248201527f45434453412077616c6c6574206d75737420626520696e204c69766520737461604482015261746560f01b6064820152608401610145565b601a840154600282015460009161047e9163ffffffff7c01000000000000000000000000000000000000000000000000000000009092048216916801000000000000000090910416610ebd565b63ffffffff16421015905080806104bd5750601a850154600160a01b900467ffffffffffffffff166104b1868686610a36565b67ffffffffffffffff16105b61052f5760405162461bcd60e51b815260206004820152603660248201527f57616c6c6574206e6565647320746f206265206f6c6420656e6f756768206f7260448201527f206861766520746f6f20666577207361746f73686973000000000000000000006064820152608401610145565b6105398585610b6e565b5050505050565b60028301546001600160a01b031633146105ac5760405162461bcd60e51b815260206004820152602760248201527f43616c6c6572206973206e6f74207468652045434453412057616c6c657420526044820152666567697374727960c81b6064820152608401610145565b60006105bb61015d8484610965565b905060016bffffffffffffffffffffffff1982166000908152601d86016020526040902060020154600160c01b900460ff1660058111156105fe576105fe610e6d565b146106565760405162461bcd60e51b815260206004820152602260248201527f45434453412077616c6c6574206d75737420626520696e204c69766520737461604482015261746560f01b6064820152608401610145565b6106608482610b6e565b50505050565b6002820154604080517fcc56238800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cc562388916004808301926020929190829003018186803b1580156106c657600080fd5b505afa1580156106da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fe9190610ee5565b600381111561070f5761070f610e6d565b146107825760405162461bcd60e51b815260206004820152602360248201527f57616c6c6574206372656174696f6e20616c726561647920696e2070726f677260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610145565b601b82015460601b6bffffffffffffffffffffffff198116156108cd5760006107ac848385610a36565b6bffffffffffffffffffffffff1983166000908152601d86016020526040812060020154601a87015492935063ffffffff680100000000000000009091048116926107f8911683610ebd565b63ffffffff16421015905080801561082a5750601a86015467ffffffffffffffff640100000000909104811690841610155b806108575750601a86015467ffffffffffffffff6c01000000000000000000000000909104811690841610155b6108c95760405162461bcd60e51b815260206004820152602660248201527f57616c6c6574206372656174696f6e20636f6e646974696f6e7320617265206e60448201527f6f74206d657400000000000000000000000000000000000000000000000000006064820152608401610145565b5050505b6040517f31fecb80caf1e1128496dd5a6f1083ba29fd5fe64c3fe04e2d1b6f9cfc27d5a390600090a18260020160009054906101000a90046001600160a01b03166001600160a01b03166372cc8c6d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561094857600080fd5b505af115801561095c573d6000803e3d6000fd5b50505050505050565b60606000610974600284610f0d565b61099f57507f02000000000000000000000000000000000000000000000000000000000000006109c2565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff00000000000000000000000000000000000000000000000000000000000000821660208201526021810185905260410160405160208183030381529060405291505092915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b6bffffffffffffffffffffffff1982166000908152601d840160205260408120600101548015610b6657808335610a736040860160208701610f2f565b610a836060870160408801610f55565b604051602001610af09392919092835260e09190911b7fffffffff0000000000000000000000000000000000000000000000000000000016602083015260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166024820152602c0190565b6040516020818303038152906040528051906020012014610b535760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642077616c6c6574206d61696e205554584f20646174610000006044820152606401610145565b610b636060840160408501610f55565b91505b509392505050565b6bffffffffffffffffffffffff1981166000908152601d8301602052604090206001810154610ba657610ba18383610cc7565b610c42565b60028101805463ffffffff42166c01000000000000000000000000027fffffffffffffff00ffffffffffffffff00000000ffffffffffffffffffffffff90911617780200000000000000000000000000000000000000000000000017905580546040516bffffffffffffffffffffffff19841691907fbdc9ce990a067e5fd3a5d8dfc68e27e9f221aaa3fe55265e0b7e93c460b3efe290600090a35b601b83015460601b6bffffffffffffffffffffffff199081169083161415610c8457601b8301805473ffffffffffffffffffffffffffffffffffffffff191690555b601b83018054600160a01b900463ffffffff16906014610ca383610f7f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050565b6bffffffffffffffffffffffff1981166000818152601d8401602052604080822060028101805463ffffffff4216700100000000000000000000000000000000027fffffffffffffff00ffffffff00000000ffffffffffffffffffffffffffffffff909116177803000000000000000000000000000000000000000000000000179055805491519093927f68cb496f5e64383745876664ef119840f154a729c03ba866b8aecb5c9f53d51691a3505050565b60008060008060808587031215610d8f57600080fd5b5050823594602084013594506040840135936060013592509050565b600060608284031215610dbd57600080fd5b50919050565b600080600060a08486031215610dd857600080fd5b8335925060208401356bffffffffffffffffffffffff1981168114610dfc57600080fd5b9150610e0b8560408601610dab565b90509250925092565b600080600060608486031215610e2957600080fd5b505081359360208301359350604090920135919050565b60008060808385031215610e5357600080fd5b82359150610e648460208501610dab565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681811415610eb357610eb3610e83565b6001019392505050565b600063ffffffff808316818516808303821115610edc57610edc610e83565b01949350505050565b600060208284031215610ef757600080fd5b815160048110610f0657600080fd5b9392505050565b600082610f2a57634e487b7160e01b600052601260045260246000fd5b500690565b600060208284031215610f4157600080fd5b813563ffffffff81168114610f0657600080fd5b600060208284031215610f6757600080fd5b813567ffffffffffffffff81168114610f0657600080fd5b600063ffffffff821680610f9557610f95610e83565b600019019291505056fea264697066735822122058a385bb36f684a149e5ec65e7c60f253fd4d155082aab25f735dcb185517f3764736f6c63430008090033",
110
110
  "linkReferences": {},
111
111
  "deployedLinkReferences": {}
112
112
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2f661eb6688b9666498c8c4f7b944986.json"
3
+ "buildInfo": "../../../build-info/29ef0a6bb6e97f2d5d1c2fddde0fca46.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2f661eb6688b9666498c8c4f7b944986.json"
3
+ "buildInfo": "../../../build-info/29ef0a6bb6e97f2d5d1c2fddde0fca46.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2f661eb6688b9666498c8c4f7b944986.json"
3
+ "buildInfo": "../../../build-info/29ef0a6bb6e97f2d5d1c2fddde0fca46.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2f661eb6688b9666498c8c4f7b944986.json"
3
+ "buildInfo": "../../../build-info/29ef0a6bb6e97f2d5d1c2fddde0fca46.json"
4
4
  }
@@ -266,7 +266,7 @@ library BitcoinTx {
266
266
  /// on a 20-byte public key hash.
267
267
  function extractPubKeyHash(BridgeState.Storage storage, bytes memory output)
268
268
  internal
269
- view
269
+ pure
270
270
  returns (bytes20 pubKeyHash)
271
271
  {
272
272
  bytes memory pubKeyHashBytes = output.extractHash();
@@ -19,6 +19,7 @@ import "@keep-network/random-beacon/contracts/Governable.sol";
19
19
  import {IWalletOwner as EcdsaWalletOwner} from "@keep-network/ecdsa/contracts/api/IWalletOwner.sol";
20
20
 
21
21
  import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
22
+ import "@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol";
22
23
 
23
24
  import "./IRelay.sol";
24
25
  import "./BridgeState.sol";
@@ -31,6 +32,7 @@ import "./Wallets.sol";
31
32
  import "./Fraud.sol";
32
33
  import "./MovingFunds.sol";
33
34
 
35
+ import "../bank/IReceiveBalanceApproval.sol";
34
36
  import "../bank/Bank.sol";
35
37
 
36
38
  /// @title Bitcoin Bridge
@@ -54,7 +56,12 @@ import "../bank/Bank.sol";
54
56
  /// @dev Bridge is an upgradeable component of the Bank. The order of
55
57
  /// functionalities in this contract is: deposit, sweep, redemption,
56
58
  /// moving funds, wallet lifecycle, frauds, parameters.
57
- contract Bridge is Governable, EcdsaWalletOwner, Initializable {
59
+ contract Bridge is
60
+ Governable,
61
+ EcdsaWalletOwner,
62
+ Initializable,
63
+ IReceiveBalanceApproval
64
+ {
58
65
  using BridgeState for BridgeState.Storage;
59
66
  using Deposit for BridgeState.Storage;
60
67
  using DepositSweep for BridgeState.Storage;
@@ -386,7 +393,9 @@ contract Bridge is Governable, EcdsaWalletOwner, Initializable {
386
393
  }
387
394
 
388
395
  /// @notice Requests redemption of the given amount from the specified
389
- /// wallet to the redeemer Bitcoin output script.
396
+ /// wallet to the redeemer Bitcoin output script. Handles the
397
+ /// simplest case in which the redeemer's balance is decreased in
398
+ /// the Bank.
390
399
  /// @param walletPubKeyHash The 20-byte wallet public key hash (computed
391
400
  /// using Bitcoin HASH160 over the compressed ECDSA public key).
392
401
  /// @param mainUtxo Data of the wallet's main UTXO, as currently known on
@@ -394,8 +403,8 @@ contract Bridge is Governable, EcdsaWalletOwner, Initializable {
394
403
  /// @param redeemerOutputScript The redeemer's length-prefixed output
395
404
  /// script (P2PKH, P2WPKH, P2SH or P2WSH) that will be used to lock
396
405
  /// redeemed BTC.
397
- /// @param amount Requested amount in satoshi. This is also the TBTC amount
398
- /// that is taken from redeemer's balance in the Bank upon request.
406
+ /// @param amount Requested amount in satoshi. This is also the Bank balance
407
+ /// that is taken from the `balanceOwner` upon request.
399
408
  /// Once the request is handled, the actual amount of BTC locked
400
409
  /// on the redeemer output script will be always lower than this value
401
410
  /// since the treasury and Bitcoin transaction fees must be incurred.
@@ -423,11 +432,81 @@ contract Bridge is Governable, EcdsaWalletOwner, Initializable {
423
432
  self.requestRedemption(
424
433
  walletPubKeyHash,
425
434
  mainUtxo,
435
+ msg.sender,
426
436
  redeemerOutputScript,
427
437
  amount
428
438
  );
429
439
  }
430
440
 
441
+ /// @notice Requests redemption of the given amount from the specified
442
+ /// wallet to the redeemer Bitcoin output script. Used by
443
+ /// `Bank.approveBalanceAndCall`. Can handle more complex cases
444
+ /// where balance owner may be someone else than the redeemer.
445
+ /// For example, vault redeeming its balance for some depositor.
446
+ /// @param balanceOwner The address of the Bank balance owner whose balance
447
+ /// is getting redeemed.
448
+ /// @param amount Requested amount in satoshi. This is also the Bank balance
449
+ /// that is taken from the `balanceOwner` upon request.
450
+ /// Once the request is handled, the actual amount of BTC locked
451
+ /// on the redeemer output script will be always lower than this value
452
+ /// since the treasury and Bitcoin transaction fees must be incurred.
453
+ /// The minimal amount satisfying the request can be computed as:
454
+ /// `amount - (amount / redemptionTreasuryFeeDivisor) - redemptionTxMaxFee`.
455
+ /// Fees values are taken at the moment of request creation.
456
+ /// @param redemptionData ABI-encoded redemption data:
457
+ /// [
458
+ /// address redeemer,
459
+ /// bytes20 walletPubKeyHash,
460
+ /// bytes32 mainUtxoTxHash,
461
+ /// uint32 mainUtxoTxOutputIndex,
462
+ /// uint64 mainUtxoTxOutputValue,
463
+ /// bytes redeemerOutputScript
464
+ /// ]
465
+ ///
466
+ /// - redeemer: The Ethereum address of the redeemer who will be able
467
+ /// to claim Bank balance if anything goes wrong during the redemption.
468
+ /// In the most basic case, when someone redeems their balance
469
+ /// from the Bank, `balanceOwner` is the same as `redemeer`.
470
+ /// However, when a Vault is redeeming part of its balance for some
471
+ /// redeemer address (for example, someone who has earlier deposited
472
+ /// into that Vault), `balanceOwner` is the Vault, and `redemeer` is
473
+ /// the address for which the vault is redeeming its balance to,
474
+ /// - walletPubKeyHash: The 20-byte wallet public key hash (computed
475
+ /// using Bitcoin HASH160 over the compressed ECDSA public key),
476
+ /// - mainUtxoTxHash: Data of the wallet's main UTXO TX hash, as
477
+ /// currently known on the Ethereum chain,
478
+ /// - mainUtxoTxOutputIndex: Data of the wallet's main UTXO output
479
+ /// index, as currently known on Ethereum chain,
480
+ /// - mainUtxoTxOutputValue: Data of the wallet's main UTXO output
481
+ /// value, as currently known on Ethereum chain,
482
+ /// - redeemerOutputScript The redeemer's length-prefixed output
483
+ /// script (P2PKH, P2WPKH, P2SH or P2WSH) that will be used to lock
484
+ /// redeemed BTC.
485
+ /// @dev Requirements:
486
+ /// - The caller must be the Bank,
487
+ /// - Wallet behind `walletPubKeyHash` must be live,
488
+ /// - `mainUtxo` components must point to the recent main UTXO
489
+ /// of the given wallet, as currently known on the Ethereum chain,
490
+ /// - `redeemerOutputScript` must be a proper Bitcoin script,
491
+ /// - `redeemerOutputScript` cannot have wallet PKH as payload,
492
+ /// - `amount` must be above or equal the `redemptionDustThreshold`,
493
+ /// - Given `walletPubKeyHash` and `redeemerOutputScript` pair can be
494
+ /// used for only one pending request at the same time,
495
+ /// - Wallet must have enough Bitcoin balance to proceed the request,
496
+ function receiveBalanceApproval(
497
+ address balanceOwner,
498
+ uint256 amount,
499
+ bytes calldata redemptionData
500
+ ) external override {
501
+ require(msg.sender == address(self.bank), "Caller is not the bank");
502
+
503
+ self.requestRedemption(
504
+ balanceOwner,
505
+ SafeCastUpgradeable.toUint64(amount),
506
+ redemptionData
507
+ );
508
+ }
509
+
431
510
  /// @notice Used by the wallet to prove the BTC redemption transaction
432
511
  /// and to make the necessary bookkeeping. Redemption is only
433
512
  /// accepted if it satisfies SPV proof.
@@ -1115,7 +1194,7 @@ contract Bridge is Governable, EcdsaWalletOwner, Initializable {
1115
1194
  /// It is the time after which the redemption request can be reported
1116
1195
  /// as timed out. It is counted from the moment when the redemption
1117
1196
  /// request was created via `requestRedemption` call. Reported timed
1118
- /// out requests are cancelled and locked TBTC is returned to the
1197
+ /// out requests are cancelled and locked balance is returned to the
1119
1198
  /// redeemer in full amount.
1120
1199
  /// @param redemptionTimeoutSlashingAmount New value of the redemption
1121
1200
  /// timeout slashing amount in T, it is the amount slashed from each
@@ -1502,7 +1581,7 @@ contract Bridge is Governable, EcdsaWalletOwner, Initializable {
1502
1581
  /// @return redemptionTimeout Time after which the redemption request can be
1503
1582
  /// reported as timed out. It is counted from the moment when the
1504
1583
  /// redemption request was created via `requestRedemption` call.
1505
- /// Reported timed out requests are cancelled and locked TBTC is
1584
+ /// Reported timed out requests are cancelled and locked balance is
1506
1585
  /// returned to the redeemer in full amount.
1507
1586
  /// @return redemptionTimeoutSlashingAmount The amount of stake slashed
1508
1587
  /// from each member of a wallet for a redemption timeout.