[ { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC1155InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC1155InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "idsLength", "type": "uint256" }, { "internalType": "uint256", "name": "valuesLength", "type": "uint256" } ], "name": "ERC1155InvalidArrayLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC1155InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC1155InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC1155InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC1155MissingApprovalForAll", "type": "error" }, { "inputs": [], "name": "Initialized", "type": "error" }, { "inputs": [], "name": "MintClosed", "type": "error" }, { "inputs": [], "name": "MintPriceNotMet", "type": "error" }, { "inputs": [], "name": "NonExistentRenderer", "type": "error" }, { "inputs": [], "name": "NonExistentToken", "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": "TokenAlreadyMinted", "type": "error" }, { "inputs": [], "name": "WithdrawalFailed", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "unitPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "minter", "type": "address" } ], "name": "NewMint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "renderer", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "NewRenderer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "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": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdrawal", "type": "event" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "tokenName", "type": "string" }, { "internalType": "string", "name": "tokenDescription", "type": "string" }, { "internalType": "bytes[]", "name": "tokenArtifact", "type": "bytes[]" }, { "internalType": "uint32", "name": "tokenRenderer", "type": "uint32" }, { "internalType": "uint128", "name": "tokenData", "type": "uint128" } ], "name": "create", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "get", "outputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "description", "type": "string" }, { "internalType": "address[]", "name": "artifact", "type": "address[]" }, { "internalType": "uint32", "name": "renderer", "type": "uint32" }, { "internalType": "uint32", "name": "mintedBlock", "type": "uint32" }, { "internalType": "uint64", "name": "closeAt", "type": "uint64" }, { "internalType": "uint128", "name": "data", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "contractName", "type": "string" }, { "internalType": "string", "name": "contractSymbol", "type": "string" }, { "internalType": "string", "name": "contractDescription", "type": "string" }, { "internalType": "bytes[]", "name": "contractImage", "type": "bytes[]" }, { "internalType": "address", "name": "renderer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "init", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "latestTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "mintOpenUntil", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes[]", "name": "tokenArtifact", "type": "bytes[]" }, { "internalType": "bool", "name": "clear", "type": "bool" } ], "name": "prepareArtifact", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "renderer", "type": "address" } ], "name": "registerRenderer", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "renderers", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "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": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5033806200003957604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000044816200004b565b50620000b9565b600180546001600160a01b0319169055620000668162000069565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6136df80620000c96000396000f3fe6080604052600436106101ab5760003560e01c806384252fb7116100ec578063c4a0d4651161008a578063e985e9c511610064578063e985e9c5146104eb578063f242432a14610541578063f2fde38b14610561578063f5298aca1461058157600080fd5b8063c4a0d4651461048b578063e30c3978146104ab578063e8a3d485146104d657600080fd5b80639507d39a116100c65780639507d39a146103d2578063a22cb46514610405578063b564434114610425578063b6cb8dfe1461046b57600080fd5b806384252fb7146103715780638c0e8349146103915780638da5cb5b146103a757600080fd5b80632eb2c2d61161015957806354fd4d501161013357806354fd4d501461031c5780635d05125b14610331578063715018a61461034757806379ba50971461035c57600080fd5b80632eb2c2d6146102ba5780633ccfd60b146102da5780634e1273f4146102ef57600080fd5b80630e89341c1161018a5780630e89341c146102355780631b2ef1ca146102625780631ffbee641461027557600080fd5b8062fdd58e146101b057806301ffc9a7146101e35780630bdbf6c214610213575b600080fd5b3480156101bc57600080fd5b506101d06101cb36600461261f565b6105a1565b6040519081526020015b60405180910390f35b3480156101ef57600080fd5b506102036101fe366004612677565b6105d8565b60405190151581526020016101da565b34801561021f57600080fd5b5061023361022e366004612722565b6106bb565b005b34801561024157600080fd5b50610255610250366004612800565b610935565b6040516101da9190612887565b61023361027036600461289a565b610c75565b34801561028157600080fd5b50610295610290366004612800565b610dce565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101da565b3480156102c657600080fd5b506102336102d5366004612a64565b610e05565b3480156102e657600080fd5b50610233610ed0565b3480156102fb57600080fd5b5061030f61030a366004612b0e565b610fc8565b6040516101da9190612c0a565b34801561032857600080fd5b506101d0600181565b34801561033d57600080fd5b506101d0600b5481565b34801561035357600080fd5b506102336110ae565b34801561036857600080fd5b506102336110c2565b34801561037d57600080fd5b5061023361038c366004612c1d565b611139565b34801561039d57600080fd5b506101d0600a5481565b3480156103b357600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610295565b3480156103de57600080fd5b506103f26103ed366004612800565b6112b8565b6040516101da9796959493929190612d49565b34801561041157600080fd5b50610233610420366004612ddb565b6114d7565b34801561043157600080fd5b506101d0610440366004612800565b60009081526008602052604090206003015468010000000000000000900467ffffffffffffffff1690565b34801561047757600080fd5b50610233610486366004612e0e565b6114e6565b34801561049757600080fd5b506101d06104a6366004612e6c565b6115ec565b3480156104b757600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff16610295565b3480156104e257600080fd5b506102556116c3565b3480156104f757600080fd5b50610203610506366004612e87565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205460ff1690565b34801561054d57600080fd5b5061023361055c366004612eb1565b61177e565b34801561056d57600080fd5b5061023361057c366004612e6c565b61183c565b34801561058d57600080fd5b5061023361059c366004612f16565b6118ec565b600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061066b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b806105d257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146105d2565b6106c36119a8565b6106ce826001612f78565b63ffffffff166009805490501015610712576040517fa9a25f6700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a6000815461072190612f9c565b90915550600a54600090815260086020526040902080610742898b8361306f565b506001810161075287898361306f565b506003810180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000004363ffffffff16021790556107996201518042613189565b6003820180546fffffffffffffffffffffffffffffffff8516700100000000000000000000000000000000026fffffffffffffffffffffffff0000000067ffffffffffffffff9490941668010000000000000000029390931667ffffffff000000009091161763ffffffff861617919091179055831561090c5760028101541561082b5761082b6002820160006125c9565b60005b60ff811685111561090a57816002016108a187878460ff168181106108555761085561319c565b905060200281019061086791906131cb565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119fb92505050565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790558061090281613230565b91505061082e565b505b61092a33600a54600160405180602001604052806000815250611ad3565b505050505050505050565b6060600a54821115610973576040517f9430a17e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260086020526040808220815160e0810190925280548290829061099a90612fd4565b80601f01602080910402602001604051908101604052809291908181526020018280546109c690612fd4565b8015610a135780601f106109e857610100808354040283529160200191610a13565b820191906000526020600020905b8154815290600101906020018083116109f657829003601f168201915b50505050508152602001600182018054610a2c90612fd4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5890612fd4565b8015610aa55780601f10610a7a57610100808354040283529160200191610aa5565b820191906000526020600020905b815481529060010190602001808311610a8857829003601f168201915b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610b1457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ae9575b50505091835250506003919091015463ffffffff808216602084015264010000000082048116604084015268010000000000000000820467ffffffffffffffff166060808501919091527001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff1660809093019290925282015160098054939450929116908110610baa57610baa61319c565b6000918252602090912001546040517fa2f31bf300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063a2f31bf390610c0b908690859060040161324f565b600060405180830381865afa158015610c28573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c6e9190810190613332565b9392505050565b600a54821115610cb1576040517f9430a17e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cbf4861ea606133a9565b90506000610ccd83836133a9565b905034811115610d09576040517ff31a165400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260086020526040902060030154429068010000000000000000900467ffffffffffffffff161015610d6b576040517f589ed34b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d8633858560405180602001604052806000815250611ad3565b60408051838152602081018590523381830152905185917f160ecdf0b6c0a56992b4f6fad717f85f3b0bba236ec571bf26ca5cf4fe61101e919081900360600190a250505050565b60098181548110610dde57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b3373ffffffffffffffffffffffffffffffffffffffff86168114801590610e5f575073ffffffffffffffffffffffffffffffffffffffff80871660009081526003602090815260408083209385168352929052205460ff16155b15610ebb576040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152871660248201526044015b60405180910390fd5b610ec88686868686611b56565b505050505050565b610ed86119a8565b476000610efa60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610f51576040519150601f19603f3d011682016040523d82523d6000602084013e610f56565b606091505b5050905080610f91576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518281527f4e70a604b23a8edee2b1d0a656e9b9c00b73ad8bb1afc2c59381ee9f69197de79060200160405180910390a15050565b6060815183511461101257815183516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610eb2565b6000835167ffffffffffffffff81111561102e5761102e6128bc565b604051908082528060200260200182016040528015611057578160200160208202803683370190505b50905060005b84518110156110a657602080820286010151611081906020808402870101516105a1565b8282815181106110935761109361319c565b602090810291909101015260010161105d565b509392505050565b6110b66119a8565b6110c06000611c0a565b565b600154339073ffffffffffffffffffffffffffffffffffffffff16811461112d576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610eb2565b61113681611c0a565b50565b600b5415611173576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60046111808a8c8361306f565b50600561118e888a8361306f565b50600661119c86888361306f565b5060005b60ff811684111561122e5760076111c5868660ff85168181106108555761085561319c565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790558061122681613230565b9150506111a0565b50600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905543600b556112ac81611c0a565b50505050505050505050565b600081815260086020526040812060038101548154606093849384939192839283928392909182916001830191600284019163ffffffff8083169264010000000081049091169168010000000000000000820467ffffffffffffffff169170010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690879061134890612fd4565b80601f016020809104026020016040519081016040528092919081815260200182805461137490612fd4565b80156113c15780601f10611396576101008083540402835291602001916113c1565b820191906000526020600020905b8154815290600101906020018083116113a457829003601f168201915b505050505096508580546113d490612fd4565b80601f016020809104026020016040519081016040528092919081815260200182805461140090612fd4565b801561144d5780601f106114225761010080835404028352916020019161144d565b820191906000526020600020905b81548152906001019060200180831161143057829003601f168201915b50505050509550848054806020026020016040519081016040528092919081815260200182805480156114b657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161148b575b50505050509450975097509750975097509750975050919395979092949650565b6114e2338383611c3b565b5050565b6114ee6119a8565b600a548411611528576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526008602052604090206002810154158015906115465750815b15611559576115596002820160006125c9565b60005b60ff8116841115610ec8578160020161158386868460ff168181106108555761085561319c565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055806115e481613230565b91505061155c565b60006115f66119a8565b600980546001808201835560008381527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871617905591549091611675916133c0565b9050808373ffffffffffffffffffffffffffffffffffffffff167fbe12a6cdcfa8711b87484030475533b479a18855d1d39eb97f1f0f3fd6e111ff60405160405180910390a390505b919050565b6040517f033918d300000000000000000000000000000000000000000000000000000000815260609073c1f6a976906283a6ef713ab4439c8e79faf188a39063033918d39061171690600490810161346e565b600060405180830381865af4158015611733573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526117799190810190613332565b905090565b3373ffffffffffffffffffffffffffffffffffffffff861681148015906117d8575073ffffffffffffffffffffffffffffffffffffffff80871660009081526003602090815260408083209385168352929052205460ff16155b1561182f576040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808316600483015287166024820152604401610eb2565b610ec88686868686611d23565b6118446119a8565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556118a760005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b73ffffffffffffffffffffffffffffffffffffffff83163314801590611943575073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020908152604080832033845290915290205460ff16155b15611998576040517fe237d92200000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84166024820152604401610eb2565b6119a3838383611dfe565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110c0576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610eb2565b60008082604051602001611a0f9190613541565b6040516020818303038152906040529050600081604051602001611a339190613567565b60405160208183030381529060405290508051602082016000f0925073ffffffffffffffffffffffffffffffffffffffff8316611acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4445504c4f594d454e545f4641494c45440000000000000000000000000000006044820152606401610eb2565b5050919050565b73ffffffffffffffffffffffffffffffffffffffff8416611b23576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610eb2565b60408051600180825260208201869052818301908152606082018590526080820190925290610ec8600087848487611e89565b73ffffffffffffffffffffffffffffffffffffffff8416611ba6576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610eb2565b73ffffffffffffffffffffffffffffffffffffffff8516611bf6576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610eb2565b611c038585858585611e89565b5050505050565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561113681611ee9565b73ffffffffffffffffffffffffffffffffffffffff8216611c8b576040517fced3e10000000000000000000000000000000000000000000000000000000000815260006004820152602401610eb2565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8416611d73576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610eb2565b73ffffffffffffffffffffffffffffffffffffffff8516611dc3576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610eb2565b60408051600180825260208201869052818301908152606082018590526080820190925290611df58787848487611e89565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316611e4e576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610eb2565b604080516001808252602082018590528183019081526060820184905260a08201909252600060808201818152919291611c03918791859085905b611e9585858585611f5e565b73ffffffffffffffffffffffffffffffffffffffff841615611c035782513390600103611edb5760208481015190840151611ed4838989858589612246565b5050610ec8565b610ec8818787878787612438565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051825114611fa657815181516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610eb2565b3360005b83518110156121195760208181028581018201519085019091015173ffffffffffffffffffffffffffffffffffffffff8816156120ae57600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c16845290915290205481811015612078576040517f03dee4c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a166004820152602481018290526044810183905260648101849052608401610eb2565b600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290209082900390555b73ffffffffffffffffffffffffffffffffffffffff87161561210f57600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915281208054839290612109908490613189565b90915550505b5050600101611faa565b5082516001036121c157602083015160009060208401519091508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516121b2929190918252602082015260400190565b60405180910390a45050611c03565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516122379291906135ac565b60405180910390a45050505050565b73ffffffffffffffffffffffffffffffffffffffff84163b15610ec8576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e61906122bd90899089908890889088906004016135d1565b6020604051808303816000875af1925050508015612316575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261231391810190613621565b60015b6123a5573d808015612344576040519150601f19603f3d011682016040523d82523d6000602084013e612349565b606091505b50805160000361239d576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602401610eb2565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014611df5576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602401610eb2565b73ffffffffffffffffffffffffffffffffffffffff84163b15610ec8576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c81906124af908990899088908890889060040161363e565b6020604051808303816000875af1925050508015612508575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261250591810190613621565b60015b612536573d808015612344576040519150601f19603f3d011682016040523d82523d6000602084013e612349565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014611df5576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602401610eb2565b508054600082559060005260206000209081019061113691905b808211156125f757600081556001016125e3565b5090565b803573ffffffffffffffffffffffffffffffffffffffff811681146116be57600080fd5b6000806040838503121561263257600080fd5b61263b836125fb565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461113657600080fd5b60006020828403121561268957600080fd5b8135610c6e81612649565b60008083601f8401126126a657600080fd5b50813567ffffffffffffffff8111156126be57600080fd5b6020830191508360208285010111156126d657600080fd5b9250929050565b60008083601f8401126126ef57600080fd5b50813567ffffffffffffffff81111561270757600080fd5b6020830191508360208260051b85010111156126d657600080fd5b60008060008060008060008060a0898b03121561273e57600080fd5b883567ffffffffffffffff8082111561275657600080fd5b6127628c838d01612694565b909a50985060208b013591508082111561277b57600080fd5b6127878c838d01612694565b909850965060408b01359150808211156127a057600080fd5b506127ad8b828c016126dd565b909550935050606089013563ffffffff811681146127ca57600080fd5b915060808901356fffffffffffffffffffffffffffffffff811681146127ef57600080fd5b809150509295985092959890939650565b60006020828403121561281257600080fd5b5035919050565b60005b8381101561283457818101518382015260200161281c565b50506000910152565b60008151808452612855816020860160208601612819565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c6e602083018461283d565b600080604083850312156128ad57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612932576129326128bc565b604052919050565b600067ffffffffffffffff821115612954576129546128bc565b5060051b60200190565b600082601f83011261296f57600080fd5b8135602061298461297f8361293a565b6128eb565b8083825260208201915060208460051b8701019350868411156129a657600080fd5b602086015b848110156129c257803583529183019183016129ab565b509695505050505050565b600067ffffffffffffffff8211156129e7576129e76128bc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112612a2457600080fd5b8135612a3261297f826129cd565b818152846020838601011115612a4757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215612a7c57600080fd5b612a85866125fb565b9450612a93602087016125fb565b9350604086013567ffffffffffffffff80821115612ab057600080fd5b612abc89838a0161295e565b94506060880135915080821115612ad257600080fd5b612ade89838a0161295e565b93506080880135915080821115612af457600080fd5b50612b0188828901612a13565b9150509295509295909350565b60008060408385031215612b2157600080fd5b823567ffffffffffffffff80821115612b3957600080fd5b818501915085601f830112612b4d57600080fd5b81356020612b5d61297f8361293a565b82815260059290921b84018101918181019089841115612b7c57600080fd5b948201945b83861015612ba157612b92866125fb565b82529482019490820190612b81565b96505086013592505080821115612bb757600080fd5b50612bc48582860161295e565b9150509250929050565b60008151808452602080850194506020840160005b83811015612bff57815187529582019590820190600101612be3565b509495945050505050565b602081526000610c6e6020830184612bce565b60008060008060008060008060008060c08b8d031215612c3c57600080fd5b8a3567ffffffffffffffff80821115612c5457600080fd5b612c608e838f01612694565b909c509a5060208d0135915080821115612c7957600080fd5b612c858e838f01612694565b909a50985060408d0135915080821115612c9e57600080fd5b612caa8e838f01612694565b909850965060608d0135915080821115612cc357600080fd5b50612cd08d828e016126dd565b9095509350612ce3905060808c016125fb565b9150612cf160a08c016125fb565b90509295989b9194979a5092959850565b60008151808452602080850194506020840160005b83811015612bff57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612d17565b60e081526000612d5c60e083018a61283d565b8281036020840152612d6e818a61283d565b90508281036040840152612d828189612d02565b63ffffffff97881660608501529590961660808301525067ffffffffffffffff9290921660a08301526fffffffffffffffffffffffffffffffff1660c090910152949350505050565b803580151581146116be57600080fd5b60008060408385031215612dee57600080fd5b612df7836125fb565b9150612e0560208401612dcb565b90509250929050565b60008060008060608587031215612e2457600080fd5b84359350602085013567ffffffffffffffff811115612e4257600080fd5b612e4e878288016126dd565b9094509250612e61905060408601612dcb565b905092959194509250565b600060208284031215612e7e57600080fd5b610c6e826125fb565b60008060408385031215612e9a57600080fd5b612ea3836125fb565b9150612e05602084016125fb565b600080600080600060a08688031215612ec957600080fd5b612ed2866125fb565b9450612ee0602087016125fb565b93506040860135925060608601359150608086013567ffffffffffffffff811115612f0a57600080fd5b612b0188828901612a13565b600080600060608486031215612f2b57600080fd5b612f34846125fb565b95602085013595506040909401359392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff818116838216019080821115612f9557612f95612f49565b5092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612fcd57612fcd612f49565b5060010190565b600181811c90821680612fe857607f821691505b602082108103613021577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f8211156119a3576000816000526020600020601f850160051c810160208610156130505750805b601f850160051c820191505b81811015610ec85782815560010161305c565b67ffffffffffffffff831115613087576130876128bc565b61309b836130958354612fd4565b83613027565b6000601f8411600181146130ed57600085156130b75750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611c03565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561313c578685013582556020948501946001909201910161311c565b5086821015613177577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b808201808211156105d2576105d2612f49565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261320057600080fd5b83018035915067ffffffffffffffff82111561321b57600080fd5b6020019150368190038213156126d657600080fd5b600060ff821660ff810361324657613246612f49565b60010192915050565b828152604060208201526000825160e0604084015261327261012084018261283d565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808584030160608601526132ae838361283d565b92506040860151915080858403016080860152506132cc8282612d02565b915050606084015163ffffffff80821660a08601528060808701511660c0860152505060a084015161330a60e085018267ffffffffffffffff169052565b5060c08401516fffffffffffffffffffffffffffffffff811661010085015250949350505050565b60006020828403121561334457600080fd5b815167ffffffffffffffff81111561335b57600080fd5b8201601f8101841361336c57600080fd5b805161337a61297f826129cd565b81815285602083850101111561338f57600080fd5b6133a0826020830160208601612819565b95945050505050565b80820281158282048414176105d2576105d2612f49565b818103818111156105d2576105d2612f49565b600081546133e081612fd4565b8085526020600183811680156133fd576001811461343557613463565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838901528284151560051b8901019550613463565b866000528260002060005b8581101561345b5781548a8201860152908301908401613440565b890184019650505b505050505092915050565b600060208083526080602084015261348960a08401856133d3565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808684030160408701526134c383600189016133d3565b9250808684030160608701526134dc83600289016133d3565b8681039091016080870152600387018054808352600091825260208083209550909201915b8082101561353457845473ffffffffffffffffffffffffffffffffffffffff168352938301939185019190830190613501565b5090979650505050505050565b600081526000825161355a816001850160208701612819565b9190910160010192915050565b7f600b5981380380925939f300000000000000000000000000000000000000000081526000825161359f81600b850160208701612819565b91909101600b0192915050565b6040815260006135bf6040830185612bce565b82810360208401526133a08185612bce565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a0608083015261361660a083018461283d565b979650505050505050565b60006020828403121561363357600080fd5b8151610c6e81612649565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a0604083015261367760a0830186612bce565b82810360608401526136898186612bce565b9050828103608084015261369d818561283d565b9897505050505050505056fea26469706673582212205d9c9c09f6d2f52c2fb180b9ad272b0c454d51c9baa0bdf9d7d59fa1d30f4ddb64736f6c63430008180033