UNPKG

@eth-optimism/contracts-periphery

Version:

[Optimism] External (out-of-protocol) L1 and L2 smart contracts for Optimism

542 lines 53.5 kB
{ "_format": "hh-sol-artifact-1", "contractName": "Optimist", "sourceName": "contracts/universal/op-nft/Optimist.sol", "abi": [ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "_baseURIAttestor", "type": "address" }, { "internalType": "contract AttestationStation", "name": "_attestationStation", "type": "address" }, { "internalType": "contract OptimistAllowlist", "name": "_optimistAllowlist", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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": "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" }, { "inputs": [], "name": "ATTESTATION_STATION", "outputs": [ { "internalType": "contract AttestationStation", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "BASE_URI_ATTESTATION_KEY", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "BASE_URI_ATTESTOR", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "OPTIMIST_ALLOWLIST", "outputs": [ { "internalType": "contract OptimistAllowlist", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "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": "_recipient", "type": "address" } ], "name": "isOnAllowList", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "address", "name": "", "type": "address" }, { "internalType": "bool", "name": "", "type": "bool" } ], "name": "setApprovalForAll", "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": "address", "name": "_owner", "type": "address" } ], "name": "tokenIdOfAddress", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "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": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x6101406040523480156200001257600080fd5b5060405162002c7f38038062002c7f8339810160408190526200003591620003ee565b6002608052600060a081905260c0526001600160a01b0380841660e052828116610100528116610120526200006b858562000076565b5050505050620005f4565b600054610100900460ff1615808015620000975750600054600160ff909116105b80620000c75750620000b430620001b660201b62000dd61760201c565b158015620000c7575060005460ff166001145b620001305760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000154576000805461ff0019166101001790555b620001608383620001c5565b6200016a62000231565b8015620001b1576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054610100900460ff16620002215760405162461bcd60e51b815260206004820152602b602482015260008051602062002c5f83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000127565b6200022d82826200028f565b5050565b600054610100900460ff166200028d5760405162461bcd60e51b815260206004820152602b602482015260008051602062002c5f83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000127565b565b600054610100900460ff16620002eb5760405162461bcd60e51b815260206004820152602b602482015260008051602062002c5f83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000127565b6065620002f9838262000528565b506066620001b1828262000528565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200033057600080fd5b81516001600160401b03808211156200034d576200034d62000308565b604051601f8301601f19908116603f0116810190828211818310171562000378576200037862000308565b816040528381526020925086838588010111156200039557600080fd5b600091505b83821015620003b957858201830151818301840152908201906200039a565b83821115620003cb5760008385830101525b9695505050505050565b6001600160a01b0381168114620003eb57600080fd5b50565b600080600080600060a086880312156200040757600080fd5b85516001600160401b03808211156200041f57600080fd5b6200042d89838a016200031e565b965060208801519150808211156200044457600080fd5b5062000453888289016200031e565b94505060408601516200046681620003d5565b60608701519093506200047981620003d5565b60808701519092506200048c81620003d5565b809150509295509295909350565b600181811c90821680620004af57607f821691505b602082108103620004d057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001b157600081815260208120601f850160051c81016020861015620004ff5750805b601f850160051c820191505b8181101562000520578281556001016200050b565b505050505050565b81516001600160401b0381111562000544576200054462000308565b6200055c816200055584546200049a565b84620004d6565b602080601f8311600181146200059457600084156200057b5750858301515b600019600386901b1c1916600185901b17855562000520565b600085815260208120601f198616915b82811015620005c557888601518255948401946001909101908401620005a4565b5085821015620005e45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516101205161260662000659600039600081816103930152610c900152600081816103ba0152610b1301526000818161022c0152610abc01526000610928015260006108ff015260006108d601526126066000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80636a627842116100e3578063a22cb4651161008c578063ce5dd1b511610066578063ce5dd1b51461038e578063db083d71146103b5578063e985e9c5146103dc57600080fd5b8063a22cb4651461035a578063b88d4fde14610368578063c87b56dd1461037b57600080fd5b80637c08652f116100bd5780637c08652f146103185780638f328a1f1461033f57806395d89b411461035257600080fd5b80636a627842146102ea5780636c0360eb146102fd57806370a082311461030557600080fd5b806323b872dd116101455780634cd88b761161011f5780634cd88b76146102bc57806354fd4d50146102cf5780636352211e146102d757600080fd5b806323b872dd1461028357806342842e0e1461029657806342966c68146102a957600080fd5b8063095ea7b311610176578063095ea7b31461021257806319f463f21461022757806321d3d5cf1461024e57600080fd5b806301ffc9a71461019d57806306fdde03146101c5578063081812fc146101da575b600080fd5b6101b06101ab366004611d0e565b610425565b60405190151581526020015b60405180910390f35b6101cd61050a565b6040516101bc9190611d83565b6101ed6101e8366004611d96565b61059c565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b610225610220366004611dd8565b6105d0565b005b6101ed7f000000000000000000000000000000000000000000000000000000000000000081565b6102757f6f7074696d6973742e626173652d75726900000000000000000000000000000081565b6040519081526020016101bc565b610225610291366004611e02565b61061d565b6102256102a4366004611e02565b6106aa565b6102256102b7366004611d96565b6106c5565b6102256102ca366004611f24565b61074c565b6101cd6108cf565b6101ed6102e5366004611d96565b610972565b6102256102f8366004611f88565b6109e4565b6101cd610a7f565b610275610313366004611f88565b610b94565b610275610326366004611f88565b73ffffffffffffffffffffffffffffffffffffffff1690565b6101b061034d366004611f88565b610c48565b6101cd610cfd565b610225610220366004611fb1565b610225610376366004611fe8565b610d0c565b6101cd610389366004611d96565b610d9a565b6101ed7f000000000000000000000000000000000000000000000000000000000000000081565b6101ed7f000000000000000000000000000000000000000000000000000000000000000081565b6101b06103ea366004612064565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152606a6020908152604080832093909416825291909152205460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606065805461051990612097565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612097565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60006105a782610df2565b5060009081526069602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405162461bcd60e51b815260206004820152601a60248201527f4f7074696d6973743a20736f756c20626f756e6420746f6b656e00000000000060448201526064015b60405180910390fd5b610628335b82610e63565b61069a5760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610614565b6106a5838383610f23565b505050565b6106a583838360405180602001604052806000815250610d0c565b6106ce33610622565b6107405760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610614565b61074981611161565b50565b600054610100900460ff161580801561076c5750600054600160ff909116105b806107865750303b158015610786575060005460ff166001145b6107f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610614565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561085657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610860838361123b565b6108686112c2565b80156106a557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60606108fa7f0000000000000000000000000000000000000000000000000000000000000000611341565b6109237f0000000000000000000000000000000000000000000000000000000000000000611341565b61094c7f0000000000000000000000000000000000000000000000000000000000000000611341565b60405160200161095e939291906120ea565b604051602081830303815290604052905090565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff16806105045760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610614565b6109ed81610c48565b610a5f5760405162461bcd60e51b815260206004820152602560248201527f4f7074696d6973743a2061646472657373206973206e6f74206f6e20616c6c6f60448201527f774c6973740000000000000000000000000000000000000000000000000000006064820152608401610614565b6107498173ffffffffffffffffffffffffffffffffffffffff8116611476565b6040517f29b42cb500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301523060248301527f6f7074696d6973742e626173652d75726900000000000000000000000000000060448301526060917f0000000000000000000000000000000000000000000000000000000000000000909116906329b42cb590606401600060405180830381865afa158015610b5c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b849190810190612160565b60405160200161095e91906121d7565b600073ffffffffffffffffffffffffffffffffffffffff8216610c1f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610614565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526068602052604090205490565b6040517f4813d8a600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690634813d8a690602401602060405180830381865afa158015610cd9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050491906121f3565b60606066805461051990612097565b610d163383610e63565b610d885760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610614565b610d9484848484611490565b50505050565b6060610da4610a7f565b610daf836014611519565b604051602001610dc0929190612210565b6040516020818303038152906040529050919050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff166107495760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610614565b600080610e6f83610972565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610edd575073ffffffffffffffffffffffffffffffffffffffff8082166000908152606a602090815260408083209388168352929052205460ff165b80610f1b57508373ffffffffffffffffffffffffffffffffffffffff16610f038461059c565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610f4382610972565b73ffffffffffffffffffffffffffffffffffffffff1614610fcc5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610614565b73ffffffffffffffffffffffffffffffffffffffff82166110545760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610614565b61105f838383611749565b61106a6000826117cc565b73ffffffffffffffffffffffffffffffffffffffff831660009081526068602052604081208054600192906110a09084906122c1565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526068602052604081208054600192906110db9084906122d8565b909155505060008181526067602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061116c82610972565b905061117a81600084611749565b6111856000836117cc565b73ffffffffffffffffffffffffffffffffffffffff811660009081526068602052604081208054600192906111bb9084906122c1565b909155505060008281526067602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45b5050565b600054610100900460ff166112b85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610614565b611237828261186c565b600054610100900460ff1661133f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610614565b565b60608160000361138457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156113ae5780611398816122f0565b91506113a79050600a83612357565b9150611388565b60008167ffffffffffffffff8111156113c9576113c9611e3e565b6040519080825280601f01601f1916602001820160405280156113f3576020820181803683370190505b5090505b8415610f1b576114086001836122c1565b9150611415600a8661236b565b6114209060306122d8565b60f81b8183815181106114355761143561237f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061146f600a86612357565b94506113f7565b611237828260405180602001604052806000815250611902565b61149b848484610f23565b6114a78484848461198b565b610d945760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610614565b606060006115288360026123ae565b6115339060026122d8565b67ffffffffffffffff81111561154b5761154b611e3e565b6040519080825280601f01601f191660200182016040528015611575576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106115ac576115ac61237f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061160f5761160f61237f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061164b8460026123ae565b6116569060016122d8565b90505b60018111156116f3577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106116975761169761237f565b1a60f81b8282815181106116ad576116ad61237f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936116ec816123eb565b9050611659565b5083156117425760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610614565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff83161580611780575073ffffffffffffffffffffffffffffffffffffffff8216155b6106a55760405162461bcd60e51b815260206004820152601a60248201527f4f7074696d6973743a20736f756c20626f756e6420746f6b656e0000000000006044820152606401610614565b600081815260696020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061182682610972565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600054610100900460ff166118e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610614565b60656118f5838261246e565b5060666106a5828261246e565b61190c8383611b46565b611919600084848461198b565b6106a55760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610614565b600073ffffffffffffffffffffffffffffffffffffffff84163b15611b3b576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290611a0290339089908890889060040161256a565b6020604051808303816000875af1925050508015611a3d575060408051601f3d908101601f19168201909252611a3a918101906125b3565b60015b611af0573d808015611a6b576040519150601f19603f3d011682016040523d82523d6000602084013e611a70565b606091505b508051600003611ae85760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610614565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610f1b565b506001949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611ba95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610614565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611c1b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610614565b611c2760008383611749565b73ffffffffffffffffffffffffffffffffffffffff82166000908152606860205260408120805460019290611c5d9084906122d8565b909155505060008181526067602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461074957600080fd5b600060208284031215611d2057600080fd5b813561174281611ce0565b60005b83811015611d46578181015183820152602001611d2e565b83811115610d945750506000910152565b60008151808452611d6f816020860160208601611d2b565b601f01601f19169290920160200192915050565b6020815260006117426020830184611d57565b600060208284031215611da857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611dd357600080fd5b919050565b60008060408385031215611deb57600080fd5b611df483611daf565b946020939093013593505050565b600080600060608486031215611e1757600080fd5b611e2084611daf565b9250611e2e60208501611daf565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e9657611e96611e3e565b604052919050565b600067ffffffffffffffff821115611eb857611eb8611e3e565b50601f01601f191660200190565b6000611ed9611ed484611e9e565b611e6d565b9050828152838383011115611eed57600080fd5b828260208301376000602084830101529392505050565b600082601f830112611f1557600080fd5b61174283833560208501611ec6565b60008060408385031215611f3757600080fd5b823567ffffffffffffffff80821115611f4f57600080fd5b611f5b86838701611f04565b93506020850135915080821115611f7157600080fd5b50611f7e85828601611f04565b9150509250929050565b600060208284031215611f9a57600080fd5b61174282611daf565b801515811461074957600080fd5b60008060408385031215611fc457600080fd5b611fcd83611daf565b91506020830135611fdd81611fa3565b809150509250929050565b60008060008060808587031215611ffe57600080fd5b61200785611daf565b935061201560208601611daf565b925060408501359150606085013567ffffffffffffffff81111561203857600080fd5b8501601f8101871361204957600080fd5b61205887823560208401611ec6565b91505092959194509250565b6000806040838503121561207757600080fd5b61208083611daf565b915061208e60208401611daf565b90509250929050565b600181811c908216806120ab57607f821691505b6020821081036120e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600084516120fc818460208901611d2b565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612138816001850160208a01611d2b565b60019201918201528351612153816002840160208801611d2b565b0160020195945050505050565b60006020828403121561217257600080fd5b815167ffffffffffffffff81111561218957600080fd5b8201601f8101841361219a57600080fd5b80516121a8611ed482611e9e565b8181528560208385010111156121bd57600080fd5b6121ce826020830160208601611d2b565b95945050505050565b600082516121e9818460208701611d2b565b9190910192915050565b60006020828403121561220557600080fd5b815161174281611fa3565b60008351612222818460208801611d2b565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152835161225c816001840160208801611d2b565b7f2e6a736f6e00000000000000000000000000000000000000000000000000000060019290910191820152600601949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156122d3576122d3612292565b500390565b600082198211156122eb576122eb612292565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361232157612321612292565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261236657612366612328565b500490565b60008261237a5761237a612328565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156123e6576123e6612292565b500290565b6000816123fa576123fa612292565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b601f8211156106a557600081815260208120601f850160051c810160208610156124475750805b601f850160051c820191505b8181101561246657828155600101612453565b505050505050565b815167ffffffffffffffff81111561248857612488611e3e565b61249c816124968454612097565b84612420565b602080601f8311600181146124ef57600084156124b95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612466565b600085815260208120601f198616915b8281101561251e578886015182559484019460019091019084016124ff565b508582101561255a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526125a96080830184611d57565b9695505050505050565b6000602082840312156125c557600080fd5b815161174281611ce056fea264697066735822122068519f9cbd8d80e9e293c6c977994da4f38aba3722422b6bfce53b68916efab964736f6c634300080f0033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101985760003560e01c80636a627842116100e3578063a22cb4651161008c578063ce5dd1b511610066578063ce5dd1b51461038e578063db083d71146103b5578063e985e9c5146103dc57600080fd5b8063a22cb4651461035a578063b88d4fde14610368578063c87b56dd1461037b57600080fd5b80637c08652f116100bd5780637c08652f146103185780638f328a1f1461033f57806395d89b411461035257600080fd5b80636a627842146102ea5780636c0360eb146102fd57806370a082311461030557600080fd5b806323b872dd116101455780634cd88b761161011f5780634cd88b76146102bc57806354fd4d50146102cf5780636352211e146102d757600080fd5b806323b872dd1461028357806342842e0e1461029657806342966c68146102a957600080fd5b8063095ea7b311610176578063095ea7b31461021257806319f463f21461022757806321d3d5cf1461024e57600080fd5b806301ffc9a71461019d57806306fdde03146101c5578063081812fc146101da575b600080fd5b6101b06101ab366004611d0e565b610425565b60405190151581526020015b60405180910390f35b6101cd61050a565b6040516101bc9190611d83565b6101ed6101e8366004611d96565b61059c565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b610225610220366004611dd8565b6105d0565b005b6101ed7f000000000000000000000000000000000000000000000000000000000000000081565b6102757f6f7074696d6973742e626173652d75726900000000000000000000000000000081565b6040519081526020016101bc565b610225610291366004611e02565b61061d565b6102256102a4366004611e02565b6106aa565b6102256102b7366004611d96565b6106c5565b6102256102ca366004611f24565b61074c565b6101cd6108cf565b6101ed6102e5366004611d96565b610972565b6102256102f8366004611f88565b6109e4565b6101cd610a7f565b610275610313366004611f88565b610b94565b610275610326366004611f88565b73ffffffffffffffffffffffffffffffffffffffff1690565b6101b061034d366004611f88565b610c48565b6101cd610cfd565b610225610220366004611fb1565b610225610376366004611fe8565b610d0c565b6101cd610389366004611d96565b610d9a565b6101ed7f000000000000000000000000000000000000000000000000000000000000000081565b6101ed7f000000000000000000000000000000000000000000000000000000000000000081565b6101b06103ea366004612064565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152606a6020908152604080832093909416825291909152205460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606065805461051990612097565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612097565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60006105a782610df2565b5060009081526069602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405162461bcd60e51b815260206004820152601a60248201527f4f7074696d6973743a20736f756c20626f756e6420746f6b656e00000000000060448201526064015b60405180910390fd5b610628335b82610e63565b61069a5760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610614565b6106a5838383610f23565b505050565b6106a583838360405180602001604052806000815250610d0c565b6106ce33610622565b6107405760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610614565b61074981611161565b50565b600054610100900460ff161580801561076c5750600054600160ff909116105b806107865750303b158015610786575060005460ff166001145b6107f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610614565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561085657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610860838361123b565b6108686112c2565b80156106a557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60606108fa7f0000000000000000000000000000000000000000000000000000000000000000611341565b6109237f0000000000000000000000000000000000000000000000000000000000000000611341565b61094c7f0000000000000000000000000000000000000000000000000000000000000000611341565b60405160200161095e939291906120ea565b604051602081830303815290604052905090565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff16806105045760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610614565b6109ed81610c48565b610a5f5760405162461bcd60e51b815260206004820152602560248201527f4f7074696d6973743a2061646472657373206973206e6f74206f6e20616c6c6f60448201527f774c6973740000000000000000000000000000000000000000000000000000006064820152608401610614565b6107498173ffffffffffffffffffffffffffffffffffffffff8116611476565b6040517f29b42cb500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301523060248301527f6f7074696d6973742e626173652d75726900000000000000000000000000000060448301526060917f0000000000000000000000000000000000000000000000000000000000000000909116906329b42cb590606401600060405180830381865afa158015610b5c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b849190810190612160565b60405160200161095e91906121d7565b600073ffffffffffffffffffffffffffffffffffffffff8216610c1f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610614565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526068602052604090205490565b6040517f4813d8a600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690634813d8a690602401602060405180830381865afa158015610cd9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050491906121f3565b60606066805461051990612097565b610d163383610e63565b610d885760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610614565b610d9484848484611490565b50505050565b6060610da4610a7f565b610daf836014611519565b604051602001610dc0929190612210565b6040516020818303038152906040529050919050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff166107495760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610614565b600080610e6f83610972565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610edd575073ffffffffffffffffffffffffffffffffffffffff8082166000908152606a602090815260408083209388168352929052205460ff165b80610f1b57508373ffffffffffffffffffffffffffffffffffffffff16610f038461059c565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610f4382610972565b73ffffffffffffffffffffffffffffffffffffffff1614610fcc5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610614565b73ffffffffffffffffffffffffffffffffffffffff82166110545760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610614565b61105f838383611749565b61106a6000826117cc565b73ffffffffffffffffffffffffffffffffffffffff831660009081526068602052604081208054600192906110a09084906122c1565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526068602052604081208054600192906110db9084906122d8565b909155505060008181526067602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061116c82610972565b905061117a81600084611749565b6111856000836117cc565b73ffffffffffffffffffffffffffffffffffffffff811660009081526068602052604081208054600192906111bb9084906122c1565b909155505060008281526067602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45b5050565b600054610100900460ff166112b85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610614565b611237828261186c565b600054610100900460ff1661133f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610614565b565b60608160000361138457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156113ae5780611398816122f0565b91506113a79050600a83612357565b9150611388565b60008167ffffffffffffffff8111156113c9576113c9611e3e565b6040519080825280601f01601f1916602001820160405280156113f3576020820181803683370190505b5090505b8415610f1b576114086001836122c1565b9150611415600a8661236b565b6114209060306122d8565b60f81b8183815181106114355761143561237f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061146f600a86612357565b94506113f7565b611237828260405180602001604052806000815250611902565b61149b848484610f23565b6114a78484848461198b565b610d945760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610614565b606060006115288360026123ae565b6115339060026122d8565b67ffffffffffffffff81111561154b5761154b611e3e565b6040519080825280601f01601f191660200182016040528015611575576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106115ac576115ac61237f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061160f5761160f61237f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061164b8460026123ae565b6116569060016122d8565b90505b60018111156116f3577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106116975761169761237f565b1a60f81b8282815181106116ad576116ad61237f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936116ec816123eb565b9050611659565b5083156117425760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610614565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff83161580611780575073ffffffffffffffffffffffffffffffffffffffff8216155b6106a55760405162461bcd60e51b815260206004820152601a60248201527f4f7074696d6973743a20736f756c20626f756e6420746f6b656e0000000000006044820152606401610614565b600081815260696020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061182682610972565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600054610100900460ff166118e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610614565b60656118f5838261246e565b5060666106a5828261246e565b61190c8383611b46565b611919600084848461198b565b6106a55760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610614565b600073ffffffffffffffffffffffffffffffffffffffff84163b15611b3b576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290611a0290339089908890889060040161256a565b6020604051808303816000875af1925050508015611a3d575060408051601f3d908101601f19168201909252611a3a918101906125b3565b60015b611af0573d808015611a6b576040519150601f19603f3d011682016040523d82523d6000602084013e611a70565b606091505b508051600003611ae85760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610614565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610f1b565b506001949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611ba95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610614565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611c1b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610614565b611c2760008383611749565b73ffffffffffffffffffffffffffffffffffffffff82166000908152606860205260408120805460019290611c5d9084906122d8565b909155505060008181526067602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461074957600080fd5b600060208284031215611d2057600080fd5b813561174281611ce0565b60005b83811015611d46578181015183820152602001611d2e565b83811115610d945750506000910152565b60008151808452611d6f816020860160208601611d2b565b601f01601f19169290920160200192915050565b6020815260006117426020830184611d57565b600060208284031215611da857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611dd357600080fd5b919050565b60008060408385031215611deb57600080fd5b611df483611daf565b946020939093013593505050565b600080600060608486031215611e1757600080fd5b611e2084611daf565b9250611e2e60208501611daf565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e9657611e96611e3e565b604052919050565b600067ffffffffffffffff821115611eb857611eb8611e3e565b50601f01601f191660200190565b6000611ed9611ed484611e9e565b611e6d565b9050828152838383011115611eed57600080fd5b828260208301376000602084830101529392505050565b600082601f830112611f1557600080fd5b61174283833560208501611ec6565b60008060408385031215611f3757600080fd5b823567ffffffffffffffff