[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [], "name": "ERC1167FailedCreateClone", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InvalidCaller", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "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": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "collectionAddress", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "collectionId", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "collectionType", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "name", "type": "string" }, { "indexed": false, "internalType": "string", "name": "symbol", "type": "string" } ], "name": "MintRichCollectionCreated", "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": 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": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "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": [], "name": "burnToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "collectionId", "type": "bytes32" }, { "internalType": "uint256", "name": "collectionType", "type": "uint256" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "bytes32", "name": "packedData", "type": "bytes32" }, { "internalType": "bytes", "name": "information", "type": "bytes" } ], "name": "createRichCollection", "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": "uint256", "name": "", "type": "uint256" } ], "name": "implementationTypes", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_implementationERC721A", "type": "address" }, { "internalType": "address", "name": "_implementationERC404", "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": [], "name": "metadataRenderer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "bytes32", "name": "collectionId", "type": "bytes32" }, { "internalType": "uint256", "name": "collectionType", "type": "uint256" } ], "name": "predictDeterministicAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "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": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "collectionType", "type": "uint256" }, { "internalType": "address", "name": "_implementationAddress", "type": "address" } ], "name": "setImplementationAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_metadataRenderer", "type": "address" } ], "name": "setMetadataRenderer", "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": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" } ]
60a060405230608052348015610013575f80fd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612f536100f95f395f81816116d1015281816116fa01526119160152612f535ff3fe6080604052600436106101a4575f3560e01c80638da5cb5b116100e7578063c87b56dd11610087578063e985e9c511610062578063e985e9c514610512578063f2fde38b14610585578063faa0a264146105a4578063fd4fe8a8146105b8575f80fd5b8063c87b56dd146104b5578063d93d8f50146104d4578063deef1c9e146104f3575f80fd5b8063a32ec648116100c2578063a32ec648146103ee578063a3e766d61461042f578063ad3cb1cc1461044e578063b88d4fde14610496575f80fd5b80638da5cb5b1461037257806395d89b41146103bb578063a22cb465146103cf575f80fd5b8063485cc955116101525780636352211e1161012d5780636352211e146102f4578063703199701461031357806370a082311461033f578063715018a61461035e575f80fd5b8063485cc955146102a05780634f1ef286146102bf57806352d1902d146102d2575f80fd5b8063095ea7b311610182578063095ea7b31461024157806323b872dd1461026257806342842e0e14610281575f80fd5b806301ffc9a7146101a857806306fdde03146101dc578063081812fc146101fd575b5f80fd5b3480156101b3575f80fd5b506101c76101c23660046126fe565b6105d7565b60405190151581526020015b60405180910390f35b3480156101e7575f80fd5b506101f06106bb565b6040516101d39190612765565b348015610208575f80fd5b5061021c610217366004612777565b61076f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b34801561024c575f80fd5b5061026061025b3660046127b6565b6107c2565b005b34801561026d575f80fd5b5061026061027c3660046127de565b6107d1565b34801561028c575f80fd5b5061026061029b3660046127de565b6108c5565b3480156102ab575f80fd5b506102606102ba366004612817565b6108e4565b6102606102cd36600461295b565b610cc0565b3480156102dd575f80fd5b506102e6610cdb565b6040519081526020016101d3565b3480156102ff575f80fd5b5061021c61030e366004612777565b610d09565b34801561031e575f80fd5b5060015461021c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561034a575f80fd5b506102e66103593660046129a6565b610d13565b348015610369575f80fd5b50610260610db1565b34801561037d575f80fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff1661021c565b3480156103c6575f80fd5b506101f0610dc4565b3480156103da575f80fd5b506102606103e93660046129bf565b610e15565b3480156103f9575f80fd5b5061021c610408366004612777565b5f6020819052908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561043a575f80fd5b5061021c6104493660046129f8565b610e20565b348015610459575f80fd5b506101f06040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156104a1575f80fd5b506102606104b0366004612a18565b610ea4565b3480156104c0575f80fd5b506101f06104cf366004612777565b610ebb565b3480156104df575f80fd5b506102606104ee366004612ac1565b610f78565b3480156104fe575f80fd5b5061026061050d366004612b71565b6111df565b34801561051d575f80fd5b506101c761052c366004612817565b73ffffffffffffffffffffffffffffffffffffffff9182165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b348015610590575f80fd5b5061026061059f3660046129a6565b6112dc565b3480156105af575f80fd5b5061026061133f565b3480156105c3575f80fd5b506102606105d23660046129a6565b611353565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061066957507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806106b557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930080546060919081906106ed90612b92565b80601f016020809104026020016040519081016040528092919081815260200182805461071990612b92565b80156107645780601f1061073b57610100808354040283529160200191610764565b820191905f5260205f20905b81548152906001019060200180831161074757829003601f168201915b505050505091505090565b5f61077982611445565b505f8281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079304602052604090205473ffffffffffffffffffffffffffffffffffffffff166106b5565b6107cd8282336114c2565b5050565b73ffffffffffffffffffffffffffffffffffffffff8216610825576040517f64a0ae920000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6108318383336114cf565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108bf576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8086166004830152602482018490528216604482015260640161081c565b50505050565b6108df83838360405180602001604052805f815250610ea4565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f8115801561092e5750825b90505f8267ffffffffffffffff16600114801561094a5750303b155b905081158015610958575080155b1561098f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156109f05784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610a646040518060400160405280600e81526020017f4d696e7452696368204f776e65720000000000000000000000000000000000008152506040518060400160405280600781526020017f4d524f776e65720000000000000000000000000000000000000000000000000081525061168e565b610a6d336116a0565b610a756116b1565b73ffffffffffffffffffffffffffffffffffffffff8716610b18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f5f696d706c656d656e746174696f6e455243373231412063616e27742062652060448201527f7a65726f20616464726573730000000000000000000000000000000000000000606482015260840161081c565b73ffffffffffffffffffffffffffffffffffffffff8616610bbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f5f696d706c656d656e746174696f6e4552433430342063616e2774206265207a60448201527f65726f2061646472657373000000000000000000000000000000000000000000606482015260840161081c565b5f60208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5805473ffffffffffffffffffffffffffffffffffffffff808b167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560019092527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d8054918916919092161790558315610cb75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610cc86116b9565b610cd1826117bd565b6107cd82826117c5565b5f610ce46118fe565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b5f6106b582611445565b5f7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930073ffffffffffffffffffffffffffffffffffffffff8316610d84576040517f89c62b640000000000000000000000000000000000000000000000000000000081525f600482015260240161081c565b73ffffffffffffffffffffffffffffffffffffffff9092165f908152600390920160205250604090205490565b610db961196d565b610dc25f6119fb565b565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930180546060917f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300916106ed90612b92565b6107cd338383611a90565b5f818152602081905260408082205490513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015273ffffffffffffffffffffffffffffffffffffffff9091166014820152733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018490526037600c820120607882015260556043909101205b9392505050565b610eaf8484846107d1565b6108bf84848484611bb0565b6060610ec682611445565b506001546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff9091169063c87b56dd906024015f60405180830381865afa158015610f33573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106b59190810190612be3565b610f8189611da4565b5f8881526020819052604090205473ffffffffffffffffffffffffffffffffffffffff1661100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c696420636f6c6c656374696f6e5479706500000000000000000000604482015260640161081c565b5f888152602081905260408120546110399073ffffffffffffffffffffffffffffffffffffffff168b611de1565b90505f808273ffffffffffffffffffffffffffffffffffffffff168a8a8a8a8a8a8a6040516024016110719796959493929190612c9f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0f0170d300000000000000000000000000000000000000000000000000000000179052516110f29190612cee565b5f604051808303815f865af19150503d805f811461112b576040519150601f19603f3d011682016040523d82523d5f602084013e611130565b606091505b50915091508161114257805160208201fd5b611162338473ffffffffffffffffffffffffffffffffffffffff16611e72565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f12770bb2618211fde9f36c2d2da61cdea4c83cb77c9b18d055c3c93dde98d7f78e8e8e8e8e8e6040516111c996959493929190612d04565b60405180910390a3505050505050505050505050565b6111e761196d565b73ffffffffffffffffffffffffffffffffffffffff811661128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f5f696d706c656d656e746174696f6e416464726573732063616e27742062652060448201527f7a65726f20616464726573730000000000000000000000000000000000000000606482015260840161081c565b5f9182526020829052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6112e461196d565b73ffffffffffffffffffffffffffffffffffffffff8116611333576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f600482015260240161081c565b61133c816119fb565b50565b3361134981611445565b5061133c81611e8b565b61135b61196d565b73ffffffffffffffffffffffffffffffffffffffff81166113fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f5f6d6574616461746152656e64657265722063616e2774206265207a65726f2060448201527f6164647265737300000000000000000000000000000000000000000000000000606482015260840161081c565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f8181527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079302602052604081205473ffffffffffffffffffffffffffffffffffffffff16806106b5576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810184905260240161081c565b6108df8383836001611ee9565b5f8281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260408120547f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793009073ffffffffffffffffffffffffffffffffffffffff90811690841615611549576115498185876120f2565b73ffffffffffffffffffffffffffffffffffffffff8116156115be576115715f865f80611ee9565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600383016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff8616156116085773ffffffffffffffffffffffffffffffffffffffff86165f9081526003830160205260409020805460010190555b5f85815260028301602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b6116966121a2565b6107cd8282612209565b6116a86121a2565b61133c8161224c565b610dc26121a2565b3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148061178657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661176d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610dc2576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61133c61196d565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561184a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261184791810190612d43565b60015b611898576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240161081c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146118f4576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161081c565b6108df8383612254565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610dc2576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336119ac7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610dc2576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161081c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930073ffffffffffffffffffffffffffffffffffffffff8316611b16576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161081c565b73ffffffffffffffffffffffffffffffffffffffff8481165f81815260058401602090815260408083209488168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83163b156108bf576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a0290611c25903390889087908790600401612d5a565b6020604051808303815f875af1925050508015611c7d575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c7a91810190612da2565b60015b611d0a573d808015611caa576040519150601f19603f3d011682016040523d82523d5f602084013e611caf565b606091505b5080515f03611d02576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161081c565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014611d9d576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161081c565b5050505050565b606081901c331461133c576040517f48f5c3ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff5905073ffffffffffffffffffffffffffffffffffffffff81166106b5576040517fc2f868f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107cd828260405180602001604052805f8152506122b6565b5f611e975f835f6114cf565b905073ffffffffffffffffffffffffffffffffffffffff81166107cd576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810183905260240161081c565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793008180611f2b575073ffffffffffffffffffffffffffffffffffffffff831615155b1561209d575f611f3a85611445565b905073ffffffffffffffffffffffffffffffffffffffff841615801590611f8d57508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611fea575073ffffffffffffffffffffffffffffffffffffffff8082165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209388168352929052205460ff16155b15612039576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161081c565b821561209b57848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5f93845260040160205250506040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6120fd8383836122cc565b6108df5773ffffffffffffffffffffffffffffffffffffffff8316612151576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810182905260240161081c565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024810182905260440161081c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610dc2576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122116121a2565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793008061223d8482612e01565b50600181016108bf8382612e01565b6112e46121a2565b61225d826123ce565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156122ae576108df828261249c565b6107cd61251b565b6122c08383612553565b6108df5f848484611bb0565b5f73ffffffffffffffffffffffffffffffffffffffff8316158015906123c657508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612377575073ffffffffffffffffffffffffffffffffffffffff8085165f9081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209387168352929052205460ff165b806123c657505f8281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079304602052604090205473ffffffffffffffffffffffffffffffffffffffff8481169116145b949350505050565b8073ffffffffffffffffffffffffffffffffffffffff163b5f03612436576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161081c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516124c59190612cee565b5f60405180830381855af49150503d805f81146124fd576040519150601f19603f3d011682016040523d82523d5f602084013e612502565b606091505b5091509150612512858383612600565b95945050505050565b3415610dc2576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166125a2576040517f64a0ae920000000000000000000000000000000000000000000000000000000081525f600482015260240161081c565b5f6125ae83835f6114cf565b905073ffffffffffffffffffffffffffffffffffffffff8116156108df576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081525f600482015260240161081c565b606082612615576126108261268f565b610e9d565b8151158015612639575073ffffffffffffffffffffffffffffffffffffffff84163b155b15612688576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161081c565b5080610e9d565b80511561269f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461133c575f80fd5b5f6020828403121561270e575f80fd5b8135610e9d816126d1565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610e9d6020830184612719565b5f60208284031215612787575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146127b1575f80fd5b919050565b5f80604083850312156127c7575f80fd5b6127d08361278e565b946020939093013593505050565b5f805f606084860312156127f0575f80fd5b6127f98461278e565b92506128076020850161278e565b9150604084013590509250925092565b5f8060408385031215612828575f80fd5b6128318361278e565b915061283f6020840161278e565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156128bc576128bc612848565b604052919050565b5f67ffffffffffffffff8211156128dd576128dd612848565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112612918575f80fd5b813561292b612926826128c4565b612875565b81815284602083860101111561293f575f80fd5b816020850160208301375f918101602001919091529392505050565b5f806040838503121561296c575f80fd5b6129758361278e565b9150602083013567ffffffffffffffff811115612990575f80fd5b61299c85828601612909565b9150509250929050565b5f602082840312156129b6575f80fd5b610e9d8261278e565b5f80604083850312156129d0575f80fd5b6129d98361278e565b9150602083013580151581146129ed575f80fd5b809150509250929050565b5f8060408385031215612a09575f80fd5b50508035926020909101359150565b5f805f8060808587031215612a2b575f80fd5b612a348561278e565b9350612a426020860161278e565b925060408501359150606085013567ffffffffffffffff811115612a64575f80fd5b612a7087828801612909565b91505092959194509250565b5f8083601f840112612a8c575f80fd5b50813567ffffffffffffffff811115612aa3575f80fd5b602083019150836020828501011115612aba575f80fd5b9250929050565b5f805f805f805f805f60c08a8c031215612ad9575f80fd5b8935985060208a0135975060408a013567ffffffffffffffff80821115612afe575f80fd5b612b0a8d838e01612a7c565b909950975060608c0135915080821115612b22575f80fd5b612b2e8d838e01612a7c565b909750955060808c0135945060a08c0135915080821115612b4d575f80fd5b50612b5a8c828d01612a7c565b915080935050809150509295985092959850929598565b5f8060408385031215612b82575f80fd5b8235915061283f6020840161278e565b600181811c90821680612ba657607f821691505b602082108103612bdd577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215612bf3575f80fd5b815167ffffffffffffffff811115612c09575f80fd5b8201601f81018413612c19575f80fd5b8051612c27612926826128c4565b818152856020838501011115612c3b575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b608081525f612cb260808301898b612c58565b8281036020840152612cc581888a612c58565b90508560408401528281036060840152612ce0818587612c58565b9a9950505050505050505050565b5f82518060208501845e5f920191825250919050565b868152856020820152608060408201525f612d23608083018688612c58565b8281036060840152612d36818587612c58565b9998505050505050505050565b5f60208284031215612d53575f80fd5b5051919050565b5f73ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612d986080830184612719565b9695505050505050565b5f60208284031215612db2575f80fd5b8151610e9d816126d1565b601f8211156108df57805f5260205f20601f840160051c81016020851015612de25750805b601f840160051c820191505b81811015611d9d575f8155600101612dee565b815167ffffffffffffffff811115612e1b57612e1b612848565b612e2f81612e298454612b92565b84612dbd565b602080601f831160018114612e81575f8415612e4b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612f15565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612ecd57888601518255948401946001909101908401612eae565b5085821015612f0957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b50505050505056fea2646970667358221220f976f27309163ed9d6b732b346f65ba8c8a4e68681d483aa5a25577e5a9639f664736f6c63430008190033