UNPKG

@mantleio/contracts

Version:
534 lines 65.5 kB
{ "_format": "hh-sol-artifact-1", "contractName": "TssGroupManager", "sourceName": "contracts/L1/tss/TssGroupManager.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "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": "uint256", "name": "_roundId", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "_groupKey", "type": "bytes" }, { "indexed": false, "internalType": "bytes[]", "name": "activeTssMembers", "type": "bytes[]" } ], "name": "tssActiveMemberAppended", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_roundId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_threshold", "type": "uint256" }, { "indexed": false, "internalType": "bytes[]", "name": "_inActiveTssMembers", "type": "bytes[]" } ], "name": "tssGroupMemberAppend", "type": "event" }, { "inputs": [], "name": "getTssGroupInfo", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "bytes[]", "name": "", "type": "bytes[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTssGroupMembers", "outputs": [ { "internalType": "bytes[]", "name": "", "type": "bytes[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTssGroupUnJailMembers", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTssInactiveGroupInfo", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes[]", "name": "", "type": "bytes[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_publicKey", "type": "bytes" } ], "name": "getTssMember", "outputs": [ { "components": [ { "internalType": "bytes", "name": "publicKey", "type": "bytes" }, { "internalType": "address", "name": "nodeAddress", "type": "address" }, { "internalType": "enum ITssGroupManager.MemberStatus", "name": "status", "type": "uint8" } ], "internalType": "struct ITssGroupManager.TssMember", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "inActiveIsEmpty", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "isInActiveMember", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_addr", "type": "address" } ], "name": "isTssGroupUnJailMembers", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_addr", "type": "address" } ], "name": "memberExistActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_publicKey", "type": "bytes" } ], "name": "memberExistActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_publicKey", "type": "bytes" } ], "name": "memberExistInActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_publicKey", "type": "bytes" } ], "name": "memberJail", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_publicKey", "type": "bytes" } ], "name": "memberUnJail", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_ethSignedMessageHash", "type": "bytes32" }, { "internalType": "bytes", "name": "_sig", "type": "bytes" } ], "name": "recover", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_publicKey", "type": "bytes" } ], "name": "removeMember", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_publicKey", "type": "bytes" }, { "internalType": "bytes", "name": "_groupPublicKey", "type": "bytes" } ], "name": "setGroupPublicKey", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_address", "type": "address" } ], "name": "setStakingSlash", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_threshold", "type": "uint256" }, { "internalType": "bytes[]", "name": "_batchPublicKey", "type": "bytes[]" } ], "name": "setTssGroupMember", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stakingSlash", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "tssActiveMemberInfo", "outputs": [ { "internalType": "bytes", "name": "publicKey", "type": "bytes" }, { "internalType": "address", "name": "nodeAddress", "type": "address" }, { "internalType": "enum ITssGroupManager.MemberStatus", "name": "status", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_message", "type": "bytes32" }, { "internalType": "bytes", "name": "_sig", "type": "bytes" } ], "name": "verifySign", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61346b80620000f46000396000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80637a952c11116100ee578063b57388d311610097578063e46a636811610071578063e46a63681461038f578063f2fde38b146103bd578063fcca5592146103d0578063fd3eb81f146103e857600080fd5b8063b57388d314610349578063bcbc5fc61461035c578063cf4c8a7b1461036f57600080fd5b80638da5cb5b116100c85780638da5cb5b146102f457806395f645bc14610312578063b3bd9ac41461032757600080fd5b80637a952c11146102d05780638129fc1c146102e35780638a51d8b4146102eb57600080fd5b8063429ec49c1161015057806354bbb9141161012a57806354bbb9141461029557806368fe7d23146102b5578063715018a6146102c857600080fd5b8063429ec49c1461025c5780634679b3661461026f5780634866e2e01461028257600080fd5b80632cd00d53116101815780632cd00d531461020d5780633231a7f014610222578063404a69861461024557600080fd5b806319045a25146101a85780631a47931b146101e5578063254ff981146101fa575b600080fd5b6101bb6101b6366004612abd565b6103fb565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101f86101f3366004612b09565b610526565b005b6101f8610208366004612b88565b610a4a565b610215610b26565b6040516101dc9190612bca565b610235610230366004612abd565b610d2e565b60405190151581526020016101dc565b61024d610d74565b6040516101dc93929190612cc9565b6101f861026a366004612b88565b610e6b565b6101f861027d366004612cf1565b610f0c565b610235610290366004612b88565b61131a565b6102a86102a3366004612b88565b61134a565b6040516101dc9190612dc7565b6102356102c3366004612e1f565b611495565b6101f861158a565b6101f86102de366004612b88565b61159e565b6101f86117c3565b609e5415610235565b60335473ffffffffffffffffffffffffffffffffffffffff166101bb565b61031a61192c565b6040516101dc9190612e5c565b61033a610335366004612e9e565b611a05565b6040516101dc93929190612f4f565b610235610357366004612e1f565b611ae8565b61023561036a366004612b88565b611b70565b609c546101bb9073ffffffffffffffffffffffffffffffffffffffff1681565b61023561039d366004612e9e565b805160208183018101805160a38252928201919093012091525460ff1681565b6101f86103cb366004612e1f565b611bb7565b6103d8611c51565b6040516101dc9493929190612f95565b6101f86103f6366004612e1f565b611dce565b60008060008061044086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ea692505050565b925092509250600060018883868660405160008152602001604052604051610484949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156104a6573d6000803e3d6000fd5b5050604051601f19015191505073ffffffffffffffffffffffffffffffffffffffff811661051b5760405162461bcd60e51b815260206004820152601060248201527f65637265636f766572206661696c65640000000000000000000000000000000060448201526064015b60405180910390fd5b979650505050505050565b61052e611f2f565b8061057b5760405162461bcd60e51b815260206004820152601960248201527f6261746368207075626c6963206b657920697320656d707479000000000000006044820152606401610512565b8083106105f05760405162461bcd60e51b815260206004820152602360248201527f7468726573686f6c64206d757374206c657373207468616e20747373206d656d60448201527f62657200000000000000000000000000000000000000000000000000000000006064820152608401610512565b60005b8181101561078a57600061065e84848481811061061257610612612fc6565b90506020028101906106249190612ff5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9692505050565b609c546040517fa458413a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935091169063a458413a90602401602060405180830381600087803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610705919061305a565b6107775760405162461bcd60e51b815260206004820152603160248201527f6261746368207075626c6963206b657973206861732061206e6f6465202c636160448201527f6e206e6f74206265206f70657261746f720000000000000000000000000000006064820152608401610512565b5080610782816130ab565b9150506105f3565b50609e54156108e65760005b609e548110156108d95760a160a0609e83815481106107b7576107b7612fc6565b906000526020600020016040516107ce9190613138565b9081526040519081900360200181206107e691613138565b90815260200160405180910390206000905560a0609e828154811061080d5761080d612fc6565b906000526020600020016040516108249190613138565b9081526020016040518091039020600061083e9190612877565b60a2609e828154811061085357610853612fc6565b9060005260206000200160405161086a9190613138565b908152604051908190036020019020805460ff19169055609e805460a391908390811061089957610899612fc6565b906000526020600020016040516108b09190613138565b908152604051908190036020019020805460ff19169055806108d1816130ab565b915050610796565b506108e6609e60006128b1565b60005b818110156109f457609e83838381811061090557610905612fc6565b90506020028101906109179190612ff5565b825460018101845560009384526020909320610935930191906128cf565b50600160a384848481811061094c5761094c612fc6565b905060200281019061095e9190612ff5565b60405161096c9291906131aa565b908152604051908190036020019020805491151560ff19909216919091179055600060a28484848181106109a2576109a2612fc6565b90506020028101906109b49190612ff5565b6040516109c29291906131aa565b908152604051908190036020019020805491151560ff19909216919091179055806109ec816130ab565b9150506108e9565b50609b839055609a547ffa26843b7ced045dd12994ee0e73c6f0904c3a4608bce58ae304d606035b079e90610a2a9060016131ba565b848484604051610a3d94939291906131fd565b60405180910390a1505050565b609c5473ffffffffffffffffffffffffffffffffffffffff163314610ad75760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e670000000000000000000000000000000000000000000000000000006064820152608401610512565b6001609f8383604051610aeb9291906131aa565b908152602001604051809103902060010160146101000a81548160ff02191690836001811115610b1d57610b1d612d5d565b02179055505050565b60606000805b609d54811015610bba576000609f609d8381548110610b4d57610b4d612fc6565b90600052602060002001604051610b649190613138565b908152602001604051809103902060010160149054906101000a900460ff166001811115610b9457610b94612d5d565b1415610ba85781610ba4816130ab565b9250505b80610bb2816130ab565b915050610b2c565b5060008167ffffffffffffffff811115610bd657610bd6612e6f565b604051908082528060200260200182016040528015610bff578160200160208202803683370190505b5090506000805b609d54811015610d25576000609f609d8381548110610c2757610c27612fc6565b90600052602060002001604051610c3e9190613138565b908152602001604051809103902060010160149054906101000a900460ff166001811115610c6e57610c6e612d5d565b1415610d1357609f609d8281548110610c8957610c89612fc6565b90600052602060002001604051610ca09190613138565b90815260405190819003602001902060010154835173ffffffffffffffffffffffffffffffffffffffff90911690849084908110610ce057610ce0612fc6565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015281610d0f816130ab565b9250505b80610d1d816130ab565b915050610c06565b50909392505050565b60985460009073ffffffffffffffffffffffffffffffffffffffff16610d558585856103fb565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b6000806060609a546001610d8891906131ba565b609b54609e80805480602002602001604051908101604052809291908181526020016000905b82821015610e5a578382906000526020600020018054610dcd906130e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610df9906130e4565b8015610e465780601f10610e1b57610100808354040283529160200191610e46565b820191906000526020600020905b815481529060010190602001808311610e2957829003601f168201915b505050505081526020019060010190610dae565b505050509050925092509250909192565b609c5473ffffffffffffffffffffffffffffffffffffffff163314610ef85760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e670000000000000000000000000000000000000000000000000000006064820152608401610512565b6000609f8383604051610aeb9291906131aa565b60a38484604051610f1e9291906131aa565b9081526040519081900360200190205460ff16610fa35760405162461bcd60e51b815260206004820152602860248201527f796f7572207075626c6963206b6579206973206e6f7420696e20496e4163746960448201527f76654d656d6265720000000000000000000000000000000000000000000000006064820152608401610512565b610fe284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9692505050565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461105c5760405162461bcd60e51b815260206004820152601460248201527f7075626c6963206b6579206e6f74206d617463680000000000000000000000006044820152606401610512565b604081146110ac5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642067726f75705075626c69634b6579206c656e6774680000006044820152606401610512565b60a284846040516110be9291906131aa565b9081526040519081900360200190205460ff1661110a57600160a285856040516110e99291906131aa565b908152604051908190036020019020805491151560ff199092169190911790555b6111f260a0858560405161111f9291906131aa565b90815260200160405180910390208054611138906130e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611164906130e4565b80156111b15780601f10611186576101008083540402835291602001916111b1565b820191906000526020600020905b81548152906001019060200180831161119457829003601f168201915b505050505083838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ff592505050565b6112e057600160a1838360405161120a9291906131aa565b9081526020016040518091039020600082825461122791906131ba565b909155505060405160a09061123f90869086906131aa565b90815260200160405180910390208054611258906130e4565b1590506112b057600160a160a086866040516112759291906131aa565b90815260405190819003602001812061128d91613138565b908152602001604051809103902060008282546112aa91906132e6565b90915550505b818160a086866040516112c49291906131aa565b9081526040519081900360200190206112de9290916128cf565b505b609e5460405160a1906112f690859085906131aa565b908152602001604051809103902054106113145761131482826120b7565b50505050565b600060a3838360405161132e9291906131aa565b9081526040519081900360200190205460ff1690505b92915050565b61136b60408051606080820183528152600060208201819052909182015290565b609f838360405161137d9291906131aa565b90815260200160405180910390206040518060600160405290816000820180546113a6906130e4565b80601f01602080910402602001604051908101604052809291908181526020018280546113d2906130e4565b801561141f5780601f106113f45761010080835404028352916020019161141f565b820191906000526020600020905b81548152906001019060200180831161140257829003601f168201915b505050918352505060018281015473ffffffffffffffffffffffffffffffffffffffff8116602084015260409092019174010000000000000000000000000000000000000000900460ff169081111561147a5761147a612d5d565b600181111561148b5761148b612d5d565b9052509392505050565b6000805b609d54811015611581576000609f609d83815481106114ba576114ba612fc6565b906000526020600020016040516114d19190613138565b908152602001604051809103902060010160149054906101000a900460ff16600181111561150157611501612d5d565b141561156f57609f609d828154811061151c5761151c612fc6565b906000526020600020016040516115339190613138565b9081526040519081900360200190206001015473ffffffffffffffffffffffffffffffffffffffff8481169116141561156f5750600192915050565b80611579816130ab565b915050611499565b50600092915050565b611592611f2f565b61159c6000612669565b565b6115a6611f2f565b6099546115b49060016131ba565b609d54116116505760405162461bcd60e51b815260206004820152604e60248201527f54737347726f75704d616e616765722072656d6f76654d656d6265723a20616360448201527f74697665206d656d62657273206d757374206d6f7265207468616e207468726560648201527f73686f6c6420706c7573206f6e65000000000000000000000000000000000000608482015260a401610512565b60005b609d5481101561176757611742609d828154811061167357611673612fc6565b906000526020600020018054611688906130e4565b80601f01602080910402602001604051908101604052809291908181526020018280546116b4906130e4565b80156117015780601f106116d657610100808354040283529160200191611701565b820191906000526020600020905b8154815290600101906020018083116116e457829003601f168201915b505050505084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ff592505050565b1561175557611750816126e0565b611767565b8061175f816130ab565b915050611653565b50609f828260405161177a9291906131aa565b90815260405190819003602001902060006117958282612877565b5060010180547fffffffffffffffffffffff0000000000000000000000000000000000000000001690555050565b600054610100900460ff16158080156117e35750600054600160ff909116105b806117fd5750303b1580156117fd575060005460ff166001145b61186f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610512565b6000805460ff1916600117905580156118af57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6118b7612771565b6000609a8190556099819055609b55801561192957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6060609d805480602002602001604051908101604052809291908181526020016000905b828210156119fc57838290600052602060002001805461196f906130e4565b80601f016020809104026020016040519081016040528092919081815260200182805461199b906130e4565b80156119e85780601f106119bd576101008083540402835291602001916119e8565b820191906000526020600020905b8154815290600101906020018083116119cb57829003601f168201915b505050505081526020019060010190611950565b50505050905090565b8051602081830181018051609f82529282019190930120915280548190611a2b906130e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611a57906130e4565b8015611aa45780601f10611a7957610100808354040283529160200191611aa4565b820191906000526020600020905b815481529060010190602001808311611a8757829003601f168201915b5050506001909301549192505073ffffffffffffffffffffffffffffffffffffffff81169060ff740100000000000000000000000000000000000000009091041683565b6000805b609d5481101561158157609f609d8281548110611b0b57611b0b612fc6565b90600052602060002001604051611b229190613138565b9081526040519081900360200190206001015473ffffffffffffffffffffffffffffffffffffffff84811691161415611b5e5750600192915050565b80611b68816130ab565b915050611aec565b600080609f8484604051611b859291906131aa565b9081526040519081900360200190208054611b9f906130e4565b90501115611baf57506001611344565b506000611344565b611bbf611f2f565b73ffffffffffffffffffffffffffffffffffffffff8116611c485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610512565b61192981612669565b600080606080609a546099546097609d818054611c6d906130e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611c99906130e4565b8015611ce65780601f10611cbb57610100808354040283529160200191611ce6565b820191906000526020600020905b815481529060010190602001808311611cc957829003601f168201915b5050505050915080805480602002602001604051908101604052809291908181526020016000905b82821015611dba578382906000526020600020018054611d2d906130e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611d59906130e4565b8015611da65780601f10611d7b57610100808354040283529160200191611da6565b820191906000526020600020905b815481529060010190602001808311611d8957829003601f168201915b505050505081526020019060010190611d0e565b505050509050935093509350935090919293565b611dd6611f2f565b73ffffffffffffffffffffffffffffffffffffffff8116611e5f5760405162461bcd60e51b815260206004820152602260248201527f706172616d205f6164647265737320697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610512565b609c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008060008351604114611efc5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610512565b50505060208101516040820151606083015160001a601b811015611f2857611f25601b826132fd565b90505b9193909250565b60335473ffffffffffffffffffffffffffffffffffffffff16331461159c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610512565b60008151604014611fe95760405162461bcd60e51b815260206004820152601f60248201527f7075626c6963206b6579206c656e677468206d757374203634206279746573006044820152606401610512565b50805160209091012090565b6000815183511461200857506000611344565b60005b83518110156120ad5782818151811061202657612026612fc6565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684828151811061206557612065612fc6565b01602001517fff00000000000000000000000000000000000000000000000000000000000000161461209b576000915050611344565b806120a5816130ab565b91505061200b565b5060019392505050565b609d541561215c5760005b609d5481101561214f57609f609d82815481106120e1576120e1612fc6565b906000526020600020016040516120f89190613138565b90815260405190819003602001902060006121138282612877565b5060010180547fffffffffffffffffffffff00000000000000000000000000000000000000000016905580612147816130ab565b9150506120c2565b5061215c609d60006128b1565b60005b609e5481101561257157609d609e828154811061217e5761217e612fc6565b6000918252602080832084546001810186559484529220910180549190920191906121a8906130e4565b6121b3929190612953565b506040518060600160405280609e83815481106121d2576121d2612fc6565b9060005260206000200180546121e7906130e4565b80601f0160208091040260200160405190810160405280929190818152602001828054612213906130e4565b80156122605780601f1061223557610100808354040283529160200191612260565b820191906000526020600020905b81548152906001019060200180831161224357829003601f168201915b50505050508152602001612318609e848154811061228057612280612fc6565b906000526020600020018054612295906130e4565b80601f01602080910402602001604051908101604052809291908181526020018280546122c1906130e4565b801561230e5780601f106122e35761010080835404028352916020019161230e565b820191906000526020600020905b8154815290600101906020018083116122f157829003601f168201915b5050505050611f96565b73ffffffffffffffffffffffffffffffffffffffff1681526020016000815250609f609e838154811061234d5761234d612fc6565b906000526020600020016040516123649190613138565b9081526020016040518091039020600082015181600001908051906020019061238e9291906129ce565b5060208201516001808301805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117825560408601519391927fffffffffffffffffffffff00000000000000000000000000000000000000000090921617907401000000000000000000000000000000000000000090849081111561243057612430612d5d565b021790555090505060a160a0609e838154811061244f5761244f612fc6565b906000526020600020016040516124669190613138565b90815260405190819003602001812061247e91613138565b90815260200160405180910390206000905560a0609e82815481106124a5576124a5612fc6565b906000526020600020016040516124bc9190613138565b908152602001604051809103902060006124d69190612877565b60a2609e82815481106124eb576124eb612fc6565b906000526020600020016040516125029190613138565b908152604051908190036020019020805460ff19169055609e805460a391908390811061253157612531612fc6565b906000526020600020016040516125489190613138565b908152604051908190036020019020805460ff1916905580612569816130ab565b91505061215f565b5061257e609e60006128b1565b61258a609783836128cf565b506125ca82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9692505050565b609880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055609b54609955609a546126239060016131ba565b609a8190556040517f61c7922e50ad7ea3d35879a4a819ae97eb09b665f2113451d7ada7cb2b689b669161265d9185908590609d90613322565b60405180910390a15050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b609d80546126f0906001906132e6565b8154811061270057612700612fc6565b90600052602060002001609d828154811061271d5761271d612fc6565b90600052602060002001908054612733906130e4565b61273e929190612953565b50609d80548061275057612750613406565b60019003818190600052602060002001600061276c9190612877565b905550565b600054610100900460ff166127ee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610512565b61159c600054610100900460ff1661286e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610512565b61159c33612669565b508054612883906130e4565b6000825580601f10612893575050565b601f0160209004906000526020600020908101906119299190612a42565b50805460008255906000526020600020908101906119299190612a57565b8280546128db906130e4565b90600052602060002090601f0160209004810192826128fd5760008555612943565b82601f106129165782800160ff19823516178555612943565b82800160010185558215612943579182015b82811115612943578235825591602001919060010190612928565b5061294f929150612a42565b5090565b82805461295f906130e4565b90600052602060002090601f0160209004810192826129815760008555612943565b82601f106129925780548555612943565b8280016001018555821561294357600052602060002091601f016020900482015b828111156129435782548255916001019190600101906129b3565b8280546129da906130e4565b90600052602060002090601f0160209004810192826129fc5760008555612943565b82601f10612a1557805160ff1916838001178555612943565b82800160010185558215612943579182015b82811115612943578251825591602001919060010190612a27565b5b8082111561294f5760008155600101612a43565b8082111561294f576000612a6b8282612877565b50600101612a57565b60008083601f840112612a8657600080fd5b50813567ffffffffffffffff811115612a9e57600080fd5b602083019150836020828501011115612ab657600080fd5b9250929050565b600080600060408486031215612ad257600080fd5b83359250602084013567ffffffffffffffff811115612af057600080fd5b612afc86828701612a74565b9497909650939450505050565b600080600060408486031215612b1e57600080fd5b83359250602084013567ffffffffffffffff80821115612b3d57600080fd5b818601915086601f830112612b5157600080fd5b813581811115612b6057600080fd5b8760208260051b8501011115612b7557600080fd5b6020830194508093505050509250925092565b60008060208385031215612b9b57600080fd5b823567ffffffffffffffff811115612bb257600080fd5b612bbe85828601612a74565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015612c1857835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612be6565b50909695505050505050565b6000815180845260005b81811015612c4a57602081850181015186830182015201612c2e565b81811115612c5c576000602083870101525b50601f01601f19169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015612cbc57601f19868403018952612caa838351612c24565b98840198925090830190600101612c8e565b5090979650505050505050565b838152826020820152606060408201526000612ce86060830184612c71565b95945050505050565b60008060008060408587031215612d0757600080fd5b843567ffffffffffffffff80821115612d1f57600080fd5b612d2b88838901612a74565b90965094506020870135915080821115612d4457600080fd5b50612d5187828801612a74565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110612dc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081526000825160606020840152612de36080840182612c24565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401526040840151612e176060850182612d8c565b509392505050565b600060208284031215612e3157600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114612e5557600080fd5b9392505050565b602081526000612e556020830184612c71565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612eb057600080fd5b813567ffffffffffffffff80821115612ec857600080fd5b818401915084601f830112612edc57600080fd5b813581811115612eee57612eee612e6f565b604051601f8201601f19908116603f01168101908382118183101715612f1657612f16612e6f565b81604052828152876020848701011115612f2f57600080fd5b826020860160208301376000928101602001929092525095945050505050565b606081526000612f626060830186612c24565b905073ffffffffffffffffffffffffffffffffffffffff84166020830152612f8d6040830184612d8c565b949350505050565b848152836020820152608060408201526000612fb46080830185612c24565b828103606084015261051b8185612c71565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261302a57600080fd5b83018035915067ffffffffffffffff82111561304557600080fd5b602001915036819003821315612ab657600080fd5b60006020828403121561306c57600080fd5b81518015158114612e5557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130dd576130dd61307c565b5060010190565b600181811c908216806130f857607f821691505b60208210811415613132577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000808354613146816130e4565b6001828116801561315e576001811461316f5761319e565b60ff1984168752828701945061319e565b8760005260208060002060005b858110156131955781548a82015290840190820161317c565b50505082870194505b50929695505050505050565b8183823760009101908152919050565b600082198211156131cd576131cd61307c565b500190565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60006060820186835260208681850152606060408501528185835260808501905060808660051b86010192508660005b878110156132d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8087860301835281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18a360301811261328e57600080fd5b8901803567ffffffffffffffff8111156132a757600080fd5b8036038b13156132b657600080fd5b6132c387828885016131d2565b96505050918301919083019060010161322d565b50929998505050505050505050565b6000828210156132f8576132f861307c565b500390565b600060ff821660ff84168060ff0382111561331a5761331a61307c565b019392505050565b8481526000602060608184015261333d6060840186886131d2565b83810360408501528085548083528383019150838160051b8401016000888152858120815b848110156133f457601f1987850301865282825461337f816130e4565b8087526001828116801561339a57600181146133ae576133dd565b60ff1984168d8a01526040890194506133dd565b8688528c8820885b848110156133d55781548f828d01015283820191508e810190506133b6565b8a018e019550505b50988b019892965050509190910190600101613362565b50919c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212205ae4085ebecbeca131237ead42312c8c024b5997d8c3638b8e61c59d43d5818264736f6c63430008090033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c80637a952c11116100ee578063b57388d311610097578063e46a636811610071578063e46a63681461038f578063f2fde38b146103bd578063fcca5592146103d0578063fd3eb81f146103e857600080fd5b8063b57388d314610349578063bcbc5fc61461035c578063cf4c8a7b1461036f57600080fd5b80638da5cb5b116100c85780638da5cb5b146102f457806395f645bc14610312578063b3bd9ac41461032757600080fd5b80637a952c11146102d05780638129fc1c146102e35780638a51d8b4146102eb57600080fd5b8063429ec49c1161015057806354bbb9141161012a57806354bbb9141461029557806368fe7d23146102b5578063715018a6146102c857600080fd5b8063429ec49c1461025c5780634679b3661461026f5780634866e2e01461028257600080fd5b80632cd00d53116101815780632cd00d531461020d5780633231a7f014610222578063404a69861461024557600080fd5b806319045a25146101a85780631a47931b146101e5578063254ff981146101fa575b600080fd5b6101bb6101b6366004612abd565b6103fb565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101f86101f3366004612b09565b610526565b005b6101f8610208366004612b88565b610a4a565b610215610b26565b6040516101dc9190612bca565b610235610230366004612abd565b610d2e565b60405190151581526020016101dc565b61024d610d74565b6040516101dc93929190612cc9565b6101f861026a366004612b88565b610e6b565b6101f861027d366004612cf1565b610f0c565b610235610290366004612b88565b61131a565b6102a86102a3366004612b88565b61134a565b6040516101dc9190612dc7565b6102356102c3366004612e1f565b611495565b6101f861158a565b6101f86102de366004612b88565b61159e565b6101f86117c3565b609e5415610235565b60335473ffffffffffffffffffffffffffffffffffffffff166101bb565b61031a61192c565b6040516101dc9190612e5c565b61033a610335366004612e9e565b611a05565b6040516101dc93929190612f4f565b610235610357366004612e1f565b611ae8565b61023561036a366004612b88565b611b70565b609c546101bb9073ffffffffffffffffffffffffffffffffffffffff1681565b61023561039d366004612e9e565b805160208183018101805160a38252928201919093012091525460ff1681565b6101f86103cb366004612e1f565b611bb7565b6103d8611c51565b6040516101dc9493929190612f95565b6101f86103f6366004612e1f565b611dce565b60008060008061044086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ea692505050565b925092509250600060018883868660405160008152602001604052604051610484949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156104a6573d6000803e3d6000fd5b5050604051601f19015191505073ffffffffffffffffffffffffffffffffffffffff811661051b5760405162461bcd60e51b815260206004820152601060248201527f65637265636f766572206661696c65640000000000000000000000000000000060448201526064015b60405180910390fd5b979650505050505050565b61052e611f2f565b8061057b5760405162461bcd60e51b815260206004820152601960248201527f6261746368207075626c6963206b657920697320656d707479000000000000006044820152606401610512565b8083106105f05760405162461bcd60e51b815260206004820152602360248201527f7468726573686f6c64206d757374206c657373207468616e20747373206d656d60448201527f62657200000000000000000000000000000000000000000000000000000000006064820152608401610512565b60005b8181101561078a57600061065e84848481811061061257610612612fc6565b90506020028101906106249190612ff5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9692505050565b609c546040517fa458413a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015292935091169063a458413a90602401602060405180830381600087803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610705919061305a565b6107775760405162461bcd60e51b815260206004820152603160248201527f6261746368207075626c6963206b657973206861732061206e6f6465202c636160448201527f6e206e6f74206265206f70657261746f720000000000000000000000000000006064820152608401610512565b5080610782816130ab565b9150506105f3565b50609e54156108e65760005b609e548110156108d95760a160a0609e83815481106107b7576107b7612fc6565b906000526020600020016040516107ce9190613138565b9081526040519081900360200181206107e691613138565b90815260200160405180910390206000905560a0609e828154811061080d5761080d612fc6565b906000526020600020016040516108249190613138565b9081526020016040518091039020600061083e9190612877565b60a2609e828154811061085357610853612fc6565b9060005260206000200160405161086a9190613138565b908152604051908190036020019020805460ff19169055609e805460a391908390811061089957610899612fc6565b906000526020600020016040516108b09190613138565b908152604051908190036020019020805460ff19169055806108d1816130ab565b915050610796565b506108e6609e60006128b1565b60005b818110156109f457609e83838381811061090557610905612fc6565b90506020028101906109179190612ff5565b825460018101845560009384526020909320610935930191906128cf565b50600160a384848481811061094c5761094c612fc6565b905060200281019061095e9190612ff5565b60405161096c9291906131aa565b908152604051908190036020019020805491151560ff19909216919091179055600060a28484848181106109a2576109a2612fc6565b90506020028101906109b49190612ff5565b6040516109c29291906131aa565b908152604051908190036020019020805491151560ff19909216919091179055806109ec816130ab565b9150506108e9565b50609b839055609a547ffa26843b7ced045dd12994ee0e73c6f0904c3a4608bce58ae304d606035b079e90610a2a9060016131ba565b848484604051610a3d94939291906131fd565b60405180910390a1505050565b609c5473ffffffffffffffffffffffffffffffffffffffff163314610ad75760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e670000000000000000000000000000000000000000000000000000006064820152608401610512565b6001609f8383604051610aeb9291906131aa565b908152602001604051809103902060010160146101000a81548160ff02191690836001811115610b1d57610b1d612d5d565b02179055505050565b60606000805b609d54811015610bba576000609f609d8381548110610b4d57610b4d612fc6565b90600052602060002001604051610b649190613138565b908152602001604051809103902060010160149054906101000a900460ff166001811115610b9457610b94612d5d565b1415610ba85781610ba4816130ab565b9250505b80610bb2816130ab565b915050610b2c565b5060008167ffffffffffffffff811115610bd657610bd6612e6f565b604051908082528060200260200182016040528015610bff578160200160208202803683370190505b5090506000805b609d54811015610d25576000609f609d8381548110610c2757610c27612fc6565b90600052602060002001604051610c3e9190613138565b908152602001604051809103902060010160149054906101000a900460ff166001811115610c6e57610c6e612d5d565b1415610d1357609f609d8281548110610c8957610c89612fc6565b90600052602060002001604051610ca09190613138565b90815260405190819003602001902060010154835173ffffffffffffffffffffffffffffffffffffffff90911690849084908110610ce057610ce0612fc6565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015281610d0f816130ab565b9250505b80610d1d816130ab565b915050610c06565b50909392505050565b60985460009073ffffffffffffffffffffffffffffffffffffffff16610d558585856103fb565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b6000806060609a546001610d8891906131ba565b609b54609e80805480602002602001604051908101604052809291908181526020016000905b82821015610e5a578382906000526020600020018054610dcd906130e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610df9906130e4565b8015610e465780601f10610e1b57610100808354040283529160200191610e46565b820191906000526020600020905b815481529060010190602001808311610e2957829003601f168201915b505050505081526020019060010190610dae565b505050509050925092509250909192565b609c5473ffffffffffffffffffffffffffffffffffffffff163314610ef85760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e670000000000000000000000000000000000000000000000000000006064820152608401610512565b6000609f8383604051610aeb9291906131aa565b60a38484604051610f1e9291906131aa565b9081526040519081900360200190205460ff16610fa35760405162461bcd60e51b815260206004820152602860248201527f796f7572207075626c6963206b6579206973206e6f7420696e20496e4163746960448201527f76654d656d6265720000000000000000000000000000000000000000000000006064820152608401610512565b610fe284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9692505050565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461105c5760405162461bcd60e51b815260206004820152601460248201527f7075626c6963206b6579206e6f74206d617463680000000000000000000000006044820152606401610512565b604081146110ac5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642067726f75705075626c69634b6579206c656e6774680000006044820152606401610512565b60a284846040516110be9291906131aa565b9081526040519081900360200190205460ff1661110a57600160a285856040516110e99291906131aa565b908152604051908190036020019020805491151560ff199092169190911790555b6111f260a0858560405161111f9291906131aa565b90815260200160405180910390208054611138906130e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611164906130e4565b80156111b15780601f10611186576101008083540402835291602001916111b1565b820191906000526020600020905b81548152906001019060200180831161119457829003601f168201915b505050505083838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ff592505050565b6112e057600160a1838360405161120a9291906131aa565b9081526020016040518091039020600082825461122791906131ba565b909155505060405160a09061123f90869086906131aa565b90815260200160405180910390208054611258906130e4565b1590506112b057600160a160a086866040516112759291906131aa565b90815260405190819003602001812061128d91613138565b908152602001604051809103902060008282546112aa91906132e6565b90915550505b818160a086866040516112c49291906131aa565b9081526040519081900360200190206112de9290916128cf565b505b609e5460405160a1906112f690859085906131aa565b908152602001604051809103902054106113145761131482826120b7565b50505050565b600060a3838360405161132e9291906131aa565b9081526040519081900360200190205460ff1690505b92915050565b61136b60408051606080820183528152600060208201819052909182015290565b609f838360405161137d9291906131aa565b90815260200160405180910390206040518060600160405290816000820180546113a6906130e4565b80601f01602080910402602001604051908101604052809291908181526020018280546113d2906130e4565b801561141f5780601f106113f45761010080835404028352916020019161141f565b820191906000526020600020905b81548152906001019060200180831161140257829003601f168201915b505050918352505060018281015473ffffffffffffffffffffffffffffffffffffffff8116602084015260409092019174010000000000000000000000000000000000000000900460ff169081111561147a5761147a612d5d565b600181111561148b5761148b612d5d565b9052509392505050565b6000805b609d54811015611581576000609f609d83815481106114ba576114ba612fc6565b906000526020600020016040516114d19190613138565b908152602001604051809103902060010160149054906101000a900460ff16600181111561150157611501612d5d565b141561156f57609f609d828154811061151c5761151c612fc6565b906000526020600020016040516115339190613138565b9081526040519081900360200190206001015473ffffffffffffffffffffffffffffffffffffffff8481169116141561156f5750600192915050565b80611579816130ab565b915050611499565b50600092915050565b611592611f2f565b61159c6000612669565b565b6115a6611f2f565b6099546115b49060016131ba565b609d54116116505760405162461bcd60e51b815260206004820152604e60248201527f54737347726f75704d616e616765722072656d6f76654d656d6265723a20616360448201527f74697665206d656d62657273206d757374206d6f7265207468616e207468726560648201527f73686f6c6420706c7573206f6e65000000000000000000000000000000000000608482015260a401610512565b60005b609d5