[ { "inputs": [], "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": "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": 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": "recipients", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "airdrop", "outputs": [], "stateMutability": "nonpayable", "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": [ { "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": "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" } ]
610160604052348015610010575f80fd5b506040518060400160405280600f81526020016e233ab1b5902830bab63c9021b7b4b760891b81525080604051806040016040528060018152602001603160f81b8152506040518060400160405280600f81526020016e233ab1b5902830bab63c9021b7b4b760891b815250604051806040016040528060098152602001684675636b5061756c7960b81b81525081600390816100ad9190610402565b5060046100ba8282610402565b506100ca91508390506005610198565b610120526100d9816006610198565b61014052815160208084019190912060e052815190820120610100524660a05261016560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506101933361017f6012600a6105b5565b61018e906409cb81ff406105ca565b6101ca565b61064c565b5f6020835110156101b3576101ac83610207565b90506101c4565b816101be8482610402565b5060ff90505b92915050565b6001600160a01b0382166101f85760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b6102035f8383610244565b5050565b5f80829050601f81511115610231578260405163305a27a960e01b81526004016101ef91906105e1565b805161023c82610616565b179392505050565b6001600160a01b03831661026e578060025f8282546102639190610639565b909155506102de9050565b6001600160a01b0383165f90815260208190526040902054818110156102c05760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016101ef565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166102fa57600280548290039055610318565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161035d91815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061039257607f821691505b6020821081036103b057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156103fd57805f5260205f20601f840160051c810160208510156103db5750805b601f840160051c820191505b818110156103fa575f81556001016103e7565b50505b505050565b81516001600160401b0381111561041b5761041b61036a565b61042f81610429845461037e565b846103b6565b602080601f831160018114610462575f841561044b5750858301515b5f19600386901b1c1916600185901b1785556104b9565b5f85815260208120601f198616915b8281101561049057888601518255948401946001909101908401610471565b50858210156104ad57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561050f57815f19048211156104f5576104f56104c1565b8085161561050257918102915b93841c93908002906104da565b509250929050565b5f82610525575060016101c4565b8161053157505f6101c4565b816001811461054757600281146105515761056d565b60019150506101c4565b60ff841115610562576105626104c1565b50506001821b6101c4565b5060208310610133831016604e8410600b8410161715610590575081810a6101c4565b61059a83836104d5565b805f19048211156105ad576105ad6104c1565b029392505050565b5f6105c360ff841683610517565b9392505050565b80820281158282048414176101c4576101c46104c1565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156103b0575f1960209190910360031b1b16919050565b808201808211156101c4576101c46104c1565b60805160a05160c05160e0516101005161012051610140516114c361069d5f395f6109f101525f6109c401525f61096d01525f61094501525f6108a001525f6108ca01525f6108f401526114c35ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806370a082311161008857806395d89b411161006357806395d89b41146101de578063a9059cbb146101e6578063d505accf146101f9578063dd62ed3e1461020c575f80fd5b806370a082311461017b5780637ecebe00146101b057806384b0196e146101c3575f80fd5b806323b872dd116100c357806323b872dd1461013c578063313ce5671461014f5780633644e5151461015e5780636724348214610166575f80fd5b806306fdde03146100e9578063095ea7b31461010757806318160ddd1461012a575b5f80fd5b6100f1610251565b6040516100fe91906110e2565b60405180910390f35b61011a610115366004611123565b6102e1565b60405190151581526020016100fe565b6002545b6040519081526020016100fe565b61011a61014a36600461114b565b6102fa565b604051601281526020016100fe565b61012e61031d565b6101796101743660046111cc565b61032b565b005b61012e610189366004611233565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b61012e6101be366004611233565b6104b2565b6101cb6104dc565b6040516100fe979695949392919061124c565b6100f161053a565b61011a6101f4366004611123565b610549565b61017961020736600461130c565b610556565b61012e61021a366004611379565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b606060038054610260906113aa565b80601f016020809104026020016040519081016040528092919081815260200182805461028c906113aa565b80156102d75780601f106102ae576101008083540402835291602001916102d7565b820191905f5260205f20905b8154815290600101906020018083116102ba57829003601f168201915b5050505050905090565b5f336102ee8185856106ff565b60019150505b92915050565b5f33610307858285610711565b6103128585856107de565b506001949350505050565b5f610326610887565b905090565b8281146103bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f417272617973206d757374206265206f66207468652073616d65206c656e677460448201527f680000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6064831115610450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f43616e6e6f742061697264726f7020746f206d6f7265207468616e203130302060448201527f726563697069656e747320617420612074696d6500000000000000000000000060648201526084016103b6565b5f5b838110156104ab576104a333868684818110610470576104706113fb565b90506020020160208101906104859190611233565b858585818110610497576104976113fb565b905060200201356107de565b600101610452565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600760205260408120546102f4565b5f6060805f805f60606104ed6109bd565b6104f56109ea565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b606060048054610260906113aa565b5f336102ee8185856107de565b83421115610593576040517f62791302000000000000000000000000000000000000000000000000000000008152600481018590526024016103b6565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886105eb8c73ffffffffffffffffffffffffffffffffffffffff165f90815260076020526040902080546001810190915590565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61065282610a17565b90505f61066182878787610a5e565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106e8576040517f4b800e4600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301528b1660248201526044016103b6565b6106f38a8a8a6106ff565b50505050505050505050565b61070c8383836001610a8a565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107d857818110156107ca576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064016103b6565b6107d884848484035f610a8a565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661082d576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f60048201526024016103b6565b73ffffffffffffffffffffffffffffffffffffffff821661087c576040517fec442f050000000000000000000000000000000000000000000000000000000081525f60048201526024016103b6565b61070c838383610bcf565b5f3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156108ec57507f000000000000000000000000000000000000000000000000000000000000000046145b1561091657507f000000000000000000000000000000000000000000000000000000000000000090565b610326604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60606103267f00000000000000000000000000000000000000000000000000000000000000006005610d76565b60606103267f00000000000000000000000000000000000000000000000000000000000000006006610d76565b5f6102f4610a23610887565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f805f80610a6e88888888610e1f565b925092509250610a7e8282610f12565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416610ad9576040517fe602df050000000000000000000000000000000000000000000000000000000081525f60048201526024016103b6565b73ffffffffffffffffffffffffffffffffffffffff8316610b28576040517f94280d620000000000000000000000000000000000000000000000000000000081525f60048201526024016103b6565b73ffffffffffffffffffffffffffffffffffffffff8085165f90815260016020908152604080832093871683529290522082905580156107d8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bc191815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c06578060025f828254610bfb9190611428565b90915550610cb69050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015610c8b576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103b6565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610cdf57600280548290039055610d0a565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d6991815260200190565b60405180910390a3505050565b606060ff8314610d9057610d8983611019565b90506102f4565b818054610d9c906113aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc8906113aa565b8015610e135780601f10610dea57610100808354040283529160200191610e13565b820191905f5260205f20905b815481529060010190602001808311610df657829003601f168201915b505050505090506102f4565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610e5857505f91506003905082610f08565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610ea9573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610eff57505f925060019150829050610f08565b92505f91508190505b9450945094915050565b5f826003811115610f2557610f25611460565b03610f2e575050565b6001826003811115610f4257610f42611460565b03610f79576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115610f8d57610f8d611460565b03610fc7576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024016103b6565b6003826003811115610fdb57610fdb611460565b03611015576040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600481018290526024016103b6565b5050565b60605f61102583611056565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f8111156102f4576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6110f46020830184611096565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461111e575f80fd5b919050565b5f8060408385031215611134575f80fd5b61113d836110fb565b946020939093013593505050565b5f805f6060848603121561115d575f80fd5b611166846110fb565b9250611174602085016110fb565b9150604084013590509250925092565b5f8083601f840112611194575f80fd5b50813567ffffffffffffffff8111156111ab575f80fd5b6020830191508360208260051b85010111156111c5575f80fd5b9250929050565b5f805f80604085870312156111df575f80fd5b843567ffffffffffffffff808211156111f6575f80fd5b61120288838901611184565b9096509450602087013591508082111561121a575f80fd5b5061122787828801611184565b95989497509550505050565b5f60208284031215611243575f80fd5b6110f4826110fb565b7fff00000000000000000000000000000000000000000000000000000000000000881681525f602060e0602084015261128860e084018a611096565b838103604085015261129a818a611096565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b818110156112fa578351835292840192918401916001016112de565b50909c9b505050505050505050505050565b5f805f805f805f60e0888a031215611322575f80fd5b61132b886110fb565b9650611339602089016110fb565b95506040880135945060608801359350608088013560ff8116811461135c575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f806040838503121561138a575f80fd5b611393836110fb565b91506113a1602084016110fb565b90509250929050565b600181811c908216806113be57607f821691505b6020821081036113f5577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b808201808211156102f4577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220fef7449ed4673b601675ac14c0e806e253f41b4552f7029ac381d0e1ebde051e64736f6c63430008190033