diff --git a/CHANGELOG.md b/CHANGELOG.md index ad8cac61..13e17d72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## v0.9.3 + +- Added `unlock` to UNSRegistry@0.9.1 +- Added `revoke` to MintingManager@0.5.1 used to revoke expirable domains + ## v0.9.2 - Add `.austin` TLD diff --git a/artifacts/IMintingManager.json b/artifacts/IMintingManager.json index 39755aad..3aec3783 100644 --- a/artifacts/IMintingManager.json +++ b/artifacts/IMintingManager.json @@ -414,6 +414,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "revoke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/artifacts/IUNSRegistry.json b/artifacts/IUNSRegistry.json index 319b19b5..73479a59 100644 --- a/artifacts/IUNSRegistry.json +++ b/artifacts/IUNSRegistry.json @@ -1166,6 +1166,24 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "unlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/artifacts/MintingManager.json b/artifacts/MintingManager.json index e232eef6..f37fea33 100644 --- a/artifacts/MintingManager.json +++ b/artifacts/MintingManager.json @@ -976,6 +976,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "revoke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1143,8 +1156,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614d62806100206000396000f3fe6080604052600436106102935760003560e01c806391d148541161015a578063cc2a9a5b116100c1578063d7db74c71161007a578063d7db74c714610824578063ec52738914610837578063f2fde38b14610857578063f5243bc414610877578063f940e38514610897578063ffa1ad74146108b757600080fd5b8063cc2a9a5b14610762578063cc2c3fc414610782578063ceeb4f50146107a2578063d1f5692c146107c2578063d5391393146107e2578063d547741f1461080457600080fd5b8063a3f4df7e11610113578063a3f4df7e14610675578063a849d65c146106c2578063aa271e1a146106e2578063b0aa98c714610702578063b3ab15fb14610722578063b9998a241461074257600080fd5b806391d14854146105cb578063983b2d56146105eb578063986502751461060b57806399e0dd7c14610620578063a217fddf14610640578063a3a3f7f61461065557600080fd5b80635c975abb116101fe57806371e2a657116101b757806371e2a6571461052557806377a2a5891461054557806381c81d35146105655780638456cb59146105785780638da5cb5b1461058d578063906cecc1146105ab57600080fd5b80635c975abb146104885780635cd7e3b31461049d5780635e22cd86146104bd5780635fc1964f146104dd578063634486da146104fd578063715018a61461051057600080fd5b806336568abe1161025057806336568abe1461038d5780633f41b614146103ad5780633f4ba83a146103e557806351cff8d9146103fa578063572b6c051461041a5780635b6fa8db1461046857600080fd5b806301ffc9a7146102985780631edb948e146102cd578063248a9ca3146102ef578063268b15ed1461032d5780632f2ff15d1461034d5780633092afd51461036d575b600080fd5b3480156102a457600080fd5b506102b86102b3366004613c49565b6108e8565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102ed6102e8366004613c98565b61091f565b005b3480156102fb57600080fd5b5061031f61030a366004613cc4565b60009081526097602052604090206001015490565b6040519081526020016102c4565b34801561033957600080fd5b506102ed610348366004613d1e565b610b04565b34801561035957600080fd5b506102ed610368366004613d89565b610b97565b34801561037957600080fd5b506102ed610388366004613db9565b610bc1565b34801561039957600080fd5b506102ed6103a8366004613d89565b610bd5565b3480156103b957600080fd5b5060c9546103cd906001600160a01b031681565b6040516001600160a01b0390911681526020016102c4565b3480156103f157600080fd5b506102ed610c63565b34801561040657600080fd5b506102ed610415366004613db9565b610c75565b34801561042657600080fd5b506102b8610435366004613db9565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e546001600160a01b0390811691161490565b34801561047457600080fd5b5060cc546103cd906001600160a01b031681565b34801561049457600080fd5b506102b8610d15565b3480156104a957600080fd5b506102ed6104b8366004613e28565b610d2b565b3480156104c957600080fd5b506102ed6104d8366004613ee7565b610f8f565b3480156104e957600080fd5b506102ed6104f8366004614021565b6111dd565b6102ed61050b366004613db9565b611225565b34801561051c57600080fd5b506102ed6112e8565b34801561053157600080fd5b506102ed610540366004614021565b6112fa565b34801561055157600080fd5b5060ce546103cd906001600160a01b031681565b6102ed610573366004613db9565b611342565b34801561058457600080fd5b506102ed6113bf565b34801561059957600080fd5b506033546001600160a01b03166103cd565b3480156105b757600080fd5b506102ed6105c63660046140bf565b6113cf565b3480156105d757600080fd5b506102b86105e6366004613d89565b611455565b3480156105f757600080fd5b506102ed610606366004613db9565b611480565b34801561061757600080fd5b506102ed611491565b34801561062c57600080fd5b506102ed61063b36600461411a565b6114ab565b34801561064c57600080fd5b5061031f600081565b34801561066157600080fd5b506102ed61067036600461415b565b611592565b34801561068157600080fd5b506106b5604051806040016040528060148152602001732aa7299d1026b4b73a34b7339026b0b730b3b2b960611b81525081565b6040516102c49190614201565b3480156106ce57600080fd5b5060cb546103cd906001600160a01b031681565b3480156106ee57600080fd5b506102b86106fd366004613db9565b6115db565b34801561070e57600080fd5b506102b861071d366004613cc4565b6115f5565b34801561072e57600080fd5b506102ed61073d366004613db9565b611653565b34801561074e57600080fd5b506102ed61075d366004613db9565b61167d565b34801561076e57600080fd5b506102ed61077d366004614214565b6116c2565b34801561078e57600080fd5b5060ca546103cd906001600160a01b031681565b3480156107ae57600080fd5b506102ed6107bd366004614296565b611b60565b3480156107ce57600080fd5b506102ed6107dd36600461434b565b611c04565b3480156107ee57600080fd5b5061031f600080516020614d3683398151915281565b34801561081057600080fd5b506102ed61081f366004613d89565b611cbb565b6102ed610832366004614380565b611ce0565b34801561084357600080fd5b506102ed610852366004613cc4565b611e70565b34801561086357600080fd5b506102ed610872366004613db9565b611ee2565b34801561088357600080fd5b506102ed610892366004614475565b611efe565b3480156108a357600080fd5b506102ed6108b236600461458d565b6120b0565b3480156108c357600080fd5b506106b5604051806040016040528060058152602001640302e352e360dc1b81525081565b60006001600160e01b03198216637965db0b60e01b148061091957506301ffc9a760e01b6001600160e01b03198316145b92915050565b61092a6106fd61222c565b61094f5760405162461bcd60e51b8152600401610946906145bb565b60405180910390fd5b60c95460405163baef73e960e01b8152600481018390526000916001600160a01b03169063baef73e990602401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd91906145f0565b9050806001600160401b0316600003610a245760405162461bcd60e51b815260206004820152602360248201527f4d696e74696e674d616e616765723a20544f4b454e5f4e4f545f455850495241604482015262424c4560e81b6064820152608401610946565b806001600160401b0316836001600160401b031611610a915760405162461bcd60e51b815260206004820152602360248201527f4d696e74696e674d616e616765723a204558504952595f4e4f545f455854454e60448201526211115160ea1b6064820152608401610946565b60c954604051631fb9763760e11b81526001600160401b0385166004820152602481018490526001600160a01b0390911690633f72ec6e906044015b600060405180830381600087803b158015610ae757600080fd5b505af1158015610afb573d6000803e3d6000fd5b50505050505050565b8282828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250610b47935085925084915061223b565b610b4f610d15565b15610b6c5760405162461bcd60e51b81526004016109469061460d565b6060610afb610b7961222c565b610b8c88610b878989612409565b612435565b838460006001612546565b600082815260976020526040902060010154610bb281612a9a565b610bbc8383612aab565b505050565b610bc9612b32565b610bd281612bab565b50565b610bdd61222c565b6001600160a01b0316816001600160a01b031614610c555760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610946565b610c5f8282612bc3565b5050565b610c6b612b32565b610c73612c48565b565b610c7d612b32565b6001600160a01b038116610c9057600080fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610cc8573d6000803e3d6000fd5b50604080516001600160a01b03841681526020810183905260008183015290517e1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a9181900360600190a15050565b600080516020614d168339815191525460ff1690565b610d358688614637565b8051600203610d6a57610d496106fd61222c565b610d655760405162461bcd60e51b815260040161094690614701565b610eaf565b6000610d7582612cf0565b60c9549092506001600160a01b0316905063430c2081610d9361222c565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381865afa158015610dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e029190614745565b80610e91575060c95460ce5460405163430c208160e01b81526001600160a01b0391821660048201526024810184905291169063430c208190604401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614745565b8015610e915750610e916106fd61222c565b610ead5760405162461bcd60e51b815260040161094690614762565b505b610eb98789614637565b6000600282511015610edd5760405162461bcd60e51b8152600401610946906147b1565b610f32610f1160008460018651610ef4919061480c565b81518110610f0457610f0461481f565b6020026020010151612d2b565b83600081518110610f2457610f2461481f565b60200260200101518361223b565b610f3a610d15565b15610f575760405162461bcd60e51b81526004016109469061460d565b610f818b610f658b8d614637565b610f6f8a8c614637565b610f79898b614637565b600089612546565b505050505050505050505050565b610f998789614637565b8051600203610fce57610fad6106fd61222c565b610fc95760405162461bcd60e51b815260040161094690614701565b611113565b6000610fd982612cf0565b60c9549092506001600160a01b0316905063430c2081610ff761222c565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381865afa158015611042573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110669190614745565b806110f5575060c95460ce5460405163430c208160e01b81526001600160a01b0391821660048201526024810184905291169063430c208190604401602060405180830381865afa1580156110bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e39190614745565b80156110f557506110f56106fd61222c565b6111115760405162461bcd60e51b815260040161094690614762565b505b61111d888a614637565b836001600160401b03166002825110156111495760405162461bcd60e51b8152600401610946906147b1565b611160610f1160008460018651610ef4919061480c565b611168610d15565b156111855760405162461bcd60e51b81526004016109469061460d565b60028a146111a55760405162461bcd60e51b815260040161094690614835565b6111ce8c6111b38c8e614637565b6111bd8b8d614637565b6111c78a8c614637565b8989612546565b50505050505050505050505050565b6111e5612b32565b60005b8151811015610c5f576112138282815181106112065761120661481f565b6020026020010151612bab565b8061121d8161487b565b9150506111e8565b6112306106fd61222c565b61124c5760405162461bcd60e51b8152600401610946906145bb565b6001600160a01b0381166112a25760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d5054590000006044820152606401610946565b6112ab81612ddf565b6112b3611491565b6040516001600160a01b038216903480156108fc02916000818181858888f19350505050158015610c5f573d6000803e3d6000fd5b6112f0612b32565b610c736000612df7565b611302612b32565b60005b8151811015610c5f576113308282815181106113235761132361481f565b6020026020010151612ddf565b8061133a8161487b565b915050611305565b61134d6106fd61222c565b6113695760405162461bcd60e51b8152600401610946906145bb565b6001600160a01b0381166112ab5760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d5054590000006044820152606401610946565b6113c7612b32565b610c73612e49565b8282828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250611412935085925084915061223b565b61141a610d15565b156114375760405162461bcd60e51b81526004016109469061460d565b606061144b87610b8c88610b878989612409565b5050505050505050565b60009182526097602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611488612b32565b610bd281612ddf565b610c73600080516020614d368339815191526103a861222c565b6114b3612b32565b60c954604051632678375f60e21b81526001600160a01b03909116906399e0dd7c906114e59085908590600401614894565b600060405180830381600087803b1580156114ff57600080fd5b505af1158015611513573d6000803e3d6000fd5b505060cb546001600160a01b0316159150610c5f90505760cb54604051632678375f60e21b81526001600160a01b03909116906399e0dd7c9061155c9085908590600401614894565b600060405180830381600087803b15801561157657600080fd5b505af115801561158a573d6000803e3d6000fd5b505050505050565b61159a612b32565b610bbc83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612eb1915050565b6000610919600080516020614d3683398151915283611455565b604080517f1ec047073e2c8b15660901dbfdb6e3ff6365bd699dd9f95dcc6eab5448bebd696020820152908101829052600090611649906060015b6040516020818303038152906040528051906020012090565b5460ff1692915050565b61165b612b32565b60ce80546001600160a01b0319166001600160a01b0392909216919091179055565b611685612b32565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e80546001600160a01b0319166001600160a01b03831617905550565b600054610100900460ff16158080156116e25750600054600160ff909116105b806116fc5750303b1580156116fc575060005460ff166001145b61175f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610946565b6000805460ff191660011790558015611782576000805461ff0019166101001790555b60c980546001600160a01b03199081166001600160a01b038a81169190911790925560ca8054821689841617905560cb8054821688841617905560cc8054821687841617905560ce80549091169185169190911790556117e0612fd1565b6117e8613008565b6117f182613041565b6117f9613068565b604080516103008101825260066102c082018181526563727970746f60d01b6102e0840152825282518084018452818152651dd85b1b195d60d21b602082810191909152808401919091528351808501855260018152600f60fb1b8183015283850152835180850185526003808252621b999d60ea1b82840152606085019190915284518086018652600a815269313637b1b5b1b430b4b760b11b818401526080850152845180860186526007808252663134ba31b7b4b760c91b8285015260a0860191909152855180870187528281526207070760eb1b8185015260c0860152855180870187528281526264616f60e81b8185015260e086015285518087018752918252621e9a5b60ea1b8284015261010085019190915284518086018652908152663837b63cb3b7b760c91b8183015261012084015283518085018552600b81526a756e73746f707061626c6560a81b81830152610140840152835180850185528281526535b632bb32b960d11b8183015261016084015283518085018552600280825261686960f01b8284015261018085019190915284518086018652838152656b726573757360d01b818401526101a085015284518086018652600580825264616e696d6560d81b828501526101c086019190915285518087018752818152646d616e676160d81b818501526101e086015285518087018752600981526862696e616e6365757360b81b8185015261020086015285518087018752818152647265616c6d60d81b818501526102208601528551808701875291825261676f60f01b82840152610240850191909152845180860186526008815267185b1d1a5b5a5cdd60c21b818401526102608501528451808601865290815264707564677960d81b8183015261028084015283518085019094529083526530bab9ba34b760d11b908301526102a081019190915260005b6016811015611aea57611ad8828260168110611acc57611acc61481f565b60200201516000612eb1565b80611ae28161487b565b915050611aae565b50611b1160405180604001604052806003815260200162636f6d60e81b8152506001612eb1565b508015610afb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250611ba3935085925084915061223b565b611bab610d15565b15611bc85760405162461bcd60e51b81526004016109469061460d565b611bf78a611bda8b610b878c8c612409565b611be4888a614637565b611bee8789614637565b60006001612546565b5050505050505050505050565b611c0c612b32565b60005b81811015610bbc5760c9546001600160a01b03166350960239848484818110611c3a57611c3a61481f565b9050602002016020810190611c4f9190613db9565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b505050508080611cb39061487b565b915050611c0f565b600082815260976020526040902060010154611cd681612a9a565b610bbc8383612bc3565b611cea898b614637565b6000600282511015611d0e5760405162461bcd60e51b8152600401610946906147b1565b611d25610f1160008460018651610ef4919061480c565b611d2d610d15565b15611d4a5760405162461bcd60e51b81526004016109469061460d565b60028b14611d6a5760405162461bcd60e51b815260040161094690614835565b611db08d8d8d898960008a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130a892505050565b84341015611e005760405162461bcd60e51b815260206004820181905260248201527f4d696e74696e674d616e616765723a204e4f545f454e4f5547485f46554e44536044820152606401610946565b611e128d8d8d8d8d8d8d8c6000613268565b843411156111ce57611e2261222c565b6001600160a01b03166108fc611e38873461480c565b6040518115909202916000818181858888f19350505050158015611e60573d6000803e3d6000fd5b5050505050505050505050505050565b611e78612b32565b611e8181613324565b611e9d5760405162461bcd60e51b8152600401610946906148c3565b600081815260cd60205260408120611eb491613bfb565b60405181907f0aa1aff0f830e739d86baf0e6624d6763da02f7733575e0e463886cd062dea6a90600090a250565b611eea612b32565b611ef38161334a565b610bd26000826133c0565b611f088a8c614637565b6000600282511015611f2c5760405162461bcd60e51b8152600401610946906147b1565b611f43610f1160008460018651610ef4919061480c565b611f4b610d15565b15611f685760405162461bcd60e51b81526004016109469061460d565b60028c14611f885760405162461bcd60e51b815260040161094690614835565b611fcd8e8e8e8a898b8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130a892505050565b856001600160a01b03166323b872dd611fe461222c565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018890526064016020604051808303816000875af1158015612037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205b9190614745565b61209f5760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881313d5d7d31155915317d1905253605a1b6044820152606401610946565b611e608e8e8e8e8e8e8e8c8e613268565b6120b8612b32565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156120ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121239190614905565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015612176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219a9190614745565b6121de5760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881313d5d7d31155915317d1905253605a1b6044820152606401610946565b604080516001600160a01b0384811682526020820184905285168183015290517e1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a9181900360600190a1505050565b60006122366133ca565b905090565b61224483613324565b6122605760405162461bcd60e51b8152600401610946906148c3565b600083815260cf602052604090205460ff161515811515146122d35760405162461bcd60e51b815260206004820152602660248201527f4d696e74696e674d616e616765723a20544c445f455850495241424c455f4d496044820152650a69a82a886960d31b6064820152608401610946565b60006123068360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050600a816000015111156123ae57612331612325826000600a613410565b80516020909101512090565b7fb551e0305c8163b812374b8e78b577c77f226f6f10c5ad03e52699578fbc34b8036123ae5760405162461bcd60e51b815260206004820152602660248201527f4d696e74696e674d616e616765723a20544f4b454e5f4c4142454c5f50524f4860448201526512509255115160d21b6064820152608401610946565b6123b78361344f565b6124035760405162461bcd60e51b815260206004820152601d60248201527f4d696e74696e674d616e616765723a204c4142454c5f494e56414c49440000006044820152606401610946565b50505050565b6060828260405160200161241e92919061491e565b604051602081830303815290604052905092915050565b604080516002808252606082810190935260009190816020015b606081526020019060019003908161244f579050509050828160008151811061247a5761247a61481f565b602002602001018190525060cd600085815260200190815260200160002080546124a390614946565b80601f01602080910402602001604051908101604052809291908181526020018280546124cf90614946565b801561251c5780601f106124f15761010080835404028352916020019161251c565b820191906000526020600020905b8154815290600101906020018083116124ff57829003601f168201915b5050505050816001815181106125345761253461481f565b60209081029190910101529392505050565b600080600061255488612cf0565b91509150838015612566575060028851115b80156125e8575060c9546040516331a9108f60e11b8152600481018390526001600160a01b038b8116921690636352211e90602401602060405180830381865afa1580156125b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125dc9190614980565b6001600160a01b031614155b156126485760405162461bcd60e51b815260206004820152602a60248201527f4d696e74696e674d616e616765723a20524556455253455f5245434f52445f4e60448201526913d517d0531313d5d15160b21b6064820152608401610946565b60c954604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e7990602401602060405180830381865afa158015612691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b59190614745565b80156127a6575060c9546040516331a9108f60e11b81526004810184905230916001600160a01b031690636352211e90602401602060405180830381865afa158015612705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127299190614980565b6001600160a01b031614806127a6575060c95460405163d9548e5360e01b8152600481018490526001600160a01b039091169063d9548e5390602401602060405180830381865afa158015612782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a69190614745565b15612897576001600160401b038516156128285760c954604051631fb9763760e11b81526001600160401b0387166004820152602481018490526001600160a01b0390911690633f72ec6e90604401600060405180830381600087803b15801561280f57600080fd5b505af1158015612823573d6000803e3d6000fd5b505050505b60c954604051630fb8df0360e11b81526001600160a01b0390911690631f71be0690612860908c908c908c908c908b906004016149f2565b600060405180830381600087803b15801561287a57600080fd5b505af115801561288e573d6000803e3d6000fd5b50505050612a8e565b6128a0826135b3565b6128a988613612565b80156128b6575087516002145b80156128c957506001600160401b038516155b156129a75760ca5488516001600160a01b039091169063c36c2125908b908b906000906128f8576128f861481f565b602090810291909101015160cc546040516001600160e01b031960e086901b1681526129329392916001600160a01b031690600401614a51565b600060405180830381600087803b15801561294c57600080fd5b505af1158015612960573d6000803e3d6000fd5b505050506000875111156129a25760cc54604051633a0deb9d60e21b81526001600160a01b039091169063e837ae7490612860908a908a908790600401614a86565b612a8e565b60c95460405163ba5d40b760e01b81526001600160a01b039091169063ba5d40b7906129df908c908c908c908c908b906004016149f2565b600060405180830381600087803b1580156129f957600080fd5b505af1158015612a0d573d6000803e3d6000fd5b505050506001600160401b03851615612a8e5760c954604051631fb9763760e11b81526001600160401b0387166004820152602481018490526001600160a01b0390911690633f72ec6e90604401600060405180830381600087803b158015612a7557600080fd5b505af1158015612a89573d6000803e3d6000fd5b505050505b50979650505050505050565b610bd281612aa661222c565b61366c565b612ab58282611455565b610c5f5760008281526097602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612aee61222c565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612b3a61222c565b6001600160a01b0316612b556033546001600160a01b031690565b6001600160a01b031614610c735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610946565b610bd2600080516020614d3683398151915282611cbb565b612bcd8282611455565b15610c5f5760008281526097602090815260408083206001600160a01b03851684529091529020805460ff19169055612c0461222c565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b612c50610d15565b612c935760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881393d517d4105554d15160621b6044820152606401610946565b600080516020614d16833981519152805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612cd361222c565b6040516001600160a01b03909116815260200160405180910390a1565b805160009081905b8015612d2557829150612d118285610ef460018561480c565b925080612d1d81614abc565b915050612cf8565b50915091565b60008151600003612d7e5760405162461bcd60e51b815260206004820152601b60248201527f4d696e74696e674d616e616765723a204c4142454c5f454d50545900000000006044820152606401610946565b8282604051602001612d909190614ad3565b60405160208183030381529060405280519060200120604051602001612dc0929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b610bd2600080516020614d36833981519152826133c0565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612e51610d15565b15612e6e5760405162461bcd60e51b81526004016109469061460d565b600080516020614d16833981519152805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612cd361222c565b6000612ebe600084612d2b565b600081815260cd60205260409020909150612ed98482614b35565b50600081815260cf602052604090819020805460ff19168415151790555181907f4fce6f6e172b04eaa80325d8e3b0180a34945000f3e214605039e8420fdf898090612f26908690614201565b60405180910390a260c954604051634f558e7960e01b8152600481018390526001600160a01b0390911690634f558e7990602401602060405180830381865afa158015612f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9b9190614745565b610bbc5760c9546040516307befae360e51b81526001600160a01b039091169063f7df5c6090610acd9084908790600401614bf4565b600054610100900460ff16612ff85760405162461bcd60e51b815260040161094690614c15565b610c7361300361222c565b612df7565b600054610100900460ff1661302f5760405162461bcd60e51b815260040161094690614c15565b610c73600061303c61222c565b6133c0565b600054610100900460ff166116855760405162461bcd60e51b815260040161094690614c15565b600054610100900460ff1661308f5760405162461bcd60e51b815260040161094690614c15565b600080516020614d16833981519152805460ff19169055565b60006130bc6130b78789614637565b612cf0565b506040516bffffffffffffffffffffffff1930606090811b821660208401524660348401528b811b82166054840152606883018490526001600160c01b031960c08a901b1660888401526090830188905286901b1660b08201529091506000906131989084906131929060c401604051602081830303815290604052805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b906136d0565b90506131a3816115db565b6131fb5760405162461bcd60e51b8152602060048201526024808201527f4d696e74696e674d616e616765723a205349474e45525f49535f4e4f545f4d49604482015263272a22a960e11b6064820152608401610946565b42866001600160401b03161161325d5760405162461bcd60e51b815260206004820152602160248201527f4d696e74696e674d616e616765723a20455850495245445f5349474e415455526044820152604560f81b6064820152608401610946565b505050505050505050565b60006132af8a6132788a8c614637565b613282898b614637565b61328c888a614637565b60008f6001600160a01b03166132a061222c565b6001600160a01b031614612546565b9050896001600160a01b03166132c361222c565b6001600160a01b0316827fa545b6fd3355e8d57f8c8147bafe740545bd3ea1f94bef2576a6d532a7c3b60586866040516133109291909182526001600160a01b0316602082015260400190565b60405180910390a450505050505050505050565b600081815260cd60205260408120805482919061334090614946565b9050119050919050565b613352612b32565b6001600160a01b0381166133b75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610946565b610bd281612df7565b610c5f8282612aab565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e546000906001600160a01b0316330361340b575060331936013560601c90565b503390565b604080518082019091526000808252602082015260405180604001604052808381526020018486602001516134459190614c60565b9052949350505050565b6000815160000361346257506000919050565b60208201805160f81c60308110801590613480575060398160ff1611155b1580156134a2575060618160ff16101580156134a05750607a8160ff1611155b155b156134b1575060009392505050565b8351600181111561351f576134d3836134cb60018461480c565b015160f81c90565b915060308260ff16101580156134ed575060398260ff1611155b15801561350f575060618260ff161015801561350d5750607a8260ff1611155b155b1561351f57506000949350505050565b60015b61352d60018361480c565b8110156135a7578381015160f81c9250602d8314801590613563575060308360ff1610158015613561575060398360ff1611155b155b8015613584575060618360ff16101580156135825750607a8360ff1611155b155b156135955750600095945050505050565b8061359f8161487b565b915050613522565b50600195945050505050565b6135bc816115f5565b156136095760405162461bcd60e51b815260206004820152601d60248201527f4d696e74696e674d616e616765723a20544f4b454e5f424c4f434b45440000006044820152606401610946565b610bd2816136f4565b60008061362960008460018651610ef4919061480c565b60ca549091506001600160a01b0316158015906136655750807f0f4a10a4f46c288cea365fcf45cccf0e9d901b945b9829ccdb54c10dc3cb7a6f145b9392505050565b6136768282611455565b610c5f5761368e816001600160a01b03166014613778565b613699836020613778565b6040516020016136aa929190614c73565b60408051601f198184030181529082905262461bcd60e51b825261094691600401614201565b60008060006136df8585613913565b915091506136ec81613958565b509392505050565b604080517f1ec047073e2c8b15660901dbfdb6e3ff6365bd699dd9f95dcc6eab5448bebd69602082015290810182905260019061373390606001611630565b805460ff19169115159190911790556040518181527f2ce5d9351b1d590d5a066db0d2dc7602d55f092506a83a7ee8c4d78ee357d75a9060200160405180910390a150565b60606000613787836002614ce8565b613792906002614c60565b6001600160401b038111156137a9576137a9613fb8565b6040519080825280601f01601f1916602001820160405280156137d3576020820181803683370190505b509050600360fc1b816000815181106137ee576137ee61481f565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061381d5761381d61481f565b60200101906001600160f81b031916908160001a9053506000613841846002614ce8565b61384c906001614c60565b90505b60018111156138c4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106138805761388061481f565b1a60f81b8282815181106138965761389661481f565b60200101906001600160f81b031916908160001a90535060049490941c936138bd81614abc565b905061384f565b5083156136655760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610946565b60008082516041036139495760208301516040840151606085015160001a61393d87828585613b0e565b94509450505050613951565b506000905060025b9250929050565b600081600481111561396c5761396c614cff565b036139745750565b600181600481111561398857613988614cff565b036139d55760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610946565b60028160048111156139e9576139e9614cff565b03613a365760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610946565b6003816004811115613a4a57613a4a614cff565b03613aa25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610946565b6004816004811115613ab657613ab6614cff565b03610bd25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610946565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613b455750600090506003613bf2565b8460ff16601b14158015613b5d57508460ff16601c14155b15613b6e5750600090506004613bf2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613bc2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613beb57600060019250925050613bf2565b9150600090505b94509492505050565b508054613c0790614946565b6000825580601f10613c17575050565b601f016020900490600052602060002090810190610bd291905b80821115613c455760008155600101613c31565b5090565b600060208284031215613c5b57600080fd5b81356001600160e01b03198116811461366557600080fd5b6001600160401b0381168114610bd257600080fd5b8035613c9381613c73565b919050565b60008060408385031215613cab57600080fd5b8235613cb681613c73565b946020939093013593505050565b600060208284031215613cd657600080fd5b5035919050565b60008083601f840112613cef57600080fd5b5081356001600160401b03811115613d0657600080fd5b60208301915083602082850101111561395157600080fd5b600080600060408486031215613d3357600080fd5b8335925060208401356001600160401b03811115613d5057600080fd5b613d5c86828701613cdd565b9497909650939450505050565b6001600160a01b0381168114610bd257600080fd5b8035613c9381613d69565b60008060408385031215613d9c57600080fd5b823591506020830135613dae81613d69565b809150509250929050565b600060208284031215613dcb57600080fd5b813561366581613d69565b60008083601f840112613de857600080fd5b5081356001600160401b03811115613dff57600080fd5b6020830191508360208260051b850101111561395157600080fd5b8015158114610bd257600080fd5b60008060008060008060008060a0898b031215613e4457600080fd5b8835613e4f81613d69565b975060208901356001600160401b0380821115613e6b57600080fd5b613e778c838d01613dd6565b909950975060408b0135915080821115613e9057600080fd5b613e9c8c838d01613dd6565b909750955060608b0135915080821115613eb557600080fd5b50613ec28b828c01613dd6565b9094509250506080890135613ed681613e1a565b809150509295985092959890939650565b600080600080600080600080600060c08a8c031215613f0557600080fd5b8935613f1081613d69565b985060208a01356001600160401b0380821115613f2c57600080fd5b613f388d838e01613dd6565b909a50985060408c0135915080821115613f5157600080fd5b613f5d8d838e01613dd6565b909850965060608c0135915080821115613f7657600080fd5b50613f838c828d01613dd6565b90955093505060808a0135613f9781613c73565b915060a08a0135613fa781613e1a565b809150509295985092959850929598565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613ff657613ff6613fb8565b604052919050565b60006001600160401b0382111561401757614017613fb8565b5060051b60200190565b6000602080838503121561403457600080fd5b82356001600160401b0381111561404a57600080fd5b8301601f8101851361405b57600080fd5b803561406e61406982613ffe565b613fce565b81815260059190911b8201830190838101908783111561408d57600080fd5b928401925b828410156140b45783356140a581613d69565b82529284019290840190614092565b979650505050505050565b600080600080606085870312156140d557600080fd5b84356140e081613d69565b93506020850135925060408501356001600160401b0381111561410257600080fd5b61410e87828801613cdd565b95989497509550505050565b6000806020838503121561412d57600080fd5b82356001600160401b0381111561414357600080fd5b61414f85828601613cdd565b90969095509350505050565b60008060006040848603121561417057600080fd5b83356001600160401b0381111561418657600080fd5b61419286828701613cdd565b90945092505060208401356141a681613e1a565b809150509250925092565b60005b838110156141cc5781810151838201526020016141b4565b50506000910152565b600081518084526141ed8160208601602086016141b1565b601f01601f19169290920160200192915050565b60208152600061366560208301846141d5565b60008060008060008060c0878903121561422d57600080fd5b863561423881613d69565b9550602087013561424881613d69565b9450604087013561425881613d69565b9350606087013561426881613d69565b9250608087013561427881613d69565b915060a087013561428881613d69565b809150509295509295509295565b60008060008060008060008060a0898b0312156142b257600080fd5b88356142bd81613d69565b97506020890135965060408901356001600160401b03808211156142e057600080fd5b6142ec8c838d01613cdd565b909850965060608b013591508082111561430557600080fd5b6143118c838d01613dd6565b909650945060808b013591508082111561432a57600080fd5b506143378b828c01613dd6565b999c989b5096995094979396929594505050565b6000806020838503121561435e57600080fd5b82356001600160401b0381111561437457600080fd5b61414f85828601613dd6565b600080600080600080600080600080600060e08c8e0312156143a157600080fd5b6143aa8c613d7e565b9a506001600160401b038060208e013511156143c557600080fd5b6143d58e60208f01358f01613dd6565b909b50995060408d01358110156143eb57600080fd5b6143fb8e60408f01358f01613dd6565b909950975060608d013581101561441157600080fd5b6144218e60608f01358f01613dd6565b909750955061443260808e01613c88565b945060a08d013593508060c08e0135111561444c57600080fd5b5061445d8d60c08e01358e01613cdd565b81935080925050509295989b509295989b9093969950565b6000806000806000806000806000806000806101008d8f03121561449857600080fd5b6144a18d613d7e565b9b506001600160401b0360208e013511156144bb57600080fd5b6144cb8e60208f01358f01613dd6565b909b5099506001600160401b0360408e013511156144e857600080fd5b6144f88e60408f01358f01613dd6565b90995097506001600160401b0360608e0135111561451557600080fd5b6145258e60608f01358f01613dd6565b909750955061453660808e01613c88565b945061454460a08e01613d7e565b935060c08d013592506001600160401b0360e08e0135111561456557600080fd5b6145758e60e08f01358f01613cdd565b81935080925050509295989b509295989b509295989b565b600080604083850312156145a057600080fd5b82356145ab81613d69565b91506020830135613dae81613d69565b6020808252818101527f4d696e746572526f6c653a2043414c4c45525f49535f4e4f545f4d494e544552604082015260600190565b60006020828403121561460257600080fd5b815161366581613c73565b60208082526010908201526f14185d5cd8589b194e8814105554d15160821b604082015260600190565b600061464561406984613ffe565b80848252602080830192508560051b85013681111561466357600080fd5b855b818110156146f55780356001600160401b03808211156146855760008081fd5b90880190601f368184011261469a5760008081fd5b8235828111156146ac576146ac613fb8565b6146bd818301601f19168801613fce565b925080835236878286010111156146d657600091508182fd5b8087850188850137600090830187015250865250938201938201614665565b50919695505050505050565b60208082526024908201527f4d696e74696e674d616e616765723a2043414c4c45525f49535f4e4f545f4d49604082015263272a22a960e11b606082015260800190565b60006020828403121561475757600080fd5b815161366581613e1a565b6020808252602f908201527f4d696e74696e674d616e616765723a2053454e4445525f49535f4e4f545f415060408201526e282927ab22a22fa7a92fa7aba722a960891b606082015260800190565b60208082526025908201527f4d696e74696e674d616e616765723a204c4142454c535f4c454e4754485f42456040820152642627abaf9960d91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610919576109196147f6565b634e487b7160e01b600052603260045260246000fd5b60208082526026908201527f4d696e74696e674d616e616765723a20535542444f4d41494e535f4e4f545f41604082015265131313d5d15160d21b606082015260800190565b60006001820161488d5761488d6147f6565b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208082526022908201527f4d696e74696e674d616e616765723a20544c445f4e4f545f5245474953544552604082015261115160f21b606082015260800190565b60006020828403121561491757600080fd5b5051919050565b6b756e732d646576746573742d60a01b81528183600c83013760009101600c01908152919050565b600181811c9082168061495a57607f821691505b60208210810361497a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561499257600080fd5b815161366581613d69565b600081518084526020808501808196508360051b8101915082860160005b858110156149e55782840389526149d38483516141d5565b988501989350908401906001016149bb565b5091979650505050505050565b6001600160a01b038616815260a060208201819052600090614a169083018761499d565b8281036040840152614a28818761499d565b90508281036060840152614a3c818661499d565b91505082151560808301529695505050505050565b600060018060a01b03808616835260606020840152614a7360608401866141d5565b9150808416604084015250949350505050565b606081526000614a99606083018661499d565b8281036020840152614aab818661499d565b915050826040830152949350505050565b600081614acb57614acb6147f6565b506000190190565b60008251614ae58184602087016141b1565b9190910192915050565b601f821115610bbc57600081815260208120601f850160051c81016020861015614b165750805b601f850160051c820191505b8181101561158a57828155600101614b22565b81516001600160401b03811115614b4e57614b4e613fb8565b614b6281614b5c8454614946565b84614aef565b602080601f831160018114614b975760008415614b7f5750858301515b600019600386901b1c1916600185901b17855561158a565b600085815260208120601f198616915b82811015614bc657888601518255948401946001909101908401614ba7565b5085821015614be45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b828152604060208201526000614c0d60408301846141d5565b949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b80820180821115610919576109196147f6565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614cab8160178501602088016141b1565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614cdc8160288401602088016141b1565b01602801949350505050565b8082028115828204841417610919576109196147f6565b634e487b7160e01b600052602160045260246000fdfe5496787fc1ebdfeba375028c1865f13fbb1d63c0caa356ccc1b29a80f3ebd6229f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a164736f6c6343000811000a", - "deployedBytecode": "0x6080604052600436106102935760003560e01c806391d148541161015a578063cc2a9a5b116100c1578063d7db74c71161007a578063d7db74c714610824578063ec52738914610837578063f2fde38b14610857578063f5243bc414610877578063f940e38514610897578063ffa1ad74146108b757600080fd5b8063cc2a9a5b14610762578063cc2c3fc414610782578063ceeb4f50146107a2578063d1f5692c146107c2578063d5391393146107e2578063d547741f1461080457600080fd5b8063a3f4df7e11610113578063a3f4df7e14610675578063a849d65c146106c2578063aa271e1a146106e2578063b0aa98c714610702578063b3ab15fb14610722578063b9998a241461074257600080fd5b806391d14854146105cb578063983b2d56146105eb578063986502751461060b57806399e0dd7c14610620578063a217fddf14610640578063a3a3f7f61461065557600080fd5b80635c975abb116101fe57806371e2a657116101b757806371e2a6571461052557806377a2a5891461054557806381c81d35146105655780638456cb59146105785780638da5cb5b1461058d578063906cecc1146105ab57600080fd5b80635c975abb146104885780635cd7e3b31461049d5780635e22cd86146104bd5780635fc1964f146104dd578063634486da146104fd578063715018a61461051057600080fd5b806336568abe1161025057806336568abe1461038d5780633f41b614146103ad5780633f4ba83a146103e557806351cff8d9146103fa578063572b6c051461041a5780635b6fa8db1461046857600080fd5b806301ffc9a7146102985780631edb948e146102cd578063248a9ca3146102ef578063268b15ed1461032d5780632f2ff15d1461034d5780633092afd51461036d575b600080fd5b3480156102a457600080fd5b506102b86102b3366004613c49565b6108e8565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102ed6102e8366004613c98565b61091f565b005b3480156102fb57600080fd5b5061031f61030a366004613cc4565b60009081526097602052604090206001015490565b6040519081526020016102c4565b34801561033957600080fd5b506102ed610348366004613d1e565b610b04565b34801561035957600080fd5b506102ed610368366004613d89565b610b97565b34801561037957600080fd5b506102ed610388366004613db9565b610bc1565b34801561039957600080fd5b506102ed6103a8366004613d89565b610bd5565b3480156103b957600080fd5b5060c9546103cd906001600160a01b031681565b6040516001600160a01b0390911681526020016102c4565b3480156103f157600080fd5b506102ed610c63565b34801561040657600080fd5b506102ed610415366004613db9565b610c75565b34801561042657600080fd5b506102b8610435366004613db9565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e546001600160a01b0390811691161490565b34801561047457600080fd5b5060cc546103cd906001600160a01b031681565b34801561049457600080fd5b506102b8610d15565b3480156104a957600080fd5b506102ed6104b8366004613e28565b610d2b565b3480156104c957600080fd5b506102ed6104d8366004613ee7565b610f8f565b3480156104e957600080fd5b506102ed6104f8366004614021565b6111dd565b6102ed61050b366004613db9565b611225565b34801561051c57600080fd5b506102ed6112e8565b34801561053157600080fd5b506102ed610540366004614021565b6112fa565b34801561055157600080fd5b5060ce546103cd906001600160a01b031681565b6102ed610573366004613db9565b611342565b34801561058457600080fd5b506102ed6113bf565b34801561059957600080fd5b506033546001600160a01b03166103cd565b3480156105b757600080fd5b506102ed6105c63660046140bf565b6113cf565b3480156105d757600080fd5b506102b86105e6366004613d89565b611455565b3480156105f757600080fd5b506102ed610606366004613db9565b611480565b34801561061757600080fd5b506102ed611491565b34801561062c57600080fd5b506102ed61063b36600461411a565b6114ab565b34801561064c57600080fd5b5061031f600081565b34801561066157600080fd5b506102ed61067036600461415b565b611592565b34801561068157600080fd5b506106b5604051806040016040528060148152602001732aa7299d1026b4b73a34b7339026b0b730b3b2b960611b81525081565b6040516102c49190614201565b3480156106ce57600080fd5b5060cb546103cd906001600160a01b031681565b3480156106ee57600080fd5b506102b86106fd366004613db9565b6115db565b34801561070e57600080fd5b506102b861071d366004613cc4565b6115f5565b34801561072e57600080fd5b506102ed61073d366004613db9565b611653565b34801561074e57600080fd5b506102ed61075d366004613db9565b61167d565b34801561076e57600080fd5b506102ed61077d366004614214565b6116c2565b34801561078e57600080fd5b5060ca546103cd906001600160a01b031681565b3480156107ae57600080fd5b506102ed6107bd366004614296565b611b60565b3480156107ce57600080fd5b506102ed6107dd36600461434b565b611c04565b3480156107ee57600080fd5b5061031f600080516020614d3683398151915281565b34801561081057600080fd5b506102ed61081f366004613d89565b611cbb565b6102ed610832366004614380565b611ce0565b34801561084357600080fd5b506102ed610852366004613cc4565b611e70565b34801561086357600080fd5b506102ed610872366004613db9565b611ee2565b34801561088357600080fd5b506102ed610892366004614475565b611efe565b3480156108a357600080fd5b506102ed6108b236600461458d565b6120b0565b3480156108c357600080fd5b506106b5604051806040016040528060058152602001640302e352e360dc1b81525081565b60006001600160e01b03198216637965db0b60e01b148061091957506301ffc9a760e01b6001600160e01b03198316145b92915050565b61092a6106fd61222c565b61094f5760405162461bcd60e51b8152600401610946906145bb565b60405180910390fd5b60c95460405163baef73e960e01b8152600481018390526000916001600160a01b03169063baef73e990602401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd91906145f0565b9050806001600160401b0316600003610a245760405162461bcd60e51b815260206004820152602360248201527f4d696e74696e674d616e616765723a20544f4b454e5f4e4f545f455850495241604482015262424c4560e81b6064820152608401610946565b806001600160401b0316836001600160401b031611610a915760405162461bcd60e51b815260206004820152602360248201527f4d696e74696e674d616e616765723a204558504952595f4e4f545f455854454e60448201526211115160ea1b6064820152608401610946565b60c954604051631fb9763760e11b81526001600160401b0385166004820152602481018490526001600160a01b0390911690633f72ec6e906044015b600060405180830381600087803b158015610ae757600080fd5b505af1158015610afb573d6000803e3d6000fd5b50505050505050565b8282828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250610b47935085925084915061223b565b610b4f610d15565b15610b6c5760405162461bcd60e51b81526004016109469061460d565b6060610afb610b7961222c565b610b8c88610b878989612409565b612435565b838460006001612546565b600082815260976020526040902060010154610bb281612a9a565b610bbc8383612aab565b505050565b610bc9612b32565b610bd281612bab565b50565b610bdd61222c565b6001600160a01b0316816001600160a01b031614610c555760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610946565b610c5f8282612bc3565b5050565b610c6b612b32565b610c73612c48565b565b610c7d612b32565b6001600160a01b038116610c9057600080fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610cc8573d6000803e3d6000fd5b50604080516001600160a01b03841681526020810183905260008183015290517e1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a9181900360600190a15050565b600080516020614d168339815191525460ff1690565b610d358688614637565b8051600203610d6a57610d496106fd61222c565b610d655760405162461bcd60e51b815260040161094690614701565b610eaf565b6000610d7582612cf0565b60c9549092506001600160a01b0316905063430c2081610d9361222c565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381865afa158015610dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e029190614745565b80610e91575060c95460ce5460405163430c208160e01b81526001600160a01b0391821660048201526024810184905291169063430c208190604401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190614745565b8015610e915750610e916106fd61222c565b610ead5760405162461bcd60e51b815260040161094690614762565b505b610eb98789614637565b6000600282511015610edd5760405162461bcd60e51b8152600401610946906147b1565b610f32610f1160008460018651610ef4919061480c565b81518110610f0457610f0461481f565b6020026020010151612d2b565b83600081518110610f2457610f2461481f565b60200260200101518361223b565b610f3a610d15565b15610f575760405162461bcd60e51b81526004016109469061460d565b610f818b610f658b8d614637565b610f6f8a8c614637565b610f79898b614637565b600089612546565b505050505050505050505050565b610f998789614637565b8051600203610fce57610fad6106fd61222c565b610fc95760405162461bcd60e51b815260040161094690614701565b611113565b6000610fd982612cf0565b60c9549092506001600160a01b0316905063430c2081610ff761222c565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381865afa158015611042573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110669190614745565b806110f5575060c95460ce5460405163430c208160e01b81526001600160a01b0391821660048201526024810184905291169063430c208190604401602060405180830381865afa1580156110bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e39190614745565b80156110f557506110f56106fd61222c565b6111115760405162461bcd60e51b815260040161094690614762565b505b61111d888a614637565b836001600160401b03166002825110156111495760405162461bcd60e51b8152600401610946906147b1565b611160610f1160008460018651610ef4919061480c565b611168610d15565b156111855760405162461bcd60e51b81526004016109469061460d565b60028a146111a55760405162461bcd60e51b815260040161094690614835565b6111ce8c6111b38c8e614637565b6111bd8b8d614637565b6111c78a8c614637565b8989612546565b50505050505050505050505050565b6111e5612b32565b60005b8151811015610c5f576112138282815181106112065761120661481f565b6020026020010151612bab565b8061121d8161487b565b9150506111e8565b6112306106fd61222c565b61124c5760405162461bcd60e51b8152600401610946906145bb565b6001600160a01b0381166112a25760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d5054590000006044820152606401610946565b6112ab81612ddf565b6112b3611491565b6040516001600160a01b038216903480156108fc02916000818181858888f19350505050158015610c5f573d6000803e3d6000fd5b6112f0612b32565b610c736000612df7565b611302612b32565b60005b8151811015610c5f576113308282815181106113235761132361481f565b6020026020010151612ddf565b8061133a8161487b565b915050611305565b61134d6106fd61222c565b6113695760405162461bcd60e51b8152600401610946906145bb565b6001600160a01b0381166112ab5760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d5054590000006044820152606401610946565b6113c7612b32565b610c73612e49565b8282828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250611412935085925084915061223b565b61141a610d15565b156114375760405162461bcd60e51b81526004016109469061460d565b606061144b87610b8c88610b878989612409565b5050505050505050565b60009182526097602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611488612b32565b610bd281612ddf565b610c73600080516020614d368339815191526103a861222c565b6114b3612b32565b60c954604051632678375f60e21b81526001600160a01b03909116906399e0dd7c906114e59085908590600401614894565b600060405180830381600087803b1580156114ff57600080fd5b505af1158015611513573d6000803e3d6000fd5b505060cb546001600160a01b0316159150610c5f90505760cb54604051632678375f60e21b81526001600160a01b03909116906399e0dd7c9061155c9085908590600401614894565b600060405180830381600087803b15801561157657600080fd5b505af115801561158a573d6000803e3d6000fd5b505050505050565b61159a612b32565b610bbc83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612eb1915050565b6000610919600080516020614d3683398151915283611455565b604080517f1ec047073e2c8b15660901dbfdb6e3ff6365bd699dd9f95dcc6eab5448bebd696020820152908101829052600090611649906060015b6040516020818303038152906040528051906020012090565b5460ff1692915050565b61165b612b32565b60ce80546001600160a01b0319166001600160a01b0392909216919091179055565b611685612b32565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e80546001600160a01b0319166001600160a01b03831617905550565b600054610100900460ff16158080156116e25750600054600160ff909116105b806116fc5750303b1580156116fc575060005460ff166001145b61175f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610946565b6000805460ff191660011790558015611782576000805461ff0019166101001790555b60c980546001600160a01b03199081166001600160a01b038a81169190911790925560ca8054821689841617905560cb8054821688841617905560cc8054821687841617905560ce80549091169185169190911790556117e0612fd1565b6117e8613008565b6117f182613041565b6117f9613068565b604080516103008101825260066102c082018181526563727970746f60d01b6102e0840152825282518084018452818152651dd85b1b195d60d21b602082810191909152808401919091528351808501855260018152600f60fb1b8183015283850152835180850185526003808252621b999d60ea1b82840152606085019190915284518086018652600a815269313637b1b5b1b430b4b760b11b818401526080850152845180860186526007808252663134ba31b7b4b760c91b8285015260a0860191909152855180870187528281526207070760eb1b8185015260c0860152855180870187528281526264616f60e81b8185015260e086015285518087018752918252621e9a5b60ea1b8284015261010085019190915284518086018652908152663837b63cb3b7b760c91b8183015261012084015283518085018552600b81526a756e73746f707061626c6560a81b81830152610140840152835180850185528281526535b632bb32b960d11b8183015261016084015283518085018552600280825261686960f01b8284015261018085019190915284518086018652838152656b726573757360d01b818401526101a085015284518086018652600580825264616e696d6560d81b828501526101c086019190915285518087018752818152646d616e676160d81b818501526101e086015285518087018752600981526862696e616e6365757360b81b8185015261020086015285518087018752818152647265616c6d60d81b818501526102208601528551808701875291825261676f60f01b82840152610240850191909152845180860186526008815267185b1d1a5b5a5cdd60c21b818401526102608501528451808601865290815264707564677960d81b8183015261028084015283518085019094529083526530bab9ba34b760d11b908301526102a081019190915260005b6016811015611aea57611ad8828260168110611acc57611acc61481f565b60200201516000612eb1565b80611ae28161487b565b915050611aae565b50611b1160405180604001604052806003815260200162636f6d60e81b8152506001612eb1565b508015610afb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250611ba3935085925084915061223b565b611bab610d15565b15611bc85760405162461bcd60e51b81526004016109469061460d565b611bf78a611bda8b610b878c8c612409565b611be4888a614637565b611bee8789614637565b60006001612546565b5050505050505050505050565b611c0c612b32565b60005b81811015610bbc5760c9546001600160a01b03166350960239848484818110611c3a57611c3a61481f565b9050602002016020810190611c4f9190613db9565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b505050508080611cb39061487b565b915050611c0f565b600082815260976020526040902060010154611cd681612a9a565b610bbc8383612bc3565b611cea898b614637565b6000600282511015611d0e5760405162461bcd60e51b8152600401610946906147b1565b611d25610f1160008460018651610ef4919061480c565b611d2d610d15565b15611d4a5760405162461bcd60e51b81526004016109469061460d565b60028b14611d6a5760405162461bcd60e51b815260040161094690614835565b611db08d8d8d898960008a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130a892505050565b84341015611e005760405162461bcd60e51b815260206004820181905260248201527f4d696e74696e674d616e616765723a204e4f545f454e4f5547485f46554e44536044820152606401610946565b611e128d8d8d8d8d8d8d8c6000613268565b843411156111ce57611e2261222c565b6001600160a01b03166108fc611e38873461480c565b6040518115909202916000818181858888f19350505050158015611e60573d6000803e3d6000fd5b5050505050505050505050505050565b611e78612b32565b611e8181613324565b611e9d5760405162461bcd60e51b8152600401610946906148c3565b600081815260cd60205260408120611eb491613bfb565b60405181907f0aa1aff0f830e739d86baf0e6624d6763da02f7733575e0e463886cd062dea6a90600090a250565b611eea612b32565b611ef38161334a565b610bd26000826133c0565b611f088a8c614637565b6000600282511015611f2c5760405162461bcd60e51b8152600401610946906147b1565b611f43610f1160008460018651610ef4919061480c565b611f4b610d15565b15611f685760405162461bcd60e51b81526004016109469061460d565b60028c14611f885760405162461bcd60e51b815260040161094690614835565b611fcd8e8e8e8a898b8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130a892505050565b856001600160a01b03166323b872dd611fe461222c565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018890526064016020604051808303816000875af1158015612037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205b9190614745565b61209f5760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881313d5d7d31155915317d1905253605a1b6044820152606401610946565b611e608e8e8e8e8e8e8e8c8e613268565b6120b8612b32565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156120ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121239190614905565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015612176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219a9190614745565b6121de5760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881313d5d7d31155915317d1905253605a1b6044820152606401610946565b604080516001600160a01b0384811682526020820184905285168183015290517e1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a9181900360600190a1505050565b60006122366133ca565b905090565b61224483613324565b6122605760405162461bcd60e51b8152600401610946906148c3565b600083815260cf602052604090205460ff161515811515146122d35760405162461bcd60e51b815260206004820152602660248201527f4d696e74696e674d616e616765723a20544c445f455850495241424c455f4d496044820152650a69a82a886960d31b6064820152608401610946565b60006123068360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050600a816000015111156123ae57612331612325826000600a613410565b80516020909101512090565b7fb551e0305c8163b812374b8e78b577c77f226f6f10c5ad03e52699578fbc34b8036123ae5760405162461bcd60e51b815260206004820152602660248201527f4d696e74696e674d616e616765723a20544f4b454e5f4c4142454c5f50524f4860448201526512509255115160d21b6064820152608401610946565b6123b78361344f565b6124035760405162461bcd60e51b815260206004820152601d60248201527f4d696e74696e674d616e616765723a204c4142454c5f494e56414c49440000006044820152606401610946565b50505050565b6060828260405160200161241e92919061491e565b604051602081830303815290604052905092915050565b604080516002808252606082810190935260009190816020015b606081526020019060019003908161244f579050509050828160008151811061247a5761247a61481f565b602002602001018190525060cd600085815260200190815260200160002080546124a390614946565b80601f01602080910402602001604051908101604052809291908181526020018280546124cf90614946565b801561251c5780601f106124f15761010080835404028352916020019161251c565b820191906000526020600020905b8154815290600101906020018083116124ff57829003601f168201915b5050505050816001815181106125345761253461481f565b60209081029190910101529392505050565b600080600061255488612cf0565b91509150838015612566575060028851115b80156125e8575060c9546040516331a9108f60e11b8152600481018390526001600160a01b038b8116921690636352211e90602401602060405180830381865afa1580156125b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125dc9190614980565b6001600160a01b031614155b156126485760405162461bcd60e51b815260206004820152602a60248201527f4d696e74696e674d616e616765723a20524556455253455f5245434f52445f4e60448201526913d517d0531313d5d15160b21b6064820152608401610946565b60c954604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e7990602401602060405180830381865afa158015612691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b59190614745565b80156127a6575060c9546040516331a9108f60e11b81526004810184905230916001600160a01b031690636352211e90602401602060405180830381865afa158015612705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127299190614980565b6001600160a01b031614806127a6575060c95460405163d9548e5360e01b8152600481018490526001600160a01b039091169063d9548e5390602401602060405180830381865afa158015612782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a69190614745565b15612897576001600160401b038516156128285760c954604051631fb9763760e11b81526001600160401b0387166004820152602481018490526001600160a01b0390911690633f72ec6e90604401600060405180830381600087803b15801561280f57600080fd5b505af1158015612823573d6000803e3d6000fd5b505050505b60c954604051630fb8df0360e11b81526001600160a01b0390911690631f71be0690612860908c908c908c908c908b906004016149f2565b600060405180830381600087803b15801561287a57600080fd5b505af115801561288e573d6000803e3d6000fd5b50505050612a8e565b6128a0826135b3565b6128a988613612565b80156128b6575087516002145b80156128c957506001600160401b038516155b156129a75760ca5488516001600160a01b039091169063c36c2125908b908b906000906128f8576128f861481f565b602090810291909101015160cc546040516001600160e01b031960e086901b1681526129329392916001600160a01b031690600401614a51565b600060405180830381600087803b15801561294c57600080fd5b505af1158015612960573d6000803e3d6000fd5b505050506000875111156129a25760cc54604051633a0deb9d60e21b81526001600160a01b039091169063e837ae7490612860908a908a908790600401614a86565b612a8e565b60c95460405163ba5d40b760e01b81526001600160a01b039091169063ba5d40b7906129df908c908c908c908c908b906004016149f2565b600060405180830381600087803b1580156129f957600080fd5b505af1158015612a0d573d6000803e3d6000fd5b505050506001600160401b03851615612a8e5760c954604051631fb9763760e11b81526001600160401b0387166004820152602481018490526001600160a01b0390911690633f72ec6e90604401600060405180830381600087803b158015612a7557600080fd5b505af1158015612a89573d6000803e3d6000fd5b505050505b50979650505050505050565b610bd281612aa661222c565b61366c565b612ab58282611455565b610c5f5760008281526097602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612aee61222c565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612b3a61222c565b6001600160a01b0316612b556033546001600160a01b031690565b6001600160a01b031614610c735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610946565b610bd2600080516020614d3683398151915282611cbb565b612bcd8282611455565b15610c5f5760008281526097602090815260408083206001600160a01b03851684529091529020805460ff19169055612c0461222c565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b612c50610d15565b612c935760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881393d517d4105554d15160621b6044820152606401610946565b600080516020614d16833981519152805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612cd361222c565b6040516001600160a01b03909116815260200160405180910390a1565b805160009081905b8015612d2557829150612d118285610ef460018561480c565b925080612d1d81614abc565b915050612cf8565b50915091565b60008151600003612d7e5760405162461bcd60e51b815260206004820152601b60248201527f4d696e74696e674d616e616765723a204c4142454c5f454d50545900000000006044820152606401610946565b8282604051602001612d909190614ad3565b60405160208183030381529060405280519060200120604051602001612dc0929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b610bd2600080516020614d36833981519152826133c0565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612e51610d15565b15612e6e5760405162461bcd60e51b81526004016109469061460d565b600080516020614d16833981519152805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612cd361222c565b6000612ebe600084612d2b565b600081815260cd60205260409020909150612ed98482614b35565b50600081815260cf602052604090819020805460ff19168415151790555181907f4fce6f6e172b04eaa80325d8e3b0180a34945000f3e214605039e8420fdf898090612f26908690614201565b60405180910390a260c954604051634f558e7960e01b8152600481018390526001600160a01b0390911690634f558e7990602401602060405180830381865afa158015612f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9b9190614745565b610bbc5760c9546040516307befae360e51b81526001600160a01b039091169063f7df5c6090610acd9084908790600401614bf4565b600054610100900460ff16612ff85760405162461bcd60e51b815260040161094690614c15565b610c7361300361222c565b612df7565b600054610100900460ff1661302f5760405162461bcd60e51b815260040161094690614c15565b610c73600061303c61222c565b6133c0565b600054610100900460ff166116855760405162461bcd60e51b815260040161094690614c15565b600054610100900460ff1661308f5760405162461bcd60e51b815260040161094690614c15565b600080516020614d16833981519152805460ff19169055565b60006130bc6130b78789614637565b612cf0565b506040516bffffffffffffffffffffffff1930606090811b821660208401524660348401528b811b82166054840152606883018490526001600160c01b031960c08a901b1660888401526090830188905286901b1660b08201529091506000906131989084906131929060c401604051602081830303815290604052805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b906136d0565b90506131a3816115db565b6131fb5760405162461bcd60e51b8152602060048201526024808201527f4d696e74696e674d616e616765723a205349474e45525f49535f4e4f545f4d49604482015263272a22a960e11b6064820152608401610946565b42866001600160401b03161161325d5760405162461bcd60e51b815260206004820152602160248201527f4d696e74696e674d616e616765723a20455850495245445f5349474e415455526044820152604560f81b6064820152608401610946565b505050505050505050565b60006132af8a6132788a8c614637565b613282898b614637565b61328c888a614637565b60008f6001600160a01b03166132a061222c565b6001600160a01b031614612546565b9050896001600160a01b03166132c361222c565b6001600160a01b0316827fa545b6fd3355e8d57f8c8147bafe740545bd3ea1f94bef2576a6d532a7c3b60586866040516133109291909182526001600160a01b0316602082015260400190565b60405180910390a450505050505050505050565b600081815260cd60205260408120805482919061334090614946565b9050119050919050565b613352612b32565b6001600160a01b0381166133b75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610946565b610bd281612df7565b610c5f8282612aab565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e546000906001600160a01b0316330361340b575060331936013560601c90565b503390565b604080518082019091526000808252602082015260405180604001604052808381526020018486602001516134459190614c60565b9052949350505050565b6000815160000361346257506000919050565b60208201805160f81c60308110801590613480575060398160ff1611155b1580156134a2575060618160ff16101580156134a05750607a8160ff1611155b155b156134b1575060009392505050565b8351600181111561351f576134d3836134cb60018461480c565b015160f81c90565b915060308260ff16101580156134ed575060398260ff1611155b15801561350f575060618260ff161015801561350d5750607a8260ff1611155b155b1561351f57506000949350505050565b60015b61352d60018361480c565b8110156135a7578381015160f81c9250602d8314801590613563575060308360ff1610158015613561575060398360ff1611155b155b8015613584575060618360ff16101580156135825750607a8360ff1611155b155b156135955750600095945050505050565b8061359f8161487b565b915050613522565b50600195945050505050565b6135bc816115f5565b156136095760405162461bcd60e51b815260206004820152601d60248201527f4d696e74696e674d616e616765723a20544f4b454e5f424c4f434b45440000006044820152606401610946565b610bd2816136f4565b60008061362960008460018651610ef4919061480c565b60ca549091506001600160a01b0316158015906136655750807f0f4a10a4f46c288cea365fcf45cccf0e9d901b945b9829ccdb54c10dc3cb7a6f145b9392505050565b6136768282611455565b610c5f5761368e816001600160a01b03166014613778565b613699836020613778565b6040516020016136aa929190614c73565b60408051601f198184030181529082905262461bcd60e51b825261094691600401614201565b60008060006136df8585613913565b915091506136ec81613958565b509392505050565b604080517f1ec047073e2c8b15660901dbfdb6e3ff6365bd699dd9f95dcc6eab5448bebd69602082015290810182905260019061373390606001611630565b805460ff19169115159190911790556040518181527f2ce5d9351b1d590d5a066db0d2dc7602d55f092506a83a7ee8c4d78ee357d75a9060200160405180910390a150565b60606000613787836002614ce8565b613792906002614c60565b6001600160401b038111156137a9576137a9613fb8565b6040519080825280601f01601f1916602001820160405280156137d3576020820181803683370190505b509050600360fc1b816000815181106137ee576137ee61481f565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061381d5761381d61481f565b60200101906001600160f81b031916908160001a9053506000613841846002614ce8565b61384c906001614c60565b90505b60018111156138c4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106138805761388061481f565b1a60f81b8282815181106138965761389661481f565b60200101906001600160f81b031916908160001a90535060049490941c936138bd81614abc565b905061384f565b5083156136655760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610946565b60008082516041036139495760208301516040840151606085015160001a61393d87828585613b0e565b94509450505050613951565b506000905060025b9250929050565b600081600481111561396c5761396c614cff565b036139745750565b600181600481111561398857613988614cff565b036139d55760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610946565b60028160048111156139e9576139e9614cff565b03613a365760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610946565b6003816004811115613a4a57613a4a614cff565b03613aa25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610946565b6004816004811115613ab657613ab6614cff565b03610bd25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610946565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613b455750600090506003613bf2565b8460ff16601b14158015613b5d57508460ff16601c14155b15613b6e5750600090506004613bf2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613bc2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613beb57600060019250925050613bf2565b9150600090505b94509492505050565b508054613c0790614946565b6000825580601f10613c17575050565b601f016020900490600052602060002090810190610bd291905b80821115613c455760008155600101613c31565b5090565b600060208284031215613c5b57600080fd5b81356001600160e01b03198116811461366557600080fd5b6001600160401b0381168114610bd257600080fd5b8035613c9381613c73565b919050565b60008060408385031215613cab57600080fd5b8235613cb681613c73565b946020939093013593505050565b600060208284031215613cd657600080fd5b5035919050565b60008083601f840112613cef57600080fd5b5081356001600160401b03811115613d0657600080fd5b60208301915083602082850101111561395157600080fd5b600080600060408486031215613d3357600080fd5b8335925060208401356001600160401b03811115613d5057600080fd5b613d5c86828701613cdd565b9497909650939450505050565b6001600160a01b0381168114610bd257600080fd5b8035613c9381613d69565b60008060408385031215613d9c57600080fd5b823591506020830135613dae81613d69565b809150509250929050565b600060208284031215613dcb57600080fd5b813561366581613d69565b60008083601f840112613de857600080fd5b5081356001600160401b03811115613dff57600080fd5b6020830191508360208260051b850101111561395157600080fd5b8015158114610bd257600080fd5b60008060008060008060008060a0898b031215613e4457600080fd5b8835613e4f81613d69565b975060208901356001600160401b0380821115613e6b57600080fd5b613e778c838d01613dd6565b909950975060408b0135915080821115613e9057600080fd5b613e9c8c838d01613dd6565b909750955060608b0135915080821115613eb557600080fd5b50613ec28b828c01613dd6565b9094509250506080890135613ed681613e1a565b809150509295985092959890939650565b600080600080600080600080600060c08a8c031215613f0557600080fd5b8935613f1081613d69565b985060208a01356001600160401b0380821115613f2c57600080fd5b613f388d838e01613dd6565b909a50985060408c0135915080821115613f5157600080fd5b613f5d8d838e01613dd6565b909850965060608c0135915080821115613f7657600080fd5b50613f838c828d01613dd6565b90955093505060808a0135613f9781613c73565b915060a08a0135613fa781613e1a565b809150509295985092959850929598565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613ff657613ff6613fb8565b604052919050565b60006001600160401b0382111561401757614017613fb8565b5060051b60200190565b6000602080838503121561403457600080fd5b82356001600160401b0381111561404a57600080fd5b8301601f8101851361405b57600080fd5b803561406e61406982613ffe565b613fce565b81815260059190911b8201830190838101908783111561408d57600080fd5b928401925b828410156140b45783356140a581613d69565b82529284019290840190614092565b979650505050505050565b600080600080606085870312156140d557600080fd5b84356140e081613d69565b93506020850135925060408501356001600160401b0381111561410257600080fd5b61410e87828801613cdd565b95989497509550505050565b6000806020838503121561412d57600080fd5b82356001600160401b0381111561414357600080fd5b61414f85828601613cdd565b90969095509350505050565b60008060006040848603121561417057600080fd5b83356001600160401b0381111561418657600080fd5b61419286828701613cdd565b90945092505060208401356141a681613e1a565b809150509250925092565b60005b838110156141cc5781810151838201526020016141b4565b50506000910152565b600081518084526141ed8160208601602086016141b1565b601f01601f19169290920160200192915050565b60208152600061366560208301846141d5565b60008060008060008060c0878903121561422d57600080fd5b863561423881613d69565b9550602087013561424881613d69565b9450604087013561425881613d69565b9350606087013561426881613d69565b9250608087013561427881613d69565b915060a087013561428881613d69565b809150509295509295509295565b60008060008060008060008060a0898b0312156142b257600080fd5b88356142bd81613d69565b97506020890135965060408901356001600160401b03808211156142e057600080fd5b6142ec8c838d01613cdd565b909850965060608b013591508082111561430557600080fd5b6143118c838d01613dd6565b909650945060808b013591508082111561432a57600080fd5b506143378b828c01613dd6565b999c989b5096995094979396929594505050565b6000806020838503121561435e57600080fd5b82356001600160401b0381111561437457600080fd5b61414f85828601613dd6565b600080600080600080600080600080600060e08c8e0312156143a157600080fd5b6143aa8c613d7e565b9a506001600160401b038060208e013511156143c557600080fd5b6143d58e60208f01358f01613dd6565b909b50995060408d01358110156143eb57600080fd5b6143fb8e60408f01358f01613dd6565b909950975060608d013581101561441157600080fd5b6144218e60608f01358f01613dd6565b909750955061443260808e01613c88565b945060a08d013593508060c08e0135111561444c57600080fd5b5061445d8d60c08e01358e01613cdd565b81935080925050509295989b509295989b9093969950565b6000806000806000806000806000806000806101008d8f03121561449857600080fd5b6144a18d613d7e565b9b506001600160401b0360208e013511156144bb57600080fd5b6144cb8e60208f01358f01613dd6565b909b5099506001600160401b0360408e013511156144e857600080fd5b6144f88e60408f01358f01613dd6565b90995097506001600160401b0360608e0135111561451557600080fd5b6145258e60608f01358f01613dd6565b909750955061453660808e01613c88565b945061454460a08e01613d7e565b935060c08d013592506001600160401b0360e08e0135111561456557600080fd5b6145758e60e08f01358f01613cdd565b81935080925050509295989b509295989b509295989b565b600080604083850312156145a057600080fd5b82356145ab81613d69565b91506020830135613dae81613d69565b6020808252818101527f4d696e746572526f6c653a2043414c4c45525f49535f4e4f545f4d494e544552604082015260600190565b60006020828403121561460257600080fd5b815161366581613c73565b60208082526010908201526f14185d5cd8589b194e8814105554d15160821b604082015260600190565b600061464561406984613ffe565b80848252602080830192508560051b85013681111561466357600080fd5b855b818110156146f55780356001600160401b03808211156146855760008081fd5b90880190601f368184011261469a5760008081fd5b8235828111156146ac576146ac613fb8565b6146bd818301601f19168801613fce565b925080835236878286010111156146d657600091508182fd5b8087850188850137600090830187015250865250938201938201614665565b50919695505050505050565b60208082526024908201527f4d696e74696e674d616e616765723a2043414c4c45525f49535f4e4f545f4d49604082015263272a22a960e11b606082015260800190565b60006020828403121561475757600080fd5b815161366581613e1a565b6020808252602f908201527f4d696e74696e674d616e616765723a2053454e4445525f49535f4e4f545f415060408201526e282927ab22a22fa7a92fa7aba722a960891b606082015260800190565b60208082526025908201527f4d696e74696e674d616e616765723a204c4142454c535f4c454e4754485f42456040820152642627abaf9960d91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610919576109196147f6565b634e487b7160e01b600052603260045260246000fd5b60208082526026908201527f4d696e74696e674d616e616765723a20535542444f4d41494e535f4e4f545f41604082015265131313d5d15160d21b606082015260800190565b60006001820161488d5761488d6147f6565b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208082526022908201527f4d696e74696e674d616e616765723a20544c445f4e4f545f5245474953544552604082015261115160f21b606082015260800190565b60006020828403121561491757600080fd5b5051919050565b6b756e732d646576746573742d60a01b81528183600c83013760009101600c01908152919050565b600181811c9082168061495a57607f821691505b60208210810361497a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561499257600080fd5b815161366581613d69565b600081518084526020808501808196508360051b8101915082860160005b858110156149e55782840389526149d38483516141d5565b988501989350908401906001016149bb565b5091979650505050505050565b6001600160a01b038616815260a060208201819052600090614a169083018761499d565b8281036040840152614a28818761499d565b90508281036060840152614a3c818661499d565b91505082151560808301529695505050505050565b600060018060a01b03808616835260606020840152614a7360608401866141d5565b9150808416604084015250949350505050565b606081526000614a99606083018661499d565b8281036020840152614aab818661499d565b915050826040830152949350505050565b600081614acb57614acb6147f6565b506000190190565b60008251614ae58184602087016141b1565b9190910192915050565b601f821115610bbc57600081815260208120601f850160051c81016020861015614b165750805b601f850160051c820191505b8181101561158a57828155600101614b22565b81516001600160401b03811115614b4e57614b4e613fb8565b614b6281614b5c8454614946565b84614aef565b602080601f831160018114614b975760008415614b7f5750858301515b600019600386901b1c1916600185901b17855561158a565b600085815260208120601f198616915b82811015614bc657888601518255948401946001909101908401614ba7565b5085821015614be45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b828152604060208201526000614c0d60408301846141d5565b949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b80820180821115610919576109196147f6565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614cab8160178501602088016141b1565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614cdc8160288401602088016141b1565b01602801949350505050565b8082028115828204841417610919576109196147f6565b634e487b7160e01b600052602160045260246000fdfe5496787fc1ebdfeba375028c1865f13fbb1d63c0caa356ccc1b29a80f3ebd6229f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a164736f6c6343000811000a", + "bytecode": "0x608060405234801561001057600080fd5b50614ec7806100206000396000f3fe6080604052600436106102ae5760003560e01c8063906cecc111610175578063b9998a24116100dc578063d547741f11610095578063f2fde38b1161006f578063f2fde38b14610892578063f5243bc4146108b2578063f940e385146108d2578063ffa1ad74146108f257600080fd5b8063d547741f1461083f578063d7db74c71461085f578063ec5273891461087257600080fd5b8063b9998a241461077d578063cc2a9a5b1461079d578063cc2c3fc4146107bd578063ceeb4f50146107dd578063d1f5692c146107fd578063d53913931461081d57600080fd5b8063a3a3f7f61161012e578063a3a3f7f614610690578063a3f4df7e146106b0578063a849d65c146106fd578063aa271e1a1461071d578063b0aa98c71461073d578063b3ab15fb1461075d57600080fd5b8063906cecc1146105e657806391d1485414610606578063983b2d5614610626578063986502751461064657806399e0dd7c1461065b578063a217fddf1461067b57600080fd5b80635b6fa8db11610219578063715018a6116101d2578063715018a61461054b57806371e2a6571461056057806377a2a5891461058057806381c81d35146105a05780638456cb59146105b35780638da5cb5b146105c857600080fd5b80635b6fa8db146104a35780635c975abb146104c35780635cd7e3b3146104d85780635e22cd86146104f85780635fc1964f14610518578063634486da1461053857600080fd5b80633092afd51161026b5780633092afd5146103a857806336568abe146103c85780633f41b614146103e85780633f4ba83a1461042057806351cff8d914610435578063572b6c051461045557600080fd5b806301ffc9a7146102b35780631edb948e146102e857806320c5429b1461030a578063248a9ca31461032a578063268b15ed146103685780632f2ff15d14610388575b600080fd5b3480156102bf57600080fd5b506102d36102ce366004613d6b565b610923565b60405190151581526020015b60405180910390f35b3480156102f457600080fd5b50610308610303366004613dba565b61095a565b005b34801561031657600080fd5b50610308610325366004613de6565b610b03565b34801561033657600080fd5b5061035a610345366004613de6565b60009081526097602052604090206001015490565b6040519081526020016102df565b34801561037457600080fd5b50610308610383366004613e40565b610c26565b34801561039457600080fd5b506103086103a3366004613eab565b610cb9565b3480156103b457600080fd5b506103086103c3366004613edb565b610ce3565b3480156103d457600080fd5b506103086103e3366004613eab565b610cf7565b3480156103f457600080fd5b5060c954610408906001600160a01b031681565b6040516001600160a01b0390911681526020016102df565b34801561042c57600080fd5b50610308610d85565b34801561044157600080fd5b50610308610450366004613edb565b610d97565b34801561046157600080fd5b506102d3610470366004613edb565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e546001600160a01b0390811691161490565b3480156104af57600080fd5b5060cc54610408906001600160a01b031681565b3480156104cf57600080fd5b506102d3610e37565b3480156104e457600080fd5b506103086104f3366004613f4a565b610e4d565b34801561050457600080fd5b50610308610513366004614009565b6110b1565b34801561052457600080fd5b50610308610533366004614143565b6112f6565b610308610546366004613edb565b61133e565b34801561055757600080fd5b50610308611401565b34801561056c57600080fd5b5061030861057b366004614143565b611413565b34801561058c57600080fd5b5060ce54610408906001600160a01b031681565b6103086105ae366004613edb565b61145b565b3480156105bf57600080fd5b506103086114d8565b3480156105d457600080fd5b506033546001600160a01b0316610408565b3480156105f257600080fd5b506103086106013660046141e1565b6114e8565b34801561061257600080fd5b506102d3610621366004613eab565b61156e565b34801561063257600080fd5b50610308610641366004613edb565b611599565b34801561065257600080fd5b506103086115aa565b34801561066757600080fd5b5061030861067636600461423c565b6115c4565b34801561068757600080fd5b5061035a600081565b34801561069c57600080fd5b506103086106ab36600461427d565b6116ab565b3480156106bc57600080fd5b506106f0604051806040016040528060148152602001732aa7299d1026b4b73a34b7339026b0b730b3b2b960611b81525081565b6040516102df9190614323565b34801561070957600080fd5b5060cb54610408906001600160a01b031681565b34801561072957600080fd5b506102d3610738366004613edb565b6116f4565b34801561074957600080fd5b506102d3610758366004613de6565b61170e565b34801561076957600080fd5b50610308610778366004613edb565b61176c565b34801561078957600080fd5b50610308610798366004613edb565b611796565b3480156107a957600080fd5b506103086107b8366004614336565b6117db565b3480156107c957600080fd5b5060ca54610408906001600160a01b031681565b3480156107e957600080fd5b506103086107f83660046143b8565b611c79565b34801561080957600080fd5b5061030861081836600461446d565b611d1d565b34801561082957600080fd5b5061035a600080516020614e9b83398151915281565b34801561084b57600080fd5b5061030861085a366004613eab565b611dd4565b61030861086d3660046144a2565b611df9565b34801561087e57600080fd5b5061030861088d366004613de6565b611f89565b34801561089e57600080fd5b506103086108ad366004613edb565b611ffb565b3480156108be57600080fd5b506103086108cd366004614597565b612017565b3480156108de57600080fd5b506103086108ed3660046146af565b6121c9565b3480156108fe57600080fd5b506106f060405180604001604052806005815260200164302e352e3160d81b81525081565b60006001600160e01b03198216637965db0b60e01b148061095457506301ffc9a760e01b6001600160e01b03198316145b92915050565b610965610738612345565b61098a5760405162461bcd60e51b8152600401610981906146dd565b60405180910390fd5b60c95460405163baef73e960e01b8152600481018390526000916001600160a01b03169063baef73e990602401602060405180830381865afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f89190614712565b9050806001600160401b0316600003610a235760405162461bcd60e51b81526004016109819061472f565b806001600160401b0316836001600160401b031611610a905760405162461bcd60e51b815260206004820152602360248201527f4d696e74696e674d616e616765723a204558504952595f4e4f545f455854454e60448201526211115160ea1b6064820152608401610981565b60c954604051631fb9763760e11b81526001600160401b0385166004820152602481018490526001600160a01b0390911690633f72ec6e906044015b600060405180830381600087803b158015610ae657600080fd5b505af1158015610afa573d6000803e3d6000fd5b50505050505050565b610b0e610738612345565b610b2a5760405162461bcd60e51b8152600401610981906146dd565b60c95460405163baef73e960e01b8152600481018390526001600160a01b039091169063baef73e990602401602060405180830381865afa158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b979190614712565b6001600160401b0316600003610bbf5760405162461bcd60e51b81526004016109819061472f565b60c954604051637eee288d60e01b8152306004820152602481018390526001600160a01b0390911690637eee288d90604401600060405180830381600087803b158015610c0b57600080fd5b505af1158015610c1f573d6000803e3d6000fd5b5050505050565b8282828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250610c699350859250849150612354565b610c71610e37565b15610c8e5760405162461bcd60e51b815260040161098190614772565b6060610afa610c9b612345565b610cae88610ca9898961252b565b612557565b838460006001612668565b600082815260976020526040902060010154610cd481612bbc565b610cde8383612bcd565b505050565b610ceb612c54565b610cf481612ccd565b50565b610cff612345565b6001600160a01b0316816001600160a01b031614610d775760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610981565b610d818282612ce5565b5050565b610d8d612c54565b610d95612d6a565b565b610d9f612c54565b6001600160a01b038116610db257600080fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610dea573d6000803e3d6000fd5b50604080516001600160a01b03841681526020810183905260008183015290517e1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a9181900360600190a15050565b600080516020614e7b8339815191525460ff1690565b610e57868861479c565b8051600203610e8c57610e6b610738612345565b610e875760405162461bcd60e51b815260040161098190614866565b610fd1565b6000610e9782612e12565b60c9549092506001600160a01b0316905063430c2081610eb5612345565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381865afa158015610f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2491906148aa565b80610fb3575060c95460ce5460405163430c208160e01b81526001600160a01b0391821660048201526024810184905291169063430c208190604401602060405180830381865afa158015610f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa191906148aa565b8015610fb35750610fb3610738612345565b610fcf5760405162461bcd60e51b8152600401610981906148c7565b505b610fdb878961479c565b6000600282511015610fff5760405162461bcd60e51b815260040161098190614916565b611054611033600084600186516110169190614971565b8151811061102657611026614984565b6020026020010151612e4d565b8360008151811061104657611046614984565b602002602001015183612354565b61105c610e37565b156110795760405162461bcd60e51b815260040161098190614772565b6110a38b6110878b8d61479c565b6110918a8c61479c565b61109b898b61479c565b600089612668565b505050505050505050505050565b6110bb878961479c565b80516002036110f0576110cf610738612345565b6110eb5760405162461bcd60e51b815260040161098190614866565b611235565b60006110fb82612e12565b60c9549092506001600160a01b0316905063430c2081611119612345565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381865afa158015611164573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118891906148aa565b80611217575060c95460ce5460405163430c208160e01b81526001600160a01b0391821660048201526024810184905291169063430c208190604401602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120591906148aa565b80156112175750611217610738612345565b6112335760405162461bcd60e51b8152600401610981906148c7565b505b61123f888a61479c565b836002825110156112625760405162461bcd60e51b815260040161098190614916565b611279611033600084600186516110169190614971565b611281610e37565b1561129e5760405162461bcd60e51b815260040161098190614772565b60028a146112be5760405162461bcd60e51b81526004016109819061499a565b6112e78c6112cc8c8e61479c565b6112d68b8d61479c565b6112e08a8c61479c565b8989612668565b50505050505050505050505050565b6112fe612c54565b60005b8151811015610d815761132c82828151811061131f5761131f614984565b6020026020010151612ccd565b80611336816149e0565b915050611301565b611349610738612345565b6113655760405162461bcd60e51b8152600401610981906146dd565b6001600160a01b0381166113bb5760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d5054590000006044820152606401610981565b6113c481612f01565b6113cc6115aa565b6040516001600160a01b038216903480156108fc02916000818181858888f19350505050158015610d81573d6000803e3d6000fd5b611409612c54565b610d956000612f19565b61141b612c54565b60005b8151811015610d815761144982828151811061143c5761143c614984565b6020026020010151612f01565b80611453816149e0565b91505061141e565b611466610738612345565b6114825760405162461bcd60e51b8152600401610981906146dd565b6001600160a01b0381166113c45760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d5054590000006044820152606401610981565b6114e0612c54565b610d95612f6b565b8282828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525061152b9350859250849150612354565b611533610e37565b156115505760405162461bcd60e51b815260040161098190614772565b606061156487610cae88610ca9898961252b565b5050505050505050565b60009182526097602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6115a1612c54565b610cf481612f01565b610d95600080516020614e9b8339815191526103e3612345565b6115cc612c54565b60c954604051632678375f60e21b81526001600160a01b03909116906399e0dd7c906115fe90859085906004016149f9565b600060405180830381600087803b15801561161857600080fd5b505af115801561162c573d6000803e3d6000fd5b505060cb546001600160a01b0316159150610d8190505760cb54604051632678375f60e21b81526001600160a01b03909116906399e0dd7c9061167590859085906004016149f9565b600060405180830381600087803b15801561168f57600080fd5b505af11580156116a3573d6000803e3d6000fd5b505050505050565b6116b3612c54565b610cde83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612fd3915050565b6000610954600080516020614e9b8339815191528361156e565b604080517f1ec047073e2c8b15660901dbfdb6e3ff6365bd699dd9f95dcc6eab5448bebd696020820152908101829052600090611762906060015b6040516020818303038152906040528051906020012090565b5460ff1692915050565b611774612c54565b60ce80546001600160a01b0319166001600160a01b0392909216919091179055565b61179e612c54565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e80546001600160a01b0319166001600160a01b03831617905550565b600054610100900460ff16158080156117fb5750600054600160ff909116105b806118155750303b158015611815575060005460ff166001145b6118785760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610981565b6000805460ff19166001179055801561189b576000805461ff0019166101001790555b60c980546001600160a01b03199081166001600160a01b038a81169190911790925560ca8054821689841617905560cb8054821688841617905560cc8054821687841617905560ce80549091169185169190911790556118f96130f3565b61190161312a565b61190a82613163565b61191261318a565b604080516103008101825260066102c082018181526563727970746f60d01b6102e0840152825282518084018452818152651dd85b1b195d60d21b602082810191909152808401919091528351808501855260018152600f60fb1b8183015283850152835180850185526003808252621b999d60ea1b82840152606085019190915284518086018652600a815269313637b1b5b1b430b4b760b11b818401526080850152845180860186526007808252663134ba31b7b4b760c91b8285015260a0860191909152855180870187528281526207070760eb1b8185015260c0860152855180870187528281526264616f60e81b8185015260e086015285518087018752918252621e9a5b60ea1b8284015261010085019190915284518086018652908152663837b63cb3b7b760c91b8183015261012084015283518085018552600b81526a756e73746f707061626c6560a81b81830152610140840152835180850185528281526535b632bb32b960d11b8183015261016084015283518085018552600280825261686960f01b8284015261018085019190915284518086018652838152656b726573757360d01b818401526101a085015284518086018652600580825264616e696d6560d81b828501526101c086019190915285518087018752818152646d616e676160d81b818501526101e086015285518087018752600981526862696e616e6365757360b81b8185015261020086015285518087018752818152647265616c6d60d81b818501526102208601528551808701875291825261676f60f01b82840152610240850191909152845180860186526008815267185b1d1a5b5a5cdd60c21b818401526102608501528451808601865290815264707564677960d81b8183015261028084015283518085019094529083526530bab9ba34b760d11b908301526102a081019190915260005b6016811015611c0357611bf1828260168110611be557611be5614984565b60200201516000612fd3565b80611bfb816149e0565b915050611bc7565b50611c2a60405180604001604052806003815260200162636f6d60e81b8152506001612fd3565b508015610afa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250611cbc9350859250849150612354565b611cc4610e37565b15611ce15760405162461bcd60e51b815260040161098190614772565b611d108a611cf38b610ca98c8c61252b565b611cfd888a61479c565b611d07878961479c565b60006001612668565b5050505050505050505050565b611d25612c54565b60005b81811015610cde5760c9546001600160a01b03166350960239848484818110611d5357611d53614984565b9050602002016020810190611d689190613edb565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611da957600080fd5b505af1158015611dbd573d6000803e3d6000fd5b505050508080611dcc906149e0565b915050611d28565b600082815260976020526040902060010154611def81612bbc565b610cde8383612ce5565b611e03898b61479c565b6000600282511015611e275760405162461bcd60e51b815260040161098190614916565b611e3e611033600084600186516110169190614971565b611e46610e37565b15611e635760405162461bcd60e51b815260040161098190614772565b60028b14611e835760405162461bcd60e51b81526004016109819061499a565b611ec98d8d8d898960008a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506131ca92505050565b84341015611f195760405162461bcd60e51b815260206004820181905260248201527f4d696e74696e674d616e616765723a204e4f545f454e4f5547485f46554e44536044820152606401610981565b611f2b8d8d8d8d8d8d8d8c600061338a565b843411156112e757611f3b612345565b6001600160a01b03166108fc611f518734614971565b6040518115909202916000818181858888f19350505050158015611f79573d6000803e3d6000fd5b5050505050505050505050505050565b611f91612c54565b611f9a81613446565b611fb65760405162461bcd60e51b815260040161098190614a28565b600081815260cd60205260408120611fcd91613d1d565b60405181907f0aa1aff0f830e739d86baf0e6624d6763da02f7733575e0e463886cd062dea6a90600090a250565b612003612c54565b61200c8161346c565b610cf46000826134e2565b6120218a8c61479c565b60006002825110156120455760405162461bcd60e51b815260040161098190614916565b61205c611033600084600186516110169190614971565b612064610e37565b156120815760405162461bcd60e51b815260040161098190614772565b60028c146120a15760405162461bcd60e51b81526004016109819061499a565b6120e68e8e8e8a898b8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506131ca92505050565b856001600160a01b03166323b872dd6120fd612345565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018890526064016020604051808303816000875af1158015612150573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217491906148aa565b6121b85760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881313d5d7d31155915317d1905253605a1b6044820152606401610981565b611f798e8e8e8e8e8e8e8c8e61338a565b6121d1612c54565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015612218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223c9190614a6a565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af115801561228f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b391906148aa565b6122f75760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881313d5d7d31155915317d1905253605a1b6044820152606401610981565b604080516001600160a01b0384811682526020820184905285168183015290517e1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a9181900360600190a1505050565b600061234f6134ec565b905090565b61235d83613446565b6123795760405162461bcd60e51b815260040161098190614a28565b600083815260cf602052604090205460ff1615156001600160401b0382161515146123f55760405162461bcd60e51b815260206004820152602660248201527f4d696e74696e674d616e616765723a20544c445f455850495241424c455f4d496044820152650a69a82a886960d31b6064820152608401610981565b60006124288360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050600a816000015111156124d057612453612447826000600a613532565b80516020909101512090565b7fb551e0305c8163b812374b8e78b577c77f226f6f10c5ad03e52699578fbc34b8036124d05760405162461bcd60e51b815260206004820152602660248201527f4d696e74696e674d616e616765723a20544f4b454e5f4c4142454c5f50524f4860448201526512509255115160d21b6064820152608401610981565b6124d983613571565b6125255760405162461bcd60e51b815260206004820152601d60248201527f4d696e74696e674d616e616765723a204c4142454c5f494e56414c49440000006044820152606401610981565b50505050565b60608282604051602001612540929190614a83565b604051602081830303815290604052905092915050565b604080516002808252606082810190935260009190816020015b6060815260200190600190039081612571579050509050828160008151811061259c5761259c614984565b602002602001018190525060cd600085815260200190815260200160002080546125c590614aab565b80601f01602080910402602001604051908101604052809291908181526020018280546125f190614aab565b801561263e5780601f106126135761010080835404028352916020019161263e565b820191906000526020600020905b81548152906001019060200180831161262157829003601f168201915b50505050508160018151811061265657612656614984565b60209081029190910101529392505050565b600080600061267688612e12565b91509150838015612688575060028851115b801561270a575060c9546040516331a9108f60e11b8152600481018390526001600160a01b038b8116921690636352211e90602401602060405180830381865afa1580156126da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fe9190614ae5565b6001600160a01b031614155b1561276a5760405162461bcd60e51b815260206004820152602a60248201527f4d696e74696e674d616e616765723a20524556455253455f5245434f52445f4e60448201526913d517d0531313d5d15160b21b6064820152608401610981565b60c954604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e7990602401602060405180830381865afa1580156127b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d791906148aa565b80156128c8575060c9546040516331a9108f60e11b81526004810184905230916001600160a01b031690636352211e90602401602060405180830381865afa158015612827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284b9190614ae5565b6001600160a01b031614806128c8575060c95460405163d9548e5360e01b8152600481018490526001600160a01b039091169063d9548e5390602401602060405180830381865afa1580156128a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c891906148aa565b156129b9576001600160401b0385161561294a5760c954604051631fb9763760e11b81526001600160401b0387166004820152602481018490526001600160a01b0390911690633f72ec6e90604401600060405180830381600087803b15801561293157600080fd5b505af1158015612945573d6000803e3d6000fd5b505050505b60c954604051630fb8df0360e11b81526001600160a01b0390911690631f71be0690612982908c908c908c908c908b90600401614b57565b600060405180830381600087803b15801561299c57600080fd5b505af11580156129b0573d6000803e3d6000fd5b50505050612bb0565b6129c2826136d5565b6129cb88613734565b80156129d8575087516002145b80156129eb57506001600160401b038516155b15612ac95760ca5488516001600160a01b039091169063c36c2125908b908b90600090612a1a57612a1a614984565b602090810291909101015160cc546040516001600160e01b031960e086901b168152612a549392916001600160a01b031690600401614bb6565b600060405180830381600087803b158015612a6e57600080fd5b505af1158015612a82573d6000803e3d6000fd5b50505050600087511115612ac45760cc54604051633a0deb9d60e21b81526001600160a01b039091169063e837ae7490612982908a908a908790600401614beb565b612bb0565b60c95460405163ba5d40b760e01b81526001600160a01b039091169063ba5d40b790612b01908c908c908c908c908b90600401614b57565b600060405180830381600087803b158015612b1b57600080fd5b505af1158015612b2f573d6000803e3d6000fd5b505050506001600160401b03851615612bb05760c954604051631fb9763760e11b81526001600160401b0387166004820152602481018490526001600160a01b0390911690633f72ec6e90604401600060405180830381600087803b158015612b9757600080fd5b505af1158015612bab573d6000803e3d6000fd5b505050505b50979650505050505050565b610cf481612bc8612345565b61378e565b612bd7828261156e565b610d815760008281526097602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612c10612345565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612c5c612345565b6001600160a01b0316612c776033546001600160a01b031690565b6001600160a01b031614610d955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610981565b610cf4600080516020614e9b83398151915282611dd4565b612cef828261156e565b15610d815760008281526097602090815260408083206001600160a01b03851684529091529020805460ff19169055612d26612345565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b612d72610e37565b612db55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881393d517d4105554d15160621b6044820152606401610981565b600080516020614e7b833981519152805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612df5612345565b6040516001600160a01b03909116815260200160405180910390a1565b805160009081905b8015612e4757829150612e338285611016600185614971565b925080612e3f81614c21565b915050612e1a565b50915091565b60008151600003612ea05760405162461bcd60e51b815260206004820152601b60248201527f4d696e74696e674d616e616765723a204c4142454c5f454d50545900000000006044820152606401610981565b8282604051602001612eb29190614c38565b60405160208183030381529060405280519060200120604051602001612ee2929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b610cf4600080516020614e9b833981519152826134e2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612f73610e37565b15612f905760405162461bcd60e51b815260040161098190614772565b600080516020614e7b833981519152805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612df5612345565b6000612fe0600084612e4d565b600081815260cd60205260409020909150612ffb8482614c9a565b50600081815260cf602052604090819020805460ff19168415151790555181907f4fce6f6e172b04eaa80325d8e3b0180a34945000f3e214605039e8420fdf898090613048908690614323565b60405180910390a260c954604051634f558e7960e01b8152600481018390526001600160a01b0390911690634f558e7990602401602060405180830381865afa158015613099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130bd91906148aa565b610cde5760c9546040516307befae360e51b81526001600160a01b039091169063f7df5c6090610acc9084908790600401614d59565b600054610100900460ff1661311a5760405162461bcd60e51b815260040161098190614d7a565b610d95613125612345565b612f19565b600054610100900460ff166131515760405162461bcd60e51b815260040161098190614d7a565b610d95600061315e612345565b6134e2565b600054610100900460ff1661179e5760405162461bcd60e51b815260040161098190614d7a565b600054610100900460ff166131b15760405162461bcd60e51b815260040161098190614d7a565b600080516020614e7b833981519152805460ff19169055565b60006131de6131d9878961479c565b612e12565b506040516bffffffffffffffffffffffff1930606090811b821660208401524660348401528b811b82166054840152606883018490526001600160c01b031960c08a901b1660888401526090830188905286901b1660b08201529091506000906132ba9084906132b49060c401604051602081830303815290604052805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b906137f2565b90506132c5816116f4565b61331d5760405162461bcd60e51b8152602060048201526024808201527f4d696e74696e674d616e616765723a205349474e45525f49535f4e4f545f4d49604482015263272a22a960e11b6064820152608401610981565b42866001600160401b03161161337f5760405162461bcd60e51b815260206004820152602160248201527f4d696e74696e674d616e616765723a20455850495245445f5349474e415455526044820152604560f81b6064820152608401610981565b505050505050505050565b60006133d18a61339a8a8c61479c565b6133a4898b61479c565b6133ae888a61479c565b60008f6001600160a01b03166133c2612345565b6001600160a01b031614612668565b9050896001600160a01b03166133e5612345565b6001600160a01b0316827fa545b6fd3355e8d57f8c8147bafe740545bd3ea1f94bef2576a6d532a7c3b60586866040516134329291909182526001600160a01b0316602082015260400190565b60405180910390a450505050505050505050565b600081815260cd60205260408120805482919061346290614aab565b9050119050919050565b613474612c54565b6001600160a01b0381166134d95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610981565b610cf481612f19565b610d818282612bcd565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e546000906001600160a01b0316330361352d575060331936013560601c90565b503390565b604080518082019091526000808252602082015260405180604001604052808381526020018486602001516135679190614dc5565b9052949350505050565b6000815160000361358457506000919050565b60208201805160f81c603081108015906135a2575060398160ff1611155b1580156135c4575060618160ff16101580156135c25750607a8160ff1611155b155b156135d3575060009392505050565b83516001811115613641576135f5836135ed600184614971565b015160f81c90565b915060308260ff161015801561360f575060398260ff1611155b158015613631575060618260ff161015801561362f5750607a8260ff1611155b155b1561364157506000949350505050565b60015b61364f600183614971565b8110156136c9578381015160f81c9250602d8314801590613685575060308360ff1610158015613683575060398360ff1611155b155b80156136a6575060618360ff16101580156136a45750607a8360ff1611155b155b156136b75750600095945050505050565b806136c1816149e0565b915050613644565b50600195945050505050565b6136de8161170e565b1561372b5760405162461bcd60e51b815260206004820152601d60248201527f4d696e74696e674d616e616765723a20544f4b454e5f424c4f434b45440000006044820152606401610981565b610cf481613816565b60008061374b600084600186516110169190614971565b60ca549091506001600160a01b0316158015906137875750807f0f4a10a4f46c288cea365fcf45cccf0e9d901b945b9829ccdb54c10dc3cb7a6f145b9392505050565b613798828261156e565b610d81576137b0816001600160a01b0316601461389a565b6137bb83602061389a565b6040516020016137cc929190614dd8565b60408051601f198184030181529082905262461bcd60e51b825261098191600401614323565b60008060006138018585613a35565b9150915061380e81613a7a565b509392505050565b604080517f1ec047073e2c8b15660901dbfdb6e3ff6365bd699dd9f95dcc6eab5448bebd69602082015290810182905260019061385590606001611749565b805460ff19169115159190911790556040518181527f2ce5d9351b1d590d5a066db0d2dc7602d55f092506a83a7ee8c4d78ee357d75a9060200160405180910390a150565b606060006138a9836002614e4d565b6138b4906002614dc5565b6001600160401b038111156138cb576138cb6140da565b6040519080825280601f01601f1916602001820160405280156138f5576020820181803683370190505b509050600360fc1b8160008151811061391057613910614984565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061393f5761393f614984565b60200101906001600160f81b031916908160001a9053506000613963846002614e4d565b61396e906001614dc5565b90505b60018111156139e6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106139a2576139a2614984565b1a60f81b8282815181106139b8576139b8614984565b60200101906001600160f81b031916908160001a90535060049490941c936139df81614c21565b9050613971565b5083156137875760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610981565b6000808251604103613a6b5760208301516040840151606085015160001a613a5f87828585613c30565b94509450505050613a73565b506000905060025b9250929050565b6000816004811115613a8e57613a8e614e64565b03613a965750565b6001816004811115613aaa57613aaa614e64565b03613af75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610981565b6002816004811115613b0b57613b0b614e64565b03613b585760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610981565b6003816004811115613b6c57613b6c614e64565b03613bc45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610981565b6004816004811115613bd857613bd8614e64565b03610cf45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610981565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613c675750600090506003613d14565b8460ff16601b14158015613c7f57508460ff16601c14155b15613c905750600090506004613d14565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613ce4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613d0d57600060019250925050613d14565b9150600090505b94509492505050565b508054613d2990614aab565b6000825580601f10613d39575050565b601f016020900490600052602060002090810190610cf491905b80821115613d675760008155600101613d53565b5090565b600060208284031215613d7d57600080fd5b81356001600160e01b03198116811461378757600080fd5b6001600160401b0381168114610cf457600080fd5b8035613db581613d95565b919050565b60008060408385031215613dcd57600080fd5b8235613dd881613d95565b946020939093013593505050565b600060208284031215613df857600080fd5b5035919050565b60008083601f840112613e1157600080fd5b5081356001600160401b03811115613e2857600080fd5b602083019150836020828501011115613a7357600080fd5b600080600060408486031215613e5557600080fd5b8335925060208401356001600160401b03811115613e7257600080fd5b613e7e86828701613dff565b9497909650939450505050565b6001600160a01b0381168114610cf457600080fd5b8035613db581613e8b565b60008060408385031215613ebe57600080fd5b823591506020830135613ed081613e8b565b809150509250929050565b600060208284031215613eed57600080fd5b813561378781613e8b565b60008083601f840112613f0a57600080fd5b5081356001600160401b03811115613f2157600080fd5b6020830191508360208260051b8501011115613a7357600080fd5b8015158114610cf457600080fd5b60008060008060008060008060a0898b031215613f6657600080fd5b8835613f7181613e8b565b975060208901356001600160401b0380821115613f8d57600080fd5b613f998c838d01613ef8565b909950975060408b0135915080821115613fb257600080fd5b613fbe8c838d01613ef8565b909750955060608b0135915080821115613fd757600080fd5b50613fe48b828c01613ef8565b9094509250506080890135613ff881613f3c565b809150509295985092959890939650565b600080600080600080600080600060c08a8c03121561402757600080fd5b893561403281613e8b565b985060208a01356001600160401b038082111561404e57600080fd5b61405a8d838e01613ef8565b909a50985060408c013591508082111561407357600080fd5b61407f8d838e01613ef8565b909850965060608c013591508082111561409857600080fd5b506140a58c828d01613ef8565b90955093505060808a01356140b981613d95565b915060a08a01356140c981613f3c565b809150509295985092959850929598565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614118576141186140da565b604052919050565b60006001600160401b03821115614139576141396140da565b5060051b60200190565b6000602080838503121561415657600080fd5b82356001600160401b0381111561416c57600080fd5b8301601f8101851361417d57600080fd5b803561419061418b82614120565b6140f0565b81815260059190911b820183019083810190878311156141af57600080fd5b928401925b828410156141d65783356141c781613e8b565b825292840192908401906141b4565b979650505050505050565b600080600080606085870312156141f757600080fd5b843561420281613e8b565b93506020850135925060408501356001600160401b0381111561422457600080fd5b61423087828801613dff565b95989497509550505050565b6000806020838503121561424f57600080fd5b82356001600160401b0381111561426557600080fd5b61427185828601613dff565b90969095509350505050565b60008060006040848603121561429257600080fd5b83356001600160401b038111156142a857600080fd5b6142b486828701613dff565b90945092505060208401356142c881613f3c565b809150509250925092565b60005b838110156142ee5781810151838201526020016142d6565b50506000910152565b6000815180845261430f8160208601602086016142d3565b601f01601f19169290920160200192915050565b60208152600061378760208301846142f7565b60008060008060008060c0878903121561434f57600080fd5b863561435a81613e8b565b9550602087013561436a81613e8b565b9450604087013561437a81613e8b565b9350606087013561438a81613e8b565b9250608087013561439a81613e8b565b915060a08701356143aa81613e8b565b809150509295509295509295565b60008060008060008060008060a0898b0312156143d457600080fd5b88356143df81613e8b565b97506020890135965060408901356001600160401b038082111561440257600080fd5b61440e8c838d01613dff565b909850965060608b013591508082111561442757600080fd5b6144338c838d01613ef8565b909650945060808b013591508082111561444c57600080fd5b506144598b828c01613ef8565b999c989b5096995094979396929594505050565b6000806020838503121561448057600080fd5b82356001600160401b0381111561449657600080fd5b61427185828601613ef8565b600080600080600080600080600080600060e08c8e0312156144c357600080fd5b6144cc8c613ea0565b9a506001600160401b038060208e013511156144e757600080fd5b6144f78e60208f01358f01613ef8565b909b50995060408d013581101561450d57600080fd5b61451d8e60408f01358f01613ef8565b909950975060608d013581101561453357600080fd5b6145438e60608f01358f01613ef8565b909750955061455460808e01613daa565b945060a08d013593508060c08e0135111561456e57600080fd5b5061457f8d60c08e01358e01613dff565b81935080925050509295989b509295989b9093969950565b6000806000806000806000806000806000806101008d8f0312156145ba57600080fd5b6145c38d613ea0565b9b506001600160401b0360208e013511156145dd57600080fd5b6145ed8e60208f01358f01613ef8565b909b5099506001600160401b0360408e0135111561460a57600080fd5b61461a8e60408f01358f01613ef8565b90995097506001600160401b0360608e0135111561463757600080fd5b6146478e60608f01358f01613ef8565b909750955061465860808e01613daa565b945061466660a08e01613ea0565b935060c08d013592506001600160401b0360e08e0135111561468757600080fd5b6146978e60e08f01358f01613dff565b81935080925050509295989b509295989b509295989b565b600080604083850312156146c257600080fd5b82356146cd81613e8b565b91506020830135613ed081613e8b565b6020808252818101527f4d696e746572526f6c653a2043414c4c45525f49535f4e4f545f4d494e544552604082015260600190565b60006020828403121561472457600080fd5b815161378781613d95565b60208082526023908201527f4d696e74696e674d616e616765723a20544f4b454e5f4e4f545f455850495241604082015262424c4560e81b606082015260800190565b60208082526010908201526f14185d5cd8589b194e8814105554d15160821b604082015260600190565b60006147aa61418b84614120565b80848252602080830192508560051b8501368111156147c857600080fd5b855b8181101561485a5780356001600160401b03808211156147ea5760008081fd5b90880190601f36818401126147ff5760008081fd5b823582811115614811576148116140da565b614822818301601f191688016140f0565b9250808352368782860101111561483b57600091508182fd5b80878501888501376000908301870152508652509382019382016147ca565b50919695505050505050565b60208082526024908201527f4d696e74696e674d616e616765723a2043414c4c45525f49535f4e4f545f4d49604082015263272a22a960e11b606082015260800190565b6000602082840312156148bc57600080fd5b815161378781613f3c565b6020808252602f908201527f4d696e74696e674d616e616765723a2053454e4445525f49535f4e4f545f415060408201526e282927ab22a22fa7a92fa7aba722a960891b606082015260800190565b60208082526025908201527f4d696e74696e674d616e616765723a204c4142454c535f4c454e4754485f42456040820152642627abaf9960d91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b818103818111156109545761095461495b565b634e487b7160e01b600052603260045260246000fd5b60208082526026908201527f4d696e74696e674d616e616765723a20535542444f4d41494e535f4e4f545f41604082015265131313d5d15160d21b606082015260800190565b6000600182016149f2576149f261495b565b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208082526022908201527f4d696e74696e674d616e616765723a20544c445f4e4f545f5245474953544552604082015261115160f21b606082015260800190565b600060208284031215614a7c57600080fd5b5051919050565b6b756e732d646576746573742d60a01b81528183600c83013760009101600c01908152919050565b600181811c90821680614abf57607f821691505b602082108103614adf57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215614af757600080fd5b815161378781613e8b565b600081518084526020808501808196508360051b8101915082860160005b85811015614b4a578284038952614b388483516142f7565b98850198935090840190600101614b20565b5091979650505050505050565b6001600160a01b038616815260a060208201819052600090614b7b90830187614b02565b8281036040840152614b8d8187614b02565b90508281036060840152614ba18186614b02565b91505082151560808301529695505050505050565b600060018060a01b03808616835260606020840152614bd860608401866142f7565b9150808416604084015250949350505050565b606081526000614bfe6060830186614b02565b8281036020840152614c108186614b02565b915050826040830152949350505050565b600081614c3057614c3061495b565b506000190190565b60008251614c4a8184602087016142d3565b9190910192915050565b601f821115610cde57600081815260208120601f850160051c81016020861015614c7b5750805b601f850160051c820191505b818110156116a357828155600101614c87565b81516001600160401b03811115614cb357614cb36140da565b614cc781614cc18454614aab565b84614c54565b602080601f831160018114614cfc5760008415614ce45750858301515b600019600386901b1c1916600185901b1785556116a3565b600085815260208120601f198616915b82811015614d2b57888601518255948401946001909101908401614d0c565b5085821015614d495787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b828152604060208201526000614d7260408301846142f7565b949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b808201808211156109545761095461495b565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614e108160178501602088016142d3565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614e418160288401602088016142d3565b01602801949350505050565b80820281158282048414176109545761095461495b565b634e487b7160e01b600052602160045260246000fdfe5496787fc1ebdfeba375028c1865f13fbb1d63c0caa356ccc1b29a80f3ebd6229f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a164736f6c6343000811000a", + "deployedBytecode": "0x6080604052600436106102ae5760003560e01c8063906cecc111610175578063b9998a24116100dc578063d547741f11610095578063f2fde38b1161006f578063f2fde38b14610892578063f5243bc4146108b2578063f940e385146108d2578063ffa1ad74146108f257600080fd5b8063d547741f1461083f578063d7db74c71461085f578063ec5273891461087257600080fd5b8063b9998a241461077d578063cc2a9a5b1461079d578063cc2c3fc4146107bd578063ceeb4f50146107dd578063d1f5692c146107fd578063d53913931461081d57600080fd5b8063a3a3f7f61161012e578063a3a3f7f614610690578063a3f4df7e146106b0578063a849d65c146106fd578063aa271e1a1461071d578063b0aa98c71461073d578063b3ab15fb1461075d57600080fd5b8063906cecc1146105e657806391d1485414610606578063983b2d5614610626578063986502751461064657806399e0dd7c1461065b578063a217fddf1461067b57600080fd5b80635b6fa8db11610219578063715018a6116101d2578063715018a61461054b57806371e2a6571461056057806377a2a5891461058057806381c81d35146105a05780638456cb59146105b35780638da5cb5b146105c857600080fd5b80635b6fa8db146104a35780635c975abb146104c35780635cd7e3b3146104d85780635e22cd86146104f85780635fc1964f14610518578063634486da1461053857600080fd5b80633092afd51161026b5780633092afd5146103a857806336568abe146103c85780633f41b614146103e85780633f4ba83a1461042057806351cff8d914610435578063572b6c051461045557600080fd5b806301ffc9a7146102b35780631edb948e146102e857806320c5429b1461030a578063248a9ca31461032a578063268b15ed146103685780632f2ff15d14610388575b600080fd5b3480156102bf57600080fd5b506102d36102ce366004613d6b565b610923565b60405190151581526020015b60405180910390f35b3480156102f457600080fd5b50610308610303366004613dba565b61095a565b005b34801561031657600080fd5b50610308610325366004613de6565b610b03565b34801561033657600080fd5b5061035a610345366004613de6565b60009081526097602052604090206001015490565b6040519081526020016102df565b34801561037457600080fd5b50610308610383366004613e40565b610c26565b34801561039457600080fd5b506103086103a3366004613eab565b610cb9565b3480156103b457600080fd5b506103086103c3366004613edb565b610ce3565b3480156103d457600080fd5b506103086103e3366004613eab565b610cf7565b3480156103f457600080fd5b5060c954610408906001600160a01b031681565b6040516001600160a01b0390911681526020016102df565b34801561042c57600080fd5b50610308610d85565b34801561044157600080fd5b50610308610450366004613edb565b610d97565b34801561046157600080fd5b506102d3610470366004613edb565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e546001600160a01b0390811691161490565b3480156104af57600080fd5b5060cc54610408906001600160a01b031681565b3480156104cf57600080fd5b506102d3610e37565b3480156104e457600080fd5b506103086104f3366004613f4a565b610e4d565b34801561050457600080fd5b50610308610513366004614009565b6110b1565b34801561052457600080fd5b50610308610533366004614143565b6112f6565b610308610546366004613edb565b61133e565b34801561055757600080fd5b50610308611401565b34801561056c57600080fd5b5061030861057b366004614143565b611413565b34801561058c57600080fd5b5060ce54610408906001600160a01b031681565b6103086105ae366004613edb565b61145b565b3480156105bf57600080fd5b506103086114d8565b3480156105d457600080fd5b506033546001600160a01b0316610408565b3480156105f257600080fd5b506103086106013660046141e1565b6114e8565b34801561061257600080fd5b506102d3610621366004613eab565b61156e565b34801561063257600080fd5b50610308610641366004613edb565b611599565b34801561065257600080fd5b506103086115aa565b34801561066757600080fd5b5061030861067636600461423c565b6115c4565b34801561068757600080fd5b5061035a600081565b34801561069c57600080fd5b506103086106ab36600461427d565b6116ab565b3480156106bc57600080fd5b506106f0604051806040016040528060148152602001732aa7299d1026b4b73a34b7339026b0b730b3b2b960611b81525081565b6040516102df9190614323565b34801561070957600080fd5b5060cb54610408906001600160a01b031681565b34801561072957600080fd5b506102d3610738366004613edb565b6116f4565b34801561074957600080fd5b506102d3610758366004613de6565b61170e565b34801561076957600080fd5b50610308610778366004613edb565b61176c565b34801561078957600080fd5b50610308610798366004613edb565b611796565b3480156107a957600080fd5b506103086107b8366004614336565b6117db565b3480156107c957600080fd5b5060ca54610408906001600160a01b031681565b3480156107e957600080fd5b506103086107f83660046143b8565b611c79565b34801561080957600080fd5b5061030861081836600461446d565b611d1d565b34801561082957600080fd5b5061035a600080516020614e9b83398151915281565b34801561084b57600080fd5b5061030861085a366004613eab565b611dd4565b61030861086d3660046144a2565b611df9565b34801561087e57600080fd5b5061030861088d366004613de6565b611f89565b34801561089e57600080fd5b506103086108ad366004613edb565b611ffb565b3480156108be57600080fd5b506103086108cd366004614597565b612017565b3480156108de57600080fd5b506103086108ed3660046146af565b6121c9565b3480156108fe57600080fd5b506106f060405180604001604052806005815260200164302e352e3160d81b81525081565b60006001600160e01b03198216637965db0b60e01b148061095457506301ffc9a760e01b6001600160e01b03198316145b92915050565b610965610738612345565b61098a5760405162461bcd60e51b8152600401610981906146dd565b60405180910390fd5b60c95460405163baef73e960e01b8152600481018390526000916001600160a01b03169063baef73e990602401602060405180830381865afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f89190614712565b9050806001600160401b0316600003610a235760405162461bcd60e51b81526004016109819061472f565b806001600160401b0316836001600160401b031611610a905760405162461bcd60e51b815260206004820152602360248201527f4d696e74696e674d616e616765723a204558504952595f4e4f545f455854454e60448201526211115160ea1b6064820152608401610981565b60c954604051631fb9763760e11b81526001600160401b0385166004820152602481018490526001600160a01b0390911690633f72ec6e906044015b600060405180830381600087803b158015610ae657600080fd5b505af1158015610afa573d6000803e3d6000fd5b50505050505050565b610b0e610738612345565b610b2a5760405162461bcd60e51b8152600401610981906146dd565b60c95460405163baef73e960e01b8152600481018390526001600160a01b039091169063baef73e990602401602060405180830381865afa158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b979190614712565b6001600160401b0316600003610bbf5760405162461bcd60e51b81526004016109819061472f565b60c954604051637eee288d60e01b8152306004820152602481018390526001600160a01b0390911690637eee288d90604401600060405180830381600087803b158015610c0b57600080fd5b505af1158015610c1f573d6000803e3d6000fd5b5050505050565b8282828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250610c699350859250849150612354565b610c71610e37565b15610c8e5760405162461bcd60e51b815260040161098190614772565b6060610afa610c9b612345565b610cae88610ca9898961252b565b612557565b838460006001612668565b600082815260976020526040902060010154610cd481612bbc565b610cde8383612bcd565b505050565b610ceb612c54565b610cf481612ccd565b50565b610cff612345565b6001600160a01b0316816001600160a01b031614610d775760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610981565b610d818282612ce5565b5050565b610d8d612c54565b610d95612d6a565b565b610d9f612c54565b6001600160a01b038116610db257600080fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610dea573d6000803e3d6000fd5b50604080516001600160a01b03841681526020810183905260008183015290517e1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a9181900360600190a15050565b600080516020614e7b8339815191525460ff1690565b610e57868861479c565b8051600203610e8c57610e6b610738612345565b610e875760405162461bcd60e51b815260040161098190614866565b610fd1565b6000610e9782612e12565b60c9549092506001600160a01b0316905063430c2081610eb5612345565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381865afa158015610f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2491906148aa565b80610fb3575060c95460ce5460405163430c208160e01b81526001600160a01b0391821660048201526024810184905291169063430c208190604401602060405180830381865afa158015610f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa191906148aa565b8015610fb35750610fb3610738612345565b610fcf5760405162461bcd60e51b8152600401610981906148c7565b505b610fdb878961479c565b6000600282511015610fff5760405162461bcd60e51b815260040161098190614916565b611054611033600084600186516110169190614971565b8151811061102657611026614984565b6020026020010151612e4d565b8360008151811061104657611046614984565b602002602001015183612354565b61105c610e37565b156110795760405162461bcd60e51b815260040161098190614772565b6110a38b6110878b8d61479c565b6110918a8c61479c565b61109b898b61479c565b600089612668565b505050505050505050505050565b6110bb878961479c565b80516002036110f0576110cf610738612345565b6110eb5760405162461bcd60e51b815260040161098190614866565b611235565b60006110fb82612e12565b60c9549092506001600160a01b0316905063430c2081611119612345565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381865afa158015611164573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118891906148aa565b80611217575060c95460ce5460405163430c208160e01b81526001600160a01b0391821660048201526024810184905291169063430c208190604401602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120591906148aa565b80156112175750611217610738612345565b6112335760405162461bcd60e51b8152600401610981906148c7565b505b61123f888a61479c565b836002825110156112625760405162461bcd60e51b815260040161098190614916565b611279611033600084600186516110169190614971565b611281610e37565b1561129e5760405162461bcd60e51b815260040161098190614772565b60028a146112be5760405162461bcd60e51b81526004016109819061499a565b6112e78c6112cc8c8e61479c565b6112d68b8d61479c565b6112e08a8c61479c565b8989612668565b50505050505050505050505050565b6112fe612c54565b60005b8151811015610d815761132c82828151811061131f5761131f614984565b6020026020010151612ccd565b80611336816149e0565b915050611301565b611349610738612345565b6113655760405162461bcd60e51b8152600401610981906146dd565b6001600160a01b0381166113bb5760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d5054590000006044820152606401610981565b6113c481612f01565b6113cc6115aa565b6040516001600160a01b038216903480156108fc02916000818181858888f19350505050158015610d81573d6000803e3d6000fd5b611409612c54565b610d956000612f19565b61141b612c54565b60005b8151811015610d815761144982828151811061143c5761143c614984565b6020026020010151612f01565b80611453816149e0565b91505061141e565b611466610738612345565b6114825760405162461bcd60e51b8152600401610981906146dd565b6001600160a01b0381166113c45760405162461bcd60e51b815260206004820152601d60248201527f4d696e746572526f6c653a2052454345495645525f49535f454d5054590000006044820152606401610981565b6114e0612c54565b610d95612f6b565b8282828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525061152b9350859250849150612354565b611533610e37565b156115505760405162461bcd60e51b815260040161098190614772565b606061156487610cae88610ca9898961252b565b5050505050505050565b60009182526097602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6115a1612c54565b610cf481612f01565b610d95600080516020614e9b8339815191526103e3612345565b6115cc612c54565b60c954604051632678375f60e21b81526001600160a01b03909116906399e0dd7c906115fe90859085906004016149f9565b600060405180830381600087803b15801561161857600080fd5b505af115801561162c573d6000803e3d6000fd5b505060cb546001600160a01b0316159150610d8190505760cb54604051632678375f60e21b81526001600160a01b03909116906399e0dd7c9061167590859085906004016149f9565b600060405180830381600087803b15801561168f57600080fd5b505af11580156116a3573d6000803e3d6000fd5b505050505050565b6116b3612c54565b610cde83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250612fd3915050565b6000610954600080516020614e9b8339815191528361156e565b604080517f1ec047073e2c8b15660901dbfdb6e3ff6365bd699dd9f95dcc6eab5448bebd696020820152908101829052600090611762906060015b6040516020818303038152906040528051906020012090565b5460ff1692915050565b611774612c54565b60ce80546001600160a01b0319166001600160a01b0392909216919091179055565b61179e612c54565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e80546001600160a01b0319166001600160a01b03831617905550565b600054610100900460ff16158080156117fb5750600054600160ff909116105b806118155750303b158015611815575060005460ff166001145b6118785760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610981565b6000805460ff19166001179055801561189b576000805461ff0019166101001790555b60c980546001600160a01b03199081166001600160a01b038a81169190911790925560ca8054821689841617905560cb8054821688841617905560cc8054821687841617905560ce80549091169185169190911790556118f96130f3565b61190161312a565b61190a82613163565b61191261318a565b604080516103008101825260066102c082018181526563727970746f60d01b6102e0840152825282518084018452818152651dd85b1b195d60d21b602082810191909152808401919091528351808501855260018152600f60fb1b8183015283850152835180850185526003808252621b999d60ea1b82840152606085019190915284518086018652600a815269313637b1b5b1b430b4b760b11b818401526080850152845180860186526007808252663134ba31b7b4b760c91b8285015260a0860191909152855180870187528281526207070760eb1b8185015260c0860152855180870187528281526264616f60e81b8185015260e086015285518087018752918252621e9a5b60ea1b8284015261010085019190915284518086018652908152663837b63cb3b7b760c91b8183015261012084015283518085018552600b81526a756e73746f707061626c6560a81b81830152610140840152835180850185528281526535b632bb32b960d11b8183015261016084015283518085018552600280825261686960f01b8284015261018085019190915284518086018652838152656b726573757360d01b818401526101a085015284518086018652600580825264616e696d6560d81b828501526101c086019190915285518087018752818152646d616e676160d81b818501526101e086015285518087018752600981526862696e616e6365757360b81b8185015261020086015285518087018752818152647265616c6d60d81b818501526102208601528551808701875291825261676f60f01b82840152610240850191909152845180860186526008815267185b1d1a5b5a5cdd60c21b818401526102608501528451808601865290815264707564677960d81b8183015261028084015283518085019094529083526530bab9ba34b760d11b908301526102a081019190915260005b6016811015611c0357611bf1828260168110611be557611be5614984565b60200201516000612fd3565b80611bfb816149e0565b915050611bc7565b50611c2a60405180604001604052806003815260200162636f6d60e81b8152506001612fd3565b508015610afa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250611cbc9350859250849150612354565b611cc4610e37565b15611ce15760405162461bcd60e51b815260040161098190614772565b611d108a611cf38b610ca98c8c61252b565b611cfd888a61479c565b611d07878961479c565b60006001612668565b5050505050505050505050565b611d25612c54565b60005b81811015610cde5760c9546001600160a01b03166350960239848484818110611d5357611d53614984565b9050602002016020810190611d689190613edb565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611da957600080fd5b505af1158015611dbd573d6000803e3d6000fd5b505050508080611dcc906149e0565b915050611d28565b600082815260976020526040902060010154611def81612bbc565b610cde8383612ce5565b611e03898b61479c565b6000600282511015611e275760405162461bcd60e51b815260040161098190614916565b611e3e611033600084600186516110169190614971565b611e46610e37565b15611e635760405162461bcd60e51b815260040161098190614772565b60028b14611e835760405162461bcd60e51b81526004016109819061499a565b611ec98d8d8d898960008a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506131ca92505050565b84341015611f195760405162461bcd60e51b815260206004820181905260248201527f4d696e74696e674d616e616765723a204e4f545f454e4f5547485f46554e44536044820152606401610981565b611f2b8d8d8d8d8d8d8d8c600061338a565b843411156112e757611f3b612345565b6001600160a01b03166108fc611f518734614971565b6040518115909202916000818181858888f19350505050158015611f79573d6000803e3d6000fd5b5050505050505050505050505050565b611f91612c54565b611f9a81613446565b611fb65760405162461bcd60e51b815260040161098190614a28565b600081815260cd60205260408120611fcd91613d1d565b60405181907f0aa1aff0f830e739d86baf0e6624d6763da02f7733575e0e463886cd062dea6a90600090a250565b612003612c54565b61200c8161346c565b610cf46000826134e2565b6120218a8c61479c565b60006002825110156120455760405162461bcd60e51b815260040161098190614916565b61205c611033600084600186516110169190614971565b612064610e37565b156120815760405162461bcd60e51b815260040161098190614772565b60028c146120a15760405162461bcd60e51b81526004016109819061499a565b6120e68e8e8e8a898b8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506131ca92505050565b856001600160a01b03166323b872dd6120fd612345565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018890526064016020604051808303816000875af1158015612150573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217491906148aa565b6121b85760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881313d5d7d31155915317d1905253605a1b6044820152606401610981565b611f798e8e8e8e8e8e8e8c8e61338a565b6121d1612c54565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015612218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223c9190614a6a565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af115801561228f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b391906148aa565b6122f75760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881313d5d7d31155915317d1905253605a1b6044820152606401610981565b604080516001600160a01b0384811682526020820184905285168183015290517e1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a9181900360600190a1505050565b600061234f6134ec565b905090565b61235d83613446565b6123795760405162461bcd60e51b815260040161098190614a28565b600083815260cf602052604090205460ff1615156001600160401b0382161515146123f55760405162461bcd60e51b815260206004820152602660248201527f4d696e74696e674d616e616765723a20544c445f455850495241424c455f4d496044820152650a69a82a886960d31b6064820152608401610981565b60006124288360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050600a816000015111156124d057612453612447826000600a613532565b80516020909101512090565b7fb551e0305c8163b812374b8e78b577c77f226f6f10c5ad03e52699578fbc34b8036124d05760405162461bcd60e51b815260206004820152602660248201527f4d696e74696e674d616e616765723a20544f4b454e5f4c4142454c5f50524f4860448201526512509255115160d21b6064820152608401610981565b6124d983613571565b6125255760405162461bcd60e51b815260206004820152601d60248201527f4d696e74696e674d616e616765723a204c4142454c5f494e56414c49440000006044820152606401610981565b50505050565b60608282604051602001612540929190614a83565b604051602081830303815290604052905092915050565b604080516002808252606082810190935260009190816020015b6060815260200190600190039081612571579050509050828160008151811061259c5761259c614984565b602002602001018190525060cd600085815260200190815260200160002080546125c590614aab565b80601f01602080910402602001604051908101604052809291908181526020018280546125f190614aab565b801561263e5780601f106126135761010080835404028352916020019161263e565b820191906000526020600020905b81548152906001019060200180831161262157829003601f168201915b50505050508160018151811061265657612656614984565b60209081029190910101529392505050565b600080600061267688612e12565b91509150838015612688575060028851115b801561270a575060c9546040516331a9108f60e11b8152600481018390526001600160a01b038b8116921690636352211e90602401602060405180830381865afa1580156126da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fe9190614ae5565b6001600160a01b031614155b1561276a5760405162461bcd60e51b815260206004820152602a60248201527f4d696e74696e674d616e616765723a20524556455253455f5245434f52445f4e60448201526913d517d0531313d5d15160b21b6064820152608401610981565b60c954604051634f558e7960e01b8152600481018490526001600160a01b0390911690634f558e7990602401602060405180830381865afa1580156127b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d791906148aa565b80156128c8575060c9546040516331a9108f60e11b81526004810184905230916001600160a01b031690636352211e90602401602060405180830381865afa158015612827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284b9190614ae5565b6001600160a01b031614806128c8575060c95460405163d9548e5360e01b8152600481018490526001600160a01b039091169063d9548e5390602401602060405180830381865afa1580156128a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c891906148aa565b156129b9576001600160401b0385161561294a5760c954604051631fb9763760e11b81526001600160401b0387166004820152602481018490526001600160a01b0390911690633f72ec6e90604401600060405180830381600087803b15801561293157600080fd5b505af1158015612945573d6000803e3d6000fd5b505050505b60c954604051630fb8df0360e11b81526001600160a01b0390911690631f71be0690612982908c908c908c908c908b90600401614b57565b600060405180830381600087803b15801561299c57600080fd5b505af11580156129b0573d6000803e3d6000fd5b50505050612bb0565b6129c2826136d5565b6129cb88613734565b80156129d8575087516002145b80156129eb57506001600160401b038516155b15612ac95760ca5488516001600160a01b039091169063c36c2125908b908b90600090612a1a57612a1a614984565b602090810291909101015160cc546040516001600160e01b031960e086901b168152612a549392916001600160a01b031690600401614bb6565b600060405180830381600087803b158015612a6e57600080fd5b505af1158015612a82573d6000803e3d6000fd5b50505050600087511115612ac45760cc54604051633a0deb9d60e21b81526001600160a01b039091169063e837ae7490612982908a908a908790600401614beb565b612bb0565b60c95460405163ba5d40b760e01b81526001600160a01b039091169063ba5d40b790612b01908c908c908c908c908b90600401614b57565b600060405180830381600087803b158015612b1b57600080fd5b505af1158015612b2f573d6000803e3d6000fd5b505050506001600160401b03851615612bb05760c954604051631fb9763760e11b81526001600160401b0387166004820152602481018490526001600160a01b0390911690633f72ec6e90604401600060405180830381600087803b158015612b9757600080fd5b505af1158015612bab573d6000803e3d6000fd5b505050505b50979650505050505050565b610cf481612bc8612345565b61378e565b612bd7828261156e565b610d815760008281526097602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612c10612345565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612c5c612345565b6001600160a01b0316612c776033546001600160a01b031690565b6001600160a01b031614610d955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610981565b610cf4600080516020614e9b83398151915282611dd4565b612cef828261156e565b15610d815760008281526097602090815260408083206001600160a01b03851684529091529020805460ff19169055612d26612345565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b612d72610e37565b612db55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881393d517d4105554d15160621b6044820152606401610981565b600080516020614e7b833981519152805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612df5612345565b6040516001600160a01b03909116815260200160405180910390a1565b805160009081905b8015612e4757829150612e338285611016600185614971565b925080612e3f81614c21565b915050612e1a565b50915091565b60008151600003612ea05760405162461bcd60e51b815260206004820152601b60248201527f4d696e74696e674d616e616765723a204c4142454c5f454d50545900000000006044820152606401610981565b8282604051602001612eb29190614c38565b60405160208183030381529060405280519060200120604051602001612ee2929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b610cf4600080516020614e9b833981519152826134e2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612f73610e37565b15612f905760405162461bcd60e51b815260040161098190614772565b600080516020614e7b833981519152805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612df5612345565b6000612fe0600084612e4d565b600081815260cd60205260409020909150612ffb8482614c9a565b50600081815260cf602052604090819020805460ff19168415151790555181907f4fce6f6e172b04eaa80325d8e3b0180a34945000f3e214605039e8420fdf898090613048908690614323565b60405180910390a260c954604051634f558e7960e01b8152600481018390526001600160a01b0390911690634f558e7990602401602060405180830381865afa158015613099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130bd91906148aa565b610cde5760c9546040516307befae360e51b81526001600160a01b039091169063f7df5c6090610acc9084908790600401614d59565b600054610100900460ff1661311a5760405162461bcd60e51b815260040161098190614d7a565b610d95613125612345565b612f19565b600054610100900460ff166131515760405162461bcd60e51b815260040161098190614d7a565b610d95600061315e612345565b6134e2565b600054610100900460ff1661179e5760405162461bcd60e51b815260040161098190614d7a565b600054610100900460ff166131b15760405162461bcd60e51b815260040161098190614d7a565b600080516020614e7b833981519152805460ff19169055565b60006131de6131d9878961479c565b612e12565b506040516bffffffffffffffffffffffff1930606090811b821660208401524660348401528b811b82166054840152606883018490526001600160c01b031960c08a901b1660888401526090830188905286901b1660b08201529091506000906132ba9084906132b49060c401604051602081830303815290604052805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b906137f2565b90506132c5816116f4565b61331d5760405162461bcd60e51b8152602060048201526024808201527f4d696e74696e674d616e616765723a205349474e45525f49535f4e4f545f4d49604482015263272a22a960e11b6064820152608401610981565b42866001600160401b03161161337f5760405162461bcd60e51b815260206004820152602160248201527f4d696e74696e674d616e616765723a20455850495245445f5349474e415455526044820152604560f81b6064820152608401610981565b505050505050505050565b60006133d18a61339a8a8c61479c565b6133a4898b61479c565b6133ae888a61479c565b60008f6001600160a01b03166133c2612345565b6001600160a01b031614612668565b9050896001600160a01b03166133e5612345565b6001600160a01b0316827fa545b6fd3355e8d57f8c8147bafe740545bd3ea1f94bef2576a6d532a7c3b60586866040516134329291909182526001600160a01b0316602082015260400190565b60405180910390a450505050505050505050565b600081815260cd60205260408120805482919061346290614aab565b9050119050919050565b613474612c54565b6001600160a01b0381166134d95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610981565b610cf481612f19565b610d818282612bcd565b7f893ef2ea16c023f61d4f55d3e6ee3fc3f2fbfd478461323dbc2fbf919047086e546000906001600160a01b0316330361352d575060331936013560601c90565b503390565b604080518082019091526000808252602082015260405180604001604052808381526020018486602001516135679190614dc5565b9052949350505050565b6000815160000361358457506000919050565b60208201805160f81c603081108015906135a2575060398160ff1611155b1580156135c4575060618160ff16101580156135c25750607a8160ff1611155b155b156135d3575060009392505050565b83516001811115613641576135f5836135ed600184614971565b015160f81c90565b915060308260ff161015801561360f575060398260ff1611155b158015613631575060618260ff161015801561362f5750607a8260ff1611155b155b1561364157506000949350505050565b60015b61364f600183614971565b8110156136c9578381015160f81c9250602d8314801590613685575060308360ff1610158015613683575060398360ff1611155b155b80156136a6575060618360ff16101580156136a45750607a8360ff1611155b155b156136b75750600095945050505050565b806136c1816149e0565b915050613644565b50600195945050505050565b6136de8161170e565b1561372b5760405162461bcd60e51b815260206004820152601d60248201527f4d696e74696e674d616e616765723a20544f4b454e5f424c4f434b45440000006044820152606401610981565b610cf481613816565b60008061374b600084600186516110169190614971565b60ca549091506001600160a01b0316158015906137875750807f0f4a10a4f46c288cea365fcf45cccf0e9d901b945b9829ccdb54c10dc3cb7a6f145b9392505050565b613798828261156e565b610d81576137b0816001600160a01b0316601461389a565b6137bb83602061389a565b6040516020016137cc929190614dd8565b60408051601f198184030181529082905262461bcd60e51b825261098191600401614323565b60008060006138018585613a35565b9150915061380e81613a7a565b509392505050565b604080517f1ec047073e2c8b15660901dbfdb6e3ff6365bd699dd9f95dcc6eab5448bebd69602082015290810182905260019061385590606001611749565b805460ff19169115159190911790556040518181527f2ce5d9351b1d590d5a066db0d2dc7602d55f092506a83a7ee8c4d78ee357d75a9060200160405180910390a150565b606060006138a9836002614e4d565b6138b4906002614dc5565b6001600160401b038111156138cb576138cb6140da565b6040519080825280601f01601f1916602001820160405280156138f5576020820181803683370190505b509050600360fc1b8160008151811061391057613910614984565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061393f5761393f614984565b60200101906001600160f81b031916908160001a9053506000613963846002614e4d565b61396e906001614dc5565b90505b60018111156139e6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106139a2576139a2614984565b1a60f81b8282815181106139b8576139b8614984565b60200101906001600160f81b031916908160001a90535060049490941c936139df81614c21565b9050613971565b5083156137875760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610981565b6000808251604103613a6b5760208301516040840151606085015160001a613a5f87828585613c30565b94509450505050613a73565b506000905060025b9250929050565b6000816004811115613a8e57613a8e614e64565b03613a965750565b6001816004811115613aaa57613aaa614e64565b03613af75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610981565b6002816004811115613b0b57613b0b614e64565b03613b585760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610981565b6003816004811115613b6c57613b6c614e64565b03613bc45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610981565b6004816004811115613bd857613bd8614e64565b03610cf45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610981565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613c675750600090506003613d14565b8460ff16601b14158015613c7f57508460ff16601c14155b15613c905750600090506004613d14565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613ce4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613d0d57600060019250925050613d14565b9150600090505b94509492505050565b508054613d2990614aab565b6000825580601f10613d39575050565b601f016020900490600052602060002090810190610cf491905b80821115613d675760008155600101613d53565b5090565b600060208284031215613d7d57600080fd5b81356001600160e01b03198116811461378757600080fd5b6001600160401b0381168114610cf457600080fd5b8035613db581613d95565b919050565b60008060408385031215613dcd57600080fd5b8235613dd881613d95565b946020939093013593505050565b600060208284031215613df857600080fd5b5035919050565b60008083601f840112613e1157600080fd5b5081356001600160401b03811115613e2857600080fd5b602083019150836020828501011115613a7357600080fd5b600080600060408486031215613e5557600080fd5b8335925060208401356001600160401b03811115613e7257600080fd5b613e7e86828701613dff565b9497909650939450505050565b6001600160a01b0381168114610cf457600080fd5b8035613db581613e8b565b60008060408385031215613ebe57600080fd5b823591506020830135613ed081613e8b565b809150509250929050565b600060208284031215613eed57600080fd5b813561378781613e8b565b60008083601f840112613f0a57600080fd5b5081356001600160401b03811115613f2157600080fd5b6020830191508360208260051b8501011115613a7357600080fd5b8015158114610cf457600080fd5b60008060008060008060008060a0898b031215613f6657600080fd5b8835613f7181613e8b565b975060208901356001600160401b0380821115613f8d57600080fd5b613f998c838d01613ef8565b909950975060408b0135915080821115613fb257600080fd5b613fbe8c838d01613ef8565b909750955060608b0135915080821115613fd757600080fd5b50613fe48b828c01613ef8565b9094509250506080890135613ff881613f3c565b809150509295985092959890939650565b600080600080600080600080600060c08a8c03121561402757600080fd5b893561403281613e8b565b985060208a01356001600160401b038082111561404e57600080fd5b61405a8d838e01613ef8565b909a50985060408c013591508082111561407357600080fd5b61407f8d838e01613ef8565b909850965060608c013591508082111561409857600080fd5b506140a58c828d01613ef8565b90955093505060808a01356140b981613d95565b915060a08a01356140c981613f3c565b809150509295985092959850929598565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614118576141186140da565b604052919050565b60006001600160401b03821115614139576141396140da565b5060051b60200190565b6000602080838503121561415657600080fd5b82356001600160401b0381111561416c57600080fd5b8301601f8101851361417d57600080fd5b803561419061418b82614120565b6140f0565b81815260059190911b820183019083810190878311156141af57600080fd5b928401925b828410156141d65783356141c781613e8b565b825292840192908401906141b4565b979650505050505050565b600080600080606085870312156141f757600080fd5b843561420281613e8b565b93506020850135925060408501356001600160401b0381111561422457600080fd5b61423087828801613dff565b95989497509550505050565b6000806020838503121561424f57600080fd5b82356001600160401b0381111561426557600080fd5b61427185828601613dff565b90969095509350505050565b60008060006040848603121561429257600080fd5b83356001600160401b038111156142a857600080fd5b6142b486828701613dff565b90945092505060208401356142c881613f3c565b809150509250925092565b60005b838110156142ee5781810151838201526020016142d6565b50506000910152565b6000815180845261430f8160208601602086016142d3565b601f01601f19169290920160200192915050565b60208152600061378760208301846142f7565b60008060008060008060c0878903121561434f57600080fd5b863561435a81613e8b565b9550602087013561436a81613e8b565b9450604087013561437a81613e8b565b9350606087013561438a81613e8b565b9250608087013561439a81613e8b565b915060a08701356143aa81613e8b565b809150509295509295509295565b60008060008060008060008060a0898b0312156143d457600080fd5b88356143df81613e8b565b97506020890135965060408901356001600160401b038082111561440257600080fd5b61440e8c838d01613dff565b909850965060608b013591508082111561442757600080fd5b6144338c838d01613ef8565b909650945060808b013591508082111561444c57600080fd5b506144598b828c01613ef8565b999c989b5096995094979396929594505050565b6000806020838503121561448057600080fd5b82356001600160401b0381111561449657600080fd5b61427185828601613ef8565b600080600080600080600080600080600060e08c8e0312156144c357600080fd5b6144cc8c613ea0565b9a506001600160401b038060208e013511156144e757600080fd5b6144f78e60208f01358f01613ef8565b909b50995060408d013581101561450d57600080fd5b61451d8e60408f01358f01613ef8565b909950975060608d013581101561453357600080fd5b6145438e60608f01358f01613ef8565b909750955061455460808e01613daa565b945060a08d013593508060c08e0135111561456e57600080fd5b5061457f8d60c08e01358e01613dff565b81935080925050509295989b509295989b9093969950565b6000806000806000806000806000806000806101008d8f0312156145ba57600080fd5b6145c38d613ea0565b9b506001600160401b0360208e013511156145dd57600080fd5b6145ed8e60208f01358f01613ef8565b909b5099506001600160401b0360408e0135111561460a57600080fd5b61461a8e60408f01358f01613ef8565b90995097506001600160401b0360608e0135111561463757600080fd5b6146478e60608f01358f01613ef8565b909750955061465860808e01613daa565b945061466660a08e01613ea0565b935060c08d013592506001600160401b0360e08e0135111561468757600080fd5b6146978e60e08f01358f01613dff565b81935080925050509295989b509295989b509295989b565b600080604083850312156146c257600080fd5b82356146cd81613e8b565b91506020830135613ed081613e8b565b6020808252818101527f4d696e746572526f6c653a2043414c4c45525f49535f4e4f545f4d494e544552604082015260600190565b60006020828403121561472457600080fd5b815161378781613d95565b60208082526023908201527f4d696e74696e674d616e616765723a20544f4b454e5f4e4f545f455850495241604082015262424c4560e81b606082015260800190565b60208082526010908201526f14185d5cd8589b194e8814105554d15160821b604082015260600190565b60006147aa61418b84614120565b80848252602080830192508560051b8501368111156147c857600080fd5b855b8181101561485a5780356001600160401b03808211156147ea5760008081fd5b90880190601f36818401126147ff5760008081fd5b823582811115614811576148116140da565b614822818301601f191688016140f0565b9250808352368782860101111561483b57600091508182fd5b80878501888501376000908301870152508652509382019382016147ca565b50919695505050505050565b60208082526024908201527f4d696e74696e674d616e616765723a2043414c4c45525f49535f4e4f545f4d49604082015263272a22a960e11b606082015260800190565b6000602082840312156148bc57600080fd5b815161378781613f3c565b6020808252602f908201527f4d696e74696e674d616e616765723a2053454e4445525f49535f4e4f545f415060408201526e282927ab22a22fa7a92fa7aba722a960891b606082015260800190565b60208082526025908201527f4d696e74696e674d616e616765723a204c4142454c535f4c454e4754485f42456040820152642627abaf9960d91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b818103818111156109545761095461495b565b634e487b7160e01b600052603260045260246000fd5b60208082526026908201527f4d696e74696e674d616e616765723a20535542444f4d41494e535f4e4f545f41604082015265131313d5d15160d21b606082015260800190565b6000600182016149f2576149f261495b565b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208082526022908201527f4d696e74696e674d616e616765723a20544c445f4e4f545f5245474953544552604082015261115160f21b606082015260800190565b600060208284031215614a7c57600080fd5b5051919050565b6b756e732d646576746573742d60a01b81528183600c83013760009101600c01908152919050565b600181811c90821680614abf57607f821691505b602082108103614adf57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215614af757600080fd5b815161378781613e8b565b600081518084526020808501808196508360051b8101915082860160005b85811015614b4a578284038952614b388483516142f7565b98850198935090840190600101614b20565b5091979650505050505050565b6001600160a01b038616815260a060208201819052600090614b7b90830187614b02565b8281036040840152614b8d8187614b02565b90508281036060840152614ba18186614b02565b91505082151560808301529695505050505050565b600060018060a01b03808616835260606020840152614bd860608401866142f7565b9150808416604084015250949350505050565b606081526000614bfe6060830186614b02565b8281036020840152614c108186614b02565b915050826040830152949350505050565b600081614c3057614c3061495b565b506000190190565b60008251614c4a8184602087016142d3565b9190910192915050565b601f821115610cde57600081815260208120601f850160051c81016020861015614c7b5750805b601f850160051c820191505b818110156116a357828155600101614c87565b81516001600160401b03811115614cb357614cb36140da565b614cc781614cc18454614aab565b84614c54565b602080601f831160018114614cfc5760008415614ce45750858301515b600019600386901b1c1916600185901b1785556116a3565b600085815260208120601f198616915b82811015614d2b57888601518255948401946001909101908401614d0c565b5085821015614d495787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b828152604060208201526000614d7260408301846142f7565b949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b808201808211156109545761095461495b565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614e108160178501602088016142d3565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614e418160288401602088016142d3565b01602801949350505050565b80820281158282048414176109545761095461495b565b634e487b7160e01b600052602160045260246000fdfe5496787fc1ebdfeba375028c1865f13fbb1d63c0caa356ccc1b29a80f3ebd6229f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a164736f6c6343000811000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/UNSRegistry.json b/artifacts/UNSRegistry.json index 82358647..821c1fde 100644 --- a/artifacts/UNSRegistry.json +++ b/artifacts/UNSRegistry.json @@ -1413,6 +1413,24 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "unlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1521,8 +1539,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615283806100206000396000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c80637e37479e116101e9578063baef73e91161010f578063e985e9c5116100ad578063f5c1f76e1161007c578063f5c1f76e146108ba578063f7df5c60146108cd578063f8c8765e146108e0578063ffa1ad74146108f357600080fd5b8063e985e9c51461085c578063ebf0c71714610898578063ec129eea1461089f578063f25eb5c1146108b257600080fd5b8063c87b56dd116100e9578063c87b56dd14610810578063ce92b33e14610823578063cf2c52cb14610836578063d9548e531461084957600080fd5b8063baef73e9146107a8578063bb5b27e1146107ea578063bebec6b4146107fd57600080fd5b8063a3f4df7e11610187578063b3f9e4cb11610156578063b3f9e4cb1461074e578063b85afd2814610761578063b88d4fde14610782578063ba5d40b71461079557600080fd5b8063a3f4df7e146106dc578063a424740014610708578063ab3b87fe1461071b578063ac9650d81461072e57600080fd5b80639559c0bd116101c35780639559c0bd146106a657806395d89b41146106ae57806399e0dd7c146106b6578063a22cb465146106c957600080fd5b80637e37479e1461066d57806394d008ef146106805780639508b1c41461069357600080fd5b806342842e0e116102ce578063509602391161026c578063663f7b2a1161023b578063663f7b2a14610605578063672b9f81146106185780636ccbae5f1461063957806370a082311461065a57600080fd5b806350960239146105b0578063572b6c05146105c35780636352211e146105df578063638e5c78146105f257600080fd5b806347c81699116102a857806347c81699146105645780634a72584d146105775780634f558e791461058a57806350382c1a1461059d57600080fd5b806342842e0e1461052b57806342966c681461053e578063430c20811461055157600080fd5b80631bf7e13e1161034657806327f189751161031557806327f18975146104df578063310bd74b146104f25780633f72ec6e1461050557806340c10f191461051857600080fd5b80631bf7e13e146104855780631f71be061461049857806323b872dd146104ab578063276fabb1146104be57600080fd5b8063095ea7b311610382578063095ea7b314610411578063150b7a02146104265780631bd8cc1a146104525780631be5e7ed1461047257600080fd5b806301ffc9a7146103a957806306fdde03146103d1578063081812fc146103e6575b600080fd5b6103bc6103b7366004613ea8565b610917565b60405190151581526020015b60405180910390f35b6103d9610928565b6040516103c89190613f15565b6103f96103f4366004613f28565b6109ba565b6040516001600160a01b0390911681526020016103c8565b61042461041f366004613f56565b6109e1565b005b610439610434366004613fc3565b6109fa565b6040516001600160e01b031990911681526020016103c8565b610465610460366004614079565b610b54565b6040516103c8919061411c565b6103d961048036600461412f565b610c4a565b6103d9610493366004614166565b610c95565b6104246104a63660046141e6565b610da0565b6104246104b93660046142a2565b610e48565b6104d16104cc3660046142e3565b610e9b565b6040519081526020016103c8565b6104246104ed366004614324565b610eaa565b610424610500366004613f28565b610ef2565b610424610513366004614397565b610f2d565b610424610526366004613f56565b61102f565b6104246105393660046142a2565b61107c565b61042461054c366004613f28565b611097565b6103bc61055f366004613f56565b6110db565b6104246105723660046143c1565b6110e7565b610424610585366004614422565b611126565b6103bc610598366004613f28565b61116c565b6104246105ab366004614529565b61118b565b6104246105be36600461455d565b6111c1565b6103bc6105d136600461455d565b6001600160a01b0316301490565b6103f96105ed366004613f28565b611221565b610424610600366004613f28565b61123e565b610424610613366004614615565b611289565b61062b61062636600461465d565b61132a565b6040516103c892919061467f565b6104d1610647366004613f28565b6000908152610100602052604090205490565b6104d161066836600461455d565b611342565b6104d161067b36600461455d565b6113c8565b61042461068e3660046146a4565b6113f9565b6104246106a13660046146ff565b611448565b6104d1601481565b6103d96114cf565b6104246106c43660046147a2565b6114de565b6104246106d73660046147d7565b611565565b6103d96040518060400160405280600d81526020016c554e533a20526567697374727960981b81525081565b6103bc610716366004614166565b611577565b610424610729366004613f56565b6115c2565b61074161073c3660046142e3565b611607565b6040516103c89190614803565b6103f961075c366004613f28565b6116e3565b61077461076f366004614079565b61170d565b6040516103c8929190614865565b61042461079036600461488a565b61182f565b6104246107a33660046141e6565b611876565b6107d26107b6366004613f28565b600090815261013960205260409020546001600160401b031690565b6040516001600160401b0390911681526020016103c8565b6103d96107f8366004613f28565b6118ff565b6103d961080b36600461455d565b6119a1565b6103d961081e366004613f28565b611a6b565b610424610831366004614324565b611ad1565b6104246108443660046148f5565b611b10565b6103bc610857366004613f28565b611bdf565b6103bc61086a36600461493c565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b60006104d1565b6104246108ad366004614324565b611c22565b610424611c61565b6104656108c83660046142e3565b611ce8565b6104246108db366004614975565b611d9b565b6104246108ee3660046149a7565b611e2c565b6103d9604051806040016040528060058152602001640302e392e360dc1b81525081565b600061092282612002565b92915050565b60606065805461093790614a03565b80601f016020809104026020016040519081016040528092919081815260200182805461096390614a03565b80156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b5050505050905090565b60006109c582612052565b506000908152606960205260409020546001600160a01b031690565b806109eb816120b1565b6109f58383612117565b505050565b60007f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec92378546001600160a01b0316610a2f612239565b6001600160a01b031603610af057610a45612239565b6001600160a01b03166342966c68856040518263ffffffff1660e01b8152600401610a7291815260200190565b600060405180830381600087803b158015610a8c57600080fd5b505af1158015610aa0573d6000803e3d6000fd5b505050821580159150610aba5750610aba82840184614a37565b15610ad857610ac93085612248565b610ad38585612396565b610ae2565b610ae28585612248565b50630a85bd0160e11b610b4b565b60405162461bcd60e51b815260206004820152602560248201527f52656769737472793a204552433732315f524543454956494e475f50524f4849604482015264109255115160da1b60648201526084015b60405180910390fd5b95945050505050565b6060826001600160401b03811115610b6e57610b6e614474565b604051908082528060200260200182016040528015610ba157816020015b6060815260200190600190039081610b8c5790505b50905060005b83811015610c4257610c12858583818110610bc457610bc4614a52565b9050602002810190610bd69190614a68565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250612441915050565b828281518110610c2457610c24614a52565b60200260200101819052508080610c3a90614ac4565b915050610ba7565b509392505050565b6060610c8d84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250612441915050565b949350505050565b606060005a9050610ca7858585611577565b610d035760405162461bcd60e51b815260206004820152602760248201527f554e535265676973747279466f727761726465723a205349474e41545552455f6044820152661253959053125160ca1b6064820152608401610b42565b610d95610d13602087018761455d565b30604088013584610d2760608b018b614a68565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b908190840183828082843760009201919091525061247692505050565b9150505b9392505050565b610134546001600160a01b0316610db5612239565b6001600160a01b031614610ddb5760405162461bcd60e51b8152600401610b4290614add565b6000610def610dea888a614b24565b612557565b509050610dfb816125af565b610e0e610e078261261c565b8a8361267c565b610e1b8686868685612823565b8115610e3d57610e3d8982610e38610e338b8d614b24565b612891565b612912565b505050505050505050565b80610e5a610e54612239565b82612954565b610e765760405162461bcd60e51b8152600401610b4290614b31565b81610e80816120b1565b610e89836125af565b610e9485858561267c565b5050505050565b6000610c42610dea8385614b24565b80610eb6610e54612239565b610ed25760405162461bcd60e51b8152600401610b4290614b31565b81610edc816120b1565b610ee987878787876129e5565b50505050505050565b80610efe610e54612239565b610f1a5760405162461bcd60e51b8152600401610b4290614b31565b81610f24816120b1565b6109f5836125af565b610134546001600160a01b0316610f42612239565b6001600160a01b031614610f685760405162461bcd60e51b8152600401610b4290614add565b610f7181612052565b42826001600160401b031611610fc95760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a204558504952595f494e5f5041535400000000000000006044820152606401610b42565b60008181526101396020908152604091829020805467ffffffffffffffff19166001600160401b038616908117909155915191825282917f93feabb03ab84f47fc85bf0c298103fca21d8c8bc376eae0c1e1c56b9d4f7789910160405180910390a25050565b611037612a48565b6001600160a01b0316611048612239565b6001600160a01b03161461106e5760405162461bcd60e51b8152600401610b4290614b7a565b6110788282612248565b5050565b6109f58383836040518060200160405280600081525061182f565b806110a3610e54612239565b6110bf5760405162461bcd60e51b8152600401610b4290614b31565b816110c9816120b1565b6110d2836125af565b6109f583612b49565b6000610d998383612954565b806110f3610e54612239565b61110f5760405162461bcd60e51b8152600401610b4290614b31565b81611119816120b1565b610ee98787878787612bf0565b80611132610e54612239565b61114e5760405162461bcd60e51b8152600401610b4290614b31565b81611158816120b1565b61116486868686612ccf565b505050505050565b6000818152606760205260408120546001600160a01b03161515610922565b6111be8160405160200161119f9190614bbc565b6040516020818303038152906040528051906020012060001c82612d6f565b50565b610134546001600160a01b03166111d6612239565b6001600160a01b0316146111fc5760405162461bcd60e51b8152600401610b4290614add565b6001600160a01b0316600090815261013660205260409020805460ff19166001179055565b600061122c82611bdf565b611239576109228261261c565b919050565b8061124a610e54612239565b6112665760405162461bcd60e51b8152600401610b4290614b31565b611278611271612239565b308461267c565b611078611283612239565b83612396565b600061129482612557565b50905061129f612239565b6001600160a01b03166112b182611221565b6001600160a01b0316146113075760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610b42565b611310816120b1565b61107861131b612239565b8261132585612891565b612d94565b6060806113378484612e1b565b909590945092505050565b60006001600160a01b0382166113ac5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b42565b506001600160a01b031660009081526068602052604090205490565b6001600160a01b038116600090815261013560205260408120546113eb81612e3c565b6113f3578091505b50919050565b611401612a48565b6001600160a01b0316611412612239565b6001600160a01b0316146114385760405162461bcd60e51b8152600401610b4290614b7a565b6114428484612248565b50505050565b6114528787612e86565b61145a612239565b6001600160a01b031661146c86611221565b6001600160a01b0316146114c25760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610b42565b610ee98484848489612823565b60606066805461093790614a03565b610134546001600160a01b03166114f3612239565b6001600160a01b0316146115195760405162461bcd60e51b8152600401610b4290614add565b610133611527828483614c1e565b507f4b120d6a959a84a520fa48f5f937cca0e79129423487af7901213b5d2e89313b8282604051611559929190614d06565b60405180910390a15050565b611078611570612239565b8383612ef5565b6000610c8d61158585614d1a565b3085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612fc392505050565b806115ce610e54612239565b6115ea5760405162461bcd60e51b8152600401610b4290614b31565b816115f4816120b1565b6114426116008461261c565b858561267c565b606060006116158385614da4565b90503033036116da5760005b838110156116d8576116a8611634612239565b61163c61310c565b87878581811061164e5761164e614a52565b90506020028101906116609190614a68565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250613120915050565b8282815181106116ba576116ba614a52565b602002602001018190525080806116d090614ac4565b915050611621565b505b610c8d81613150565b6000818152606760205260408120546001600160a01b0316611706576000610922565b3092915050565b606080836001600160401b0381111561172857611728614474565b60405190808252806020026020018201604052801561175b57816020015b60608152602001906001900390816117465790505b509150836001600160401b0381111561177657611776614474565b6040519080825280602002602001820160405280156117a957816020015b60608152602001906001900390816117945790505b50905060005b84811015611826576117d98686838181106117cc576117cc614a52565b9050602002013585612e1b565b8483815181106117eb576117eb614a52565b6020026020010184848151811061180457611804614a52565b602002602001018290528290525050808061181e90614ac4565b9150506117af565b50935093915050565b8161183b610e54612239565b6118575760405162461bcd60e51b8152600401610b4290614b31565b82611861816120b1565b61186a846125af565b6111648686868661327b565b610134546001600160a01b031661188b612239565b6001600160a01b0316146118b15760405162461bcd60e51b8152600401610b4290614add565b6000806118c1610dea898b614b24565b915091506118ce816132ae565b6118e68a836118e0610e338c8e614b24565b8661330e565b6118f38787878786612823565b50505050505050505050565b600081815260c96020526040902080546060919061191c90614a03565b80601f016020809104026020016040519081016040528092919081815260200182805461194890614a03565b80156119955780601f1061196a57610100808354040283529160200191611995565b820191906000526020600020905b81548152906001019060200180831161197857829003601f168201915b50505050509050919050565b6001600160a01b038116600090815261013560205260409020546060906119c781612e3c565b6113f35760008181526101386020526040902080546119e590614a03565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1190614a03565b8015611a5e5780601f10611a3357610100808354040283529160200191611a5e565b820191906000526020600020905b815481529060010190602001808311611a4157829003601f168201915b5050505050915050919050565b6060611a7682612052565b6000611a80613361565b90506000815111611aa05760405180602001604052806000815250610d99565b80611aaa84613371565b604051602001611abb929190614e17565b6040516020818303038152906040529392505050565b80611add610e54612239565b611af95760405162461bcd60e51b8152600401610b4290614b31565b81611b03816120b1565b610ee98787878787612823565b7f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87546001600160a01b0316611b43612239565b6001600160a01b031614611b695760405162461bcd60e51b8152600401610b4290614b7a565b6020819003611b8c576000611b8082840184613f28565b90506114428482612248565b6000611b9a82840184614e46565b805190915060005b8181101561116457611bcd86848381518110611bc057611bc0614a52565b6020026020010151612248565b80611bd781614ac4565b915050611ba2565b600081815261013960205260408120546001600160401b03161580159061092257505060009081526101396020526040902054426001600160401b039091161090565b80611c2e610e54612239565b611c4a5760405162461bcd60e51b8152600401610b4290614b31565b81611c54816120b1565b610ee98787878787613471565b6000611c6b612239565b6001600160a01b0381166000908152610135602052604081205491925003611cdf5760405162461bcd60e51b815260206004820152602160248201527f52656769737472793a20524556455253455f5245434f52445f49535f454d50546044820152605960f81b6064820152608401610b42565b6111be81613487565b6060816001600160401b03811115611d0257611d02614474565b604051908082528060200260200182016040528015611d3557816020015b6060815260200190600190039081611d205790505b50905060005b82811015611d9457611d64848483818110611d5857611d58614a52565b905060200201356118ff565b828281518110611d7657611d76614a52565b60200260200101819052508080611d8c90614ac4565b915050611d3b565b5092915050565b610134546001600160a01b0316611db0612239565b6001600160a01b031614611dd65760405162461bcd60e51b8152600401610b4290614add565b61013454611ded906001600160a01b031684612248565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c39528383604051611e1f929190614d06565b60405180910390a2505050565b600054610100900460ff1615808015611e4c5750600054600160ff909116105b80611e665750303b158015611e66575060005460ff166001145b611ec95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b42565b6000805460ff191660011790558015611eec576000805461ff0019166101001790555b61013480546001600160a01b0319166001600160a01b038716179055837f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec9237880546001600160a01b0319166001600160a01b03929092169190911790556040805180820182526013815272556e73746f707061626c6520446f6d61696e7360681b60208083019190915282518084019093526002835261155160f21b90830152611f94916134cc565b611f9c61350c565b611fa461350c565b611fad83613535565b611fb682613565565b8015610e94576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60006001600160e01b031982166380ac58cd60e01b148061203357506001600160e01b03198216635b5e139f60e01b145b8061092257506301ffc9a760e01b6001600160e01b0319831614610922565b6000818152606760205260409020546001600160a01b03166111be5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b42565b30330361210e576120c061310c565b81146111be5760405162461bcd60e51b815260206004820152601760248201527f52656769737472793a20544f4b454e5f494e56414c49440000000000000000006044820152606401610b42565b6111be81613595565b60006121228261261c565b9050806001600160a01b0316836001600160a01b03160361218f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610b42565b806001600160a01b03166121a1612239565b6001600160a01b031614806121bd57506121bd8161086a612239565b61222f5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610b42565b6109f583836135c3565b6000612243613631565b905090565b6001600160a01b03821661229e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b42565b6000818152606760205260409020546001600160a01b0316156123035760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b42565b61230f6000838361364c565b6001600160a01b0382166000908152606860205260408120805460019290612338908490614ed6565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006123a0612a48565b90506123ac81836135c3565b60008051602061523083398151915254604080516020808201869052825180830390910181528183019283905263e3dec8fb60e01b9092526001600160a01b0390921691829163e3dec8fb91612409918891309190604401614ee9565b600060405180830381600087803b15801561242357600080fd5b505af1158015612437573d6000803e3d6000fd5b5050505050505050565b6060610d99836040516020016124579190614bbc565b6040516020818303038152906040528051906020012060001c83613728565b606061248185613595565b600080876001600160a01b03168661249b8b8a8989613120565b6040516124a89190614bbc565b60006040518083038160008787f1925050503d80600081146124e6576040519150601f19603f3d011682016040523d82523d6000602084013e6124eb565b606091505b5090925090506124fc603f87614f2b565b5a1161250a5761250a614f3f565b61254a82826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061380a565b9998505050505050505050565b805160009081905b80156125a9578291506125958285612578600185614f55565b8151811061258857612588614a52565b6020026020010151613843565b9250806125a181614f68565b91505061255f565b50915091565b6125b8816138ef565b6040516020016125ca91815260200190565b60408051601f198184030181528282528051602091820120600085815260cb9092529181209190915582917f185c30856dadb58bf097c1f665a52ada7029752dbcad008ea3fefc73bee8c9fe9190a250565b6000818152606760205260408120546001600160a01b0316806109225760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b42565b826001600160a01b031661268f8261261c565b6001600160a01b0316146126f35760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610b42565b6001600160a01b0382166127555760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b42565b61276083838361364c565b61276b6000826135c3565b6001600160a01b0383166000908152606860205260408120805460019290612794908490614f55565b90915550506001600160a01b03821660009081526068602052604081208054600192906127c2908490614ed6565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b848110156111645761287f86868381811061284357612843614a52565b90506020028101906128559190614a68565b86868581811061286757612867614a52565b90506020028101906128799190614a68565b86612bf0565b8061288981614ac4565b915050612826565b60606000826000815181106128a8576128a8614a52565b602002602001015190506000600190505b8351811015611d9457818482815181106128d5576128d5614a52565b60200260200101516040516020016128ee929190614f7f565b6040516020818303038152906040529150808061290a90614ac4565b9150506128b9565b61dead6001600160a01b0384161480159061294457506001600160a01b03831660009081526101356020526040902054155b156109f5576109f5838383612d94565b60008061296083611221565b90506001600160a01b03811615801590610c8d5750806001600160a01b0316846001600160a01b031614806129ba57506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b80610c8d5750836001600160a01b03166129d3846109ba565b6001600160a01b031614949350505050565b60005b8481101561116457612a36868683818110612a0557612a05614a52565b90506020020135858584818110612a1e57612a1e614a52565b9050602002810190612a309190614a68565b85612ccf565b80612a4081614ac4565b9150506129e8565b600080516020615230833981519152546000906001600160a01b03168015612b455760405163721804d360e11b81523060048201526000906001600160a01b0383169063e43009a690602401602060405180830381865afa158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad59190614fbb565b60405163e66f960360e01b8152600481018290529091506001600160a01b0383169063e66f960390602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b419190614fd4565b9250505b5090565b6000612b548261261c565b9050612b628160008461364c565b612b6d6000836135c3565b6001600160a01b0381166000908152606860205260408120805460019290612b96908490614f55565b909155505060008281526067602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008585604051602001612c05929190614ff1565b60408051601f198184030181528282528051602091820120601f8901829004820284018201909252878352909250612c599183918990899081908401838280828437600092019190915250612d6f92505050565b6111648187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250889250613917915050565b612cd884613a4c565b612d245760405162461bcd60e51b815260206004820152601c60248201527f5265636f726453746f726167653a204b45595f4e4f545f464f554e44000000006044820152606401610b42565b61144284612d31866118ff565b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250613917915050565b612d7882613a4c565b61107857600082815260c9602052604090206109f58282615001565b6000828152610138602052604090208054612dae90614a03565b9050600003612dd257600082815261013860205260409020612dd08282615001565b505b6001600160a01b03831660008181526101356020526040808220859055518492917feb76a21470988c474a21f690cc28fee1ed511bd812dc3c21fd0f49c5e5d4708a91a3505050565b606080612e27846118ff565b9150612e338484613728565b90509250929050565b6000818152610137602052604081205460ff16801561092257506101366000612e63612239565b6001600160a01b0316815260208101919091526040016000205460ff1692915050565b60008051602061523083398151915254604051633805550f60e01b81526001600160a01b03909116908190633805550f90612ec79086908690600401614d06565b600060405180830381600087803b158015612ee157600080fd5b505af1158015610ee9573d6000803e3d6000fd5b816001600160a01b0316836001600160a01b031603612f565760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b42565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa15801561300a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302e9190614fbb565b905060006130dc86606001518051906020012086886020015160405160200161307c9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561310257508551613102906001600160a01b03168286613a72565b9695505050505050565b600030330361311d5750601f193601355b90565b6060828585604051602001613137939291906150c0565b6040516020818303038152906040529050949350505050565b606081516001600160401b0381111561316b5761316b614474565b60405190808252806020026020018201604052801561319e57816020015b60608152602001906001900390816131895790505b50905060005b82518110156113f357600080306001600160a01b03168584815181106131cc576131cc614a52565b60200260200101516040516131e19190614bbc565b600060405180830381855af49150503d806000811461321c576040519150601f19603f3d011682016040523d82523d6000602084013e613221565b606091505b509150915061324982826040518060600160405280602781526020016152506027913961380a565b84848151811061325b5761325b614a52565b60200260200101819052505050808061327390614ac4565b9150506131a4565b61328684848461267c565b61329284848484613bb4565b6114425760405162461bcd60e51b8152600401610b42906150ff565b6000818152610137602052604090205460ff16156111be5760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a20544f4b454e5f555047524144454400000000000000006044820152606401610b42565b6133188484612248565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c3952836040516133489190613f15565b60405180910390a2801561144257611442848484612912565b6060610133805461093790614a03565b6060816000036133985750506040805180820190915260018152600360fc1b602082015290565b8160005b81156133c257806133ac81614ac4565b91506133bb9050600a83614f2b565b915061339c565b6000816001600160401b038111156133dc576133dc614474565b6040519080825280601f01601f191660200182016040528015613406576020820181803683370190505b5090505b8415610c8d5761341b600183614f55565b9150613428600a86615151565b613433906030614ed6565b60f81b81838151811061344857613448614a52565b60200101906001600160f81b031916908160001a90535061346a600a86614f2b565b945061340a565b61347a816125af565b610e948585858585612823565b6001600160a01b03811660008181526101356020526040808220829055517ffcf5eec0cfa3e6332f5f0e63ec242d71f866a61d121d6cdf5c2eb3b668a26c4f9190a250565b600054610100900460ff166134f35760405162461bcd60e51b8152600401610b4290615165565b60656134ff8382615001565b5060666109f58282615001565b600054610100900460ff166135335760405162461bcd60e51b8152600401610b4290615165565b565b600054610100900460ff1661355c5760405162461bcd60e51b8152600401610b4290615165565b6111be81613cb9565b600054610100900460ff1661358c5760405162461bcd60e51b8152600401610b4290615165565b6111be81613d12565b600081815261010060205260409020546135b0906001614ed6565b6000918252610100602052604090912055565b600081815260696020526040902080546001600160a01b0319166001600160a01b03841690811790915581906135f88261261c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000303303613647575060331936013560601c90565b503390565b6001600160a01b03821661366357613663816132ae565b600081815261013960205260409020546001600160401b0316156136fe576001600160a01b038216158015906136b2575061369c612a48565b6001600160a01b0316826001600160a01b031614155b6136fe5760405162461bcd60e51b815260206004820152601960248201527f52656769737472793a20544f4b454e5f455850495241424c45000000000000006044820152606401610b42565b6001600160a01b038316600090815261013560205260409020548190036109f5576109f583613487565b606061373382612e3c565b1561374d5750604080516020810190915260008152610922565b60ca600061375a846138ef565b81526020019081526020016000206000848152602001908152602001600020805461378490614a03565b80601f01602080910402602001604051908101604052809291908181526020018280546137b090614a03565b80156137fd5780601f106137d2576101008083540402835291602001916137fd565b820191906000526020600020905b8154815290600101906020018083116137e057829003601f168201915b5050505050905092915050565b60608315613819575081610d99565b8251156138295782518084602001fd5b8160405162461bcd60e51b8152600401610b429190613f15565b6000815160000361388e5760405162461bcd60e51b815260206004820152601560248201527452656769737472793a204c4142454c5f454d50545960581b6044820152606401610b42565b82826040516020016138a09190614bbc565b604051602081830303815290604052805190602001206040516020016138d0929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b600081815260cb602052604081205415612b4557600082815260cb6020526040902054610922565b60ca6000613924836138ef565b81526020019081526020016000206000858152602001908152602001600020805461394e90614a03565b90506000036139a657826040516139659190614bbc565b6040518091039020817f7ae4f661958fbecc2f77be6b0eb280d2a6f604b29e1e7221c82b9da0c4af7f868560405161399d9190613f15565b60405180910390a35b8160ca60006139b4846138ef565b8152602001908152602001600020600086815260200190815260200160002090816139df9190615001565b50816040516139ee9190614bbc565b604051809103902083604051613a049190614bbc565b6040518091039020827f851ffe8e74d5015261dba0a1f9e1b0e5d42c5af5d2ad1908fee897c7d80a0d928686604051613a3e92919061467f565b60405180910390a450505050565b600081815260c9602052604081208054829190613a6890614a03565b9050119050919050565b6000806000613a818585613d60565b90925090506000816004811115613a9a57613a9a6151b0565b148015613ab85750856001600160a01b0316826001600160a01b0316145b15613ac857600192505050610d99565b600080876001600160a01b0316631626ba7e60e01b8888604051602401613af09291906151c6565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613b2e9190614bbc565b600060405180830381855afa9150503d8060008114613b69576040519150601f19603f3d011682016040523d82523d6000602084013e613b6e565b606091505b5091509150818015613b81575080516020145b8015613ba857508051630b135d3f60e11b90613ba69083016020908101908401614fbb565b145b98975050505050505050565b60006001600160a01b0384163b15613cb157836001600160a01b031663150b7a02613bdd612239565b8786866040518563ffffffff1660e01b8152600401613bff94939291906151df565b6020604051808303816000875af1925050508015613c3a575060408051601f3d908101601f19168201909252613c3791810190615212565b60015b613c97573d808015613c68576040519150601f19603f3d011682016040523d82523d6000602084013e613c6d565b606091505b508051600003613c8f5760405162461bcd60e51b8152600401610b42906150ff565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610c8d565b506001610c8d565b600054610100900460ff16613ce05760405162461bcd60e51b8152600401610b4290615165565b806000805160206152308339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b600054610100900460ff16613d395760405162461bcd60e51b8152600401610b4290615165565b807f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87613cf1565b6000808251604103613d965760208301516040840151606085015160001a613d8a87828585613da5565b94509450505050613d9e565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613ddc5750600090506003613e89565b8460ff16601b14158015613df457508460ff16601c14155b15613e055750600090506004613e89565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613e59573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613e8257600060019250925050613e89565b9150600090505b94509492505050565b6001600160e01b0319811681146111be57600080fd5b600060208284031215613eba57600080fd5b8135610d9981613e92565b60005b83811015613ee0578181015183820152602001613ec8565b50506000910152565b60008151808452613f01816020860160208601613ec5565b601f01601f19169290920160200192915050565b602081526000610d996020830184613ee9565b600060208284031215613f3a57600080fd5b5035919050565b6001600160a01b03811681146111be57600080fd5b60008060408385031215613f6957600080fd5b8235613f7481613f41565b946020939093013593505050565b60008083601f840112613f9457600080fd5b5081356001600160401b03811115613fab57600080fd5b602083019150836020828501011115613d9e57600080fd5b600080600080600060808688031215613fdb57600080fd5b8535613fe681613f41565b94506020860135613ff681613f41565b93506040860135925060608601356001600160401b0381111561401857600080fd5b61402488828901613f82565b969995985093965092949392505050565b60008083601f84011261404757600080fd5b5081356001600160401b0381111561405e57600080fd5b6020830191508360208260051b8501011115613d9e57600080fd5b60008060006040848603121561408e57600080fd5b83356001600160401b038111156140a457600080fd5b6140b086828701614035565b909790965060209590950135949350505050565b600082825180855260208086019550808260051b84010181860160005b8481101561410f57601f198684030189526140fd838351613ee9565b988401989250908301906001016140e1565b5090979650505050505050565b602081526000610d9960208301846140c4565b60008060006040848603121561414457600080fd5b83356001600160401b0381111561415a57600080fd5b6140b086828701613f82565b60008060006040848603121561417b57600080fd5b83356001600160401b038082111561419257600080fd5b90850190608082880312156141a657600080fd5b909350602085013590808211156141bc57600080fd5b506141c986828701613f82565b9497909650939450505050565b8035801515811461123957600080fd5b60008060008060008060008060a0898b03121561420257600080fd5b883561420d81613f41565b975060208901356001600160401b038082111561422957600080fd5b6142358c838d01614035565b909950975060408b013591508082111561424e57600080fd5b61425a8c838d01614035565b909750955060608b013591508082111561427357600080fd5b506142808b828c01614035565b9094509250614293905060808a016141d6565b90509295985092959890939650565b6000806000606084860312156142b757600080fd5b83356142c281613f41565b925060208401356142d281613f41565b929592945050506040919091013590565b600080602083850312156142f657600080fd5b82356001600160401b0381111561430c57600080fd5b61431885828601614035565b90969095509350505050565b60008060008060006060868803121561433c57600080fd5b85356001600160401b038082111561435357600080fd5b61435f89838a01614035565b9097509550602088013591508082111561437857600080fd5b5061438588828901614035565b96999598509660400135949350505050565b600080604083850312156143aa57600080fd5b82356001600160401b0381168114613f7457600080fd5b6000806000806000606086880312156143d957600080fd5b85356001600160401b03808211156143f057600080fd5b6143fc89838a01613f82565b9097509550602088013591508082111561441557600080fd5b5061438588828901613f82565b6000806000806060858703121561443857600080fd5b8435935060208501356001600160401b0381111561445557600080fd5b61446187828801613f82565b9598909750949560400135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156144b2576144b2614474565b604052919050565b600082601f8301126144cb57600080fd5b81356001600160401b038111156144e4576144e4614474565b6144f7601f8201601f191660200161448a565b81815284602083860101111561450c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561453b57600080fd5b81356001600160401b0381111561455157600080fd5b610c8d848285016144ba565b60006020828403121561456f57600080fd5b8135610d9981613f41565b60006001600160401b0382111561459357614593614474565b5060051b60200190565b60006145b06145ab8461457a565b61448a565b8381529050602080820190600585901b8401868111156145cf57600080fd5b845b8181101561460a5780356001600160401b038111156145f05760008081fd5b6145fc898289016144ba565b8552509282019282016145d1565b505050509392505050565b60006020828403121561462757600080fd5b81356001600160401b0381111561463d57600080fd5b8201601f8101841361464e57600080fd5b610c8d8482356020840161459d565b6000806040838503121561467057600080fd5b50508035926020909101359150565b6040815260006146926040830185613ee9565b8281036020840152610d958185613ee9565b600080600080606085870312156146ba57600080fd5b84356146c581613f41565b93506020850135925060408501356001600160401b038111156146e757600080fd5b6146f387828801613f82565b95989497509550505050565b60008060008060008060006080888a03121561471a57600080fd5b87356001600160401b038082111561473157600080fd5b61473d8b838c01613f82565b909950975060208a0135965060408a013591508082111561475d57600080fd5b6147698b838c01614035565b909650945060608a013591508082111561478257600080fd5b5061478f8a828b01614035565b989b979a50959850939692959293505050565b600080602083850312156147b557600080fd5b82356001600160401b038111156147cb57600080fd5b61431885828601613f82565b600080604083850312156147ea57600080fd5b82356147f581613f41565b9150612e33602084016141d6565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561485857603f19888603018452614846858351613ee9565b9450928501929085019060010161482a565b5092979650505050505050565b60408152600061487860408301856140c4565b8281036020840152610d9581856140c4565b600080600080608085870312156148a057600080fd5b84356148ab81613f41565b935060208501356148bb81613f41565b92506040850135915060608501356001600160401b038111156148dd57600080fd5b6148e9878288016144ba565b91505092959194509250565b60008060006040848603121561490a57600080fd5b833561491581613f41565b925060208401356001600160401b0381111561493057600080fd5b6141c986828701613f82565b6000806040838503121561494f57600080fd5b823561495a81613f41565b9150602083013561496a81613f41565b809150509250929050565b60008060006040848603121561498a57600080fd5b8335925060208401356001600160401b0381111561493057600080fd5b600080600080608085870312156149bd57600080fd5b84356149c881613f41565b935060208501356149d881613f41565b925060408501356149e881613f41565b915060608501356149f881613f41565b939692955090935050565b600181811c90821680614a1757607f821691505b6020821081036113f357634e487b7160e01b600052602260045260246000fd5b600060208284031215614a4957600080fd5b610d99826141d6565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112614a7f57600080fd5b8301803591506001600160401b03821115614a9957600080fd5b602001915036819003821315613d9e57600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614ad657614ad6614aae565b5060010190565b60208082526027908201527f52656769737472793a2053454e4445525f49535f4e4f545f4d494e54494e475f60408201526626a0a720a3a2a960c91b606082015260800190565b6000610d9936848461459d565b60208082526029908201527f52656769737472793a2053454e4445525f49535f4e4f545f415050524f5645446040820152682fa7a92fa7aba722a960b91b606082015260800190565b60208082526022908201527f52656769737472793a20494e53554646494349454e545f5045524d495353494f6040820152614e5360f01b606082015260800190565b60008251614bce818460208701613ec5565b9190910192915050565b601f8211156109f557600081815260208120601f850160051c81016020861015614bff5750805b601f850160051c820191505b8181101561116457828155600101614c0b565b6001600160401b03831115614c3557614c35614474565b614c4983614c438354614a03565b83614bd8565b6000601f841160018114614c7d5760008515614c655750838201355b600019600387901b1c1916600186901b178355610e94565b600083815260209020601f19861690835b82811015614cae5786850135825560209485019460019092019101614c8e565b5086821015614ccb5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c8d602083018486614cdd565b600060808236031215614d2c57600080fd5b604051608081016001600160401b038282108183111715614d4f57614d4f614474565b8160405284359150614d6082613f41565b81835260208501356020840152604085013560408401526060850135915080821115614d8b57600080fd5b50614d98368286016144ba565b60608301525092915050565b6000614db26145ab8461457a565b80848252602080830192508560051b850136811115614dd057600080fd5b855b81811015614e0b5780356001600160401b03811115614df15760008081fd5b614dfd36828a016144ba565b865250938201938201614dd2565b50919695505050505050565b60008351614e29818460208801613ec5565b835190830190614e3d818360208801613ec5565b01949350505050565b60006020808385031215614e5957600080fd5b82356001600160401b03811115614e6f57600080fd5b8301601f81018513614e8057600080fd5b8035614e8e6145ab8261457a565b81815260059190911b82018301908381019087831115614ead57600080fd5b928401925b82841015614ecb57833582529284019290840190614eb2565b979650505050505050565b8082018082111561092257610922614aae565b6001600160a01b03848116825283166020820152606060408201819052600090610b4b90830184613ee9565b634e487b7160e01b600052601260045260246000fd5b600082614f3a57614f3a614f15565b500490565b634e487b7160e01b600052600160045260246000fd5b8181038181111561092257610922614aae565b600081614f7757614f77614aae565b506000190190565b60008351614f91818460208801613ec5565b601760f91b9083019081528351614faf816001840160208801613ec5565b01600101949350505050565b600060208284031215614fcd57600080fd5b5051919050565b600060208284031215614fe657600080fd5b8151610d9981613f41565b8183823760009101908152919050565b81516001600160401b0381111561501a5761501a614474565b61502e816150288454614a03565b84614bd8565b602080601f831160018114615063576000841561504b5750858301515b600019600386901b1c1916600185901b178555611164565b600085815260208120601f198616915b8281101561509257888601518255948401946001909101908401615073565b50858210156150b05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600084516150d2818460208901613ec5565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008261516057615160614f15565b500690565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000610c8d6040830184613ee9565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061310290830184613ee9565b60006020828403121561522457600080fd5b8151610d9981613e9256febe2bb46ac0377341a1ec5c3116d70fd5029d704bd46292e58f6265dd177ebafe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103a45760003560e01c80637e37479e116101e9578063baef73e91161010f578063e985e9c5116100ad578063f5c1f76e1161007c578063f5c1f76e146108ba578063f7df5c60146108cd578063f8c8765e146108e0578063ffa1ad74146108f357600080fd5b8063e985e9c51461085c578063ebf0c71714610898578063ec129eea1461089f578063f25eb5c1146108b257600080fd5b8063c87b56dd116100e9578063c87b56dd14610810578063ce92b33e14610823578063cf2c52cb14610836578063d9548e531461084957600080fd5b8063baef73e9146107a8578063bb5b27e1146107ea578063bebec6b4146107fd57600080fd5b8063a3f4df7e11610187578063b3f9e4cb11610156578063b3f9e4cb1461074e578063b85afd2814610761578063b88d4fde14610782578063ba5d40b71461079557600080fd5b8063a3f4df7e146106dc578063a424740014610708578063ab3b87fe1461071b578063ac9650d81461072e57600080fd5b80639559c0bd116101c35780639559c0bd146106a657806395d89b41146106ae57806399e0dd7c146106b6578063a22cb465146106c957600080fd5b80637e37479e1461066d57806394d008ef146106805780639508b1c41461069357600080fd5b806342842e0e116102ce578063509602391161026c578063663f7b2a1161023b578063663f7b2a14610605578063672b9f81146106185780636ccbae5f1461063957806370a082311461065a57600080fd5b806350960239146105b0578063572b6c05146105c35780636352211e146105df578063638e5c78146105f257600080fd5b806347c81699116102a857806347c81699146105645780634a72584d146105775780634f558e791461058a57806350382c1a1461059d57600080fd5b806342842e0e1461052b57806342966c681461053e578063430c20811461055157600080fd5b80631bf7e13e1161034657806327f189751161031557806327f18975146104df578063310bd74b146104f25780633f72ec6e1461050557806340c10f191461051857600080fd5b80631bf7e13e146104855780631f71be061461049857806323b872dd146104ab578063276fabb1146104be57600080fd5b8063095ea7b311610382578063095ea7b314610411578063150b7a02146104265780631bd8cc1a146104525780631be5e7ed1461047257600080fd5b806301ffc9a7146103a957806306fdde03146103d1578063081812fc146103e6575b600080fd5b6103bc6103b7366004613ea8565b610917565b60405190151581526020015b60405180910390f35b6103d9610928565b6040516103c89190613f15565b6103f96103f4366004613f28565b6109ba565b6040516001600160a01b0390911681526020016103c8565b61042461041f366004613f56565b6109e1565b005b610439610434366004613fc3565b6109fa565b6040516001600160e01b031990911681526020016103c8565b610465610460366004614079565b610b54565b6040516103c8919061411c565b6103d961048036600461412f565b610c4a565b6103d9610493366004614166565b610c95565b6104246104a63660046141e6565b610da0565b6104246104b93660046142a2565b610e48565b6104d16104cc3660046142e3565b610e9b565b6040519081526020016103c8565b6104246104ed366004614324565b610eaa565b610424610500366004613f28565b610ef2565b610424610513366004614397565b610f2d565b610424610526366004613f56565b61102f565b6104246105393660046142a2565b61107c565b61042461054c366004613f28565b611097565b6103bc61055f366004613f56565b6110db565b6104246105723660046143c1565b6110e7565b610424610585366004614422565b611126565b6103bc610598366004613f28565b61116c565b6104246105ab366004614529565b61118b565b6104246105be36600461455d565b6111c1565b6103bc6105d136600461455d565b6001600160a01b0316301490565b6103f96105ed366004613f28565b611221565b610424610600366004613f28565b61123e565b610424610613366004614615565b611289565b61062b61062636600461465d565b61132a565b6040516103c892919061467f565b6104d1610647366004613f28565b6000908152610100602052604090205490565b6104d161066836600461455d565b611342565b6104d161067b36600461455d565b6113c8565b61042461068e3660046146a4565b6113f9565b6104246106a13660046146ff565b611448565b6104d1601481565b6103d96114cf565b6104246106c43660046147a2565b6114de565b6104246106d73660046147d7565b611565565b6103d96040518060400160405280600d81526020016c554e533a20526567697374727960981b81525081565b6103bc610716366004614166565b611577565b610424610729366004613f56565b6115c2565b61074161073c3660046142e3565b611607565b6040516103c89190614803565b6103f961075c366004613f28565b6116e3565b61077461076f366004614079565b61170d565b6040516103c8929190614865565b61042461079036600461488a565b61182f565b6104246107a33660046141e6565b611876565b6107d26107b6366004613f28565b600090815261013960205260409020546001600160401b031690565b6040516001600160401b0390911681526020016103c8565b6103d96107f8366004613f28565b6118ff565b6103d961080b36600461455d565b6119a1565b6103d961081e366004613f28565b611a6b565b610424610831366004614324565b611ad1565b6104246108443660046148f5565b611b10565b6103bc610857366004613f28565b611bdf565b6103bc61086a36600461493c565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b60006104d1565b6104246108ad366004614324565b611c22565b610424611c61565b6104656108c83660046142e3565b611ce8565b6104246108db366004614975565b611d9b565b6104246108ee3660046149a7565b611e2c565b6103d9604051806040016040528060058152602001640302e392e360dc1b81525081565b600061092282612002565b92915050565b60606065805461093790614a03565b80601f016020809104026020016040519081016040528092919081815260200182805461096390614a03565b80156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b5050505050905090565b60006109c582612052565b506000908152606960205260409020546001600160a01b031690565b806109eb816120b1565b6109f58383612117565b505050565b60007f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec92378546001600160a01b0316610a2f612239565b6001600160a01b031603610af057610a45612239565b6001600160a01b03166342966c68856040518263ffffffff1660e01b8152600401610a7291815260200190565b600060405180830381600087803b158015610a8c57600080fd5b505af1158015610aa0573d6000803e3d6000fd5b505050821580159150610aba5750610aba82840184614a37565b15610ad857610ac93085612248565b610ad38585612396565b610ae2565b610ae28585612248565b50630a85bd0160e11b610b4b565b60405162461bcd60e51b815260206004820152602560248201527f52656769737472793a204552433732315f524543454956494e475f50524f4849604482015264109255115160da1b60648201526084015b60405180910390fd5b95945050505050565b6060826001600160401b03811115610b6e57610b6e614474565b604051908082528060200260200182016040528015610ba157816020015b6060815260200190600190039081610b8c5790505b50905060005b83811015610c4257610c12858583818110610bc457610bc4614a52565b9050602002810190610bd69190614a68565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250612441915050565b828281518110610c2457610c24614a52565b60200260200101819052508080610c3a90614ac4565b915050610ba7565b509392505050565b6060610c8d84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250612441915050565b949350505050565b606060005a9050610ca7858585611577565b610d035760405162461bcd60e51b815260206004820152602760248201527f554e535265676973747279466f727761726465723a205349474e41545552455f6044820152661253959053125160ca1b6064820152608401610b42565b610d95610d13602087018761455d565b30604088013584610d2760608b018b614a68565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b908190840183828082843760009201919091525061247692505050565b9150505b9392505050565b610134546001600160a01b0316610db5612239565b6001600160a01b031614610ddb5760405162461bcd60e51b8152600401610b4290614add565b6000610def610dea888a614b24565b612557565b509050610dfb816125af565b610e0e610e078261261c565b8a8361267c565b610e1b8686868685612823565b8115610e3d57610e3d8982610e38610e338b8d614b24565b612891565b612912565b505050505050505050565b80610e5a610e54612239565b82612954565b610e765760405162461bcd60e51b8152600401610b4290614b31565b81610e80816120b1565b610e89836125af565b610e9485858561267c565b5050505050565b6000610c42610dea8385614b24565b80610eb6610e54612239565b610ed25760405162461bcd60e51b8152600401610b4290614b31565b81610edc816120b1565b610ee987878787876129e5565b50505050505050565b80610efe610e54612239565b610f1a5760405162461bcd60e51b8152600401610b4290614b31565b81610f24816120b1565b6109f5836125af565b610134546001600160a01b0316610f42612239565b6001600160a01b031614610f685760405162461bcd60e51b8152600401610b4290614add565b610f7181612052565b42826001600160401b031611610fc95760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a204558504952595f494e5f5041535400000000000000006044820152606401610b42565b60008181526101396020908152604091829020805467ffffffffffffffff19166001600160401b038616908117909155915191825282917f93feabb03ab84f47fc85bf0c298103fca21d8c8bc376eae0c1e1c56b9d4f7789910160405180910390a25050565b611037612a48565b6001600160a01b0316611048612239565b6001600160a01b03161461106e5760405162461bcd60e51b8152600401610b4290614b7a565b6110788282612248565b5050565b6109f58383836040518060200160405280600081525061182f565b806110a3610e54612239565b6110bf5760405162461bcd60e51b8152600401610b4290614b31565b816110c9816120b1565b6110d2836125af565b6109f583612b49565b6000610d998383612954565b806110f3610e54612239565b61110f5760405162461bcd60e51b8152600401610b4290614b31565b81611119816120b1565b610ee98787878787612bf0565b80611132610e54612239565b61114e5760405162461bcd60e51b8152600401610b4290614b31565b81611158816120b1565b61116486868686612ccf565b505050505050565b6000818152606760205260408120546001600160a01b03161515610922565b6111be8160405160200161119f9190614bbc565b6040516020818303038152906040528051906020012060001c82612d6f565b50565b610134546001600160a01b03166111d6612239565b6001600160a01b0316146111fc5760405162461bcd60e51b8152600401610b4290614add565b6001600160a01b0316600090815261013660205260409020805460ff19166001179055565b600061122c82611bdf565b611239576109228261261c565b919050565b8061124a610e54612239565b6112665760405162461bcd60e51b8152600401610b4290614b31565b611278611271612239565b308461267c565b611078611283612239565b83612396565b600061129482612557565b50905061129f612239565b6001600160a01b03166112b182611221565b6001600160a01b0316146113075760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610b42565b611310816120b1565b61107861131b612239565b8261132585612891565b612d94565b6060806113378484612e1b565b909590945092505050565b60006001600160a01b0382166113ac5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b42565b506001600160a01b031660009081526068602052604090205490565b6001600160a01b038116600090815261013560205260408120546113eb81612e3c565b6113f3578091505b50919050565b611401612a48565b6001600160a01b0316611412612239565b6001600160a01b0316146114385760405162461bcd60e51b8152600401610b4290614b7a565b6114428484612248565b50505050565b6114528787612e86565b61145a612239565b6001600160a01b031661146c86611221565b6001600160a01b0316146114c25760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610b42565b610ee98484848489612823565b60606066805461093790614a03565b610134546001600160a01b03166114f3612239565b6001600160a01b0316146115195760405162461bcd60e51b8152600401610b4290614add565b610133611527828483614c1e565b507f4b120d6a959a84a520fa48f5f937cca0e79129423487af7901213b5d2e89313b8282604051611559929190614d06565b60405180910390a15050565b611078611570612239565b8383612ef5565b6000610c8d61158585614d1a565b3085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612fc392505050565b806115ce610e54612239565b6115ea5760405162461bcd60e51b8152600401610b4290614b31565b816115f4816120b1565b6114426116008461261c565b858561267c565b606060006116158385614da4565b90503033036116da5760005b838110156116d8576116a8611634612239565b61163c61310c565b87878581811061164e5761164e614a52565b90506020028101906116609190614a68565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250613120915050565b8282815181106116ba576116ba614a52565b602002602001018190525080806116d090614ac4565b915050611621565b505b610c8d81613150565b6000818152606760205260408120546001600160a01b0316611706576000610922565b3092915050565b606080836001600160401b0381111561172857611728614474565b60405190808252806020026020018201604052801561175b57816020015b60608152602001906001900390816117465790505b509150836001600160401b0381111561177657611776614474565b6040519080825280602002602001820160405280156117a957816020015b60608152602001906001900390816117945790505b50905060005b84811015611826576117d98686838181106117cc576117cc614a52565b9050602002013585612e1b565b8483815181106117eb576117eb614a52565b6020026020010184848151811061180457611804614a52565b602002602001018290528290525050808061181e90614ac4565b9150506117af565b50935093915050565b8161183b610e54612239565b6118575760405162461bcd60e51b8152600401610b4290614b31565b82611861816120b1565b61186a846125af565b6111648686868661327b565b610134546001600160a01b031661188b612239565b6001600160a01b0316146118b15760405162461bcd60e51b8152600401610b4290614add565b6000806118c1610dea898b614b24565b915091506118ce816132ae565b6118e68a836118e0610e338c8e614b24565b8661330e565b6118f38787878786612823565b50505050505050505050565b600081815260c96020526040902080546060919061191c90614a03565b80601f016020809104026020016040519081016040528092919081815260200182805461194890614a03565b80156119955780601f1061196a57610100808354040283529160200191611995565b820191906000526020600020905b81548152906001019060200180831161197857829003601f168201915b50505050509050919050565b6001600160a01b038116600090815261013560205260409020546060906119c781612e3c565b6113f35760008181526101386020526040902080546119e590614a03565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1190614a03565b8015611a5e5780601f10611a3357610100808354040283529160200191611a5e565b820191906000526020600020905b815481529060010190602001808311611a4157829003601f168201915b5050505050915050919050565b6060611a7682612052565b6000611a80613361565b90506000815111611aa05760405180602001604052806000815250610d99565b80611aaa84613371565b604051602001611abb929190614e17565b6040516020818303038152906040529392505050565b80611add610e54612239565b611af95760405162461bcd60e51b8152600401610b4290614b31565b81611b03816120b1565b610ee98787878787612823565b7f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87546001600160a01b0316611b43612239565b6001600160a01b031614611b695760405162461bcd60e51b8152600401610b4290614b7a565b6020819003611b8c576000611b8082840184613f28565b90506114428482612248565b6000611b9a82840184614e46565b805190915060005b8181101561116457611bcd86848381518110611bc057611bc0614a52565b6020026020010151612248565b80611bd781614ac4565b915050611ba2565b600081815261013960205260408120546001600160401b03161580159061092257505060009081526101396020526040902054426001600160401b039091161090565b80611c2e610e54612239565b611c4a5760405162461bcd60e51b8152600401610b4290614b31565b81611c54816120b1565b610ee98787878787613471565b6000611c6b612239565b6001600160a01b0381166000908152610135602052604081205491925003611cdf5760405162461bcd60e51b815260206004820152602160248201527f52656769737472793a20524556455253455f5245434f52445f49535f454d50546044820152605960f81b6064820152608401610b42565b6111be81613487565b6060816001600160401b03811115611d0257611d02614474565b604051908082528060200260200182016040528015611d3557816020015b6060815260200190600190039081611d205790505b50905060005b82811015611d9457611d64848483818110611d5857611d58614a52565b905060200201356118ff565b828281518110611d7657611d76614a52565b60200260200101819052508080611d8c90614ac4565b915050611d3b565b5092915050565b610134546001600160a01b0316611db0612239565b6001600160a01b031614611dd65760405162461bcd60e51b8152600401610b4290614add565b61013454611ded906001600160a01b031684612248565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c39528383604051611e1f929190614d06565b60405180910390a2505050565b600054610100900460ff1615808015611e4c5750600054600160ff909116105b80611e665750303b158015611e66575060005460ff166001145b611ec95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b42565b6000805460ff191660011790558015611eec576000805461ff0019166101001790555b61013480546001600160a01b0319166001600160a01b038716179055837f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec9237880546001600160a01b0319166001600160a01b03929092169190911790556040805180820182526013815272556e73746f707061626c6520446f6d61696e7360681b60208083019190915282518084019093526002835261155160f21b90830152611f94916134cc565b611f9c61350c565b611fa461350c565b611fad83613535565b611fb682613565565b8015610e94576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60006001600160e01b031982166380ac58cd60e01b148061203357506001600160e01b03198216635b5e139f60e01b145b8061092257506301ffc9a760e01b6001600160e01b0319831614610922565b6000818152606760205260409020546001600160a01b03166111be5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b42565b30330361210e576120c061310c565b81146111be5760405162461bcd60e51b815260206004820152601760248201527f52656769737472793a20544f4b454e5f494e56414c49440000000000000000006044820152606401610b42565b6111be81613595565b60006121228261261c565b9050806001600160a01b0316836001600160a01b03160361218f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610b42565b806001600160a01b03166121a1612239565b6001600160a01b031614806121bd57506121bd8161086a612239565b61222f5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610b42565b6109f583836135c3565b6000612243613631565b905090565b6001600160a01b03821661229e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b42565b6000818152606760205260409020546001600160a01b0316156123035760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b42565b61230f6000838361364c565b6001600160a01b0382166000908152606860205260408120805460019290612338908490614ed6565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006123a0612a48565b90506123ac81836135c3565b60008051602061523083398151915254604080516020808201869052825180830390910181528183019283905263e3dec8fb60e01b9092526001600160a01b0390921691829163e3dec8fb91612409918891309190604401614ee9565b600060405180830381600087803b15801561242357600080fd5b505af1158015612437573d6000803e3d6000fd5b5050505050505050565b6060610d99836040516020016124579190614bbc565b6040516020818303038152906040528051906020012060001c83613728565b606061248185613595565b600080876001600160a01b03168661249b8b8a8989613120565b6040516124a89190614bbc565b60006040518083038160008787f1925050503d80600081146124e6576040519150601f19603f3d011682016040523d82523d6000602084013e6124eb565b606091505b5090925090506124fc603f87614f2b565b5a1161250a5761250a614f3f565b61254a82826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061380a565b9998505050505050505050565b805160009081905b80156125a9578291506125958285612578600185614f55565b8151811061258857612588614a52565b6020026020010151613843565b9250806125a181614f68565b91505061255f565b50915091565b6125b8816138ef565b6040516020016125ca91815260200190565b60408051601f198184030181528282528051602091820120600085815260cb9092529181209190915582917f185c30856dadb58bf097c1f665a52ada7029752dbcad008ea3fefc73bee8c9fe9190a250565b6000818152606760205260408120546001600160a01b0316806109225760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b42565b826001600160a01b031661268f8261261c565b6001600160a01b0316146126f35760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610b42565b6001600160a01b0382166127555760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b42565b61276083838361364c565b61276b6000826135c3565b6001600160a01b0383166000908152606860205260408120805460019290612794908490614f55565b90915550506001600160a01b03821660009081526068602052604081208054600192906127c2908490614ed6565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b848110156111645761287f86868381811061284357612843614a52565b90506020028101906128559190614a68565b86868581811061286757612867614a52565b90506020028101906128799190614a68565b86612bf0565b8061288981614ac4565b915050612826565b60606000826000815181106128a8576128a8614a52565b602002602001015190506000600190505b8351811015611d9457818482815181106128d5576128d5614a52565b60200260200101516040516020016128ee929190614f7f565b6040516020818303038152906040529150808061290a90614ac4565b9150506128b9565b61dead6001600160a01b0384161480159061294457506001600160a01b03831660009081526101356020526040902054155b156109f5576109f5838383612d94565b60008061296083611221565b90506001600160a01b03811615801590610c8d5750806001600160a01b0316846001600160a01b031614806129ba57506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b80610c8d5750836001600160a01b03166129d3846109ba565b6001600160a01b031614949350505050565b60005b8481101561116457612a36868683818110612a0557612a05614a52565b90506020020135858584818110612a1e57612a1e614a52565b9050602002810190612a309190614a68565b85612ccf565b80612a4081614ac4565b9150506129e8565b600080516020615230833981519152546000906001600160a01b03168015612b455760405163721804d360e11b81523060048201526000906001600160a01b0383169063e43009a690602401602060405180830381865afa158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad59190614fbb565b60405163e66f960360e01b8152600481018290529091506001600160a01b0383169063e66f960390602401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b419190614fd4565b9250505b5090565b6000612b548261261c565b9050612b628160008461364c565b612b6d6000836135c3565b6001600160a01b0381166000908152606860205260408120805460019290612b96908490614f55565b909155505060008281526067602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008585604051602001612c05929190614ff1565b60408051601f198184030181528282528051602091820120601f8901829004820284018201909252878352909250612c599183918990899081908401838280828437600092019190915250612d6f92505050565b6111648187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250889250613917915050565b612cd884613a4c565b612d245760405162461bcd60e51b815260206004820152601c60248201527f5265636f726453746f726167653a204b45595f4e4f545f464f554e44000000006044820152606401610b42565b61144284612d31866118ff565b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250613917915050565b612d7882613a4c565b61107857600082815260c9602052604090206109f58282615001565b6000828152610138602052604090208054612dae90614a03565b9050600003612dd257600082815261013860205260409020612dd08282615001565b505b6001600160a01b03831660008181526101356020526040808220859055518492917feb76a21470988c474a21f690cc28fee1ed511bd812dc3c21fd0f49c5e5d4708a91a3505050565b606080612e27846118ff565b9150612e338484613728565b90509250929050565b6000818152610137602052604081205460ff16801561092257506101366000612e63612239565b6001600160a01b0316815260208101919091526040016000205460ff1692915050565b60008051602061523083398151915254604051633805550f60e01b81526001600160a01b03909116908190633805550f90612ec79086908690600401614d06565b600060405180830381600087803b158015612ee157600080fd5b505af1158015610ee9573d6000803e3d6000fd5b816001600160a01b0316836001600160a01b031603612f565760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b42565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa15801561300a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302e9190614fbb565b905060006130dc86606001518051906020012086886020015160405160200161307c9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561310257508551613102906001600160a01b03168286613a72565b9695505050505050565b600030330361311d5750601f193601355b90565b6060828585604051602001613137939291906150c0565b6040516020818303038152906040529050949350505050565b606081516001600160401b0381111561316b5761316b614474565b60405190808252806020026020018201604052801561319e57816020015b60608152602001906001900390816131895790505b50905060005b82518110156113f357600080306001600160a01b03168584815181106131cc576131cc614a52565b60200260200101516040516131e19190614bbc565b600060405180830381855af49150503d806000811461321c576040519150601f19603f3d011682016040523d82523d6000602084013e613221565b606091505b509150915061324982826040518060600160405280602781526020016152506027913961380a565b84848151811061325b5761325b614a52565b60200260200101819052505050808061327390614ac4565b9150506131a4565b61328684848461267c565b61329284848484613bb4565b6114425760405162461bcd60e51b8152600401610b42906150ff565b6000818152610137602052604090205460ff16156111be5760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a20544f4b454e5f555047524144454400000000000000006044820152606401610b42565b6133188484612248565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c3952836040516133489190613f15565b60405180910390a2801561144257611442848484612912565b6060610133805461093790614a03565b6060816000036133985750506040805180820190915260018152600360fc1b602082015290565b8160005b81156133c257806133ac81614ac4565b91506133bb9050600a83614f2b565b915061339c565b6000816001600160401b038111156133dc576133dc614474565b6040519080825280601f01601f191660200182016040528015613406576020820181803683370190505b5090505b8415610c8d5761341b600183614f55565b9150613428600a86615151565b613433906030614ed6565b60f81b81838151811061344857613448614a52565b60200101906001600160f81b031916908160001a90535061346a600a86614f2b565b945061340a565b61347a816125af565b610e948585858585612823565b6001600160a01b03811660008181526101356020526040808220829055517ffcf5eec0cfa3e6332f5f0e63ec242d71f866a61d121d6cdf5c2eb3b668a26c4f9190a250565b600054610100900460ff166134f35760405162461bcd60e51b8152600401610b4290615165565b60656134ff8382615001565b5060666109f58282615001565b600054610100900460ff166135335760405162461bcd60e51b8152600401610b4290615165565b565b600054610100900460ff1661355c5760405162461bcd60e51b8152600401610b4290615165565b6111be81613cb9565b600054610100900460ff1661358c5760405162461bcd60e51b8152600401610b4290615165565b6111be81613d12565b600081815261010060205260409020546135b0906001614ed6565b6000918252610100602052604090912055565b600081815260696020526040902080546001600160a01b0319166001600160a01b03841690811790915581906135f88261261c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000303303613647575060331936013560601c90565b503390565b6001600160a01b03821661366357613663816132ae565b600081815261013960205260409020546001600160401b0316156136fe576001600160a01b038216158015906136b2575061369c612a48565b6001600160a01b0316826001600160a01b031614155b6136fe5760405162461bcd60e51b815260206004820152601960248201527f52656769737472793a20544f4b454e5f455850495241424c45000000000000006044820152606401610b42565b6001600160a01b038316600090815261013560205260409020548190036109f5576109f583613487565b606061373382612e3c565b1561374d5750604080516020810190915260008152610922565b60ca600061375a846138ef565b81526020019081526020016000206000848152602001908152602001600020805461378490614a03565b80601f01602080910402602001604051908101604052809291908181526020018280546137b090614a03565b80156137fd5780601f106137d2576101008083540402835291602001916137fd565b820191906000526020600020905b8154815290600101906020018083116137e057829003601f168201915b5050505050905092915050565b60608315613819575081610d99565b8251156138295782518084602001fd5b8160405162461bcd60e51b8152600401610b429190613f15565b6000815160000361388e5760405162461bcd60e51b815260206004820152601560248201527452656769737472793a204c4142454c5f454d50545960581b6044820152606401610b42565b82826040516020016138a09190614bbc565b604051602081830303815290604052805190602001206040516020016138d0929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b600081815260cb602052604081205415612b4557600082815260cb6020526040902054610922565b60ca6000613924836138ef565b81526020019081526020016000206000858152602001908152602001600020805461394e90614a03565b90506000036139a657826040516139659190614bbc565b6040518091039020817f7ae4f661958fbecc2f77be6b0eb280d2a6f604b29e1e7221c82b9da0c4af7f868560405161399d9190613f15565b60405180910390a35b8160ca60006139b4846138ef565b8152602001908152602001600020600086815260200190815260200160002090816139df9190615001565b50816040516139ee9190614bbc565b604051809103902083604051613a049190614bbc565b6040518091039020827f851ffe8e74d5015261dba0a1f9e1b0e5d42c5af5d2ad1908fee897c7d80a0d928686604051613a3e92919061467f565b60405180910390a450505050565b600081815260c9602052604081208054829190613a6890614a03565b9050119050919050565b6000806000613a818585613d60565b90925090506000816004811115613a9a57613a9a6151b0565b148015613ab85750856001600160a01b0316826001600160a01b0316145b15613ac857600192505050610d99565b600080876001600160a01b0316631626ba7e60e01b8888604051602401613af09291906151c6565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613b2e9190614bbc565b600060405180830381855afa9150503d8060008114613b69576040519150601f19603f3d011682016040523d82523d6000602084013e613b6e565b606091505b5091509150818015613b81575080516020145b8015613ba857508051630b135d3f60e11b90613ba69083016020908101908401614fbb565b145b98975050505050505050565b60006001600160a01b0384163b15613cb157836001600160a01b031663150b7a02613bdd612239565b8786866040518563ffffffff1660e01b8152600401613bff94939291906151df565b6020604051808303816000875af1925050508015613c3a575060408051601f3d908101601f19168201909252613c3791810190615212565b60015b613c97573d808015613c68576040519150601f19603f3d011682016040523d82523d6000602084013e613c6d565b606091505b508051600003613c8f5760405162461bcd60e51b8152600401610b42906150ff565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610c8d565b506001610c8d565b600054610100900460ff16613ce05760405162461bcd60e51b8152600401610b4290615165565b806000805160206152308339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b600054610100900460ff16613d395760405162461bcd60e51b8152600401610b4290615165565b807f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87613cf1565b6000808251604103613d965760208301516040840151606085015160001a613d8a87828585613da5565b94509450505050613d9e565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613ddc5750600090506003613e89565b8460ff16601b14158015613df457508460ff16601c14155b15613e055750600090506004613e89565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613e59573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613e8257600060019250925050613e89565b9150600090505b94509492505050565b6001600160e01b0319811681146111be57600080fd5b600060208284031215613eba57600080fd5b8135610d9981613e92565b60005b83811015613ee0578181015183820152602001613ec8565b50506000910152565b60008151808452613f01816020860160208601613ec5565b601f01601f19169290920160200192915050565b602081526000610d996020830184613ee9565b600060208284031215613f3a57600080fd5b5035919050565b6001600160a01b03811681146111be57600080fd5b60008060408385031215613f6957600080fd5b8235613f7481613f41565b946020939093013593505050565b60008083601f840112613f9457600080fd5b5081356001600160401b03811115613fab57600080fd5b602083019150836020828501011115613d9e57600080fd5b600080600080600060808688031215613fdb57600080fd5b8535613fe681613f41565b94506020860135613ff681613f41565b93506040860135925060608601356001600160401b0381111561401857600080fd5b61402488828901613f82565b969995985093965092949392505050565b60008083601f84011261404757600080fd5b5081356001600160401b0381111561405e57600080fd5b6020830191508360208260051b8501011115613d9e57600080fd5b60008060006040848603121561408e57600080fd5b83356001600160401b038111156140a457600080fd5b6140b086828701614035565b909790965060209590950135949350505050565b600082825180855260208086019550808260051b84010181860160005b8481101561410f57601f198684030189526140fd838351613ee9565b988401989250908301906001016140e1565b5090979650505050505050565b602081526000610d9960208301846140c4565b60008060006040848603121561414457600080fd5b83356001600160401b0381111561415a57600080fd5b6140b086828701613f82565b60008060006040848603121561417b57600080fd5b83356001600160401b038082111561419257600080fd5b90850190608082880312156141a657600080fd5b909350602085013590808211156141bc57600080fd5b506141c986828701613f82565b9497909650939450505050565b8035801515811461123957600080fd5b60008060008060008060008060a0898b03121561420257600080fd5b883561420d81613f41565b975060208901356001600160401b038082111561422957600080fd5b6142358c838d01614035565b909950975060408b013591508082111561424e57600080fd5b61425a8c838d01614035565b909750955060608b013591508082111561427357600080fd5b506142808b828c01614035565b9094509250614293905060808a016141d6565b90509295985092959890939650565b6000806000606084860312156142b757600080fd5b83356142c281613f41565b925060208401356142d281613f41565b929592945050506040919091013590565b600080602083850312156142f657600080fd5b82356001600160401b0381111561430c57600080fd5b61431885828601614035565b90969095509350505050565b60008060008060006060868803121561433c57600080fd5b85356001600160401b038082111561435357600080fd5b61435f89838a01614035565b9097509550602088013591508082111561437857600080fd5b5061438588828901614035565b96999598509660400135949350505050565b600080604083850312156143aa57600080fd5b82356001600160401b0381168114613f7457600080fd5b6000806000806000606086880312156143d957600080fd5b85356001600160401b03808211156143f057600080fd5b6143fc89838a01613f82565b9097509550602088013591508082111561441557600080fd5b5061438588828901613f82565b6000806000806060858703121561443857600080fd5b8435935060208501356001600160401b0381111561445557600080fd5b61446187828801613f82565b9598909750949560400135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156144b2576144b2614474565b604052919050565b600082601f8301126144cb57600080fd5b81356001600160401b038111156144e4576144e4614474565b6144f7601f8201601f191660200161448a565b81815284602083860101111561450c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561453b57600080fd5b81356001600160401b0381111561455157600080fd5b610c8d848285016144ba565b60006020828403121561456f57600080fd5b8135610d9981613f41565b60006001600160401b0382111561459357614593614474565b5060051b60200190565b60006145b06145ab8461457a565b61448a565b8381529050602080820190600585901b8401868111156145cf57600080fd5b845b8181101561460a5780356001600160401b038111156145f05760008081fd5b6145fc898289016144ba565b8552509282019282016145d1565b505050509392505050565b60006020828403121561462757600080fd5b81356001600160401b0381111561463d57600080fd5b8201601f8101841361464e57600080fd5b610c8d8482356020840161459d565b6000806040838503121561467057600080fd5b50508035926020909101359150565b6040815260006146926040830185613ee9565b8281036020840152610d958185613ee9565b600080600080606085870312156146ba57600080fd5b84356146c581613f41565b93506020850135925060408501356001600160401b038111156146e757600080fd5b6146f387828801613f82565b95989497509550505050565b60008060008060008060006080888a03121561471a57600080fd5b87356001600160401b038082111561473157600080fd5b61473d8b838c01613f82565b909950975060208a0135965060408a013591508082111561475d57600080fd5b6147698b838c01614035565b909650945060608a013591508082111561478257600080fd5b5061478f8a828b01614035565b989b979a50959850939692959293505050565b600080602083850312156147b557600080fd5b82356001600160401b038111156147cb57600080fd5b61431885828601613f82565b600080604083850312156147ea57600080fd5b82356147f581613f41565b9150612e33602084016141d6565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561485857603f19888603018452614846858351613ee9565b9450928501929085019060010161482a565b5092979650505050505050565b60408152600061487860408301856140c4565b8281036020840152610d9581856140c4565b600080600080608085870312156148a057600080fd5b84356148ab81613f41565b935060208501356148bb81613f41565b92506040850135915060608501356001600160401b038111156148dd57600080fd5b6148e9878288016144ba565b91505092959194509250565b60008060006040848603121561490a57600080fd5b833561491581613f41565b925060208401356001600160401b0381111561493057600080fd5b6141c986828701613f82565b6000806040838503121561494f57600080fd5b823561495a81613f41565b9150602083013561496a81613f41565b809150509250929050565b60008060006040848603121561498a57600080fd5b8335925060208401356001600160401b0381111561493057600080fd5b600080600080608085870312156149bd57600080fd5b84356149c881613f41565b935060208501356149d881613f41565b925060408501356149e881613f41565b915060608501356149f881613f41565b939692955090935050565b600181811c90821680614a1757607f821691505b6020821081036113f357634e487b7160e01b600052602260045260246000fd5b600060208284031215614a4957600080fd5b610d99826141d6565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112614a7f57600080fd5b8301803591506001600160401b03821115614a9957600080fd5b602001915036819003821315613d9e57600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614ad657614ad6614aae565b5060010190565b60208082526027908201527f52656769737472793a2053454e4445525f49535f4e4f545f4d494e54494e475f60408201526626a0a720a3a2a960c91b606082015260800190565b6000610d9936848461459d565b60208082526029908201527f52656769737472793a2053454e4445525f49535f4e4f545f415050524f5645446040820152682fa7a92fa7aba722a960b91b606082015260800190565b60208082526022908201527f52656769737472793a20494e53554646494349454e545f5045524d495353494f6040820152614e5360f01b606082015260800190565b60008251614bce818460208701613ec5565b9190910192915050565b601f8211156109f557600081815260208120601f850160051c81016020861015614bff5750805b601f850160051c820191505b8181101561116457828155600101614c0b565b6001600160401b03831115614c3557614c35614474565b614c4983614c438354614a03565b83614bd8565b6000601f841160018114614c7d5760008515614c655750838201355b600019600387901b1c1916600186901b178355610e94565b600083815260209020601f19861690835b82811015614cae5786850135825560209485019460019092019101614c8e565b5086821015614ccb5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c8d602083018486614cdd565b600060808236031215614d2c57600080fd5b604051608081016001600160401b038282108183111715614d4f57614d4f614474565b8160405284359150614d6082613f41565b81835260208501356020840152604085013560408401526060850135915080821115614d8b57600080fd5b50614d98368286016144ba565b60608301525092915050565b6000614db26145ab8461457a565b80848252602080830192508560051b850136811115614dd057600080fd5b855b81811015614e0b5780356001600160401b03811115614df15760008081fd5b614dfd36828a016144ba565b865250938201938201614dd2565b50919695505050505050565b60008351614e29818460208801613ec5565b835190830190614e3d818360208801613ec5565b01949350505050565b60006020808385031215614e5957600080fd5b82356001600160401b03811115614e6f57600080fd5b8301601f81018513614e8057600080fd5b8035614e8e6145ab8261457a565b81815260059190911b82018301908381019087831115614ead57600080fd5b928401925b82841015614ecb57833582529284019290840190614eb2565b979650505050505050565b8082018082111561092257610922614aae565b6001600160a01b03848116825283166020820152606060408201819052600090610b4b90830184613ee9565b634e487b7160e01b600052601260045260246000fd5b600082614f3a57614f3a614f15565b500490565b634e487b7160e01b600052600160045260246000fd5b8181038181111561092257610922614aae565b600081614f7757614f77614aae565b506000190190565b60008351614f91818460208801613ec5565b601760f91b9083019081528351614faf816001840160208801613ec5565b01600101949350505050565b600060208284031215614fcd57600080fd5b5051919050565b600060208284031215614fe657600080fd5b8151610d9981613f41565b8183823760009101908152919050565b81516001600160401b0381111561501a5761501a614474565b61502e816150288454614a03565b84614bd8565b602080601f831160018114615063576000841561504b5750858301515b600019600386901b1c1916600185901b178555611164565b600085815260208120601f198616915b8281101561509257888601518255948401946001909101908401615073565b50858210156150b05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600084516150d2818460208901613ec5565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008261516057615160614f15565b500690565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000610c8d6040830184613ee9565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061310290830184613ee9565b60006020828403121561522457600080fd5b8151610d9981613e9256febe2bb46ac0377341a1ec5c3116d70fd5029d704bd46292e58f6265dd177ebafe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000a", + "bytecode": "0x608060405234801561001057600080fd5b506152e6806100206000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80637e37479e116101f4578063ba5d40b71161011a578063e985e9c5116100ad578063f5c1f76e1161007c578063f5c1f76e146108d8578063f7df5c60146108eb578063f8c8765e146108fe578063ffa1ad741461091157600080fd5b8063e985e9c51461087a578063ebf0c717146108b6578063ec129eea146108bd578063f25eb5c1146108d057600080fd5b8063c87b56dd116100e9578063c87b56dd1461082e578063ce92b33e14610841578063cf2c52cb14610854578063d9548e531461086757600080fd5b8063ba5d40b7146107b3578063baef73e9146107c6578063bb5b27e114610808578063bebec6b41461081b57600080fd5b8063a22cb46511610192578063ac9650d811610161578063ac9650d81461074c578063b3f9e4cb1461076c578063b85afd281461077f578063b88d4fde146107a057600080fd5b8063a22cb465146106e7578063a3f4df7e146106fa578063a424740014610726578063ab3b87fe1461073957600080fd5b80639508b1c4116101ce5780639508b1c4146106b15780639559c0bd146106c457806395d89b41146106cc57806399e0dd7c146106d457600080fd5b80637e37479e146106785780637eee288d1461068b57806394d008ef1461069e57600080fd5b806342842e0e116102d95780635096023911610277578063663f7b2a11610246578063663f7b2a14610610578063672b9f81146106235780636ccbae5f1461064457806370a082311461066557600080fd5b806350960239146105bb578063572b6c05146105ce5780636352211e146105ea578063638e5c78146105fd57600080fd5b806347c81699116102b357806347c816991461056f5780634a72584d146105825780634f558e791461059557806350382c1a146105a857600080fd5b806342842e0e1461053657806342966c6814610549578063430c20811461055c57600080fd5b80631bf7e13e1161035157806327f189751161032057806327f18975146104ea578063310bd74b146104fd5780633f72ec6e1461051057806340c10f191461052357600080fd5b80631bf7e13e146104905780631f71be06146104a357806323b872dd146104b6578063276fabb1146104c957600080fd5b8063095ea7b31161038d578063095ea7b31461041c578063150b7a02146104315780631bd8cc1a1461045d5780631be5e7ed1461047d57600080fd5b806301ffc9a7146103b457806306fdde03146103dc578063081812fc146103f1575b600080fd5b6103c76103c2366004613f0b565b610935565b60405190151581526020015b60405180910390f35b6103e4610946565b6040516103d39190613f78565b6104046103ff366004613f8b565b6109d8565b6040516001600160a01b0390911681526020016103d3565b61042f61042a366004613fb9565b6109ff565b005b61044461043f366004614026565b610a18565b6040516001600160e01b031990911681526020016103d3565b61047061046b3660046140dc565b610b72565b6040516103d3919061417f565b6103e461048b366004614192565b610c68565b6103e461049e3660046141c9565b610cb3565b61042f6104b1366004614249565b610dbe565b61042f6104c4366004614305565b610e54565b6104dc6104d7366004614346565b610ea7565b6040519081526020016103d3565b61042f6104f8366004614387565b610eb6565b61042f61050b366004613f8b565b610efe565b61042f61051e3660046143fa565b610f39565b61042f610531366004613fb9565b61103b565b61042f610544366004614305565b611088565b61042f610557366004613f8b565b6110a3565b6103c761056a366004613fb9565b6110e7565b61042f61057d366004614424565b6110f3565b61042f610590366004614485565b611132565b6103c76105a3366004613f8b565b611178565b61042f6105b636600461458c565b611197565b61042f6105c93660046145c0565b6111cd565b6103c76105dc3660046145c0565b6001600160a01b0316301490565b6104046105f8366004613f8b565b61122d565b61042f61060b366004613f8b565b61124a565b61042f61061e366004614678565b611295565b6106366106313660046146c0565b611336565b6040516103d39291906146e2565b6104dc610652366004613f8b565b6000908152610100602052604090205490565b6104dc6106733660046145c0565b61134e565b6104dc6106863660046145c0565b6113d4565b61042f610699366004613fb9565b611405565b61042f6106ac366004614707565b61145c565b61042f6106bf366004614762565b6114ab565b6104dc601481565b6103e4611532565b61042f6106e2366004614805565b611541565b61042f6106f536600461483a565b6115c8565b6103e46040518060400160405280600d81526020016c554e533a20526567697374727960981b81525081565b6103c76107343660046141c9565b6115da565b61042f610747366004613fb9565b611625565b61075f61075a366004614346565b61166a565b6040516103d39190614866565b61040461077a366004613f8b565b611746565b61079261078d3660046140dc565b611770565b6040516103d39291906148c8565b61042f6107ae3660046148ed565b611892565b61042f6107c1366004614249565b6118d9565b6107f06107d4366004613f8b565b600090815261013960205260409020546001600160401b031690565b6040516001600160401b0390911681526020016103d3565b6103e4610816366004613f8b565b611962565b6103e46108293660046145c0565b611a04565b6103e461083c366004613f8b565b611ace565b61042f61084f366004614387565b611b34565b61042f610862366004614958565b611b73565b6103c7610875366004613f8b565b611c42565b6103c761088836600461499f565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b60006104dc565b61042f6108cb366004614387565b611c85565b61042f611cc4565b6104706108e6366004614346565b611d4b565b61042f6108f93660046149d8565b611dfe565b61042f61090c366004614a0a565b611e8f565b6103e460405180604001604052806005815260200164302e392e3160d81b81525081565b600061094082612065565b92915050565b60606065805461095590614a66565b80601f016020809104026020016040519081016040528092919081815260200182805461098190614a66565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b5050505050905090565b60006109e3826120b5565b506000908152606960205260409020546001600160a01b031690565b80610a0981612114565b610a13838361217a565b505050565b60007f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec92378546001600160a01b0316610a4d61229c565b6001600160a01b031603610b0e57610a6361229c565b6001600160a01b03166342966c68856040518263ffffffff1660e01b8152600401610a9091815260200190565b600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b505050821580159150610ad85750610ad882840184614a9a565b15610af657610ae730856122ab565b610af185856123f9565b610b00565b610b0085856122ab565b50630a85bd0160e11b610b69565b60405162461bcd60e51b815260206004820152602560248201527f52656769737472793a204552433732315f524543454956494e475f50524f4849604482015264109255115160da1b60648201526084015b60405180910390fd5b95945050505050565b6060826001600160401b03811115610b8c57610b8c6144d7565b604051908082528060200260200182016040528015610bbf57816020015b6060815260200190600190039081610baa5790505b50905060005b83811015610c6057610c30858583818110610be257610be2614ab5565b9050602002810190610bf49190614acb565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506124a4915050565b828281518110610c4257610c42614ab5565b60200260200101819052508080610c5890614b27565b915050610bc5565b509392505050565b6060610cab84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506124a4915050565b949350505050565b606060005a9050610cc58585856115da565b610d215760405162461bcd60e51b815260206004820152602760248201527f554e535265676973747279466f727761726465723a205349474e41545552455f6044820152661253959053125160ca1b6064820152608401610b60565b610db3610d3160208701876145c0565b30604088013584610d4560608b018b614acb565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506124d992505050565b9150505b9392505050565b610134546001600160a01b0316610dd361229c565b6001600160a01b031614610df95760405162461bcd60e51b8152600401610b6090614b40565b6000610e0d610e08888a614b87565b6125ba565b509050610e1a8982611405565b610e278686868685612612565b8115610e4957610e498982610e44610e3f8b8d614b87565b612680565b612701565b505050505050505050565b80610e66610e6061229c565b82612743565b610e825760405162461bcd60e51b8152600401610b6090614b94565b81610e8c81612114565b610e95836127d4565b610ea0858585612841565b5050505050565b6000610c60610e088385614b87565b80610ec2610e6061229c565b610ede5760405162461bcd60e51b8152600401610b6090614b94565b81610ee881612114565b610ef587878787876129e8565b50505050505050565b80610f0a610e6061229c565b610f265760405162461bcd60e51b8152600401610b6090614b94565b81610f3081612114565b610a13836127d4565b610134546001600160a01b0316610f4e61229c565b6001600160a01b031614610f745760405162461bcd60e51b8152600401610b6090614b40565b610f7d816120b5565b42826001600160401b031611610fd55760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a204558504952595f494e5f5041535400000000000000006044820152606401610b60565b60008181526101396020908152604091829020805467ffffffffffffffff19166001600160401b038616908117909155915191825282917f93feabb03ab84f47fc85bf0c298103fca21d8c8bc376eae0c1e1c56b9d4f7789910160405180910390a25050565b611043612a4b565b6001600160a01b031661105461229c565b6001600160a01b03161461107a5760405162461bcd60e51b8152600401610b6090614bdd565b61108482826122ab565b5050565b610a1383838360405180602001604052806000815250611892565b806110af610e6061229c565b6110cb5760405162461bcd60e51b8152600401610b6090614b94565b816110d581612114565b6110de836127d4565b610a1383612b4c565b6000610db78383612743565b806110ff610e6061229c565b61111b5760405162461bcd60e51b8152600401610b6090614b94565b8161112581612114565b610ef58787878787612bf3565b8061113e610e6061229c565b61115a5760405162461bcd60e51b8152600401610b6090614b94565b8161116481612114565b61117086868686612cd2565b505050505050565b6000818152606760205260408120546001600160a01b03161515610940565b6111ca816040516020016111ab9190614c1f565b6040516020818303038152906040528051906020012060001c82612d72565b50565b610134546001600160a01b03166111e261229c565b6001600160a01b0316146112085760405162461bcd60e51b8152600401610b6090614b40565b6001600160a01b0316600090815261013660205260409020805460ff19166001179055565b600061123882611c42565b6112455761094082612d97565b919050565b80611256610e6061229c565b6112725760405162461bcd60e51b8152600401610b6090614b94565b61128461127d61229c565b3084612841565b61108461128f61229c565b836123f9565b60006112a0826125ba565b5090506112ab61229c565b6001600160a01b03166112bd8261122d565b6001600160a01b0316146113135760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610b60565b61131c81612114565b61108461132761229c565b8261133185612680565b612df7565b6060806113438484612e7e565b909590945092505050565b60006001600160a01b0382166113b85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b60565b506001600160a01b031660009081526068602052604090205490565b6001600160a01b038116600090815261013560205260408120546113f781612e9f565b6113ff578091505b50919050565b610134546001600160a01b031661141a61229c565b6001600160a01b0316146114405760405162461bcd60e51b8152600401610b6090614b40565b611449816127d4565b61108461145582612d97565b8383612841565b611464612a4b565b6001600160a01b031661147561229c565b6001600160a01b03161461149b5760405162461bcd60e51b8152600401610b6090614bdd565b6114a584846122ab565b50505050565b6114b58787612ee9565b6114bd61229c565b6001600160a01b03166114cf8661122d565b6001600160a01b0316146115255760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610b60565b610ef58484848489612612565b60606066805461095590614a66565b610134546001600160a01b031661155661229c565b6001600160a01b03161461157c5760405162461bcd60e51b8152600401610b6090614b40565b61013361158a828483614c81565b507f4b120d6a959a84a520fa48f5f937cca0e79129423487af7901213b5d2e89313b82826040516115bc929190614d69565b60405180910390a15050565b6110846115d361229c565b8383612f58565b6000610cab6115e885614d7d565b3085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061302692505050565b80611631610e6061229c565b61164d5760405162461bcd60e51b8152600401610b6090614b94565b8161165781612114565b6114a561166384612d97565b8585612841565b606060006116788385614e07565b905030330361173d5760005b8381101561173b5761170b61169761229c565b61169f61316f565b8787858181106116b1576116b1614ab5565b90506020028101906116c39190614acb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250613183915050565b82828151811061171d5761171d614ab5565b6020026020010181905250808061173390614b27565b915050611684565b505b610cab816131b3565b6000818152606760205260408120546001600160a01b0316611769576000610940565b3092915050565b606080836001600160401b0381111561178b5761178b6144d7565b6040519080825280602002602001820160405280156117be57816020015b60608152602001906001900390816117a95790505b509150836001600160401b038111156117d9576117d96144d7565b60405190808252806020026020018201604052801561180c57816020015b60608152602001906001900390816117f75790505b50905060005b848110156118895761183c86868381811061182f5761182f614ab5565b9050602002013585612e7e565b84838151811061184e5761184e614ab5565b6020026020010184848151811061186757611867614ab5565b602002602001018290528290525050808061188190614b27565b915050611812565b50935093915050565b8161189e610e6061229c565b6118ba5760405162461bcd60e51b8152600401610b6090614b94565b826118c481612114565b6118cd846127d4565b611170868686866132de565b610134546001600160a01b03166118ee61229c565b6001600160a01b0316146119145760405162461bcd60e51b8152600401610b6090614b40565b600080611924610e08898b614b87565b9150915061193181613311565b6119498a83611943610e3f8c8e614b87565b86613371565b6119568787878786612612565b50505050505050505050565b600081815260c96020526040902080546060919061197f90614a66565b80601f01602080910402602001604051908101604052809291908181526020018280546119ab90614a66565b80156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b50505050509050919050565b6001600160a01b03811660009081526101356020526040902054606090611a2a81612e9f565b6113ff576000818152610138602052604090208054611a4890614a66565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7490614a66565b8015611ac15780601f10611a9657610100808354040283529160200191611ac1565b820191906000526020600020905b815481529060010190602001808311611aa457829003601f168201915b5050505050915050919050565b6060611ad9826120b5565b6000611ae36133c4565b90506000815111611b035760405180602001604052806000815250610db7565b80611b0d846133d4565b604051602001611b1e929190614e7a565b6040516020818303038152906040529392505050565b80611b40610e6061229c565b611b5c5760405162461bcd60e51b8152600401610b6090614b94565b81611b6681612114565b610ef58787878787612612565b7f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87546001600160a01b0316611ba661229c565b6001600160a01b031614611bcc5760405162461bcd60e51b8152600401610b6090614bdd565b6020819003611bef576000611be382840184613f8b565b90506114a584826122ab565b6000611bfd82840184614ea9565b805190915060005b8181101561117057611c3086848381518110611c2357611c23614ab5565b60200260200101516122ab565b80611c3a81614b27565b915050611c05565b600081815261013960205260408120546001600160401b03161580159061094057505060009081526101396020526040902054426001600160401b039091161090565b80611c91610e6061229c565b611cad5760405162461bcd60e51b8152600401610b6090614b94565b81611cb781612114565b610ef587878787876134d4565b6000611cce61229c565b6001600160a01b0381166000908152610135602052604081205491925003611d425760405162461bcd60e51b815260206004820152602160248201527f52656769737472793a20524556455253455f5245434f52445f49535f454d50546044820152605960f81b6064820152608401610b60565b6111ca816134ea565b6060816001600160401b03811115611d6557611d656144d7565b604051908082528060200260200182016040528015611d9857816020015b6060815260200190600190039081611d835790505b50905060005b82811015611df757611dc7848483818110611dbb57611dbb614ab5565b90506020020135611962565b828281518110611dd957611dd9614ab5565b60200260200101819052508080611def90614b27565b915050611d9e565b5092915050565b610134546001600160a01b0316611e1361229c565b6001600160a01b031614611e395760405162461bcd60e51b8152600401610b6090614b40565b61013454611e50906001600160a01b0316846122ab565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c39528383604051611e82929190614d69565b60405180910390a2505050565b600054610100900460ff1615808015611eaf5750600054600160ff909116105b80611ec95750303b158015611ec9575060005460ff166001145b611f2c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b60565b6000805460ff191660011790558015611f4f576000805461ff0019166101001790555b61013480546001600160a01b0319166001600160a01b038716179055837f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec9237880546001600160a01b0319166001600160a01b03929092169190911790556040805180820182526013815272556e73746f707061626c6520446f6d61696e7360681b60208083019190915282518084019093526002835261155160f21b90830152611ff79161352f565b611fff61356f565b61200761356f565b61201083613598565b612019826135c8565b8015610ea0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60006001600160e01b031982166380ac58cd60e01b148061209657506001600160e01b03198216635b5e139f60e01b145b8061094057506301ffc9a760e01b6001600160e01b0319831614610940565b6000818152606760205260409020546001600160a01b03166111ca5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b60565b3033036121715761212361316f565b81146111ca5760405162461bcd60e51b815260206004820152601760248201527f52656769737472793a20544f4b454e5f494e56414c49440000000000000000006044820152606401610b60565b6111ca816135f8565b600061218582612d97565b9050806001600160a01b0316836001600160a01b0316036121f25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610b60565b806001600160a01b031661220461229c565b6001600160a01b0316148061222057506122208161088861229c565b6122925760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610b60565b610a138383613626565b60006122a6613694565b905090565b6001600160a01b0382166123015760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b60565b6000818152606760205260409020546001600160a01b0316156123665760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b60565b612372600083836136af565b6001600160a01b038216600090815260686020526040812080546001929061239b908490614f39565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612403612a4b565b905061240f8183613626565b60008051602061529383398151915254604080516020808201869052825180830390910181528183019283905263e3dec8fb60e01b9092526001600160a01b0390921691829163e3dec8fb9161246c918891309190604401614f4c565b600060405180830381600087803b15801561248657600080fd5b505af115801561249a573d6000803e3d6000fd5b5050505050505050565b6060610db7836040516020016124ba9190614c1f565b6040516020818303038152906040528051906020012060001c8361378b565b60606124e4856135f8565b600080876001600160a01b0316866124fe8b8a8989613183565b60405161250b9190614c1f565b60006040518083038160008787f1925050503d8060008114612549576040519150601f19603f3d011682016040523d82523d6000602084013e61254e565b606091505b50909250905061255f603f87614f8e565b5a1161256d5761256d614fa2565b6125ad82826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061386d565b9998505050505050505050565b805160009081905b801561260c578291506125f882856125db600185614fb8565b815181106125eb576125eb614ab5565b60200260200101516138a6565b92508061260481614fcb565b9150506125c2565b50915091565b60005b848110156111705761266e86868381811061263257612632614ab5565b90506020028101906126449190614acb565b86868581811061265657612656614ab5565b90506020028101906126689190614acb565b86612bf3565b8061267881614b27565b915050612615565b606060008260008151811061269757612697614ab5565b602002602001015190506000600190505b8351811015611df757818482815181106126c4576126c4614ab5565b60200260200101516040516020016126dd929190614fe2565b604051602081830303815290604052915080806126f990614b27565b9150506126a8565b61dead6001600160a01b0384161480159061273357506001600160a01b03831660009081526101356020526040902054155b15610a1357610a13838383612df7565b60008061274f8361122d565b90506001600160a01b03811615801590610cab5750806001600160a01b0316846001600160a01b031614806127a957506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b80610cab5750836001600160a01b03166127c2846109d8565b6001600160a01b031614949350505050565b6127dd81613952565b6040516020016127ef91815260200190565b60408051601f198184030181528282528051602091820120600085815260cb9092529181209190915582917f185c30856dadb58bf097c1f665a52ada7029752dbcad008ea3fefc73bee8c9fe9190a250565b826001600160a01b031661285482612d97565b6001600160a01b0316146128b85760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610b60565b6001600160a01b03821661291a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b60565b6129258383836136af565b612930600082613626565b6001600160a01b0383166000908152606860205260408120805460019290612959908490614fb8565b90915550506001600160a01b0382166000908152606860205260408120805460019290612987908490614f39565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b8481101561117057612a39868683818110612a0857612a08614ab5565b90506020020135858584818110612a2157612a21614ab5565b9050602002810190612a339190614acb565b85612cd2565b80612a4381614b27565b9150506129eb565b600080516020615293833981519152546000906001600160a01b03168015612b485760405163721804d360e11b81523060048201526000906001600160a01b0383169063e43009a690602401602060405180830381865afa158015612ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad8919061501e565b60405163e66f960360e01b8152600481018290529091506001600160a01b0383169063e66f960390602401602060405180830381865afa158015612b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b449190615037565b9250505b5090565b6000612b5782612d97565b9050612b65816000846136af565b612b70600083613626565b6001600160a01b0381166000908152606860205260408120805460019290612b99908490614fb8565b909155505060008281526067602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008585604051602001612c08929190615054565b60408051601f198184030181528282528051602091820120601f8901829004820284018201909252878352909250612c5c9183918990899081908401838280828437600092019190915250612d7292505050565b6111708187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525088925061397a915050565b612cdb84613aaf565b612d275760405162461bcd60e51b815260206004820152601c60248201527f5265636f726453746f726167653a204b45595f4e4f545f464f554e44000000006044820152606401610b60565b6114a584612d3486611962565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525087925061397a915050565b612d7b82613aaf565b61108457600082815260c960205260409020610a138282615064565b6000818152606760205260408120546001600160a01b0316806109405760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b60565b6000828152610138602052604090208054612e1190614a66565b9050600003612e3557600082815261013860205260409020612e338282615064565b505b6001600160a01b03831660008181526101356020526040808220859055518492917feb76a21470988c474a21f690cc28fee1ed511bd812dc3c21fd0f49c5e5d4708a91a3505050565b606080612e8a84611962565b9150612e96848461378b565b90509250929050565b6000818152610137602052604081205460ff16801561094057506101366000612ec661229c565b6001600160a01b0316815260208101919091526040016000205460ff1692915050565b60008051602061529383398151915254604051633805550f60e01b81526001600160a01b03909116908190633805550f90612f2a9086908690600401614d69565b600060405180830381600087803b158015612f4457600080fd5b505af1158015610ef5573d6000803e3d6000fd5b816001600160a01b0316836001600160a01b031603612fb95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b60565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa15801561306d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613091919061501e565b9050600061313f8660600151805190602001208688602001516040516020016130df9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561316557508551613165906001600160a01b03168286613ad5565b9695505050505050565b60003033036131805750601f193601355b90565b606082858560405160200161319a93929190615123565b6040516020818303038152906040529050949350505050565b606081516001600160401b038111156131ce576131ce6144d7565b60405190808252806020026020018201604052801561320157816020015b60608152602001906001900390816131ec5790505b50905060005b82518110156113ff57600080306001600160a01b031685848151811061322f5761322f614ab5565b60200260200101516040516132449190614c1f565b600060405180830381855af49150503d806000811461327f576040519150601f19603f3d011682016040523d82523d6000602084013e613284565b606091505b50915091506132ac82826040518060600160405280602781526020016152b36027913961386d565b8484815181106132be576132be614ab5565b6020026020010181905250505080806132d690614b27565b915050613207565b6132e9848484612841565b6132f584848484613c17565b6114a55760405162461bcd60e51b8152600401610b6090615162565b6000818152610137602052604090205460ff16156111ca5760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a20544f4b454e5f555047524144454400000000000000006044820152606401610b60565b61337b84846122ab565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c3952836040516133ab9190613f78565b60405180910390a280156114a5576114a5848484612701565b6060610133805461095590614a66565b6060816000036133fb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613425578061340f81614b27565b915061341e9050600a83614f8e565b91506133ff565b6000816001600160401b0381111561343f5761343f6144d7565b6040519080825280601f01601f191660200182016040528015613469576020820181803683370190505b5090505b8415610cab5761347e600183614fb8565b915061348b600a866151b4565b613496906030614f39565b60f81b8183815181106134ab576134ab614ab5565b60200101906001600160f81b031916908160001a9053506134cd600a86614f8e565b945061346d565b6134dd816127d4565b610ea08585858585612612565b6001600160a01b03811660008181526101356020526040808220829055517ffcf5eec0cfa3e6332f5f0e63ec242d71f866a61d121d6cdf5c2eb3b668a26c4f9190a250565b600054610100900460ff166135565760405162461bcd60e51b8152600401610b60906151c8565b60656135628382615064565b506066610a138282615064565b600054610100900460ff166135965760405162461bcd60e51b8152600401610b60906151c8565b565b600054610100900460ff166135bf5760405162461bcd60e51b8152600401610b60906151c8565b6111ca81613d1c565b600054610100900460ff166135ef5760405162461bcd60e51b8152600401610b60906151c8565b6111ca81613d75565b60008181526101006020526040902054613613906001614f39565b6000918252610100602052604090912055565b600081815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061365b82612d97565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60003033036136aa575060331936013560601c90565b503390565b6001600160a01b0382166136c6576136c681613311565b600081815261013960205260409020546001600160401b031615613761576001600160a01b0382161580159061371557506136ff612a4b565b6001600160a01b0316826001600160a01b031614155b6137615760405162461bcd60e51b815260206004820152601960248201527f52656769737472793a20544f4b454e5f455850495241424c45000000000000006044820152606401610b60565b6001600160a01b03831660009081526101356020526040902054819003610a1357610a13836134ea565b606061379682612e9f565b156137b05750604080516020810190915260008152610940565b60ca60006137bd84613952565b8152602001908152602001600020600084815260200190815260200160002080546137e790614a66565b80601f016020809104026020016040519081016040528092919081815260200182805461381390614a66565b80156138605780601f1061383557610100808354040283529160200191613860565b820191906000526020600020905b81548152906001019060200180831161384357829003601f168201915b5050505050905092915050565b6060831561387c575081610db7565b82511561388c5782518084602001fd5b8160405162461bcd60e51b8152600401610b609190613f78565b600081516000036138f15760405162461bcd60e51b815260206004820152601560248201527452656769737472793a204c4142454c5f454d50545960581b6044820152606401610b60565b82826040516020016139039190614c1f565b60405160208183030381529060405280519060200120604051602001613933929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b600081815260cb602052604081205415612b4857600082815260cb6020526040902054610940565b60ca600061398783613952565b8152602001908152602001600020600085815260200190815260200160002080546139b190614a66565b9050600003613a0957826040516139c89190614c1f565b6040518091039020817f7ae4f661958fbecc2f77be6b0eb280d2a6f604b29e1e7221c82b9da0c4af7f8685604051613a009190613f78565b60405180910390a35b8160ca6000613a1784613952565b815260200190815260200160002060008681526020019081526020016000209081613a429190615064565b5081604051613a519190614c1f565b604051809103902083604051613a679190614c1f565b6040518091039020827f851ffe8e74d5015261dba0a1f9e1b0e5d42c5af5d2ad1908fee897c7d80a0d928686604051613aa19291906146e2565b60405180910390a450505050565b600081815260c9602052604081208054829190613acb90614a66565b9050119050919050565b6000806000613ae48585613dc3565b90925090506000816004811115613afd57613afd615213565b148015613b1b5750856001600160a01b0316826001600160a01b0316145b15613b2b57600192505050610db7565b600080876001600160a01b0316631626ba7e60e01b8888604051602401613b53929190615229565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613b919190614c1f565b600060405180830381855afa9150503d8060008114613bcc576040519150601f19603f3d011682016040523d82523d6000602084013e613bd1565b606091505b5091509150818015613be4575080516020145b8015613c0b57508051630b135d3f60e11b90613c09908301602090810190840161501e565b145b98975050505050505050565b60006001600160a01b0384163b15613d1457836001600160a01b031663150b7a02613c4061229c565b8786866040518563ffffffff1660e01b8152600401613c629493929190615242565b6020604051808303816000875af1925050508015613c9d575060408051601f3d908101601f19168201909252613c9a91810190615275565b60015b613cfa573d808015613ccb576040519150601f19603f3d011682016040523d82523d6000602084013e613cd0565b606091505b508051600003613cf25760405162461bcd60e51b8152600401610b6090615162565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610cab565b506001610cab565b600054610100900460ff16613d435760405162461bcd60e51b8152600401610b60906151c8565b806000805160206152938339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b600054610100900460ff16613d9c5760405162461bcd60e51b8152600401610b60906151c8565b807f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87613d54565b6000808251604103613df95760208301516040840151606085015160001a613ded87828585613e08565b94509450505050613e01565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613e3f5750600090506003613eec565b8460ff16601b14158015613e5757508460ff16601c14155b15613e685750600090506004613eec565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613ebc573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613ee557600060019250925050613eec565b9150600090505b94509492505050565b6001600160e01b0319811681146111ca57600080fd5b600060208284031215613f1d57600080fd5b8135610db781613ef5565b60005b83811015613f43578181015183820152602001613f2b565b50506000910152565b60008151808452613f64816020860160208601613f28565b601f01601f19169290920160200192915050565b602081526000610db76020830184613f4c565b600060208284031215613f9d57600080fd5b5035919050565b6001600160a01b03811681146111ca57600080fd5b60008060408385031215613fcc57600080fd5b8235613fd781613fa4565b946020939093013593505050565b60008083601f840112613ff757600080fd5b5081356001600160401b0381111561400e57600080fd5b602083019150836020828501011115613e0157600080fd5b60008060008060006080868803121561403e57600080fd5b853561404981613fa4565b9450602086013561405981613fa4565b93506040860135925060608601356001600160401b0381111561407b57600080fd5b61408788828901613fe5565b969995985093965092949392505050565b60008083601f8401126140aa57600080fd5b5081356001600160401b038111156140c157600080fd5b6020830191508360208260051b8501011115613e0157600080fd5b6000806000604084860312156140f157600080fd5b83356001600160401b0381111561410757600080fd5b61411386828701614098565b909790965060209590950135949350505050565b600082825180855260208086019550808260051b84010181860160005b8481101561417257601f19868403018952614160838351613f4c565b98840198925090830190600101614144565b5090979650505050505050565b602081526000610db76020830184614127565b6000806000604084860312156141a757600080fd5b83356001600160401b038111156141bd57600080fd5b61411386828701613fe5565b6000806000604084860312156141de57600080fd5b83356001600160401b03808211156141f557600080fd5b908501906080828803121561420957600080fd5b9093506020850135908082111561421f57600080fd5b5061422c86828701613fe5565b9497909650939450505050565b8035801515811461124557600080fd5b60008060008060008060008060a0898b03121561426557600080fd5b883561427081613fa4565b975060208901356001600160401b038082111561428c57600080fd5b6142988c838d01614098565b909950975060408b01359150808211156142b157600080fd5b6142bd8c838d01614098565b909750955060608b01359150808211156142d657600080fd5b506142e38b828c01614098565b90945092506142f6905060808a01614239565b90509295985092959890939650565b60008060006060848603121561431a57600080fd5b833561432581613fa4565b9250602084013561433581613fa4565b929592945050506040919091013590565b6000806020838503121561435957600080fd5b82356001600160401b0381111561436f57600080fd5b61437b85828601614098565b90969095509350505050565b60008060008060006060868803121561439f57600080fd5b85356001600160401b03808211156143b657600080fd5b6143c289838a01614098565b909750955060208801359150808211156143db57600080fd5b506143e888828901614098565b96999598509660400135949350505050565b6000806040838503121561440d57600080fd5b82356001600160401b0381168114613fd757600080fd5b60008060008060006060868803121561443c57600080fd5b85356001600160401b038082111561445357600080fd5b61445f89838a01613fe5565b9097509550602088013591508082111561447857600080fd5b506143e888828901613fe5565b6000806000806060858703121561449b57600080fd5b8435935060208501356001600160401b038111156144b857600080fd5b6144c487828801613fe5565b9598909750949560400135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614515576145156144d7565b604052919050565b600082601f83011261452e57600080fd5b81356001600160401b03811115614547576145476144d7565b61455a601f8201601f19166020016144ed565b81815284602083860101111561456f57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561459e57600080fd5b81356001600160401b038111156145b457600080fd5b610cab8482850161451d565b6000602082840312156145d257600080fd5b8135610db781613fa4565b60006001600160401b038211156145f6576145f66144d7565b5060051b60200190565b600061461361460e846145dd565b6144ed565b8381529050602080820190600585901b84018681111561463257600080fd5b845b8181101561466d5780356001600160401b038111156146535760008081fd5b61465f8982890161451d565b855250928201928201614634565b505050509392505050565b60006020828403121561468a57600080fd5b81356001600160401b038111156146a057600080fd5b8201601f810184136146b157600080fd5b610cab84823560208401614600565b600080604083850312156146d357600080fd5b50508035926020909101359150565b6040815260006146f56040830185613f4c565b8281036020840152610db38185613f4c565b6000806000806060858703121561471d57600080fd5b843561472881613fa4565b93506020850135925060408501356001600160401b0381111561474a57600080fd5b61475687828801613fe5565b95989497509550505050565b60008060008060008060006080888a03121561477d57600080fd5b87356001600160401b038082111561479457600080fd5b6147a08b838c01613fe5565b909950975060208a0135965060408a01359150808211156147c057600080fd5b6147cc8b838c01614098565b909650945060608a01359150808211156147e557600080fd5b506147f28a828b01614098565b989b979a50959850939692959293505050565b6000806020838503121561481857600080fd5b82356001600160401b0381111561482e57600080fd5b61437b85828601613fe5565b6000806040838503121561484d57600080fd5b823561485881613fa4565b9150612e9660208401614239565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156148bb57603f198886030184526148a9858351613f4c565b9450928501929085019060010161488d565b5092979650505050505050565b6040815260006148db6040830185614127565b8281036020840152610db38185614127565b6000806000806080858703121561490357600080fd5b843561490e81613fa4565b9350602085013561491e81613fa4565b92506040850135915060608501356001600160401b0381111561494057600080fd5b61494c8782880161451d565b91505092959194509250565b60008060006040848603121561496d57600080fd5b833561497881613fa4565b925060208401356001600160401b0381111561499357600080fd5b61422c86828701613fe5565b600080604083850312156149b257600080fd5b82356149bd81613fa4565b915060208301356149cd81613fa4565b809150509250929050565b6000806000604084860312156149ed57600080fd5b8335925060208401356001600160401b0381111561499357600080fd5b60008060008060808587031215614a2057600080fd5b8435614a2b81613fa4565b93506020850135614a3b81613fa4565b92506040850135614a4b81613fa4565b91506060850135614a5b81613fa4565b939692955090935050565b600181811c90821680614a7a57607f821691505b6020821081036113ff57634e487b7160e01b600052602260045260246000fd5b600060208284031215614aac57600080fd5b610db782614239565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112614ae257600080fd5b8301803591506001600160401b03821115614afc57600080fd5b602001915036819003821315613e0157600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614b3957614b39614b11565b5060010190565b60208082526027908201527f52656769737472793a2053454e4445525f49535f4e4f545f4d494e54494e475f60408201526626a0a720a3a2a960c91b606082015260800190565b6000610db7368484614600565b60208082526029908201527f52656769737472793a2053454e4445525f49535f4e4f545f415050524f5645446040820152682fa7a92fa7aba722a960b91b606082015260800190565b60208082526022908201527f52656769737472793a20494e53554646494349454e545f5045524d495353494f6040820152614e5360f01b606082015260800190565b60008251614c31818460208701613f28565b9190910192915050565b601f821115610a1357600081815260208120601f850160051c81016020861015614c625750805b601f850160051c820191505b8181101561117057828155600101614c6e565b6001600160401b03831115614c9857614c986144d7565b614cac83614ca68354614a66565b83614c3b565b6000601f841160018114614ce05760008515614cc85750838201355b600019600387901b1c1916600186901b178355610ea0565b600083815260209020601f19861690835b82811015614d115786850135825560209485019460019092019101614cf1565b5086821015614d2e5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610cab602083018486614d40565b600060808236031215614d8f57600080fd5b604051608081016001600160401b038282108183111715614db257614db26144d7565b8160405284359150614dc382613fa4565b81835260208501356020840152604085013560408401526060850135915080821115614dee57600080fd5b50614dfb3682860161451d565b60608301525092915050565b6000614e1561460e846145dd565b80848252602080830192508560051b850136811115614e3357600080fd5b855b81811015614e6e5780356001600160401b03811115614e545760008081fd5b614e6036828a0161451d565b865250938201938201614e35565b50919695505050505050565b60008351614e8c818460208801613f28565b835190830190614ea0818360208801613f28565b01949350505050565b60006020808385031215614ebc57600080fd5b82356001600160401b03811115614ed257600080fd5b8301601f81018513614ee357600080fd5b8035614ef161460e826145dd565b81815260059190911b82018301908381019087831115614f1057600080fd5b928401925b82841015614f2e57833582529284019290840190614f15565b979650505050505050565b8082018082111561094057610940614b11565b6001600160a01b03848116825283166020820152606060408201819052600090610b6990830184613f4c565b634e487b7160e01b600052601260045260246000fd5b600082614f9d57614f9d614f78565b500490565b634e487b7160e01b600052600160045260246000fd5b8181038181111561094057610940614b11565b600081614fda57614fda614b11565b506000190190565b60008351614ff4818460208801613f28565b601760f91b9083019081528351615012816001840160208801613f28565b01600101949350505050565b60006020828403121561503057600080fd5b5051919050565b60006020828403121561504957600080fd5b8151610db781613fa4565b8183823760009101908152919050565b81516001600160401b0381111561507d5761507d6144d7565b6150918161508b8454614a66565b84614c3b565b602080601f8311600181146150c657600084156150ae5750858301515b600019600386901b1c1916600185901b178555611170565b600085815260208120601f198616915b828110156150f5578886015182559484019460019091019084016150d6565b50858210156151135787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008451615135818460208901613f28565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826151c3576151c3614f78565b500690565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000610cab6040830184613f4c565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061316590830184613f4c565b60006020828403121561528757600080fd5b8151610db781613ef556febe2bb46ac0377341a1ec5c3116d70fd5029d704bd46292e58f6265dd177ebafe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000a", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80637e37479e116101f4578063ba5d40b71161011a578063e985e9c5116100ad578063f5c1f76e1161007c578063f5c1f76e146108d8578063f7df5c60146108eb578063f8c8765e146108fe578063ffa1ad741461091157600080fd5b8063e985e9c51461087a578063ebf0c717146108b6578063ec129eea146108bd578063f25eb5c1146108d057600080fd5b8063c87b56dd116100e9578063c87b56dd1461082e578063ce92b33e14610841578063cf2c52cb14610854578063d9548e531461086757600080fd5b8063ba5d40b7146107b3578063baef73e9146107c6578063bb5b27e114610808578063bebec6b41461081b57600080fd5b8063a22cb46511610192578063ac9650d811610161578063ac9650d81461074c578063b3f9e4cb1461076c578063b85afd281461077f578063b88d4fde146107a057600080fd5b8063a22cb465146106e7578063a3f4df7e146106fa578063a424740014610726578063ab3b87fe1461073957600080fd5b80639508b1c4116101ce5780639508b1c4146106b15780639559c0bd146106c457806395d89b41146106cc57806399e0dd7c146106d457600080fd5b80637e37479e146106785780637eee288d1461068b57806394d008ef1461069e57600080fd5b806342842e0e116102d95780635096023911610277578063663f7b2a11610246578063663f7b2a14610610578063672b9f81146106235780636ccbae5f1461064457806370a082311461066557600080fd5b806350960239146105bb578063572b6c05146105ce5780636352211e146105ea578063638e5c78146105fd57600080fd5b806347c81699116102b357806347c816991461056f5780634a72584d146105825780634f558e791461059557806350382c1a146105a857600080fd5b806342842e0e1461053657806342966c6814610549578063430c20811461055c57600080fd5b80631bf7e13e1161035157806327f189751161032057806327f18975146104ea578063310bd74b146104fd5780633f72ec6e1461051057806340c10f191461052357600080fd5b80631bf7e13e146104905780631f71be06146104a357806323b872dd146104b6578063276fabb1146104c957600080fd5b8063095ea7b31161038d578063095ea7b31461041c578063150b7a02146104315780631bd8cc1a1461045d5780631be5e7ed1461047d57600080fd5b806301ffc9a7146103b457806306fdde03146103dc578063081812fc146103f1575b600080fd5b6103c76103c2366004613f0b565b610935565b60405190151581526020015b60405180910390f35b6103e4610946565b6040516103d39190613f78565b6104046103ff366004613f8b565b6109d8565b6040516001600160a01b0390911681526020016103d3565b61042f61042a366004613fb9565b6109ff565b005b61044461043f366004614026565b610a18565b6040516001600160e01b031990911681526020016103d3565b61047061046b3660046140dc565b610b72565b6040516103d3919061417f565b6103e461048b366004614192565b610c68565b6103e461049e3660046141c9565b610cb3565b61042f6104b1366004614249565b610dbe565b61042f6104c4366004614305565b610e54565b6104dc6104d7366004614346565b610ea7565b6040519081526020016103d3565b61042f6104f8366004614387565b610eb6565b61042f61050b366004613f8b565b610efe565b61042f61051e3660046143fa565b610f39565b61042f610531366004613fb9565b61103b565b61042f610544366004614305565b611088565b61042f610557366004613f8b565b6110a3565b6103c761056a366004613fb9565b6110e7565b61042f61057d366004614424565b6110f3565b61042f610590366004614485565b611132565b6103c76105a3366004613f8b565b611178565b61042f6105b636600461458c565b611197565b61042f6105c93660046145c0565b6111cd565b6103c76105dc3660046145c0565b6001600160a01b0316301490565b6104046105f8366004613f8b565b61122d565b61042f61060b366004613f8b565b61124a565b61042f61061e366004614678565b611295565b6106366106313660046146c0565b611336565b6040516103d39291906146e2565b6104dc610652366004613f8b565b6000908152610100602052604090205490565b6104dc6106733660046145c0565b61134e565b6104dc6106863660046145c0565b6113d4565b61042f610699366004613fb9565b611405565b61042f6106ac366004614707565b61145c565b61042f6106bf366004614762565b6114ab565b6104dc601481565b6103e4611532565b61042f6106e2366004614805565b611541565b61042f6106f536600461483a565b6115c8565b6103e46040518060400160405280600d81526020016c554e533a20526567697374727960981b81525081565b6103c76107343660046141c9565b6115da565b61042f610747366004613fb9565b611625565b61075f61075a366004614346565b61166a565b6040516103d39190614866565b61040461077a366004613f8b565b611746565b61079261078d3660046140dc565b611770565b6040516103d39291906148c8565b61042f6107ae3660046148ed565b611892565b61042f6107c1366004614249565b6118d9565b6107f06107d4366004613f8b565b600090815261013960205260409020546001600160401b031690565b6040516001600160401b0390911681526020016103d3565b6103e4610816366004613f8b565b611962565b6103e46108293660046145c0565b611a04565b6103e461083c366004613f8b565b611ace565b61042f61084f366004614387565b611b34565b61042f610862366004614958565b611b73565b6103c7610875366004613f8b565b611c42565b6103c761088836600461499f565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b60006104dc565b61042f6108cb366004614387565b611c85565b61042f611cc4565b6104706108e6366004614346565b611d4b565b61042f6108f93660046149d8565b611dfe565b61042f61090c366004614a0a565b611e8f565b6103e460405180604001604052806005815260200164302e392e3160d81b81525081565b600061094082612065565b92915050565b60606065805461095590614a66565b80601f016020809104026020016040519081016040528092919081815260200182805461098190614a66565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b5050505050905090565b60006109e3826120b5565b506000908152606960205260409020546001600160a01b031690565b80610a0981612114565b610a13838361217a565b505050565b60007f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec92378546001600160a01b0316610a4d61229c565b6001600160a01b031603610b0e57610a6361229c565b6001600160a01b03166342966c68856040518263ffffffff1660e01b8152600401610a9091815260200190565b600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b505050821580159150610ad85750610ad882840184614a9a565b15610af657610ae730856122ab565b610af185856123f9565b610b00565b610b0085856122ab565b50630a85bd0160e11b610b69565b60405162461bcd60e51b815260206004820152602560248201527f52656769737472793a204552433732315f524543454956494e475f50524f4849604482015264109255115160da1b60648201526084015b60405180910390fd5b95945050505050565b6060826001600160401b03811115610b8c57610b8c6144d7565b604051908082528060200260200182016040528015610bbf57816020015b6060815260200190600190039081610baa5790505b50905060005b83811015610c6057610c30858583818110610be257610be2614ab5565b9050602002810190610bf49190614acb565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792506124a4915050565b828281518110610c4257610c42614ab5565b60200260200101819052508080610c5890614b27565b915050610bc5565b509392505050565b6060610cab84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506124a4915050565b949350505050565b606060005a9050610cc58585856115da565b610d215760405162461bcd60e51b815260206004820152602760248201527f554e535265676973747279466f727761726465723a205349474e41545552455f6044820152661253959053125160ca1b6064820152608401610b60565b610db3610d3160208701876145c0565b30604088013584610d4560608b018b614acb565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506124d992505050565b9150505b9392505050565b610134546001600160a01b0316610dd361229c565b6001600160a01b031614610df95760405162461bcd60e51b8152600401610b6090614b40565b6000610e0d610e08888a614b87565b6125ba565b509050610e1a8982611405565b610e278686868685612612565b8115610e4957610e498982610e44610e3f8b8d614b87565b612680565b612701565b505050505050505050565b80610e66610e6061229c565b82612743565b610e825760405162461bcd60e51b8152600401610b6090614b94565b81610e8c81612114565b610e95836127d4565b610ea0858585612841565b5050505050565b6000610c60610e088385614b87565b80610ec2610e6061229c565b610ede5760405162461bcd60e51b8152600401610b6090614b94565b81610ee881612114565b610ef587878787876129e8565b50505050505050565b80610f0a610e6061229c565b610f265760405162461bcd60e51b8152600401610b6090614b94565b81610f3081612114565b610a13836127d4565b610134546001600160a01b0316610f4e61229c565b6001600160a01b031614610f745760405162461bcd60e51b8152600401610b6090614b40565b610f7d816120b5565b42826001600160401b031611610fd55760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a204558504952595f494e5f5041535400000000000000006044820152606401610b60565b60008181526101396020908152604091829020805467ffffffffffffffff19166001600160401b038616908117909155915191825282917f93feabb03ab84f47fc85bf0c298103fca21d8c8bc376eae0c1e1c56b9d4f7789910160405180910390a25050565b611043612a4b565b6001600160a01b031661105461229c565b6001600160a01b03161461107a5760405162461bcd60e51b8152600401610b6090614bdd565b61108482826122ab565b5050565b610a1383838360405180602001604052806000815250611892565b806110af610e6061229c565b6110cb5760405162461bcd60e51b8152600401610b6090614b94565b816110d581612114565b6110de836127d4565b610a1383612b4c565b6000610db78383612743565b806110ff610e6061229c565b61111b5760405162461bcd60e51b8152600401610b6090614b94565b8161112581612114565b610ef58787878787612bf3565b8061113e610e6061229c565b61115a5760405162461bcd60e51b8152600401610b6090614b94565b8161116481612114565b61117086868686612cd2565b505050505050565b6000818152606760205260408120546001600160a01b03161515610940565b6111ca816040516020016111ab9190614c1f565b6040516020818303038152906040528051906020012060001c82612d72565b50565b610134546001600160a01b03166111e261229c565b6001600160a01b0316146112085760405162461bcd60e51b8152600401610b6090614b40565b6001600160a01b0316600090815261013660205260409020805460ff19166001179055565b600061123882611c42565b6112455761094082612d97565b919050565b80611256610e6061229c565b6112725760405162461bcd60e51b8152600401610b6090614b94565b61128461127d61229c565b3084612841565b61108461128f61229c565b836123f9565b60006112a0826125ba565b5090506112ab61229c565b6001600160a01b03166112bd8261122d565b6001600160a01b0316146113135760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610b60565b61131c81612114565b61108461132761229c565b8261133185612680565b612df7565b6060806113438484612e7e565b909590945092505050565b60006001600160a01b0382166113b85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b60565b506001600160a01b031660009081526068602052604090205490565b6001600160a01b038116600090815261013560205260408120546113f781612e9f565b6113ff578091505b50919050565b610134546001600160a01b031661141a61229c565b6001600160a01b0316146114405760405162461bcd60e51b8152600401610b6090614b40565b611449816127d4565b61108461145582612d97565b8383612841565b611464612a4b565b6001600160a01b031661147561229c565b6001600160a01b03161461149b5760405162461bcd60e51b8152600401610b6090614bdd565b6114a584846122ab565b50505050565b6114b58787612ee9565b6114bd61229c565b6001600160a01b03166114cf8661122d565b6001600160a01b0316146115255760405162461bcd60e51b815260206004820152601d60248201527f52656769737472793a2053454e4445525f49535f4e4f545f4f574e45520000006044820152606401610b60565b610ef58484848489612612565b60606066805461095590614a66565b610134546001600160a01b031661155661229c565b6001600160a01b03161461157c5760405162461bcd60e51b8152600401610b6090614b40565b61013361158a828483614c81565b507f4b120d6a959a84a520fa48f5f937cca0e79129423487af7901213b5d2e89313b82826040516115bc929190614d69565b60405180910390a15050565b6110846115d361229c565b8383612f58565b6000610cab6115e885614d7d565b3085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061302692505050565b80611631610e6061229c565b61164d5760405162461bcd60e51b8152600401610b6090614b94565b8161165781612114565b6114a561166384612d97565b8585612841565b606060006116788385614e07565b905030330361173d5760005b8381101561173b5761170b61169761229c565b61169f61316f565b8787858181106116b1576116b1614ab5565b90506020028101906116c39190614acb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250613183915050565b82828151811061171d5761171d614ab5565b6020026020010181905250808061173390614b27565b915050611684565b505b610cab816131b3565b6000818152606760205260408120546001600160a01b0316611769576000610940565b3092915050565b606080836001600160401b0381111561178b5761178b6144d7565b6040519080825280602002602001820160405280156117be57816020015b60608152602001906001900390816117a95790505b509150836001600160401b038111156117d9576117d96144d7565b60405190808252806020026020018201604052801561180c57816020015b60608152602001906001900390816117f75790505b50905060005b848110156118895761183c86868381811061182f5761182f614ab5565b9050602002013585612e7e565b84838151811061184e5761184e614ab5565b6020026020010184848151811061186757611867614ab5565b602002602001018290528290525050808061188190614b27565b915050611812565b50935093915050565b8161189e610e6061229c565b6118ba5760405162461bcd60e51b8152600401610b6090614b94565b826118c481612114565b6118cd846127d4565b611170868686866132de565b610134546001600160a01b03166118ee61229c565b6001600160a01b0316146119145760405162461bcd60e51b8152600401610b6090614b40565b600080611924610e08898b614b87565b9150915061193181613311565b6119498a83611943610e3f8c8e614b87565b86613371565b6119568787878786612612565b50505050505050505050565b600081815260c96020526040902080546060919061197f90614a66565b80601f01602080910402602001604051908101604052809291908181526020018280546119ab90614a66565b80156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b50505050509050919050565b6001600160a01b03811660009081526101356020526040902054606090611a2a81612e9f565b6113ff576000818152610138602052604090208054611a4890614a66565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7490614a66565b8015611ac15780601f10611a9657610100808354040283529160200191611ac1565b820191906000526020600020905b815481529060010190602001808311611aa457829003601f168201915b5050505050915050919050565b6060611ad9826120b5565b6000611ae36133c4565b90506000815111611b035760405180602001604052806000815250610db7565b80611b0d846133d4565b604051602001611b1e929190614e7a565b6040516020818303038152906040529392505050565b80611b40610e6061229c565b611b5c5760405162461bcd60e51b8152600401610b6090614b94565b81611b6681612114565b610ef58787878787612612565b7f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87546001600160a01b0316611ba661229c565b6001600160a01b031614611bcc5760405162461bcd60e51b8152600401610b6090614bdd565b6020819003611bef576000611be382840184613f8b565b90506114a584826122ab565b6000611bfd82840184614ea9565b805190915060005b8181101561117057611c3086848381518110611c2357611c23614ab5565b60200260200101516122ab565b80611c3a81614b27565b915050611c05565b600081815261013960205260408120546001600160401b03161580159061094057505060009081526101396020526040902054426001600160401b039091161090565b80611c91610e6061229c565b611cad5760405162461bcd60e51b8152600401610b6090614b94565b81611cb781612114565b610ef587878787876134d4565b6000611cce61229c565b6001600160a01b0381166000908152610135602052604081205491925003611d425760405162461bcd60e51b815260206004820152602160248201527f52656769737472793a20524556455253455f5245434f52445f49535f454d50546044820152605960f81b6064820152608401610b60565b6111ca816134ea565b6060816001600160401b03811115611d6557611d656144d7565b604051908082528060200260200182016040528015611d9857816020015b6060815260200190600190039081611d835790505b50905060005b82811015611df757611dc7848483818110611dbb57611dbb614ab5565b90506020020135611962565b828281518110611dd957611dd9614ab5565b60200260200101819052508080611def90614b27565b915050611d9e565b5092915050565b610134546001600160a01b0316611e1361229c565b6001600160a01b031614611e395760405162461bcd60e51b8152600401610b6090614b40565b61013454611e50906001600160a01b0316846122ab565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c39528383604051611e82929190614d69565b60405180910390a2505050565b600054610100900460ff1615808015611eaf5750600054600160ff909116105b80611ec95750303b158015611ec9575060005460ff166001145b611f2c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b60565b6000805460ff191660011790558015611f4f576000805461ff0019166101001790555b61013480546001600160a01b0319166001600160a01b038716179055837f8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec9237880546001600160a01b0319166001600160a01b03929092169190911790556040805180820182526013815272556e73746f707061626c6520446f6d61696e7360681b60208083019190915282518084019093526002835261155160f21b90830152611ff79161352f565b611fff61356f565b61200761356f565b61201083613598565b612019826135c8565b8015610ea0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60006001600160e01b031982166380ac58cd60e01b148061209657506001600160e01b03198216635b5e139f60e01b145b8061094057506301ffc9a760e01b6001600160e01b0319831614610940565b6000818152606760205260409020546001600160a01b03166111ca5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b60565b3033036121715761212361316f565b81146111ca5760405162461bcd60e51b815260206004820152601760248201527f52656769737472793a20544f4b454e5f494e56414c49440000000000000000006044820152606401610b60565b6111ca816135f8565b600061218582612d97565b9050806001600160a01b0316836001600160a01b0316036121f25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610b60565b806001600160a01b031661220461229c565b6001600160a01b0316148061222057506122208161088861229c565b6122925760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610b60565b610a138383613626565b60006122a6613694565b905090565b6001600160a01b0382166123015760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b60565b6000818152606760205260409020546001600160a01b0316156123665760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b60565b612372600083836136af565b6001600160a01b038216600090815260686020526040812080546001929061239b908490614f39565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612403612a4b565b905061240f8183613626565b60008051602061529383398151915254604080516020808201869052825180830390910181528183019283905263e3dec8fb60e01b9092526001600160a01b0390921691829163e3dec8fb9161246c918891309190604401614f4c565b600060405180830381600087803b15801561248657600080fd5b505af115801561249a573d6000803e3d6000fd5b5050505050505050565b6060610db7836040516020016124ba9190614c1f565b6040516020818303038152906040528051906020012060001c8361378b565b60606124e4856135f8565b600080876001600160a01b0316866124fe8b8a8989613183565b60405161250b9190614c1f565b60006040518083038160008787f1925050503d8060008114612549576040519150601f19603f3d011682016040523d82523d6000602084013e61254e565b606091505b50909250905061255f603f87614f8e565b5a1161256d5761256d614fa2565b6125ad82826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c454400000000000081525061386d565b9998505050505050505050565b805160009081905b801561260c578291506125f882856125db600185614fb8565b815181106125eb576125eb614ab5565b60200260200101516138a6565b92508061260481614fcb565b9150506125c2565b50915091565b60005b848110156111705761266e86868381811061263257612632614ab5565b90506020028101906126449190614acb565b86868581811061265657612656614ab5565b90506020028101906126689190614acb565b86612bf3565b8061267881614b27565b915050612615565b606060008260008151811061269757612697614ab5565b602002602001015190506000600190505b8351811015611df757818482815181106126c4576126c4614ab5565b60200260200101516040516020016126dd929190614fe2565b604051602081830303815290604052915080806126f990614b27565b9150506126a8565b61dead6001600160a01b0384161480159061273357506001600160a01b03831660009081526101356020526040902054155b15610a1357610a13838383612df7565b60008061274f8361122d565b90506001600160a01b03811615801590610cab5750806001600160a01b0316846001600160a01b031614806127a957506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b80610cab5750836001600160a01b03166127c2846109d8565b6001600160a01b031614949350505050565b6127dd81613952565b6040516020016127ef91815260200190565b60408051601f198184030181528282528051602091820120600085815260cb9092529181209190915582917f185c30856dadb58bf097c1f665a52ada7029752dbcad008ea3fefc73bee8c9fe9190a250565b826001600160a01b031661285482612d97565b6001600160a01b0316146128b85760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610b60565b6001600160a01b03821661291a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b60565b6129258383836136af565b612930600082613626565b6001600160a01b0383166000908152606860205260408120805460019290612959908490614fb8565b90915550506001600160a01b0382166000908152606860205260408120805460019290612987908490614f39565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b8481101561117057612a39868683818110612a0857612a08614ab5565b90506020020135858584818110612a2157612a21614ab5565b9050602002810190612a339190614acb565b85612cd2565b80612a4381614b27565b9150506129eb565b600080516020615293833981519152546000906001600160a01b03168015612b485760405163721804d360e11b81523060048201526000906001600160a01b0383169063e43009a690602401602060405180830381865afa158015612ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad8919061501e565b60405163e66f960360e01b8152600481018290529091506001600160a01b0383169063e66f960390602401602060405180830381865afa158015612b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b449190615037565b9250505b5090565b6000612b5782612d97565b9050612b65816000846136af565b612b70600083613626565b6001600160a01b0381166000908152606860205260408120805460019290612b99908490614fb8565b909155505060008281526067602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008585604051602001612c08929190615054565b60408051601f198184030181528282528051602091820120601f8901829004820284018201909252878352909250612c5c9183918990899081908401838280828437600092019190915250612d7292505050565b6111708187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525088925061397a915050565b612cdb84613aaf565b612d275760405162461bcd60e51b815260206004820152601c60248201527f5265636f726453746f726167653a204b45595f4e4f545f464f554e44000000006044820152606401610b60565b6114a584612d3486611962565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525087925061397a915050565b612d7b82613aaf565b61108457600082815260c960205260409020610a138282615064565b6000818152606760205260408120546001600160a01b0316806109405760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b60565b6000828152610138602052604090208054612e1190614a66565b9050600003612e3557600082815261013860205260409020612e338282615064565b505b6001600160a01b03831660008181526101356020526040808220859055518492917feb76a21470988c474a21f690cc28fee1ed511bd812dc3c21fd0f49c5e5d4708a91a3505050565b606080612e8a84611962565b9150612e96848461378b565b90509250929050565b6000818152610137602052604081205460ff16801561094057506101366000612ec661229c565b6001600160a01b0316815260208101919091526040016000205460ff1692915050565b60008051602061529383398151915254604051633805550f60e01b81526001600160a01b03909116908190633805550f90612f2a9086908690600401614d69565b600060405180830381600087803b158015612f4457600080fd5b505af1158015610ef5573d6000803e3d6000fd5b816001600160a01b0316836001600160a01b031603612fb95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b60565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6040838101519051636ccbae5f60e01b8152600481019190915260009081903090636ccbae5f90602401602060405180830381865afa15801561306d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613091919061501e565b9050600061313f8660600151805190602001208688602001516040516020016130df9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561316557508551613165906001600160a01b03168286613ad5565b9695505050505050565b60003033036131805750601f193601355b90565b606082858560405160200161319a93929190615123565b6040516020818303038152906040529050949350505050565b606081516001600160401b038111156131ce576131ce6144d7565b60405190808252806020026020018201604052801561320157816020015b60608152602001906001900390816131ec5790505b50905060005b82518110156113ff57600080306001600160a01b031685848151811061322f5761322f614ab5565b60200260200101516040516132449190614c1f565b600060405180830381855af49150503d806000811461327f576040519150601f19603f3d011682016040523d82523d6000602084013e613284565b606091505b50915091506132ac82826040518060600160405280602781526020016152b36027913961386d565b8484815181106132be576132be614ab5565b6020026020010181905250505080806132d690614b27565b915050613207565b6132e9848484612841565b6132f584848484613c17565b6114a55760405162461bcd60e51b8152600401610b6090615162565b6000818152610137602052604090205460ff16156111ca5760405162461bcd60e51b815260206004820152601860248201527f52656769737472793a20544f4b454e5f555047524144454400000000000000006044820152606401610b60565b61337b84846122ab565b827fc5beef08f693b11c316c0c8394a377a0033c9cf701b8cd8afd79cecef60c3952836040516133ab9190613f78565b60405180910390a280156114a5576114a5848484612701565b6060610133805461095590614a66565b6060816000036133fb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613425578061340f81614b27565b915061341e9050600a83614f8e565b91506133ff565b6000816001600160401b0381111561343f5761343f6144d7565b6040519080825280601f01601f191660200182016040528015613469576020820181803683370190505b5090505b8415610cab5761347e600183614fb8565b915061348b600a866151b4565b613496906030614f39565b60f81b8183815181106134ab576134ab614ab5565b60200101906001600160f81b031916908160001a9053506134cd600a86614f8e565b945061346d565b6134dd816127d4565b610ea08585858585612612565b6001600160a01b03811660008181526101356020526040808220829055517ffcf5eec0cfa3e6332f5f0e63ec242d71f866a61d121d6cdf5c2eb3b668a26c4f9190a250565b600054610100900460ff166135565760405162461bcd60e51b8152600401610b60906151c8565b60656135628382615064565b506066610a138282615064565b600054610100900460ff166135965760405162461bcd60e51b8152600401610b60906151c8565b565b600054610100900460ff166135bf5760405162461bcd60e51b8152600401610b60906151c8565b6111ca81613d1c565b600054610100900460ff166135ef5760405162461bcd60e51b8152600401610b60906151c8565b6111ca81613d75565b60008181526101006020526040902054613613906001614f39565b6000918252610100602052604090912055565b600081815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061365b82612d97565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60003033036136aa575060331936013560601c90565b503390565b6001600160a01b0382166136c6576136c681613311565b600081815261013960205260409020546001600160401b031615613761576001600160a01b0382161580159061371557506136ff612a4b565b6001600160a01b0316826001600160a01b031614155b6137615760405162461bcd60e51b815260206004820152601960248201527f52656769737472793a20544f4b454e5f455850495241424c45000000000000006044820152606401610b60565b6001600160a01b03831660009081526101356020526040902054819003610a1357610a13836134ea565b606061379682612e9f565b156137b05750604080516020810190915260008152610940565b60ca60006137bd84613952565b8152602001908152602001600020600084815260200190815260200160002080546137e790614a66565b80601f016020809104026020016040519081016040528092919081815260200182805461381390614a66565b80156138605780601f1061383557610100808354040283529160200191613860565b820191906000526020600020905b81548152906001019060200180831161384357829003601f168201915b5050505050905092915050565b6060831561387c575081610db7565b82511561388c5782518084602001fd5b8160405162461bcd60e51b8152600401610b609190613f78565b600081516000036138f15760405162461bcd60e51b815260206004820152601560248201527452656769737472793a204c4142454c5f454d50545960581b6044820152606401610b60565b82826040516020016139039190614c1f565b60405160208183030381529060405280519060200120604051602001613933929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b600081815260cb602052604081205415612b4857600082815260cb6020526040902054610940565b60ca600061398783613952565b8152602001908152602001600020600085815260200190815260200160002080546139b190614a66565b9050600003613a0957826040516139c89190614c1f565b6040518091039020817f7ae4f661958fbecc2f77be6b0eb280d2a6f604b29e1e7221c82b9da0c4af7f8685604051613a009190613f78565b60405180910390a35b8160ca6000613a1784613952565b815260200190815260200160002060008681526020019081526020016000209081613a429190615064565b5081604051613a519190614c1f565b604051809103902083604051613a679190614c1f565b6040518091039020827f851ffe8e74d5015261dba0a1f9e1b0e5d42c5af5d2ad1908fee897c7d80a0d928686604051613aa19291906146e2565b60405180910390a450505050565b600081815260c9602052604081208054829190613acb90614a66565b9050119050919050565b6000806000613ae48585613dc3565b90925090506000816004811115613afd57613afd615213565b148015613b1b5750856001600160a01b0316826001600160a01b0316145b15613b2b57600192505050610db7565b600080876001600160a01b0316631626ba7e60e01b8888604051602401613b53929190615229565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613b919190614c1f565b600060405180830381855afa9150503d8060008114613bcc576040519150601f19603f3d011682016040523d82523d6000602084013e613bd1565b606091505b5091509150818015613be4575080516020145b8015613c0b57508051630b135d3f60e11b90613c09908301602090810190840161501e565b145b98975050505050505050565b60006001600160a01b0384163b15613d1457836001600160a01b031663150b7a02613c4061229c565b8786866040518563ffffffff1660e01b8152600401613c629493929190615242565b6020604051808303816000875af1925050508015613c9d575060408051601f3d908101601f19168201909252613c9a91810190615275565b60015b613cfa573d808015613ccb576040519150601f19603f3d011682016040523d82523d6000602084013e613cd0565b606091505b508051600003613cf25760405162461bcd60e51b8152600401610b6090615162565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610cab565b506001610cab565b600054610100900460ff16613d435760405162461bcd60e51b8152600401610b60906151c8565b806000805160206152938339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b600054610100900460ff16613d9c5760405162461bcd60e51b8152600401610b60906151c8565b807f8bea9a6f8afd34f4e29c585f854e0cc5161431bf5fc299d468454d33dce53b87613d54565b6000808251604103613df95760208301516040840151606085015160001a613ded87828585613e08565b94509450505050613e01565b506000905060025b9250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613e3f5750600090506003613eec565b8460ff16601b14158015613e5757508460ff16601c14155b15613e685750600090506004613eec565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613ebc573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613ee557600060019250925050613eec565b9150600090505b94509492505050565b6001600160e01b0319811681146111ca57600080fd5b600060208284031215613f1d57600080fd5b8135610db781613ef5565b60005b83811015613f43578181015183820152602001613f2b565b50506000910152565b60008151808452613f64816020860160208601613f28565b601f01601f19169290920160200192915050565b602081526000610db76020830184613f4c565b600060208284031215613f9d57600080fd5b5035919050565b6001600160a01b03811681146111ca57600080fd5b60008060408385031215613fcc57600080fd5b8235613fd781613fa4565b946020939093013593505050565b60008083601f840112613ff757600080fd5b5081356001600160401b0381111561400e57600080fd5b602083019150836020828501011115613e0157600080fd5b60008060008060006080868803121561403e57600080fd5b853561404981613fa4565b9450602086013561405981613fa4565b93506040860135925060608601356001600160401b0381111561407b57600080fd5b61408788828901613fe5565b969995985093965092949392505050565b60008083601f8401126140aa57600080fd5b5081356001600160401b038111156140c157600080fd5b6020830191508360208260051b8501011115613e0157600080fd5b6000806000604084860312156140f157600080fd5b83356001600160401b0381111561410757600080fd5b61411386828701614098565b909790965060209590950135949350505050565b600082825180855260208086019550808260051b84010181860160005b8481101561417257601f19868403018952614160838351613f4c565b98840198925090830190600101614144565b5090979650505050505050565b602081526000610db76020830184614127565b6000806000604084860312156141a757600080fd5b83356001600160401b038111156141bd57600080fd5b61411386828701613fe5565b6000806000604084860312156141de57600080fd5b83356001600160401b03808211156141f557600080fd5b908501906080828803121561420957600080fd5b9093506020850135908082111561421f57600080fd5b5061422c86828701613fe5565b9497909650939450505050565b8035801515811461124557600080fd5b60008060008060008060008060a0898b03121561426557600080fd5b883561427081613fa4565b975060208901356001600160401b038082111561428c57600080fd5b6142988c838d01614098565b909950975060408b01359150808211156142b157600080fd5b6142bd8c838d01614098565b909750955060608b01359150808211156142d657600080fd5b506142e38b828c01614098565b90945092506142f6905060808a01614239565b90509295985092959890939650565b60008060006060848603121561431a57600080fd5b833561432581613fa4565b9250602084013561433581613fa4565b929592945050506040919091013590565b6000806020838503121561435957600080fd5b82356001600160401b0381111561436f57600080fd5b61437b85828601614098565b90969095509350505050565b60008060008060006060868803121561439f57600080fd5b85356001600160401b03808211156143b657600080fd5b6143c289838a01614098565b909750955060208801359150808211156143db57600080fd5b506143e888828901614098565b96999598509660400135949350505050565b6000806040838503121561440d57600080fd5b82356001600160401b0381168114613fd757600080fd5b60008060008060006060868803121561443c57600080fd5b85356001600160401b038082111561445357600080fd5b61445f89838a01613fe5565b9097509550602088013591508082111561447857600080fd5b506143e888828901613fe5565b6000806000806060858703121561449b57600080fd5b8435935060208501356001600160401b038111156144b857600080fd5b6144c487828801613fe5565b9598909750949560400135949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614515576145156144d7565b604052919050565b600082601f83011261452e57600080fd5b81356001600160401b03811115614547576145476144d7565b61455a601f8201601f19166020016144ed565b81815284602083860101111561456f57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561459e57600080fd5b81356001600160401b038111156145b457600080fd5b610cab8482850161451d565b6000602082840312156145d257600080fd5b8135610db781613fa4565b60006001600160401b038211156145f6576145f66144d7565b5060051b60200190565b600061461361460e846145dd565b6144ed565b8381529050602080820190600585901b84018681111561463257600080fd5b845b8181101561466d5780356001600160401b038111156146535760008081fd5b61465f8982890161451d565b855250928201928201614634565b505050509392505050565b60006020828403121561468a57600080fd5b81356001600160401b038111156146a057600080fd5b8201601f810184136146b157600080fd5b610cab84823560208401614600565b600080604083850312156146d357600080fd5b50508035926020909101359150565b6040815260006146f56040830185613f4c565b8281036020840152610db38185613f4c565b6000806000806060858703121561471d57600080fd5b843561472881613fa4565b93506020850135925060408501356001600160401b0381111561474a57600080fd5b61475687828801613fe5565b95989497509550505050565b60008060008060008060006080888a03121561477d57600080fd5b87356001600160401b038082111561479457600080fd5b6147a08b838c01613fe5565b909950975060208a0135965060408a01359150808211156147c057600080fd5b6147cc8b838c01614098565b909650945060608a01359150808211156147e557600080fd5b506147f28a828b01614098565b989b979a50959850939692959293505050565b6000806020838503121561481857600080fd5b82356001600160401b0381111561482e57600080fd5b61437b85828601613fe5565b6000806040838503121561484d57600080fd5b823561485881613fa4565b9150612e9660208401614239565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156148bb57603f198886030184526148a9858351613f4c565b9450928501929085019060010161488d565b5092979650505050505050565b6040815260006148db6040830185614127565b8281036020840152610db38185614127565b6000806000806080858703121561490357600080fd5b843561490e81613fa4565b9350602085013561491e81613fa4565b92506040850135915060608501356001600160401b0381111561494057600080fd5b61494c8782880161451d565b91505092959194509250565b60008060006040848603121561496d57600080fd5b833561497881613fa4565b925060208401356001600160401b0381111561499357600080fd5b61422c86828701613fe5565b600080604083850312156149b257600080fd5b82356149bd81613fa4565b915060208301356149cd81613fa4565b809150509250929050565b6000806000604084860312156149ed57600080fd5b8335925060208401356001600160401b0381111561499357600080fd5b60008060008060808587031215614a2057600080fd5b8435614a2b81613fa4565b93506020850135614a3b81613fa4565b92506040850135614a4b81613fa4565b91506060850135614a5b81613fa4565b939692955090935050565b600181811c90821680614a7a57607f821691505b6020821081036113ff57634e487b7160e01b600052602260045260246000fd5b600060208284031215614aac57600080fd5b610db782614239565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112614ae257600080fd5b8301803591506001600160401b03821115614afc57600080fd5b602001915036819003821315613e0157600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614b3957614b39614b11565b5060010190565b60208082526027908201527f52656769737472793a2053454e4445525f49535f4e4f545f4d494e54494e475f60408201526626a0a720a3a2a960c91b606082015260800190565b6000610db7368484614600565b60208082526029908201527f52656769737472793a2053454e4445525f49535f4e4f545f415050524f5645446040820152682fa7a92fa7aba722a960b91b606082015260800190565b60208082526022908201527f52656769737472793a20494e53554646494349454e545f5045524d495353494f6040820152614e5360f01b606082015260800190565b60008251614c31818460208701613f28565b9190910192915050565b601f821115610a1357600081815260208120601f850160051c81016020861015614c625750805b601f850160051c820191505b8181101561117057828155600101614c6e565b6001600160401b03831115614c9857614c986144d7565b614cac83614ca68354614a66565b83614c3b565b6000601f841160018114614ce05760008515614cc85750838201355b600019600387901b1c1916600186901b178355610ea0565b600083815260209020601f19861690835b82811015614d115786850135825560209485019460019092019101614cf1565b5086821015614d2e5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610cab602083018486614d40565b600060808236031215614d8f57600080fd5b604051608081016001600160401b038282108183111715614db257614db26144d7565b8160405284359150614dc382613fa4565b81835260208501356020840152604085013560408401526060850135915080821115614dee57600080fd5b50614dfb3682860161451d565b60608301525092915050565b6000614e1561460e846145dd565b80848252602080830192508560051b850136811115614e3357600080fd5b855b81811015614e6e5780356001600160401b03811115614e545760008081fd5b614e6036828a0161451d565b865250938201938201614e35565b50919695505050505050565b60008351614e8c818460208801613f28565b835190830190614ea0818360208801613f28565b01949350505050565b60006020808385031215614ebc57600080fd5b82356001600160401b03811115614ed257600080fd5b8301601f81018513614ee357600080fd5b8035614ef161460e826145dd565b81815260059190911b82018301908381019087831115614f1057600080fd5b928401925b82841015614f2e57833582529284019290840190614f15565b979650505050505050565b8082018082111561094057610940614b11565b6001600160a01b03848116825283166020820152606060408201819052600090610b6990830184613f4c565b634e487b7160e01b600052601260045260246000fd5b600082614f9d57614f9d614f78565b500490565b634e487b7160e01b600052600160045260246000fd5b8181038181111561094057610940614b11565b600081614fda57614fda614b11565b506000190190565b60008351614ff4818460208801613f28565b601760f91b9083019081528351615012816001840160208801613f28565b01600101949350505050565b60006020828403121561503057600080fd5b5051919050565b60006020828403121561504957600080fd5b8151610db781613fa4565b8183823760009101908152919050565b81516001600160401b0381111561507d5761507d6144d7565b6150918161508b8454614a66565b84614c3b565b602080601f8311600181146150c657600084156150ae5750858301515b600019600386901b1c1916600185901b178555611170565b600085815260208120601f198616915b828110156150f5578886015182559484019460019091019084016150d6565b50858210156151135787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008451615135818460208901613f28565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826151c3576151c3614f78565b500690565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b828152604060208201526000610cab6040830184613f4c565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061316590830184613f4c565b60006020828403121561528757600080fd5b8151610db781613ef556febe2bb46ac0377341a1ec5c3116d70fd5029d704bd46292e58f6265dd177ebafe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000811000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/abi/IMintingManager.json b/artifacts/abi/IMintingManager.json index 582b805b..edac7a98 100644 --- a/artifacts/abi/IMintingManager.json +++ b/artifacts/abi/IMintingManager.json @@ -1 +1 @@ -[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"DomainPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tld","type":"string"}],"name":"NewTld","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"RemoveTld","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recepient","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"string","name":"tld","type":"string"},{"internalType":"bool","name":"isExpirable","type":"bool"}],"name":"addTld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"buyForErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tld","type":"uint256"},{"internalType":"string","name":"label","type":"string"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tld","type":"uint256"},{"internalType":"string","name":"label","type":"string"}],"name":"claimTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tld","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"name":"claimToWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"issueExpirableWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"issueWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"removeTld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"renew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"prefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recepient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recepient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}] +[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"DomainPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tld","type":"string"}],"name":"NewTld","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"RemoveTld","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recepient","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"string","name":"tld","type":"string"},{"internalType":"bool","name":"isExpirable","type":"bool"}],"name":"addTld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"buyForErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tld","type":"uint256"},{"internalType":"string","name":"label","type":"string"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tld","type":"uint256"},{"internalType":"string","name":"label","type":"string"}],"name":"claimTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tld","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"name":"claimToWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"issueExpirableWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"issueWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"removeTld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"renew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"revoke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"prefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recepient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recepient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/IUNSRegistry.json b/artifacts/abi/IUNSRegistry.json index a67aa7dc..f3c8e5dc 100644 --- a/artifacts/abi/IUNSRegistry.json +++ b/artifacts/abi/IUNSRegistry.json @@ -1 +1 @@ -[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"string","name":"keyIndex","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"NewKey","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"NewURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"prefix","type":"string"}],"name":"NewURIPrefix","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"RemoveReverse","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ResetRecords","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"string","name":"keyIndex","type":"string"},{"indexed":true,"internalType":"string","name":"valueIndex","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"},{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"expiry","type":"uint64"}],"name":"SetExpiry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"SetReverse","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addProxyReader","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"depositData","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"depositToPolygon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"expiryOf","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"get","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyHash","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getByHash","outputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMany","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"keyHashes","type":"uint256[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getManyByHash","outputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isApprovedOrOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"metaData","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"mintTLD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"mintWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"labels","type":"string[]"}],"name":"namehash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"reconfigure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeReverse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"reset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"resolverOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"reverseNameOf","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"reverseOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyHash","type":"uint256"},{"internalType":"string","name":"value","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setByHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setExpiry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"keyHashes","type":"uint256[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setManyByHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"labels","type":"string[]"}],"name":"setReverse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"prefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"unlockWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"name":"withdrawFromPolygon","outputs":[],"stateMutability":"nonpayable","type":"function"}] +[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"string","name":"keyIndex","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"NewKey","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"NewURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"prefix","type":"string"}],"name":"NewURIPrefix","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"RemoveReverse","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ResetRecords","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"string","name":"keyIndex","type":"string"},{"indexed":true,"internalType":"string","name":"valueIndex","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"},{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"expiry","type":"uint64"}],"name":"SetExpiry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"SetReverse","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addProxyReader","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"depositData","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"depositToPolygon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"expiryOf","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"get","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyHash","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getByHash","outputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMany","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"keyHashes","type":"uint256[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getManyByHash","outputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isApprovedOrOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"metaData","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"mintTLD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"mintWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"labels","type":"string[]"}],"name":"namehash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"reconfigure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeReverse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"reset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"resolverOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"reverseNameOf","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"reverseOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyHash","type":"uint256"},{"internalType":"string","name":"value","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setByHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setExpiry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"keyHashes","type":"uint256[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setManyByHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"labels","type":"string[]"}],"name":"setReverse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"prefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"unlockWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"name":"withdrawFromPolygon","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/MintingManager.json b/artifacts/abi/MintingManager.json index e5cd4146..1bcb87e0 100644 --- a/artifacts/abi/MintingManager.json +++ b/artifacts/abi/MintingManager.json @@ -1 +1 @@ -[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Blocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"BlocklistDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"BlocklistEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"DomainPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tld","type":"string"}],"name":"NewTld","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"RemoveTld","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recepient","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"addMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"addProxyReaders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tld","type":"string"},{"internalType":"bool","name":"isExpirable","type":"bool"}],"name":"addTld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"buyForErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tld","type":"uint256"},{"internalType":"string","name":"label","type":"string"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tld","type":"uint256"},{"internalType":"string","name":"label","type":"string"}],"name":"claimTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tld","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"name":"claimToWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"}],"name":"closeMinter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cnsMintingController","outputs":[{"internalType":"contract IMintingController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cnsResolver","outputs":[{"internalType":"contract IResolver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cnsURIPrefixController","outputs":[{"internalType":"contract IURIPrefixController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IUNSRegistry","name":"unsRegistry_","type":"address"},{"internalType":"contract IMintingController","name":"cnsMintingController_","type":"address"},{"internalType":"contract IURIPrefixController","name":"cnsURIPrefixController_","type":"address"},{"internalType":"contract IResolver","name":"cnsResolver_","type":"address"},{"internalType":"address","name":"unsOperator_","type":"address"},{"internalType":"address","name":"forwarder","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"issueExpirableWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"issueWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tld","type":"uint256"}],"name":"removeTld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"renew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"}],"name":"rotateMinter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"setForwarder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"prefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unsOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unsRegistry","outputs":[{"internalType":"contract IUNSRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recepient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recepient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}] +[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Blocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"BlocklistDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"BlocklistEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"DomainPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tld","type":"string"}],"name":"NewTld","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"RemoveTld","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recepient","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"addMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"addProxyReaders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tld","type":"string"},{"internalType":"bool","name":"isExpirable","type":"bool"}],"name":"addTld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"buyForErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tld","type":"uint256"},{"internalType":"string","name":"label","type":"string"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tld","type":"uint256"},{"internalType":"string","name":"label","type":"string"}],"name":"claimTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tld","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"name":"claimToWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"}],"name":"closeMinter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cnsMintingController","outputs":[{"internalType":"contract IMintingController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cnsResolver","outputs":[{"internalType":"contract IResolver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cnsURIPrefixController","outputs":[{"internalType":"contract IURIPrefixController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IUNSRegistry","name":"unsRegistry_","type":"address"},{"internalType":"contract IMintingController","name":"cnsMintingController_","type":"address"},{"internalType":"contract IURIPrefixController","name":"cnsURIPrefixController_","type":"address"},{"internalType":"contract IResolver","name":"cnsResolver_","type":"address"},{"internalType":"address","name":"unsOperator_","type":"address"},{"internalType":"address","name":"forwarder","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"issueExpirableWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"issueWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tld","type":"uint256"}],"name":"removeTld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"renew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"revoke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"}],"name":"rotateMinter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"setForwarder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"prefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unsOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unsRegistry","outputs":[{"internalType":"contract IUNSRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recepient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recepient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/artifacts/abi/UNSRegistry.json b/artifacts/abi/UNSRegistry.json index eb029004..e3e1fdbb 100644 --- a/artifacts/abi/UNSRegistry.json +++ b/artifacts/abi/UNSRegistry.json @@ -1 +1 @@ -[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"string","name":"keyIndex","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"NewKey","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"NewURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"prefix","type":"string"}],"name":"NewURIPrefix","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"RemoveReverse","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ResetRecords","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"string","name":"keyIndex","type":"string"},{"indexed":true,"internalType":"string","name":"valueIndex","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"},{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"expiry","type":"uint64"}],"name":"SetExpiry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"SetReverse","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"BATCH_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"addKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addProxyReader","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"depositData","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"depositToPolygon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IForwarder.ForwardRequest","name":"req","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"expiryOf","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"get","outputs":[{"internalType":"string","name":"value","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyHash","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getByHash","outputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyHash","type":"uint256"}],"name":"getKey","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"hashes","type":"uint256[]"}],"name":"getKeys","outputs":[{"internalType":"string[]","name":"values","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMany","outputs":[{"internalType":"string[]","name":"values","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"keyHashes","type":"uint256[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getManyByHash","outputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mintingManager","type":"address"},{"internalType":"address","name":"cnsRegistry","type":"address"},{"internalType":"address","name":"rootChainManager","type":"address"},{"internalType":"address","name":"childChainManager","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isApprovedOrOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"mintTLD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"mintWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"labels","type":"string[]"}],"name":"namehash","outputs":[{"internalType":"uint256","name":"hash","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"nonceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"reconfigure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeReverse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"reset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"resolverOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"reverseNameOf","outputs":[{"internalType":"string","name":"reverseUri","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"reverseOf","outputs":[{"internalType":"uint256","name":"reverse","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyHash","type":"uint256"},{"internalType":"string","name":"value","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setByHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setExpiry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"keyHashes","type":"uint256[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setManyByHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"labels","type":"string[]"}],"name":"setReverse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"prefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"unlockWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IForwarder.ForwardRequest","name":"req","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"name":"withdrawFromPolygon","outputs":[],"stateMutability":"nonpayable","type":"function"}] +[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"string","name":"keyIndex","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"NewKey","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"NewURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"prefix","type":"string"}],"name":"NewURIPrefix","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"RemoveReverse","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ResetRecords","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"string","name":"keyIndex","type":"string"},{"indexed":true,"internalType":"string","name":"valueIndex","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"},{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"expiry","type":"uint64"}],"name":"SetExpiry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"SetReverse","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"BATCH_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"addKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addProxyReader","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"depositData","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"depositToPolygon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IForwarder.ForwardRequest","name":"req","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"expiryOf","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"get","outputs":[{"internalType":"string","name":"value","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyHash","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getByHash","outputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyHash","type":"uint256"}],"name":"getKey","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"hashes","type":"uint256[]"}],"name":"getKeys","outputs":[{"internalType":"string[]","name":"values","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMany","outputs":[{"internalType":"string[]","name":"values","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"keyHashes","type":"uint256[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getManyByHash","outputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mintingManager","type":"address"},{"internalType":"address","name":"cnsRegistry","type":"address"},{"internalType":"address","name":"rootChainManager","type":"address"},{"internalType":"address","name":"childChainManager","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isApprovedOrOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"mintTLD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"mintWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"labels","type":"string[]"}],"name":"namehash","outputs":[{"internalType":"uint256","name":"hash","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"nonceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"reconfigure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeReverse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"reset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"resolverOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"reverseNameOf","outputs":[{"internalType":"string","name":"reverseUri","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"reverseOf","outputs":[{"internalType":"uint256","name":"reverse","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyHash","type":"uint256"},{"internalType":"string","name":"value","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setByHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"expiry","type":"uint64"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setExpiry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"keyHashes","type":"uint256[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setManyByHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"labels","type":"string[]"}],"name":"setReverse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"prefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string[]","name":"labels","type":"string[]"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"},{"internalType":"bool","name":"withReverse","type":"bool"}],"name":"unlockWithRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IForwarder.ForwardRequest","name":"req","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string[]","name":"keys","type":"string[]"},{"internalType":"string[]","name":"values","type":"string[]"}],"name":"withdrawFromPolygon","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/contracts/IMintingManager.sol b/contracts/IMintingManager.sol index 3e400098..42543fe4 100644 --- a/contracts/IMintingManager.sol +++ b/contracts/IMintingManager.sol @@ -63,6 +63,12 @@ interface IMintingManager is IERC1967 { */ function renew(uint64 expiry, uint256 tokenId) external; + /** + * @dev Revokes an expirable domain. + * @param tokenId uint256 ID of the token + */ + function revoke(uint256 tokenId) external; + /** * @dev Claims free domain. The fuction adds prefix to label. * @param tld id of parent token diff --git a/contracts/IUNSRegistry.sol b/contracts/IUNSRegistry.sol index 604a7b6f..3440fc34 100644 --- a/contracts/IUNSRegistry.sol +++ b/contracts/IUNSRegistry.sol @@ -112,6 +112,13 @@ interface IUNSRegistry is bool withReverse ) external; + /** + * @dev unlock token + * @param to address to unlock the token to + * @param tokenId uint256 ID of the token + */ + function unlock(address to, uint256 tokenId) external; + /** * @dev unlock token with records * @param to address to unlock the token to diff --git a/contracts/MintingManager.sol b/contracts/MintingManager.sol index 92871944..ef6fba69 100644 --- a/contracts/MintingManager.sol +++ b/contracts/MintingManager.sol @@ -25,7 +25,7 @@ contract MintingManager is ERC2771Context, MinterRole, Blocklist, Pausable, IMin using ECDSAUpgradeable for bytes32; string public constant NAME = 'UNS: Minting Manager'; - string public constant VERSION = '0.5.0'; + string public constant VERSION = '0.5.1'; IUNSRegistry public unsRegistry; IMintingController public cnsMintingController; @@ -64,7 +64,7 @@ contract MintingManager is ERC2771Context, MinterRole, Blocklist, Pausable, IMin * Legacy CNS free domain prefix is 'udtestdev-'. * keccak256('udtestdev-') = 0xb551e0305c8163b812374b8e78b577c77f226f6f10c5ad03e52699578fbc34b8 */ - modifier onlyAllowed(string[] memory labels, uint256 expiry) { + modifier onlyAllowed(string[] memory labels, uint64 expiry) { require(labels.length >= 2, 'MintingManager: LABELS_LENGTH_BELOW_2'); _ensureAllowed(_namehash(0x0, labels[labels.length - 1]), labels[0], expiry); _; @@ -178,6 +178,12 @@ contract MintingManager is ERC2771Context, MinterRole, Blocklist, Pausable, IMin unsRegistry.setExpiry(expiry, tokenId); } + function revoke(uint256 tokenId) external override onlyMinter { + require(unsRegistry.expiryOf(tokenId) != 0, 'MintingManager: TOKEN_NOT_EXPIRABLE'); + + unsRegistry.unlock(address(this), tokenId); + } + function claim(uint256 tld, string calldata label) external override onlyAllowedSLD(tld, label) whenNotPaused { string[] memory empty; @@ -375,7 +381,7 @@ contract MintingManager is ERC2771Context, MinterRole, Blocklist, Pausable, IMin function _ensureAllowed( uint256 tld, string memory label, - uint256 expiry + uint64 expiry ) private view { require(_isTld(tld), 'MintingManager: TLD_NOT_REGISTERED'); require(_expirableTlds[tld] == (expiry > 0), 'MintingManager: TLD_EXPIRABLE_MISMATCH'); diff --git a/contracts/UNSRegistry.sol b/contracts/UNSRegistry.sol index 8faf5253..e05daf71 100644 --- a/contracts/UNSRegistry.sol +++ b/contracts/UNSRegistry.sol @@ -31,7 +31,7 @@ contract UNSRegistry is IUNSRegistry { string public constant NAME = 'UNS: Registry'; - string public constant VERSION = '0.9.0'; + string public constant VERSION = '0.9.1'; string internal _prefix; @@ -141,6 +141,11 @@ contract UNSRegistry is emit NewURI(tokenId, uri); } + function unlock(address to, uint256 tokenId) public override onlyMintingManager { + _reset(tokenId); + _transfer(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); + } + function unlockWithRecords( address to, string[] calldata labels, @@ -150,8 +155,7 @@ contract UNSRegistry is ) external onlyMintingManager { (uint256 tokenId, ) = _namehash(labels); - _reset(tokenId); - _transfer(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); + unlock(to, tokenId); _setMany(keys, values, tokenId); if (withReverse) { diff --git a/test/MintingManager.metatx.test.ts b/test/MintingManager.metatx.test.ts index f453c2c4..81bf7522 100644 --- a/test/MintingManager.metatx.test.ts +++ b/test/MintingManager.metatx.test.ts @@ -92,6 +92,63 @@ describe('MintingManager (metatx)', () => { expect(await unsRegistry.expiryOf(tokenId)).to.be.equal(expiry); }); + it('should renew expirable through forwarder', async () => { + const labels = ['test-qw123-expirable-renew', 'com']; + const tokenId = await unsRegistry.namehash(labels); + const latestBlock = await ethers.provider.getBlock('latest'); + + const expiry = latestBlock.timestamp + 24 * 60 * 60; + + await mintingManager.issueExpirableWithRecords( + receiver.address, + labels, + [], + [], + expiry, + true, + ); + + const newExpiry = expiry + 24 * 60 * 60; + + const { req, signature } = await buildExecuteParams( + 'renew(uint64,uint256)', + [newExpiry, tokenId], + coinbase, + tokenId, + ); + + await forwarder.execute(req, signature); + + expect(await unsRegistry.expiryOf(tokenId)).to.be.equal(newExpiry); + }); + + it('should revoke expirable through forwarder', async () => { + const labels = ['test-qw123-expirable-revoke', 'com']; + const tokenId = await unsRegistry.namehash(labels); + const latestBlock = await ethers.provider.getBlock('latest'); + + const expiry = latestBlock.timestamp + 24 * 60 * 60; + + await mintingManager.issueExpirableWithRecords( + receiver.address, + labels, + [], + [], + expiry, + true, + ); + + const { req, signature } = await buildExecuteParams( + 'revoke(uint256)', + [tokenId], + coinbase, + tokenId, + ); + + await forwarder.execute(req, signature); + + expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(mintingManager.address); + }); it('should be able to buy domain with ERC20 tokens', async () => { const latestBlock = await ethers.provider.getBlock('latest'); diff --git a/test/MintingManager.test.ts b/test/MintingManager.test.ts index d2fc816f..a5a29a09 100644 --- a/test/MintingManager.test.ts +++ b/test/MintingManager.test.ts @@ -2329,7 +2329,7 @@ describe('MintingManager', () => { true, ); - const tokenId = await unsRegistry.namehash(['test-renew-1', 'com']); + const tokenId = await unsRegistry.namehash(labels); expect(await unsRegistry.expiryOf(tokenId)).to.be.equal(expiry); const newExpiry = expiry + 60 * 60 * 24; @@ -2415,6 +2415,79 @@ describe('MintingManager', () => { }); }); + describe('Revocations (expirable domains)', () => { + before(async () => { + [coinbase, receiver] = signers; + + unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); + mintingManager = await new MintingManager__factory(coinbase).deploy(); + + await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await mintingManager.initialize( + unsRegistry.address, + ZERO_ADDRESS, + ZERO_ADDRESS, + ZERO_ADDRESS, + ZERO_ADDRESS, + ZERO_ADDRESS, + ); + await mintingManager.addMinter(coinbase.address); + }); + + it('should revoke an expirable domain', async () => { + const labels = ['test-revoke-1', 'com']; + const expiry = latestBlock.timestamp + 60 * 60 * 24; + + await mintingManager.connect(coinbase).issueExpirableWithRecords( + coinbase.address, + labels, + ['key1'], + ['awesome-value'], + expiry, + true, + ); + + const tokenId = await unsRegistry.namehash(labels); + expect(await unsRegistry.expiryOf(tokenId)).to.be.equal(expiry); + + await mintingManager.connect(coinbase).revoke(tokenId); + + expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(mintingManager.address); + expect(await unsRegistry.get('key1', tokenId)).to.be.equal(''); + }); + + it('should revert if domain is not exprialbe', async () => { + const labels = ['test-revoke-2', 'crypto']; + + await mintingManager.connect(coinbase).issueWithRecords(coinbase.address, labels, [], [], true); + const tokenId = await unsRegistry.namehash(labels); + + await expect(mintingManager.connect(coinbase).revoke(tokenId)).to.be.revertedWith( + 'MintingManager: TOKEN_NOT_EXPIRABLE', + ); + }); + + it('should revert if caller is not minter', async () => { + const labels = ['test-revoke-3', 'com']; + + const expiry = latestBlock.timestamp + 60 * 60 * 24; + + await mintingManager.connect(coinbase).issueExpirableWithRecords( + coinbase.address, + labels, + [], + [], + expiry, + true, + ); + const tokenId = await unsRegistry.namehash(labels); + + await expect(mintingManager.connect(receiver).revoke(tokenId)).to.be.revertedWith( + 'MinterRole: CALLER_IS_NOT_MINTER', + ); + }); + }); + describe('Blocklist', () => { describe('Domain blocklisting', () => { before(async () => { diff --git a/test/UNSRegistry.metatx.test.ts b/test/UNSRegistry.metatx.test.ts index 9ea14273..b27549e3 100644 --- a/test/UNSRegistry.metatx.test.ts +++ b/test/UNSRegistry.metatx.test.ts @@ -331,6 +331,7 @@ describe('UNSRegistry (metatx)', () => { const included = [ 'issueWithRecords', 'unlockWithRecords', + 'unlock', 'mintTLD', ]; @@ -373,6 +374,7 @@ describe('UNSRegistry (metatx)', () => { 'mint', 'issue', 'issueWithRecords', + 'unlock', 'unlockWithRecords', 'transferFromFor', 'burnFor', @@ -505,6 +507,7 @@ describe('UNSRegistry (metatx)', () => { 'addProxyReader', 'setReverse', // covered in separate test case 'unlockWithRecords', // covered in separate test case + 'unlock', // covered in separate test case 'multicall', ]; @@ -556,6 +559,18 @@ describe('UNSRegistry (metatx)', () => { await unsRegistry.execute(req, signature); }); + it('should execute unlock(address,uint256) correctly', async () => { + const unlockLabels = registryFuncs() + .filter((x) => !x.inputs.filter((i) => i.name === 'tokenId').length) + .filter((x) => x.name === 'unlock')[0]; + const funcSig = getFuncSignature(unlockLabels); + paramValueMap.labels = [utils.id(`${funcSig}_label`), 'crypto']; + const tokenId = await mintDomain({ unsRegistry, owner, labels: paramValueMap.labels }); + const req = await buidRequest(unlockLabels, coinbase.address, tokenId, paramValueMap); + const signature = await sign(req.data, unsRegistry.address, req.nonce, coinbase); + await unsRegistry.execute(req, signature); + }); + it('should revert execution of all functions when used signature', async () => { for (const func of getFuncs()) { const funcSig = getFuncSignature(func); diff --git a/test/UNSRegistry.test.ts b/test/UNSRegistry.test.ts index 68d1713b..9e8ee019 100644 --- a/test/UNSRegistry.test.ts +++ b/test/UNSRegistry.test.ts @@ -348,6 +348,71 @@ describe('UNSRegistry', () => { }); }); + describe('unlock(address,uint256)', async () => { + it('should properly unlock domain resetting records', async () => { + const labels = ['label_12324_unlock', 'crypto']; + const tokenId = await mintDomain({ + labels, + unsRegistry, + owner: coinbase.address, + keys: ['key'], + values: ['value'], + }); + + expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(coinbase.address); + expect(await unsRegistry.get('key', tokenId)).to.be.equal('value'); + + await unsRegistry.connect(coinbase).unlock(receiver.address, tokenId); + + expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(receiver.address); + expect(await unsRegistry.get('key', tokenId)).to.be.equal(''); + }); + + it('should properly unlock expirable domain', async () => { + const labels = ['label_12324_unlock', 'com']; + const expiry = latestBlock.timestamp + 60 * 60 * 24; + const tokenId = await mintDomain({ + labels, + unsRegistry, + owner: coinbase.address, + keys: ['key'], + values: ['value'], + expiry, + }); + + expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(coinbase.address); + expect(await unsRegistry.get('key', tokenId)).to.be.equal('value'); + expect(await unsRegistry.expiryOf(tokenId)).to.be.equal(expiry); + + await unsRegistry.connect(coinbase).unlock(receiver.address, tokenId); + + expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(receiver.address); + expect(await unsRegistry.get('key', tokenId)).to.be.equal(''); + }); + + it('should fail if token is not minted', async () => { + const tokenId = await unsRegistry.namehash(['label_12324_unlock_fail', 'crypto']); + await expect(unsRegistry.unlock(receiver.address, tokenId)).to.be.revertedWith('ERC721: invalid token ID'); + }); + + it('should fail if called by non-allowed address', async () => { + const labels = ['label_12324_unlock_fail', 'crypto']; + + const tokenId = await mintDomain({ + unsRegistry, + owner: coinbase, + labels, + withoutReverse: false, + }); + + await expect( + unsRegistry + .connect(receiver) + .unlock(receiver.address, tokenId), + ).to.be.revertedWith('Registry: SENDER_IS_NOT_MINTING_MANAGER'); + }); + }); + describe('unlockWithRecords(address,string[],string[],string[],bool)', async () => { it('should properly unlock domain and set new records without reverse', async () => { const labels = ['label_12324_unlock2', 'crypto'];