[ { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "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": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newMaxTxAmount", "type": "uint256" } ], "name": "MaxTxAmountUpdated", "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": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maxTxAmount", "type": "uint256" } ], "name": "setMaxTxAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
610160604052348015610010575f80fd5b506040516130b83803806130b8833981810160405281019061003291906108ac565b806040518060400160405280600581526020017f555041c2b2000000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600c81526020017f557061205570617374616a6100000000000000000000000000000000000000008152506040518060400160405280600581526020017f555041c2b2000000000000000000000000000000000000000000000000000000815250816003908161011b9190610b11565b50806004908161012b9190610b11565b5050506101426005836102c560201b90919060201c565b610120818152505061015e6006826102c560201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a0818152505061019b61031260201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610249575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016102409190610bef565b60405180910390fd5b6102588161036c60201b60201c565b506102913361026b61042f60201b60201c565b600a6102779190610d70565b633b9aca006102869190610dba565b61043760201b60201c565b61029f61042f60201b60201c565b600a6102ab9190610d70565b629896806102b99190610dba565b6009819055505061109b565b5f6020835110156102e6576102df836104bc60201b60201c565b905061030c565b826102f68361052160201b60201c565b5f0190816103049190610b11565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001610351959493929190610e22565b60405160208183030381529060405280519060200120905090565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104a7575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161049e9190610bef565b60405180910390fd5b6104b85f838361052a60201b60201c565b5050565b5f80829050601f8151111561050857826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016104ff9190610ed9565b60405180910390fd5b80518161051490610f26565b5f1c175f1b915050919050565b5f819050919050565b61053861060d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156105ac575061057c61060d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156105f7576009548111156105f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ed90610ffc565b60405180910390fd5b5b61060883838361063560201b60201c565b505050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610685578060025f828254610679919061101a565b92505081905550610753565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561070e578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016107059392919061104d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361079a578060025f82825403925050819055506107e4565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108419190611082565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61087b82610852565b9050919050565b61088b81610871565b8114610895575f80fd5b50565b5f815190506108a681610882565b92915050565b5f602082840312156108c1576108c061084e565b5b5f6108ce84828501610898565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061095257607f821691505b6020821081036109655761096461090e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026109c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261098c565b6109d1868361098c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a15610a10610a0b846109e9565b6109f2565b6109e9565b9050919050565b5f819050919050565b610a2e836109fb565b610a42610a3a82610a1c565b848454610998565b825550505050565b5f90565b610a56610a4a565b610a61818484610a25565b505050565b5b81811015610a8457610a795f82610a4e565b600181019050610a67565b5050565b601f821115610ac957610a9a8161096b565b610aa38461097d565b81016020851015610ab2578190505b610ac6610abe8561097d565b830182610a66565b50505b505050565b5f82821c905092915050565b5f610ae95f1984600802610ace565b1980831691505092915050565b5f610b018383610ada565b9150826002028217905092915050565b610b1a826108d7565b67ffffffffffffffff811115610b3357610b326108e1565b5b610b3d825461093b565b610b48828285610a88565b5f60209050601f831160018114610b79575f8415610b67578287015190505b610b718582610af6565b865550610bd8565b601f198416610b878661096b565b5f5b82811015610bae57848901518255600182019150602085019450602081019050610b89565b86831015610bcb5784890151610bc7601f891682610ada565b8355505b6001600288020188555050505b505050505050565b610be981610871565b82525050565b5f602082019050610c025f830184610be0565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610c8a57808604811115610c6657610c65610c08565b5b6001851615610c755780820291505b8081029050610c8385610c35565b9450610c4a565b94509492505050565b5f82610ca25760019050610d5d565b81610caf575f9050610d5d565b8160018114610cc55760028114610ccf57610cfe565b6001915050610d5d565b60ff841115610ce157610ce0610c08565b5b8360020a915084821115610cf857610cf7610c08565b5b50610d5d565b5060208310610133831016604e8410600b8410161715610d335782820a905083811115610d2e57610d2d610c08565b5b610d5d565b610d408484846001610c41565b92509050818404811115610d5757610d56610c08565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610d7a826109e9565b9150610d8583610d64565b9250610db27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610c93565b905092915050565b5f610dc4826109e9565b9150610dcf836109e9565b9250828202610ddd816109e9565b91508282048414831517610df457610df3610c08565b5b5092915050565b5f819050919050565b610e0d81610dfb565b82525050565b610e1c816109e9565b82525050565b5f60a082019050610e355f830188610e04565b610e426020830187610e04565b610e4f6040830186610e04565b610e5c6060830185610e13565b610e696080830184610be0565b9695505050505050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610eab826108d7565b610eb58185610e73565b9350610ec5818560208601610e83565b610ece81610e91565b840191505092915050565b5f6020820190508181035f830152610ef18184610ea1565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f610f1d8251610dfb565b80915050919050565b5f610f3082610ef9565b82610f3a84610f03565b9050610f4581610f12565b92506020821015610f8557610f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080261098c565b831692505b5050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e7400000000000000000000000000000000000000000000000000602082015250565b5f610fe6602783610e73565b9150610ff182610f8c565b604082019050919050565b5f6020820190508181035f83015261101381610fda565b9050919050565b5f611024826109e9565b915061102f836109e9565b925082820190508082111561104757611046610c08565b5b92915050565b5f6060820190506110605f830186610be0565b61106d6020830185610e13565b61107a6040830184610e13565b949350505050565b5f6020820190506110955f830184610e13565b92915050565b60805160a05160c05160e051610100516101205161014051611fcc6110ec5f395f610d0301525f610cc801525f6110b401525f61109301525f610a7c01525f610ad201525f610afb0152611fcc5ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c80637ecebe00116100a0578063a9059cbb1161006f578063a9059cbb146102af578063d505accf146102df578063dd62ed3e146102fb578063ec28438a1461032b578063f2fde38b1461034757610109565b80637ecebe001461021f57806384b0196e1461024f5780638da5cb5b1461027357806395d89b411461029157610109565b8063313ce567116100dc578063313ce567146101a95780633644e515146101c757806370a08231146101e5578063715018a61461021557610109565b806306fdde031461010d578063095ea7b31461012b57806318160ddd1461015b57806323b872dd14610179575b5f80fd5b610115610363565b6040516101229190611783565b60405180910390f35b61014560048036038101906101409190611834565b6103f3565b604051610152919061188c565b60405180910390f35b610163610415565b60405161017091906118b4565b60405180910390f35b610193600480360381019061018e91906118cd565b61041e565b6040516101a0919061188c565b60405180910390f35b6101b161044c565b6040516101be9190611938565b60405180910390f35b6101cf610454565b6040516101dc9190611969565b60405180910390f35b6101ff60048036038101906101fa9190611982565b610462565b60405161020c91906118b4565b60405180910390f35b61021d6104a7565b005b61023960048036038101906102349190611982565b6104ba565b60405161024691906118b4565b60405180910390f35b6102576104cb565b60405161026a9796959493929190611aad565b60405180910390f35b61027b610570565b6040516102889190611b2f565b60405180910390f35b610299610598565b6040516102a69190611783565b60405180910390f35b6102c960048036038101906102c49190611834565b610628565b6040516102d6919061188c565b60405180910390f35b6102f960048036038101906102f49190611b9c565b61064a565b005b61031560048036038101906103109190611c39565b61078f565b60405161032291906118b4565b60405180910390f35b61034560048036038101906103409190611c77565b610811565b005b610361600480360381019061035c9190611982565b61085a565b005b60606003805461037290611ccf565b80601f016020809104026020016040519081016040528092919081815260200182805461039e90611ccf565b80156103e95780601f106103c0576101008083540402835291602001916103e9565b820191905f5260205f20905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b5f806103fd6108de565b905061040a8185856108e5565b600191505092915050565b5f600254905090565b5f806104286108de565b90506104358582856108f7565b610440858585610989565b60019150509392505050565b5f6012905090565b5f61045d610a79565b905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6104af610b2f565b6104b85f610bb6565b565b5f6104c482610c79565b9050919050565b5f6060805f805f60606104dc610cbf565b6104e4610cfa565b46305f801b5f67ffffffffffffffff81111561050357610502611cff565b5b6040519080825280602002602001820160405280156105315781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105a790611ccf565b80601f01602080910402602001604051908101604052809291908181526020018280546105d390611ccf565b801561061e5780601f106105f55761010080835404028352916020019161061e565b820191905f5260205f20905b81548152906001019060200180831161060157829003601f168201915b5050505050905090565b5f806106326108de565b905061063f818585610989565b600191505092915050565b8342111561068f57836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161068691906118b4565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106bd8c610d35565b896040516020016106d396959493929190611d2c565b6040516020818303038152906040528051906020012090505f6106f582610d88565b90505f61070482878787610da1565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461077857808a6040517f4b800e4600000000000000000000000000000000000000000000000000000000815260040161076f929190611d8b565b60405180910390fd5b6107838a8a8a6108e5565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610819610b2f565b806009819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf8160405161084f91906118b4565b60405180910390a150565b610862610b2f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108d2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108c99190611b2f565b60405180910390fd5b6108db81610bb6565b50565b5f33905090565b6108f28383836001610dcf565b505050565b5f610902848461078f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109835781811015610974578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161096b93929190611db2565b60405180910390fd5b61098284848484035f610dcf565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109f9575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109f09190611b2f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a69575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a609190611b2f565b60405180910390fd5b610a74838383610f9e565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610af457507f000000000000000000000000000000000000000000000000000000000000000046145b15610b21577f00000000000000000000000000000000000000000000000000000000000000009050610b2c565b610b2961106f565b90505b90565b610b376108de565b73ffffffffffffffffffffffffffffffffffffffff16610b55610570565b73ffffffffffffffffffffffffffffffffffffffff1614610bb457610b786108de565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610bab9190611b2f565b60405180910390fd5b565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060610cf560057f000000000000000000000000000000000000000000000000000000000000000061110490919063ffffffff16565b905090565b6060610d3060067f000000000000000000000000000000000000000000000000000000000000000061110490919063ffffffff16565b905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f610d9a610d94610a79565b836111b1565b9050919050565b5f805f80610db1888888886111f1565b925092509250610dc182826112d8565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e3f575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e369190611b2f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610eaf575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ea69190611b2f565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610f98578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f8f91906118b4565b60405180910390a35b50505050565b610fa6610570565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156110145750610fe4610570565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561105f5760095481111561105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590611e57565b60405180910390fd5b5b61106a83838361143a565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016110e9959493929190611e75565b60405160208183030381529060405280519060200120905090565b606060ff5f1b83146111205761111983611653565b90506111ab565b81805461112c90611ccf565b80601f016020809104026020016040519081016040528092919081815260200182805461115890611ccf565b80156111a35780601f1061117a576101008083540402835291602001916111a3565b820191905f5260205f20905b81548152906001019060200180831161118657829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c111561122d575f6003859250925092506112ce565b5f6001888888886040515f81526020016040526040516112509493929190611ec6565b6020604051602081039080840390855afa158015611270573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112c1575f60015f801b935093509350506112ce565b805f805f1b935093509350505b9450945094915050565b5f60038111156112eb576112ea611f09565b5b8260038111156112fe576112fd611f09565b5b0315611436576001600381111561131857611317611f09565b5b82600381111561132b5761132a611f09565b5b03611362576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561137657611375611f09565b5b82600381111561138957611388611f09565b5b036113cd57805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016113c491906118b4565b60405180910390fd5b6003808111156113e0576113df611f09565b5b8260038111156113f3576113f2611f09565b5b0361143557806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161142c9190611969565b60405180910390fd5b5b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361148a578060025f82825461147e9190611f63565b92505081905550611558565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611513578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161150a93929190611db2565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361159f578060025f82825403925050819055506115e9565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161164691906118b4565b60405180910390a3505050565b60605f61165f836116c5565b90505f602067ffffffffffffffff81111561167d5761167c611cff565b5b6040519080825280601f01601f1916602001820160405280156116af5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f81111561170a576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61175582611713565b61175f818561171d565b935061176f81856020860161172d565b6117788161173b565b840191505092915050565b5f6020820190508181035f83015261179b818461174b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117d0826117a7565b9050919050565b6117e0816117c6565b81146117ea575f80fd5b50565b5f813590506117fb816117d7565b92915050565b5f819050919050565b61181381611801565b811461181d575f80fd5b50565b5f8135905061182e8161180a565b92915050565b5f806040838503121561184a576118496117a3565b5b5f611857858286016117ed565b925050602061186885828601611820565b9150509250929050565b5f8115159050919050565b61188681611872565b82525050565b5f60208201905061189f5f83018461187d565b92915050565b6118ae81611801565b82525050565b5f6020820190506118c75f8301846118a5565b92915050565b5f805f606084860312156118e4576118e36117a3565b5b5f6118f1868287016117ed565b9350506020611902868287016117ed565b925050604061191386828701611820565b9150509250925092565b5f60ff82169050919050565b6119328161191d565b82525050565b5f60208201905061194b5f830184611929565b92915050565b5f819050919050565b61196381611951565b82525050565b5f60208201905061197c5f83018461195a565b92915050565b5f60208284031215611997576119966117a3565b5b5f6119a4848285016117ed565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6119e1816119ad565b82525050565b6119f0816117c6565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611a2881611801565b82525050565b5f611a398383611a1f565b60208301905092915050565b5f602082019050919050565b5f611a5b826119f6565b611a658185611a00565b9350611a7083611a10565b805f5b83811015611aa0578151611a878882611a2e565b9750611a9283611a45565b925050600181019050611a73565b5085935050505092915050565b5f60e082019050611ac05f83018a6119d8565b8181036020830152611ad2818961174b565b90508181036040830152611ae6818861174b565b9050611af560608301876118a5565b611b0260808301866119e7565b611b0f60a083018561195a565b81810360c0830152611b218184611a51565b905098975050505050505050565b5f602082019050611b425f8301846119e7565b92915050565b611b518161191d565b8114611b5b575f80fd5b50565b5f81359050611b6c81611b48565b92915050565b611b7b81611951565b8114611b85575f80fd5b50565b5f81359050611b9681611b72565b92915050565b5f805f805f805f60e0888a031215611bb757611bb66117a3565b5b5f611bc48a828b016117ed565b9750506020611bd58a828b016117ed565b9650506040611be68a828b01611820565b9550506060611bf78a828b01611820565b9450506080611c088a828b01611b5e565b93505060a0611c198a828b01611b88565b92505060c0611c2a8a828b01611b88565b91505092959891949750929550565b5f8060408385031215611c4f57611c4e6117a3565b5b5f611c5c858286016117ed565b9250506020611c6d858286016117ed565b9150509250929050565b5f60208284031215611c8c57611c8b6117a3565b5b5f611c9984828501611820565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611ce657607f821691505b602082108103611cf957611cf8611ca2565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c082019050611d3f5f83018961195a565b611d4c60208301886119e7565b611d5960408301876119e7565b611d6660608301866118a5565b611d7360808301856118a5565b611d8060a08301846118a5565b979650505050505050565b5f604082019050611d9e5f8301856119e7565b611dab60208301846119e7565b9392505050565b5f606082019050611dc55f8301866119e7565b611dd260208301856118a5565b611ddf60408301846118a5565b949350505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e7400000000000000000000000000000000000000000000000000602082015250565b5f611e4160278361171d565b9150611e4c82611de7565b604082019050919050565b5f6020820190508181035f830152611e6e81611e35565b9050919050565b5f60a082019050611e885f83018861195a565b611e95602083018761195a565b611ea2604083018661195a565b611eaf60608301856118a5565b611ebc60808301846119e7565b9695505050505050565b5f608082019050611ed95f83018761195a565b611ee66020830186611929565b611ef3604083018561195a565b611f00606083018461195a565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611f6d82611801565b9150611f7883611801565b9250828201905080821115611f9057611f8f611f36565b5b9291505056fea26469706673582212204362f174dcbe975a23f0eb795e836132bd487d42cf1ae6cf25021ced30e593a564736f6c634300081a00330000000000000000000000004c1baed9ad552b4e547ae3224b9b4a0f8d8ffd09